hwmon: (lm90) Add support and detection of Philips/NXP NE1618
NE1618 is similar to NE1617 but supports manufacturer and chip ID registers as well as 11 bit external temperature resolution. Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
f63f6cce28
commit
9a19866370
@ -411,6 +411,14 @@ Supported chips:
|
|||||||
|
|
||||||
Datasheets: Publicly available at the Philips website
|
Datasheets: Publicly available at the Philips website
|
||||||
|
|
||||||
|
* Philips NE1618
|
||||||
|
|
||||||
|
Prefix: 'ne1618'
|
||||||
|
|
||||||
|
Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e
|
||||||
|
|
||||||
|
Datasheets: Publicly available at the Philips website
|
||||||
|
|
||||||
* Genesys Logic GL523SM
|
* Genesys Logic GL523SM
|
||||||
|
|
||||||
Prefix: 'gl523sm'
|
Prefix: 'gl523sm'
|
||||||
@ -469,7 +477,7 @@ ADM1020, ADM1021, GL523SM, MAX1617, NE1617, NE1617A, THMC10:
|
|||||||
* 8 bit sensor resolution
|
* 8 bit sensor resolution
|
||||||
* Low temperature limits
|
* Low temperature limits
|
||||||
|
|
||||||
NCT210:
|
NCT210, NE1618:
|
||||||
* 11 bit sensor resolution for remote temperature sensor
|
* 11 bit sensor resolution for remote temperature sensor
|
||||||
* Low temperature limits
|
* Low temperature limits
|
||||||
|
|
||||||
|
@ -1367,7 +1367,7 @@ config SENSORS_LM90
|
|||||||
MAX6696,
|
MAX6696,
|
||||||
ON Semiconductor NCT1008, NCT210, NCT72, NCT214, NCT218,
|
ON Semiconductor NCT1008, NCT210, NCT72, NCT214, NCT218,
|
||||||
Winbond/Nuvoton W83L771W/G/AWG/ASG,
|
Winbond/Nuvoton W83L771W/G/AWG/ASG,
|
||||||
Philips SA56004, GMT G781, Texas Instruments TMP451 and TMP461
|
Philips NE1618, SA56004, GMT G781, Texas Instruments TMP451 and TMP461
|
||||||
sensor chips.
|
sensor chips.
|
||||||
|
|
||||||
This driver can also be built as a module. If so, the module
|
This driver can also be built as a module. If so, the module
|
||||||
|
@ -87,6 +87,9 @@
|
|||||||
* This driver also supports MAX1617 and various clones such as G767
|
* This driver also supports MAX1617 and various clones such as G767
|
||||||
* and NE1617. Such clones will be detected as MAX1617.
|
* and NE1617. Such clones will be detected as MAX1617.
|
||||||
*
|
*
|
||||||
|
* This driver also supports NE1618 from Philips. It is similar to NE1617
|
||||||
|
* but supports 11 bit external temperature values.
|
||||||
|
*
|
||||||
* Since the LM90 was the first chipset supported by this driver, most
|
* Since the LM90 was the first chipset supported by this driver, most
|
||||||
* comments will refer to this chipset, but are actually general and
|
* comments will refer to this chipset, but are actually general and
|
||||||
* concern all supported chipsets, unless mentioned otherwise.
|
* concern all supported chipsets, unless mentioned otherwise.
|
||||||
@ -129,7 +132,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,
|
||||||
nct210, nct72, sa56004, tmp451, tmp461, w83l771,
|
nct210, nct72, ne1618, sa56004, tmp451, tmp461, w83l771,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -267,6 +270,7 @@ static const struct i2c_device_id lm90_id[] = {
|
|||||||
{ "nct214", nct72 },
|
{ "nct214", nct72 },
|
||||||
{ "nct218", nct72 },
|
{ "nct218", nct72 },
|
||||||
{ "nct72", nct72 },
|
{ "nct72", nct72 },
|
||||||
|
{ "ne1618", ne1618 },
|
||||||
{ "w83l771", w83l771 },
|
{ "w83l771", w83l771 },
|
||||||
{ "sa56004", sa56004 },
|
{ "sa56004", sa56004 },
|
||||||
{ "thmc10", max1617 },
|
{ "thmc10", max1617 },
|
||||||
@ -572,6 +576,13 @@ static const struct lm90_params lm90_params[] = {
|
|||||||
.resolution = 11,
|
.resolution = 11,
|
||||||
.max_convrate = 7,
|
.max_convrate = 7,
|
||||||
},
|
},
|
||||||
|
[ne1618] = {
|
||||||
|
.flags = LM90_PAUSE_FOR_CONFIG | LM90_HAVE_BROKEN_ALERT
|
||||||
|
| 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
|
||||||
@ -2151,20 +2162,29 @@ static const char *lm90_detect_nuvoton(struct i2c_client *client, int chip_id,
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *lm90_detect_nxp(struct i2c_client *client, int chip_id,
|
static const char *lm90_detect_nxp(struct i2c_client *client, bool common_address,
|
||||||
int config1, int convrate)
|
int chip_id, int config1, int convrate)
|
||||||
{
|
{
|
||||||
int config2 = i2c_smbus_read_byte_data(client, LM90_REG_CONFIG2);
|
|
||||||
int address = client->addr;
|
int address = client->addr;
|
||||||
const char *name = NULL;
|
const char *name = NULL;
|
||||||
|
int config2;
|
||||||
|
|
||||||
if (config2 < 0)
|
switch (chip_id) {
|
||||||
return NULL;
|
case 0x00:
|
||||||
|
config2 = i2c_smbus_read_byte_data(client, LM90_REG_CONFIG2);
|
||||||
if (address >= 0x48 && address <= 0x4f && chip_id == 0x00 &&
|
if (config2 < 0)
|
||||||
!(config1 & 0x2a) && !(config2 & 0xfe) && convrate <= 0x09)
|
return NULL;
|
||||||
name = "sa56004";
|
if (address >= 0x48 && address <= 0x4f &&
|
||||||
|
!(config1 & 0x2a) && !(config2 & 0xfe) && convrate <= 0x09)
|
||||||
|
name = "sa56004";
|
||||||
|
break;
|
||||||
|
case 0x80:
|
||||||
|
if (common_address && !(config1 & 0x3f) && convrate <= 0x07)
|
||||||
|
name = "ne1618";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2337,7 +2357,7 @@ static int lm90_detect(struct i2c_client *client, struct i2c_board_info *info)
|
|||||||
name = lm90_detect_nuvoton(client, chip_id, config1, convrate);
|
name = lm90_detect_nuvoton(client, chip_id, config1, convrate);
|
||||||
break;
|
break;
|
||||||
case 0xa1: /* NXP Semiconductor/Philips */
|
case 0xa1: /* NXP Semiconductor/Philips */
|
||||||
name = lm90_detect_nxp(client, chip_id, config1, convrate);
|
name = lm90_detect_nxp(client, common_address, chip_id, config1, convrate);
|
||||||
break;
|
break;
|
||||||
case 0xff: /* MAX1617, G767, NE1617 */
|
case 0xff: /* MAX1617, G767, NE1617 */
|
||||||
if (common_address && chip_id == 0xff && convrate < 8)
|
if (common_address && chip_id == 0xff && convrate < 8)
|
||||||
|
Loading…
Reference in New Issue
Block a user