summaryrefslogtreecommitdiff
path: root/include/linux/mfd/samsung/s2mu005.h
blob: 46e7759545af247bbe0deaa42db7801be023a855 (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
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Copyright (c) 2015 Samsung Electronics Co., Ltd
 * Copyright (c) 2026 Kaustabh Chakraborty <kauschluss@disroot.org>
 * Copyright (c) 2026 Łukasz Lebiedziński <kernel@lvkasz.us>
 */

#ifndef __LINUX_MFD_S2MU005_H
#define __LINUX_MFD_S2MU005_H

#include <linux/bitfield.h>
#include <linux/bits.h>

/* S2MU005 registers */
enum s2mu005_reg {
	S2MU005_REG_CHGR_INT1,
	S2MU005_REG_CHGR_INT1M,

	S2MU005_REG_FLED_INT1,
	S2MU005_REG_FLED_INT1M,

	S2MU005_REG_MUIC_INT1,
	S2MU005_REG_MUIC_INT2,
	S2MU005_REG_MUIC_INT1M,
	S2MU005_REG_MUIC_INT2M,

	S2MU005_REG_CHGR_STATUS0,
	S2MU005_REG_CHGR_STATUS1,
	S2MU005_REG_CHGR_STATUS2,
	S2MU005_REG_CHGR_STATUS3,
	S2MU005_REG_CHGR_STATUS4,
	S2MU005_REG_CHGR_STATUS5,
	S2MU005_REG_CHGR_CTRL0,
	S2MU005_REG_CHGR_CTRL1,
	S2MU005_REG_CHGR_CTRL2,
	S2MU005_REG_CHGR_CTRL3,
	S2MU005_REG_CHGR_CTRL4,
	S2MU005_REG_CHGR_CTRL5,
	S2MU005_REG_CHGR_CTRL6,
	S2MU005_REG_CHGR_CTRL7,
	S2MU005_REG_CHGR_CTRL8,
	S2MU005_REG_CHGR_CTRL9,
	S2MU005_REG_CHGR_CTRL10,
	S2MU005_REG_CHGR_CTRL11,
	S2MU005_REG_CHGR_CTRL12,
	S2MU005_REG_CHGR_CTRL13,
	S2MU005_REG_CHGR_CTRL14,
	S2MU005_REG_CHGR_CTRL15,
	S2MU005_REG_CHGR_CTRL16,
	S2MU005_REG_CHGR_CTRL17,
	S2MU005_REG_CHGR_CTRL18,
	S2MU005_REG_CHGR_CTRL19,
	S2MU005_REG_CHGR_TEST0,
	S2MU005_REG_CHGR_TEST1,
	S2MU005_REG_CHGR_TEST2,
	S2MU005_REG_CHGR_TEST3,
	S2MU005_REG_CHGR_TEST4,
	S2MU005_REG_CHGR_TEST5,
	S2MU005_REG_CHGR_TEST6,
	S2MU005_REG_CHGR_TEST7,
	S2MU005_REG_CHGR_TEST8,
	S2MU005_REG_CHGR_TEST9,
	S2MU005_REG_CHGR_TEST10,

	S2MU005_REG_FLED_STATUS,
	S2MU005_REG_FLED_CH0_CTRL0,
	S2MU005_REG_FLED_CH0_CTRL1,
	S2MU005_REG_FLED_CH0_CTRL2,
	S2MU005_REG_FLED_CH0_CTRL3,
	S2MU005_REG_FLED_CH1_CTRL0,
	S2MU005_REG_FLED_CH1_CTRL1,
	S2MU005_REG_FLED_CH1_CTRL2,
	S2MU005_REG_FLED_CH1_CTRL3,
	S2MU005_REG_FLED_CTRL0,
	S2MU005_REG_FLED_CTRL1,
	S2MU005_REG_FLED_CTRL2,
	S2MU005_REG_FLED_CTRL3,
	S2MU005_REG_FLED_CTRL4,
	S2MU005_REG_FLED_CTRL5,
	S2MU005_REG_FLED_CTRL6,

	S2MU005_REG_RGB_EN,
	S2MU005_REG_RGB_CH0_CTRL,
	S2MU005_REG_RGB_CH1_CTRL,
	S2MU005_REG_RGB_CH2_CTRL,
	S2MU005_REG_RGB_CH0_RAMP,
	S2MU005_REG_RGB_CH0_STAY,
	S2MU005_REG_RGB_CH1_RAMP,
	S2MU005_REG_RGB_CH1_STAY,
	S2MU005_REG_RGB_CH2_RAMP,
	S2MU005_REG_RGB_CH2_STAY,
	S2MU005_REG_RGB_TEST0,
	S2MU005_REG_RGB_CTRL0,

	S2MU005_REG_MUIC_ADC,
	S2MU005_REG_MUIC_DEV1,
	S2MU005_REG_MUIC_DEV2,
	S2MU005_REG_MUIC_DEV3,
	S2MU005_REG_MUIC_BUTTON1,
	S2MU005_REG_MUIC_BUTTON2,
	S2MU005_REG_MUIC_RESET,
	S2MU005_REG_MUIC_CHGTYPE,
	S2MU005_REG_MUIC_DEVAPPLE,
	S2MU005_REG_MUIC_BCDRESCAN,
	S2MU005_REG_MUIC_TEST1,
	S2MU005_REG_MUIC_TEST2,
	S2MU005_REG_MUIC_TEST3,

	S2MU005_REG_ID = 0x73,

	S2MU005_REG_MUIC_CTRL1 = 0xb2,
	S2MU005_REG_MUIC_TIMERSET1,
	S2MU005_REG_MUIC_TIMERSET2,
	S2MU005_REG_MUIC_SWCTRL,
	S2MU005_REG_MUIC_TIMERSET3,
	S2MU005_REG_MUIC_CTRL2,
	S2MU005_REG_MUIC_CTRL3,

	S2MU005_REG_MUIC_LDOADC_L = 0xbf,
	S2MU005_REG_MUIC_LDOADC_H,
};

#define S2MU005_REG_FLED_CH_CTRL0(x)	(S2MU005_REG_FLED_CH0_CTRL0 + 4 * (x))
#define S2MU005_REG_FLED_CH_CTRL1(x)	(S2MU005_REG_FLED_CH0_CTRL1 + 4 * (x))
#define S2MU005_REG_FLED_CH_CTRL2(x)	(S2MU005_REG_FLED_CH0_CTRL2 + 4 * (x))
#define S2MU005_REG_FLED_CH_CTRL3(x)	(S2MU005_REG_FLED_CH0_CTRL3 + 4 * (x))

#define S2MU005_REG_RGB_CH_CTRL(x)	(S2MU005_REG_RGB_CH0_CTRL + 1 * (x))
#define S2MU005_REG_RGB_CH_RAMP(x)	(S2MU005_REG_RGB_CH0_RAMP + 2 * (x))
#define S2MU005_REG_RGB_CH_STAY(x)	(S2MU005_REG_RGB_CH0_STAY + 2 * (x))

/* S2MU005_REG_CHGR_STATUS0 */
#define S2MU005_CHGR_VBUS		BIT(7)
#define S2MU005_CHGR_WCIN		BIT(6)
#define S2MU005_CHGR_VMID		BIT(5)
#define S2MU005_CHGR_CHG		BIT(4)
#define S2MU005_CHGR_STAT		GENMASK(3, 0)

#define S2MU005_CHGR_STAT_DONE		8
#define S2MU005_CHGR_STAT_TOPOFF	7
#define S2MU005_CHGR_STAT_DONE_FLAG	6
#define S2MU005_CHGR_STAT_CV		5
#define S2MU005_CHGR_STAT_CC		4
#define S2MU005_CHGR_STAT_COOL_CHG	3
#define S2MU005_CHGR_STAT_PRE_CHG	2

/* S2MU005_REG_CHGR_STATUS1 */
#define S2MU005_CHGR_DETBAT		BIT(7)
#define S2MU005_CHGR_VBUS_OVP		GENMASK(6, 4)

#define S2MU005_CHGR_VBUS_OVP_OVERVOLT	2

/* S2MU005_REG_CHGR_STATUS2 */
#define S2MU005_CHGR_BAT		GENMASK(6, 4)

#define S2MU005_CHGR_BAT_VOLT_DET	7
#define S2MU005_CHGR_BAT_FAST_CHG_DET	6
#define S2MU005_CHGR_BAT_COOL_CHG_DET	5
#define S2MU005_CHGR_BAT_LOW_CHG	2
#define S2MU005_CHGR_BAT_SELF_DISCHG	1
#define S2MU005_CHGR_BAT_OVP_DET	0

/* S2MU005_REG_CHGR_STATUS3 */
#define S2MU005_CHGR_EVT		GENMASK(3, 0)

#define S2MU005_CHGR_EVT_WDT_RST	6
#define S2MU005_CHGR_EVT_WDT_SUSP	5
#define S2MU005_CHGR_EVT_VSYS_VUVLO	4
#define S2MU005_CHGR_EVT_VSYS_VOVP	3
#define S2MU005_CHGR_EVT_THERM_FOLDBACK	2
#define S2MU005_CHGR_EVT_THERM_SHUTDOWN	1

/* S2MU005_REG_CHGR_CTRL0 */
#define S2MU005_CHGR_CHG_EN		BIT(4)
#define S2MU005_CHGR_OP_MODE		GENMASK(2, 0)

#define S2MU005_CHGR_OP_MODE_OTG	BIT(2)
#define S2MU005_CHGR_OP_MODE_CHG	BIT(1)

/* S2MU005_REG_CHGR_CTRL1 */
#define S2MU005_CHGR_VIN_DROP		GENMASK(6, 4)

/* S2MU005_REG_CHGR_CTRL2 */
#define S2MU005_CHGR_IN_CURR_LIM	GENMASK(5, 0)

/* S2MU005_REG_CHGR_CTRL4 */
#define S2MU005_CHGR_OTG_OCP_ON		BIT(5)
#define S2MU005_CHGR_OTG_OCP_OFF	BIT(4)
#define S2MU005_CHGR_OTG_OCP		GENMASK(3, 2)
#define S2MU005_CHGR_OTG_OCP_1P5A	0x3

/* S2MU005_REG_CHGR_CTRL5 */
#define S2MU005_CHGR_VMID_BOOST		GENMASK(4, 0)
#define S2MU005_CHGR_VMID_BOOST_5P1V	0x16

/* S2MU005_REG_CHGR_CTRL6 */
#define S2MU005_CHGR_COOL_CHG_CURR	GENMASK(5, 0)

/* S2MU005_REG_CHGR_CTRL7 */
#define S2MU005_CHGR_FAST_CHG_CURR	GENMASK(5, 0)

/* S2MU005_REG_CHGR_CTRL8 */
#define S2MU005_CHGR_VF_VBAT		GENMASK(6, 1)

/* S2MU005_REG_CHGR_CTRL10 */
#define S2MU005_CHGR_TOPOFF_CURR(x)	(GENMASK(3, 0) << 4 * (x))

/* S2MU005_REG_CHGR_CTRL11 */
#define S2MU005_CHGR_OSC_BOOST		GENMASK(6, 5)
#define S2MU005_CHGR_OSC_BUCK		GENMASK(4, 3)
#define S2MU005_CHGR_OSC_BOOST_2MHZ	0x3

/* S2MU005_REG_CHGR_CTRL12 */
#define S2MU005_CHGR_WDT		GENMASK(2, 0)

#define S2MU005_CHGR_WDT_ON		BIT(2)
#define S2MU005_CHGR_WDT_OFF		BIT(1)

/* S2MU005_REG_CHGR_CTRL15 */
#define S2MU005_CHGR_OTG_EN		GENMASK(3, 2)
#define S2MU005_CHGR_OTG_EN_ON		0x3

/* S2MU005_REG_FLED_STATUS */
#define S2MU005_FLED_FLASH_STATUS(x)	(BIT(7) >> 2 * (x))
#define S2MU005_FLED_TORCH_STATUS(x)	(BIT(6) >> 2 * (x))

/* S2MU005_REG_FLED_CHx_CTRL0 */
#define S2MU005_FLED_FLASH_IOUT		GENMASK(3, 0)

/* S2MU005_REG_FLED_CHx_CTRL1 */
#define S2MU005_FLED_TORCH_IOUT		GENMASK(3, 0)

/* S2MU005_REG_FLED_CHx_CTRL2 */
#define S2MU005_FLED_TORCH_TIMEOUT	GENMASK(3, 0)

/* S2MU005_REG_FLED_CHx_CTRL3 */
#define S2MU005_FLED_FLASH_TIMEOUT	GENMASK(3, 0)

/* S2MU005_REG_FLED_CTRL1 */
#define S2MU005_FLED_CH_EN		BIT(7)

/*
 * S2MU005_REG_FLED_CTRL4 - Rev. EVT0
 * S2MU005_REG_FLED_CTRL6 - Rev. EVT1 and later
 */
#define S2MU005_FLED_FLASH_EN(x)	(GENMASK(7, 6) >> 4 * (x))
#define S2MU005_FLED_TORCH_EN(x)	(GENMASK(5, 4) >> 4 * (x))

/* S2MU005_REG_RGB_EN */
#define S2MU005_RGB_RESET		BIT(6)
#define S2MU005_RGB_SLOPE		GENMASK(5, 0)

#define S2MU005_RGB_SLOPE_CONST		(BIT(4) | BIT(2) | BIT(0))
#define S2MU005_RGB_SLOPE_SMOOTH	(BIT(5) | BIT(3) | BIT(1))

/* S2MU005_REG_RGB_CHx_RAMP */
#define S2MU005_RGB_CH_RAMP_UP		GENMASK(7, 4)
#define S2MU005_RGB_CH_RAMP_DN		GENMASK(3, 0)

/* S2MU005_REG_RGB_CHx_STAY */
#define S2MU005_RGB_CH_STAY_HI		GENMASK(7, 4)
#define S2MU005_RGB_CH_STAY_LO		GENMASK(3, 0)

/* S2MU005_REG_MUIC_DEV1 */
#define S2MU005_MUIC_OTG		BIT(7)
#define S2MU005_MUIC_DCP		BIT(6)
#define S2MU005_MUIC_CDP		BIT(5)
#define S2MU005_MUIC_T1_T2_CHG		BIT(4)
#define S2MU005_MUIC_UART		BIT(3)
#define S2MU005_MUIC_SDP		BIT(2)
#define S2MU005_MUIC_LANHUB		BIT(1)
#define S2MU005_MUIC_AUDIO		BIT(0)

/* S2MU005_REG_MUIC_DEV2 */
#define S2MU005_MUIC_SDP_1P8S		BIT(7)
#define S2MU005_MUIC_AV			BIT(6)
#define S2MU005_MUIC_TTY		BIT(5)
#define S2MU005_MUIC_PPD		BIT(4)
#define S2MU005_MUIC_JIG_UART_OFF	BIT(3)
#define S2MU005_MUIC_JIG_UART_ON	BIT(2)
#define S2MU005_MUIC_JIG_USB_OFF	BIT(1)
#define S2MU005_MUIC_JIG_USB_ON		BIT(0)

/* S2MU005_REG_MUIC_DEV3 */
#define S2MU005_MUIC_U200_CHG		BIT(7)
#define S2MU005_MUIC_VBUS_AV		BIT(4)
#define S2MU005_MUIC_VBUS_R255		BIT(1)
#define S2MU005_MUIC_MHL		BIT(0)

/* S2MU005_REG_MUIC_DEVAPPLE */
#define S2MU005_MUIC_APPLE_CHG_0P5A	BIT(7)
#define S2MU005_MUIC_APPLE_CHG_1P0A	BIT(6)
#define S2MU005_MUIC_APPLE_CHG_2P0A	BIT(5)
#define S2MU005_MUIC_APPLE_CHG_2P4A	BIT(4)
#define S2MU005_MUIC_SDP_DCD_OUT	BIT(3)
#define S2MU005_MUIC_RID_WAKEUP		BIT(2)
#define S2MU005_MUIC_VBUS_WAKEUP	BIT(1)
#define S2MU005_MUIC_BCV1P2_OR_OPEN	BIT(0)

/* S2MU005_REG_ID */
#define S2MU005_ID_MASK			GENMASK(3, 0)

/* S2MU005_REG_MUIC_SWCTRL */
#define S2MU005_MUIC_DM_DP		GENMASK(7, 2)
#define S2MU005_MUIC_JIG		BIT(0)

#define S2MU005_MUIC_DM_DP_UART		0x12
#define S2MU005_MUIC_DM_DP_USB		0x09

/* S2MU005_REG_MUIC_CTRL1 */
#define S2MU005_MUIC_OPEN		BIT(4)
#define S2MU005_MUIC_RAW_DATA		BIT(3)
#define S2MU005_MUIC_MAN_SW		BIT(2)
#define S2MU005_MUIC_WAIT		BIT(1)
#define S2MU005_MUIC_IRQ		BIT(0)

/* S2MU005_REG_MUIC_CTRL3 */
#define S2MU005_MUIC_ONESHOT_ADC	BIT(2)

/* S2MU005_REG_MUIC_LDOADC_L and S2MU005_REG_MUIC_LDOADC_H */
#define S2MU005_MUIC_VSET		GENMASK(4, 0)

#define S2MU005_MUIC_VSET_3P0V		0x1f
#define S2MU005_MUIC_VSET_2P6V		0x0e
#define S2MU005_MUIC_VSET_2P4V		0x0c
#define S2MU005_MUIC_VSET_2P2V		0x0a
#define S2MU005_MUIC_VSET_2P0V		0x08
#define S2MU005_MUIC_VSET_1P5V		0x03
#define S2MU005_MUIC_VSET_1P4V		0x02
#define S2MU005_MUIC_VSET_1P2V		0x00

#endif /* __LINUX_MFD_S2MU005_H */