Le 26/07/2023 à 17:02, Herve Codina a écrit :
The loop searching for a matching device based on its compatible string is aborted when a matching disabled device is found. This abort avoid to add devices as soon as one disabled device is found.
s/avoid/prevents/
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
drivers/mfd/mfd-core.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c index 0ed7c0d7784e..bcc26e64639a 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; int ret = -ENOMEM; int platform_id; int r;
@@ -181,13 +182,13 @@ static int mfd_add_device(struct device *parent, int id, goto fail_res;
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)) {disabled = false;
/* 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 +198,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);