Message ID | 528425d6472176bb1d02d79596b51f8c28a551cc.1692376361.git.christophe.leroy@csgroup.eu (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | Add support for QMC HDLC, framer infrastruture and PEF2256 framer (v4) | expand |
On Fri, 18 Aug 2023, Christophe Leroy wrote: > From: Herve Codina <herve.codina@bootlin.com> > > The loop searching for a matching device based on its compatible > string is aborted when a matching disabled device is found. > This abort prevents to add devices as soon as one disabled device > is found. > > Continue searching for an other device instead of aborting on the > first disabled one fixes the issue. > > Fixes: 22380b65dc70 ("mfd: mfd-core: Ensure disabled devices are ignored without error") > Signed-off-by: Herve Codina <herve.codina@bootlin.com> > Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu> > Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> > --- > drivers/mfd/mfd-core.c | 17 ++++++++++++----- > 1 file changed, 12 insertions(+), 5 deletions(-) This is too big of a change to be added this late in the cycle. Pushing review until after v6.5 is out.
On Fri, 18 Aug 2023 18:39:17 +0200, Christophe Leroy wrote: > The loop searching for a matching device based on its compatible > string is aborted when a matching disabled device is found. > This abort prevents to add devices as soon as one disabled device > is found. > > Continue searching for an other device instead of aborting on the > first disabled one fixes the issue. > > [...] Applied, thanks! [23/28] mfd: core: Ensure disabled devices are skiped without aborting commit: 36d139dc63db18eb95165fcc2bd3c670c948d605 -- Lee Jones [李琼斯]
diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c index 0ed7c0d7784e..2b85509a90fc 100644 --- a/drivers/mfd/mfd-core.c +++ b/drivers/mfd/mfd-core.c @@ -146,6 +146,7 @@ static int mfd_add_device(struct device *parent, int id, struct platform_device *pdev; struct device_node *np = NULL; struct mfd_of_node_entry *of_entry, *tmp; + bool disabled = false; int ret = -ENOMEM; int platform_id; int r; @@ -183,11 +184,10 @@ 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 */ + /* Skip 'disabled' devices */ if (!of_device_is_available(np)) { - of_node_put(np); - ret = 0; - goto fail_alias; + disabled = true; + continue; } ret = mfd_match_of_node_to_dev(pdev, np, cell); @@ -197,10 +197,17 @@ static int mfd_add_device(struct device *parent, int id, if (ret) goto fail_alias; - break; + goto match; } } + if (disabled) { + /* Ignore 'disabled' devices error free */ + ret = 0; + goto fail_alias; + } + +match: if (!pdev->dev.of_node) pr_warn("%s: Failed to locate of_node [id: %d]\n", cell->name, platform_id);