]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
soundwire: stream: set DEPREPARED state earlier
authorPierre-Louis Bossart <pierre-louis.bossart@linux.dev>
Wed, 18 Dec 2024 08:01:45 +0000 (16:01 +0800)
committerVinod Koul <vkoul@kernel.org>
Mon, 23 Dec 2024 06:30:33 +0000 (12:00 +0530)
The existing logic is problematic in that we deprepare all the ports,
but still take into account the stream for bit allocation by just
walking through the bus->m_rt list.

This patch sets the state earlier, so that such DEPREPARED streams can
be skipped in the bandwidth allocation (to be implemented in a
follow-up patch).

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Link: https://lore.kernel.org/r/20241218080155.102405-5-yung-chuan.liao@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/soundwire/stream.c

index 7aa4900dcf31723f1b54a54e0d641bb735828eb2..795017c8081a94b78bcad65a7f24514cf3aca1c8 100644 (file)
@@ -1643,8 +1643,15 @@ static int _sdw_deprepare_stream(struct sdw_stream_runtime *stream)
 {
        struct sdw_master_runtime *m_rt;
        struct sdw_bus *bus;
+       int state = stream->state;
        int ret = 0;
 
+       /*
+        * first mark the state as DEPREPARED so that it is not taken into account
+        * for bit allocation
+        */
+       stream->state = SDW_STREAM_DEPREPARED;
+
        list_for_each_entry(m_rt, &stream->master_list, stream_node) {
                bus = m_rt->bus;
                /* De-prepare port(s) */
@@ -1652,6 +1659,7 @@ static int _sdw_deprepare_stream(struct sdw_stream_runtime *stream)
                if (ret < 0) {
                        dev_err(bus->dev,
                                "De-prepare port(s) failed: %d\n", ret);
+                       stream->state = state;
                        return ret;
                }
 
@@ -1665,6 +1673,7 @@ static int _sdw_deprepare_stream(struct sdw_stream_runtime *stream)
                        if (ret < 0) {
                                dev_err(bus->dev, "Compute params failed: %d\n",
                                        ret);
+                               stream->state = state;
                                return ret;
                        }
                }
@@ -1673,11 +1682,11 @@ static int _sdw_deprepare_stream(struct sdw_stream_runtime *stream)
                ret = sdw_program_params(bus, false);
                if (ret < 0) {
                        dev_err(bus->dev, "%s: Program params failed: %d\n", __func__, ret);
+                       stream->state = state;
                        return ret;
                }
        }
 
-       stream->state = SDW_STREAM_DEPREPARED;
        return do_bank_switch(stream);
 }