Commit a438ced7 authored by Dave Jones's avatar Dave Jones

[PATCH] DMI entries for HP Pavillion laptops.

These things have USB IRQ routing problems we can work around..
parent 6d956df7
...@@ -295,6 +295,22 @@ static __init int apm_is_horked(struct dmi_blacklist *d) ...@@ -295,6 +295,22 @@ static __init int apm_is_horked(struct dmi_blacklist *d)
return 0; return 0;
} }
/*
* Work around broken HP Pavilion Notebooks which assign USB to
* IRQ 9 even though it is actually wired to IRQ 11
*/
static __init int fix_broken_hp_bios_irq9(struct dmi_blacklist *d)
{
#ifdef CONFIG_PCI
extern int broken_hp_bios_irq9;
if (broken_hp_bios_irq9 == 0)
{
broken_hp_bios_irq9 = 1;
printk(KERN_INFO "%s detected - fixing broken IRQ routing\n", d->ident);
}
#endif
return 0;
}
/* /*
* Check for clue free BIOS implementations who use * Check for clue free BIOS implementations who use
...@@ -730,6 +746,13 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={ ...@@ -730,6 +746,13 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
NO_MATCH, NO_MATCH NO_MATCH, NO_MATCH
} }, } },
{ fix_broken_hp_bios_irq9, "HP Pavilion N5400 Series Laptop", {
MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
MATCH(DMI_BIOS_VERSION, "GE.M1.03"),
MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook Model GE"),
MATCH(DMI_BOARD_VERSION, "OmniBook N32N-736")
} },
/* /*
* Generic per vendor APM settings * Generic per vendor APM settings
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#define PIRQ_VERSION 0x0100 #define PIRQ_VERSION 0x0100
int pci_use_acpi_routing = 0; int pci_use_acpi_routing = 0;
int broken_hp_bios_irq9;
static struct irq_routing_table *pirq_table; static struct irq_routing_table *pirq_table;
...@@ -614,6 +615,15 @@ static int pirq_lookup_irq(struct pci_dev *dev, u8 pin, int assign) ...@@ -614,6 +615,15 @@ static int pirq_lookup_irq(struct pci_dev *dev, u8 pin, int assign)
DBG(" -> PIRQ %02x, mask %04x, excl %04x", pirq, mask, pirq_table->exclusive_irqs); DBG(" -> PIRQ %02x, mask %04x, excl %04x", pirq, mask, pirq_table->exclusive_irqs);
mask &= pcibios_irq_mask; mask &= pcibios_irq_mask;
/* Work around broken HP Pavilion Notebooks which assign USB to
IRQ 9 even though it is actually wired to IRQ 11 */
if (broken_hp_bios_irq9 && pirq == 0x59 && dev->irq == 9) {
dev->irq = 11;
pci_write_config_byte(dev, PCI_INTERRUPT_LINE, 11);
r->set(pirq_router_dev, dev, pirq, 11);
}
/* /*
* Find the best IRQ to assign: use the one * Find the best IRQ to assign: use the one
* reported by the device if possible. * reported by the device if possible.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment