Fix for i810_audio trouble under KDE [Was: Re: PATCH: partial fix for i810_audio.c problems under KDE]

Andris Pavenis (pavenis@latnet.lv)
Mon, 12 Nov 2001 10:13:28 +0200


Verified that included patch together with patch from
Tobias Diedrich <ranma@gmx.at>:

http://www.cs.helsinki.fi/linux/linux-kernel/2001-44/1023.html

completely fixes problems with i810_audio.c I had under KDE (kernel
2.4.13-ac5).

Andris

On Saturday 03 November 2001 11:34, Andris Pavenis wrote:
> 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/