355 lines
13 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* ES8396.h -- ES8396 ALSA SoC Audio Codec
*
* Based on alc5632.h by Arnaud Patard
*/
#ifndef _ES8396_H
#define _ES8396_H
/* THE REGISTER DEFINITION FORMAT */
/* ES8396_REGISTER NAME_REG_REGISTER ADDRESS */
/* write 0x01 to Register 0x00 will reset all registers of codec.
* Register 0x00 must be cleared before normal
*/
#define ES8396_RESET_REG00 0x00
/* Clock Scheme Register definition */
/* Register 0x01 for MCLK source selection */
#define ES8396_CLK_SRC_SEL_REG01 0x01
/* Register 0x02 for PLL power down/up, reset, divider and divider dither */
#define ES8396_PLL_CTRL_1_REG02 0x02
/* Register 0x03 for PLL low power mode and PLL power supply selection */
#define ES8396_PLL_CTRL_2_REG03 0x03
/* Register 0x04 for PLL N cofficient, must be in 5 to 13 range*/
#define ES8396_PLL_N_REG04 0x04
/* Register 0x05-0x07 for PLL k cofficient*/
#define ES8396_PLL_K2_REG05 0x05
#define ES8396_PLL_K1_REG06 0x06
#define ES8396_PLL_K0_REG07 0x07
/* Register 0x08 for ADC,DAC CHARGE PUMP and CLASS D clock switch*/
#define ES8396_CLK_CTRL_REG08 0x08
/* Register 0x09 for ADC MCLK divider*/
#define ES8396_ADC_CLK_DIV_REG09 0x09
/* Register 0x0A for DAC MCLK divider*/
#define ES8396_DAC_CLK_DIV_REG0A 0x0A
/* Register 0x0B for CHARGE PUMP CLOCK divider*/
#define ES8396_CP_CLK_DIV_REG0B 0x0B
/* Register 0x0C for CLASS D Amplifier Clock divider*/
#define ES8396_DAMP_CLK_DIV_REG0C 0x0C
/* Register 0x0D for DLL control and DAC MCLK SELECTION*/
#define ES8396_DLL_CTRL_REG0D 0x0D
/* Register 0x0E for BCLK divider1 in I2S BUS Master mode*/
#define ES8396_BCLK_DIV_M1_REG0E 0x0E
/* Register 0x0F for BCLK divider2 in I2S BUS Master mode*/
#define ES8396_BCLK_DIV_M2_REG0F 0x0F
/* Register 0x10 for LRCK divider3 in I2S BUS Master mode*/
#define ES8396_LRCK_DIV_M3_REG10 0x10
/* Register 0x11 for LRCK divider4 in I2S BUS Master mode*/
#define ES8396_LRCK_DIV_M4_REG11 0x11
/* PAD MUX REGISTER DEFINITION */
/* Register 0x12 for SDP1 Master or slave mode*/
#define ES8396_SDP_1_MS_REG12 0x12
/* Register 0x13 for SDP2 Master or slave mode*/
#define ES8396_SDP_2_MS_REG13 0x13
/* Register 0x14 for SDP1 Master or slave mode*/
#define ES8396_SDP_3_MS_REG14 0x14
/* Register 0x15 for ADLRCK or GPIO control*/
#define ES8396_ALRCK_GPIO_SEL_REG15 0x15
/* GPIO REGISTER DEFINITION */
/* Register 0x16 for GPIO interrupt*/
#define ES8396_GPIO_IRQ_REG16 0x16
/* Register 0x17 for GPIO STATUS*/
#define ES8396_GPIO_STA_REG17 0x17
/* Digital Mixer Register Definition */
/* Register 0x18 for Digital Mixer Source*/
#define ES8396_DMIX_SRC_1_REG18 0x18
/* Register 0x19 for Digital Mixer Source*/
#define ES8396_DMIX_SRC_2_REG19 0x19
/* Register 0x1A for DAC Digital Source and SDP1 Digital Output Source*/
#define ES8396_DAC_SRC_SDP1O_SRC_REG1A 0x1A
/* Register 0x1B for SDP2 and SDP3 Digital Output Source*/
#define ES8396_SDP2O_SDP3O_SRC_REG1B 0x1B
/* Register 0x1C for EQ CLOCK and OSR Selection*/
#define ES8396_EQ_CLK_OSR_SEL_REG1C 0x1C
/* Register 0x1D for Address of shared register map*/
#define ES8396_SHARED_ADDR_REG1D 0x1D
/* Register 0x1E for DATA of shared register map*/
#define ES8396_SHARED_DATA_REG1E 0x1E
/* Serial AUDIO Interface Register Definition */
/* Register 0x1F for SDP1 INPUT FORMAT*/
#define ES8396_SDP1_IN_FMT_REG1F 0x1F
/* Register 0x20 for SDP1 OUTPUT FORMAT*/
#define ES8396_SDP1_OUT_FMT_REG20 0x20
/* Register 0x21 for SDP1 Digital GAIN AND TDM MODE*/
#define ES8396_SDP1_DGAIN_TDM_REG21 0x21
/* Register 0x22 for SDP2 INPUT FORMAT*/
#define ES8396_SDP2_IN_FMT_REG22 0x22
/* Register 0x23 for SDP2 OUTPUT FORMAT*/
#define ES8396_SDP2_OUT_FMT_REG23 0x23
/* Register 0x24 for SDP3 INPUT FORMAT*/
#define ES8396_SDP3_IN_FMT_REG24 0x24
/* Register 0x25 for SDP3 OUTPUT FORMAT*/
#define ES8396_SDP3_OUT_FMT_REG25 0x25
/* SPEAKER MIXER Register Definition */
/* Register 0x26 for SPK MIXER*/
#define ES8396_SPK_MIXER_REG26 0x26
/* Register 0x27 for SPK MIXER BOOST GAIN*/
#define ES8396_SPK_MIXER_BOOST_REG27 0x27
/* Register 0x28 for SPK MIXER VOLUME*/
#define ES8396_SPK_MIXER_VOL_REG28 0x28
/* Register 0x29 for SPK MIXER REFERENCE AND LOW POWER MODE*/
#define ES8396_SPK_MIXER_REF_LP_REG29 0x29
/* HP MIXER Register Definition */
/* Register 0x2A for HP MIXER*/
#define ES8396_HP_MIXER_REG2A 0x2A
/* Register 0x2B for HP MIXER BOOST GAIN*/
#define ES8396_HP_MIXER_BOOST_REG2B 0x2B
/* Register 0x2C for HP MIXER VOLUME*/
#define ES8396_HP_MIXER_VOL_REG2C 0x2C
/* Register 0x2D for HP MIXER REFERENCE AND LOW POWER MODE*/
#define ES8396_HP_MIXER_REF_LP_REG2D 0x2D
/* AX MIXER Register Definition */
/* Register 0x2E for AX MIXER*/
#define ES8396_AX_MIXER_REG2E 0x2E
/* Register 0x2F for AX MIXER BOOST GAIN*/
#define ES8396_AX_MIXER_BOOST_REG2F 0x2F
/* Register 0x30 for AX MIXER VOLUME*/
#define ES8396_AX_MIXER_VOL_REG30 0x30
/* Register 0x31 for AX MIXER REFERENCE AND LOW POWER MODE*/
#define ES8396_AX_MIXER_REF_LP_REG31 0x31
/* LN MIXER Register Definition */
/* Register 0x32 for LN MIXER*/
#define ES8396_LN_MIXER_REG32 0x32
/* Register 0x33 for LN MIXER BOOST GAIN*/
#define ES8396_LN_MIXER_BOOST_REG33 0x33
/* Register 0x34 for LN MIXER VOLUME*/
#define ES8396_LN_MIXER_VOL_REG34 0x34
/* Register 0x35 for LN MIXER REFERENCE AND LOW POWER MODE*/
#define ES8396_LN_MIXER_REF_LP_REG35 0x35
/* MN MIXER Register Definition */
/* Register 0x36 for MN MIXER*/
#define ES8396_MN_MIXER_REG36 0x36
/* Register 0x37 for MN MIXER BOOST GAIN*/
#define ES8396_MN_MIXER_BOOST_REG37 0x37
/* Register 0x38 for MN MIXER VOLUME*/
#define ES8396_MN_MIXER_VOL_REG38 0x38
/* Register 0x39 for MN MIXER REFERENCE AND LOW POWER MODE*/
#define ES8396_MN_MIXER_REF_LP_REG39 0x39
/* SPKD Register Definition */
/* Register 0x3A for CLASS D control and SOURCE SELECTION*/
#define ES8396_SPK_CTRL_SRC_REG3A 0x3A
/* Register 0x3B for CLASS D Enabled and Volume Control*/
#define ES8396_SPK_EN_VOL_REG3B 0x3B
/* Register 0x3C for CLASS D CONTROL */
#define ES8396_SPK_CTRL_1_REG3C 0x3C
/* Register 0x3D for CLASS D CONTROL*/
#define ES8396_SPK_CTRL_2_REG3D 0x3D
/* CPHP Register Definition */
/* Register 0x3E for CPHP HPL ICAL VALUE*/
#define ES8396_CPHP_HPL_ICAL_REG3E 0x3E
/* Register 0x3F for CPHP HPR ICAL VALUE*/
#define ES8396_CPHP_HPR_ICAL_REG3F 0x3F
/* Register 0x40 for CPHP ENABLE */
#define ES8396_CPHP_ENABLE_REG40 0x40
/* Register 0x41 for CPHP VOLUME AND ICAL ENABLE*/
#define ES8396_CPHP_ICAL_VOL_REG41 0x41
/* Register 0x42 for CPHP CONTROL */
#define ES8396_CPHP_CTRL_1_REG42 0x42
/* Register 0x43 for CPHP CONTROL*/
#define ES8396_CPHP_CTRL_2_REG43 0x43
/* Register 0x44 for CPHP CONTROL*/
#define ES8396_CPHP_CTRL_3_REG44 0x44
/* MONOHP Register Definition */
/* Register 0x45 for MONOHP REFERENCE AND LOW POWER MODE*/
#define ES8396_MONOHP_REF_LP_REG45 0x45
/* Register 0x46 for MONOHP N MIXER*/
#define ES8396_MONOHP_N_MIXER_REG46 0x46
/* Register 0x47 for MONOHP P MIXER */
#define ES8396_MONOHP_P_MIXER_REG47 0x47
/* Register 0x48 for MONOHP P BOOST AND MUTE CONTROL*/
#define ES8396_MONOHP_P_BOOST_MUTE_REG48 0x48
/* Register 0x49 for MONOHP N BOOST AND MUTE CONTROL */
#define ES8396_MONOHP_N_BOOST_MUTE_REG49 0x49
/* LNOUT Register Definition */
/* Register 0x4A for LNOUT LOUT1 ENABLE AND MIXER*/
#define ES8396_LNOUT_LO1EN_LO1MIX_REG4A 0x4A
/* Register 0x4B for LNOUT ROUT1 ENABLE AND MIXER*/
#define ES8396_LNOUT_RO1EN_RO1MIX_REG4B 0x4B
/* Register 0x4C for LNOUT LOUT2 ENABLE AND MIXER*/
#define ES8396_LNOUT_LO2EN_LO2MIX_REG4C 0x4C
/* Register 0x4D for LNOUT ROUT2 ENABLE AND MIXER*/
#define ES8396_LNOUT_RO2EN_RO2MIX_REG4D 0x4D
/* Register 0x4E for LNOUT LOUT1 GAIN CONTROL */
#define ES8396_LNOUT_LO1_GAIN_CTRL_REG4E 0x4E
/* Register 0x4F for LNOUT ROUT1 GAIN CONTROL */
#define ES8396_LNOUT_RO1_GAIN_CTRL_REG4F 0x4F
/* Register 0x50 for LNOUT LOUT2 GAIN CONTROL */
#define ES8396_LNOUT_LO2_GAIN_CTRL_REG50 0x50
/* Register 0x51 for LNOUT ROUT2 GAIN CONTROL */
#define ES8396_LNOUT_RO2_GAIN_CTRL_REG51 0x51
/* Register 0x52 for LNOUT REFERENCE */
#define ES8396_LNOUT_REFERENCE_REG52 0x52
/* ADC Register Definition */
/* Register 0x53 for ADC CHIP STATE MACHINE and Digital Control*/
#define ES8396_ADC_CSM_REG53 0x53
/* Register 0x54 for ADC DMIC and Ramp Rate*/
#define ES8396_ADC_DMIC_RAMPRATE_REG54 0x54
/* Register 0x55 for ADC HIGH PASS FILTER,U-LAW/A-LAW COMPMODE,DATA SELECTION*/
#define ES8396_ADC_HPF_COMP_DASEL_REG55 0x55
/* Register 0x56 for ADC LEFT ADC VOLUME*/
#define ES8396_ADC_LADC_VOL_REG56 0x56
/* Register 0x57 for ADC RIGHT ADC VOLUME */
#define ES8396_ADC_RADC_VOL_REG57 0x57
/* Register 0x58 for ADC ALC CONTROL 1*/
#define ES8396_ADC_ALC_CTRL_1_REG58 0x58
/* Register 0x59 for ADC ALC CONTROL 2 */
#define ES8396_ADC_ALC_CTRL_2_REG59 0x59
/* Register 0x5A for ADC ALC CONTROL 3 */
#define ES8396_ADC_ALC_CTRL_3_REG5A 0x5A
/* Register 0x5B for ADC ALC CONTROL 4 */
#define ES8396_ADC_ALC_CTRL_4_REG5B 0x5B
/* Register 0x5C for ADC ALC CONTROL 5*/
#define ES8396_ADC_ALC_CTRL_5_REG5C 0x5C
/* Register 0x5D for ADC ALC CONTROL 6*/
#define ES8396_ADC_ALC_CTRL_6_REG5D 0x5D
/* Register 0x5E for ADC ANALOG CONTROL*/
#define ES8396_ADC_ANALOG_CTRL_REG5E 0x5E
/* Register 0x5F for ADC LOW POWER MODE AND REFERENCE*/
#define ES8396_ADC_LP_REFERENCE_REG5F 0x5F
/* Register 0x60 for ADC MIC BOOST */
#define ES8396_ADC_MICBOOST_REG60 0x60
/* Register 0x61 for ADC L/R PGA GAIN */
#define ES8396_ADC_PGA_GAIN_REG61 0x61
/* Register 0x62 for ADC LPGA MIXER */
#define ES8396_ADC_LPGA_MIXER_REG62 0x62
/* Register 0x63 for ADC RPGA MIXER */
#define ES8396_ADC_RPGA_MIXER_REG63 0x63
/* Register 0x64 for ADC LNMUX */
#define ES8396_ADC_LN_MUX_REG64 0x64
/* Register 0x65 for ADC AXMUX */
#define ES8396_ADC_AX_MUX_REG65 0x65
/* DAC Register Definition */
/* Register 0x66 for DAC CHIP STATE MACHINE AND MUTE CONTROL*/
#define ES8396_DAC_CSM_REG66 0x66
/* Register 0x67 for DAC RAMPE RATE AND MONO/ZERO CONTROL*/
#define ES8396_DAC_RAMP_RATE_REG67 0x67
/* Register 0x68 for DAC STEREO ENHANCEMENT */
#define ES8396_DAC_STEREO_ENHANCE_REG68 0x68
/* Register 0x69 for DAC JACK DETECTION AND U/A-LAW COMPRESS */
#define ES8396_DAC_JACK_DET_COMP_REG69 0x69
/* Register 0x6A for DAC LEFT DAC VOLUME */
#define ES8396_DAC_LDAC_VOL_REG6A 0x6A
/* Register 0x6B for DAC RIGHT DAC VOLUME */
#define ES8396_DAC_RDAC_VOL_REG6B 0x6B
/* Register 0x6C for DAC LIMITER CONTROL 1 */
#define ES8396_DAC_DPL_CTRL_1_REG6C 0x6C
/* Register 0x6D for DAC LIMITER CONTROL 2 */
#define ES8396_DAC_DPL_CTRL_2_REG6D 0x6D
/* Register 0x6E for DAC REFERENCE AND POWER CONTROL */
#define ES8396_DAC_REF_PWR_CTRL_REG6E 0x6E
/* Register 0x6F for DAC DC OFFSET CALIBRATION */
#define ES8396_DAC_OFFSET_CALI_REG6F 0x6F
/* SYSTEM Register Definition */
/* Register 0x70 for CHIP ANALOG CONTROL,
* SUCH AS ANALOG POWER CONTROL, AVDDLDO POWER CONTROL */
#define ES8396_SYS_CHIP_ANA_CTL_REG70 0x70
/* Register 0x71 for VMID SELECTION AND REFERENCE */
#define ES8396_SYS_VMID_REF_REG71 0x71
/* Register 0x72 for VSEL 1 */
#define ES8396_SYS_VSEL_1_REG72 0x72
/* Register 0x73 for VSEL 2 */
#define ES8396_SYS_VSEL_2_REG73 0x73
/* Register 0x74 for MICBIAS CONTROL */
#define ES8396_SYS_MICBIAS_CTRL_REG74 0x74
/* Register 0x75 for MIC ENABLE AND IBIASGEN SELECTION*/
#define ES8396_SYS_MIC_IBIAS_EN_REG75 0x75
/* undocumented */
/* Write 0XA0 TO REG0X76 to ENABLE TEST MODE*/
#define ES8396_TEST_MODE_REG76 0x76
#define ES8396_ADC_FORCE_REG77 0x77
#define ES8396_NGTH_REG7A 0X7A
#define ES8396_MAX_REGISTER 0x7F
#define NO_EVENT 0
#define JD_EVENT 1
#define BOT_EVENT 2
#define DET_HEADPHONE 1
#define DET_HEADSET 2
#define BOT_NULL 0
#define BOT_DWN 1
#define MICBIAS_3V 7
#define MICBIAS_2_8V 6
#define MICBIAS_2_5V 1
#define MICBIAS_2_3V 2
#define MICBIAS_2V 4
#define MICBIAS_1_5V 0
#define MIC_AMIC 0
#define MIC_DMIC 1
#define ANA_LDO_3V 3
#define ANA_LDO_2_9V 2
#define ANA_LDO_2_8V 1
#define ANA_LDO_2_7V 0
#define ANA_LDO_2_4V 7
#define ANA_LDO_2_3V 6
#define ANA_LDO_2_2V 5
#define ANA_LDO_2_1V 4
#define SPK_LDO_3_3V 3
#define SPK_LDO_3_2V 2
#define SPK_LDO_3V 1
#define SPK_LDO_2_9V 0
#define SPK_LDO_2_8V 7
#define SPK_LDO_2_6V 6
#define SPK_LDO_2_5V 5
#define SPK_LDO_2_4V 4
#define ES8396_AIF_MUTE 0x40
#define ES8396_SDP1 0
#define ES8396_SDP2 1
#define ES8396_SDP3 2
/*
* es8396 System clock derived from MCLK or BCLK
*/
#define ES8396_CLKID_MCLK 0
#define ES8396_CLKID_BCLK 1
#define ES8396_CLKID_PLLO 2
/*
* PLL clock source
*/
#define ES8396_PLL 0
#define ES8396_PLL_NO_SRC_0 0
#define ES8396_PLL_SRC_FRM_MCLK 1
#define ES8396_PLL_NO_SRC_1 2
#define ES8396_PLL_SRC_FRM_BCLK 3
#define MS_MASTER (0x24)
#endif