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