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)
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
* the following QA technique
......@@ -816,14 +799,6 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
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
*/
......
......@@ -12,6 +12,7 @@
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/dmi.h>
#include <asm/io.h>
#include <asm/smp.h>
#include <asm/io_apic.h>
......@@ -22,7 +23,7 @@
#define PIRQ_SIGNATURE (('$' << 0) + ('P' << 8) + ('I' << 16) + ('R' << 24))
#define PIRQ_VERSION 0x0100
int broken_hp_bios_irq9;
static int broken_hp_bios_irq9;
static struct irq_routing_table *pirq_table;
......@@ -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)
{
DBG("PCI: IRQ init\n");
......@@ -900,6 +928,8 @@ static int __init pcibios_irq_init(void)
if (pcibios_enable_irq || raw_pci_ops == NULL)
return 0;
dmi_check_system(pciirq_dmi_table);
pirq_table = pirq_find_routing_table();
#ifdef CONFIG_PCI_BIOS
......
......@@ -15,8 +15,6 @@
#include "pci.h"
int broken_hp_bios_irq9;
extern struct pci_raw_ops pci_direct_conf1;
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