1d5ac70f0Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2d5ac70f0Sopenharmony_ci/*
3d5ac70f0Sopenharmony_ci * uapi/sound/asoc.h -- ALSA SoC Firmware Controls and DAPM
4d5ac70f0Sopenharmony_ci *
5d5ac70f0Sopenharmony_ci * Copyright (C) 2012 Texas Instruments Inc.
6d5ac70f0Sopenharmony_ci * Copyright (C) 2015 Intel Corporation.
7d5ac70f0Sopenharmony_ci *
8d5ac70f0Sopenharmony_ci * This program is free software; you can redistribute it and/or modify
9d5ac70f0Sopenharmony_ci * it under the terms of the GNU General Public License version 2 as
10d5ac70f0Sopenharmony_ci * published by the Free Software Foundation.
11d5ac70f0Sopenharmony_ci *
12d5ac70f0Sopenharmony_ci * Simple file API to load FW that includes mixers, coefficients, DAPM graphs,
13d5ac70f0Sopenharmony_ci * algorithms, equalisers, DAIs, widgets etc.
14d5ac70f0Sopenharmony_ci*/
15d5ac70f0Sopenharmony_ci
16d5ac70f0Sopenharmony_ci#ifndef __LINUX_UAPI_SND_ASOC_H
17d5ac70f0Sopenharmony_ci#define __LINUX_UAPI_SND_ASOC_H
18d5ac70f0Sopenharmony_ci
19d5ac70f0Sopenharmony_ci#if defined(__linux__)
20d5ac70f0Sopenharmony_ci#include <linux/types.h>
21d5ac70f0Sopenharmony_ci#endif
22d5ac70f0Sopenharmony_ci
23d5ac70f0Sopenharmony_ci/*
24d5ac70f0Sopenharmony_ci * Maximum number of channels topology kcontrol can represent.
25d5ac70f0Sopenharmony_ci */
26d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_MAX_CHAN		8
27d5ac70f0Sopenharmony_ci
28d5ac70f0Sopenharmony_ci/*
29d5ac70f0Sopenharmony_ci * Maximum number of PCM formats capability
30d5ac70f0Sopenharmony_ci */
31d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_MAX_FORMATS	16
32d5ac70f0Sopenharmony_ci
33d5ac70f0Sopenharmony_ci/*
34d5ac70f0Sopenharmony_ci * Maximum number of PCM stream configs
35d5ac70f0Sopenharmony_ci */
36d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_STREAM_CONFIG_MAX  8
37d5ac70f0Sopenharmony_ci
38d5ac70f0Sopenharmony_ci/*
39d5ac70f0Sopenharmony_ci * Maximum number of physical link's hardware configs
40d5ac70f0Sopenharmony_ci */
41d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_HW_CONFIG_MAX	8
42d5ac70f0Sopenharmony_ci
43d5ac70f0Sopenharmony_ci/* individual kcontrol info types - can be mixed with other types */
44d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_CTL_VOLSW		1
45d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_CTL_VOLSW_SX	2
46d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_CTL_VOLSW_XR_SX	3
47d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_CTL_ENUM		4
48d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_CTL_BYTES		5
49d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_CTL_ENUM_VALUE	6
50d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_CTL_RANGE		7
51d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_CTL_STROBE		8
52d5ac70f0Sopenharmony_ci
53d5ac70f0Sopenharmony_ci
54d5ac70f0Sopenharmony_ci/* individual widget kcontrol info types - can be mixed with other types */
55d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_CTL_VOLSW		64
56d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_CTL_ENUM_DOUBLE	65
57d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_CTL_ENUM_VIRT		66
58d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_CTL_ENUM_VALUE	67
59d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_CTL_PIN		68
60d5ac70f0Sopenharmony_ci
61d5ac70f0Sopenharmony_ci/* DAPM widget types - add new items to the end */
62d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_INPUT		0
63d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_OUTPUT	1
64d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_MUX		2
65d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_MIXER		3
66d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_PGA		4
67d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_OUT_DRV	5
68d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_ADC		6
69d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_DAC		7
70d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_SWITCH	8
71d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_PRE		9
72d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_POST		10
73d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_AIF_IN	11
74d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_AIF_OUT	12
75d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_DAI_IN	13
76d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_DAI_OUT	14
77d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_DAI_LINK	15
78d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_BUFFER	16
79d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_SCHEDULER	17
80d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_EFFECT	18
81d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_SIGGEN	19
82d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_SRC		20
83d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_ASRC		21
84d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_ENCODER	22
85d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_DECODER	23
86d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAPM_LAST		SND_SOC_TPLG_DAPM_DECODER
87d5ac70f0Sopenharmony_ci
88d5ac70f0Sopenharmony_ci/* Header magic number and string sizes */
89d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_MAGIC		0x41536F43 /* ASoC */
90d5ac70f0Sopenharmony_ci
91d5ac70f0Sopenharmony_ci/* string sizes */
92d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_NUM_TEXTS		16
93d5ac70f0Sopenharmony_ci
94d5ac70f0Sopenharmony_ci/* ABI version */
95d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_ABI_VERSION	0x5	/* current version */
96d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_ABI_VERSION_MIN	0x4	/* oldest version supported */
97d5ac70f0Sopenharmony_ci
98d5ac70f0Sopenharmony_ci/* Max size of TLV data */
99d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TLV_SIZE		32
100d5ac70f0Sopenharmony_ci
101d5ac70f0Sopenharmony_ci/*
102d5ac70f0Sopenharmony_ci * File and Block header data types.
103d5ac70f0Sopenharmony_ci * Add new generic and vendor types to end of list.
104d5ac70f0Sopenharmony_ci * Generic types are handled by the core whilst vendors types are passed
105d5ac70f0Sopenharmony_ci * to the component drivers for handling.
106d5ac70f0Sopenharmony_ci */
107d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_MIXER		1
108d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_BYTES		2
109d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_ENUM		3
110d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_DAPM_GRAPH	4
111d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_DAPM_WIDGET	5
112d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_DAI_LINK	6
113d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_PCM		7
114d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_MANIFEST	8
115d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_CODEC_LINK	9
116d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_BACKEND_LINK	10
117d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_PDATA		11
118d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_DAI		12
119d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_MAX		SND_SOC_TPLG_TYPE_DAI
120d5ac70f0Sopenharmony_ci
121d5ac70f0Sopenharmony_ci/* vendor block IDs - please add new vendor types to end */
122d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_VENDOR_FW	1000
123d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_VENDOR_CONFIG	1001
124d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPE_VENDOR_COEFF	1002
125d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TYPEVENDOR_CODEC	1003
126d5ac70f0Sopenharmony_ci
127d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_STREAM_PLAYBACK	0
128d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_STREAM_CAPTURE	1
129d5ac70f0Sopenharmony_ci
130d5ac70f0Sopenharmony_ci/* vendor tuple types */
131d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TUPLE_TYPE_UUID	0
132d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TUPLE_TYPE_STRING	1
133d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TUPLE_TYPE_BOOL	2
134d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TUPLE_TYPE_BYTE	3
135d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TUPLE_TYPE_WORD	4
136d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_TUPLE_TYPE_SHORT	5
137d5ac70f0Sopenharmony_ci
138d5ac70f0Sopenharmony_ci/* DAI flags */
139d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_RATES         (1 << 0)
140d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_CHANNELS      (1 << 1)
141d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_SAMPLEBITS    (1 << 2)
142d5ac70f0Sopenharmony_ci
143d5ac70f0Sopenharmony_ci/* DAI clock gating */
144d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAI_CLK_GATE_UNDEFINED	0
145d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAI_CLK_GATE_GATED	1
146d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_DAI_CLK_GATE_CONT		2
147d5ac70f0Sopenharmony_ci
148d5ac70f0Sopenharmony_ci/* DAI mclk_direction */
149d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_MCLK_CO            0 /* for codec, mclk is output */
150d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_MCLK_CI            1 /* for codec, mclk is input */
151d5ac70f0Sopenharmony_ci
152d5ac70f0Sopenharmony_ci/* DAI physical PCM data formats.
153d5ac70f0Sopenharmony_ci * Add new formats to the end of the list.
154d5ac70f0Sopenharmony_ci */
155d5ac70f0Sopenharmony_ci#define SND_SOC_DAI_FORMAT_I2S          1 /* I2S mode */
156d5ac70f0Sopenharmony_ci#define SND_SOC_DAI_FORMAT_RIGHT_J      2 /* Right Justified mode */
157d5ac70f0Sopenharmony_ci#define SND_SOC_DAI_FORMAT_LEFT_J       3 /* Left Justified mode */
158d5ac70f0Sopenharmony_ci#define SND_SOC_DAI_FORMAT_DSP_A        4 /* L data MSB after FRM LRC */
159d5ac70f0Sopenharmony_ci#define SND_SOC_DAI_FORMAT_DSP_B        5 /* L data MSB during FRM LRC */
160d5ac70f0Sopenharmony_ci#define SND_SOC_DAI_FORMAT_AC97         6 /* AC97 */
161d5ac70f0Sopenharmony_ci#define SND_SOC_DAI_FORMAT_PDM          7 /* Pulse density modulation */
162d5ac70f0Sopenharmony_ci
163d5ac70f0Sopenharmony_ci/* left and right justified also known as MSB and LSB respectively */
164d5ac70f0Sopenharmony_ci#define SND_SOC_DAI_FORMAT_MSB          SND_SOC_DAI_FORMAT_LEFT_J
165d5ac70f0Sopenharmony_ci#define SND_SOC_DAI_FORMAT_LSB          SND_SOC_DAI_FORMAT_RIGHT_J
166d5ac70f0Sopenharmony_ci
167d5ac70f0Sopenharmony_ci/* DAI link flags */
168d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_RATES         (1 << 0)
169d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_CHANNELS      (1 << 1)
170d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_SAMPLEBITS    (1 << 2)
171d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_LNK_FLGBIT_VOICE_WAKEUP            (1 << 3)
172d5ac70f0Sopenharmony_ci
173d5ac70f0Sopenharmony_ci/* DAI topology BCLK parameter
174d5ac70f0Sopenharmony_ci * For the backwards capability, by default codec is bclk provider
175d5ac70f0Sopenharmony_ci */
176d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_BCLK_CP         0 /* codec is bclk provider */
177d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_BCLK_CC         1 /* codec is bclk consumer */
178d5ac70f0Sopenharmony_ci/* keep previous definitions for compatibility */
179d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_BCLK_CM         SND_SOC_TPLG_BCLK_CP
180d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_BCLK_CS         SND_SOC_TPLG_BCLK_CC
181d5ac70f0Sopenharmony_ci
182d5ac70f0Sopenharmony_ci/* DAI topology FSYNC parameter
183d5ac70f0Sopenharmony_ci * For the backwards capability, by default codec is fsync provider
184d5ac70f0Sopenharmony_ci */
185d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_FSYNC_CP         0 /* codec is fsync provider */
186d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_FSYNC_CC         1 /* codec is fsync consumer */
187d5ac70f0Sopenharmony_ci/* keep previous definitions for compatibility */
188d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_FSYNC_CM         SND_SOC_TPLG_FSYNC_CP
189d5ac70f0Sopenharmony_ci#define SND_SOC_TPLG_FSYNC_CS         SND_SOC_TPLG_FSYNC_CC
190d5ac70f0Sopenharmony_ci
191d5ac70f0Sopenharmony_ci/*
192d5ac70f0Sopenharmony_ci * Block Header.
193d5ac70f0Sopenharmony_ci * This header precedes all object and object arrays below.
194d5ac70f0Sopenharmony_ci */
195d5ac70f0Sopenharmony_cistruct snd_soc_tplg_hdr {
196d5ac70f0Sopenharmony_ci	__le32 magic;		/* magic number */
197d5ac70f0Sopenharmony_ci	__le32 abi;		/* ABI version */
198d5ac70f0Sopenharmony_ci	__le32 version;		/* optional vendor specific version details */
199d5ac70f0Sopenharmony_ci	__le32 type;		/* SND_SOC_TPLG_TYPE_ */
200d5ac70f0Sopenharmony_ci	__le32 size;		/* size of this structure */
201d5ac70f0Sopenharmony_ci	__le32 vendor_type;	/* optional vendor specific type info */
202d5ac70f0Sopenharmony_ci	__le32 payload_size;	/* data bytes, excluding this header */
203d5ac70f0Sopenharmony_ci	__le32 index;		/* identifier for block */
204d5ac70f0Sopenharmony_ci	__le32 count;		/* number of elements in block */
205d5ac70f0Sopenharmony_ci} __attribute__((packed));
206d5ac70f0Sopenharmony_ci
207d5ac70f0Sopenharmony_ci/* vendor tuple for uuid */
208d5ac70f0Sopenharmony_cistruct snd_soc_tplg_vendor_uuid_elem {
209d5ac70f0Sopenharmony_ci	__le32 token;
210d5ac70f0Sopenharmony_ci	char uuid[16];
211d5ac70f0Sopenharmony_ci} __attribute__((packed));
212d5ac70f0Sopenharmony_ci
213d5ac70f0Sopenharmony_ci/* vendor tuple for a bool/byte/short/word value */
214d5ac70f0Sopenharmony_cistruct snd_soc_tplg_vendor_value_elem {
215d5ac70f0Sopenharmony_ci	__le32 token;
216d5ac70f0Sopenharmony_ci	__le32 value;
217d5ac70f0Sopenharmony_ci} __attribute__((packed));
218d5ac70f0Sopenharmony_ci
219d5ac70f0Sopenharmony_ci/* vendor tuple for string */
220d5ac70f0Sopenharmony_cistruct snd_soc_tplg_vendor_string_elem {
221d5ac70f0Sopenharmony_ci	__le32 token;
222d5ac70f0Sopenharmony_ci	char string[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
223d5ac70f0Sopenharmony_ci} __attribute__((packed));
224d5ac70f0Sopenharmony_ci
225d5ac70f0Sopenharmony_cistruct snd_soc_tplg_vendor_array {
226d5ac70f0Sopenharmony_ci	__le32 size;	/* size in bytes of the array, including all elements */
227d5ac70f0Sopenharmony_ci	__le32 type;	/* SND_SOC_TPLG_TUPLE_TYPE_ */
228d5ac70f0Sopenharmony_ci	__le32 num_elems;	/* number of elements in array */
229d5ac70f0Sopenharmony_ci	union {
230d5ac70f0Sopenharmony_ci		struct snd_soc_tplg_vendor_uuid_elem uuid[0];
231d5ac70f0Sopenharmony_ci		struct snd_soc_tplg_vendor_value_elem value[0];
232d5ac70f0Sopenharmony_ci		struct snd_soc_tplg_vendor_string_elem string[0];
233d5ac70f0Sopenharmony_ci	};
234d5ac70f0Sopenharmony_ci} __attribute__((packed));
235d5ac70f0Sopenharmony_ci
236d5ac70f0Sopenharmony_ci/*
237d5ac70f0Sopenharmony_ci * Private data.
238d5ac70f0Sopenharmony_ci * All topology objects may have private data that can be used by the driver or
239d5ac70f0Sopenharmony_ci * firmware. Core will ignore this data.
240d5ac70f0Sopenharmony_ci */
241d5ac70f0Sopenharmony_cistruct snd_soc_tplg_private {
242d5ac70f0Sopenharmony_ci	__le32 size;	/* in bytes of private data */
243d5ac70f0Sopenharmony_ci	union {
244d5ac70f0Sopenharmony_ci		char data[0];
245d5ac70f0Sopenharmony_ci		struct snd_soc_tplg_vendor_array array[0];
246d5ac70f0Sopenharmony_ci	};
247d5ac70f0Sopenharmony_ci} __attribute__((packed));
248d5ac70f0Sopenharmony_ci
249d5ac70f0Sopenharmony_ci/*
250d5ac70f0Sopenharmony_ci * Kcontrol TLV data.
251d5ac70f0Sopenharmony_ci */
252d5ac70f0Sopenharmony_cistruct snd_soc_tplg_tlv_dbscale {
253d5ac70f0Sopenharmony_ci	__le32 min;
254d5ac70f0Sopenharmony_ci	__le32 step;
255d5ac70f0Sopenharmony_ci	__le32 mute;
256d5ac70f0Sopenharmony_ci} __attribute__((packed));
257d5ac70f0Sopenharmony_ci
258d5ac70f0Sopenharmony_cistruct snd_soc_tplg_ctl_tlv {
259d5ac70f0Sopenharmony_ci	__le32 size;	/* in bytes of this structure */
260d5ac70f0Sopenharmony_ci	__le32 type;	/* SNDRV_CTL_TLVT_*, type of TLV */
261d5ac70f0Sopenharmony_ci	union {
262d5ac70f0Sopenharmony_ci		__le32 data[SND_SOC_TPLG_TLV_SIZE];
263d5ac70f0Sopenharmony_ci		struct snd_soc_tplg_tlv_dbscale scale;
264d5ac70f0Sopenharmony_ci	};
265d5ac70f0Sopenharmony_ci} __attribute__((packed));
266d5ac70f0Sopenharmony_ci
267d5ac70f0Sopenharmony_ci/*
268d5ac70f0Sopenharmony_ci * Kcontrol channel data
269d5ac70f0Sopenharmony_ci */
270d5ac70f0Sopenharmony_cistruct snd_soc_tplg_channel {
271d5ac70f0Sopenharmony_ci	__le32 size;	/* in bytes of this structure */
272d5ac70f0Sopenharmony_ci	__le32 reg;
273d5ac70f0Sopenharmony_ci	__le32 shift;
274d5ac70f0Sopenharmony_ci	__le32 id;	/* ID maps to Left, Right, LFE etc */
275d5ac70f0Sopenharmony_ci} __attribute__((packed));
276d5ac70f0Sopenharmony_ci
277d5ac70f0Sopenharmony_ci/*
278d5ac70f0Sopenharmony_ci * Genericl Operations IDs, for binding Kcontrol or Bytes ext ops
279d5ac70f0Sopenharmony_ci * Kcontrol ops need get/put/info.
280d5ac70f0Sopenharmony_ci * Bytes ext ops need get/put.
281d5ac70f0Sopenharmony_ci */
282d5ac70f0Sopenharmony_cistruct snd_soc_tplg_io_ops {
283d5ac70f0Sopenharmony_ci	__le32 get;
284d5ac70f0Sopenharmony_ci	__le32 put;
285d5ac70f0Sopenharmony_ci	__le32 info;
286d5ac70f0Sopenharmony_ci} __attribute__((packed));
287d5ac70f0Sopenharmony_ci
288d5ac70f0Sopenharmony_ci/*
289d5ac70f0Sopenharmony_ci * kcontrol header
290d5ac70f0Sopenharmony_ci */
291d5ac70f0Sopenharmony_cistruct snd_soc_tplg_ctl_hdr {
292d5ac70f0Sopenharmony_ci	__le32 size;	/* in bytes of this structure */
293d5ac70f0Sopenharmony_ci	__le32 type;
294d5ac70f0Sopenharmony_ci	char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
295d5ac70f0Sopenharmony_ci	__le32 access;
296d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_io_ops ops;
297d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_ctl_tlv tlv;
298d5ac70f0Sopenharmony_ci} __attribute__((packed));
299d5ac70f0Sopenharmony_ci
300d5ac70f0Sopenharmony_ci/*
301d5ac70f0Sopenharmony_ci * Stream Capabilities
302d5ac70f0Sopenharmony_ci */
303d5ac70f0Sopenharmony_cistruct snd_soc_tplg_stream_caps {
304d5ac70f0Sopenharmony_ci	__le32 size;		/* in bytes of this structure */
305d5ac70f0Sopenharmony_ci	char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
306d5ac70f0Sopenharmony_ci	__le64 formats;	/* supported formats SNDRV_PCM_FMTBIT_* */
307d5ac70f0Sopenharmony_ci	__le32 rates;		/* supported rates SNDRV_PCM_RATE_* */
308d5ac70f0Sopenharmony_ci	__le32 rate_min;	/* min rate */
309d5ac70f0Sopenharmony_ci	__le32 rate_max;	/* max rate */
310d5ac70f0Sopenharmony_ci	__le32 channels_min;	/* min channels */
311d5ac70f0Sopenharmony_ci	__le32 channels_max;	/* max channels */
312d5ac70f0Sopenharmony_ci	__le32 periods_min;	/* min number of periods */
313d5ac70f0Sopenharmony_ci	__le32 periods_max;	/* max number of periods */
314d5ac70f0Sopenharmony_ci	__le32 period_size_min;	/* min period size bytes */
315d5ac70f0Sopenharmony_ci	__le32 period_size_max;	/* max period size bytes */
316d5ac70f0Sopenharmony_ci	__le32 buffer_size_min;	/* min buffer size bytes */
317d5ac70f0Sopenharmony_ci	__le32 buffer_size_max;	/* max buffer size bytes */
318d5ac70f0Sopenharmony_ci	__le32 sig_bits;        /* number of bits of content */
319d5ac70f0Sopenharmony_ci} __attribute__((packed));
320d5ac70f0Sopenharmony_ci
321d5ac70f0Sopenharmony_ci/*
322d5ac70f0Sopenharmony_ci * FE or BE Stream configuration supported by SW/FW
323d5ac70f0Sopenharmony_ci */
324d5ac70f0Sopenharmony_cistruct snd_soc_tplg_stream {
325d5ac70f0Sopenharmony_ci	__le32 size;		/* in bytes of this structure */
326d5ac70f0Sopenharmony_ci	char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* Name of the stream */
327d5ac70f0Sopenharmony_ci	__le64 format;		/* SNDRV_PCM_FMTBIT_* */
328d5ac70f0Sopenharmony_ci	__le32 rate;		/* SNDRV_PCM_RATE_* */
329d5ac70f0Sopenharmony_ci	__le32 period_bytes;	/* size of period in bytes */
330d5ac70f0Sopenharmony_ci	__le32 buffer_bytes;	/* size of buffer in bytes */
331d5ac70f0Sopenharmony_ci	__le32 channels;	/* channels */
332d5ac70f0Sopenharmony_ci} __attribute__((packed));
333d5ac70f0Sopenharmony_ci
334d5ac70f0Sopenharmony_ci
335d5ac70f0Sopenharmony_ci/*
336d5ac70f0Sopenharmony_ci * Describes a physical link's runtime supported hardware config,
337d5ac70f0Sopenharmony_ci * i.e. hardware audio formats.
338d5ac70f0Sopenharmony_ci */
339d5ac70f0Sopenharmony_cistruct snd_soc_tplg_hw_config {
340d5ac70f0Sopenharmony_ci	__le32 size;            /* in bytes of this structure */
341d5ac70f0Sopenharmony_ci	__le32 id;		/* unique ID - - used to match */
342d5ac70f0Sopenharmony_ci	__le32 fmt;		/* SND_SOC_DAI_FORMAT_ format value */
343d5ac70f0Sopenharmony_ci	__u8 clock_gated;	/* SND_SOC_TPLG_DAI_CLK_GATE_ value */
344d5ac70f0Sopenharmony_ci	__u8 invert_bclk;	/* 1 for inverted BCLK, 0 for normal */
345d5ac70f0Sopenharmony_ci	__u8 invert_fsync;	/* 1 for inverted frame clock, 0 for normal */
346d5ac70f0Sopenharmony_ci	__u8 bclk_provider;	/* SND_SOC_TPLG_BCLK_ value */
347d5ac70f0Sopenharmony_ci	__u8 fsync_provider;	/* SND_SOC_TPLG_FSYNC_ value */
348d5ac70f0Sopenharmony_ci	__u8 mclk_direction;    /* SND_SOC_TPLG_MCLK_ value */
349d5ac70f0Sopenharmony_ci	__le16 reserved;	/* for 32bit alignment */
350d5ac70f0Sopenharmony_ci	__le32 mclk_rate;	/* MCLK or SYSCLK freqency in Hz */
351d5ac70f0Sopenharmony_ci	__le32 bclk_rate;	/* BCLK freqency in Hz */
352d5ac70f0Sopenharmony_ci	__le32 fsync_rate;	/* frame clock in Hz */
353d5ac70f0Sopenharmony_ci	__le32 tdm_slots;	/* number of TDM slots in use */
354d5ac70f0Sopenharmony_ci	__le32 tdm_slot_width;	/* width in bits for each slot */
355d5ac70f0Sopenharmony_ci	__le32 tx_slots;	/* bit mask for active Tx slots */
356d5ac70f0Sopenharmony_ci	__le32 rx_slots;	/* bit mask for active Rx slots */
357d5ac70f0Sopenharmony_ci	__le32 tx_channels;	/* number of Tx channels */
358d5ac70f0Sopenharmony_ci	__le32 tx_chanmap[SND_SOC_TPLG_MAX_CHAN]; /* array of slot number */
359d5ac70f0Sopenharmony_ci	__le32 rx_channels;	/* number of Rx channels */
360d5ac70f0Sopenharmony_ci	__le32 rx_chanmap[SND_SOC_TPLG_MAX_CHAN]; /* array of slot number */
361d5ac70f0Sopenharmony_ci} __attribute__((packed));
362d5ac70f0Sopenharmony_ci
363d5ac70f0Sopenharmony_ci/*
364d5ac70f0Sopenharmony_ci * Manifest. List totals for each payload type. Not used in parsing, but will
365d5ac70f0Sopenharmony_ci * be passed to the component driver before any other objects in order for any
366d5ac70f0Sopenharmony_ci * global component resource allocations.
367d5ac70f0Sopenharmony_ci *
368d5ac70f0Sopenharmony_ci * File block representation for manifest :-
369d5ac70f0Sopenharmony_ci * +-----------------------------------+----+
370d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_hdr           |  1 |
371d5ac70f0Sopenharmony_ci * +-----------------------------------+----+
372d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_manifest      |  1 |
373d5ac70f0Sopenharmony_ci * +-----------------------------------+----+
374d5ac70f0Sopenharmony_ci */
375d5ac70f0Sopenharmony_cistruct snd_soc_tplg_manifest {
376d5ac70f0Sopenharmony_ci	__le32 size;		/* in bytes of this structure */
377d5ac70f0Sopenharmony_ci	__le32 control_elems;	/* number of control elements */
378d5ac70f0Sopenharmony_ci	__le32 widget_elems;	/* number of widget elements */
379d5ac70f0Sopenharmony_ci	__le32 graph_elems;	/* number of graph elements */
380d5ac70f0Sopenharmony_ci	__le32 pcm_elems;	/* number of PCM elements */
381d5ac70f0Sopenharmony_ci	__le32 dai_link_elems;	/* number of DAI link elements */
382d5ac70f0Sopenharmony_ci	__le32 dai_elems;	/* number of physical DAI elements */
383d5ac70f0Sopenharmony_ci	__le32 reserved[20];	/* reserved for new ABI element types */
384d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_private priv;
385d5ac70f0Sopenharmony_ci} __attribute__((packed));
386d5ac70f0Sopenharmony_ci
387d5ac70f0Sopenharmony_ci/*
388d5ac70f0Sopenharmony_ci * Mixer kcontrol.
389d5ac70f0Sopenharmony_ci *
390d5ac70f0Sopenharmony_ci * File block representation for mixer kcontrol :-
391d5ac70f0Sopenharmony_ci * +-----------------------------------+----+
392d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_hdr           |  1 |
393d5ac70f0Sopenharmony_ci * +-----------------------------------+----+
394d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_mixer_control |  N |
395d5ac70f0Sopenharmony_ci * +-----------------------------------+----+
396d5ac70f0Sopenharmony_ci */
397d5ac70f0Sopenharmony_cistruct snd_soc_tplg_mixer_control {
398d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_ctl_hdr hdr;
399d5ac70f0Sopenharmony_ci	__le32 size;	/* in bytes of this structure */
400d5ac70f0Sopenharmony_ci	__le32 min;
401d5ac70f0Sopenharmony_ci	__le32 max;
402d5ac70f0Sopenharmony_ci	__le32 platform_max;
403d5ac70f0Sopenharmony_ci	__le32 invert;
404d5ac70f0Sopenharmony_ci	__le32 num_channels;
405d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN];
406d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_private priv;
407d5ac70f0Sopenharmony_ci} __attribute__((packed));
408d5ac70f0Sopenharmony_ci
409d5ac70f0Sopenharmony_ci/*
410d5ac70f0Sopenharmony_ci * Enumerated kcontrol
411d5ac70f0Sopenharmony_ci *
412d5ac70f0Sopenharmony_ci * File block representation for enum kcontrol :-
413d5ac70f0Sopenharmony_ci * +-----------------------------------+----+
414d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_hdr           |  1 |
415d5ac70f0Sopenharmony_ci * +-----------------------------------+----+
416d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_enum_control  |  N |
417d5ac70f0Sopenharmony_ci * +-----------------------------------+----+
418d5ac70f0Sopenharmony_ci */
419d5ac70f0Sopenharmony_cistruct snd_soc_tplg_enum_control {
420d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_ctl_hdr hdr;
421d5ac70f0Sopenharmony_ci	__le32 size;	/* in bytes of this structure */
422d5ac70f0Sopenharmony_ci	__le32 num_channels;
423d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN];
424d5ac70f0Sopenharmony_ci	__le32 items;
425d5ac70f0Sopenharmony_ci	__le32 mask;
426d5ac70f0Sopenharmony_ci	__le32 count;
427d5ac70f0Sopenharmony_ci	char texts[SND_SOC_TPLG_NUM_TEXTS][SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
428d5ac70f0Sopenharmony_ci	__le32 values[SND_SOC_TPLG_NUM_TEXTS * SNDRV_CTL_ELEM_ID_NAME_MAXLEN / 4];
429d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_private priv;
430d5ac70f0Sopenharmony_ci} __attribute__((packed));
431d5ac70f0Sopenharmony_ci
432d5ac70f0Sopenharmony_ci/*
433d5ac70f0Sopenharmony_ci * Bytes kcontrol
434d5ac70f0Sopenharmony_ci *
435d5ac70f0Sopenharmony_ci * File block representation for bytes kcontrol :-
436d5ac70f0Sopenharmony_ci * +-----------------------------------+----+
437d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_hdr           |  1 |
438d5ac70f0Sopenharmony_ci * +-----------------------------------+----+
439d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_bytes_control |  N |
440d5ac70f0Sopenharmony_ci * +-----------------------------------+----+
441d5ac70f0Sopenharmony_ci */
442d5ac70f0Sopenharmony_cistruct snd_soc_tplg_bytes_control {
443d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_ctl_hdr hdr;
444d5ac70f0Sopenharmony_ci	__le32 size;	/* in bytes of this structure */
445d5ac70f0Sopenharmony_ci	__le32 max;
446d5ac70f0Sopenharmony_ci	__le32 mask;
447d5ac70f0Sopenharmony_ci	__le32 base;
448d5ac70f0Sopenharmony_ci	__le32 num_regs;
449d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_io_ops ext_ops;
450d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_private priv;
451d5ac70f0Sopenharmony_ci} __attribute__((packed));
452d5ac70f0Sopenharmony_ci
453d5ac70f0Sopenharmony_ci/*
454d5ac70f0Sopenharmony_ci * DAPM Graph Element
455d5ac70f0Sopenharmony_ci *
456d5ac70f0Sopenharmony_ci * File block representation for DAPM graph elements :-
457d5ac70f0Sopenharmony_ci * +-------------------------------------+----+
458d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_hdr             |  1 |
459d5ac70f0Sopenharmony_ci * +-------------------------------------+----+
460d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_dapm_graph_elem |  N |
461d5ac70f0Sopenharmony_ci * +-------------------------------------+----+
462d5ac70f0Sopenharmony_ci */
463d5ac70f0Sopenharmony_cistruct snd_soc_tplg_dapm_graph_elem {
464d5ac70f0Sopenharmony_ci	char sink[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
465d5ac70f0Sopenharmony_ci	char control[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
466d5ac70f0Sopenharmony_ci	char source[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
467d5ac70f0Sopenharmony_ci} __attribute__((packed));
468d5ac70f0Sopenharmony_ci
469d5ac70f0Sopenharmony_ci/*
470d5ac70f0Sopenharmony_ci * DAPM Widget.
471d5ac70f0Sopenharmony_ci *
472d5ac70f0Sopenharmony_ci * File block representation for DAPM widget :-
473d5ac70f0Sopenharmony_ci * +-------------------------------------+-----+
474d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_hdr             |  1  |
475d5ac70f0Sopenharmony_ci * +-------------------------------------+-----+
476d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_dapm_widget     |  N  |
477d5ac70f0Sopenharmony_ci * +-------------------------------------+-----+
478d5ac70f0Sopenharmony_ci * |   struct snd_soc_tplg_enum_control  | 0|1 |
479d5ac70f0Sopenharmony_ci * |   struct snd_soc_tplg_mixer_control | 0|N |
480d5ac70f0Sopenharmony_ci * +-------------------------------------+-----+
481d5ac70f0Sopenharmony_ci *
482d5ac70f0Sopenharmony_ci * Optional enum or mixer control can be appended to the end of each widget
483d5ac70f0Sopenharmony_ci * in the block.
484d5ac70f0Sopenharmony_ci */
485d5ac70f0Sopenharmony_cistruct snd_soc_tplg_dapm_widget {
486d5ac70f0Sopenharmony_ci	__le32 size;		/* in bytes of this structure */
487d5ac70f0Sopenharmony_ci	__le32 id;		/* SND_SOC_DAPM_CTL */
488d5ac70f0Sopenharmony_ci	char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
489d5ac70f0Sopenharmony_ci	char sname[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
490d5ac70f0Sopenharmony_ci
491d5ac70f0Sopenharmony_ci	__le32 reg;		/* negative reg = no direct dapm */
492d5ac70f0Sopenharmony_ci	__le32 shift;		/* bits to shift */
493d5ac70f0Sopenharmony_ci	__le32 mask;		/* non-shifted mask */
494d5ac70f0Sopenharmony_ci	__le32 subseq;		/* sort within widget type */
495d5ac70f0Sopenharmony_ci	__le32 invert;		/* invert the power bit */
496d5ac70f0Sopenharmony_ci	__le32 ignore_suspend;	/* kept enabled over suspend */
497d5ac70f0Sopenharmony_ci	__le16 event_flags;
498d5ac70f0Sopenharmony_ci	__le16 event_type;
499d5ac70f0Sopenharmony_ci	__le32 num_kcontrols;
500d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_private priv;
501d5ac70f0Sopenharmony_ci	/*
502d5ac70f0Sopenharmony_ci	 * kcontrols that relate to this widget
503d5ac70f0Sopenharmony_ci	 * follow here after widget private data
504d5ac70f0Sopenharmony_ci	 */
505d5ac70f0Sopenharmony_ci} __attribute__((packed));
506d5ac70f0Sopenharmony_ci
507d5ac70f0Sopenharmony_ci
508d5ac70f0Sopenharmony_ci/*
509d5ac70f0Sopenharmony_ci * Describes SW/FW specific features of PCM (FE DAI & DAI link).
510d5ac70f0Sopenharmony_ci *
511d5ac70f0Sopenharmony_ci * File block representation for PCM :-
512d5ac70f0Sopenharmony_ci * +-----------------------------------+-----+
513d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_hdr           |  1  |
514d5ac70f0Sopenharmony_ci * +-----------------------------------+-----+
515d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_pcm           |  N  |
516d5ac70f0Sopenharmony_ci * +-----------------------------------+-----+
517d5ac70f0Sopenharmony_ci */
518d5ac70f0Sopenharmony_cistruct snd_soc_tplg_pcm {
519d5ac70f0Sopenharmony_ci	__le32 size;		/* in bytes of this structure */
520d5ac70f0Sopenharmony_ci	char pcm_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
521d5ac70f0Sopenharmony_ci	char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
522d5ac70f0Sopenharmony_ci	__le32 pcm_id;		/* unique ID - used to match with DAI link */
523d5ac70f0Sopenharmony_ci	__le32 dai_id;		/* unique ID - used to match */
524d5ac70f0Sopenharmony_ci	__le32 playback;	/* supports playback mode */
525d5ac70f0Sopenharmony_ci	__le32 capture;		/* supports capture mode */
526d5ac70f0Sopenharmony_ci	__le32 compress;	/* 1 = compressed; 0 = PCM */
527d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* for DAI link */
528d5ac70f0Sopenharmony_ci	__le32 num_streams;	/* number of streams */
529d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_stream_caps caps[2]; /* playback and capture for DAI */
530d5ac70f0Sopenharmony_ci	__le32 flag_mask;       /* bitmask of flags to configure */
531d5ac70f0Sopenharmony_ci	__le32 flags;           /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */
532d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_private priv;
533d5ac70f0Sopenharmony_ci} __attribute__((packed));
534d5ac70f0Sopenharmony_ci
535d5ac70f0Sopenharmony_ci
536d5ac70f0Sopenharmony_ci/*
537d5ac70f0Sopenharmony_ci * Describes the physical link runtime supported configs or params
538d5ac70f0Sopenharmony_ci *
539d5ac70f0Sopenharmony_ci * File block representation for physical link config :-
540d5ac70f0Sopenharmony_ci * +-----------------------------------+-----+
541d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_hdr           |  1  |
542d5ac70f0Sopenharmony_ci * +-----------------------------------+-----+
543d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_link_config   |  N  |
544d5ac70f0Sopenharmony_ci * +-----------------------------------+-----+
545d5ac70f0Sopenharmony_ci */
546d5ac70f0Sopenharmony_cistruct snd_soc_tplg_link_config {
547d5ac70f0Sopenharmony_ci	__le32 size;            /* in bytes of this structure */
548d5ac70f0Sopenharmony_ci	__le32 id;              /* unique ID - used to match */
549d5ac70f0Sopenharmony_ci	char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* name - used to match */
550d5ac70f0Sopenharmony_ci	char stream_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* stream name - used to match */
551d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* supported configs playback and captrure */
552d5ac70f0Sopenharmony_ci	__le32 num_streams;     /* number of streams */
553d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_hw_config hw_config[SND_SOC_TPLG_HW_CONFIG_MAX]; /* hw configs */
554d5ac70f0Sopenharmony_ci	__le32 num_hw_configs;         /* number of hw configs */
555d5ac70f0Sopenharmony_ci	__le32 default_hw_config_id;   /* default hw config ID for init */
556d5ac70f0Sopenharmony_ci	__le32 flag_mask;       /* bitmask of flags to configure */
557d5ac70f0Sopenharmony_ci	__le32 flags;           /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */
558d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_private priv;
559d5ac70f0Sopenharmony_ci} __attribute__((packed));
560d5ac70f0Sopenharmony_ci
561d5ac70f0Sopenharmony_ci/*
562d5ac70f0Sopenharmony_ci * Describes SW/FW specific features of physical DAI.
563d5ac70f0Sopenharmony_ci * It can be used to configure backend DAIs for DPCM.
564d5ac70f0Sopenharmony_ci *
565d5ac70f0Sopenharmony_ci * File block representation for physical DAI :-
566d5ac70f0Sopenharmony_ci * +-----------------------------------+-----+
567d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_hdr           |  1  |
568d5ac70f0Sopenharmony_ci * +-----------------------------------+-----+
569d5ac70f0Sopenharmony_ci * | struct snd_soc_tplg_dai           |  N  |
570d5ac70f0Sopenharmony_ci * +-----------------------------------+-----+
571d5ac70f0Sopenharmony_ci */
572d5ac70f0Sopenharmony_cistruct snd_soc_tplg_dai {
573d5ac70f0Sopenharmony_ci	__le32 size;            /* in bytes of this structure */
574d5ac70f0Sopenharmony_ci	char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* name - used to match */
575d5ac70f0Sopenharmony_ci	__le32 dai_id;          /* unique ID - used to match */
576d5ac70f0Sopenharmony_ci	__le32 playback;        /* supports playback mode */
577d5ac70f0Sopenharmony_ci	__le32 capture;         /* supports capture mode */
578d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_stream_caps caps[2]; /* playback and capture for DAI */
579d5ac70f0Sopenharmony_ci	__le32 flag_mask;       /* bitmask of flags to configure */
580d5ac70f0Sopenharmony_ci	__le32 flags;           /* SND_SOC_TPLG_DAI_FLGBIT_* */
581d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_private priv;
582d5ac70f0Sopenharmony_ci} __attribute__((packed));
583d5ac70f0Sopenharmony_ci
584d5ac70f0Sopenharmony_ci/*
585d5ac70f0Sopenharmony_ci * Old version of ABI structs, supported for backward compatibility.
586d5ac70f0Sopenharmony_ci */
587d5ac70f0Sopenharmony_ci
588d5ac70f0Sopenharmony_ci/* Manifest v4 */
589d5ac70f0Sopenharmony_cistruct snd_soc_tplg_manifest_v4 {
590d5ac70f0Sopenharmony_ci	__le32 size;		/* in bytes of this structure */
591d5ac70f0Sopenharmony_ci	__le32 control_elems;	/* number of control elements */
592d5ac70f0Sopenharmony_ci	__le32 widget_elems;	/* number of widget elements */
593d5ac70f0Sopenharmony_ci	__le32 graph_elems;	/* number of graph elements */
594d5ac70f0Sopenharmony_ci	__le32 pcm_elems;	/* number of PCM elements */
595d5ac70f0Sopenharmony_ci	__le32 dai_link_elems;	/* number of DAI link elements */
596d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_private priv;
597d5ac70f0Sopenharmony_ci} __attribute__((packed));
598d5ac70f0Sopenharmony_ci
599d5ac70f0Sopenharmony_ci/* Stream Capabilities v4 */
600d5ac70f0Sopenharmony_cistruct snd_soc_tplg_stream_caps_v4 {
601d5ac70f0Sopenharmony_ci	__le32 size;		/* in bytes of this structure */
602d5ac70f0Sopenharmony_ci	char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
603d5ac70f0Sopenharmony_ci	__le64 formats;	/* supported formats SNDRV_PCM_FMTBIT_* */
604d5ac70f0Sopenharmony_ci	__le32 rates;		/* supported rates SNDRV_PCM_RATE_* */
605d5ac70f0Sopenharmony_ci	__le32 rate_min;	/* min rate */
606d5ac70f0Sopenharmony_ci	__le32 rate_max;	/* max rate */
607d5ac70f0Sopenharmony_ci	__le32 channels_min;	/* min channels */
608d5ac70f0Sopenharmony_ci	__le32 channels_max;	/* max channels */
609d5ac70f0Sopenharmony_ci	__le32 periods_min;	/* min number of periods */
610d5ac70f0Sopenharmony_ci	__le32 periods_max;	/* max number of periods */
611d5ac70f0Sopenharmony_ci	__le32 period_size_min;	/* min period size bytes */
612d5ac70f0Sopenharmony_ci	__le32 period_size_max;	/* max period size bytes */
613d5ac70f0Sopenharmony_ci	__le32 buffer_size_min;	/* min buffer size bytes */
614d5ac70f0Sopenharmony_ci	__le32 buffer_size_max;	/* max buffer size bytes */
615d5ac70f0Sopenharmony_ci} __attribute__((packed));
616d5ac70f0Sopenharmony_ci
617d5ac70f0Sopenharmony_ci/* PCM v4 */
618d5ac70f0Sopenharmony_cistruct snd_soc_tplg_pcm_v4 {
619d5ac70f0Sopenharmony_ci	__le32 size;		/* in bytes of this structure */
620d5ac70f0Sopenharmony_ci	char pcm_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
621d5ac70f0Sopenharmony_ci	char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
622d5ac70f0Sopenharmony_ci	__le32 pcm_id;		/* unique ID - used to match with DAI link */
623d5ac70f0Sopenharmony_ci	__le32 dai_id;		/* unique ID - used to match */
624d5ac70f0Sopenharmony_ci	__le32 playback;	/* supports playback mode */
625d5ac70f0Sopenharmony_ci	__le32 capture;		/* supports capture mode */
626d5ac70f0Sopenharmony_ci	__le32 compress;	/* 1 = compressed; 0 = PCM */
627d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* for DAI link */
628d5ac70f0Sopenharmony_ci	__le32 num_streams;	/* number of streams */
629d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_stream_caps_v4 caps[2]; /* playback and capture for DAI */
630d5ac70f0Sopenharmony_ci} __attribute__((packed));
631d5ac70f0Sopenharmony_ci
632d5ac70f0Sopenharmony_ci/* Physical link config v4 */
633d5ac70f0Sopenharmony_cistruct snd_soc_tplg_link_config_v4 {
634d5ac70f0Sopenharmony_ci	__le32 size;            /* in bytes of this structure */
635d5ac70f0Sopenharmony_ci	__le32 id;              /* unique ID - used to match */
636d5ac70f0Sopenharmony_ci	struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* supported configs playback and captrure */
637d5ac70f0Sopenharmony_ci	__le32 num_streams;     /* number of streams */
638d5ac70f0Sopenharmony_ci} __attribute__((packed));
639d5ac70f0Sopenharmony_ci
640d5ac70f0Sopenharmony_ci#endif
641