'struct power_supply_maintenance_charge_table' is not modified in this
driver.
Constifying this structure moves some data to a read-only section, so
increase overall security.
In order to do it, some code also needs to be adjusted to this new const
qualifier.
On a x86_64, with allmodconfig:
Before:
======
$ size drivers/power/supply/samsung-sdi-battery.o
text data bss dec hex filename
4055 4584 0 8639 21bf drivers/power/supply/samsung-sdi-battery.o
After:
=====
$ size drivers/power/supply/samsung-sdi-battery.o
text data bss dec hex filename
4087 4552 0 8639 21bf drivers/power/supply/samsung-sdi-battery.o
Signed-off-by: Christophe JAILLET <[email protected]>
---
Compile tested-only
---
drivers/power/supply/power_supply_core.c | 2 +-
drivers/power/supply/samsung-sdi-battery.c | 2 +-
include/linux/power_supply.h | 6 +++---
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c
index 022d0e4bf621..8f6025acd10a 100644
--- a/drivers/power/supply/power_supply_core.c
+++ b/drivers/power/supply/power_supply_core.c
@@ -1072,7 +1072,7 @@ int power_supply_vbat2ri(struct power_supply_battery_info *info,
}
EXPORT_SYMBOL_GPL(power_supply_vbat2ri);
-struct power_supply_maintenance_charge_table *
+const struct power_supply_maintenance_charge_table *
power_supply_get_maintenance_charging_setting(struct power_supply_battery_info *info,
int index)
{
diff --git a/drivers/power/supply/samsung-sdi-battery.c b/drivers/power/supply/samsung-sdi-battery.c
index 725fbe09379e..b63fd2758c2f 100644
--- a/drivers/power/supply/samsung-sdi-battery.c
+++ b/drivers/power/supply/samsung-sdi-battery.c
@@ -613,7 +613,7 @@ static struct power_supply_battery_ocv_table samsung_ocv_cap_eb585157lu[] = {
{ .ocv = 3300000, .capacity = 0},
};
-static struct power_supply_maintenance_charge_table samsung_maint_charge_table[] = {
+static const struct power_supply_maintenance_charge_table samsung_maint_charge_table[] = {
{
/* Maintenance charging phase A, 60 hours */
.charge_current_max_ua = 600000,
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
index 3ccf7d47f502..6f983720c146 100644
--- a/include/linux/power_supply.h
+++ b/include/linux/power_supply.h
@@ -741,7 +741,7 @@ struct power_supply_battery_info {
int overvoltage_limit_uv;
int constant_charge_current_max_ua;
int constant_charge_voltage_max_uv;
- struct power_supply_maintenance_charge_table *maintenance_charge;
+ const struct power_supply_maintenance_charge_table *maintenance_charge;
int maintenance_charge_size;
int alert_low_temp_charge_current_ua;
int alert_low_temp_charge_voltage_uv;
@@ -815,7 +815,7 @@ power_supply_temp2resist_simple(struct power_supply_resistance_temp_table *table
int table_len, int temp);
extern int power_supply_vbat2ri(struct power_supply_battery_info *info,
int vbat_uv, bool charging);
-extern struct power_supply_maintenance_charge_table *
+extern const struct power_supply_maintenance_charge_table *
power_supply_get_maintenance_charging_setting(struct power_supply_battery_info *info, int index);
extern bool power_supply_battery_bti_in_range(struct power_supply_battery_info *info,
int resistance);
@@ -829,7 +829,7 @@ extern int power_supply_set_battery_charged(struct power_supply *psy);
static inline bool
power_supply_supports_maintenance_charging(struct power_supply_battery_info *info)
{
- struct power_supply_maintenance_charge_table *mt;
+ const struct power_supply_maintenance_charge_table *mt;
mt = power_supply_get_maintenance_charging_setting(info, 0);
--
2.45.1
Hi Christophe,
kernel test robot noticed the following build warnings:
[auto build test WARNING on sre-power-supply/for-next]
[also build test WARNING on linus/master v6.10-rc1]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Christophe-JAILLET/power-supply-samsung-sdi-battery-Constify-struct-power_supply_maintenance_charge_table/20240602-000031
base: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git for-next
patch link: https://lore.kernel.org/r/02c6ad69a3ace192c9d609b7336a681a8fc7ba94.1717253900.git.christophe.jaillet%40wanadoo.fr
patch subject: [PATCH 2/2] power: supply: samsung-sdi-battery: Constify struct power_supply_maintenance_charge_table
config: arm-allyesconfig (https://download.01.org/0day-ci/archive/20240602/[email protected]/config)
compiler: arm-linux-gnueabi-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240602/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All warnings (new ones prefixed by >>):
drivers/power/supply/ab8500_chargalg.c: In function 'ab8500_chargalg_algorithm':
>> drivers/power/supply/ab8500_chargalg.c:1465:20: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
1465 | mt = power_supply_get_maintenance_charging_setting(bi, 0);
| ^
drivers/power/supply/ab8500_chargalg.c:1498:20: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
1498 | mt = power_supply_get_maintenance_charging_setting(bi, 1);
| ^
vim +/const +1465 drivers/power/supply/ab8500_chargalg.c
6aa35ab9db2c9c drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1217
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1218 /**
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1219 * ab8500_chargalg_algorithm() - Main function for the algorithm
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1220 * @di: pointer to the ab8500_chargalg structure
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1221 *
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1222 * This is the main control function for the charging algorithm.
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1223 * It is called periodically or when something happens that will
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1224 * trigger a state change
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1225 */
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1226 static void ab8500_chargalg_algorithm(struct ab8500_chargalg *di)
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1227 {
25fd330370ac40 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-12-15 1228 struct power_supply_battery_info *bi = di->bm->bi;
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1229 struct power_supply_maintenance_charge_table *mt;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1230 int charger_status;
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1231 int ret;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1232
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1233 /* Collect data from all power_supply class devices */
68ade0976df797 drivers/power/supply/ab8500_chargalg.c Sebastian Reichel 2024-03-01 1234 power_supply_for_each_device(di->chargalg_psy, ab8500_chargalg_get_ext_psy_data);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1235
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1236 ab8500_chargalg_end_of_charge(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1237 ab8500_chargalg_check_temp(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1238 ab8500_chargalg_check_charger_voltage(di);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1239
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1240 charger_status = ab8500_chargalg_check_charger_connection(di);
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1241
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1242 if (is_ab8500(di->parent)) {
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1243 ret = ab8500_chargalg_check_charger_enable(di);
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1244 if (ret < 0)
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1245 dev_err(di->dev, "Checking charger is enabled error"
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1246 ": Returned Value %d\n", ret);
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1247 }
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1248
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1249 /*
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1250 * First check if we have a charger connected.
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1251 * Also we don't allow charging of unknown batteries if configured
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1252 * this way
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1253 */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1254 if (!charger_status ||
b0284de05e07d5 drivers/power/abx500_chargalg.c Lee Jones 2012-11-30 1255 (di->events.batt_unknown && !di->bm->chg_unknown_bat)) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1256 if (di->charge_state != STATE_HANDHELD) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1257 di->events.safety_timer_expired = false;
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1258 ab8500_chargalg_state_to(di, STATE_HANDHELD_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1259 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1260 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1261
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1262 /* Safety timer expiration */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1263 else if (di->events.safety_timer_expired) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1264 if (di->charge_state != STATE_SAFETY_TIMER_EXPIRED)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1265 ab8500_chargalg_state_to(di,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1266 STATE_SAFETY_TIMER_EXPIRED_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1267 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1268 /*
8652b62ee6f157 drivers/power/supply/ab8500_chargalg.c Colin Ian King 2022-03-02 1269 * Check if any interrupts has occurred
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1270 * that will prevent us from charging
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1271 */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1272
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1273 /* Battery removed */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1274 else if (di->events.batt_rem) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1275 if (di->charge_state != STATE_BATT_REMOVED)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1276 ab8500_chargalg_state_to(di, STATE_BATT_REMOVED_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1277 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1278 /* Main or USB charger not ok. */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1279 else if (di->events.mainextchnotok || di->events.usbchargernotok) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1280 /*
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1281 * If vbus_collapsed is set, we have to lower the charger
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1282 * current, which is done in the normal state below
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1283 */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1284 if (di->charge_state != STATE_CHG_NOT_OK &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1285 !di->events.vbus_collapsed)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1286 ab8500_chargalg_state_to(di, STATE_CHG_NOT_OK_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1287 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1288 /* VBUS, Main or VBAT OVV. */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1289 else if (di->events.vbus_ovv ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1290 di->events.main_ovv ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1291 di->events.batt_ovv ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1292 !di->chg_info.usb_chg_ok ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1293 !di->chg_info.ac_chg_ok) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1294 if (di->charge_state != STATE_OVV_PROTECT)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1295 ab8500_chargalg_state_to(di, STATE_OVV_PROTECT_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1296 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1297 /* USB Thermal, stop charging */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1298 else if (di->events.main_thermal_prot ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1299 di->events.usb_thermal_prot) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1300 if (di->charge_state != STATE_HW_TEMP_PROTECT)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1301 ab8500_chargalg_state_to(di,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1302 STATE_HW_TEMP_PROTECT_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1303 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1304 /* Battery temp over/under */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1305 else if (di->events.btemp_underover) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1306 if (di->charge_state != STATE_TEMP_UNDEROVER)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1307 ab8500_chargalg_state_to(di,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1308 STATE_TEMP_UNDEROVER_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1309 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1310 /* Watchdog expired */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1311 else if (di->events.ac_wd_expired ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1312 di->events.usb_wd_expired) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1313 if (di->charge_state != STATE_WD_EXPIRED)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1314 ab8500_chargalg_state_to(di, STATE_WD_EXPIRED_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1315 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1316 /* Battery temp high/low */
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1317 else if (di->events.btemp_low || di->events.btemp_high) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1318 if (di->charge_state != STATE_TEMP_LOWHIGH)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1319 ab8500_chargalg_state_to(di, STATE_TEMP_LOWHIGH_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1320 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1321
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1322 dev_dbg(di->dev,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1323 "[CHARGALG] Vb %d Ib_avg %d Ib_inst %d Tb %d Cap %d Maint %d "
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1324 "State %s Active_chg %d Chg_status %d AC %d USB %d "
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1325 "AC_online %d USB_online %d AC_CV %d USB_CV %d AC_I %d "
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1326 "USB_I %d AC_Vset %d AC_Iset %d USB_Vset %d USB_Iset %d\n",
2a5f41830aadc2 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1327 di->batt_data.volt_uv,
9c20899da46b85 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1328 di->batt_data.avg_curr_ua,
83e5aa77d1120f drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1329 di->batt_data.inst_curr_ua,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1330 di->batt_data.temp,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1331 di->batt_data.percent,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1332 di->maintenance_chg,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1333 states[di->charge_state],
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1334 di->chg_info.charger_type,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1335 di->charge_status,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1336 di->chg_info.conn_chg & AC_CHG,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1337 di->chg_info.conn_chg & USB_CHG,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1338 di->chg_info.online_chg & AC_CHG,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1339 di->chg_info.online_chg & USB_CHG,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1340 di->events.ac_cv_active,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1341 di->events.usb_cv_active,
83e5aa77d1120f drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1342 di->chg_info.ac_curr_ua,
83e5aa77d1120f drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1343 di->chg_info.usb_curr_ua,
bc6e0287140216 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1344 di->chg_info.ac_vset_uv,
83e5aa77d1120f drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1345 di->chg_info.ac_iset_ua,
bc6e0287140216 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1346 di->chg_info.usb_vset_uv,
83e5aa77d1120f drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1347 di->chg_info.usb_iset_ua);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1348
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1349 switch (di->charge_state) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1350 case STATE_HANDHELD_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1351 ab8500_chargalg_stop_charging(di);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1352 di->charge_status = POWER_SUPPLY_STATUS_DISCHARGING;
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1353 ab8500_chargalg_state_to(di, STATE_HANDHELD);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1354 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1355
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1356 case STATE_HANDHELD:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1357 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1358
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1359 case STATE_BATT_REMOVED_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1360 ab8500_chargalg_stop_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1361 ab8500_chargalg_state_to(di, STATE_BATT_REMOVED);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1362 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1363
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1364 case STATE_BATT_REMOVED:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1365 if (!di->events.batt_rem)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1366 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1367 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1368
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1369 case STATE_HW_TEMP_PROTECT_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1370 ab8500_chargalg_stop_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1371 ab8500_chargalg_state_to(di, STATE_HW_TEMP_PROTECT);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1372 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1373
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1374 case STATE_HW_TEMP_PROTECT:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1375 if (!di->events.main_thermal_prot &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1376 !di->events.usb_thermal_prot)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1377 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1378 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1379
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1380 case STATE_OVV_PROTECT_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1381 ab8500_chargalg_stop_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1382 ab8500_chargalg_state_to(di, STATE_OVV_PROTECT);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1383 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1384
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1385 case STATE_OVV_PROTECT:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1386 if (!di->events.vbus_ovv &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1387 !di->events.main_ovv &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1388 !di->events.batt_ovv &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1389 di->chg_info.usb_chg_ok &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1390 di->chg_info.ac_chg_ok)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1391 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1392 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1393
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1394 case STATE_CHG_NOT_OK_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1395 ab8500_chargalg_stop_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1396 ab8500_chargalg_state_to(di, STATE_CHG_NOT_OK);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1397 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1398
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1399 case STATE_CHG_NOT_OK:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1400 if (!di->events.mainextchnotok &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1401 !di->events.usbchargernotok)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1402 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1403 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1404
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1405 case STATE_SAFETY_TIMER_EXPIRED_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1406 ab8500_chargalg_stop_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1407 ab8500_chargalg_state_to(di, STATE_SAFETY_TIMER_EXPIRED);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1408 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1409
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1410 case STATE_SAFETY_TIMER_EXPIRED:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1411 /* We exit this state when charger is removed */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1412 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1413
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1414 case STATE_NORMAL_INIT:
05906f58c82259 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-01-29 1415 if (bi->constant_charge_current_max_ua == 0)
05906f58c82259 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-01-29 1416 /* "charging" with 0 uA */
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1417 ab8500_chargalg_stop_charging(di);
4d3b4aa58ac9e1 drivers/power/abx500_chargalg.c Lee Jones 2013-02-15 1418 else {
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1419 ab8500_chargalg_start_charging(di,
bc6e0287140216 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1420 bi->constant_charge_voltage_max_uv,
05906f58c82259 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-01-29 1421 bi->constant_charge_current_max_ua);
4d3b4aa58ac9e1 drivers/power/abx500_chargalg.c Lee Jones 2013-02-15 1422 }
4d3b4aa58ac9e1 drivers/power/abx500_chargalg.c Lee Jones 2013-02-15 1423
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1424 ab8500_chargalg_state_to(di, STATE_NORMAL);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1425 ab8500_chargalg_start_safety_timer(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1426 ab8500_chargalg_stop_maintenance_timer(di);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1427 init_maxim_chg_curr(di);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1428 di->charge_status = POWER_SUPPLY_STATUS_CHARGING;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1429 di->eoc_cnt = 0;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1430 di->maintenance_chg = false;
297d716f6260cc drivers/power/abx500_chargalg.c Krzysztof Kozlowski 2015-03-12 1431 power_supply_changed(di->chargalg_psy);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1432
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1433 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1434
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1435 case STATE_NORMAL:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1436 handle_maxim_chg_curr(di);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1437 if (di->charge_status == POWER_SUPPLY_STATUS_FULL &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1438 di->maintenance_chg) {
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1439 /*
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1440 * The battery is fully charged, check if we support
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1441 * maintenance charging else go back to waiting for
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1442 * the recharge voltage limit.
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1443 */
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1444 if (!power_supply_supports_maintenance_charging(bi))
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1445 ab8500_chargalg_state_to(di,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1446 STATE_WAIT_FOR_RECHARGE_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1447 else
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1448 ab8500_chargalg_state_to(di,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1449 STATE_MAINTENANCE_A_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1450 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1451 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1452
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1453 /* This state will be used when the maintenance state is disabled */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1454 case STATE_WAIT_FOR_RECHARGE_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1455 ab8500_chargalg_hold_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1456 ab8500_chargalg_state_to(di, STATE_WAIT_FOR_RECHARGE);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1457 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1458
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1459 case STATE_WAIT_FOR_RECHARGE:
6aa35ab9db2c9c drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1460 if (ab8500_chargalg_time_to_restart(di))
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1461 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1462 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1463
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1464 case STATE_MAINTENANCE_A_INIT:
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 @1465 mt = power_supply_get_maintenance_charging_setting(bi, 0);
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1466 if (!mt) {
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1467 /* No maintenance A state, go back to normal */
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1468 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1469 power_supply_changed(di->chargalg_psy);
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1470 break;
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1471 }
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1472 ab8500_chargalg_stop_safety_timer(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1473 ab8500_chargalg_start_maintenance_timer(di,
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1474 mt->charge_safety_timer_minutes);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1475 ab8500_chargalg_start_charging(di,
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1476 mt->charge_voltage_max_uv,
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1477 mt->charge_current_max_ua);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1478 ab8500_chargalg_state_to(di, STATE_MAINTENANCE_A);
297d716f6260cc drivers/power/abx500_chargalg.c Krzysztof Kozlowski 2015-03-12 1479 power_supply_changed(di->chargalg_psy);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1480 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1481
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1482 case STATE_MAINTENANCE_A:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1483 if (di->events.maintenance_timer_expired) {
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1484 ab8500_chargalg_stop_maintenance_timer(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1485 ab8500_chargalg_state_to(di, STATE_MAINTENANCE_B_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1486 }
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1487 /*
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1488 * This happens if the voltage drops too quickly during
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1489 * maintenance charging, especially in older batteries.
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1490 */
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1491 if (ab8500_chargalg_time_to_restart(di)) {
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1492 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1493 dev_info(di->dev, "restarted charging from maintenance state A - battery getting old?\n");
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1494 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1495 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1496
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1497 case STATE_MAINTENANCE_B_INIT:
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1498 mt = power_supply_get_maintenance_charging_setting(bi, 1);
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1499 if (!mt) {
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1500 /* No maintenance B state, go back to normal */
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1501 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1502 power_supply_changed(di->chargalg_psy);
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1503 break;
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1504 }
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1505 ab8500_chargalg_start_maintenance_timer(di,
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1506 mt->charge_safety_timer_minutes);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1507 ab8500_chargalg_start_charging(di,
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1508 mt->charge_voltage_max_uv,
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1509 mt->charge_current_max_ua);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1510 ab8500_chargalg_state_to(di, STATE_MAINTENANCE_B);
297d716f6260cc drivers/power/abx500_chargalg.c Krzysztof Kozlowski 2015-03-12 1511 power_supply_changed(di->chargalg_psy);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1512 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1513
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1514 case STATE_MAINTENANCE_B:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1515 if (di->events.maintenance_timer_expired) {
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1516 ab8500_chargalg_stop_maintenance_timer(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1517 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1518 }
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1519 /*
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1520 * This happens if the voltage drops too quickly during
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1521 * maintenance charging, especially in older batteries.
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1522 */
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1523 if (ab8500_chargalg_time_to_restart(di)) {
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1524 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1525 dev_info(di->dev, "restarted charging from maintenance state B - battery getting old?\n");
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1526 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1527 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1528
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1529 case STATE_TEMP_LOWHIGH_INIT:
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1530 if (di->events.btemp_low) {
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1531 ab8500_chargalg_start_charging(di,
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1532 bi->alert_low_temp_charge_voltage_uv,
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1533 bi->alert_low_temp_charge_current_ua);
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1534 } else if (di->events.btemp_high) {
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1535 ab8500_chargalg_start_charging(di,
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1536 bi->alert_high_temp_charge_voltage_uv,
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1537 bi->alert_high_temp_charge_current_ua);
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1538 } else {
8652b62ee6f157 drivers/power/supply/ab8500_chargalg.c Colin Ian King 2022-03-02 1539 dev_err(di->dev, "neither low or high temp event occurred\n");
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1540 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1541 break;
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1542 }
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1543 ab8500_chargalg_stop_maintenance_timer(di);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1544 di->charge_status = POWER_SUPPLY_STATUS_CHARGING;
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1545 ab8500_chargalg_state_to(di, STATE_TEMP_LOWHIGH);
297d716f6260cc drivers/power/abx500_chargalg.c Krzysztof Kozlowski 2015-03-12 1546 power_supply_changed(di->chargalg_psy);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1547 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1548
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1549 case STATE_TEMP_LOWHIGH:
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1550 if (!di->events.btemp_low && !di->events.btemp_high)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1551 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1552 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1553
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1554 case STATE_WD_EXPIRED_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1555 ab8500_chargalg_stop_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1556 ab8500_chargalg_state_to(di, STATE_WD_EXPIRED);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1557 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1558
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1559 case STATE_WD_EXPIRED:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1560 if (!di->events.ac_wd_expired &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1561 !di->events.usb_wd_expired)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1562 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1563 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1564
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1565 case STATE_TEMP_UNDEROVER_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1566 ab8500_chargalg_stop_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1567 ab8500_chargalg_state_to(di, STATE_TEMP_UNDEROVER);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1568 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1569
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1570 case STATE_TEMP_UNDEROVER:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1571 if (!di->events.btemp_underover)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1572 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1573 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1574 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1575
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1576 /* Start charging directly if the new state is a charge state */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1577 if (di->charge_state == STATE_NORMAL_INIT ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1578 di->charge_state == STATE_MAINTENANCE_A_INIT ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1579 di->charge_state == STATE_MAINTENANCE_B_INIT)
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1580 queue_work(di->chargalg_wq, &di->chargalg_work);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1581 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1582
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hello,
On Sat, Jun 01, 2024 at 05:00:29PM +0200, Christophe JAILLET wrote:
> 'struct power_supply_maintenance_charge_table' is not modified in this
> driver.
>
> Constifying this structure moves some data to a read-only section, so
> increase overall security.
>
> In order to do it, some code also needs to be adjusted to this new const
> qualifier.
>
> On a x86_64, with allmodconfig:
> Before:
> ======
> $ size drivers/power/supply/samsung-sdi-battery.o
> text data bss dec hex filename
> 4055 4584 0 8639 21bf drivers/power/supply/samsung-sdi-battery.o
>
> After:
> =====
> $ size drivers/power/supply/samsung-sdi-battery.o
> text data bss dec hex filename
> 4087 4552 0 8639 21bf drivers/power/supply/samsung-sdi-battery.o
>
> Signed-off-by: Christophe JAILLET <[email protected]>
> ---
> Compile tested-only
> ---
Looks like that compile testing did not include ab8500_chargalg :)
Fixing the error reported by the Intel bot should be trivial (i.e.
add another const). When you send a new version, please also Cc
Linus Walleij <[email protected]>.
Thanks for your patches and greetings,
-- Sebastian
Hi Christophe,
kernel test robot noticed the following build errors:
[auto build test ERROR on sre-power-supply/for-next]
[also build test ERROR on linus/master v6.10-rc2 next-20240604]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Christophe-JAILLET/power-supply-samsung-sdi-battery-Constify-struct-power_supply_maintenance_charge_table/20240602-000031
base: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git for-next
patch link: https://lore.kernel.org/r/02c6ad69a3ace192c9d609b7336a681a8fc7ba94.1717253900.git.christophe.jaillet%40wanadoo.fr
patch subject: [PATCH 2/2] power: supply: samsung-sdi-battery: Constify struct power_supply_maintenance_charge_table
config: arm-randconfig-002-20240605 (https://download.01.org/0day-ci/archive/20240605/[email protected]/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240605/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All errors (new ones prefixed by >>):
>> drivers/power/supply/ab8500_chargalg.c:1465:6: error: assigning to 'struct power_supply_maintenance_charge_table *' from 'const struct power_supply_maintenance_charge_table *' discards qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
mt = power_supply_get_maintenance_charging_setting(bi, 0);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/power/supply/ab8500_chargalg.c:1498:6: error: assigning to 'struct power_supply_maintenance_charge_table *' from 'const struct power_supply_maintenance_charge_table *' discards qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
mt = power_supply_get_maintenance_charging_setting(bi, 1);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 errors generated.
vim +1465 drivers/power/supply/ab8500_chargalg.c
6aa35ab9db2c9c drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1217
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1218 /**
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1219 * ab8500_chargalg_algorithm() - Main function for the algorithm
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1220 * @di: pointer to the ab8500_chargalg structure
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1221 *
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1222 * This is the main control function for the charging algorithm.
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1223 * It is called periodically or when something happens that will
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1224 * trigger a state change
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1225 */
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1226 static void ab8500_chargalg_algorithm(struct ab8500_chargalg *di)
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1227 {
25fd330370ac40 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-12-15 1228 struct power_supply_battery_info *bi = di->bm->bi;
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1229 struct power_supply_maintenance_charge_table *mt;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1230 int charger_status;
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1231 int ret;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1232
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1233 /* Collect data from all power_supply class devices */
68ade0976df797 drivers/power/supply/ab8500_chargalg.c Sebastian Reichel 2024-03-01 1234 power_supply_for_each_device(di->chargalg_psy, ab8500_chargalg_get_ext_psy_data);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1235
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1236 ab8500_chargalg_end_of_charge(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1237 ab8500_chargalg_check_temp(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1238 ab8500_chargalg_check_charger_voltage(di);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1239
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1240 charger_status = ab8500_chargalg_check_charger_connection(di);
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1241
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1242 if (is_ab8500(di->parent)) {
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1243 ret = ab8500_chargalg_check_charger_enable(di);
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1244 if (ret < 0)
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1245 dev_err(di->dev, "Checking charger is enabled error"
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1246 ": Returned Value %d\n", ret);
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1247 }
4dcdf57773fd45 drivers/power/abx500_chargalg.c Lee Jones 2013-02-14 1248
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1249 /*
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1250 * First check if we have a charger connected.
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1251 * Also we don't allow charging of unknown batteries if configured
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1252 * this way
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1253 */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1254 if (!charger_status ||
b0284de05e07d5 drivers/power/abx500_chargalg.c Lee Jones 2012-11-30 1255 (di->events.batt_unknown && !di->bm->chg_unknown_bat)) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1256 if (di->charge_state != STATE_HANDHELD) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1257 di->events.safety_timer_expired = false;
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1258 ab8500_chargalg_state_to(di, STATE_HANDHELD_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1259 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1260 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1261
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1262 /* Safety timer expiration */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1263 else if (di->events.safety_timer_expired) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1264 if (di->charge_state != STATE_SAFETY_TIMER_EXPIRED)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1265 ab8500_chargalg_state_to(di,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1266 STATE_SAFETY_TIMER_EXPIRED_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1267 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1268 /*
8652b62ee6f157 drivers/power/supply/ab8500_chargalg.c Colin Ian King 2022-03-02 1269 * Check if any interrupts has occurred
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1270 * that will prevent us from charging
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1271 */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1272
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1273 /* Battery removed */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1274 else if (di->events.batt_rem) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1275 if (di->charge_state != STATE_BATT_REMOVED)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1276 ab8500_chargalg_state_to(di, STATE_BATT_REMOVED_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1277 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1278 /* Main or USB charger not ok. */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1279 else if (di->events.mainextchnotok || di->events.usbchargernotok) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1280 /*
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1281 * If vbus_collapsed is set, we have to lower the charger
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1282 * current, which is done in the normal state below
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1283 */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1284 if (di->charge_state != STATE_CHG_NOT_OK &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1285 !di->events.vbus_collapsed)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1286 ab8500_chargalg_state_to(di, STATE_CHG_NOT_OK_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1287 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1288 /* VBUS, Main or VBAT OVV. */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1289 else if (di->events.vbus_ovv ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1290 di->events.main_ovv ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1291 di->events.batt_ovv ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1292 !di->chg_info.usb_chg_ok ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1293 !di->chg_info.ac_chg_ok) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1294 if (di->charge_state != STATE_OVV_PROTECT)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1295 ab8500_chargalg_state_to(di, STATE_OVV_PROTECT_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1296 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1297 /* USB Thermal, stop charging */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1298 else if (di->events.main_thermal_prot ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1299 di->events.usb_thermal_prot) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1300 if (di->charge_state != STATE_HW_TEMP_PROTECT)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1301 ab8500_chargalg_state_to(di,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1302 STATE_HW_TEMP_PROTECT_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1303 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1304 /* Battery temp over/under */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1305 else if (di->events.btemp_underover) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1306 if (di->charge_state != STATE_TEMP_UNDEROVER)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1307 ab8500_chargalg_state_to(di,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1308 STATE_TEMP_UNDEROVER_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1309 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1310 /* Watchdog expired */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1311 else if (di->events.ac_wd_expired ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1312 di->events.usb_wd_expired) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1313 if (di->charge_state != STATE_WD_EXPIRED)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1314 ab8500_chargalg_state_to(di, STATE_WD_EXPIRED_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1315 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1316 /* Battery temp high/low */
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1317 else if (di->events.btemp_low || di->events.btemp_high) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1318 if (di->charge_state != STATE_TEMP_LOWHIGH)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1319 ab8500_chargalg_state_to(di, STATE_TEMP_LOWHIGH_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1320 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1321
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1322 dev_dbg(di->dev,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1323 "[CHARGALG] Vb %d Ib_avg %d Ib_inst %d Tb %d Cap %d Maint %d "
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1324 "State %s Active_chg %d Chg_status %d AC %d USB %d "
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1325 "AC_online %d USB_online %d AC_CV %d USB_CV %d AC_I %d "
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1326 "USB_I %d AC_Vset %d AC_Iset %d USB_Vset %d USB_Iset %d\n",
2a5f41830aadc2 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1327 di->batt_data.volt_uv,
9c20899da46b85 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1328 di->batt_data.avg_curr_ua,
83e5aa77d1120f drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1329 di->batt_data.inst_curr_ua,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1330 di->batt_data.temp,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1331 di->batt_data.percent,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1332 di->maintenance_chg,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1333 states[di->charge_state],
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1334 di->chg_info.charger_type,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1335 di->charge_status,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1336 di->chg_info.conn_chg & AC_CHG,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1337 di->chg_info.conn_chg & USB_CHG,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1338 di->chg_info.online_chg & AC_CHG,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1339 di->chg_info.online_chg & USB_CHG,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1340 di->events.ac_cv_active,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1341 di->events.usb_cv_active,
83e5aa77d1120f drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1342 di->chg_info.ac_curr_ua,
83e5aa77d1120f drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1343 di->chg_info.usb_curr_ua,
bc6e0287140216 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1344 di->chg_info.ac_vset_uv,
83e5aa77d1120f drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1345 di->chg_info.ac_iset_ua,
bc6e0287140216 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1346 di->chg_info.usb_vset_uv,
83e5aa77d1120f drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1347 di->chg_info.usb_iset_ua);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1348
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1349 switch (di->charge_state) {
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1350 case STATE_HANDHELD_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1351 ab8500_chargalg_stop_charging(di);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1352 di->charge_status = POWER_SUPPLY_STATUS_DISCHARGING;
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1353 ab8500_chargalg_state_to(di, STATE_HANDHELD);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1354 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1355
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1356 case STATE_HANDHELD:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1357 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1358
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1359 case STATE_BATT_REMOVED_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1360 ab8500_chargalg_stop_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1361 ab8500_chargalg_state_to(di, STATE_BATT_REMOVED);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1362 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1363
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1364 case STATE_BATT_REMOVED:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1365 if (!di->events.batt_rem)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1366 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1367 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1368
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1369 case STATE_HW_TEMP_PROTECT_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1370 ab8500_chargalg_stop_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1371 ab8500_chargalg_state_to(di, STATE_HW_TEMP_PROTECT);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1372 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1373
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1374 case STATE_HW_TEMP_PROTECT:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1375 if (!di->events.main_thermal_prot &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1376 !di->events.usb_thermal_prot)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1377 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1378 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1379
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1380 case STATE_OVV_PROTECT_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1381 ab8500_chargalg_stop_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1382 ab8500_chargalg_state_to(di, STATE_OVV_PROTECT);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1383 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1384
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1385 case STATE_OVV_PROTECT:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1386 if (!di->events.vbus_ovv &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1387 !di->events.main_ovv &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1388 !di->events.batt_ovv &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1389 di->chg_info.usb_chg_ok &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1390 di->chg_info.ac_chg_ok)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1391 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1392 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1393
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1394 case STATE_CHG_NOT_OK_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1395 ab8500_chargalg_stop_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1396 ab8500_chargalg_state_to(di, STATE_CHG_NOT_OK);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1397 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1398
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1399 case STATE_CHG_NOT_OK:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1400 if (!di->events.mainextchnotok &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1401 !di->events.usbchargernotok)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1402 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1403 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1404
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1405 case STATE_SAFETY_TIMER_EXPIRED_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1406 ab8500_chargalg_stop_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1407 ab8500_chargalg_state_to(di, STATE_SAFETY_TIMER_EXPIRED);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1408 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1409
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1410 case STATE_SAFETY_TIMER_EXPIRED:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1411 /* We exit this state when charger is removed */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1412 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1413
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1414 case STATE_NORMAL_INIT:
05906f58c82259 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-01-29 1415 if (bi->constant_charge_current_max_ua == 0)
05906f58c82259 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-01-29 1416 /* "charging" with 0 uA */
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1417 ab8500_chargalg_stop_charging(di);
4d3b4aa58ac9e1 drivers/power/abx500_chargalg.c Lee Jones 2013-02-15 1418 else {
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1419 ab8500_chargalg_start_charging(di,
bc6e0287140216 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-11-20 1420 bi->constant_charge_voltage_max_uv,
05906f58c82259 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-01-29 1421 bi->constant_charge_current_max_ua);
4d3b4aa58ac9e1 drivers/power/abx500_chargalg.c Lee Jones 2013-02-15 1422 }
4d3b4aa58ac9e1 drivers/power/abx500_chargalg.c Lee Jones 2013-02-15 1423
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1424 ab8500_chargalg_state_to(di, STATE_NORMAL);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1425 ab8500_chargalg_start_safety_timer(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1426 ab8500_chargalg_stop_maintenance_timer(di);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1427 init_maxim_chg_curr(di);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1428 di->charge_status = POWER_SUPPLY_STATUS_CHARGING;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1429 di->eoc_cnt = 0;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1430 di->maintenance_chg = false;
297d716f6260cc drivers/power/abx500_chargalg.c Krzysztof Kozlowski 2015-03-12 1431 power_supply_changed(di->chargalg_psy);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1432
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1433 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1434
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1435 case STATE_NORMAL:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1436 handle_maxim_chg_curr(di);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1437 if (di->charge_status == POWER_SUPPLY_STATUS_FULL &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1438 di->maintenance_chg) {
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1439 /*
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1440 * The battery is fully charged, check if we support
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1441 * maintenance charging else go back to waiting for
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1442 * the recharge voltage limit.
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1443 */
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1444 if (!power_supply_supports_maintenance_charging(bi))
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1445 ab8500_chargalg_state_to(di,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1446 STATE_WAIT_FOR_RECHARGE_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1447 else
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1448 ab8500_chargalg_state_to(di,
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1449 STATE_MAINTENANCE_A_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1450 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1451 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1452
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1453 /* This state will be used when the maintenance state is disabled */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1454 case STATE_WAIT_FOR_RECHARGE_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1455 ab8500_chargalg_hold_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1456 ab8500_chargalg_state_to(di, STATE_WAIT_FOR_RECHARGE);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1457 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1458
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1459 case STATE_WAIT_FOR_RECHARGE:
6aa35ab9db2c9c drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1460 if (ab8500_chargalg_time_to_restart(di))
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1461 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1462 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1463
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1464 case STATE_MAINTENANCE_A_INIT:
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 @1465 mt = power_supply_get_maintenance_charging_setting(bi, 0);
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1466 if (!mt) {
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1467 /* No maintenance A state, go back to normal */
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1468 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1469 power_supply_changed(di->chargalg_psy);
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1470 break;
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1471 }
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1472 ab8500_chargalg_stop_safety_timer(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1473 ab8500_chargalg_start_maintenance_timer(di,
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1474 mt->charge_safety_timer_minutes);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1475 ab8500_chargalg_start_charging(di,
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1476 mt->charge_voltage_max_uv,
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1477 mt->charge_current_max_ua);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1478 ab8500_chargalg_state_to(di, STATE_MAINTENANCE_A);
297d716f6260cc drivers/power/abx500_chargalg.c Krzysztof Kozlowski 2015-03-12 1479 power_supply_changed(di->chargalg_psy);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1480 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1481
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1482 case STATE_MAINTENANCE_A:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1483 if (di->events.maintenance_timer_expired) {
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1484 ab8500_chargalg_stop_maintenance_timer(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1485 ab8500_chargalg_state_to(di, STATE_MAINTENANCE_B_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1486 }
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1487 /*
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1488 * This happens if the voltage drops too quickly during
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1489 * maintenance charging, especially in older batteries.
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1490 */
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1491 if (ab8500_chargalg_time_to_restart(di)) {
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1492 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1493 dev_info(di->dev, "restarted charging from maintenance state A - battery getting old?\n");
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1494 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1495 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1496
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1497 case STATE_MAINTENANCE_B_INIT:
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1498 mt = power_supply_get_maintenance_charging_setting(bi, 1);
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1499 if (!mt) {
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1500 /* No maintenance B state, go back to normal */
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1501 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1502 power_supply_changed(di->chargalg_psy);
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1503 break;
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1504 }
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1505 ab8500_chargalg_start_maintenance_timer(di,
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1506 mt->charge_safety_timer_minutes);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1507 ab8500_chargalg_start_charging(di,
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1508 mt->charge_voltage_max_uv,
d72ce7d3247862 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1509 mt->charge_current_max_ua);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1510 ab8500_chargalg_state_to(di, STATE_MAINTENANCE_B);
297d716f6260cc drivers/power/abx500_chargalg.c Krzysztof Kozlowski 2015-03-12 1511 power_supply_changed(di->chargalg_psy);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1512 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1513
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1514 case STATE_MAINTENANCE_B:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1515 if (di->events.maintenance_timer_expired) {
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1516 ab8500_chargalg_stop_maintenance_timer(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1517 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1518 }
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1519 /*
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1520 * This happens if the voltage drops too quickly during
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1521 * maintenance charging, especially in older batteries.
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1522 */
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1523 if (ab8500_chargalg_time_to_restart(di)) {
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1524 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1525 dev_info(di->dev, "restarted charging from maintenance state B - battery getting old?\n");
e08f8a118514c9 drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-04-15 1526 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1527 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1528
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1529 case STATE_TEMP_LOWHIGH_INIT:
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1530 if (di->events.btemp_low) {
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1531 ab8500_chargalg_start_charging(di,
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1532 bi->alert_low_temp_charge_voltage_uv,
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1533 bi->alert_low_temp_charge_current_ua);
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1534 } else if (di->events.btemp_high) {
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1535 ab8500_chargalg_start_charging(di,
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1536 bi->alert_high_temp_charge_voltage_uv,
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1537 bi->alert_high_temp_charge_current_ua);
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1538 } else {
8652b62ee6f157 drivers/power/supply/ab8500_chargalg.c Colin Ian King 2022-03-02 1539 dev_err(di->dev, "neither low or high temp event occurred\n");
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1540 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1541 break;
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1542 }
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1543 ab8500_chargalg_stop_maintenance_timer(di);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1544 di->charge_status = POWER_SUPPLY_STATUS_CHARGING;
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1545 ab8500_chargalg_state_to(di, STATE_TEMP_LOWHIGH);
297d716f6260cc drivers/power/abx500_chargalg.c Krzysztof Kozlowski 2015-03-12 1546 power_supply_changed(di->chargalg_psy);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1547 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1548
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1549 case STATE_TEMP_LOWHIGH:
0e8b903b522b5a drivers/power/supply/ab8500_chargalg.c Linus Walleij 2022-02-26 1550 if (!di->events.btemp_low && !di->events.btemp_high)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1551 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1552 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1553
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1554 case STATE_WD_EXPIRED_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1555 ab8500_chargalg_stop_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1556 ab8500_chargalg_state_to(di, STATE_WD_EXPIRED);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1557 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1558
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1559 case STATE_WD_EXPIRED:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1560 if (!di->events.ac_wd_expired &&
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1561 !di->events.usb_wd_expired)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1562 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1563 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1564
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1565 case STATE_TEMP_UNDEROVER_INIT:
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1566 ab8500_chargalg_stop_charging(di);
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1567 ab8500_chargalg_state_to(di, STATE_TEMP_UNDEROVER);
df561f6688fef7 drivers/power/supply/abx500_chargalg.c Gustavo A. R. Silva 2020-08-23 1568 fallthrough;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1569
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1570 case STATE_TEMP_UNDEROVER:
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1571 if (!di->events.btemp_underover)
c5b64a990e7f3b drivers/power/supply/ab8500_chargalg.c Linus Walleij 2021-07-13 1572 ab8500_chargalg_state_to(di, STATE_NORMAL_INIT);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1573 break;
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1574 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1575
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1576 /* Start charging directly if the new state is a charge state */
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1577 if (di->charge_state == STATE_NORMAL_INIT ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1578 di->charge_state == STATE_MAINTENANCE_A_INIT ||
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1579 di->charge_state == STATE_MAINTENANCE_B_INIT)
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1580 queue_work(di->chargalg_wq, &di->chargalg_work);
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1581 }
1668f81159fb72 drivers/power/abx500_chargalg.c Arun Murthy 2012-02-29 1582
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki