From: Chris Morgan <macroalpha82@gmail.com>
To: linux-rockchip@lists.infradead.org
Cc: mfd@lists.linux.dev, linux-pm@vger.kernel.org,
maccraft123mc@gmail.com, heiko@sntech.de, lee@kernel.org,
sre@kernel.org, Chris Morgan <macromorgan@hotmail.com>
Subject: [PATCH V4 3/7] power: supply: rk817-charger: simplify re-initializing coulomb counter
Date: Wed, 11 Nov 2026 14:56:23 -0600 [thread overview]
Message-ID: <20261111205627.56652-4-macroalpha82@gmail.com> (raw)
In-Reply-To: <20261111205627.56652-1-macroalpha82@gmail.com>
From: Chris Morgan <macromorgan@hotmail.com>
There are multiple places we re-initialize the coulomb counter. Create
a function to do this to make the code easier to read.
Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
Acked-by: Lee Jones <lee@kernel.org>
---
drivers/power/supply/rk817_charger.c | 44 +++++++++++++++-------------
1 file changed, 23 insertions(+), 21 deletions(-)
diff --git a/drivers/power/supply/rk817_charger.c b/drivers/power/supply/rk817_charger.c
index 39c945622c4d..939d4fefff14 100644
--- a/drivers/power/supply/rk817_charger.c
+++ b/drivers/power/supply/rk817_charger.c
@@ -167,6 +167,20 @@ static int rk817_chg_cur_from_reg(u8 reg)
}
}
+static int rk817_initialize_coulomb_counter(struct rk817_charger *charger,
+ u32 charge_mah)
+{
+ int tmp = CHARGE_TO_ADC(charge_mah, charger->res_div);
+ u8 bulk_reg[4];
+ int ret;
+
+ put_unaligned_be32(tmp, bulk_reg);
+ ret = regmap_bulk_write(charger->rk808->regmap, RK817_GAS_GAUGE_Q_INIT_H3,
+ bulk_reg, 4);
+
+ return ret;
+}
+
static void rk817_bat_calib_vol(struct rk817_charger *charger)
{
uint32_t vcalib0 = 0;
@@ -242,6 +256,7 @@ static int rk817_bat_calib_cap(struct rk817_charger *charger)
struct rk808 *rk808 = charger->rk808;
int charge_now, charge_now_adc;
u8 bulk_reg[4];
+ int ret;
/* Don't do anything if there's no battery. */
if (!charger->battery_present)
@@ -281,11 +296,9 @@ static int rk817_bat_calib_cap(struct rk817_charger *charger)
*/
charger->soc = 100000;
- charge_now_adc = CHARGE_TO_ADC(charger->fcc_mah,
- charger->res_div);
- put_unaligned_be32(charge_now_adc, bulk_reg);
- regmap_bulk_write(rk808->regmap, RK817_GAS_GAUGE_Q_INIT_H3,
- bulk_reg, 4);
+ ret = rk817_initialize_coulomb_counter(charger, charger->fcc_mah);
+ if (ret)
+ return ret;
charger->soc_cal = 1;
dev_dbg(charger->dev,
@@ -313,17 +326,9 @@ static int rk817_bat_calib_cap(struct rk817_charger *charger)
dev_dbg(charger->dev,
"Recalibrating coulomb counter to %d uah\n",
charge_now);
- /*
- * Order of operations matters here to ensure we keep
- * enough precision until the last step to keep from
- * making needless updates to coulomb counter.
- */
- charge_now_adc = CHARGE_TO_ADC(charger->fcc_mah,
- charger->res_div);
- put_unaligned_be32(charge_now_adc, bulk_reg);
- regmap_bulk_write(rk808->regmap,
- RK817_GAS_GAUGE_Q_INIT_H3,
- bulk_reg, 4);
+ ret = rk817_initialize_coulomb_counter(charger, charger->fcc_mah);
+ if (ret)
+ return ret;
}
}
@@ -846,11 +851,8 @@ rk817_read_or_set_full_charge_on_boot(struct rk817_charger *charger,
boot_charge_mah = charger->soc * charger->fcc_mah / 100 / 1000;
if (boot_charge_mah > charger->fcc_mah)
boot_charge_mah = charger->fcc_mah;
- tmp = CHARGE_TO_ADC(boot_charge_mah, charger->res_div);
- put_unaligned_be32(tmp, bulk_reg);
- ret = regmap_bulk_write(rk808->regmap, RK817_GAS_GAUGE_Q_INIT_H3,
- bulk_reg, 4);
- if (ret < 0)
+ ret = rk817_initialize_coulomb_counter(charger, boot_charge_mah);
+ if (ret)
return ret;
/* Set QMAX value to max design capacity. */
--
2.53.0
next prev parent reply other threads:[~2026-11-11 20:56 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-11 20:56 [PATCH V4 0/7] Fix Incorrect State of Charge for RK817 Chris Morgan
2026-11-11 20:56 ` [PATCH V4 1/7] power: supply: rk817-charger: correct spelling of coulomb Chris Morgan
2026-11-11 20:56 ` [PATCH V4 2/7] power: supply: rk817-charger: Fix NVRAM SoC value Chris Morgan
2026-11-11 20:56 ` Chris Morgan [this message]
2026-11-11 20:56 ` [PATCH V4 4/7] power: supply: rk817-charger: Resolve boot state of charge from coulomb counter Chris Morgan
2026-11-11 20:56 ` [PATCH V4 5/7] power: supply: rk817-charger: Expose boot voltage and OCV values Chris Morgan
2026-11-11 20:56 ` [PATCH V4 6/7] power: supply: rk817-charger: Clear SYS_CAN_SD reg by default Chris Morgan
2026-11-11 20:56 ` [PATCH V4 7/7] power: supply: rk817-charger: Clear full charge cal on resume Chris Morgan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261111205627.56652-4-macroalpha82@gmail.com \
--to=macroalpha82@gmail.com \
--cc=heiko@sntech.de \
--cc=lee@kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=maccraft123mc@gmail.com \
--cc=macromorgan@hotmail.com \
--cc=mfd@lists.linux.dev \
--cc=sre@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox