diff mbox series

[v1,2/4] soundwire: stream: Add set_master_channel_map() to set static channel mapping

Message ID 20240909105547.2691015-3-quic_mohs@quicinc.com
State New
Headers show
Series Add static channel mapping between soundwire master and slave | expand

Commit Message

Mohammad Rafi Shaik Sept. 9, 2024, 10:55 a.m. UTC
Add set_master_channel_map() to set the static channel map between
master and slave. Patch change will resolve the channel mask mismatch
between the master and slave.

The sdw_set_channel_map_stream() will triggered by a slave with active
port number and channel mask.

Signed-off-by: Mohammad Rafi Shaik <quic_mohs@quicinc.com>
---
 drivers/soundwire/stream.c    | 16 ++++++++++++++++
 include/linux/soundwire/sdw.h |  5 +++++
 2 files changed, 21 insertions(+)
diff mbox series

Patch

diff --git a/drivers/soundwire/stream.c b/drivers/soundwire/stream.c
index f275143d7b18..8cfea2ccb5bd 100644
--- a/drivers/soundwire/stream.c
+++ b/drivers/soundwire/stream.c
@@ -1972,6 +1972,22 @@  int sdw_stream_remove_master(struct sdw_bus *bus,
 }
 EXPORT_SYMBOL(sdw_stream_remove_master);
 
+int sdw_set_channel_map_stream(struct sdw_stream_runtime *stream,
+			       int *ch_mask, unsigned int active_port_num)
+{
+	struct sdw_master_runtime *m_rt;
+	struct sdw_bus *bus;
+
+	list_for_each_entry(m_rt, &stream->master_list, stream_node) {
+		bus = m_rt->bus;
+		if (bus->ops->set_master_channel_map)
+			bus->ops->set_master_channel_map(bus, ch_mask, active_port_num);
+	}
+
+	return 0;
+}
+EXPORT_SYMBOL(sdw_set_channel_map_stream);
+
 /**
  * sdw_stream_add_slave() - Allocate and add master/slave runtime to a stream
  *
diff --git a/include/linux/soundwire/sdw.h b/include/linux/soundwire/sdw.h
index 5e0dd47a0412..264450763bab 100644
--- a/include/linux/soundwire/sdw.h
+++ b/include/linux/soundwire/sdw.h
@@ -857,6 +857,8 @@  struct sdw_master_ops {
 			(struct sdw_bus *bus);
 	int (*set_bus_conf)(struct sdw_bus *bus,
 			struct sdw_bus_params *params);
+	int (*set_master_channel_map)(struct sdw_bus *bus, int *ch_mask,
+				      unsigned int port_num);
 	int (*pre_bank_switch)(struct sdw_bus *bus);
 	int (*post_bank_switch)(struct sdw_bus *bus);
 	u32 (*read_ping_status)(struct sdw_bus *bus);
@@ -1049,6 +1051,9 @@  int sdw_bus_exit_clk_stop(struct sdw_bus *bus);
 int sdw_compare_devid(struct sdw_slave *slave, struct sdw_slave_id id);
 void sdw_extract_slave_id(struct sdw_bus *bus, u64 addr, struct sdw_slave_id *id);
 
+int sdw_set_channel_map_stream(struct sdw_stream_runtime *stream,
+			       int *ch_mask, unsigned int active_port_num);
+
 #if IS_ENABLED(CONFIG_SOUNDWIRE)
 
 int sdw_stream_add_slave(struct sdw_slave *slave,