Loading sound/soc/msm/sdm660-external.c +103 −1 Original line number Diff line number Diff line /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -140,6 +140,10 @@ static char const *slim_sample_rate_text[] = {"KHZ_8", "KHZ_16", "KHZ_192", "KHZ_352P8", "KHZ_384"}; static const char *const spk_function_text[] = {"Off", "On"}; static char const *bt_sample_rate_text[] = {"KHZ_8", "KHZ_16", "KHZ_48"}; static char const *bt_sample_rate_rx_text[] = {"KHZ_8", "KHZ_16", "KHZ_48"}; static char const *bt_sample_rate_tx_text[] = {"KHZ_8", "KHZ_16", "KHZ_48"}; static SOC_ENUM_SINGLE_EXT_DECL(spk_func_en, spk_function_text); static SOC_ENUM_SINGLE_EXT_DECL(slim_0_rx_chs, slim_rx_ch_text); Loading @@ -159,6 +163,9 @@ static SOC_ENUM_SINGLE_EXT_DECL(slim_0_tx_sample_rate, slim_sample_rate_text); static SOC_ENUM_SINGLE_EXT_DECL(slim_5_rx_sample_rate, slim_sample_rate_text); static SOC_ENUM_SINGLE_EXT_DECL(slim_6_rx_sample_rate, slim_sample_rate_text); static SOC_ENUM_SINGLE_EXT_DECL(bt_sample_rate, bt_sample_rate_text); static SOC_ENUM_SINGLE_EXT_DECL(bt_sample_rate_rx, bt_sample_rate_rx_text); static SOC_ENUM_SINGLE_EXT_DECL(bt_sample_rate_tx, bt_sample_rate_tx_text); static int slim_get_sample_rate_val(int sample_rate) { Loading Loading @@ -374,6 +381,95 @@ static int msm_bt_sample_rate_put(struct snd_kcontrol *kcontrol, return 0; } static int msm_bt_sample_rate_rx_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (slim_rx_cfg[SLIM_RX_7].sample_rate) { case SAMPLING_RATE_48KHZ: ucontrol->value.integer.value[0] = 2; break; case SAMPLING_RATE_16KHZ: ucontrol->value.integer.value[0] = 1; break; case SAMPLING_RATE_8KHZ: default: ucontrol->value.integer.value[0] = 0; break; } pr_debug("%s: sample rate = %d", __func__, slim_rx_cfg[SLIM_RX_7].sample_rate); return 0; } static int msm_bt_sample_rate_rx_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (ucontrol->value.integer.value[0]) { case 1: slim_rx_cfg[SLIM_RX_7].sample_rate = SAMPLING_RATE_16KHZ; break; case 2: slim_rx_cfg[SLIM_RX_7].sample_rate = SAMPLING_RATE_48KHZ; break; case 0: default: slim_rx_cfg[SLIM_RX_7].sample_rate = SAMPLING_RATE_8KHZ; break; } pr_debug("%s: sample rates: slim7_rx = %d, value = %d\n", __func__, slim_rx_cfg[SLIM_RX_7].sample_rate, ucontrol->value.enumerated.item[0]); return 0; } static int msm_bt_sample_rate_tx_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (slim_tx_cfg[SLIM_TX_7].sample_rate) { case SAMPLING_RATE_48KHZ: ucontrol->value.integer.value[0] = 2; break; case SAMPLING_RATE_16KHZ: ucontrol->value.integer.value[0] = 1; break; case SAMPLING_RATE_8KHZ: default: ucontrol->value.integer.value[0] = 0; break; } pr_debug("%s: sample rate = %d", __func__, slim_tx_cfg[SLIM_TX_7].sample_rate); return 0; } static int msm_bt_sample_rate_tx_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (ucontrol->value.integer.value[0]) { case 1: slim_tx_cfg[SLIM_TX_7].sample_rate = SAMPLING_RATE_16KHZ; break; case 2: slim_tx_cfg[SLIM_TX_7].sample_rate = SAMPLING_RATE_48KHZ; break; case 0: default: slim_tx_cfg[SLIM_TX_7].sample_rate = SAMPLING_RATE_8KHZ; break; } pr_debug("%s: sample rates: slim7_tx = %d, value = %d\n", __func__, slim_tx_cfg[SLIM_TX_7].sample_rate, ucontrol->value.enumerated.item[0]); return 0; } static int slim_rx_sample_rate_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { Loading Loading @@ -745,6 +841,12 @@ static const struct snd_kcontrol_new msm_snd_controls[] = { 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), }; static int msm_slim_get_ch_from_beid(int32_t be_id) Loading sound/soc/msm/sdm660-internal.c +121 −12 Original line number Diff line number Diff line /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -44,7 +44,8 @@ enum { }; enum { BT_SLIM7, BT_SLIM7_RX, BT_SLIM7_TX, FM_SLIM8, SLIM_MAX, }; Loading Loading @@ -138,7 +139,8 @@ static struct dev_config int_mi2s_cfg[] = { }; static struct dev_config bt_fm_cfg[] = { [BT_SLIM7] = {SAMPLING_RATE_8KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, [BT_SLIM7_RX] = {SAMPLING_RATE_8KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, [BT_SLIM7_TX] = {SAMPLING_RATE_8KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, [FM_SLIM8] = {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 2}, }; Loading @@ -151,6 +153,8 @@ static const char *const int_mi2s_tx_ch_text[] = {"One", "Two", static char const *bit_format_text[] = {"S16_LE", "S24_LE", "S24_3LE"}; static const char *const loopback_mclk_text[] = {"DISABLE", "ENABLE"}; static char const *bt_sample_rate_text[] = {"KHZ_8", "KHZ_16", "KHZ_48"}; static char const *bt_sample_rate_rx_text[] = {"KHZ_8", "KHZ_16", "KHZ_48"}; static char const *bt_sample_rate_tx_text[] = {"KHZ_8", "KHZ_16", "KHZ_48"}; static SOC_ENUM_SINGLE_EXT_DECL(int0_mi2s_rx_sample_rate, int_mi2s_rate_text); static SOC_ENUM_SINGLE_EXT_DECL(int0_mi2s_rx_chs, int_mi2s_ch_text); Loading @@ -167,6 +171,8 @@ static SOC_ENUM_SINGLE_EXT_DECL(int4_mi2s_rx_format, bit_format_text); static SOC_ENUM_SINGLE_EXT_DECL(int5_mi2s_tx_chs, int_mi2s_ch_text); static SOC_ENUM_SINGLE_EXT_DECL(loopback_mclk_en, loopback_mclk_text); static SOC_ENUM_SINGLE_EXT_DECL(bt_sample_rate, bt_sample_rate_text); static SOC_ENUM_SINGLE_EXT_DECL(bt_sample_rate_rx, bt_sample_rate_rx_text); static SOC_ENUM_SINGLE_EXT_DECL(bt_sample_rate_tx, bt_sample_rate_tx_text); static int msm_dmic_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event); Loading Loading @@ -624,12 +630,18 @@ static int msm_btfm_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, switch (dai_link->be_id) { case MSM_BACKEND_DAI_SLIMBUS_7_RX: param_set_mask(params, SNDRV_PCM_HW_PARAM_FORMAT, bt_fm_cfg[BT_SLIM7_RX].bit_format); rate->min = rate->max = bt_fm_cfg[BT_SLIM7_RX].sample_rate; channels->min = channels->max = bt_fm_cfg[BT_SLIM7_RX].channels; break; case MSM_BACKEND_DAI_SLIMBUS_7_TX: param_set_mask(params, SNDRV_PCM_HW_PARAM_FORMAT, bt_fm_cfg[BT_SLIM7].bit_format); rate->min = rate->max = bt_fm_cfg[BT_SLIM7].sample_rate; bt_fm_cfg[BT_SLIM7_TX].bit_format); rate->min = rate->max = bt_fm_cfg[BT_SLIM7_TX].sample_rate; channels->min = channels->max = bt_fm_cfg[BT_SLIM7].channels; bt_fm_cfg[BT_SLIM7_TX].channels; break; case MSM_BACKEND_DAI_SLIMBUS_8_TX: Loading Loading @@ -834,7 +846,7 @@ static int msm_bt_sample_rate_get(struct snd_kcontrol *kcontrol, * when used for BT_SCO use case. Return either Rx or Tx sample rate * value. */ switch (bt_fm_cfg[BT_SLIM7].sample_rate) { switch (bt_fm_cfg[BT_SLIM7_RX].sample_rate) { case SAMPLING_RATE_48KHZ: ucontrol->value.integer.value[0] = 2; break; Loading @@ -847,7 +859,7 @@ static int msm_bt_sample_rate_get(struct snd_kcontrol *kcontrol, break; } pr_debug("%s: sample rate = %d", __func__, bt_fm_cfg[BT_SLIM7].sample_rate); bt_fm_cfg[BT_SLIM7_RX].sample_rate); return 0; } Loading @@ -857,19 +869,110 @@ static int msm_bt_sample_rate_put(struct snd_kcontrol *kcontrol, { switch (ucontrol->value.integer.value[0]) { case 1: bt_fm_cfg[BT_SLIM7].sample_rate = SAMPLING_RATE_16KHZ; bt_fm_cfg[BT_SLIM7_RX].sample_rate = SAMPLING_RATE_16KHZ; bt_fm_cfg[BT_SLIM7_TX].sample_rate = SAMPLING_RATE_16KHZ; break; case 2: bt_fm_cfg[BT_SLIM7_RX].sample_rate = SAMPLING_RATE_48KHZ; bt_fm_cfg[BT_SLIM7_TX].sample_rate = SAMPLING_RATE_48KHZ; break; case 0: default: bt_fm_cfg[BT_SLIM7_RX].sample_rate = SAMPLING_RATE_8KHZ; bt_fm_cfg[BT_SLIM7_TX].sample_rate = SAMPLING_RATE_8KHZ; break; } pr_debug("%s: sample rates: slim7_rx = %d, value = %d\n", __func__, bt_fm_cfg[BT_SLIM7_RX].sample_rate, ucontrol->value.enumerated.item[0]); return 0; } static int msm_bt_sample_rate_rx_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (bt_fm_cfg[BT_SLIM7_RX].sample_rate) { case SAMPLING_RATE_48KHZ: ucontrol->value.integer.value[0] = 2; break; case SAMPLING_RATE_16KHZ: ucontrol->value.integer.value[0] = 1; break; case SAMPLING_RATE_8KHZ: default: ucontrol->value.integer.value[0] = 0; break; } pr_debug("%s: sample rate = %d", __func__, bt_fm_cfg[BT_SLIM7_RX].sample_rate); return 0; } static int msm_bt_sample_rate_rx_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (ucontrol->value.integer.value[0]) { case 1: bt_fm_cfg[BT_SLIM7_RX].sample_rate = SAMPLING_RATE_16KHZ; break; case 2: bt_fm_cfg[BT_SLIM7].sample_rate = SAMPLING_RATE_48KHZ; bt_fm_cfg[BT_SLIM7_RX].sample_rate = SAMPLING_RATE_48KHZ; break; case 0: default: bt_fm_cfg[BT_SLIM7].sample_rate = SAMPLING_RATE_8KHZ; bt_fm_cfg[BT_SLIM7_RX].sample_rate = SAMPLING_RATE_8KHZ; break; } pr_debug("%s: sample rates: slim7_rx = %d, value = %d\n", __func__, bt_fm_cfg[BT_SLIM7].sample_rate, bt_fm_cfg[BT_SLIM7_RX].sample_rate, ucontrol->value.enumerated.item[0]); return 0; } static int msm_bt_sample_rate_tx_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (bt_fm_cfg[BT_SLIM7_TX].sample_rate) { case SAMPLING_RATE_48KHZ: ucontrol->value.integer.value[0] = 2; break; case SAMPLING_RATE_16KHZ: ucontrol->value.integer.value[0] = 1; break; case SAMPLING_RATE_8KHZ: default: ucontrol->value.integer.value[0] = 0; break; } pr_debug("%s: sample rate = %d", __func__, bt_fm_cfg[BT_SLIM7_TX].sample_rate); return 0; } static int msm_bt_sample_rate_tx_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (ucontrol->value.integer.value[0]) { case 1: bt_fm_cfg[BT_SLIM7_TX].sample_rate = SAMPLING_RATE_16KHZ; break; case 2: bt_fm_cfg[BT_SLIM7_TX].sample_rate = SAMPLING_RATE_48KHZ; break; case 0: default: bt_fm_cfg[BT_SLIM7_TX].sample_rate = SAMPLING_RATE_8KHZ; break; } pr_debug("%s: sample rates: slim7_tx = %d, value = %d\n", __func__, bt_fm_cfg[BT_SLIM7_TX].sample_rate, ucontrol->value.enumerated.item[0]); return 0; Loading Loading @@ -902,6 +1005,12 @@ static const struct snd_kcontrol_new msm_snd_controls[] = { 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), }; static const struct snd_kcontrol_new msm_sdw_controls[] = { Loading Loading
sound/soc/msm/sdm660-external.c +103 −1 Original line number Diff line number Diff line /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -140,6 +140,10 @@ static char const *slim_sample_rate_text[] = {"KHZ_8", "KHZ_16", "KHZ_192", "KHZ_352P8", "KHZ_384"}; static const char *const spk_function_text[] = {"Off", "On"}; static char const *bt_sample_rate_text[] = {"KHZ_8", "KHZ_16", "KHZ_48"}; static char const *bt_sample_rate_rx_text[] = {"KHZ_8", "KHZ_16", "KHZ_48"}; static char const *bt_sample_rate_tx_text[] = {"KHZ_8", "KHZ_16", "KHZ_48"}; static SOC_ENUM_SINGLE_EXT_DECL(spk_func_en, spk_function_text); static SOC_ENUM_SINGLE_EXT_DECL(slim_0_rx_chs, slim_rx_ch_text); Loading @@ -159,6 +163,9 @@ static SOC_ENUM_SINGLE_EXT_DECL(slim_0_tx_sample_rate, slim_sample_rate_text); static SOC_ENUM_SINGLE_EXT_DECL(slim_5_rx_sample_rate, slim_sample_rate_text); static SOC_ENUM_SINGLE_EXT_DECL(slim_6_rx_sample_rate, slim_sample_rate_text); static SOC_ENUM_SINGLE_EXT_DECL(bt_sample_rate, bt_sample_rate_text); static SOC_ENUM_SINGLE_EXT_DECL(bt_sample_rate_rx, bt_sample_rate_rx_text); static SOC_ENUM_SINGLE_EXT_DECL(bt_sample_rate_tx, bt_sample_rate_tx_text); static int slim_get_sample_rate_val(int sample_rate) { Loading Loading @@ -374,6 +381,95 @@ static int msm_bt_sample_rate_put(struct snd_kcontrol *kcontrol, return 0; } static int msm_bt_sample_rate_rx_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (slim_rx_cfg[SLIM_RX_7].sample_rate) { case SAMPLING_RATE_48KHZ: ucontrol->value.integer.value[0] = 2; break; case SAMPLING_RATE_16KHZ: ucontrol->value.integer.value[0] = 1; break; case SAMPLING_RATE_8KHZ: default: ucontrol->value.integer.value[0] = 0; break; } pr_debug("%s: sample rate = %d", __func__, slim_rx_cfg[SLIM_RX_7].sample_rate); return 0; } static int msm_bt_sample_rate_rx_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (ucontrol->value.integer.value[0]) { case 1: slim_rx_cfg[SLIM_RX_7].sample_rate = SAMPLING_RATE_16KHZ; break; case 2: slim_rx_cfg[SLIM_RX_7].sample_rate = SAMPLING_RATE_48KHZ; break; case 0: default: slim_rx_cfg[SLIM_RX_7].sample_rate = SAMPLING_RATE_8KHZ; break; } pr_debug("%s: sample rates: slim7_rx = %d, value = %d\n", __func__, slim_rx_cfg[SLIM_RX_7].sample_rate, ucontrol->value.enumerated.item[0]); return 0; } static int msm_bt_sample_rate_tx_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (slim_tx_cfg[SLIM_TX_7].sample_rate) { case SAMPLING_RATE_48KHZ: ucontrol->value.integer.value[0] = 2; break; case SAMPLING_RATE_16KHZ: ucontrol->value.integer.value[0] = 1; break; case SAMPLING_RATE_8KHZ: default: ucontrol->value.integer.value[0] = 0; break; } pr_debug("%s: sample rate = %d", __func__, slim_tx_cfg[SLIM_TX_7].sample_rate); return 0; } static int msm_bt_sample_rate_tx_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (ucontrol->value.integer.value[0]) { case 1: slim_tx_cfg[SLIM_TX_7].sample_rate = SAMPLING_RATE_16KHZ; break; case 2: slim_tx_cfg[SLIM_TX_7].sample_rate = SAMPLING_RATE_48KHZ; break; case 0: default: slim_tx_cfg[SLIM_TX_7].sample_rate = SAMPLING_RATE_8KHZ; break; } pr_debug("%s: sample rates: slim7_tx = %d, value = %d\n", __func__, slim_tx_cfg[SLIM_TX_7].sample_rate, ucontrol->value.enumerated.item[0]); return 0; } static int slim_rx_sample_rate_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { Loading Loading @@ -745,6 +841,12 @@ static const struct snd_kcontrol_new msm_snd_controls[] = { 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), }; static int msm_slim_get_ch_from_beid(int32_t be_id) Loading
sound/soc/msm/sdm660-internal.c +121 −12 Original line number Diff line number Diff line /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -44,7 +44,8 @@ enum { }; enum { BT_SLIM7, BT_SLIM7_RX, BT_SLIM7_TX, FM_SLIM8, SLIM_MAX, }; Loading Loading @@ -138,7 +139,8 @@ static struct dev_config int_mi2s_cfg[] = { }; static struct dev_config bt_fm_cfg[] = { [BT_SLIM7] = {SAMPLING_RATE_8KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, [BT_SLIM7_RX] = {SAMPLING_RATE_8KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, [BT_SLIM7_TX] = {SAMPLING_RATE_8KHZ, SNDRV_PCM_FORMAT_S16_LE, 1}, [FM_SLIM8] = {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 2}, }; Loading @@ -151,6 +153,8 @@ static const char *const int_mi2s_tx_ch_text[] = {"One", "Two", static char const *bit_format_text[] = {"S16_LE", "S24_LE", "S24_3LE"}; static const char *const loopback_mclk_text[] = {"DISABLE", "ENABLE"}; static char const *bt_sample_rate_text[] = {"KHZ_8", "KHZ_16", "KHZ_48"}; static char const *bt_sample_rate_rx_text[] = {"KHZ_8", "KHZ_16", "KHZ_48"}; static char const *bt_sample_rate_tx_text[] = {"KHZ_8", "KHZ_16", "KHZ_48"}; static SOC_ENUM_SINGLE_EXT_DECL(int0_mi2s_rx_sample_rate, int_mi2s_rate_text); static SOC_ENUM_SINGLE_EXT_DECL(int0_mi2s_rx_chs, int_mi2s_ch_text); Loading @@ -167,6 +171,8 @@ static SOC_ENUM_SINGLE_EXT_DECL(int4_mi2s_rx_format, bit_format_text); static SOC_ENUM_SINGLE_EXT_DECL(int5_mi2s_tx_chs, int_mi2s_ch_text); static SOC_ENUM_SINGLE_EXT_DECL(loopback_mclk_en, loopback_mclk_text); static SOC_ENUM_SINGLE_EXT_DECL(bt_sample_rate, bt_sample_rate_text); static SOC_ENUM_SINGLE_EXT_DECL(bt_sample_rate_rx, bt_sample_rate_rx_text); static SOC_ENUM_SINGLE_EXT_DECL(bt_sample_rate_tx, bt_sample_rate_tx_text); static int msm_dmic_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event); Loading Loading @@ -624,12 +630,18 @@ static int msm_btfm_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, switch (dai_link->be_id) { case MSM_BACKEND_DAI_SLIMBUS_7_RX: param_set_mask(params, SNDRV_PCM_HW_PARAM_FORMAT, bt_fm_cfg[BT_SLIM7_RX].bit_format); rate->min = rate->max = bt_fm_cfg[BT_SLIM7_RX].sample_rate; channels->min = channels->max = bt_fm_cfg[BT_SLIM7_RX].channels; break; case MSM_BACKEND_DAI_SLIMBUS_7_TX: param_set_mask(params, SNDRV_PCM_HW_PARAM_FORMAT, bt_fm_cfg[BT_SLIM7].bit_format); rate->min = rate->max = bt_fm_cfg[BT_SLIM7].sample_rate; bt_fm_cfg[BT_SLIM7_TX].bit_format); rate->min = rate->max = bt_fm_cfg[BT_SLIM7_TX].sample_rate; channels->min = channels->max = bt_fm_cfg[BT_SLIM7].channels; bt_fm_cfg[BT_SLIM7_TX].channels; break; case MSM_BACKEND_DAI_SLIMBUS_8_TX: Loading Loading @@ -834,7 +846,7 @@ static int msm_bt_sample_rate_get(struct snd_kcontrol *kcontrol, * when used for BT_SCO use case. Return either Rx or Tx sample rate * value. */ switch (bt_fm_cfg[BT_SLIM7].sample_rate) { switch (bt_fm_cfg[BT_SLIM7_RX].sample_rate) { case SAMPLING_RATE_48KHZ: ucontrol->value.integer.value[0] = 2; break; Loading @@ -847,7 +859,7 @@ static int msm_bt_sample_rate_get(struct snd_kcontrol *kcontrol, break; } pr_debug("%s: sample rate = %d", __func__, bt_fm_cfg[BT_SLIM7].sample_rate); bt_fm_cfg[BT_SLIM7_RX].sample_rate); return 0; } Loading @@ -857,19 +869,110 @@ static int msm_bt_sample_rate_put(struct snd_kcontrol *kcontrol, { switch (ucontrol->value.integer.value[0]) { case 1: bt_fm_cfg[BT_SLIM7].sample_rate = SAMPLING_RATE_16KHZ; bt_fm_cfg[BT_SLIM7_RX].sample_rate = SAMPLING_RATE_16KHZ; bt_fm_cfg[BT_SLIM7_TX].sample_rate = SAMPLING_RATE_16KHZ; break; case 2: bt_fm_cfg[BT_SLIM7_RX].sample_rate = SAMPLING_RATE_48KHZ; bt_fm_cfg[BT_SLIM7_TX].sample_rate = SAMPLING_RATE_48KHZ; break; case 0: default: bt_fm_cfg[BT_SLIM7_RX].sample_rate = SAMPLING_RATE_8KHZ; bt_fm_cfg[BT_SLIM7_TX].sample_rate = SAMPLING_RATE_8KHZ; break; } pr_debug("%s: sample rates: slim7_rx = %d, value = %d\n", __func__, bt_fm_cfg[BT_SLIM7_RX].sample_rate, ucontrol->value.enumerated.item[0]); return 0; } static int msm_bt_sample_rate_rx_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (bt_fm_cfg[BT_SLIM7_RX].sample_rate) { case SAMPLING_RATE_48KHZ: ucontrol->value.integer.value[0] = 2; break; case SAMPLING_RATE_16KHZ: ucontrol->value.integer.value[0] = 1; break; case SAMPLING_RATE_8KHZ: default: ucontrol->value.integer.value[0] = 0; break; } pr_debug("%s: sample rate = %d", __func__, bt_fm_cfg[BT_SLIM7_RX].sample_rate); return 0; } static int msm_bt_sample_rate_rx_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (ucontrol->value.integer.value[0]) { case 1: bt_fm_cfg[BT_SLIM7_RX].sample_rate = SAMPLING_RATE_16KHZ; break; case 2: bt_fm_cfg[BT_SLIM7].sample_rate = SAMPLING_RATE_48KHZ; bt_fm_cfg[BT_SLIM7_RX].sample_rate = SAMPLING_RATE_48KHZ; break; case 0: default: bt_fm_cfg[BT_SLIM7].sample_rate = SAMPLING_RATE_8KHZ; bt_fm_cfg[BT_SLIM7_RX].sample_rate = SAMPLING_RATE_8KHZ; break; } pr_debug("%s: sample rates: slim7_rx = %d, value = %d\n", __func__, bt_fm_cfg[BT_SLIM7].sample_rate, bt_fm_cfg[BT_SLIM7_RX].sample_rate, ucontrol->value.enumerated.item[0]); return 0; } static int msm_bt_sample_rate_tx_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (bt_fm_cfg[BT_SLIM7_TX].sample_rate) { case SAMPLING_RATE_48KHZ: ucontrol->value.integer.value[0] = 2; break; case SAMPLING_RATE_16KHZ: ucontrol->value.integer.value[0] = 1; break; case SAMPLING_RATE_8KHZ: default: ucontrol->value.integer.value[0] = 0; break; } pr_debug("%s: sample rate = %d", __func__, bt_fm_cfg[BT_SLIM7_TX].sample_rate); return 0; } static int msm_bt_sample_rate_tx_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { switch (ucontrol->value.integer.value[0]) { case 1: bt_fm_cfg[BT_SLIM7_TX].sample_rate = SAMPLING_RATE_16KHZ; break; case 2: bt_fm_cfg[BT_SLIM7_TX].sample_rate = SAMPLING_RATE_48KHZ; break; case 0: default: bt_fm_cfg[BT_SLIM7_TX].sample_rate = SAMPLING_RATE_8KHZ; break; } pr_debug("%s: sample rates: slim7_tx = %d, value = %d\n", __func__, bt_fm_cfg[BT_SLIM7_TX].sample_rate, ucontrol->value.enumerated.item[0]); return 0; Loading Loading @@ -902,6 +1005,12 @@ static const struct snd_kcontrol_new msm_snd_controls[] = { 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), }; static const struct snd_kcontrol_new msm_sdw_controls[] = { Loading