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
|
/* Copyright 2014 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 bq24773 battery charger driver.
*/
#ifndef __CROS_EC_BQ24773_H
#define __CROS_EC_BQ24773_H
/* for i2c_read and i2c_write functions. */
#include "i2c.h"
/* I2C address */
#define BQ24770_ADDR_FLAGS 0x09
#define BQ24773_ADDR_FLAGS 0x6a
/* Chip specific commands */
#define BQ24770_CHARGE_OPTION0 0x12
#define BQ24770_CHARGE_OPTION1 0x3B
#define BQ24770_CHARGE_OPTION2 0x38
#define BQ24770_PROCHOT_OPTION0 0x3C
#define BQ24770_PROCHOT_OPTION1 0x3D
#define BQ24770_CHARGE_CURRENT 0x14
#define BQ24770_MAX_CHARGE_VOLTAGE 0x15
#define BQ24770_MIN_SYSTEM_VOLTAGE 0x3E
#define BQ24770_INPUT_CURRENT 0x3F
#define BQ24770_MANUFACTURE_ID 0xFE
#define BQ24770_DEVICE_ADDRESS 0xFF
#define BQ24773_CHARGE_OPTION0 0x00
#define BQ24773_CHARGE_OPTION1 0x02
#define BQ24773_PROCHOT_OPTION0 0x04
#define BQ24773_PROCHOT_OPTION1 0x06
#define BQ24773_PROCHOT_STATUS 0x08
#define BQ24773_DEVICE_ADDRESS 0x09
#define BQ24773_CHARGE_CURRENT 0x0A
#define BQ24773_MAX_CHARGE_VOLTAGE 0x0C
#define BQ24773_MIN_SYSTEM_VOLTAGE 0x0E
#define BQ24773_INPUT_CURRENT 0x0F
#define BQ24773_CHARGE_OPTION2 0x10
/* Option bits */
#define OPTION0_CHARGE_INHIBIT BIT(0)
#define OPTION0_LEARN_ENABLE BIT(5)
#define OPTION0_SWITCHING_FREQ_MASK (3 << 8)
#define OPTION0_SWITCHING_FREQ_600KHZ (0 << 8)
#define OPTION0_SWITCHING_FREQ_800KHZ BIT(8)
#define OPTION0_SWITCHING_FREQ_1000KHZ (2 << 8)
#define OPTION0_SWITCHING_FREQ_1200KHZ (3 << 8)
#define OPTION2_EN_EXTILIM BIT(7)
/* Prochot Option bits */
#define PROCHOT_OPTION1_SELECTOR_MASK 0x7f /* [6:0] PROCHOT SELECTOR */
/* ChargeCurrent Register - 0x14 (mA) */
#define CHARGE_I_OFF 0
#define CHARGE_I_MIN 128
#define CHARGE_I_MAX 8128
#define CHARGE_I_STEP 64
/* MaxChargeVoltage Register - 0x15 (mV) */
#define CHARGE_V_MIN 1024
#define CHARGE_V_MAX 19200
#define CHARGE_V_STEP 16
/* InputCurrent Register - 0x3f (mA) */
#define INPUT_I_MIN 128
#define INPUT_I_MAX 8128
#define INPUT_I_STEP 64
#ifdef CONFIG_CHARGER_BQ24770
#define CHARGER_NAME "bq24770"
#define I2C_ADDR_CHARGER_FLAGS BQ24770_ADDR_FLAGS
#define REG_CHARGE_OPTION0 BQ24770_CHARGE_OPTION0
#define REG_CHARGE_OPTION1 BQ24770_CHARGE_OPTION1
#define REG_CHARGE_OPTION2 BQ24770_CHARGE_OPTION2
#define REG_PROCHOT_OPTION0 BQ24770_PROCHOT_OPTION0
#define REG_PROCHOT_OPTION1 BQ24770_PROCHOT_OPTION1
#define REG_CHARGE_CURRENT BQ24770_CHARGE_CURRENT
#define REG_MAX_CHARGE_VOLTAGE BQ24770_MAX_CHARGE_VOLTAGE
#define REG_MIN_SYSTEM_VOLTAGE BQ24770_MIN_SYSTEM_VOLTAGE
#define REG_INPUT_CURRENT BQ24770_INPUT_CURRENT
#define REG_MANUFACTURE_ID BQ24770_MANUFACTURE_ID
#define REG_DEVICE_ADDRESS BQ24770_DEVICE_ADDRESS
#elif defined(CONFIG_CHARGER_BQ24773)
#define CHARGER_NAME "bq24773"
#define I2C_ADDR_CHARGER_FLAGS BQ24773_ADDR_FLAGS
#define REG_CHARGE_OPTION0 BQ24773_CHARGE_OPTION0
#define REG_CHARGE_OPTION1 BQ24773_CHARGE_OPTION1
#define REG_CHARGE_OPTION2 BQ24773_CHARGE_OPTION2
#define REG_PROCHOT_OPTION0 BQ24773_PROCHOT_OPTION0
#define REG_PROCHOT_OPTION1 BQ24773_PROCHOT_OPTION1
#define REG_CHARGE_CURRENT BQ24773_CHARGE_CURRENT
#define REG_MAX_CHARGE_VOLTAGE BQ24773_MAX_CHARGE_VOLTAGE
#define REG_MIN_SYSTEM_VOLTAGE BQ24773_MIN_SYSTEM_VOLTAGE
#define REG_INPUT_CURRENT BQ24773_INPUT_CURRENT
#define REG_DEVICE_ADDRESS BQ24773_DEVICE_ADDRESS
#endif
#ifdef CONFIG_CHARGER_BQ24773
static inline int raw_read8(int offset, int *value)
{
return i2c_read8(I2C_PORT_CHARGER, I2C_ADDR_CHARGER_FLAGS,
offset, value);
}
static inline int raw_write8(int offset, int value)
{
return i2c_write8(I2C_PORT_CHARGER, I2C_ADDR_CHARGER_FLAGS,
offset, value);
}
#endif
static inline int raw_read16(int offset, int *value)
{
return i2c_read16(I2C_PORT_CHARGER, I2C_ADDR_CHARGER_FLAGS,
offset, value);
}
static inline int raw_write16(int offset, int value)
{
return i2c_write16(I2C_PORT_CHARGER, I2C_ADDR_CHARGER_FLAGS,
offset, value);
}
#endif /* __CROS_EC_BQ24773_H */
|