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 */
|