PATCH: partial fix for i810_audio.c problems under KDE [WAS: Re: 2.4.12-ac5: i810_audio does not work#]

Andris Pavenis (pavenis@latnet.lv)
Sat, 3 Nov 2001 11:34:11 +0200


On Monday 22 October 2001 14:32, Alan Cox wrote:
> > reverted one of the patches between 2.4.6-ac1 and 2.4.6-ac2) which mostly
> > works for KDE with fragment size up to 512 bytes. 2.4.7 worked with any
> > fragment size set in kcontrol.
>
> Thanks
>
> > I haven't tested much under GNOME, as I'm starting it very seldom
>
> Gnome esd is very simple in how it drives the hardware - it works in many
> cases where drivers are buggy and arts shows up problems

Verified that reverting one patch from 2.4.6-ac time partially fixes
i810_audio problems for 2.4.13-ac5 for KDE (it works with fragment size not
larger than 512 bytes and gives garbled sound for larger fragment size).
This is the same patch which reverting helped me earlier. Below are diffs.

Andris

--- i810_audio.c.orig Tue Oct 30 09:17:35 2001
+++ i810_audio.c Sat Nov 3 11:00:45 2001
@@ -1405,30 +1405,23 @@
if (dmabuf->count < 0) {
dmabuf->count = 0;
}
- 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;
+ cnt = dmabuf->dmasize - swptr;
+ if(cnt > (dmabuf->dmasize - dmabuf->count))
+ cnt = dmabuf->dmasize - dmabuf->count;
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;
goto 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/