aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/battery/fuelgauge/max17050_fuelgauge.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/battery/fuelgauge/max17050_fuelgauge.h')
-rw-r--r--include/linux/battery/fuelgauge/max17050_fuelgauge.h169
1 files changed, 169 insertions, 0 deletions
diff --git a/include/linux/battery/fuelgauge/max17050_fuelgauge.h b/include/linux/battery/fuelgauge/max17050_fuelgauge.h
new file mode 100644
index 0000000..8576730
--- /dev/null
+++ b/include/linux/battery/fuelgauge/max17050_fuelgauge.h
@@ -0,0 +1,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 */
+