Unverified Commit f07ae52f authored by Philippe Simons's avatar Philippe Simons Committed by Mark Brown
Browse files

regulator: axp20x: AXP717: set ramp_delay



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: default avatarPhilippe Simons <simons.philippe@gmail.com>
Tested-by: default avatarHironori KIKUCHI <kikuchan98@gmail.com>
Tested-by: default avatarChris Morgan <macromorgan@hotmail.com>
Reviewed-by: default avatarChen-Yu Tsai <wens@csie.org>
Fixes: d2ac3df7 ("regulator: axp20x: add support for the AXP717")
Link: https://patch.msgid.link/20241208124308.5630-1-simons.philippe@gmail.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 8099b1f7
Loading
Loading
Loading
Loading
+24 −12
Original line number Diff line number Diff line
@@ -371,8 +371,8 @@
		.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),					\
@@ -388,9 +388,15 @@
		.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),					\
@@ -419,8 +425,8 @@
		.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),					\
@@ -436,9 +442,15 @@
		.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)),