aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c/chips
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/i2c/chips')
-rw-r--r--drivers/i2c/chips/ds1337.c6
-rw-r--r--drivers/i2c/chips/eeprom.c8
-rw-r--r--drivers/i2c/chips/max6875.c8
3 files changed, 13 insertions, 9 deletions
diff --git a/drivers/i2c/chips/ds1337.c b/drivers/i2c/chips/ds1337.c
index 74ece8ac1c23..82cf959989fd 100644
--- a/drivers/i2c/chips/ds1337.c
+++ b/drivers/i2c/chips/ds1337.c
@@ -165,7 +165,7 @@ static int ds1337_set_datetime(struct i2c_client *client, struct rtc_time *dt)
165 buf[0] = 0; /* reg offset */ 165 buf[0] = 0; /* reg offset */
166 buf[1] = BIN2BCD(dt->tm_sec); 166 buf[1] = BIN2BCD(dt->tm_sec);
167 buf[2] = BIN2BCD(dt->tm_min); 167 buf[2] = BIN2BCD(dt->tm_min);
168 buf[3] = BIN2BCD(dt->tm_hour) | (1 << 6); 168 buf[3] = BIN2BCD(dt->tm_hour);
169 buf[4] = BIN2BCD(dt->tm_wday) + 1; 169 buf[4] = BIN2BCD(dt->tm_wday) + 1;
170 buf[5] = BIN2BCD(dt->tm_mday); 170 buf[5] = BIN2BCD(dt->tm_mday);
171 buf[6] = BIN2BCD(dt->tm_mon) + 1; 171 buf[6] = BIN2BCD(dt->tm_mon) + 1;
@@ -344,9 +344,9 @@ static void ds1337_init_client(struct i2c_client *client)
344 344
345 /* Ensure that device is set in 24-hour mode */ 345 /* Ensure that device is set in 24-hour mode */
346 val = i2c_smbus_read_byte_data(client, DS1337_REG_HOUR); 346 val = i2c_smbus_read_byte_data(client, DS1337_REG_HOUR);
347 if ((val >= 0) && (val & (1 << 6)) == 0) 347 if ((val >= 0) && (val & (1 << 6)))
348 i2c_smbus_write_byte_data(client, DS1337_REG_HOUR, 348 i2c_smbus_write_byte_data(client, DS1337_REG_HOUR,
349 val | (1 << 6)); 349 val & 0x3f);
350} 350}
351 351
352static int ds1337_detach_client(struct i2c_client *client) 352static int ds1337_detach_client(struct i2c_client *client)
diff --git a/drivers/i2c/chips/eeprom.c b/drivers/i2c/chips/eeprom.c
index 6ea413f6d5e5..a2da31b0dd7b 100644
--- a/drivers/i2c/chips/eeprom.c
+++ b/drivers/i2c/chips/eeprom.c
@@ -163,6 +163,11 @@ int eeprom_detect(struct i2c_adapter *adapter, int address, int kind)
163 struct eeprom_data *data; 163 struct eeprom_data *data;
164 int err = 0; 164 int err = 0;
165 165
166 /* prevent 24RF08 corruption */
167 if (kind < 0)
168 i2c_smbus_xfer(adapter, address, 0, 0, 0,
169 I2C_SMBUS_QUICK, NULL);
170
166 /* There are three ways we can read the EEPROM data: 171 /* There are three ways we can read the EEPROM data:
167 (1) I2C block reads (faster, but unsupported by most adapters) 172 (1) I2C block reads (faster, but unsupported by most adapters)
168 (2) Consecutive byte reads (100% overhead) 173 (2) Consecutive byte reads (100% overhead)
@@ -187,9 +192,6 @@ int eeprom_detect(struct i2c_adapter *adapter, int address, int kind)
187 new_client->driver = &eeprom_driver; 192 new_client->driver = &eeprom_driver;
188 new_client->flags = 0; 193 new_client->flags = 0;
189 194
190 /* prevent 24RF08 corruption */
191 i2c_smbus_write_quick(new_client, 0);
192
193 /* Fill in the remaining client fields */ 195 /* Fill in the remaining client fields */
194 strlcpy(new_client->name, "eeprom", I2C_NAME_SIZE); 196 strlcpy(new_client->name, "eeprom", I2C_NAME_SIZE);
195 data->valid = 0; 197 data->valid = 0;
diff --git a/drivers/i2c/chips/max6875.c b/drivers/i2c/chips/max6875.c
index c4f14d9623c4..0230375f72e5 100644
--- a/drivers/i2c/chips/max6875.c
+++ b/drivers/i2c/chips/max6875.c
@@ -343,6 +343,11 @@ static int max6875_detect(struct i2c_adapter *adapter, int address, int kind)
343 struct max6875_data *data; 343 struct max6875_data *data;
344 int err = 0; 344 int err = 0;
345 345
346 /* Prevent 24RF08 corruption (in case of user error) */
347 if (kind < 0)
348 i2c_smbus_xfer(adapter, address, 0, 0, 0,
349 I2C_SMBUS_QUICK, NULL);
350
346 /* There are three ways we can read the EEPROM data: 351 /* There are three ways we can read the EEPROM data:
347 (1) I2C block reads (faster, but unsupported by most adapters) 352 (1) I2C block reads (faster, but unsupported by most adapters)
348 (2) Consecutive byte reads (100% overhead) 353 (2) Consecutive byte reads (100% overhead)
@@ -370,9 +375,6 @@ static int max6875_detect(struct i2c_adapter *adapter, int address, int kind)
370 new_client->driver = &max6875_driver; 375 new_client->driver = &max6875_driver;
371 new_client->flags = 0; 376 new_client->flags = 0;
372 377
373 /* Prevent 24RF08 corruption */
374 i2c_smbus_write_quick(new_client, 0);
375
376 /* Setup the user section */ 378 /* Setup the user section */
377 data->blocks[max6875_eeprom_user].type = max6875_eeprom_user; 379 data->blocks[max6875_eeprom_user].type = max6875_eeprom_user;
378 data->blocks[max6875_eeprom_user].slices = USER_EEPROM_SLICES; 380 data->blocks[max6875_eeprom_user].slices = USER_EEPROM_SLICES;