Re: Linux-2.4.20-pre4-ac1: i810_audio broken

Andris Pavenis
2002-08-28T15:56:11Z

On Wednesday 28 August 2002 18:21, Doug Ledford wrote:
> On Wed, Aug 28, 2002 at 04:22:30PM +0300, Andris Pavenis wrote:
> > On Wednesday 28 August 2002 15:51, Juergen Sawinski wrote:
> > > Can you drop in the old (working) source into the new tree and see if
> > > that works? If that works I'll try making a step by step patch series,
> > > to see what breaks it.
> >
> > Today's tests were done in that way (I only replaced i810_audio.c,
> > removed i810_audio.o, run 'make modules' and 'make modules_install' and
> > tested the results). As I wrote earlier it seems that Dough's patch (to
> > 2.4.20-pre1-ac2) broke driver
>
> (In an email Juergen sent to me privately he mentioned that on the ICH4
> the CIV register is now read-only where as on previous ICH chips it was
> read-write, which is something I missed as far as changes to the chip are
> concerned)
>
> Now, given the tidbit of information above, I would expect ICH4 chipsets
> to break with the driver. We currently rely upon the ability to set the
> CIV register to what we want in order to start the DMA where we want. If
> that's now readonly, I'll have to rethink how I reset the DMA hardware and
> how I will have to start recording the new DMA position instead of setting
> the new DMA position. The one thing about this though, I would expect
> this issue to cause previously non-working ICH4 chips to work poorly with
> my patch instead of previously working ICH4 chips to now start working
> poorly since my patch didn't change the (/me stops mid-sentence and
> realizes that "yes, in fact there is a change in my patch to base DMA
> operations that could cause this"). Hmmm...backup....try backing out my
> changes to stop_dac and stop_adc (the part where I change how we do a DMA
> engine reset every time we stop the dac and adc) and see if that solves
> your problem. The changes to __stop_dac() and __stop_adc() are localized
> actually and you should be able to safely leave all of those hunks out
> without effecting the rest of the patch.

Tried, it helps for i810_audio.c both from 2.4.20-pre1-ac2 and
2.4.20-pre4-ac1. (Patch simply to be sure we're talking about the
same thing). In both cases I put i810_audio.c in 2.4.20-pre4-ac1 source
tree.

Andris

--- i810_audio.c-2.4.20-pre1-ac2 2002-08-28 09:50:44.000000000 +0300
+++ i810_audio.c 2002-08-28 18:51:34.000000000 +0300
@@ -732,8 +732,6 @@
outb(0, card->iobase + PI_CR);
// wait for the card to acknowledge shutdown
while( inb(card->iobase + PI_CR) != 0 ) ;
- // reset the dma engine now
- outb(0x02, card->iobase + PI_CR);
// now clear any latent interrupt bits (like the halt bit)
if(card->pci_id == PCI_DEVICE_ID_SI_7012)
outb( inb(card->iobase + PI_PICB), card->iobase + PI_PICB );
@@ -784,8 +782,6 @@
outb(0, card->iobase + PO_CR);
// wait for the card to acknowledge shutdown
while( inb(card->iobase + PO_CR) != 0 ) ;
- // reset the dma engine now
- outb(0x02, card->iobase + PO_CR);
// now clear any latent interrupt bits (like the halt bit)
if(card->pci_id == PCI_DEVICE_ID_SI_7012)
outb( inb(card->iobase + PO_PICB), card->iobase + PO_PICB );