Hi,
I don't know what the Debian maintainers of the latest stable kernel
will do, but if you have a mobo with a VIA cipset *and* use the
2.6.16.17 kernel *then* you will have sound problems.
Apply the 2 patches attached in this order:
1) PCI-VIA-quirk-fixup-additional-PCI-IDs.patch
2) PCI-quirk-VIA-IRQ-fixup-should-only-run-for-VIA-southbridges.patch
and the sound problems will go away.
H
diff -U 3 -H -d -r -N -- linux-2.6.16.17/drivers/pci/quirks.c
linux-2.6.16.17-oci/drivers/pci/quirks.c
--- linux-2.6.16.17/drivers/pci/quirks.c 2006-06-14 10:59:16.000000000
+0800
+++ linux-2.6.16.17-oci/drivers/pci/quirks.c 2006-06-14 11:07:12.000000000
+0800
@@ -631,9 +631,6 @@
* non-x86 architectures (yes Via exists on PPC among other places),
* we must mask the PCI_INTERRUPT_LINE value versus 0xf to get
* interrupts delivered properly.
- *
- * Some of the on-chip devices are actually '586 devices' so they are
- * listed here.
*/
static void quirk_via_irq(struct pci_dev *dev)
{
@@ -648,10 +645,6 @@
pci_write_config_byte(dev, PCI_INTERRUPT_LINE, new_irq);
}
}
-DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0,
quirk_via_irq);
-DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1,
quirk_via_irq);
-DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_2,
quirk_via_irq);
-DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3,
quirk_via_irq);
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686,
quirk_via_irq);
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4,
quirk_via_irq);
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5,
quirk_via_irq);
diff -U 3 -H -d -r -N -- linux-2.6.16.17/drivers/pci/quirks.c
linux-2.6.16.17-oci/drivers/pci/quirks.c
--- linux-2.6.16.17/drivers/pci/quirks.c 2006-06-14 12:48:00.000000000
+0800
+++ linux-2.6.16.17-oci/drivers/pci/quirks.c 2006-06-14 12:30:39.000000000
+0800
@@ -639,15 +639,13 @@
new_irq = dev->irq & 0xf;
pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
if (new_irq != irq) {
- printk(KERN_INFO "PCI: VIA IRQ fixup for %s, from %d to %d\n",
+ printk(KERN_INFO "PCI: Via IRQ fixup for %s, from %d to %d\n",
pci_name(dev), irq, new_irq);
udelay(15); /* unknown if delay really needed */
pci_write_config_byte(dev, PCI_INTERRUPT_LINE, new_irq);
}
}
-DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686,
quirk_via_irq);
-DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4,
quirk_via_irq);
-DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5,
quirk_via_irq);
+DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_ANY_ID, quirk_via_irq);
/*
* VIA VT82C598 has its device ID settable and many BIOSes