--- i810_audio.c-0.11 Fri Dec 7 08:29:51 2001 +++ i810_audio.c Fri Dec 7 11:28:32 2001 @@ -959,7 +959,11 @@ } else { __start_dac(state); } - while( !(inb(port + OFF_CR) & ((1<<4) | (1<<2))) ) ; + if (dmabuf->trigger & PCM_ENABLE_INPUT) { + while( !(inb(port + OFF_CR) & ((1<<4) | (1<<2))) ) ; + } else { + printk (KERN_ERR "i810_audio: __i810_update_lvi called without setting PCM_ENABLE_INPUT\n"); + } } /* swptr - 1 is the tail of our transfer */ @@ -1509,6 +1513,12 @@ x = dmabuf->fragsize - (swptr % dmabuf->fragsize); memset(dmabuf->rawbuf + swptr, '\0', x); } + // There is data waiting to be played + /* + * Force the trigger setting since we would + * deadlock with it set any other way + */ + dmabuf->trigger = PCM_ENABLE_OUTPUT; i810_update_lvi(state,0); ret: set_current_state(TASK_RUNNING);