huangcm
2025-07-16 ef9638196126781a6ba6d6a8d47504b4f326f916
feat(bat): add pmu_vol_min protect
2 files modified
15 ■■■■■ changed files
longan/kernel/linux-4.9/drivers/power/supply/axp803_battery.c 14 ●●●●● patch | view | raw | blame | history
longan/kernel/linux-4.9/drivers/power/supply/axp803_charger.h 1 ●●●● patch | view | raw | blame | history
longan/kernel/linux-4.9/drivers/power/supply/axp803_battery.c
....@@ -143,6 +143,9 @@
143143
144144 struct axp_config_info *axp_config = &bat_power->dts_info;
145145
146
+ regmap_bulk_read(bat_power->regmap, AXP803_OCVBATH_RES, temp_val, 2);
147
+ ocv_vol = ((temp_val[0] << 4) | (temp_val[1] & 0xF)) * 1100 / 1000;
148
+
146149 ret = regmap_read(bat_power->regmap, AXP803_CAP, &reg_value);
147150 if (ret)
148151 return ret;
....@@ -160,6 +163,11 @@
160163 rest_vol = 100;
161164 }
162165
166
+ if (ocv_vol < axp_config->pmu_vol_min) {
167
+ pr_err("kickpi: ocv_vol %d < min %d, rest_vol %d -> 0\n", ocv_vol, axp_config->pmu_vol_min, rest_vol);
168
+ rest_vol = 0;
169
+ }
170
+
163171 return rest_vol;
164172 }
165173
....@@ -234,6 +242,11 @@
234242 pr_debug("calc_info: ocv_vol:%d rdc:%d coulumb_counter:%d batt_max_cap:%d\n",
235243 ocv_vol, rdc, coulumb_counter, batt_max_cap);
236244 }
245
+
246
+ if (ocv_vol < axp_config->pmu_vol_min) {
247
+ pr_err("kickpi: ocv_vol %d < min %d, rest_vol %d -> 0\n", ocv_vol, axp_config->pmu_vol_min, rest_vol);
248
+ rest_vol = 0;
249
+ }
237250
238251 return rest_vol;
239252 }
....@@ -917,6 +930,7 @@
917930 AXP_OF_PROP_READ(pmu_runtime_chgcur, INTCHGCUR / 1000);
918931 AXP_OF_PROP_READ(pmu_suspend_chgcur, 1200);
919932 AXP_OF_PROP_READ(pmu_shutdown_chgcur, 1200);
933
+ AXP_OF_PROP_READ(pmu_vol_min, 3400);
920934 AXP_OF_PROP_READ(pmu_init_chgvol, INTCHGVOL / 1000);
921935 AXP_OF_PROP_READ(pmu_init_chgend_rate, INTCHGENDRATE);
922936 AXP_OF_PROP_READ(pmu_init_chg_enabled, 1);
longan/kernel/linux-4.9/drivers/power/supply/axp803_charger.h
....@@ -44,6 +44,7 @@
4444 u32 pmu_runtime_chgcur;
4545 u32 pmu_suspend_chgcur;
4646 u32 pmu_shutdown_chgcur;
47
+ u32 pmu_vol_min;
4748 u32 pmu_init_chgvol;
4849 u32 pmu_init_chgend_rate;
4950 u32 pmu_init_chg_enabled;