blob: 5b0c1564844f21e31a063303cb26c1b2760cd401 [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
*
* MAX98927 10V Boosted Class D Speaker Amplifier with I/V Sense
* Rev 0.7 (Preliminary)
*/
namespace audio {
namespace max98927 {
constexpr uint16_t INTERRUPT_RAW_1 = 0x0001;
constexpr uint16_t INTERRUPT_RAW_2 = 0x0002;
constexpr uint16_t INTERRUPT_RAW_3 = 0x0003;
constexpr uint16_t INTERRUPT_STATE_1 = 0x0004;
constexpr uint16_t INTERRUPT_STATE_2 = 0x0005;
constexpr uint16_t INTERRUPT_STATE_3 = 0x0006;
constexpr uint16_t PCM_RX_EN_A = 0x0018;
constexpr uint16_t PCM_RX_EN_B = 0x0019;
constexpr uint16_t PCM_TX_EN_A = 0x001A;
constexpr uint16_t PCM_TX_EN_B = 0x001B;
constexpr uint16_t PCM_TX_HIZ_CTRL_A = 0x001C;
constexpr uint16_t PCM_TX_HIZ_CTRL_B = 0x001D;
constexpr uint16_t PCM_TX_CH_SRC_A = 0x001E;
constexpr uint16_t PCM_TX_CH_SRC_B = 0x001F;
constexpr uint16_t PCM_MODE_CFG = 0x0020;
constexpr uint16_t PCM_MASTER_MODE = 0x0021;
constexpr uint16_t PCM_CLOCK_SETUP = 0x0022;
constexpr uint16_t PCM_SAMPLE_RATE_SETUP_1 = 0x0023;
constexpr uint16_t PCM_SAMPLE_RATE_SETUP_2 = 0x0024;
constexpr uint16_t PCM_SPK_MONOMIX_A = 0x0025;
constexpr uint16_t PCM_SPK_MONOMIX_B = 0x0026;
constexpr uint16_t AMP_VOL_CTRL = 0x0036;
constexpr uint16_t AMP_DSP_CFG = 0x0037;
constexpr uint16_t TONE_GEN_DC_CFG = 0x0038;
constexpr uint16_t AMP_ENABLE = 0x003A;
constexpr uint16_t SPK_SRC_SEL = 0x003B;
constexpr uint16_t SPK_GAIN = 0x003C;
constexpr uint16_t MEAS_DSP_CFG = 0x003F;
constexpr uint16_t BOOST_CTRL_0 = 0x0040;
constexpr uint16_t BOOST_CTRL_3 = 0x0041;
constexpr uint16_t BOOST_CTRL_1 = 0x0042;
constexpr uint16_t MEAS_ADC_CFG = 0x0043;
constexpr uint16_t MEAS_ADC_BASE_DIV_MSB = 0x0044;
constexpr uint16_t MEAS_ADC_BASE_DIV_LSB = 0x0045;
constexpr uint16_t BROWNOUT_EN = 0x0052;
constexpr uint16_t BROWNOUT_LVL4_AMP1_CTRL1 = 0x007F;
constexpr uint16_t ENV_TRACKER_VOUT_HEADROOM = 0x0082;
constexpr uint16_t ENV_TRACKER_CTRL = 0x0086;
constexpr uint16_t ENV_TRACKER_BOOST_VOUT_RB = 0x0087;
constexpr uint16_t GLOBAL_ENABLE = 0x00FF;
constexpr uint16_t SOFTWARE_RESET = 0x0100;
constexpr uint16_t REV_ID = 0x01FF;
#define _SIC_ static inline constexpr
// PCM_TX_CH_SRC_A bits
_SIC_ uint8_t PCM_TX_CH_SRC_A_PCM_IVADC_I_DEST(unsigned ch) { return (uint8_t)(ch << 4); }
_SIC_ uint8_t PCM_TX_CH_SRC_A_PCM_IVADC_V_DEST(unsigned ch) { return ch & 0xF; }
// PCM_TX_CH_SRC_B bits
constexpr uint8_t PCM_TX_CH_SRC_B_INTERLEAVE = (1 << 5);
// PCM_SAMPLE_RATE_SETUP_1 bits
_SIC_ uint8_t PCM_SAMPLE_RATE_SETUP_1_DIG_IF_SR(uint8_t val) { return val & 0xF; }
// PCM_SAMPLE_RATE_SETUP_2 bits
_SIC_ uint8_t PCM_SAMPLE_RATE_SETUP_2_SPK_SR(uint8_t val) { return (uint8_t)(val << 4); }
_SIC_ uint8_t PCM_SAMPLE_RATE_SETUP_2_IVADC_SR(uint8_t val) { return val & 0xF; }
// PCM_SPK_MONOMIX_A bits
constexpr uint8_t PCM_SPK_MONOMIX_A_CFG_OUTPUT_0 = 0;
constexpr uint8_t PCM_SPK_MONOMIX_A_CFG_OUTPUT_1 = (1 << 6);
constexpr uint8_t PCM_SPK_MONOMIX_A_CFG_OUTPUT_0_1 = (2 << 6);
_SIC_ uint8_t PCM_SPK_MONOMIX_B_CFG_CH0_SRC(uint8_t ch) { return ch; }
// PCM_SPK_MONOMIX_B bits
_SIC_ uint8_t PCM_SPK_MONOMIX_B_CFG_CH1_SRC(uint8_t ch) { return ch; }
// PCM_MODE_CFG bits
constexpr uint8_t PCM_MODE_CFG_CHANSZ_16BITS = (1 << 6);
constexpr uint8_t PCM_MODE_CFG_CHANSZ_24BITS = (2 << 6);
constexpr uint8_t PCM_MODE_CFG_CHANSZ_32BITS = (3 << 6);
constexpr uint8_t PCM_MODE_CFG_FORMAT_I2S = (0 << 3);
constexpr uint8_t PCM_MODE_CFG_FORMAT_TDM0 = (3 << 3);
constexpr uint8_t PCM_MODE_CFG_BLKEDGE_FALLING = (1 << 2);
constexpr uint8_t PCM_MODE_CFG_LRCLKPOL_FALLING = (1 << 1);
constexpr uint8_t PCM_MODE_CFG_TX_EXTRA_HIZ = (1 << 0);
// AMP_DSP_CFG bits
constexpr uint8_t AMP_DSP_CFG_DCBLK_EN = (1 << 0);
// AMP_ENABLE bits
constexpr uint8_t AMP_ENABLE_EN = (1 << 0);
// SPK_SRC_SEL bits
constexpr uint8_t SPK_SRC_SEL_DAI = 0;
constexpr uint8_t SPK_SRC_SEL_TONE_GEN = 2;
constexpr uint8_t SPK_SRC_SEL_PDM_IN = 3;
// SPK_GAIN bits
constexpr uint8_t SPK_GAIN_MUTE = 0;
constexpr uint8_t SPK_GAIN_3DB = 1;
constexpr uint8_t SPK_GAIN_6DB = 2;
constexpr uint8_t SPK_GAIN_9DB = 3;
constexpr uint8_t SPK_GAIN_12DB = 4;
constexpr uint8_t SPK_GAIN_15DB = 5;
constexpr uint8_t SPK_GAIN_18DB = 6;
_SIC_ uint8_t SPK_GAIN_PDM(uint8_t val) { return (uint8_t)(val << 4); }
_SIC_ uint8_t SPK_GAIN_PCM(uint8_t val) { return val; }
// MEAS_DSP_CFG bits
constexpr uint8_t MEAS_DSP_CFG_FREQ_0_06HZ = 0;
constexpr uint8_t MEAS_DSP_CFG_FREQ_0_118HZ = 1;
constexpr uint8_t MEAS_DSP_CFG_FREQ_0_235HZ = 2;
constexpr uint8_t MEAS_DSP_CFG_FREQ_3_7HZ = 3;
constexpr uint8_t MEAS_DSP_CFG_DITH_EN = (1 << 2);
constexpr uint8_t MEAS_DSP_CFG_I_DCBLK_EN = (1 << 1);
constexpr uint8_t MEAS_DSP_CFG_V_DCBLK_EN = (1 << 0);
_SIC_ uint8_t MEAS_DSP_CFG_I_DCBLK(uint8_t val) { return (uint8_t)(val << 6); }
_SIC_ uint8_t MEAS_DSP_CFG_V_DCBLK(uint8_t val) { return (uint8_t)(val << 4); }
// MEAS_ADC_CFG bits
// Ch0 = VBAT, Ch1 = VBST, Ch2 = temperature
constexpr uint8_t MEAS_ADC_CFG_CH2_EN = (1 << 2);
// BROWNOUT_EN bits
constexpr uint8_t BROWNOUT_EN_AMP_DSP_EN = (1 << 2);
// ENV_TRACKER_CTRL bits
constexpr uint8_t ENV_TRACKER_CTRL_EN = (1 << 0);
// GLOBAL_ENABLE bits
constexpr uint8_t GLOBAL_ENABLE_EN = (1 << 0);
// SOFTWARE_RESET bits
constexpr uint8_t SOFTWARE_RESET_RST = (1 << 0);
#undef _SIC_
} // namespace max98927
} // namespace audio