/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */1/*2* uapi/sound/asoc.h -- ALSA SoC Firmware Controls and DAPM3*4* Copyright (C) 2012 Texas Instruments Inc.5* Copyright (C) 2015 Intel Corporation.6*7* Simple file API to load FW that includes mixers, coefficients, DAPM graphs,8* algorithms, equalisers, DAIs, widgets etc.9*/1011#ifndef __LINUX_UAPI_SND_ASOC_H12#define __LINUX_UAPI_SND_ASOC_H1314#include <linux/types.h>15#include <sound/asound.h>1617/*18* Maximum number of channels topology kcontrol can represent.19*/20#define SND_SOC_TPLG_MAX_CHAN 82122/*23* Maximum number of PCM formats capability24*/25#define SND_SOC_TPLG_MAX_FORMATS 162627/*28* Maximum number of PCM stream configs29*/30#define SND_SOC_TPLG_STREAM_CONFIG_MAX 83132/*33* Maximum number of physical link's hardware configs34*/35#define SND_SOC_TPLG_HW_CONFIG_MAX 83637/* individual kcontrol info types - can be mixed with other types */38#define SND_SOC_TPLG_CTL_VOLSW 139#define SND_SOC_TPLG_CTL_VOLSW_SX 240#define SND_SOC_TPLG_CTL_VOLSW_XR_SX 341#define SND_SOC_TPLG_CTL_ENUM 442#define SND_SOC_TPLG_CTL_BYTES 543#define SND_SOC_TPLG_CTL_ENUM_VALUE 644#define SND_SOC_TPLG_CTL_RANGE 745#define SND_SOC_TPLG_CTL_STROBE 8464748/* individual widget kcontrol info types - can be mixed with other types */49#define SND_SOC_TPLG_DAPM_CTL_VOLSW 6450#define SND_SOC_TPLG_DAPM_CTL_ENUM_DOUBLE 6551#define SND_SOC_TPLG_DAPM_CTL_ENUM_VIRT 6652#define SND_SOC_TPLG_DAPM_CTL_ENUM_VALUE 6753#define SND_SOC_TPLG_DAPM_CTL_PIN 685455/* DAPM widget types - add new items to the end */56#define SND_SOC_TPLG_DAPM_INPUT 057#define SND_SOC_TPLG_DAPM_OUTPUT 158#define SND_SOC_TPLG_DAPM_MUX 259#define SND_SOC_TPLG_DAPM_MIXER 360#define SND_SOC_TPLG_DAPM_PGA 461#define SND_SOC_TPLG_DAPM_OUT_DRV 562#define SND_SOC_TPLG_DAPM_ADC 663#define SND_SOC_TPLG_DAPM_DAC 764#define SND_SOC_TPLG_DAPM_SWITCH 865#define SND_SOC_TPLG_DAPM_PRE 966#define SND_SOC_TPLG_DAPM_POST 1067#define SND_SOC_TPLG_DAPM_AIF_IN 1168#define SND_SOC_TPLG_DAPM_AIF_OUT 1269#define SND_SOC_TPLG_DAPM_DAI_IN 1370#define SND_SOC_TPLG_DAPM_DAI_OUT 1471#define SND_SOC_TPLG_DAPM_DAI_LINK 1572#define SND_SOC_TPLG_DAPM_BUFFER 1673#define SND_SOC_TPLG_DAPM_SCHEDULER 1774#define SND_SOC_TPLG_DAPM_EFFECT 1875#define SND_SOC_TPLG_DAPM_SIGGEN 1976#define SND_SOC_TPLG_DAPM_SRC 2077#define SND_SOC_TPLG_DAPM_ASRC 2178#define SND_SOC_TPLG_DAPM_ENCODER 2279#define SND_SOC_TPLG_DAPM_DECODER 2380#define SND_SOC_TPLG_DAPM_LAST SND_SOC_TPLG_DAPM_DECODER8182/* Header magic number and string sizes */83#define SND_SOC_TPLG_MAGIC 0x41536F43 /* ASoC */8485/* string sizes */86#define SND_SOC_TPLG_NUM_TEXTS 168788/* ABI version */89#define SND_SOC_TPLG_ABI_VERSION 0x5 /* current version */90#define SND_SOC_TPLG_ABI_VERSION_MIN 0x5 /* oldest version supported */9192/* Max size of TLV data */93#define SND_SOC_TPLG_TLV_SIZE 329495/*96* File and Block header data types.97* Add new generic and vendor types to end of list.98* Generic types are handled by the core whilst vendors types are passed99* to the component drivers for handling.100*/101#define SND_SOC_TPLG_TYPE_MIXER 1102#define SND_SOC_TPLG_TYPE_BYTES 2103#define SND_SOC_TPLG_TYPE_ENUM 3104#define SND_SOC_TPLG_TYPE_DAPM_GRAPH 4105#define SND_SOC_TPLG_TYPE_DAPM_WIDGET 5106#define SND_SOC_TPLG_TYPE_DAI_LINK 6107#define SND_SOC_TPLG_TYPE_PCM 7108#define SND_SOC_TPLG_TYPE_MANIFEST 8109#define SND_SOC_TPLG_TYPE_CODEC_LINK 9110#define SND_SOC_TPLG_TYPE_BACKEND_LINK 10111#define SND_SOC_TPLG_TYPE_PDATA 11112#define SND_SOC_TPLG_TYPE_DAI 12113#define SND_SOC_TPLG_TYPE_MAX SND_SOC_TPLG_TYPE_DAI114115/* vendor block IDs - please add new vendor types to end */116#define SND_SOC_TPLG_TYPE_VENDOR_FW 1000117#define SND_SOC_TPLG_TYPE_VENDOR_CONFIG 1001118#define SND_SOC_TPLG_TYPE_VENDOR_COEFF 1002119#define SND_SOC_TPLG_TYPEVENDOR_CODEC 1003120121#define SND_SOC_TPLG_STREAM_PLAYBACK 0122#define SND_SOC_TPLG_STREAM_CAPTURE 1123124/* vendor tuple types */125#define SND_SOC_TPLG_TUPLE_TYPE_UUID 0126#define SND_SOC_TPLG_TUPLE_TYPE_STRING 1127#define SND_SOC_TPLG_TUPLE_TYPE_BOOL 2128#define SND_SOC_TPLG_TUPLE_TYPE_BYTE 3129#define SND_SOC_TPLG_TUPLE_TYPE_WORD 4130#define SND_SOC_TPLG_TUPLE_TYPE_SHORT 5131132/* DAI flags */133#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_RATES (1 << 0)134#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_CHANNELS (1 << 1)135#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)136137/* DAI clock gating */138#define SND_SOC_TPLG_DAI_CLK_GATE_UNDEFINED 0139#define SND_SOC_TPLG_DAI_CLK_GATE_GATED 1140#define SND_SOC_TPLG_DAI_CLK_GATE_CONT 2141142/* DAI mclk_direction */143#define SND_SOC_TPLG_MCLK_CO 0 /* for codec, mclk is output */144#define SND_SOC_TPLG_MCLK_CI 1 /* for codec, mclk is input */145146/* DAI physical PCM data formats.147* Add new formats to the end of the list.148*/149#define SND_SOC_DAI_FORMAT_I2S 1 /* I2S mode */150#define SND_SOC_DAI_FORMAT_RIGHT_J 2 /* Right Justified mode */151#define SND_SOC_DAI_FORMAT_LEFT_J 3 /* Left Justified mode */152#define SND_SOC_DAI_FORMAT_DSP_A 4 /* L data MSB after FRM LRC */153#define SND_SOC_DAI_FORMAT_DSP_B 5 /* L data MSB during FRM LRC */154#define SND_SOC_DAI_FORMAT_AC97 6 /* AC97 */155#define SND_SOC_DAI_FORMAT_PDM 7 /* Pulse density modulation */156157/* left and right justified also known as MSB and LSB respectively */158#define SND_SOC_DAI_FORMAT_MSB SND_SOC_DAI_FORMAT_LEFT_J159#define SND_SOC_DAI_FORMAT_LSB SND_SOC_DAI_FORMAT_RIGHT_J160161/* DAI link flags */162#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_RATES (1 << 0)163#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_CHANNELS (1 << 1)164#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)165#define SND_SOC_TPLG_LNK_FLGBIT_VOICE_WAKEUP (1 << 3)166167/* DAI topology BCLK parameter168* For the backwards capability, by default codec is bclk provider169*/170#define SND_SOC_TPLG_BCLK_CP 0 /* codec is bclk provider */171#define SND_SOC_TPLG_BCLK_CC 1 /* codec is bclk consumer */172/* keep previous definitions for compatibility */173#define SND_SOC_TPLG_BCLK_CM SND_SOC_TPLG_BCLK_CP174#define SND_SOC_TPLG_BCLK_CS SND_SOC_TPLG_BCLK_CC175176/* DAI topology FSYNC parameter177* For the backwards capability, by default codec is fsync provider178*/179#define SND_SOC_TPLG_FSYNC_CP 0 /* codec is fsync provider */180#define SND_SOC_TPLG_FSYNC_CC 1 /* codec is fsync consumer */181/* keep previous definitions for compatibility */182#define SND_SOC_TPLG_FSYNC_CM SND_SOC_TPLG_FSYNC_CP183#define SND_SOC_TPLG_FSYNC_CS SND_SOC_TPLG_FSYNC_CC184185/*186* Block Header.187* This header precedes all object and object arrays below.188*/189struct snd_soc_tplg_hdr {190__le32 magic; /* magic number */191__le32 abi; /* ABI version */192__le32 version; /* optional vendor specific version details */193__le32 type; /* SND_SOC_TPLG_TYPE_ */194__le32 size; /* size of this structure */195__le32 vendor_type; /* optional vendor specific type info */196__le32 payload_size; /* data bytes, excluding this header */197__le32 index; /* identifier for block */198__le32 count; /* number of elements in block */199} __attribute__((packed));200201/* vendor tuple for uuid */202struct snd_soc_tplg_vendor_uuid_elem {203__le32 token;204char uuid[16];205} __attribute__((packed));206207/* vendor tuple for a bool/byte/short/word value */208struct snd_soc_tplg_vendor_value_elem {209__le32 token;210__le32 value;211} __attribute__((packed));212213/* vendor tuple for string */214struct snd_soc_tplg_vendor_string_elem {215__le32 token;216char string[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];217} __attribute__((packed));218219struct snd_soc_tplg_vendor_array {220__le32 size; /* size in bytes of the array, including all elements */221__le32 type; /* SND_SOC_TPLG_TUPLE_TYPE_ */222__le32 num_elems; /* number of elements in array */223union {224__DECLARE_FLEX_ARRAY(struct snd_soc_tplg_vendor_uuid_elem, uuid);225__DECLARE_FLEX_ARRAY(struct snd_soc_tplg_vendor_value_elem, value);226__DECLARE_FLEX_ARRAY(struct snd_soc_tplg_vendor_string_elem, string);227};228} __attribute__((packed));229230/*231* Private data.232* All topology objects may have private data that can be used by the driver or233* firmware. Core will ignore this data.234*/235struct snd_soc_tplg_private {236__le32 size; /* in bytes of private data */237union {238__DECLARE_FLEX_ARRAY(char, data);239__DECLARE_FLEX_ARRAY(struct snd_soc_tplg_vendor_array, array);240};241} __attribute__((packed));242243/*244* Kcontrol TLV data.245*/246struct snd_soc_tplg_tlv_dbscale {247__le32 min;248__le32 step;249__le32 mute;250} __attribute__((packed));251252struct snd_soc_tplg_ctl_tlv {253__le32 size; /* in bytes of this structure */254__le32 type; /* SNDRV_CTL_TLVT_*, type of TLV */255union {256__le32 data[SND_SOC_TPLG_TLV_SIZE];257struct snd_soc_tplg_tlv_dbscale scale;258};259} __attribute__((packed));260261/*262* Kcontrol channel data263*/264struct snd_soc_tplg_channel {265__le32 size; /* in bytes of this structure */266__le32 reg;267__le32 shift;268__le32 id; /* ID maps to Left, Right, LFE etc */269} __attribute__((packed));270271/*272* Genericl Operations IDs, for binding Kcontrol or Bytes ext ops273* Kcontrol ops need get/put/info.274* Bytes ext ops need get/put.275*/276struct snd_soc_tplg_io_ops {277__le32 get;278__le32 put;279__le32 info;280} __attribute__((packed));281282/*283* kcontrol header284*/285struct snd_soc_tplg_ctl_hdr {286__le32 size; /* in bytes of this structure */287__le32 type;288char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];289__le32 access;290struct snd_soc_tplg_io_ops ops;291struct snd_soc_tplg_ctl_tlv tlv;292} __attribute__((packed));293294/*295* Stream Capabilities296*/297struct snd_soc_tplg_stream_caps {298__le32 size; /* in bytes of this structure */299char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];300__le64 formats; /* supported formats SNDRV_PCM_FMTBIT_* */301__le32 rates; /* supported rates SNDRV_PCM_RATE_* */302__le32 rate_min; /* min rate */303__le32 rate_max; /* max rate */304__le32 channels_min; /* min channels */305__le32 channels_max; /* max channels */306__le32 periods_min; /* min number of periods */307__le32 periods_max; /* max number of periods */308__le32 period_size_min; /* min period size bytes */309__le32 period_size_max; /* max period size bytes */310__le32 buffer_size_min; /* min buffer size bytes */311__le32 buffer_size_max; /* max buffer size bytes */312__le32 sig_bits; /* number of bits of content */313} __attribute__((packed));314315/*316* FE or BE Stream configuration supported by SW/FW317*/318struct snd_soc_tplg_stream {319__le32 size; /* in bytes of this structure */320char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* Name of the stream */321__le64 format; /* SNDRV_PCM_FMTBIT_* */322__le32 rate; /* SNDRV_PCM_RATE_* */323__le32 period_bytes; /* size of period in bytes */324__le32 buffer_bytes; /* size of buffer in bytes */325__le32 channels; /* channels */326} __attribute__((packed));327328329/*330* Describes a physical link's runtime supported hardware config,331* i.e. hardware audio formats.332*/333struct snd_soc_tplg_hw_config {334__le32 size; /* in bytes of this structure */335__le32 id; /* unique ID - - used to match */336__le32 fmt; /* SND_SOC_DAI_FORMAT_ format value */337__u8 clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */338__u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */339__u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */340__u8 bclk_provider; /* SND_SOC_TPLG_BCLK_ value */341__u8 fsync_provider; /* SND_SOC_TPLG_FSYNC_ value */342__u8 mclk_direction; /* SND_SOC_TPLG_MCLK_ value */343__le16 reserved; /* for 32bit alignment */344__le32 mclk_rate; /* MCLK or SYSCLK freqency in Hz */345__le32 bclk_rate; /* BCLK freqency in Hz */346__le32 fsync_rate; /* frame clock in Hz */347__le32 tdm_slots; /* number of TDM slots in use */348__le32 tdm_slot_width; /* width in bits for each slot */349__le32 tx_slots; /* bit mask for active Tx slots */350__le32 rx_slots; /* bit mask for active Rx slots */351__le32 tx_channels; /* number of Tx channels */352__le32 tx_chanmap[SND_SOC_TPLG_MAX_CHAN]; /* array of slot number */353__le32 rx_channels; /* number of Rx channels */354__le32 rx_chanmap[SND_SOC_TPLG_MAX_CHAN]; /* array of slot number */355} __attribute__((packed));356357/*358* Manifest. List totals for each payload type. Not used in parsing, but will359* be passed to the component driver before any other objects in order for any360* global component resource allocations.361*362* File block representation for manifest :-363* +-----------------------------------+----+364* | struct snd_soc_tplg_hdr | 1 |365* +-----------------------------------+----+366* | struct snd_soc_tplg_manifest | 1 |367* +-----------------------------------+----+368*/369struct snd_soc_tplg_manifest {370__le32 size; /* in bytes of this structure */371__le32 control_elems; /* number of control elements */372__le32 widget_elems; /* number of widget elements */373__le32 graph_elems; /* number of graph elements */374__le32 pcm_elems; /* number of PCM elements */375__le32 dai_link_elems; /* number of DAI link elements */376__le32 dai_elems; /* number of physical DAI elements */377__le32 reserved[20]; /* reserved for new ABI element types */378struct snd_soc_tplg_private priv;379} __attribute__((packed));380381/*382* Mixer kcontrol.383*384* File block representation for mixer kcontrol :-385* +-----------------------------------+----+386* | struct snd_soc_tplg_hdr | 1 |387* +-----------------------------------+----+388* | struct snd_soc_tplg_mixer_control | N |389* +-----------------------------------+----+390*/391struct snd_soc_tplg_mixer_control {392struct snd_soc_tplg_ctl_hdr hdr;393__le32 size; /* in bytes of this structure */394__le32 min;395__le32 max;396__le32 platform_max;397__le32 invert;398__le32 num_channels;399struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN];400struct snd_soc_tplg_private priv;401} __attribute__((packed));402403/*404* Enumerated kcontrol405*406* File block representation for enum kcontrol :-407* +-----------------------------------+----+408* | struct snd_soc_tplg_hdr | 1 |409* +-----------------------------------+----+410* | struct snd_soc_tplg_enum_control | N |411* +-----------------------------------+----+412*/413struct snd_soc_tplg_enum_control {414struct snd_soc_tplg_ctl_hdr hdr;415__le32 size; /* in bytes of this structure */416__le32 num_channels;417struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN];418__le32 items;419__le32 mask;420__le32 count;421char texts[SND_SOC_TPLG_NUM_TEXTS][SNDRV_CTL_ELEM_ID_NAME_MAXLEN];422__le32 values[SND_SOC_TPLG_NUM_TEXTS * SNDRV_CTL_ELEM_ID_NAME_MAXLEN / 4];423struct snd_soc_tplg_private priv;424} __attribute__((packed));425426/*427* Bytes kcontrol428*429* File block representation for bytes kcontrol :-430* +-----------------------------------+----+431* | struct snd_soc_tplg_hdr | 1 |432* +-----------------------------------+----+433* | struct snd_soc_tplg_bytes_control | N |434* +-----------------------------------+----+435*/436struct snd_soc_tplg_bytes_control {437struct snd_soc_tplg_ctl_hdr hdr;438__le32 size; /* in bytes of this structure */439__le32 max;440__le32 mask;441__le32 base;442__le32 num_regs;443struct snd_soc_tplg_io_ops ext_ops;444struct snd_soc_tplg_private priv;445} __attribute__((packed));446447/*448* DAPM Graph Element449*450* File block representation for DAPM graph elements :-451* +-------------------------------------+----+452* | struct snd_soc_tplg_hdr | 1 |453* +-------------------------------------+----+454* | struct snd_soc_tplg_dapm_graph_elem | N |455* +-------------------------------------+----+456*/457struct snd_soc_tplg_dapm_graph_elem {458char sink[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];459char control[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];460char source[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];461} __attribute__((packed));462463/*464* DAPM Widget.465*466* File block representation for DAPM widget :-467* +-------------------------------------+-----+468* | struct snd_soc_tplg_hdr | 1 |469* +-------------------------------------+-----+470* | struct snd_soc_tplg_dapm_widget | N |471* +-------------------------------------+-----+472* | struct snd_soc_tplg_enum_control | 0|1 |473* | struct snd_soc_tplg_mixer_control | 0|N |474* +-------------------------------------+-----+475*476* Optional enum or mixer control can be appended to the end of each widget477* in the block.478*/479struct snd_soc_tplg_dapm_widget {480__le32 size; /* in bytes of this structure */481__le32 id; /* SND_SOC_DAPM_CTL */482char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];483char sname[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];484485__le32 reg; /* negative reg = no direct dapm */486__le32 shift; /* bits to shift */487__le32 mask; /* non-shifted mask */488__le32 subseq; /* sort within widget type */489__le32 invert; /* invert the power bit */490__le32 ignore_suspend; /* kept enabled over suspend */491__le16 event_flags;492__le16 event_type;493__le32 num_kcontrols;494struct snd_soc_tplg_private priv;495/*496* kcontrols that relate to this widget497* follow here after widget private data498*/499} __attribute__((packed));500501502/*503* Describes SW/FW specific features of PCM (FE DAI & DAI link).504*505* File block representation for PCM :-506* +-----------------------------------+-----+507* | struct snd_soc_tplg_hdr | 1 |508* +-----------------------------------+-----+509* | struct snd_soc_tplg_pcm | N |510* +-----------------------------------+-----+511*/512struct snd_soc_tplg_pcm {513__le32 size; /* in bytes of this structure */514char pcm_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];515char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];516__le32 pcm_id; /* unique ID - used to match with DAI link */517__le32 dai_id; /* unique ID - used to match */518__le32 playback; /* supports playback mode */519__le32 capture; /* supports capture mode */520__le32 compress; /* 1 = compressed; 0 = PCM */521struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* for DAI link */522__le32 num_streams; /* number of streams */523struct snd_soc_tplg_stream_caps caps[2]; /* playback and capture for DAI */524__le32 flag_mask; /* bitmask of flags to configure */525__le32 flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */526struct snd_soc_tplg_private priv;527} __attribute__((packed));528529530/*531* Describes the physical link runtime supported configs or params532*533* File block representation for physical link config :-534* +-----------------------------------+-----+535* | struct snd_soc_tplg_hdr | 1 |536* +-----------------------------------+-----+537* | struct snd_soc_tplg_link_config | N |538* +-----------------------------------+-----+539*/540struct snd_soc_tplg_link_config {541__le32 size; /* in bytes of this structure */542__le32 id; /* unique ID - used to match */543char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* name - used to match */544char stream_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* stream name - used to match */545struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* supported configs playback and captrure */546__le32 num_streams; /* number of streams */547struct snd_soc_tplg_hw_config hw_config[SND_SOC_TPLG_HW_CONFIG_MAX]; /* hw configs */548__le32 num_hw_configs; /* number of hw configs */549__le32 default_hw_config_id; /* default hw config ID for init */550__le32 flag_mask; /* bitmask of flags to configure */551__le32 flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */552struct snd_soc_tplg_private priv;553} __attribute__((packed));554555/*556* Describes SW/FW specific features of physical DAI.557* It can be used to configure backend DAIs for DPCM.558*559* File block representation for physical DAI :-560* +-----------------------------------+-----+561* | struct snd_soc_tplg_hdr | 1 |562* +-----------------------------------+-----+563* | struct snd_soc_tplg_dai | N |564* +-----------------------------------+-----+565*/566struct snd_soc_tplg_dai {567__le32 size; /* in bytes of this structure */568char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* name - used to match */569__le32 dai_id; /* unique ID - used to match */570__le32 playback; /* supports playback mode */571__le32 capture; /* supports capture mode */572struct snd_soc_tplg_stream_caps caps[2]; /* playback and capture for DAI */573__le32 flag_mask; /* bitmask of flags to configure */574__le32 flags; /* SND_SOC_TPLG_DAI_FLGBIT_* */575struct snd_soc_tplg_private priv;576} __attribute__((packed));577578#endif579580581