summaryrefslogtreecommitdiffstats
path: root/include/linux/power/max77705_charger.h
blob: fdec9af9c5418368011e7ff84130897586b6e3cd (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
/* 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 */