162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * ALSA SoC CS4349 codec driver
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright 2015 Cirrus Logic, Inc.
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Author: Tim Howe <Tim.Howe@cirrus.com>
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#ifndef __CS4349_H__
1162306a36Sopenharmony_ci#define __CS4349_H__
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci/* CS4349 registers addresses */
1462306a36Sopenharmony_ci#define CS4349_CHIPID		0x01	/* Device and Rev ID, Read Only */
1562306a36Sopenharmony_ci#define CS4349_MODE		0x02	/* Mode Control */
1662306a36Sopenharmony_ci#define CS4349_VMI		0x03	/* Volume, Mixing, Inversion Control */
1762306a36Sopenharmony_ci#define CS4349_MUTE		0x04	/* Mute Control */
1862306a36Sopenharmony_ci#define CS4349_VOLA		0x05	/* DAC Channel A Volume Control */
1962306a36Sopenharmony_ci#define CS4349_VOLB		0x06	/* DAC Channel B Volume Control */
2062306a36Sopenharmony_ci#define CS4349_RMPFLT		0x07	/* Ramp and Filter Control */
2162306a36Sopenharmony_ci#define CS4349_MISC		0x08	/* Power Down,Freeze Control,Pop Stop*/
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci#define CS4349_I2C_INCR		0x80
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci/* Device and Revision ID */
2762306a36Sopenharmony_ci#define CS4349_REVA		0xF0	/* Rev A */
2862306a36Sopenharmony_ci#define CS4349_REVB		0xF1	/* Rev B */
2962306a36Sopenharmony_ci#define CS4349_REVC2		0xFF	/* Rev C2 */
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci/* PDN_DONE Poll Maximum
3362306a36Sopenharmony_ci * If soft ramp is set it will take much longer to power down
3462306a36Sopenharmony_ci * the system.
3562306a36Sopenharmony_ci */
3662306a36Sopenharmony_ci#define PDN_POLL_MAX		900
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci/* Bitfield Definitions */
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci/* CS4349_MODE */
4262306a36Sopenharmony_ci/* (Digital Interface Format, De-Emphasis Control, Functional Mode */
4362306a36Sopenharmony_ci#define DIF2			(1 << 6)
4462306a36Sopenharmony_ci#define DIF1			(1 << 5)
4562306a36Sopenharmony_ci#define DIF0			(1 << 4)
4662306a36Sopenharmony_ci#define DEM1			(1 << 3)
4762306a36Sopenharmony_ci#define DEM0			(1 << 2)
4862306a36Sopenharmony_ci#define FM1			(1 << 1)
4962306a36Sopenharmony_ci#define DIF_LEFT_JST		0x00
5062306a36Sopenharmony_ci#define DIF_I2S			0x01
5162306a36Sopenharmony_ci#define DIF_RGHT_JST16		0x02
5262306a36Sopenharmony_ci#define DIF_RGHT_JST24		0x03
5362306a36Sopenharmony_ci#define DIF_TDM0		0x04
5462306a36Sopenharmony_ci#define DIF_TDM1		0x05
5562306a36Sopenharmony_ci#define DIF_TDM2		0x06
5662306a36Sopenharmony_ci#define DIF_TDM3		0x07
5762306a36Sopenharmony_ci#define DIF_MASK		0x70
5862306a36Sopenharmony_ci#define MODE_FORMAT(x)		(((x)&7)<<4)
5962306a36Sopenharmony_ci#define DEM_MASK		0x0C
6062306a36Sopenharmony_ci#define NO_DEM			0x00
6162306a36Sopenharmony_ci#define DEM_441			0x04
6262306a36Sopenharmony_ci#define DEM_48K			0x08
6362306a36Sopenharmony_ci#define DEM_32K			0x0C
6462306a36Sopenharmony_ci#define FM_AUTO			0x00
6562306a36Sopenharmony_ci#define FM_SNGL			0x01
6662306a36Sopenharmony_ci#define FM_DBL			0x02
6762306a36Sopenharmony_ci#define FM_QUAD			0x03
6862306a36Sopenharmony_ci#define FM_SNGL_MIN		30000
6962306a36Sopenharmony_ci#define FM_SNGL_MAX		54000
7062306a36Sopenharmony_ci#define FM_DBL_MAX		108000
7162306a36Sopenharmony_ci#define FM_QUAD_MAX		216000
7262306a36Sopenharmony_ci#define FM_MASK			0x03
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci/* CS4349_VMI (VMI = Volume, Mixing and Inversion Controls) */
7562306a36Sopenharmony_ci#define VOLBISA			(1 << 7)
7662306a36Sopenharmony_ci#define VOLAISB			(1 << 7)
7762306a36Sopenharmony_ci/* INVERT_A only available for Left Jstfd, Right Jstfd16 and Right Jstfd24 */
7862306a36Sopenharmony_ci#define INVERT_A		(1 << 6)
7962306a36Sopenharmony_ci/* INVERT_B only available for Left Jstfd, Right Jstfd16 and Right Jstfd24 */
8062306a36Sopenharmony_ci#define INVERT_B		(1 << 5)
8162306a36Sopenharmony_ci#define ATAPI3			(1 << 3)
8262306a36Sopenharmony_ci#define ATAPI2			(1 << 2)
8362306a36Sopenharmony_ci#define ATAPI1			(1 << 1)
8462306a36Sopenharmony_ci#define ATAPI0			(1 << 0)
8562306a36Sopenharmony_ci#define MUTEAB			0x00
8662306a36Sopenharmony_ci#define MUTEA_RIGHTB		0x01
8762306a36Sopenharmony_ci#define MUTEA_LEFTB		0x02
8862306a36Sopenharmony_ci#define MUTEA_SUMLRDIV2B	0x03
8962306a36Sopenharmony_ci#define RIGHTA_MUTEB		0x04
9062306a36Sopenharmony_ci#define RIGHTA_RIGHTB		0x05
9162306a36Sopenharmony_ci#define RIGHTA_LEFTB		0x06
9262306a36Sopenharmony_ci#define RIGHTA_SUMLRDIV2B	0x07
9362306a36Sopenharmony_ci#define LEFTA_MUTEB		0x08
9462306a36Sopenharmony_ci#define LEFTA_RIGHTB		0x09	/* Default */
9562306a36Sopenharmony_ci#define LEFTA_LEFTB		0x0A
9662306a36Sopenharmony_ci#define LEFTA_SUMLRDIV2B	0x0B
9762306a36Sopenharmony_ci#define SUMLRDIV2A_MUTEB	0x0C
9862306a36Sopenharmony_ci#define SUMLRDIV2A_RIGHTB	0x0D
9962306a36Sopenharmony_ci#define SUMLRDIV2A_LEFTB	0x0E
10062306a36Sopenharmony_ci#define SUMLRDIV2_AB		0x0F
10162306a36Sopenharmony_ci#define CHMIX_MASK		0x0F
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ci/* CS4349_MUTE */
10462306a36Sopenharmony_ci#define AUTOMUTE		(1 << 7)
10562306a36Sopenharmony_ci#define MUTEC_AB		(1 << 5)
10662306a36Sopenharmony_ci#define MUTE_A			(1 << 4)
10762306a36Sopenharmony_ci#define MUTE_B			(1 << 3)
10862306a36Sopenharmony_ci#define MUTE_AB_MASK		0x18
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci/* CS4349_RMPFLT (Ramp and Filter Control) */
11162306a36Sopenharmony_ci#define SCZ1			(1 << 7)
11262306a36Sopenharmony_ci#define SCZ0			(1 << 6)
11362306a36Sopenharmony_ci#define RMP_UP			(1 << 5)
11462306a36Sopenharmony_ci#define RMP_DN			(1 << 4)
11562306a36Sopenharmony_ci#define FILT_SEL		(1 << 2)
11662306a36Sopenharmony_ci#define IMMDT_CHNG		0x31
11762306a36Sopenharmony_ci#define ZEROCRSS		0x71
11862306a36Sopenharmony_ci#define SOFT_RMP		0xB1
11962306a36Sopenharmony_ci#define SFTRMP_ZEROCRSS		0xF1
12062306a36Sopenharmony_ci#define SR_ZC_MASK		0xC0
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ci/* CS4349_MISC */
12362306a36Sopenharmony_ci#define PWR_DWN			(1 << 7)
12462306a36Sopenharmony_ci#define FREEZE			(1 << 5)
12562306a36Sopenharmony_ci#define POPG_EN			(1 << 4)
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ci#endif	/* __CS4349_H__ */
128