blob: 8576730c1aa71fa77c9888f04b90c8cae0e9516c (
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
|
/*
* max17050_fuelgauge.h
* Samsung MAX17050 Fuel Gauge Header
*
* Copyright (C) 2012 Samsung Electronics, Inc.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef __MAX17050_FUELGAUGE_H
#define __MAX17050_FUELGAUGE_H __FILE__
#include <linux/android_alarm.h>
/* Slave address should be shifted to the right 1bit.
* R/W bit should NOT be included.
*/
#define SEC_FUELGAUGE_I2C_SLAVEADDR 0x36
#if defined(CONFIG_FUELGAUGE_MAX17050_VOLTAGE_TRACKING)
#define MAX17050_REG_STATUS 0x00
#define MAX17050_REG_VALRT_TH 0x01
#define MAX17050_REG_TALRT_TH 0x02
#define MAX17050_REG_SALRT_TH 0x03
#define MAX17050_REG_VCELL 0x09
#define MAX17050_REG_TEMPERATURE 0x08
#define MAX17050_REG_AVGVCELL 0x19
#define MAX17050_REG_CONFIG 0x1D
#define MAX17050_REG_VERSION 0x21
#define MAX17050_REG_LEARNCFG 0x28
#define MAX17050_REG_FILTERCFG 0x29
#define MAX17050_REG_MISCCFG 0x2B
#define MAX17050_REG_CGAIN 0x2E
#define MAX17050_REG_RCOMP 0x38
#define MAX17050_REG_VFOCV 0xFB
#define MAX17050_REG_SOC_VF 0xFF
struct sec_fg_info {
bool dummy;
};
#endif
#if defined(CONFIG_FUELGAUGE_MAX17050_COULOMB_COUNTING)
#define PRINT_COUNT 10
/* Register address */
#define STATUS_REG 0x00
#define VALRT_THRESHOLD_REG 0x01
#define TALRT_THRESHOLD_REG 0x02
#define SALRT_THRESHOLD_REG 0x03
#define REMCAP_REP_REG 0x05
#define SOCREP_REG 0x06
#define TEMPERATURE_REG 0x08
#define VCELL_REG 0x09
#define CURRENT_REG 0x0A
#define AVG_CURRENT_REG 0x0B
#define SOCMIX_REG 0x0D
#define SOCAV_REG 0x0E
#define REMCAP_MIX_REG 0x0F
#define FULLCAP_REG 0x10
#define RFAST_REG 0x15
#define AVR_TEMPERATURE_REG 0x16
#define CYCLES_REG 0x17
#define DESIGNCAP_REG 0x18
#define AVR_VCELL_REG 0x19
#define CONFIG_REG 0x1D
#define REMCAP_AV_REG 0x1F
#define FULLCAP_NOM_REG 0x23
#define MISCCFG_REG 0x2B
#define RCOMP_REG 0x38
#define FSTAT_REG 0x3D
#define DQACC_REG 0x45
#define DPACC_REG 0x46
#define OCV_REG 0xEE
#define VFOCV_REG 0xFB
#define VFSOC_REG 0xFF
#define FG_LEVEL 0
#define FG_TEMPERATURE 1
#define FG_VOLTAGE 2
#define FG_CURRENT 3
#define FG_CURRENT_AVG 4
#define FG_CHECK_STATUS 5
#define FG_VF_SOC 6
#define FG_AV_SOC 7
#define LOW_BATT_COMP_RANGE_NUM 5
#define LOW_BATT_COMP_LEVEL_NUM 2
#define MAX_LOW_BATT_CHECK_CNT 10
enum {
POSITIVE = 0,
NEGATIVE,
};
enum {
RANGE = 0,
SLOPE,
OFFSET,
TABLE_MAX
};
#define CURRENT_RANGE_MAX_NUM 5
#define TEMP_RANGE_MAX_NUM 3
struct battery_data_t {
u16 Capacity;
u16 low_battery_comp_voltage;
s32 low_battery_table[CURRENT_RANGE_MAX_NUM][TABLE_MAX];
s32 temp_adjust_table[TEMP_RANGE_MAX_NUM][TABLE_MAX];
u8 *type_str;
};
struct sec_fg_info {
/* test print count */
int pr_cnt;
/* full charge comp */
struct delayed_work full_comp_work;
u32 previous_fullcap;
u32 previous_vffullcap;
/* low battery comp */
int low_batt_comp_cnt[LOW_BATT_COMP_RANGE_NUM][LOW_BATT_COMP_LEVEL_NUM];
int low_batt_comp_flag;
/* low battery boot */
int low_batt_boot_flag;
bool is_low_batt_alarm;
/* battery info */
u32 soc;
/* miscellaneous */
unsigned long fullcap_check_interval;
int full_check_flag;
bool is_first_check;
};
/* FullCap learning setting */
#define VFFULLCAP_CHECK_INTERVAL 300 /* sec */
/* soc should be 0.1% unit */
#define VFSOC_FOR_FULLCAP_LEARNING 950
#define LOW_CURRENT_FOR_FULLCAP_LEARNING 20
#define HIGH_CURRENT_FOR_FULLCAP_LEARNING 120
#define LOW_AVGCURRENT_FOR_FULLCAP_LEARNING 20
#define HIGH_AVGCURRENT_FOR_FULLCAP_LEARNING 100
/* power off margin */
/* soc should be 0.1% unit */
#define POWER_OFF_SOC_HIGH_MARGIN 20
#define POWER_OFF_VOLTAGE_HIGH_MARGIN 3500
#define POWER_OFF_VOLTAGE_LOW_MARGIN 3400
/* FG recovery handler */
/* soc should be 0.1% unit */
#define STABLE_LOW_BATTERY_DIFF 30
#define STABLE_LOW_BATTERY_DIFF_LOWBATT 10
#define LOW_BATTERY_SOC_REDUCE_UNIT 10
#endif
#endif /* __MAX17050_FUELGAUGE_H */
|