580 lines · c
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */2/*3 * uapi/sound/asoc.h -- ALSA SoC Firmware Controls and DAPM4 *5 * Copyright (C) 2012 Texas Instruments Inc.6 * Copyright (C) 2015 Intel Corporation.7 *8 * Simple file API to load FW that includes mixers, coefficients, DAPM graphs,9 * algorithms, equalisers, DAIs, widgets etc.10*/11 12#ifndef __LINUX_UAPI_SND_ASOC_H13#define __LINUX_UAPI_SND_ASOC_H14 15#include <linux/types.h>16#include <sound/asound.h>17 18/*19 * Maximum number of channels topology kcontrol can represent.20 */21#define SND_SOC_TPLG_MAX_CHAN 822 23/*24 * Maximum number of PCM formats capability25 */26#define SND_SOC_TPLG_MAX_FORMATS 1627 28/*29 * Maximum number of PCM stream configs30 */31#define SND_SOC_TPLG_STREAM_CONFIG_MAX 832 33/*34 * Maximum number of physical link's hardware configs35 */36#define SND_SOC_TPLG_HW_CONFIG_MAX 837 38/* individual kcontrol info types - can be mixed with other types */39#define SND_SOC_TPLG_CTL_VOLSW 140#define SND_SOC_TPLG_CTL_VOLSW_SX 241#define SND_SOC_TPLG_CTL_VOLSW_XR_SX 342#define SND_SOC_TPLG_CTL_ENUM 443#define SND_SOC_TPLG_CTL_BYTES 544#define SND_SOC_TPLG_CTL_ENUM_VALUE 645#define SND_SOC_TPLG_CTL_RANGE 746#define SND_SOC_TPLG_CTL_STROBE 847 48 49/* individual widget kcontrol info types - can be mixed with other types */50#define SND_SOC_TPLG_DAPM_CTL_VOLSW 6451#define SND_SOC_TPLG_DAPM_CTL_ENUM_DOUBLE 6552#define SND_SOC_TPLG_DAPM_CTL_ENUM_VIRT 6653#define SND_SOC_TPLG_DAPM_CTL_ENUM_VALUE 6754#define SND_SOC_TPLG_DAPM_CTL_PIN 6855 56/* DAPM widget types - add new items to the end */57#define SND_SOC_TPLG_DAPM_INPUT 058#define SND_SOC_TPLG_DAPM_OUTPUT 159#define SND_SOC_TPLG_DAPM_MUX 260#define SND_SOC_TPLG_DAPM_MIXER 361#define SND_SOC_TPLG_DAPM_PGA 462#define SND_SOC_TPLG_DAPM_OUT_DRV 563#define SND_SOC_TPLG_DAPM_ADC 664#define SND_SOC_TPLG_DAPM_DAC 765#define SND_SOC_TPLG_DAPM_SWITCH 866#define SND_SOC_TPLG_DAPM_PRE 967#define SND_SOC_TPLG_DAPM_POST 1068#define SND_SOC_TPLG_DAPM_AIF_IN 1169#define SND_SOC_TPLG_DAPM_AIF_OUT 1270#define SND_SOC_TPLG_DAPM_DAI_IN 1371#define SND_SOC_TPLG_DAPM_DAI_OUT 1472#define SND_SOC_TPLG_DAPM_DAI_LINK 1573#define SND_SOC_TPLG_DAPM_BUFFER 1674#define SND_SOC_TPLG_DAPM_SCHEDULER 1775#define SND_SOC_TPLG_DAPM_EFFECT 1876#define SND_SOC_TPLG_DAPM_SIGGEN 1977#define SND_SOC_TPLG_DAPM_SRC 2078#define SND_SOC_TPLG_DAPM_ASRC 2179#define SND_SOC_TPLG_DAPM_ENCODER 2280#define SND_SOC_TPLG_DAPM_DECODER 2381#define SND_SOC_TPLG_DAPM_LAST SND_SOC_TPLG_DAPM_DECODER82 83/* Header magic number and string sizes */84#define SND_SOC_TPLG_MAGIC 0x41536F43 /* ASoC */85 86/* string sizes */87#define SND_SOC_TPLG_NUM_TEXTS 1688 89/* ABI version */90#define SND_SOC_TPLG_ABI_VERSION 0x5 /* current version */91#define SND_SOC_TPLG_ABI_VERSION_MIN 0x5 /* oldest version supported */92 93/* Max size of TLV data */94#define SND_SOC_TPLG_TLV_SIZE 3295 96/*97 * File and Block header data types.98 * Add new generic and vendor types to end of list.99 * Generic types are handled by the core whilst vendors types are passed100 * to the component drivers for handling.101 */102#define SND_SOC_TPLG_TYPE_MIXER 1103#define SND_SOC_TPLG_TYPE_BYTES 2104#define SND_SOC_TPLG_TYPE_ENUM 3105#define SND_SOC_TPLG_TYPE_DAPM_GRAPH 4106#define SND_SOC_TPLG_TYPE_DAPM_WIDGET 5107#define SND_SOC_TPLG_TYPE_DAI_LINK 6108#define SND_SOC_TPLG_TYPE_PCM 7109#define SND_SOC_TPLG_TYPE_MANIFEST 8110#define SND_SOC_TPLG_TYPE_CODEC_LINK 9111#define SND_SOC_TPLG_TYPE_BACKEND_LINK 10112#define SND_SOC_TPLG_TYPE_PDATA 11113#define SND_SOC_TPLG_TYPE_DAI 12114#define SND_SOC_TPLG_TYPE_MAX SND_SOC_TPLG_TYPE_DAI115 116/* vendor block IDs - please add new vendor types to end */117#define SND_SOC_TPLG_TYPE_VENDOR_FW 1000118#define SND_SOC_TPLG_TYPE_VENDOR_CONFIG 1001119#define SND_SOC_TPLG_TYPE_VENDOR_COEFF 1002120#define SND_SOC_TPLG_TYPEVENDOR_CODEC 1003121 122#define SND_SOC_TPLG_STREAM_PLAYBACK 0123#define SND_SOC_TPLG_STREAM_CAPTURE 1124 125/* vendor tuple types */126#define SND_SOC_TPLG_TUPLE_TYPE_UUID 0127#define SND_SOC_TPLG_TUPLE_TYPE_STRING 1128#define SND_SOC_TPLG_TUPLE_TYPE_BOOL 2129#define SND_SOC_TPLG_TUPLE_TYPE_BYTE 3130#define SND_SOC_TPLG_TUPLE_TYPE_WORD 4131#define SND_SOC_TPLG_TUPLE_TYPE_SHORT 5132 133/* DAI flags */134#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_RATES (1 << 0)135#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_CHANNELS (1 << 1)136#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)137 138/* DAI clock gating */139#define SND_SOC_TPLG_DAI_CLK_GATE_UNDEFINED 0140#define SND_SOC_TPLG_DAI_CLK_GATE_GATED 1141#define SND_SOC_TPLG_DAI_CLK_GATE_CONT 2142 143/* DAI mclk_direction */144#define SND_SOC_TPLG_MCLK_CO 0 /* for codec, mclk is output */145#define SND_SOC_TPLG_MCLK_CI 1 /* for codec, mclk is input */146 147/* DAI physical PCM data formats.148 * Add new formats to the end of the list.149 */150#define SND_SOC_DAI_FORMAT_I2S 1 /* I2S mode */151#define SND_SOC_DAI_FORMAT_RIGHT_J 2 /* Right Justified mode */152#define SND_SOC_DAI_FORMAT_LEFT_J 3 /* Left Justified mode */153#define SND_SOC_DAI_FORMAT_DSP_A 4 /* L data MSB after FRM LRC */154#define SND_SOC_DAI_FORMAT_DSP_B 5 /* L data MSB during FRM LRC */155#define SND_SOC_DAI_FORMAT_AC97 6 /* AC97 */156#define SND_SOC_DAI_FORMAT_PDM 7 /* Pulse density modulation */157 158/* left and right justified also known as MSB and LSB respectively */159#define SND_SOC_DAI_FORMAT_MSB SND_SOC_DAI_FORMAT_LEFT_J160#define SND_SOC_DAI_FORMAT_LSB SND_SOC_DAI_FORMAT_RIGHT_J161 162/* DAI link flags */163#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_RATES (1 << 0)164#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_CHANNELS (1 << 1)165#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)166#define SND_SOC_TPLG_LNK_FLGBIT_VOICE_WAKEUP (1 << 3)167 168/* DAI topology BCLK parameter169 * For the backwards capability, by default codec is bclk provider170 */171#define SND_SOC_TPLG_BCLK_CP 0 /* codec is bclk provider */172#define SND_SOC_TPLG_BCLK_CC 1 /* codec is bclk consumer */173/* keep previous definitions for compatibility */174#define SND_SOC_TPLG_BCLK_CM SND_SOC_TPLG_BCLK_CP175#define SND_SOC_TPLG_BCLK_CS SND_SOC_TPLG_BCLK_CC176 177/* DAI topology FSYNC parameter178 * For the backwards capability, by default codec is fsync provider179 */180#define SND_SOC_TPLG_FSYNC_CP 0 /* codec is fsync provider */181#define SND_SOC_TPLG_FSYNC_CC 1 /* codec is fsync consumer */182/* keep previous definitions for compatibility */183#define SND_SOC_TPLG_FSYNC_CM SND_SOC_TPLG_FSYNC_CP184#define SND_SOC_TPLG_FSYNC_CS SND_SOC_TPLG_FSYNC_CC185 186/*187 * Block Header.188 * This header precedes all object and object arrays below.189 */190struct snd_soc_tplg_hdr {191 __le32 magic; /* magic number */192 __le32 abi; /* ABI version */193 __le32 version; /* optional vendor specific version details */194 __le32 type; /* SND_SOC_TPLG_TYPE_ */195 __le32 size; /* size of this structure */196 __le32 vendor_type; /* optional vendor specific type info */197 __le32 payload_size; /* data bytes, excluding this header */198 __le32 index; /* identifier for block */199 __le32 count; /* number of elements in block */200} __attribute__((packed));201 202/* vendor tuple for uuid */203struct snd_soc_tplg_vendor_uuid_elem {204 __le32 token;205 char uuid[16];206} __attribute__((packed));207 208/* vendor tuple for a bool/byte/short/word value */209struct snd_soc_tplg_vendor_value_elem {210 __le32 token;211 __le32 value;212} __attribute__((packed));213 214/* vendor tuple for string */215struct snd_soc_tplg_vendor_string_elem {216 __le32 token;217 char string[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];218} __attribute__((packed));219 220struct snd_soc_tplg_vendor_array {221 __le32 size; /* size in bytes of the array, including all elements */222 __le32 type; /* SND_SOC_TPLG_TUPLE_TYPE_ */223 __le32 num_elems; /* number of elements in array */224 union {225 __DECLARE_FLEX_ARRAY(struct snd_soc_tplg_vendor_uuid_elem, uuid);226 __DECLARE_FLEX_ARRAY(struct snd_soc_tplg_vendor_value_elem, value);227 __DECLARE_FLEX_ARRAY(struct snd_soc_tplg_vendor_string_elem, string);228 };229} __attribute__((packed));230 231/*232 * Private data.233 * All topology objects may have private data that can be used by the driver or234 * firmware. Core will ignore this data.235 */236struct snd_soc_tplg_private {237 __le32 size; /* in bytes of private data */238 union {239 __DECLARE_FLEX_ARRAY(char, data);240 __DECLARE_FLEX_ARRAY(struct snd_soc_tplg_vendor_array, array);241 };242} __attribute__((packed));243 244/*245 * Kcontrol TLV data.246 */247struct snd_soc_tplg_tlv_dbscale {248 __le32 min;249 __le32 step;250 __le32 mute;251} __attribute__((packed));252 253struct snd_soc_tplg_ctl_tlv {254 __le32 size; /* in bytes of this structure */255 __le32 type; /* SNDRV_CTL_TLVT_*, type of TLV */256 union {257 __le32 data[SND_SOC_TPLG_TLV_SIZE];258 struct snd_soc_tplg_tlv_dbscale scale;259 };260} __attribute__((packed));261 262/*263 * Kcontrol channel data264 */265struct snd_soc_tplg_channel {266 __le32 size; /* in bytes of this structure */267 __le32 reg;268 __le32 shift;269 __le32 id; /* ID maps to Left, Right, LFE etc */270} __attribute__((packed));271 272/*273 * Genericl Operations IDs, for binding Kcontrol or Bytes ext ops274 * Kcontrol ops need get/put/info.275 * Bytes ext ops need get/put.276 */277struct snd_soc_tplg_io_ops {278 __le32 get;279 __le32 put;280 __le32 info;281} __attribute__((packed));282 283/*284 * kcontrol header285 */286struct snd_soc_tplg_ctl_hdr {287 __le32 size; /* in bytes of this structure */288 __le32 type;289 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];290 __le32 access;291 struct snd_soc_tplg_io_ops ops;292 struct snd_soc_tplg_ctl_tlv tlv;293} __attribute__((packed));294 295/*296 * Stream Capabilities297 */298struct snd_soc_tplg_stream_caps {299 __le32 size; /* in bytes of this structure */300 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];301 __le64 formats; /* supported formats SNDRV_PCM_FMTBIT_* */302 __le32 rates; /* supported rates SNDRV_PCM_RATE_* */303 __le32 rate_min; /* min rate */304 __le32 rate_max; /* max rate */305 __le32 channels_min; /* min channels */306 __le32 channels_max; /* max channels */307 __le32 periods_min; /* min number of periods */308 __le32 periods_max; /* max number of periods */309 __le32 period_size_min; /* min period size bytes */310 __le32 period_size_max; /* max period size bytes */311 __le32 buffer_size_min; /* min buffer size bytes */312 __le32 buffer_size_max; /* max buffer size bytes */313 __le32 sig_bits; /* number of bits of content */314} __attribute__((packed));315 316/*317 * FE or BE Stream configuration supported by SW/FW318 */319struct snd_soc_tplg_stream {320 __le32 size; /* in bytes of this structure */321 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* Name of the stream */322 __le64 format; /* SNDRV_PCM_FMTBIT_* */323 __le32 rate; /* SNDRV_PCM_RATE_* */324 __le32 period_bytes; /* size of period in bytes */325 __le32 buffer_bytes; /* size of buffer in bytes */326 __le32 channels; /* channels */327} __attribute__((packed));328 329 330/*331 * Describes a physical link's runtime supported hardware config,332 * i.e. hardware audio formats.333 */334struct snd_soc_tplg_hw_config {335 __le32 size; /* in bytes of this structure */336 __le32 id; /* unique ID - - used to match */337 __le32 fmt; /* SND_SOC_DAI_FORMAT_ format value */338 __u8 clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */339 __u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */340 __u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */341 __u8 bclk_provider; /* SND_SOC_TPLG_BCLK_ value */342 __u8 fsync_provider; /* SND_SOC_TPLG_FSYNC_ value */343 __u8 mclk_direction; /* SND_SOC_TPLG_MCLK_ value */344 __le16 reserved; /* for 32bit alignment */345 __le32 mclk_rate; /* MCLK or SYSCLK freqency in Hz */346 __le32 bclk_rate; /* BCLK freqency in Hz */347 __le32 fsync_rate; /* frame clock in Hz */348 __le32 tdm_slots; /* number of TDM slots in use */349 __le32 tdm_slot_width; /* width in bits for each slot */350 __le32 tx_slots; /* bit mask for active Tx slots */351 __le32 rx_slots; /* bit mask for active Rx slots */352 __le32 tx_channels; /* number of Tx channels */353 __le32 tx_chanmap[SND_SOC_TPLG_MAX_CHAN]; /* array of slot number */354 __le32 rx_channels; /* number of Rx channels */355 __le32 rx_chanmap[SND_SOC_TPLG_MAX_CHAN]; /* array of slot number */356} __attribute__((packed));357 358/*359 * Manifest. List totals for each payload type. Not used in parsing, but will360 * be passed to the component driver before any other objects in order for any361 * global component resource allocations.362 *363 * File block representation for manifest :-364 * +-----------------------------------+----+365 * | struct snd_soc_tplg_hdr | 1 |366 * +-----------------------------------+----+367 * | struct snd_soc_tplg_manifest | 1 |368 * +-----------------------------------+----+369 */370struct snd_soc_tplg_manifest {371 __le32 size; /* in bytes of this structure */372 __le32 control_elems; /* number of control elements */373 __le32 widget_elems; /* number of widget elements */374 __le32 graph_elems; /* number of graph elements */375 __le32 pcm_elems; /* number of PCM elements */376 __le32 dai_link_elems; /* number of DAI link elements */377 __le32 dai_elems; /* number of physical DAI elements */378 __le32 reserved[20]; /* reserved for new ABI element types */379 struct snd_soc_tplg_private priv;380} __attribute__((packed));381 382/*383 * Mixer kcontrol.384 *385 * File block representation for mixer kcontrol :-386 * +-----------------------------------+----+387 * | struct snd_soc_tplg_hdr | 1 |388 * +-----------------------------------+----+389 * | struct snd_soc_tplg_mixer_control | N |390 * +-----------------------------------+----+391 */392struct snd_soc_tplg_mixer_control {393 struct snd_soc_tplg_ctl_hdr hdr;394 __le32 size; /* in bytes of this structure */395 __le32 min;396 __le32 max;397 __le32 platform_max;398 __le32 invert;399 __le32 num_channels;400 struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN];401 struct snd_soc_tplg_private priv;402} __attribute__((packed));403 404/*405 * Enumerated kcontrol406 *407 * File block representation for enum kcontrol :-408 * +-----------------------------------+----+409 * | struct snd_soc_tplg_hdr | 1 |410 * +-----------------------------------+----+411 * | struct snd_soc_tplg_enum_control | N |412 * +-----------------------------------+----+413 */414struct snd_soc_tplg_enum_control {415 struct snd_soc_tplg_ctl_hdr hdr;416 __le32 size; /* in bytes of this structure */417 __le32 num_channels;418 struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN];419 __le32 items;420 __le32 mask;421 __le32 count;422 char texts[SND_SOC_TPLG_NUM_TEXTS][SNDRV_CTL_ELEM_ID_NAME_MAXLEN];423 __le32 values[SND_SOC_TPLG_NUM_TEXTS * SNDRV_CTL_ELEM_ID_NAME_MAXLEN / 4];424 struct snd_soc_tplg_private priv;425} __attribute__((packed));426 427/*428 * Bytes kcontrol429 *430 * File block representation for bytes kcontrol :-431 * +-----------------------------------+----+432 * | struct snd_soc_tplg_hdr | 1 |433 * +-----------------------------------+----+434 * | struct snd_soc_tplg_bytes_control | N |435 * +-----------------------------------+----+436 */437struct snd_soc_tplg_bytes_control {438 struct snd_soc_tplg_ctl_hdr hdr;439 __le32 size; /* in bytes of this structure */440 __le32 max;441 __le32 mask;442 __le32 base;443 __le32 num_regs;444 struct snd_soc_tplg_io_ops ext_ops;445 struct snd_soc_tplg_private priv;446} __attribute__((packed));447 448/*449 * DAPM Graph Element450 *451 * File block representation for DAPM graph elements :-452 * +-------------------------------------+----+453 * | struct snd_soc_tplg_hdr | 1 |454 * +-------------------------------------+----+455 * | struct snd_soc_tplg_dapm_graph_elem | N |456 * +-------------------------------------+----+457 */458struct snd_soc_tplg_dapm_graph_elem {459 char sink[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];460 char control[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];461 char source[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];462} __attribute__((packed));463 464/*465 * DAPM Widget.466 *467 * File block representation for DAPM widget :-468 * +-------------------------------------+-----+469 * | struct snd_soc_tplg_hdr | 1 |470 * +-------------------------------------+-----+471 * | struct snd_soc_tplg_dapm_widget | N |472 * +-------------------------------------+-----+473 * | struct snd_soc_tplg_enum_control | 0|1 |474 * | struct snd_soc_tplg_mixer_control | 0|N |475 * +-------------------------------------+-----+476 *477 * Optional enum or mixer control can be appended to the end of each widget478 * in the block.479 */480struct snd_soc_tplg_dapm_widget {481 __le32 size; /* in bytes of this structure */482 __le32 id; /* SND_SOC_DAPM_CTL */483 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];484 char sname[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];485 486 __le32 reg; /* negative reg = no direct dapm */487 __le32 shift; /* bits to shift */488 __le32 mask; /* non-shifted mask */489 __le32 subseq; /* sort within widget type */490 __le32 invert; /* invert the power bit */491 __le32 ignore_suspend; /* kept enabled over suspend */492 __le16 event_flags;493 __le16 event_type;494 __le32 num_kcontrols;495 struct snd_soc_tplg_private priv;496 /*497 * kcontrols that relate to this widget498 * follow here after widget private data499 */500} __attribute__((packed));501 502 503/*504 * Describes SW/FW specific features of PCM (FE DAI & DAI link).505 *506 * File block representation for PCM :-507 * +-----------------------------------+-----+508 * | struct snd_soc_tplg_hdr | 1 |509 * +-----------------------------------+-----+510 * | struct snd_soc_tplg_pcm | N |511 * +-----------------------------------+-----+512 */513struct snd_soc_tplg_pcm {514 __le32 size; /* in bytes of this structure */515 char pcm_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];516 char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];517 __le32 pcm_id; /* unique ID - used to match with DAI link */518 __le32 dai_id; /* unique ID - used to match */519 __le32 playback; /* supports playback mode */520 __le32 capture; /* supports capture mode */521 __le32 compress; /* 1 = compressed; 0 = PCM */522 struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* for DAI link */523 __le32 num_streams; /* number of streams */524 struct snd_soc_tplg_stream_caps caps[2]; /* playback and capture for DAI */525 __le32 flag_mask; /* bitmask of flags to configure */526 __le32 flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */527 struct snd_soc_tplg_private priv;528} __attribute__((packed));529 530 531/*532 * Describes the physical link runtime supported configs or params533 *534 * File block representation for physical link config :-535 * +-----------------------------------+-----+536 * | struct snd_soc_tplg_hdr | 1 |537 * +-----------------------------------+-----+538 * | struct snd_soc_tplg_link_config | N |539 * +-----------------------------------+-----+540 */541struct snd_soc_tplg_link_config {542 __le32 size; /* in bytes of this structure */543 __le32 id; /* unique ID - used to match */544 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* name - used to match */545 char stream_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* stream name - used to match */546 struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* supported configs playback and captrure */547 __le32 num_streams; /* number of streams */548 struct snd_soc_tplg_hw_config hw_config[SND_SOC_TPLG_HW_CONFIG_MAX]; /* hw configs */549 __le32 num_hw_configs; /* number of hw configs */550 __le32 default_hw_config_id; /* default hw config ID for init */551 __le32 flag_mask; /* bitmask of flags to configure */552 __le32 flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */553 struct snd_soc_tplg_private priv;554} __attribute__((packed));555 556/*557 * Describes SW/FW specific features of physical DAI.558 * It can be used to configure backend DAIs for DPCM.559 *560 * File block representation for physical DAI :-561 * +-----------------------------------+-----+562 * | struct snd_soc_tplg_hdr | 1 |563 * +-----------------------------------+-----+564 * | struct snd_soc_tplg_dai | N |565 * +-----------------------------------+-----+566 */567struct snd_soc_tplg_dai {568 __le32 size; /* in bytes of this structure */569 char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* name - used to match */570 __le32 dai_id; /* unique ID - used to match */571 __le32 playback; /* supports playback mode */572 __le32 capture; /* supports capture mode */573 struct snd_soc_tplg_stream_caps caps[2]; /* playback and capture for DAI */574 __le32 flag_mask; /* bitmask of flags to configure */575 __le32 flags; /* SND_SOC_TPLG_DAI_FLGBIT_* */576 struct snd_soc_tplg_private priv;577} __attribute__((packed));578 579#endif580