summaryrefslogtreecommitdiff
path: root/drivers/soundwire
diff options
context:
space:
mode:
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>2022-01-26 04:17:04 +0300
committerVinod Koul <vkoul@kernel.org>2022-02-11 09:45:36 +0300
commitc7aa9d770e23ab295ce45729a6134833426e1473 (patch)
tree5aef459810649b02011b3359921b7467b953497c /drivers/soundwire
parent4bbd6d55a6789e99e74df96cb87a4ed29bbf7f7f (diff)
downloadlinux-c7aa9d770e23ab295ce45729a6134833426e1473.tar.xz
soundwire: stream: group sdw_port and sdw_master/slave_port functions
re-group all the helpers in one location with a code move. For consistency the 'slave' helpers are placed before the 'master' helpers. Also remove unused arguments and rename the 'release' function to 'free' for consistency. No functional change in this patch. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Rander Wang <rander.wang@intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://lore.kernel.org/r/20220126011715.28204-9-yung-chuan.liao@linux.intel.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
Diffstat (limited to 'drivers/soundwire')
-rw-r--r--drivers/soundwire/stream.c242
1 files changed, 120 insertions, 122 deletions
diff --git a/drivers/soundwire/stream.c b/drivers/soundwire/stream.c
index c326298a0fe2..5e2d29448aaf 100644
--- a/drivers/soundwire/stream.c
+++ b/drivers/soundwire/stream.c
@@ -898,6 +898,123 @@ static void sdw_port_free(struct sdw_port_runtime *p_rt)
kfree(p_rt);
}
+static void sdw_slave_port_free(struct sdw_slave *slave,
+ struct sdw_stream_runtime *stream)
+{
+ struct sdw_port_runtime *p_rt, *_p_rt;
+ struct sdw_master_runtime *m_rt;
+ struct sdw_slave_runtime *s_rt;
+
+ list_for_each_entry(m_rt, &stream->master_list, stream_node) {
+ list_for_each_entry(s_rt, &m_rt->slave_rt_list, m_rt_node) {
+ if (s_rt->slave != slave)
+ continue;
+
+ list_for_each_entry_safe(p_rt, _p_rt,
+ &s_rt->port_list, port_node) {
+ sdw_port_free(p_rt);
+ }
+ }
+ }
+}
+
+static int sdw_slave_port_alloc(struct sdw_slave *slave,
+ struct sdw_slave_runtime *s_rt,
+ unsigned int num_config)
+{
+ struct sdw_port_runtime *p_rt;
+ int i;
+
+ /* Iterate for number of ports to perform initialization */
+ for (i = 0; i < num_config; i++) {
+ p_rt = sdw_port_alloc(&s_rt->port_list);
+ if (!p_rt)
+ return -ENOMEM;
+ }
+
+ return 0;
+}
+
+static int sdw_slave_port_is_valid_range(struct device *dev, int num)
+{
+ if (!SDW_VALID_PORT_RANGE(num)) {
+ dev_err(dev, "SoundWire: Invalid port number :%d\n", num);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int sdw_slave_port_config(struct sdw_slave *slave,
+ struct sdw_slave_runtime *s_rt,
+ struct sdw_port_config *port_config)
+{
+ struct sdw_port_runtime *p_rt;
+ int ret;
+ int i;
+
+ i = 0;
+ list_for_each_entry(p_rt, &s_rt->port_list, port_node) {
+ /*
+ * TODO: Check valid port range as defined by DisCo/
+ * slave
+ */
+ ret = sdw_slave_port_is_valid_range(&slave->dev, port_config[i].num);
+ if (ret < 0)
+ return ret;
+
+ ret = sdw_port_config(p_rt, port_config, i);
+ if (ret < 0)
+ return ret;
+ i++;
+ }
+
+ return 0;
+}
+
+static void sdw_master_port_free(struct sdw_master_runtime *m_rt)
+{
+ struct sdw_port_runtime *p_rt, *_p_rt;
+
+ list_for_each_entry_safe(p_rt, _p_rt, &m_rt->port_list, port_node) {
+ sdw_port_free(p_rt);
+ }
+}
+
+static int sdw_master_port_alloc(struct sdw_master_runtime *m_rt,
+ unsigned int num_ports)
+{
+ struct sdw_port_runtime *p_rt;
+ int i;
+
+ /* Iterate for number of ports to perform initialization */
+ for (i = 0; i < num_ports; i++) {
+ p_rt = sdw_port_alloc(&m_rt->port_list);
+ if (!p_rt)
+ return -ENOMEM;
+ }
+
+ return 0;
+}
+
+static int sdw_master_port_config(struct sdw_master_runtime *m_rt,
+ struct sdw_port_config *port_config)
+{
+ struct sdw_port_runtime *p_rt;
+ int ret;
+ int i;
+
+ i = 0;
+ list_for_each_entry(p_rt, &m_rt->port_list, port_node) {
+ ret = sdw_port_config(p_rt, port_config, i);
+ if (ret < 0)
+ return ret;
+ i++;
+ }
+
+ return 0;
+}
+
/**
* sdw_release_stream() - Free the assigned stream runtime
*
@@ -1022,37 +1139,6 @@ static struct sdw_slave_runtime
return s_rt;
}
-static void sdw_master_port_release(struct sdw_bus *bus,
- struct sdw_master_runtime *m_rt)
-{
- struct sdw_port_runtime *p_rt, *_p_rt;
-
- list_for_each_entry_safe(p_rt, _p_rt, &m_rt->port_list, port_node) {
- sdw_port_free(p_rt);
- }
-}
-
-static void sdw_slave_port_release(struct sdw_bus *bus,
- struct sdw_slave *slave,
- struct sdw_stream_runtime *stream)
-{
- struct sdw_port_runtime *p_rt, *_p_rt;
- struct sdw_master_runtime *m_rt;
- struct sdw_slave_runtime *s_rt;
-
- list_for_each_entry(m_rt, &stream->master_list, stream_node) {
- list_for_each_entry(s_rt, &m_rt->slave_rt_list, m_rt_node) {
- if (s_rt->slave != slave)
- continue;
-
- list_for_each_entry_safe(p_rt, _p_rt,
- &s_rt->port_list, port_node) {
- sdw_port_free(p_rt);
- }
- }
- }
-}
-
/**
* sdw_release_slave_stream() - Free Slave(s) runtime handle
*
@@ -1097,7 +1183,7 @@ static void sdw_release_master_stream(struct sdw_master_runtime *m_rt,
struct sdw_slave_runtime *s_rt, *_s_rt;
list_for_each_entry_safe(s_rt, _s_rt, &m_rt->slave_rt_list, m_rt_node) {
- sdw_slave_port_release(s_rt->slave->bus, s_rt->slave, stream);
+ sdw_slave_port_free(s_rt->slave, stream);
sdw_release_slave_stream(s_rt->slave, stream);
}
@@ -1126,7 +1212,7 @@ int sdw_stream_remove_master(struct sdw_bus *bus,
if (m_rt->bus != bus)
continue;
- sdw_master_port_release(bus, m_rt);
+ sdw_master_port_free(m_rt);
sdw_release_master_stream(m_rt, stream);
stream->m_rt_count--;
}
@@ -1153,7 +1239,7 @@ int sdw_stream_remove_slave(struct sdw_slave *slave,
{
mutex_lock(&slave->bus->bus_lock);
- sdw_slave_port_release(slave->bus, slave, stream);
+ sdw_slave_port_free(slave, stream);
sdw_release_slave_stream(slave, stream);
mutex_unlock(&slave->bus->bus_lock);
@@ -1208,94 +1294,6 @@ static int sdw_config_stream(struct device *dev,
return 0;
}
-static int sdw_master_port_alloc(struct sdw_master_runtime *m_rt,
- unsigned int num_ports)
-{
- struct sdw_port_runtime *p_rt;
- int i;
-
- /* Iterate for number of ports to perform initialization */
- for (i = 0; i < num_ports; i++) {
- p_rt = sdw_port_alloc(&m_rt->port_list);
- if (!p_rt)
- return -ENOMEM;
- }
-
- return 0;
-}
-
-static int sdw_master_port_config(struct sdw_master_runtime *m_rt,
- struct sdw_port_config *port_config)
-{
- struct sdw_port_runtime *p_rt;
- int ret;
- int i;
-
- i = 0;
- list_for_each_entry(p_rt, &m_rt->port_list, port_node) {
- ret = sdw_port_config(p_rt, port_config, i);
- if (ret < 0)
- return ret;
- i++;
- }
-
- return 0;
-}
-
-static int sdw_slave_port_alloc(struct sdw_slave *slave,
- struct sdw_slave_runtime *s_rt,
- unsigned int num_config)
-{
- struct sdw_port_runtime *p_rt;
- int i;
-
- /* Iterate for number of ports to perform initialization */
- for (i = 0; i < num_config; i++) {
- p_rt = sdw_port_alloc(&s_rt->port_list);
- if (!p_rt)
- return -ENOMEM;
- }
-
- return 0;
-}
-
-static int sdw_slave_port_is_valid_range(struct device *dev, int num)
-{
- if (!SDW_VALID_PORT_RANGE(num)) {
- dev_err(dev, "SoundWire: Invalid port number :%d\n", num);
- return -EINVAL;
- }
-
- return 0;
-}
-
-static int sdw_slave_port_config(struct sdw_slave *slave,
- struct sdw_slave_runtime *s_rt,
- struct sdw_port_config *port_config)
-{
- struct sdw_port_runtime *p_rt;
- int ret;
- int i;
-
- i = 0;
- list_for_each_entry(p_rt, &s_rt->port_list, port_node) {
- /*
- * TODO: Check valid port range as defined by DisCo/
- * slave
- */
- ret = sdw_slave_port_is_valid_range(&slave->dev, port_config[i].num);
- if (ret < 0)
- return ret;
-
- ret = sdw_port_config(p_rt, port_config, i);
- if (ret < 0)
- return ret;
- i++;
- }
-
- return 0;
-}
-
/**
* sdw_stream_add_master() - Allocate and add master runtime to a stream
*