i2c: sis630: clear sticky bits
authorAmaury Decrême <amaury.decreme@gmail.com>
Mon, 28 Jan 2013 21:21:06 +0000 (22:21 +0100)
committerWolfram Sang <wolfram@the-dreams.de>
Mon, 11 Feb 2013 14:59:38 +0000 (15:59 +0100)
The sticky bits must be cleared at the end of the transaction by writing
a 1 to all fields.

Datasheet:
SMBus Status (SMB_STS)
The following registers are all sticky bits and only can be
cleared by writing a one to their corresponding fields.

Signed-off-by: Amaury Decrême <amaury.decreme@gmail.com>
Reviewed-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Wolfram Sang <wolfram@the-dreams.de>
drivers/i2c/busses/i2c-sis630.c

index df8e20a..3124d80 100644 (file)
@@ -213,10 +213,8 @@ static int sis630_transaction_wait(struct i2c_adapter *adap, int size)
 
 static void sis630_transaction_end(struct i2c_adapter *adap, u8 oldclock)
 {
-       int temp = 0;
-
        /* clear all status "sticky" bits */
-       sis630_write(SMB_STS, temp);
+       sis630_write(SMB_STS, 0xFF);
 
        dev_dbg(&adap->dev, "SMB_CNT before clock restore 0x%02x\n", sis630_read(SMB_CNT));