aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/wm8994.c
diff options
context:
space:
mode:
authorLiam Girdwood <lrg@slimlogic.co.uk>2010-11-05 09:53:46 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2010-11-06 11:28:29 -0400
commitce6120cca2589ede530200c7cfe11ac9f144333c (patch)
tree6ea7c26ce64dd4753e7cf9a3b048e74614b169dc /sound/soc/codecs/wm8994.c
parent22e2fda5660cdf62513acabdb5c82a5af415f838 (diff)
ASoC: Decouple DAPM from CODECs
Decoupling Dynamic Audio Power Management (DAPM) from codec devices is required when developing ASoC further. Such as for other ASoC components to have DAPM widgets or when extending DAPM to handle cross-device paths. This patch decouples DAPM related variables from struct snd_soc_codec and moves them to new struct snd_soc_dapm_context that is used to encapsulate DAPM context of a device. ASoC core and API of DAPM functions are modified to use DAPM context instead of codec. This patch does not change current functionality and a large part of changes come because of structure and internal API changes. Core implementation is from Liam Girdwood <lrg@slimlogic.co.uk> with some minor core changes, codecs and machine driver conversions from Jarkko Nikula <jhnikula@gmail.com>. Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk> Signed-off-by: Jarkko Nikula <jhnikula@gmail.com> Cc: Nicolas Ferre <nicolas.ferre@atmel.com> Cc: Manuel Lauss <manuel.lauss@googlemail.com> Cc: Mike Frysinger <vapier.adi@gmail.com> Cc: Cliff Cai <cliff.cai@analog.com> Cc: Kevin Hilman <khilman@deeprootsystems.com> Cc: Ryan Mallon <ryan@bluewatersys.com> Cc: Timur Tabi <timur@freescale.com> Cc: Sascha Hauer <s.hauer@pengutronix.de> Cc: Lars-Peter Clausen <lars@metafoo.de> Cc: Arnaud Patard (Rtp) <arnaud.patard@rtp-net.org> Cc: Wan ZongShun <mcuos.com@gmail.com> Cc: Eric Miao <eric.y.miao@gmail.com> Cc: Jassi Brar <jassi.brar@samsung.com> Cc: Daniel Gloeckner <dg@emlix.com> Cc: Kuninori Morimoto <morimoto.kuninori@renesas.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/codecs/wm8994.c')
-rw-r--r--sound/soc/codecs/wm8994.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index d81cac5b93b4..f7dea3d34a3e 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -1835,7 +1835,7 @@ static int configure_clock(struct snd_soc_codec *codec)
1835 1835
1836 snd_soc_update_bits(codec, WM8994_CLOCKING_1, WM8994_SYSCLK_SRC, new); 1836 snd_soc_update_bits(codec, WM8994_CLOCKING_1, WM8994_SYSCLK_SRC, new);
1837 1837
1838 snd_soc_dapm_sync(codec); 1838 snd_soc_dapm_sync(&codec->dapm);
1839 1839
1840 return 0; 1840 return 0;
1841} 1841}
@@ -3108,7 +3108,7 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec,
3108 break; 3108 break;
3109 3109
3110 case SND_SOC_BIAS_STANDBY: 3110 case SND_SOC_BIAS_STANDBY:
3111 if (codec->bias_level == SND_SOC_BIAS_OFF) { 3111 if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) {
3112 /* Tweak DC servo and DSP configuration for 3112 /* Tweak DC servo and DSP configuration for
3113 * improved performance. */ 3113 * improved performance. */
3114 if (wm8994->revision < 4) { 3114 if (wm8994->revision < 4) {
@@ -3152,7 +3152,7 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec,
3152 break; 3152 break;
3153 3153
3154 case SND_SOC_BIAS_OFF: 3154 case SND_SOC_BIAS_OFF:
3155 if (codec->bias_level == SND_SOC_BIAS_STANDBY) { 3155 if (codec->dapm.bias_level == SND_SOC_BIAS_STANDBY) {
3156 /* Switch over to startup biases */ 3156 /* Switch over to startup biases */
3157 snd_soc_update_bits(codec, WM8994_ANTIPOP_2, 3157 snd_soc_update_bits(codec, WM8994_ANTIPOP_2,
3158 WM8994_BIAS_SRC | 3158 WM8994_BIAS_SRC |
@@ -3187,7 +3187,7 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec,
3187 } 3187 }
3188 break; 3188 break;
3189 } 3189 }
3190 codec->bias_level = level; 3190 codec->dapm.bias_level = level;
3191 return 0; 3191 return 0;
3192} 3192}
3193 3193
@@ -3895,6 +3895,7 @@ static irqreturn_t wm8994_mic_irq(int irq, void *data)
3895static int wm8994_codec_probe(struct snd_soc_codec *codec) 3895static int wm8994_codec_probe(struct snd_soc_codec *codec)
3896{ 3896{
3897 struct wm8994_priv *wm8994; 3897 struct wm8994_priv *wm8994;
3898 struct snd_soc_dapm_context *dapm = &codec->dapm;
3898 int ret, i; 3899 int ret, i;
3899 3900
3900 codec->control_data = dev_get_drvdata(codec->dev->parent); 3901 codec->control_data = dev_get_drvdata(codec->dev->parent);
@@ -4033,10 +4034,10 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec)
4033 wm_hubs_add_analogue_controls(codec); 4034 wm_hubs_add_analogue_controls(codec);
4034 snd_soc_add_controls(codec, wm8994_snd_controls, 4035 snd_soc_add_controls(codec, wm8994_snd_controls,
4035 ARRAY_SIZE(wm8994_snd_controls)); 4036 ARRAY_SIZE(wm8994_snd_controls));
4036 snd_soc_dapm_new_controls(codec, wm8994_dapm_widgets, 4037 snd_soc_dapm_new_controls(dapm, wm8994_dapm_widgets,
4037 ARRAY_SIZE(wm8994_dapm_widgets)); 4038 ARRAY_SIZE(wm8994_dapm_widgets));
4038 wm_hubs_add_analogue_routes(codec, 0, 0); 4039 wm_hubs_add_analogue_routes(codec, 0, 0);
4039 snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon)); 4040 snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon));
4040 4041
4041 return 0; 4042 return 0;
4042 4043