Changeset 57a2208 in mainline for uspace/drv/audio/hdaudio/pcm_iface.c


Ignore:
Timestamp:
2014-09-09T22:10:03Z (10 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c4f67c8
Parents:
b14e9749
Message:

Hound should use the logging framework. Prevent hdaudio from sending frames played event after sending playback termination event. Remove unnecessary delays.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/audio/hdaudio/pcm_iface.c

    rb14e9749 r57a2208  
    149149        hda_t *hda = fun_to_hda(fun);
    150150
     151        hda_lock(hda);
     152
    151153        ddf_msg(LVL_NOTE, "hda_get_buffer(): hda=%p", hda);
    152         if (hda->pcm_stream != NULL)
     154        if (hda->pcm_stream != NULL) {
     155                hda_unlock(hda);
    153156                return EBUSY;
     157        }
    154158
    155159        /* XXX Choose appropriate parameters */
     
    160164        ddf_msg(LVL_NOTE, "hda_get_buffer() - create stream");
    161165        hda->pcm_stream = hda_stream_create(hda, sdir_output, fmt);
    162         if (hda->pcm_stream == NULL)
     166        if (hda->pcm_stream == NULL) {
     167                hda_unlock(hda);
    163168                return EIO;
     169        }
    164170
    165171        ddf_msg(LVL_NOTE, "hda_get_buffer() - fill info");
     
    170176        ddf_msg(LVL_NOTE, "hda_get_buffer() retturing EOK, buffer=%p, size=%zu",
    171177            *buffer, *size);
     178
     179        hda_unlock(hda);
    172180        return EOK;
    173181}
     
    184192
    185193        ddf_msg(LVL_NOTE, "hda_set_event_session()");
     194        hda_lock(hda);
    186195        hda->ev_sess = sess;
     196        hda_unlock(hda);
     197
    187198        return EOK;
    188199}
     
    191202{
    192203        hda_t *hda = fun_to_hda(fun);
     204        async_sess_t *sess;
    193205
    194206        ddf_msg(LVL_NOTE, "hda_get_event_session()");
    195         return hda->ev_sess;
     207
     208        hda_lock(hda);
     209        sess = hda->ev_sess;
     210        hda_unlock(hda);
     211
     212        return sess;
    196213}
    197214
     
    200217        hda_t *hda = fun_to_hda(fun);
    201218
     219        hda_lock(hda);
     220
    202221        ddf_msg(LVL_NOTE, "hda_release_buffer()");
    203         if (hda->pcm_stream == NULL)
     222        if (hda->pcm_stream == NULL) {
     223                hda_unlock(hda);
    204224                return EINVAL;
     225        }
    205226
    206227        hda_stream_destroy(hda->pcm_stream);
    207228        hda->pcm_stream = NULL;
     229
     230        hda_unlock(hda);
    208231        return EOK;
    209232}
     
    216239
    217240        ddf_msg(LVL_NOTE, "hda_start_playback()");
     241        hda_lock(hda);
    218242
    219243        rc = hda_out_converter_setup(hda->ctl->codec, hda->pcm_stream);
    220         if (rc != EOK)
     244        if (rc != EOK) {
     245                hda_unlock(hda);
    221246                return rc;
    222 
    223         async_usleep(1000*1000);
     247        }
     248
    224249        hda_stream_start(hda->pcm_stream);
     250        hda->playing = true;
     251        hda_unlock(hda);
    225252        return EOK;
    226253}
     
    231258
    232259        ddf_msg(LVL_NOTE, "hda_stop_playback()");
     260        hda_lock(hda);
    233261        hda_stream_stop(hda->pcm_stream);
    234262        hda_stream_reset(hda->pcm_stream);
     263        hda->playing = false;
     264        hda_unlock(hda);
    235265
    236266        hda_pcm_event(hda, PCM_EVENT_PLAYBACK_TERMINATED);
Note: See TracChangeset for help on using the changeset viewer.