Commit a54ca77a authored by Kun Yi's avatar Kun Yi Committed by Guenter Roeck

hwmon: (lm75) Add MAX31725/6 support

MAX31725/MAX31726 are local temperature sensors with +/- 0.5 degree
Celsius accuracy and 16-bit (0.00390625 degrees Celsius) resolution.
They have a register mapping and encoding compatible with the lm75
series drivers. Address scan and extended temperature range are
not supported by this patch.

Tested on real hardware and verified temperature readings are correct.
Signed-off-by: default avatarKun Yi <kunyi@google.com>
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent 39ea6ea3
...@@ -17,8 +17,8 @@ Supported chips: ...@@ -17,8 +17,8 @@ Supported chips:
Addresses scanned: none Addresses scanned: none
Datasheet: Publicly available at the Maxim website Datasheet: Publicly available at the Maxim website
http://www.maximintegrated.com/ http://www.maximintegrated.com/
* Maxim MAX6625, MAX6626 * Maxim MAX6625, MAX6626, MAX31725, MAX31726
Prefixes: 'max6625', 'max6626' Prefixes: 'max6625', 'max6626', 'max31725', 'max31726'
Addresses scanned: none Addresses scanned: none
Datasheet: Publicly available at the Maxim website Datasheet: Publicly available at the Maxim website
http://www.maxim-ic.com/ http://www.maxim-ic.com/
...@@ -86,7 +86,7 @@ The LM75 is essentially an industry standard; there may be other ...@@ -86,7 +86,7 @@ The LM75 is essentially an industry standard; there may be other
LM75 clones not listed here, with or without various enhancements, LM75 clones not listed here, with or without various enhancements,
that are supported. The clones are not detected by the driver, unless that are supported. The clones are not detected by the driver, unless
they reproduce the exact register tricks of the original LM75, and must they reproduce the exact register tricks of the original LM75, and must
therefore be instantiated explicitly. Higher resolution up to 12-bit therefore be instantiated explicitly. Higher resolution up to 16-bit
is supported by this driver, other specific enhancements are not. is supported by this driver, other specific enhancements are not.
The LM77 is not supported, contrary to what we pretended for a long time. The LM77 is not supported, contrary to what we pretended for a long time.
......
...@@ -47,6 +47,7 @@ enum lm75_type { /* keep sorted in alphabetical order */ ...@@ -47,6 +47,7 @@ enum lm75_type { /* keep sorted in alphabetical order */
lm75b, lm75b,
max6625, max6625,
max6626, max6626,
max31725,
mcp980x, mcp980x,
stds75, stds75,
tcn75, tcn75,
...@@ -64,7 +65,6 @@ enum lm75_type { /* keep sorted in alphabetical order */ ...@@ -64,7 +65,6 @@ enum lm75_type { /* keep sorted in alphabetical order */
static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 0x4c, static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 0x4c,
0x4d, 0x4e, 0x4f, I2C_CLIENT_END }; 0x4d, 0x4e, 0x4f, I2C_CLIENT_END };
/* The LM75 registers */ /* The LM75 registers */
#define LM75_REG_TEMP 0x00 #define LM75_REG_TEMP 0x00
#define LM75_REG_CONF 0x01 #define LM75_REG_CONF 0x01
...@@ -76,7 +76,7 @@ struct lm75_data { ...@@ -76,7 +76,7 @@ struct lm75_data {
struct i2c_client *client; struct i2c_client *client;
struct regmap *regmap; struct regmap *regmap;
u8 orig_conf; u8 orig_conf;
u8 resolution; /* In bits, between 9 and 12 */ u8 resolution; /* In bits, between 9 and 16 */
u8 resolution_limits; u8 resolution_limits;
unsigned int sample_time; /* In ms */ unsigned int sample_time; /* In ms */
}; };
...@@ -339,6 +339,10 @@ lm75_probe(struct i2c_client *client, const struct i2c_device_id *id) ...@@ -339,6 +339,10 @@ lm75_probe(struct i2c_client *client, const struct i2c_device_id *id)
data->resolution_limits = 9; data->resolution_limits = 9;
data->sample_time = MSEC_PER_SEC / 4; data->sample_time = MSEC_PER_SEC / 4;
break; break;
case max31725:
data->resolution = 16;
data->sample_time = MSEC_PER_SEC / 8;
break;
case tcn75: case tcn75:
data->resolution = 9; data->resolution = 9;
data->sample_time = MSEC_PER_SEC / 8; data->sample_time = MSEC_PER_SEC / 8;
...@@ -415,6 +419,8 @@ static const struct i2c_device_id lm75_ids[] = { ...@@ -415,6 +419,8 @@ static const struct i2c_device_id lm75_ids[] = {
{ "lm75b", lm75b, }, { "lm75b", lm75b, },
{ "max6625", max6625, }, { "max6625", max6625, },
{ "max6626", max6626, }, { "max6626", max6626, },
{ "max31725", max31725, },
{ "max31726", max31725, },
{ "mcp980x", mcp980x, }, { "mcp980x", mcp980x, },
{ "stds75", stds75, }, { "stds75", stds75, },
{ "tcn75", tcn75, }, { "tcn75", tcn75, },
...@@ -471,6 +477,14 @@ static const struct of_device_id lm75_of_match[] = { ...@@ -471,6 +477,14 @@ static const struct of_device_id lm75_of_match[] = {
.compatible = "maxim,max6626", .compatible = "maxim,max6626",
.data = (void *)max6626 .data = (void *)max6626
}, },
{
.compatible = "maxim,max31725",
.data = (void *)max31725
},
{
.compatible = "maxim,max31726",
.data = (void *)max31725
},
{ {
.compatible = "maxim,mcp980x", .compatible = "maxim,mcp980x",
.data = (void *)mcp980x .data = (void *)mcp980x
......
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