Hi, I am writing a PCM driver on a Soc for 2.6.10 kernel. The test code I'm using is from alsa-lib-1.0.6rc1/test/pcm.c. The runtime log gives me like this... ----------------------------------------------------------------- open callback: hw params callback: alloc result = 1, buffer bytes = 4608
/* --------- HW params ------------- */ format = 2, rate = 44100, channels= 2, period_size = 288, periods = 4, buffer_size = 1152
prepare callback /* --------- Runtime Info ---------- */ state = 1 (SNDRV_PCM_STATE_SETUP), hw_ptr = 0, appl_ptr = 0, avail_min = 288 avail_max = 0, hw_ptr_base = 0, hw_ptr_interrupt = 0
trigger callback: START
Codec Do Copy: /* --------- Runtime Info ---------- */ state = 3 (SNDRV_PCM_STATE_RUNNING), hw_ptr = 0, appl_ptr = 1152, avail_min = 288 avail_max = 0, hw_ptr_base = 0, hw_ptr_interrupt = 0
pointer callback: hw pointer: 288 (return value of pointer callback)
Codec Do Copy: /* --------- Runtime Info ---------- */ state = 3 (SNDRV_PCM_STATE_RUNNING), hw_ptr = 288, appl_ptr = 1152, avail_min = 288 avail_max = 288, hw_ptr_base = 0, hw_ptr_interrupt = 288
pointer callback: hw pointer: 576 (return value of pointer callback)
Codec Do Copy: /* --------- Runtime Info ---------- */ state = 3 (SNDRV_PCM_STATE_RUNNING), hw_ptr = 576, appl_ptr = 1152, avail_min = 288 avail_max = 576, hw_ptr_base = 0, hw_ptr_interrupt = 576
pointer callback: hw pointer: 864 (return value of pointer callback)
Codec Do Copy: /* --------- Runtime Info ---------- */ state = 3 (SNDRV_PCM_STATE_RUNNING), hw_ptr = 864, appl_ptr = 1152, avail_min = 288 avail_max = 864, hw_ptr_base = 0, hw_ptr_interrupt = 864
pointer callback: hw pointer: 0 (return value of pointer callback)
trigger callback: STOP prepare callback /* --------- Runtime Info ---------- */ state = 4 (SNDRV_PCM_STATE_XRUN), hw_ptr = 1152, appl_ptr = 1152, avail_min = 288 avail_max = 1152, hw_ptr_base = 1152, hw_ptr_interrupt = 1152 -----------------------------------------------------------------
The kernel hangs after prepare callback, from strace, I can see a endless ioctl(4, ..., ...) repeated. Does anyone have a few pointers on what is going wrong?
Best Regards, Jonathan