regulator: rk808: revert to synchronous probing
authorSebastian Reichel <sebastian.reichel@collabora.com>
Thu, 4 May 2023 17:36:17 +0000 (19:36 +0200)
committerMark Brown <broonie@kernel.org>
Tue, 23 May 2023 18:01:58 +0000 (19:01 +0100)
The rk808 driver registers a bunch of regulator devices in a loop.
If one of the later regulators fails to register (usually because
its input supply is not yet available) everything will be unrolled
(i.e. previously registered regulators will be unregistered). With
asynchronous registration there might already be consumers, though.
We do not have the necessary infrastructure to properly unregister
the consumer device, so this scenario should be avoided.

First checking all input supplies or disallowing usage of the regulators
until all are registered does not work, since there can be
self-references (e.g. DCDC channels providing the supply of LDOs).

The only sensible solution I found is registering the regulator devices
asynchronously, so that we do not have to unroll. Since this is a major
rework let's revert back to synchronous probing for now to fix the issue
at hand.

Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Link: https://lore.kernel.org/r/20230504173618.142075-14-sebastian.reichel@collabora.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/regulator/rk808-regulator.c

index 71a1ca8b917e22f786a12f1e19cdb4344bd7e67a..5f14d6dd4593739aafee7090910f51458afc63f7 100644 (file)
@@ -1355,7 +1355,7 @@ static struct platform_driver rk808_regulator_driver = {
        .probe = rk808_regulator_probe,
        .driver = {
                .name = "rk808-regulator",
-               .probe_type = PROBE_PREFER_ASYNCHRONOUS,
+               .probe_type = PROBE_FORCE_SYNCHRONOUS,
        },
 };