Commit 7ba7bdef authored by Herve Codina's avatar Herve Codina Committed by Lee Jones

mfd: core: Ensure disabled devices are skipped without aborting

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: 22380b65 ("mfd: mfd-core: Ensure disabled devices are ignored without error")
Signed-off-by: default avatarHerve Codina <herve.codina@bootlin.com>
Reviewed-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Link: https://lore.kernel.org/r/528425d6472176bb1d02d79596b51f8c28a551cc.1692376361.git.christophe.leroy@csgroup.euSigned-off-by: default avatarLee Jones <lee@kernel.org>
parent 0202e408
......@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment