mirror of
https://github.com/armbian/build.git
synced 2026-01-06 09:58:46 -08:00
Port patches from PR #8831
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
From 72286070835a37fe74b630f36a8b5c56ad26b89d Mon Sep 17 00:00:00 2001
|
||||
From: Andre Przywara <andre.przywara@arm.com>
|
||||
Date: Fri, 19 Sep 2025 01:00:17 +0100
|
||||
Subject: [PATCH 1/5] dt-bindings: mfd: x-powers,axp152: Add polyphased
|
||||
property
|
||||
|
||||
Some X-Powers AXP PMICs can combine some of their DC/DC buck converter
|
||||
outputs in a multi-phase fashion, to achieve higher currents and
|
||||
decrease the output ripple. The datasheets call this poly-phase. This is
|
||||
programmable in the PMIC, although often set up as the PMIC's reset
|
||||
default.
|
||||
|
||||
Add the "x-powers,polyphased" property to the binding, to describe those
|
||||
pairs or tuples of regulators that should work together. In the lead
|
||||
regulator node, the property lists the phandles of the connected
|
||||
regulators. Just an empty property means no poly-phasing.
|
||||
|
||||
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
|
||||
---
|
||||
.../devicetree/bindings/mfd/x-powers,axp152.yaml | 14 ++++++++++++++
|
||||
1 file changed, 14 insertions(+)
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml b/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml
|
||||
index 45f015d63df1..260c4c0afc47 100644
|
||||
--- a/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml
|
||||
+++ b/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml
|
||||
@@ -304,6 +304,15 @@ properties:
|
||||
noise. This probably makes sense for HiFi audio related
|
||||
applications that aren't battery constrained.
|
||||
|
||||
+ x-powers,polyphased:
|
||||
+ $ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
+ description:
|
||||
+ A list of phandles pointing to other regulators that should be
|
||||
+ polyphased with this regulator. The linked regulators will be
|
||||
+ synchronised with this regulator, within the PMIC, but only if
|
||||
+ supported by the PMIC. An empty list means this regulator
|
||||
+ should be configured in a single-phase setup.
|
||||
+
|
||||
additionalProperties: false
|
||||
|
||||
required:
|
||||
@@ -377,6 +386,7 @@ examples:
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <1450000>;
|
||||
regulator-name = "vdd-cpu";
|
||||
+ x-powers,polyphased = <®_dcdc4>;
|
||||
};
|
||||
|
||||
reg_dcdc3: dcdc3 {
|
||||
@@ -386,6 +396,10 @@ examples:
|
||||
regulator-name = "vdd-int-dll";
|
||||
};
|
||||
|
||||
+ reg_dcdc4: dcdc4 {
|
||||
+ /* dual-phased with DCDC2 */
|
||||
+ };
|
||||
+
|
||||
reg_ldo1: ldo1 {
|
||||
/* LDO1 is a fixed output regulator */
|
||||
regulator-always-on;
|
||||
--
|
||||
2.43.0
|
||||
|
||||
@@ -0,0 +1,148 @@
|
||||
From 0cb44fa029c3a41b769ebbd7e4044682cad9a685 Mon Sep 17 00:00:00 2001
|
||||
From: Andre Przywara <andre.przywara@arm.com>
|
||||
Date: Fri, 19 Sep 2025 01:00:17 +0100
|
||||
Subject: [PATCH 2/5] mfd: axp20x: Refactor axp20x_is_polyphase_slave()
|
||||
|
||||
Some X-Powers AXP PMICs allow to combine certain DC/DC rails together in
|
||||
a multi-phase fashion. So far we don't actively program those
|
||||
connections, but we detect the existing setup, and prevent the connected
|
||||
regulators from being re-programmed or turned off. At the moment this is
|
||||
done in a switch/case construct, listing the known regulator pairs for
|
||||
those PMICs supported.
|
||||
|
||||
To get rid of this ever growing code section, create a data structure
|
||||
that describes the relationship, and have generic code that iterates
|
||||
over the entries and checks for matches.
|
||||
|
||||
This not only cleans that function up and makes extensions much simpler,
|
||||
but also allows to reuse this information for the upcoming programming
|
||||
of those poly-phase setups.
|
||||
|
||||
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
|
||||
---
|
||||
drivers/regulator/axp20x-regulator.c | 91 ++++++++++++++--------------
|
||||
1 file changed, 45 insertions(+), 46 deletions(-)
|
||||
|
||||
diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
|
||||
index da891415efc0..19c9a98d1835 100644
|
||||
--- a/drivers/regulator/axp20x-regulator.c
|
||||
+++ b/drivers/regulator/axp20x-regulator.c
|
||||
@@ -1481,70 +1481,69 @@ static int axp20x_set_dcdc_workmode(struct regulator_dev *rdev, int id, u32 work
|
||||
return regmap_update_bits(rdev->regmap, reg, mask, workmode);
|
||||
}
|
||||
|
||||
+struct dualphase_regulator {
|
||||
+ int axp_id;
|
||||
+ int reg1, reg2;
|
||||
+ unsigned int polyphase_reg;
|
||||
+ unsigned int bitmask;
|
||||
+} dualphase_regulators[] = {
|
||||
+ { AXP323_ID, AXP313A_DCDC1, AXP313A_DCDC2,
|
||||
+ AXP323_DCDC_MODE_CTRL2, BIT(1), },
|
||||
+ { AXP803_ID, AXP803_DCDC2, AXP803_DCDC3, AXP803_POLYPHASE_CTRL,
|
||||
+ AXP803_DCDC23_POLYPHASE_DUAL, },
|
||||
+ { AXP803_ID, AXP803_DCDC5, AXP803_DCDC6, AXP803_POLYPHASE_CTRL,
|
||||
+ AXP803_DCDC56_POLYPHASE_DUAL, },
|
||||
+ /* AXP806's DCDC-A/B/C is a tri-phase regulator */
|
||||
+ { AXP806_ID, AXP806_DCDCD, AXP806_DCDCE, AXP806_DCDC_MODE_CTRL2,
|
||||
+ AXP806_DCDCDE_POLYPHASE_DUAL, },
|
||||
+ { AXP813_ID, AXP803_DCDC2, AXP803_DCDC3, AXP803_POLYPHASE_CTRL,
|
||||
+ AXP803_DCDC23_POLYPHASE_DUAL, },
|
||||
+ { AXP813_ID, AXP803_DCDC5, AXP803_DCDC6, AXP803_POLYPHASE_CTRL,
|
||||
+ AXP803_DCDC56_POLYPHASE_DUAL, },
|
||||
+ { AXP15060_ID, AXP15060_DCDC2, AXP15060_DCDC3, AXP15060_DCDC_MODE_CTRL1,
|
||||
+ AXP15060_DCDC23_POLYPHASE_DUAL_MASK, },
|
||||
+ { AXP15060_ID, AXP15060_DCDC4, AXP15060_DCDC6, AXP15060_DCDC_MODE_CTRL1,
|
||||
+ AXP15060_DCDC46_POLYPHASE_DUAL_MASK, },
|
||||
+};
|
||||
+
|
||||
/*
|
||||
* This function checks whether a regulator is part of a poly-phase
|
||||
* output setup based on the registers settings. Returns true if it is.
|
||||
*/
|
||||
static bool axp20x_is_polyphase_slave(struct axp20x_dev *axp20x, int id)
|
||||
{
|
||||
+ struct dualphase_regulator *dpreg;
|
||||
u32 reg = 0;
|
||||
+ int i;
|
||||
|
||||
- /*
|
||||
- * Currently in our supported AXP variants, only AXP803, AXP806,
|
||||
- * AXP813 and AXP15060 have polyphase regulators.
|
||||
- */
|
||||
- switch (axp20x->variant) {
|
||||
- case AXP803_ID:
|
||||
- case AXP813_ID:
|
||||
- regmap_read(axp20x->regmap, AXP803_POLYPHASE_CTRL, ®);
|
||||
+ for (i = 0; i < ARRAY_SIZE(dualphase_regulators); i++) {
|
||||
+ dpreg = &dualphase_regulators[i];
|
||||
|
||||
- switch (id) {
|
||||
- case AXP803_DCDC3:
|
||||
- return !!(reg & AXP803_DCDC23_POLYPHASE_DUAL);
|
||||
- case AXP803_DCDC6:
|
||||
- return !!(reg & AXP803_DCDC56_POLYPHASE_DUAL);
|
||||
+ if (axp20x->variant != dpreg->axp_id)
|
||||
+ continue;
|
||||
+ /* Is this the second regulator from a dual-phase pair? */
|
||||
+ if (id == dpreg->reg2) {
|
||||
+ regmap_read(axp20x->regmap, dpreg->polyphase_reg, ®);
|
||||
+
|
||||
+ return !!(reg & dpreg->bitmask);
|
||||
}
|
||||
- break;
|
||||
+ }
|
||||
|
||||
- case AXP806_ID:
|
||||
+ /*
|
||||
+ * DCDC-A/B/C can be configured either as a dual-phase (A+B) or
|
||||
+ * as a triple-phase regulator (A+B+C), but not in any other
|
||||
+ * combination. Treat this as a special case here.
|
||||
+ */
|
||||
+ if (axp20x->variant == AXP806_ID) {
|
||||
regmap_read(axp20x->regmap, AXP806_DCDC_MODE_CTRL2, ®);
|
||||
-
|
||||
- switch (id) {
|
||||
- case AXP806_DCDCB:
|
||||
+ if (id == AXP806_DCDCB)
|
||||
return (((reg & AXP806_DCDCABC_POLYPHASE_MASK) ==
|
||||
AXP806_DCDCAB_POLYPHASE_DUAL) ||
|
||||
((reg & AXP806_DCDCABC_POLYPHASE_MASK) ==
|
||||
AXP806_DCDCABC_POLYPHASE_TRI));
|
||||
- case AXP806_DCDCC:
|
||||
+ if (id == AXP806_DCDCC)
|
||||
return ((reg & AXP806_DCDCABC_POLYPHASE_MASK) ==
|
||||
AXP806_DCDCABC_POLYPHASE_TRI);
|
||||
- case AXP806_DCDCE:
|
||||
- return !!(reg & AXP806_DCDCDE_POLYPHASE_DUAL);
|
||||
- }
|
||||
- break;
|
||||
-
|
||||
- case AXP15060_ID:
|
||||
- regmap_read(axp20x->regmap, AXP15060_DCDC_MODE_CTRL1, ®);
|
||||
-
|
||||
- switch (id) {
|
||||
- case AXP15060_DCDC3:
|
||||
- return !!(reg & AXP15060_DCDC23_POLYPHASE_DUAL_MASK);
|
||||
- case AXP15060_DCDC6:
|
||||
- return !!(reg & AXP15060_DCDC46_POLYPHASE_DUAL_MASK);
|
||||
- }
|
||||
- break;
|
||||
-
|
||||
- case AXP323_ID:
|
||||
- regmap_read(axp20x->regmap, AXP323_DCDC_MODE_CTRL2, ®);
|
||||
-
|
||||
- switch (id) {
|
||||
- case AXP313A_DCDC2:
|
||||
- return !!(reg & BIT(1));
|
||||
- }
|
||||
- break;
|
||||
-
|
||||
- default:
|
||||
- return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
--
|
||||
2.43.0
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
From d8f1a6d20eef731149c58b1847696425fdd56f83 Mon Sep 17 00:00:00 2001
|
||||
From: Andre Przywara <andre.przywara@arm.com>
|
||||
Date: Fri, 19 Sep 2025 01:00:17 +0100
|
||||
Subject: [PATCH 3/5] mfd: axp20x: Allow programming dual-phase regulator pairs
|
||||
|
||||
Some X-Powers AXP PMICs allow to combine certain DC/DC rails together in
|
||||
a multi-phase fashion. So far we don't actively program those connections,
|
||||
since the PMIC reset default for the multi-phasing setup was always
|
||||
correct for the existing boards.
|
||||
Now a new set of boards appeared where the reset default is not correct,
|
||||
so we need to actively program the multi-phase setup.
|
||||
|
||||
Use the new data structure describing the dual-phased regulators, and
|
||||
the new "x-powers,polyphased" DT property to enable or disable the
|
||||
dual-phase setup on the PMICs that support it.
|
||||
|
||||
This works by checking how many regulators this DT property list:
|
||||
- If it's none, this means any existing poly-phase setup should be broken
|
||||
up.
|
||||
- If the property references at least one other regulator, we can use our
|
||||
dual-phase regulator table to find the register and bitmask required to
|
||||
establish the dual-phase connection.
|
||||
|
||||
This supports only dual-phased regulator pairs so far, but we will
|
||||
somewhat paper fix this in the next patch.
|
||||
|
||||
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
|
||||
---
|
||||
drivers/regulator/axp20x-regulator.c | 68 ++++++++++++++++++++++++++++
|
||||
1 file changed, 68 insertions(+)
|
||||
|
||||
diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
|
||||
index 19c9a98d1835..e3acc4635a0e 100644
|
||||
--- a/drivers/regulator/axp20x-regulator.c
|
||||
+++ b/drivers/regulator/axp20x-regulator.c
|
||||
@@ -1549,6 +1549,70 @@ static bool axp20x_is_polyphase_slave(struct axp20x_dev *axp20x, int id)
|
||||
return false;
|
||||
}
|
||||
|
||||
+static int axp20x_find_polyphased_reg(const struct regulator_desc *regs,
|
||||
+ int nregulators,
|
||||
+ const struct device_node *np, int index)
|
||||
+{
|
||||
+ struct of_phandle_args args;
|
||||
+ int ret, i;
|
||||
+
|
||||
+ ret = of_parse_phandle_with_fixed_args(np, "x-powers,polyphased",
|
||||
+ 0, index, &args);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ for (i = 0; i < nregulators; i++) {
|
||||
+ if (!strcmp(regs[i].name, args.np->name))
|
||||
+ return i;
|
||||
+ }
|
||||
+
|
||||
+ return -ENODEV;
|
||||
+}
|
||||
+
|
||||
+static int axp20x_parse_polyphase(struct axp20x_dev *axp20x, int primary_reg_id,
|
||||
+ const struct regulator_desc *regs,
|
||||
+ int nregulators, const struct device_node *np)
|
||||
+{
|
||||
+ struct dualphase_regulator *dpreg;
|
||||
+ int reg_id, i;
|
||||
+
|
||||
+ if (!of_property_present(np, "x-powers,polyphased"))
|
||||
+ return 0;
|
||||
+
|
||||
+ reg_id = axp20x_find_polyphased_reg(regs, nregulators, np, 0);
|
||||
+ if (reg_id < 0 && reg_id != -ENOENT) /* not just empty property */
|
||||
+ return reg_id;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(dualphase_regulators); i++) {
|
||||
+ dpreg = &dualphase_regulators[i];
|
||||
+
|
||||
+ if (axp20x->variant != dpreg->axp_id)
|
||||
+ continue;
|
||||
+
|
||||
+ if (dpreg->reg1 != primary_reg_id &&
|
||||
+ dpreg->reg2 != primary_reg_id)
|
||||
+ continue;
|
||||
+
|
||||
+ /* Empty property means breaking any polyphase setup. */
|
||||
+ if (reg_id == -ENOENT) {
|
||||
+ regmap_update_bits(axp20x->regmap, dpreg->polyphase_reg,
|
||||
+ dpreg->bitmask, 0);
|
||||
+
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if ((dpreg->reg1 == primary_reg_id && dpreg->reg2 == reg_id) ||
|
||||
+ (dpreg->reg2 == primary_reg_id && dpreg->reg1 == reg_id)) {
|
||||
+ regmap_update_bits(axp20x->regmap, dpreg->polyphase_reg,
|
||||
+ dpreg->bitmask, dpreg->bitmask);
|
||||
+
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int axp20x_regulator_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct regulator_dev *rdev;
|
||||
@@ -1703,6 +1767,10 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
|
||||
rdev->desc->name);
|
||||
}
|
||||
|
||||
+ if (rdev->dev.of_node)
|
||||
+ axp20x_parse_polyphase(axp20x, i, regulators,
|
||||
+ nregulators, rdev->dev.of_node);
|
||||
+
|
||||
/*
|
||||
* Save AXP22X DCDC1 / DCDC5 / AXP15060 ALDO1 regulator names for later.
|
||||
*/
|
||||
--
|
||||
2.43.0
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
From 008942ec8d1bd6615e71765d1ef2679642515fa4 Mon Sep 17 00:00:00 2001
|
||||
From: Andre Przywara <andre.przywara@arm.com>
|
||||
Date: Fri, 19 Sep 2025 01:00:17 +0100
|
||||
Subject: [PATCH 4/5] mfd: axp20x: Support tri-phase setup
|
||||
|
||||
Of the PMICs that support multi-phased regulators, all but one just
|
||||
support a dual-phase setup, with exactly two regulators tied together.
|
||||
This allows for a simple data model, since just two is somewhat of a
|
||||
special case.
|
||||
|
||||
However there is the AXP806, which supports a triple-phase setup, that is
|
||||
also used on at least one board: the Cubieboard 4, where DCDC-A+B+C
|
||||
together supply the Cortex-A15 CPU cluster.
|
||||
Since this is just one case, and a fairly old one now, let's not boil
|
||||
the ocean by coming up with a complex data structure that allows
|
||||
describing arbitrary combinations, but instead handle this as a special
|
||||
case. This is supported by the fact, that the AXP806 only supports two
|
||||
specific setups: DCDC-A+B or DCDC-A+B+C, but nothing else.
|
||||
|
||||
Add a function that checks for the regulators on this PMIC, and handle
|
||||
the two cases, plus the one without any poly-phasing.
|
||||
|
||||
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
|
||||
---
|
||||
drivers/regulator/axp20x-regulator.c | 45 ++++++++++++++++++++++++++++
|
||||
1 file changed, 45 insertions(+)
|
||||
|
||||
diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
|
||||
index e3acc4635a0e..9dd666f228b1 100644
|
||||
--- a/drivers/regulator/axp20x-regulator.c
|
||||
+++ b/drivers/regulator/axp20x-regulator.c
|
||||
@@ -1569,6 +1569,39 @@ static int axp20x_find_polyphased_reg(const struct regulator_desc *regs,
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
+static int axp20x_handle_triphase(struct axp20x_dev *axp20x,
|
||||
+ int reg1, int reg2, int reg3)
|
||||
+{
|
||||
+ if (axp20x->variant == AXP806_ID && reg1 == AXP806_DCDCA) {
|
||||
+ /* no other regulator listed: single phase setup */
|
||||
+ if (reg2 == -ENOENT && reg3 == -ENOENT) {
|
||||
+ regmap_update_bits(axp20x->regmap,
|
||||
+ AXP806_DCDC_MODE_CTRL2,
|
||||
+ AXP806_DCDCABC_POLYPHASE_MASK, 0);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ /* only regulator listed is DCDC-B: dual phase setup */
|
||||
+ if (reg2 == AXP806_DCDCB && reg3 == -ENOENT) {
|
||||
+ regmap_update_bits(axp20x->regmap,
|
||||
+ AXP806_DCDC_MODE_CTRL2,
|
||||
+ AXP806_DCDCABC_POLYPHASE_MASK,
|
||||
+ AXP806_DCDCAB_POLYPHASE_DUAL);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ /* both DCDC-B+C regulators listed: tri phase setup */
|
||||
+ if ((reg2 == AXP806_DCDCB && reg3 == AXP806_DCDCC) ||
|
||||
+ (reg2 == AXP806_DCDCC && reg3 == AXP806_DCDCB)) {
|
||||
+ regmap_update_bits(axp20x->regmap,
|
||||
+ AXP806_DCDC_MODE_CTRL2,
|
||||
+ AXP806_DCDCABC_POLYPHASE_MASK,
|
||||
+ AXP806_DCDCABC_POLYPHASE_TRI);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int axp20x_parse_polyphase(struct axp20x_dev *axp20x, int primary_reg_id,
|
||||
const struct regulator_desc *regs,
|
||||
int nregulators, const struct device_node *np)
|
||||
@@ -1610,6 +1643,18 @@ static int axp20x_parse_polyphase(struct axp20x_dev *axp20x, int primary_reg_id,
|
||||
}
|
||||
}
|
||||
|
||||
+ /* Special handling for the AXP806 DCDC-A/B/C tri-phase regulator. */
|
||||
+ if (axp20x->variant == AXP806_ID && primary_reg_id == AXP806_DCDCA) {
|
||||
+ int reg3_id;
|
||||
+
|
||||
+ reg3_id = axp20x_find_polyphased_reg(regs, nregulators, np, 1);
|
||||
+ if (reg3_id < 0 && reg3_id != -ENOENT)
|
||||
+ return reg_id;
|
||||
+
|
||||
+ return axp20x_handle_triphase(axp20x, primary_reg_id,
|
||||
+ reg_id, reg3_id);
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
From 87274e8d73915412aa8b0fcefa27a1c0e982c975 Mon Sep 17 00:00:00 2001
|
||||
From: Andre Przywara <andre.przywara@arm.com>
|
||||
Date: Fri, 19 Sep 2025 01:00:17 +0100
|
||||
Subject: [PATCH 5/5] arm64: dts: allwinner: a523: Mark dual-phased regulators
|
||||
|
||||
The X-Powers AXP323 PMIC on the boards with a SoC from the Allwinner
|
||||
A523 family typically uses DCDC1 and DCDC2 in a dual-phase setup to
|
||||
supply the "big" CPU cluster. For some reason this dual-phase
|
||||
configuration is not the PMIC's reset default, but needs to be actively
|
||||
programmed at runtime.
|
||||
|
||||
Add the newly introduced x-powers,polyphased property in the board DTs,
|
||||
to mark this connection and let drivers program the dual-phase setup.
|
||||
|
||||
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
|
||||
---
|
||||
arch/arm64/boot/dts/allwinner/sun55i-a527-cubie-a5e.dts | 5 ++++-
|
||||
arch/arm64/boot/dts/allwinner/sun55i-h728-x96qpro+.dts | 5 ++++-
|
||||
arch/arm64/boot/dts/allwinner/sun55i-t527-avaota-a1.dts | 5 ++++-
|
||||
arch/arm64/boot/dts/allwinner/sun55i-t527-orangepi-4a.dts | 5 ++++-
|
||||
4 files changed, 16 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/allwinner/sun55i-a527-cubie-a5e.dts b/arch/arm64/boot/dts/allwinner/sun55i-a527-cubie-a5e.dts
|
||||
index bfdf1728cd14..9e52ea338ce5 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/sun55i-a527-cubie-a5e.dts
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun55i-a527-cubie-a5e.dts
|
||||
@@ -320,9 +320,12 @@ reg_dcdc1_323: dcdc1 {
|
||||
regulator-min-microvolt = <900000>;
|
||||
regulator-max-microvolt = <1160000>;
|
||||
regulator-name = "vdd-cpub";
|
||||
+ x-powers,polyphased = <®_dcdc2_323>;
|
||||
};
|
||||
|
||||
- /* DCDC2 is polyphased with DCDC1 */
|
||||
+ reg_dcdc2_323: dcdc2 {
|
||||
+ /* dual-phased with DCDC1 */
|
||||
+ };
|
||||
|
||||
/* RISC-V management core supply */
|
||||
reg_dcdc3_323: dcdc3 {
|
||||
diff --git a/arch/arm64/boot/dts/allwinner/sun55i-h728-x96qpro+.dts b/arch/arm64/boot/dts/allwinner/sun55i-h728-x96qpro+.dts
|
||||
index a96927fbdadd..9dd4178bdff1 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/sun55i-h728-x96qpro+.dts
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun55i-h728-x96qpro+.dts
|
||||
@@ -252,9 +252,12 @@ reg_dcdc1_323: dcdc1 {
|
||||
regulator-min-microvolt = <900000>;
|
||||
regulator-max-microvolt = <1160000>;
|
||||
regulator-name = "vdd-cpub";
|
||||
+ x-powers,polyphased = <®_dcdc2_323>;
|
||||
};
|
||||
|
||||
- /* DCDC2 is polyphased with DCDC1 */
|
||||
+ reg_dcdc2_323: dcdc2 {
|
||||
+ /* dual-phased with DCDC1 */
|
||||
+ };
|
||||
|
||||
reg_dcdc3_323: dcdc3 {
|
||||
regulator-always-on;
|
||||
diff --git a/arch/arm64/boot/dts/allwinner/sun55i-t527-avaota-a1.dts b/arch/arm64/boot/dts/allwinner/sun55i-t527-avaota-a1.dts
|
||||
index 054d0357c139..678736e3b717 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/sun55i-t527-avaota-a1.dts
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun55i-t527-avaota-a1.dts
|
||||
@@ -330,9 +330,12 @@ reg_dcdc1_323: dcdc1 {
|
||||
regulator-min-microvolt = <900000>;
|
||||
regulator-max-microvolt = <1160000>;
|
||||
regulator-name = "vdd-cpub";
|
||||
+ x-powers,polyphased = <®_dcdc2_323>;
|
||||
};
|
||||
|
||||
- /* DCDC2 is polyphased with DCDC1 */
|
||||
+ reg_dcdc2_323: dcdc2 {
|
||||
+ /* dual-phased with DCDC1 */
|
||||
+ };
|
||||
|
||||
/* Some RISC-V management core related voltage */
|
||||
reg_dcdc3_323: dcdc3 {
|
||||
diff --git a/arch/arm64/boot/dts/allwinner/sun55i-t527-orangepi-4a.dts b/arch/arm64/boot/dts/allwinner/sun55i-t527-orangepi-4a.dts
|
||||
index 39a4e194712a..ef0837ffa38f 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/sun55i-t527-orangepi-4a.dts
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun55i-t527-orangepi-4a.dts
|
||||
@@ -345,9 +345,12 @@ reg_dcdc1_323: dcdc1 {
|
||||
regulator-min-microvolt = <900000>;
|
||||
regulator-max-microvolt = <1150000>;
|
||||
regulator-name = "vdd-cpub";
|
||||
+ x-powers,polyphased = <®_dcdc2_323>;
|
||||
};
|
||||
|
||||
- /* DCDC2 is polyphased with DCDC1 */
|
||||
+ reg_dcdc2_323: dcdc2 {
|
||||
+ /* dual-phased with DCDC1 */
|
||||
+ };
|
||||
|
||||
/* Some RISC-V management core related voltage */
|
||||
reg_dcdc3_323: dcdc3 {
|
||||
--
|
||||
2.43.0
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,78 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Juan Sanchez <juanesf91@gmail.com>
|
||||
Date: Fri, 4 Jul 2025 15:17:54 -0400
|
||||
Subject: Add wifi (mmc1) to Radxa Cubie A5E
|
||||
|
||||
Signed-off-by: Juan Sanchez <juanesf91@gmail.com>
|
||||
---
|
||||
arch/arm64/boot/dts/allwinner/sun55i-a527-cubie-a5e.dts | 28 ++++++++++
|
||||
1 file changed, 28 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/allwinner/sun55i-a527-cubie-a5e.dts b/arch/arm64/boot/dts/allwinner/sun55i-a527-cubie-a5e.dts
|
||||
index 1c56306dffa1..d9bbfb916090 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/sun55i-a527-cubie-a5e.dts
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun55i-a527-cubie-a5e.dts
|
||||
@@ -12,10 +12,11 @@ / {
|
||||
compatible = "radxa,cubie-a5e", "allwinner,sun55i-a527";
|
||||
|
||||
aliases {
|
||||
ethernet0 = &gmac0;
|
||||
ethernet1 = &gmac1;
|
||||
+ ethernet2 = &sdio_wifi;
|
||||
serial0 = &uart0;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
@@ -41,10 +42,20 @@ iio-hwmon {
|
||||
compatible = "iio-hwmon";
|
||||
io-channels = <&axp717_adc 3>, /* vsys_v */
|
||||
<&axp717_adc 4>; /* pmic_temp */
|
||||
};
|
||||
|
||||
+ reg_3v3_wifi: 3v3-wifi {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "3v3-wifi";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ vin-supply = <®_vcc5v>;
|
||||
+ gpio = <&r_pio 0 7 GPIO_ACTIVE_HIGH>; /* PL7 */
|
||||
+ enable-active-high;
|
||||
+ };
|
||||
+
|
||||
reg_vcc5v: vcc5v {
|
||||
/* board wide 5V supply from the USB-C connector */
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc-5v";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
@@ -94,10 +105,27 @@ &mmc0 {
|
||||
cd-gpios = <&pio 5 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* PF6 */
|
||||
bus-width = <4>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&mmc1_pins {
|
||||
+ drive-strength = <40>;
|
||||
+};
|
||||
+
|
||||
+&mmc1 {
|
||||
+ bus-width = <4>;
|
||||
+ vmmc-supply = <®_3v3_wifi>;
|
||||
+ non-removable;
|
||||
+ // todo: investigate why clock above 40MHz makes data errors
|
||||
+ max-frequency = <35000000>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ sdio_wifi: wifi@1 {
|
||||
+ reg = <1>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
&ohci0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ohci1 {
|
||||
--
|
||||
Created with Armbian build tools https://github.com/armbian/build
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Juan Sanchez <juanesf91@gmail.com>
|
||||
Date: Tue, 5 Aug 2025 14:55:52 -0400
|
||||
Subject: Enable uart1 (bluetooth) on Radxa Cubie A5E
|
||||
|
||||
Signed-off-by: Juan Sanchez <juanesf91@gmail.com>
|
||||
---
|
||||
arch/arm64/boot/dts/allwinner/sun55i-a527-cubie-a5e.dts | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/allwinner/sun55i-a527-cubie-a5e.dts b/arch/arm64/boot/dts/allwinner/sun55i-a527-cubie-a5e.dts
|
||||
index 369bde1556ff..37585cac6648 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/sun55i-a527-cubie-a5e.dts
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun55i-a527-cubie-a5e.dts
|
||||
@@ -14,10 +14,11 @@ / {
|
||||
aliases {
|
||||
ethernet0 = &gmac0;
|
||||
ethernet1 = &gmac1;
|
||||
ethernet2 = &sdio_wifi;
|
||||
serial0 = &uart0;
|
||||
+ serial1 = &uart1;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
@@ -360,10 +361,18 @@ &uart0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart0_pb_pins>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+/* Bluetooth */
|
||||
+&uart1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
|
||||
+ uart-has-rtscts;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&usb_otg {
|
||||
/*
|
||||
* The USB-C port is the primary power supply, so in this configuration
|
||||
* relies on the other end of the USB cable to supply the VBUS power.
|
||||
* So use this port in peripheral mode.
|
||||
--
|
||||
Created with Armbian build tools https://github.com/armbian/build
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
patches.megous/ebaz4205-6.18/0002-dt-bindings-Add-Zynq-clocks.patch
|
||||
patches.megous/ebaz4205-6.18/0003-arm-xilinx-ebaz4205-Add-test-config-for-various-PL-p.patch
|
||||
patches.megous/err-6.18/0001-sunxi-Use-dev_err_probe-to-handle-EPROBE_DEFER-error.patch
|
||||
patches.megous/err-6.18/0002-thermal-sun8i-Be-loud-when-probe-fails.patch
|
||||
- patches.megous/err-6.18/0002-thermal-sun8i-Be-loud-when-probe-fails.patch
|
||||
patches.megous/err-6.18/0003-i2c-mv64xxx-Don-t-make-a-fuss-when-pinctrl-recovery-.patch
|
||||
patches.megous/err-6.18/0004-iio-st_sensors-Don-t-report-error-when-the-device-is.patch
|
||||
patches.megous/err-6.18/0005-opp-core-Avoid-confusing-error-when-no-regulator-is-.patch
|
||||
@@ -392,6 +392,20 @@
|
||||
patches.backports/0001-dt-bindings-dma-allwinner-sun50i-a64-dma-Add-compati.patch
|
||||
patches.backports/0001-arm64-dts-allwinner-a527-cubie-a5e-Enable-second-Eth.patch
|
||||
|
||||
################################################################################
|
||||
#
|
||||
# Port from https://github.com/armbian/build/pull/8831
|
||||
#
|
||||
################################################################################
|
||||
|
||||
patches.backports/05-dt-bindings-mfd-x-powers-axp152-Add-polyphased-prope.patch
|
||||
patches.backports/06-mfd-axp20x-Refactor-axp20x_is_polyphase_slave.patch
|
||||
patches.backports/07-mfd-axp20x-Allow-programming-dual-phase-regulator-pa.patch
|
||||
patches.backports/08-mfd-axp20x-Support-tri-phase-setup.patch
|
||||
patches.backports/09-arm64-dts-allwinner-a523-Mark-dual-phased-regulators.patch
|
||||
patches.backports/10-Allwinner-A523-add-support-for-A523-THS0-1-controllers.patch
|
||||
patches.backports/20-Add-wifi-to-Radxa-Cubie-A5E.patch
|
||||
patches.backports/21-Enable-uart1-on-Radxa-Cubie-A5E.patch
|
||||
|
||||
################################################################################
|
||||
#
|
||||
@@ -571,4 +585,4 @@
|
||||
patches.armbian/arm64-allwinner-Add-sun50i-h618-bananapi-m4-berry-support.patch
|
||||
patches.armbian/h616-add-keys.patch
|
||||
patches.armbian/sun50i-h616-Add-the-missing-digital-audio-node.patch
|
||||
patches.armbian/drv-spi-spidev-Add-armbian-spi-dev-compatible.patch
|
||||
patches.armbian/drv-spi-spidev-Add-armbian-spi-dev-compatible.patch
|
||||
|
||||
Reference in New Issue
Block a user