Attached is a patch to the quirks.c in linux kernel 2.4.4 that fixes the
sound corruption problem (thanks to Dan Hollis for the info).  Do I have to
send this anywhere else as well?

On Sun, Apr 29, 2001 at 05:29:05PM -0700, Dan Hollis wrote:
> On Mon, 30 Apr 2001, Charl P. Botha wrote:
> > I have removed this code and everything is now fine on my system.  The
> > problem is that the 686A and 686B have the same PCI IDs, else I would have
> > submitted a patch.
> 
> 686a is rev 0x10 - 0x2f, 686b is rev 0x40 - 0x4f.
> 
> The fixup code should take this into account.
> 
> -Dan

-- 
charl p. botha      | computer graphics and cad/cam 
http://cpbotha.net/ | http://www.cg.its.tudelft.nl/
--- quirks.c-2.4.4      Mon Apr 30 01:50:36 2001
+++ quirks.c    Mon Apr 30 03:01:28 2001
@@ -88,23 +88,36 @@
  *     VIA Apollo KT133 needs PCI latency patch
  *     Made according to a windows driver based patch by George E. Breese
  *     see PCI Latency Adjust on http://www.viahardware.com/download/viatweak.shtm
+ *      Also see http://home.tiscalinet.de/au-ja/review-kt133a-1-en.html for
+ *      the info on which Mr Breese based his work.
  */
 static void __init quirk_vialatency(struct pci_dev *dev)
 {
        u8 r70;
+       u8 rev;
 
-       printk(KERN_INFO "Applying VIA PCI latency patch.\n");
-       /*
-        *    In register 0x70, mask off bit 2 (PCI Master read caching)
-        *    and 1 (Delay Transaction)
-        */
-       pci_read_config_byte(dev, 0x70, &r70);
-       r70 &= 0xf9;
-       pci_write_config_byte(dev, 0x70, r70);
-       /*
-        *    Turn off PCI Latency timeout (set to 0 clocks)
-        */
-       pci_write_config_byte(dev, 0x75, 0x80);
+       /* we test for 686B by revision, only apply patch then ([EMAIL PROTECTED]) */
+       pci_read_config_byte(dev, PCI_CLASS_REVISION, &rev);
+        /* 0x40 - 0x4f == 686B, 0x10 - 0x2f == 686A; thanks Dan Hollis */
+       if (rev >= 0x40 && rev <= 0x4f)
+       {
+               printk(KERN_INFO "Applying VIA PCI latency patch (found 
+VT82C686B).\n");
+               /*
+               *    In register 0x70, mask off bit 2 (PCI Master read caching)
+               *    and 1 (Delay Transaction)
+               */
+               pci_read_config_byte(dev, 0x70, &r70);
+               r70 &= 0xf9;
+               pci_write_config_byte(dev, 0x70, r70);
+               /*
+                *    Turn off PCI Latency timeout (set to 0 clocks)
+                */
+               pci_write_config_byte(dev, 0x75, 0x80);
+       }
+       else
+       {
+               printk(KERN_INFO "Found VT82C686A, not applying VIA latency patch.\n");
+       }
 }
 
 /*
@@ -312,7 +325,7 @@
        { PCI_FIXUP_FINAL,      PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_82443BX_2, 
 quirk_natoma },
        { PCI_FIXUP_FINAL,      PCI_VENDOR_ID_SI,       PCI_DEVICE_ID_SI_5597,         
 quirk_nopcipci },
        { PCI_FIXUP_FINAL,      PCI_VENDOR_ID_SI,       PCI_DEVICE_ID_SI_496,          
 quirk_nopcipci },
-       { PCI_FIXUP_FINAL,      PCI_VENDOR_ID_VIA,      PCI_DEVICE_ID_VIA_8363_0,      
 quirk_vialatency },
+       { PCI_FIXUP_FINAL,      PCI_VENDOR_ID_VIA,      PCI_DEVICE_ID_VIA_82C686,      
+ quirk_vialatency },
        { PCI_FIXUP_FINAL,      PCI_VENDOR_ID_VIA,      PCI_DEVICE_ID_VIA_82C597_0,    
 quirk_viaetbf },
        { PCI_FIXUP_HEADER,     PCI_VENDOR_ID_VIA,      PCI_DEVICE_ID_VIA_82C597_0,    
 quirk_vt82c598_id },
        { PCI_FIXUP_HEADER,     PCI_VENDOR_ID_VIA,      PCI_DEVICE_ID_VIA_82C586_3,    
 quirk_vt82c586_acpi },

Reply via email to