Add hwmon support for TI LM5066I hotswap controller
Subsystems (2)
cover Add hwmon support for TI LM5066I hotswap controller
Tested with hardware on Aspeed AST2500 connected to LM5066I on a custom board.
Xo Wang (2):
hwmon: (pmbus/lm25066) Offset coefficient depends on CL
hwmon: (pmbus/lm25066) Add support for TI LM5066I
Documentation/hwmon/lm25066 | 9 +++++++-- drivers/hwmon/pmbus/lm25066.c | 47 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 50 insertions(+), 6 deletions(-)
Signature · 1 line
2.14.1.342.g6490525c54-goog
PATCH 1/2 hwmon: (pmbus/lm25066) Offset coefficient depends on CL
When converting the DIRECT format CURRENT_IN and POWER commands, make the offset coefficient ("b") predicate on the value of the current limit setting.
--- drivers/hwmon/pmbus/lm25066.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/hwmon/pmbus/lm25066.c +4 -2
@@ -488,16 +488,18 @@ static int lm25066_probe(struct i2c_client *client, info->m[PSC_VOLTAGE_OUT ] = coeff[PSC_VOLTAGE_OUT ].m; info->b[PSC_VOLTAGE_OUT ] = coeff[PSC_VOLTAGE_OUT ].b; info->R[PSC_VOLTAGE_OUT ] = coeff[PSC_VOLTAGE_OUT ].R; - info->b[PSC_CURRENT_IN ] = coeff[PSC_CURRENT_IN ].b; info->R[PSC_CURRENT_IN ] = coeff[PSC_CURRENT_IN ].R; - info->b[PSC_POWER ] = coeff[PSC_POWER ].b; info->R[PSC_POWER ] = coeff[PSC_POWER ].R;if (config &LM25066_DEV_SETUP_CL ) { info->m[PSC_CURRENT_IN ] = coeff[PSC_CURRENT_IN_L ].m; + info->b[PSC_CURRENT_IN ] = coeff[PSC_CURRENT_IN_L ].b; info->m[PSC_POWER ] = coeff[PSC_POWER_L ].m; + info->b[PSC_POWER ] = coeff[PSC_POWER_L ].b; }else { info->m[PSC_CURRENT_IN ] = coeff[PSC_CURRENT_IN ].m; + info->b[PSC_CURRENT_IN ] = coeff[PSC_CURRENT_IN ].b; info->m[PSC_POWER ] = coeff[PSC_POWER ].m; + info->b[PSC_POWER ] = coeff[PSC_POWER ].b; }return pmbus_do_probe (client, id, info);
Signature · 1 line
2.14.1.342.g6490525c54-goog
Re: [1/2] hwmon: (pmbus/lm25066) Offset coefficient depends on CL
Quoted 5 lines · Xo Wang
When converting the DIRECT format
CURRENT_INand POWER commands, make the offset coefficient ("b") predicate on the value of the current limit setting.Signed-off-by Xo Wang <[email protected]>
Applied to hwmon-next.
Thanks,
Guenter
Quoted 29 lines
--- drivers/hwmon/pmbus/lm25066.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)drivers/hwmon/pmbus/lm25066.c +4
-2@@ -488,16 +488,18 @@ static int lm25066_probe(struct i2c_client *client, info->m[PSC_VOLTAGE_OUT ] = coeff[PSC_VOLTAGE_OUT ].m; info->b[PSC_VOLTAGE_OUT ] = coeff[PSC_VOLTAGE_OUT ].b; info->R[PSC_VOLTAGE_OUT ] = coeff[PSC_VOLTAGE_OUT ].R; - info->b[PSC_CURRENT_IN ] = coeff[PSC_CURRENT_IN ].b; info->R[PSC_CURRENT_IN ] = coeff[PSC_CURRENT_IN ].R; - info->b[PSC_POWER ] = coeff[PSC_POWER ].b; info->R[PSC_POWER ] = coeff[PSC_POWER ].R;if (config &LM25066_DEV_SETUP_CL ) { info->m[PSC_CURRENT_IN ] = coeff[PSC_CURRENT_IN_L ].m; + info->b[PSC_CURRENT_IN ] = coeff[PSC_CURRENT_IN_L ].b; info->m[PSC_POWER ] = coeff[PSC_POWER_L ].m; + info->b[PSC_POWER ] = coeff[PSC_POWER_L ].b; }else { info->m[PSC_CURRENT_IN ] = coeff[PSC_CURRENT_IN ].m; + info->b[PSC_CURRENT_IN ] = coeff[PSC_CURRENT_IN ].b; info->m[PSC_POWER ] = coeff[PSC_POWER ].m; + info->b[PSC_POWER ] = coeff[PSC_POWER ].b; }return pmbus_do_probe (client, id, info);
PATCH 2/2 hwmon: (pmbus/lm25066) Add support for TI LM5066I
In reply to Xo WangThe 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.
--- Documentation/hwmon/lm25066 | 9 +++++++-- drivers/hwmon/pmbus/lm25066.c | 41 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 4 deletions(-)
Documentation/hwmon/lm25066 +7 -2
@@ -29,6 +29,11 @@ Supported chips: Addresses scanned: - Datasheet: 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 <[email protected]>
@@ -37,8 +42,8 @@ Description ----------- This driver supports hardware monitoring for National Semiconductor / TI LM25056, -LM25063, LM25066, LM5064, and LM5066 Power Management, Monitoring, Control, and -Protection ICs. +LM25063, LM25066, LM5064, and LM5066/LM5066I Power Management, Monitoring, +Control, and Protection ICs. The driver is a client driver to the core PMBus driver. Please see Documentation/hwmon/pmbus for details on PMBus client drivers.
drivers/hwmon/pmbus/lm25066.c +39 -2
71 lines not on this page · raw message
Signature · 1 line
2.14.1.342.g6490525c54-goog
Re: [2/2] hwmon: (pmbus/lm25066) Add support for TI LM5066I
Quoted 6 lines · Xo Wang
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 <[email protected]>
Applied to hwmon-next.
Thanks,
Guenter
Quoted 112 lines
--- Documentation/hwmon/lm25066 | 9 +++++++-- drivers/hwmon/pmbus/lm25066.c | 41 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 4 deletions(-)Documentation/hwmon/lm25066 +7
-2@@ -29,6 +29,11 @@ Supported chips: Addresses scanned: - Datasheet: 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 <[email protected]>@@ -37,8 +42,8 @@ Description ----------- This driver supports hardware monitoring for National Semiconductor / TI LM25056, -LM25063, LM25066, LM5064, and LM5066 Power Management, Monitoring, Control, and -Protection ICs. +LM25063, LM25066, LM5064, and LM5066/LM5066I Power Management, Monitoring, +Control, and Protection ICs. The driver is a client driver to the core PMBus driver. Please see Documentation/hwmon/pmbus for details on PMBus client drivers.drivers/hwmon/pmbus/lm25066.c +39
-2@@ -28,7 +28,7 @@#include <linux/i2c.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_MFR_READ_IIN 0xd1@@ -65,7 +65,7 @@ struct __coeff {#define PSC_CURRENT_IN_L (PSC_NUM_CLASSES)#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] = { [PSC_VOLTAGE_IN ] = { .m =16296 ,@@ -210,6 +210,41 @@ static struct __coeff lm25066_coeff[5][PSC_NUM_CLASSES + 2] = { .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 {@@ -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 );break ;case lm5066: +case lm5066i:/* VIN: 2.18 mV VAUX: 725 uV LSB */ ret =DIV_ROUND_CLOSEST (ret *725 ,2180 );break ;@@ -511,6 +547,7 @@ static const struct i2c_device_id lm25066_id[] = { {"lm25066", lm25066}, {"lm5064", lm5064}, {"lm5066", lm5066}, + {"lm5066i", lm5066i}, { } };