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
|
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Maxim MAX77705 definitions.
*
* Copyright (C) 2015 Samsung Electronics, Inc.
* Copyright (C) 2025 Dzmitry Sankouski <dsankouski@gmail.com>
*/
#ifndef __MAX77705_CHARGER_H
#define __MAX77705_CHARGER_H __FILE__
/* MAX77705_CHG_REG_CHG_INT */
#define MAX77705_BYP_I BIT(0)
#define MAX77705_INP_LIMIT_I BIT(1)
#define MAX77705_BATP_I BIT(2)
#define MAX77705_BAT_I BIT(3)
#define MAX77705_CHG_I BIT(4)
#define MAX77705_WCIN_I BIT(5)
#define MAX77705_CHGIN_I BIT(6)
#define MAX77705_AICL_I BIT(7)
/* MAX77705_CHG_REG_CHG_INT_MASK */
#define MAX77705_BYP_IM BIT(0)
#define MAX77705_INP_LIMIT_IM BIT(1)
#define MAX77705_BATP_IM BIT(2)
#define MAX77705_BAT_IM BIT(3)
#define MAX77705_CHG_IM BIT(4)
#define MAX77705_WCIN_IM BIT(5)
#define MAX77705_CHGIN_IM BIT(6)
#define MAX77705_AICL_IM BIT(7)
/* MAX77705_CHG_REG_CHG_INT_OK */
#define MAX77705_BYP_OK BIT(0)
#define MAX77705_DISQBAT_OK BIT(1)
#define MAX77705_BATP_OK BIT(2)
#define MAX77705_BAT_OK BIT(3)
#define MAX77705_CHG_OK BIT(4)
#define MAX77705_WCIN_OK BIT(5)
#define MAX77705_CHGIN_OK BIT(6)
#define MAX77705_AICL_OK BIT(7)
/* MAX77705_CHG_REG_DETAILS_00 */
#define MAX77705_BATP_DTLS BIT(0)
#define MAX77705_WCIN_DTLS GENMASK(4, 3)
#define MAX77705_WCIN_DTLS_SHIFT 3
#define MAX77705_CHGIN_DTLS GENMASK(6, 5)
#define MAX77705_CHGIN_DTLS_SHIFT 5
/* MAX77705_CHG_REG_DETAILS_01 */
#define MAX77705_CHG_DTLS GENMASK(3, 0)
#define MAX77705_CHG_DTLS_SHIFT 0
#define MAX77705_BAT_DTLS GENMASK(6, 4)
#define MAX77705_BAT_DTLS_SHIFT 4
/* MAX77705_CHG_REG_DETAILS_02 */
#define MAX77705_BYP_DTLS GENMASK(3, 0)
#define MAX77705_BYP_DTLS_SHIFT 0
/* MAX77705_CHG_REG_CNFG_00 */
#define MAX77705_CHG_SHIFT 0
#define MAX77705_UNO_SHIFT 1
#define MAX77705_OTG_SHIFT 1
#define MAX77705_BUCK_SHIFT 2
#define MAX77705_BOOST_SHIFT 3
#define MAX77705_WDTEN_SHIFT 4
#define MAX77705_MODE_MASK GENMASK(3, 0)
#define MAX77705_CHG_MASK BIT(MAX77705_CHG_SHIFT)
#define MAX77705_UNO_MASK BIT(MAX77705_UNO_SHIFT)
#define MAX77705_OTG_MASK BIT(MAX77705_OTG_SHIFT)
#define MAX77705_BUCK_MASK BIT(MAX77705_BUCK_SHIFT)
#define MAX77705_BOOST_MASK BIT(MAX77705_BOOST_SHIFT)
#define MAX77705_WDTEN_MASK BIT(MAX77705_WDTEN_SHIFT)
#define MAX77705_UNO_CTRL (MAX77705_UNO_MASK | MAX77705_BOOST_MASK)
#define MAX77705_OTG_CTRL (MAX77705_OTG_MASK | MAX77705_BOOST_MASK)
/* MAX77705_CHG_REG_CNFG_01 */
#define MAX77705_FCHGTIME_SHIFT 0
#define MAX77705_FCHGTIME_MASK GENMASK(2, 0)
#define MAX77705_CHG_RSTRT_SHIFT 4
#define MAX77705_CHG_RSTRT_MASK GENMASK(5, 4)
#define MAX77705_FCHGTIME_DISABLE 0
#define MAX77705_CHG_RSTRT_DISABLE 0x3
#define MAX77705_PQEN_SHIFT 7
#define MAX77705_PQEN_MASK BIT(7)
#define MAX77705_CHG_PQEN_DISABLE 0
#define MAX77705_CHG_PQEN_ENABLE 1
/* MAX77705_CHG_REG_CNFG_02 */
#define MAX77705_OTG_ILIM_SHIFT 6
#define MAX77705_OTG_ILIM_MASK GENMASK(7, 6)
#define MAX77705_OTG_ILIM_500 0
#define MAX77705_OTG_ILIM_900 1
#define MAX77705_OTG_ILIM_1200 2
#define MAX77705_OTG_ILIM_1500 3
#define MAX77705_CHG_CC GENMASK(5, 0)
/* MAX77705_CHG_REG_CNFG_03 */
#define MAX77705_TO_ITH_SHIFT 0
#define MAX77705_TO_ITH_MASK GENMASK(2, 0)
#define MAX77705_TO_TIME_SHIFT 3
#define MAX77705_TO_TIME_MASK GENMASK(5, 3)
#define MAX77705_SYS_TRACK_DIS_SHIFT 7
#define MAX77705_SYS_TRACK_DIS_MASK BIT(7)
#define MAX77705_TO_ITH_150MA 0
#define MAX77705_TO_TIME_30M 3
#define MAX77705_SYS_TRACK_ENABLE 0
#define MAX77705_SYS_TRACK_DISABLE 1
/* MAX77705_CHG_REG_CNFG_04 */
#define MAX77705_CHG_MINVSYS_SHIFT 6
#define MAX77705_CHG_MINVSYS_MASK GENMASK(7, 6)
#define MAX77705_CHG_PRM_SHIFT 0
#define MAX77705_CHG_PRM_MASK GENMASK(5, 0)
#define MAX77705_CHG_CV_PRM_SHIFT 0
#define MAX77705_CHG_CV_PRM_MASK GENMASK(5, 0)
/* MAX77705_CHG_REG_CNFG_05 */
#define MAX77705_REG_B2SOVRC_SHIFT 0
#define MAX77705_REG_B2SOVRC_MASK GENMASK(3, 0)
#define MAX77705_B2SOVRC_DISABLE 0
#define MAX77705_B2SOVRC_4_5A 6
#define MAX77705_B2SOVRC_4_8A 8
#define MAX77705_B2SOVRC_5_0A 9
/* MAX77705_CHG_CNFG_06 */
#define MAX77705_WDTCLR_SHIFT 0
#define MAX77705_WDTCLR_MASK GENMASK(1, 0)
#define MAX77705_WDTCLR 1
#define MAX77705_CHGPROT_MASK GENMASK(3, 2)
#define MAX77705_CHGPROT_UNLOCKED GENMASK(3, 2)
#define MAX77705_SLOWEST_LX_SLOPE GENMASK(6, 5)
/* MAX77705_CHG_REG_CNFG_07 */
#define MAX77705_CHG_FMBST 4
#define MAX77705_REG_FMBST_SHIFT 2
#define MAX77705_REG_FMBST_MASK BIT(MAX77705_REG_FMBST_SHIFT)
#define MAX77705_REG_FGSRC_SHIFT 1
#define MAX77705_REG_FGSRC_MASK BIT(MAX77705_REG_FGSRC_SHIFT)
/* MAX77705_CHG_REG_CNFG_08 */
#define MAX77705_REG_FSW_SHIFT 0
#define MAX77705_REG_FSW_MASK GENMASK(1, 0)
#define MAX77705_CHG_FSW_3MHz 0
#define MAX77705_CHG_FSW_2MHz 1
#define MAX77705_CHG_FSW_1_5MHz 2
/* MAX77705_CHG_REG_CNFG_09 */
#define MAX77705_CHG_CHGIN_LIM_MASK GENMASK(6, 0)
#define MAX77705_CHG_EN_MASK BIT(7)
#define MAX77705_CHG_DISABLE 0
#define MAX77705_CHARGER_CHG_CHARGING(_reg) \
(((_reg) & MAX77705_CHG_EN_MASK) > 1)
/* MAX77705_CHG_REG_CNFG_10 */
#define MAX77705_CHG_WCIN_LIM GENMASK(5, 0)
/* MAX77705_CHG_REG_CNFG_11 */
#define MAX77705_VBYPSET_SHIFT 0
#define MAX77705_VBYPSET_MASK GENMASK(6, 0)
/* MAX77705_CHG_REG_CNFG_12 */
#define MAX77705_CHGINSEL_SHIFT 5
#define MAX77705_CHGINSEL_MASK BIT(MAX77705_CHGINSEL_SHIFT)
#define MAX77705_WCINSEL_SHIFT 6
#define MAX77705_WCINSEL_MASK BIT(MAX77705_WCINSEL_SHIFT)
#define MAX77705_VCHGIN_REG_MASK GENMASK(4, 3)
#define MAX77705_WCIN_REG_MASK GENMASK(2, 1)
#define MAX77705_REG_DISKIP_SHIFT 0
#define MAX77705_REG_DISKIP_MASK BIT(MAX77705_REG_DISKIP_SHIFT)
/* REG=4.5V, UVLO=4.7V */
#define MAX77705_VCHGIN_4_5 0
/* REG=4.5V, UVLO=4.7V */
#define MAX77705_WCIN_4_5 0
#define MAX77705_DISABLE_SKIP 1
#define MAX77705_AUTO_SKIP 0
/* uA */
#define MAX77705_CURRENT_CHGIN_STEP 25000
#define MAX77705_CURRENT_CHG_STEP 50000
#define MAX77705_CURRENT_CHGIN_MIN 100000
#define MAX77705_CURRENT_CHGIN_MAX 3200000
struct max77705_charger_data {
struct device *dev;
struct regmap *regmap;
struct power_supply_battery_info *bat_info;
struct workqueue_struct *wqueue;
struct work_struct chgin_work;
struct power_supply *psy_chg;
};
#endif /* __MAX77705_CHARGER_H */
|