--- i810_audio.c.12 Wed Dec 19 02:04:06 2001 +++ linux/drivers/sound/i810_audio.c Wed Dec 26 17:31:22 2001 @@ -952,12 +952,12 @@ * the CIV value to the next sg segment to be played so that when * we call start_{dac,adc}, things will operate properly */ - if (!dmabuf->enable && dmabuf->trigger) { - if(rec && dmabuf->count != dmabuf->dmasize) { + if (!dmabuf->enable && dmabuf->trigger && dmabuf->ready) { + if(rec && dmabuf->count < dmabuf->dmasize) { outb((inb(port+OFF_CIV)+1)&31, port+OFF_LVI); __start_adc(state); while( !(inb(port + OFF_CR) & ((1<<4) | (1<<2))) ) ; - } else if(dmabuf->count) { + } else if(!rec && dmabuf->count) { outb((inb(port+OFF_CIV)+1)&31, port+OFF_LVI); __start_dac(state); while( !(inb(port + OFF_CR) & ((1<<4) | (1<<2))) ) ;