summaryrefslogtreecommitdiff
path: root/driver/charger/bq257x0_regs.h
blob: 69b218436add7d2fd7d670a80ff01f105b198ab1 (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
/* Copyright 2021 The ChromiumOS Authors
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * TI bq257x0 battery charger driver.
 */

#ifndef __CROS_EC_BQ257X0_REGS_H
#define __CROS_EC_BQ257X0_REGS_H

#include "bq25710.h"

/*
 * BQ257x0 family register definitions.
 *
 * Common registers are prefixed with BQ257X0, chip specific registers
 * and registers with incompatible definitions are prefixed with
 * BQ25710, BQ25720, etc.
 */

/*
 * ChargerStatus Register (0x20)
 */
#define BQ257X0_CHARGER_STATUS_ICO_DONE_SHIFT 14
#define BQ257X0_CHARGER_STATUS_ICO_DONE_BITS 1

/*
 * ChargeOption0 Register (0x12)
 */
#define BQ257X0_CHARGE_OPTION_0_EN_LWPWR_SHIFT 15
#define BQ257X0_CHARGE_OPTION_0_EN_LWPWR_BITS 1
#define BQ257X0_CHARGE_OPTION_0_EN_LEARN_SHIFT 5
#define BQ257X0_CHARGE_OPTION_0_EN_LEARN_BITS 1
#define BQ257X0_CHARGE_OPTION_0_IADP_GAIN_SHIFT 4
#define BQ257X0_CHARGE_OPTION_0_IADP_GAIN_BITS 1
#define BQ257X0_CHARGE_OPTION_0_EN_IDPM_SHIFT 1
#define BQ257X0_CHARGE_OPTION_0_EN_IDPM_BITS 1
#define BQ257X0_CHARGE_OPTION_0_CHRG_INHIBIT_SHIFT 0
#define BQ257X0_CHARGE_OPTION_0_CHRG_INHIBIT_BITS 1

/*
 * ChargeOption1 Register (0x30)
 */
#define BQ25710_CHARGE_OPTION_1_EN_PSYS_SHIFT 12
#define BQ25710_CHARGE_OPTION_1_EN_PSYS_BITS 1

#define BQ25720_CHARGE_OPTION_1_PSYS_CONFIG_SHIFT 12
#define BQ25720_CHARGE_OPTION_1_PSYS_CONFIG_BITS 2
#define BQ25720_CHARGE_OPTION_1_PSYS_CONFIG__PBUS_PBAT 0
#define BQ25720_CHARGE_OPTION_1_PSYS_CONFIG__OFF 3

#define BQ257X0_CHARGE_OPTION_1_CMP_REF_SHIFT 7
#define BQ257X0_CHARGE_OPTION_1_CMP_REF_BITS 1
#define BQ257X0_CHARGE_OPTION_1_CMP_REF__2P3 0
#define BQ257X0_CHARGE_OPTION_1_CMP_REF__1P2 1

#define BQ257X0_CHARGE_OPTION_1_CMP_POL_SHIFT 6
#define BQ257X0_CHARGE_OPTION_1_CMP_POL_BITS 1
#define BQ257X0_CHARGE_OPTION_1_CMP_POL__INTERNAL 0
#define BQ257X0_CHARGE_OPTION_1_CMP_POL__EXTERNAL 1

/*
 * ChargeOption2 Register (0x31)
 */
#define BQ257X0_CHARGE_OPTION_2_PKPWR_TOVLD_DEG_SHIFT 14
#define BQ257X0_CHARGE_OPTION_2_PKPWR_TOVLD_DEG_BITS 2
#define BQ25720_CHARGE_OPTION_2_PKPWR_TOVLD_DEG__10MS 3

#define BQ257X0_CHARGE_OPTION_2_PKPWR_TMAX_SHIFT 8
#define BQ257X0_CHARGE_OPTION_2_PKPWR_TMAX_BITS 2

#define BQ257X0_CHARGE_OPTION_2_EN_EXTILIM_SHIFT 7
#define BQ257X0_CHARGE_OPTION_2_EN_EXTILIM_BITS 1

#define BQ257X0_CHARGE_OPTION_2_EN_ACOC_SHIFT 3
#define BQ257X0_CHARGE_OPTION_2_EN_ACOC_BITS 1
#define BQ257X0_CHARGE_OPTION_2_EN_ACOC__DISABLE 0
#define BQ257X0_CHARGE_OPTION_2_EN_ACOC__ENABLE 1

#define BQ257X0_CHARGE_OPTION_2_ACOC_VTH_SHIFT 2
#define BQ257X0_CHARGE_OPTION_2_ACOC_VTH_BITS 1
#define BQ257X0_CHARGE_OPTION_2_ACOC_VTH__1P33 0
#define BQ257X0_CHARGE_OPTION_2_ACOC_VTH__2P00 1

#define BQ257X0_CHARGE_OPTION_2_BATOC_VTH_SHIFT 0
#define BQ257X0_CHARGE_OPTION_2_BATOC_VTH_BITS 1
#define BQ257X0_CHARGE_OPTION_2_BATOC_VTH__1P33 0
#define BQ257X0_CHARGE_OPTION_2_BATOC_VTH__2P00 1

/*
 * ChargeOption3 Register (0x32)
 */
#define BQ257X0_CHARGE_OPTION_3_RESET_REG_SHIFT 14
#define BQ257X0_CHARGE_OPTION_3_RESET_REG_BITS 1

#define BQ257X0_CHARGE_OPTION_3_EN_ICO_MODE_SHIFT 11
#define BQ257X0_CHARGE_OPTION_3_EN_ICO_MODE_BITS 1

#define BQ257X0_CHARGE_OPTION_3_IL_AVG_SHIFT 3
#define BQ257X0_CHARGE_OPTION_3_IL_AVG_BITS 2
#define BQ257X0_CHARGE_OPTION_3_IL_AVG__10A 1

/*
 * ChargeOption4 Register (0x36)
 */
#define BQ25720_CHARGE_OPTION_4_VSYS_UVP_SHIFT 13
#define BQ25720_CHARGE_OPTION_4_VSYS_UVP_BITS 3
#define BQ25720_CHARGE_OPTION_4_VSYS_UVP__2P4 0
#define BQ25720_CHARGE_OPTION_4_VSYS_UVP__3P2 1
#define BQ25720_CHARGE_OPTION_4_VSYS_UVP__4P0 2
#define BQ25720_CHARGE_OPTION_4_VSYS_UVP__4P8 3
#define BQ25720_CHARGE_OPTION_4_VSYS_UVP__5P6 4
#define BQ25720_CHARGE_OPTION_4_VSYS_UVP__6P4 5
#define BQ25720_CHARGE_OPTION_4_VSYS_UVP__7P2 6
#define BQ25720_CHARGE_OPTION_4_VSYS_UVP__8P0 7

#define BQ25720_CHARGE_OPTION_4_IDCHG_DEG2_SHIFT 6
#define BQ25720_CHARGE_OPTION_4_IDCHG_DEG2_BITS 2
#define BQ25720_CHARGE_OPTION_4_IDCHG_DEG2__1P6MS 1
#define BQ25720_CHARGE_OPTION_4_IDCHG_DEG2__12MS 3

#define BQ25720_CHARGE_OPTION_4_IDCHG_TH2_SHIFT 3
#define BQ25720_CHARGE_OPTION_4_IDCHG_TH2_BITS 3
#define BQ25720_CHARGE_OPTION_4_IDCHG_TH2__1P25 0
#define BQ25720_CHARGE_OPTION_4_IDCHG_TH2__1P5 1

#define BQ25720_CHARGE_OPTION_4_PP_IDCHG2_SHIFT 2
#define BQ25720_CHARGE_OPTION_4_PP_IDCHG2_BITS 1
#define BQ25720_CHARGE_OPTION_4_PP_IDCHG2__DISABLE 0
#define BQ25720_CHARGE_OPTION_4_PP_IDCHG2__ENABLE 1

/*
 * Vmin Active Protection Register (0x37)
 */
#define BQ25720_VMIN_AP_VSYS_TH2_SHIFT 2
#define BQ25720_VMIN_AP_VSYS_TH2_BITS 6

/*
 * ProchotOption0 Register (0x33)
 */
#define BQ257X0_PROCHOT_OPTION_0_ILIM2_VTH_SHIFT 11
#define BQ257X0_PROCHOT_OPTION_0_ILIM2_VTH_BITS 5
#define BQ257X0_PROCHOT_OPTION_0_ILIM2_VTH__1P10 1
#define BQ257X0_PROCHOT_OPTION_0_ILIM2_VTH__1P40 7
#define BQ257X0_PROCHOT_OPTION_0_ILIM2_VTH__1P50 9
#define BQ257X0_PROCHOT_OPTION_0_ILIM2_VTH__2P30 25
#define BQ257X0_PROCHOT_OPTION_0_ILIM2_VTH__2P50 26
#define BQ257X0_PROCHOT_OPTION_0_ILIM2_VTH__4P50 30
#define BQ257X0_PROCHOT_OPTION_0_ILIM2_VTH__NA 31

/*
 * ProchotOption1 Register (0x34)
 */
#define BQ257X0_PROCHOT_OPTION_1_IDCHG_VTH_SHIFT 10
#define BQ257X0_PROCHOT_OPTION_1_IDCHG_VTH_BITS 6

#define BQ257X0_PROCHOT_OPTION_1_PP_COMP_SHIFT 6
#define BQ257X0_PROCHOT_OPTION_1_PP_COMP_BITS 1
#define BQ257X0_PROCHOT_OPTION_1_PP_COMP__DISABLE 0
#define BQ257X0_PROCHOT_OPTION_1_PP_COMP__ENABLE 1

#define BQ257X0_PROCHOT_OPTION_1_PP_INOM_SHIFT 4
#define BQ257X0_PROCHOT_OPTION_1_PP_INOM_BITS 1
#define BQ257X0_PROCHOT_OPTION_1_PP_INOM__DISABLE 0
#define BQ257X0_PROCHOT_OPTION_1_PP_INOM__ENABLE 1

#define BQ257X0_PROCHOT_OPTION_1_PP_IDCHG_SHIFT 3
#define BQ257X0_PROCHOT_OPTION_1_PP_IDCHG_BITS 1
#define BQ257X0_PROCHOT_OPTION_1_PP_IDCHG__DISABLE 0
#define BQ257X0_PROCHOT_OPTION_1_PP_IDCHG__ENABLE 1

#define BQ257X0_PROCHOT_OPTION_1_PP_VDPM_SHIFT 7
#define BQ257X0_PROCHOT_OPTION_1_PP_VDPM_BITS 1
#define BQ257X0_PROCHOT_OPTION_1_PP_VDPM__DISABLE 0
#define BQ257X0_PROCHOT_OPTION_1_PP_VDPM__ENABLE 1

#define BQ257X0_PROCHOT_OPTION_1_PP_VSYS_SHIFT 2
#define BQ257X0_PROCHOT_OPTION_1_PP_VSYS_BITS 1
#define BQ257X0_PROCHOT_OPTION_1_PP_VSYS__DISABLE 0
#define BQ257X0_PROCHOT_OPTION_1_PP_VSYS__ENABLE 1

#define BQ257X0_PROCHOT_OPTION_1_PP_BATPRES_SHIFT 1
#define BQ257X0_PROCHOT_OPTION_1_PP_BATPRES_BITS 1
#define BQ257X0_PROCHOT_OPTION_1_PP_BATPRES__DISABLE 0
#define BQ257X0_PROCHOT_OPTION_1_PP_BATPRES__ENABLE 1

#define BQ257X0_PROCHOT_OPTION_1_PP_ACOK_SHIFT 0
#define BQ257X0_PROCHOT_OPTION_1_PP_ACOK_BITS 1
#define BQ257X0_PROCHOT_OPTION_1_PP_ACOK__DISABLE 0
#define BQ257X0_PROCHOT_OPTION_1_PP_ACOK__ENABLE 1

/*
 * ChargeCurrent Register (0x14)
 */
#define BQ257X0_CHARGE_CURRENT_CHARGE_CURRENT_SHIFT 6
#define BQ257X0_CHARGE_CURRENT_CHARGE_CURRENT_BITS 7

/*
 * IIN_DPM Register (0x22)
 */
#define BQ257X0_IIN_DPM_CURRENT_SHIFT 8
#define BQ257X0_IIN_DPM_CURRENT_BITS 7
#define BQ257X0_IIN_DPM_CURRENT_STEP_MA 50

/*
 * IIN_HOST Register (0x3f)
 */
#define BQ257X0_IIN_HOST_CURRENT_SHIFT 8
#define BQ257X0_IIN_HOST_CURRENT_BITS 7
#define BQ257X0_IIN_HOST_CURRENT_STEP_MA 50

/*
 * ADCOption Register (0x35)
 */
#define BQ257X0_ADC_OPTION_ADC_START_SHIFT 14
#define BQ257X0_ADC_OPTION_ADC_START_BITS 1
#define BQ257X0_ADC_OPTION_ADC_FULLSCALE_SHIFT 13
#define BQ257X0_ADC_OPTION_ADC_FULLSCALE_BITS 1

#define BQ257X0_ADC_OPTION_EN_ADC_VBUS_SHIFT 6
#define BQ257X0_ADC_OPTION_EN_ADC_VBUS_BITS 1
#define BQ257X0_ADC_OPTION_EN_ADC_ALL GENMASK(7, 0)

/*
 * ADCVBUS/PSYS Register (0x23)
 */
#define BQ257X0_ADC_VBUS_PSYS_VBUS_SHIFT 8
#define BQ257X0_ADC_VBUS_PSYS_VBUS_BITS 8
#define BQ257X0_ADC_VBUS_PSYS_PSYS_SHIFT 0
#define BQ257X0_ADC_VBUS_PSYS_PSYS_BITS 8

/*
 * VSYS_MIN Register (0x3e)
 */
#define BQ25710_MIN_SYSTEM_VOLTAGE_SHIFT 8
#define BQ25710_MIN_SYSTEM_VOLTAGE_BITS 6
#define BQ25720_VSYS_MIN_VOLTAGE_SHIFT 8
#define BQ25720_VSYS_MIN_VOLTAGE_BITS 8

/*
 * BQ257x0 register field accessor macros.
 */

/*
 * Returns the bitmask of a register field.
 *
 *  _chip	chip name
 *  _reg	chip register name
 *  _field	register field name
 */

#define BQ_FIELD_MASK(_chip, _reg, _field)              \
	GENMASK((_chip##_##_reg##_##_field##_SHIFT +    \
		 _chip##_##_reg##_##_field##_BITS - 1), \
		_chip##_##_reg##_##_field##_SHIFT)

/*
 * Given a register value, returns the value of the specified field.
 *
 *  _chip	chip name
 *  _reg	chip register name
 *  _field	register field name
 *  _x		the value of the register to be examined
 */

#define GET_BQ_FIELD(_chip, _reg, _field, _x)          \
	(((_x) >> _chip##_##_reg##_##_field##_SHIFT) & \
	 GENMASK(_chip##_##_reg##_##_field##_BITS - 1, 0))

/*
 * Given a register value, sets the specified field to the given value,
 * and returns the resulting register value.
 *
 *  _chip	chip name
 *  _reg	chip register name
 *  _field	register field name
 *  _v		register field value
 *  _x		the initial value of the register
 */

#define SET_BQ_FIELD(_chip, _reg, _field, _v, _x)                 \
	(((_x) & ~BQ_FIELD_MASK(_chip, _reg, _field)) |           \
	 (((_v)&GENMASK(_chip##_##_reg##_##_field##_BITS - 1, 0)) \
	  << _chip##_##_reg##_##_field##_SHIFT))

/*
 * Given a register value, sets the specified field to the predefined
 * constant, and returns the resulting register value.
 *
 *  _chip	chip name
 *  _reg	chip register name
 *  _field	register field name
 *  _c		register field value constant name
 *  _x		the initial value of the register
 */

#define SET_BQ_FIELD_BY_NAME(_chip, _reg, _field, _c, _x)                    \
	SET_BQ_FIELD(_chip, _reg, _field, _chip##_##_reg##_##_field##__##_c, \
		     (_x))

#endif /* __CROS_EC_BQ257X0_REGS_H */