| From 90df602cac78af1400a07aed39b53bae7d4391f9 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 23 May 2021 00:50:41 +0200 |
| Subject: power: supply: ab8500: Avoid NULL pointers |
| |
| From: Linus Walleij <linus.walleij@linaro.org> |
| |
| [ Upstream commit 5bcb5087c9dd3dca1ff0ebd8002c5313c9332b56 ] |
| |
| Sometimes the code will crash because we haven't enabled |
| AC or USB charging and thus not created the corresponding |
| psy device. Fix it by checking that it is there before |
| notifying. |
| |
| Signed-off-by: Linus Walleij <linus.walleij@linaro.org> |
| Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/power/supply/ab8500_charger.c | 18 +++++++++++++++++- |
| 1 file changed, 17 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/power/supply/ab8500_charger.c b/drivers/power/supply/ab8500_charger.c |
| index ac77c8882d17..893185448284 100644 |
| --- a/drivers/power/supply/ab8500_charger.c |
| +++ b/drivers/power/supply/ab8500_charger.c |
| @@ -413,6 +413,14 @@ disable_otp: |
| static void ab8500_power_supply_changed(struct ab8500_charger *di, |
| struct power_supply *psy) |
| { |
| + /* |
| + * This happens if we get notifications or interrupts and |
| + * the platform has been configured not to support one or |
| + * other type of charging. |
| + */ |
| + if (!psy) |
| + return; |
| + |
| if (di->autopower_cfg) { |
| if (!di->usb.charger_connected && |
| !di->ac.charger_connected && |
| @@ -439,7 +447,15 @@ static void ab8500_charger_set_usb_connected(struct ab8500_charger *di, |
| if (!connected) |
| di->flags.vbus_drop_end = false; |
| |
| - sysfs_notify(&di->usb_chg.psy->dev.kobj, NULL, "present"); |
| + /* |
| + * Sometimes the platform is configured not to support |
| + * USB charging and no psy has been created, but we still |
| + * will get these notifications. |
| + */ |
| + if (di->usb_chg.psy) { |
| + sysfs_notify(&di->usb_chg.psy->dev.kobj, NULL, |
| + "present"); |
| + } |
| |
| if (connected) { |
| mutex_lock(&di->charger_attached_mutex); |
| -- |
| 2.30.2 |
| |