/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
/*
 * The MIPI SDCA specification is available for public downloads at
 * https://www.mipi.org/mipi-sdca-v1-0-download
 *
 * Copyright(c) 2024 Intel Corporation
 */

#ifndef __SDCA_FUNCTION_H__
#define __SDCA_FUNCTION_H__

#include <linux/bits.h>
#include <linux/types.h>
#include <linux/hid.h>

struct acpi_table_swft;
struct device;
struct sdca_entity;
struct sdca_function_desc;

#define SDCA_NO_INTERRUPT -1

/*
 * The addressing space for SDCA relies on 7 bits for Entities, so a
 * maximum of 128 Entities per function can be represented.
 */
#define SDCA_MAX_ENTITY_COUNT 128

/*
 * Sanity check on number of initialization writes, can be expanded if needed.
 */
#define SDCA_MAX_INIT_COUNT 2048

/*
 * The Cluster IDs are 16-bit, so a maximum of 65535 Clusters per
 * function can be represented, however limit this to a slightly
 * more reasonable value. Can be expanded if needed.
 */
#define SDCA_MAX_CLUSTER_COUNT 256

/*
 * Sanity check on number of channels per Cluster, can be expanded if needed.
 */
#define SDCA_MAX_CHANNEL_COUNT 32

/*
 * Sanity check on number of PDE delays, can be expanded if needed.
 */
#define SDCA_MAX_DELAY_COUNT 256

/*
 * Sanity check on size of affected controls data, can be expanded if needed.
 */
#define SDCA_MAX_AFFECTED_COUNT 2048

/**
 * enum sdca_function_type - SDCA Function Type codes
 * @SDCA_FUNCTION_TYPE_SMART_AMP: Amplifier with protection features.
 * @SDCA_FUNCTION_TYPE_SIMPLE_AMP: Subset of SmartAmp.
 * @SDCA_FUNCTION_TYPE_SMART_MIC: Smart microphone with acoustic triggers.
 * @SDCA_FUNCTION_TYPE_SIMPLE_MIC: Subset of SmartMic.
 * @SDCA_FUNCTION_TYPE_SPEAKER_MIC: Combination of SmartMic and SmartAmp.
 * @SDCA_FUNCTION_TYPE_UAJ: 3.5mm Universal Audio jack.
 * @SDCA_FUNCTION_TYPE_RJ: Retaskable jack.
 * @SDCA_FUNCTION_TYPE_SIMPLE_JACK: Subset of UAJ.
 * @SDCA_FUNCTION_TYPE_HID: Human Interface Device, for e.g. buttons.
 * @SDCA_FUNCTION_TYPE_COMPANION_AMP: Sources audio from another amp.
 * @SDCA_FUNCTION_TYPE_IMP_DEF: Implementation-defined function.
 *
 * SDCA Function Types from SDCA specification v1.0a Section 5.1.2
 * all Function types not described are reserved.
 *
 * Note that SIMPLE_AMP, SIMPLE_MIC and SIMPLE_JACK Function Types
 * are NOT defined in SDCA 1.0a, but they were defined in earlier
 * drafts and are planned for 1.1.
 */
enum sdca_function_type {
	SDCA_FUNCTION_TYPE_SMART_AMP			= 0x01,
	SDCA_FUNCTION_TYPE_SIMPLE_AMP			= 0x02,
	SDCA_FUNCTION_TYPE_SMART_MIC			= 0x03,
	SDCA_FUNCTION_TYPE_SIMPLE_MIC			= 0x04,
	SDCA_FUNCTION_TYPE_SPEAKER_MIC			= 0x05,
	SDCA_FUNCTION_TYPE_UAJ				= 0x06,
	SDCA_FUNCTION_TYPE_RJ				= 0x07,
	SDCA_FUNCTION_TYPE_SIMPLE_JACK			= 0x08,
	SDCA_FUNCTION_TYPE_HID				= 0x0A,
	SDCA_FUNCTION_TYPE_COMPANION_AMP		= 0x0B,
	SDCA_FUNCTION_TYPE_IMP_DEF			= 0x1F,
};

/* Human-readable names used for kernel logs and Function device registration/bind */
#define	SDCA_FUNCTION_TYPE_SMART_AMP_NAME		"SmartAmp"
#define	SDCA_FUNCTION_TYPE_SIMPLE_AMP_NAME		"SimpleAmp"
#define	SDCA_FUNCTION_TYPE_SMART_MIC_NAME		"SmartMic"
#define	SDCA_FUNCTION_TYPE_SIMPLE_MIC_NAME		"SimpleMic"
#define	SDCA_FUNCTION_TYPE_SPEAKER_MIC_NAME		"SpeakerMic"
#define	SDCA_FUNCTION_TYPE_UAJ_NAME			"UAJ"
#define	SDCA_FUNCTION_TYPE_RJ_NAME			"RJ"
#define	SDCA_FUNCTION_TYPE_SIMPLE_NAME			"SimpleJack"
#define	SDCA_FUNCTION_TYPE_HID_NAME			"HID"
#define	SDCA_FUNCTION_TYPE_COMPANION_AMP_NAME		"CompanionAmp"
#define	SDCA_FUNCTION_TYPE_IMP_DEF_NAME			"ImplementationDefined"

/**
 * struct sdca_init_write - a single initialization write
 * @addr: Register address to be written
 * @val: Single byte value to be written
 */
struct sdca_init_write {
	u32 addr;
	u8 val;
};

/**
 * define SDCA_CTL_TYPE - create a unique identifier for an SDCA Control
 * @ent: Entity Type code.
 * @sel: Control Selector code.
 *
 * Sometimes there is a need to identify a type of Control, for example to
 * determine what name the control should have. SDCA Selectors are reused
 * across Entity types, as such it is necessary to combine both the Entity
 * Type and the Control Selector to obtain a unique identifier.
 */
#define SDCA_CTL_TYPE(ent, sel) ((ent) << 8 | (sel))

/**
 * define SDCA_CTL_TYPE_S - static version of SDCA_CTL_TYPE
 * @ent: Entity name, for example IT, MFPU, etc. this string can be read
 * from the last characters of the SDCA_ENTITY_TYPE_* macros.
 * @sel: Control Selector name, for example MIC_BIAS, MUTE, etc. this
 * string can be read from the last characters of the SDCA_CTL_*_*
 * macros.
 *
 * Short hand to specific a Control type statically for example:
 * SDCA_CTL_TYPE_S(IT, MIC_BIAS).
 */
#define SDCA_CTL_TYPE_S(ent, sel) SDCA_CTL_TYPE(SDCA_ENTITY_TYPE_##ent, \
						SDCA_CTL_##ent##_##sel)

/**
 * enum sdca_messageoffset_range - Column definitions UMP MessageOffset
 */
enum sdca_messageoffset_range {
	SDCA_MESSAGEOFFSET_BUFFER_START_ADDRESS		= 0,
	SDCA_MESSAGEOFFSET_BUFFER_LENGTH		= 1,
	SDCA_MESSAGEOFFSET_UMP_MODE			= 2,
	SDCA_MESSAGEOFFSET_NCOLS			= 3,
};

/**
 * enum sdca_ump_mode - SDCA UMP Mode
 */
enum sdca_ump_mode {
	SDCA_UMP_MODE_DIRECT				= 0x00,
	SDCA_UMP_MODE_INDIRECT				= 0x01,
};

/**
 * enum sdca_ump_owner - SDCA UMP Owner
 */
enum sdca_ump_owner {
	SDCA_UMP_OWNER_HOST				= 0x00,
	SDCA_UMP_OWNER_DEVICE				= 0x01,
};

/**
 * enum sdca_it_controls - SDCA Controls for Input Terminal
 *
 * Control Selectors for Input Terminal from SDCA specification v1.0
 * section 6.2.1.3.
 */
enum sdca_it_controls {
	SDCA_CTL_IT_MIC_BIAS				= 0x03,
	SDCA_CTL_IT_USAGE				= 0x04,
	SDCA_CTL_IT_LATENCY				= 0x08,
	SDCA_CTL_IT_CLUSTERINDEX			= 0x10,
	SDCA_CTL_IT_DATAPORT_SELECTOR			= 0x11,
	SDCA_CTL_IT_MATCHING_GUID			= 0x12,
	SDCA_CTL_IT_KEEP_ALIVE				= 0x13,
	SDCA_CTL_IT_NDAI_STREAM				= 0x14,
	SDCA_CTL_IT_NDAI_CATEGORY			= 0x15,
	SDCA_CTL_IT_NDAI_CODINGTYPE			= 0x16,
	SDCA_CTL_IT_NDAI_PACKETTYPE			= 0x17,
};

/**
 * enum sdca_ot_controls - SDCA Controls for Output Terminal
 *
 * Control Selectors for Output Terminal from SDCA specification v1.0
 * section 6.2.2.3.
 */
enum sdca_ot_controls {
	SDCA_CTL_OT_USAGE				= 0x04,
	SDCA_CTL_OT_LATENCY				= 0x08,
	SDCA_CTL_OT_DATAPORT_SELECTOR			= 0x11,
	SDCA_CTL_OT_MATCHING_GUID			= 0x12,
	SDCA_CTL_OT_KEEP_ALIVE				= 0x13,
	SDCA_CTL_OT_NDAI_STREAM				= 0x14,
	SDCA_CTL_OT_NDAI_CATEGORY			= 0x15,
	SDCA_CTL_OT_NDAI_CODINGTYPE			= 0x16,
	SDCA_CTL_OT_NDAI_PACKETTYPE			= 0x17,
};

/**
 * enum sdca_usage_range - Column definitions for Usage
 */
enum sdca_usage_range {
	SDCA_USAGE_NUMBER				= 0,
	SDCA_USAGE_CBN					= 1,
	SDCA_USAGE_SAMPLE_RATE				= 2,
	SDCA_USAGE_SAMPLE_WIDTH				= 3,
	SDCA_USAGE_FULL_SCALE				= 4,
	SDCA_USAGE_NOISE_FLOOR				= 5,
	SDCA_USAGE_TAG					= 6,
	SDCA_USAGE_NCOLS				= 7,
};

/**
 * enum sdca_dataport_selector_range - Column definitions for DataPort_Selector
 */
enum sdca_dataport_selector_range {
	SDCA_DATAPORT_SELECTOR_NCOLS			= 16,
	SDCA_DATAPORT_SELECTOR_NROWS			= 4,
};

/**
 * enum sdca_mu_controls - SDCA Controls for Mixer Unit
 *
 * Control Selectors for Mixer Unit from SDCA specification v1.0
 * section 6.3.4.2.
 */
enum sdca_mu_controls {
	SDCA_CTL_MU_MIXER				= 0x01,
	SDCA_CTL_MU_LATENCY				= 0x06,
};

/**
 * enum sdca_su_controls - SDCA Controls for Selector Unit
 *
 * Control Selectors for Selector Unit from SDCA specification v1.0
 * section 6.3.8.3.
 */
enum sdca_su_controls {
	SDCA_CTL_SU_SELECTOR				= 0x01,
	SDCA_CTL_SU_LATENCY				= 0x02,
};

/**
 * enum sdca_fu_controls - SDCA Controls for Feature Unit
 *
 * Control Selectors for Feature Unit from SDCA specification v1.0
 * section 6.3.2.3.
 */
enum sdca_fu_controls {
	SDCA_CTL_FU_MUTE				= 0x01,
	SDCA_CTL_FU_CHANNEL_VOLUME			= 0x02,
	SDCA_CTL_FU_AGC					= 0x07,
	SDCA_CTL_FU_BASS_BOOST				= 0x09,
	SDCA_CTL_FU_LOUDNESS				= 0x0A,
	SDCA_CTL_FU_GAIN				= 0x0B,
	SDCA_CTL_FU_LATENCY				= 0x10,
};

/**
 * enum sdca_volume_range - Column definitions for Q7.8dB volumes/gains
 */
enum sdca_volume_range {
	SDCA_VOLUME_LINEAR_MIN				= 0,
	SDCA_VOLUME_LINEAR_MAX				= 1,
	SDCA_VOLUME_LINEAR_STEP				= 2,
	SDCA_VOLUME_LINEAR_NCOLS			= 3,
};

/**
 * enum sdca_xu_controls - SDCA Controls for Extension Unit
 *
 * Control Selectors for Extension Unit from SDCA specification v1.0
 * section 6.3.10.3.
 */
enum sdca_xu_controls {
	SDCA_CTL_XU_BYPASS				= 0x01,
	SDCA_CTL_XU_LATENCY				= 0x06,
	SDCA_CTL_XU_XU_ID				= 0x07,
	SDCA_CTL_XU_XU_VERSION				= 0x08,
	SDCA_CTL_XU_FDL_CURRENTOWNER			= 0x10,
	SDCA_CTL_XU_FDL_MESSAGEOFFSET			= 0x12,
	SDCA_CTL_XU_FDL_MESSAGELENGTH			= 0x13,
	SDCA_CTL_XU_FDL_STATUS				= 0x14,
	SDCA_CTL_XU_FDL_SET_INDEX			= 0x15,
	SDCA_CTL_XU_FDL_HOST_REQUEST			= 0x16,

	/* FDL Status Host->Device bit definitions */
	SDCA_CTL_XU_FDLH_TRANSFERRED_CHUNK		= BIT(0),
	SDCA_CTL_XU_FDLH_TRANSFERRED_FILE		= BIT(1),
	SDCA_CTL_XU_FDLH_SET_IN_PROGRESS		= BIT(2),
	SDCA_CTL_XU_FDLH_RESET_ACK			= BIT(4),
	SDCA_CTL_XU_FDLH_REQ_ABORT			= BIT(5),
	/* FDL Status Device->Host bit definitions */
	SDCA_CTL_XU_FDLD_REQ_RESET			= BIT(4),
	SDCA_CTL_XU_FDLD_REQ_ABORT			= BIT(5),
	SDCA_CTL_XU_FDLD_ACK_TRANSFER			= BIT(6),
	SDCA_CTL_XU_FDLD_NEEDS_SET			= BIT(7),
};

/**
 * enum sdca_set_index_range - Column definitions UMP SetIndex
 */
enum sdca_fdl_set_index_range {
	SDCA_FDL_SET_INDEX_SET_NUMBER			= 0,
	SDCA_FDL_SET_INDEX_FILE_SET_ID			= 1,
	SDCA_FDL_SET_INDEX_NCOLS			= 2,
};

/**
 * enum sdca_cs_controls - SDCA Controls for Clock Source
 *
 * Control Selectors for Clock Source from SDCA specification v1.0
 * section 6.4.1.3.
 */
enum sdca_cs_controls {
	SDCA_CTL_CS_CLOCK_VALID				= 0x02,
	SDCA_CTL_CS_SAMPLERATEINDEX			= 0x10,
};

/**
 * enum sdca_samplerateindex_range - Column definitions for SampleRateIndex
 */
enum sdca_samplerateindex_range {
	SDCA_SAMPLERATEINDEX_INDEX			= 0,
	SDCA_SAMPLERATEINDEX_RATE			= 1,
	SDCA_SAMPLERATEINDEX_NCOLS			= 2,
};

/**
 * enum sdca_cx_controls - SDCA Controls for Clock Selector
 *
 * Control Selectors for Clock Selector from SDCA specification v1.0
 * section 6.4.2.3.
 */
enum sdca_cx_controls {
	SDCA_CTL_CX_CLOCK_SELECT			= 0x01,
};

/**
 * enum sdca_pde_controls - SDCA Controls for Power Domain Entity
 *
 * Control Selectors for Power Domain Entity from SDCA specification
 * v1.0 section 6.5.2.2.
 */
enum sdca_pde_controls {
	SDCA_CTL_PDE_REQUESTED_PS			= 0x01,
	SDCA_CTL_PDE_ACTUAL_PS				= 0x10,
};

/**
 * enum sdca_requested_ps_range - Column definitions for Requested PS
 */
enum sdca_requested_ps_range {
	SDCA_REQUESTED_PS_STATE				= 0,
	SDCA_REQUESTED_PS_NCOLS				= 1,
};

/**
 * enum sdca_ge_controls - SDCA Controls for Group Unit
 *
 * Control Selectors for Group Unit from SDCA specification v1.0
 * section 6.5.1.4.
 */
enum sdca_ge_controls {
	SDCA_CTL_GE_SELECTED_MODE			= 0x01,
	SDCA_CTL_GE_DETECTED_MODE			= 0x02,
};

/**
 * enum sdca_selected_mode_range - Column definitions for Selected Mode
 */
enum sdca_selected_mode_range {
	SDCA_SELECTED_MODE_INDEX			= 0,
	SDCA_SELECTED_MODE_TERM_TYPE			= 1,
	SDCA_SELECTED_MODE_NCOLS			= 2,
};

/**
 * enum sdca_detected_mode_values - Predefined GE Detected Mode values
 */
enum sdca_detected_mode_values {
	SDCA_DETECTED_MODE_JACK_UNPLUGGED		= 0,
	SDCA_DETECTED_MODE_JACK_UNKNOWN			= 1,
	SDCA_DETECTED_MODE_DETECTION_IN_PROGRESS	= 2,
};

/**
 * enum sdca_spe_controls - SDCA Controls for Security & Privacy Unit
 *
 * Control Selectors for Security & Privacy Unit from SDCA
 * specification v1.0 Section 6.5.3.2.
 */
enum sdca_spe_controls {
	SDCA_CTL_SPE_PRIVATE				= 0x01,
	SDCA_CTL_SPE_PRIVACY_POLICY			= 0x02,
	SDCA_CTL_SPE_PRIVACY_LOCKSTATE			= 0x03,
	SDCA_CTL_SPE_PRIVACY_OWNER			= 0x04,
	SDCA_CTL_SPE_AUTHTX_CURRENTOWNER		= 0x10,
	SDCA_CTL_SPE_AUTHTX_MESSAGEOFFSET		= 0x12,
	SDCA_CTL_SPE_AUTHTX_MESSAGELENGTH		= 0x13,
	SDCA_CTL_SPE_AUTHRX_CURRENTOWNER		= 0x14,
	SDCA_CTL_SPE_AUTHRX_MESSAGEOFFSET		= 0x16,
	SDCA_CTL_SPE_AUTHRX_MESSAGELENGTH		= 0x17,
};

/**
 * enum sdca_cru_controls - SDCA Controls for Channel Remapping Unit
 *
 * Control Selectors for Channel Remapping Unit from SDCA
 * specification v1.0 Section 6.3.1.3.
 */
enum sdca_cru_controls {
	SDCA_CTL_CRU_LATENCY				= 0x06,
	SDCA_CTL_CRU_CLUSTERINDEX			= 0x10,
};

/**
 * enum sdca_udmpu_controls - SDCA Controls for Up-Down Mixer Processing Unit
 *
 * Control Selectors for Up-Down Mixer Processing Unit from SDCA
 * specification v1.0 Section 6.3.9.3.
 */
enum sdca_udmpu_controls {
	SDCA_CTL_UDMPU_LATENCY				= 0x06,
	SDCA_CTL_UDMPU_CLUSTERINDEX			= 0x10,
	SDCA_CTL_UDMPU_ACOUSTIC_ENERGY_LEVEL_MONITOR	= 0x11,
	SDCA_CTL_UDMPU_ULTRASOUND_LOOP_GAIN		= 0x12,
	SDCA_CTL_UDMPU_OPAQUESET_0			= 0x18,
	SDCA_CTL_UDMPU_OPAQUESET_1			= 0x19,
	SDCA_CTL_UDMPU_OPAQUESET_2			= 0x1A,
	SDCA_CTL_UDMPU_OPAQUESET_3			= 0x1B,
	SDCA_CTL_UDMPU_OPAQUESET_4			= 0x1C,
	SDCA_CTL_UDMPU_OPAQUESET_5			= 0x1D,
	SDCA_CTL_UDMPU_OPAQUESET_6			= 0x1E,
	SDCA_CTL_UDMPU_OPAQUESET_7			= 0x1F,
	SDCA_CTL_UDMPU_OPAQUESET_8			= 0x20,
	SDCA_CTL_UDMPU_OPAQUESET_9			= 0x21,
	SDCA_CTL_UDMPU_OPAQUESET_10			= 0x22,
	SDCA_CTL_UDMPU_OPAQUESET_11			= 0x23,
	SDCA_CTL_UDMPU_OPAQUESET_12			= 0x24,
	SDCA_CTL_UDMPU_OPAQUESET_13			= 0x25,
	SDCA_CTL_UDMPU_OPAQUESET_14			= 0x26,
	SDCA_CTL_UDMPU_OPAQUESET_15			= 0x27,
	SDCA_CTL_UDMPU_OPAQUESET_16			= 0x28,
	SDCA_CTL_UDMPU_OPAQUESET_17			= 0x29,
	SDCA_CTL_UDMPU_OPAQUESET_18			= 0x2A,
	SDCA_CTL_UDMPU_OPAQUESET_19			= 0x2B,
	SDCA_CTL_UDMPU_OPAQUESET_20			= 0x2C,
	SDCA_CTL_UDMPU_OPAQUESET_21			= 0x2D,
	SDCA_CTL_UDMPU_OPAQUESET_22			= 0x2E,
	SDCA_CTL_UDMPU_OPAQUESET_23			= 0x2F,
};

/**
 * enum sdca_mfpu_controls - SDCA Controls for Multi-Function Processing Unit
 *
 * Control Selectors for Multi-Function Processing Unit from SDCA
 * specification v1.0 Section 6.3.3.4.
 */
enum sdca_mfpu_controls {
	SDCA_CTL_MFPU_BYPASS				= 0x01,
	SDCA_CTL_MFPU_ALGORITHM_READY			= 0x04,
	SDCA_CTL_MFPU_ALGORITHM_ENABLE			= 0x05,
	SDCA_CTL_MFPU_LATENCY				= 0x08,
	SDCA_CTL_MFPU_ALGORITHM_PREPARE			= 0x09,
	SDCA_CTL_MFPU_CLUSTERINDEX			= 0x10,
	SDCA_CTL_MFPU_CENTER_FREQUENCY_INDEX		= 0x11,
	SDCA_CTL_MFPU_ULTRASOUND_LEVEL			= 0x12,
	SDCA_CTL_MFPU_AE_NUMBER				= 0x13,
	SDCA_CTL_MFPU_AE_CURRENTOWNER			= 0x14,
	SDCA_CTL_MFPU_AE_MESSAGEOFFSET			= 0x16,
	SDCA_CTL_MFPU_AE_MESSAGELENGTH			= 0x17,
};

/**
 * enum sdca_smpu_controls - SDCA Controls for Smart Mic Processing Unit
 *
 * Control Selectors for Smart Mic Processing Unit from SDCA
 * specification v1.0 Section 6.3.7.3.
 */
enum sdca_smpu_controls {
	SDCA_CTL_SMPU_LATENCY				= 0x06,
	SDCA_CTL_SMPU_TRIGGER_ENABLE			= 0x10,
	SDCA_CTL_SMPU_TRIGGER_STATUS			= 0x11,
	SDCA_CTL_SMPU_HIST_BUFFER_MODE			= 0x12,
	SDCA_CTL_SMPU_HIST_BUFFER_PREAMBLE		= 0x13,
	SDCA_CTL_SMPU_HIST_ERROR			= 0x14,
	SDCA_CTL_SMPU_TRIGGER_EXTENSION			= 0x15,
	SDCA_CTL_SMPU_TRIGGER_READY			= 0x16,
	SDCA_CTL_SMPU_HIST_CURRENTOWNER			= 0x18,
	SDCA_CTL_SMPU_HIST_MESSAGEOFFSET		= 0x1A,
	SDCA_CTL_SMPU_HIST_MESSAGELENGTH		= 0x1B,
	SDCA_CTL_SMPU_DTODTX_CURRENTOWNER		= 0x1C,
	SDCA_CTL_SMPU_DTODTX_MESSAGEOFFSET		= 0x1E,
	SDCA_CTL_SMPU_DTODTX_MESSAGELENGTH		= 0x1F,
	SDCA_CTL_SMPU_DTODRX_CURRENTOWNER		= 0x20,
	SDCA_CTL_SMPU_DTODRX_MESSAGEOFFSET		= 0x22,
	SDCA_CTL_SMPU_DTODRX_MESSAGELENGTH		= 0x23,
};

/**
 * enum sdca_sapu_controls - SDCA Controls for Smart Amp Processing Unit
 *
 * Control Selectors for Smart Amp Processing Unit from SDCA
 * specification v1.0 Section 6.3.6.3.
 */
enum sdca_sapu_controls {
	SDCA_CTL_SAPU_LATENCY				= 0x05,
	SDCA_CTL_SAPU_PROTECTION_MODE			= 0x10,
	SDCA_CTL_SAPU_PROTECTION_STATUS			= 0x11,
	SDCA_CTL_SAPU_OPAQUESETREQ_INDEX		= 0x12,
	SDCA_CTL_SAPU_DTODTX_CURRENTOWNER		= 0x14,
	SDCA_CTL_SAPU_DTODTX_MESSAGEOFFSET		= 0x16,
	SDCA_CTL_SAPU_DTODTX_MESSAGELENGTH		= 0x17,
	SDCA_CTL_SAPU_DTODRX_CURRENTOWNER		= 0x18,
	SDCA_CTL_SAPU_DTODRX_MESSAGEOFFSET		= 0x1A,
	SDCA_CTL_SAPU_DTODRX_MESSAGELENGTH		= 0x1B,
};

/**
 * enum sdca_ppu_controls - SDCA Controls for Post Processing Unit
 *
 * Control Selectors for Post Processing Unit from SDCA specification
 * v1.0 Section 6.3.5.3.
 */
enum sdca_ppu_controls {
	SDCA_CTL_PPU_LATENCY				= 0x06,
	SDCA_CTL_PPU_POSTURENUMBER			= 0x10,
	SDCA_CTL_PPU_POSTUREEXTENSION			= 0x11,
	SDCA_CTL_PPU_HORIZONTALBALANCE			= 0x12,
	SDCA_CTL_PPU_VERTICALBALANCE			= 0x13,
};

/**
 * enum sdca_tg_controls - SDCA Controls for Tone Generator Entity
 *
 * Control Selectors for Tone Generator from SDCA specification v1.0
 * Section 6.5.4.4.
 */
enum sdca_tg_controls {
	SDCA_CTL_TG_TONE_DIVIDER			= 0x10,
};

/**
 * enum sdca_hide_controls - SDCA Controls for HIDE Entity
 *
 * Control Selectors for HIDE from SDCA specification v1.0 Section
 * 6.6.1.2.
 */
enum sdca_hide_controls {
	SDCA_CTL_HIDE_HIDTX_CURRENTOWNER		= 0x10,
	SDCA_CTL_HIDE_HIDTX_MESSAGEOFFSET		= 0x12,
	SDCA_CTL_HIDE_HIDTX_MESSAGELENGTH		= 0x13,
	SDCA_CTL_HIDE_HIDRX_CURRENTOWNER		= 0x14,
	SDCA_CTL_HIDE_HIDRX_MESSAGEOFFSET		= 0x16,
	SDCA_CTL_HIDE_HIDRX_MESSAGELENGTH		= 0x17,
};

/**
 * enum sdca_entity0_controls - SDCA Controls for Entity 0
 *
 * Control Selectors for Entity 0 from SDCA specification v1.0 Section
 * 6.7.1.1.
 */
enum sdca_entity0_controls {
	SDCA_CTL_ENTITY_0_COMMIT_GROUP_MASK		= 0x01,
	SDCA_CTL_ENTITY_0_FUNCTION_SDCA_VERSION		= 0x04,
	SDCA_CTL_ENTITY_0_FUNCTION_TYPE			= 0x05,
	SDCA_CTL_ENTITY_0_FUNCTION_MANUFACTURER_ID	= 0x06,
	SDCA_CTL_ENTITY_0_FUNCTION_ID			= 0x07,
	SDCA_CTL_ENTITY_0_FUNCTION_VERSION		= 0x08,
	SDCA_CTL_ENTITY_0_FUNCTION_EXTENSION_ID		= 0x09,
	SDCA_CTL_ENTITY_0_FUNCTION_EXTENSION_VERSION	= 0x0A,
	SDCA_CTL_ENTITY_0_FUNCTION_STATUS		= 0x10,
	SDCA_CTL_ENTITY_0_FUNCTION_ACTION		= 0x11,
	SDCA_CTL_ENTITY_0_MATCHING_GUID			= 0x12,
	SDCA_CTL_ENTITY_0_DEVICE_MANUFACTURER_ID	= 0x2C,
	SDCA_CTL_ENTITY_0_DEVICE_PART_ID		= 0x2D,
	SDCA_CTL_ENTITY_0_DEVICE_VERSION		= 0x2E,
	SDCA_CTL_ENTITY_0_DEVICE_SDCA_VERSION		= 0x2F,

	/* Function Status Bits */
	SDCA_CTL_ENTITY_0_DEVICE_NEWLY_ATTACHED		= BIT(0),
	SDCA_CTL_ENTITY_0_INTS_DISABLED_ABNORMALLY	= BIT(1),
	SDCA_CTL_ENTITY_0_STREAMING_STOPPED_ABNORMALLY	= BIT(2),
	SDCA_CTL_ENTITY_0_FUNCTION_FAULT		= BIT(3),
	SDCA_CTL_ENTITY_0_UMP_SEQUENCE_FAULT		= BIT(4),
	SDCA_CTL_ENTITY_0_FUNCTION_NEEDS_INITIALIZATION	= BIT(5),
	SDCA_CTL_ENTITY_0_FUNCTION_HAS_BEEN_RESET	= BIT(6),
	SDCA_CTL_ENTITY_0_FUNCTION_BUSY			= BIT(7),

	/* Function Action Bits */
	SDCA_CTL_ENTITY_0_RESET_FUNCTION_NOW		= BIT(0),
};

#define SDCA_CTL_MIC_BIAS_NAME				"Mic Bias"
#define SDCA_CTL_USAGE_NAME				"Usage"
#define SDCA_CTL_LATENCY_NAME				"Latency"
#define SDCA_CTL_CLUSTERINDEX_NAME			"Cluster Index"
#define SDCA_CTL_DATAPORT_SELECTOR_NAME			"Dataport Selector"
#define SDCA_CTL_MATCHING_GUID_NAME			"Matching GUID"
#define SDCA_CTL_KEEP_ALIVE_NAME			"Keep Alive"
#define SDCA_CTL_NDAI_STREAM_NAME			"NDAI Stream"
#define SDCA_CTL_NDAI_CATEGORY_NAME			"NDAI Category"
#define SDCA_CTL_NDAI_CODINGTYPE_NAME			"NDAI Coding Type"
#define SDCA_CTL_NDAI_PACKETTYPE_NAME			"NDAI Packet Type"
#define SDCA_CTL_MIXER_NAME				"Mixer"
#define SDCA_CTL_SELECTOR_NAME				"Selector"
#define SDCA_CTL_MUTE_NAME				"Channel"
#define SDCA_CTL_CHANNEL_VOLUME_NAME			"Channel Volume"
#define SDCA_CTL_AGC_NAME				"AGC"
#define SDCA_CTL_BASS_BOOST_NAME			"Bass Boost"
#define SDCA_CTL_LOUDNESS_NAME				"Loudness"
#define SDCA_CTL_GAIN_NAME				"Gain"
#define SDCA_CTL_BYPASS_NAME				"Bypass"
#define SDCA_CTL_XU_ID_NAME				"XU ID"
#define SDCA_CTL_XU_VERSION_NAME			"XU Version"
#define SDCA_CTL_FDL_CURRENTOWNER_NAME			"FDL Current Owner"
#define SDCA_CTL_FDL_MESSAGEOFFSET_NAME			"FDL Message Offset"
#define SDCA_CTL_FDL_MESSAGELENGTH_NAME			"FDL Message Length"
#define SDCA_CTL_FDL_STATUS_NAME			"FDL Status"
#define SDCA_CTL_FDL_SET_INDEX_NAME			"FDL Set Index"
#define SDCA_CTL_FDL_HOST_REQUEST_NAME			"FDL Host Request"
#define SDCA_CTL_CLOCK_VALID_NAME			"Clock Valid"
#define SDCA_CTL_SAMPLERATEINDEX_NAME			"Sample Rate Index"
#define SDCA_CTL_CLOCK_SELECT_NAME			"Clock Select"
#define SDCA_CTL_REQUESTED_PS_NAME			"Requested PS"
#define SDCA_CTL_ACTUAL_PS_NAME				"Actual PS"
#define SDCA_CTL_SELECTED_MODE_NAME			"Selected Mode"
#define SDCA_CTL_DETECTED_MODE_NAME			"Detected Mode"
#define SDCA_CTL_PRIVATE_NAME				"Private"
#define SDCA_CTL_PRIVACY_POLICY_NAME			"Privacy Policy"
#define SDCA_CTL_PRIVACY_LOCKSTATE_NAME			"Privacy Lockstate"
#define SDCA_CTL_PRIVACY_OWNER_NAME			"Privacy Owner"
#define SDCA_CTL_AUTHTX_CURRENTOWNER_NAME		"AuthTX Current Owner"
#define SDCA_CTL_AUTHTX_MESSAGEOFFSET_NAME		"AuthTX Message Offset"
#define SDCA_CTL_AUTHTX_MESSAGELENGTH_NAME		"AuthTX Message Length"
#define SDCA_CTL_AUTHRX_CURRENTOWNER_NAME		"AuthRX Current Owner"
#define SDCA_CTL_AUTHRX_MESSAGEOFFSET_NAME		"AuthRX Message Offset"
#define SDCA_CTL_AUTHRX_MESSAGELENGTH_NAME		"AuthRX Message Length"
#define SDCA_CTL_ACOUSTIC_ENERGY_LEVEL_MONITOR_NAME	"Acoustic Energy Level Monitor"
#define SDCA_CTL_ULTRASOUND_LOOP_GAIN_NAME		"Ultrasound Loop Gain"
#define SDCA_CTL_OPAQUESET_0_NAME			"Opaqueset 0"
#define SDCA_CTL_OPAQUESET_1_NAME			"Opaqueset 1"
#define SDCA_CTL_OPAQUESET_2_NAME			"Opaqueset 2"
#define SDCA_CTL_OPAQUESET_3_NAME			"Opaqueset 3"
#define SDCA_CTL_OPAQUESET_4_NAME			"Opaqueset 4"
#define SDCA_CTL_OPAQUESET_5_NAME			"Opaqueset 5"
#define SDCA_CTL_OPAQUESET_6_NAME			"Opaqueset 6"
#define SDCA_CTL_OPAQUESET_7_NAME			"Opaqueset 7"
#define SDCA_CTL_OPAQUESET_8_NAME			"Opaqueset 8"
#define SDCA_CTL_OPAQUESET_9_NAME			"Opaqueset 9"
#define SDCA_CTL_OPAQUESET_10_NAME			"Opaqueset 10"
#define SDCA_CTL_OPAQUESET_11_NAME			"Opaqueset 11"
#define SDCA_CTL_OPAQUESET_12_NAME			"Opaqueset 12"
#define SDCA_CTL_OPAQUESET_13_NAME			"Opaqueset 13"
#define SDCA_CTL_OPAQUESET_14_NAME			"Opaqueset 14"
#define SDCA_CTL_OPAQUESET_15_NAME			"Opaqueset 15"
#define SDCA_CTL_OPAQUESET_16_NAME			"Opaqueset 16"
#define SDCA_CTL_OPAQUESET_17_NAME			"Opaqueset 17"
#define SDCA_CTL_OPAQUESET_18_NAME			"Opaqueset 18"
#define SDCA_CTL_OPAQUESET_19_NAME			"Opaqueset 19"
#define SDCA_CTL_OPAQUESET_20_NAME			"Opaqueset 20"
#define SDCA_CTL_OPAQUESET_21_NAME			"Opaqueset 21"
#define SDCA_CTL_OPAQUESET_22_NAME			"Opaqueset 22"
#define SDCA_CTL_OPAQUESET_23_NAME			"Opaqueset 23"
#define SDCA_CTL_ALGORITHM_READY_NAME			"Algorithm Ready"
#define SDCA_CTL_ALGORITHM_ENABLE_NAME			"Algorithm Enable"
#define SDCA_CTL_ALGORITHM_PREPARE_NAME			"Algorithm Prepare"
#define SDCA_CTL_CENTER_FREQUENCY_INDEX_NAME		"Center Frequency Index"
#define SDCA_CTL_ULTRASOUND_LEVEL_NAME			"Ultrasound Level"
#define SDCA_CTL_AE_NUMBER_NAME				"AE Number"
#define SDCA_CTL_AE_CURRENTOWNER_NAME			"AE Current Owner"
#define SDCA_CTL_AE_MESSAGEOFFSET_NAME			"AE Message Offset"
#define SDCA_CTL_AE_MESSAGELENGTH_NAME			"AE Message Length"
#define SDCA_CTL_TRIGGER_ENABLE_NAME			"Trigger Enable"
#define SDCA_CTL_TRIGGER_STATUS_NAME			"Trigger Status"
#define SDCA_CTL_HIST_BUFFER_MODE_NAME			"Hist Buffer Mode"
#define SDCA_CTL_HIST_BUFFER_PREAMBLE_NAME		"Hist Buffer Preamble"
#define SDCA_CTL_HIST_ERROR_NAME			"Hist Error"
#define SDCA_CTL_TRIGGER_EXTENSION_NAME			"Trigger Extension"
#define SDCA_CTL_TRIGGER_READY_NAME			"Trigger Ready"
#define SDCA_CTL_HIST_CURRENTOWNER_NAME			"Hist Current Owner"
#define SDCA_CTL_HIST_MESSAGEOFFSET_NAME		"Hist Message Offset"
#define SDCA_CTL_HIST_MESSAGELENGTH_NAME		"Hist Message Length"
#define SDCA_CTL_DTODTX_CURRENTOWNER_NAME		"DTODTX Current Owner"
#define SDCA_CTL_DTODTX_MESSAGEOFFSET_NAME		"DTODTX Message Offset"
#define SDCA_CTL_DTODTX_MESSAGELENGTH_NAME		"DTODTX Message Length"
#define SDCA_CTL_DTODRX_CURRENTOWNER_NAME		"DTODRX Current Owner"
#define SDCA_CTL_DTODRX_MESSAGEOFFSET_NAME		"DTODRX Message Offset"
#define SDCA_CTL_DTODRX_MESSAGELENGTH_NAME		"DTODRX Message Length"
#define SDCA_CTL_PROTECTION_MODE_NAME			"Protection Mode"
#define SDCA_CTL_PROTECTION_STATUS_NAME			"Protection Status"
#define SDCA_CTL_OPAQUESETREQ_INDEX_NAME		"Opaqueset Req Index"
#define SDCA_CTL_DTODTX_CURRENTOWNER_NAME		"DTODTX Current Owner"
#define SDCA_CTL_DTODTX_MESSAGEOFFSET_NAME		"DTODTX Message Offset"
#define SDCA_CTL_DTODTX_MESSAGELENGTH_NAME		"DTODTX Message Length"
#define SDCA_CTL_DTODRX_CURRENTOWNER_NAME		"DTODRX Current Owner"
#define SDCA_CTL_DTODRX_MESSAGEOFFSET_NAME		"DTODRX Message Offset"
#define SDCA_CTL_DTODRX_MESSAGELENGTH_NAME		"DTODRX Message Length"
#define SDCA_CTL_POSTURENUMBER_NAME			"Posture Number"
#define SDCA_CTL_POSTUREEXTENSION_NAME			"Posture Extension"
#define SDCA_CTL_HORIZONTALBALANCE_NAME			"Horizontal Balance"
#define SDCA_CTL_VERTICALBALANCE_NAME			"Vertical Balance"
#define SDCA_CTL_TONE_DIVIDER_NAME			"Tone Divider"
#define SDCA_CTL_HIDTX_CURRENTOWNER_NAME		"HIDTX Current Owner"
#define SDCA_CTL_HIDTX_MESSAGEOFFSET_NAME		"HIDTX Message Offset"
#define SDCA_CTL_HIDTX_MESSAGELENGTH_NAME		"HIDTX Message Length"
#define SDCA_CTL_HIDRX_CURRENTOWNER_NAME		"HIDRX Current Owner"
#define SDCA_CTL_HIDRX_MESSAGEOFFSET_NAME		"HIDRX Message Offset"
#define SDCA_CTL_HIDRX_MESSAGELENGTH_NAME		"HIDRX Message Length"
#define SDCA_CTL_COMMIT_GROUP_MASK_NAME			"Commit Group Mask"
#define SDCA_CTL_FUNCTION_SDCA_VERSION_NAME		"Function SDCA Version"
#define SDCA_CTL_FUNCTION_TYPE_NAME			"Function Type"
#define SDCA_CTL_FUNCTION_MANUFACTURER_ID_NAME		"Function Manufacturer ID"
#define SDCA_CTL_FUNCTION_ID_NAME			"Function ID"
#define SDCA_CTL_FUNCTION_VERSION_NAME			"Function Version"
#define SDCA_CTL_FUNCTION_EXTENSION_ID_NAME		"Function Extension ID"
#define SDCA_CTL_FUNCTION_EXTENSION_VERSION_NAME	"Function Extension Version"
#define SDCA_CTL_FUNCTION_STATUS_NAME			"Function Status"
#define SDCA_CTL_FUNCTION_ACTION_NAME			"Function Action"
#define SDCA_CTL_DEVICE_MANUFACTURER_ID_NAME		"Device Manufacturer ID"
#define SDCA_CTL_DEVICE_PART_ID_NAME			"Device Part ID"
#define SDCA_CTL_DEVICE_VERSION_NAME			"Device Version"
#define SDCA_CTL_DEVICE_SDCA_VERSION_NAME		"Device SDCA Version"

/**
 * enum sdca_control_datatype - SDCA Control Data Types
 *
 * Data Types as described in the SDCA specification v1.0 section
 * 7.3.
 */
enum sdca_control_datatype {
	SDCA_CTL_DATATYPE_ONEBIT,
	SDCA_CTL_DATATYPE_INTEGER,
	SDCA_CTL_DATATYPE_SPEC_ENCODED_VALUE,
	SDCA_CTL_DATATYPE_BCD,
	SDCA_CTL_DATATYPE_Q7P8DB,
	SDCA_CTL_DATATYPE_BYTEINDEX,
	SDCA_CTL_DATATYPE_POSTURENUMBER,
	SDCA_CTL_DATATYPE_DP_INDEX,
	SDCA_CTL_DATATYPE_BITINDEX,
	SDCA_CTL_DATATYPE_BITMAP,
	SDCA_CTL_DATATYPE_GUID,
	SDCA_CTL_DATATYPE_IMPDEF,
};

/**
 * enum sdca_access_mode - SDCA Control access mode
 *
 * Access modes as described in the SDCA specification v1.0 section
 * 7.1.8.2.
 */
enum sdca_access_mode {
	SDCA_ACCESS_MODE_RW				= 0x0,
	SDCA_ACCESS_MODE_DUAL				= 0x1,
	SDCA_ACCESS_MODE_RW1C				= 0x2,
	SDCA_ACCESS_MODE_RO				= 0x3,
	SDCA_ACCESS_MODE_RW1S				= 0x4,
	SDCA_ACCESS_MODE_DC				= 0x5,
};

/**
 * enum sdca_access_layer - SDCA Control access layer
 *
 * Access layers as described in the SDCA specification v1.0 section
 * 7.1.9.
 */
enum sdca_access_layer {
	SDCA_ACCESS_LAYER_USER				= 1 << 0,
	SDCA_ACCESS_LAYER_APPLICATION			= 1 << 1,
	SDCA_ACCESS_LAYER_CLASS				= 1 << 2,
	SDCA_ACCESS_LAYER_PLATFORM			= 1 << 3,
	SDCA_ACCESS_LAYER_DEVICE			= 1 << 4,
	SDCA_ACCESS_LAYER_EXTENSION			= 1 << 5,
};

/**
 * struct sdca_control_range - SDCA Control range table
 * @cols: Number of columns in the range table.
 * @rows: Number of rows in the range table.
 * @data: Array of values contained in the range table.
 */
struct sdca_control_range {
	unsigned int cols;
	unsigned int rows;
	u32 *data;
};

/**
 * struct sdca_control - information for one SDCA Control
 * @label: Name for the Control, from SDCA Specification v1.0, section 7.1.7.
 * @sel: Identifier used for addressing.
 * @nbits: Number of bits used in the Control.
 * @values: Holds the Control value for constants and defaults.
 * @cn_list: A bitmask showing the valid Control Numbers within this Control,
 * Control Numbers typically represent channels.
 * @interrupt_position: SCDA interrupt line that will alert to changes on this
 * Control.
 * @type: Format of the data in the Control.
 * @range: Buffer describing valid range of values for the Control.
 * @mode: Access mode of the Control.
 * @layers: Bitmask of access layers of the Control.
 * @deferrable: Indicates if the access to the Control can be deferred.
 * @has_default: Indicates the Control has a default value to be written.
 * @has_fixed: Indicates the Control only supports a single value.
 */
struct sdca_control {
	const char *label;
	int sel;

	int nbits;
	int *values;
	u64 cn_list;
	int interrupt_position;

	enum sdca_control_datatype type;
	struct sdca_control_range range;
	enum sdca_access_mode mode;
	u8 layers;

	bool deferrable;
	bool is_volatile;
	bool has_default;
	bool has_fixed;
};

/**
 * enum sdca_terminal_type - SDCA Terminal Types
 *
 * Indicate what a Terminal Entity is used for, see in section 6.2.3
 * of the SDCA v1.0 specification.
 */
enum sdca_terminal_type {
	/* Table 77 - Data Port*/
	SDCA_TERM_TYPE_GENERIC				= 0x101,
	SDCA_TERM_TYPE_ULTRASOUND			= 0x180,
	SDCA_TERM_TYPE_CAPTURE_DIRECT_PCM_MIC		= 0x181,
	SDCA_TERM_TYPE_RAW_PDM_MIC			= 0x182,
	SDCA_TERM_TYPE_SPEECH				= 0x183,
	SDCA_TERM_TYPE_VOICE				= 0x184,
	SDCA_TERM_TYPE_SECONDARY_PCM_MIC		= 0x185,
	SDCA_TERM_TYPE_ACOUSTIC_CONTEXT_AWARENESS	= 0x186,
	SDCA_TERM_TYPE_DTOD_STREAM			= 0x187,
	SDCA_TERM_TYPE_REFERENCE_STREAM			= 0x188,
	SDCA_TERM_TYPE_SENSE_CAPTURE			= 0x189,
	SDCA_TERM_TYPE_STREAMING_MIC			= 0x18A,
	SDCA_TERM_TYPE_OPTIMIZATION_STREAM		= 0x190,
	SDCA_TERM_TYPE_PDM_RENDER_STREAM		= 0x191,
	SDCA_TERM_TYPE_COMPANION_DATA			= 0x192,
	/* Table 78 - Transducer */
	SDCA_TERM_TYPE_MICROPHONE_TRANSDUCER		= 0x201,
	SDCA_TERM_TYPE_MICROPHONE_ARRAY_TRANSDUCER	= 0x205,
	SDCA_TERM_TYPE_PRIMARY_FULL_RANGE_SPEAKER	= 0x380,
	SDCA_TERM_TYPE_PRIMARY_LFE_SPEAKER		= 0x381,
	SDCA_TERM_TYPE_PRIMARY_TWEETER_SPEAKER		= 0x382,
	SDCA_TERM_TYPE_PRIMARY_ULTRASOUND_SPEAKER	= 0x383,
	SDCA_TERM_TYPE_SECONDARY_FULL_RANGE_SPEAKER	= 0x390,
	SDCA_TERM_TYPE_SECONDARY_LFE_SPEAKER		= 0x391,
	SDCA_TERM_TYPE_SECONDARY_TWEETER_SPEAKER	= 0x392,
	SDCA_TERM_TYPE_SECONDARY_ULTRASOUND_SPEAKER	= 0x393,
	SDCA_TERM_TYPE_TERTIARY_FULL_RANGE_SPEAKER	= 0x3A0,
	SDCA_TERM_TYPE_TERTIARY_LFE_SPEAKER		= 0x3A1,
	SDCA_TERM_TYPE_TERTIARY_TWEETER_SPEAKER		= 0x3A2,
	SDCA_TERM_TYPE_TERTIARY_ULTRASOUND_SPEAKER	= 0x3A3,
	SDCA_TERM_TYPE_SPDIF				= 0x605,
	SDCA_TERM_TYPE_NDAI_DISPLAY_AUDIO		= 0x610,
	SDCA_TERM_TYPE_NDAI_USB				= 0x612,
	SDCA_TERM_TYPE_NDAI_BLUETOOTH_MAIN		= 0x614,
	SDCA_TERM_TYPE_NDAI_BLUETOOTH_ALTERNATE		= 0x615,
	SDCA_TERM_TYPE_NDAI_BLUETOOTH_BOTH		= 0x616,
	SDCA_TERM_TYPE_LINEIN_STEREO			= 0x680,
	SDCA_TERM_TYPE_LINEIN_FRONT_LR			= 0x681,
	SDCA_TERM_TYPE_LINEIN_CENTER_LFE		= 0x682,
	SDCA_TERM_TYPE_LINEIN_SURROUND_LR		= 0x683,
	SDCA_TERM_TYPE_LINEIN_REAR_LR			= 0x684,
	SDCA_TERM_TYPE_LINEOUT_STEREO			= 0x690,
	SDCA_TERM_TYPE_LINEOUT_FRONT_LR			= 0x691,
	SDCA_TERM_TYPE_LINEOUT_CENTER_LFE		= 0x692,
	SDCA_TERM_TYPE_LINEOUT_SURROUND_LR		= 0x693,
	SDCA_TERM_TYPE_LINEOUT_REAR_LR			= 0x694,
	SDCA_TERM_TYPE_MIC_JACK				= 0x6A0,
	SDCA_TERM_TYPE_STEREO_JACK			= 0x6B0,
	SDCA_TERM_TYPE_FRONT_LR_JACK			= 0x6B1,
	SDCA_TERM_TYPE_CENTER_LFE_JACK			= 0x6B2,
	SDCA_TERM_TYPE_SURROUND_LR_JACK			= 0x6B3,
	SDCA_TERM_TYPE_REAR_LR_JACK			= 0x6B4,
	SDCA_TERM_TYPE_HEADPHONE_JACK			= 0x6C0,
	SDCA_TERM_TYPE_HEADSET_JACK			= 0x6D0,
	/* Table 79 - System */
	SDCA_TERM_TYPE_SENSE_DATA			= 0x280,
	SDCA_TERM_TYPE_PRIVACY_SIGNALING		= 0x741,
	SDCA_TERM_TYPE_PRIVACY_INDICATORS		= 0x747,
};

#define SDCA_TERM_TYPE_LINEIN_STEREO_NAME		"LineIn Stereo"
#define SDCA_TERM_TYPE_LINEIN_FRONT_LR_NAME		"LineIn Front-LR"
#define SDCA_TERM_TYPE_LINEIN_CENTER_LFE_NAME		"LineIn Center-LFE"
#define SDCA_TERM_TYPE_LINEIN_SURROUND_LR_NAME		"LineIn Surround-LR"
#define SDCA_TERM_TYPE_LINEIN_REAR_LR_NAME		"LineIn Rear-LR"
#define SDCA_TERM_TYPE_LINEOUT_STEREO_NAME		"LineOut Stereo"
#define SDCA_TERM_TYPE_LINEOUT_FRONT_LR_NAME		"LineOut Front-LR"
#define SDCA_TERM_TYPE_LINEOUT_CENTER_LFE_NAME		"LineOut Center-LFE"
#define SDCA_TERM_TYPE_LINEOUT_SURROUND_LR_NAME		"LineOut Surround-LR"
#define SDCA_TERM_TYPE_LINEOUT_REAR_LR_NAME		"LineOut Rear-LR"
#define SDCA_TERM_TYPE_MIC_JACK_NAME			"Microphone"
#define SDCA_TERM_TYPE_STEREO_JACK_NAME			"Speaker Stereo"
#define SDCA_TERM_TYPE_FRONT_LR_JACK_NAME		"Speaker Front-LR"
#define SDCA_TERM_TYPE_CENTER_LFE_JACK_NAME		"Speaker Center-LFE"
#define SDCA_TERM_TYPE_SURROUND_LR_JACK_NAME		"Speaker Surround-LR"
#define SDCA_TERM_TYPE_REAR_LR_JACK_NAME		"Speaker Rear-LR"
#define SDCA_TERM_TYPE_HEADPHONE_JACK_NAME		"Headphone"
#define SDCA_TERM_TYPE_HEADSET_JACK_NAME		"Headset"

/**
 * enum sdca_connector_type - SDCA Connector Types
 *
 * Indicate the type of Connector that a Terminal Entity represents,
 * see section 6.2.4 of the SDCA v1.0 specification.
 */
enum sdca_connector_type {
	SDCA_CONN_TYPE_UNKNOWN				= 0x00,
	SDCA_CONN_TYPE_2P5MM_JACK			= 0x01,
	SDCA_CONN_TYPE_3P5MM_JACK			= 0x02,
	SDCA_CONN_TYPE_QUARTER_INCH_JACK		= 0x03,
	SDCA_CONN_TYPE_XLR				= 0x05,
	SDCA_CONN_TYPE_SPDIF_OPTICAL			= 0x06,
	SDCA_CONN_TYPE_RCA				= 0x07,
	SDCA_CONN_TYPE_DIN				= 0x0E,
	SDCA_CONN_TYPE_MINI_DIN				= 0x0F,
	SDCA_CONN_TYPE_EIAJ_OPTICAL			= 0x13,
	SDCA_CONN_TYPE_HDMI				= 0x14,
	SDCA_CONN_TYPE_DISPLAYPORT			= 0x17,
	SDCA_CONN_TYPE_LIGHTNING			= 0x1B,
	SDCA_CONN_TYPE_USB_C				= 0x1E,
	SDCA_CONN_TYPE_OTHER				= 0xFF,
};

/**
 * struct sdca_entity_iot - information specific to Input/Output Entities
 * @clock: Pointer to the Entity providing this Terminal's clock.
 * @type: Usage of the Terminal Entity.
 * @connector: Physical Connector of the Terminal Entity.
 * @reference: Physical Jack number of the Terminal Entity.
 * @num_transducer: Number of transducers attached to the Terminal Entity.
 * @is_dataport: Boolean indicating if this Terminal represents a Dataport.
 */
struct sdca_entity_iot {
	struct sdca_entity *clock;

	enum sdca_terminal_type type;
	enum sdca_connector_type connector;
	int reference;
	int num_transducer;

	bool is_dataport;
};

/**
 * enum sdca_clock_type - SDCA Clock Types
 *
 * Indicate the synchronicity of an Clock Entity, see section 6.4.1.3
 * of the SDCA v1.0 specification.
 */
enum sdca_clock_type {
	SDCA_CLOCK_TYPE_EXTERNAL			= 0x00,
	SDCA_CLOCK_TYPE_INTERNAL_ASYNC			= 0x01,
	SDCA_CLOCK_TYPE_INTERNAL_SYNC			= 0x02,
	SDCA_CLOCK_TYPE_INTERNAL_SOURCE_SYNC		= 0x03,
};

/**
 * struct sdca_entity_cs - information specific to Clock Source Entities
 * @type: Synchronicity of the Clock Source.
 * @max_delay: The maximum delay in microseconds before the clock is stable.
 */
struct sdca_entity_cs {
	enum sdca_clock_type type;
	unsigned int max_delay;
};

/**
 * enum sdca_pde_power_state - SDCA Power States
 *
 * SDCA Power State values from SDCA specification v1.0 Section 7.12.4.
 */
enum sdca_pde_power_state {
	SDCA_PDE_PS0					= 0x0,
	SDCA_PDE_PS1					= 0x1,
	SDCA_PDE_PS2					= 0x2,
	SDCA_PDE_PS3					= 0x3,
	SDCA_PDE_PS4					= 0x4,
};

/**
 * struct sdca_pde_delay - describes the delay changing between 2 power states
 * @from_ps: The power state being exited.
 * @to_ps: The power state being entered.
 * @us: The delay in microseconds switching between the two states.
 */
struct sdca_pde_delay {
	int from_ps;
	int to_ps;
	unsigned int us;
};

/**
 * struct sdca_entity_pde - information specific to Power Domain Entities
 * @managed: Dynamically allocated array pointing to each Entity
 * controlled by this PDE.
 * @max_delay: Dynamically allocated array of delays for switching
 * between power states.
 * @num_managed: Number of Entities controlled by this PDE.
 * @num_max_delay: Number of delays specified for state changes.
 */
struct sdca_entity_pde {
	struct sdca_entity **managed;
	struct sdca_pde_delay *max_delay;
	int num_managed;
	int num_max_delay;
};

/**
 * enum sdca_entity_type - SDCA Entity Type codes
 * @SDCA_ENTITY_TYPE_ENTITY_0: Entity 0, not actually from the
 * specification but useful internally as an Entity structure
 * is allocated for Entity 0, to hold Entity 0 controls.
 * @SDCA_ENTITY_TYPE_IT: Input Terminal.
 * @SDCA_ENTITY_TYPE_OT: Output Terminal.
 * @SDCA_ENTITY_TYPE_MU: Mixer Unit.
 * @SDCA_ENTITY_TYPE_SU: Selector Unit.
 * @SDCA_ENTITY_TYPE_FU: Feature Unit.
 * @SDCA_ENTITY_TYPE_XU: Extension Unit.
 * @SDCA_ENTITY_TYPE_CS: Clock Source.
 * @SDCA_ENTITY_TYPE_CX: Clock selector.
 * @SDCA_ENTITY_TYPE_PDE: Power-Domain Entity.
 * @SDCA_ENTITY_TYPE_GE: Group Entity.
 * @SDCA_ENTITY_TYPE_SPE: Security & Privacy Entity.
 * @SDCA_ENTITY_TYPE_CRU: Channel Remapping Unit.
 * @SDCA_ENTITY_TYPE_UDMPU: Up-Down Mixer Processing Unit.
 * @SDCA_ENTITY_TYPE_MFPU: Multi-Function Processing Unit.
 * @SDCA_ENTITY_TYPE_SMPU: Smart Microphone Processing Unit.
 * @SDCA_ENTITY_TYPE_SAPU: Smart Amp Processing Unit.
 * @SDCA_ENTITY_TYPE_PPU: Posture Processing Unit.
 * @SDCA_ENTITY_TYPE_TG: Tone Generator.
 * @SDCA_ENTITY_TYPE_HIDE: Human Interface Device Entity.
 *
 * SDCA Entity Types from SDCA specification v1.0 Section 6.1.2
 * all Entity Types not described are reserved.
 */
enum sdca_entity_type {
	SDCA_ENTITY_TYPE_ENTITY_0			= 0x00,
	SDCA_ENTITY_TYPE_IT				= 0x02,
	SDCA_ENTITY_TYPE_OT				= 0x03,
	SDCA_ENTITY_TYPE_MU				= 0x05,
	SDCA_ENTITY_TYPE_SU				= 0x06,
	SDCA_ENTITY_TYPE_FU				= 0x07,
	SDCA_ENTITY_TYPE_XU				= 0x0A,
	SDCA_ENTITY_TYPE_CS				= 0x0B,
	SDCA_ENTITY_TYPE_CX				= 0x0C,
	SDCA_ENTITY_TYPE_PDE				= 0x11,
	SDCA_ENTITY_TYPE_GE				= 0x12,
	SDCA_ENTITY_TYPE_SPE				= 0x13,
	SDCA_ENTITY_TYPE_CRU				= 0x20,
	SDCA_ENTITY_TYPE_UDMPU				= 0x21,
	SDCA_ENTITY_TYPE_MFPU				= 0x22,
	SDCA_ENTITY_TYPE_SMPU				= 0x23,
	SDCA_ENTITY_TYPE_SAPU				= 0x24,
	SDCA_ENTITY_TYPE_PPU				= 0x25,
	SDCA_ENTITY_TYPE_TG				= 0x30,
	SDCA_ENTITY_TYPE_HIDE				= 0x31,
};

/**
 * struct sdca_ge_control - control entry in the affected controls list
 * @id: Entity ID of the Control affected.
 * @sel: Control Selector of the Control affected.
 * @cn: Control Number of the Control affected.
 * @val: Value written to Control for this Mode.
 */
struct sdca_ge_control {
	int id;
	int sel;
	int cn;
	int val;
};

/**
 * struct sdca_ge_mode - mode entry in the affected controls list
 * @controls: Dynamically allocated array of controls written for this Mode.
 * @num_controls: Number of controls written in this Mode.
 * @val: GE Selector Mode value.
 */
struct sdca_ge_mode {
	struct sdca_ge_control *controls;
	int num_controls;
	int val;
};

/**
 * struct sdca_entity_ge - information specific to Group Entities
 * @kctl: ALSA control pointer that can be used by linked Entities.
 * @modes: Dynamically allocated array of Modes and the Controls written
 * in each mode.
 * @num_modes: Number of Modes.
 */
struct sdca_entity_ge {
	struct snd_kcontrol_new *kctl;
	struct sdca_ge_mode *modes;
	int num_modes;
};

/**
 * struct sdca_entity_hide - information specific to HIDE Entities
 * @hid: HID device structure
 * @num_hidtx_ids: number of HIDTx Report ID
 * @num_hidrx_ids: number of HIDRx Report ID
 * @hidtx_ids: HIDTx Report ID
 * @hidrx_ids: HIDRx Report ID
 * @af_number_list: which Audio Function Numbers within this Device are
 * sending/receiving the messages in this HIDE
 * @hide_reside_function_num: indicating which Audio Function Numbers
 * within this Device
 * @max_delay: the maximum time in microseconds allowed for the Device
 * to change the ownership from Device to Host
 * @hid_report_desc: HID Report Descriptor for the HIDE Entity
 * @hid_desc: HID descriptor for the HIDE Entity
 */
struct sdca_entity_hide {
	struct hid_device *hid;
	unsigned int *hidtx_ids;
	unsigned int *hidrx_ids;
	int num_hidtx_ids;
	int num_hidrx_ids;
	unsigned int af_number_list[SDCA_MAX_FUNCTION_COUNT];
	unsigned int hide_reside_function_num;
	unsigned int max_delay;
	unsigned char *hid_report_desc;
	struct hid_descriptor hid_desc;
};

/**
 * enum sdca_xu_reset_machanism - SDCA FDL Resets
 */
enum sdca_xu_reset_mechanism {
	SDCA_XU_RESET_FUNCTION				= 0x0,
	SDCA_XU_RESET_DEVICE				= 0x1,
	SDCA_XU_RESET_BUS				= 0x2,
};

/**
 * struct sdca_entity_xu - information specific to XU Entities
 * @max_delay: the maximum time in microseconds allowed for the Device
 * to change the ownership from Device to Host
 * @reset_mechanism: indicates the type of reset that can be requested
 * the end of an FDL.
 */
struct sdca_entity_xu {
	unsigned int max_delay;
	enum sdca_xu_reset_mechanism reset_mechanism;
};

/**
 * struct sdca_entity - information for one SDCA Entity
 * @label: String such as "OT 12".
 * @id: Identifier used for addressing.
 * @type: Type code for the Entity.
 * @group: Pointer to Group Entity controlling this one, NULL if N/A.
 * @sources: Dynamically allocated array pointing to each input Entity
 * connected to this Entity.
 * @controls: Dynamically allocated array of Controls.
 * @num_sources: Number of sources for the Entity.
 * @num_controls: Number of Controls for the Entity.
 * @iot: Input/Output Terminal specific Entity properties.
 * @cs: Clock Source specific Entity properties.
 * @pde: Power Domain Entity specific Entity properties.
 * @ge: Group Entity specific Entity properties.
 * @hide: HIDE Entity specific Entity properties.
 * @xu: XU Entity specific Entity properties.
 */
struct sdca_entity {
	const char *label;
	int id;
	enum sdca_entity_type type;

	struct sdca_entity *group;
	struct sdca_entity **sources;
	struct sdca_control *controls;
	int num_sources;
	int num_controls;
	union {
		struct sdca_entity_iot iot;
		struct sdca_entity_cs cs;
		struct sdca_entity_pde pde;
		struct sdca_entity_ge ge;
		struct sdca_entity_hide hide;
		struct sdca_entity_xu xu;
	};
};

/**
 * enum sdca_channel_purpose - SDCA Channel Purpose code
 *
 * Channel Purpose codes as described in the SDCA specification v1.0
 * section 11.4.3.
 */
enum sdca_channel_purpose {
	/* Table 210 - Purpose */
	SDCA_CHAN_PURPOSE_GENERIC_AUDIO			= 0x01,
	SDCA_CHAN_PURPOSE_VOICE				= 0x02,
	SDCA_CHAN_PURPOSE_SPEECH			= 0x03,
	SDCA_CHAN_PURPOSE_AMBIENT			= 0x04,
	SDCA_CHAN_PURPOSE_REFERENCE			= 0x05,
	SDCA_CHAN_PURPOSE_ULTRASOUND			= 0x06,
	SDCA_CHAN_PURPOSE_SENSE				= 0x08,
	SDCA_CHAN_PURPOSE_SILENCE			= 0xFE,
	SDCA_CHAN_PURPOSE_NON_AUDIO			= 0xFF,
	/* Table 211 - Amp Sense */
	SDCA_CHAN_PURPOSE_SENSE_V1			= 0x09,
	SDCA_CHAN_PURPOSE_SENSE_V2			= 0x0A,
	SDCA_CHAN_PURPOSE_SENSE_V12_INTERLEAVED		= 0x10,
	SDCA_CHAN_PURPOSE_SENSE_V21_INTERLEAVED		= 0x11,
	SDCA_CHAN_PURPOSE_SENSE_V12_PACKED		= 0x12,
	SDCA_CHAN_PURPOSE_SENSE_V21_PACKED		= 0x13,
	SDCA_CHAN_PURPOSE_SENSE_V1212_INTERLEAVED	= 0x14,
	SDCA_CHAN_PURPOSE_SENSE_V2121_INTERLEAVED	= 0x15,
	SDCA_CHAN_PURPOSE_SENSE_V1122_INTERLEAVED	= 0x16,
	SDCA_CHAN_PURPOSE_SENSE_V2211_INTERLEAVED	= 0x17,
	SDCA_CHAN_PURPOSE_SENSE_V1212_PACKED		= 0x18,
	SDCA_CHAN_PURPOSE_SENSE_V2121_PACKED		= 0x19,
	SDCA_CHAN_PURPOSE_SENSE_V1122_PACKED		= 0x1A,
	SDCA_CHAN_PURPOSE_SENSE_V2211_PACKED		= 0x1B,
};

/**
 * enum sdca_channel_relationship - SDCA Channel Relationship code
 *
 * Channel Relationship codes as described in the SDCA specification
 * v1.0 section 11.4.2.
 */
enum sdca_channel_relationship {
	/* Table 206 - Streaming */
	SDCA_CHAN_REL_UNDEFINED				= 0x00,
	SDCA_CHAN_REL_GENERIC_MONO			= 0x01,
	SDCA_CHAN_REL_GENERIC_LEFT			= 0x02,
	SDCA_CHAN_REL_GENERIC_RIGHT			= 0x03,
	SDCA_CHAN_REL_GENERIC_TOP			= 0x48,
	SDCA_CHAN_REL_GENERIC_BOTTOM			= 0x49,
	SDCA_CHAN_REL_CAPTURE_DIRECT			= 0x4E,
	SDCA_CHAN_REL_RENDER_DIRECT			= 0x4F,
	SDCA_CHAN_REL_FRONT_LEFT			= 0x0B,
	SDCA_CHAN_REL_FRONT_RIGHT			= 0x0C,
	SDCA_CHAN_REL_FRONT_CENTER			= 0x0D,
	SDCA_CHAN_REL_SIDE_LEFT				= 0x12,
	SDCA_CHAN_REL_SIDE_RIGHT			= 0x13,
	SDCA_CHAN_REL_BACK_LEFT				= 0x16,
	SDCA_CHAN_REL_BACK_RIGHT			= 0x17,
	SDCA_CHAN_REL_LOW_FREQUENCY_EFFECTS		= 0x43,
	SDCA_CHAN_REL_SOUNDWIRE_MIC			= 0x55,
	SDCA_CHAN_REL_SENSE_TRANSDUCER_1		= 0x58,
	SDCA_CHAN_REL_SENSE_TRANSDUCER_2		= 0x59,
	SDCA_CHAN_REL_SENSE_TRANSDUCER_12		= 0x5A,
	SDCA_CHAN_REL_SENSE_TRANSDUCER_21		= 0x5B,
	SDCA_CHAN_REL_ECHOREF_NONE			= 0x70,
	SDCA_CHAN_REL_ECHOREF_1				= 0x71,
	SDCA_CHAN_REL_ECHOREF_2				= 0x72,
	SDCA_CHAN_REL_ECHOREF_3				= 0x73,
	SDCA_CHAN_REL_ECHOREF_4				= 0x74,
	SDCA_CHAN_REL_ECHOREF_ALL			= 0x75,
	SDCA_CHAN_REL_ECHOREF_LFE_ALL			= 0x76,
	/* Table 207 - Speaker */
	SDCA_CHAN_REL_PRIMARY_TRANSDUCER		= 0x50,
	SDCA_CHAN_REL_SECONDARY_TRANSDUCER		= 0x51,
	SDCA_CHAN_REL_TERTIARY_TRANSDUCER		= 0x52,
	SDCA_CHAN_REL_LOWER_LEFT_ALLTRANSDUCER		= 0x60,
	SDCA_CHAN_REL_LOWER_RIGHT_ALLTRANSDUCER		= 0x61,
	SDCA_CHAN_REL_UPPER_LEFT_ALLTRANSDUCER		= 0x62,
	SDCA_CHAN_REL_UPPER_RIGHT_ALLTRANSDUCER		= 0x63,
	SDCA_CHAN_REL_LOWER_LEFT_PRIMARY		= 0x64,
	SDCA_CHAN_REL_LOWER_RIGHT_PRIMARY		= 0x65,
	SDCA_CHAN_REL_UPPER_LEFT_PRIMARY		= 0x66,
	SDCA_CHAN_REL_UPPER_RIGHT_PRIMARY		= 0x67,
	SDCA_CHAN_REL_LOWER_LEFT_SECONDARY		= 0x68,
	SDCA_CHAN_REL_LOWER_RIGHT_SECONDARY		= 0x69,
	SDCA_CHAN_REL_UPPER_LEFT_SECONDARY		= 0x6A,
	SDCA_CHAN_REL_UPPER_RIGHT_SECONDARY		= 0x6B,
	SDCA_CHAN_REL_LOWER_LEFT_TERTIARY		= 0x6C,
	SDCA_CHAN_REL_LOWER_RIGHT_TERTIARY		= 0x6D,
	SDCA_CHAN_REL_UPPER_LEFT_TERTIARY		= 0x6E,
	SDCA_CHAN_REL_UPPER_RIGHT_TERTIARY		= 0x6F,
	SDCA_CHAN_REL_DERIVED_LOWER_LEFT_PRIMARY	= 0x94,
	SDCA_CHAN_REL_DERIVED_LOWER_RIGHT_PRIMARY	= 0x95,
	SDCA_CHAN_REL_DERIVED_UPPER_LEFT_PRIMARY	= 0x96,
	SDCA_CHAN_REL_DERIVED_UPPER_RIGHT_PRIMARY	= 0x97,
	SDCA_CHAN_REL_DERIVED_LOWER_LEFT_SECONDARY	= 0x98,
	SDCA_CHAN_REL_DERIVED_LOWER_RIGHT_SECONDARY	= 0x99,
	SDCA_CHAN_REL_DERIVED_UPPER_LEFT_SECONDARY	= 0x9A,
	SDCA_CHAN_REL_DERIVED_UPPER_RIGHT_SECONDARY	= 0x9B,
	SDCA_CHAN_REL_DERIVED_LOWER_LEFT_TERTIARY	= 0x9C,
	SDCA_CHAN_REL_DERIVED_LOWER_RIGHT_TERTIARY	= 0x9D,
	SDCA_CHAN_REL_DERIVED_UPPER_LEFT_TERTIARY	= 0x9E,
	SDCA_CHAN_REL_DERIVED_UPPER_RIGHT_TERTIARY	= 0x9F,
	SDCA_CHAN_REL_DERIVED_MONO_PRIMARY		= 0xA0,
	SDCA_CHAN_REL_DERIVED_MONO_SECONDARY		= 0xAB,
	SDCA_CHAN_REL_DERIVED_MONO_TERTIARY		= 0xAC,
	/* Table 208 - Equipment */
	SDCA_CHAN_REL_EQUIPMENT_LEFT			= 0x02,
	SDCA_CHAN_REL_EQUIPMENT_RIGHT			= 0x03,
	SDCA_CHAN_REL_EQUIPMENT_COMBINED		= 0x47,
	SDCA_CHAN_REL_EQUIPMENT_TOP			= 0x48,
	SDCA_CHAN_REL_EQUIPMENT_BOTTOM			= 0x49,
	SDCA_CHAN_REL_EQUIPMENT_TOP_LEFT		= 0x4A,
	SDCA_CHAN_REL_EQUIPMENT_BOTTOM_LEFT		= 0x4B,
	SDCA_CHAN_REL_EQUIPMENT_TOP_RIGHT		= 0x4C,
	SDCA_CHAN_REL_EQUIPMENT_BOTTOM_RIGHT		= 0x4D,
	SDCA_CHAN_REL_EQUIPMENT_SILENCED_OUTPUT		= 0x57,
	/* Table 209 - Other */
	SDCA_CHAN_REL_ARRAY				= 0x04,
	SDCA_CHAN_REL_MIC				= 0x53,
	SDCA_CHAN_REL_RAW				= 0x54,
	SDCA_CHAN_REL_SILENCED_MIC			= 0x56,
	SDCA_CHAN_REL_MULTI_SOURCE_1			= 0x78,
	SDCA_CHAN_REL_MULTI_SOURCE_2			= 0x79,
	SDCA_CHAN_REL_MULTI_SOURCE_3			= 0x7A,
	SDCA_CHAN_REL_MULTI_SOURCE_4			= 0x7B,
};

/**
 * struct sdca_channel - a single Channel with a Cluster
 * @id: Identifier used for addressing.
 * @purpose: Indicates the purpose of the Channel, usually to give
 * semantic meaning to the audio, eg. voice, ultrasound.
 * @relationship: Indicates the relationship of this Channel to others
 * in the Cluster, often used to identify the physical position of the
 * Channel eg. left.
 */
struct sdca_channel {
	int id;
	enum sdca_channel_purpose purpose;
	enum sdca_channel_relationship relationship;
};

/**
 * struct sdca_cluster - information about an SDCA Channel Cluster
 * @id: Identifier used for addressing.
 * @num_channels: Number of Channels within this Cluster.
 * @channels: Dynamically allocated array of Channels.
 */
struct sdca_cluster {
	int id;
	int num_channels;
	struct sdca_channel *channels;
};

/**
 * enum sdca_cluster_range - SDCA Range column definitions for ClusterIndex
 */
enum sdca_cluster_range {
	SDCA_CLUSTER_BYTEINDEX				= 0,
	SDCA_CLUSTER_CLUSTERID				= 1,
	SDCA_CLUSTER_NCOLS				= 2,
};

/**
 * struct sdca_fdl_file - information about a file from a fileset used in FDL
 * @vendor_id: Vendor ID of the file.
 * @file_id: File ID of the file.
 * @fdl_offset: Offset information for FDL.
 */
struct sdca_fdl_file {
	u16 vendor_id;
	u32 file_id;
	u32 fdl_offset;
};

/**
 * struct sdca_fdl_set - information about a set of files used in FDL
 * @files: Array of files in this FDL set.
 * @num_files: Number of files in this FDL set.
 * @id: ID of the FDL set.
 */
struct sdca_fdl_set {
	struct sdca_fdl_file *files;
	int num_files;
	u32 id;
};

/**
 * struct sdca_fdl_data - information about a function's FDL data
 * @swft: Pointer to the SoundWire File Table.
 * @sets: Array of FDL sets used by this function.
 * @num_sets: Number of FDL sets used by this function.
 */
struct sdca_fdl_data {
	struct acpi_table_swft *swft;
	struct sdca_fdl_set *sets;
	int num_sets;
};

/**
 * struct sdca_function_data - top-level information for one SDCA function
 * @desc: Pointer to short descriptor from initial parsing.
 * @init_table: Pointer to a table of initialization writes.
 * @entities: Dynamically allocated array of Entities.
 * @clusters: Dynamically allocated array of Channel Clusters.
 * @num_init_table: Number of initialization writes.
 * @num_entities: Number of Entities reported in this Function.
 * @num_clusters: Number of Channel Clusters reported in this Function.
 * @busy_max_delay: Maximum Function busy delay in microseconds, before an
 * error should be reported.
 * @reset_max_delay: Maximum Function reset delay in microseconds, before an
 * error should be reported.
 * @fdl_data: FDL data for this Function, if available.
 */
struct sdca_function_data {
	struct sdca_function_desc *desc;

	struct sdca_init_write *init_table;
	struct sdca_entity *entities;
	struct sdca_cluster *clusters;
	int num_init_table;
	int num_entities;
	int num_clusters;

	unsigned int busy_max_delay;
	unsigned int reset_max_delay;

	struct sdca_fdl_data fdl_data;
};

static inline u32 sdca_range(struct sdca_control_range *range,
			     unsigned int col, unsigned int row)
{
	return range->data[(row * range->cols) + col];
}

static inline u32 sdca_range_search(struct sdca_control_range *range,
				    int search_col, int value, int result_col)
{
	int i;

	for (i = 0; i < range->rows; i++) {
		if (sdca_range(range, search_col, i) == value)
			return sdca_range(range, result_col, i);
	}

	return 0;
}

int sdca_parse_function(struct device *dev, struct sdw_slave *sdw,
			struct sdca_function_desc *desc,
			struct sdca_function_data *function);

const char *sdca_find_terminal_name(enum sdca_terminal_type type);

struct sdca_control *sdca_selector_find_control(struct device *dev,
						struct sdca_entity *entity,
						const int sel);
struct sdca_control_range *sdca_control_find_range(struct device *dev,
						   struct sdca_entity *entity,
						   struct sdca_control *control,
						   int cols, int rows);
struct sdca_control_range *sdca_selector_find_range(struct device *dev,
						    struct sdca_entity *entity,
						    int sel, int cols, int rows);
struct sdca_cluster *sdca_id_find_cluster(struct device *dev,
					  struct sdca_function_data *function,
					  const int id);

#endif
