summaryrefslogtreecommitdiff
path: root/include/battery_smart.h
blob: f07b967861acafc4ab3054678ea3b9a2e5f1ccae (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
/* Copyright 2012 The ChromiumOS Authors
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * Smart battery v1.0
 * Smart battery charger v1.1
 */
#ifndef __CROS_EC_BATTERY_SMART_H
#define __CROS_EC_BATTERY_SMART_H

#include "common.h"

/* Smart battery and charger I2C address */
#define BATTERY_ADDR_FLAGS 0x0B
#define CHARGER_ADDR_FLAGS 0x09

/* Charger functions */
#define SB_CHARGER_SPEC_INFO 0x11
#define SB_CHARGE_MODE 0x12
#define SB_CHARGER_STATUS 0x13
#define SB_CHARGING_CURRENT 0x14
#define SB_CHARGING_VOLTAGE 0x15
#define SB_ALARM_WARNING 0x16

/* Battery functions */
#define SB_MANUFACTURER_ACCESS 0x00
#define SB_REMAINING_CAPACITY_ALARM 0x01
#define SB_REMAINING_TIME_ALARM 0x02
#define SB_BATTERY_MODE 0x03
#define SB_AT_RATE 0x04
#define SB_AT_RATE_TIME_TO_FULL 0x05
#define SB_AT_RATE_TIME_TO_EMPTY 0x06
#define SB_AT_RATE_OK 0x07
#define SB_TEMPERATURE 0x08
#define SB_VOLTAGE 0x09
#define SB_CURRENT 0x0a
#define SB_AVERAGE_CURRENT 0x0b
#define SB_MAX_ERROR 0x0c
#define SB_RELATIVE_STATE_OF_CHARGE 0x0d
#define SB_ABSOLUTE_STATE_OF_CHARGE 0x0e
#define SB_REMAINING_CAPACITY 0x0f
#define SB_FULL_CHARGE_CAPACITY 0x10
#define SB_RUN_TIME_TO_EMPTY 0x11
#define SB_AVERAGE_TIME_TO_EMPTY 0x12
#define SB_AVERAGE_TIME_TO_FULL 0x13
#define SB_CHARGING_CURRENT 0x14
#define SB_CHARGING_VOLTAGE 0x15
#define SB_BATTERY_STATUS 0x16
#define SB_CYCLE_COUNT 0x17
#define SB_DESIGN_CAPACITY 0x18
#define SB_DESIGN_VOLTAGE 0x19
#define SB_SPECIFICATION_INFO 0x1a
#define SB_MANUFACTURE_DATE 0x1b
#define SB_SERIAL_NUMBER 0x1c
#define SB_MANUFACTURER_NAME 0x20
#define SB_DEVICE_NAME 0x21
#define SB_DEVICE_CHEMISTRY 0x22
#define SB_MANUFACTURER_DATA 0x23
#define SB_OPTIONAL_MFG_FUNC1 0x3C
#define SB_OPTIONAL_MFG_FUNC2 0x3D
#define SB_OPTIONAL_MFG_FUNC3 0x3E
#define SB_OPTIONAL_MFG_FUNC4 0x3F
/* Extension of smart battery spec, may not be supported on all platforms */
#define SB_PACK_STATUS 0x43
#define SB_ALT_MANUFACTURER_ACCESS 0x44
#define SB_MANUFACTURE_INFO 0x70

/* Battery mode */
#define MODE_INTERNAL_CHARGE_CONTROLLER BIT(0)
#define MODE_PRIMARY_BATTERY_SUPPORT BIT(1)
#define MODE_CONDITION_CYCLE BIT(7)
#define MODE_CHARGE_CONTROLLER_ENABLED BIT(8)
#define MODE_PRIMARY_BATTERY BIT(9)
#define MODE_ALARM BIT(13)
#define MODE_CHARGER BIT(14)
#define MODE_CAPACITY BIT(15)

/* Battery status */
#define STATUS_ERR_CODE_MASK 0xf
#define STATUS_CODE_OK 0
#define STATUS_CODE_BUSY 1
#define STATUS_CODE_RESERVED 2
#define STATUS_CODE_UNSUPPORTED 3
#define STATUS_CODE_ACCESS_DENIED 4
#define STATUS_CODE_OVERUNDERFLOW 5
#define STATUS_CODE_BADSIZE 6
#define STATUS_CODE_UNKNOWN_ERROR 7
#define STATUS_FULLY_DISCHARGED BIT(4)
#define STATUS_FULLY_CHARGED BIT(5)
#define STATUS_DISCHARGING BIT(6)
#define STATUS_INITIALIZED BIT(7)
#define STATUS_REMAINING_TIME_ALARM BIT(8)
#define STATUS_REMAINING_CAPACITY_ALARM BIT(9)
#define STATUS_TERMINATE_DISCHARGE_ALARM BIT(11)
#define STATUS_OVERTEMP_ALARM BIT(12)
#define STATUS_TERMINATE_CHARGE_ALARM BIT(14)
#define STATUS_OVERCHARGED_ALARM BIT(15)

/* Battery Spec Info */
#define BATTERY_SPEC_REVISION_MASK 0x000F
#define BATTERY_SPEC_REVISION_SHIFT 0
#define BATTERY_SPEC_VERSION_MASK 0x00F0
#define BATTERY_SPEC_VERSION_SHIFT 4
#define BATTERY_SPEC_VSCALE_MASK 0x0F00
#define BATTERY_SPEC_VSCALE_SHIFT 8
#define BATTERY_SPEC_IPSCALE_MASK 0xF000
#define BATTERY_SPEC_IPSCALE_SHIFT 12

#define BATTERY_SPEC_VERSION(INFO) \
	((INFO & BATTERY_SPEC_VERSION_MASK) >> BATTERY_SPEC_VERSION_SHIFT)
/* Smart battery version info */
#define BATTERY_SPEC_VER_1_0 1
#define BATTERY_SPEC_VER_1_1 2
#define BATTERY_SPEC_VER_1_1_WITH_PEC 3
/* Smart battery revision info */
#define BATTERY_SPEC_REVISION_1 1

/* Charger alarm warning */
#define ALARM_OVER_CHARGED 0x8000
#define ALARM_TERMINATE_CHARGE 0x4000
#define ALARM_RESERVED_2000 0x2000
#define ALARM_OVER_TEMP 0x1000
#define ALARM_TERMINATE_DISCHARGE 0x0800
#define ALARM_RESERVED_0400 0x0400
#define ALARM_REMAINING_CAPACITY 0x0200
#define ALARM_REMAINING_TIME 0x0100
#define ALARM_STATUS_INITIALIZE 0x0080
#define ALARM_STATUS_DISCHARGING 0x0040
#define ALARM_STATUS_FULLY_CHARGED 0x0020
#define ALARM_STATUS_FULLY_DISCHARGED 0x0010
/* Charge mode */
#define CHARGE_FLAG_INHIBIT_CHARGE BIT(0)
#define CHARGE_FLAG_ENABLE_POLLING BIT(1)
#define CHARGE_FLAG_POR_RESET BIT(2)
#define CHARGE_FLAG_RESET_TO_ZERO BIT(3)
/* Charger status */
#define CHARGER_CHARGE_INHIBITED BIT(0)
#define CHARGER_POLLING_ENABLED BIT(1)
#define CHARGER_VOLTAGE_NOTREG BIT(2)
#define CHARGER_CURRENT_NOTREG BIT(3)
#define CHARGER_LEVEL_2 BIT(4)
#define CHARGER_LEVEL_3 BIT(5)
#define CHARGER_CURRENT_OR BIT(6)
#define CHARGER_VOLTAGE_OR BIT(7)
#define CHARGER_RES_OR BIT(8)
#define CHARGER_RES_COLD BIT(9)
#define CHARGER_RES_HOT BIT(10)
#define CHARGER_RES_UR BIT(11)
#define CHARGER_ALARM_INHIBITED BIT(12)
#define CHARGER_POWER_FAIL BIT(13)
#define CHARGER_BATTERY_PRESENT BIT(14)
#define CHARGER_AC_PRESENT BIT(15)
#define CHARGER_BYPASS_MODE BIT(16)
/* Charger specification info */
#define INFO_CHARGER_SPEC(INFO) ((INFO)&0xf)
#define INFO_SELECTOR_SUPPORT(INFO) (((INFO) >> 4) & 1)

/* Manufacturer Access parameters */
#define PARAM_SAFETY_STATUS 0x51
#define PARAM_OPERATION_STATUS 0x54
#define PARAM_FIRMWARE_RUNTIME 0x62
/* Operation status masks -- 6 byte reply */
/* reply[3] */
#define BATTERY_DISCHARGING_DISABLED 0x20
#define BATTERY_CHARGING_DISABLED 0x40

/* Battery manufacture date */
#define MANUFACTURE_DATE_DAY_MASK 0x001F
#define MANUFACTURE_DATE_DAY_SHIFT 0
#define MANUFACTURE_DATE_MONTH_MASK 0x01E0
#define MANUFACTURE_DATE_MONTH_SHIFT 5
#define MANUFACTURE_DATE_YEAR_MASK 0xFE00
#define MANUFACTURE_DATE_YEAR_SHIFT 9
#define MANUFACTURE_DATE_YEAR_OFFSET 1980
#define MANUFACTURE_RUNTIME_SIZE 4

/* Read from battery */
int sb_read(int cmd, int *param);

/**
 * Read null-terminated string from battery
 * @param offset	Battery register to read from
 * @param data		Buffer to hold the string
 * @param len		Length of data buffer
 */
int sb_read_string(int offset, uint8_t *data, int len);

/**
 * Read sized block of data from battery
 * @param offset	Battery register to read from
 * @param data		Buffer to hold read data
 * @param len		Length of data buffer
 */
int sb_read_sized_block(int offset, uint8_t *data, int len);

/* Write to battery */
int sb_write(int cmd, int param);

/**
 * Write block to do battery cutoff
 *
 * @param reg		Battery cutoff register
 * @param val		Battery cutoff data value
 * @param len		Param val data length
 * @return          non-zero if error
 */
int sb_write_block(int reg, const uint8_t *val, int len);

/* Read manufactures access data from the battery */
int sb_read_mfgacc(int cmd, int block, uint8_t *data, int len);

#endif /* __CROS_EC_BATTERY_SMART_H */