From: Andrey Panin Make PIIX4 I2C use dmi_check_system() function and remove is_unsafe_smbus global variable. Signed-off-by: Andrew Morton --- 25-akpm/arch/i386/kernel/dmi_scan.c | 24 ------------------------ 25-akpm/drivers/i2c/busses/i2c-piix4.c | 23 ++++++++++------------- 2 files changed, 10 insertions(+), 37 deletions(-) diff -puN arch/i386/kernel/dmi_scan.c~dmi-port-piix4-i2c-driver-to-new-dmi-probing arch/i386/kernel/dmi_scan.c --- 25/arch/i386/kernel/dmi_scan.c~dmi-port-piix4-i2c-driver-to-new-dmi-probing Fri May 28 14:28:49 2004 +++ 25-akpm/arch/i386/kernel/dmi_scan.c Fri May 28 14:28:49 2004 @@ -15,7 +15,6 @@ unsigned long dmi_broken; EXPORT_SYMBOL(dmi_broken); -int is_unsafe_smbus; int es7000_plat = 0; struct dmi_header @@ -221,19 +220,6 @@ static int __init local_apic_kills_bios( return 0; } -/* - * Don't access SMBus on IBM systems which get corrupted eeproms - */ - -static __init int disable_smbus(struct dmi_system_id *d) -{ - if (is_unsafe_smbus == 0) { - is_unsafe_smbus = 1; - printk(KERN_INFO "%s machine detected. Disabling SMBus accesses.\n", d->ident); - } - return 0; -} - /* * HP Proliant 8500 systems can't use i8042 in mux mode, * or they instantly reboot. @@ -451,14 +437,6 @@ static __initdata struct dmi_system_id d #endif /* - * SMBus / sensors settings - */ - - { disable_smbus, "IBM", { - DMI_MATCH(DMI_SYS_VENDOR, "IBM"), - } }, - - /* * Some Athlon laptops have really fucked PST tables. * A BIOS update is all that can save them. * Mention this, and disable cpufreq. @@ -775,5 +753,3 @@ void __init dmi_scan_machine(void) else printk(KERN_INFO "DMI not present.\n"); } - -EXPORT_SYMBOL(is_unsafe_smbus); diff -puN drivers/i2c/busses/i2c-piix4.c~dmi-port-piix4-i2c-driver-to-new-dmi-probing drivers/i2c/busses/i2c-piix4.c --- 25/drivers/i2c/busses/i2c-piix4.c~dmi-port-piix4-i2c-driver-to-new-dmi-probing Fri May 28 14:28:49 2004 +++ 25-akpm/drivers/i2c/busses/i2c-piix4.c Fri May 28 14:28:49 2004 @@ -40,6 +40,7 @@ #include #include #include +#include #include @@ -114,18 +115,13 @@ static int piix4_transaction(void); static unsigned short piix4_smba = 0; static struct i2c_adapter piix4_adapter; -/* - * Get DMI information. - */ -static int __devinit ibm_dmi_probe(void) -{ -#ifdef CONFIG_X86 - extern int is_unsafe_smbus; - return is_unsafe_smbus; -#else - return 0; -#endif -} +static struct dmi_system_id __devinitdata piix4_dmi_table[] = { + { + .ident = "IBM", + .matches = { DMI_MATCH(DMI_SYS_VENDOR, "IBM"), }, + }, + { }, +}; static int __devinit piix4_setup(struct pci_dev *PIIX4_dev, const struct pci_device_id *id) @@ -138,7 +134,8 @@ static int __devinit piix4_setup(struct dev_info(&PIIX4_dev->dev, "Found %s device\n", pci_name(PIIX4_dev)); - if(ibm_dmi_probe()) { + /* Don't access SMBus on IBM systems which get corrupted eeproms */ + if (dmi_check_system(piix4_dmi_table)) { dev_err(&PIIX4_dev->dev, "IBM Laptop detected; this module " "may corrupt your serial eeprom! Refusing to load " "module!\n"); _