Lines Matching +full:current +full:- +full:sense +full:- +full:shunt
1 // SPDX-License-Identifier: GPL-2.0-or-later
14 #include <linux/hwmon-sysfs.h>
68 * struct ltc2945_data - LTC2945 device data
70 * @shunt_resistor: shunt resistor value in micro ohms (1000 by default)
86 struct regmap *regmap = data->regmap; in ltc2945_reg_to_val()
87 u32 shunt_resistor = data->shunt_resistor; in ltc2945_reg_to_val()
99 /* 24-bit power */ in ltc2945_reg_to_val()
102 /* 12-bit current, voltage */ in ltc2945_reg_to_val()
114 * Control register bit 0 selects if voltage at SENSE+/VDD in ltc2945_reg_to_val()
128 /* Overflow check: Assuming max 24-bit power, val is at most 53 bits right now. */ in ltc2945_reg_to_val()
131 * Overflow check: After division, depending on shunt resistor, in ltc2945_reg_to_val()
132 * val can still be > 32 bits so returning long long makes sense in ltc2945_reg_to_val()
159 /* Overflow check: Assuming max 12-bit sense, val is at most 27 bits right now */ in ltc2945_reg_to_val()
164 return -EINVAL; in ltc2945_reg_to_val()
173 struct regmap *regmap = data->regmap; in ltc2945_val_to_reg()
174 u32 shunt_resistor = data->shunt_resistor; in ltc2945_val_to_reg()
188 * Control register bit 0 selects if voltage at SENSE+/VDD in ltc2945_val_to_reg()
198 /* Overflow check: Assuming 32-bit val and shunt resistor, val <= 64bits */ in ltc2945_val_to_reg()
204 /* Overflow check: Assuming 32-bit val and shunt resistor, val <= 64bits */ in ltc2945_val_to_reg()
232 /* Overflow check: Assuming 32-bit val and 32-bit shunt resistor, val is 64bits */ in ltc2945_val_to_reg()
237 return -EINVAL; in ltc2945_val_to_reg()
248 value = ltc2945_reg_to_val(dev, attr->index); in ltc2945_value_show()
260 struct regmap *regmap = data->regmap; in ltc2945_value_store()
261 u8 reg = attr->index; in ltc2945_value_store()
298 struct regmap *regmap = data->regmap; in ltc2945_history_store()
299 u8 reg = attr->index; in ltc2945_history_store()
310 return -EINVAL; in ltc2945_history_store()
335 return -EINVAL; in ltc2945_history_store()
351 struct regmap *regmap = data->regmap; in ltc2945_bool_show()
359 fault &= attr->index; in ltc2945_bool_show()
361 regmap_update_bits(regmap, LTC2945_FAULT, attr->index, 0); in ltc2945_bool_show()
391 /* Currents (via sense resistor) */
404 /* Current alarms */
477 struct device *dev = &client->dev; in ltc2945_probe()
484 return -ENOMEM; in ltc2945_probe()
493 data->regmap = regmap; in ltc2945_probe()
494 if (device_property_read_u32(dev, "shunt-resistor-micro-ohms", in ltc2945_probe()
495 &data->shunt_resistor)) in ltc2945_probe()
496 data->shunt_resistor = 1000; in ltc2945_probe()
498 if (data->shunt_resistor == 0) in ltc2945_probe()
499 return -EINVAL; in ltc2945_probe()
504 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, in ltc2945_probe()
528 MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>");