/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright Openedhand Ltd.
 *
 * Author: Richard Purdie <richard@openedhand.com>
 *         Binbin Zhou <zhoubinbin@loongson.cn>
 *
 */

#ifndef _ES8323_H
#define _ES8323_H

/* ES8323 register space */

/* Chip Control and Power Management */
#define ES8323_CONTROL1		0x00
#define ES8323_CONTROL2		0x01
#define ES8323_CHIPPOWER	0x02

#define ES8323_CHIPPOWER_DACVREF_OFF	0
#define ES8323_CHIPPOWER_ADCVREF_OFF	1
#define ES8323_CHIPPOWER_DACDLL_OFF	2
#define ES8323_CHIPPOWER_ADCDLL_OFF	3
#define ES8323_CHIPPOWER_DACSTM_RESET	4
#define ES8323_CHIPPOWER_ADCSTM_RESET	5
#define ES8323_CHIPPOWER_DACDIG_OFF	6
#define ES8323_CHIPPOWER_ADCDIG_OFF	7

#define ES8323_ADCPOWER		0x03

#define ES8323_ADCPOWER_INT1LP		BIT(0)
#define ES8323_ADCPOWER_FLASHLP		BIT(1)
#define ES8323_ADCPOWER_PDNADCBIS	BIT(2)
#define ES8323_ADCPOWER_PDNMICB		BIT(3)

#define ES8323_ADCPOWER_PDNADCBIS_OFF	2
#define ES8323_ADCPOWER_PDNMICB_OFF	3
#define ES8323_ADCPOWER_PDNADCR_OFF	4
#define ES8323_ADCPOWER_PDNADCL_OFF	5
#define ES8323_ADCPOWER_PDNAINR_OFF	6
#define ES8323_ADCPOWER_PDNAINL_OFF	7

#define ES8323_DACPOWER		0x04

#define ES8323_DACPOWER_ROUT2_OFF	2
#define ES8323_DACPOWER_LOUT2_OFF	3
#define ES8323_DACPOWER_ROUT1_OFF	4
#define ES8323_DACPOWER_LOUT1_OFF	5
#define ES8323_DACPOWER_PDNDACR_OFF	6
#define ES8323_DACPOWER_PDNDACL_OFF	7

#define ES8323_CHIPLOPOW1	0x05
#define ES8323_CHIPLOPOW2	0x06
#define ES8323_ANAVOLMANAG	0x07
#define ES8323_MASTERMODE	0x08

#define ES8323_MASTERMODE_BCLKDIV	GENMASK(4, 0)
#define ES8323_MASTERMODE_BCLKINV	BIT(5)
#define ES8323_MASTERMODE_MCLKDIV2	BIT(6)
#define ES8323_MASTERMODE_MSC		BIT(7)

/* ADC Control */
#define ES8323_ADCCONTROL1	0x09

#define ES8323_ADCCONTROL1_MICAMPR_OFF	0
#define ES8323_ADCCONTROL1_MICAMPL_OFF	4

#define ES8323_ADCCONTROL2	0x0a
#define ES8323_ADCCONTROL3	0x0b
#define ES8323_ADCCONTROL4	0x0c

#define ES8323_ADCCONTROL4_ADCFORMAT	GENMASK(1, 0)
#define ES8323_FMT_I2S			0x0
#define ES8323_FMT_LEFT_J		0x1
#define ES8323_FMT_RIGHT_J		0x2
#define ES8323_FMT_DSP			0x3
#define ES8323_ADCCONTROL4_ADCWL	GENMASK(4, 2)
#define ES8323_S24_LE			0x0
#define ES8323_S20_LE			0x1
#define ES8323_S18_LE			0x2
#define ES8323_S16_LE			0x3
#define ES8323_S32_LE			0x4
#define ES8323_ADCCONTROL4_ADCLRP	BIT(5)
#define ES8323_ADCCONTROL4_DATSEL	GENMASK(7, 6)

#define ES8323_ADCCONTROL5	0x0d

#define ES8323_ADCCONTROL5_ADCFSRATIO	GENMASK(4, 0)
#define ES8323_ADCCONTROL5_ADCFSMODE	BIT(5)
#define ES8323_ADCCONTROL5_ADCFS_MASK	(ES8323_ADCCONTROL5_ADCFSRATIO |\
					 ES8323_ADCCONTROL5_ADCFSMODE)

#define ES8323_ADCCONTROL6	0x0e
#define ES8323_ADCCONTROL7	0x0f

#define ES8323_ADCCONTROL7_ADCMUTE_OFF	2

#define ES8323_LADC_VOL		0x10
#define ES8323_RADC_VOL		0x11
#define ES8323_ADCCONTROL10	0x12
#define ES8323_ADCCONTROL11	0x13
#define ES8323_ADCCONTROL12	0x14

#define ES8323_ADCCONTROL12_ALCATK_OFF	0
#define ES8323_ADCCONTROL12_ALCDCY_OFF	4

#define ES8323_ADCCONTROL13	0x15

#define ES8323_ADCCONTROL13_TIMEOUT_OFF	5
#define ES8323_ADCCONTROL13_ALCZC_OFF	6

#define ES8323_ADCCONTROL14	0x16

#define ES8323_ADCCONTROL14_NGAT_OFF	0
#define ES8323_ADCCONTROL14_NGG_OFF	1
#define ES8323_ADCCONTROL14_NGTH_OFF	3

/* DAC Control */
#define ES8323_DACCONTROL1	0x17

#define ES8323_DACCONTROL1_DACFORMAT	GENMASK(1, 0)
#define ES8323_DACCONTROL1_DACWL	GENMASK(5, 3)
#define ES8323_DACCONTROL1_DACLRP	BIT(6)
#define ES8323_DACCONTROL1_DACLRSWAP	BIT(7)

#define ES8323_DACCONTROL2	0x18

#define ES8323_DACCONTROL2_DACFSRATIO	GENMASK(4, 0)
#define ES8323_DACCONTROL2_DACFSMODE	BIT(5)
#define ES8323_DACCONTROL2_DACFS_MASK	(ES8323_DACCONTROL2_DACFSRATIO |\
					 ES8323_DACCONTROL2_DACFSMODE)

#define ES8323_DACCONTROL3	0x19

#define ES8323_DACCONTROL3_DACMUTE	BIT(2)

#define ES8323_LDAC_VOL		0x1a
#define ES8323_RDAC_VOL		0x1b
#define ES8323_DACCONTROL6	0x1c
#define ES8323_DACCONTROL7	0x1d
#define ES8323_DACCONTROL8	0x1e
#define ES8323_DACCONTROL9	0x1f
#define ES8323_DACCONTROL10	0x20
#define ES8323_DACCONTROL11	0x21
#define ES8323_DACCONTROL12	0x22
#define ES8323_DACCONTROL13	0x23
#define ES8323_DACCONTROL14	0x24
#define ES8323_DACCONTROL15	0x25
#define ES8323_DACCONTROL16	0x26
#define ES8323_DACCONTROL17	0x27

#define ES8323_DACCONTROL17_LI2LOVOL_OFF	3

#define ES8323_DACCONTROL18	0x28
#define ES8323_DACCONTROL19	0x29
#define ES8323_DACCONTROL20	0x2a

#define ES8323_DACCONTROL20_RI2ROVOL_OFF	3

#define ES8323_DACCONTROL21	0x2b
#define ES8323_DACCONTROL22	0x2c
#define ES8323_DACCONTROL23	0x2d
#define ES8323_LOUT1_VOL	0x2e
#define ES8323_ROUT1_VOL	0x2f
#define ES8323_LOUT2_VOL	0x30
#define ES8323_ROUT2_VOL	0x31
#define ES8323_DACCONTROL28	0x32
#define ES8323_DACCONTROL29	0x33
#define ES8323_DACCONTROL30	0x34

#endif
