hwmon: (pmbus/ltc2978) add support for ltm4673
authorCedric Encarnacion <cedricjustine.encarnacion@analog.com>
Fri, 24 Jan 2025 15:23:06 +0000 (23:23 +0800)
committerGuenter Roeck <linux@roeck-us.net>
Mon, 3 Feb 2025 01:34:06 +0000 (17:34 -0800)
Add support for LTM4673. The LTM4673 is a quad output, dual 12A and dual
5A, switching mode DC/DC step-down μModule regulator integrated with
4-channel power system manager.

This adds only the chip id, the checks for the manufacturer special id,
and the relevant attributes for the device's pmbus_driver_info.
The device does not support clear peaks.

Signed-off-by: Cedric Encarnacion <cedricjustine.encarnacion@analog.com>
Link: https://lore.kernel.org/r/20250124-ltm4673-v1-2-a2c6aa37c903@analog.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Documentation/hwmon/ltc2978.rst
drivers/hwmon/pmbus/Kconfig
drivers/hwmon/pmbus/ltc2978.c

index 651ca4904c6649748f366b023fbb337ec25b22b0..feae53eb9fbf5cff8f7a484c163acad011315d8d 100644 (file)
@@ -151,6 +151,14 @@ Supported chips:
 
     Datasheet: https://www.analog.com/en/products/ltm4644
 
+   * Linear Technology LTM4673
+
+    Prefix: 'ltm4673'
+
+    Addresses scanned: -
+
+    Datasheet: https://www.analog.com/en/products/ltm4673
+
    * Linear Technology LTM4675
 
     Prefix: 'ltm4675'
index 419469f40ba0283c72b71071566efec575263e98..675b0d4703d87c9d5654489d0d770661ff0dba11 100644 (file)
@@ -234,8 +234,8 @@ config SENSORS_LTC2978_REGULATOR
        help
          If you say yes here you get regulator support for Linear Technology
          LTC3880, LTC3883, LTC3884, LTC3886, LTC3887, LTC3889, LTC7841,
-         LTC7880, LTM4644, LTM4675, LTM4676, LTM4677, LTM4678, LTM4680,
-         LTM4686, and LTM4700.
+         LTC7880, LTM4644, LTM4673, LTM4675, LTM4676, LTM4677, LTM4678,
+         LTM4680, LTM4686, and LTM4700.
 
 config SENSORS_LTC3815
        tristate "Linear Technologies LTC3815"
index 4c306943383ab368ad5f9700c1e09bc873822e44..658cb1173291006d83033a6363ac52d24635abaf 100644 (file)
@@ -26,8 +26,8 @@ enum chips {
        ltc3880, ltc3882, ltc3883, ltc3884, ltc3886, ltc3887, ltc3889, ltc7132,
        ltc7841, ltc7880,
        /* Modules */
-       ltm2987, ltm4664, ltm4675, ltm4676, ltm4677, ltm4678, ltm4680, ltm4686,
-       ltm4700,
+       ltm2987, ltm4664, ltm4673, ltm4675, ltm4676, ltm4677, ltm4678, ltm4680,
+       ltm4686, ltm4700,
 };
 
 /* Common for all chips */
@@ -86,6 +86,8 @@ enum chips {
 #define LTM2987_ID_A                   0x8010  /* A/B for two die IDs */
 #define LTM2987_ID_B                   0x8020
 #define LTM4664_ID                     0x4120
+#define LTM4673_ID_REV1                        0x0230
+#define LTM4673_ID                     0x4480
 #define LTM4675_ID                     0x47a0
 #define LTM4676_ID_REV1                        0x4400
 #define LTM4676_ID_REV2                        0x4480
@@ -554,6 +556,7 @@ static const struct i2c_device_id ltc2978_id[] = {
        {"ltc7880", ltc7880},
        {"ltm2987", ltm2987},
        {"ltm4664", ltm4664},
+       {"ltm4673", ltm4673},
        {"ltm4675", ltm4675},
        {"ltm4676", ltm4676},
        {"ltm4677", ltm4677},
@@ -665,6 +668,8 @@ static int ltc2978_get_id(struct i2c_client *client)
                return ltm2987;
        else if (chip_id == LTM4664_ID)
                return ltm4664;
+       else if (chip_id == LTM4673_ID || chip_id == LTM4673_ID_REV1)
+               return ltm4673;
        else if (chip_id == LTM4675_ID)
                return ltm4675;
        else if (chip_id == LTM4676_ID_REV1 || chip_id == LTM4676_ID_REV2 ||
@@ -869,6 +874,21 @@ static int ltc2978_probe(struct i2c_client *client)
                  | PMBUS_HAVE_IOUT
                  | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP;
                break;
+       case ltm4673:
+               data->features |= FEAT_NEEDS_POLLING;
+               info->read_word_data = ltc2975_read_word_data;
+               info->pages = LTC2974_NUM_PAGES;
+               info->func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT
+                 | PMBUS_HAVE_TEMP2;
+               for (i = 0; i < info->pages; i++) {
+                       info->func[i] |= PMBUS_HAVE_IIN
+                         | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT
+                         | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT
+                         | PMBUS_HAVE_PIN
+                         | PMBUS_HAVE_POUT
+                         | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP;
+               }
+               break;
        default:
                return -ENODEV;
        }
@@ -926,6 +946,7 @@ static const struct of_device_id ltc2978_of_match[] = {
        { .compatible = "lltc,ltc7880" },
        { .compatible = "lltc,ltm2987" },
        { .compatible = "lltc,ltm4664" },
+       { .compatible = "lltc,ltm4673" },
        { .compatible = "lltc,ltm4675" },
        { .compatible = "lltc,ltm4676" },
        { .compatible = "lltc,ltm4677" },