Loading Documentation/devicetree/bindings/sound/qcom-audio-dev.txt +3 −0 Original line number Diff line number Diff line Loading @@ -1396,6 +1396,9 @@ Required properties: clock rate as zero then afe is not configured for clock. - qcom,msm-cpudai-tdm-sec-port-start: For chipsets with the limitation where we need to start both RX and TX AFE ports, this flag is used to start TX/RX port for RX/TX streams. [Second Level Nodes] Loading sound/soc/msm/qdsp6v2/msm-dai-q6-v2.c +15 −7 Original line number Diff line number Diff line Loading @@ -200,12 +200,14 @@ struct msm_dai_q6_tdm_dai_data { u32 bitwidth; u32 num_group_ports; bool afe_ebit_unsupported; bool sec_port_enable; struct afe_clk_set clk_set; /* hold LPASS clock config. */ union afe_port_group_config group_cfg; /* hold tdm group config */ struct afe_tdm_port_config port_cfg; /* hold tdm config */ }; static bool afe_ebit_unsupported; static bool tdm_sec_port_enable; /* MI2S format field for AFE_PORT_CMD_I2S_CONFIG command * 0: linear PCM Loading Loading @@ -4170,6 +4172,11 @@ static int msm_dai_tdm_q6_probe(struct platform_device *pdev) dev_dbg(&pdev->dev, "afe_ebit_unsupported %d\n", afe_ebit_unsupported); tdm_sec_port_enable = of_property_read_bool(pdev->dev.of_node, "qcom,msm-cpudai-tdm-sec-port-enable"); dev_dbg(&pdev->dev, "tdm_sec_port_enable %d\n", tdm_sec_port_enable); /* other initializations within device group */ atomic_set(&tdm_group_ref[group_idx], 0); Loading Loading @@ -5648,7 +5655,7 @@ static int msm_dai_q6_tdm_prepare(struct snd_pcm_substream *substream, */ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { prim_port_id = dai->id; if (dai_data->afe_ebit_unsupported) { if (dai_data->sec_port_enable) { sec_port_id = AFE_PORT_ID_PRIMARY_TDM_TX; sec_group_id = AFE_GROUP_DEVICE_ID_PRIMARY_TDM_TX; Loading Loading @@ -5678,7 +5685,7 @@ static int msm_dai_q6_tdm_prepare(struct snd_pcm_substream *substream, } } else { prim_port_id = dai->id; if (dai_data->afe_ebit_unsupported) { if (dai_data->sec_port_enable) { sec_port_id = AFE_PORT_ID_PRIMARY_TDM_RX; sec_group_id = AFE_GROUP_DEVICE_ID_PRIMARY_TDM_RX; Loading Loading @@ -5737,7 +5744,6 @@ static int msm_dai_q6_tdm_prepare(struct snd_pcm_substream *substream, dai_data->port_cfg.tdm.num_channels = 1; dai_data->port_cfg.tdm.slot_mask = 1; dai_data->port_cfg.tdm.nslots_per_frame = 4; dev_dbg(dai->dev, "\n%s:open sec port id %d TDM rate: %d\n" "dai_data->port_cfg.tdm.slot_mask %x\n" Loading @@ -5749,7 +5755,8 @@ static int msm_dai_q6_tdm_prepare(struct snd_pcm_substream *substream, if (sec_port_id != 0) { rc = afe_tdm_port_start(sec_port_id, &dai_data->port_cfg, dai_data->rate, 4); dai_data->rate, dai_data->num_group_ports); if (IS_ERR_VALUE(rc)) { if (atomic_read(group_ref) == 0) { afe_port_group_enable(group_id, Loading Loading @@ -5805,7 +5812,7 @@ static void msm_dai_q6_tdm_shutdown(struct snd_pcm_substream *substream, if (test_bit(STATUS_PORT_STARTED, dai_data->status_mask)) { if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { prim_port_id = dai->id; if (dai_data->afe_ebit_unsupported) { if (dai_data->sec_port_enable) { sec_port_id = AFE_PORT_ID_PRIMARY_TDM_TX; sec_group_id = AFE_GROUP_DEVICE_ID_PRIMARY_TDM_TX; Loading @@ -5821,7 +5828,7 @@ static void msm_dai_q6_tdm_shutdown(struct snd_pcm_substream *substream, } } else { prim_port_id = dai->id; if (dai_data->afe_ebit_unsupported) { if (dai_data->sec_port_enable) { sec_port_id = AFE_PORT_ID_PRIMARY_TDM_RX; sec_group_id = AFE_GROUP_DEVICE_ID_PRIMARY_TDM_RX; Loading Loading @@ -5871,7 +5878,7 @@ static void msm_dai_q6_tdm_shutdown(struct snd_pcm_substream *substream, __func__, dai->id); } } if (dai_data->afe_ebit_unsupported) { if (dai_data->sec_port_enable) { if (atomic_read(sec_group_ref) == 0) { rc = afe_port_group_enable(sec_group_id, NULL, false); Loading Loading @@ -7251,6 +7258,7 @@ static int msm_dai_q6_tdm_dev_probe(struct platform_device *pdev) tdm_dev_id); dai_data->afe_ebit_unsupported = afe_ebit_unsupported; dai_data->sec_port_enable = tdm_sec_port_enable; if (tdm_dev_id == AFE_PORT_ID_PRIMARY_TDM_TX || tdm_dev_id == AFE_PORT_ID_PRIMARY_TDM_TX_1 || Loading Loading
Documentation/devicetree/bindings/sound/qcom-audio-dev.txt +3 −0 Original line number Diff line number Diff line Loading @@ -1396,6 +1396,9 @@ Required properties: clock rate as zero then afe is not configured for clock. - qcom,msm-cpudai-tdm-sec-port-start: For chipsets with the limitation where we need to start both RX and TX AFE ports, this flag is used to start TX/RX port for RX/TX streams. [Second Level Nodes] Loading
sound/soc/msm/qdsp6v2/msm-dai-q6-v2.c +15 −7 Original line number Diff line number Diff line Loading @@ -200,12 +200,14 @@ struct msm_dai_q6_tdm_dai_data { u32 bitwidth; u32 num_group_ports; bool afe_ebit_unsupported; bool sec_port_enable; struct afe_clk_set clk_set; /* hold LPASS clock config. */ union afe_port_group_config group_cfg; /* hold tdm group config */ struct afe_tdm_port_config port_cfg; /* hold tdm config */ }; static bool afe_ebit_unsupported; static bool tdm_sec_port_enable; /* MI2S format field for AFE_PORT_CMD_I2S_CONFIG command * 0: linear PCM Loading Loading @@ -4170,6 +4172,11 @@ static int msm_dai_tdm_q6_probe(struct platform_device *pdev) dev_dbg(&pdev->dev, "afe_ebit_unsupported %d\n", afe_ebit_unsupported); tdm_sec_port_enable = of_property_read_bool(pdev->dev.of_node, "qcom,msm-cpudai-tdm-sec-port-enable"); dev_dbg(&pdev->dev, "tdm_sec_port_enable %d\n", tdm_sec_port_enable); /* other initializations within device group */ atomic_set(&tdm_group_ref[group_idx], 0); Loading Loading @@ -5648,7 +5655,7 @@ static int msm_dai_q6_tdm_prepare(struct snd_pcm_substream *substream, */ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { prim_port_id = dai->id; if (dai_data->afe_ebit_unsupported) { if (dai_data->sec_port_enable) { sec_port_id = AFE_PORT_ID_PRIMARY_TDM_TX; sec_group_id = AFE_GROUP_DEVICE_ID_PRIMARY_TDM_TX; Loading Loading @@ -5678,7 +5685,7 @@ static int msm_dai_q6_tdm_prepare(struct snd_pcm_substream *substream, } } else { prim_port_id = dai->id; if (dai_data->afe_ebit_unsupported) { if (dai_data->sec_port_enable) { sec_port_id = AFE_PORT_ID_PRIMARY_TDM_RX; sec_group_id = AFE_GROUP_DEVICE_ID_PRIMARY_TDM_RX; Loading Loading @@ -5737,7 +5744,6 @@ static int msm_dai_q6_tdm_prepare(struct snd_pcm_substream *substream, dai_data->port_cfg.tdm.num_channels = 1; dai_data->port_cfg.tdm.slot_mask = 1; dai_data->port_cfg.tdm.nslots_per_frame = 4; dev_dbg(dai->dev, "\n%s:open sec port id %d TDM rate: %d\n" "dai_data->port_cfg.tdm.slot_mask %x\n" Loading @@ -5749,7 +5755,8 @@ static int msm_dai_q6_tdm_prepare(struct snd_pcm_substream *substream, if (sec_port_id != 0) { rc = afe_tdm_port_start(sec_port_id, &dai_data->port_cfg, dai_data->rate, 4); dai_data->rate, dai_data->num_group_ports); if (IS_ERR_VALUE(rc)) { if (atomic_read(group_ref) == 0) { afe_port_group_enable(group_id, Loading Loading @@ -5805,7 +5812,7 @@ static void msm_dai_q6_tdm_shutdown(struct snd_pcm_substream *substream, if (test_bit(STATUS_PORT_STARTED, dai_data->status_mask)) { if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { prim_port_id = dai->id; if (dai_data->afe_ebit_unsupported) { if (dai_data->sec_port_enable) { sec_port_id = AFE_PORT_ID_PRIMARY_TDM_TX; sec_group_id = AFE_GROUP_DEVICE_ID_PRIMARY_TDM_TX; Loading @@ -5821,7 +5828,7 @@ static void msm_dai_q6_tdm_shutdown(struct snd_pcm_substream *substream, } } else { prim_port_id = dai->id; if (dai_data->afe_ebit_unsupported) { if (dai_data->sec_port_enable) { sec_port_id = AFE_PORT_ID_PRIMARY_TDM_RX; sec_group_id = AFE_GROUP_DEVICE_ID_PRIMARY_TDM_RX; Loading Loading @@ -5871,7 +5878,7 @@ static void msm_dai_q6_tdm_shutdown(struct snd_pcm_substream *substream, __func__, dai->id); } } if (dai_data->afe_ebit_unsupported) { if (dai_data->sec_port_enable) { if (atomic_read(sec_group_ref) == 0) { rc = afe_port_group_enable(sec_group_id, NULL, false); Loading Loading @@ -7251,6 +7258,7 @@ static int msm_dai_q6_tdm_dev_probe(struct platform_device *pdev) tdm_dev_id); dai_data->afe_ebit_unsupported = afe_ebit_unsupported; dai_data->sec_port_enable = tdm_sec_port_enable; if (tdm_dev_id == AFE_PORT_ID_PRIMARY_TDM_TX || tdm_dev_id == AFE_PORT_ID_PRIMARY_TDM_TX_1 || Loading