mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 08:07:32 -04:00
asoc: sm6150: add configuration for adaptive bitrate
Add mixer ctrls to independently configure TX and RX sample rates for BT RX and TX backends. Change-Id: I011d3bfb85448605717e2c1a20c19a2fc86dac3f Signed-off-by: Sharad Sangle <assangle@codeaurora.org>
This commit is contained in:
parent
53f339b53b
commit
493a1b3ea9
1 changed files with 136 additions and 0 deletions
136
asoc/sm6150.c
136
asoc/sm6150.c
|
|
@ -466,6 +466,12 @@ static char const *slim_sample_rate_text[] = {"KHZ_8", "KHZ_16",
|
|||
static char const *bt_sample_rate_text[] = {"KHZ_8", "KHZ_16",
|
||||
"KHZ_44P1", "KHZ_48",
|
||||
"KHZ_88P2", "KHZ_96"};
|
||||
static char const *bt_sample_rate_rx_text[] = {"KHZ_8", "KHZ_16",
|
||||
"KHZ_44P1", "KHZ_48",
|
||||
"KHZ_88P2", "KHZ_96"};
|
||||
static char const *bt_sample_rate_tx_text[] = {"KHZ_8", "KHZ_16",
|
||||
"KHZ_44P1", "KHZ_48",
|
||||
"KHZ_88P2", "KHZ_96"};
|
||||
static const char *const usb_ch_text[] = {"One", "Two", "Three", "Four",
|
||||
"Five", "Six", "Seven",
|
||||
"Eight"};
|
||||
|
|
@ -531,6 +537,8 @@ 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 SOC_ENUM_SINGLE_EXT_DECL(usb_rx_sample_rate, usb_sample_rate_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(usb_tx_sample_rate, usb_sample_rate_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(ext_disp_rx_sample_rate,
|
||||
|
|
@ -1192,7 +1200,129 @@ 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_96KHZ:
|
||||
ucontrol->value.integer.value[0] = 5;
|
||||
break;
|
||||
case SAMPLING_RATE_88P2KHZ:
|
||||
ucontrol->value.integer.value[0] = 4;
|
||||
break;
|
||||
case SAMPLING_RATE_48KHZ:
|
||||
ucontrol->value.integer.value[0] = 3;
|
||||
break;
|
||||
case SAMPLING_RATE_44P1KHZ:
|
||||
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 rx = %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_44P1KHZ;
|
||||
break;
|
||||
case 3:
|
||||
slim_rx_cfg[SLIM_RX_7].sample_rate = SAMPLING_RATE_48KHZ;
|
||||
break;
|
||||
case 4:
|
||||
slim_rx_cfg[SLIM_RX_7].sample_rate = SAMPLING_RATE_88P2KHZ;
|
||||
break;
|
||||
case 5:
|
||||
slim_rx_cfg[SLIM_RX_7].sample_rate = SAMPLING_RATE_96KHZ;
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
slim_rx_cfg[SLIM_RX_7].sample_rate = SAMPLING_RATE_8KHZ;
|
||||
break;
|
||||
}
|
||||
pr_debug("%s: sample rate: 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_96KHZ:
|
||||
ucontrol->value.integer.value[0] = 5;
|
||||
break;
|
||||
case SAMPLING_RATE_88P2KHZ:
|
||||
ucontrol->value.integer.value[0] = 4;
|
||||
break;
|
||||
case SAMPLING_RATE_48KHZ:
|
||||
ucontrol->value.integer.value[0] = 3;
|
||||
break;
|
||||
case SAMPLING_RATE_44P1KHZ:
|
||||
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 tx = %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_44P1KHZ;
|
||||
break;
|
||||
case 3:
|
||||
slim_tx_cfg[SLIM_TX_7].sample_rate = SAMPLING_RATE_48KHZ;
|
||||
break;
|
||||
case 4:
|
||||
slim_tx_cfg[SLIM_TX_7].sample_rate = SAMPLING_RATE_88P2KHZ;
|
||||
break;
|
||||
case 5:
|
||||
slim_tx_cfg[SLIM_TX_7].sample_rate = SAMPLING_RATE_96KHZ;
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
slim_tx_cfg[SLIM_TX_7].sample_rate = SAMPLING_RATE_8KHZ;
|
||||
break;
|
||||
}
|
||||
pr_debug("%s: sample rate: slim7_tx = %d, value = %d\n",
|
||||
__func__,
|
||||
slim_tx_cfg[SLIM_TX_7].sample_rate,
|
||||
ucontrol->value.enumerated.item[0]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
static int cdc_dma_get_port_idx(struct snd_kcontrol *kcontrol)
|
||||
{
|
||||
int idx = 0;
|
||||
|
|
@ -3647,6 +3777,12 @@ static const struct snd_kcontrol_new msm_common_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),
|
||||
SOC_ENUM_EXT("VI_FEED_TX Channels", vi_feed_tx_chs,
|
||||
msm_vi_feed_tx_ch_get, msm_vi_feed_tx_ch_put),
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue