[PATCH 0/2] arm64: dts: rockchip: fix Li-Po overcharge on Powkiddy RGB10 Max 3 / X55

From: Juan Manuel

Date: Mon Jun 29 2026 - 06:21:53 EST


Hi Chris, Heiko,

While bringing up a couple of Powkiddy RK3566 handhelds I ran into a battery problem that turns out to be in the device trees, and it has already cost me two packs, so I'd like to get it fixed for everyone.

Both battery nodes charge the cell above its own declared full voltage:

rk3566-powkiddy-rk2023.dtsi (inherited by the RGB10 Max 3):
constant-charge-voltage-max-microvolt = 4250000 (4.25 V),
but voltage-max-design-microvolt and the ocv-capacity-table-0 100% point are both 4172000 (4.172 V).

rk3566-powkiddy-x55.dts:
constant-charge-voltage-max-microvolt = 4300000 (4.30 V),
but voltage-max-design-microvolt and the ocv-capacity-table-0 100% point are both 4138000 (4.138 V).

So the charger drives each cell ~80–160 mV past its own OCV-100% point on every cycle. On a standard 4.2 V Li-Po that is an overcharge: it raises the cell's internal resistance and kills the pack early. The symptom is textbook — the pack reads a normal voltage/SoC while on the charger but collapses under load and shuts the device off the moment it's unplugged. I lost two packs to this before tracing it to the DT; capping the charge voltage at 4.2 V (verified at the rk817 CHRG_OUT register) stopped the damage, and a third, already-degraded pack stabilised.

Patch 1 also corrects the RGB10 Max 3 design capacity: it ships a 4000 mAh cell but inherits the 3151 mAh value from rk2023.dtsi. I did this as a per-board override so I don't touch the shared profile, which may well be correct for the RGB30 and other rk2023 users.

One thing worth a look on your side: the shared rk3566-powkiddy-rk2023.dtsi default itself (4.25 V against a 4.172 V OCV-100% point) looks like it would overcharge any device using it, not just the RGB10 Max 3 — but I only have the two units above to test on, so I've kept the fix scoped to what I can verify.

Thanks a lot for all the handheld DT work; none of these devices would run mainline without it.

Juan Manuel Lopez Carrillo
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Juan Manuel Lopez Carrillo <juanmanuellopezcarrillo@xxxxxxxxx>
Date: Sun, 29 Jun 2026 12:00:00 +0200
Subject: [PATCH 1/2] arm64: dts: rockchip: powkiddy-rgb10max3: fix battery
profile

The Powkiddy RGB10 Max 3 ships with a 4000 mAh pack, but it inherits its
battery node from rk3566-powkiddy-rk2023.dtsi, which describes a 3151 mAh
cell and, more importantly, sets constant-charge-voltage-max-microvolt to
4250000 (4.25 V).

That charge voltage is above this pack's declared full voltage: the
inherited voltage-max-design-microvolt and the ocv-capacity-table-0 100%
point are both 4172000 (4.172 V). The charger therefore drives the cell
~78 mV past its own declared "full" on every cycle.

For a standard 4.2 V Li-Po this is an overcharge. It raises the cell's
internal resistance and kills the pack prematurely. The failure mode seen
in the field is characteristic: the pack reads a plausible voltage/SoC
while on the charger but collapses under load (and shuts the device off)
as soon as it is unplugged. Two packs were lost this way before the cause
was traced to the DT.

Override the node for this board with the correct 4000 mAh design capacity
and a safe 4.2 V charge ceiling, at/below the cell design max and the
OCV-100% point. The charge current limit (2 A = 0.5C) and the OCV curve
are left unchanged.

Signed-off-by: Juan Manuel Lopez Carrillo <juanmanuellopezcarrillo@xxxxxxxxx>
---
arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb10max3.dts | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb10max3.dts b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb10max3.dts
--- a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb10max3.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb10max3.dts
@@ -12,6 +12,11 @@
compatible = "powkiddy,rgb10max3", "rockchip,rk3566";
};

+&battery {
+ charge-full-design-microamp-hours = <4000000>;
+ constant-charge-voltage-max-microvolt = <4200000>;
+};
+
&bluetooth {
compatible = "realtek,rtl8723ds-bt";
};
--
2.43.0
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Juan Manuel Lopez Carrillo <juanmanuellopezcarrillo@xxxxxxxxx>
Date: Sun, 29 Jun 2026 12:05:00 +0200
Subject: [PATCH 2/2] arm64: dts: rockchip: powkiddy-x55: cap battery charge
voltage at 4.2V

The x55 battery node sets constant-charge-voltage-max-microvolt to
4300000 (4.30 V), but the same node declares voltage-max-design-microvolt
and an ocv-capacity-table-0 100% point of 4138000 (4.138 V). The charger
therefore drives the pack ~162 mV above its own declared full voltage on
every cycle.

This overcharges the standard 4.2 V Li-Po, raising its internal resistance
and killing it early - it reads fine on the charger but collapses under
load once unplugged. Cap the charge voltage at the standard, safe 4.2 V.
Design capacity (4000 mAh) and charge current (2 A) are already correct.

Signed-off-by: Juan Manuel Lopez Carrillo <juanmanuellopezcarrillo@xxxxxxxxx>
---
arch/arm64/boot/dts/rockchip/rk3566-powkiddy-x55.dts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-x55.dts b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-x55.dts
--- a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-x55.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-x55.dts
@@ -77,7 +77,7 @@
charge-full-design-microamp-hours = <4000000>;
charge-term-current-microamp = <300000>;
constant-charge-current-max-microamp = <2000000>;
- constant-charge-voltage-max-microvolt = <4300000>;
+ constant-charge-voltage-max-microvolt = <4200000>;
factory-internal-resistance-micro-ohms = <91000>;
voltage-max-design-microvolt = <4138000>;
voltage-min-design-microvolt = <3400000>;
--
2.43.0