linux/sound/soc/codecs/nau8824.h

/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * NAU88L24 ALSA SoC audio driver
 *
 * Copyright 2016 Nuvoton Technology Corp.
 * Author: John Hsu <[email protected]>
 */

#ifndef __NAU8824_H__
#define __NAU8824_H__

#define NAU8824_REG_RESET
#define NAU8824_REG_ENA_CTRL
#define NAU8824_REG_CLK_GATING_ENA
#define NAU8824_REG_CLK_DIVIDER
#define NAU8824_REG_FLL1
#define NAU8824_REG_FLL2
#define NAU8824_REG_FLL3
#define NAU8824_REG_FLL4
#define NAU8824_REG_FLL5
#define NAU8824_REG_FLL6
#define NAU8824_REG_FLL_VCO_RSV
#define NAU8824_REG_JACK_DET_CTRL
#define NAU8824_REG_INTERRUPT_SETTING_1
#define NAU8824_REG_IRQ
#define NAU8824_REG_CLEAR_INT_REG
#define NAU8824_REG_INTERRUPT_SETTING
#define NAU8824_REG_SAR_ADC
#define NAU8824_REG_VDET_COEFFICIENT
#define NAU8824_REG_VDET_THRESHOLD_1
#define NAU8824_REG_VDET_THRESHOLD_2
#define NAU8824_REG_VDET_THRESHOLD_3
#define NAU8824_REG_VDET_THRESHOLD_4
#define NAU8824_REG_GPIO_SEL
#define NAU8824_REG_PORT0_I2S_PCM_CTRL_1
#define NAU8824_REG_PORT0_I2S_PCM_CTRL_2
#define NAU8824_REG_PORT0_LEFT_TIME_SLOT
#define NAU8824_REG_PORT0_RIGHT_TIME_SLOT
#define NAU8824_REG_TDM_CTRL
#define NAU8824_REG_ADC_HPF_FILTER
#define NAU8824_REG_ADC_FILTER_CTRL
#define NAU8824_REG_DAC_FILTER_CTRL_1
#define NAU8824_REG_DAC_FILTER_CTRL_2
#define NAU8824_REG_NOTCH_FILTER_1
#define NAU8824_REG_NOTCH_FILTER_2
#define NAU8824_REG_EQ1_LOW
#define NAU8824_REG_EQ2_EQ3
#define NAU8824_REG_EQ4_EQ5
#define NAU8824_REG_ADC_CH0_DGAIN_CTRL
#define NAU8824_REG_ADC_CH1_DGAIN_CTRL
#define NAU8824_REG_ADC_CH2_DGAIN_CTRL
#define NAU8824_REG_ADC_CH3_DGAIN_CTRL
#define NAU8824_REG_DAC_MUTE_CTRL
#define NAU8824_REG_DAC_CH0_DGAIN_CTRL
#define NAU8824_REG_DAC_CH1_DGAIN_CTRL
#define NAU8824_REG_ADC_TO_DAC_ST
#define NAU8824_REG_DRC_KNEE_IP12_ADC_CH01
#define NAU8824_REG_DRC_KNEE_IP34_ADC_CH01
#define NAU8824_REG_DRC_SLOPE_ADC_CH01
#define NAU8824_REG_DRC_ATKDCY_ADC_CH01
#define NAU8824_REG_DRC_KNEE_IP12_ADC_CH23
#define NAU8824_REG_DRC_KNEE_IP34_ADC_CH23
#define NAU8824_REG_DRC_SLOPE_ADC_CH23
#define NAU8824_REG_DRC_ATKDCY_ADC_CH23
#define NAU8824_REG_DRC_GAINL_ADC0
#define NAU8824_REG_DRC_GAINL_ADC1
#define NAU8824_REG_DRC_GAINL_ADC2
#define NAU8824_REG_DRC_GAINL_ADC3
#define NAU8824_REG_DRC_KNEE_IP12_DAC
#define NAU8824_REG_DRC_KNEE_IP34_DAC
#define NAU8824_REG_DRC_SLOPE_DAC
#define NAU8824_REG_DRC_ATKDCY_DAC
#define NAU8824_REG_DRC_GAIN_DAC_CH0
#define NAU8824_REG_DRC_GAIN_DAC_CH1
#define NAU8824_REG_MODE
#define NAU8824_REG_MODE1
#define NAU8824_REG_MODE2
#define NAU8824_REG_CLASSG
#define NAU8824_REG_OTP_EFUSE
#define NAU8824_REG_OTPDOUT_1
#define NAU8824_REG_OTPDOUT_2
#define NAU8824_REG_MISC_CTRL
#define NAU8824_REG_I2C_TIMEOUT
#define NAU8824_REG_TEST_MODE
#define NAU8824_REG_I2C_DEVICE_ID
#define NAU8824_REG_SAR_ADC_DATA_OUT
#define NAU8824_REG_BIAS_ADJ
#define NAU8824_REG_PGA_GAIN
#define NAU8824_REG_TRIM_SETTINGS
#define NAU8824_REG_ANALOG_CONTROL_1
#define NAU8824_REG_ANALOG_CONTROL_2
#define NAU8824_REG_ENABLE_LO
#define NAU8824_REG_GAIN_LO
#define NAU8824_REG_CLASSD_GAIN_1
#define NAU8824_REG_CLASSD_GAIN_2
#define NAU8824_REG_ANALOG_ADC_1
#define NAU8824_REG_ANALOG_ADC_2
#define NAU8824_REG_RDAC
#define NAU8824_REG_MIC_BIAS
#define NAU8824_REG_HS_VOLUME_CONTROL
#define NAU8824_REG_BOOST
#define NAU8824_REG_FEPGA
#define NAU8824_REG_FEPGA_II
#define NAU8824_REG_FEPGA_SE
#define NAU8824_REG_FEPGA_ATTENUATION
#define NAU8824_REG_ATT_PORT0
#define NAU8824_REG_ATT_PORT1
#define NAU8824_REG_POWER_UP_CONTROL
#define NAU8824_REG_CHARGE_PUMP_CONTROL
#define NAU8824_REG_CHARGE_PUMP_INPUT
#define NAU8824_REG_MAX
/* 16-bit control register address, and 16-bits control register data */
#define NAU8824_REG_ADDR_LEN
#define NAU8824_REG_DATA_LEN


/* ENA_CTRL (0x1) */
#define NAU8824_DMIC_LCH_EDGE_CH23
#define NAU8824_DMIC_LCH_EDGE_CH01
#define NAU8824_JD_SLEEP_MODE
#define NAU8824_ADC_CH3_DMIC_SFT
#define NAU8824_ADC_CH3_DMIC_EN
#define NAU8824_ADC_CH2_DMIC_SFT
#define NAU8824_ADC_CH2_DMIC_EN
#define NAU8824_ADC_CH1_DMIC_SFT
#define NAU8824_ADC_CH1_DMIC_EN
#define NAU8824_ADC_CH0_DMIC_SFT
#define NAU8824_ADC_CH0_DMIC_EN
#define NAU8824_DAC_CH1_EN
#define NAU8824_DAC_CH0_EN
#define NAU8824_ADC_CH3_EN
#define NAU8824_ADC_CH2_EN
#define NAU8824_ADC_CH1_EN
#define NAU8824_ADC_CH0_EN

/* CLK_GATING_ENA (0x02) */
#define NAU8824_CLK_ADC_CH23_EN
#define NAU8824_CLK_ADC_CH01_EN
#define NAU8824_CLK_DAC_CH1_EN
#define NAU8824_CLK_DAC_CH0_EN
#define NAU8824_CLK_I2S_EN
#define NAU8824_CLK_GAIN_EN
#define NAU8824_CLK_SAR_EN
#define NAU8824_CLK_DMIC_CH23_EN

/* CLK_DIVIDER (0x3) */
#define NAU8824_CLK_SRC_SFT
#define NAU8824_CLK_SRC_MASK
#define NAU8824_CLK_SRC_VCO
#define NAU8824_CLK_SRC_MCLK
#define NAU8824_CLK_MCLK_SRC_MASK
#define NAU8824_CLK_DMIC_SRC_SFT
#define NAU8824_CLK_DMIC_SRC_MASK
#define NAU8824_CLK_ADC_SRC_SFT
#define NAU8824_CLK_ADC_SRC_MASK
#define NAU8824_CLK_DAC_SRC_SFT
#define NAU8824_CLK_DAC_SRC_MASK

/* FLL1 (0x04) */
#define NAU8824_FLL_RATIO_MASK

/* FLL3 (0x06) */
#define NAU8824_FLL_INTEGER_MASK
#define NAU8824_FLL_CLK_SRC_SFT
#define NAU8824_FLL_CLK_SRC_MASK
#define NAU8824_FLL_CLK_SRC_MCLK
#define NAU8824_FLL_CLK_SRC_BLK
#define NAU8824_FLL_CLK_SRC_FS

/* FLL4 (0x07) */
#define NAU8824_FLL_REF_DIV_SFT
#define NAU8824_FLL_REF_DIV_MASK

/* FLL5 (0x08) */
#define NAU8824_FLL_PDB_DAC_EN
#define NAU8824_FLL_LOOP_FTR_EN
#define NAU8824_FLL_CLK_SW_MASK
#define NAU8824_FLL_CLK_SW_N2
#define NAU8824_FLL_CLK_SW_REF
#define NAU8824_FLL_FTR_SW_MASK
#define NAU8824_FLL_FTR_SW_ACCU
#define NAU8824_FLL_FTR_SW_FILTER

/* FLL6 (0x9) */
#define NAU8824_DCO_EN
#define NAU8824_SDM_EN

/* IRQ (0x10) */
#define NAU8824_SHORT_CIRCUIT_IRQ
#define NAU8824_IMPEDANCE_MEAS_IRQ
#define NAU8824_KEY_RELEASE_IRQ
#define NAU8824_KEY_LONG_PRESS_IRQ
#define NAU8824_KEY_SHORT_PRESS_IRQ
#define NAU8824_JACK_EJECTION_DETECTED
#define NAU8824_JACK_INSERTION_DETECTED

/* JACK_DET_CTRL (0x0D) */
#define NAU8824_JACK_EJECT_DT_SFT
#define NAU8824_JACK_EJECT_DT_MASK
#define NAU8824_JACK_LOGIC


/* INTERRUPT_SETTING_1 (0x0F) */
#define NAU8824_IRQ_EJECT_EN
#define NAU8824_IRQ_INSERT_EN

/* INTERRUPT_SETTING (0x12) */
#define NAU8824_IRQ_KEY_RELEASE_DIS
#define NAU8824_IRQ_KEY_SHORT_PRESS_DIS
#define NAU8824_IRQ_EJECT_DIS
#define NAU8824_IRQ_INSERT_DIS

/* SAR_ADC (0x13) */
#define NAU8824_SAR_ADC_EN_SFT
#define NAU8824_SAR_TRACKING_GAIN_SFT
#define NAU8824_SAR_TRACKING_GAIN_MASK
#define NAU8824_SAR_COMPARE_TIME_SFT
#define NAU8824_SAR_COMPARE_TIME_MASK
#define NAU8824_SAR_SAMPLING_TIME_SFT
#define NAU8824_SAR_SAMPLING_TIME_MASK

/* VDET_COEFFICIENT (0x14) */
#define NAU8824_SHORTKEY_DEBOUNCE_SFT
#define NAU8824_SHORTKEY_DEBOUNCE_MASK
#define NAU8824_LEVELS_NR_SFT
#define NAU8824_LEVELS_NR_MASK
#define NAU8824_HYSTERESIS_SFT
#define NAU8824_HYSTERESIS_MASK

/* PORT0_I2S_PCM_CTRL_1 (0x1C) */
#define NAU8824_I2S_BP_SFT
#define NAU8824_I2S_BP_MASK
#define NAU8824_I2S_BP_INV
#define NAU8824_I2S_PCMB_SFT
#define NAU8824_I2S_PCMB_EN
#define NAU8824_I2S_DL_SFT
#define NAU8824_I2S_DL_MASK
#define NAU8824_I2S_DL_16
#define NAU8824_I2S_DL_20
#define NAU8824_I2S_DL_24
#define NAU8824_I2S_DL_32
#define NAU8824_I2S_DF_MASK
#define NAU8824_I2S_DF_RIGTH
#define NAU8824_I2S_DF_LEFT
#define NAU8824_I2S_DF_I2S
#define NAU8824_I2S_DF_PCM_AB


/* PORT0_I2S_PCM_CTRL_2 (0x1D) */
#define NAU8824_I2S_LRC_DIV_SFT
#define NAU8824_I2S_LRC_DIV_MASK
#define NAU8824_I2S_MS_SFT
#define NAU8824_I2S_MS_MASK
#define NAU8824_I2S_MS_MASTER
#define NAU8824_I2S_MS_SLAVE
#define NAU8824_I2S_BLK_DIV_MASK

/* PORT0_LEFT_TIME_SLOT (0x1E) */
#define NAU8824_TSLOT_L_MASK

/* TDM_CTRL (0x20) */
#define NAU8824_TDM_MODE
#define NAU8824_TDM_OFFSET_EN
#define NAU8824_TDM_DACL_RX_SFT
#define NAU8824_TDM_DACL_RX_MASK
#define NAU8824_TDM_DACR_RX_SFT
#define NAU8824_TDM_DACR_RX_MASK
#define NAU8824_TDM_TX_MASK

/* ADC_FILTER_CTRL (0x24) */
#define NAU8824_ADC_SYNC_DOWN_MASK
#define NAU8824_ADC_SYNC_DOWN_32
#define NAU8824_ADC_SYNC_DOWN_64
#define NAU8824_ADC_SYNC_DOWN_128
#define NAU8824_ADC_SYNC_DOWN_256

/* DAC_FILTER_CTRL_1 (0x25) */
#define NAU8824_DAC_CICCLP_OFF
#define NAU8824_DAC_OVERSAMPLE_MASK
#define NAU8824_DAC_OVERSAMPLE_64
#define NAU8824_DAC_OVERSAMPLE_256
#define NAU8824_DAC_OVERSAMPLE_128
#define NAU8824_DAC_OVERSAMPLE_32

/* DAC_MUTE_CTRL (0x31) */
#define NAU8824_DAC_CH01_MIX
#define NAU8824_DAC_ZC_EN

/* DAC_CH0_DGAIN_CTRL (0x32) */
#define NAU8824_DAC_CH0_SEL_SFT
#define NAU8824_DAC_CH0_SEL_MASK
#define NAU8824_DAC_CH0_SEL_I2S0
#define NAU8824_DAC_CH0_SEL_I2S1
#define NAU8824_DAC_CH0_VOL_MASK

/* DAC_CH1_DGAIN_CTRL (0x33) */
#define NAU8824_DAC_CH1_SEL_SFT
#define NAU8824_DAC_CH1_SEL_MASK
#define NAU8824_DAC_CH1_SEL_I2S0
#define NAU8824_DAC_CH1_SEL_I2S1
#define NAU8824_DAC_CH1_VOL_MASK

/* CLASSG (0x50) */
#define NAU8824_CLASSG_TIMER_SFT
#define NAU8824_CLASSG_TIMER_MASK
#define NAU8824_CLASSG_LDAC_EN_SFT
#define NAU8824_CLASSG_RDAC_EN_SFT
#define NAU8824_CLASSG_EN_SFT

/* SAR_ADC_DATA_OUT (0x59) */
#define NAU8824_SAR_ADC_DATA_MASK

/* BIAS_ADJ (0x66) */
#define NAU8824_VMID
#define NAU8824_VMID_SEL_SFT
#define NAU8824_VMID_SEL_MASK
#define NAU8824_DMIC2_EN_SFT
#define NAU8824_DMIC1_EN_SFT

/* TRIM_SETTINGS (0x68) */
#define NAU8824_DRV_CURR_INC

/* ANALOG_CONTROL_1 (0x69) */
#define NAU8824_DMIC_CLK_DRV_STRG
#define NAU8824_DMIC_CLK_SLEW_FAST

/* ANALOG_CONTROL_2 (0x6A) */
#define NAU8824_CLASSD_CLAMP_DIS_SFT
#define NAU8824_CLASSD_CLAMP_DIS

/* ENABLE_LO (0x6B) */
#define NAU8824_TEST_DAC_SFT
#define NAU8824_TEST_DAC_EN
#define NAU8824_DACL_HPR_EN_SFT
#define NAU8824_DACL_HPR_EN
#define NAU8824_DACR_HPR_EN_SFT
#define NAU8824_DACR_HPR_EN
#define NAU8824_DACR_HPL_EN_SFT
#define NAU8824_DACR_HPL_EN
#define NAU8824_DACL_HPL_EN_SFT
#define NAU8824_DACL_HPL_EN

/* CLASSD_GAIN_1 (0x6D) */
#define NAU8824_CLASSD_GAIN_1R_SFT
#define NAU8824_CLASSD_GAIN_1R_MASK
#define NAU8824_CLASSD_EN_SFT
#define NAU8824_CLASSD_EN
#define NAU8824_CLASSD_GAIN_1L_MASK

/* CLASSD_GAIN_2 (0x6E) */
#define NAU8824_CLASSD_GAIN_2R_SFT
#define NAU8824_CLASSD_GAIN_2R_MASK
#define NAU8824_CLASSD_EN_SFT
#define NAU8824_CLASSD_EN
#define NAU8824_CLASSD_GAIN_2L_MASK

/* ANALOG_ADC_2 (0x72) */
#define NAU8824_ADCR_EN_SFT
#define NAU8824_ADCL_EN_SFT

/* RDAC (0x73) */
#define NAU8824_DACR_EN_SFT
#define NAU8824_DACL_EN_SFT
#define NAU8824_DACR_CLK_SFT
#define NAU8824_DACL_CLK_SFT
#define NAU8824_RDAC_CLK_DELAY_SFT
#define NAU8824_RDAC_CLK_DELAY_MASK
#define NAU8824_RDAC_VREF_SFT
#define NAU8824_RDAC_VREF_MASK

/* MIC_BIAS (0x74) */
#define NAU8824_MICBIAS_JKSLV
#define NAU8824_MICBIAS_JKR2
#define NAU8824_MICBIAS_POWERUP_SFT
#define NAU8824_MICBIAS_VOLTAGE_SFT
#define NAU8824_MICBIAS_VOLTAGE_MASK

/* BOOST (0x76) */
#define NAU8824_PRECHARGE_DIS
#define NAU8824_GLOBAL_BIAS_EN
#define NAU8824_HP_BOOST_DIS_SFT
#define NAU8824_HP_BOOST_DIS
#define NAU8824_HP_BOOST_G_DIS_SFT
#define NAU8824_HP_BOOST_G_DIS
#define NAU8824_SHORT_SHUTDOWN_DIG_EN
#define NAU8824_SHORT_SHUTDOWN_EN

/* FEPGA (0x77) */
#define NAU8824_FEPGA_MODER_SHORT_SFT
#define NAU8824_FEPGA_MODER_SHORT_EN
#define NAU8824_FEPGA_MODER_MIC2_SFT
#define NAU8824_FEPGA_MODER_MIC2_EN
#define NAU8824_FEPGA_MODER_HSMIC_SFT
#define NAU8824_FEPGA_MODER_HSMIC_EN
#define NAU8824_FEPGA_MODEL_SHORT_SFT
#define NAU8824_FEPGA_MODEL_SHORT_EN
#define NAU8824_FEPGA_MODEL_MIC1_SFT
#define NAU8824_FEPGA_MODEL_MIC1_EN
#define NAU8824_FEPGA_MODEL_HSMIC_SFT
#define NAU8824_FEPGA_MODEL_HSMIC_EN

/* FEPGA_II (0x78) */
#define NAU8824_FEPGA_GAINR_SFT
#define NAU8824_FEPGA_GAINR_MASK
#define NAU8824_FEPGA_GAINL_SFT
#define NAU8824_FEPGA_GAINL_MASK

/* CHARGE_PUMP_CONTROL (0x80) */
#define NAU8824_JAMNODCLOW
#define NAU8824_SPKR_PULL_DOWN
#define NAU8824_SPKL_PULL_DOWN
#define NAU8824_POWER_DOWN_DACR
#define NAU8824_POWER_DOWN_DACL
#define NAU8824_CHARGE_PUMP_EN_SFT
#define NAU8824_CHARGE_PUMP_EN


#define NAU8824_CODEC_DAI

/* System Clock Source */
enum {};

struct nau8824 {};

struct nau8824_fll {};

struct nau8824_fll_attr {};

struct nau8824_osr_attr {};


int nau8824_enable_jack_detect(struct snd_soc_component *component,
	struct snd_soc_jack *jack);
const char *nau8824_components(void);

#endif				/* _NAU8824_H */