Skip to content

Commit e0af98a

Browse files
rralfbroonie
authored andcommitted
spi: mark device nodes only in case of successful instantiation
Instantiated SPI device nodes are marked with OF_POPULATE. This was introduced in bd6c164. On unloading, loaded device nodes will of course be unmarked. The problem are nodes that fail during initialisation: If a node fails, it won't be unloaded and hence not be unmarked. If a SPI driver module is unloaded and reloaded, it will skip nodes that failed before. Skip device nodes that are already populated and mark them only in case of success. Note that the same issue exists for I2C. Fixes: bd6c164 ("spi: Mark instantiated device nodes with OF_POPULATE") Signed-off-by: Ralf Ramsauer <ralf@ramses-pyramidenbau.de> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Acked-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com> Signed-off-by: Mark Brown <broonie@kernel.org> Cc: stable@vger.kernel.org
1 parent 1001354 commit e0af98a

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

drivers/spi/spi.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1618,9 +1618,11 @@ static void of_register_spi_devices(struct spi_master *master)
16181618
if (of_node_test_and_set_flag(nc, OF_POPULATED))
16191619
continue;
16201620
spi = of_register_spi_device(master, nc);
1621-
if (IS_ERR(spi))
1621+
if (IS_ERR(spi)) {
16221622
dev_warn(&master->dev, "Failed to create SPI device for %s\n",
16231623
nc->full_name);
1624+
of_node_clear_flag(nc, OF_POPULATED);
1625+
}
16241626
}
16251627
}
16261628
#else
@@ -3131,6 +3133,7 @@ static int of_spi_notify(struct notifier_block *nb, unsigned long action,
31313133
if (IS_ERR(spi)) {
31323134
pr_err("%s: failed to create for '%s'\n",
31333135
__func__, rd->dn->full_name);
3136+
of_node_clear_flag(rd->dn, OF_POPULATED);
31343137
return notifier_from_errno(PTR_ERR(spi));
31353138
}
31363139
break;

0 commit comments

Comments
 (0)