在 2020-08-19星期三的 11:54 +0100,Lee Jones写道: > Commit e49aa9a9bd22 ("mfd: core: Make a best effort attempt to match > devices with the correct of_nodes") changed the semantics for > disabled > devices in mfd_add_device(). Instead of silently ignoring a disabled > child device, an error was returned. On receipt of the error > mfd_add_devices() the precedes to remove *all* child devices and > returns an all-failed error to the caller, which will inevitably fail > the parent device as well. > > This patch reverts back to the old semantics and ignores child > devices > which are disabled in Device Tree. > > Fixes: e49aa9a9bd22 ("mfd: core: Make a best effort attempt to match > devices with the correct of_nodes") > Reported-by: Icenowy Zheng <icen...@aosc.io> > Signed-off-by: Lee Jones <lee.jo...@linaro.org>
Tested-by: Icenowy Zheng <icen...@aosc.io> > --- > drivers/mfd/mfd-core.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c > index c3651f06684fa..30f90a15ceaab 100644 > --- a/drivers/mfd/mfd-core.c > +++ b/drivers/mfd/mfd-core.c > @@ -126,10 +126,6 @@ static int mfd_match_of_node_to_dev(struct > platform_device *pdev, > const __be32 *reg; > u64 of_node_addr; > > - /* Skip devices 'disabled' by Device Tree */ > - if (!of_device_is_available(np)) > - return -ENODEV; > - > /* Skip if OF node has previously been allocated to a device */ > list_for_each_entry(of_entry, &mfd_of_node_list, list) > if (of_entry->np == np) > @@ -212,6 +208,12 @@ static int mfd_add_device(struct device *parent, > int id, > if (IS_ENABLED(CONFIG_OF) && parent->of_node && cell- > >of_compatible) { > for_each_child_of_node(parent->of_node, np) { > if (of_device_is_compatible(np, cell- > >of_compatible)) { > + /* Ignore 'disabled' devices error free > */ > + if (!of_device_is_available(np)) { > + ret = 0; > + goto fail_alias; > + } > + > ret = mfd_match_of_node_to_dev(pdev, > np, cell); > if (ret == -EAGAIN) > continue;