]> www.infradead.org Git - linux-platform-drivers-x86.git/commitdiff
regulator: workaround self-referent regulators
authorMichał Mirosław <mirq-linux@rere.qmqm.pl>
Fri, 13 Nov 2020 00:20:28 +0000 (01:20 +0100)
committerMark Brown <broonie@kernel.org>
Fri, 13 Nov 2020 14:21:26 +0000 (14:21 +0000)
Workaround regulators whose supply name happens to be the same as its
own name. This fixes boards that used to work before the early supply
resolving was removed. The error message is left in place so that
offending drivers can be detected.

Fixes: aea6cb99703e ("regulator: resolve supply after creating regulator")
Cc: stable@vger.kernel.org
Reported-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Tested-by: Ahmad Fatoum <a.fatoum@pengutronix.de> # stpmic1
Link: https://lore.kernel.org/r/d703acde2a93100c3c7a81059d716c50ad1b1f52.1605226675.git.mirq-linux@rere.qmqm.pl
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/regulator/core.c

index d3b96efa20fd095957e881fe3c672d6b92cf9e46..42bbd99a36acff6b44754066700e270cc58f09c5 100644 (file)
@@ -1844,7 +1844,10 @@ static int regulator_resolve_supply(struct regulator_dev *rdev)
        if (r == rdev) {
                dev_err(dev, "Supply for %s (%s) resolved to itself\n",
                        rdev->desc->name, rdev->supply_name);
-               return -EINVAL;
+               if (!have_full_constraints())
+                       return -EINVAL;
+               r = dummy_regulator_rdev;
+               get_device(&r->dev);
        }
 
        /*