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