/* 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>

struct device;
struct sdca_entity;
struct sdca_function_desc;

/*
 * 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_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_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_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_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_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,
};

/**
 * 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_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),
};

#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				"Mute"
#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.
 * @value: Holds the Control value for constants and defaults.
 * @nbits: Number of bits used in the Control.
 * @interrupt_position: SCDA interrupt line that will alert to changes on this
 * Control.
 * @cn_list: A bitmask showing the valid Control Numbers within this Control,
 * Control Numbers typically represent channels.
 * @range: Buffer describing valid range of values for the Control.
 * @type: Format of the data in 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 value;
	int nbits;
	int interrupt_position;
	u64 cn_list;

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

	bool deferrable;
	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 - 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.
 */
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;
	};
};

/**
 * 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;
};

/**
 * 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.
 */
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;
};

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 sdca_function_desc *desc,
			struct sdca_function_data *function);

#endif
