summaryrefslogtreecommitdiff
path: root/sound/soc/codecs/abe-twl6040.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/codecs/abe-twl6040.c')
-rw-r--r--sound/soc/codecs/abe-twl6040.c44
1 files changed, 17 insertions, 27 deletions
diff --git a/sound/soc/codecs/abe-twl6040.c b/sound/soc/codecs/abe-twl6040.c
index 06a84207675a..022a49a0b6ca 100644
--- a/sound/soc/codecs/abe-twl6040.c
+++ b/sound/soc/codecs/abe-twl6040.c
@@ -636,20 +636,6 @@ static const struct snd_kcontrol_new hfdacl_switch_controls =
static const struct snd_kcontrol_new hfdacr_switch_controls =
SOC_DAPM_SINGLE("Switch", TWL6040_REG_HFRCTL, 2, 1, 0);
-/* Headset driver switches */
-static const struct snd_kcontrol_new hsl_driver_switch_controls =
- SOC_DAPM_SINGLE("Switch", TWL6040_REG_HSLCTL, 2, 1, 0);
-
-static const struct snd_kcontrol_new hsr_driver_switch_controls =
- SOC_DAPM_SINGLE("Switch", TWL6040_REG_HSRCTL, 2, 1, 0);
-
-/* Handsfree driver switches */
-static const struct snd_kcontrol_new hfl_driver_switch_controls =
- SOC_DAPM_SINGLE("Switch", TWL6040_REG_HFLCTL, 4, 1, 0);
-
-static const struct snd_kcontrol_new hfr_driver_switch_controls =
- SOC_DAPM_SINGLE("Switch", TWL6040_REG_HFRCTL, 4, 1, 0);
-
static const struct snd_kcontrol_new ep_driver_switch_controls =
SOC_DAPM_SINGLE("Switch", TWL6040_REG_EARCTL, 0, 1, 0);
@@ -721,11 +707,11 @@ static const struct snd_soc_dapm_widget twl6040_dapm_widgets[] = {
SND_SOC_DAPM_AIF_IN("AIFIN Tones", "Playback", 0,
SND_SOC_NOPM, 0, 0),
- SND_SOC_DAPM_AIF_IN("AIFIN Voice", "Playback", 1,
+ SND_SOC_DAPM_AIF_IN("AIFIN Voice", "Playback", 0,
SND_SOC_NOPM, 0, 0),
- SND_SOC_DAPM_AIF_IN("AIFIN Multimedia Uplink", "Playback", 2,
+ SND_SOC_DAPM_AIF_IN("AIFIN Multimedia Uplink", "Playback", 0,
SND_SOC_NOPM, 0, 0),
- SND_SOC_DAPM_AIF_IN("AIFIN Multimedia", "Playback", 3,
+ SND_SOC_DAPM_AIF_IN("AIFIN Multimedia", "Playback", 0,
SND_SOC_NOPM, 0, 0),
/* DACs */
@@ -752,18 +738,19 @@ static const struct snd_soc_dapm_widget twl6040_dapm_widgets[] = {
SND_SOC_DAPM_SWITCH("HFDAC Right Playback",
SND_SOC_NOPM, 0, 0, &hfdacr_switch_controls),
- SND_SOC_DAPM_SWITCH("Headset Left Driver",
- SND_SOC_NOPM, 0, 0, &hsl_driver_switch_controls),
- SND_SOC_DAPM_SWITCH("Headset Right Driver",
- SND_SOC_NOPM, 0, 0, &hsr_driver_switch_controls),
- SND_SOC_DAPM_SWITCH_E("Handsfree Left Driver",
- SND_SOC_NOPM, 0, 0, &hfl_driver_switch_controls,
+ /* Analog playback drivers */
+ SND_SOC_DAPM_PGA_E("Handsfree Left Driver",
+ TWL6040_REG_HFLCTL, 4, 0, NULL, 0,
twl6040_power_mode_event,
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
- SND_SOC_DAPM_SWITCH_E("Handsfree Right Driver",
- SND_SOC_NOPM, 0, 0, &hfr_driver_switch_controls,
+ SND_SOC_DAPM_PGA_E("Handsfree Right Driver",
+ TWL6040_REG_HFRCTL, 4, 0, NULL, 0,
twl6040_power_mode_event,
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
+ SND_SOC_DAPM_PGA("Headset Left Driver",
+ TWL6040_REG_HSLCTL, 2, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("Headset Right Driver",
+ TWL6040_REG_HSRCTL, 2, 0, NULL, 0),
SND_SOC_DAPM_SWITCH_E("Earphone Driver",
SND_SOC_NOPM, 0, 0, &ep_driver_switch_controls,
twl6040_power_mode_event,
@@ -805,8 +792,8 @@ static const struct snd_soc_dapm_route intercon[] = {
{"HSDAC Left Playback", "Switch", "HSDAC Left"},
{"HSDAC Right Playback", "Switch", "HSDAC Right"},
- {"Headset Left Driver", "Switch", "HSDAC Left Playback"},
- {"Headset Right Driver", "Switch", "HSDAC Right Playback"},
+ {"Headset Left Driver", NULL, "HSDAC Left Playback"},
+ {"Headset Right Driver", NULL, "HSDAC Right Playback"},
{"HSOL", NULL, "Headset Left Driver"},
{"HSOR", NULL, "Headset Right Driver"},
@@ -1192,12 +1179,14 @@ static int abe_mm_trigger(struct snd_pcm_substream *substream,
priv->sysclk);
return -EPERM;
}
+ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
if (!substream->stream)
abe_enable_data_transfer(MM_DL_PORT);
else
abe_enable_data_transfer(MM_UL_PORT);
break;
case SNDRV_PCM_TRIGGER_STOP:
+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
if (!substream->stream)
abe_disable_data_transfer(MM_DL_PORT);
else
@@ -1578,6 +1567,7 @@ static int __devinit abe_twl6040_codec_probe(struct platform_device *pdev)
priv->naudint = naudint;
codec = &priv->codec;
+ codec->pop_time = 1;
codec->dev = &pdev->dev;
codec->name = "twl6040";
codec->owner = THIS_MODULE;