Unverified Commit 0057222c authored by Andre Przywara's avatar Andre Przywara Committed by Mark Brown
Browse files

regulator: axp20x: AXP717: fix LDO supply rails and off-by-ones



The X-Powers AXP717 PMIC has separate input supply pins for each group
of LDOs, so they are not all using the same DCDC1 input, as described
currently.

Replace the "supply" member of each LDO description with the respective
group supply name, so that the supply dependencies can be correctly
described in the devicetree.

Also fix two off-by-ones in the regulator macros, after some double
checking the numbers against the datasheet. This uncovered a bug in the
datasheet: add a comment to document this.

Fixes: d2ac3df7 ("regulator: axp20x: add support for the AXP717")
Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
Reviewed-by: default avatarJohn Watts <contact@jookia.org>
Link: https://lore.kernel.org/r/20240418000736.24338-3-andre.przywara@arm.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 4cac29b8
Loading
Loading
Loading
Loading
+19 −14
Original line number Diff line number Diff line
@@ -140,7 +140,7 @@

#define AXP717_DCDC1_NUM_VOLTAGES	88
#define AXP717_DCDC2_NUM_VOLTAGES	107
#define AXP717_DCDC3_NUM_VOLTAGES	104
#define AXP717_DCDC3_NUM_VOLTAGES	103
#define AXP717_DCDC_V_OUT_MASK		GENMASK(6, 0)
#define AXP717_LDO_V_OUT_MASK		GENMASK(4, 0)

@@ -763,10 +763,15 @@ static const struct linear_range axp717_dcdc1_ranges[] = {
	REGULATOR_LINEAR_RANGE(1220000, 71, 87, 20000),
};

/*
 * The manual says that the last voltage is 3.4V, encoded as 0b1101011 (107),
 * but every other method proves that this is wrong, so it's really 106 that
 * programs the final 3.4V.
 */
static const struct linear_range axp717_dcdc2_ranges[] = {
	REGULATOR_LINEAR_RANGE(500000,   0,  70,  10000),
	REGULATOR_LINEAR_RANGE(1220000, 71,  87,  20000),
	REGULATOR_LINEAR_RANGE(1600000, 88, 107, 100000),
	REGULATOR_LINEAR_RANGE(1600000, 88, 106, 100000),
};

static const struct linear_range axp717_dcdc3_ranges[] = {
@@ -790,40 +795,40 @@ static const struct regulator_desc axp717_regulators[] = {
	AXP_DESC(AXP717, DCDC4, "dcdc4", "vin4", 1000, 3700, 100,
		 AXP717_DCDC4_CONTROL, AXP717_DCDC_V_OUT_MASK,
		 AXP717_DCDC_OUTPUT_CONTROL, BIT(3)),
	AXP_DESC(AXP717, ALDO1, "aldo1", "vin1", 500, 3500, 100,
	AXP_DESC(AXP717, ALDO1, "aldo1", "aldoin", 500, 3500, 100,
		 AXP717_ALDO1_CONTROL, AXP717_LDO_V_OUT_MASK,
		 AXP717_LDO0_OUTPUT_CONTROL, BIT(0)),
	AXP_DESC(AXP717, ALDO2, "aldo2", "vin1", 500, 3500, 100,
	AXP_DESC(AXP717, ALDO2, "aldo2", "aldoin", 500, 3500, 100,
		 AXP717_ALDO2_CONTROL, AXP717_LDO_V_OUT_MASK,
		 AXP717_LDO0_OUTPUT_CONTROL, BIT(1)),
	AXP_DESC(AXP717, ALDO3, "aldo3", "vin1", 500, 3500, 100,
	AXP_DESC(AXP717, ALDO3, "aldo3", "aldoin", 500, 3500, 100,
		 AXP717_ALDO3_CONTROL, AXP717_LDO_V_OUT_MASK,
		 AXP717_LDO0_OUTPUT_CONTROL, BIT(2)),
	AXP_DESC(AXP717, ALDO4, "aldo4", "vin1", 500, 3500, 100,
	AXP_DESC(AXP717, ALDO4, "aldo4", "aldoin", 500, 3500, 100,
		 AXP717_ALDO4_CONTROL, AXP717_LDO_V_OUT_MASK,
		 AXP717_LDO0_OUTPUT_CONTROL, BIT(3)),
	AXP_DESC(AXP717, BLDO1, "bldo1", "vin1", 500, 3500, 100,
	AXP_DESC(AXP717, BLDO1, "bldo1", "bldoin", 500, 3500, 100,
		 AXP717_BLDO1_CONTROL, AXP717_LDO_V_OUT_MASK,
		 AXP717_LDO0_OUTPUT_CONTROL, BIT(4)),
	AXP_DESC(AXP717, BLDO2, "bldo2", "vin1", 500, 3500, 100,
	AXP_DESC(AXP717, BLDO2, "bldo2", "bldoin", 500, 3500, 100,
		 AXP717_BLDO2_CONTROL, AXP717_LDO_V_OUT_MASK,
		 AXP717_LDO0_OUTPUT_CONTROL, BIT(5)),
	AXP_DESC(AXP717, BLDO3, "bldo3", "vin1", 500, 3500, 100,
	AXP_DESC(AXP717, BLDO3, "bldo3", "bldoin", 500, 3500, 100,
		 AXP717_BLDO3_CONTROL, AXP717_LDO_V_OUT_MASK,
		 AXP717_LDO0_OUTPUT_CONTROL, BIT(6)),
	AXP_DESC(AXP717, BLDO4, "bldo4", "vin1", 500, 3500, 100,
	AXP_DESC(AXP717, BLDO4, "bldo4", "bldoin", 500, 3500, 100,
		 AXP717_BLDO4_CONTROL, AXP717_LDO_V_OUT_MASK,
		 AXP717_LDO0_OUTPUT_CONTROL, BIT(7)),
	AXP_DESC(AXP717, CLDO1, "cldo1", "vin1", 500, 3500, 100,
	AXP_DESC(AXP717, CLDO1, "cldo1", "cldoin", 500, 3500, 100,
		 AXP717_CLDO1_CONTROL, AXP717_LDO_V_OUT_MASK,
		 AXP717_LDO1_OUTPUT_CONTROL, BIT(0)),
	AXP_DESC(AXP717, CLDO2, "cldo2", "vin1", 500, 3500, 100,
	AXP_DESC(AXP717, CLDO2, "cldo2", "cldoin", 500, 3500, 100,
		 AXP717_CLDO2_CONTROL, AXP717_LDO_V_OUT_MASK,
		 AXP717_LDO1_OUTPUT_CONTROL, BIT(1)),
	AXP_DESC(AXP717, CLDO3, "cldo3", "vin1", 500, 3500, 100,
	AXP_DESC(AXP717, CLDO3, "cldo3", "cldoin", 500, 3500, 100,
		 AXP717_CLDO3_CONTROL, AXP717_LDO_V_OUT_MASK,
		 AXP717_LDO1_OUTPUT_CONTROL, BIT(2)),
	AXP_DESC(AXP717, CLDO4, "cldo4", "vin1", 500, 3500, 100,
	AXP_DESC(AXP717, CLDO4, "cldo4", "cldoin", 500, 3500, 100,
		 AXP717_CLDO4_CONTROL, AXP717_LDO_V_OUT_MASK,
		 AXP717_LDO1_OUTPUT_CONTROL, BIT(3)),
	AXP_DESC(AXP717, CPUSLDO, "cpusldo", "vin1", 500, 1400, 50,