]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
regulator: axp20x: AXP717: set ramp_delay
authorPhilippe Simons <simons.philippe@gmail.com>
Sun, 8 Dec 2024 12:43:08 +0000 (13:43 +0100)
committerMark Brown <broonie@kernel.org>
Mon, 9 Dec 2024 13:06:07 +0000 (13:06 +0000)
AXP717 datasheet says that regulator ramp delay is 15.625 us/step,
which is 10mV in our case.

Add a AXP_DESC_RANGES_DELAY macro and update AXP_DESC_RANGES macro to
expand to AXP_DESC_RANGES_DELAY with ramp_delay = 0

For DCDC4, steps is 100mv

Add a AXP_DESC_DELAY macro and update AXP_DESC macro to
expand to AXP_DESC_DELAY with ramp_delay = 0

This patch fix crashes when using CPU DVFS.

Signed-off-by: Philippe Simons <simons.philippe@gmail.com>
Tested-by: Hironori KIKUCHI <kikuchan98@gmail.com>
Tested-by: Chris Morgan <macromorgan@hotmail.com>
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
Fixes: d2ac3df75c3a ("regulator: axp20x: add support for the AXP717")
Link: https://patch.msgid.link/20241208124308.5630-1-simons.philippe@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/regulator/axp20x-regulator.c

index e3cc59b82ea61c3bd1148dd25925e30f5a2e57cc..dca99cfb7cbb8aa62c20da4683b7a003ce1c0b94 100644 (file)
                .ops            = &axp20x_ops,                                  \
        }
 
-#define AXP_DESC(_family, _id, _match, _supply, _min, _max, _step, _vreg,      \
-                _vmask, _ereg, _emask)                                         \
+#define AXP_DESC_DELAY(_family, _id, _match, _supply, _min, _max, _step, _vreg,        \
+                _vmask, _ereg, _emask, _ramp_delay)                            \
        [_family##_##_id] = {                                                   \
                .name           = (_match),                                     \
                .supply_name    = (_supply),                                    \
                .vsel_mask      = (_vmask),                                     \
                .enable_reg     = (_ereg),                                      \
                .enable_mask    = (_emask),                                     \
+               .ramp_delay = (_ramp_delay),                                    \
                .ops            = &axp20x_ops,                                  \
        }
 
+#define AXP_DESC(_family, _id, _match, _supply, _min, _max, _step, _vreg,      \
+                _vmask, _ereg, _emask)                                         \
+       AXP_DESC_DELAY(_family, _id, _match, _supply, _min, _max, _step, _vreg, \
+                _vmask, _ereg, _emask, 0)
+
 #define AXP_DESC_SW(_family, _id, _match, _supply, _ereg, _emask)              \
        [_family##_##_id] = {                                                   \
                .name           = (_match),                                     \
                .ops            = &axp20x_ops_fixed                             \
        }
 
-#define AXP_DESC_RANGES(_family, _id, _match, _supply, _ranges, _n_voltages,   \
-                       _vreg, _vmask, _ereg, _emask)                           \
+#define AXP_DESC_RANGES_DELAY(_family, _id, _match, _supply, _ranges, _n_voltages,     \
+                       _vreg, _vmask, _ereg, _emask, _ramp_delay)      \
        [_family##_##_id] = {                                                   \
                .name           = (_match),                                     \
                .supply_name    = (_supply),                                    \
                .enable_mask    = (_emask),                                     \
                .linear_ranges  = (_ranges),                                    \
                .n_linear_ranges = ARRAY_SIZE(_ranges),                         \
+               .ramp_delay = (_ramp_delay),                                    \
                .ops            = &axp20x_ops_range,                            \
        }
 
+#define AXP_DESC_RANGES(_family, _id, _match, _supply, _ranges, _n_voltages,   \
+                       _vreg, _vmask, _ereg, _emask)                           \
+       AXP_DESC_RANGES_DELAY(_family, _id, _match, _supply, _ranges,           \
+                _n_voltages, _vreg, _vmask, _ereg, _emask, 0)
+
 static const int axp209_dcdc2_ldo3_slew_rates[] = {
        1600,
         800,
@@ -781,21 +793,21 @@ static const struct linear_range axp717_dcdc3_ranges[] = {
 };
 
 static const struct regulator_desc axp717_regulators[] = {
-       AXP_DESC_RANGES(AXP717, DCDC1, "dcdc1", "vin1",
+       AXP_DESC_RANGES_DELAY(AXP717, DCDC1, "dcdc1", "vin1",
                        axp717_dcdc1_ranges, AXP717_DCDC1_NUM_VOLTAGES,
                        AXP717_DCDC1_CONTROL, AXP717_DCDC_V_OUT_MASK,
-                       AXP717_DCDC_OUTPUT_CONTROL, BIT(0)),
-       AXP_DESC_RANGES(AXP717, DCDC2, "dcdc2", "vin2",
+                       AXP717_DCDC_OUTPUT_CONTROL, BIT(0), 640),
+       AXP_DESC_RANGES_DELAY(AXP717, DCDC2, "dcdc2", "vin2",
                        axp717_dcdc2_ranges, AXP717_DCDC2_NUM_VOLTAGES,
                        AXP717_DCDC2_CONTROL, AXP717_DCDC_V_OUT_MASK,
-                       AXP717_DCDC_OUTPUT_CONTROL, BIT(1)),
-       AXP_DESC_RANGES(AXP717, DCDC3, "dcdc3", "vin3",
+                       AXP717_DCDC_OUTPUT_CONTROL, BIT(1), 640),
+       AXP_DESC_RANGES_DELAY(AXP717, DCDC3, "dcdc3", "vin3",
                        axp717_dcdc3_ranges, AXP717_DCDC3_NUM_VOLTAGES,
                        AXP717_DCDC3_CONTROL, AXP717_DCDC_V_OUT_MASK,
-                       AXP717_DCDC_OUTPUT_CONTROL, BIT(2)),
-       AXP_DESC(AXP717, DCDC4, "dcdc4", "vin4", 1000, 3700, 100,
+                       AXP717_DCDC_OUTPUT_CONTROL, BIT(2), 640),
+       AXP_DESC_DELAY(AXP717, DCDC4, "dcdc4", "vin4", 1000, 3700, 100,
                 AXP717_DCDC4_CONTROL, AXP717_DCDC_V_OUT_MASK,
-                AXP717_DCDC_OUTPUT_CONTROL, BIT(3)),
+                AXP717_DCDC_OUTPUT_CONTROL, BIT(3), 6400),
        AXP_DESC(AXP717, ALDO1, "aldo1", "aldoin", 500, 3500, 100,
                 AXP717_ALDO1_CONTROL, AXP717_LDO_V_OUT_MASK,
                 AXP717_LDO0_OUTPUT_CONTROL, BIT(0)),