From 1b99e47834d061675cd528816404fb3be460205a Mon Sep 17 00:00:00 2001 From: Han Lu Date: Sun, 9 Jun 2019 16:03:21 +0800 Subject: [PATCH] ASoC: sa8155: add quin tdm tx_7 to rx_7 loopback Add Quinary TDM TX 7 to RX 7 AFE loopback routing support for SA8155. Change-Id: I1e1858c9069277101ed6d826d0fca988dc4b276b Signed-off-by: Han Lu --- asoc/sa8155.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 88 insertions(+), 4 deletions(-) diff --git a/asoc/sa8155.c b/asoc/sa8155.c index 26b744b9a8..907df324e8 100644 --- a/asoc/sa8155.c +++ b/asoc/sa8155.c @@ -422,7 +422,7 @@ static unsigned int tdm_rx_slot_offset {0xFFFF}, /* not used */ {0xFFFF}, /* not used */ {0xFFFF}, /* not used */ - {0xFFFF}, /* not used */ + {28, 0xFFFF}, } }; @@ -477,7 +477,7 @@ static unsigned int tdm_tx_slot_offset {0xFFFF}, /* not used */ {0xFFFF}, /* not used */ {0xFFFF}, /* not used */ - {0xFFFF}, /* not used */ + {20, 0xFFFF}, } }; @@ -538,7 +538,7 @@ static unsigned int tdm_rx_slot_offset_custom {0xFFFF}, /* not used */ {0xFFFF}, /* not used */ {0xFFFF}, /* not used */ - {0xFFFF}, /* not used */ + {0, 0xFFFF}, } }; @@ -592,7 +592,7 @@ static unsigned int tdm_tx_slot_offset_custom {0xFFFF}, /* not used */ {0xFFFF}, /* not used */ {0xFFFF}, /* not used */ - {0xFFFF}, /* not used */ + {0, 0xFFFF}, } }; @@ -4329,6 +4329,14 @@ static int msm_tdm_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, rate->min = rate->max = tdm_rx_cfg[TDM_QUIN][TDM_3].sample_rate; break; + case AFE_PORT_ID_QUINARY_TDM_RX_7: + channels->min = channels->max = + tdm_rx_cfg[TDM_QUIN][TDM_7].channels; + param_set_mask(params, SNDRV_PCM_HW_PARAM_FORMAT, + tdm_rx_cfg[TDM_QUIN][TDM_7].bit_format); + rate->min = rate->max = + tdm_rx_cfg[TDM_QUIN][TDM_7].sample_rate; + break; case AFE_PORT_ID_QUINARY_TDM_TX: channels->min = channels->max = tdm_tx_cfg[TDM_QUIN][TDM_0].channels; @@ -4361,6 +4369,14 @@ static int msm_tdm_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, rate->min = rate->max = tdm_tx_cfg[TDM_QUIN][TDM_3].sample_rate; break; + case AFE_PORT_ID_QUINARY_TDM_TX_7: + channels->min = channels->max = + tdm_tx_cfg[TDM_QUIN][TDM_7].channels; + param_set_mask(params, SNDRV_PCM_HW_PARAM_FORMAT, + tdm_tx_cfg[TDM_QUIN][TDM_7].bit_format); + rate->min = rate->max = + tdm_tx_cfg[TDM_QUIN][TDM_7].sample_rate; + break; default: pr_err("%s: dai id 0x%x not supported\n", __func__, cpu_dai->id); @@ -4631,6 +4647,11 @@ static int sa8155_tdm_snd_hw_params(struct snd_pcm_substream *substream, slot_width = tdm_slot[TDM_QUIN].width; slot_offset = tdm_rx_slot_offset[TDM_QUIN][TDM_3]; break; + case AFE_PORT_ID_QUINARY_TDM_RX_7: + slots = tdm_slot[TDM_QUIN].num; + slot_width = tdm_slot[TDM_QUIN].width; + slot_offset = tdm_rx_slot_offset[TDM_QUIN][TDM_7]; + break; case AFE_PORT_ID_QUINARY_TDM_TX: slots = tdm_slot[TDM_QUIN].num; slot_width = tdm_slot[TDM_QUIN].width; @@ -4651,6 +4672,11 @@ static int sa8155_tdm_snd_hw_params(struct snd_pcm_substream *substream, slot_width = tdm_slot[TDM_QUIN].width; slot_offset = tdm_tx_slot_offset[TDM_QUIN][TDM_3]; break; + case AFE_PORT_ID_QUINARY_TDM_TX_7: + slots = tdm_slot[TDM_QUIN].num; + slot_width = tdm_slot[TDM_QUIN].width; + slot_offset = tdm_tx_slot_offset[TDM_QUIN][TDM_7]; + break; default: pr_err("%s: dai id 0x%x not supported\n", __func__, cpu_dai->id); @@ -5799,6 +5825,36 @@ static struct snd_soc_dai_link msm_auto_fe_dai_links[] = { .codec_dai_name = "snd-soc-dummy-dai", .codec_name = "snd-soc-dummy", }, + { + .name = "Quinary TDM RX 7 Hostless", + .stream_name = "Quinary TDM RX 7 Hostless", + .cpu_dai_name = "QUIN_TDM_RX_7_HOSTLESS", + .platform_name = "msm-pcm-hostless", + .dynamic = 1, + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .no_host_mode = SND_SOC_DAI_LINK_NO_HOST, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + .codec_dai_name = "snd-soc-dummy-dai", + .codec_name = "snd-soc-dummy", + }, + { + .name = "Quinary TDM TX 7 Hostless", + .stream_name = "Quinary TDM TX 7 Hostless", + .cpu_dai_name = "QUIN_TDM_TX_7_HOSTLESS", + .platform_name = "msm-pcm-hostless", + .dynamic = 1, + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .no_host_mode = SND_SOC_DAI_LINK_NO_HOST, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + .codec_dai_name = "snd-soc-dummy-dai", + .codec_name = "snd-soc-dummy", + }, }; static struct snd_soc_dai_link msm_custom_fe_dai_links[] = { @@ -6660,6 +6716,34 @@ static struct snd_soc_dai_link msm_auto_be_dai_links[] = { .ops = &sa8155_tdm_be_ops, .ignore_suspend = 1, }, + { + .name = LPASS_BE_QUIN_TDM_RX_7, + .stream_name = "Quinary TDM7 Playback", + .cpu_dai_name = "msm-dai-q6-tdm.36942", + .platform_name = "msm-pcm-routing", + .codec_name = "msm-stub-codec.1", + .codec_dai_name = "msm-stub-rx", + .no_pcm = 1, + .dpcm_playback = 1, + .id = MSM_BACKEND_DAI_QUIN_TDM_RX_7, + .be_hw_params_fixup = msm_tdm_be_hw_params_fixup, + .ops = &sa8155_tdm_be_ops, + .ignore_suspend = 1, + }, + { + .name = LPASS_BE_QUIN_TDM_TX_7, + .stream_name = "Quinary TDM7 Capture", + .cpu_dai_name = "msm-dai-q6-tdm.36943", + .platform_name = "msm-pcm-routing", + .codec_name = "msm-stub-codec.1", + .codec_dai_name = "msm-stub-rx", + .no_pcm = 1, + .dpcm_capture = 1, + .id = MSM_BACKEND_DAI_QUIN_TDM_TX_7, + .be_hw_params_fixup = msm_tdm_be_hw_params_fixup, + .ops = &sa8155_tdm_be_ops, + .ignore_suspend = 1, + }, }; static struct snd_soc_dai_link ext_disp_be_dai_link[] = {