diff options
author | Liam Girdwood <lrg@slimlogic.co.uk> | 2010-11-05 09:53:46 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-11-06 11:28:29 -0400 |
commit | ce6120cca2589ede530200c7cfe11ac9f144333c (patch) | |
tree | 6ea7c26ce64dd4753e7cf9a3b048e74614b169dc /sound/soc/pxa/spitz.c | |
parent | 22e2fda5660cdf62513acabdb5c82a5af415f838 (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/pxa/spitz.c')
-rw-r--r-- | sound/soc/pxa/spitz.c | 69 |
1 files changed, 36 insertions, 33 deletions
diff --git a/sound/soc/pxa/spitz.c b/sound/soc/pxa/spitz.c index f470f360f4dd..0680b11c2685 100644 --- a/sound/soc/pxa/spitz.c +++ b/sound/soc/pxa/spitz.c | |||
@@ -46,61 +46,63 @@ static int spitz_spk_func; | |||
46 | 46 | ||
47 | static void spitz_ext_control(struct snd_soc_codec *codec) | 47 | static void spitz_ext_control(struct snd_soc_codec *codec) |
48 | { | 48 | { |
49 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
50 | |||
49 | if (spitz_spk_func == SPITZ_SPK_ON) | 51 | if (spitz_spk_func == SPITZ_SPK_ON) |
50 | snd_soc_dapm_enable_pin(codec, "Ext Spk"); | 52 | snd_soc_dapm_enable_pin(dapm, "Ext Spk"); |
51 | else | 53 | else |
52 | snd_soc_dapm_disable_pin(codec, "Ext Spk"); | 54 | snd_soc_dapm_disable_pin(dapm, "Ext Spk"); |
53 | 55 | ||
54 | /* set up jack connection */ | 56 | /* set up jack connection */ |
55 | switch (spitz_jack_func) { | 57 | switch (spitz_jack_func) { |
56 | case SPITZ_HP: | 58 | case SPITZ_HP: |
57 | /* enable and unmute hp jack, disable mic bias */ | 59 | /* enable and unmute hp jack, disable mic bias */ |
58 | snd_soc_dapm_disable_pin(codec, "Headset Jack"); | 60 | snd_soc_dapm_disable_pin(dapm, "Headset Jack"); |
59 | snd_soc_dapm_disable_pin(codec, "Mic Jack"); | 61 | snd_soc_dapm_disable_pin(dapm, "Mic Jack"); |
60 | snd_soc_dapm_disable_pin(codec, "Line Jack"); | 62 | snd_soc_dapm_disable_pin(dapm, "Line Jack"); |
61 | snd_soc_dapm_enable_pin(codec, "Headphone Jack"); | 63 | snd_soc_dapm_enable_pin(dapm, "Headphone Jack"); |
62 | gpio_set_value(SPITZ_GPIO_MUTE_L, 1); | 64 | gpio_set_value(SPITZ_GPIO_MUTE_L, 1); |
63 | gpio_set_value(SPITZ_GPIO_MUTE_R, 1); | 65 | gpio_set_value(SPITZ_GPIO_MUTE_R, 1); |
64 | break; | 66 | break; |
65 | case SPITZ_MIC: | 67 | case SPITZ_MIC: |
66 | /* enable mic jack and bias, mute hp */ | 68 | /* enable mic jack and bias, mute hp */ |
67 | snd_soc_dapm_disable_pin(codec, "Headphone Jack"); | 69 | snd_soc_dapm_disable_pin(dapm, "Headphone Jack"); |
68 | snd_soc_dapm_disable_pin(codec, "Headset Jack"); | 70 | snd_soc_dapm_disable_pin(dapm, "Headset Jack"); |
69 | snd_soc_dapm_disable_pin(codec, "Line Jack"); | 71 | snd_soc_dapm_disable_pin(dapm, "Line Jack"); |
70 | snd_soc_dapm_enable_pin(codec, "Mic Jack"); | 72 | snd_soc_dapm_enable_pin(dapm, "Mic Jack"); |
71 | gpio_set_value(SPITZ_GPIO_MUTE_L, 0); | 73 | gpio_set_value(SPITZ_GPIO_MUTE_L, 0); |
72 | gpio_set_value(SPITZ_GPIO_MUTE_R, 0); | 74 | gpio_set_value(SPITZ_GPIO_MUTE_R, 0); |
73 | break; | 75 | break; |
74 | case SPITZ_LINE: | 76 | case SPITZ_LINE: |
75 | /* enable line jack, disable mic bias and mute hp */ | 77 | /* enable line jack, disable mic bias and mute hp */ |
76 | snd_soc_dapm_disable_pin(codec, "Headphone Jack"); | 78 | snd_soc_dapm_disable_pin(dapm, "Headphone Jack"); |
77 | snd_soc_dapm_disable_pin(codec, "Headset Jack"); | 79 | snd_soc_dapm_disable_pin(dapm, "Headset Jack"); |
78 | snd_soc_dapm_disable_pin(codec, "Mic Jack"); | 80 | snd_soc_dapm_disable_pin(dapm, "Mic Jack"); |
79 | snd_soc_dapm_enable_pin(codec, "Line Jack"); | 81 | snd_soc_dapm_enable_pin(dapm, "Line Jack"); |
80 | gpio_set_value(SPITZ_GPIO_MUTE_L, 0); | 82 | gpio_set_value(SPITZ_GPIO_MUTE_L, 0); |
81 | gpio_set_value(SPITZ_GPIO_MUTE_R, 0); | 83 | gpio_set_value(SPITZ_GPIO_MUTE_R, 0); |
82 | break; | 84 | break; |
83 | case SPITZ_HEADSET: | 85 | case SPITZ_HEADSET: |
84 | /* enable and unmute headset jack enable mic bias, mute L hp */ | 86 | /* enable and unmute headset jack enable mic bias, mute L hp */ |
85 | snd_soc_dapm_disable_pin(codec, "Headphone Jack"); | 87 | snd_soc_dapm_disable_pin(dapm, "Headphone Jack"); |
86 | snd_soc_dapm_enable_pin(codec, "Mic Jack"); | 88 | snd_soc_dapm_enable_pin(dapm, "Mic Jack"); |
87 | snd_soc_dapm_disable_pin(codec, "Line Jack"); | 89 | snd_soc_dapm_disable_pin(dapm, "Line Jack"); |
88 | snd_soc_dapm_enable_pin(codec, "Headset Jack"); | 90 | snd_soc_dapm_enable_pin(dapm, "Headset Jack"); |
89 | gpio_set_value(SPITZ_GPIO_MUTE_L, 0); | 91 | gpio_set_value(SPITZ_GPIO_MUTE_L, 0); |
90 | gpio_set_value(SPITZ_GPIO_MUTE_R, 1); | 92 | gpio_set_value(SPITZ_GPIO_MUTE_R, 1); |
91 | break; | 93 | break; |
92 | case SPITZ_HP_OFF: | 94 | case SPITZ_HP_OFF: |
93 | 95 | ||
94 | /* jack removed, everything off */ | 96 | /* jack removed, everything off */ |
95 | snd_soc_dapm_disable_pin(codec, "Headphone Jack"); | 97 | snd_soc_dapm_disable_pin(dapm, "Headphone Jack"); |
96 | snd_soc_dapm_disable_pin(codec, "Headset Jack"); | 98 | snd_soc_dapm_disable_pin(dapm, "Headset Jack"); |
97 | snd_soc_dapm_disable_pin(codec, "Mic Jack"); | 99 | snd_soc_dapm_disable_pin(dapm, "Mic Jack"); |
98 | snd_soc_dapm_disable_pin(codec, "Line Jack"); | 100 | snd_soc_dapm_disable_pin(dapm, "Line Jack"); |
99 | gpio_set_value(SPITZ_GPIO_MUTE_L, 0); | 101 | gpio_set_value(SPITZ_GPIO_MUTE_L, 0); |
100 | gpio_set_value(SPITZ_GPIO_MUTE_R, 0); | 102 | gpio_set_value(SPITZ_GPIO_MUTE_R, 0); |
101 | break; | 103 | break; |
102 | } | 104 | } |
103 | snd_soc_dapm_sync(codec); | 105 | snd_soc_dapm_sync(dapm); |
104 | } | 106 | } |
105 | 107 | ||
106 | static int spitz_startup(struct snd_pcm_substream *substream) | 108 | static int spitz_startup(struct snd_pcm_substream *substream) |
@@ -276,16 +278,17 @@ static const struct snd_kcontrol_new wm8750_spitz_controls[] = { | |||
276 | static int spitz_wm8750_init(struct snd_soc_pcm_runtime *rtd) | 278 | static int spitz_wm8750_init(struct snd_soc_pcm_runtime *rtd) |
277 | { | 279 | { |
278 | struct snd_soc_codec *codec = rtd->codec; | 280 | struct snd_soc_codec *codec = rtd->codec; |
281 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
279 | int err; | 282 | int err; |
280 | 283 | ||
281 | /* NC codec pins */ | 284 | /* NC codec pins */ |
282 | snd_soc_dapm_nc_pin(codec, "RINPUT1"); | 285 | snd_soc_dapm_nc_pin(dapm, "RINPUT1"); |
283 | snd_soc_dapm_nc_pin(codec, "LINPUT2"); | 286 | snd_soc_dapm_nc_pin(dapm, "LINPUT2"); |
284 | snd_soc_dapm_nc_pin(codec, "RINPUT2"); | 287 | snd_soc_dapm_nc_pin(dapm, "RINPUT2"); |
285 | snd_soc_dapm_nc_pin(codec, "LINPUT3"); | 288 | snd_soc_dapm_nc_pin(dapm, "LINPUT3"); |
286 | snd_soc_dapm_nc_pin(codec, "RINPUT3"); | 289 | snd_soc_dapm_nc_pin(dapm, "RINPUT3"); |
287 | snd_soc_dapm_nc_pin(codec, "OUT3"); | 290 | snd_soc_dapm_nc_pin(dapm, "OUT3"); |
288 | snd_soc_dapm_nc_pin(codec, "MONO1"); | 291 | snd_soc_dapm_nc_pin(dapm, "MONO1"); |
289 | 292 | ||
290 | /* Add spitz specific controls */ | 293 | /* Add spitz specific controls */ |
291 | err = snd_soc_add_controls(codec, wm8750_spitz_controls, | 294 | err = snd_soc_add_controls(codec, wm8750_spitz_controls, |
@@ -294,13 +297,13 @@ static int spitz_wm8750_init(struct snd_soc_pcm_runtime *rtd) | |||
294 | return err; | 297 | return err; |
295 | 298 | ||
296 | /* Add spitz specific widgets */ | 299 | /* Add spitz specific widgets */ |
297 | snd_soc_dapm_new_controls(codec, wm8750_dapm_widgets, | 300 | snd_soc_dapm_new_controls(dapm, wm8750_dapm_widgets, |
298 | ARRAY_SIZE(wm8750_dapm_widgets)); | 301 | ARRAY_SIZE(wm8750_dapm_widgets)); |
299 | 302 | ||
300 | /* Set up spitz specific audio paths */ | 303 | /* Set up spitz specific audio paths */ |
301 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 304 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); |
302 | 305 | ||
303 | snd_soc_dapm_sync(codec); | 306 | snd_soc_dapm_sync(dapm); |
304 | return 0; | 307 | return 0; |
305 | } | 308 | } |
306 | 309 | ||