Commit af4540b1 authored by Guenter Roeck's avatar Guenter Roeck

hwmon: (lm90) Add explicit support for NCT210

Unlike ADM1023 and compatible chips, NCT210 does not support a temperature
offset register. A real chip was found to have a chip revision of 0x3f.
Use it to detect NCT210 explicitly.
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent df18fccd
...@@ -137,6 +137,16 @@ Supported chips: ...@@ -137,6 +137,16 @@ Supported chips:
https://www.onsemi.com/PowerSolutions/product.do?id=NCT1008 https://www.onsemi.com/PowerSolutions/product.do?id=NCT1008
* ON Semiconductor NCT210
Prefix: 'adm1021'
Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e
Datasheet: Publicly available at the ON Semiconductor website
https://www.onsemi.com/PowerSolutions/product.do?id=NCT210
* Maxim MAX1617 * Maxim MAX1617
Prefix: 'max1617' Prefix: 'max1617'
...@@ -421,6 +431,10 @@ ADM1021, GL523SM, MAX1617, NE1617, NE1617A, THMC10: ...@@ -421,6 +431,10 @@ ADM1021, GL523SM, MAX1617, NE1617, NE1617A, THMC10:
* 8 bit sensor resolution * 8 bit sensor resolution
* Low temperature limits * Low temperature limits
NCT210:
* 11 bit sensor resolution for remote temperature sensor
* Low temperature limits
ADM1021A, ADM1023: ADM1021A, ADM1023:
* Temperature offset register for remote temperature sensor * Temperature offset register for remote temperature sensor
* 11 bit resolution for remote temperature sensor * 11 bit resolution for remote temperature sensor
......
...@@ -1365,7 +1365,7 @@ config SENSORS_LM90 ...@@ -1365,7 +1365,7 @@ config SENSORS_LM90
Maxim MAX1617, MAX6642, MAX6646, MAX6647, MAX6648, MAX6649, MAX6654, Maxim MAX1617, MAX6642, MAX6646, MAX6647, MAX6648, MAX6649, MAX6654,
MAX6657, MAX6658, MAX6659, MAX6680, MAX6681, MAX6692, MAX6695, MAX6657, MAX6658, MAX6659, MAX6680, MAX6681, MAX6692, MAX6695,
MAX6696, MAX6696,
ON Semiconductor NCT1008, Winbond/Nuvoton W83L771W/G/AWG/ASG, ON Semiconductor NCT1008, NCT210, Winbond/Nuvoton W83L771W/G/AWG/ASG,
Philips SA56004, GMT G781, Texas Instruments TMP451 and TMP461 Philips SA56004, GMT G781, Texas Instruments TMP451 and TMP461
sensor chips. sensor chips.
......
...@@ -125,7 +125,7 @@ static const unsigned short normal_i2c[] = { ...@@ -125,7 +125,7 @@ static const unsigned short normal_i2c[] = {
enum chips { adm1023, adm1032, adt7461, adt7461a, adt7481, enum chips { adm1023, adm1032, adt7461, adt7461a, adt7481,
g781, lm84, lm90, lm99, g781, lm84, lm90, lm99,
max1617, max6642, max6646, max6648, max6654, max6657, max6659, max6680, max6696, max1617, max6642, max6646, max6648, max6654, max6657, max6659, max6680, max6696,
sa56004, tmp451, tmp461, w83l771, nct210, sa56004, tmp451, tmp461, w83l771,
}; };
/* /*
...@@ -257,6 +257,7 @@ static const struct i2c_device_id lm90_id[] = { ...@@ -257,6 +257,7 @@ static const struct i2c_device_id lm90_id[] = {
{ "max6696", max6696 }, { "max6696", max6696 },
{ "mc1066", max1617 }, { "mc1066", max1617 },
{ "nct1008", adt7461a }, { "nct1008", adt7461a },
{ "nct210", nct210 },
{ "w83l771", w83l771 }, { "w83l771", w83l771 },
{ "sa56004", sa56004 }, { "sa56004", sa56004 },
{ "thmc10", max1617 }, { "thmc10", max1617 },
...@@ -533,6 +534,14 @@ static const struct lm90_params lm90_params[] = { ...@@ -533,6 +534,14 @@ static const struct lm90_params lm90_params[] = {
.reg_status2 = MAX6696_REG_STATUS2, .reg_status2 = MAX6696_REG_STATUS2,
.reg_local_ext = MAX6657_REG_LOCAL_TEMPL, .reg_local_ext = MAX6657_REG_LOCAL_TEMPL,
}, },
[nct210] = {
.flags = LM90_HAVE_ALARMS | LM90_HAVE_BROKEN_ALERT
| LM90_HAVE_REM_LIMIT_EXT | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
| LM90_HAVE_REMOTE_EXT,
.alert_alarms = 0x7c,
.resolution = 11,
.max_convrate = 7,
},
[w83l771] = { [w83l771] = {
.flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT | LM90_HAVE_CRIT .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT | LM90_HAVE_CRIT
| LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
...@@ -1768,7 +1777,7 @@ static const char *lm90_detect_analog(struct i2c_client *client, bool common_add ...@@ -1768,7 +1777,7 @@ static const char *lm90_detect_analog(struct i2c_client *client, bool common_add
!(status & 0x03) && !(config1 & 0x3f) && !(convrate & 0xf8)) !(status & 0x03) && !(config1 & 0x3f) && !(convrate & 0xf8))
name = "adm1021"; name = "adm1021";
break; break;
case 0x30 ... 0x3f: /* ADM1021A, ADM1023 */ case 0x30 ... 0x3e: /* ADM1021A, ADM1023 */
/* /*
* ADM1021A and compatible chips will be mis-detected as * ADM1021A and compatible chips will be mis-detected as
* ADM1023. Chips labeled 'ADM1021A' and 'ADM1023' were both * ADM1023. Chips labeled 'ADM1021A' and 'ADM1023' were both
...@@ -1786,6 +1795,11 @@ static const char *lm90_detect_analog(struct i2c_client *client, bool common_add ...@@ -1786,6 +1795,11 @@ static const char *lm90_detect_analog(struct i2c_client *client, bool common_add
!(status & 0x03) && !(config1 & 0x3f) && !(convrate & 0xf8)) !(status & 0x03) && !(config1 & 0x3f) && !(convrate & 0xf8))
name = "adm1023"; name = "adm1023";
break; break;
case 0x3f: /* NCT210 */
if (man_id2 == 0x00 && chip_id2 == 0x00 && common_address &&
!(status & 0x03) && !(config1 & 0x3f) && !(convrate & 0xf8))
name = "nct210";
break;
case 0x40 ... 0x4f: /* ADM1032 */ case 0x40 ... 0x4f: /* ADM1032 */
if (man_id2 == 0x00 && chip_id2 == 0x00 && if (man_id2 == 0x00 && chip_id2 == 0x00 &&
(address == 0x4c || address == 0x4d) && !(config1 & 0x3f) && (address == 0x4c || address == 0x4d) && !(config1 & 0x3f) &&
......
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