]> www.infradead.org Git - users/hch/misc.git/commitdiff
hwmon: (ina238) Add support for INA780
authorGuenter Roeck <linux@roeck-us.net>
Sun, 31 Aug 2025 16:39:53 +0000 (09:39 -0700)
committerGuenter Roeck <linux@roeck-us.net>
Sun, 7 Sep 2025 23:35:03 +0000 (16:35 -0700)
INA780 is similar to the other chips in the series, but does not
support the shunt voltage register. Shunt voltage limit registers
have been renamed to current limit registers, but are otherwise
identical.

While the chip does not directly report the shunt voltage, report
it anyway by calculating its value from the current register.

Cc: Chris Packham <chris.packham@alliedtelesis.co.nz>
Reviewed-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
Tested-by: Chris Packham <chris.packham@alliedtelesis.co.nz> # INA780
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Documentation/hwmon/ina238.rst
drivers/hwmon/Kconfig
drivers/hwmon/ina238.c

index 3c7db4a47056a6b94959eb62fc96400feafddc13..7227609618215081336fac2e9af67b20d9f452de 100644 (file)
@@ -32,6 +32,11 @@ Supported chips:
     Datasheet:
        https://www.ti.com/lit/gpn/ina238
 
+  * Texas Instruments INA780
+
+    Datasheet:
+       https://www.ti.com/product/ina780a
+
   * Silergy SQ52206
 
     Prefix: 'SQ52206'
@@ -56,6 +61,9 @@ INA237 is a functionally equivalent variant of INA238 with slightly
 different accuracy. INA228 is another variant of INA238 with higher ADC
 resolution. This chip also reports the energy.
 
+INA780 is a variant of the chip series with built-in shunt resistor.
+It also reports the energy.
+
 SQ52206 is a mostly compatible chip from Sylergy. It reports the energy
 as well as the peak power consumption.
 
@@ -88,7 +96,7 @@ curr1_max             Maximum current threshold (mA)
 curr1_max_alarm                Maximum current alarm
 
 energy1_input          Energy measurement (uJ)
-                               (SQ52206 and INA237 only)
+                               (SQ52206, INA237, and INA780 only)
 
 temp1_input            Die temperature measurement (mC)
 temp1_max              Maximum die temperature threshold (mC)
index 6bdce991f5f01a3c8873fe2256b37d106f2b22ed..c044c26fbd114d73109daec7bba1611c31edea58 100644 (file)
@@ -2256,9 +2256,9 @@ config SENSORS_INA238
        depends on I2C
        select REGMAP_I2C
        help
-         If you say yes here you get support for INA228, INA237, INA238, and
-         SQ52206 power monitor chips. This driver supports voltage, current,
-         power, energy, and temperature measurements as well as alarm
+         If you say yes here you get support for INA228, INA237, INA238,
+         INA780, and SQ52206 power monitor chips. This driver supports voltage,
+         current, power, energy, and temperature measurements as well as alarm
          configuration.
 
          This driver can also be built as a module. If so, the module
index da5b43184dd1e259996e0ebabbd831bef50e37d8..98255619adeb72afa99317cab3c7bcf0693a3795 100644 (file)
@@ -101,7 +101,7 @@ static const struct regmap_config ina238_regmap_config = {
        .val_bits = 16,
 };
 
-enum ina238_ids { ina228, ina237, ina238, sq52206 };
+enum ina238_ids { ina228, ina237, ina238, ina780, sq52206 };
 
 struct ina238_config {
        bool has_20bit_voltage_current; /* vshunt, vbus and current are 20-bit fields */
@@ -155,6 +155,16 @@ static const struct ina238_config ina238_config[] = {
                .bus_voltage_lsb = INA238_BUS_VOLTAGE_LSB,
                .temp_resolution = 12,
        },
+       [ina780] = {
+               .has_20bit_voltage_current = false,
+               .has_energy = true,
+               .has_power_highest = false,
+               .power_calculate_factor = 20,
+               .config_default = INA238_CONFIG_DEFAULT,
+               .bus_voltage_lsb = INA238_BUS_VOLTAGE_LSB,
+               .temp_resolution = 12,
+               .current_lsb = 2400,
+       },
        [sq52206] = {
                .has_20bit_voltage_current = false,
                .has_energy = true,
@@ -836,6 +846,7 @@ static const struct i2c_device_id ina238_id[] = {
        { "ina228", ina228 },
        { "ina237", ina237 },
        { "ina238", ina238 },
+       { "ina780", ina780 },
        { "sq52206", sq52206 },
        { }
 };
@@ -854,6 +865,10 @@ static const struct of_device_id __maybe_unused ina238_of_match[] = {
                .compatible = "ti,ina238",
                .data = (void *)ina238
        },
+       {
+               .compatible = "ti,ina780",
+               .data = (void *)ina780
+       },
        {
                .compatible = "silergy,sq52206",
                .data = (void *)sq52206