|
@@ -269,23 +269,30 @@ static int emc1403_detect(struct i2c_client *client,
|
|
|
struct i2c_board_info *info)
|
|
|
{
|
|
|
int id;
|
|
|
- /* Check if thermal chip is SMSC and EMC1403 */
|
|
|
+ /* Check if thermal chip is SMSC and EMC1403 or EMC1423 */
|
|
|
|
|
|
id = i2c_smbus_read_byte_data(client, THERMAL_SMSC_ID_REG);
|
|
|
if (id != 0x5d)
|
|
|
return -ENODEV;
|
|
|
|
|
|
+ id = i2c_smbus_read_byte_data(client, THERMAL_PID_REG);
|
|
|
+ switch (id) {
|
|
|
+ case 0x21:
|
|
|
+ strlcpy(info->type, "emc1403", I2C_NAME_SIZE);
|
|
|
+ break;
|
|
|
+ case 0x23:
|
|
|
+ strlcpy(info->type, "emc1423", I2C_NAME_SIZE);
|
|
|
+ break;
|
|
|
/* Note: 0x25 is the 1404 which is very similar and this
|
|
|
driver could be extended */
|
|
|
- id = i2c_smbus_read_byte_data(client, THERMAL_PID_REG);
|
|
|
- if (id != 0x21)
|
|
|
+ default:
|
|
|
return -ENODEV;
|
|
|
+ }
|
|
|
|
|
|
id = i2c_smbus_read_byte_data(client, THERMAL_REVISION_REG);
|
|
|
if (id != 0x01)
|
|
|
return -ENODEV;
|
|
|
|
|
|
- strlcpy(info->type, "emc1403", I2C_NAME_SIZE);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -342,6 +349,7 @@ static const unsigned short emc1403_address_list[] = {
|
|
|
|
|
|
static const struct i2c_device_id emc1403_idtable[] = {
|
|
|
{ "emc1403", 0 },
|
|
|
+ { "emc1423", 0 },
|
|
|
{ }
|
|
|
};
|
|
|
MODULE_DEVICE_TABLE(i2c, emc1403_idtable);
|