--- linux-2.5.31/arch/i386/kernel/dmi_scan.c.orig 2002-07-31 23:10:21.000000000 -0400 +++ linux/arch/i386/kernel/dmi_scan.c 2002-07-31 23:13:52.000000000 -0400 @@ -13,6 +13,7 @@ unsigned long dmi_broken; int is_sony_vaio_laptop; +int is_broken_smbus; struct dmi_header { @@ -468,6 +469,20 @@ return 0; } +/* + * Don't access SMBus on IBM systems which get corrupted eeproms + */ + +static __init int disable_smbus(struct dmi_blacklist *d) +{ + if (is_broken_smbus == 0) + { + is_broken_smbus = 1; + printk(KERN_INFO "%s machine detected. Disabling SMBus accesses.\n", d->ident); + } + return 0; +} + /* * Simple "print if true" callback */ @@ -737,6 +752,15 @@ */ { set_apm_ints, "IBM", { /* Allow interrupts during suspend on IBM laptops */ + MATCH(DMI_SYS_VENDOR, "IBM"), + NO_MATCH, NO_MATCH, NO_MATCH + } }, + + /* + * SMBus / sensors settings + */ + + { disable_smbus, "IBM", { MATCH(DMI_SYS_VENDOR, "IBM"), NO_MATCH, NO_MATCH, NO_MATCH } },