| From f5c042b23f7429e5c2ac987b01a31c69059a978b Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= <mirq-linux@rere.qmqm.pl> |
| Date: Fri, 13 Nov 2020 01:20:28 +0100 |
| Subject: regulator: workaround self-referent regulators |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Michał Mirosław <mirq-linux@rere.qmqm.pl> |
| |
| commit f5c042b23f7429e5c2ac987b01a31c69059a978b upstream. |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/regulator/core.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/regulator/core.c |
| +++ b/drivers/regulator/core.c |
| @@ -1598,7 +1598,10 @@ static int regulator_resolve_supply(stru |
| 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); |
| } |
| |
| /* |