From: Bjorn Helgaas <bjorn.helgaas@hp.com>



Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/acpi/pci_irq.c |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff -puN drivers/acpi/pci_irq.c~via-irq-fixup-fix drivers/acpi/pci_irq.c
--- 25/drivers/acpi/pci_irq.c~via-irq-fixup-fix	2005-03-13 13:06:19.000000000 -0800
+++ 25-akpm/drivers/acpi/pci_irq.c	2005-03-13 13:06:19.000000000 -0800
@@ -30,6 +30,7 @@
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/types.h>
+#include <linux/delay.h>
 #include <linux/proc_fs.h>
 #include <linux/spinlock.h>
 #include <linux/pm.h>
@@ -444,11 +445,18 @@ acpi_pci_irq_enable (
 		}
  	}
 
-	if (via_interrupt_line_quirk)
-		pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq & 15);
-
 	dev->irq = acpi_register_gsi(irq, edge_level, active_high_low);
 
+	if (dev->vendor == PCI_VENDOR_ID_VIA) {
+		u8 old_irq, new_irq = dev->irq & 0xf;
+
+		pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &old_irq);
+		printk(KERN_INFO PREFIX "Via IRQ fixup for %s, from %d "
+			"to %d\n", pci_name(dev), old_irq, new_irq);
+		udelay(15);
+		pci_write_config_byte(dev, PCI_INTERRUPT_LINE, new_irq);
+	}
+
 	printk(KERN_INFO PREFIX "PCI Interrupt %s[%c] -> ",
 		pci_name(dev), 'A' + pin);
 
_