blob: 88b2f101e27e2d1d948dc54ae6f846c9e908fc1f [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.
#pragma once
/**
* Register definitions taken from
*
* ALC5514 (ALC5514-CG)
* Voice Digital Signal Processor For Microphone Application Datasheet
* Rev. 1.3
* 4 July 2016
*/
namespace audio {
namespace alc5514 {
constexpr uint32_t RESET = 0x18002000;
constexpr uint32_t PWR_ANA1 = 0x18002004;
constexpr uint32_t PWR_ANA2 = 0x18002008;
constexpr uint32_t I2S_CTRL1 = 0x18002010;
constexpr uint32_t I2S_CTRL2 = 0x18002014;
constexpr uint32_t DIG_IO_CTRL = 0x18002070;
constexpr uint32_t PAD_CTRL1 = 0x18002080;
constexpr uint32_t DMIC_DATA_CTRL = 0x180020A0;
constexpr uint32_t DIG_SOURCE_CTRL = 0x180020A4;
constexpr uint32_t SRC_ENABLE = 0x180020AC;
constexpr uint32_t CLK_CTRL1 = 0x18002104;
constexpr uint32_t CLK_CTRL2 = 0x18002108;
constexpr uint32_t ASRC_IN_CTRL = 0x18002180;
constexpr uint32_t DOWNFILTER0_CTRL1 = 0x18002190;
constexpr uint32_t DOWNFILTER0_CTRL2 = 0x18002194;
constexpr uint32_t DOWNFILTER0_CTRL3 = 0x18002198;
constexpr uint32_t DOWNFILTER1_CTRL1 = 0x180021A0;
constexpr uint32_t DOWNFILTER1_CTRL2 = 0x180021A4;
constexpr uint32_t DOWNFILTER1_CTRL3 = 0x180021A8;
constexpr uint32_t ANA_CTRL_LDO10 = 0x18002200;
constexpr uint32_t ANA_CTRL_ADCFED = 0x18002224;
constexpr uint32_t VERSION_ID = 0x18002FF0;
constexpr uint32_t DEVICE_ID = 0x18002FF4;
// RESET bits
constexpr uint32_t RESET_VALUE = 0x000010EC;
// PWR_ANA1 bits
constexpr uint32_t PWR_ANA1_EN_SLEEP_RESET = (1u << 23);
constexpr uint32_t PWR_ANA1_DMIC_DATA_IN2 = (1u << 15);
constexpr uint32_t PWR_ANA1_POW_CKDET = (1u << 11);
constexpr uint32_t PWR_ANA1_POW_PLL = (1u << 7);
constexpr uint32_t PWR_ANA1_POW_LDO18_IN = (1u << 5);
constexpr uint32_t PWR_ANA1_POW_LDO18_ADC = (1u << 4);
constexpr uint32_t PWR_ANA1_POW_LDO21 = (1u << 3);
constexpr uint32_t PWR_ANA1_POW_BG_LDO18 = (1u << 2);
constexpr uint32_t PWR_ANA1_POW_BG_LDO21 = (1u << 1);
// PWR_ANA2 bits
constexpr uint32_t PWR_ANA2_POW_PLL2 = (1u << 22);
constexpr uint32_t PWR_ANA2_RSTB_PLL2 = (1u << 21);
constexpr uint32_t PWR_ANA2_POW_PLL2_LDO = (1u << 20);
constexpr uint32_t PWR_ANA2_POW_PLL1 = (1u << 18);
constexpr uint32_t PWR_ANA2_RSTB_PLL1 = (1u << 17);
constexpr uint32_t PWR_ANA2_POW_PLL1_LDO = (1u << 16);
constexpr uint32_t PWR_ANA2_POW_BG_MBIAS = (1u << 15);
constexpr uint32_t PWR_ANA2_POW_MBIAS = (1u << 14);
constexpr uint32_t PWR_ANA2_POW_VREF2 = (1u << 13);
constexpr uint32_t PWR_ANA2_POW_VREF1 = (1u << 12);
constexpr uint32_t PWR_ANA2_POWR_LDO16 = (1u << 11);
constexpr uint32_t PWR_ANA2_POWL_LDO16 = (1u << 10);
constexpr uint32_t PWR_ANA2_POW_ADC2 = (1u << 9);
constexpr uint32_t PWR_ANA2_POW_INPUT_BUF = (1u << 8);
constexpr uint32_t PWR_ANA2_POW_ADC1_R = (1u << 7);
constexpr uint32_t PWR_ANA2_POW_ADC1_L = (1u << 6);
constexpr uint32_t PWR_ANA2_POW2_BSTR = (1u << 5);
constexpr uint32_t PWR_ANA2_POW2_BSTL = (1u << 4);
constexpr uint32_t PWR_ANA2_POW_BSTR = (1u << 3);
constexpr uint32_t PWR_ANA2_POW_BSTL = (1u << 2);
constexpr uint32_t PWR_ANA2_POW_ADCFEDR = (1u << 1);
constexpr uint32_t PWR_ANA2_POW_ADCFEDL = (1u << 0);
// I2S_CTRL1 bits
constexpr uint32_t I2S_CTRL1_MODE_SEL_TDM_MODE = (1u << 28);
constexpr uint32_t I2S_CTRL1_DATA_FORMAT_PCM_B = (3u << 16);
constexpr uint32_t I2S_CTRL1_TDMSLOT_SEL_RX_8CH = (3u << 10);
constexpr uint32_t I2S_CTRL1_TDMSLOT_SEL_TX_8CH = (3u << 6);
// I2S_CTRL2 bits
constexpr uint32_t I2S_CTRL2_DOCKING_MODE_ENABLE = (1u << 31);
constexpr uint32_t I2S_CTRL2_DOCKING_MODE_4CH = (1u << 29);
// DIG_IO_CTRL bits
constexpr uint32_t DIG_IO_CTRL_SEL_GPIO4_I2S_MCLK = (1u << 6);
// DIG_SOURCE_CTRL bits
constexpr uint32_t DIG_SOURCE_CTRL_AD1_INPUT_SEL_DMIC1 = (0 << 1);
constexpr uint32_t DIG_SOURCE_CTRL_AD1_INPUT_SEL_DMIC2 = (1u << 1);
constexpr uint32_t DIG_SOURCE_CTRL_AD1_INPUT_SEL_MASK = (1u << 1);
constexpr uint32_t DIG_SOURCE_CTRL_AD0_INPUT_SEL_DMIC1 = (0 << 0);
constexpr uint32_t DIG_SOURCE_CTRL_AD0_INPUT_SEL_DMIC2 = (1u << 0);
constexpr uint32_t DIG_SOURCE_CTRL_AD0_INPUT_SEL_MASK = (1u << 0);
// SRC_ENABLE bits
constexpr uint32_t SRC_ENABLE_SRCOUT_1_INPUT_SEL_PCM_DATA0_LR = (4u << 28);
constexpr uint32_t SRC_ENABLE_SRCOUT_1_INPUT_SEL_MASK = (0xF << 28);
constexpr uint32_t SRC_ENABLE_SRCOUT_2_INPUT_SEL_PCM_DATA1_LR = (4u << 24);
constexpr uint32_t SRC_ENABLE_SRCOUT_2_INPUT_SEL_MASK = (0xF << 24);
// CLK_CTRL1 bits
constexpr uint32_t CLK_CTRL1_CLK_AD_ANA1_EN = (1u << 31);
constexpr uint32_t CLK_CTRL1_CLK_DMIC_OUT2_EN = (1u << 29);
constexpr uint32_t CLK_CTRL1_CLK_DMIC_OUT1_EN = (1u << 28);
constexpr uint32_t CLK_CTRL1_CLK_AD1_EN = (1u << 24);
constexpr uint32_t CLK_CTRL1_CLK_AD0_EN = (1u << 23);
constexpr uint32_t CLK_CTRL1_CLK_DMIC_OUT_SEL_DIV8 = (3u << 8);
constexpr uint32_t CLK_CTRL1_CLK_DMIC_OUT_SEL_MASK = (0xF << 8);
constexpr uint32_t CLK_CTRL1_CLK_AD_ANA1_SEL_DIV3 = (2u << 0);
constexpr uint32_t CLK_CTRL1_CLK_AD_ANA1_SEL_MASK = (0xF << 0);
// CLK_CTRL2 bits
constexpr uint32_t CLK_CTRL2_AD1_TRACK = (1u << 17);
constexpr uint32_t CLK_CTRL2_AD0_TRACK = (1u << 16);
constexpr uint32_t CLK_CTRL2_CLK_SYS_DIV_OUT_DIV2 = (1u << 8);
constexpr uint32_t CLK_CTRL2_CLK_SYS_DIV_OUT_MASK = (3u << 8);
constexpr uint32_t CLK_CTRL2_SEL_ADC_OSR_DIV2 = (1u << 4);
constexpr uint32_t CLK_CTRL2_SEL_ADC_OSR_MASK = (3u << 4);
constexpr uint32_t CLK_CTRL2_CLK_SYS_PRE_SEL_I2S_MCLK = (2u << 0);
// DOWNFILTER_CTRL bits
constexpr uint32_t DOWNFILTER_CTRL_AD_DMIC_MIX_MUTE = (1u << 11);
constexpr uint32_t DOWNFILTER_CTRL_AD_AD_MIX_MUTE = (1u << 10);
constexpr uint32_t DOWNFILTER_CTRL_AD_AD_MUTE = (1u << 7);
constexpr uint32_t DOWNFILTER_CTRL_AD_AD_GAIN_MASK = (0x7F << 0);
// ANA_CTRL_LDO10 bits
constexpr uint32_t ANA_CTRL_LDO10_DLDO_I_LIMIT_EN = (1u << 16);
// ANA_CTRL_ADCFED bits
constexpr uint32_t ANA_CTRL_ADCFED_BIAS_CTRL_3UA = (2u << 10);
// DEVICE_ID bits
constexpr uint32_t DEVICE_ID_ALC5514 = 0x10EC5514;
} // namespace alc5514
} // namespace audio