Commit 7a1b76f2 authored by Jekyll Lai's avatar Jekyll Lai Committed by Jean Delvare

hwmon: (emc1403) Add EMC1423 support

EMC1423 uses the similar register and adds a hardware shutdown pin to
protect exceed temperature. This function is set by resistor; it's not
necessary to do anything in the driver except add the emc1423 pid of 0x23.
Signed-off-by: default avatarJekyll Lai <jekyll_lai@wistron.com>
[Updated Kconfig/comments and minor further changes asked for by the hwmon
 maintainers]
Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
[Fixed checkpatch warning]
Signed-of--by: default avatarJean Delvare <khali@linux-fr.org>
parent 3ea1bd58
...@@ -809,10 +809,10 @@ config SENSORS_DME1737 ...@@ -809,10 +809,10 @@ config SENSORS_DME1737
will be called dme1737. will be called dme1737.
config SENSORS_EMC1403 config SENSORS_EMC1403
tristate "SMSC EMC1403 thermal sensor" tristate "SMSC EMC1403/23 thermal sensor"
depends on I2C depends on I2C
help help
If you say yes here you get support for the SMSC EMC1403 If you say yes here you get support for the SMSC EMC1403/23
temperature monitoring chip. temperature monitoring chip.
Threshold values can be configured using sysfs. Threshold values can be configured using sysfs.
......
...@@ -269,23 +269,30 @@ static int emc1403_detect(struct i2c_client *client, ...@@ -269,23 +269,30 @@ static int emc1403_detect(struct i2c_client *client,
struct i2c_board_info *info) struct i2c_board_info *info)
{ {
int id; 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); id = i2c_smbus_read_byte_data(client, THERMAL_SMSC_ID_REG);
if (id != 0x5d) if (id != 0x5d)
return -ENODEV; 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 /* Note: 0x25 is the 1404 which is very similar and this
driver could be extended */ driver could be extended */
id = i2c_smbus_read_byte_data(client, THERMAL_PID_REG); default:
if (id != 0x21)
return -ENODEV; return -ENODEV;
}
id = i2c_smbus_read_byte_data(client, THERMAL_REVISION_REG); id = i2c_smbus_read_byte_data(client, THERMAL_REVISION_REG);
if (id != 0x01) if (id != 0x01)
return -ENODEV; return -ENODEV;
strlcpy(info->type, "emc1403", I2C_NAME_SIZE);
return 0; return 0;
} }
...@@ -342,6 +349,7 @@ static const unsigned short emc1403_address_list[] = { ...@@ -342,6 +349,7 @@ static const unsigned short emc1403_address_list[] = {
static const struct i2c_device_id emc1403_idtable[] = { static const struct i2c_device_id emc1403_idtable[] = {
{ "emc1403", 0 }, { "emc1403", 0 },
{ "emc1423", 0 },
{ } { }
}; };
MODULE_DEVICE_TABLE(i2c, emc1403_idtable); MODULE_DEVICE_TABLE(i2c, emc1403_idtable);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment