aboutsummaryrefslogtreecommitdiffstats
path: root/include/sound
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2008-07-23 09:03:07 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2008-11-21 09:02:08 -0500
commita47cbe7263236691ee0bbc392f7fd4ec0da1159f (patch)
tree78b009a80c5c4bd625a3935ec621d5b5b2d42b74 /include/sound
parent5de27b6cc0a8a1d27158ec9047cb5981745edfc0 (diff)
ASoC: Move DAI structure definitions into new soc-dai.h
ASoC v2 factors most of the contents of soc.h out into separate headers, including soc-dai.h for the DAI. Factor the existing DAI API out into this file in order to prepare for backporting of the ASoC v2 DAI API. Also backport some of Liam's improvements to the documentation. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'include/sound')
-rw-r--r--include/sound/soc-dai.h209
-rw-r--r--include/sound/soc.h148
2 files changed, 211 insertions, 146 deletions
diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
new file mode 100644
index 000000000000..08b8f7025c64
--- /dev/null
+++ b/include/sound/soc-dai.h
@@ -0,0 +1,209 @@
1/*
2 * linux/sound/soc-dai.h -- ALSA SoC Layer
3 *
4 * Copyright: 2005-2008 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 * Digital Audio Interface (DAI) API.
11 */
12
13#ifndef __LINUX_SND_SOC_DAI_H
14#define __LINUX_SND_SOC_DAI_H
15
16
17#include <linux/list.h>
18
19struct snd_pcm_substream;
20
21/*
22 * DAI hardware audio formats.
23 *
24 * Describes the physical PCM data formating and clocking. Add new formats
25 * to the end.
26 */
27#define SND_SOC_DAIFMT_I2S 0 /* I2S mode */
28#define SND_SOC_DAIFMT_RIGHT_J 1 /* Right Justified mode */
29#define SND_SOC_DAIFMT_LEFT_J 2 /* Left Justified mode */
30#define SND_SOC_DAIFMT_DSP_A 3 /* L data msb after FRM LRC */
31#define SND_SOC_DAIFMT_DSP_B 4 /* L data msb during FRM LRC */
32#define SND_SOC_DAIFMT_AC97 5 /* AC97 */
33
34/* left and right justified also known as MSB and LSB respectively */
35#define SND_SOC_DAIFMT_MSB SND_SOC_DAIFMT_LEFT_J
36#define SND_SOC_DAIFMT_LSB SND_SOC_DAIFMT_RIGHT_J
37
38/*
39 * DAI Clock gating.
40 *
41 * DAI bit clocks can be be gated (disabled) when not the DAI is not
42 * sending or receiving PCM data in a frame. This can be used to save power.
43 */
44#define SND_SOC_DAIFMT_CONT (0 << 4) /* continuous clock */
45#define SND_SOC_DAIFMT_GATED (1 << 4) /* clock is gated */
46
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.
67 *
68 * Specifies whether the DAI can also support inverted clocks for the specified
69 * format.
70 */
71#define SND_SOC_DAIFMT_NB_NF (0 << 8) /* normal bit clock + frame */
72#define SND_SOC_DAIFMT_NB_IF (1 << 8) /* normal bclk + inv frm */
73#define SND_SOC_DAIFMT_IB_NF (2 << 8) /* invert bclk + nor frm */
74#define SND_SOC_DAIFMT_IB_IF (3 << 8) /* invert bclk + frm */
75
76/*
77 * DAI hardware clock masters.
78 *
79 * This is wrt the codec, the inverse is true for the interface
80 * i.e. if the codec is clk and frm master then the interface is
81 * clk and frame slave.
82 */
83#define SND_SOC_DAIFMT_CBM_CFM (0 << 12) /* codec clk & frm master */
84#define SND_SOC_DAIFMT_CBS_CFM (1 << 12) /* codec clk slave & frm master */
85#define SND_SOC_DAIFMT_CBM_CFS (2 << 12) /* codec clk master & frame slave */
86#define SND_SOC_DAIFMT_CBS_CFS (3 << 12) /* codec clk & frm slave */
87
88#define SND_SOC_DAIFMT_FORMAT_MASK 0x000f
89#define SND_SOC_DAIFMT_CLOCK_MASK 0x00f0
90#define SND_SOC_DAIFMT_INV_MASK 0x0f00
91#define SND_SOC_DAIFMT_MASTER_MASK 0xf000
92
93/*
94 * Master Clock Directions
95 */
96#define SND_SOC_CLOCK_IN 0
97#define SND_SOC_CLOCK_OUT 1
98
99struct snd_soc_dai_ops;
100struct snd_soc_dai;
101struct snd_ac97_bus_ops;
102
103/* Digital Audio Interface clocking API.*/
104int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id,
105 unsigned int freq, int dir);
106
107int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai,
108 int div_id, int div);
109
110int snd_soc_dai_set_pll(struct snd_soc_dai *dai,
111 int pll_id, unsigned int freq_in, unsigned int freq_out);
112
113/* Digital Audio interface formatting */
114int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt);
115
116int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai,
117 unsigned int mask, int slots);
118
119int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate);
120
121/* Digital Audio Interface mute */
122int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute);
123
124/*
125 * Digital Audio Interface.
126 *
127 * Describes the Digital Audio Interface in terms of it's ALSA, DAI and AC97
128 * operations an capabilities. Codec and platfom drivers will register a this
129 * structure for every DAI they have.
130 *
131 * This structure covers the clocking, formating and ALSA operations for each
132 * interface a
133 */
134struct snd_soc_dai_ops {
135 /*
136 * DAI clocking configuration, all optional.
137 * Called by soc_card drivers, normally in their hw_params.
138 */
139 int (*set_sysclk)(struct snd_soc_dai *dai,
140 int clk_id, unsigned int freq, int dir);
141 int (*set_pll)(struct snd_soc_dai *dai,
142 int pll_id, unsigned int freq_in, unsigned int freq_out);
143 int (*set_clkdiv)(struct snd_soc_dai *dai, int div_id, int div);
144
145 /*
146 * DAI format configuration
147 * Called by soc_card drivers, normally in their hw_params.
148 */
149 int (*set_fmt)(struct snd_soc_dai *dai, unsigned int fmt);
150 int (*set_tdm_slot)(struct snd_soc_dai *dai,
151 unsigned int mask, int slots);
152 int (*set_tristate)(struct snd_soc_dai *dai, int tristate);
153
154 /*
155 * DAI digital mute - optional.
156 * Called by soc-core to minimise any pops.
157 */
158 int (*digital_mute)(struct snd_soc_dai *dai, int mute);
159};
160
161/*
162 * Digital Audio Interface runtime data.
163 *
164 * Holds runtime data for a DAI.
165 */
166struct snd_soc_dai {
167 /* DAI description */
168 char *name;
169 unsigned int id;
170 unsigned char type;
171
172 /* DAI callbacks */
173 int (*probe)(struct platform_device *pdev,
174 struct snd_soc_dai *dai);
175 void (*remove)(struct platform_device *pdev,
176 struct snd_soc_dai *dai);
177 int (*suspend)(struct platform_device *pdev,
178 struct snd_soc_dai *dai);
179 int (*resume)(struct platform_device *pdev,
180 struct snd_soc_dai *dai);
181
182 /* ops */
183 struct snd_soc_ops ops;
184 struct snd_soc_dai_ops dai_ops;
185
186 /* DAI capabilities */
187 struct snd_soc_pcm_stream capture;
188 struct snd_soc_pcm_stream playback;
189
190 /* DAI runtime info */
191 struct snd_pcm_runtime *runtime;
192 struct snd_soc_codec *codec;
193 unsigned int active;
194 unsigned char pop_wait:1;
195 void *dma_data;
196
197 /* DAI private data */
198 void *private_data;
199
200 /* parent codec/platform */
201 union {
202 struct snd_soc_codec *codec;
203 struct snd_soc_platform *platform;
204 };
205
206 struct list_head list;
207};
208
209#endif
diff --git a/include/sound/soc.h b/include/sound/soc.h
index 3be17b3c650c..e4465f73aa46 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -151,76 +151,6 @@ enum snd_soc_bias_level {
151#define SND_SOC_DAI_PCM 0x4 151#define SND_SOC_DAI_PCM 0x4
152#define SND_SOC_DAI_AC97_BUS 0x8 /* for custom i.e. non ac97_codec.c */ 152#define SND_SOC_DAI_AC97_BUS 0x8 /* for custom i.e. non ac97_codec.c */
153 153
154/*
155 * DAI hardware audio formats
156 */
157#define SND_SOC_DAIFMT_I2S 0 /* I2S mode */
158#define SND_SOC_DAIFMT_RIGHT_J 1 /* Right justified mode */
159#define SND_SOC_DAIFMT_LEFT_J 2 /* Left Justified mode */
160#define SND_SOC_DAIFMT_DSP_A 3 /* L data msb after FRM or LRC */
161#define SND_SOC_DAIFMT_DSP_B 4 /* L data msb during FRM or LRC */
162#define SND_SOC_DAIFMT_AC97 5 /* AC97 */
163
164#define SND_SOC_DAIFMT_MSB SND_SOC_DAIFMT_LEFT_J
165#define SND_SOC_DAIFMT_LSB SND_SOC_DAIFMT_RIGHT_J
166
167/*
168 * DAI Gating
169 */
170#define SND_SOC_DAIFMT_CONT (0 << 4) /* continuous clock */
171#define SND_SOC_DAIFMT_GATED (1 << 4) /* clock is gated when not Tx/Rx */
172
173/*
174 * DAI Sync
175 * Synchronous LR (Left Right) clocks and Frame signals.
176 */
177#define SND_SOC_DAIFMT_SYNC (0 << 5) /* Tx FRM = Rx FRM */
178#define SND_SOC_DAIFMT_ASYNC (1 << 5) /* Tx FRM ~ Rx FRM */
179
180/*
181 * TDM
182 */
183#define SND_SOC_DAIFMT_TDM (1 << 6)
184
185/*
186 * DAI hardware signal inversions
187 */
188#define SND_SOC_DAIFMT_NB_NF (0 << 8) /* normal bclk + frm */
189#define SND_SOC_DAIFMT_NB_IF (1 << 8) /* normal bclk + inv frm */
190#define SND_SOC_DAIFMT_IB_NF (2 << 8) /* invert bclk + nor frm */
191#define SND_SOC_DAIFMT_IB_IF (3 << 8) /* invert bclk + frm */
192
193/*
194 * DAI hardware clock masters
195 * This is wrt the codec, the inverse is true for the interface
196 * i.e. if the codec is clk and frm master then the interface is
197 * clk and frame slave.
198 */
199#define SND_SOC_DAIFMT_CBM_CFM (0 << 12) /* codec clk & frm master */
200#define SND_SOC_DAIFMT_CBS_CFM (1 << 12) /* codec clk slave & frm master */
201#define SND_SOC_DAIFMT_CBM_CFS (2 << 12) /* codec clk master & frame slave */
202#define SND_SOC_DAIFMT_CBS_CFS (3 << 12) /* codec clk & frm slave */
203
204#define SND_SOC_DAIFMT_FORMAT_MASK 0x000f
205#define SND_SOC_DAIFMT_CLOCK_MASK 0x00f0
206#define SND_SOC_DAIFMT_INV_MASK 0x0f00
207#define SND_SOC_DAIFMT_MASTER_MASK 0xf000
208
209
210/*
211 * Master Clock Directions
212 */
213#define SND_SOC_CLOCK_IN 0
214#define SND_SOC_CLOCK_OUT 1
215
216/*
217 * AC97 codec ID's bitmask
218 */
219#define SND_SOC_DAI_AC97_ID0 (1 << 0)
220#define SND_SOC_DAI_AC97_ID1 (1 << 1)
221#define SND_SOC_DAI_AC97_ID2 (1 << 2)
222#define SND_SOC_DAI_AC97_ID3 (1 << 3)
223
224struct snd_soc_device; 154struct snd_soc_device;
225struct snd_soc_pcm_stream; 155struct snd_soc_pcm_stream;
226struct snd_soc_ops; 156struct snd_soc_ops;
@@ -260,27 +190,6 @@ int snd_soc_new_ac97_codec(struct snd_soc_codec *codec,
260 struct snd_ac97_bus_ops *ops, int num); 190 struct snd_ac97_bus_ops *ops, int num);
261void snd_soc_free_ac97_codec(struct snd_soc_codec *codec); 191void snd_soc_free_ac97_codec(struct snd_soc_codec *codec);
262 192
263/* Digital Audio Interface clocking API.*/
264int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id,
265 unsigned int freq, int dir);
266
267int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai,
268 int div_id, int div);
269
270int snd_soc_dai_set_pll(struct snd_soc_dai *dai,
271 int pll_id, unsigned int freq_in, unsigned int freq_out);
272
273/* Digital Audio interface formatting */
274int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt);
275
276int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai,
277 unsigned int mask, int slots);
278
279int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate);
280
281/* Digital Audio Interface mute */
282int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute);
283
284/* 193/*
285 *Controls 194 *Controls
286 */ 195 */
@@ -338,61 +247,6 @@ struct snd_soc_ops {
338 int (*trigger)(struct snd_pcm_substream *, int); 247 int (*trigger)(struct snd_pcm_substream *, int);
339}; 248};
340 249
341/* ASoC DAI ops */
342struct snd_soc_dai_ops {
343 /* DAI clocking configuration */
344 int (*set_sysclk)(struct snd_soc_dai *dai,
345 int clk_id, unsigned int freq, int dir);
346 int (*set_pll)(struct snd_soc_dai *dai,
347 int pll_id, unsigned int freq_in, unsigned int freq_out);
348 int (*set_clkdiv)(struct snd_soc_dai *dai, int div_id, int div);
349
350 /* DAI format configuration */
351 int (*set_fmt)(struct snd_soc_dai *dai, unsigned int fmt);
352 int (*set_tdm_slot)(struct snd_soc_dai *dai,
353 unsigned int mask, int slots);
354 int (*set_tristate)(struct snd_soc_dai *dai, int tristate);
355
356 /* digital mute */
357 int (*digital_mute)(struct snd_soc_dai *dai, int mute);
358};
359
360/* SoC DAI (Digital Audio Interface) */
361struct snd_soc_dai {
362 /* DAI description */
363 char *name;
364 unsigned int id;
365 unsigned char type;
366
367 /* DAI callbacks */
368 int (*probe)(struct platform_device *pdev,
369 struct snd_soc_dai *dai);
370 void (*remove)(struct platform_device *pdev,
371 struct snd_soc_dai *dai);
372 int (*suspend)(struct platform_device *pdev,
373 struct snd_soc_dai *dai);
374 int (*resume)(struct platform_device *pdev,
375 struct snd_soc_dai *dai);
376
377 /* ops */
378 struct snd_soc_ops ops;
379 struct snd_soc_dai_ops dai_ops;
380
381 /* DAI capabilities */
382 struct snd_soc_pcm_stream capture;
383 struct snd_soc_pcm_stream playback;
384
385 /* DAI runtime info */
386 struct snd_pcm_runtime *runtime;
387 struct snd_soc_codec *codec;
388 unsigned int active;
389 unsigned char pop_wait:1;
390 void *dma_data;
391
392 /* DAI private data */
393 void *private_data;
394};
395
396/* SoC Audio Codec */ 250/* SoC Audio Codec */
397struct snd_soc_codec { 251struct snd_soc_codec {
398 char *name; 252 char *name;
@@ -543,4 +397,6 @@ struct soc_enum {
543 void *dapm; 397 void *dapm;
544}; 398};
545 399
400#include <sound/soc-dai.h>
401
546#endif 402#endif