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