blob: 20a602676a395f1247c96aed0c725cb11861c211 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_DEVICES_LIB_AMLOGIC_INCLUDE_SOC_AML_S912_S912_AUDIO_H_
#define SRC_DEVICES_LIB_AMLOGIC_INCLUDE_SOC_AML_S912_S912_AUDIO_H_
#define AIU_958_BPF ((uint32_t)(0x00 << 2))
#define AIU_958_BRST ((uint32_t)(0x01 << 2))
#define AIU_958_LENGTH ((uint32_t)(0x02 << 2))
#define AIU_958_PADDSIZE ((uint32_t)(0x03 << 2))
#define AIU_958_MISC ((uint32_t)(0x04 << 2))
#define AIU_958_FORCE_LEFT ((uint32_t)(0x05 << 2))
#define AIU_958_DISCARD_NUM ((uint32_t)(0x06 << 2))
#define AIU_958_DCU_FF_CTRL ((uint32_t)(0x07 << 2))
#define AIU_958_CHSTAT_L0 ((uint32_t)(0x08 << 2))
#define AIU_958_CHSTAT_L1 ((uint32_t)(0x09 << 2))
#define AIU_958_CTRL ((uint32_t)(0x0A << 2))
#define AIU_958_RPT ((uint32_t)(0x0B << 2))
#define AIU_I2S_MUTE_SWAP ((uint32_t)(0x0C << 2))
#define AIU_I2S_SOURCE_DESC ((uint32_t)(0x0D << 2))
#define AIU_I2S_MED_CTRL ((uint32_t)(0x0E << 2))
#define AIU_I2S_MED_THRESH ((uint32_t)(0x0F << 2))
#define AIU_I2S_DAC_CFG ((uint32_t)(0x10 << 2))
#define AIU_I2S_MISC ((uint32_t)(0x12 << 2))
#define AIU_I2S_OUT_CFG ((uint32_t)(0x13 << 2))
#define AIU_RST_SOFT ((uint32_t)(0x15 << 2))
#define AIU_CLK_CTRL ((uint32_t)(0x16 << 2))
#define AIU_MIX_ADCCFG ((uint32_t)(0x17 << 2))
#define AIU_MIX_CTRL ((uint32_t)(0x18 << 2))
#define AIU_CLK_CTRL_MORE ((uint32_t)(0x19 << 2))
#define AIU_958_POP ((uint32_t)(0x1A << 2))
#define AIU_MIX_GAIN ((uint32_t)(0x1B << 2))
#define AIU_958_SYNWORD1 ((uint32_t)(0x1C << 2))
#define AIU_958_SYNWORD2 ((uint32_t)(0x1D << 2))
#define AIU_958_SYNWORD3 ((uint32_t)(0x1E << 2))
#define AIU_958_SYNWORD1_MASK ((uint32_t)(0x1F << 2))
#define AIU_958_SYNWORD2_MASK ((uint32_t)(0x20 << 2))
#define AIU_958_SYNWORD3_MASK ((uint32_t)(0x21 << 2))
#define AIU_958_FFRDOUT_THD ((uint32_t)(0x22 << 2))
#define AIU_958_LENGTH_PER_PAUSE ((uint32_t)(0x23 << 2))
#define AIU_958_PAUSE_NUM ((uint32_t)(0x24 << 2))
#define AIU_958_PAUSE_PAYLOAD ((uint32_t)(0x25 << 2))
#define AIU_958_AUTO_PAUSE ((uint32_t)(0x26 << 2))
#define AIU_958_PAUSE_PD_LENGTH ((uint32_t)(0x27 << 2))
#define AIU_CODEC_DAC_LRCLK_CTRL ((uint32_t)(0x28 << 2))
#define AIU_CODEC_ADC_LRCLK_CTRL ((uint32_t)(0x29 << 2))
#define AIU_HDMI_CLK_DATA_CTRL ((uint32_t)(0x2a << 2))
#define AIU_CODEC_CLK_DATA_CTRL ((uint32_t)(0x2b << 2))
#define AIU_958_CHSTAT_R0 ((uint32_t)(0x30 << 2))
#define AIU_958_CHSTAT_R1 ((uint32_t)(0x31 << 2))
#define AIU_958_VALID_CTRL ((uint32_t)(0x32 << 2))
#define AIU_AIFIFO2_CTRL ((uint32_t)(0x40 << 2))
#define AIU_AIFIFO2_STATUS ((uint32_t)(0x41 << 2))
#define AIU_AIFIFO2_GBIT ((uint32_t)(0x42 << 2))
#define AIU_AIFIFO2_CLB ((uint32_t)(0x43 << 2))
#define AIU_CRC_CTRL ((uint32_t)(0x44 << 2))
#define AIU_CRC_STATUS ((uint32_t)(0x45 << 2))
#define AIU_CRC_SHIFT_REG ((uint32_t)(0x46 << 2))
#define AIU_CRC_IREG ((uint32_t)(0x47 << 2))
#define AIU_CRC_CAL_REG1 ((uint32_t)(0x48 << 2))
#define AIU_CRC_CAL_REG0 ((uint32_t)(0x49 << 2))
#define AIU_CRC_POLY_COEF1 ((uint32_t)(0x4a << 2))
#define AIU_CRC_POLY_COEF0 ((uint32_t)(0x4b << 2))
#define AIU_CRC_BIT_SIZE1 ((uint32_t)(0x4c << 2))
#define AIU_CRC_BIT_SIZE0 ((uint32_t)(0x4d << 2))
#define AIU_CRC_BIT_CNT1 ((uint32_t)(0x4e << 2))
#define AIU_CRC_BIT_CNT0 ((uint32_t)(0x4f << 2))
#define AIU_AMCLK_GATE_HI ((uint32_t)(0x50 << 2))
#define AIU_AMCLK_GATE_LO ((uint32_t)(0x51 << 2))
#define AIU_AMCLK_MSR ((uint32_t)(0x52 << 2))
#define AIU_MEM_I2S_START_PTR ((uint32_t)(0x60 << 2))
#define AIU_MEM_I2S_RD_PTR ((uint32_t)(0x61 << 2))
#define AIU_MEM_I2S_END_PTR ((uint32_t)(0x62 << 2))
#define AIU_MEM_I2S_MASKS ((uint32_t)(0x63 << 2))
#define AIU_MEM_I2S_CONTROL ((uint32_t)(0x64 << 2))
#define AIU_MEM_IEC958_START_PTR ((uint32_t)(0x65 << 2))
#define AIU_MEM_IEC958_RD_PTR ((uint32_t)(0x66 << 2))
#define AIU_MEM_IEC958_END_PTR ((uint32_t)(0x67 << 2))
#define AIU_MEM_IEC958_MASKS ((uint32_t)(0x68 << 2))
#define AIU_MEM_IEC958_CONTROL ((uint32_t)(0x69 << 2))
#define AIU_MEM_AIFIFO2_START_PTR ((uint32_t)(0x6a << 2))
#define AIU_MEM_AIFIFO2_CURR_PTR ((uint32_t)(0x6b << 2))
#define AIU_MEM_AIFIFO2_END_PTR ((uint32_t)(0x6c << 2))
#define AIU_MEM_AIFIFO2_BYTES_AVAIL ((uint32_t)(0x6d << 2))
#define AIU_MEM_AIFIFO2_CONTROL ((uint32_t)(0x6e << 2))
#define AIU_MEM_AIFIFO2_MAN_WP ((uint32_t)(0x6f << 2))
#define AIU_MEM_AIFIFO2_MAN_RP ((uint32_t)(0x70 << 2))
#define AIU_MEM_AIFIFO2_LEVEL ((uint32_t)(0x71 << 2))
#define AIU_MEM_AIFIFO2_BUF_CNTL ((uint32_t)(0x72 << 2))
#define AIU_MEM_I2S_MAN_WP ((uint32_t)(0x73 << 2))
#define AIU_MEM_I2S_MAN_RP ((uint32_t)(0x74 << 2))
#define AIU_MEM_I2S_LEVEL ((uint32_t)(0x75 << 2))
#define AIU_MEM_I2S_BUF_CNTL ((uint32_t)(0x76 << 2))
#define AIU_MEM_I2S_BUF_WRAP_COUNT ((uint32_t)(0x77 << 2))
#define AIU_MEM_I2S_MEM_CTL ((uint32_t)(0x78 << 2))
#define AIU_MEM_IEC958_MEM_CTL ((uint32_t)(0x79 << 2))
#define AIU_MEM_IEC958_WRAP_COUNT ((uint32_t)(0x7a << 2))
#define AIU_MEM_IEC958_IRQ_LEVEL ((uint32_t)(0x7b << 2))
#define AIU_MEM_IEC958_MAN_WP ((uint32_t)(0x7c << 2))
#define AIU_MEM_IEC958_MAN_RP ((uint32_t)(0x7d << 2))
#define AIU_MEM_IEC958_LEVEL ((uint32_t)(0x7e << 2))
#define AIU_MEM_IEC958_BUF_CNTL ((uint32_t)(0x7f << 2))
#define AIU_AIFIFO_CTRL ((uint32_t)(0x80 << 2))
#define AIU_AIFIFO_STATUS ((uint32_t)(0x81 << 2))
#define AIU_AIFIFO_GBIT ((uint32_t)(0x82 << 2))
#define AIU_AIFIFO_CLB ((uint32_t)(0x83 << 2))
#define AIU_MEM_AIFIFO_START_PTR ((uint32_t)(0x84 << 2))
#define AIU_MEM_AIFIFO_CURR_PTR ((uint32_t)(0x85 << 2))
#define AIU_MEM_AIFIFO_END_PTR ((uint32_t)(0x86 << 2))
#define AIU_MEM_AIFIFO_BYTES_AVAIL ((uint32_t)(0x87 << 2))
#define AIU_MEM_AIFIFO_CONTROL ((uint32_t)(0x88 << 2))
#define AIU_MEM_AIFIFO_MAN_WP ((uint32_t)(0x89 << 2))
#define AIU_MEM_AIFIFO_MAN_RP ((uint32_t)(0x8a << 2))
#define AIU_MEM_AIFIFO_LEVEL ((uint32_t)(0x8b << 2))
#define AIU_MEM_AIFIFO_BUF_CNTL ((uint32_t)(0x8c << 2))
#define AIU_MEM_AIFIFO_BUF_WRAP_COUNT ((uint32_t)(0x8d << 2))
#define AIU_MEM_AIFIFO2_BUF_WRAP_COUNT ((uint32_t)(0x8e << 2))
#define AIU_MEM_AIFIFO_MEM_CTL ((uint32_t)(0x8f << 2))
#define AIU_AIFIFO_TIME_STAMP_CNTL ((uint32_t)(0x90 << 2))
#define AIU_AIFIFO_TIME_STAMP_SYNC_0 ((uint32_t)(0x91 << 2))
#define AIU_AIFIFO_TIME_STAMP_SYNC_1 ((uint32_t)(0x92 << 2))
#define AIU_AIFIFO_TIME_STAMP_0 ((uint32_t)(0x93 << 2))
#define AIU_AIFIFO_TIME_STAMP_1 ((uint32_t)(0x94 << 2))
#define AIU_AIFIFO_TIME_STAMP_2 ((uint32_t)(0x95 << 2))
#define AIU_AIFIFO_TIME_STAMP_3 ((uint32_t)(0x96 << 2))
#define AIU_AIFIFO_TIME_STAMP_LENGTH ((uint32_t)(0x97 << 2))
#define AIU_AIFIFO2_TIME_STAMP_CNTL ((uint32_t)(0x98 << 2))
#define AIU_AIFIFO2_TIME_STAMP_SYNC_0 ((uint32_t)(0x99 << 2))
#define AIU_AIFIFO2_TIME_STAMP_SYNC_1 ((uint32_t)(0x9a << 2))
#define AIU_AIFIFO2_TIME_STAMP_0 ((uint32_t)(0x9b << 2))
#define AIU_AIFIFO2_TIME_STAMP_1 ((uint32_t)(0x9c << 2))
#define AIU_AIFIFO2_TIME_STAMP_2 ((uint32_t)(0x9d << 2))
#define AIU_AIFIFO2_TIME_STAMP_3 ((uint32_t)(0x9e << 2))
#define AIU_AIFIFO2_TIME_STAMP_LENGTH ((uint32_t)(0x9f << 2))
#define AIU_IEC958_TIME_STAMP_CNTL ((uint32_t)(0xa0 << 2))
#define AIU_IEC958_TIME_STAMP_SYNC_0 ((uint32_t)(0xa1 << 2))
#define AIU_IEC958_TIME_STAMP_SYNC_1 ((uint32_t)(0xa2 << 2))
#define AIU_IEC958_TIME_STAMP_0 ((uint32_t)(0xa3 << 2))
#define AIU_IEC958_TIME_STAMP_1 ((uint32_t)(0xa4 << 2))
#define AIU_IEC958_TIME_STAMP_2 ((uint32_t)(0xa5 << 2))
#define AIU_IEC958_TIME_STAMP_3 ((uint32_t)(0xa6 << 2))
#define AIU_IEC958_TIME_STAMP_LENGTH ((uint32_t)(0xa7 << 2))
#define AIU_MEM_AIFIFO2_MEM_CTL ((uint32_t)(0xa8 << 2))
#define AIU_I2S_CBUS_DDR_CNTL ((uint32_t)(0xa9 << 2))
#define AIU_I2S_CBUS_DDR_WDATA ((uint32_t)(0xaa << 2))
#define AIU_I2S_CBUS_DDR_ADDR ((uint32_t)(0xab << 2))
#define AIU_REG_MASK(bits) ((uint32_t)((1u << (bits)) - 1))
// Bitfield defs for the IEC958 Misc reg (0x04)
#define AIU_958_MISC_NON_PCM ((uint32_t)(1u << 0))
#define AIU_958_MISC_16BIT ((uint32_t)(1u << 1))
#define AIU_958_MISC_INVERT_MSB ((uint32_t)(1u << 2))
#define AIU_958_MISC_EXTEND_MSB ((uint32_t)(1u << 3))
#define AIU_958_MISC_TX_MSB_FIRST ((uint32_t)(1u << 4))
#define AIU_958_MISC_16BIT_ALIGN_MASK AIU_REG_MASK(2)
#define AIU_958_MISC_16BIT_ALIGN_SHIFT ((uint32_t)(5u))
#define AIU_958_MISC_32BIT_MODE ((uint32_t)(1u << 7))
#define AIU_958_MISC_32BIT_SHIFT_MASK AIU_REG_MASK(3)
#define AIU_958_MISC_32BIT_SHIFT_SHIFT ((uint32_t)8u)
#define AIU_958_MISC_BIG_ENDIAN ((uint32_t)(1u << 11))
#define AIU_958_MISC_STREAM_USER_DATA ((uint32_t)(1u << 12))
#define AIU_958_MISC_FORCE_LR ((uint32_t)(1u << 13))
#define AIU_958_MISC_PCM_SAMP_CTRL_MASK AIU_REG_MASK(2)
#define AIU_958_MISC_PCM_SAMP_CTRL_SHIFT ((uint32_t)14u)
// Constants for the Misc alignment field.
// RIGHT: 16 bit samples are transmitted as (00000000b | Sample)
// CENTER: 16 bit samples are transmitted as (0000b | Sample | 0000b)
// LEFT: 16 bit samples are transmitted as (Sample | 00000000b)
#define AIU_958_MISC_16BIT_ALIGN_RIGHT ((uint32_t)0x00)
#define AIU_958_MISC_16BIT_ALIGN_CENTER ((uint32_t)0x01)
#define AIU_958_MISC_16BIT_ALIGN_LEFT ((uint32_t)0x02)
// Constants for the Misc PCM sample control field.
#define AIU_958_MISC_PCM_SAMP_CTRL_NO_SAMPLE ((uint32_t)0x00)
#define AIU_958_MISC_PCM_SAMP_CTRL_UP ((uint32_t)0x01)
#define AIU_958_MISC_PCM_SAMP_CTRL_DOWN ((uint32_t)0x02)
#define AIU_958_MISC_PCM_SAMP_CTRL_DOWN_DROP ((uint32_t)0x03)
// Bitfield defs for the IEC958 FIFO control reg (0x07)
#define AIU_958_DCU_FF_CTRL_ENB ((uint32_t)(1u << 0))
#define AIU_958_DCU_FF_CTRL_AUTO_DISABLE ((uint32_t)(1u << 1))
#define AIU_958_DCU_FF_CTRL_IRQ_MODE_MASK AIU_REG_MASK(2u)
#define AIU_958_DCU_FF_CTRL_IRQ_MODE_SHIFT ((uint32_t)2u)
#define AIU_958_DCU_FF_CTRL_SYNC_HEAD_SEEK_ENB ((uint32_t)(1u << 4))
#define AIU_958_DCU_FF_CTRL_BYTE_SEEK_ENB ((uint32_t)(1u << 5))
#define AIU_958_DCU_FF_CTRL_CONT_SEEK ((uint32_t)(1u << 6))
#define AIU_958_DCU_FF_CTRL_8BIT ((uint32_t)(1u << 7))
#define AIU_958_DCU_FF_CTRL_FIFO_CNT_MASK AIU_REG_MASK(8u)
#define AIU_958_DCU_FF_CTRL_FIFO_CNT_SHIFT ((uint32_t)8u)
// Bitfield defs for the IEC958 control reg (0x0A)
#define AIU_958_CTRL_HOLD_INTERFACE ((uint32_t)(1u << 0))
#define AIU_958_CTRL_SWAP_CHAN_MASK AIU_REG_MASK(2u)
#define AIU_958_CTRL_SWAP_CHAN_SHIFT ((uint32_t)1u)
#define AIU_958_CTRL_MUTE_RIGHT ((uint32_t)(1u << 3))
#define AIU_958_CTRL_MUTE_LEFT ((uint32_t)(1u << 4))
#define AIU_958_CTRL_MUTE_CONSTANT_MASK AIU_REG_MASK(3u)
#define AIU_958_CTRL_MUTE_CONSTANT_SHIFT ((uint32_t)5u)
#define AIU_958_CTRL_FUB_MASK AIU_REG_MASK(2u)
#define AIU_958_CTRL_FUB_SHIFT ((uint32_t)8u)
// Constants for the MUTE_CONSTANT field of the 958_CTRL register
// ZERO: 0x000000
// 24BIT_UZERO: 0x800000
// 20BIT_UZERO: 0x080000
// 16BIT_UZERO: 0x008000
// 24BIT_ONE: 0x000001
// 20BIT_ONE: 0x000010
// 16BIT_ONE: 0x000100
#define AIU_958_CTRL_MC_ZERO ((uint32_t)0u)
#define AIU_958_CTRL_MC_24BIT_UZERO ((uint32_t)1u)
#define AIU_958_CTRL_MC_20BIT_UZERO ((uint32_t)2u)
#define AIU_958_CTRL_MC_16BIT_UZERO ((uint32_t)3u)
#define AIU_958_CTRL_MC_24BIT_ONE ((uint32_t)4u)
#define AIU_958_CTRL_MC_20BIT_ONE ((uint32_t)5u)
#define AIU_958_CTRL_MC_16BIT_ONE ((uint32_t)6u)
// Constants for the FIFO underrun behavior (FUB) field of the 958_CTRL register
// ZERO : fill with 0x000000
// MUTE_CONSTANT : fill with the selected mute constant
// REPEAT_LAST : repeat the last LR frame
#define AIU_958_CTRL_FUB_ZERO ((uint32_t)0u)
#define AIU_958_CTRL_FUB_MUTE_CONSTANT ((uint32_t)1u)
#define AIU_958_CTRL_FUB_REPEAT_LAST ((uint32_t)2u)
// Bitfield defs for RST_SOFT (0x15)
#define AIU_RS_I2S_FAST_DOMAIN ((uint32_t)(1u << 0))
#define AIU_RS_I2S_SLOW_DOMAIN ((uint32_t)(1u << 1))
#define AIU_RS_958_FAST_DOMAIN ((uint32_t)(1u << 2))
#define AIU_RS_958_SLOW_DOMAIN ((uint32_t)(1u << 3))
// Bitfield defs for CLK_CTRL (0x16)
#define AIU_CLK_CTRL_ENB_I2S_DIV ((uint32_t)(1u << 0))
#define AIU_CLK_CTRL_ENB_958_DIV ((uint32_t)(1u << 1))
#define AIU_CLK_CTRL_I2S_DIV_MASK AIU_REG_MASK(2u)
#define AIU_CLK_CTRL_I2S_DIV_SHIFT ((uint32_t)2u)
#define AIU_CLK_CTRL_958_DIV_MASK AIU_REG_MASK(2u)
#define AIU_CLK_CTRL_958_DIV_SHIFT ((uint32_t)4u)
#define AIU_CLK_CTRL_INV_AO_CLK ((uint32_t)(1u << 6))
#define AIU_CLK_CTRL_INV_ALR_CLK ((uint32_t)(1u << 7))
#define AIU_CLK_CTRL_ALR_SKEW_MASK AIU_REG_MASK(2u)
#define AIU_CLK_CTRL_ALR_SKEW_SHIFT ((uint32_t)8u)
#define AIU_CLK_CTRL_CLK_SOURCE_SEL ((uint32_t)(1u << 10))
#define AIU_CLK_CTRL_AMCLK_OUT_DIV ((uint32_t)(1u << 11))
#define AIU_CLK_CTRL_958_DIV_MORE ((uint32_t)(1u << 12))
#define AIU_CLK_CTRL_958_DIV_MORE ((uint32_t)(1u << 12))
#define AIU_CLK_CTRL_PA_ADDR_SEL_MASK AIU_REG_MASK(2u)
#define AIU_CLK_CTRL_PA_ADDR_SEL_SHIFT ((uint32_t)13u)
#define AIU_CLK_CTRL_ENB_DDR_ARB ((uint32_t)(1u << 15))
// Constants for the ALR Clk skew field
// SAME_TIME: ALR clk transitions as the MSB is sent
// BEFORE: ALR clk transitions 1 cycle before the MSB is sent
// AFTER: ALR clk transitions 1 cycle after the MSB is sent
#define AIU_CLK_CTRL_ALR_SKEW_SAME_TIME ((uint32_t)0x00)
#define AIU_CLK_CTRL_ALR_SKEW_BEFORE ((uint32_t)0x01)
#define AIU_CLK_CTRL_ALR_SKEW_AFTER ((uint32_t)0x02)
// Constants for the Parser-A Addr Select field
#define AIU_CLK_CTRL_PAAS_AFIFO2 ((uint32_t)0x00)
#define AIU_CLK_CTRL_PAAS_IEC958 ((uint32_t)0x01)
#define AIU_CLK_CTRL_PAAS_AFIFO ((uint32_t)0x02)
#define AIU_CLK_CTRL_PAAS_I2S ((uint32_t)0x03)
// Bitfield defs for the Valid register (0x32)
#define AIU_958_VCTRL_VBIT ((uint32_t)(1u << 0))
#define AIU_958_VCTRL_SEND_VBIT ((uint32_t)(1u << 1))
// Bitfield defs for the IEC958 Masks reg (0x68)
#define AIU_MEM_IEC958_MASKS_CHAN_RD_MASK AIU_REG_MASK(8)
#define AIU_MEM_IEC958_MASKS_CHAN_RD_SHIFT ((uint32_t)0u)
#define AIU_MEM_IEC958_MASKS_CHAN_MEM_MASK AIU_REG_MASK(8)
#define AIU_MEM_IEC958_MASKS_CHAN_MEM_SHIFT ((uint32_t)8u)
// Bitfield defs for the IEC958 Mem Control reg (0x69)
#define AIU_958_MCTRL_INIT ((uint32_t)(1u << 0))
#define AIU_958_MCTRL_FILL_ENB ((uint32_t)(1u << 1))
#define AIU_958_MCTRL_EMPTY_ENB ((uint32_t)(1u << 2))
#define AIU_958_MCTRL_ENDIAN_MASK AIU_REG_MASK(3)
#define AIU_958_MCTRL_ENDIAN_SHIFT ((uint32_t)3u)
#define AIU_958_MCTRL_RD_DDR ((uint32_t)(1u << 6))
#define AIU_958_MCTRL_16BIT_MODE ((uint32_t)(1u << 7))
#define AIU_958_MCTRL_LINEAR_RAW ((uint32_t)(1u << 8))
#define AIU_958_MCTRL_ENDIAN_JIC ((uint32_t)(1u << 9))
#define AIU_958_MCTRL_FETCHING_DDR ((uint32_t)(1u << 10))
#define AIU_958_MCTRL_FIFO_HAS_DATA ((uint32_t)(1u << 11))
#define AIU_958_MCTRL_USE_LEVEL ((uint32_t)(1u << 12))
#define AIU_958_MCTRL_SIM_ENB ((uint32_t)(1u << 13))
#define AIU_958_MCTRL_RD_DATA_BASE_BEGIN_MASK AIU_REG_MASK(4)
#define AIU_958_MCTRL_RD_DATA_BASE_BEGIN_SHIFT ((uint32_t)24u)
#define AIU_958_MCTRL_CH_ALWAYS_8 ((uint32_t)(1u << 30))
#define AIU_958_MCTRL_A_URGENT ((uint32_t)(1u << 31))
// Bitfield defs for the IEC958 Buf Control reg (0x7f)
#define AIU_958_BCTRL_LEVEL_HOLD_MASK AIU_REG_MASK(16)
#define AIU_958_BCTRL_LEVEL_HOLD_SHIFT ((uint32_t)0u)
#define AIU_958_BCTRL_A_ID_MASK AIU_REG_MASK(6)
#define AIU_958_BCTRL_A_ID_SHIFT ((uint32_t)16u)
#define AIU_958_BCTRL_A_BRST_NUM_MASK AIU_REG_MASK(6)
#define AIU_958_BCTRL_A_BRST_NUM_SHIFT ((uint32_t)22u)
// Flags that can be set in the low 32 bits a SPDIF channel status word. Note,
// these do not have anything specific to do with AmLogic audio units, but it is
// as good a place as any to put some definitions.
//
// See
// https://en.wikipedia.org/wiki/S/PDIF
// http://www.av-iq.com/avcat/images/documents/pdfs/digaudiochannelstatusbits.pdf
// http://www.minidisc.org/spdif_c_channel.html
// https://hackaday.io/project/24911-propeller-spdif-receiver/details
// For some publicly available details about the meaning of these bits
//
#define SPDIF_CS_SPDIF_CONSUMER ((uint32_t)(0u << 0))
#define SPDIF_CS_AES_PRO ((uint32_t)(1u << 0))
#define SPDIF_CS_AUD_DATA_PCM ((uint32_t)(0u << 1))
#define SPDIF_CS_AUD_DATA_NON_PCM ((uint32_t)(1u << 1))
#define SPDIF_CS_COPY_DENIED ((uint32_t)(0u << 2))
#define SPDIF_CS_COPY_PERMITTED ((uint32_t)(1u << 2))
#define SPDIF_CS_NO_PRE_EMPHASIS ((uint32_t)(0u << 3))
#define SPDIF_CS_PRE_EMPHASIS ((uint32_t)(1u << 3))
#define SPDIF_CS_CHAN_MODE_0 ((uint32_t)(0u << 6))
#define SPDIF_CS_CCODE(g, c) ((uint32_t)(((g & 0x7) << 8) | ((c & 0xf) << 11)))
#define SPDIF_CS_L_BIT ((uint32_t)(1u << 15))
#define SPDIF_CS_SRC_NUM(N) ((uint32_t)((N & 0xf) << 16))
#define SPDIF_CS_CHAN_NUM(N) ((uint32_t)((N & 0xf) << 20))
#define SPDIF_CS_SAMP_FREQ_IGNORE ((uint32_t)(0x1 << 24))
#define SPDIF_CS_SAMP_FREQ_22_05K ((uint32_t)(0x4 << 24))
#define SPDIF_CS_SAMP_FREQ_44_1K ((uint32_t)(0x0 << 24))
#define SPDIF_CS_SAMP_FREQ_88_2K ((uint32_t)(0x8 << 24))
#define SPDIF_CS_SAMP_FREQ_176_4K ((uint32_t)(0xC << 24))
#define SPDIF_CS_SAMP_FREQ_24K ((uint32_t)(0x6 << 24))
#define SPDIF_CS_SAMP_FREQ_32K ((uint32_t)(0x3 << 24))
#define SPDIF_CS_SAMP_FREQ_48K ((uint32_t)(0x2 << 24))
#define SPDIF_CS_SAMP_FREQ_96K ((uint32_t)(0xA << 24))
#define SPDIF_CS_SAMP_FREQ_192K ((uint32_t)(0xE << 24))
#define SPDIF_CS_CLK_ACC_100PPM ((uint32_t)(0 << 28))
#define SPDIF_CS_CLK_ACC_VARIABLE ((uint32_t)(1 << 28))
#define SPDIF_CS_CLK_ACC_50PPM ((uint32_t)(2 << 28))
#define SPDIF_CS_CCODE_GENERAL SPDIF_CS_CCODE(0, 0)
#define SPDIF_CS_CCODE_SOLID_STATE_RECORDER SPDIF_CS_CCODE(0, 1)
#define SPDIF_CS_CCODE_EXPERIMENTAL SPDIF_CS_CCODE(0, 8)
#define SPDIF_CS_CCODE_CD SPDIF_CS_CCODE(1, 0)
#define SPDIF_CS_CCODE_LASERDISC SPDIF_CS_CCODE(1, 1)
#define SPDIF_CS_CCODE_MINIDISC SPDIF_CS_CCODE(1, 3)
#define SPDIF_CS_CCODE_DVD SPDIF_CS_CCODE(1, 9)
#define SPDIF_CS_CCODE_PCM_CODEC SPDIF_CS_CCODE(2, 0)
#define SPDIF_CS_CCODE_DIGITAL_SAMPLER SPDIF_CS_CCODE(2, 2)
#define SPDIF_CS_CCODE_DIGITAL_MIXER SPDIF_CS_CCODE(2, 3)
#define SPDIF_CS_CCODE_DIGITAL_PROCESSOR SPDIF_CS_CCODE(2, 4)
#define SPDIF_CS_CCODE_SAMPLE_RATE_CONVERTER SPDIF_CS_CCODE(2, 5)
#define SPDIF_CS_CCODE_DAT SPDIF_CS_CCODE(3, 0)
#define SPDIF_CS_CCODE_DCC SPDIF_CS_CCODE(3, 1)
#define SPDIF_CS_CCODE_VCR SPDIF_CS_CCODE(3, 8)
#define SPDIF_CS_CCODE_DBR_JAPAN SPDIF_CS_CCODE(4, 0)
#define SPDIF_CS_CCODE_SW_DELIVERY_INTF SPDIF_CS_CCODE(4, 1)
#define SPDIF_CS_CCODE_DBR_USA SPDIF_CS_CCODE(4, 8)
#define SPDIF_CS_CCODE_DBR_EUROPE SPDIF_CS_CCODE(4, 12)
#define SPDIF_CS_CCODE_SYNTHESIZER SPDIF_CS_CCODE(5, 0)
#define SPDIF_CS_CCODE_MICROPHONE SPDIF_CS_CCODE(5, 1)
#define SPDIF_CS_CCODE_A2D_CONVERTER SPDIF_CS_CCODE(6, 0)
#define SPDIF_CS_CCODE_A2D_CONVERTER_WITH_SCMS SPDIF_CS_CCODE(6, 2)
#endif // SRC_DEVICES_LIB_AMLOGIC_INCLUDE_SOC_AML_S912_S912_AUDIO_H_