charging: avoid kernel panic

avoid NULL pointer kernel panic
<1>[ 4.240233] Unable to handle kernel NULL pointer dereference
at virtual address 0000000000000488
......
<4>[ 4.240332] Call trace:
<4>[ 4.240334] _raw_spin_lock_irqsave+0x40/0x74
<4>[ 4.240337] power_supply_changed+0x24/0x6c
<4>[ 4.240341] batt_external_power_changed+0x44/0x54
[mmi_discrete_charger]
<4>[ 4.240344] __power_supply_changed_work+0x50/0x88
<4>[ 4.240347] class_for_each_device+0xdc/0x148
<4>[ 4.240349] power_supply_changed_work+0x60/0xcc
<4>[ 4.240352] process_one_work+0x2cc/0x51c
<4>[ 4.240354] worker_thread+0x278/0x4d0
<4>[ 4.240356] kthread+0x16c/0x17c
<4>[ 4.240358] ret_from_fork+0x10/0x18
<0>[ 4.240362] Code: 1100054a b900192a 52800029 f9800011
<4>[ 4.240364] --[ end trace 55041178414fca52 ]--
<0>[ 4.241541] Kernel panic - not syncing: Fatal exception

Change-Id: I14e651a74cb6598fb2ba9fbad44e372c18fed024
Signed-off-by: mahj8 <mahj8@motorola.com>
Reviewed-on: https://gerrit.mot.com/2107613
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Lu Chai <chailu1@motorola.com>
Reviewed-by: Huosheng Liao <liaohs@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
mahj8 2021-11-04 19:30:51 +08:00 • committed by Haijian Ma
commit 490f9b94e5

View file

@ -1135,7 +1135,8 @@ static void batt_external_power_changed(struct power_supply *psy)
cancel_delayed_work(&chip->charger_work);
schedule_delayed_work(&chip->charger_work, msecs_to_jiffies(0));
power_supply_changed(chip->batt_psy);
if (chip->batt_psy)
power_supply_changed(chip->batt_psy);
}
static const struct power_supply_desc batt_psy_desc = {
@ -2484,6 +2485,8 @@ static int mmi_discrete_probe(struct platform_device *pdev)
else
mmi_info(chip, "IPC logging is enabled for MMI DISCRETE\n");
INIT_DELAYED_WORK(&chip->charger_work, mmi_discrete_charger_work);
chip->batt_psy = devm_power_supply_register(chip->dev,
&batt_psy_desc,
&psy_cfg);
@ -2518,7 +2521,6 @@ static int mmi_discrete_probe(struct platform_device *pdev)
goto cleanup;
}
INIT_DELAYED_WORK(&chip->charger_work, mmi_discrete_charger_work);
mmi_discrete_charger_init(chip);
usb_source_change_notify_handler(&chip->master_chg_nb, 0, &chip->master_chg_dev->noti);