in qcom.c [810:867]
static int qcom_swrm_compute_params(struct sdw_bus *bus)
{
struct qcom_swrm_ctrl *ctrl = to_qcom_sdw(bus);
struct sdw_master_runtime *m_rt;
struct sdw_slave_runtime *s_rt;
struct sdw_port_runtime *p_rt;
struct qcom_swrm_port_config *pcfg;
struct sdw_slave *slave;
unsigned int m_port;
int i = 1;
list_for_each_entry(m_rt, &bus->m_rt_list, bus_node) {
list_for_each_entry(p_rt, &m_rt->port_list, port_node) {
pcfg = &ctrl->pconfig[p_rt->num];
p_rt->transport_params.port_num = p_rt->num;
if (pcfg->word_length != SWR_INVALID_PARAM) {
sdw_fill_port_params(&p_rt->port_params,
p_rt->num, pcfg->word_length + 1,
SDW_PORT_FLOW_MODE_ISOCH,
SDW_PORT_DATA_MODE_NORMAL);
}
}
list_for_each_entry(s_rt, &m_rt->slave_rt_list, m_rt_node) {
slave = s_rt->slave;
list_for_each_entry(p_rt, &s_rt->port_list, port_node) {
m_port = slave->m_port_map[p_rt->num];
/* port config starts at offset 0 so -1 from actual port number */
if (m_port)
pcfg = &ctrl->pconfig[m_port];
else
pcfg = &ctrl->pconfig[i];
p_rt->transport_params.port_num = p_rt->num;
p_rt->transport_params.sample_interval =
pcfg->si + 1;
p_rt->transport_params.offset1 = pcfg->off1;
p_rt->transport_params.offset2 = pcfg->off2;
p_rt->transport_params.blk_pkg_mode = pcfg->bp_mode;
p_rt->transport_params.blk_grp_ctrl = pcfg->blk_group_count;
p_rt->transport_params.hstart = pcfg->hstart;
p_rt->transport_params.hstop = pcfg->hstop;
p_rt->transport_params.lane_ctrl = pcfg->lane_control;
if (pcfg->word_length != SWR_INVALID_PARAM) {
sdw_fill_port_params(&p_rt->port_params,
p_rt->num,
pcfg->word_length + 1,
SDW_PORT_FLOW_MODE_ISOCH,
SDW_PORT_DATA_MODE_NORMAL);
}
i++;
}
}
}
return 0;
}