Loading sound/soc/msm/msm8996.c +36 −5 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ static int msm_slim_0_rx_ch = 1; static int msm_slim_0_tx_ch = 1; static int msm_slim_5_rx_ch = 1; static int msm_hifi_control; static int msm_vi_feed_tx_ch = 2; static int msm_btsco_rate = SAMPLING_RATE_8KHZ; static int msm_hdmi_rx_ch = 2; Loading @@ -87,6 +88,7 @@ static const char *const slim5_rx_ch_text[] = {"One", "Two"}; static const char *const slim0_tx_ch_text[] = {"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight"}; static const char *const vi_feed_ch_text[] = {"One", "Two"}; static char const *hdmi_rx_ch_text[] = {"Two", "Three", "Four", "Five", "Six", "Seven", "Eight"}; static char const *rx_bit_format_text[] = {"S16_LE", "S24_LE"}; Loading Loading @@ -878,6 +880,24 @@ static int msm_slim_0_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 msm_btsco_rate_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { Loading Loading @@ -1243,9 +1263,12 @@ static int msm_slim_4_tx_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, struct snd_interval *channels = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); pr_debug("%s()\n", __func__); rate->min = rate->max = SAMPLING_RATE_48KHZ; channels->min = channels->max = 2; param_set_mask(params, SNDRV_PCM_HW_PARAM_FORMAT, SNDRV_PCM_FORMAT_S32_LE); rate->min = rate->max = SAMPLING_RATE_8KHZ; channels->min = channels->max = msm_vi_feed_tx_ch; pr_debug("%s: msm_vi_feed_tx_ch: %d\n", __func__, msm_vi_feed_tx_ch); return 0; } Loading Loading @@ -1303,6 +1326,7 @@ static const struct soc_enum msm_snd_enum[] = { SOC_ENUM_SINGLE_EXT(2, slim5_rx_bit_format_text), SOC_ENUM_SINGLE_EXT(2, slim5_rx_ch_text), SOC_ENUM_SINGLE_EXT(2, hifi_function), SOC_ENUM_SINGLE_EXT(2, vi_feed_ch_text), }; static const struct snd_kcontrol_new msm_snd_controls[] = { Loading Loading @@ -1341,6 +1365,8 @@ static const struct snd_kcontrol_new msm_snd_controls[] = { slim0_tx_bit_format_get, slim0_tx_bit_format_put), SOC_ENUM_EXT("HiFi Function", msm_snd_enum[11], msm8996_hifi_get, msm8996_hifi_put), SOC_ENUM_EXT("VI_FEED_TX Channels", msm_snd_enum[12], msm_vi_feed_tx_ch_get, msm_vi_feed_tx_ch_put), }; static bool msm8996_swap_gnd_mic(struct snd_soc_codec *codec) Loading Loading @@ -1609,6 +1635,8 @@ static int msm_audrx_init(struct snd_soc_pcm_runtime *rtd) snd_soc_dapm_ignore_suspend(dapm, "Digital Mic6"); snd_soc_dapm_ignore_suspend(dapm, "SPK_OUT"); } snd_soc_dapm_ignore_suspend(dapm, "AIF4 VI"); snd_soc_dapm_ignore_suspend(dapm, "VIINPUT"); snd_soc_dapm_sync(dapm); Loading Loading @@ -1883,11 +1911,14 @@ static int msm_snd_hw_params(struct snd_pcm_substream *substream, * this DAI is based on that of the Rx path. */ user_set_tx_ch = msm_slim_0_rx_ch; else if (dai_link->be_id == MSM_BACKEND_DAI_SLIMBUS_4_TX) user_set_tx_ch = msm_vi_feed_tx_ch; else user_set_tx_ch = tx_ch_cnt; pr_debug("%s: msm_slim_0_tx_ch(%d) user_set_tx_ch(%d) tx_ch_cnt(%d)\n", __func__, msm_slim_0_tx_ch, user_set_tx_ch, tx_ch_cnt); pr_debug("%s: msm_slim_0_tx_ch(%d) user_set_tx_ch(%d) tx_ch_cnt(%d), be_id (%d)\n", __func__, msm_slim_0_tx_ch, user_set_tx_ch, tx_ch_cnt, dai_link->be_id); ret = snd_soc_dai_set_channel_map(cpu_dai, user_set_tx_ch, tx_ch, 0 , 0); Loading Loading
sound/soc/msm/msm8996.c +36 −5 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ static int msm_slim_0_rx_ch = 1; static int msm_slim_0_tx_ch = 1; static int msm_slim_5_rx_ch = 1; static int msm_hifi_control; static int msm_vi_feed_tx_ch = 2; static int msm_btsco_rate = SAMPLING_RATE_8KHZ; static int msm_hdmi_rx_ch = 2; Loading @@ -87,6 +88,7 @@ static const char *const slim5_rx_ch_text[] = {"One", "Two"}; static const char *const slim0_tx_ch_text[] = {"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight"}; static const char *const vi_feed_ch_text[] = {"One", "Two"}; static char const *hdmi_rx_ch_text[] = {"Two", "Three", "Four", "Five", "Six", "Seven", "Eight"}; static char const *rx_bit_format_text[] = {"S16_LE", "S24_LE"}; Loading Loading @@ -878,6 +880,24 @@ static int msm_slim_0_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 msm_btsco_rate_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { Loading Loading @@ -1243,9 +1263,12 @@ static int msm_slim_4_tx_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, struct snd_interval *channels = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); pr_debug("%s()\n", __func__); rate->min = rate->max = SAMPLING_RATE_48KHZ; channels->min = channels->max = 2; param_set_mask(params, SNDRV_PCM_HW_PARAM_FORMAT, SNDRV_PCM_FORMAT_S32_LE); rate->min = rate->max = SAMPLING_RATE_8KHZ; channels->min = channels->max = msm_vi_feed_tx_ch; pr_debug("%s: msm_vi_feed_tx_ch: %d\n", __func__, msm_vi_feed_tx_ch); return 0; } Loading Loading @@ -1303,6 +1326,7 @@ static const struct soc_enum msm_snd_enum[] = { SOC_ENUM_SINGLE_EXT(2, slim5_rx_bit_format_text), SOC_ENUM_SINGLE_EXT(2, slim5_rx_ch_text), SOC_ENUM_SINGLE_EXT(2, hifi_function), SOC_ENUM_SINGLE_EXT(2, vi_feed_ch_text), }; static const struct snd_kcontrol_new msm_snd_controls[] = { Loading Loading @@ -1341,6 +1365,8 @@ static const struct snd_kcontrol_new msm_snd_controls[] = { slim0_tx_bit_format_get, slim0_tx_bit_format_put), SOC_ENUM_EXT("HiFi Function", msm_snd_enum[11], msm8996_hifi_get, msm8996_hifi_put), SOC_ENUM_EXT("VI_FEED_TX Channels", msm_snd_enum[12], msm_vi_feed_tx_ch_get, msm_vi_feed_tx_ch_put), }; static bool msm8996_swap_gnd_mic(struct snd_soc_codec *codec) Loading Loading @@ -1609,6 +1635,8 @@ static int msm_audrx_init(struct snd_soc_pcm_runtime *rtd) snd_soc_dapm_ignore_suspend(dapm, "Digital Mic6"); snd_soc_dapm_ignore_suspend(dapm, "SPK_OUT"); } snd_soc_dapm_ignore_suspend(dapm, "AIF4 VI"); snd_soc_dapm_ignore_suspend(dapm, "VIINPUT"); snd_soc_dapm_sync(dapm); Loading Loading @@ -1883,11 +1911,14 @@ static int msm_snd_hw_params(struct snd_pcm_substream *substream, * this DAI is based on that of the Rx path. */ user_set_tx_ch = msm_slim_0_rx_ch; else if (dai_link->be_id == MSM_BACKEND_DAI_SLIMBUS_4_TX) user_set_tx_ch = msm_vi_feed_tx_ch; else user_set_tx_ch = tx_ch_cnt; pr_debug("%s: msm_slim_0_tx_ch(%d) user_set_tx_ch(%d) tx_ch_cnt(%d)\n", __func__, msm_slim_0_tx_ch, user_set_tx_ch, tx_ch_cnt); pr_debug("%s: msm_slim_0_tx_ch(%d) user_set_tx_ch(%d) tx_ch_cnt(%d), be_id (%d)\n", __func__, msm_slim_0_tx_ch, user_set_tx_ch, tx_ch_cnt, dai_link->be_id); ret = snd_soc_dai_set_channel_map(cpu_dai, user_set_tx_ch, tx_ch, 0 , 0); Loading