]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
regulator: pca9450: Make warm reset on WDOG_B assertion
authorRickard x Andersson <rickaran@axis.com>
Fri, 29 Apr 2022 07:22:10 +0000 (09:22 +0200)
committerMark Brown <broonie@kernel.org>
Tue, 3 May 2022 12:47:43 +0000 (13:47 +0100)
The default configuration of the PMIC behavior makes the PMIC
power cycle most regulators on WDOG_B assertion. This power
cycling causes the memory contents of OCRAM to be lost.
Some systems neeeds some memory that survives reset and
reboot, therefore this patch is created.

Signed-off-by: Rickard x Andersson <rickaran@axis.com>
Link: https://lore.kernel.org/r/20220429072211.24957-4-rickaran@axis.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/regulator/pca9450-regulator.c

index 87b4e6e29ba16f714e7bda0b1f05412ce2d489d6..4a3ae73c600ca017f911c7d4bead3dcaaa954320 100644 (file)
@@ -702,6 +702,7 @@ static int pca9450_i2c_probe(struct i2c_client *i2c,
        struct regulator_config config = { };
        struct pca9450 *pca9450;
        unsigned int device_id, i;
+       unsigned int reset_ctrl;
        int ret;
 
        if (!i2c->irq) {
@@ -802,9 +803,14 @@ static int pca9450_i2c_probe(struct i2c_client *i2c,
                return ret;
        }
 
+       if (of_property_read_bool(i2c->dev.of_node, "nxp,wdog_b-warm-reset"))
+               reset_ctrl = WDOG_B_CFG_WARM;
+       else
+               reset_ctrl = WDOG_B_CFG_COLD_LDO12;
+
        /* Set reset behavior on assertion of WDOG_B signal */
        ret = regmap_update_bits(pca9450->regmap, PCA9450_REG_RESET_CTRL,
-                               WDOG_B_CFG_MASK, WDOG_B_CFG_COLD_LDO12);
+                                WDOG_B_CFG_MASK, reset_ctrl);
        if (ret) {
                dev_err(&i2c->dev, "Failed to set WDOG_B reset behavior\n");
                return ret;