]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
regulator: pca9450: Add PMIC pca9452 support
authorJoy Zou <joy.zou@nxp.com>
Thu, 5 Dec 2024 16:51:12 +0000 (11:51 -0500)
committerMark Brown <broonie@kernel.org>
Mon, 9 Dec 2024 13:14:17 +0000 (13:14 +0000)
Add the PMIC pca9452 support, which add ldo3 compared with pca9451a.

Signed-off-by: Joy Zou <joy.zou@nxp.com>
Signed-off-by: Frank Li <Frank.Li@nxp.com>
Link: https://patch.msgid.link/20241205-pca9450-v1-4-aab448b74e78@nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/regulator/pca9450-regulator.c
include/linux/regulator/pca9450.h

index 0b1f099fdd5ee4812e53b20600ce230991c68bd4..faa6b79c27d75f80d6f6a6b3e4f593a94dc01e12 100644 (file)
@@ -815,6 +815,24 @@ static const struct pca9450_regulator_desc pca9451a_regulators[] = {
                        .owner = THIS_MODULE,
                },
        },
+       {
+               .desc = {
+                       .name = "ldo3",
+                       .of_match = of_match_ptr("LDO3"),
+                       .regulators_node = of_match_ptr("regulators"),
+                       .id = PCA9450_LDO3,
+                       .ops = &pca9450_ldo_regulator_ops,
+                       .type = REGULATOR_VOLTAGE,
+                       .n_voltages = PCA9450_LDO3_VOLTAGE_NUM,
+                       .linear_ranges = pca9450_ldo34_volts,
+                       .n_linear_ranges = ARRAY_SIZE(pca9450_ldo34_volts),
+                       .vsel_reg = PCA9450_REG_LDO3CTRL,
+                       .vsel_mask = LDO3OUT_MASK,
+                       .enable_reg = PCA9450_REG_LDO3CTRL,
+                       .enable_mask = LDO3_EN_MASK,
+                       .owner = THIS_MODULE,
+               },
+       },
        {
                .desc = {
                        .name = "ldo4",
@@ -916,6 +934,7 @@ static int pca9450_i2c_probe(struct i2c_client *i2c)
                pca9450->rcnt = ARRAY_SIZE(pca9450bc_regulators);
                break;
        case PCA9450_TYPE_PCA9451A:
+       case PCA9450_TYPE_PCA9452:
                regulator_desc = pca9451a_regulators;
                pca9450->rcnt = ARRAY_SIZE(pca9451a_regulators);
                break;
@@ -943,7 +962,8 @@ static int pca9450_i2c_probe(struct i2c_client *i2c)
        /* Check your board and dts for match the right pmic */
        if (((device_id >> 4) != 0x1 && type == PCA9450_TYPE_PCA9450A) ||
            ((device_id >> 4) != 0x3 && type == PCA9450_TYPE_PCA9450BC) ||
-           ((device_id >> 4) != 0x9 && type == PCA9450_TYPE_PCA9451A))
+           ((device_id >> 4) != 0x9 && type == PCA9450_TYPE_PCA9451A) ||
+           ((device_id >> 4) != 0x9 && type == PCA9450_TYPE_PCA9452))
                return dev_err_probe(&i2c->dev, -EINVAL,
                                     "Device id(%x) mismatched\n", device_id >> 4);
 
@@ -955,6 +975,9 @@ static int pca9450_i2c_probe(struct i2c_client *i2c)
                r = &regulator_desc[i];
                desc = &r->desc;
 
+               if (type == PCA9450_TYPE_PCA9451A && !strcmp(desc->name, "ldo3"))
+                       continue;
+
                config.regmap = pca9450->regmap;
                config.dev = pca9450->dev;
 
@@ -1043,6 +1066,10 @@ static const struct of_device_id pca9450_of_match[] = {
                .compatible = "nxp,pca9451a",
                .data = (void *)PCA9450_TYPE_PCA9451A,
        },
+       {
+               .compatible = "nxp,pca9452",
+               .data = (void *)PCA9450_TYPE_PCA9452,
+       },
        { }
 };
 MODULE_DEVICE_TABLE(of, pca9450_of_match);
index 243633c8dceb3f2b1446cec2f9c928b7c0a1c9c3..b427b5873de1a184504a87502474a2101b58cd52 100644 (file)
@@ -10,6 +10,7 @@ enum pca9450_chip_type {
        PCA9450_TYPE_PCA9450A = 0,
        PCA9450_TYPE_PCA9450BC,
        PCA9450_TYPE_PCA9451A,
+       PCA9450_TYPE_PCA9452,
        PCA9450_TYPE_AMOUNT,
 };