hwmon: (ltc4151) Make shunt-resistor configurable
Allow to specify the resistance of the attached shunt via DT by adding the shunt-resistor property. Fall-back to the previous default (1 mOhm) if unset. Signed-off-by: Daniel Golle <daniel@makrotopia.org> [groeck: Fixed 'line over 80 columns' checkpatch warning] Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
4f120397fc
commit
30fe976fe7
|
@ -30,6 +30,7 @@
|
|||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/slab.h>
|
||||
|
@ -52,6 +53,7 @@ struct ltc4151_data {
|
|||
struct mutex update_lock;
|
||||
bool valid;
|
||||
unsigned long last_updated; /* in jiffies */
|
||||
unsigned int shunt; /* in micro ohms */
|
||||
|
||||
/* Registers */
|
||||
u8 regs[6];
|
||||
|
@ -111,9 +113,9 @@ static int ltc4151_get_value(struct ltc4151_data *data, u8 reg)
|
|||
case LTC4151_SENSE_H:
|
||||
/*
|
||||
* 20uV resolution. Convert to current as measured with
|
||||
* an 1 mOhm sense resistor, in mA.
|
||||
* a given sense resistor, in mA.
|
||||
*/
|
||||
val = val * 20;
|
||||
val = val * 20 * 1000 / data->shunt;
|
||||
break;
|
||||
case LTC4151_VIN_H:
|
||||
/* 25 mV per increment */
|
||||
|
@ -176,6 +178,7 @@ static int ltc4151_probe(struct i2c_client *client,
|
|||
struct device *dev = &client->dev;
|
||||
struct ltc4151_data *data;
|
||||
struct device *hwmon_dev;
|
||||
u32 shunt;
|
||||
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
|
||||
return -ENODEV;
|
||||
|
@ -184,6 +187,15 @@ static int ltc4151_probe(struct i2c_client *client,
|
|||
if (!data)
|
||||
return -ENOMEM;
|
||||
|
||||
if (of_property_read_u32(client->dev.of_node,
|
||||
"shunt-resistor-micro-ohms", &shunt))
|
||||
shunt = 1000; /* 1 mOhm if not set via DT */
|
||||
|
||||
if (shunt == 0)
|
||||
return -EINVAL;
|
||||
|
||||
data->shunt = shunt;
|
||||
|
||||
data->client = client;
|
||||
mutex_init(&data->update_lock);
|
||||
|
||||
|
@ -199,10 +211,16 @@ static const struct i2c_device_id ltc4151_id[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(i2c, ltc4151_id);
|
||||
|
||||
static const struct of_device_id ltc4151_match[] = {
|
||||
{ .compatible = "lltc,ltc4151" },
|
||||
{},
|
||||
};
|
||||
|
||||
/* This is the driver that will be inserted */
|
||||
static struct i2c_driver ltc4151_driver = {
|
||||
.driver = {
|
||||
.name = "ltc4151",
|
||||
.of_match_table = of_match_ptr(ltc4151_match),
|
||||
},
|
||||
.probe = ltc4151_probe,
|
||||
.id_table = ltc4151_id,
|
||||
|
|
Loading…
Reference in New Issue