aboutsummaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2009-03-03 11:29:04 +0000
committerAndy Green <agreen@octopus.localdomain>2009-03-03 11:29:04 +0000
commit01fd9a645762146a562d305d3c79492130fe67bd (patch)
tree8cc2ec109fc6cbe60c0445a1854afbe2d7e54fcb /sound
parentf44b5940675194782b13ca8b3abe5f54beac68d5 (diff)
ASoC: Put LM4853 under DAPM control on GTA02
Control for the power for the LM4853 on the GTA02 had been made directly visible to user space, needlessly burning power when no output was being produced and causing pops and clicks to be worsened due to a lack of integration with the power sequencing done by DAPM. Bring the amplifier power under DAPM control, saving power and reducing the levels of pops and clicks caused. The existing control is left in place for the benefit of scenario files but now has no effect. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/s3c24xx/neo1973_gta02_wm8753.c49
1 files changed, 22 insertions, 27 deletions
diff --git a/sound/soc/s3c24xx/neo1973_gta02_wm8753.c b/sound/soc/s3c24xx/neo1973_gta02_wm8753.c
index 747f8f035c3..b76f9e3b818 100644
--- a/sound/soc/s3c24xx/neo1973_gta02_wm8753.c
+++ b/sound/soc/s3c24xx/neo1973_gta02_wm8753.c
@@ -5,6 +5,7 @@
* Author: Graeme Gregory <graeme@openmoko.org>
* Copyright 2007 Wolfson Microelectronics PLC.
* Author: Graeme Gregory <linux@wolfsonmicro.com>
+ * Copyright 2009 Wolfson Microelectronics
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -211,6 +212,9 @@ static struct snd_soc_ops neo1973_gta02_voice_ops = {
static u8 lm4853_state=0;
+/* This has no effect, it exists only to maintain compatibility with
+ * existing ALSA state files.
+ */
static int lm4853_set_state(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
@@ -218,10 +222,8 @@ static int lm4853_set_state(struct snd_kcontrol *kcontrol,
if(val) {
lm4853_state |= LM4853_AMP;
- s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT,0);
} else {
lm4853_state &= ~LM4853_AMP;
- s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT,1);
}
return 0;
@@ -245,7 +247,7 @@ static int lm4853_set_spk(struct snd_kcontrol *kcontrol,
s3c2410_gpio_setpin(GTA02_GPIO_HP_IN,0);
} else {
lm4853_state &= ~LM4853_SPK;
- s3c2410_gpio_setpin(GTA02_GPIO_HP_IN,1);
+ s3c2410_gpio_setpin(GTA02_GPIO_HP_IN,0);
}
return 0;
@@ -259,8 +261,21 @@ static int lm4853_get_spk(struct snd_kcontrol *kcontrol,
return 0;
}
+static int lm4853_event(struct snd_soc_dapm_widget *w,
+ struct snd_kcontrol *k,
+ int event)
+{
+ if (SND_SOC_DAPM_EVENT_ON(event))
+ s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT, 0);
+
+ if (SND_SOC_DAPM_EVENT_OFF(event))
+ s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT, 1);
+
+ return 0;
+}
+
static const struct snd_soc_dapm_widget wm8753_dapm_widgets[] = {
- SND_SOC_DAPM_LINE("Stereo Out", NULL),
+ SND_SOC_DAPM_SPK("Stereo Out", lm4853_event),
SND_SOC_DAPM_LINE("GSM Line Out", NULL),
SND_SOC_DAPM_LINE("GSM Line In", NULL),
SND_SOC_DAPM_MIC("Headset Mic", NULL),
@@ -307,6 +322,9 @@ static const struct snd_kcontrol_new wm8753_neo1973_gta02_controls[] = {
SOC_DAPM_PIN_SWITCH("Handset Mic"),
SOC_DAPM_PIN_SWITCH("Handset Spk"),
+ /* This has no effect, it exists only to maintain compatibility with
+ * existing ALSA state files.
+ */
SOC_SINGLE_EXT("Amp State Switch", 6, 0, 1, 0,
lm4853_get_state,
lm4853_set_state),
@@ -393,32 +411,9 @@ static struct snd_soc_dai_link neo1973_gta02_dai[] = {
},
};
-#ifdef CONFIG_PM
-static int neo1973_gta02_suspend(struct platform_device *pdev,
- pm_message_t state)
-{
- s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT, 1);
-
- return 0;
-}
-
-static int neo1973_gta02_resume(struct platform_device *pdev)
-{
- if(lm4853_state & LM4853_AMP)
- s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT, 0);
-
- return 0;
-}
-#else
-#define neo1973_gta02_suspend NULL
-#define neo1973_gta02_resume NULL
-#endif
-
static struct snd_soc_card neo1973_gta02 = {
.name = "neo1973-gta02",
.platform = &s3c24xx_soc_platform,
- .suspend_pre = neo1973_gta02_suspend,
- .resume_post = neo1973_gta02_resume,
.dai_link = neo1973_gta02_dai,
.num_links = ARRAY_SIZE(neo1973_gta02_dai),
};