diff -ru linux/arch/i386/kernel/pci-irq.c linux-patched/arch/i386/kernel/pci-irq.c --- linux/arch/i386/kernel/pci-irq.c Mon Nov 5 02:31:58 2001 +++ linux-patched/arch/i386/kernel/pci-irq.c Sun Dec 30 12:36:39 2001 @@ -20,6 +20,7 @@ #include "pci-i386.h" #define PIRQ_SIGNATURE (('$' << 0) + ('P' << 8) + ('I' << 16) + ('R' << 24)) +#define PIRQ_SIGNATURE2 (('_' << 0) + ('P' << 8) + ('I' << 16) + ('R' << 24)) #define PIRQ_VERSION 0x0100 static struct irq_routing_table *pirq_table; @@ -56,7 +57,8 @@ for(addr = (u8 *) __va(0xf0000); addr < (u8 *) __va(0x100000); addr += 16) { rt = (struct irq_routing_table *) addr; - if (rt->signature != PIRQ_SIGNATURE || + if ((rt->signature != PIRQ_SIGNATURE && + rt->signature != PIRQ_SIGNATURE2 ) || rt->version != PIRQ_VERSION || rt->size % 16 || rt->size < sizeof(struct irq_routing_table)) diff -ru linux/drivers/pci/pci.c linux-patched/drivers/pci/pci.c --- linux/drivers/pci/pci.c Wed Nov 21 14:53:29 2001 +++ linux-patched/drivers/pci/pci.c Sun Dec 30 03:53:01 2001 @@ -1929,6 +1929,29 @@ } +/* patched locally -- dancerj 30 dec 2001 -- for kernel sound */ + +static void __init pci_m5451_init(void) +{ + struct pci_dev *dev; + + /* Allocate IRQ is 4 */ + unsigned char m5451_irq = 4; + + /* for (dev = pci_devices; dev; dev = dev->next) { */ + pci_for_each_dev(dev) { + if (dev->vendor == PCI_VENDOR_ID_AL && + dev->device == PCI_DEVICE_ID_AL_M5451) { + dev->irq = m5451_irq; + printk("PCI m5451_init: Found ALi AUDIO M5451 \n"); + printk("PCI m5451_init: Allocate IRQ %0x \n", m5451_irq); + pci_write_config_byte(dev, PCI_INTERRUPT_LINE, m5451_irq); + } + } +} + + + void __devinit pci_init(void) { struct pci_dev *dev; @@ -1942,6 +1965,9 @@ #ifdef CONFIG_PM pm_register(PM_PCI_DEV, 0, pci_pm_callback); #endif + + /* ali patch -- dancerj --30 dec 2001 */ + pci_m5451_init(); } static int __devinit pci_setup(char *str)