Skip to content

Commit 00f5719

Browse files
plbossartvinodkoul
authored andcommitted
soundwire: stream: special-case the bus compute_params() routine
For BPT support, we want to allocate the entire audio payload and bypass the allocation based on PCM/PDM parameters. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Tested-by: shumingf@realtek.com Link: https://lore.kernel.org/r/20250227140615.8147-6-yung-chuan.liao@linux.intel.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
1 parent dc90bbe commit 00f5719

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

drivers/soundwire/generic_bandwidth_allocation.c

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,49 @@ void sdw_compute_slave_ports(struct sdw_master_runtime *m_rt,
8686
}
8787
EXPORT_SYMBOL(sdw_compute_slave_ports);
8888

89+
static void sdw_compute_dp0_slave_ports(struct sdw_master_runtime *m_rt)
90+
{
91+
struct sdw_bus *bus = m_rt->bus;
92+
struct sdw_slave_runtime *s_rt;
93+
struct sdw_port_runtime *p_rt;
94+
95+
list_for_each_entry(s_rt, &m_rt->slave_rt_list, m_rt_node) {
96+
list_for_each_entry(p_rt, &s_rt->port_list, port_node) {
97+
sdw_fill_xport_params(&p_rt->transport_params, p_rt->num, false,
98+
SDW_BLK_GRP_CNT_1, bus->params.col, 0, 0, 1,
99+
bus->params.col - 1, SDW_BLK_PKG_PER_PORT, 0x0);
100+
101+
sdw_fill_port_params(&p_rt->port_params, p_rt->num, bus->params.col - 1,
102+
SDW_PORT_FLOW_MODE_ISOCH, SDW_PORT_DATA_MODE_NORMAL);
103+
}
104+
}
105+
}
106+
107+
static void sdw_compute_dp0_master_ports(struct sdw_master_runtime *m_rt)
108+
{
109+
struct sdw_port_runtime *p_rt;
110+
struct sdw_bus *bus = m_rt->bus;
111+
112+
list_for_each_entry(p_rt, &m_rt->port_list, port_node) {
113+
sdw_fill_xport_params(&p_rt->transport_params, p_rt->num, false,
114+
SDW_BLK_GRP_CNT_1, bus->params.col, 0, 0, 1,
115+
bus->params.col - 1, SDW_BLK_PKG_PER_PORT, 0x0);
116+
117+
sdw_fill_port_params(&p_rt->port_params, p_rt->num, bus->params.col - 1,
118+
SDW_PORT_FLOW_MODE_ISOCH, SDW_PORT_DATA_MODE_NORMAL);
119+
}
120+
}
121+
122+
static void sdw_compute_dp0_port_params(struct sdw_bus *bus)
123+
{
124+
struct sdw_master_runtime *m_rt;
125+
126+
list_for_each_entry(m_rt, &bus->m_rt_list, bus_node) {
127+
sdw_compute_dp0_master_ports(m_rt);
128+
sdw_compute_dp0_slave_ports(m_rt);
129+
}
130+
}
131+
89132
static void sdw_compute_master_ports(struct sdw_master_runtime *m_rt,
90133
struct sdw_group_params *params,
91134
int *port_bo, int hstop)
@@ -618,6 +661,11 @@ int sdw_compute_params(struct sdw_bus *bus, struct sdw_stream_runtime *stream)
618661
if (ret < 0)
619662
return ret;
620663

664+
if (stream->type == SDW_STREAM_BPT) {
665+
sdw_compute_dp0_port_params(bus);
666+
return 0;
667+
}
668+
621669
/* Compute transport and port params */
622670
ret = sdw_compute_port_params(bus, stream);
623671
if (ret < 0) {

0 commit comments

Comments
 (0)