aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/tlv320dac33.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/tlv320dac33.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/tlv320dac33.c')
-rw-r--r--sound/soc/codecs/tlv320dac33.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c
index c5ab8c805771..7149c14b289e 100644
--- a/sound/soc/codecs/tlv320dac33.c
+++ b/sound/soc/codecs/tlv320dac33.c
@@ -628,11 +628,12 @@ static const struct snd_soc_dapm_route audio_map[] = {
628 628
629static int dac33_add_widgets(struct snd_soc_codec *codec) 629static int dac33_add_widgets(struct snd_soc_codec *codec)
630{ 630{
631 snd_soc_dapm_new_controls(codec, dac33_dapm_widgets, 631 struct snd_soc_dapm_context *dapm = &codec->dapm;
632 ARRAY_SIZE(dac33_dapm_widgets));
633 632
633 snd_soc_dapm_new_controls(dapm, dac33_dapm_widgets,
634 ARRAY_SIZE(dac33_dapm_widgets));
634 /* set up audio path interconnects */ 635 /* set up audio path interconnects */
635 snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); 636 snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map));
636 637
637 return 0; 638 return 0;
638} 639}
@@ -649,7 +650,7 @@ static int dac33_set_bias_level(struct snd_soc_codec *codec,
649 case SND_SOC_BIAS_PREPARE: 650 case SND_SOC_BIAS_PREPARE:
650 break; 651 break;
651 case SND_SOC_BIAS_STANDBY: 652 case SND_SOC_BIAS_STANDBY:
652 if (codec->bias_level == SND_SOC_BIAS_OFF) { 653 if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) {
653 /* Coming from OFF, switch on the codec */ 654 /* Coming from OFF, switch on the codec */
654 ret = dac33_hard_power(codec, 1); 655 ret = dac33_hard_power(codec, 1);
655 if (ret != 0) 656 if (ret != 0)
@@ -660,14 +661,14 @@ static int dac33_set_bias_level(struct snd_soc_codec *codec,
660 break; 661 break;
661 case SND_SOC_BIAS_OFF: 662 case SND_SOC_BIAS_OFF:
662 /* Do not power off, when the codec is already off */ 663 /* Do not power off, when the codec is already off */
663 if (codec->bias_level == SND_SOC_BIAS_OFF) 664 if (codec->dapm.bias_level == SND_SOC_BIAS_OFF)
664 return 0; 665 return 0;
665 ret = dac33_hard_power(codec, 0); 666 ret = dac33_hard_power(codec, 0);
666 if (ret != 0) 667 if (ret != 0)
667 return ret; 668 return ret;
668 break; 669 break;
669 } 670 }
670 codec->bias_level = level; 671 codec->dapm.bias_level = level;
671 672
672 return 0; 673 return 0;
673} 674}
@@ -1415,7 +1416,7 @@ static int dac33_soc_probe(struct snd_soc_codec *codec)
1415 1416
1416 codec->control_data = dac33->control_data; 1417 codec->control_data = dac33->control_data;
1417 codec->hw_write = (hw_write_t) i2c_master_send; 1418 codec->hw_write = (hw_write_t) i2c_master_send;
1418 codec->idle_bias_off = 1; 1419 codec->dapm.idle_bias_off = 1;
1419 dac33->codec = codec; 1420 dac33->codec = codec;
1420 1421
1421 /* Read the tlv320dac33 ID registers */ 1422 /* Read the tlv320dac33 ID registers */