summaryrefslogtreecommitdiff
path: root/snd-alpx-dkms/snd-alpx/alpx_reg.h
diff options
context:
space:
mode:
Diffstat (limited to 'snd-alpx-dkms/snd-alpx/alpx_reg.h')
-rw-r--r--snd-alpx-dkms/snd-alpx/alpx_reg.h619
1 files changed, 619 insertions, 0 deletions
diff --git a/snd-alpx-dkms/snd-alpx/alpx_reg.h b/snd-alpx-dkms/snd-alpx/alpx_reg.h
new file mode 100644
index 0000000..276e16d
--- /dev/null
+++ b/snd-alpx-dkms/snd-alpx/alpx_reg.h
@@ -0,0 +1,619 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+* Support for Digigram AlpX PCI-e boards
+*
+* Copyright (c) 2024 Digigram Digital (info@digigram.com)
+*/
+
+#ifndef _ALPX_REG_H_
+#define _ALPX_REG_H_
+
+/* Macros */
+
+#define ALPX_BASE(variant, group) \
+ (variant ## _ ## group ## _BASE)
+
+#define ALPX_OFFSET(variant, group, reg) \
+ ((variant ## _ ## group ## _BASE) + \
+ (variant ## _ ## group ## _ ## reg ## _REG))
+
+#define ALPX_AREA(alpx_dev, variant, group) \
+ ((alpx_dev)->base + ALPX_BASE(variant, group))
+
+#define ALPX_ITEM_REG(variant, group, index) \
+ ((variant ## _ ## group ## _BASE) + \
+ (variant ## _ ## group ## _ ## index))
+
+#define ALPX_REG(alpx_dev, variant, group, reg) \
+ ((alpx_dev)->base + ALPX_OFFSET(variant, group, reg))
+
+#define ALPX_REG_ARRAY(alpx_dev, variant, group, index) \
+ ((alpx_dev)->base + ALPX_ITEM_REG(variant, group, index))
+
+#define ALPX_COMMON_OFFSET(variant, group, reg) \
+ ((variant ## _ ## group ## _BASE) + \
+ (ALPX_COMMON_ ## reg ## _REG))
+
+#define ALPX_COMMON_REG(alpx_dev, variant, group, reg) \
+ ((alpx_dev)->base + ALPX_COMMON_OFFSET(variant, group, reg))
+
+/* Conversion Register index to register offset, register are 32 bits words */
+#define ALP_INDEX_TO_REG_OFFSET(i) ((i) * 4)
+
+
+/* PCI */
+
+#define ALPX_PCI_BAR 0
+#define ALPX_PCI_ID_DEVICE 0x0002
+
+#define ALPX_PCI_ID_SUBSYSTEM_MADI 0x0020
+#define ALPX_PCI_ID_SUBSYSTEM_ALP222 0x0040
+#define ALPX_PCI_ID_SUBSYSTEM_ALP222_MIC 0x0840
+#define ALPX_PCI_ID_SUBSYSTEM_ALP442 0x0080
+#define ALPX_PCI_ID_SUBSYSTEM_ALP442_MIC 0x0880
+#define ALPX_PCI_ID_SUBSYSTEM_ALP882 0x00C0
+#define ALPX_PCI_ID_SUBSYSTEM_ALP882_MIC 0x08C0
+#define ALPX_PCI_ID_SUBSYSTEM_MADI_LOOPBACK 0x0000
+#define ALPX_PCI_ID_SUBSYSTEM_ALPDANTE 0x00E0
+
+
+/* This one is a very special one : The production area is invalid */
+#define ALPX_PCI_ID_SUBSYSTEM_MADI_ALP_DEAD 0xDEAD
+
+/* UNKNOWN */
+#define ALPUNKNOWN_GPIO_BASE 0xFFFFF
+
+/* ALPX Base */
+
+#define ALP_SHARED_BASE 0x50000
+#define ALP_SHARED_SIZE 8 * 1024
+#define ALP_PROC_BASE 0x60000
+#define ALP_CONTROL_BASE 0x70000
+#define ALP_CLK_MANAGER_BASE ALP_CONTROL_BASE
+
+
+/* Alpxxx Flash defs */
+/** Common size for all the data areas in Flash, exclude the FIRMWARE **/
+#define ALPxxx_FLASH_DATA_AREAS_SIZE (32*1024)
+
+/** PRODUCTION Area in GOLDEN Region **/
+#define ALPxxx_FLASH_GOLDEN_PRODUCTION_BASE 0x228000
+
+/* PRODUCTION structure */
+#define ALPX_SERIAL_OFFSET_IN_PRODUCTION 0
+
+/* BUILD version register : common addresses */
+#define ALP_CONTROL_DESIGN_VERSION_REG 0x100
+#define ALP_CONTROL_BUILD_VERSION_REG 0x104
+
+#define ALP_CONTROL_BUILD_VERSION_MASK GENMASK(15,0)
+
+
+/** Multi-channels cards **/
+
+/* Clock Manager */
+#define ALPMC_CLK_MANAGER_CONFIG_REG 0x24
+#define ALPMC_CLK_MANAGER_CONFIG_FS(v) ((v) & GENMASK(4, 0))
+#define ALPMC_CLK_MANAGER_CONFIG_FS_MASK GENMASK(4, 0)
+
+
+#define ALPMC_CLK_MANAGER_EFFECTIVE_FS(v) (((v) & GENMASK(20, 16)) >> 16)
+#define ALPMC_CLK_MANAGER_EFFECTIVE_FS_INVALID 0
+#define ALPMC_CLK_MANAGER_EFFECTIVE_FS_32K 5
+#define ALPMC_CLK_MANAGER_EFFECTIVE_FS_44_1K 6
+#define ALPMC_CLK_MANAGER_EFFECTIVE_FS_48K 7
+#define ALPMC_CLK_MANAGER_EFFECTIVE_FS_DOUBLE BIT(3)
+#define ALPMC_CLK_MANAGER_EFFECTIVE_FS_QUAD BIT(4)
+#define ALPMC_CLK_MANAGER_EFFECTIVE_FS_BASE_MASK GENMASK(2, 0)
+
+
+#define ALPMC_CLK_MANAGER_CONFIG_CLK_CURRENT_VALUE_MASK GENMASK(20, 16)
+#define ALPMC_CLK_MANAGER_CONFIG_CLK_CURRENT_VALUE_POS 16
+#define ALPMC_CLK_MANAGER_CONFIG_CLK_CURRENT_VALUE_QTY 8
+
+#define ALPMC_CLK_MANAGER_SOURCE(v) (((v) & GENMASK(23, 21)) >> 21)
+#define ALPMC_CLK_MANAGER_SOURCE_INTERNAL 0
+#define ALPMC_CLK_MANAGER_SOURCE_SIC 1
+#define ALPMC_CLK_MANAGER_SOURCE_WCLK_IN 2
+#define ALPMC_CLK_MANAGER_SOURCE_AES_SYNC 3
+#define ALPMC_CLK_MANAGER_SOURCE_AES_AUDIO_12 4
+#define ALPMC_CLK_MANAGER_SOURCE_AES_AUDIO_34 5
+#define ALPMC_CLK_MANAGER_SOURCE_AES_AUDIO_56 6
+#define ALPMC_CLK_MANAGER_SOURCE_AES_AUDIO_78 7
+#define ALPMC_CLK_MANAGER_SOURCE_DANTE 8
+
+/* Pre FW V240 compatibility support */
+#define ALP882_APP_PREFW240_CLK_MANAGER_SOURCE_WCLK_IN 0
+#define ALP882_APP_PREFW240_CLK_MANAGER_SOURCE_AES_SYNC 1
+#define ALP882_APP_PREFW240_CLK_MANAGER_SOURCE_AES_AUDIO_12 2
+#define ALP882_APP_PREFW240_CLK_MANAGER_SOURCE_AES_AUDIO_34 3
+#define ALP882_APP_PREFW240_CLK_MANAGER_SOURCE_AES_AUDIO_56 4
+#define ALP882_APP_PREFW240_CLK_MANAGER_SOURCE_AES_AUDIO_78 5
+#define ALP882_APP_PREFW240_CLK_MANAGER_SOURCE_INTERNAL 6
+
+#define ALPMC_CLK_MANAGER_CONFIG_CLK_SRC_MASK GENMASK(23, 21)
+#define ALPMC_CLK_MANAGER_CONFIG_CLK_SRC_POS 21
+
+#define ALPMC_CLK_MANAGER_BASE ALP_CLK_MANAGER_BASE
+#define ALPMC_CONTROL_BASE ALP_CLK_MANAGER_BASE
+#define ALPMC_GPIO_BASE 0x45000
+#define ALPMC_CODEC_CTRL_BASE 0x71000
+#define ALPMC_MIXER_BASE 0x74000
+#define ALPMC_AMPLI_IN_BASE 0x79000
+#define ALPMC_AMPLI_OUT_BASE 0x7c000
+
+/* FS switch delay required by HW (in ms) */
+#define ALPMC_FS_SWITCH_DELAY 500
+
+/* Supported Firmware versions */
+#define ALPMC_SUPPORTED_BASE_FW_VERSION 247
+#define ALP222_SUPPORTED_BASE_FW_VERSION 283
+/* The base Firmware version for AlpDANTE supported by this driver */
+#define ALPDANTE_SUPPORTED_BASE_FW_VERSION 316
+
+
+
+/* GPIO */
+
+#define ALPMC_GPIO_INPUT_REG 0x08
+#define ALPMC_GPIO_INPUT_QTY 8
+#define ALPMC_GPIO_OUTPUT_REG 0x0C
+#define ALPMC_GPIO_OUTPUT_QTY 8
+
+/* ALPMC Gain access*/
+#define ALPMC_GAIN_TABLE_BASE(c) (0xc + (c) * 0x4)
+
+/* Codec */
+#define ALPMC_INPUT_PARAMS_REG 0x2C
+#define ALPMC_MIC_INPUT_PH_1_MASK BIT(0)
+#define ALPMC_MIC_INPUT_PH_2_MASK BIT(1)
+#define ALPMC_MIC_INPUT_PH_3_MASK BIT(2)
+#define ALPMC_MIC_INPUT_PH_4_MASK BIT(3)
+#define ALPMC_MIC_INPUT_PH_5_MASK BIT(4)
+#define ALPMC_MIC_INPUT_PH_6_MASK BIT(5)
+#define ALPMC_MIC_INPUT_PH_7_MASK BIT(6)
+#define ALPMC_MIC_INPUT_PH_8_MASK BIT(7)
+
+#define ALPMC_MIC_INPUT_PH_1_POS 0
+#define ALPMC_MIC_INPUT_PH_2_POS 1
+#define ALPMC_MIC_INPUT_PH_3_POS 2
+#define ALPMC_MIC_INPUT_PH_4_POS 3
+#define ALPMC_MIC_INPUT_PH_5_POS 4
+#define ALPMC_MIC_INPUT_PH_6_POS 5
+#define ALPMC_MIC_INPUT_PH_7_POS 6
+#define ALPMC_MIC_INPUT_PH_8_POS 7
+
+#define ALPMC_CODEC_PGA_REGS 0x0C
+
+#define ALPMC_CODEC_AES_SRC_CONTROL_REG 0x08
+#define ALPMC_CODEC_AES_SRC_CONTROL_AUTO_DISABLE_1_2 BIT(0)
+#define ALPMC_CODEC_AES_SRC_CONTROL_AUTO_DISABLE_3_4 BIT(1)
+#define ALPMC_CODEC_AES_SRC_CONTROL_AUTO_DISABLE_5_6 BIT(2)
+#define ALPMC_CODEC_AES_SRC_CONTROL_AUTO_DISABLE_7_8 BIT(3)
+
+#define ALPMC_CODEC_AES_SRC_1_2_MASK BIT(0)
+#define ALPMC_CODEC_AES_SRC_1_2_POS 0
+#define ALPMC_CODEC_AES_SRC_3_4_MASK BIT(1)
+#define ALPMC_CODEC_AES_SRC_3_4_POS 1
+#define ALPMC_CODEC_AES_SRC_5_6_MASK BIT(2)
+#define ALPMC_CODEC_AES_SRC_5_6_POS 2
+#define ALPMC_CODEC_AES_SRC_7_8_MASK BIT(3)
+#define ALPMC_CODEC_AES_SRC_7_8_POS 3
+
+/* MC Mixer */
+/* One Gain value per register */
+#define ALPMC_MIXER_ENTRIES_IN_REG 1
+
+#define ALPMC_MIXER_GAIN_MASK GENMASK(ALPX_MIXER_GAIN_BITS - 1, 0)
+
+#define ALPMC_MIXER_GAIN_SEL(v) ((v) & GENMASK(ALPX_MIXER_GAIN_BITS - 1, 0))
+
+#define ALPMC_MIXER_GAIN_VALUE(v) ((v) & GENMASK(ALPX_MIXER_GAIN_BITS-1, 0))
+
+#define ALPMC_MIXER_GAIN_REG(size, in, out) (ALPX_MIXER_REG_ENTRIES_OFFSET + (out) * ((size) * 4 / ALPMC_MIXER_ENTRIES_IN_REG) + ((in) / ALPMC_MIXER_ENTRIES_IN_REG) * 4)
+
+
+/* Dedicated to ALP882 */
+
+#define ALP882_CHANNELS_DAW_COUNT 16
+#define ALP882_CHANNELS_ANALOG_COUNT 8
+#define ALP882_CHANNELS_AES_COUNT 8
+
+#define ALP882_CHANNELS_IN_DAW_OFFSET 0
+#define ALP882_CHANNELS_IN_ANALOG_OFFSET (ALP882_CHANNELS_IN_DAW_OFFSET + \
+ ALP882_CHANNELS_DAW_COUNT)
+#define ALP882_CHANNELS_IN_AES_OFFSET (ALP882_CHANNELS_IN_ANALOG_OFFSET + \
+ ALP882_CHANNELS_ANALOG_COUNT)
+
+#define ALP882_CHANNELS_OUT_ANALOG_OFFSET 0
+#define ALP882_CHANNELS_OUT_AES_OFFSET (ALP882_CHANNELS_OUT_ANALOG_OFFSET + \
+ ALP882_CHANNELS_ANALOG_COUNT)
+#define ALP882_CHANNELS_OUT_DAW_OFFSET (ALP882_CHANNELS_OUT_AES_OFFSET + \
+ ALP882_CHANNELS_AES_COUNT)
+
+
+/* ALP882 Clock Manager */
+#define ALP882_CLK_MANAGER_CONFIG_CLK_SRC_QTY 8
+
+/* Alp 882 clk source in Pre 240 FW */
+#define ALP882_APP_PREFW240_CLK_MANAGER_CLK_SRC_QTY 7
+
+/* Mixer 882 */
+#define ALP882_MIXER_SIZE 32
+
+/* Dedicated to ALP442 */
+
+#define ALP442_CHANNELS_ANALOG_COUNT 4
+#define ALP442_CHANNELS_AES_COUNT 4
+#define ALP442_CHANNELS_DAW_COUNT (ALP442_CHANNELS_ANALOG_COUNT + \
+ ALP442_CHANNELS_AES_COUNT)
+
+
+#define ALP442_CHANNELS_IN_DAW_OFFSET 0
+#define ALP442_CHANNELS_IN_ANALOG_OFFSET (ALP442_CHANNELS_IN_DAW_OFFSET + \
+ ALP442_CHANNELS_DAW_COUNT)
+#define ALP442_CHANNELS_IN_AES_OFFSET (ALP442_CHANNELS_IN_ANALOG_OFFSET + \
+ ALP442_CHANNELS_ANALOG_COUNT)
+
+#define ALP442_CHANNELS_OUT_ANALOG_OFFSET 0
+#define ALP442_CHANNELS_OUT_AES_OFFSET (ALP442_CHANNELS_OUT_ANALOG_OFFSET + \
+ ALP442_CHANNELS_ANALOG_COUNT)
+#define ALP442_CHANNELS_OUT_DAW_OFFSET (ALP442_CHANNELS_OUT_AES_OFFSET + \
+ ALP442_CHANNELS_AES_COUNT)
+
+
+/* ALP442 Clock Manager */
+#define ALP442_CLK_MANAGER_CONFIG_CLK_SRC_QTY 6
+#define ALP442_CLK_MANAGER_SOURCE_INTERNAL ALPMC_CLK_MANAGER_SOURCE_INTERNAL
+
+/* Mixer 442 */
+#define ALP442_MIXER_SIZE (ALP442_CHANNELS_ANALOG_COUNT + \
+ ALP442_CHANNELS_AES_COUNT + \
+ ALP442_CHANNELS_DAW_COUNT)
+
+
+
+/* Alp 222 */
+
+#define ALP222_ANALOG_QTY 0x2
+#define ALP222_AES3_QTY 0x2
+
+#define ALP222_EXT_CHANNEL_QTY (ALP222_ANALOG_QTY + ALP222_AES3_QTY)
+
+#define ALP222_DAW_QTY ALP222_EXT_CHANNEL_QTY
+
+
+#define ALP222_CLK_MANAGER_BASE ALP_CLK_MANAGER_BASE
+#define ALP222_CONTROL_BASE ALP_CLK_MANAGER_BASE
+#define ALP222_AMPLI_IN_BASE 0x79000
+#define ALP222_AMPLI_OUT_BASE 0x7c000
+#define ALP222_CODEC_CTRL_BASE 0x71000
+#define ALP222_GPIO_BASE 0x45000
+#define ALP222_MIXER_BASE 0x73000
+
+#define ALP222_DAW_PLAYBACK_AMPLI_BASE ALP222_AMPLI_IN_BASE + ALPX_GAIN_REG(0)
+#define ALP222_ANALOG_CAPTURE_AMPLI_BASE ALP222_AMPLI_IN_BASE + ALPX_GAIN_REG(ALP222_DAW_QTY)
+#define ALP222_AES3_CAPTURE_AMPLI_BASE ALP222_AMPLI_IN_BASE + ALPX_GAIN_REG(ALP222_DAW_QTY + ALP222_ANALOG_QTY)
+
+#define ALP222_ANALOG_PLAYBACK_AMPLI_BASE ALP222_AMPLI_OUT_BASE + ALPX_GAIN_REG(0)
+#define ALP222_AES3_PLAYBACK_AMPLI_BASE ALP222_AMPLI_OUT_BASE + ALPX_GAIN_REG(ALP222_ANALOG_QTY)
+#define ALP222_DAW_CAPTURE_AMPLI_BASE ALP222_AMPLI_OUT_BASE + ALPX_GAIN_REG(ALP222_ANALOG_QTY + ALP222_AES3_QTY)
+
+
+/* Alp222 GPIO */
+#define ALP222_GPIO_INPUT_REG 0x00
+#define ALP222_GPIO_INPUT_QTY 2
+#define ALP222_GPIO_OUTPUT_REG 0x08
+#define ALP222_GPIO_OUTPUT_QTY 2
+
+/* Alp222 CODEC*/
+#define ALP222_CODEC_PGA_REGS 0x08
+
+/* Alp MADI */
+#define ALP222_MADI_QTY 0x40
+
+#define ALPMADI_CHANNEL_QTY ALP222_MADI_QTY
+
+//MADI Unit & DAW Unit
+#define ALPMADI_AUDIO_UNIT_QTY 2
+
+#define ALPMADI_CLK_MANAGER_BASE ALP_CLK_MANAGER_BASE
+#define ALPMADI_CONTROL_BASE ALP_CLK_MANAGER_BASE
+#define ALPMADI_ROUTER_IN_BASE 0x71000
+#define ALPMADI_MIXER_BASE 0x72000
+#define ALPMADI_ROUTER_OUT_BASE 0x73000
+#define ALPMADI_MEAS_DAW_IN_BASE 0x74000
+#define ALPMADI_GAIN_DAW_IN_BASE 0x75000
+#define ALPMADI_MEAS_DAW_OUT_BASE 0x76000
+#define ALPMADI_GAIN_DAW_OUT_BASE 0x77000
+#define ALPMADI_MEAS_MADI_IN_BASE 0x78000
+#define ALPMADI_GAIN_MADI_IN_BASE 0x79000
+#define ALPMADI_MEAS_MADI_OUT_BASE 0x7A000
+#define ALPMADI_GAIN_MADI_OUT_BASE 0x7B000
+#define ALPMADI_GPIO_BASE ALPUNKNOWN_GPIO_BASE
+
+#define ALPMADI_GPIO_INPUT_REG 0xFF
+#define ALPMADI_GPIO_OUTPUT_REG 0xFF
+
+/* Common */
+
+#define ALPX_COMMON_ID_REG 0x0
+
+
+#define ALPX_COMMON_VERSION_REG 0x4
+#define ALPX_COMMON_VERSION_VERSION(v) ((v) >> 16)
+#define ALPX_COMMON_VERSION_REVISION(v) ((v) & GENMASK(15, 0))
+
+#define ALPX_DANTE_VERSION_VERSION(v) ((v) >> 8)
+#define ALPX_DANTE_VERSION_REVISION(v) ((v) & GENMASK(7, 0))
+
+
+/* Common Clock 222/882 models*/
+
+#define ALPxxx_CLK_MANAGER_CLK_VALUES_QTY 14
+
+/* Values below use the full 5 bits of clock definitions : factor | base */
+#define ALPxxx_CLK_MANAGER_CLK_VALUE_8K (0)
+#define ALPxxx_CLK_MANAGER_CLK_VALUE_11_025K (1)
+#define ALPxxx_CLK_MANAGER_CLK_VALUE_16K (2)
+#define ALPxxx_CLK_MANAGER_CLK_VALUE_22_05K (3)
+#define ALPxxx_CLK_MANAGER_CLK_VALUE_24K (4)
+#define ALPxxx_CLK_MANAGER_CLK_VALUE_32K (5)
+#define ALPxxx_CLK_MANAGER_CLK_VALUE_44_1K (6)
+#define ALPxxx_CLK_MANAGER_CLK_VALUE_48K (7)
+#define ALPxxx_CLK_MANAGER_CLK_VALUE_64K (0xD)
+#define ALPxxx_CLK_MANAGER_CLK_VALUE_128K (0x15)
+#define ALPxxx_CLK_MANAGER_CLK_VALUE_88_2K (0xE)
+#define ALPxxx_CLK_MANAGER_CLK_VALUE_176_4K (0x16)
+#define ALPxxx_CLK_MANAGER_CLK_VALUE_96K (0xF)
+#define ALPxxx_CLK_MANAGER_CLK_VALUE_192K (0x17)
+
+/* ALP222 Clock Manager */
+
+#define ALP222_CLK_MANAGER_CONFIG_REG 0x28
+#define ALP222_CLK_MANAGER_CONFIG_FS_MASK GENMASK(4, 0)
+#define ALP222_CLK_MANAGER_CONFIG_CLK_CURRENT_VALUE_MASK GENMASK(20, 16)
+#define ALP222_CLK_MANAGER_CONFIG_CLK_CURRENT_VALUE_POS 16
+
+
+#define ALP222_CLK_MANAGER_CLK_SRC_MASK GENMASK(23, 21)
+#define ALP222_CLK_MANAGER_CLK_SRC_POS 21
+#define ALP222_CLK_MANAGER_CLK_SRC_QTY 5
+#define ALP222_CLK_MANAGER_CLK_SRC_INTERNAL (0)
+#define ALP222_CLK_MANAGER_CLK_SRC_SIC (1)
+#define ALP222_CLK_MANAGER_CLK_SRC_WCLK (2)
+#define ALP222_CLK_MANAGER_CLK_SRC_AES_SYNC (3)
+#define ALP222_CLK_MANAGER_CLK_SRC_AES_AUDIO (4)
+#define ALP222_CLK_MANAGER_CLK_SRC_MAX ALP222_CLK_MANAGER_CLK_SRC_AES_AUDIO
+
+/* Pre FW 283 clock sources definitions */
+#define ALP222_APPS_PREFW283_CLK_MANAGER_CLK_SRC_QTY 4
+#define ALP222_CLK_MANAGER_APPSPREFW283_CLK_SRC_WCLK 0
+#define ALP222_CLK_MANAGER_APPSPREFW283_CLK_SRC_AES_SYNC 1
+#define ALP222_CLK_MANAGER_APPSPREFW283_CLK_SRC_AES_AUDIO 2
+#define ALP222_CLK_MANAGER_APPSPREFW283_CLK_SRC_INTERNAL 3
+
+/* ALPMADI Clock Manager */
+
+#define ALPMADI_CLK_MANAGER_CONFIG_REG 0x1C
+#define ALPMADI_CLK_MANAGER_CONFIG_FS_MASK GENMASK(10, 8)
+#define ALPMADI_CLK_MANAGER_CONFIG_FS_44_1K (0 << 8)
+#define ALPMADI_CLK_MANAGER_CONFIG_FS_48K (1 << 8)
+#define ALPMADI_CLK_MANAGER_CONFIG_FS_88_2K (2 << 8)
+#define ALPMADI_CLK_MANAGER_CONFIG_FS_96K (3 << 8)
+#define ALPMADI_CLK_MANAGER_CONFIG_FS_176_4K (4 << 8)
+#define ALPMADI_CLK_MANAGER_CONFIG_FS_192K (5 << 8)
+
+/* AlpDANTE Clock Manager clock registervalues*/
+#define ALPDANTE_CLK_MANAGER_CLK_VALUE_44_1K 0x01
+#define ALPDANTE_CLK_MANAGER_CLK_VALUE_48K 0x00
+#define ALPDANTE_CLK_MANAGER_CLK_VALUE_88_2K 0x03
+#define ALPDANTE_CLK_MANAGER_CLK_VALUE_96K 0x02
+#define ALPDANTE_CLK_MANAGER_CLK_VALUE_176_4K 0x05
+#define ALPDANTE_CLK_MANAGER_CLK_VALUE_192K 0x04
+
+/* ALPX PROC */
+/* Embedded processor dedicated area length (in bytes) */
+#define ALP_PROC_AREA_LENGTH 0x800U
+
+#define ALP_PROC_VERSION_REG 0x00
+
+#define ALP_PROC_STATUS_REG 0x04
+#define ALP_PROC_STATUS_FAIL BIT(0)
+#define ALP_PROC_STATUS_PENDING BIT(1)
+
+#define ALP_PROC_FAILS_REG 0x08
+#define ALP_PROC_FAILS_FAIL_NONE 0
+
+#define ALP_PROC_COMMAND_REG 0x0C
+
+#define ALP_PROC_COMMAND_MAKE_P16(_cmd, _p16) ((((_p16) & 0x0FFFF) << 8) | \
+ (_cmd))
+#define ALP_PROC_CMD_READ_FLASH_SECTOR 0x10
+#define ALP_PROC_CMD_WRITE_FLASH_SECTOR 0x0A
+
+#define ALP_PROC_FWCONFIG_REG 0x10
+#define ALP_PROC_FWCONFIG_CLKSRC_UP_MASK GENMASK(0,0)
+#define ALP_PROC_FWCONFIG_CLKSRC_UP_POS 0
+
+#define ALP_PROC_FWCONFIG_CLKSRC_DOWN_MASK GENMASK(1,1)
+#define ALP_PROC_FWCONFIG_CLKSRC_DOWN_POS 1
+
+
+/* PROC Logs base register */
+#define ALP_PROC_LOG_OFFSET 0x40U
+#define ALP_PROC_LOG_BASE ALP_PROC_BASE + ALP_PROC_LOG_OFFSET
+
+/* Log length, -8 ?? but done in the reference application from Easii-IC (log.c) */
+#define ALP_PROC_LOG_LENGTH ALP_PROC_AREA_LENGTH - ALP_PROC_LOG_OFFSET - 8U
+
+/* Clock source priority def */
+#define ALP_PROC_CLK_SOURCE_PRIO_REG 0x14
+
+#define ALP_PROC_CLK_SOURCE_PRIO0_MASK GENMASK(3,0)
+#define ALP_PROC_CLK_SOURCE_PRIO0_POS 0
+
+#define ALP_PROC_CLK_SOURCE_PRIO1_MASK GENMASK(7,4)
+#define ALP_PROC_CLK_SOURCE_PRIO1_POS 4
+
+#define ALP_PROC_CLK_SOURCE_PRIO2_MASK GENMASK(11,8)
+#define ALP_PROC_CLK_SOURCE_PRIO2_POS 8
+
+#define ALP_PROC_CLK_SOURCE_PRIO3_MASK GENMASK(15,12)
+#define ALP_PROC_CLK_SOURCE_PRIO3_POS 12
+
+/* ALPX GPIO */
+#define ALPX_GPIO_MASK(i) BIT(i)
+#define ALPX_GPIO_SEL(i, v) (((v) << (i)) & ALPX_GPIO_MASK(i))
+#define ALPX_GPIO_VALUE(i, v) (((v) & ALPX_GPIO_MASK(i)) >> (i))
+
+/* Control */
+#define ALP_CONTROL_PCIE_SUBSYS_ID_REG 0x8
+#define ALP_CONTROL_SAMPLES_CNT_REG 0x18
+#define ALP_CLK_MANAGER_SAMPLES_COUNT_REG 0x18
+
+#define ALP222_CONTROL_PCIE_MASK_IT_REG 0xc
+#define ALP222_CONTROL_WC_RTERM_REG 0x1c
+#define ALP222_CONTROL_PCIE_WARM_RESET_REG 0x10
+#define ALP222_CONTROL_PCIE_WARM_RESET_VALUE 0xc07d8e51
+#define ALP222_CONTROL_PCIE_COLD_RESET_REG 0x14
+#define ALP222_CONTROL_PCIE_COLD_RESET_VALUE 0x8e5ef96a
+#define ALP222_CONTROL_FS_REG 0x28
+#define ALP222_CODEC_CTRL_ASRC_REG 0x10
+#define ALP222_MIC_CONTROL_REG 0x24
+
+#define ALPMADI_CONTROL_WARM_REBOOT_FPGA_REG 0x10
+#define ALPMADI_CONTROL_COLD_REBOOT_FPGA_REG 0x14
+#define ALPMADI_CONTROL_BLINK_LED_REG 0x20
+#define ALPMADI_CONTROL_EXT_ITF_CONFIG_REG 0x24
+#define ALPMADI_CONTROL_FS_SEL_REG 0x28
+
+#define ALPMADI_CONTROL_EXT0_STATUS_CTRL_REG 0x2c
+#define ALPMADI_CONTROL_EXT1_STATUS_CTRL_REG 0x30
+#define ALPMADI_CONTROL_EXT2_STATUS_CTRL_REG 0x34
+#define ALPMADI_CONTROL_EXT3_STATUS_CTRL_REG 0x38
+#define ALPMADI_CONTROL_PI_PARAMS_REG 0x3c
+
+
+#define ALPMADI_CONTROL_BLINK_LED_EN BIT(0)
+#define ALPMADI_CONTROL_PI_PARAMS_KI(v) ((v) & GENMASK(15, 0))
+#define ALPMADI_CONTROL_PI_PARAMS_KP(v) (((v) << 16) & GENMASK(31, 16))
+#define ALPMADI_CONTROL_EXT_ITF_CONFIG_MADI_LINK(v) ((v) & GENMASK(1, 0))
+#define ALPMADI_CONTROL_EXT_ITF_CONFIG_BNC_SIGNAL(v) (((v<<8)) & GENMASK(8, 8))
+
+/* Codec */
+#define ALPX_CODEC_CTRL_GAIN_REG(i) ((i) * 0x4)
+
+/* Gains */
+#define ALPX_GAIN_VALUE_BITS 10
+#define ALPX_GAIN_REG_ENTRIES_OFFSET 0xC
+#define ALPX_GAIN_REG(i) (ALPX_GAIN_REG_ENTRIES_OFFSET + (i) * 0x4)
+
+/* Router */
+#define ALPMADI_ROUTER_SIZE 128
+
+#define ALPX_ROUTER_REG_ENTRIES_OFFSET 0x8
+
+/* RAW ACCESS to router register i*/
+#define ALPX_ROUTER_REG(i) (0x8 + ((i) / 4) * 0x4)
+
+#define ALPX_ROUTER_SHIFT(i) (((i) % 4) * 8)
+#define ALPX_ROUTER_MASK(i) (GENMASK(7, 0) << \
+ ALPX_ROUTER_SHIFT(i))
+#define ALPX_ROUTER_SEL(i, v) (((v) & GENMASK(7, 0)) << \
+ ALPX_ROUTER_SHIFT(i))
+#define ALPX_ROUTER_VALUE(i, v) (((v) >> \
+ ALPX_ROUTER_SHIFT(i)) & \
+ GENMASK(7, 0))
+
+#define ALPMADI_ROUTER_PORT(i) (ALPX_ROUTER_REG_ENTRIES_OFFSET + ((i) * 0x4))
+
+#define ALPMADI_ROUTER_IN_PORT(i) ALPMADI_ROUTER_PORT(i)
+
+#define ALPMADI_ROUTER_OUT_PORT(i) ALPMADI_ROUTER_PORT(i)
+
+/* Mixer */
+#define ALPX_MIXER_GAIN_BITS 10
+#define ALPX_GAIN_0dB 0x385
+#define ALPX_GAIN_MUTE 0x000
+
+/** Mixer 222 **/
+
+/* Mixer Input i, output j & j+1*/
+#define ALP222_MIXER_SIZE 8
+#define ALPMADI_MIXER_SIZE 16
+
+//2 gains per register
+#define ALPMADI_MIXER_BANK_SIZE 2
+
+#define ALP222_MIXER_ENTRIES_IN_REG 2
+
+//#define ALPX_GAIN_REG_VALUE_STEP_PER_DB 10
+#define ALPX_GAIN_dB_TO_10ofdB (dB) ((db) * 10)
+
+
+#define ALPX_GAIN_REG_VALUE_FROM_10ofDB(val10ofdb) (ALPX_GAIN_0dB + (val10ofdb))
+
+#define ALPX_MIXER_REG_ENTRIES_OFFSET 0x8
+
+/* Return the @reg for the given (input/output) in the mixer. MIND the register structure !! */
+//MADI structured as In into Outs
+//EDF MADI formula TO BE CHECKED
+//#define ALPMADI_MIXER_GAIN_REG(mixerSize, inputId, outputId) (0x8 + ((((mixerSize) * (inputId) + (outputId)) * 4 / ALPX_MIXER_ENTRIES_IN_REG)))
+
+// Structured as : Out from Ins
+#define ALP222_MIXER_GAIN_REG(size, in, out) (ALPX_MIXER_REG_ENTRIES_OFFSET + (out) * ((size) * 4 / ALP222_MIXER_ENTRIES_IN_REG) + ((in) / ALP222_MIXER_ENTRIES_IN_REG) * 4)
+
+//Odd entry is in higher bits
+#define ALP222_MIXER_GAIN_SHIFT_STEP(i) (((i) & 1) ? ALPX_MIXER_GAIN_BITS : 0)
+
+#define ALP222_MIXER_GAIN_MASK(i) (GENMASK(ALPX_MIXER_GAIN_BITS-1, 0) << \
+ ALP222_MIXER_GAIN_SHIFT_STEP(i))
+
+#define ALP222_MIXER_GAIN_SEL(i, v) (((v) & GENMASK(ALPX_MIXER_GAIN_BITS-1, 0)) << \
+ ALP222_MIXER_GAIN_SHIFT_STEP(i))
+
+#define ALP222_MIXER_GAIN_VALUE(i, v) (((v) >> \
+ ALP222_MIXER_GAIN_SHIFT_STEP(i)) & \
+ GENMASK(ALPX_MIXER_GAIN_BITS-1, 0))
+
+
+//Build the mixer register
+//#define ALP222_MIXER_REG_VALUE(left, right) ((left)<< ALP_GAIN_VALUE_BITS | (right))
+
+// Flags access
+#define ALP222_CODEC_CTRL_ASRC_MASK GENMASK(0, 0)
+#define ALP222_CODEC_CTRL_ASRC_POS 0
+
+// MIC Options defs
+#define ALP222_MIC_GAIN_L_MASK GENMASK(7,0)
+#define ALP222_MIC_GAIN_L_POS 0
+#define ALP222_MIC_GAIN_WIDTH 8
+
+#define ALP222_MIC_GAIN_R_MASK GENMASK(15,8)
+#define ALP222_MIC_GAIN_R_POS 8
+
+
+#define ALP222_MIC_DC_L_MASK GENMASK(16,16)
+#define ALP222_MIC_DC_L_POS 16
+#define ALP222_MIC_CM_L_MASK GENMASK(17,17)
+#define ALP222_MIC_CM_L_POS 17
+#define ALP222_MIC_PH_L_MASK GENMASK(18,18)
+#define ALP222_MIC_PH_L_POS 18
+
+#define ALP222_MIC_DC_R_MASK GENMASK(19,19)
+#define ALP222_MIC_DC_R_POS 19
+#define ALP222_MIC_CM_R_MASK GENMASK(20,20)
+#define ALP222_MIC_CM_R_POS 20
+#define ALP222_MIC_PH_R_MASK GENMASK(21,21)
+#define ALP222_MIC_PH_R_POS 21
+
+#define ALP222_MIC_EN_L_MASK GENMASK(22,22)
+#define ALP222_MIC_EN_R_MASK GENMASK(23,23)
+#define ALP222_MIC_EN_L_POS 22
+#define ALP222_MIC_EN_R_POS 23
+
+
+#define ALP222_MIC_HERE_POS 31
+
+#endif