355 lines
13 KiB
C
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
|