From 62ae991bcd9dd2345b67b6b30159667d40937237 Mon Sep 17 00:00:00 2001 From: Bard Liao Date: Fri, 13 Dec 2019 08:50:40 +0800 Subject: [PATCH 1/3] Soundwire: bus: return in the while loop rather than break and return So we don't need extra if condition outside the while loop. Signed-off-by: Bard Liao --- drivers/soundwire/bus.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/soundwire/bus.c b/drivers/soundwire/bus.c index 395c52128522ed..415832ab854c3d 100644 --- a/drivers/soundwire/bus.c +++ b/drivers/soundwire/bus.c @@ -813,19 +813,16 @@ static int sdw_bus_wait_for_clk_prep_deprep(struct sdw_bus *bus, u16 dev_num) do { val = sdw_bread_no_pm(bus, dev_num, SDW_SCP_STAT) & SDW_SCP_STAT_CLK_STP_NF; - if (!val) - break; + if (!val) { + dev_info(bus->dev, "clock stop prep/de-prep done slave:%d", + dev_num); + return 0; + } usleep_range(1000, 1500); retry--; } while (retry); - if (retry && !val) { - dev_info(bus->dev, "clock stop prep/de-prep done slave:%d", - dev_num); - return 0; - } - dev_err(bus->dev, "clock stop prep/de-prep failed slave:%d", dev_num); From c43ede230efba27fc39fb24ba1258372e68dca74 Mon Sep 17 00:00:00 2001 From: Bard Liao Date: Fri, 13 Dec 2019 08:58:24 +0800 Subject: [PATCH 2/3] Soundwire: set is_slave only if the slave is attached We don't need to do anything for the slave if it is unattached. Signed-off-by: Bard Liao --- drivers/soundwire/bus.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/soundwire/bus.c b/drivers/soundwire/bus.c index 415832ab854c3d..cbc83b36e9bc50 100644 --- a/drivers/soundwire/bus.c +++ b/drivers/soundwire/bus.c @@ -853,13 +853,13 @@ int sdw_bus_prep_clk_stop(struct sdw_bus *bus) if (!slave->dev_num) continue; - /* Identify if Slave(s) are available on Bus */ - is_slave = true; - if (slave->status != SDW_SLAVE_ATTACHED && slave->status != SDW_SLAVE_ALERT) continue; + /* Identify if Slave(s) are available on Bus */ + is_slave = true; + slave_mode = sdw_get_clk_stop_mode(slave); slave->curr_clk_stop_mode = slave_mode; @@ -975,13 +975,13 @@ int sdw_bus_exit_clk_stop(struct sdw_bus *bus) if (!slave->dev_num) continue; - /* Identify if Slave(s) are available on Bus */ - is_slave = true; - if (slave->status != SDW_SLAVE_ATTACHED && slave->status != SDW_SLAVE_ALERT) continue; + /* Identify if Slave(s) are available on Bus */ + is_slave = true; + mode = slave->curr_clk_stop_mode; if (mode == SDW_CLK_STOP_MODE1) { From c7ed2c89dc8f87a772568cb67052f5c9371eb3cc Mon Sep 17 00:00:00 2001 From: Bard Liao Date: Fri, 13 Dec 2019 09:26:21 +0800 Subject: [PATCH 3/3] soundwire: test is_slave before list_for_each_entry(slave, &bus->slaves, node) We don't need to test each slave's status if we already know there is no slave attached. Signed-off-by: Bard Liao --- drivers/soundwire/bus.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/soundwire/bus.c b/drivers/soundwire/bus.c index cbc83b36e9bc50..b58df4de3f817e 100644 --- a/drivers/soundwire/bus.c +++ b/drivers/soundwire/bus.c @@ -890,6 +890,10 @@ int sdw_bus_prep_clk_stop(struct sdw_bus *bus) return ret; } + /* Don't need to inform slaves if there is no slave attached */ + if (!is_slave) + return ret; + /* Inform slaves that prep is done */ list_for_each_entry(slave, &bus->slaves, node) { if (!slave->dev_num) @@ -1006,6 +1010,13 @@ int sdw_bus_exit_clk_stop(struct sdw_bus *bus) if (is_slave && !simple_clk_stop) sdw_bus_wait_for_clk_prep_deprep(bus, SDW_BROADCAST_DEV_NUM); + /* + * Don't need to call slave callback function if there is no slave + * attached + */ + if (!is_slave) + return 0; + list_for_each_entry(slave, &bus->slaves, node) { if (!slave->dev_num) continue;