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

From: Chris Morgan

Date: Mon Jul 13 2026 - 11:56:22 EST


On Mon, Jun 29, 2026 at 12:20:49PM +0200, Juan Manuel wrote:
> 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

While I cannot confirm definitively that the x55 has a 4.2v max charge
voltage, based on your symptoms it's likely that the factory BSP
was wrong and it should be 4.2v not 4.3v.

The battery itself does not appear to have many helpful markings on it,
I see "-YN 606090 4000mAH/+3.7V 2308 14.8wH" written on it. A quick
DDG/Google doesn't turn anything up, but batteries just like it have a
max charge of 4.2v.

It might just be safest for the moment to set all the Powkiddy's to
4.2v max charge voltage until we can confirm with a datasheet it is
otherwise.

Please submit these as a "bug" so we can backport the fix.

Thank you, and good catch on finding this,
Chris