Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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