ChangeSet 1.1496.23.2, 2003/12/19 11:37:00-08:00, trini@kernel.crashing.org [PATCH] I2C: make i2c-piix4 fix optional On Thu, Dec 18, 2003 at 10:26:40AM -0800, Greg KH wrote: drivers/i2c/busses/i2c-piix4.c | 21 ++++++++++++++++++--- 1 files changed, 18 insertions(+), 3 deletions(-) diff -Nru a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c --- a/drivers/i2c/busses/i2c-piix4.c Tue Dec 30 12:29:37 2003 +++ b/drivers/i2c/busses/i2c-piix4.c Tue Dec 30 12:29:37 2003 @@ -99,6 +99,13 @@ "Forcibly enable the PIIX4 at the given address. " "EXTREMELY DANGEROUS!"); +/* If fix_hstcfg is set to anything different from 0, we reset one of the + registers to be a valid value. */ +static int fix_hstcfg = 0; +MODULE_PARM(fix_hstcfg, "i"); +MODULE_PARM_DESC(fix_hstcfg, + "Fix config register. Needed on some boards (Force CPCI735)."); + static int piix4_transaction(void); @@ -164,9 +171,17 @@ /* Some BIOS will set up the chipset incorrectly and leave a register in an undefined state (causing I2C to act very strangely). */ if (temp & 0x02) { - dev_info(&PIIX4_dev->dev, "Worked around buggy BIOS (I2C)\n"); - temp = temp & 0xfd; - pci_write_config_byte(PIIX4_dev, SMBHSTCFG, temp); + if (fix_hstcfg) { + dev_info(&PIIX4_dev->dev, "Working around buggy BIOS " + "(I2C)\n"); + temp &= 0xfd; + pci_write_config_byte(PIIX4_dev, SMBHSTCFG, temp); + } else { + dev_info(&PIIX4_dev->dev, "Unusual config register " + "value\n"); + dev_info(&PIIX4_dev->dev, "Try using fix_hstcfg=1 if " + "you experience problems\n"); + } } /* If force_addr is set, we program the new address here. Just to make