xref: /openbmc/linux/sound/soc/codecs/es8326.h (revision ac20a73d)
15c439937SZhu Ning /* SPDX-License-Identifier: GPL-2.0-only */
25c439937SZhu Ning /*
35c439937SZhu Ning  * es8326.h -- es8326 ALSA SoC audio driver
45c439937SZhu Ning  * Copyright Everest Semiconductor Co.,Ltd
55c439937SZhu Ning  *
65c439937SZhu Ning  * Authors: David Yang <yangxiaohua@everest-semi.com>
75c439937SZhu Ning  */
85c439937SZhu Ning 
95c439937SZhu Ning #ifndef _ES8326_H
105c439937SZhu Ning #define _ES8326_H
115c439937SZhu Ning 
125c439937SZhu Ning /* ES8326 register space */
135c439937SZhu Ning #define ES8326_RESET		0x00
145c439937SZhu Ning #define ES8326_CLK_CTL		0x01
155c439937SZhu Ning #define ES8326_CLK_INV		0x02
165c439937SZhu Ning #define ES8326_CLK_RESAMPLE	0x03
175c439937SZhu Ning #define ES8326_CLK_DIV1		0x04
185c439937SZhu Ning #define ES8326_CLK_DIV2		0x05
195c439937SZhu Ning #define ES8326_CLK_DLL		0x06
205c439937SZhu Ning #define ES8326_CLK_MUX		0x07
215c439937SZhu Ning #define ES8326_CLK_ADC_SEL	0x08
225c439937SZhu Ning #define ES8326_CLK_DAC_SEL	0x09
235c439937SZhu Ning #define ES8326_CLK_ADC_OSR	0x0a
245c439937SZhu Ning #define ES8326_CLK_DAC_OSR	0x0b
255c439937SZhu Ning #define ES8326_CLK_DIV_CPC	0x0c
265c439937SZhu Ning #define ES8326_CLK_DIV_BCLK	0x0d
275c439937SZhu Ning #define ES8326_CLK_TRI		0x0e
285c439937SZhu Ning #define ES8326_CLK_DIV_LRCK	0x0f
295c439937SZhu Ning #define ES8326_CLK_VMIDS1	0x10
305c439937SZhu Ning #define ES8326_CLK_VMIDS2	0x11
315c439937SZhu Ning #define ES8326_CLK_CAL_TIME	0x12
325c439937SZhu Ning #define ES8326_FMT		0x13
335c439937SZhu Ning 
345c439937SZhu Ning #define ES8326_DAC_MUTE		0x14
355c439937SZhu Ning #define ES8326_ADC_MUTE		0x15
365c439937SZhu Ning #define ES8326_ANA_PDN		0x16
375c439937SZhu Ning #define ES8326_PGA_PDN		0x17
385c439937SZhu Ning #define ES8326_VMIDSEL		0x18
395c439937SZhu Ning #define ES8326_ANA_LP		0x19
405c439937SZhu Ning #define ES8326_ANA_DMS		0x1a
415c439937SZhu Ning #define ES8326_ANA_MICBIAS	0x1b
425c439937SZhu Ning #define ES8326_ANA_VSEL		0x1c
435c439937SZhu Ning #define ES8326_SYS_BIAS		0x1d
445c439937SZhu Ning #define ES8326_BIAS_SW1		0x1e
455c439937SZhu Ning #define ES8326_BIAS_SW2		0x1f
465c439937SZhu Ning #define ES8326_BIAS_SW3		0x20
475c439937SZhu Ning #define ES8326_BIAS_SW4		0x21
485c439937SZhu Ning #define ES8326_VMIDLOW		0x22
495c439937SZhu Ning #define ES8326_PGAGAIN		0x23
505c439937SZhu Ning #define ES8326_HP_DRIVER	0x24
515c439937SZhu Ning #define ES8326_DAC2HPMIX	0x25
525c439937SZhu Ning #define ES8326_HP_VOL		0x26
535c439937SZhu Ning #define ES8326_HP_CAL		0x27
545c439937SZhu Ning #define ES8326_HP_DRIVER_REF	0x28
555c439937SZhu Ning #define ES8326_ADC_SCALE	0x29
565c439937SZhu Ning #define ES8326_ADC1_SRC		0x2a
575c439937SZhu Ning #define ES8326_ADC2_SRC		0x2b
585c439937SZhu Ning #define ES8326_ADC1_VOL		0x2c
595c439937SZhu Ning #define ES8326_ADC2_VOL		0x2d
605c439937SZhu Ning #define ES8326_ADC_RAMPRATE	0x2e
615c439937SZhu Ning #define ES8326_ALC_RECOVERY	0x32
625c439937SZhu Ning #define ES8326_ALC_LEVEL	0x33
635c439937SZhu Ning #define ES8326_ADC_HPFS1	0x34
645c439937SZhu Ning #define ES8326_ADC_HPFS2	0x35
655c439937SZhu Ning #define ES8326_ADC_EQ		0x36
665c439937SZhu Ning #define ES8326_HP_OFFSET_CAL	0x4A
675c439937SZhu Ning #define ES8326_HPL_OFFSET_INI	0x4B
685c439937SZhu Ning #define ES8326_HPR_OFFSET_INI	0x4C
695c439937SZhu Ning #define ES8326_DAC_DSM		0x4D
705c439937SZhu Ning #define ES8326_DAC_RAMPRATE	0x4E
715c439937SZhu Ning #define ES8326_DAC_VPPSCALE	0x4F
725c439937SZhu Ning #define ES8326_DAC_VOL		0x50
735c439937SZhu Ning #define ES8326_DRC_RECOVERY	0x53
745c439937SZhu Ning #define ES8326_DRC_WINSIZE	0x54
755c439937SZhu Ning #define ES8326_HPJACK_TIMER	0x56
764ddad00cSZhu Ning #define ES8326_HPDET_TYPE	0x57
775c439937SZhu Ning #define ES8326_INT_SOURCE	0x58
785c439937SZhu Ning #define ES8326_INTOUT_IO	0x59
795c439937SZhu Ning #define ES8326_SDINOUT1_IO	0x5A
805c439937SZhu Ning #define ES8326_SDINOUT23_IO	0x5B
815c439937SZhu Ning #define ES8326_JACK_PULSE	0x5C
825c439937SZhu Ning 
834ddad00cSZhu Ning #define ES8326_HP_MISC		0xF7
844ddad00cSZhu Ning #define ES8326_CTIA_OMTP_STA	0xF8
855c439937SZhu Ning #define ES8326_PULLUP_CTL	0xF9
864ddad00cSZhu Ning #define ES8326_CSM_I2C_STA	0xFA
874ddad00cSZhu Ning #define ES8326_HPDET_STA	0xFB
884ddad00cSZhu Ning #define ES8326_CSM_MUTE_STA	0xFC
895c439937SZhu Ning #define ES8326_CHIP_ID1		0xFD
905c439937SZhu Ning #define ES8326_CHIP_ID2		0xFE
915c439937SZhu Ning #define ES8326_CHIP_VERSION	0xFF
925c439937SZhu Ning 
935c439937SZhu Ning /* ES8326_RESET */
945c439937SZhu Ning #define ES8326_CSM_ON (1 << 7)
955c439937SZhu Ning #define ES8326_MASTER_MODE_EN	(1 << 6)
965c439937SZhu Ning #define	ES8326_PWRUP_SEQ_EN	(1 << 5)
975c439937SZhu Ning #define ES8326_CODEC_RESET (0x0f << 0)
985c439937SZhu Ning #define ES8326_CSM_OFF (0 << 7)
99083912c2SZhu Ning #define ES8326_MUTE_MASK (3 << 0)
100083912c2SZhu Ning #define ES8326_MUTE (3 << 0)
1015c439937SZhu Ning 
1025c439937SZhu Ning /* ES8326_CLK_CTL */
1035c439937SZhu Ning #define ES8326_CLK_ON (0x7f << 0)
1045c439937SZhu Ning #define ES8326_CLK_OFF (0 << 0)
1055c439937SZhu Ning 
1065c439937SZhu Ning /* ES8326_CLK_INV */
1075c439937SZhu Ning #define ES8326_BCLK_AS_MCLK (1 << 3)
1085c439937SZhu Ning 
1095c439937SZhu Ning /* ES8326_FMT */
1105c439937SZhu Ning #define ES8326_S24_LE	(0 << 2)
1115c439937SZhu Ning #define ES8326_S20_3_LE	(1 << 2)
1125c439937SZhu Ning #define ES8326_S18_LE	(2 << 2)
1135c439937SZhu Ning #define ES8326_S16_LE	(3 << 2)
1145c439937SZhu Ning #define ES8326_S32_LE	(4 << 2)
1155c439937SZhu Ning #define ES8326_DATA_LEN_MASK	(7 << 2)
1165c439937SZhu Ning 
1175c439937SZhu Ning #define ES8326_DAIFMT_MASK	((1 << 5) | (3 << 0))
1185c439937SZhu Ning #define ES8326_DAIFMT_I2S	0
1195c439937SZhu Ning #define ES8326_DAIFMT_LEFT_J	(1 << 0)
1205c439937SZhu Ning #define ES8326_DAIFMT_DSP_A	(3 << 0)
1215c439937SZhu Ning #define ES8326_DAIFMT_DSP_B	((1 << 5) | (3 << 0))
1225c439937SZhu Ning 
1235c439937SZhu Ning /* ES8326_PGAGAIN */
1245c439937SZhu Ning #define ES8326_MIC_SEL_MASK (3 << 4)
1255c439937SZhu Ning #define ES8326_MIC1_SEL	(1 << 4)
1265c439937SZhu Ning #define ES8326_MIC2_SEL (1 << 5)
1275c439937SZhu Ning 
1285c439937SZhu Ning /* ES8326_HP_CAL */
129083912c2SZhu Ning #define ES8326_HP_OFF 0
130083912c2SZhu Ning #define ES8326_HP_FORCE_CAL ((1 << 7) | (1 << 3))
131083912c2SZhu Ning #define ES8326_HP_ON ((7 << 4) | (7 << 0))
1325c439937SZhu Ning 
1335c439937SZhu Ning /* ES8326_ADC1_SRC */
1345c439937SZhu Ning #define ES8326_ADC1_SHIFT 0
1355c439937SZhu Ning #define ES8326_ADC2_SHIFT 4
1365c439937SZhu Ning #define ES8326_ADC_SRC_ANA 0
1375c439937SZhu Ning #define ES8326_ADC_SRC_ANA_INV_SW0 1
1385c439937SZhu Ning #define ES8326_ADC_SRC_ANA_INV_SW1 2
1395c439937SZhu Ning #define ES8326_ADC_SRC_DMIC_MCLK 3
1405c439937SZhu Ning #define ES8326_ADC_SRC_DMIC_SDIN2 4
1415c439937SZhu Ning #define ES8326_ADC_SRC_DMIC_SDIN2_INV 5
1425c439937SZhu Ning #define ES8326_ADC_SRC_DMIC_SDIN3 6
1435c439937SZhu Ning #define ES8326_ADC_SRC_DMIC_SDIN3_INV 7
1445c439937SZhu Ning 
1455c439937SZhu Ning #define ES8326_ADC_AMIC	((ES8326_ADC_SRC_ANA_INV_SW1 << ES8326_ADC2_SHIFT) \
1465c439937SZhu Ning 		| (ES8326_ADC_SRC_ANA_INV_SW1 << ES8326_ADC1_SHIFT))
1475c439937SZhu Ning #define ES8326_ADC_DMIC	((ES8326_ADC_SRC_DMIC_SDIN2 << ES8326_ADC2_SHIFT) \
1485c439937SZhu Ning 		| (ES8326_ADC_SRC_DMIC_SDIN2 << ES8326_ADC1_SHIFT))
1495c439937SZhu Ning /* ES8326_ADC2_SRC */
1505c439937SZhu Ning #define ES8326_ADC3_SHIFT 0
1515c439937SZhu Ning #define ES8326_ADC4_SHIFT 3
1525c439937SZhu Ning 
1534ddad00cSZhu Ning /* ES8326_HPDET_TYPE */
1545c439937SZhu Ning #define ES8326_HP_DET_SRC_PIN27 (1 << 5)
1555c439937SZhu Ning #define ES8326_HP_DET_SRC_PIN9 (1 << 4)
1565c439937SZhu Ning #define ES8326_HP_DET_JACK_POL (1 << 3)
1575c439937SZhu Ning #define ES8326_HP_DET_BUTTON_POL (1 << 2)
1585c439937SZhu Ning #define ES8326_HP_TYPE_OMTP	(3 << 0)
1595c439937SZhu Ning #define ES8326_HP_TYPE_CTIA	(2 << 0)
1605c439937SZhu Ning #define ES8326_HP_TYPE_AUTO	(1 << 0)
1615c439937SZhu Ning #define ES8326_HP_TYPE_AUTO_INV	(0 << 0)
1625c439937SZhu Ning 
163*ac20a73dSZhu Ning /* ES8326_INT_SOURCE */
164*ac20a73dSZhu Ning #define ES8326_INT_SRC_DAC_MOZ (1 << 0)
165*ac20a73dSZhu Ning #define ES8326_INT_SRC_ADC_MOZ (1 << 1)
166*ac20a73dSZhu Ning #define ES8326_INT_SRC_BUTTON (1 << 2)
167*ac20a73dSZhu Ning #define ES8326_INT_SRC_PIN9 (1 << 3)
168*ac20a73dSZhu Ning #define ES8326_INT_SRC_PIN27 (1 << 4)
169*ac20a73dSZhu Ning 
1705c439937SZhu Ning /* ES8326_SDINOUT1_IO */
1715c439937SZhu Ning #define ES8326_IO_INPUT	(0 << 0)
1725c439937SZhu Ning #define ES8326_IO_SDIN_SLOT0 (1 << 0)
1735c439937SZhu Ning #define ES8326_IO_SDIN_SLOT1 (2 << 0)
1745c439937SZhu Ning #define ES8326_IO_SDIN_SLOT2 (3 << 0)
1755c439937SZhu Ning #define ES8326_IO_SDIN_SLOT7 (8 << 0)
1765c439937SZhu Ning #define ES8326_IO_DMIC_CLK (9 << 0)
1775c439937SZhu Ning #define ES8326_IO_DMIC_CLK_INV (0x0a << 0)
1785c439937SZhu Ning #define ES8326_IO_SDOUT2 (0x0b << 0)
1795c439937SZhu Ning #define ES8326_IO_LOW (0x0e << 0)
1805c439937SZhu Ning #define ES8326_IO_HIGH (0x0f << 0)
1815c439937SZhu Ning #define ES8326_ADC2DAC (1 << 3)
1825c439937SZhu Ning #define ES8326_SDINOUT1_SHIFT 4
1835c439937SZhu Ning 
1845c439937SZhu Ning /* ES8326_SDINOUT23_IO */
1855c439937SZhu Ning #define ES8326_SDINOUT2_SHIFT 4
1865c439937SZhu Ning #define ES8326_SDINOUT3_SHIFT 0
1875c439937SZhu Ning 
1884ddad00cSZhu Ning /* ES8326_HPDET_STA */
1895c439937SZhu Ning #define ES8326_HPINSERT_FLAG (1 << 1)
1905c439937SZhu Ning #define ES8326_HPBUTTON_FLAG (1 << 0)
1915c439937SZhu Ning 
1925c439937SZhu Ning /* ES8326_CHIP_VERSION 0xFF */
193*ac20a73dSZhu Ning #define ES8326_VERSION (1 << 0)
194*ac20a73dSZhu Ning #define ES8326_VERSION_B (3 << 0)
1955c439937SZhu Ning 
1965c439937SZhu Ning #endif
197