ASoC: msm: add support for TERT_TDM_RX_4 BE
Add TERT_TDM_RX_4 BE DAI link into automotive sound card DAI link array. Add kcontrols for channel and bit format configuration for TERT_TDM_RX_4 BE. CRs-fixed: 2018097 Change-Id: I1fef2f6a799aeeee0752f3ae2462dcd26a1d66c9 Signed-off-by: Honghao Liu <honghaol@codeaurora.org>
This commit is contained in:
parent
bdee9f8749
commit
8441629a01
1 changed files with 78 additions and 0 deletions
|
@ -68,6 +68,7 @@ static int msm_tert_tdm_rx_0_ch = 2; /* ICC STREAM */
|
||||||
static int msm_tert_tdm_rx_1_ch = 2;
|
static int msm_tert_tdm_rx_1_ch = 2;
|
||||||
static int msm_tert_tdm_rx_2_ch = 2;
|
static int msm_tert_tdm_rx_2_ch = 2;
|
||||||
static int msm_tert_tdm_rx_3_ch = 2;
|
static int msm_tert_tdm_rx_3_ch = 2;
|
||||||
|
static int msm_tert_tdm_rx_4_ch;
|
||||||
|
|
||||||
static int msm_tert_tdm_tx_0_ch = 6; /* EC_REF1-EC_REF6(6 CHAN) */
|
static int msm_tert_tdm_tx_0_ch = 6; /* EC_REF1-EC_REF6(6 CHAN) */
|
||||||
static int msm_tert_tdm_tx_1_ch = 1;
|
static int msm_tert_tdm_tx_1_ch = 1;
|
||||||
|
@ -94,6 +95,7 @@ static int msm_tert_tdm_rx_0_bit_format = SNDRV_PCM_FORMAT_S16_LE;
|
||||||
static int msm_tert_tdm_rx_1_bit_format = SNDRV_PCM_FORMAT_S16_LE;
|
static int msm_tert_tdm_rx_1_bit_format = SNDRV_PCM_FORMAT_S16_LE;
|
||||||
static int msm_tert_tdm_rx_2_bit_format = SNDRV_PCM_FORMAT_S16_LE;
|
static int msm_tert_tdm_rx_2_bit_format = SNDRV_PCM_FORMAT_S16_LE;
|
||||||
static int msm_tert_tdm_rx_3_bit_format = SNDRV_PCM_FORMAT_S16_LE;
|
static int msm_tert_tdm_rx_3_bit_format = SNDRV_PCM_FORMAT_S16_LE;
|
||||||
|
static int msm_tert_tdm_rx_4_bit_format = SNDRV_PCM_FORMAT_S16_LE;
|
||||||
|
|
||||||
static int msm_tert_tdm_tx_0_bit_format = SNDRV_PCM_FORMAT_S16_LE;
|
static int msm_tert_tdm_tx_0_bit_format = SNDRV_PCM_FORMAT_S16_LE;
|
||||||
static int msm_tert_tdm_tx_1_bit_format = SNDRV_PCM_FORMAT_S16_LE;
|
static int msm_tert_tdm_tx_1_bit_format = SNDRV_PCM_FORMAT_S16_LE;
|
||||||
|
@ -777,6 +779,24 @@ static int msm_tert_tdm_rx_3_ch_put(struct snd_kcontrol *kcontrol,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int msm_tert_tdm_rx_4_ch_get(struct snd_kcontrol *kcontrol,
|
||||||
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
|
{
|
||||||
|
pr_debug("%s: msm_tert_tdm_rx_4_ch = %d\n", __func__,
|
||||||
|
msm_tert_tdm_rx_4_ch);
|
||||||
|
ucontrol->value.integer.value[0] = msm_tert_tdm_rx_4_ch - 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int msm_tert_tdm_rx_4_ch_put(struct snd_kcontrol *kcontrol,
|
||||||
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
|
{
|
||||||
|
msm_tert_tdm_rx_4_ch = ucontrol->value.integer.value[0] + 1;
|
||||||
|
pr_debug("%s: msm_tert_tdm_rx_4_ch = %d\n", __func__,
|
||||||
|
msm_tert_tdm_rx_4_ch);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int msm_tert_tdm_tx_0_ch_get(struct snd_kcontrol *kcontrol,
|
static int msm_tert_tdm_tx_0_ch_get(struct snd_kcontrol *kcontrol,
|
||||||
struct snd_ctl_elem_value *ucontrol)
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
{
|
{
|
||||||
|
@ -1265,6 +1285,40 @@ static int msm_tert_tdm_rx_3_bit_format_put(struct snd_kcontrol *kcontrol,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int msm_tert_tdm_rx_4_bit_format_get(struct snd_kcontrol *kcontrol,
|
||||||
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
|
{
|
||||||
|
switch (msm_tert_tdm_rx_4_bit_format) {
|
||||||
|
case SNDRV_PCM_FORMAT_S24_LE:
|
||||||
|
ucontrol->value.integer.value[0] = 1;
|
||||||
|
break;
|
||||||
|
case SNDRV_PCM_FORMAT_S16_LE:
|
||||||
|
default:
|
||||||
|
ucontrol->value.integer.value[0] = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pr_debug("%s: msm_tert_tdm_rx_4_bit_format = %ld\n",
|
||||||
|
__func__, ucontrol->value.integer.value[0]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int msm_tert_tdm_rx_4_bit_format_put(struct snd_kcontrol *kcontrol,
|
||||||
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
|
{
|
||||||
|
switch (ucontrol->value.integer.value[0]) {
|
||||||
|
case 1:
|
||||||
|
msm_tert_tdm_rx_4_bit_format = SNDRV_PCM_FORMAT_S24_LE;
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
default:
|
||||||
|
msm_tert_tdm_rx_4_bit_format = SNDRV_PCM_FORMAT_S16_LE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pr_debug("%s: msm_tert_tdm_rx_4_bit_format = %d\n",
|
||||||
|
__func__, msm_tert_tdm_rx_4_bit_format);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int msm_tert_tdm_tx_0_bit_format_get(struct snd_kcontrol *kcontrol,
|
static int msm_tert_tdm_tx_0_bit_format_get(struct snd_kcontrol *kcontrol,
|
||||||
struct snd_ctl_elem_value *ucontrol)
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
{
|
{
|
||||||
|
@ -1961,6 +2015,11 @@ static int msm_tdm_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
|
||||||
param_set_mask(params, SNDRV_PCM_HW_PARAM_FORMAT,
|
param_set_mask(params, SNDRV_PCM_HW_PARAM_FORMAT,
|
||||||
msm_tert_tdm_rx_3_bit_format);
|
msm_tert_tdm_rx_3_bit_format);
|
||||||
break;
|
break;
|
||||||
|
case AFE_PORT_ID_TERTIARY_TDM_RX_4:
|
||||||
|
channels->min = channels->max = msm_tert_tdm_rx_4_ch;
|
||||||
|
param_set_mask(params, SNDRV_PCM_HW_PARAM_FORMAT,
|
||||||
|
msm_tert_tdm_rx_4_bit_format);
|
||||||
|
break;
|
||||||
case AFE_PORT_ID_TERTIARY_TDM_TX:
|
case AFE_PORT_ID_TERTIARY_TDM_TX:
|
||||||
channels->min = channels->max = msm_tert_tdm_tx_0_ch;
|
channels->min = channels->max = msm_tert_tdm_tx_0_ch;
|
||||||
param_set_mask(params, SNDRV_PCM_HW_PARAM_FORMAT,
|
param_set_mask(params, SNDRV_PCM_HW_PARAM_FORMAT,
|
||||||
|
@ -2547,6 +2606,8 @@ static const struct snd_kcontrol_new msm_snd_controls[] = {
|
||||||
msm_tert_tdm_rx_2_ch_get, msm_tert_tdm_rx_2_ch_put),
|
msm_tert_tdm_rx_2_ch_get, msm_tert_tdm_rx_2_ch_put),
|
||||||
SOC_ENUM_EXT("TERT_TDM_RX_3 Channels", msm_snd_enum[5],
|
SOC_ENUM_EXT("TERT_TDM_RX_3 Channels", msm_snd_enum[5],
|
||||||
msm_tert_tdm_rx_3_ch_get, msm_tert_tdm_rx_3_ch_put),
|
msm_tert_tdm_rx_3_ch_get, msm_tert_tdm_rx_3_ch_put),
|
||||||
|
SOC_ENUM_EXT("TERT_TDM_RX_4 Channels", msm_snd_enum[5],
|
||||||
|
msm_tert_tdm_rx_4_ch_get, msm_tert_tdm_rx_4_ch_put),
|
||||||
SOC_ENUM_EXT("TERT_TDM_TX_0 Channels", msm_snd_enum[5],
|
SOC_ENUM_EXT("TERT_TDM_TX_0 Channels", msm_snd_enum[5],
|
||||||
msm_tert_tdm_tx_0_ch_get, msm_tert_tdm_tx_0_ch_put),
|
msm_tert_tdm_tx_0_ch_get, msm_tert_tdm_tx_0_ch_put),
|
||||||
SOC_ENUM_EXT("TERT_TDM_TX_1 Channels", msm_snd_enum[5],
|
SOC_ENUM_EXT("TERT_TDM_TX_1 Channels", msm_snd_enum[5],
|
||||||
|
@ -2595,6 +2656,9 @@ static const struct snd_kcontrol_new msm_snd_controls[] = {
|
||||||
SOC_ENUM_EXT("TERT_TDM_RX_3 Bit Format", msm_snd_enum[6],
|
SOC_ENUM_EXT("TERT_TDM_RX_3 Bit Format", msm_snd_enum[6],
|
||||||
msm_tert_tdm_rx_3_bit_format_get,
|
msm_tert_tdm_rx_3_bit_format_get,
|
||||||
msm_tert_tdm_rx_3_bit_format_put),
|
msm_tert_tdm_rx_3_bit_format_put),
|
||||||
|
SOC_ENUM_EXT("TERT_TDM_RX_4 Bit Format", msm_snd_enum[6],
|
||||||
|
msm_tert_tdm_rx_4_bit_format_get,
|
||||||
|
msm_tert_tdm_rx_4_bit_format_put),
|
||||||
SOC_ENUM_EXT("TERT_TDM_TX_0 Bit Format", msm_snd_enum[6],
|
SOC_ENUM_EXT("TERT_TDM_TX_0 Bit Format", msm_snd_enum[6],
|
||||||
msm_tert_tdm_tx_0_bit_format_get,
|
msm_tert_tdm_tx_0_bit_format_get,
|
||||||
msm_tert_tdm_tx_0_bit_format_put),
|
msm_tert_tdm_tx_0_bit_format_put),
|
||||||
|
@ -3920,6 +3984,20 @@ static struct snd_soc_dai_link apq8096_auto_be_dai_links[] = {
|
||||||
.ops = &apq8096_tdm_be_ops,
|
.ops = &apq8096_tdm_be_ops,
|
||||||
.ignore_suspend = 1,
|
.ignore_suspend = 1,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = LPASS_BE_TERT_TDM_RX_4,
|
||||||
|
.stream_name = "Tertiary TDM4 Playback",
|
||||||
|
.cpu_dai_name = "msm-dai-q6-tdm.36904",
|
||||||
|
.platform_name = "msm-pcm-routing",
|
||||||
|
.codec_name = "msm-stub-codec.1",
|
||||||
|
.codec_dai_name = "msm-stub-rx",
|
||||||
|
.no_pcm = 1,
|
||||||
|
.dpcm_playback = 1,
|
||||||
|
.be_id = MSM_BACKEND_DAI_TERT_TDM_RX_4,
|
||||||
|
.be_hw_params_fixup = msm_tdm_be_hw_params_fixup,
|
||||||
|
.ops = &apq8096_tdm_be_ops,
|
||||||
|
.ignore_suspend = 1,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.name = LPASS_BE_TERT_TDM_TX_0,
|
.name = LPASS_BE_TERT_TDM_TX_0,
|
||||||
.stream_name = "Tertiary TDM0 Capture",
|
.stream_name = "Tertiary TDM0 Capture",
|
||||||
|
|
Loading…
Add table
Reference in a new issue