1/****************************************************************************
2 ****************************************************************************
3 ***
4 ***   This header was automatically generated from a Linux kernel header
5 ***   of the same name, to make information necessary for userspace to
6 ***   call into the kernel available to libc.  It contains only constants,
7 ***   structures, and macros generated from the original header, and thus,
8 ***   contains no copyrightable information.
9 ***
10 ***   To edit the content of this header, modify the corresponding
11 ***   source file (e.g. under external/kernel-headers/original/) then
12 ***   run bionic/libc/kernel/tools/update_all.py
13 ***
14 ***   Any manual change here will be lost the next time this script will
15 ***   be run. You've been warned!
16 ***
17 ****************************************************************************
18 ****************************************************************************/
19#ifndef __LINUX_UAPI_SND_ASOC_H
20#define __LINUX_UAPI_SND_ASOC_H
21#include <linux/types.h>
22#include <sound/asound.h>
23#define SND_SOC_TPLG_MAX_CHAN 8
24#define SND_SOC_TPLG_MAX_FORMATS 16
25#define SND_SOC_TPLG_STREAM_CONFIG_MAX 8
26#define SND_SOC_TPLG_HW_CONFIG_MAX 8
27#define SND_SOC_TPLG_CTL_VOLSW 1
28#define SND_SOC_TPLG_CTL_VOLSW_SX 2
29#define SND_SOC_TPLG_CTL_VOLSW_XR_SX 3
30#define SND_SOC_TPLG_CTL_ENUM 4
31#define SND_SOC_TPLG_CTL_BYTES 5
32#define SND_SOC_TPLG_CTL_ENUM_VALUE 6
33#define SND_SOC_TPLG_CTL_RANGE 7
34#define SND_SOC_TPLG_CTL_STROBE 8
35#define SND_SOC_TPLG_DAPM_CTL_VOLSW 64
36#define SND_SOC_TPLG_DAPM_CTL_ENUM_DOUBLE 65
37#define SND_SOC_TPLG_DAPM_CTL_ENUM_VIRT 66
38#define SND_SOC_TPLG_DAPM_CTL_ENUM_VALUE 67
39#define SND_SOC_TPLG_DAPM_CTL_PIN 68
40#define SND_SOC_TPLG_DAPM_INPUT 0
41#define SND_SOC_TPLG_DAPM_OUTPUT 1
42#define SND_SOC_TPLG_DAPM_MUX 2
43#define SND_SOC_TPLG_DAPM_MIXER 3
44#define SND_SOC_TPLG_DAPM_PGA 4
45#define SND_SOC_TPLG_DAPM_OUT_DRV 5
46#define SND_SOC_TPLG_DAPM_ADC 6
47#define SND_SOC_TPLG_DAPM_DAC 7
48#define SND_SOC_TPLG_DAPM_SWITCH 8
49#define SND_SOC_TPLG_DAPM_PRE 9
50#define SND_SOC_TPLG_DAPM_POST 10
51#define SND_SOC_TPLG_DAPM_AIF_IN 11
52#define SND_SOC_TPLG_DAPM_AIF_OUT 12
53#define SND_SOC_TPLG_DAPM_DAI_IN 13
54#define SND_SOC_TPLG_DAPM_DAI_OUT 14
55#define SND_SOC_TPLG_DAPM_DAI_LINK 15
56#define SND_SOC_TPLG_DAPM_BUFFER 16
57#define SND_SOC_TPLG_DAPM_SCHEDULER 17
58#define SND_SOC_TPLG_DAPM_EFFECT 18
59#define SND_SOC_TPLG_DAPM_SIGGEN 19
60#define SND_SOC_TPLG_DAPM_SRC 20
61#define SND_SOC_TPLG_DAPM_ASRC 21
62#define SND_SOC_TPLG_DAPM_ENCODER 22
63#define SND_SOC_TPLG_DAPM_DECODER 23
64#define SND_SOC_TPLG_DAPM_LAST SND_SOC_TPLG_DAPM_DECODER
65#define SND_SOC_TPLG_MAGIC 0x41536F43
66#define SND_SOC_TPLG_NUM_TEXTS 16
67#define SND_SOC_TPLG_ABI_VERSION 0x5
68#define SND_SOC_TPLG_ABI_VERSION_MIN 0x4
69#define SND_SOC_TPLG_TLV_SIZE 32
70#define SND_SOC_TPLG_TYPE_MIXER 1
71#define SND_SOC_TPLG_TYPE_BYTES 2
72#define SND_SOC_TPLG_TYPE_ENUM 3
73#define SND_SOC_TPLG_TYPE_DAPM_GRAPH 4
74#define SND_SOC_TPLG_TYPE_DAPM_WIDGET 5
75#define SND_SOC_TPLG_TYPE_DAI_LINK 6
76#define SND_SOC_TPLG_TYPE_PCM 7
77#define SND_SOC_TPLG_TYPE_MANIFEST 8
78#define SND_SOC_TPLG_TYPE_CODEC_LINK 9
79#define SND_SOC_TPLG_TYPE_BACKEND_LINK 10
80#define SND_SOC_TPLG_TYPE_PDATA 11
81#define SND_SOC_TPLG_TYPE_DAI 12
82#define SND_SOC_TPLG_TYPE_MAX SND_SOC_TPLG_TYPE_DAI
83#define SND_SOC_TPLG_TYPE_VENDOR_FW 1000
84#define SND_SOC_TPLG_TYPE_VENDOR_CONFIG 1001
85#define SND_SOC_TPLG_TYPE_VENDOR_COEFF 1002
86#define SND_SOC_TPLG_TYPEVENDOR_CODEC 1003
87#define SND_SOC_TPLG_STREAM_PLAYBACK 0
88#define SND_SOC_TPLG_STREAM_CAPTURE 1
89#define SND_SOC_TPLG_TUPLE_TYPE_UUID 0
90#define SND_SOC_TPLG_TUPLE_TYPE_STRING 1
91#define SND_SOC_TPLG_TUPLE_TYPE_BOOL 2
92#define SND_SOC_TPLG_TUPLE_TYPE_BYTE 3
93#define SND_SOC_TPLG_TUPLE_TYPE_WORD 4
94#define SND_SOC_TPLG_TUPLE_TYPE_SHORT 5
95#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_RATES (1 << 0)
96#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_CHANNELS (1 << 1)
97#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)
98#define SND_SOC_TPLG_DAI_CLK_GATE_UNDEFINED 0
99#define SND_SOC_TPLG_DAI_CLK_GATE_GATED 1
100#define SND_SOC_TPLG_DAI_CLK_GATE_CONT 2
101#define SND_SOC_TPLG_MCLK_CO 0
102#define SND_SOC_TPLG_MCLK_CI 1
103#define SND_SOC_DAI_FORMAT_I2S 1
104#define SND_SOC_DAI_FORMAT_RIGHT_J 2
105#define SND_SOC_DAI_FORMAT_LEFT_J 3
106#define SND_SOC_DAI_FORMAT_DSP_A 4
107#define SND_SOC_DAI_FORMAT_DSP_B 5
108#define SND_SOC_DAI_FORMAT_AC97 6
109#define SND_SOC_DAI_FORMAT_PDM 7
110#define SND_SOC_DAI_FORMAT_MSB SND_SOC_DAI_FORMAT_LEFT_J
111#define SND_SOC_DAI_FORMAT_LSB SND_SOC_DAI_FORMAT_RIGHT_J
112#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_RATES (1 << 0)
113#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_CHANNELS (1 << 1)
114#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)
115#define SND_SOC_TPLG_LNK_FLGBIT_VOICE_WAKEUP (1 << 3)
116#define SND_SOC_TPLG_BCLK_CM 0
117#define SND_SOC_TPLG_BCLK_CS 1
118#define SND_SOC_TPLG_FSYNC_CM 0
119#define SND_SOC_TPLG_FSYNC_CS 1
120struct snd_soc_tplg_hdr {
121  __le32 magic;
122  __le32 abi;
123  __le32 version;
124  __le32 type;
125  __le32 size;
126  __le32 vendor_type;
127  __le32 payload_size;
128  __le32 index;
129  __le32 count;
130} __attribute__((packed));
131struct snd_soc_tplg_vendor_uuid_elem {
132  __le32 token;
133  char uuid[16];
134} __attribute__((packed));
135struct snd_soc_tplg_vendor_value_elem {
136  __le32 token;
137  __le32 value;
138} __attribute__((packed));
139struct snd_soc_tplg_vendor_string_elem {
140  __le32 token;
141  char string[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
142} __attribute__((packed));
143struct snd_soc_tplg_vendor_array {
144  __le32 size;
145  __le32 type;
146  __le32 num_elems;
147  union {
148    struct snd_soc_tplg_vendor_uuid_elem uuid[0];
149    struct snd_soc_tplg_vendor_value_elem value[0];
150    struct snd_soc_tplg_vendor_string_elem string[0];
151  };
152} __attribute__((packed));
153struct snd_soc_tplg_private {
154  __le32 size;
155  union {
156    char data[0];
157    struct snd_soc_tplg_vendor_array array[0];
158  };
159} __attribute__((packed));
160struct snd_soc_tplg_tlv_dbscale {
161  __le32 min;
162  __le32 step;
163  __le32 mute;
164} __attribute__((packed));
165struct snd_soc_tplg_ctl_tlv {
166  __le32 size;
167  __le32 type;
168  union {
169    __le32 data[SND_SOC_TPLG_TLV_SIZE];
170    struct snd_soc_tplg_tlv_dbscale scale;
171  };
172} __attribute__((packed));
173struct snd_soc_tplg_channel {
174  __le32 size;
175  __le32 reg;
176  __le32 shift;
177  __le32 id;
178} __attribute__((packed));
179struct snd_soc_tplg_io_ops {
180  __le32 get;
181  __le32 put;
182  __le32 info;
183} __attribute__((packed));
184struct snd_soc_tplg_ctl_hdr {
185  __le32 size;
186  __le32 type;
187  char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
188  __le32 access;
189  struct snd_soc_tplg_io_ops ops;
190  struct snd_soc_tplg_ctl_tlv tlv;
191} __attribute__((packed));
192struct snd_soc_tplg_stream_caps {
193  __le32 size;
194  char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
195  __le64 formats;
196  __le32 rates;
197  __le32 rate_min;
198  __le32 rate_max;
199  __le32 channels_min;
200  __le32 channels_max;
201  __le32 periods_min;
202  __le32 periods_max;
203  __le32 period_size_min;
204  __le32 period_size_max;
205  __le32 buffer_size_min;
206  __le32 buffer_size_max;
207  __le32 sig_bits;
208} __attribute__((packed));
209struct snd_soc_tplg_stream {
210  __le32 size;
211  char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
212  __le64 format;
213  __le32 rate;
214  __le32 period_bytes;
215  __le32 buffer_bytes;
216  __le32 channels;
217} __attribute__((packed));
218struct snd_soc_tplg_hw_config {
219  __le32 size;
220  __le32 id;
221  __le32 fmt;
222  __u8 clock_gated;
223  __u8 invert_bclk;
224  __u8 invert_fsync;
225  __u8 bclk_master;
226  __u8 fsync_master;
227  __u8 mclk_direction;
228  __le16 reserved;
229  __le32 mclk_rate;
230  __le32 bclk_rate;
231  __le32 fsync_rate;
232  __le32 tdm_slots;
233  __le32 tdm_slot_width;
234  __le32 tx_slots;
235  __le32 rx_slots;
236  __le32 tx_channels;
237  __le32 tx_chanmap[SND_SOC_TPLG_MAX_CHAN];
238  __le32 rx_channels;
239  __le32 rx_chanmap[SND_SOC_TPLG_MAX_CHAN];
240} __attribute__((packed));
241struct snd_soc_tplg_manifest {
242  __le32 size;
243  __le32 control_elems;
244  __le32 widget_elems;
245  __le32 graph_elems;
246  __le32 pcm_elems;
247  __le32 dai_link_elems;
248  __le32 dai_elems;
249  __le32 reserved[20];
250  struct snd_soc_tplg_private priv;
251} __attribute__((packed));
252struct snd_soc_tplg_mixer_control {
253  struct snd_soc_tplg_ctl_hdr hdr;
254  __le32 size;
255  __le32 min;
256  __le32 max;
257  __le32 platform_max;
258  __le32 invert;
259  __le32 num_channels;
260  struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN];
261  struct snd_soc_tplg_private priv;
262} __attribute__((packed));
263struct snd_soc_tplg_enum_control {
264  struct snd_soc_tplg_ctl_hdr hdr;
265  __le32 size;
266  __le32 num_channels;
267  struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN];
268  __le32 items;
269  __le32 mask;
270  __le32 count;
271  char texts[SND_SOC_TPLG_NUM_TEXTS][SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
272  __le32 values[SND_SOC_TPLG_NUM_TEXTS * SNDRV_CTL_ELEM_ID_NAME_MAXLEN / 4];
273  struct snd_soc_tplg_private priv;
274} __attribute__((packed));
275struct snd_soc_tplg_bytes_control {
276  struct snd_soc_tplg_ctl_hdr hdr;
277  __le32 size;
278  __le32 max;
279  __le32 mask;
280  __le32 base;
281  __le32 num_regs;
282  struct snd_soc_tplg_io_ops ext_ops;
283  struct snd_soc_tplg_private priv;
284} __attribute__((packed));
285struct snd_soc_tplg_dapm_graph_elem {
286  char sink[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
287  char control[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
288  char source[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
289} __attribute__((packed));
290struct snd_soc_tplg_dapm_widget {
291  __le32 size;
292  __le32 id;
293  char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
294  char sname[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
295  __le32 reg;
296  __le32 shift;
297  __le32 mask;
298  __le32 subseq;
299  __le32 invert;
300  __le32 ignore_suspend;
301  __le16 event_flags;
302  __le16 event_type;
303  __le32 num_kcontrols;
304  struct snd_soc_tplg_private priv;
305} __attribute__((packed));
306struct snd_soc_tplg_pcm {
307  __le32 size;
308  char pcm_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
309  char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
310  __le32 pcm_id;
311  __le32 dai_id;
312  __le32 playback;
313  __le32 capture;
314  __le32 compress;
315  struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX];
316  __le32 num_streams;
317  struct snd_soc_tplg_stream_caps caps[2];
318  __le32 flag_mask;
319  __le32 flags;
320  struct snd_soc_tplg_private priv;
321} __attribute__((packed));
322struct snd_soc_tplg_link_config {
323  __le32 size;
324  __le32 id;
325  char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
326  char stream_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
327  struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX];
328  __le32 num_streams;
329  struct snd_soc_tplg_hw_config hw_config[SND_SOC_TPLG_HW_CONFIG_MAX];
330  __le32 num_hw_configs;
331  __le32 default_hw_config_id;
332  __le32 flag_mask;
333  __le32 flags;
334  struct snd_soc_tplg_private priv;
335} __attribute__((packed));
336struct snd_soc_tplg_dai {
337  __le32 size;
338  char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
339  __le32 dai_id;
340  __le32 playback;
341  __le32 capture;
342  struct snd_soc_tplg_stream_caps caps[2];
343  __le32 flag_mask;
344  __le32 flags;
345  struct snd_soc_tplg_private priv;
346} __attribute__((packed));
347struct snd_soc_tplg_manifest_v4 {
348  __le32 size;
349  __le32 control_elems;
350  __le32 widget_elems;
351  __le32 graph_elems;
352  __le32 pcm_elems;
353  __le32 dai_link_elems;
354  struct snd_soc_tplg_private priv;
355} __packed;
356struct snd_soc_tplg_stream_caps_v4 {
357  __le32 size;
358  char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
359  __le64 formats;
360  __le32 rates;
361  __le32 rate_min;
362  __le32 rate_max;
363  __le32 channels_min;
364  __le32 channels_max;
365  __le32 periods_min;
366  __le32 periods_max;
367  __le32 period_size_min;
368  __le32 period_size_max;
369  __le32 buffer_size_min;
370  __le32 buffer_size_max;
371} __packed;
372struct snd_soc_tplg_pcm_v4 {
373  __le32 size;
374  char pcm_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
375  char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
376  __le32 pcm_id;
377  __le32 dai_id;
378  __le32 playback;
379  __le32 capture;
380  __le32 compress;
381  struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX];
382  __le32 num_streams;
383  struct snd_soc_tplg_stream_caps_v4 caps[2];
384} __packed;
385struct snd_soc_tplg_link_config_v4 {
386  __le32 size;
387  __le32 id;
388  struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX];
389  __le32 num_streams;
390} __packed;
391#endif
392