Hi Greg, On Mon, Nov 23, 2020 at 10:20:17AM +0100, gregkh@xxxxxxxxxxxxxxxxxxx wrote: > > The patch below does not apply to the 4.9-stable tree. > If someone wants it applied there, or to any other stable or longterm > tree, then please email the backport, including the original git commit > id to <stable@xxxxxxxxxxxxxxx>. Here is the backport. It needs to be applied after the backport of 4b639e254d3d ("regulator: avoid resolve_supply() infinite recursion") which is in the separate 'failed' mail. -- Regards Sudip
>From abc4b7b56078b9b796305d3f3707ebcdf136d106 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= <mirq-linux@xxxxxxxxxxxx> Date: Fri, 13 Nov 2020 01:20:28 +0100 Subject: [PATCH] regulator: workaround self-referent regulators MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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@xxxxxxxxxxxxxxx Reported-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> Signed-off-by: Michał Mirosław <mirq-linux@xxxxxxxxxxxx> Tested-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> # stpmic1 Link: https://lore.kernel.org/r/d703acde2a93100c3c7a81059d716c50ad1b1f52.1605226675.git.mirq-linux@xxxxxxxxxxxx Signed-off-by: Mark Brown <broonie@xxxxxxxxxx> [sudip: adjust context] Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@xxxxxxxxx> --- drivers/regulator/core.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 89f14e301b4c..23323add5b0b 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -1553,7 +1553,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); } /* Recursively resolve the supply of the supply */ -- 2.11.0