summaryrefslogtreecommitdiff
path: root/driver/charger/bq25710.h
blob: 68c7619ceb37932e0747048ba68e8ab8ace6c4e5 (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
/* Copyright 2018 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * TI bq25710 battery charger driver.
 */

#ifndef __CROS_EC_BQ25710_H
#define __CROS_EC_BQ25710_H

/* SMBUS Interface */
#define BQ25710_SMBUS_ADDR1_FLAGS 0x09

#define BQ25710_BC12_MIN_VOLTAGE_MV	1408

/* Registers */
#define BQ25710_REG_CHARGE_OPTION_0		0x12
#define BQ25710_REG_CHARGE_CURRENT		0x14
#define BQ25710_REG_MAX_CHARGE_VOLTAGE		0x15
#define BQ25710_REG_CHARGER_STATUS		0x20
#define BQ25710_REG_PROCHOT_STATUS		0x21
#define BQ25710_REG_IIN_DPM			0x22
#define BQ25710_REG_ADC_VBUS_PSYS		0x23
#define BQ25710_REG_ADC_IBAT			0x24
#define BQ25710_REG_ADC_CMPIN_IIN		0x25
#define BQ25710_REG_ADC_VSYS_VBAT		0x26
#define BQ25710_REG_CHARGE_OPTION_1		0x30
#define BQ25710_REG_CHARGE_OPTION_2		0x31
#define BQ25710_REG_CHARGE_OPTION_3		0x32
#define BQ25710_REG_PROCHOT_OPTION_0		0x33
#define BQ25710_REG_PROCHOT_OPTION_1		0x34
#define BQ25710_REG_ADC_OPTION			0x35
#ifdef CONFIG_CHARGER_BQ25720
#define BQ25720_REG_CHARGE_OPTION_4		0x36
#define BQ25720_REG_VMIN_ACTIVE_PROTECTION	0x37
#endif
#define BQ25710_REG_OTG_VOLTAGE			0x3B
#define BQ25710_REG_OTG_CURRENT			0x3C
#define BQ25710_REG_INPUT_VOLTAGE		0x3D
#define BQ25710_REG_MIN_SYSTEM_VOLTAGE		0x3E
#define BQ25710_REG_IIN_HOST			0x3F
#define BQ25710_REG_MANUFACTURER_ID		0xFE
#define BQ25710_REG_DEVICE_ADDRESS		0xFF

/* ChargeOption0 Register */
#define BQ25710_CHARGE_OPTION_0_LOW_POWER_MODE	BIT(15)
#define BQ25710_CHARGE_OPTION_0_IDPM_AUTO_DIS	BIT(12)
#define BQ25710_CHARGE_OPTION_0_EN_LEARN	BIT(5)
#define BQ25710_CHARGE_OPTION_0_IADP_GAIN	BIT(4)
#define BQ25710_CHARGE_OPTION_0_EN_IDPM		BIT(1)
#define BQ25710_CHARGE_OPTION_0_CHRG_INHIBIT	BIT(0)

/* ChargeOption2 Register */
#define BQ25710_CHARGE_OPTION_2_EN_EXTILIM	BIT(7)
#define BQ25710_CHARGE_OPTION_2_TMAX_SHIFT	8
#define BQ25710_CHARGE_OPTION_2_TMAX_MASK (0x3 << \
					   BQ25710_CHARGE_OPTION_2_TMAX_SHIFT)

/* ChargeOption3 Register */
#define BQ25710_CHARGE_OPTION_3_RESET_REG	BIT(14)
#define BQ25710_CHARGE_OPTION_3_EN_ICO_MODE	BIT(11)

/* ChargeStatus Register */
#define BQ25710_CHARGE_STATUS_ICO_DONE		BIT(14)

/* IIN_DPM Register */
#define BQ25710_IIN_DPM_CURRENT_SHIFT		8
#define BQ25710_IIN_DPM_CURRENT_STEP_MA		50

/* ADCOption Register */
#define BQ25710_ADC_OPTION_ADC_START		BIT(14)
#define BQ25710_ADC_OPTION_EN_ADC_VBUS		BIT(6)
#define BQ25710_ADC_OPTION_EN_ADC_IIN		BIT(4)
#define BQ25710_ADC_OPTION_EN_ADC_ALL		0xFF

/* ADC conversion time ins ms */
#if defined(CONFIG_CHARGER_BQ25720)
#define BQ25710_ADC_OPTION_ADC_CONV_MS		25
#elif defined(CONFIG_CHARGER_BQ25710)
#define BQ25710_ADC_OPTION_ADC_CONV_MS		10
#else
#error Only the BQ25720 and BQ25710 are supported by bq25710 driver.
#endif

/* ADCVBUS/PSYS Register */
#if defined(CONFIG_CHARGER_BQ25720)
#define BQ25720_ADC_VBUS_STEP_MV		96
#elif defined(CONFIG_CHARGER_BQ25710)
#define BQ25710_ADC_VBUS_STEP_MV		64
#define BQ25710_ADC_VBUS_BASE_MV		3200
#else
#error Only the BQ25720 and BQ25710 are supported by bq25710 driver.
#endif
#define BQ25710_ADC_VBUS_STEP_BIT_OFFSET	8

/* ADCIIN Register */
#define BQ25710_ADC_IIN_STEP_MA			50
#define BQ25710_ADC_IIN_STEP_BIT_OFFSET		8

/* ProchotOption0 Register */
#define BQ25710_PROCHOT0_ILIM_VTH_SHIFT 11
#define BQ25710_PROCHOT0_ILIM_VTH_MASK	(0x1f << \
					 BQ25710_PROCHOT0_ILIM_VTH_SHIFT)

/* ProchotOption1 Register */
#define BQ25710_PROCHOT_PROFILE_VDPM		BIT(7)
#define BQ25710_PROCHOT_PROFILE_IDCHG		BIT(3)
#define BQ25710_PROCHOT_PROFILE_VSYS		BIT(2)
#define BQ25710_PROCHOT_IDCHG_VTH_MASK		0xFC00

/* IIN_HOST Register */
#define BQ25710_IIN_HOST_CURRENT_SHIFT		8
#define BQ25710_IIN_HOST_CURRENT_STEP_MA	50

#if defined(CONFIG_CHARGER_BQ25720)
/* Vmin Active Protection Register */
#define BQ25720_VMIN_AP_VSYS_TH2_SHIFT		2
#define BQ25720_VMIN_AP_VSYS_TH2_MASK	GENMASK(7, \
						BQ25720_VMIN_AP_VSYS_TH2_SHIFT)
#endif

/* Min System Voltage Register */
#if defined(CONFIG_CHARGER_BQ25720)
#define BQ25710_MIN_SYSTEM_VOLTAGE_STEP_MV	100
#elif defined(CONFIG_CHARGER_BQ25710)
#define BQ25710_MIN_SYSTEM_VOLTAGE_STEP_MV	256
#else
#error Only the BQ25720 and BQ25710 are supported by bq25710 driver.
#endif
#define BQ25710_MIN_SYSTEM_VOLTAGE_SHIFT	8

extern const struct charger_drv bq25710_drv;

/**
 * Set VSYS_MIN
 *
 * @param chgnum: Index into charger chips
 * @param mv: min system voltage in mV
 * @return EC_SUCCESS or error
 */
int bq25710_set_min_system_voltage(int chgnum, int mv);

#endif /* __CROS_EC_BQ25710_H */