]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
power: regulator: add AXP313 support
authorAndre Przywara <andre.przywara@arm.com>
Tue, 17 Oct 2023 13:12:44 +0000 (14:12 +0100)
committerAndre Przywara <andre.przywara@arm.com>
Sun, 12 Nov 2023 16:47:16 +0000 (16:47 +0000)
The X-Powers AXP313a is a small PMIC with just three buck converters and
three LDOs, one of which is actually fixed (so not modelled here).

Add the compatible string and the respective regulator ranges to allow
drivers to adjust voltages.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>
drivers/power/pmic/axp.c
drivers/power/regulator/axp_regulator.c
include/axp_pmic.h

index 025dac24f285db7e11b5afe2ffdc202612c5faf6..0e1e45fba74abe522634d1188db0ecbc384b88fa 100644 (file)
@@ -87,6 +87,7 @@ static const struct udevice_id axp_pmic_ids[] = {
        { .compatible = "x-powers,axp209", .data = AXP209_ID },
        { .compatible = "x-powers,axp221", .data = AXP221_ID },
        { .compatible = "x-powers,axp223", .data = AXP223_ID },
+       { .compatible = "x-powers,axp313a", .data = AXP313_ID },
        { .compatible = "x-powers,axp803", .data = AXP803_ID },
        { .compatible = "x-powers,axp806", .data = AXP806_ID },
        { .compatible = "x-powers,axp809", .data = AXP809_ID },
index 02f320eac1e198257cba7634e811be86c21da2c2..d27e09538e041fda3020d02f73441055bec66c51 100644 (file)
@@ -173,6 +173,22 @@ static const struct axp_regulator_plat axp22x_regulators[] = {
        { }
 };
 
+/*
+ * The "dcdc1" regulator has another range, beyond 1.54V up to 3.4V, in
+ * steps of 100mV. We cannot model this easily, but also don't need that,
+ * since it's typically only used for ~1.1V anyway, so just ignore it.
+ * Also the DCDC3 regulator is described wrongly in the (available) manual,
+ * experiments show that the split point is at 1200mV, as for DCDC1/2.
+ */
+static const struct axp_regulator_plat axp313_regulators[] = {
+       { "dcdc1", 0x10, BIT(0), 0x13, 0x7f,  500, 1540,  10, 70 },
+       { "dcdc2", 0x10, BIT(1), 0x14, 0x7f,  500, 1540,  10, 70 },
+       { "dcdc3", 0x10, BIT(2), 0x15, 0x7f,  500, 1840,  10, 70 },
+       { "aldo1", 0x10, BIT(3), 0x16, 0x1f,  500, 3500, 100, NA },
+       { "dldo1", 0x10, BIT(4), 0x17, 0x1f,  500, 3500, 100, NA },
+       { }
+};
+
 static const struct axp_regulator_plat axp803_regulators[] = {
        { "dcdc1", 0x10, BIT(0), 0x20, 0x1f, 1600, 3400, 100, NA },
        { "dcdc2", 0x10, BIT(1), 0x21, 0x7f,  500, 1300,  10, 70 },
@@ -274,6 +290,7 @@ static const struct axp_regulator_plat *const axp_regulators[] = {
        [AXP209_ID]     = axp20x_regulators,
        [AXP221_ID]     = axp22x_regulators,
        [AXP223_ID]     = axp22x_regulators,
+       [AXP313_ID]     = axp313_regulators,
        [AXP803_ID]     = axp803_regulators,
        [AXP806_ID]     = axp806_regulators,
        [AXP809_ID]     = axp809_regulators,
index 4ac64865831d6b9c00c24b89dc558c978ddbe001..aabafc8501b10b25d3e61b4c5a47a4f37780405d 100644 (file)
@@ -32,6 +32,7 @@ enum {
        AXP209_ID,
        AXP221_ID,
        AXP223_ID,
+       AXP313_ID,
        AXP803_ID,
        AXP806_ID,
        AXP809_ID,