xref: /openbmc/linux/sound/soc/codecs/cs4349.h (revision e40da86a)
1e40da86aSTim Howe /*
2e40da86aSTim Howe  * ALSA SoC CS4349 codec driver
3e40da86aSTim Howe  *
4e40da86aSTim Howe  * Copyright 2015 Cirrus Logic, Inc.
5e40da86aSTim Howe  *
6e40da86aSTim Howe  * Author: Tim Howe <Tim.Howe@cirrus.com>
7e40da86aSTim Howe  *
8e40da86aSTim Howe  * This program is free software; you can redistribute it and/or
9e40da86aSTim Howe  * modify it under the terms of the GNU General Public License
10e40da86aSTim Howe  * version 2 as published by the Free Software Foundation.
11e40da86aSTim Howe  *
12e40da86aSTim Howe  * This program is distributed in the hope that it will be useful, but
13e40da86aSTim Howe  * WITHOUT ANY WARRANTY; without even the implied warranty of
14e40da86aSTim Howe  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15e40da86aSTim Howe  * General Public License for more details.
16e40da86aSTim Howe  *
17e40da86aSTim Howe  */
18e40da86aSTim Howe 
19e40da86aSTim Howe #ifndef __CS4349_H__
20e40da86aSTim Howe #define __CS4349_H__
21e40da86aSTim Howe 
22e40da86aSTim Howe struct cs4349_platform_data {
23e40da86aSTim Howe 
24e40da86aSTim Howe 	/* GPIO for Reset */
25e40da86aSTim Howe 	unsigned int gpio_nreset;
26e40da86aSTim Howe 
27e40da86aSTim Howe };
28e40da86aSTim Howe 
29e40da86aSTim Howe /* CS4349 registers addresses */
30e40da86aSTim Howe #define CS4349_CHIPID		0x01	/* Device and Rev ID, Read Only */
31e40da86aSTim Howe #define CS4349_MODE		0x02	/* Mode Control */
32e40da86aSTim Howe #define CS4349_VMI		0x03	/* Volume, Mixing, Inversion Control */
33e40da86aSTim Howe #define CS4349_MUTE		0x04	/* Mute Control */
34e40da86aSTim Howe #define CS4349_VOLA		0x05	/* DAC Channel A Volume Control */
35e40da86aSTim Howe #define CS4349_VOLB		0x06	/* DAC Channel B Volume Control */
36e40da86aSTim Howe #define CS4349_RMPFLT		0x07	/* Ramp and Filter Control */
37e40da86aSTim Howe #define CS4349_MISC		0x08	/* Power Down,Freeze Control,Pop Stop*/
38e40da86aSTim Howe 
39e40da86aSTim Howe #define CS4349_FIRSTREG		0x01
40e40da86aSTim Howe #define CS4349_LASTREG		0x08
41e40da86aSTim Howe #define CS4349_NUMREGS		(CS4349_LASTREG - CS4349_FIRSTREG + 1)
42e40da86aSTim Howe #define CS4349_I2C_INCR		0x80
43e40da86aSTim Howe 
44e40da86aSTim Howe 
45e40da86aSTim Howe /* Device and Revision ID */
46e40da86aSTim Howe #define CS4349_REVA		0xF0	/* Rev A */
47e40da86aSTim Howe #define CS4349_REVB		0xF1	/* Rev B */
48e40da86aSTim Howe #define CS4349_REVC2		0xFF	/* Rev C2 */
49e40da86aSTim Howe 
50e40da86aSTim Howe 
51e40da86aSTim Howe /* PDN_DONE Poll Maximum
52e40da86aSTim Howe  * If soft ramp is set it will take much longer to power down
53e40da86aSTim Howe  * the system.
54e40da86aSTim Howe  */
55e40da86aSTim Howe #define PDN_POLL_MAX		900
56e40da86aSTim Howe 
57e40da86aSTim Howe 
58e40da86aSTim Howe /* Bitfield Definitions */
59e40da86aSTim Howe 
60e40da86aSTim Howe /* CS4349_MODE */
61e40da86aSTim Howe /* (Digital Interface Format, De-Emphasis Control, Functional Mode */
62e40da86aSTim Howe #define DIF2			(1 << 6)
63e40da86aSTim Howe #define DIF1			(1 << 5)
64e40da86aSTim Howe #define DIF0			(1 << 4)
65e40da86aSTim Howe #define DEM1			(1 << 3)
66e40da86aSTim Howe #define DEM0			(1 << 2)
67e40da86aSTim Howe #define FM1			(1 << 1)
68e40da86aSTim Howe #define DIF_LEFT_JST		0x00
69e40da86aSTim Howe #define DIF_I2S			0x01
70e40da86aSTim Howe #define DIF_RGHT_JST16		0x02
71e40da86aSTim Howe #define DIF_RGHT_JST24		0x03
72e40da86aSTim Howe #define DIF_TDM0		0x04
73e40da86aSTim Howe #define DIF_TDM1		0x05
74e40da86aSTim Howe #define DIF_TDM2		0x06
75e40da86aSTim Howe #define DIF_TDM3		0x07
76e40da86aSTim Howe #define DIF_MASK		0x70
77e40da86aSTim Howe #define MODE_FORMAT(x)		(((x)&7)<<4)
78e40da86aSTim Howe #define DEM_MASK		0x0C
79e40da86aSTim Howe #define NO_DEM			0x00
80e40da86aSTim Howe #define DEM_441			0x04
81e40da86aSTim Howe #define DEM_48K			0x08
82e40da86aSTim Howe #define DEM_32K			0x0C
83e40da86aSTim Howe #define FM_AUTO			0x00
84e40da86aSTim Howe #define FM_SNGL			0x01
85e40da86aSTim Howe #define FM_DBL			0x02
86e40da86aSTim Howe #define FM_QUAD			0x03
87e40da86aSTim Howe #define FM_SNGL_MIN		30000
88e40da86aSTim Howe #define FM_SNGL_MAX		54000
89e40da86aSTim Howe #define FM_DBL_MAX		108000
90e40da86aSTim Howe #define FM_QUAD_MAX		216000
91e40da86aSTim Howe #define FM_MASK			0x03
92e40da86aSTim Howe 
93e40da86aSTim Howe /* CS4349_VMI (VMI = Volume, Mixing and Inversion Controls) */
94e40da86aSTim Howe #define VOLBISA			(1 << 7)
95e40da86aSTim Howe #define VOLAISB			(1 << 7)
96e40da86aSTim Howe /* INVERT_A only available for Left Jstfd, Right Jstfd16 and Right Jstfd24 */
97e40da86aSTim Howe #define INVERT_A		(1 << 6)
98e40da86aSTim Howe /* INVERT_B only available for Left Jstfd, Right Jstfd16 and Right Jstfd24 */
99e40da86aSTim Howe #define INVERT_B		(1 << 5)
100e40da86aSTim Howe #define ATAPI3			(1 << 3)
101e40da86aSTim Howe #define ATAPI2			(1 << 2)
102e40da86aSTim Howe #define ATAPI1			(1 << 1)
103e40da86aSTim Howe #define ATAPI0			(1 << 0)
104e40da86aSTim Howe #define MUTEAB			0x00
105e40da86aSTim Howe #define MUTEA_RIGHTB		0x01
106e40da86aSTim Howe #define MUTEA_LEFTB		0x02
107e40da86aSTim Howe #define MUTEA_SUMLRDIV2B	0x03
108e40da86aSTim Howe #define RIGHTA_MUTEB		0x04
109e40da86aSTim Howe #define RIGHTA_RIGHTB		0x05
110e40da86aSTim Howe #define RIGHTA_LEFTB		0x06
111e40da86aSTim Howe #define RIGHTA_SUMLRDIV2B	0x07
112e40da86aSTim Howe #define LEFTA_MUTEB		0x08
113e40da86aSTim Howe #define LEFTA_RIGHTB		0x09	/* Default */
114e40da86aSTim Howe #define LEFTA_LEFTB		0x0A
115e40da86aSTim Howe #define LEFTA_SUMLRDIV2B	0x0B
116e40da86aSTim Howe #define SUMLRDIV2A_MUTEB	0x0C
117e40da86aSTim Howe #define SUMLRDIV2A_RIGHTB	0x0D
118e40da86aSTim Howe #define SUMLRDIV2A_LEFTB	0x0E
119e40da86aSTim Howe #define SUMLRDIV2_AB		0x0F
120e40da86aSTim Howe #define CHMIX_MASK		0x0F
121e40da86aSTim Howe 
122e40da86aSTim Howe /* CS4349_MUTE */
123e40da86aSTim Howe #define AUTOMUTE		(1 << 7)
124e40da86aSTim Howe #define MUTEC_AB		(1 << 5)
125e40da86aSTim Howe #define MUTE_A			(1 << 4)
126e40da86aSTim Howe #define MUTE_B			(1 << 3)
127e40da86aSTim Howe #define MUTE_AB_MASK		0x18
128e40da86aSTim Howe 
129e40da86aSTim Howe /* CS4349_RMPFLT (Ramp and Filter Control) */
130e40da86aSTim Howe #define SCZ1			(1 << 7)
131e40da86aSTim Howe #define SCZ0			(1 << 6)
132e40da86aSTim Howe #define RMP_UP			(1 << 5)
133e40da86aSTim Howe #define RMP_DN			(1 << 4)
134e40da86aSTim Howe #define FILT_SEL		(1 << 2)
135e40da86aSTim Howe #define IMMDT_CHNG		0x31
136e40da86aSTim Howe #define ZEROCRSS		0x71
137e40da86aSTim Howe #define SOFT_RMP		0xB1
138e40da86aSTim Howe #define SFTRMP_ZEROCRSS		0xF1
139e40da86aSTim Howe #define SR_ZC_MASK		0xC0
140e40da86aSTim Howe 
141e40da86aSTim Howe /* CS4349_MISC */
142e40da86aSTim Howe #define PWR_DWN			(1 << 7)
143e40da86aSTim Howe #define FREEZE			(1 << 5)
144e40da86aSTim Howe #define POPG_EN			(1 << 4)
145e40da86aSTim Howe 
146e40da86aSTim Howe #endif	/* __CS4349_H__ */
147