]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
power: supply: ab8500: Defer thermal zone probe
authorLinus Walleij <linus.walleij@linaro.org>
Sun, 30 Oct 2022 20:55:54 +0000 (21:55 +0100)
committerSebastian Reichel <sre@kernel.org>
Tue, 1 Nov 2022 00:00:32 +0000 (01:00 +0100)
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>
drivers/power/supply/ab8500_btemp.c

index 863fabe05bdcf84bb824417b7b814a6c283bbd8d..307ee6f71042e953f26a8f9c552aef63e10a6a13 100644 (file)
@@ -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");