diff options
Diffstat (limited to 'include/linux/battery/fuelgauge/max17050_fuelgauge.h')
-rw-r--r-- | include/linux/battery/fuelgauge/max17050_fuelgauge.h | 169 |
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 */ + |