ASoC: msm: Add switch for slimbus 0 Rx hostless mode
FM Radio playback session needs to be closed and re-opened for every device switch session. Add a new switch control to avoid this so that switch can be enabled and disabled instead of session closure and reopen. Signed-off-by: Sriranjan Srikantam <cssrika@codeaurora.org>
This commit is contained in:
committed by
Bryan Huntsman
parent
6691f04641
commit
a4969dd3a8
@@ -52,6 +52,8 @@ enum {
|
|||||||
AUDIO_PORT_MIXER_MAX,
|
AUDIO_PORT_MIXER_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int fm_switch_enable;
|
||||||
|
|
||||||
/* Tx mixer session is stored based on BE DAI ID
|
/* Tx mixer session is stored based on BE DAI ID
|
||||||
* Need to map to actual AFE port ID since AFE port
|
* Need to map to actual AFE port ID since AFE port
|
||||||
* ID can get really large.
|
* ID can get really large.
|
||||||
@@ -315,6 +317,30 @@ static int msm_routing_put_voice_mixer(struct snd_kcontrol *kcontrol,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int msm_routing_get_switch_mixer(struct snd_kcontrol *kcontrol,
|
||||||
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
|
{
|
||||||
|
ucontrol->value.integer.value[0] = fm_switch_enable;
|
||||||
|
pr_debug("%s: FM Switch enable %ld\n", __func__,
|
||||||
|
ucontrol->value.integer.value[0]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int msm_routing_put_switch_mixer(struct snd_kcontrol *kcontrol,
|
||||||
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
|
{
|
||||||
|
struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol);
|
||||||
|
|
||||||
|
pr_debug("%s: FM Switch enable %ld\n", __func__,
|
||||||
|
ucontrol->value.integer.value[0]);
|
||||||
|
if (ucontrol->value.integer.value[0])
|
||||||
|
snd_soc_dapm_mixer_update_power(widget, kcontrol, 1);
|
||||||
|
else
|
||||||
|
snd_soc_dapm_mixer_update_power(widget, kcontrol, 0);
|
||||||
|
fm_switch_enable = ucontrol->value.integer.value[0];
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int msm_routing_get_port_mixer(struct snd_kcontrol *kcontrol,
|
static int msm_routing_get_port_mixer(struct snd_kcontrol *kcontrol,
|
||||||
struct snd_ctl_elem_value *ucontrol)
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
{
|
{
|
||||||
@@ -482,6 +508,11 @@ static const struct snd_kcontrol_new sbus_0_rx_port_mixer_controls[] = {
|
|||||||
msm_routing_put_port_mixer),
|
msm_routing_put_port_mixer),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct snd_kcontrol_new fm_switch_mixer_controls =
|
||||||
|
SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
|
||||||
|
0, 1, 0, msm_routing_get_switch_mixer,
|
||||||
|
msm_routing_put_switch_mixer);
|
||||||
|
|
||||||
static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
|
static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
|
||||||
/* Frontend AIF */
|
/* Frontend AIF */
|
||||||
/* Widget name equals to Front-End DAI name<Need confirmation>,
|
/* Widget name equals to Front-End DAI name<Need confirmation>,
|
||||||
@@ -519,7 +550,9 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
|
|||||||
0, 0, 0 , 0),
|
0, 0, 0 , 0),
|
||||||
SND_SOC_DAPM_AIF_IN("INT_FM_TX", "Internal FM Capture",
|
SND_SOC_DAPM_AIF_IN("INT_FM_TX", "Internal FM Capture",
|
||||||
0, 0, 0, 0),
|
0, 0, 0, 0),
|
||||||
|
/* Switch Definitions */
|
||||||
|
SND_SOC_DAPM_SWITCH("SBUS_0_RX", SND_SOC_NOPM, 0, 0,
|
||||||
|
&fm_switch_mixer_controls),
|
||||||
/* Mixer definitions */
|
/* Mixer definitions */
|
||||||
SND_SOC_DAPM_MIXER("PRI_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
|
SND_SOC_DAPM_MIXER("PRI_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
|
||||||
pri_i2s_rx_mixer_controls, ARRAY_SIZE(pri_i2s_rx_mixer_controls)),
|
pri_i2s_rx_mixer_controls, ARRAY_SIZE(pri_i2s_rx_mixer_controls)),
|
||||||
@@ -606,7 +639,7 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||||||
{"Voip_Tx Mixer", "SLIM_0_TX_Voip", "SLIMBUS_0_TX"},
|
{"Voip_Tx Mixer", "SLIM_0_TX_Voip", "SLIMBUS_0_TX"},
|
||||||
{"Voip_Tx Mixer", "INTERNAL_BT_SCO_TX_Voip", "INT_BT_SCO_TX"},
|
{"Voip_Tx Mixer", "INTERNAL_BT_SCO_TX_Voip", "INT_BT_SCO_TX"},
|
||||||
{"VOIP_UL", NULL, "Voip_Tx Mixer"},
|
{"VOIP_UL", NULL, "Voip_Tx Mixer"},
|
||||||
{"SLIMBUS_0_RX", NULL, "SLIM0_DL_HL"},
|
{"SLIMBUS_0_RX", "Switch", "SLIM0_DL_HL"},
|
||||||
{"SLIM0_UL_HL", NULL, "SLIMBUS_0_TX"},
|
{"SLIM0_UL_HL", NULL, "SLIMBUS_0_TX"},
|
||||||
{"INT_FM_RX", NULL, "INTFM_DL_HL"},
|
{"INT_FM_RX", NULL, "INTFM_DL_HL"},
|
||||||
{"INTFM_UL_HL", NULL, "INT_FM_TX"},
|
{"INTFM_UL_HL", NULL, "INT_FM_TX"},
|
||||||
|
|||||||
Reference in New Issue
Block a user