[PATCH] power: supply: pf1550: enable charging when battery profile exists

raoxu <[email protected]>
Newsgroups dev.linux.lists.imx,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pm,org.kernel.vger.stable
Message-ID <[email protected]>
From: Xu Rao <[email protected]>

PF1550 starts in charger mode 1, where charging is disabled. The driver
comment says that mode 2 should be selected for applications using a
battery, but the condition is inverted: PF1550_CHG_BAT_ON is written only
when power_supply_get_battery_info() fails.

Consequently, a board with a valid monitored-battery profile is left in
the default charger-off mode, while a board without battery information
enables charging with the fallback voltage.

Select mode 2 when battery information is available. Also release the
battery-info objects after use.

Fixes: 4b6b6433a97d ("power: supply: pf1550: add battery charger support")
Cc: [email protected]
Signed-off-by: Xu Rao <[email protected]>
---
 drivers/power/supply/pf1550-charger.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/power/supply/pf1550-charger.c b/drivers/power/supply/pf1550-charger.c
index 41036f4cb64a..f698becd662a 100644
--- a/drivers/power/supply/pf1550-charger.c
+++ b/drivers/power/supply/pf1550-charger.c
@@ -514,7 +514,10 @@ static int pf1550_reg_init(struct pf1550_charger *chg)
 	 * a battery. The other supported mode is mode 2, the charger is turned
 	 * on to charge a battery when present.
 	 */
-	if (power_supply_get_battery_info(chg->charger, &info)) {
+	ret = power_supply_get_battery_info(chg->charger, &info);
+	if (!ret) {
+		power_supply_put_battery_info(chg->charger, info);
+
 		ret = regmap_write(chg->pf1550->regmap,
 				   PF1550_CHARG_REG_CHG_OPER,
 				   PF1550_CHG_BAT_ON);
@@ -540,10 +543,12 @@ static void pf1550_dt_parse_dev_info(struct pf1550_charger *chg)
 				     &chg->thermal_regulation_temp))
 		chg->thermal_regulation_temp = PF1550_DEFAULT_THERMAL_TEMP;

-	if (power_supply_get_battery_info(chg->charger, &info))
+	if (power_supply_get_battery_info(chg->charger, &info)) {
 		chg->constant_volt = PF1550_DEFAULT_CONSTANT_VOLT;
-	else
+	} else {
 		chg->constant_volt = info->constant_charge_voltage_max_uv;
+		power_supply_put_battery_info(chg->charger, info);
+	}
 }

 static int pf1550_charger_probe(struct platform_device *pdev)
--
2.50.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.