Skip to content

Commit

Permalink
hwmon: (lm90) Add remaining chips supported by adm1021 driver
Browse files Browse the repository at this point in the history
All chips supported by the ADM1021 driver are also supported by the LM90
driver. Make that support official.

After this change, the adm1021 driver is only needed if the lm90 driver
is disabled. Also, the adm1021 driver misdetects a variety of chips as
MAX1617A, which is unwanted if any of those chips is in the system.
For this reason. make the adm1021 driver dependent on !SENSORS_LM90 to
show that it is not needed if the lm90 driver is enabled, and to avoid
misdetection if a chip supported by the lm90 driver is in the system.

Devicetree nodes are not added for the added chips since it is quite
unlikely that such old chips will ever be used in a devicetree based
system. They can be added later if needed.

Signed-off-by: Guenter Roeck <[email protected]>
  • Loading branch information
groeck committed Jul 13, 2022
1 parent 0c6bffd commit 37d1dc8
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 1 deletion.
34 changes: 33 additions & 1 deletion Documentation/hwmon/lm90.rst
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,38 @@ Supported chips:

https://www.ti.com/lit/gpn/tmp461

* Philips NE1617, NE1617A

Prefix: 'max1617' (probably detected as a max1617)

Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e

Datasheets: Publicly available at the Philips website

* Genesys Logic GL523SM

Prefix: 'gl523sm'

Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e

Datasheet:

* TI THMC10

Prefix: 'thmc10'

Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e

Datasheet: Publicly available at the TI website

* Onsemi MC1066

Prefix: 'mc1066'

Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e

Datasheet: Publicly available at the Onsemi website

Author: Jean Delvare <[email protected]>


Expand Down Expand Up @@ -385,7 +417,7 @@ features:
LM84:
* 8 bit sensor resolution

ADM1021, MAX1617:
ADM1021, GL523SM, MAX1617, NE1617, NE1617A, THMC10:
* 8 bit sensor resolution
* Low temperature limits

Expand Down
1 change: 1 addition & 0 deletions drivers/hwmon/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ config SENSORS_AD7418
config SENSORS_ADM1021
tristate "Analog Devices ADM1021 and compatibles"
depends on I2C
depends on SENSORS_LM90=n
help
If you say yes here you get support for Analog Devices ADM1021
and ADM1023 sensor chips and clones: Maxim MAX1617 and MAX1617A,
Expand Down
26 changes: 26 additions & 0 deletions drivers/hwmon/lm90.c
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,7 @@ static const struct i2c_device_id lm90_id[] = {
{ "adt7482", adt7481 },
{ "adt7483a", adt7481 },
{ "g781", g781 },
{ "gl523sm", max1617 },
{ "lm84", lm84 },
{ "lm86", lm86 },
{ "lm89", lm86 },
Expand All @@ -254,9 +255,11 @@ static const struct i2c_device_id lm90_id[] = {
{ "max6692", max6648 },
{ "max6695", max6696 },
{ "max6696", max6696 },
{ "mc1066", max1617 },
{ "nct1008", adt7461a },
{ "w83l771", w83l771 },
{ "sa56004", sa56004 },
{ "thmc10", max1617 },
{ "tmp451", tmp451 },
{ "tmp461", tmp461 },
{ }
Expand Down Expand Up @@ -2127,6 +2130,18 @@ static const char *lm90_detect_gmt(struct i2c_client *client, int chip_id,
return NULL;
}

static const char *lm90_detect_ti49(struct i2c_client *client, bool common_address,
int chip_id, int config1, int convrate)
{
if (common_address && chip_id == 0x00 && !(config1 & 0x3f) && !(convrate & 0xf8)) {
/* THMC10: Unsupported registers return 0xff */
if (i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_TEMPL) == 0xff &&
i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_CRIT) == 0xff)
return "thmc10";
}
return NULL;
}

static const char *lm90_detect_ti(struct i2c_client *client, int chip_id,
int config1, int convrate)
{
Expand Down Expand Up @@ -2210,17 +2225,28 @@ static int lm90_detect(struct i2c_client *client, struct i2c_board_info *info)
case 0x01: /* National Semiconductor */
name = lm90_detect_national(client, chip_id, config1, convrate);
break;
case 0x23: /* Genesys Logic */
if (common_address && !(config1 & 0x3f) && !(convrate & 0xf8))
name = "gl523sm";
break;
case 0x41: /* Analog Devices */
name = lm90_detect_analog(client, common_address, chip_id, config1,
convrate);
break;
case 0x47: /* GMT */
name = lm90_detect_gmt(client, chip_id, config1, convrate);
break;
case 0x49: /* TI */
name = lm90_detect_ti49(client, common_address, chip_id, config1, convrate);
break;
case 0x4d: /* Maxim Integrated */
name = lm90_detect_maxim(client, common_address, chip_id,
config1, convrate);
break;
case 0x54: /* ON MC1066, Microchip TC1068, TCM1617 (originally TelCom) */
if (common_address && !(config1 & 0x3f) && !(convrate & 0xf8))
name = "mc1066";
break;
case 0x55: /* TI */
name = lm90_detect_ti(client, chip_id, config1, convrate);
break;
Expand Down

0 comments on commit 37d1dc8

Please sign in to comment.