--- linux-2.4.20/arch/i386/kernel/pci-irq_old.c 2002-11-28 15:53:09.000000000 -0800 +++ linux-2.4.20/arch/i386/kernel/pci-irq.c 2003-05-21 17:27:40.000000000 -0700 @@ -198,12 +198,27 @@ */ static int pirq_via_get(struct pci_dev *router, struct pci_dev *dev, int pirq) { - return read_config_nybble(router, 0x55, pirq); + u8 x; + + if ( pirq == 4 ) { + pci_read_config_byte(router, 0x57, &x); + return (x >> 4); + } else { + return read_config_nybble(router, 0x55, pirq); + } } static int pirq_via_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) { - write_config_nybble(router, 0x55, pirq, irq); + u8 x; + + if ( pirq == 4 ) { + pci_read_config_byte(router, 0x57, &x); + x = (x & 0x0f) | (irq << 4); + pci_write_config_byte(router, 0x57, x); + } else { + write_config_nybble(router, 0x55, pirq, irq); + } return 1; }