|
@@ -620,6 +620,20 @@ static int vibramux_event(struct snd_soc_dapm_widget *w,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int apll_event(struct snd_soc_dapm_widget *w,
|
|
|
+ struct snd_kcontrol *kcontrol, int event)
|
|
|
+{
|
|
|
+ switch (event) {
|
|
|
+ case SND_SOC_DAPM_PRE_PMU:
|
|
|
+ twl4030_apll_enable(w->codec, 1);
|
|
|
+ break;
|
|
|
+ case SND_SOC_DAPM_POST_PMD:
|
|
|
+ twl4030_apll_enable(w->codec, 0);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static void headset_ramp(struct snd_soc_codec *codec, int ramp)
|
|
|
{
|
|
|
struct snd_soc_device *socdev = codec->socdev;
|
|
@@ -1185,6 +1199,9 @@ static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = {
|
|
|
SND_SOC_DAPM_MIXER("Analog Voice Playback Mixer",
|
|
|
TWL4030_REG_VDL_APGA_CTL, 0, 0, NULL, 0),
|
|
|
|
|
|
+ SND_SOC_DAPM_SUPPLY("APLL Enable", SND_SOC_NOPM, 0, 0, apll_event,
|
|
|
+ SND_SOC_DAPM_PRE_PMU|SND_SOC_DAPM_POST_PMD),
|
|
|
+
|
|
|
/* Output MIXER controls */
|
|
|
/* Earpiece */
|
|
|
SND_SOC_DAPM_MIXER("Earpiece Mixer", SND_SOC_NOPM, 0, 0,
|
|
@@ -1312,6 +1329,13 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|
|
{"Digital R2 Playback Mixer", NULL, "DAC Right2"},
|
|
|
{"Digital Voice Playback Mixer", NULL, "DAC Voice"},
|
|
|
|
|
|
+ /* Supply for the digital part (APLL) */
|
|
|
+ {"Digital R1 Playback Mixer", NULL, "APLL Enable"},
|
|
|
+ {"Digital L1 Playback Mixer", NULL, "APLL Enable"},
|
|
|
+ {"Digital R2 Playback Mixer", NULL, "APLL Enable"},
|
|
|
+ {"Digital L2 Playback Mixer", NULL, "APLL Enable"},
|
|
|
+ {"Digital Voice Playback Mixer", NULL, "APLL Enable"},
|
|
|
+
|
|
|
{"Analog L1 Playback Mixer", NULL, "Digital L1 Playback Mixer"},
|
|
|
{"Analog R1 Playback Mixer", NULL, "Digital R1 Playback Mixer"},
|
|
|
{"Analog L2 Playback Mixer", NULL, "Digital L2 Playback Mixer"},
|
|
@@ -1472,14 +1496,12 @@ static int twl4030_set_bias_level(struct snd_soc_codec *codec,
|
|
|
{
|
|
|
switch (level) {
|
|
|
case SND_SOC_BIAS_ON:
|
|
|
- twl4030_apll_enable(codec, 1);
|
|
|
break;
|
|
|
case SND_SOC_BIAS_PREPARE:
|
|
|
break;
|
|
|
case SND_SOC_BIAS_STANDBY:
|
|
|
if (codec->bias_level == SND_SOC_BIAS_OFF)
|
|
|
twl4030_power_up(codec);
|
|
|
- twl4030_apll_enable(codec, 0);
|
|
|
break;
|
|
|
case SND_SOC_BIAS_OFF:
|
|
|
twl4030_power_down(codec);
|