From b5de84766649564aceff1fd064b4463dd284b67e Mon Sep 17 00:00:00 2001 From: Harshal Ahire Date: Tue, 28 Jan 2020 14:22:01 +0530 Subject: [PATCH] asoc: Add separate array for TDM BE dai links -Register for the widgets and interconnections in routing driver only when the respective interfaces are supported. -Create a separate array for TDM BE dai links. Change-Id: Ic1570ef432c76556aff8c592e12c879aed50e4ef Signed-off-by: Harshal Ahire --- asoc/bengal.c | 271 +++++++++++++++++++++++++--------------- config/bengalauto.conf | 3 + config/bengalautoconf.h | 3 + 3 files changed, 173 insertions(+), 104 deletions(-) diff --git a/asoc/bengal.c b/asoc/bengal.c index 49415d8291ae..d60d61cd3323 100644 --- a/asoc/bengal.c +++ b/asoc/bengal.c @@ -2969,6 +2969,32 @@ static const struct snd_kcontrol_new msm_common_snd_controls[] = { SOC_ENUM_EXT("USB_AUDIO_TX SampleRate", usb_tx_sample_rate, usb_audio_tx_sample_rate_get, usb_audio_tx_sample_rate_put), + SOC_ENUM_EXT("USB_AUDIO_RX Format", usb_rx_format, + usb_audio_rx_format_get, usb_audio_rx_format_put), + SOC_ENUM_EXT("USB_AUDIO_TX Format", usb_tx_format, + usb_audio_tx_format_get, usb_audio_tx_format_put), + SOC_ENUM_EXT("USB_AUDIO_RX Channels", usb_rx_chs, + usb_audio_rx_ch_get, usb_audio_rx_ch_put), + SOC_ENUM_EXT("USB_AUDIO_TX Channels", usb_tx_chs, + usb_audio_tx_ch_get, usb_audio_tx_ch_put), + SOC_ENUM_EXT("PROXY_RX Channels", proxy_rx_chs, + proxy_rx_ch_get, proxy_rx_ch_put), + SOC_ENUM_EXT("BT SampleRate", bt_sample_rate, + msm_bt_sample_rate_get, + msm_bt_sample_rate_put), + SOC_ENUM_EXT("BT SampleRate RX", bt_sample_rate_rx, + msm_bt_sample_rate_rx_get, + msm_bt_sample_rate_rx_put), + SOC_ENUM_EXT("BT SampleRate TX", bt_sample_rate_tx, + msm_bt_sample_rate_tx_get, + msm_bt_sample_rate_tx_put), + SOC_ENUM_EXT("AFE_LOOPBACK_TX Channels", afe_loopback_tx_chs, + afe_loopback_tx_ch_get, afe_loopback_tx_ch_put), + SOC_ENUM_EXT("VI_FEED_TX Channels", vi_feed_tx_chs, + msm_vi_feed_tx_ch_get, msm_vi_feed_tx_ch_put), +}; + +static const struct snd_kcontrol_new msm_tdm_snd_controls[] = { SOC_ENUM_EXT("PRI_TDM_RX_0 SampleRate", tdm_rx_sample_rate, tdm_rx_sample_rate_get, tdm_rx_sample_rate_put), @@ -2993,58 +3019,6 @@ static const struct snd_kcontrol_new msm_common_snd_controls[] = { SOC_ENUM_EXT("QUAT_TDM_TX_0 SampleRate", tdm_tx_sample_rate, tdm_tx_sample_rate_get, tdm_tx_sample_rate_put), - SOC_ENUM_EXT("PRIM_AUX_PCM_RX SampleRate", prim_aux_pcm_rx_sample_rate, - aux_pcm_rx_sample_rate_get, - aux_pcm_rx_sample_rate_put), - SOC_ENUM_EXT("SEC_AUX_PCM_RX SampleRate", sec_aux_pcm_rx_sample_rate, - aux_pcm_rx_sample_rate_get, - aux_pcm_rx_sample_rate_put), - SOC_ENUM_EXT("TERT_AUX_PCM_RX SampleRate", tert_aux_pcm_rx_sample_rate, - aux_pcm_rx_sample_rate_get, - aux_pcm_rx_sample_rate_put), - SOC_ENUM_EXT("QUAT_AUX_PCM_RX SampleRate", quat_aux_pcm_rx_sample_rate, - aux_pcm_rx_sample_rate_get, - aux_pcm_rx_sample_rate_put), - SOC_ENUM_EXT("PRIM_AUX_PCM_TX SampleRate", prim_aux_pcm_tx_sample_rate, - aux_pcm_tx_sample_rate_get, - aux_pcm_tx_sample_rate_put), - SOC_ENUM_EXT("SEC_AUX_PCM_TX SampleRate", sec_aux_pcm_tx_sample_rate, - aux_pcm_tx_sample_rate_get, - aux_pcm_tx_sample_rate_put), - SOC_ENUM_EXT("TERT_AUX_PCM_TX SampleRate", tert_aux_pcm_tx_sample_rate, - aux_pcm_tx_sample_rate_get, - aux_pcm_tx_sample_rate_put), - SOC_ENUM_EXT("QUAT_AUX_PCM_TX SampleRate", quat_aux_pcm_tx_sample_rate, - aux_pcm_tx_sample_rate_get, - aux_pcm_tx_sample_rate_put), - SOC_ENUM_EXT("PRIM_MI2S_RX SampleRate", prim_mi2s_rx_sample_rate, - mi2s_rx_sample_rate_get, - mi2s_rx_sample_rate_put), - SOC_ENUM_EXT("SEC_MI2S_RX SampleRate", sec_mi2s_rx_sample_rate, - mi2s_rx_sample_rate_get, - mi2s_rx_sample_rate_put), - SOC_ENUM_EXT("TERT_MI2S_RX SampleRate", tert_mi2s_rx_sample_rate, - mi2s_rx_sample_rate_get, - mi2s_rx_sample_rate_put), - SOC_ENUM_EXT("QUAT_MI2S_RX SampleRate", quat_mi2s_rx_sample_rate, - mi2s_rx_sample_rate_get, - mi2s_rx_sample_rate_put), - SOC_ENUM_EXT("PRIM_MI2S_TX SampleRate", prim_mi2s_tx_sample_rate, - mi2s_tx_sample_rate_get, - mi2s_tx_sample_rate_put), - SOC_ENUM_EXT("SEC_MI2S_TX SampleRate", sec_mi2s_tx_sample_rate, - mi2s_tx_sample_rate_get, - mi2s_tx_sample_rate_put), - SOC_ENUM_EXT("TERT_MI2S_TX SampleRate", tert_mi2s_tx_sample_rate, - mi2s_tx_sample_rate_get, - mi2s_tx_sample_rate_put), - SOC_ENUM_EXT("QUAT_MI2S_TX SampleRate", quat_mi2s_tx_sample_rate, - mi2s_tx_sample_rate_get, - mi2s_tx_sample_rate_put), - SOC_ENUM_EXT("USB_AUDIO_RX Format", usb_rx_format, - usb_audio_rx_format_get, usb_audio_rx_format_put), - SOC_ENUM_EXT("USB_AUDIO_TX Format", usb_tx_format, - usb_audio_tx_format_get, usb_audio_tx_format_put), SOC_ENUM_EXT("PRI_TDM_RX_0 Format", tdm_rx_format, tdm_rx_format_get, tdm_rx_format_put), @@ -3069,44 +3043,6 @@ static const struct snd_kcontrol_new msm_common_snd_controls[] = { SOC_ENUM_EXT("QUAT_TDM_TX_0 Format", tdm_tx_format, tdm_tx_format_get, tdm_tx_format_put), - SOC_ENUM_EXT("PRIM_AUX_PCM_RX Format", aux_pcm_rx_format, - msm_aux_pcm_rx_format_get, msm_aux_pcm_rx_format_put), - SOC_ENUM_EXT("SEC_AUX_PCM_RX Format", aux_pcm_rx_format, - msm_aux_pcm_rx_format_get, msm_aux_pcm_rx_format_put), - SOC_ENUM_EXT("TERT_AUX_PCM_RX Format", aux_pcm_rx_format, - msm_aux_pcm_rx_format_get, msm_aux_pcm_rx_format_put), - SOC_ENUM_EXT("QUAT_AUX_PCM_RX Format", aux_pcm_rx_format, - msm_aux_pcm_rx_format_get, msm_aux_pcm_rx_format_put), - SOC_ENUM_EXT("PRIM_AUX_PCM_TX Format", aux_pcm_tx_format, - msm_aux_pcm_tx_format_get, msm_aux_pcm_tx_format_put), - SOC_ENUM_EXT("SEC_AUX_PCM_TX Format", aux_pcm_tx_format, - msm_aux_pcm_tx_format_get, msm_aux_pcm_tx_format_put), - SOC_ENUM_EXT("TERT_AUX_PCM_TX Format", aux_pcm_tx_format, - msm_aux_pcm_tx_format_get, msm_aux_pcm_tx_format_put), - SOC_ENUM_EXT("QUAT_AUX_PCM_TX Format", aux_pcm_tx_format, - msm_aux_pcm_tx_format_get, msm_aux_pcm_tx_format_put), - SOC_ENUM_EXT("PRIM_MI2S_RX Format", mi2s_rx_format, - msm_mi2s_rx_format_get, msm_mi2s_rx_format_put), - SOC_ENUM_EXT("SEC_MI2S_RX Format", mi2s_rx_format, - msm_mi2s_rx_format_get, msm_mi2s_rx_format_put), - SOC_ENUM_EXT("TERT_MI2S_RX Format", mi2s_rx_format, - msm_mi2s_rx_format_get, msm_mi2s_rx_format_put), - SOC_ENUM_EXT("QUAT_MI2S_RX Format", mi2s_rx_format, - msm_mi2s_rx_format_get, msm_mi2s_rx_format_put), - SOC_ENUM_EXT("PRIM_MI2S_TX Format", mi2s_tx_format, - msm_mi2s_tx_format_get, msm_mi2s_tx_format_put), - SOC_ENUM_EXT("SEC_MI2S_TX Format", mi2s_tx_format, - msm_mi2s_tx_format_get, msm_mi2s_tx_format_put), - SOC_ENUM_EXT("TERT_MI2S_TX Format", mi2s_tx_format, - msm_mi2s_tx_format_get, msm_mi2s_tx_format_put), - SOC_ENUM_EXT("QUAT_MI2S_TX Format", mi2s_tx_format, - msm_mi2s_tx_format_get, msm_mi2s_tx_format_put), - SOC_ENUM_EXT("USB_AUDIO_RX Channels", usb_rx_chs, - usb_audio_rx_ch_get, usb_audio_rx_ch_put), - SOC_ENUM_EXT("USB_AUDIO_TX Channels", usb_tx_chs, - usb_audio_tx_ch_get, usb_audio_tx_ch_put), - SOC_ENUM_EXT("PROXY_RX Channels", proxy_rx_chs, - proxy_rx_ch_get, proxy_rx_ch_put), SOC_ENUM_EXT("PRI_TDM_RX_0 Channels", tdm_rx_chs, tdm_rx_ch_get, tdm_rx_ch_put), @@ -3131,6 +3067,89 @@ static const struct snd_kcontrol_new msm_common_snd_controls[] = { SOC_ENUM_EXT("QUAT_TDM_TX_0 Channels", tdm_tx_chs, tdm_tx_ch_get, tdm_tx_ch_put), +}; + +static const struct snd_kcontrol_new msm_auxpcm_snd_controls[] = { + SOC_ENUM_EXT("PRIM_AUX_PCM_RX SampleRate", prim_aux_pcm_rx_sample_rate, + aux_pcm_rx_sample_rate_get, + aux_pcm_rx_sample_rate_put), + SOC_ENUM_EXT("SEC_AUX_PCM_RX SampleRate", sec_aux_pcm_rx_sample_rate, + aux_pcm_rx_sample_rate_get, + aux_pcm_rx_sample_rate_put), + SOC_ENUM_EXT("TERT_AUX_PCM_RX SampleRate", tert_aux_pcm_rx_sample_rate, + aux_pcm_rx_sample_rate_get, + aux_pcm_rx_sample_rate_put), + SOC_ENUM_EXT("QUAT_AUX_PCM_RX SampleRate", quat_aux_pcm_rx_sample_rate, + aux_pcm_rx_sample_rate_get, + aux_pcm_rx_sample_rate_put), + SOC_ENUM_EXT("PRIM_AUX_PCM_TX SampleRate", prim_aux_pcm_tx_sample_rate, + aux_pcm_tx_sample_rate_get, + aux_pcm_tx_sample_rate_put), + SOC_ENUM_EXT("SEC_AUX_PCM_TX SampleRate", sec_aux_pcm_tx_sample_rate, + aux_pcm_tx_sample_rate_get, + aux_pcm_tx_sample_rate_put), + SOC_ENUM_EXT("TERT_AUX_PCM_TX SampleRate", tert_aux_pcm_tx_sample_rate, + aux_pcm_tx_sample_rate_get, + aux_pcm_tx_sample_rate_put), + SOC_ENUM_EXT("QUAT_AUX_PCM_TX SampleRate", quat_aux_pcm_tx_sample_rate, + aux_pcm_tx_sample_rate_get, + aux_pcm_tx_sample_rate_put), + SOC_ENUM_EXT("PRIM_AUX_PCM_RX Format", aux_pcm_rx_format, + msm_aux_pcm_rx_format_get, msm_aux_pcm_rx_format_put), + SOC_ENUM_EXT("SEC_AUX_PCM_RX Format", aux_pcm_rx_format, + msm_aux_pcm_rx_format_get, msm_aux_pcm_rx_format_put), + SOC_ENUM_EXT("TERT_AUX_PCM_RX Format", aux_pcm_rx_format, + msm_aux_pcm_rx_format_get, msm_aux_pcm_rx_format_put), + SOC_ENUM_EXT("QUAT_AUX_PCM_RX Format", aux_pcm_rx_format, + msm_aux_pcm_rx_format_get, msm_aux_pcm_rx_format_put), + SOC_ENUM_EXT("PRIM_AUX_PCM_TX Format", aux_pcm_tx_format, + msm_aux_pcm_tx_format_get, msm_aux_pcm_tx_format_put), + SOC_ENUM_EXT("SEC_AUX_PCM_TX Format", aux_pcm_tx_format, + msm_aux_pcm_tx_format_get, msm_aux_pcm_tx_format_put), + SOC_ENUM_EXT("TERT_AUX_PCM_TX Format", aux_pcm_tx_format, + msm_aux_pcm_tx_format_get, msm_aux_pcm_tx_format_put), + SOC_ENUM_EXT("QUAT_AUX_PCM_TX Format", aux_pcm_tx_format, + msm_aux_pcm_tx_format_get, msm_aux_pcm_tx_format_put), +}; + +static const struct snd_kcontrol_new msm_mi2s_snd_controls[] = { + SOC_ENUM_EXT("PRIM_MI2S_RX SampleRate", prim_mi2s_rx_sample_rate, + mi2s_rx_sample_rate_get, + mi2s_rx_sample_rate_put), + SOC_ENUM_EXT("SEC_MI2S_RX SampleRate", sec_mi2s_rx_sample_rate, + mi2s_rx_sample_rate_get, + mi2s_rx_sample_rate_put), + SOC_ENUM_EXT("TERT_MI2S_RX SampleRate", tert_mi2s_rx_sample_rate, + mi2s_rx_sample_rate_get, + mi2s_rx_sample_rate_put), + SOC_ENUM_EXT("QUAT_MI2S_RX SampleRate", quat_mi2s_rx_sample_rate, + mi2s_rx_sample_rate_get, + mi2s_tx_sample_rate_put), + SOC_ENUM_EXT("SEC_MI2S_TX SampleRate", sec_mi2s_tx_sample_rate, + mi2s_tx_sample_rate_get, + mi2s_tx_sample_rate_put), + SOC_ENUM_EXT("TERT_MI2S_TX SampleRate", tert_mi2s_tx_sample_rate, + mi2s_tx_sample_rate_get, + mi2s_tx_sample_rate_put), + SOC_ENUM_EXT("QUAT_MI2S_TX SampleRate", quat_mi2s_tx_sample_rate, + mi2s_tx_sample_rate_get, + mi2s_tx_sample_rate_put), + SOC_ENUM_EXT("PRIM_MI2S_RX Format", mi2s_rx_format, + msm_mi2s_rx_format_get, msm_mi2s_rx_format_put), + SOC_ENUM_EXT("SEC_MI2S_RX Format", mi2s_rx_format, + msm_mi2s_rx_format_get, msm_mi2s_rx_format_put), + SOC_ENUM_EXT("TERT_MI2S_RX Format", mi2s_rx_format, + msm_mi2s_rx_format_get, msm_mi2s_rx_format_put), + SOC_ENUM_EXT("QUAT_MI2S_RX Format", mi2s_rx_format, + msm_mi2s_rx_format_get, msm_mi2s_rx_format_put), + SOC_ENUM_EXT("PRIM_MI2S_TX Format", mi2s_tx_format, + msm_mi2s_tx_format_get, msm_mi2s_tx_format_put), + SOC_ENUM_EXT("SEC_MI2S_TX Format", mi2s_tx_format, + msm_mi2s_tx_format_get, msm_mi2s_tx_format_put), + SOC_ENUM_EXT("TERT_MI2S_TX Format", mi2s_tx_format, + msm_mi2s_tx_format_get, msm_mi2s_tx_format_put), + SOC_ENUM_EXT("QUAT_MI2S_TX Format", mi2s_tx_format, + msm_mi2s_tx_format_get, msm_mi2s_tx_format_put), SOC_ENUM_EXT("PRIM_MI2S_RX Channels", prim_mi2s_rx_chs, msm_mi2s_rx_ch_get, msm_mi2s_rx_ch_put), SOC_ENUM_EXT("SEC_MI2S_RX Channels", sec_mi2s_rx_chs, @@ -3147,19 +3166,6 @@ static const struct snd_kcontrol_new msm_common_snd_controls[] = { msm_mi2s_tx_ch_get, msm_mi2s_tx_ch_put), SOC_ENUM_EXT("QUAT_MI2S_TX Channels", quat_mi2s_tx_chs, msm_mi2s_tx_ch_get, msm_mi2s_tx_ch_put), - SOC_ENUM_EXT("BT SampleRate", bt_sample_rate, - msm_bt_sample_rate_get, - msm_bt_sample_rate_put), - SOC_ENUM_EXT("BT SampleRate RX", bt_sample_rate_rx, - msm_bt_sample_rate_rx_get, - msm_bt_sample_rate_rx_put), - SOC_ENUM_EXT("BT SampleRate TX", bt_sample_rate_tx, - msm_bt_sample_rate_tx_get, - msm_bt_sample_rate_tx_put), - SOC_ENUM_EXT("AFE_LOOPBACK_TX Channels", afe_loopback_tx_chs, - afe_loopback_tx_ch_get, afe_loopback_tx_ch_put), - SOC_ENUM_EXT("VI_FEED_TX Channels", vi_feed_tx_chs, - msm_vi_feed_tx_ch_get, msm_vi_feed_tx_ch_put), }; static const struct snd_kcontrol_new msm_snd_controls[] = { @@ -4201,6 +4207,45 @@ static int msm_wcn_init(struct snd_soc_pcm_runtime *rtd) tx_ch, ARRAY_SIZE(rx_ch), rx_ch); } +#ifndef CONFIG_TDM_DISABLE +static void msm_add_tdm_snd_controls(struct snd_soc_component *component) +{ + snd_soc_add_component_controls(component, msm_tdm_snd_controls, + ARRAY_SIZE(msm_tdm_snd_controls)); +} +#else +static void msm_add_tdm_snd_controls(struct snd_soc_component *component) +{ + return; +} +#endif + +#ifndef CONFIG_MI2S_DISABLE +static void msm_add_mi2s_snd_controls(struct snd_soc_component *component) +{ + snd_soc_add_component_controls(component, msm_mi2s_snd_controls, + ARRAY_SIZE(msm_mi2s_snd_controls)); +} +#else +static void msm_add_mi2s_snd_controls(struct snd_soc_component *component) +{ + return; +} +#endif + +#ifndef CONFIG_AUXPCM_DISABLE +static void msm_add_auxpcm_snd_controls(struct snd_soc_component *component) +{ + snd_soc_add_component_controls(component, msm_auxpcm_snd_controls, + ARRAY_SIZE(msm_auxpcm_snd_controls)); +} +#else +static void msm_add_auxpcm_snd_controls(struct snd_soc_component *component) +{ + return; +} +#endif + static int msm_int_audrx_init(struct snd_soc_pcm_runtime *rtd) { int ret = -EINVAL; @@ -4235,6 +4280,10 @@ static int msm_int_audrx_init(struct snd_soc_pcm_runtime *rtd) return ret; } + msm_add_tdm_snd_controls(component); + msm_add_mi2s_snd_controls(component); + msm_add_auxpcm_snd_controls(component); + snd_soc_dapm_new_controls(dapm, msm_int_dapm_widgets, ARRAY_SIZE(msm_int_dapm_widgets)); @@ -5048,6 +5097,9 @@ static struct snd_soc_dai_link msm_common_be_dai_links[] = { .be_hw_params_fixup = msm_be_hw_params_fixup, .ignore_suspend = 1, }, +}; + +static struct snd_soc_dai_link msm_tdm_be_dai_links[] = { { .name = LPASS_BE_PRI_TDM_RX_0, .stream_name = "Primary TDM0 Playback", @@ -5627,7 +5679,8 @@ static struct snd_soc_dai_link msm_bengal_dai_links[ ARRAY_SIZE(msm_rx_tx_cdc_dma_be_dai_links) + ARRAY_SIZE(msm_va_cdc_dma_be_dai_links) + ARRAY_SIZE(msm_afe_rxtx_lb_be_dai_link) + - ARRAY_SIZE(msm_wcn_btfm_be_dai_links)]; + ARRAY_SIZE(msm_wcn_btfm_be_dai_links) + + ARRAY_SIZE(msm_tdm_be_dai_links)]; static int msm_populate_dai_link_component_of_node( struct snd_soc_card *card) @@ -5939,6 +5992,16 @@ static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev) ARRAY_SIZE(msm_afe_rxtx_lb_be_dai_link); } + rc = of_property_read_u32(dev->of_node, "qcom,tdm-audio-intf", + &val); + if (!rc && val) { + memcpy(msm_bengal_dai_links + total_links, + msm_tdm_be_dai_links, + sizeof(msm_tdm_be_dai_links)); + total_links += + ARRAY_SIZE(msm_tdm_be_dai_links); + } + rc = of_property_read_u32(dev->of_node, "qcom,wcn-btfm", &wcn_btfm_intf); if (rc) { diff --git a/config/bengalauto.conf b/config/bengalauto.conf index d6fdadd7a5f3..f5ffaa3e1e5f 100644 --- a/config/bengalauto.conf +++ b/config/bengalauto.conf @@ -32,3 +32,6 @@ CONFIG_SND_SOC_WCD937X=m CONFIG_SND_SOC_WCD937X_SLAVE=m CONFIG_SND_SOC_BENGAL=m CONFIG_SND_EVENT=m +CONFIG_TDM_DISABLE=m +CONFIG_MI2S_DISABLE=m +CONFIG_AUXPCM_DISABLE=m diff --git a/config/bengalautoconf.h b/config/bengalautoconf.h index 90d3e3c52448..bf5a63ce9eee 100644 --- a/config/bengalautoconf.h +++ b/config/bengalautoconf.h @@ -36,3 +36,6 @@ #define CONFIG_SND_SOC_WCD937X_SLAVE 1 #define CONFIG_SND_SOC_BENGAL 1 #define CONFIG_SND_EVENT 1 +#define CONFIG_TDM_DISABLE 1 +#define CONFIG_MI2S_DISABLE 1 +#define CONFIG_AUXPCM_DISABLE 1