diff options
author | Linus Walleij <linus.walleij@linaro.org> | 2022-10-30 21:55:54 +0100 |
---|---|---|
committer | Sebastian Reichel <sre@kernel.org> | 2022-11-01 01:00:32 +0100 |
commit | 767e684367e4759d9855b184045b7a9d6b19acd2 (patch) | |
tree | f53d185dab2832603017ab73ee473edc71bfd5cf /drivers/power | |
parent | power: supply: ip5xxx: Fix integer overflow in current_now calculation (diff) | |
download | linux-767e684367e4759d9855b184045b7a9d6b19acd2.tar.xz linux-767e684367e4759d9855b184045b7a9d6b19acd2.zip |
power: supply: ab8500: Defer thermal zone probe
The call thermal_zone_get_zone_by_name() used to return the
thermal zone right away, but recent refactorings in the
thermal core has changed this so the thermal zone used by
the battery is probed later, and the call returns -ENODEV.
This was always quite fragile. If we get -ENODEV, then
return a -EPROBE_DEFER and try again later.
Cc: phone-devel@vger.kernel.org
Fixes: 2b0e7ac0841b ("power: supply: ab8500: Integrate thermal zone")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Diffstat (limited to 'drivers/power')
-rw-r--r-- | drivers/power/supply/ab8500_btemp.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/power/supply/ab8500_btemp.c b/drivers/power/supply/ab8500_btemp.c index 863fabe05bdc..307ee6f71042 100644 --- a/drivers/power/supply/ab8500_btemp.c +++ b/drivers/power/supply/ab8500_btemp.c @@ -725,7 +725,14 @@ static int ab8500_btemp_probe(struct platform_device *pdev) /* Get thermal zone and ADC */ di->tz = thermal_zone_get_zone_by_name("battery-thermal"); if (IS_ERR(di->tz)) { - return dev_err_probe(dev, PTR_ERR(di->tz), + ret = PTR_ERR(di->tz); + /* + * This usually just means we are probing before the thermal + * zone, so just defer. + */ + if (ret == -ENODEV) + ret = -EPROBE_DEFER; + return dev_err_probe(dev, ret, "failed to get battery thermal zone\n"); } di->bat_ctrl = devm_iio_channel_get(dev, "bat_ctrl"); |