/* SPDX-License-Identifier: GPL-2.0 */
/*
 * tlv320adc3101.h
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */


#ifndef _TLV320ADC3101_H
#define _TLV320ADC3101_H

struct device;
struct regmap_config;

extern const struct regmap_config adc3101_regmap_config;
int adc3101_probe(struct device *dev, struct regmap *regmap);
int adc3101_remove(struct device *dev);

/* tlv320adc3101 register space */

#define ADC3101_REG(page, reg)	((page * 128) + reg)

#define	ADC3101_PSEL			ADC3101_REG(0, 0)
#define	ADC3101_RESET			ADC3101_REG(0, 1)
#define	ADC3101_CLKMUX			ADC3101_REG(0, 4)
#define	ADC3101_PLLPR			ADC3101_REG(0, 5)
#define	ADC3101_PLLJ			ADC3101_REG(0, 6)
#define	ADC3101_PLLDMSB			ADC3101_REG(0, 7)
#define	ADC3101_PLLDLSB			ADC3101_REG(0, 8)
#define	ADC3101_NADC			ADC3101_REG(0, 18)
#define	ADC3101_MADC			ADC3101_REG(0, 19)
#define ADC3101_AOSR			ADC3101_REG(0, 20)
#define ADC3101_CLKMUX2			ADC3101_REG(0, 25)
#define ADC3101_CLKOUTM			ADC3101_REG(0, 26)
#define ADC3101_IFACE1			ADC3101_REG(0, 27)
#define ADC3101_CH_OFFSET_1		ADC3101_REG(0, 28)
#define ADC3101_IFACE2			ADC3101_REG(0, 29)
#define ADC3101_I2S_SYNC		ADC3101_REG(0, 34)
#define ADC3101_CH_OFFSET_2		ADC3101_REG(0, 37)
#define ADC3101_I2S_TDM			ADC3101_REG(0, 38)
#define ADC3101_ADC_DIGITAL		ADC3101_REG(0, 81)
#define ADC3101_FADCVOL			ADC3101_REG(0, 82)
#define ADC3101_LADCVOL			ADC3101_REG(0, 83)
#define ADC3101_RADCVOL			ADC3101_REG(0, 84)
#define ADC3101_LAGCMAX			ADC3101_REG(0, 88)
#define ADC3101_RAGCMAX			ADC3101_REG(0, 96)
#define ADC3101_MICBIAS			ADC3101_REG(1, 51)
#define ADC3101_LPGAPIN			ADC3101_REG(1, 52)
#define ADC3101_LPGAPIN2		ADC3101_REG(1, 54)
#define ADC3101_RPGAPIN			ADC3101_REG(1, 55)
#define ADC3101_RPGAPIN2		ADC3101_REG(1, 57)
#define ADC3101_LAPGAVOL		ADC3101_REG(1, 59)
#define ADC3101_RAPGAVOL		ADC3101_REG(1, 60)
#define ADC3101_APGAFLAGS		ADC3101_REG(1, 62)

/* Bits, masks, and shifts */

/*  ADC3101_RESET */
#define	ADC3101_RESET_VALUE				0x01

/* ADC3101_CLKMUX */
#define ADC3101_PLL_CLKIN_MASK			GENMASK(3, 2)
#define ADC3101_PLL_CLKIN_SHIFT			(2)
#define ADC3101_PLL_CLKIN_MCLK			(0x00)
#define ADC3101_PLL_CLKIN_BCKL			(0x01)
#define ADC3101_PLL_CLKIN_GPIO1			(0x02)
#define ADC3101_PLL_CLKIN_DIN			(0x03)
#define ADC3101_CODEC_CLKIN_MASK		GENMASK(1, 0)
#define ADC3101_CODEC_CLKIN_SHIFT		(0)
#define ADC3101_CODEC_CLKIN_MCLK		(0x00)
#define ADC3101_CODEC_CLKIN_BCLK		(0x01)
#define ADC3101_CODEC_CLKIN_GPIO1		(0x02)
#define ADC3101_CODEC_CLKIN_PLL			(0x03)

/* ADC3101_MUTE */
#define ADC3101_MUTE_MASK				0x88
#define ADC3101_MUTE					0x88

/* ADC3101_NADC */
#define ADC3101_NADCEN					BIT(7)
#define ADC3101_NADC_MASK				GENMASK(6, 0)

/* ADC3101_MADC */
#define ADC3101_MADCEN					BIT(7)
#define ADC3101_MADC_MASK				GENMASK(6, 0)

/* ADC3101_IFACE1 */
#define ADC3101_IFACE1_DATATYPE_MASK	GENMASK(7, 6)
#define ADC3101_IFACE1_DATATYPE_SHIFT	(6)
#define ADC3101_I2S_MODE				(0x00)
#define ADC3101_DSP_MODE				(0x01)
#define ADC3101_RIGHT_J_MODE			(0x02)
#define ADC3101_LEFT_J_MODE				(0x03)
#define ADC3101_IFACE1_DATALEN_MASK		GENMASK(5, 4)
#define ADC3101_IFACE1_DATALEN_SHIFT	(4)
#define ADC3101_WORD_LEN_16BITS			(0x00)
#define ADC3101_WORD_LEN_20BITS			(0x01)
#define ADC3101_WORD_LEN_24BITS			(0x02)
#define ADC3101_WORD_LEN_32BITS			(0x03)
#define ADC3101_IFACE1_MASTER_MASK		GENMASK(3, 2)
#define ADC3101_BCLKMASTER				BIT(2)
#define ADC3101_WCLKMASTER				BIT(3)
#define ADC3101_3STATE					BIT(0)

/* ADC3101_IFACE2 */
#define ADC3101_BCLKINV_MASK			BIT(3)
#define ADC3101_BDIVCLKIN_MASK			GENMASK(1, 0)
#define ADC3101_BDIVCLKIN_SHIFT			(0)
#define ADC3101_BDIVCLKIN_ADC_CLK		(0x02)
#define ADC3101_BDIVCLKIN_ADC_MOD_CLK	(0x03)

/* ADC3101_I2S_TDM */
#define ADC3101_TDM_EN					BIT(0)
#define ADC3101_EARLY_STATE_EN			BIT(1)

/* ADC3101_PGAPIN */
#define ADC3101_PGAPIN_SEL_MASK			GENMASK(1, 0)
#define ADC3101_PGAPIN_6DB_MASK			0x55
#define ADC3101_PGAPIN2_6DB_MASK		0x15

/* ADC3101_APGAVOL */
#define ADC3101_APGA_MUTE				BIT(7)

/* ADC3101_ADC_DIGITAL */
#define ADC3101_LADC_EN					BIT(7)
#define ADC3101_RADC_EN					BIT(6)
#define ADC3101_SOFT_STEPPING_MASK		GENMASK(1, 0)
#define ADC3101_SOFT_STEPPING_SHIFT		(0)
#define ADC3101_SOFT_STEPPING_DISABLE	(0x02)
#define ADC3101_SOFT_STEPPING_HALFSTEP	(0x01)
#define ADC3101_SOFT_STEPPING_1STEP		(0x00)

enum adc_input_selection {
	CH_SEL1 = 0,
	CH_SEL2,
	CH_SEL3,
	CH_SEL4,
	CH_SEL1X,
	CH_SEL2X,
	CH_SEL3X
};

#endif				/* _TLV320ADC3101_H */
