Message ID | 1438870315-18689-7-git-send-email-tomeu.vizoso@collabora.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Aug 06, 2015 at 04:11:43PM +0200, Tomeu Vizoso wrote: > When looking up a regulator through its OF node, probe it if it hasn't > already. > > The goal is to reduce deferred probes to a minimum, as it makes it very > cumbersome to find out why a device failed to probe, and can introduce > very big delays in when a critical device is probed. Still the same problem as we had before with this stuff, why is this DT only? > #include <linux/regulator/consumer.h> > @@ -1336,6 +1337,7 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev, > if (dev && dev->of_node) { > node = of_get_regulator(dev, supply); > if (node) { > + of_platform_probe(node); And why the assumption that this is a platform device?
On Fri, Aug 7, 2015 at 7:09 AM, Mark Brown <broonie@kernel.org> wrote: > On Thu, Aug 06, 2015 at 04:11:43PM +0200, Tomeu Vizoso wrote: > >> When looking up a regulator through its OF node, probe it if it hasn't >> already. >> >> The goal is to reduce deferred probes to a minimum, as it makes it very >> cumbersome to find out why a device failed to probe, and can introduce >> very big delays in when a critical device is probed. > > Still the same problem as we had before with this stuff, why is this DT > only? The last version was more generic, but it was obvious that doing that was pointless with current code structure. You have a call sequence like either: generic get -> DT specific get -> generic poke -> DT specific poke or generic get -> DT specific get -> DT specific poke v2 did the former and this version does the latter. However, for some reason with regulators this is not all contained within of_get_regulator. > >> #include <linux/regulator/consumer.h> >> @@ -1336,6 +1337,7 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev, >> if (dev && dev->of_node) { >> node = of_get_regulator(dev, supply); >> if (node) { >> + of_platform_probe(node); > > And why the assumption that this is a platform device? Agreed on this point. Rob
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 5f6c76142b08..73ac9fb07f96 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -26,6 +26,7 @@ #include <linux/gpio.h> #include <linux/gpio/consumer.h> #include <linux/of.h> +#include <linux/of_platform.h> #include <linux/regmap.h> #include <linux/regulator/of_regulator.h> #include <linux/regulator/consumer.h> @@ -1336,6 +1337,7 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev, if (dev && dev->of_node) { node = of_get_regulator(dev, supply); if (node) { + of_platform_probe(node); mutex_lock(®ulator_list_mutex); list_for_each_entry(r, ®ulator_list, list) if (r->dev.parent &&
When looking up a regulator through its OF node, probe it if it hasn't already. The goal is to reduce deferred probes to a minimum, as it makes it very cumbersome to find out why a device failed to probe, and can introduce very big delays in when a critical device is probed. Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> --- Changes in v3: None Changes in v2: None drivers/regulator/core.c | 2 ++ 1 file changed, 2 insertions(+)