summaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/rk3328_codec.h
blob: 6551035862417019dbfb3f6f5496df192826cea9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * rk3328 ALSA SoC Audio driver
 *
 * Copyright (c) 2017, Fuzhou Rockchip Electronics Co., Ltd All rights reserved.
 */

#ifndef _RK3328_CODEC_H
#define _RK3328_CODEC_H

#include <linux/bitfield.h>

/* codec register */
#define CODEC_RESET			(0x00 << 2)
#define DAC_INIT_CTRL1			(0x03 << 2)
#define DAC_INIT_CTRL2			(0x04 << 2)
#define DAC_INIT_CTRL3			(0x05 << 2)
#define DAC_PRECHARGE_CTRL		(0x22 << 2)
#define DAC_PWR_CTRL			(0x23 << 2)
#define DAC_CLK_CTRL			(0x24 << 2)
#define HPMIX_CTRL			(0x25 << 2)
#define DAC_SELECT			(0x26 << 2)
#define HPOUT_CTRL			(0x27 << 2)
#define HPOUTL_GAIN_CTRL		(0x28 << 2)
#define HPOUTR_GAIN_CTRL		(0x29 << 2)
#define HPOUT_POP_CTRL			(0x2a << 2)

/* REG00: CODEC_RESET */
#define PWR_RST_BYPASS_DIS		(0x0 << 6)
#define PWR_RST_BYPASS_EN		(0x1 << 6)
#define DIG_CORE_RST			(0x0 << 1)
#define DIG_CORE_WORK			(0x1 << 1)
#define SYS_RST				(0x0 << 0)
#define SYS_WORK			(0x1 << 0)

/* REG03: DAC_INIT_CTRL1 */
#define PIN_DIRECTION_MASK		BIT(5)
#define PIN_DIRECTION_IN		(0x0 << 5)
#define PIN_DIRECTION_OUT		(0x1 << 5)
#define DAC_I2S_MODE_MASK		BIT(4)
#define DAC_I2S_MODE_SLAVE		(0x0 << 4)
#define DAC_I2S_MODE_MASTER		(0x1 << 4)

/* REG04: DAC_INIT_CTRL2 */
#define DAC_I2S_LRP_MASK		BIT(7)
#define DAC_I2S_LRP_NORMAL		(0x0 << 7)
#define DAC_I2S_LRP_REVERSAL		(0x1 << 7)
#define DAC_VDL_MASK			GENMASK(6, 5)
#define DAC_VDL_16BITS			(0x0 << 5)
#define DAC_VDL_20BITS			(0x1 << 5)
#define DAC_VDL_24BITS			(0x2 << 5)
#define DAC_VDL_32BITS			(0x3 << 5)
#define DAC_MODE_MASK			GENMASK(4, 3)
#define DAC_MODE_RJM			(0x0 << 3)
#define DAC_MODE_LJM			(0x1 << 3)
#define DAC_MODE_I2S			(0x2 << 3)
#define DAC_MODE_PCM			(0x3 << 3)
#define DAC_LR_SWAP_MASK		BIT(2)
#define DAC_LR_SWAP_DIS			(0x0 << 2)
#define DAC_LR_SWAP_EN			(0x1 << 2)

/* REG05: DAC_INIT_CTRL3 */
#define DAC_WL_MASK			GENMASK(3, 2)
#define DAC_WL_16BITS			(0x0 << 2)
#define DAC_WL_20BITS			(0x1 << 2)
#define DAC_WL_24BITS			(0x2 << 2)
#define DAC_WL_32BITS			(0x3 << 2)
#define DAC_RST_MASK			BIT(1)
#define DAC_RST_EN			(0x0 << 1)
#define DAC_RST_DIS			(0x1 << 1)
#define DAC_BCP_MASK			BIT(0)
#define DAC_BCP_NORMAL			(0x0 << 0)
#define DAC_BCP_REVERSAL		(0x1 << 0)

/* REG22: DAC_PRECHARGE_CTRL */
#define DAC_CHARGE_XCHARGE_MASK		BIT(7)
#define DAC_CHARGE_DISCHARGE		(0x0 << 7)
#define DAC_CHARGE_PRECHARGE		(0x1 << 7)
#define DAC_CHARGE_CURRENT_64I_MASK	BIT(6)
#define DAC_CHARGE_CURRENT_64I		(0x1 << 6)
#define DAC_CHARGE_CURRENT_32I_MASK	BIT(5)
#define DAC_CHARGE_CURRENT_32I		(0x1 << 5)
#define DAC_CHARGE_CURRENT_16I_MASK	BIT(4)
#define DAC_CHARGE_CURRENT_16I		(0x1 << 4)
#define DAC_CHARGE_CURRENT_08I_MASK	BIT(3)
#define DAC_CHARGE_CURRENT_08I		(0x1 << 3)
#define DAC_CHARGE_CURRENT_04I_MASK	BIT(2)
#define DAC_CHARGE_CURRENT_04I		(0x1 << 2)
#define DAC_CHARGE_CURRENT_02I_MASK	BIT(1)
#define DAC_CHARGE_CURRENT_02I		(0x1 << 1)
#define DAC_CHARGE_CURRENT_I_MASK	BIT(0)
#define DAC_CHARGE_CURRENT_I		(0x1 << 0)
#define DAC_CHARGE_CURRENT_ALL_MASK	GENMASK(6, 0)
#define DAC_CHARGE_CURRENT_ALL_OFF	0x00
#define DAC_CHARGE_CURRENT_ALL_ON	0x7f

/* REG23: DAC_PWR_CTRL */
#define DAC_PWR_MASK			BIT(6)
#define DAC_PWR_OFF			(0x0 << 6)
#define DAC_PWR_ON			(0x1 << 6)
#define DACL_PATH_REFV_MASK		BIT(5)
#define DACL_PATH_REFV_OFF		(0x0 << 5)
#define DACL_PATH_REFV_ON		(0x1 << 5)
#define HPOUTL_ZERO_CROSSING_MASK	BIT(4)
#define HPOUTL_ZERO_CROSSING_OFF	(0x0 << 4)
#define HPOUTL_ZERO_CROSSING_ON		(0x1 << 4)
#define DACR_PATH_REFV_MASK		BIT(1)
#define DACR_PATH_REFV_OFF		(0x0 << 1)
#define DACR_PATH_REFV_ON		(0x1 << 1)
#define HPOUTR_ZERO_CROSSING_MASK	BIT(0)
#define HPOUTR_ZERO_CROSSING_OFF	(0x0 << 0)
#define HPOUTR_ZERO_CROSSING_ON		(0x1 << 0)

/* REG24: DAC_CLK_CTRL */
#define DACL_REFV_MASK			BIT(7)
#define DACL_REFV_OFF			(0x0 << 7)
#define DACL_REFV_ON			(0x1 << 7)
#define DACL_CLK_MASK			BIT(6)
#define DACL_CLK_OFF			(0x0 << 6)
#define DACL_CLK_ON			(0x1 << 6)
#define DACL_MASK			BIT(5)
#define DACL_OFF			(0x0 << 5)
#define DACL_ON				(0x1 << 5)
#define DACL_INIT_MASK			BIT(4)
#define DACL_INIT_OFF			(0x0 << 4)
#define DACL_INIT_ON			(0x1 << 4)
#define DACR_REFV_MASK			BIT(3)
#define DACR_REFV_OFF			(0x0 << 3)
#define DACR_REFV_ON			(0x1 << 3)
#define DACR_CLK_MASK			BIT(2)
#define DACR_CLK_OFF			(0x0 << 2)
#define DACR_CLK_ON			(0x1 << 2)
#define DACR_MASK			BIT(1)
#define DACR_OFF			(0x0 << 1)
#define DACR_ON				(0x1 << 1)
#define DACR_INIT_MASK			BIT(0)
#define DACR_INIT_OFF			(0x0 << 0)
#define DACR_INIT_ON			(0x1 << 0)

/* REG25: HPMIX_CTRL*/
#define HPMIXL_MASK			BIT(6)
#define HPMIXL_DIS			(0x0 << 6)
#define HPMIXL_EN			(0x1 << 6)
#define HPMIXL_INIT_MASK		BIT(5)
#define HPMIXL_INIT_DIS			(0x0 << 5)
#define HPMIXL_INIT_EN			(0x1 << 5)
#define HPMIXL_INIT2_MASK		BIT(4)
#define HPMIXL_INIT2_DIS		(0x0 << 4)
#define HPMIXL_INIT2_EN			(0x1 << 4)
#define HPMIXR_MASK			BIT(2)
#define HPMIXR_DIS			(0x0 << 2)
#define HPMIXR_EN			(0x1 << 2)
#define HPMIXR_INIT_MASK		BIT(1)
#define HPMIXR_INIT_DIS			(0x0 << 1)
#define HPMIXR_INIT_EN			(0x1 << 1)
#define HPMIXR_INIT2_MASK		BIT(0)
#define HPMIXR_INIT2_DIS		(0x0 << 0)
#define HPMIXR_INIT2_EN			(0x1 << 0)

/* REG26: DAC_SELECT */
#define DACL_SELECT_MASK		BIT(4)
#define DACL_UNSELECT			(0x0 << 4)
#define DACL_SELECT			(0x1 << 4)
#define DACR_SELECT_MASK		BIT(0)
#define DACR_UNSELECT			(0x0 << 0)
#define DACR_SELECT			(0x1 << 0)

/* REG27: HPOUT_CTRL */
#define HPOUTL_MASK			BIT(7)
#define HPOUTL_DIS			(0x0 << 7)
#define HPOUTL_EN			(0x1 << 7)
#define HPOUTL_INIT_MASK		BIT(6)
#define HPOUTL_INIT_DIS			(0x0 << 6)
#define HPOUTL_INIT_EN			(0x1 << 6)
#define HPOUTL_MUTE_MASK		BIT(5)
#define HPOUTL_MUTE			(0x0 << 5)
#define HPOUTL_UNMUTE			(0x1 << 5)
#define HPOUTR_MASK			BIT(4)
#define HPOUTR_DIS			(0x0 << 4)
#define HPOUTR_EN			(0x1 << 4)
#define HPOUTR_INIT_MASK		BIT(3)
#define HPOUTR_INIT_DIS			(0x0 << 3)
#define HPOUTR_INIT_EN			(0x1 << 3)
#define HPOUTR_MUTE_MASK		BIT(2)
#define HPOUTR_MUTE			(0x0 << 2)
#define HPOUTR_UNMUTE			(0x1 << 2)

/* REG28: HPOUTL_GAIN_CTRL */
#define HPOUTL_GAIN_MASK		GENMASK(4, 0)

/* REG29: HPOUTR_GAIN_CTRL */
#define HPOUTR_GAIN_MASK		GENMASK(4, 0)

/* REG2a: HPOUT_POP_CTRL */
#define HPOUTR_POP_MASK			GENMASK(5, 4)
#define HPOUTR_POP_XCHARGE		(0x1 << 4)
#define HPOUTR_POP_WORK			(0x2 << 4)
#define HPOUTL_POP_MASK			GENMASK(1, 0)
#define HPOUTL_POP_XCHARGE		(0x1 << 0)
#define HPOUTL_POP_WORK			(0x2 << 0)

#define RK3328_HIFI			0

struct rk3328_reg_msk_val {
	unsigned int reg;
	unsigned int msk;
	unsigned int val;
};

#endif