diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-13 13:32:54 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-13 13:32:54 -0500 |
commit | 66dc918d42eaaa9afe42a47d07526765162017a9 (patch) | |
tree | 947411841773dfb076f1aa78bc5be868bc4281a6 /include | |
parent | b2034d474b7e1e8578bd5c2977024b51693269d9 (diff) | |
parent | 6db9a0f326d3144d790d9479309df480a8f562e4 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: (348 commits)
ALSA: hda - Fix NULL-derefence with a single mic in STAC auto-mic detection
ALSA: hda - Add missing NID 0x19 fixup for Sony VAIO
ALSA: hda - Fix ALC275 enable hardware EQ for SONY VAIO
ALSA: oxygen: fix Xonar DG input
ALSA: hda - Fix EAPD on Lenovo NB ALC269 to low
ALSA: hda - Fix missing EAPD for Acer 4930G
ALSA: hda: Disable 4/6 channels on some NVIDIA GPUs.
ALSA: hda - Add static_hdmi_pcm option to HDMI codec parser
ALSA: hda - Don't refer ELD when unplugged
ASoC: tpa6130a2: Fix compiler warning
ASoC: tlv320dac33: Add DAPM selection for LOM invert
ASoC: DMIC codec: Adding a generic DMIC codec
ALSA: snd-usb-us122l: Fix missing NULL checks
ALSA: snd-usb-us122l: Fix MIDI output
ASoC: soc-cache: Fix invalid memory access during snd_soc_lzo_cache_sync()
ASoC: Fix section mismatch in wm8995.c
ALSA: oxygen: add S/PDIF source selection for Claro cards
ALSA: oxygen: fix CD/MIDI for X-Meridian (2G)
ASoC: fix migor audio build
ALSA: include delay.h for msleep in Xonar DG support
...
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/mfd/wm8994/core.h | 8 | ||||
-rw-r--r-- | include/linux/mfd/wm8994/pdata.h | 17 | ||||
-rw-r--r-- | include/linux/mfd/wm8994/registers.h | 302 | ||||
-rw-r--r-- | include/sound/alc5623.h | 15 | ||||
-rw-r--r-- | include/sound/asound.h | 3 | ||||
-rw-r--r-- | include/sound/control.h | 4 | ||||
-rw-r--r-- | include/sound/hdsp.h | 1 | ||||
-rw-r--r-- | include/sound/minors.h | 4 | ||||
-rw-r--r-- | include/sound/pcm.h | 1 | ||||
-rw-r--r-- | include/sound/soc-dai.h | 4 | ||||
-rw-r--r-- | include/sound/soc-dapm.h | 99 | ||||
-rw-r--r-- | include/sound/soc.h | 116 | ||||
-rw-r--r-- | include/trace/events/asoc.h | 235 |
13 files changed, 749 insertions, 60 deletions
diff --git a/include/linux/mfd/wm8994/core.h b/include/linux/mfd/wm8994/core.h index de79baee4925..3fd36845ca45 100644 --- a/include/linux/mfd/wm8994/core.h +++ b/include/linux/mfd/wm8994/core.h | |||
@@ -17,6 +17,11 @@ | |||
17 | 17 | ||
18 | #include <linux/interrupt.h> | 18 | #include <linux/interrupt.h> |
19 | 19 | ||
20 | enum wm8994_type { | ||
21 | WM8994 = 0, | ||
22 | WM8958 = 1, | ||
23 | }; | ||
24 | |||
20 | struct regulator_dev; | 25 | struct regulator_dev; |
21 | struct regulator_bulk_data; | 26 | struct regulator_bulk_data; |
22 | 27 | ||
@@ -48,6 +53,8 @@ struct wm8994 { | |||
48 | struct mutex io_lock; | 53 | struct mutex io_lock; |
49 | struct mutex irq_lock; | 54 | struct mutex irq_lock; |
50 | 55 | ||
56 | enum wm8994_type type; | ||
57 | |||
51 | struct device *dev; | 58 | struct device *dev; |
52 | int (*read_dev)(struct wm8994 *wm8994, unsigned short reg, | 59 | int (*read_dev)(struct wm8994 *wm8994, unsigned short reg, |
53 | int bytes, void *dest); | 60 | int bytes, void *dest); |
@@ -68,6 +75,7 @@ struct wm8994 { | |||
68 | u16 gpio_regs[WM8994_NUM_GPIO_REGS]; | 75 | u16 gpio_regs[WM8994_NUM_GPIO_REGS]; |
69 | 76 | ||
70 | struct regulator_dev *dbvdd; | 77 | struct regulator_dev *dbvdd; |
78 | int num_supplies; | ||
71 | struct regulator_bulk_data *supplies; | 79 | struct regulator_bulk_data *supplies; |
72 | }; | 80 | }; |
73 | 81 | ||
diff --git a/include/linux/mfd/wm8994/pdata.h b/include/linux/mfd/wm8994/pdata.h index add8a1b8bcf0..9eab263658be 100644 --- a/include/linux/mfd/wm8994/pdata.h +++ b/include/linux/mfd/wm8994/pdata.h | |||
@@ -30,6 +30,8 @@ struct wm8994_ldo_pdata { | |||
30 | 30 | ||
31 | #define WM8994_DRC_REGS 5 | 31 | #define WM8994_DRC_REGS 5 |
32 | #define WM8994_EQ_REGS 20 | 32 | #define WM8994_EQ_REGS 20 |
33 | #define WM8958_MBC_CUTOFF_REGS 20 | ||
34 | #define WM8958_MBC_COEFF_REGS 48 | ||
33 | 35 | ||
34 | /** | 36 | /** |
35 | * DRC configurations are specified with a label and a set of register | 37 | * DRC configurations are specified with a label and a set of register |
@@ -59,6 +61,18 @@ struct wm8994_retune_mobile_cfg { | |||
59 | u16 regs[WM8994_EQ_REGS]; | 61 | u16 regs[WM8994_EQ_REGS]; |
60 | }; | 62 | }; |
61 | 63 | ||
64 | /** | ||
65 | * Multiband compressor configurations are specified with a label and | ||
66 | * two sets of values to write. Configurations are expected to be | ||
67 | * generated using the multiband compressor configuration panel in | ||
68 | * WISCE - see http://www.wolfsonmicro.com/wisce/ | ||
69 | */ | ||
70 | struct wm8958_mbc_cfg { | ||
71 | const char *name; | ||
72 | u16 cutoff_regs[WM8958_MBC_CUTOFF_REGS]; | ||
73 | u16 coeff_regs[WM8958_MBC_COEFF_REGS]; | ||
74 | }; | ||
75 | |||
62 | struct wm8994_pdata { | 76 | struct wm8994_pdata { |
63 | int gpio_base; | 77 | int gpio_base; |
64 | 78 | ||
@@ -78,6 +92,9 @@ struct wm8994_pdata { | |||
78 | int num_retune_mobile_cfgs; | 92 | int num_retune_mobile_cfgs; |
79 | struct wm8994_retune_mobile_cfg *retune_mobile_cfgs; | 93 | struct wm8994_retune_mobile_cfg *retune_mobile_cfgs; |
80 | 94 | ||
95 | int num_mbc_cfgs; | ||
96 | struct wm8958_mbc_cfg *mbc_cfgs; | ||
97 | |||
81 | /* LINEOUT can be differential or single ended */ | 98 | /* LINEOUT can be differential or single ended */ |
82 | unsigned int lineout1_diff:1; | 99 | unsigned int lineout1_diff:1; |
83 | unsigned int lineout2_diff:1; | 100 | unsigned int lineout2_diff:1; |
diff --git a/include/linux/mfd/wm8994/registers.h b/include/linux/mfd/wm8994/registers.h index 967f62f54159..be072faec6f0 100644 --- a/include/linux/mfd/wm8994/registers.h +++ b/include/linux/mfd/wm8994/registers.h | |||
@@ -64,12 +64,16 @@ | |||
64 | #define WM8994_LDO_1 0x3B | 64 | #define WM8994_LDO_1 0x3B |
65 | #define WM8994_LDO_2 0x3C | 65 | #define WM8994_LDO_2 0x3C |
66 | #define WM8994_CHARGE_PUMP_1 0x4C | 66 | #define WM8994_CHARGE_PUMP_1 0x4C |
67 | #define WM8958_CHARGE_PUMP_2 0x4D | ||
67 | #define WM8994_CLASS_W_1 0x51 | 68 | #define WM8994_CLASS_W_1 0x51 |
68 | #define WM8994_DC_SERVO_1 0x54 | 69 | #define WM8994_DC_SERVO_1 0x54 |
69 | #define WM8994_DC_SERVO_2 0x55 | 70 | #define WM8994_DC_SERVO_2 0x55 |
70 | #define WM8994_DC_SERVO_4 0x57 | 71 | #define WM8994_DC_SERVO_4 0x57 |
71 | #define WM8994_DC_SERVO_READBACK 0x58 | 72 | #define WM8994_DC_SERVO_READBACK 0x58 |
72 | #define WM8994_ANALOGUE_HP_1 0x60 | 73 | #define WM8994_ANALOGUE_HP_1 0x60 |
74 | #define WM8958_MIC_DETECT_1 0xD0 | ||
75 | #define WM8958_MIC_DETECT_2 0xD1 | ||
76 | #define WM8958_MIC_DETECT_3 0xD2 | ||
73 | #define WM8994_CHIP_REVISION 0x100 | 77 | #define WM8994_CHIP_REVISION 0x100 |
74 | #define WM8994_CONTROL_INTERFACE 0x101 | 78 | #define WM8994_CONTROL_INTERFACE 0x101 |
75 | #define WM8994_WRITE_SEQUENCER_CTRL_1 0x110 | 79 | #define WM8994_WRITE_SEQUENCER_CTRL_1 0x110 |
@@ -109,6 +113,10 @@ | |||
109 | #define WM8994_AIF2DAC_LRCLK 0x315 | 113 | #define WM8994_AIF2DAC_LRCLK 0x315 |
110 | #define WM8994_AIF2DAC_DATA 0x316 | 114 | #define WM8994_AIF2DAC_DATA 0x316 |
111 | #define WM8994_AIF2ADC_DATA 0x317 | 115 | #define WM8994_AIF2ADC_DATA 0x317 |
116 | #define WM8958_AIF3_CONTROL_1 0x320 | ||
117 | #define WM8958_AIF3_CONTROL_2 0x321 | ||
118 | #define WM8958_AIF3DAC_DATA 0x322 | ||
119 | #define WM8958_AIF3ADC_DATA 0x323 | ||
112 | #define WM8994_AIF1_ADC1_LEFT_VOLUME 0x400 | 120 | #define WM8994_AIF1_ADC1_LEFT_VOLUME 0x400 |
113 | #define WM8994_AIF1_ADC1_RIGHT_VOLUME 0x401 | 121 | #define WM8994_AIF1_ADC1_RIGHT_VOLUME 0x401 |
114 | #define WM8994_AIF1_DAC1_LEFT_VOLUME 0x402 | 122 | #define WM8994_AIF1_DAC1_LEFT_VOLUME 0x402 |
@@ -242,6 +250,83 @@ | |||
242 | #define WM8994_INTERRUPT_STATUS_2_MASK 0x739 | 250 | #define WM8994_INTERRUPT_STATUS_2_MASK 0x739 |
243 | #define WM8994_INTERRUPT_CONTROL 0x740 | 251 | #define WM8994_INTERRUPT_CONTROL 0x740 |
244 | #define WM8994_IRQ_DEBOUNCE 0x748 | 252 | #define WM8994_IRQ_DEBOUNCE 0x748 |
253 | #define WM8958_DSP2_PROGRAM 0x900 | ||
254 | #define WM8958_DSP2_CONFIG 0x901 | ||
255 | #define WM8958_DSP2_MAGICNUM 0xA00 | ||
256 | #define WM8958_DSP2_RELEASEYEAR 0xA01 | ||
257 | #define WM8958_DSP2_RELEASEMONTHDAY 0xA02 | ||
258 | #define WM8958_DSP2_RELEASETIME 0xA03 | ||
259 | #define WM8958_DSP2_VERMAJMIN 0xA04 | ||
260 | #define WM8958_DSP2_VERBUILD 0xA05 | ||
261 | #define WM8958_DSP2_EXECCONTROL 0xA0D | ||
262 | #define WM8958_MBC_BAND_2_LOWER_CUTOFF_C1_1 0x2200 | ||
263 | #define WM8958_MBC_BAND_2_LOWER_CUTOFF_C1_2 0x2201 | ||
264 | #define WM8958_MBC_BAND_2_LOWER_CUTOFF_C2_1 0x2202 | ||
265 | #define WM8958_MBC_BAND_2_LOWER_CUTOFF_C2_2 0x2203 | ||
266 | #define WM8958_MBC_BAND_2_LOWER_CUTOFF_C3_1 0x2204 | ||
267 | #define WM8958_MBC_BAND_2_LOWER_CUTOFF_C3_2 0x2205 | ||
268 | #define WM8958_MBC_BAND_2_UPPER_CUTOFF_C2_1 0x2206 | ||
269 | #define WM8958_MBC_BAND_2_UPPER_CUTOFF_C2_2 0x2207 | ||
270 | #define WM8958_MBC_BAND_2_UPPER_CUTOFF_C3_1 0x2208 | ||
271 | #define WM8958_MBC_BAND_2_UPPER_CUTOFF_C3_2 0x2209 | ||
272 | #define WM8958_MBC_BAND_2_UPPER_CUTOFF_C1_1 0x220A | ||
273 | #define WM8958_MBC_BAND_2_UPPER_CUTOFF_C1_2 0x220B | ||
274 | #define WM8958_MBC_BAND_1_UPPER_CUTOFF_C1_1 0x220C | ||
275 | #define WM8958_MBC_BAND_1_UPPER_CUTOFF_C1_2 0x220D | ||
276 | #define WM8958_MBC_BAND_1_UPPER_CUTOFF_C2_1 0x220E | ||
277 | #define WM8958_MBC_BAND_1_UPPER_CUTOFF_C2_2 0x220F | ||
278 | #define WM8958_MBC_BAND_1_UPPER_CUTOFF_C3_1 0x2210 | ||
279 | #define WM8958_MBC_BAND_1_UPPER_CUTOFF_C3_2 0x2211 | ||
280 | #define WM8958_MBC_BAND_1_LOWER_CUTOFF_1 0x2212 | ||
281 | #define WM8958_MBC_BAND_1_LOWER_CUTOFF_2 0x2213 | ||
282 | #define WM8958_MBC_BAND_1_K_1 0x2400 | ||
283 | #define WM8958_MBC_BAND_1_K_2 0x2401 | ||
284 | #define WM8958_MBC_BAND_1_N1_1 0x2402 | ||
285 | #define WM8958_MBC_BAND_1_N1_2 0x2403 | ||
286 | #define WM8958_MBC_BAND_1_N2_1 0x2404 | ||
287 | #define WM8958_MBC_BAND_1_N2_2 0x2405 | ||
288 | #define WM8958_MBC_BAND_1_N3_1 0x2406 | ||
289 | #define WM8958_MBC_BAND_1_N3_2 0x2407 | ||
290 | #define WM8958_MBC_BAND_1_N4_1 0x2408 | ||
291 | #define WM8958_MBC_BAND_1_N4_2 0x2409 | ||
292 | #define WM8958_MBC_BAND_1_N5_1 0x240A | ||
293 | #define WM8958_MBC_BAND_1_N5_2 0x240B | ||
294 | #define WM8958_MBC_BAND_1_X1_1 0x240C | ||
295 | #define WM8958_MBC_BAND_1_X1_2 0x240D | ||
296 | #define WM8958_MBC_BAND_1_X2_1 0x240E | ||
297 | #define WM8958_MBC_BAND_1_X2_2 0x240F | ||
298 | #define WM8958_MBC_BAND_1_X3_1 0x2410 | ||
299 | #define WM8958_MBC_BAND_1_X3_2 0x2411 | ||
300 | #define WM8958_MBC_BAND_1_ATTACK_1 0x2412 | ||
301 | #define WM8958_MBC_BAND_1_ATTACK_2 0x2413 | ||
302 | #define WM8958_MBC_BAND_1_DECAY_1 0x2414 | ||
303 | #define WM8958_MBC_BAND_1_DECAY_2 0x2415 | ||
304 | #define WM8958_MBC_BAND_2_K_1 0x2416 | ||
305 | #define WM8958_MBC_BAND_2_K_2 0x2417 | ||
306 | #define WM8958_MBC_BAND_2_N1_1 0x2418 | ||
307 | #define WM8958_MBC_BAND_2_N1_2 0x2419 | ||
308 | #define WM8958_MBC_BAND_2_N2_1 0x241A | ||
309 | #define WM8958_MBC_BAND_2_N2_2 0x241B | ||
310 | #define WM8958_MBC_BAND_2_N3_1 0x241C | ||
311 | #define WM8958_MBC_BAND_2_N3_2 0x241D | ||
312 | #define WM8958_MBC_BAND_2_N4_1 0x241E | ||
313 | #define WM8958_MBC_BAND_2_N4_2 0x241F | ||
314 | #define WM8958_MBC_BAND_2_N5_1 0x2420 | ||
315 | #define WM8958_MBC_BAND_2_N5_2 0x2421 | ||
316 | #define WM8958_MBC_BAND_2_X1_1 0x2422 | ||
317 | #define WM8958_MBC_BAND_2_X1_2 0x2423 | ||
318 | #define WM8958_MBC_BAND_2_X2_1 0x2424 | ||
319 | #define WM8958_MBC_BAND_2_X2_2 0x2425 | ||
320 | #define WM8958_MBC_BAND_2_X3_1 0x2426 | ||
321 | #define WM8958_MBC_BAND_2_X3_2 0x2427 | ||
322 | #define WM8958_MBC_BAND_2_ATTACK_1 0x2428 | ||
323 | #define WM8958_MBC_BAND_2_ATTACK_2 0x2429 | ||
324 | #define WM8958_MBC_BAND_2_DECAY_1 0x242A | ||
325 | #define WM8958_MBC_BAND_2_DECAY_2 0x242B | ||
326 | #define WM8958_MBC_B2_PG2_1 0x242C | ||
327 | #define WM8958_MBC_B2_PG2_2 0x242D | ||
328 | #define WM8958_MBC_B1_PG2_1 0x242E | ||
329 | #define WM8958_MBC_B1_PG2_2 0x242F | ||
245 | #define WM8994_WRITE_SEQUENCER_0 0x3000 | 330 | #define WM8994_WRITE_SEQUENCER_0 0x3000 |
246 | #define WM8994_WRITE_SEQUENCER_1 0x3001 | 331 | #define WM8994_WRITE_SEQUENCER_1 0x3001 |
247 | #define WM8994_WRITE_SEQUENCER_2 0x3002 | 332 | #define WM8994_WRITE_SEQUENCER_2 0x3002 |
@@ -992,6 +1077,12 @@ | |||
992 | /* | 1077 | /* |
993 | * R6 (0x06) - Power Management (6) | 1078 | * R6 (0x06) - Power Management (6) |
994 | */ | 1079 | */ |
1080 | #define WM8958_AIF3ADC_SRC_MASK 0x0600 /* AIF3ADC_SRC - [10:9] */ | ||
1081 | #define WM8958_AIF3ADC_SRC_SHIFT 9 /* AIF3ADC_SRC - [10:9] */ | ||
1082 | #define WM8958_AIF3ADC_SRC_WIDTH 2 /* AIF3ADC_SRC - [10:9] */ | ||
1083 | #define WM8958_AIF2DAC_SRC_MASK 0x0180 /* AIF2DAC_SRC - [8:7] */ | ||
1084 | #define WM8958_AIF2DAC_SRC_SHIFT 7 /* AIF2DAC_SRC - [8:7] */ | ||
1085 | #define WM8958_AIF2DAC_SRC_WIDTH 2 /* AIF2DAC_SRC - [8:7] */ | ||
995 | #define WM8994_AIF3_TRI 0x0020 /* AIF3_TRI */ | 1086 | #define WM8994_AIF3_TRI 0x0020 /* AIF3_TRI */ |
996 | #define WM8994_AIF3_TRI_MASK 0x0020 /* AIF3_TRI */ | 1087 | #define WM8994_AIF3_TRI_MASK 0x0020 /* AIF3_TRI */ |
997 | #define WM8994_AIF3_TRI_SHIFT 5 /* AIF3_TRI */ | 1088 | #define WM8994_AIF3_TRI_SHIFT 5 /* AIF3_TRI */ |
@@ -1836,6 +1927,14 @@ | |||
1836 | #define WM8994_CP_ENA_WIDTH 1 /* CP_ENA */ | 1927 | #define WM8994_CP_ENA_WIDTH 1 /* CP_ENA */ |
1837 | 1928 | ||
1838 | /* | 1929 | /* |
1930 | * R77 (0x4D) - Charge Pump (2) | ||
1931 | */ | ||
1932 | #define WM8958_CP_DISCH 0x8000 /* CP_DISCH */ | ||
1933 | #define WM8958_CP_DISCH_MASK 0x8000 /* CP_DISCH */ | ||
1934 | #define WM8958_CP_DISCH_SHIFT 15 /* CP_DISCH */ | ||
1935 | #define WM8958_CP_DISCH_WIDTH 1 /* CP_DISCH */ | ||
1936 | |||
1937 | /* | ||
1839 | * R81 (0x51) - Class W (1) | 1938 | * R81 (0x51) - Class W (1) |
1840 | */ | 1939 | */ |
1841 | #define WM8994_CP_DYN_SRC_SEL_MASK 0x0300 /* CP_DYN_SRC_SEL - [9:8] */ | 1940 | #define WM8994_CP_DYN_SRC_SEL_MASK 0x0300 /* CP_DYN_SRC_SEL - [9:8] */ |
@@ -1952,6 +2051,46 @@ | |||
1952 | #define WM8994_HPOUT1R_DLY_WIDTH 1 /* HPOUT1R_DLY */ | 2051 | #define WM8994_HPOUT1R_DLY_WIDTH 1 /* HPOUT1R_DLY */ |
1953 | 2052 | ||
1954 | /* | 2053 | /* |
2054 | * R208 (0xD0) - Mic Detect 1 | ||
2055 | */ | ||
2056 | #define WM8958_MICD_BIAS_STARTTIME_MASK 0xF000 /* MICD_BIAS_STARTTIME - [15:12] */ | ||
2057 | #define WM8958_MICD_BIAS_STARTTIME_SHIFT 12 /* MICD_BIAS_STARTTIME - [15:12] */ | ||
2058 | #define WM8958_MICD_BIAS_STARTTIME_WIDTH 4 /* MICD_BIAS_STARTTIME - [15:12] */ | ||
2059 | #define WM8958_MICD_RATE_MASK 0x0F00 /* MICD_RATE - [11:8] */ | ||
2060 | #define WM8958_MICD_RATE_SHIFT 8 /* MICD_RATE - [11:8] */ | ||
2061 | #define WM8958_MICD_RATE_WIDTH 4 /* MICD_RATE - [11:8] */ | ||
2062 | #define WM8958_MICD_DBTIME 0x0002 /* MICD_DBTIME */ | ||
2063 | #define WM8958_MICD_DBTIME_MASK 0x0002 /* MICD_DBTIME */ | ||
2064 | #define WM8958_MICD_DBTIME_SHIFT 1 /* MICD_DBTIME */ | ||
2065 | #define WM8958_MICD_DBTIME_WIDTH 1 /* MICD_DBTIME */ | ||
2066 | #define WM8958_MICD_ENA 0x0001 /* MICD_ENA */ | ||
2067 | #define WM8958_MICD_ENA_MASK 0x0001 /* MICD_ENA */ | ||
2068 | #define WM8958_MICD_ENA_SHIFT 0 /* MICD_ENA */ | ||
2069 | #define WM8958_MICD_ENA_WIDTH 1 /* MICD_ENA */ | ||
2070 | |||
2071 | /* | ||
2072 | * R209 (0xD1) - Mic Detect 2 | ||
2073 | */ | ||
2074 | #define WM8958_MICD_LVL_SEL_MASK 0x00FF /* MICD_LVL_SEL - [7:0] */ | ||
2075 | #define WM8958_MICD_LVL_SEL_SHIFT 0 /* MICD_LVL_SEL - [7:0] */ | ||
2076 | #define WM8958_MICD_LVL_SEL_WIDTH 8 /* MICD_LVL_SEL - [7:0] */ | ||
2077 | |||
2078 | /* | ||
2079 | * R210 (0xD2) - Mic Detect 3 | ||
2080 | */ | ||
2081 | #define WM8958_MICD_LVL_MASK 0x07FC /* MICD_LVL - [10:2] */ | ||
2082 | #define WM8958_MICD_LVL_SHIFT 2 /* MICD_LVL - [10:2] */ | ||
2083 | #define WM8958_MICD_LVL_WIDTH 9 /* MICD_LVL - [10:2] */ | ||
2084 | #define WM8958_MICD_VALID 0x0002 /* MICD_VALID */ | ||
2085 | #define WM8958_MICD_VALID_MASK 0x0002 /* MICD_VALID */ | ||
2086 | #define WM8958_MICD_VALID_SHIFT 1 /* MICD_VALID */ | ||
2087 | #define WM8958_MICD_VALID_WIDTH 1 /* MICD_VALID */ | ||
2088 | #define WM8958_MICD_STS 0x0001 /* MICD_STS */ | ||
2089 | #define WM8958_MICD_STS_MASK 0x0001 /* MICD_STS */ | ||
2090 | #define WM8958_MICD_STS_SHIFT 0 /* MICD_STS */ | ||
2091 | #define WM8958_MICD_STS_WIDTH 1 /* MICD_STS */ | ||
2092 | |||
2093 | /* | ||
1955 | * R256 (0x100) - Chip Revision | 2094 | * R256 (0x100) - Chip Revision |
1956 | */ | 2095 | */ |
1957 | #define WM8994_CHIP_REV_MASK 0x000F /* CHIP_REV - [3:0] */ | 2096 | #define WM8994_CHIP_REV_MASK 0x000F /* CHIP_REV - [3:0] */ |
@@ -2069,6 +2208,14 @@ | |||
2069 | /* | 2208 | /* |
2070 | * R520 (0x208) - Clocking (1) | 2209 | * R520 (0x208) - Clocking (1) |
2071 | */ | 2210 | */ |
2211 | #define WM8958_DSP2CLK_ENA 0x4000 /* DSP2CLK_ENA */ | ||
2212 | #define WM8958_DSP2CLK_ENA_MASK 0x4000 /* DSP2CLK_ENA */ | ||
2213 | #define WM8958_DSP2CLK_ENA_SHIFT 14 /* DSP2CLK_ENA */ | ||
2214 | #define WM8958_DSP2CLK_ENA_WIDTH 1 /* DSP2CLK_ENA */ | ||
2215 | #define WM8958_DSP2CLK_SRC 0x1000 /* DSP2CLK_SRC */ | ||
2216 | #define WM8958_DSP2CLK_SRC_MASK 0x1000 /* DSP2CLK_SRC */ | ||
2217 | #define WM8958_DSP2CLK_SRC_SHIFT 12 /* DSP2CLK_SRC */ | ||
2218 | #define WM8958_DSP2CLK_SRC_WIDTH 1 /* DSP2CLK_SRC */ | ||
2072 | #define WM8994_TOCLK_ENA 0x0010 /* TOCLK_ENA */ | 2219 | #define WM8994_TOCLK_ENA 0x0010 /* TOCLK_ENA */ |
2073 | #define WM8994_TOCLK_ENA_MASK 0x0010 /* TOCLK_ENA */ | 2220 | #define WM8994_TOCLK_ENA_MASK 0x0010 /* TOCLK_ENA */ |
2074 | #define WM8994_TOCLK_ENA_SHIFT 4 /* TOCLK_ENA */ | 2221 | #define WM8994_TOCLK_ENA_SHIFT 4 /* TOCLK_ENA */ |
@@ -2553,6 +2700,63 @@ | |||
2553 | #define WM8994_AIF2ADCR_DAT_INV_WIDTH 1 /* AIF2ADCR_DAT_INV */ | 2700 | #define WM8994_AIF2ADCR_DAT_INV_WIDTH 1 /* AIF2ADCR_DAT_INV */ |
2554 | 2701 | ||
2555 | /* | 2702 | /* |
2703 | * R800 (0x320) - AIF3 Control (1) | ||
2704 | */ | ||
2705 | #define WM8958_AIF3_LRCLK_INV 0x0080 /* AIF3_LRCLK_INV */ | ||
2706 | #define WM8958_AIF3_LRCLK_INV_MASK 0x0080 /* AIF3_LRCLK_INV */ | ||
2707 | #define WM8958_AIF3_LRCLK_INV_SHIFT 7 /* AIF3_LRCLK_INV */ | ||
2708 | #define WM8958_AIF3_LRCLK_INV_WIDTH 1 /* AIF3_LRCLK_INV */ | ||
2709 | #define WM8958_AIF3_WL_MASK 0x0060 /* AIF3_WL - [6:5] */ | ||
2710 | #define WM8958_AIF3_WL_SHIFT 5 /* AIF3_WL - [6:5] */ | ||
2711 | #define WM8958_AIF3_WL_WIDTH 2 /* AIF3_WL - [6:5] */ | ||
2712 | #define WM8958_AIF3_FMT_MASK 0x0018 /* AIF3_FMT - [4:3] */ | ||
2713 | #define WM8958_AIF3_FMT_SHIFT 3 /* AIF3_FMT - [4:3] */ | ||
2714 | #define WM8958_AIF3_FMT_WIDTH 2 /* AIF3_FMT - [4:3] */ | ||
2715 | |||
2716 | /* | ||
2717 | * R801 (0x321) - AIF3 Control (2) | ||
2718 | */ | ||
2719 | #define WM8958_AIF3DAC_BOOST_MASK 0x0C00 /* AIF3DAC_BOOST - [11:10] */ | ||
2720 | #define WM8958_AIF3DAC_BOOST_SHIFT 10 /* AIF3DAC_BOOST - [11:10] */ | ||
2721 | #define WM8958_AIF3DAC_BOOST_WIDTH 2 /* AIF3DAC_BOOST - [11:10] */ | ||
2722 | #define WM8958_AIF3DAC_COMP 0x0010 /* AIF3DAC_COMP */ | ||
2723 | #define WM8958_AIF3DAC_COMP_MASK 0x0010 /* AIF3DAC_COMP */ | ||
2724 | #define WM8958_AIF3DAC_COMP_SHIFT 4 /* AIF3DAC_COMP */ | ||
2725 | #define WM8958_AIF3DAC_COMP_WIDTH 1 /* AIF3DAC_COMP */ | ||
2726 | #define WM8958_AIF3DAC_COMPMODE 0x0008 /* AIF3DAC_COMPMODE */ | ||
2727 | #define WM8958_AIF3DAC_COMPMODE_MASK 0x0008 /* AIF3DAC_COMPMODE */ | ||
2728 | #define WM8958_AIF3DAC_COMPMODE_SHIFT 3 /* AIF3DAC_COMPMODE */ | ||
2729 | #define WM8958_AIF3DAC_COMPMODE_WIDTH 1 /* AIF3DAC_COMPMODE */ | ||
2730 | #define WM8958_AIF3ADC_COMP 0x0004 /* AIF3ADC_COMP */ | ||
2731 | #define WM8958_AIF3ADC_COMP_MASK 0x0004 /* AIF3ADC_COMP */ | ||
2732 | #define WM8958_AIF3ADC_COMP_SHIFT 2 /* AIF3ADC_COMP */ | ||
2733 | #define WM8958_AIF3ADC_COMP_WIDTH 1 /* AIF3ADC_COMP */ | ||
2734 | #define WM8958_AIF3ADC_COMPMODE 0x0002 /* AIF3ADC_COMPMODE */ | ||
2735 | #define WM8958_AIF3ADC_COMPMODE_MASK 0x0002 /* AIF3ADC_COMPMODE */ | ||
2736 | #define WM8958_AIF3ADC_COMPMODE_SHIFT 1 /* AIF3ADC_COMPMODE */ | ||
2737 | #define WM8958_AIF3ADC_COMPMODE_WIDTH 1 /* AIF3ADC_COMPMODE */ | ||
2738 | #define WM8958_AIF3_LOOPBACK 0x0001 /* AIF3_LOOPBACK */ | ||
2739 | #define WM8958_AIF3_LOOPBACK_MASK 0x0001 /* AIF3_LOOPBACK */ | ||
2740 | #define WM8958_AIF3_LOOPBACK_SHIFT 0 /* AIF3_LOOPBACK */ | ||
2741 | #define WM8958_AIF3_LOOPBACK_WIDTH 1 /* AIF3_LOOPBACK */ | ||
2742 | |||
2743 | /* | ||
2744 | * R802 (0x322) - AIF3DAC Data | ||
2745 | */ | ||
2746 | #define WM8958_AIF3DAC_DAT_INV 0x0001 /* AIF3DAC_DAT_INV */ | ||
2747 | #define WM8958_AIF3DAC_DAT_INV_MASK 0x0001 /* AIF3DAC_DAT_INV */ | ||
2748 | #define WM8958_AIF3DAC_DAT_INV_SHIFT 0 /* AIF3DAC_DAT_INV */ | ||
2749 | #define WM8958_AIF3DAC_DAT_INV_WIDTH 1 /* AIF3DAC_DAT_INV */ | ||
2750 | |||
2751 | /* | ||
2752 | * R803 (0x323) - AIF3ADC Data | ||
2753 | */ | ||
2754 | #define WM8958_AIF3ADC_DAT_INV 0x0001 /* AIF3ADC_DAT_INV */ | ||
2755 | #define WM8958_AIF3ADC_DAT_INV_MASK 0x0001 /* AIF3ADC_DAT_INV */ | ||
2756 | #define WM8958_AIF3ADC_DAT_INV_SHIFT 0 /* AIF3ADC_DAT_INV */ | ||
2757 | #define WM8958_AIF3ADC_DAT_INV_WIDTH 1 /* AIF3ADC_DAT_INV */ | ||
2758 | |||
2759 | /* | ||
2556 | * R1024 (0x400) - AIF1 ADC1 Left Volume | 2760 | * R1024 (0x400) - AIF1 ADC1 Left Volume |
2557 | */ | 2761 | */ |
2558 | #define WM8994_AIF1ADC1_VU 0x0100 /* AIF1ADC1_VU */ | 2762 | #define WM8994_AIF1ADC1_VU 0x0100 /* AIF1ADC1_VU */ |
@@ -4289,4 +4493,102 @@ | |||
4289 | #define WM8994_TEMP_SHUT_DB_SHIFT 0 /* TEMP_SHUT_DB */ | 4493 | #define WM8994_TEMP_SHUT_DB_SHIFT 0 /* TEMP_SHUT_DB */ |
4290 | #define WM8994_TEMP_SHUT_DB_WIDTH 1 /* TEMP_SHUT_DB */ | 4494 | #define WM8994_TEMP_SHUT_DB_WIDTH 1 /* TEMP_SHUT_DB */ |
4291 | 4495 | ||
4496 | /* | ||
4497 | * R2304 (0x900) - DSP2_Program | ||
4498 | */ | ||
4499 | #define WM8958_DSP2_ENA 0x0001 /* DSP2_ENA */ | ||
4500 | #define WM8958_DSP2_ENA_MASK 0x0001 /* DSP2_ENA */ | ||
4501 | #define WM8958_DSP2_ENA_SHIFT 0 /* DSP2_ENA */ | ||
4502 | #define WM8958_DSP2_ENA_WIDTH 1 /* DSP2_ENA */ | ||
4503 | |||
4504 | /* | ||
4505 | * R2305 (0x901) - DSP2_Config | ||
4506 | */ | ||
4507 | #define WM8958_MBC_SEL_MASK 0x0030 /* MBC_SEL - [5:4] */ | ||
4508 | #define WM8958_MBC_SEL_SHIFT 4 /* MBC_SEL - [5:4] */ | ||
4509 | #define WM8958_MBC_SEL_WIDTH 2 /* MBC_SEL - [5:4] */ | ||
4510 | #define WM8958_MBC_ENA 0x0001 /* MBC_ENA */ | ||
4511 | #define WM8958_MBC_ENA_MASK 0x0001 /* MBC_ENA */ | ||
4512 | #define WM8958_MBC_ENA_SHIFT 0 /* MBC_ENA */ | ||
4513 | #define WM8958_MBC_ENA_WIDTH 1 /* MBC_ENA */ | ||
4514 | |||
4515 | /* | ||
4516 | * R2560 (0xA00) - DSP2_MagicNum | ||
4517 | */ | ||
4518 | #define WM8958_DSP2_MAGIC_NUM_MASK 0xFFFF /* DSP2_MAGIC_NUM - [15:0] */ | ||
4519 | #define WM8958_DSP2_MAGIC_NUM_SHIFT 0 /* DSP2_MAGIC_NUM - [15:0] */ | ||
4520 | #define WM8958_DSP2_MAGIC_NUM_WIDTH 16 /* DSP2_MAGIC_NUM - [15:0] */ | ||
4521 | |||
4522 | /* | ||
4523 | * R2561 (0xA01) - DSP2_ReleaseYear | ||
4524 | */ | ||
4525 | #define WM8958_DSP2_RELEASE_YEAR_MASK 0xFFFF /* DSP2_RELEASE_YEAR - [15:0] */ | ||
4526 | #define WM8958_DSP2_RELEASE_YEAR_SHIFT 0 /* DSP2_RELEASE_YEAR - [15:0] */ | ||
4527 | #define WM8958_DSP2_RELEASE_YEAR_WIDTH 16 /* DSP2_RELEASE_YEAR - [15:0] */ | ||
4528 | |||
4529 | /* | ||
4530 | * R2562 (0xA02) - DSP2_ReleaseMonthDay | ||
4531 | */ | ||
4532 | #define WM8958_DSP2_RELEASE_MONTH_MASK 0xFF00 /* DSP2_RELEASE_MONTH - [15:8] */ | ||
4533 | #define WM8958_DSP2_RELEASE_MONTH_SHIFT 8 /* DSP2_RELEASE_MONTH - [15:8] */ | ||
4534 | #define WM8958_DSP2_RELEASE_MONTH_WIDTH 8 /* DSP2_RELEASE_MONTH - [15:8] */ | ||
4535 | #define WM8958_DSP2_RELEASE_DAY_MASK 0x00FF /* DSP2_RELEASE_DAY - [7:0] */ | ||
4536 | #define WM8958_DSP2_RELEASE_DAY_SHIFT 0 /* DSP2_RELEASE_DAY - [7:0] */ | ||
4537 | #define WM8958_DSP2_RELEASE_DAY_WIDTH 8 /* DSP2_RELEASE_DAY - [7:0] */ | ||
4538 | |||
4539 | /* | ||
4540 | * R2563 (0xA03) - DSP2_ReleaseTime | ||
4541 | */ | ||
4542 | #define WM8958_DSP2_RELEASE_HOURS_MASK 0xFF00 /* DSP2_RELEASE_HOURS - [15:8] */ | ||
4543 | #define WM8958_DSP2_RELEASE_HOURS_SHIFT 8 /* DSP2_RELEASE_HOURS - [15:8] */ | ||
4544 | #define WM8958_DSP2_RELEASE_HOURS_WIDTH 8 /* DSP2_RELEASE_HOURS - [15:8] */ | ||
4545 | #define WM8958_DSP2_RELEASE_MINS_MASK 0x00FF /* DSP2_RELEASE_MINS - [7:0] */ | ||
4546 | #define WM8958_DSP2_RELEASE_MINS_SHIFT 0 /* DSP2_RELEASE_MINS - [7:0] */ | ||
4547 | #define WM8958_DSP2_RELEASE_MINS_WIDTH 8 /* DSP2_RELEASE_MINS - [7:0] */ | ||
4548 | |||
4549 | /* | ||
4550 | * R2564 (0xA04) - DSP2_VerMajMin | ||
4551 | */ | ||
4552 | #define WM8958_DSP2_MAJOR_VER_MASK 0xFF00 /* DSP2_MAJOR_VER - [15:8] */ | ||
4553 | #define WM8958_DSP2_MAJOR_VER_SHIFT 8 /* DSP2_MAJOR_VER - [15:8] */ | ||
4554 | #define WM8958_DSP2_MAJOR_VER_WIDTH 8 /* DSP2_MAJOR_VER - [15:8] */ | ||
4555 | #define WM8958_DSP2_MINOR_VER_MASK 0x00FF /* DSP2_MINOR_VER - [7:0] */ | ||
4556 | #define WM8958_DSP2_MINOR_VER_SHIFT 0 /* DSP2_MINOR_VER - [7:0] */ | ||
4557 | #define WM8958_DSP2_MINOR_VER_WIDTH 8 /* DSP2_MINOR_VER - [7:0] */ | ||
4558 | |||
4559 | /* | ||
4560 | * R2565 (0xA05) - DSP2_VerBuild | ||
4561 | */ | ||
4562 | #define WM8958_DSP2_BUILD_VER_MASK 0xFFFF /* DSP2_BUILD_VER - [15:0] */ | ||
4563 | #define WM8958_DSP2_BUILD_VER_SHIFT 0 /* DSP2_BUILD_VER - [15:0] */ | ||
4564 | #define WM8958_DSP2_BUILD_VER_WIDTH 16 /* DSP2_BUILD_VER - [15:0] */ | ||
4565 | |||
4566 | /* | ||
4567 | * R2573 (0xA0D) - DSP2_ExecControl | ||
4568 | */ | ||
4569 | #define WM8958_DSP2_STOPC 0x0020 /* DSP2_STOPC */ | ||
4570 | #define WM8958_DSP2_STOPC_MASK 0x0020 /* DSP2_STOPC */ | ||
4571 | #define WM8958_DSP2_STOPC_SHIFT 5 /* DSP2_STOPC */ | ||
4572 | #define WM8958_DSP2_STOPC_WIDTH 1 /* DSP2_STOPC */ | ||
4573 | #define WM8958_DSP2_STOPS 0x0010 /* DSP2_STOPS */ | ||
4574 | #define WM8958_DSP2_STOPS_MASK 0x0010 /* DSP2_STOPS */ | ||
4575 | #define WM8958_DSP2_STOPS_SHIFT 4 /* DSP2_STOPS */ | ||
4576 | #define WM8958_DSP2_STOPS_WIDTH 1 /* DSP2_STOPS */ | ||
4577 | #define WM8958_DSP2_STOPI 0x0008 /* DSP2_STOPI */ | ||
4578 | #define WM8958_DSP2_STOPI_MASK 0x0008 /* DSP2_STOPI */ | ||
4579 | #define WM8958_DSP2_STOPI_SHIFT 3 /* DSP2_STOPI */ | ||
4580 | #define WM8958_DSP2_STOPI_WIDTH 1 /* DSP2_STOPI */ | ||
4581 | #define WM8958_DSP2_STOP 0x0004 /* DSP2_STOP */ | ||
4582 | #define WM8958_DSP2_STOP_MASK 0x0004 /* DSP2_STOP */ | ||
4583 | #define WM8958_DSP2_STOP_SHIFT 2 /* DSP2_STOP */ | ||
4584 | #define WM8958_DSP2_STOP_WIDTH 1 /* DSP2_STOP */ | ||
4585 | #define WM8958_DSP2_RUNR 0x0002 /* DSP2_RUNR */ | ||
4586 | #define WM8958_DSP2_RUNR_MASK 0x0002 /* DSP2_RUNR */ | ||
4587 | #define WM8958_DSP2_RUNR_SHIFT 1 /* DSP2_RUNR */ | ||
4588 | #define WM8958_DSP2_RUNR_WIDTH 1 /* DSP2_RUNR */ | ||
4589 | #define WM8958_DSP2_RUN 0x0001 /* DSP2_RUN */ | ||
4590 | #define WM8958_DSP2_RUN_MASK 0x0001 /* DSP2_RUN */ | ||
4591 | #define WM8958_DSP2_RUN_SHIFT 0 /* DSP2_RUN */ | ||
4592 | #define WM8958_DSP2_RUN_WIDTH 1 /* DSP2_RUN */ | ||
4593 | |||
4292 | #endif | 4594 | #endif |
diff --git a/include/sound/alc5623.h b/include/sound/alc5623.h new file mode 100644 index 000000000000..422c97d43df3 --- /dev/null +++ b/include/sound/alc5623.h | |||
@@ -0,0 +1,15 @@ | |||
1 | #ifndef _INCLUDE_SOUND_ALC5623_H | ||
2 | #define _INCLUDE_SOUND_ALC5623_H | ||
3 | struct alc5623_platform_data { | ||
4 | /* configure : */ | ||
5 | /* Lineout/Speaker Amps Vmid ratio control */ | ||
6 | /* enable/disable adc/dac high pass filters */ | ||
7 | unsigned int add_ctrl; | ||
8 | /* configure : */ | ||
9 | /* output to enable when jack is low */ | ||
10 | /* output to enable when jack is high */ | ||
11 | /* jack detect (gpio/nc/jack detect [12] */ | ||
12 | unsigned int jack_det_ctrl; | ||
13 | }; | ||
14 | #endif | ||
15 | |||
diff --git a/include/sound/asound.h b/include/sound/asound.h index a1803ecea34d..5d6074faa279 100644 --- a/include/sound/asound.h +++ b/include/sound/asound.h | |||
@@ -259,6 +259,7 @@ typedef int __bitwise snd_pcm_subformat_t; | |||
259 | #define SNDRV_PCM_INFO_HALF_DUPLEX 0x00100000 /* only half duplex */ | 259 | #define SNDRV_PCM_INFO_HALF_DUPLEX 0x00100000 /* only half duplex */ |
260 | #define SNDRV_PCM_INFO_JOINT_DUPLEX 0x00200000 /* playback and capture stream are somewhat correlated */ | 260 | #define SNDRV_PCM_INFO_JOINT_DUPLEX 0x00200000 /* playback and capture stream are somewhat correlated */ |
261 | #define SNDRV_PCM_INFO_SYNC_START 0x00400000 /* pcm support some kind of sync go */ | 261 | #define SNDRV_PCM_INFO_SYNC_START 0x00400000 /* pcm support some kind of sync go */ |
262 | #define SNDRV_PCM_INFO_NO_PERIOD_WAKEUP 0x00800000 /* period wakeup can be disabled */ | ||
262 | #define SNDRV_PCM_INFO_FIFO_IN_FRAMES 0x80000000 /* internal kernel flag - FIFO size is in frames */ | 263 | #define SNDRV_PCM_INFO_FIFO_IN_FRAMES 0x80000000 /* internal kernel flag - FIFO size is in frames */ |
263 | 264 | ||
264 | typedef int __bitwise snd_pcm_state_t; | 265 | typedef int __bitwise snd_pcm_state_t; |
@@ -334,6 +335,8 @@ typedef int snd_pcm_hw_param_t; | |||
334 | #define SNDRV_PCM_HW_PARAM_LAST_INTERVAL SNDRV_PCM_HW_PARAM_TICK_TIME | 335 | #define SNDRV_PCM_HW_PARAM_LAST_INTERVAL SNDRV_PCM_HW_PARAM_TICK_TIME |
335 | 336 | ||
336 | #define SNDRV_PCM_HW_PARAMS_NORESAMPLE (1<<0) /* avoid rate resampling */ | 337 | #define SNDRV_PCM_HW_PARAMS_NORESAMPLE (1<<0) /* avoid rate resampling */ |
338 | #define SNDRV_PCM_HW_PARAMS_EXPORT_BUFFER (1<<1) /* export buffer */ | ||
339 | #define SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP (1<<2) /* disable period wakeups */ | ||
337 | 340 | ||
338 | struct snd_interval { | 341 | struct snd_interval { |
339 | unsigned int min, max; | 342 | unsigned int min, max; |
diff --git a/include/sound/control.h b/include/sound/control.h index 112374dc0c58..7715e6f00d38 100644 --- a/include/sound/control.h +++ b/include/sound/control.h | |||
@@ -160,12 +160,14 @@ static inline struct snd_ctl_elem_id *snd_ctl_build_ioff(struct snd_ctl_elem_id | |||
160 | } | 160 | } |
161 | 161 | ||
162 | /* | 162 | /* |
163 | * Frequently used control callbacks | 163 | * Frequently used control callbacks/helpers |
164 | */ | 164 | */ |
165 | int snd_ctl_boolean_mono_info(struct snd_kcontrol *kcontrol, | 165 | int snd_ctl_boolean_mono_info(struct snd_kcontrol *kcontrol, |
166 | struct snd_ctl_elem_info *uinfo); | 166 | struct snd_ctl_elem_info *uinfo); |
167 | int snd_ctl_boolean_stereo_info(struct snd_kcontrol *kcontrol, | 167 | int snd_ctl_boolean_stereo_info(struct snd_kcontrol *kcontrol, |
168 | struct snd_ctl_elem_info *uinfo); | 168 | struct snd_ctl_elem_info *uinfo); |
169 | int snd_ctl_enum_info(struct snd_ctl_elem_info *info, unsigned int channels, | ||
170 | unsigned int items, const char *const names[]); | ||
169 | 171 | ||
170 | /* | 172 | /* |
171 | * virtual master control | 173 | * virtual master control |
diff --git a/include/sound/hdsp.h b/include/sound/hdsp.h index d98a78dff2db..0909a3843479 100644 --- a/include/sound/hdsp.h +++ b/include/sound/hdsp.h | |||
@@ -28,6 +28,7 @@ enum HDSP_IO_Type { | |||
28 | Multiface, | 28 | Multiface, |
29 | H9652, | 29 | H9652, |
30 | H9632, | 30 | H9632, |
31 | RPM, | ||
31 | Undefined, | 32 | Undefined, |
32 | }; | 33 | }; |
33 | 34 | ||
diff --git a/include/sound/minors.h b/include/sound/minors.h index a81798ab73ed..8f764204a856 100644 --- a/include/sound/minors.h +++ b/include/sound/minors.h | |||
@@ -31,8 +31,8 @@ | |||
31 | /* these minors can still be used for autoloading devices (/dev/aload*) */ | 31 | /* these minors can still be used for autoloading devices (/dev/aload*) */ |
32 | #define SNDRV_MINOR_CONTROL 0 /* 0 */ | 32 | #define SNDRV_MINOR_CONTROL 0 /* 0 */ |
33 | #define SNDRV_MINOR_GLOBAL 1 /* 1 */ | 33 | #define SNDRV_MINOR_GLOBAL 1 /* 1 */ |
34 | #define SNDRV_MINOR_SEQUENCER (SNDRV_MINOR_GLOBAL + 0 * 32) | 34 | #define SNDRV_MINOR_SEQUENCER 1 /* SNDRV_MINOR_GLOBAL + 0 * 32 */ |
35 | #define SNDRV_MINOR_TIMER (SNDRV_MINOR_GLOBAL + 1 * 32) | 35 | #define SNDRV_MINOR_TIMER 33 /* SNDRV_MINOR_GLOBAL + 1 * 32 */ |
36 | 36 | ||
37 | #ifndef CONFIG_SND_DYNAMIC_MINORS | 37 | #ifndef CONFIG_SND_DYNAMIC_MINORS |
38 | /* 2 - 3 (reserved) */ | 38 | /* 2 - 3 (reserved) */ |
diff --git a/include/sound/pcm.h b/include/sound/pcm.h index dfd9b76b1853..e731f8d71934 100644 --- a/include/sound/pcm.h +++ b/include/sound/pcm.h | |||
@@ -297,6 +297,7 @@ struct snd_pcm_runtime { | |||
297 | unsigned int info; | 297 | unsigned int info; |
298 | unsigned int rate_num; | 298 | unsigned int rate_num; |
299 | unsigned int rate_den; | 299 | unsigned int rate_den; |
300 | unsigned int no_period_wakeup: 1; | ||
300 | 301 | ||
301 | /* -- SW params -- */ | 302 | /* -- SW params -- */ |
302 | int tstamp_mode; /* mmap timestamp is updated */ | 303 | int tstamp_mode; /* mmap timestamp is updated */ |
diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h index e7b680248006..1bafe95dcf41 100644 --- a/include/sound/soc-dai.h +++ b/include/sound/soc-dai.h | |||
@@ -16,8 +16,6 @@ | |||
16 | 16 | ||
17 | #include <linux/list.h> | 17 | #include <linux/list.h> |
18 | 18 | ||
19 | #include <sound/soc.h> | ||
20 | |||
21 | struct snd_pcm_substream; | 19 | struct snd_pcm_substream; |
22 | 20 | ||
23 | /* | 21 | /* |
@@ -205,7 +203,7 @@ struct snd_soc_dai_driver { | |||
205 | int (*resume)(struct snd_soc_dai *dai); | 203 | int (*resume)(struct snd_soc_dai *dai); |
206 | 204 | ||
207 | /* ops */ | 205 | /* ops */ |
208 | struct snd_soc_dai_ops *ops; | 206 | const struct snd_soc_dai_ops *ops; |
209 | 207 | ||
210 | /* DAI capabilities */ | 208 | /* DAI capabilities */ |
211 | struct snd_soc_pcm_stream capture; | 209 | struct snd_soc_pcm_stream capture; |
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h index 8fd3b41b763f..8031769ac485 100644 --- a/include/sound/soc-dapm.h +++ b/include/sound/soc-dapm.h | |||
@@ -16,7 +16,6 @@ | |||
16 | #include <linux/device.h> | 16 | #include <linux/device.h> |
17 | #include <linux/types.h> | 17 | #include <linux/types.h> |
18 | #include <sound/control.h> | 18 | #include <sound/control.h> |
19 | #include <sound/soc.h> | ||
20 | 19 | ||
21 | /* widget has no PM register bit */ | 20 | /* widget has no PM register bit */ |
22 | #define SND_SOC_NOPM -1 | 21 | #define SND_SOC_NOPM -1 |
@@ -72,6 +71,10 @@ | |||
72 | wcontrols, wncontrols) \ | 71 | wcontrols, wncontrols) \ |
73 | { .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \ | 72 | { .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \ |
74 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols} | 73 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols} |
74 | #define SND_SOC_DAPM_OUT_DRV(wname, wreg, wshift, winvert,\ | ||
75 | wcontrols, wncontrols) \ | ||
76 | { .id = snd_soc_dapm_out_drv, .name = wname, .reg = wreg, .shift = wshift, \ | ||
77 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols} | ||
75 | #define SND_SOC_DAPM_MIXER(wname, wreg, wshift, winvert, \ | 78 | #define SND_SOC_DAPM_MIXER(wname, wreg, wshift, winvert, \ |
76 | wcontrols, wncontrols)\ | 79 | wcontrols, wncontrols)\ |
77 | { .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \ | 80 | { .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \ |
@@ -90,6 +93,9 @@ | |||
90 | #define SND_SOC_DAPM_MUX(wname, wreg, wshift, winvert, wcontrols) \ | 93 | #define SND_SOC_DAPM_MUX(wname, wreg, wshift, winvert, wcontrols) \ |
91 | { .id = snd_soc_dapm_mux, .name = wname, .reg = wreg, .shift = wshift, \ | 94 | { .id = snd_soc_dapm_mux, .name = wname, .reg = wreg, .shift = wshift, \ |
92 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1} | 95 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1} |
96 | #define SND_SOC_DAPM_VIRT_MUX(wname, wreg, wshift, winvert, wcontrols) \ | ||
97 | { .id = snd_soc_dapm_virt_mux, .name = wname, .reg = wreg, .shift = wshift, \ | ||
98 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1} | ||
93 | #define SND_SOC_DAPM_VALUE_MUX(wname, wreg, wshift, winvert, wcontrols) \ | 99 | #define SND_SOC_DAPM_VALUE_MUX(wname, wreg, wshift, winvert, wcontrols) \ |
94 | { .id = snd_soc_dapm_value_mux, .name = wname, .reg = wreg, \ | 100 | { .id = snd_soc_dapm_value_mux, .name = wname, .reg = wreg, \ |
95 | .shift = wshift, .invert = winvert, .kcontrols = wcontrols, \ | 101 | .shift = wshift, .invert = winvert, .kcontrols = wcontrols, \ |
@@ -116,6 +122,11 @@ | |||
116 | { .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \ | 122 | { .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \ |
117 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols, \ | 123 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols, \ |
118 | .event = wevent, .event_flags = wflags} | 124 | .event = wevent, .event_flags = wflags} |
125 | #define SND_SOC_DAPM_OUT_DRV_E(wname, wreg, wshift, winvert, wcontrols, \ | ||
126 | wncontrols, wevent, wflags) \ | ||
127 | { .id = snd_soc_dapm_out_drv, .name = wname, .reg = wreg, .shift = wshift, \ | ||
128 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols, \ | ||
129 | .event = wevent, .event_flags = wflags} | ||
119 | #define SND_SOC_DAPM_MIXER_E(wname, wreg, wshift, winvert, wcontrols, \ | 130 | #define SND_SOC_DAPM_MIXER_E(wname, wreg, wshift, winvert, wcontrols, \ |
120 | wncontrols, wevent, wflags) \ | 131 | wncontrols, wevent, wflags) \ |
121 | { .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \ | 132 | { .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \ |
@@ -140,6 +151,11 @@ | |||
140 | { .id = snd_soc_dapm_mux, .name = wname, .reg = wreg, .shift = wshift, \ | 151 | { .id = snd_soc_dapm_mux, .name = wname, .reg = wreg, .shift = wshift, \ |
141 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1, \ | 152 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1, \ |
142 | .event = wevent, .event_flags = wflags} | 153 | .event = wevent, .event_flags = wflags} |
154 | #define SND_SOC_DAPM_VIRT_MUX_E(wname, wreg, wshift, winvert, wcontrols, \ | ||
155 | wevent, wflags) \ | ||
156 | { .id = snd_soc_dapm_virt_mux, .name = wname, .reg = wreg, .shift = wshift, \ | ||
157 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1, \ | ||
158 | .event = wevent, .event_flags = wflags} | ||
143 | 159 | ||
144 | /* Simplified versions of above macros, assuming wncontrols = ARRAY_SIZE(wcontrols) */ | 160 | /* Simplified versions of above macros, assuming wncontrols = ARRAY_SIZE(wcontrols) */ |
145 | #define SOC_PGA_E_ARRAY(wname, wreg, wshift, winvert, wcontrols, \ | 161 | #define SOC_PGA_E_ARRAY(wname, wreg, wshift, winvert, wcontrols, \ |
@@ -219,13 +235,6 @@ | |||
219 | .info = snd_soc_info_volsw, \ | 235 | .info = snd_soc_info_volsw, \ |
220 | .get = snd_soc_dapm_get_volsw, .put = snd_soc_dapm_put_volsw, \ | 236 | .get = snd_soc_dapm_get_volsw, .put = snd_soc_dapm_put_volsw, \ |
221 | .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert) } | 237 | .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert) } |
222 | #define SOC_DAPM_DOUBLE(xname, reg, shift_left, shift_right, max, invert, \ | ||
223 | power) \ | ||
224 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ | ||
225 | .info = snd_soc_info_volsw, \ | ||
226 | .get = snd_soc_dapm_get_volsw, .put = snd_soc_dapm_put_volsw, \ | ||
227 | .private_value = (reg) | ((shift_left) << 8) | ((shift_right) << 12) |\ | ||
228 | ((max) << 16) | ((invert) << 24) } | ||
229 | #define SOC_DAPM_SINGLE_TLV(xname, reg, shift, max, invert, tlv_array) \ | 238 | #define SOC_DAPM_SINGLE_TLV(xname, reg, shift, max, invert, tlv_array) \ |
230 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ | 239 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ |
231 | .info = snd_soc_info_volsw, \ | 240 | .info = snd_soc_info_volsw, \ |
@@ -233,15 +242,6 @@ | |||
233 | .tlv.p = (tlv_array), \ | 242 | .tlv.p = (tlv_array), \ |
234 | .get = snd_soc_dapm_get_volsw, .put = snd_soc_dapm_put_volsw, \ | 243 | .get = snd_soc_dapm_get_volsw, .put = snd_soc_dapm_put_volsw, \ |
235 | .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert) } | 244 | .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert) } |
236 | #define SOC_DAPM_DOUBLE_TLV(xname, reg, shift_left, shift_right, max, invert, \ | ||
237 | power, tlv_array) \ | ||
238 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ | ||
239 | .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | SNDRV_CTL_ELEM_ACCESS_READWRITE,\ | ||
240 | .tlv.p = (tlv_array), \ | ||
241 | .info = snd_soc_info_volsw, \ | ||
242 | .get = snd_soc_dapm_get_volsw, .put = snd_soc_dapm_put_volsw, \ | ||
243 | .private_value = (reg) | ((shift_left) << 8) | ((shift_right) << 12) |\ | ||
244 | ((max) << 16) | ((invert) << 24) } | ||
245 | #define SOC_DAPM_ENUM(xname, xenum) \ | 245 | #define SOC_DAPM_ENUM(xname, xenum) \ |
246 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ | 246 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ |
247 | .info = snd_soc_info_enum_double, \ | 247 | .info = snd_soc_info_enum_double, \ |
@@ -297,6 +297,7 @@ enum snd_soc_dapm_type; | |||
297 | struct snd_soc_dapm_path; | 297 | struct snd_soc_dapm_path; |
298 | struct snd_soc_dapm_pin; | 298 | struct snd_soc_dapm_pin; |
299 | struct snd_soc_dapm_route; | 299 | struct snd_soc_dapm_route; |
300 | struct snd_soc_dapm_context; | ||
300 | 301 | ||
301 | int dapm_reg_event(struct snd_soc_dapm_widget *w, | 302 | int dapm_reg_event(struct snd_soc_dapm_widget *w, |
302 | struct snd_kcontrol *kcontrol, int event); | 303 | struct snd_kcontrol *kcontrol, int event); |
@@ -324,16 +325,16 @@ int snd_soc_dapm_get_pin_switch(struct snd_kcontrol *kcontrol, | |||
324 | struct snd_ctl_elem_value *uncontrol); | 325 | struct snd_ctl_elem_value *uncontrol); |
325 | int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol, | 326 | int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol, |
326 | struct snd_ctl_elem_value *uncontrol); | 327 | struct snd_ctl_elem_value *uncontrol); |
327 | int snd_soc_dapm_new_control(struct snd_soc_codec *codec, | 328 | int snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm, |
328 | const struct snd_soc_dapm_widget *widget); | 329 | const struct snd_soc_dapm_widget *widget); |
329 | int snd_soc_dapm_new_controls(struct snd_soc_codec *codec, | 330 | int snd_soc_dapm_new_controls(struct snd_soc_dapm_context *dapm, |
330 | const struct snd_soc_dapm_widget *widget, | 331 | const struct snd_soc_dapm_widget *widget, |
331 | int num); | 332 | int num); |
332 | 333 | ||
333 | /* dapm path setup */ | 334 | /* dapm path setup */ |
334 | int snd_soc_dapm_new_widgets(struct snd_soc_codec *codec); | 335 | int snd_soc_dapm_new_widgets(struct snd_soc_dapm_context *dapm); |
335 | void snd_soc_dapm_free(struct snd_soc_codec *codec); | 336 | void snd_soc_dapm_free(struct snd_soc_dapm_context *dapm); |
336 | int snd_soc_dapm_add_routes(struct snd_soc_codec *codec, | 337 | int snd_soc_dapm_add_routes(struct snd_soc_dapm_context *dapm, |
337 | const struct snd_soc_dapm_route *route, int num); | 338 | const struct snd_soc_dapm_route *route, int num); |
338 | 339 | ||
339 | /* dapm events */ | 340 | /* dapm events */ |
@@ -343,27 +344,33 @@ void snd_soc_dapm_shutdown(struct snd_soc_card *card); | |||
343 | 344 | ||
344 | /* dapm sys fs - used by the core */ | 345 | /* dapm sys fs - used by the core */ |
345 | int snd_soc_dapm_sys_add(struct device *dev); | 346 | int snd_soc_dapm_sys_add(struct device *dev); |
346 | void snd_soc_dapm_debugfs_init(struct snd_soc_codec *codec); | 347 | void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm); |
347 | 348 | ||
348 | /* dapm audio pin control and status */ | 349 | /* dapm audio pin control and status */ |
349 | int snd_soc_dapm_enable_pin(struct snd_soc_codec *codec, const char *pin); | 350 | int snd_soc_dapm_enable_pin(struct snd_soc_dapm_context *dapm, |
350 | int snd_soc_dapm_disable_pin(struct snd_soc_codec *codec, const char *pin); | 351 | const char *pin); |
351 | int snd_soc_dapm_nc_pin(struct snd_soc_codec *codec, const char *pin); | 352 | int snd_soc_dapm_disable_pin(struct snd_soc_dapm_context *dapm, |
352 | int snd_soc_dapm_get_pin_status(struct snd_soc_codec *codec, const char *pin); | 353 | const char *pin); |
353 | int snd_soc_dapm_sync(struct snd_soc_codec *codec); | 354 | int snd_soc_dapm_nc_pin(struct snd_soc_dapm_context *dapm, const char *pin); |
354 | int snd_soc_dapm_force_enable_pin(struct snd_soc_codec *codec, | 355 | int snd_soc_dapm_get_pin_status(struct snd_soc_dapm_context *dapm, |
356 | const char *pin); | ||
357 | int snd_soc_dapm_sync(struct snd_soc_dapm_context *dapm); | ||
358 | int snd_soc_dapm_force_enable_pin(struct snd_soc_dapm_context *dapm, | ||
355 | const char *pin); | 359 | const char *pin); |
356 | int snd_soc_dapm_ignore_suspend(struct snd_soc_codec *codec, const char *pin); | 360 | int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm, |
361 | const char *pin); | ||
357 | 362 | ||
358 | /* dapm widget types */ | 363 | /* dapm widget types */ |
359 | enum snd_soc_dapm_type { | 364 | enum snd_soc_dapm_type { |
360 | snd_soc_dapm_input = 0, /* input pin */ | 365 | snd_soc_dapm_input = 0, /* input pin */ |
361 | snd_soc_dapm_output, /* output pin */ | 366 | snd_soc_dapm_output, /* output pin */ |
362 | snd_soc_dapm_mux, /* selects 1 analog signal from many inputs */ | 367 | snd_soc_dapm_mux, /* selects 1 analog signal from many inputs */ |
368 | snd_soc_dapm_virt_mux, /* virtual version of snd_soc_dapm_mux */ | ||
363 | snd_soc_dapm_value_mux, /* selects 1 analog signal from many inputs */ | 369 | snd_soc_dapm_value_mux, /* selects 1 analog signal from many inputs */ |
364 | snd_soc_dapm_mixer, /* mixes several analog signals together */ | 370 | snd_soc_dapm_mixer, /* mixes several analog signals together */ |
365 | snd_soc_dapm_mixer_named_ctl, /* mixer with named controls */ | 371 | snd_soc_dapm_mixer_named_ctl, /* mixer with named controls */ |
366 | snd_soc_dapm_pga, /* programmable gain/attenuation (volume) */ | 372 | snd_soc_dapm_pga, /* programmable gain/attenuation (volume) */ |
373 | snd_soc_dapm_out_drv, /* output driver */ | ||
367 | snd_soc_dapm_adc, /* analog to digital converter */ | 374 | snd_soc_dapm_adc, /* analog to digital converter */ |
368 | snd_soc_dapm_dac, /* digital to analog converter */ | 375 | snd_soc_dapm_dac, /* digital to analog converter */ |
369 | snd_soc_dapm_micbias, /* microphone bias (power) */ | 376 | snd_soc_dapm_micbias, /* microphone bias (power) */ |
@@ -425,6 +432,7 @@ struct snd_soc_dapm_widget { | |||
425 | char *sname; /* stream name */ | 432 | char *sname; /* stream name */ |
426 | struct snd_soc_codec *codec; | 433 | struct snd_soc_codec *codec; |
427 | struct list_head list; | 434 | struct list_head list; |
435 | struct snd_soc_dapm_context *dapm; | ||
428 | 436 | ||
429 | /* dapm control */ | 437 | /* dapm control */ |
430 | short reg; /* negative reg = no direct dapm */ | 438 | short reg; /* negative reg = no direct dapm */ |
@@ -461,4 +469,35 @@ struct snd_soc_dapm_widget { | |||
461 | struct list_head power_list; | 469 | struct list_head power_list; |
462 | }; | 470 | }; |
463 | 471 | ||
472 | struct snd_soc_dapm_update { | ||
473 | struct snd_soc_dapm_widget *widget; | ||
474 | struct snd_kcontrol *kcontrol; | ||
475 | int reg; | ||
476 | int mask; | ||
477 | int val; | ||
478 | }; | ||
479 | |||
480 | /* DAPM context */ | ||
481 | struct snd_soc_dapm_context { | ||
482 | int n_widgets; /* number of widgets in this context */ | ||
483 | enum snd_soc_bias_level bias_level; | ||
484 | enum snd_soc_bias_level suspend_bias_level; | ||
485 | struct delayed_work delayed_work; | ||
486 | unsigned int idle_bias_off:1; /* Use BIAS_OFF instead of STANDBY */ | ||
487 | |||
488 | struct snd_soc_dapm_update *update; | ||
489 | |||
490 | struct device *dev; /* from parent - for debug */ | ||
491 | struct snd_soc_codec *codec; /* parent codec */ | ||
492 | struct snd_soc_card *card; /* parent card */ | ||
493 | |||
494 | /* used during DAPM updates */ | ||
495 | int dev_power; | ||
496 | struct list_head list; | ||
497 | |||
498 | #ifdef CONFIG_DEBUG_FS | ||
499 | struct dentry *debugfs_dapm; | ||
500 | #endif | ||
501 | }; | ||
502 | |||
464 | #endif | 503 | #endif |
diff --git a/include/sound/soc.h b/include/sound/soc.h index 5c3bce83f28a..74921f20a1d8 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h | |||
@@ -222,10 +222,8 @@ enum snd_soc_bias_level { | |||
222 | 222 | ||
223 | struct snd_jack; | 223 | struct snd_jack; |
224 | struct snd_soc_card; | 224 | struct snd_soc_card; |
225 | struct snd_soc_device; | ||
226 | struct snd_soc_pcm_stream; | 225 | struct snd_soc_pcm_stream; |
227 | struct snd_soc_ops; | 226 | struct snd_soc_ops; |
228 | struct snd_soc_dai_mode; | ||
229 | struct snd_soc_pcm_runtime; | 227 | struct snd_soc_pcm_runtime; |
230 | struct snd_soc_dai; | 228 | struct snd_soc_dai; |
231 | struct snd_soc_dai_driver; | 229 | struct snd_soc_dai_driver; |
@@ -235,9 +233,10 @@ struct snd_soc_platform_driver; | |||
235 | struct snd_soc_codec; | 233 | struct snd_soc_codec; |
236 | struct snd_soc_codec_driver; | 234 | struct snd_soc_codec_driver; |
237 | struct soc_enum; | 235 | struct soc_enum; |
238 | struct snd_soc_ac97_ops; | ||
239 | struct snd_soc_jack; | 236 | struct snd_soc_jack; |
240 | struct snd_soc_jack_pin; | 237 | struct snd_soc_jack_pin; |
238 | struct snd_soc_cache_ops; | ||
239 | #include <sound/soc-dapm.h> | ||
241 | 240 | ||
242 | #ifdef CONFIG_GPIOLIB | 241 | #ifdef CONFIG_GPIOLIB |
243 | struct snd_soc_jack_gpio; | 242 | struct snd_soc_jack_gpio; |
@@ -253,17 +252,30 @@ enum snd_soc_control_type { | |||
253 | SND_SOC_SPI, | 252 | SND_SOC_SPI, |
254 | }; | 253 | }; |
255 | 254 | ||
255 | enum snd_soc_compress_type { | ||
256 | SND_SOC_FLAT_COMPRESSION = 1, | ||
257 | SND_SOC_LZO_COMPRESSION, | ||
258 | SND_SOC_RBTREE_COMPRESSION | ||
259 | }; | ||
260 | |||
256 | int snd_soc_register_platform(struct device *dev, | 261 | int snd_soc_register_platform(struct device *dev, |
257 | struct snd_soc_platform_driver *platform_drv); | 262 | struct snd_soc_platform_driver *platform_drv); |
258 | void snd_soc_unregister_platform(struct device *dev); | 263 | void snd_soc_unregister_platform(struct device *dev); |
259 | int snd_soc_register_codec(struct device *dev, | 264 | int snd_soc_register_codec(struct device *dev, |
260 | struct snd_soc_codec_driver *codec_drv, | 265 | const struct snd_soc_codec_driver *codec_drv, |
261 | struct snd_soc_dai_driver *dai_drv, int num_dai); | 266 | struct snd_soc_dai_driver *dai_drv, int num_dai); |
262 | void snd_soc_unregister_codec(struct device *dev); | 267 | void snd_soc_unregister_codec(struct device *dev); |
263 | int snd_soc_codec_volatile_register(struct snd_soc_codec *codec, int reg); | 268 | int snd_soc_codec_volatile_register(struct snd_soc_codec *codec, int reg); |
264 | int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec, | 269 | int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec, |
265 | int addr_bits, int data_bits, | 270 | int addr_bits, int data_bits, |
266 | enum snd_soc_control_type control); | 271 | enum snd_soc_control_type control); |
272 | int snd_soc_cache_sync(struct snd_soc_codec *codec); | ||
273 | int snd_soc_cache_init(struct snd_soc_codec *codec); | ||
274 | int snd_soc_cache_exit(struct snd_soc_codec *codec); | ||
275 | int snd_soc_cache_write(struct snd_soc_codec *codec, | ||
276 | unsigned int reg, unsigned int value); | ||
277 | int snd_soc_cache_read(struct snd_soc_codec *codec, | ||
278 | unsigned int reg, unsigned int *value); | ||
267 | 279 | ||
268 | /* Utility functions to get clock rates from various things */ | 280 | /* Utility functions to get clock rates from various things */ |
269 | int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots); | 281 | int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots); |
@@ -420,23 +432,37 @@ struct snd_soc_ops { | |||
420 | int (*trigger)(struct snd_pcm_substream *, int); | 432 | int (*trigger)(struct snd_pcm_substream *, int); |
421 | }; | 433 | }; |
422 | 434 | ||
435 | /* SoC cache ops */ | ||
436 | struct snd_soc_cache_ops { | ||
437 | const char *name; | ||
438 | enum snd_soc_compress_type id; | ||
439 | int (*init)(struct snd_soc_codec *codec); | ||
440 | int (*exit)(struct snd_soc_codec *codec); | ||
441 | int (*read)(struct snd_soc_codec *codec, unsigned int reg, | ||
442 | unsigned int *value); | ||
443 | int (*write)(struct snd_soc_codec *codec, unsigned int reg, | ||
444 | unsigned int value); | ||
445 | int (*sync)(struct snd_soc_codec *codec); | ||
446 | }; | ||
447 | |||
423 | /* SoC Audio Codec device */ | 448 | /* SoC Audio Codec device */ |
424 | struct snd_soc_codec { | 449 | struct snd_soc_codec { |
425 | const char *name; | 450 | const char *name; |
451 | const char *name_prefix; | ||
426 | int id; | 452 | int id; |
427 | struct device *dev; | 453 | struct device *dev; |
428 | struct snd_soc_codec_driver *driver; | 454 | const struct snd_soc_codec_driver *driver; |
429 | 455 | ||
430 | struct mutex mutex; | 456 | struct mutex mutex; |
431 | struct snd_soc_card *card; | 457 | struct snd_soc_card *card; |
432 | struct list_head list; | 458 | struct list_head list; |
433 | struct list_head card_list; | 459 | struct list_head card_list; |
434 | int num_dai; | 460 | int num_dai; |
461 | enum snd_soc_compress_type compress_type; | ||
435 | 462 | ||
436 | /* runtime */ | 463 | /* runtime */ |
437 | struct snd_ac97 *ac97; /* for ad-hoc ac97 devices */ | 464 | struct snd_ac97 *ac97; /* for ad-hoc ac97 devices */ |
438 | unsigned int active; | 465 | unsigned int active; |
439 | unsigned int idle_bias_off:1; /* Use BIAS_OFF instead of STANDBY */ | ||
440 | unsigned int cache_only:1; /* Suppress writes to hardware */ | 466 | unsigned int cache_only:1; /* Suppress writes to hardware */ |
441 | unsigned int cache_sync:1; /* Cache needs to be synced to hardware */ | 467 | unsigned int cache_sync:1; /* Cache needs to be synced to hardware */ |
442 | unsigned int suspended:1; /* Codec is in suspend PM state */ | 468 | unsigned int suspended:1; /* Codec is in suspend PM state */ |
@@ -444,25 +470,25 @@ struct snd_soc_codec { | |||
444 | unsigned int ac97_registered:1; /* Codec has been AC97 registered */ | 470 | unsigned int ac97_registered:1; /* Codec has been AC97 registered */ |
445 | unsigned int ac97_created:1; /* Codec has been created by SoC */ | 471 | unsigned int ac97_created:1; /* Codec has been created by SoC */ |
446 | unsigned int sysfs_registered:1; /* codec has been sysfs registered */ | 472 | unsigned int sysfs_registered:1; /* codec has been sysfs registered */ |
473 | unsigned int cache_init:1; /* codec cache has been initialized */ | ||
447 | 474 | ||
448 | /* codec IO */ | 475 | /* codec IO */ |
449 | void *control_data; /* codec control (i2c/3wire) data */ | 476 | void *control_data; /* codec control (i2c/3wire) data */ |
450 | hw_write_t hw_write; | 477 | hw_write_t hw_write; |
451 | unsigned int (*hw_read)(struct snd_soc_codec *, unsigned int); | 478 | unsigned int (*hw_read)(struct snd_soc_codec *, unsigned int); |
479 | unsigned int (*read)(struct snd_soc_codec *, unsigned int); | ||
480 | int (*write)(struct snd_soc_codec *, unsigned int, unsigned int); | ||
452 | void *reg_cache; | 481 | void *reg_cache; |
482 | const void *reg_def_copy; | ||
483 | const struct snd_soc_cache_ops *cache_ops; | ||
484 | struct mutex cache_rw_mutex; | ||
453 | 485 | ||
454 | /* dapm */ | 486 | /* dapm */ |
455 | u32 pop_time; | 487 | struct snd_soc_dapm_context dapm; |
456 | struct list_head dapm_widgets; | ||
457 | struct list_head dapm_paths; | ||
458 | enum snd_soc_bias_level bias_level; | ||
459 | enum snd_soc_bias_level suspend_bias_level; | ||
460 | struct delayed_work delayed_work; | ||
461 | 488 | ||
462 | #ifdef CONFIG_DEBUG_FS | 489 | #ifdef CONFIG_DEBUG_FS |
463 | struct dentry *debugfs_codec_root; | 490 | struct dentry *debugfs_codec_root; |
464 | struct dentry *debugfs_reg; | 491 | struct dentry *debugfs_reg; |
465 | struct dentry *debugfs_pop_time; | ||
466 | struct dentry *debugfs_dapm; | 492 | struct dentry *debugfs_dapm; |
467 | #endif | 493 | #endif |
468 | }; | 494 | }; |
@@ -488,6 +514,7 @@ struct snd_soc_codec_driver { | |||
488 | short reg_cache_step; | 514 | short reg_cache_step; |
489 | short reg_word_size; | 515 | short reg_word_size; |
490 | const void *reg_cache_default; | 516 | const void *reg_cache_default; |
517 | enum snd_soc_compress_type compress_type; | ||
491 | 518 | ||
492 | /* codec bias level */ | 519 | /* codec bias level */ |
493 | int (*set_bias_level)(struct snd_soc_codec *, | 520 | int (*set_bias_level)(struct snd_soc_codec *, |
@@ -554,6 +581,30 @@ struct snd_soc_dai_link { | |||
554 | struct snd_soc_ops *ops; | 581 | struct snd_soc_ops *ops; |
555 | }; | 582 | }; |
556 | 583 | ||
584 | struct snd_soc_codec_conf { | ||
585 | const char *dev_name; | ||
586 | |||
587 | /* | ||
588 | * optional map of kcontrol, widget and path name prefixes that are | ||
589 | * associated per device | ||
590 | */ | ||
591 | const char *name_prefix; | ||
592 | |||
593 | /* | ||
594 | * set this to the desired compression type if you want to | ||
595 | * override the one supplied in codec->driver->compress_type | ||
596 | */ | ||
597 | enum snd_soc_compress_type compress_type; | ||
598 | }; | ||
599 | |||
600 | struct snd_soc_aux_dev { | ||
601 | const char *name; /* Codec name */ | ||
602 | const char *codec_name; /* for multi-codec */ | ||
603 | |||
604 | /* codec/machine specific init - e.g. add machine controls */ | ||
605 | int (*init)(struct snd_soc_dapm_context *dapm); | ||
606 | }; | ||
607 | |||
557 | /* SoC card */ | 608 | /* SoC card */ |
558 | struct snd_soc_card { | 609 | struct snd_soc_card { |
559 | const char *name; | 610 | const char *name; |
@@ -579,6 +630,8 @@ struct snd_soc_card { | |||
579 | /* callbacks */ | 630 | /* callbacks */ |
580 | int (*set_bias_level)(struct snd_soc_card *, | 631 | int (*set_bias_level)(struct snd_soc_card *, |
581 | enum snd_soc_bias_level level); | 632 | enum snd_soc_bias_level level); |
633 | int (*set_bias_level_post)(struct snd_soc_card *, | ||
634 | enum snd_soc_bias_level level); | ||
582 | 635 | ||
583 | long pmdown_time; | 636 | long pmdown_time; |
584 | 637 | ||
@@ -588,12 +641,35 @@ struct snd_soc_card { | |||
588 | struct snd_soc_pcm_runtime *rtd; | 641 | struct snd_soc_pcm_runtime *rtd; |
589 | int num_rtd; | 642 | int num_rtd; |
590 | 643 | ||
644 | /* optional codec specific configuration */ | ||
645 | struct snd_soc_codec_conf *codec_conf; | ||
646 | int num_configs; | ||
647 | |||
648 | /* | ||
649 | * optional auxiliary devices such as amplifiers or codecs with DAI | ||
650 | * link unused | ||
651 | */ | ||
652 | struct snd_soc_aux_dev *aux_dev; | ||
653 | int num_aux_devs; | ||
654 | struct snd_soc_pcm_runtime *rtd_aux; | ||
655 | int num_aux_rtd; | ||
656 | |||
591 | struct work_struct deferred_resume_work; | 657 | struct work_struct deferred_resume_work; |
592 | 658 | ||
593 | /* lists of probed devices belonging to this card */ | 659 | /* lists of probed devices belonging to this card */ |
594 | struct list_head codec_dev_list; | 660 | struct list_head codec_dev_list; |
595 | struct list_head platform_dev_list; | 661 | struct list_head platform_dev_list; |
596 | struct list_head dai_dev_list; | 662 | struct list_head dai_dev_list; |
663 | |||
664 | struct list_head widgets; | ||
665 | struct list_head paths; | ||
666 | struct list_head dapm_list; | ||
667 | |||
668 | #ifdef CONFIG_DEBUG_FS | ||
669 | struct dentry *debugfs_card_root; | ||
670 | struct dentry *debugfs_pop_time; | ||
671 | #endif | ||
672 | u32 pop_time; | ||
597 | }; | 673 | }; |
598 | 674 | ||
599 | /* SoC machine DAI configuration, glues a codec and cpu DAI together */ | 675 | /* SoC machine DAI configuration, glues a codec and cpu DAI together */ |
@@ -639,17 +715,9 @@ struct soc_enum { | |||
639 | }; | 715 | }; |
640 | 716 | ||
641 | /* codec IO */ | 717 | /* codec IO */ |
642 | static inline unsigned int snd_soc_read(struct snd_soc_codec *codec, | 718 | unsigned int snd_soc_read(struct snd_soc_codec *codec, unsigned int reg); |
643 | unsigned int reg) | 719 | unsigned int snd_soc_write(struct snd_soc_codec *codec, |
644 | { | 720 | unsigned int reg, unsigned int val); |
645 | return codec->driver->read(codec, reg); | ||
646 | } | ||
647 | |||
648 | static inline unsigned int snd_soc_write(struct snd_soc_codec *codec, | ||
649 | unsigned int reg, unsigned int val) | ||
650 | { | ||
651 | return codec->driver->write(codec, reg, val); | ||
652 | } | ||
653 | 721 | ||
654 | /* device driver data */ | 722 | /* device driver data */ |
655 | 723 | ||
diff --git a/include/trace/events/asoc.h b/include/trace/events/asoc.h new file mode 100644 index 000000000000..186e84db4b54 --- /dev/null +++ b/include/trace/events/asoc.h | |||
@@ -0,0 +1,235 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM asoc | ||
3 | |||
4 | #if !defined(_TRACE_ASOC_H) || defined(TRACE_HEADER_MULTI_READ) | ||
5 | #define _TRACE_ASOC_H | ||
6 | |||
7 | #include <linux/ktime.h> | ||
8 | #include <linux/tracepoint.h> | ||
9 | |||
10 | struct snd_soc_jack; | ||
11 | struct snd_soc_codec; | ||
12 | struct snd_soc_card; | ||
13 | struct snd_soc_dapm_widget; | ||
14 | |||
15 | /* | ||
16 | * Log register events | ||
17 | */ | ||
18 | DECLARE_EVENT_CLASS(snd_soc_reg, | ||
19 | |||
20 | TP_PROTO(struct snd_soc_codec *codec, unsigned int reg, | ||
21 | unsigned int val), | ||
22 | |||
23 | TP_ARGS(codec, reg, val), | ||
24 | |||
25 | TP_STRUCT__entry( | ||
26 | __string( name, codec->name ) | ||
27 | __field( int, id ) | ||
28 | __field( unsigned int, reg ) | ||
29 | __field( unsigned int, val ) | ||
30 | ), | ||
31 | |||
32 | TP_fast_assign( | ||
33 | __assign_str(name, codec->name); | ||
34 | __entry->id = codec->id; | ||
35 | __entry->reg = reg; | ||
36 | __entry->val = val; | ||
37 | ), | ||
38 | |||
39 | TP_printk("codec=%s.%d reg=%x val=%x", __get_str(name), | ||
40 | (int)__entry->id, (unsigned int)__entry->reg, | ||
41 | (unsigned int)__entry->val) | ||
42 | ); | ||
43 | |||
44 | DEFINE_EVENT(snd_soc_reg, snd_soc_reg_write, | ||
45 | |||
46 | TP_PROTO(struct snd_soc_codec *codec, unsigned int reg, | ||
47 | unsigned int val), | ||
48 | |||
49 | TP_ARGS(codec, reg, val) | ||
50 | |||
51 | ); | ||
52 | |||
53 | DEFINE_EVENT(snd_soc_reg, snd_soc_reg_read, | ||
54 | |||
55 | TP_PROTO(struct snd_soc_codec *codec, unsigned int reg, | ||
56 | unsigned int val), | ||
57 | |||
58 | TP_ARGS(codec, reg, val) | ||
59 | |||
60 | ); | ||
61 | |||
62 | DECLARE_EVENT_CLASS(snd_soc_card, | ||
63 | |||
64 | TP_PROTO(struct snd_soc_card *card, int val), | ||
65 | |||
66 | TP_ARGS(card, val), | ||
67 | |||
68 | TP_STRUCT__entry( | ||
69 | __string( name, card->name ) | ||
70 | __field( int, val ) | ||
71 | ), | ||
72 | |||
73 | TP_fast_assign( | ||
74 | __assign_str(name, card->name); | ||
75 | __entry->val = val; | ||
76 | ), | ||
77 | |||
78 | TP_printk("card=%s val=%d", __get_str(name), (int)__entry->val) | ||
79 | ); | ||
80 | |||
81 | DEFINE_EVENT(snd_soc_card, snd_soc_bias_level_start, | ||
82 | |||
83 | TP_PROTO(struct snd_soc_card *card, int val), | ||
84 | |||
85 | TP_ARGS(card, val) | ||
86 | |||
87 | ); | ||
88 | |||
89 | DEFINE_EVENT(snd_soc_card, snd_soc_bias_level_done, | ||
90 | |||
91 | TP_PROTO(struct snd_soc_card *card, int val), | ||
92 | |||
93 | TP_ARGS(card, val) | ||
94 | |||
95 | ); | ||
96 | |||
97 | DECLARE_EVENT_CLASS(snd_soc_dapm_basic, | ||
98 | |||
99 | TP_PROTO(struct snd_soc_card *card), | ||
100 | |||
101 | TP_ARGS(card), | ||
102 | |||
103 | TP_STRUCT__entry( | ||
104 | __string( name, card->name ) | ||
105 | ), | ||
106 | |||
107 | TP_fast_assign( | ||
108 | __assign_str(name, card->name); | ||
109 | ), | ||
110 | |||
111 | TP_printk("card=%s", __get_str(name)) | ||
112 | ); | ||
113 | |||
114 | DEFINE_EVENT(snd_soc_dapm_basic, snd_soc_dapm_start, | ||
115 | |||
116 | TP_PROTO(struct snd_soc_card *card), | ||
117 | |||
118 | TP_ARGS(card) | ||
119 | |||
120 | ); | ||
121 | |||
122 | DEFINE_EVENT(snd_soc_dapm_basic, snd_soc_dapm_done, | ||
123 | |||
124 | TP_PROTO(struct snd_soc_card *card), | ||
125 | |||
126 | TP_ARGS(card) | ||
127 | |||
128 | ); | ||
129 | |||
130 | DECLARE_EVENT_CLASS(snd_soc_dapm_widget, | ||
131 | |||
132 | TP_PROTO(struct snd_soc_dapm_widget *w, int val), | ||
133 | |||
134 | TP_ARGS(w, val), | ||
135 | |||
136 | TP_STRUCT__entry( | ||
137 | __string( name, w->name ) | ||
138 | __field( int, val ) | ||
139 | ), | ||
140 | |||
141 | TP_fast_assign( | ||
142 | __assign_str(name, w->name); | ||
143 | __entry->val = val; | ||
144 | ), | ||
145 | |||
146 | TP_printk("widget=%s val=%d", __get_str(name), | ||
147 | (int)__entry->val) | ||
148 | ); | ||
149 | |||
150 | DEFINE_EVENT(snd_soc_dapm_widget, snd_soc_dapm_widget_power, | ||
151 | |||
152 | TP_PROTO(struct snd_soc_dapm_widget *w, int val), | ||
153 | |||
154 | TP_ARGS(w, val) | ||
155 | |||
156 | ); | ||
157 | |||
158 | DEFINE_EVENT(snd_soc_dapm_widget, snd_soc_dapm_widget_event_start, | ||
159 | |||
160 | TP_PROTO(struct snd_soc_dapm_widget *w, int val), | ||
161 | |||
162 | TP_ARGS(w, val) | ||
163 | |||
164 | ); | ||
165 | |||
166 | DEFINE_EVENT(snd_soc_dapm_widget, snd_soc_dapm_widget_event_done, | ||
167 | |||
168 | TP_PROTO(struct snd_soc_dapm_widget *w, int val), | ||
169 | |||
170 | TP_ARGS(w, val) | ||
171 | |||
172 | ); | ||
173 | |||
174 | TRACE_EVENT(snd_soc_jack_irq, | ||
175 | |||
176 | TP_PROTO(const char *name), | ||
177 | |||
178 | TP_ARGS(name), | ||
179 | |||
180 | TP_STRUCT__entry( | ||
181 | __string( name, name ) | ||
182 | ), | ||
183 | |||
184 | TP_fast_assign( | ||
185 | __assign_str(name, name); | ||
186 | ), | ||
187 | |||
188 | TP_printk("%s", __get_str(name)) | ||
189 | ); | ||
190 | |||
191 | TRACE_EVENT(snd_soc_jack_report, | ||
192 | |||
193 | TP_PROTO(struct snd_soc_jack *jack, int mask, int val), | ||
194 | |||
195 | TP_ARGS(jack, mask, val), | ||
196 | |||
197 | TP_STRUCT__entry( | ||
198 | __string( name, jack->jack->name ) | ||
199 | __field( int, mask ) | ||
200 | __field( int, val ) | ||
201 | ), | ||
202 | |||
203 | TP_fast_assign( | ||
204 | __assign_str(name, jack->jack->name); | ||
205 | __entry->mask = mask; | ||
206 | __entry->val = val; | ||
207 | ), | ||
208 | |||
209 | TP_printk("jack=%s %x/%x", __get_str(name), (int)__entry->val, | ||
210 | (int)__entry->mask) | ||
211 | ); | ||
212 | |||
213 | TRACE_EVENT(snd_soc_jack_notify, | ||
214 | |||
215 | TP_PROTO(struct snd_soc_jack *jack, int val), | ||
216 | |||
217 | TP_ARGS(jack, val), | ||
218 | |||
219 | TP_STRUCT__entry( | ||
220 | __string( name, jack->jack->name ) | ||
221 | __field( int, val ) | ||
222 | ), | ||
223 | |||
224 | TP_fast_assign( | ||
225 | __assign_str(name, jack->jack->name); | ||
226 | __entry->val = val; | ||
227 | ), | ||
228 | |||
229 | TP_printk("jack=%s %x", __get_str(name), (int)__entry->val) | ||
230 | ); | ||
231 | |||
232 | #endif /* _TRACE_ASOC_H */ | ||
233 | |||
234 | /* This part must be outside protection */ | ||
235 | #include <trace/define_trace.h> | ||