From d1db67cb058c464a6737f4c710c1d0a4cd94f5fb Mon Sep 17 00:00:00 2001 From: Meng Wang Date: Wed, 17 Apr 2019 12:41:34 +0800 Subject: [PATCH] asoc: kona: add mixer control to set channel number for speaker protection Add mixer control to set channel number for speaker protection. Change-Id: I67527119a65758c77dbf9b1d26cc51f956702b5e Signed-off-by: Meng Wang --- asoc/kona.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/asoc/kona.c b/asoc/kona.c index 9508b95770dc..574c652464cd 100644 --- a/asoc/kona.c +++ b/asoc/kona.c @@ -378,6 +378,8 @@ static struct dev_config afe_loopback_tx_cfg[] = { [AFE_LOOPBACK_TX_IDX] = {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, }; +static int msm_vi_feed_tx_ch = 2; +static const char *const vi_feed_ch_text[] = {"One", "Two"}; static char const *bit_format_text[] = {"S16_LE", "S24_LE", "S24_3LE", "S32_LE"}; static char const *ch_text[] = {"Two", "Three", "Four", "Five", @@ -436,6 +438,7 @@ static SOC_ENUM_SINGLE_EXT_DECL(usb_rx_format, bit_format_text); static SOC_ENUM_SINGLE_EXT_DECL(usb_tx_format, bit_format_text); static SOC_ENUM_SINGLE_EXT_DECL(usb_rx_chs, usb_ch_text); static SOC_ENUM_SINGLE_EXT_DECL(usb_tx_chs, usb_ch_text); +static SOC_ENUM_SINGLE_EXT_DECL(vi_feed_tx_chs, vi_feed_ch_text); static SOC_ENUM_SINGLE_EXT_DECL(proxy_rx_chs, ch_text); static SOC_ENUM_SINGLE_EXT_DECL(tdm_rx_sample_rate, tdm_sample_rate_text); static SOC_ENUM_SINGLE_EXT_DECL(tdm_tx_sample_rate, tdm_sample_rate_text); @@ -545,7 +548,6 @@ static struct snd_soc_card snd_soc_card_kona_msm; static int dmic_0_1_gpio_cnt; static int dmic_2_3_gpio_cnt; static int dmic_4_5_gpio_cnt; -static int msm_vi_feed_tx_ch = 2; static void *def_wcd_mbhc_cal(void); @@ -980,6 +982,23 @@ static int usb_audio_tx_ch_put(struct snd_kcontrol *kcontrol, return 1; } +static int msm_vi_feed_tx_ch_get(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + ucontrol->value.integer.value[0] = msm_vi_feed_tx_ch - 1; + pr_debug("%s: msm_vi_feed_tx_ch = %ld\n", __func__, + ucontrol->value.integer.value[0]); + return 0; +} + +static int msm_vi_feed_tx_ch_put(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + msm_vi_feed_tx_ch = ucontrol->value.integer.value[0] + 1; + pr_debug("%s: msm_vi_feed_tx_ch = %d\n", __func__, msm_vi_feed_tx_ch); + return 1; +} + static int ext_disp_get_port_idx(struct snd_kcontrol *kcontrol) { int idx = 0; @@ -3332,6 +3351,8 @@ static const struct snd_kcontrol_new msm_common_snd_controls[] = { 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[] = {