Commit f1ddf228 authored by Andrey Panin's avatar Andrey Panin Committed by Linus Torvalds

[PATCH] use new DMI API for HP Pavilion

Example code for the new DMI APU - port HP Pavilion irq workaround to new
DMI probing.
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent efd3d374
...@@ -313,23 +313,6 @@ static __init int disable_smbus(struct dmi_blacklist *d) ...@@ -313,23 +313,6 @@ static __init int disable_smbus(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
* the following QA technique * the following QA technique
...@@ -816,14 +799,6 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={ ...@@ -816,14 +799,6 @@ 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
*/ */
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/dmi.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/smp.h> #include <asm/smp.h>
#include <asm/io_apic.h> #include <asm/io_apic.h>
...@@ -22,7 +23,7 @@ ...@@ -22,7 +23,7 @@
#define PIRQ_SIGNATURE (('$' << 0) + ('P' << 8) + ('I' << 16) + ('R' << 24)) #define PIRQ_SIGNATURE (('$' << 0) + ('P' << 8) + ('I' << 16) + ('R' << 24))
#define PIRQ_VERSION 0x0100 #define PIRQ_VERSION 0x0100
int broken_hp_bios_irq9; static int broken_hp_bios_irq9;
static struct irq_routing_table *pirq_table; static struct irq_routing_table *pirq_table;
...@@ -893,6 +894,33 @@ static void __init pcibios_fixup_irqs(void) ...@@ -893,6 +894,33 @@ static void __init pcibios_fixup_irqs(void)
} }
} }
/*
* Work around broken HP Pavilion Notebooks which assign USB to
* IRQ 9 even though it is actually wired to IRQ 11
*/
static int __init fix_broken_hp_bios_irq9(struct dmi_system_id *d)
{
if (!broken_hp_bios_irq9) {
broken_hp_bios_irq9 = 1;
printk(KERN_INFO "%s detected - fixing broken IRQ routing\n", d->ident);
}
return 0;
}
static struct dmi_system_id __initdata pciirq_dmi_table[] = {
{
.callback = fix_broken_hp_bios_irq9,
.ident = "HP Pavilion N5400 Series Laptop",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
DMI_MATCH(DMI_BIOS_VERSION, "GE.M1.03"),
DMI_MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook Model GE"),
DMI_MATCH(DMI_BOARD_VERSION, "OmniBook N32N-736"),
},
},
{ }
};
static int __init pcibios_irq_init(void) static int __init pcibios_irq_init(void)
{ {
DBG("PCI: IRQ init\n"); DBG("PCI: IRQ init\n");
...@@ -900,6 +928,8 @@ static int __init pcibios_irq_init(void) ...@@ -900,6 +928,8 @@ static int __init pcibios_irq_init(void)
if (pcibios_enable_irq || raw_pci_ops == NULL) if (pcibios_enable_irq || raw_pci_ops == NULL)
return 0; return 0;
dmi_check_system(pciirq_dmi_table);
pirq_table = pirq_find_routing_table(); pirq_table = pirq_find_routing_table();
#ifdef CONFIG_PCI_BIOS #ifdef CONFIG_PCI_BIOS
......
...@@ -15,8 +15,6 @@ ...@@ -15,8 +15,6 @@
#include "pci.h" #include "pci.h"
int broken_hp_bios_irq9;
extern struct pci_raw_ops pci_direct_conf1; extern struct pci_raw_ops pci_direct_conf1;
static int pci_visws_enable_irq(struct pci_dev *dev) { return 0; } static int pci_visws_enable_irq(struct pci_dev *dev) { return 0; }
......
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