ASoC: sa6155: add quin tdm dai links and update pinctrl
Add Quinary TDM TX 7 to RX 7 AFE loopback routing
support for SA6155.
Enable pinctrl configuration only for TERT/QUAT/
QUIN TDM interfaces. SEC TDM intf is not used.
Change-Id: Ia80436722a929ad7d072a97c7007683b528993d8
Signed-off-by: Derek Chen <chenche@codeaurora.org>
diff --git a/asoc/sa6155.c b/asoc/sa6155.c
index ab4e842..269bb81 100644
--- a/asoc/sa6155.c
+++ b/asoc/sa6155.c
@@ -221,10 +221,10 @@
{SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, /* RX_7 */
},
{ /* QUIN TDM */
- {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, /* RX_0 */
- {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, /* RX_1 */
- {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, /* RX_2 */
- {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, /* RX_3 */
+ {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 2}, /* RX_0 */
+ {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 2}, /* RX_1 */
+ {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 2}, /* RX_2 */
+ {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 2}, /* RX_3 */
{SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, /* RX_4 */
{SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, /* RX_5 */
{SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, /* RX_6 */
@@ -275,7 +275,7 @@
{SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, /* TX_7 */
},
{ /* QUIN TDM */
- {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, /* TX_0 */
+ {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 6}, /* TX_0 */
{SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, /* TX_1 */
{SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, /* TX_2 */
{SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, /* TX_3 */
@@ -431,7 +431,7 @@
{0xFFFF}, /* not used */
{0xFFFF}, /* not used */
{0xFFFF}, /* not used */
- {0xFFFF}, /* not used */
+ {28, 0xFFFF},
}
};
@@ -486,7 +486,7 @@
{0xFFFF}, /* not used */
{0xFFFF}, /* not used */
{0xFFFF}, /* not used */
- {0xFFFF}, /* not used */
+ {20, 0xFFFF},
}
};
@@ -547,7 +547,7 @@
{0xFFFF}, /* not used */
{0xFFFF}, /* not used */
{0xFFFF}, /* not used */
- {0xFFFF}, /* not used */
+ {0, 0xFFFF},
}
};
@@ -601,7 +601,7 @@
{0xFFFF}, /* not used */
{0xFFFF}, /* not used */
{0xFFFF}, /* not used */
- {0xFFFF}, /* not used */
+ {0, 0xFFFF},
}
};
@@ -4335,6 +4335,14 @@
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;
@@ -4367,6 +4375,14 @@
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);
@@ -4637,6 +4653,11 @@
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;
@@ -4657,6 +4678,11 @@
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);
@@ -4771,12 +4797,15 @@
intf_conf = &pdata->tdm_intf_conf[index];
mutex_lock(&intf_conf->lock);
if (++intf_conf->ref_cnt == 1) {
- pinctrl_info = &pdata->pinctrl_info[index];
- ret_pinctrl = msm_set_pinctrl(pinctrl_info,
- STATE_ACTIVE);
- if (ret_pinctrl)
- pr_err("%s: TDM TLMM pinctrl set failed with %d\n",
- __func__, ret_pinctrl);
+ if (index == TDM_TERT || index == TDM_QUAT ||
+ index == TDM_QUIN) {
+ pinctrl_info = &pdata->pinctrl_info[index];
+ ret_pinctrl = msm_set_pinctrl(pinctrl_info,
+ STATE_ACTIVE);
+ if (ret_pinctrl)
+ pr_err("%s: TDM TLMM pinctrl set failed with %d\n",
+ __func__, ret_pinctrl);
+ }
}
mutex_unlock(&intf_conf->lock);
@@ -4808,12 +4837,15 @@
intf_conf = &pdata->tdm_intf_conf[index];
mutex_lock(&intf_conf->lock);
if (--intf_conf->ref_cnt == 0) {
- pinctrl_info = &pdata->pinctrl_info[index];
- ret_pinctrl = msm_set_pinctrl(pinctrl_info,
- STATE_SLEEP);
- if (ret_pinctrl)
- pr_err("%s: TDM TLMM pinctrl set failed with %d\n",
- __func__, ret_pinctrl);
+ if (index == TDM_TERT || index == TDM_QUAT ||
+ index == TDM_QUIN) {
+ pinctrl_info = &pdata->pinctrl_info[index];
+ ret_pinctrl = msm_set_pinctrl(pinctrl_info,
+ STATE_SLEEP);
+ if (ret_pinctrl)
+ pr_err("%s: TDM TLMM pinctrl set failed with %d\n",
+ __func__, ret_pinctrl);
+ }
}
mutex_unlock(&intf_conf->lock);
}
@@ -5805,6 +5837,36 @@
.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[] = {
@@ -6666,6 +6728,34 @@
.ops = &sa6155_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 = &sa6155_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 = &sa6155_tdm_be_ops,
+ .ignore_suspend = 1,
+ },
};
static struct snd_soc_dai_link ext_disp_be_dai_link[] = {