Add the MPQ8646, which handles the same case as the MPQ8785.

It shares the info table, and it shares the VOUT:
both parts report VID in VOUT_MODE while actually encoding VOUT
as DIRECT with m=64 R=1, which mpq8785_identify_vout() already fixes up.

Linux does the same thing from the other side:
drivers/hwmon/pmbus/mpq8646.c intercepts PMBUS_VOUT_MODE in
read_byte_data() and returns DIRECT when the chip says
VID.

Linux gained the compatible in the shared binding
(Documentation/devicetree/bindings/hwmon/pmbus/mps,mpq8785.yaml,
commit e7ba3115134b "dt-bindings: hwmon: pmbus: add MPS MPQ8646"),
which groups it with mps,mpq8785 for mps,vout-fb-divider-ratio-permille,
the same here.

Verified against silicon on a board whose +0V8_VDD rail is an
MPQ8646: the chip self-reports MODEL="MPQ8646" with VOUT_MODE=0x17.

Signed-off-by: Vincent Jardin <[email protected]>

---

 drivers/power/regulator/Kconfig   | 4 ++--
 drivers/power/regulator/mpq8785.c | 7 +++++--
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/power/regulator/Kconfig b/drivers/power/regulator/Kconfig
index 00a25acfdf9..8d4d6e69e46 100644
--- a/drivers/power/regulator/Kconfig
+++ b/drivers/power/regulator/Kconfig
@@ -598,12 +598,12 @@ config DM_REGULATOR_PMBUS_GENERIC
          m / b / R coefficients) need handling.
 
 config DM_REGULATOR_MPQ8785
-       bool "MPS MPQ8785 / MPM3695 / MPM82504 PMBus voltage regulator"
+       bool "MPS MPQ8785 / MPQ8646 / MPM3695 / MPM82504 PMBus voltage 
regulator"
        depends on DM_REGULATOR_PMBUS_HELPER
        help
          Driver for the Monolithic Power Systems MPQ8785 family of
          digital multiphase voltage regulators with PMBus. Supports
-         MPM3695, MPM3695-25, MPM82504, and MPQ8785. Adapted from the
+         MPM3695, MPM3695-25, MPM82504, MPQ8785 and MPQ8646. Adapted from the
          Linux drivers/hwmon/pmbus/mpq8785.c reference.
 
 config SANDBOX_PMBUS
diff --git a/drivers/power/regulator/mpq8785.c 
b/drivers/power/regulator/mpq8785.c
index dc321f0e410..72bfaa5bf8c 100644
--- a/drivers/power/regulator/mpq8785.c
+++ b/drivers/power/regulator/mpq8785.c
@@ -32,6 +32,7 @@ enum mpq_chip_id {
        MPQ_MPM3695_25  = 1,
        MPQ_MPM82504    = 2,
        MPQ_MPQ8785     = 3,
+       MPQ_MPQ8646     = 4,
 };
 
 /*
@@ -398,6 +399,7 @@ static struct pmbus_driver_info *mpq8785_pick_info(enum 
mpq_chip_id chip_id)
        case MPQ_MPM82504:
                return &mpm82504_info;
        case MPQ_MPQ8785:
+       case MPQ_MPQ8646:
        default:
                return &mpq8785_info;
        }
@@ -444,8 +446,8 @@ static int mpq8785_probe(struct udevice *dev)
                }
        }
 
-       /* MPQ8785 specific: refine VOUT format from VOUT_MODE. */
-       if (chip_id == MPQ_MPQ8785)
+       /* MPQ8785/MPQ8646 specific: refine VOUT format from VOUT_MODE. */
+       if (chip_id == MPQ_MPQ8785 || chip_id == MPQ_MPQ8646)
                mpq8785_identify_vout(priv->i2c_dev);
 
        /* Apply mps,vout-fb-divider-ratio-permille if present in DT. */
@@ -481,6 +483,7 @@ static const struct udevice_id mpq8785_ids[] = {
        { .compatible = "mps,mpm3695-25", .data = MPQ_MPM3695_25 },
        { .compatible = "mps,mpm82504",   .data = MPQ_MPM82504 },
        { .compatible = "mps,mpq8785",    .data = MPQ_MPQ8785 },
+       { .compatible = "mps,mpq8646",    .data = MPQ_MPQ8646 },
        { }
 };
 
---
base-commit: 6073c36b2c8d39afe3ecc789b281667a3ddebc70
branch: for-upstream/power-regulator-mpq8646-v1

-- 
2.43.0

Reply via email to