mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 15:11:48 -04:00
Merge "ASoC: msm: add proxy port and pcm backend in machine driver"
This commit is contained in:
commit
9bb5ce8e27
3 changed files with 121 additions and 22 deletions
|
|
@ -383,6 +383,11 @@ SND_SOC_DAILINK_DEFS(afe_pcm_rx,
|
|||
DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")),
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing")));
|
||||
|
||||
SND_SOC_DAILINK_DEFS(afe_pcm_rx1,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-q6-dev.226")),
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")),
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing")));
|
||||
|
||||
SND_SOC_DAILINK_DEFS(afe_pcm_tx,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-q6-dev.225")),
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")),
|
||||
|
|
|
|||
|
|
@ -295,10 +295,17 @@ static struct dev_config usb_tx_cfg = {
|
|||
.channels = 1,
|
||||
};
|
||||
|
||||
static struct dev_config proxy_rx_cfg = {
|
||||
.sample_rate = SAMPLING_RATE_48KHZ,
|
||||
.bit_format = SNDRV_PCM_FORMAT_S16_LE,
|
||||
.channels = 2,
|
||||
static struct dev_config proxy_rx_cfg[] = {
|
||||
{
|
||||
.sample_rate = SAMPLING_RATE_48KHZ,
|
||||
.bit_format = SNDRV_PCM_FORMAT_S16_LE,
|
||||
.channels = 2,
|
||||
},
|
||||
{
|
||||
.sample_rate = SAMPLING_RATE_48KHZ,
|
||||
.bit_format = SNDRV_PCM_FORMAT_S16_LE,
|
||||
.channels = 2,
|
||||
}
|
||||
};
|
||||
|
||||
/* Default configuration of MI2S channels */
|
||||
|
|
@ -1293,9 +1300,16 @@ static int ext_disp_rx_sample_rate_put(struct snd_kcontrol *kcontrol,
|
|||
static int proxy_rx_ch_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
pr_debug("%s: proxy_rx channels = %d\n",
|
||||
__func__, proxy_rx_cfg.channels);
|
||||
ucontrol->value.integer.value[0] = proxy_rx_cfg.channels - 2;
|
||||
if(strnstr(kcontrol->id.name, "RX1", sizeof(kcontrol->id.name))) {
|
||||
ucontrol->value.integer.value[0] = proxy_rx_cfg[1].channels - 2;
|
||||
pr_debug("%s: proxy_rx1 channels = %d\n",
|
||||
__func__, proxy_rx_cfg[1].channels);
|
||||
}
|
||||
else {
|
||||
ucontrol->value.integer.value[0] = proxy_rx_cfg[0].channels - 2;
|
||||
pr_debug("%s: proxy_rx channels = %d\n",
|
||||
__func__, proxy_rx_cfg[0].channels);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1303,9 +1317,16 @@ static int proxy_rx_ch_get(struct snd_kcontrol *kcontrol,
|
|||
static int proxy_rx_ch_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
proxy_rx_cfg.channels = ucontrol->value.integer.value[0] + 2;
|
||||
pr_debug("%s: proxy_rx channels = %d\n",
|
||||
__func__, proxy_rx_cfg.channels);
|
||||
if(strnstr(kcontrol->id.name, "RX1", sizeof(kcontrol->id.name))) {
|
||||
proxy_rx_cfg[1].channels = ucontrol->value.integer.value[0] + 2;
|
||||
pr_debug("%s: proxy_rx1 channels = %d\n",
|
||||
__func__, proxy_rx_cfg[1].channels);
|
||||
}
|
||||
else {
|
||||
proxy_rx_cfg[0].channels = ucontrol->value.integer.value[0] + 2;
|
||||
pr_debug("%s: proxy_rx channels = %d\n",
|
||||
__func__, proxy_rx_cfg[0].channels);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -2630,6 +2651,8 @@ static const struct snd_kcontrol_new msm_snd_controls[] = {
|
|||
ext_disp_rx_ch_get, ext_disp_rx_ch_put),
|
||||
SOC_ENUM_EXT("PROXY_RX Channels", proxy_rx_chs,
|
||||
proxy_rx_ch_get, proxy_rx_ch_put),
|
||||
SOC_ENUM_EXT("PROXY_RX1 Channels", proxy_rx_chs,
|
||||
proxy_rx_ch_get, proxy_rx_ch_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,
|
||||
|
|
@ -3367,7 +3390,12 @@ static int msm_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
|
|||
break;
|
||||
|
||||
case MSM_BACKEND_DAI_AFE_PCM_RX:
|
||||
channels->min = channels->max = proxy_rx_cfg.channels;
|
||||
channels->min = channels->max = proxy_rx_cfg[0].channels;
|
||||
rate->min = rate->max = SAMPLING_RATE_48KHZ;
|
||||
break;
|
||||
|
||||
case MSM_BACKEND_DAI_AFE_PCM_RX1:
|
||||
channels->min = channels->max = proxy_rx_cfg[1].channels;
|
||||
rate->min = rate->max = SAMPLING_RATE_48KHZ;
|
||||
break;
|
||||
|
||||
|
|
@ -5835,6 +5863,13 @@ static struct snd_soc_dai_link msm_auto_fe_dai_links[] = {
|
|||
.id = MSM_FRONTEND_DAI_MULTIMEDIA34,
|
||||
SND_SOC_DAILINK_REG(multimedia34),
|
||||
},
|
||||
{
|
||||
.name = "MSM AFE-PCM TX1",
|
||||
.stream_name = "AFE-PROXY TX1",
|
||||
.dpcm_capture = 1,
|
||||
.ignore_suspend = 1,
|
||||
SND_SOC_DAILINK_REG(afepcm_tx1),
|
||||
},
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_link msm_custom_fe_dai_links[] = {
|
||||
|
|
@ -6561,6 +6596,18 @@ static struct snd_soc_dai_link msm_auto_be_dai_links[] = {
|
|||
.ignore_suspend = 1,
|
||||
SND_SOC_DAILINK_REG(quin_tdm_tx_7),
|
||||
},
|
||||
{
|
||||
.name = LPASS_BE_AFE_PCM_RX1,
|
||||
.stream_name = "AFE Playback1",
|
||||
.no_pcm = 1,
|
||||
.dpcm_playback = 1,
|
||||
.id = MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
.be_hw_params_fixup = msm_be_hw_params_fixup,
|
||||
/* this dainlink has playback support */
|
||||
.ignore_pmdown_time = 1,
|
||||
.ignore_suspend = 1,
|
||||
SND_SOC_DAILINK_REG(afe_pcm_rx1),
|
||||
},
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_link ext_disp_be_dai_link[] = {
|
||||
|
|
|
|||
|
|
@ -297,10 +297,17 @@ static struct dev_config usb_tx_cfg = {
|
|||
.channels = 1,
|
||||
};
|
||||
|
||||
static struct dev_config proxy_rx_cfg = {
|
||||
.sample_rate = SAMPLING_RATE_48KHZ,
|
||||
.bit_format = SNDRV_PCM_FORMAT_S16_LE,
|
||||
.channels = 2,
|
||||
static struct dev_config proxy_rx_cfg[] = {
|
||||
{
|
||||
.sample_rate = SAMPLING_RATE_48KHZ,
|
||||
.bit_format = SNDRV_PCM_FORMAT_S16_LE,
|
||||
.channels = 2,
|
||||
},
|
||||
{
|
||||
.sample_rate = SAMPLING_RATE_48KHZ,
|
||||
.bit_format = SNDRV_PCM_FORMAT_S16_LE,
|
||||
.channels = 2,
|
||||
}
|
||||
};
|
||||
|
||||
/* Default configuration of MI2S channels */
|
||||
|
|
@ -1296,9 +1303,16 @@ static int ext_disp_rx_sample_rate_put(struct snd_kcontrol *kcontrol,
|
|||
static int proxy_rx_ch_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
pr_debug("%s: proxy_rx channels = %d\n",
|
||||
__func__, proxy_rx_cfg.channels);
|
||||
ucontrol->value.integer.value[0] = proxy_rx_cfg.channels - 2;
|
||||
if(strnstr(kcontrol->id.name, "RX1", sizeof(kcontrol->id.name))) {
|
||||
ucontrol->value.integer.value[0] = proxy_rx_cfg[1].channels - 2;
|
||||
pr_debug("%s: proxy_rx1 channels = %d\n",
|
||||
__func__, proxy_rx_cfg[1].channels);
|
||||
}
|
||||
else {
|
||||
ucontrol->value.integer.value[0] = proxy_rx_cfg[0].channels - 2;
|
||||
pr_debug("%s: proxy_rx channels = %d\n",
|
||||
__func__, proxy_rx_cfg[0].channels);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1306,9 +1320,16 @@ static int proxy_rx_ch_get(struct snd_kcontrol *kcontrol,
|
|||
static int proxy_rx_ch_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
proxy_rx_cfg.channels = ucontrol->value.integer.value[0] + 2;
|
||||
pr_debug("%s: proxy_rx channels = %d\n",
|
||||
__func__, proxy_rx_cfg.channels);
|
||||
if(strnstr(kcontrol->id.name, "RX1", sizeof(kcontrol->id.name))) {
|
||||
proxy_rx_cfg[1].channels = ucontrol->value.integer.value[0] + 2;
|
||||
pr_debug("%s: proxy_rx1 channels = %d\n",
|
||||
__func__, proxy_rx_cfg[1].channels);
|
||||
}
|
||||
else {
|
||||
proxy_rx_cfg[0].channels = ucontrol->value.integer.value[0] + 2;
|
||||
pr_debug("%s: proxy_rx channels = %d\n",
|
||||
__func__, proxy_rx_cfg[0].channels);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -2633,6 +2654,8 @@ static const struct snd_kcontrol_new msm_snd_controls[] = {
|
|||
ext_disp_rx_ch_get, ext_disp_rx_ch_put),
|
||||
SOC_ENUM_EXT("PROXY_RX Channels", proxy_rx_chs,
|
||||
proxy_rx_ch_get, proxy_rx_ch_put),
|
||||
SOC_ENUM_EXT("PROXY_RX1 Channels", proxy_rx_chs,
|
||||
proxy_rx_ch_get, proxy_rx_ch_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,
|
||||
|
|
@ -3370,7 +3393,12 @@ static int msm_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
|
|||
break;
|
||||
|
||||
case MSM_BACKEND_DAI_AFE_PCM_RX:
|
||||
channels->min = channels->max = proxy_rx_cfg.channels;
|
||||
channels->min = channels->max = proxy_rx_cfg[0].channels;
|
||||
rate->min = rate->max = SAMPLING_RATE_48KHZ;
|
||||
break;
|
||||
|
||||
case MSM_BACKEND_DAI_AFE_PCM_RX1:
|
||||
channels->min = channels->max = proxy_rx_cfg[1].channels;
|
||||
rate->min = rate->max = SAMPLING_RATE_48KHZ;
|
||||
break;
|
||||
|
||||
|
|
@ -5832,6 +5860,13 @@ static struct snd_soc_dai_link msm_auto_fe_dai_links[] = {
|
|||
.id = MSM_FRONTEND_DAI_MULTIMEDIA34,
|
||||
SND_SOC_DAILINK_REG(multimedia34),
|
||||
},
|
||||
{
|
||||
.name = "MSM AFE-PCM TX1",
|
||||
.stream_name = "AFE-PROXY TX1",
|
||||
.dpcm_capture = 1,
|
||||
.ignore_suspend = 1,
|
||||
SND_SOC_DAILINK_REG(afepcm_tx1),
|
||||
},
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_link msm_custom_fe_dai_links[] = {
|
||||
|
|
@ -6558,6 +6593,18 @@ static struct snd_soc_dai_link msm_auto_be_dai_links[] = {
|
|||
.ignore_suspend = 1,
|
||||
SND_SOC_DAILINK_REG(quin_tdm_tx_7),
|
||||
},
|
||||
{
|
||||
.name = LPASS_BE_AFE_PCM_RX1,
|
||||
.stream_name = "AFE Playback1",
|
||||
.no_pcm = 1,
|
||||
.dpcm_playback = 1,
|
||||
.id = MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
.be_hw_params_fixup = msm_be_hw_params_fixup,
|
||||
/* this dainlink has playback support */
|
||||
.ignore_pmdown_time = 1,
|
||||
.ignore_suspend = 1,
|
||||
SND_SOC_DAILINK_REG(afe_pcm_rx1),
|
||||
},
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_link ext_disp_be_dai_link[] = {
|
||||
|
|
|
|||
Loading…
Reference in a new issue