Re: i810 audio doesn't work with 2.4.9

From: Andris Pavenis (pavenis@latnet.lv)
Date: Thu Aug 23 2001 - 12:15:16 EST


On Thursday 23 August 2001 17:00, Doug Ledford wrote:
> Andris Pavenis wrote:
> > Got incremental diffs between ac versions since 2.4.5.
> > Applied all diffs to 2.4.5 version of i810_audio.c except one between
> > 2.4.6-ac1 and 2.4.6-ac2 As result i810 audio seems to work
>
> Can you send me that incremental patch you left out. I would like to
> look at it to see what's going on.
>

i810_audio.c works for me if all patches except following is aplied (it's a part of update
from 2.4.6-ac1 to 2.4.6-ac2)

Andris

--- linux-2.4.6-ac1/drivers/sound/i810_audio.c Sun Jul 8 20:45:41 2001
+++ linux-2.4.6-ac2/drivers/sound/i810_audio.c Sun Jul 8 21:37:01 2001
@@ -1209,23 +1211,30 @@
                 if (dmabuf->count < 0) {
                         dmabuf->count = 0;
                 }
- cnt = dmabuf->dmasize - swptr;
- if(cnt > (dmabuf->dmasize - dmabuf->count))
- cnt = dmabuf->dmasize - dmabuf->count;
+ cnt = dmabuf->dmasize - dmabuf->fragsize - dmabuf->count;
+ // this is to make the copy_from_user simpler below
+ if(cnt > (dmabuf->dmasize - swptr))
+ cnt = dmabuf->dmasize - swptr;
                 spin_unlock_irqrestore(&state->card->lock, flags);
 
+#ifdef DEBUG2
+ printk(KERN_INFO "i810_audio: i810_write: %d bytes available space\n", cnt);
+#endif
                 if (cnt > count)
                         cnt = count;
                 if (cnt <= 0) {
                         unsigned long tmo;
                         // There is data waiting to be played
- i810_update_lvi(state,0);
                         if(!dmabuf->enable && dmabuf->count) {
                                 /* force the starting incase SETTRIGGER has been used */
                                 /* to stop it, otherwise this is a deadlock situation */
                                 dmabuf->trigger |= PCM_ENABLE_OUTPUT;
                                 start_dac(state);
                         }
+ // Update the LVI pointer in case we have already
+ // written data in this syscall and are just waiting
+ // on the tail bit of data
+ i810_update_lvi(state,0);
                         if (file->f_flags & O_NONBLOCK) {
                                 if (!ret) ret = -EAGAIN;
                                 return ret;

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Aug 23 2001 - 21:00:59 EST