hwmon: (pmbus/lm25066) Add support for TI LM5066I
The TI LM5066I hotswap controller is a more accurate version of the LM5066 device already supported. It has different measurement conversion coefficients than the LM5066, so it needs to be recognized as a different device. Signed-off-by: Xo Wang <xow@google.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
ee983171d4
commit
5783ec2e5c
|
@ -29,6 +29,11 @@ Supported chips:
|
||||||
Addresses scanned: -
|
Addresses scanned: -
|
||||||
Datasheet:
|
Datasheet:
|
||||||
http://www.national.com/pf/LM/LM5066.html
|
http://www.national.com/pf/LM/LM5066.html
|
||||||
|
* Texas Instruments LM5066I
|
||||||
|
Prefix: 'lm5066i'
|
||||||
|
Addresses scanned: -
|
||||||
|
Datasheet:
|
||||||
|
http://www.ti.com/product/LM5066I
|
||||||
|
|
||||||
Author: Guenter Roeck <linux@roeck-us.net>
|
Author: Guenter Roeck <linux@roeck-us.net>
|
||||||
|
|
||||||
|
@ -37,8 +42,8 @@ Description
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
This driver supports hardware monitoring for National Semiconductor / TI LM25056,
|
This driver supports hardware monitoring for National Semiconductor / TI LM25056,
|
||||||
LM25063, LM25066, LM5064, and LM5066 Power Management, Monitoring, Control, and
|
LM25063, LM25066, LM5064, and LM5066/LM5066I Power Management, Monitoring,
|
||||||
Protection ICs.
|
Control, and Protection ICs.
|
||||||
|
|
||||||
The driver is a client driver to the core PMBus driver. Please see
|
The driver is a client driver to the core PMBus driver. Please see
|
||||||
Documentation/hwmon/pmbus for details on PMBus client drivers.
|
Documentation/hwmon/pmbus for details on PMBus client drivers.
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include "pmbus.h"
|
#include "pmbus.h"
|
||||||
|
|
||||||
enum chips { lm25056, lm25063, lm25066, lm5064, lm5066 };
|
enum chips { lm25056, lm25063, lm25066, lm5064, lm5066, lm5066i };
|
||||||
|
|
||||||
#define LM25066_READ_VAUX 0xd0
|
#define LM25066_READ_VAUX 0xd0
|
||||||
#define LM25066_MFR_READ_IIN 0xd1
|
#define LM25066_MFR_READ_IIN 0xd1
|
||||||
|
@ -65,7 +65,7 @@ struct __coeff {
|
||||||
#define PSC_CURRENT_IN_L (PSC_NUM_CLASSES)
|
#define PSC_CURRENT_IN_L (PSC_NUM_CLASSES)
|
||||||
#define PSC_POWER_L (PSC_NUM_CLASSES + 1)
|
#define PSC_POWER_L (PSC_NUM_CLASSES + 1)
|
||||||
|
|
||||||
static struct __coeff lm25066_coeff[5][PSC_NUM_CLASSES + 2] = {
|
static struct __coeff lm25066_coeff[6][PSC_NUM_CLASSES + 2] = {
|
||||||
[lm25056] = {
|
[lm25056] = {
|
||||||
[PSC_VOLTAGE_IN] = {
|
[PSC_VOLTAGE_IN] = {
|
||||||
.m = 16296,
|
.m = 16296,
|
||||||
|
@ -210,6 +210,41 @@ static struct __coeff lm25066_coeff[5][PSC_NUM_CLASSES + 2] = {
|
||||||
.m = 16,
|
.m = 16,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
[lm5066i] = {
|
||||||
|
[PSC_VOLTAGE_IN] = {
|
||||||
|
.m = 4617,
|
||||||
|
.b = -140,
|
||||||
|
.R = -2,
|
||||||
|
},
|
||||||
|
[PSC_VOLTAGE_OUT] = {
|
||||||
|
.m = 4602,
|
||||||
|
.b = 500,
|
||||||
|
.R = -2,
|
||||||
|
},
|
||||||
|
[PSC_CURRENT_IN] = {
|
||||||
|
.m = 15076,
|
||||||
|
.b = -504,
|
||||||
|
.R = -2,
|
||||||
|
},
|
||||||
|
[PSC_CURRENT_IN_L] = {
|
||||||
|
.m = 7645,
|
||||||
|
.b = 100,
|
||||||
|
.R = -2,
|
||||||
|
},
|
||||||
|
[PSC_POWER] = {
|
||||||
|
.m = 1701,
|
||||||
|
.b = -4000,
|
||||||
|
.R = -3,
|
||||||
|
},
|
||||||
|
[PSC_POWER_L] = {
|
||||||
|
.m = 861,
|
||||||
|
.b = -965,
|
||||||
|
.R = -3,
|
||||||
|
},
|
||||||
|
[PSC_TEMPERATURE] = {
|
||||||
|
.m = 16,
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
struct lm25066_data {
|
struct lm25066_data {
|
||||||
|
@ -250,6 +285,7 @@ static int lm25066_read_word_data(struct i2c_client *client, int page, int reg)
|
||||||
ret = DIV_ROUND_CLOSEST(ret * 70, 453);
|
ret = DIV_ROUND_CLOSEST(ret * 70, 453);
|
||||||
break;
|
break;
|
||||||
case lm5066:
|
case lm5066:
|
||||||
|
case lm5066i:
|
||||||
/* VIN: 2.18 mV VAUX: 725 uV LSB */
|
/* VIN: 2.18 mV VAUX: 725 uV LSB */
|
||||||
ret = DIV_ROUND_CLOSEST(ret * 725, 2180);
|
ret = DIV_ROUND_CLOSEST(ret * 725, 2180);
|
||||||
break;
|
break;
|
||||||
|
@ -511,6 +547,7 @@ static const struct i2c_device_id lm25066_id[] = {
|
||||||
{"lm25066", lm25066},
|
{"lm25066", lm25066},
|
||||||
{"lm5064", lm5064},
|
{"lm5064", lm5064},
|
||||||
{"lm5066", lm5066},
|
{"lm5066", lm5066},
|
||||||
|
{"lm5066i", lm5066i},
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue