From: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> We currently add the slave device to a linked list before device_register(), and then remove it if device_register() fails. It's not clear why this sequence was necessary, this patch moves the linked list management to after the device_register(). Suggested-by: Keyon Jie <yang.jie@xxxxxxxxxxxxxxx> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@xxxxxxxxxxxxxxx> Signed-off-by: Bard Liao <yung-chuan.liao@xxxxxxxxxxxxxxx> --- drivers/soundwire/slave.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/soundwire/slave.c b/drivers/soundwire/slave.c index 0eed38a79c6d..ff01b96c6e56 100644 --- a/drivers/soundwire/slave.c +++ b/drivers/soundwire/slave.c @@ -65,9 +65,6 @@ int sdw_slave_add(struct sdw_bus *bus, for (i = 0; i < SDW_MAX_PORTS; i++) init_completion(&slave->port_ready[i]); - mutex_lock(&bus->bus_lock); - list_add_tail(&slave->node, &bus->slaves); - mutex_unlock(&bus->bus_lock); ret = device_register(&slave->dev); if (ret) { @@ -77,13 +74,15 @@ int sdw_slave_add(struct sdw_bus *bus, * On err, don't free but drop ref as this will be freed * when release method is invoked. */ - mutex_lock(&bus->bus_lock); - list_del(&slave->node); - mutex_unlock(&bus->bus_lock); put_device(&slave->dev); return ret; } + + mutex_lock(&bus->bus_lock); + list_add_tail(&slave->node, &bus->slaves); + mutex_unlock(&bus->bus_lock); + sdw_slave_debugfs_init(slave); return ret; -- 2.17.1