diff options
author | Takashi Iwai <tiwai@suse.de> | 2009-06-10 01:26:18 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-06-10 01:26:18 -0400 |
commit | ba252af8d60f543a2a2c03f5574f64007ae9c2f3 (patch) | |
tree | a37b2723f0c4ea10447600f321f4df261e45bde6 /include/sound | |
parent | 07a2039b8eb0af4ff464efd3dfd95de5c02648c6 (diff) | |
parent | 74b8f955a73d20b1e22403fd1ef85834fbf38d98 (diff) |
Merge branch 'topic/asoc' into for-linus
* topic/asoc: (135 commits)
ASoC: Apostrophe patrol
ASoC: codec tlv320aic23 fix bogus divide by 0 message
ASoC: fix NULL pointer dereference in soc_suspend()
ASoC: Fix build error in twl4030.c
ASoC: SSM2602: assign last substream to the master when shutting down
ASoC: Blackfin: document how anomaly 05000250 is handled
ASoC: Blackfin: set the transfer size according the ac97_frame size
ASoC: SSM2602: remove unsupported sample rates
ASoC: TWL4030: Check the interface format for 4 channel mode
ASoC: TWL4030: Use reg_cache in twl4030_init_chip
ASoC: Initialise dev for the dummy S/PDIF DAI
ASoC: Add dummy S/PDIF codec support
ASoC: correct print specifiers for unsigneds
ASoC: Modify mpc5200 AC97 driver to use V9 of spin_event_timeout()
ASoC: Switch FSL SSI DAI over to symmetric_rates
ASoC: Mark MPC5200 AC97 as BROKEN until PowerPC merge issues are resolved
ASoC: Fabric bindings for STAC9766 on the Efika
ASoC: Support for AC97 on Phytec pmc030 base board.
ASoC: AC97 driver for mpc5200
ASoC: Main rewite of the mpc5200 audio DMA code
...
Diffstat (limited to 'include/sound')
-rw-r--r-- | include/sound/soc-dai.h | 30 | ||||
-rw-r--r-- | include/sound/soc-dapm.h | 24 | ||||
-rw-r--r-- | include/sound/soc.h | 34 | ||||
-rw-r--r-- | include/sound/wm9081.h | 25 |
4 files changed, 83 insertions, 30 deletions
diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h index 13676472ddfc..352d7eee9b6d 100644 --- a/include/sound/soc-dai.h +++ b/include/sound/soc-dai.h | |||
@@ -45,24 +45,6 @@ struct snd_pcm_substream; | |||
45 | #define SND_SOC_DAIFMT_GATED (1 << 4) /* clock is gated */ | 45 | #define SND_SOC_DAIFMT_GATED (1 << 4) /* clock is gated */ |
46 | 46 | ||
47 | /* | 47 | /* |
48 | * DAI Left/Right Clocks. | ||
49 | * | ||
50 | * Specifies whether the DAI can support different samples for similtanious | ||
51 | * playback and capture. This usually requires a seperate physical frame | ||
52 | * clock for playback and capture. | ||
53 | */ | ||
54 | #define SND_SOC_DAIFMT_SYNC (0 << 5) /* Tx FRM = Rx FRM */ | ||
55 | #define SND_SOC_DAIFMT_ASYNC (1 << 5) /* Tx FRM ~ Rx FRM */ | ||
56 | |||
57 | /* | ||
58 | * TDM | ||
59 | * | ||
60 | * Time Division Multiplexing. Allows PCM data to be multplexed with other | ||
61 | * data on the DAI. | ||
62 | */ | ||
63 | #define SND_SOC_DAIFMT_TDM (1 << 6) | ||
64 | |||
65 | /* | ||
66 | * DAI hardware signal inversions. | 48 | * DAI hardware signal inversions. |
67 | * | 49 | * |
68 | * Specifies whether the DAI can also support inverted clocks for the specified | 50 | * Specifies whether the DAI can also support inverted clocks for the specified |
@@ -96,6 +78,10 @@ struct snd_pcm_substream; | |||
96 | #define SND_SOC_CLOCK_IN 0 | 78 | #define SND_SOC_CLOCK_IN 0 |
97 | #define SND_SOC_CLOCK_OUT 1 | 79 | #define SND_SOC_CLOCK_OUT 1 |
98 | 80 | ||
81 | #define SND_SOC_STD_AC97_FMTS (SNDRV_PCM_FMTBIT_S16_LE |\ | ||
82 | SNDRV_PCM_FMTBIT_S32_LE |\ | ||
83 | SNDRV_PCM_FMTBIT_S32_BE) | ||
84 | |||
99 | struct snd_soc_dai_ops; | 85 | struct snd_soc_dai_ops; |
100 | struct snd_soc_dai; | 86 | struct snd_soc_dai; |
101 | struct snd_ac97_bus_ops; | 87 | struct snd_ac97_bus_ops; |
@@ -208,6 +194,7 @@ struct snd_soc_dai { | |||
208 | /* DAI capabilities */ | 194 | /* DAI capabilities */ |
209 | struct snd_soc_pcm_stream capture; | 195 | struct snd_soc_pcm_stream capture; |
210 | struct snd_soc_pcm_stream playback; | 196 | struct snd_soc_pcm_stream playback; |
197 | unsigned int symmetric_rates:1; | ||
211 | 198 | ||
212 | /* DAI runtime info */ | 199 | /* DAI runtime info */ |
213 | struct snd_pcm_runtime *runtime; | 200 | struct snd_pcm_runtime *runtime; |
@@ -219,11 +206,8 @@ struct snd_soc_dai { | |||
219 | /* DAI private data */ | 206 | /* DAI private data */ |
220 | void *private_data; | 207 | void *private_data; |
221 | 208 | ||
222 | /* parent codec/platform */ | 209 | /* parent platform */ |
223 | union { | 210 | struct snd_soc_platform *platform; |
224 | struct snd_soc_codec *codec; | ||
225 | struct snd_soc_platform *platform; | ||
226 | }; | ||
227 | 211 | ||
228 | struct list_head list; | 212 | struct list_head list; |
229 | }; | 213 | }; |
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h index a7def6a9a030..ec8a45f9a069 100644 --- a/include/sound/soc-dapm.h +++ b/include/sound/soc-dapm.h | |||
@@ -140,16 +140,30 @@ | |||
140 | #define SND_SOC_DAPM_DAC(wname, stname, wreg, wshift, winvert) \ | 140 | #define SND_SOC_DAPM_DAC(wname, stname, wreg, wshift, winvert) \ |
141 | { .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \ | 141 | { .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \ |
142 | .shift = wshift, .invert = winvert} | 142 | .shift = wshift, .invert = winvert} |
143 | #define SND_SOC_DAPM_DAC_E(wname, stname, wreg, wshift, winvert, \ | ||
144 | wevent, wflags) \ | ||
145 | { .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \ | ||
146 | .shift = wshift, .invert = winvert, \ | ||
147 | .event = wevent, .event_flags = wflags} | ||
143 | #define SND_SOC_DAPM_ADC(wname, stname, wreg, wshift, winvert) \ | 148 | #define SND_SOC_DAPM_ADC(wname, stname, wreg, wshift, winvert) \ |
144 | { .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \ | 149 | { .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \ |
145 | .shift = wshift, .invert = winvert} | 150 | .shift = wshift, .invert = winvert} |
151 | #define SND_SOC_DAPM_ADC_E(wname, stname, wreg, wshift, winvert, \ | ||
152 | wevent, wflags) \ | ||
153 | { .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \ | ||
154 | .shift = wshift, .invert = winvert, \ | ||
155 | .event = wevent, .event_flags = wflags} | ||
146 | 156 | ||
147 | /* generic register modifier widget */ | 157 | /* generic widgets */ |
148 | #define SND_SOC_DAPM_REG(wid, wname, wreg, wshift, wmask, won_val, woff_val) \ | 158 | #define SND_SOC_DAPM_REG(wid, wname, wreg, wshift, wmask, won_val, woff_val) \ |
149 | { .id = wid, .name = wname, .kcontrols = NULL, .num_kcontrols = 0, \ | 159 | { .id = wid, .name = wname, .kcontrols = NULL, .num_kcontrols = 0, \ |
150 | .reg = -((wreg) + 1), .shift = wshift, .mask = wmask, \ | 160 | .reg = -((wreg) + 1), .shift = wshift, .mask = wmask, \ |
151 | .on_val = won_val, .off_val = woff_val, .event = dapm_reg_event, \ | 161 | .on_val = won_val, .off_val = woff_val, .event = dapm_reg_event, \ |
152 | .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD} | 162 | .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD} |
163 | #define SND_SOC_DAPM_SUPPLY(wname, wreg, wshift, winvert, wevent, wflags) \ | ||
164 | { .id = snd_soc_dapm_supply, .name = wname, .reg = wreg, \ | ||
165 | .shift = wshift, .invert = winvert, .event = wevent, \ | ||
166 | .event_flags = wflags} | ||
153 | 167 | ||
154 | /* dapm kcontrol types */ | 168 | /* dapm kcontrol types */ |
155 | #define SOC_DAPM_SINGLE(xname, reg, shift, max, invert) \ | 169 | #define SOC_DAPM_SINGLE(xname, reg, shift, max, invert) \ |
@@ -265,8 +279,6 @@ int snd_soc_dapm_add_routes(struct snd_soc_codec *codec, | |||
265 | /* dapm events */ | 279 | /* dapm events */ |
266 | int snd_soc_dapm_stream_event(struct snd_soc_codec *codec, char *stream, | 280 | int snd_soc_dapm_stream_event(struct snd_soc_codec *codec, char *stream, |
267 | int event); | 281 | int event); |
268 | int snd_soc_dapm_set_bias_level(struct snd_soc_device *socdev, | ||
269 | enum snd_soc_bias_level level); | ||
270 | 282 | ||
271 | /* dapm sys fs - used by the core */ | 283 | /* dapm sys fs - used by the core */ |
272 | int snd_soc_dapm_sys_add(struct device *dev); | 284 | int snd_soc_dapm_sys_add(struct device *dev); |
@@ -298,6 +310,7 @@ enum snd_soc_dapm_type { | |||
298 | snd_soc_dapm_vmid, /* codec bias/vmid - to minimise pops */ | 310 | snd_soc_dapm_vmid, /* codec bias/vmid - to minimise pops */ |
299 | snd_soc_dapm_pre, /* machine specific pre widget - exec first */ | 311 | snd_soc_dapm_pre, /* machine specific pre widget - exec first */ |
300 | snd_soc_dapm_post, /* machine specific post widget - exec last */ | 312 | snd_soc_dapm_post, /* machine specific post widget - exec last */ |
313 | snd_soc_dapm_supply, /* power/clock supply */ | ||
301 | }; | 314 | }; |
302 | 315 | ||
303 | /* | 316 | /* |
@@ -357,6 +370,8 @@ struct snd_soc_dapm_widget { | |||
357 | unsigned char suspend:1; /* was active before suspend */ | 370 | unsigned char suspend:1; /* was active before suspend */ |
358 | unsigned char pmdown:1; /* waiting for timeout */ | 371 | unsigned char pmdown:1; /* waiting for timeout */ |
359 | 372 | ||
373 | int (*power_check)(struct snd_soc_dapm_widget *w); | ||
374 | |||
360 | /* external events */ | 375 | /* external events */ |
361 | unsigned short event_flags; /* flags to specify event types */ | 376 | unsigned short event_flags; /* flags to specify event types */ |
362 | int (*event)(struct snd_soc_dapm_widget*, struct snd_kcontrol *, int); | 377 | int (*event)(struct snd_soc_dapm_widget*, struct snd_kcontrol *, int); |
@@ -368,6 +383,9 @@ struct snd_soc_dapm_widget { | |||
368 | /* widget input and outputs */ | 383 | /* widget input and outputs */ |
369 | struct list_head sources; | 384 | struct list_head sources; |
370 | struct list_head sinks; | 385 | struct list_head sinks; |
386 | |||
387 | /* used during DAPM updates */ | ||
388 | struct list_head power_list; | ||
371 | }; | 389 | }; |
372 | 390 | ||
373 | #endif | 391 | #endif |
diff --git a/include/sound/soc.h b/include/sound/soc.h index a40bc6f316fc..cf6111d72b17 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h | |||
@@ -118,6 +118,14 @@ | |||
118 | .info = snd_soc_info_volsw, \ | 118 | .info = snd_soc_info_volsw, \ |
119 | .get = xhandler_get, .put = xhandler_put, \ | 119 | .get = xhandler_get, .put = xhandler_put, \ |
120 | .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) } | 120 | .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) } |
121 | #define SOC_DOUBLE_EXT(xname, xreg, shift_left, shift_right, xmax, xinvert,\ | ||
122 | xhandler_get, xhandler_put) \ | ||
123 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ | ||
124 | .info = snd_soc_info_volsw, \ | ||
125 | .get = xhandler_get, .put = xhandler_put, \ | ||
126 | .private_value = (unsigned long)&(struct soc_mixer_control) \ | ||
127 | {.reg = xreg, .shift = shift_left, .rshift = shift_right, \ | ||
128 | .max = xmax, .invert = xinvert} } | ||
121 | #define SOC_SINGLE_EXT_TLV(xname, xreg, xshift, xmax, xinvert,\ | 129 | #define SOC_SINGLE_EXT_TLV(xname, xreg, xshift, xmax, xinvert,\ |
122 | xhandler_get, xhandler_put, tlv_array) \ | 130 | xhandler_get, xhandler_put, tlv_array) \ |
123 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ | 131 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ |
@@ -206,10 +214,6 @@ void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count, | |||
206 | struct snd_soc_jack_gpio *gpios); | 214 | struct snd_soc_jack_gpio *gpios); |
207 | #endif | 215 | #endif |
208 | 216 | ||
209 | /* codec IO */ | ||
210 | #define snd_soc_read(codec, reg) codec->read(codec, reg) | ||
211 | #define snd_soc_write(codec, reg, value) codec->write(codec, reg, value) | ||
212 | |||
213 | /* codec register bit access */ | 217 | /* codec register bit access */ |
214 | int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg, | 218 | int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg, |
215 | unsigned short mask, unsigned short value); | 219 | unsigned short mask, unsigned short value); |
@@ -331,6 +335,7 @@ struct snd_soc_codec { | |||
331 | struct module *owner; | 335 | struct module *owner; |
332 | struct mutex mutex; | 336 | struct mutex mutex; |
333 | struct device *dev; | 337 | struct device *dev; |
338 | struct snd_soc_device *socdev; | ||
334 | 339 | ||
335 | struct list_head list; | 340 | struct list_head list; |
336 | 341 | ||
@@ -364,6 +369,8 @@ struct snd_soc_codec { | |||
364 | enum snd_soc_bias_level bias_level; | 369 | enum snd_soc_bias_level bias_level; |
365 | enum snd_soc_bias_level suspend_bias_level; | 370 | enum snd_soc_bias_level suspend_bias_level; |
366 | struct delayed_work delayed_work; | 371 | struct delayed_work delayed_work; |
372 | struct list_head up_list; | ||
373 | struct list_head down_list; | ||
367 | 374 | ||
368 | /* codec DAI's */ | 375 | /* codec DAI's */ |
369 | struct snd_soc_dai *dai; | 376 | struct snd_soc_dai *dai; |
@@ -417,6 +424,12 @@ struct snd_soc_dai_link { | |||
417 | /* codec/machine specific init - e.g. add machine controls */ | 424 | /* codec/machine specific init - e.g. add machine controls */ |
418 | int (*init)(struct snd_soc_codec *codec); | 425 | int (*init)(struct snd_soc_codec *codec); |
419 | 426 | ||
427 | /* Symmetry requirements */ | ||
428 | unsigned int symmetric_rates:1; | ||
429 | |||
430 | /* Symmetry data - only valid if symmetry is being enforced */ | ||
431 | unsigned int rate; | ||
432 | |||
420 | /* DAI pcm */ | 433 | /* DAI pcm */ |
421 | struct snd_pcm *pcm; | 434 | struct snd_pcm *pcm; |
422 | }; | 435 | }; |
@@ -490,6 +503,19 @@ struct soc_enum { | |||
490 | void *dapm; | 503 | void *dapm; |
491 | }; | 504 | }; |
492 | 505 | ||
506 | /* codec IO */ | ||
507 | static inline unsigned int snd_soc_read(struct snd_soc_codec *codec, | ||
508 | unsigned int reg) | ||
509 | { | ||
510 | return codec->read(codec, reg); | ||
511 | } | ||
512 | |||
513 | static inline unsigned int snd_soc_write(struct snd_soc_codec *codec, | ||
514 | unsigned int reg, unsigned int val) | ||
515 | { | ||
516 | return codec->write(codec, reg, val); | ||
517 | } | ||
518 | |||
493 | #include <sound/soc-dai.h> | 519 | #include <sound/soc-dai.h> |
494 | 520 | ||
495 | #endif | 521 | #endif |
diff --git a/include/sound/wm9081.h b/include/sound/wm9081.h new file mode 100644 index 000000000000..e173ddbf6bd4 --- /dev/null +++ b/include/sound/wm9081.h | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | * linux/sound/wm9081.h -- Platform data for WM9081 | ||
3 | * | ||
4 | * Copyright 2009 Wolfson Microelectronics. PLC. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #ifndef __LINUX_SND_WM_9081_H | ||
12 | #define __LINUX_SND_WM_9081_H | ||
13 | |||
14 | struct wm9081_retune_mobile_setting { | ||
15 | const char *name; | ||
16 | unsigned int rate; | ||
17 | u16 config[20]; | ||
18 | }; | ||
19 | |||
20 | struct wm9081_retune_mobile_config { | ||
21 | struct wm9081_retune_mobile_setting *configs; | ||
22 | int num_configs; | ||
23 | }; | ||
24 | |||
25 | #endif | ||