[PATCH V3 0/7] Fix Incorrect State of Charge for RK817
Chris Morgan
macromorgan at hotmail.com
Mon Nov 9 13:41:24 PST 2026
On Mon, Nov 09, 2026 at 08:58:26AM -0600, Chris Morgan wrote:
> From: Chris Morgan <macromorgan at hotmail.com>
>
> Users of the popular firmware RockNIX had identified a few bugs with
> accurately displaying the correct state of charge for RK817 battery
> devices. With the help of one user analyzing the code with Claude
> they were able to identify a few potential bugs along with potential
> solutions which I was then able to verify. These bugs are as follows:
>
> 1) Incorrectly clamping a value with a max of 10000 instead of 100000.
> This bug caused the state of charge to sometimes read as 10% instead
> of 100% as it should have.
>
> 2) Using the boot_voltage value to calibrate the battery in scenarios
> where it could not be trusted. The boot_voltage register populates
> immediately at power-on, and the driver would check if this value
> was older than 30 minutes before using it. Unfortunately when combined
> with the default behavior of the bootloader to turn the device off
> when plugged in (requiring a user to explicitly power the device on)
> the boot_voltage and boot_timer values were wrong. The boot voltage
> would not account for any voltage added while the device was off,
> and the boot_counter that tracks the time the device was off would
> be reset. To fix this we changed the behavior to (outside of first-boot
> scenarios) use a value saved to NVRAM, the value from the coulomb
> counter directly, and an OCV lookup from the live battery voltage,
> and then using those values provide an initial "guess" of the state
> of charge and recalibrate with the OCV voltage once it is available.
>
> Included in this series is another fix that would cause the battery
> to drain while the system was shut down. This patch replicates the
> Rockchip BSP driver to clear a shutdown register. Unlike the BSP there
> is no behavior to bypass this since no boards have yet been observed
> using the SYS_CAN_SD bypass on the BSP kernel.
>
> Lastly, it has come to my attention that I misspelled "coulomb"
> throughout the driver, I have included a patch to fix that.
>
> Changes Since V2:
> - Added a patch to correct the spelling of "coulomb".
> - Split off creating a new coulomb counter function into another
> patch.
> - Split off exposing the boot voltage and OCV values into another
> patch.
> - The code should be identical for series v3 as it was for series v2,
> all that changed was the spelling of coulomb and splitting one patch
> into 3. I'm keeping the ack from v2 since the code has not changed.
>
> Changes Since V1:
> - Dropped the sleep fixes, as I would like to test them a bit more
> extensively first.
> - Dropped the devicetree parameter, as since no boards have *yet*
> needed to alter the default behavior there's no need for it.
> - Changed the behavior of how we select the initial SOC and made
> it its own function to ease in code readibility. This new method
> was tested with various boot scenarios. The average error was less
> than 5%, and in a worst case scenario where the device was
> discharged to 0%, then left to charge at the bootloader the device
> over-reported its state of charge by about 10%. When this occurred
> the device reported its SOC as 100% but that it was charging, which
> was corrected by the new OCV logic that kicked in once charging
> completed.
> - Scrapped the more complicated sleep fix in favor of simply telling
> the battery to recalibrate at full after suspend, in case of a
> counting anomaly.
>
> Chris Morgan (7):
> power: supply: rk817-charger: correct spelling of coulomb
> power: supply: rk817-charger: Fix NVRAM SoC value
> power: supply: rk817-charger: simplify re-initializing coulomb counter
> power: supply: rk817-charger: Resolve boot state of charge from
> coulomb counter
> power: supply: rk817-charger: Expose boot voltage and OCV values
> power: supply: rk817-charger: Clear SYS_CAN_SD reg by default
> power: supply: rk817-charger: Clear full charge cal on resume
>
> drivers/power/supply/rk817_charger.c | 329 ++++++++++++++++++++-------
> include/linux/mfd/rk808.h | 3 +
> 2 files changed, 247 insertions(+), 85 deletions(-)
>
> --
> 2.53.0
>
Sashiko bot reports a few bugs that are worth fixing; I'll make the
changes and resubmit.
Thank you,
Chris
More information about the Linux-rockchip
mailing list