From: Pierre-Louis Bossart <pierre-louis.boss...@linux.intel.com>

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....@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.boss...@linux.intel.com>
Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovet...@linux.intel.com>
Signed-off-by: Bard Liao <yung-chuan.l...@linux.intel.com>
---
 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 112b21967c7a..0c92db2e1ddc 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

Reply via email to