aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c/i2c-core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/i2c/i2c-core.c')
-rw-r--r--drivers/i2c/i2c-core.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index b9306b1a6baa..5105126225c3 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -1264,12 +1264,23 @@ static int i2c_detect_address(struct i2c_client *temp_client,
1264 return 0; 1264 return 0;
1265 1265
1266 /* Make sure there is something at this address */ 1266 /* Make sure there is something at this address */
1267 if (i2c_smbus_xfer(adapter, addr, 0, 0, 0, I2C_SMBUS_QUICK, NULL) < 0) 1267 if (addr == 0x73 && (adapter->class & I2C_CLASS_HWMON)) {
1268 return 0; 1268 /* Special probe for FSC hwmon chips */
1269 union i2c_smbus_data dummy;
1269 1270
1270 /* Prevent 24RF08 corruption */ 1271 if (i2c_smbus_xfer(adapter, addr, 0, I2C_SMBUS_READ, 0,
1271 if ((addr & ~0x0f) == 0x50) 1272 I2C_SMBUS_BYTE_DATA, &dummy) < 0)
1272 i2c_smbus_xfer(adapter, addr, 0, 0, 0, I2C_SMBUS_QUICK, NULL); 1273 return 0;
1274 } else {
1275 if (i2c_smbus_xfer(adapter, addr, 0, I2C_SMBUS_WRITE, 0,
1276 I2C_SMBUS_QUICK, NULL) < 0)
1277 return 0;
1278
1279 /* Prevent 24RF08 corruption */
1280 if ((addr & ~0x0f) == 0x50)
1281 i2c_smbus_xfer(adapter, addr, 0, I2C_SMBUS_WRITE, 0,
1282 I2C_SMBUS_QUICK, NULL);
1283 }
1273 1284
1274 /* Finally call the custom detection function */ 1285 /* Finally call the custom detection function */
1275 memset(&info, 0, sizeof(struct i2c_board_info)); 1286 memset(&info, 0, sizeof(struct i2c_board_info));