Files

2118 lines
57 KiB
C
Executable File

/*
* sec_board-msm8974.c
* Samsung Mobile Battery Driver
*
* Copyright (C) 2012 Samsung Electronics
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/battery/sec_battery.h>
#include <linux/battery/sec_fuelgauge.h>
#include <linux/battery/sec_charging_common.h>
#include <linux/qpnp/pin.h>
#include <linux/qpnp/qpnp-adc.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/krait-regulator.h>
#define SHORT_BATTERY_STANDARD 100
#if defined(CONFIG_USB_SWITCH_FSA9485)
extern int mhl_connection_state(void);
extern void fsa9485_mmdock_vbus_check(bool vbus_status);
#endif
#if defined(CONFIG_EXTCON)
extern int get_jig_state(void);
int current_cable_type = POWER_SUPPLY_TYPE_BATTERY;
#else
extern int current_cable_type;
#endif
extern unsigned int system_rev;
static enum qpnp_vadc_channels temp_channel;
static enum qpnp_vadc_channels chg_temp_channel;
static struct sec_fuelgauge_info *sec_fuelgauge = NULL;
#if defined(CONFIG_BATTERY_SAMSUNG_DATA)
#include CONFIG_BATTERY_SAMSUNG_DATA_FILE
#else //CONFIG_BATTERY_SAMSUNG_DATA
#if defined(CONFIG_FUELGAUGE_MAX17048)
static struct battery_data_t samsung_battery_data[] = {
/* SDI battery data (High voltage 4.35V) */
{
#if defined(CONFIG_MACH_HLTESKT) || defined(CONFIG_MACH_HLTEKTT) || defined(CONFIG_MACH_HLTELGT)
.RCOMP0 = 0x73,
.RCOMP_charging = 0x84,
.temp_cohot = -1025,
.temp_cocold = -3675,
#elif defined(CONFIG_MACH_FRESCOLTESKT)||defined(CONFIG_MACH_FRESCOLTEKTT)||defined(CONFIG_MACH_FRESCOLTELGT)
.RCOMP0 = 0x7E,
.RCOMP_charging = 0x80,
.temp_cohot = -675,
.temp_cocold = -6400,
#elif defined(CONFIG_MACH_HLTEVZW) || defined(CONFIG_MACH_HLTESPR)
.RCOMP0 = 0x70,
.RCOMP_charging = 0x8D,
.temp_cohot = -1000,
.temp_cocold = -4350,
#elif defined(CONFIG_MACH_HLTEATT)
.RCOMP0 = 0x75,
.RCOMP_charging = 0x8D,
.temp_cohot = -1000,
.temp_cocold = -4350,
#elif defined(CONFIG_MACH_HLTEUSC)
.RCOMP0 = 0x75,
.RCOMP_charging = 0x8D,
.temp_cohot = -1000,
.temp_cocold = -4350,
#elif defined(CONFIG_MACH_HLTEDCM)
.RCOMP0 = 0x7A,
.RCOMP_charging = 0x8A,
.temp_cohot = -1025,
.temp_cocold = -3675,
#elif defined(CONFIG_MACH_HLTEKDI)
.RCOMP0 = 0x73,
.RCOMP_charging = 0x84,
.temp_cohot = -1025,
.temp_cocold = -3675,
#elif defined(CONFIG_SEC_JS_PROJECT)
.RCOMP0 = 0x75,
.RCOMP_charging = 0x80,
.temp_cohot = -700,
.temp_cocold = -4875,
#elif defined(CONFIG_MACH_HLTECHNTWU)
.RCOMP0 = 0x6D,
.RCOMP_charging = 0x6D,
.temp_cohot = -900,
.temp_cocold = -3700,
#elif defined(CONFIG_MACH_HLTE_CHN_CMCC) || defined(CONFIG_MACH_H3G_CHN_CMCC) || defined(CONFIG_MACH_H3G_CHN_OPEN)
.RCOMP0 = 0x73,
.RCOMP_charging = 0x8D,
.temp_cohot = -1000,
.temp_cocold = -4350,
#elif defined(CONFIG_MACH_HLTEEUR)
.RCOMP0 = 0x62,
.RCOMP_charging = 0x7C,
.temp_cohot = -1000,
.temp_cocold = -4350,
#elif defined(CONFIG_MACH_FLTEEUR) || defined(CONFIG_MACH_FLTESKT)
.RCOMP0 = 0x75,
.RCOMP_charging = 0x70,
.temp_cohot = -375,
.temp_cocold = -3975,
#elif defined(CONFIG_MACH_KS01EUR)
.RCOMP0 = 0x73,
.RCOMP_charging = 0x79,
.temp_cohot = -850,
.temp_cocold = -4200,
#elif defined(CONFIG_MACH_KS01SKT) || defined(CONFIG_MACH_KS01KTT) || \
defined(CONFIG_MACH_KS01LGT)
.RCOMP0 = 0x70,
.RCOMP_charging = 0x79,
.temp_cohot = -850,
.temp_cocold = -4200,
#elif defined(CONFIG_MACH_JACTIVESKT)
.RCOMP0 = 0x7B,
.RCOMP_charging = 0x85,
.temp_cohot = -700,
.temp_cocold = -4875,
#elif defined(CONFIG_MACH_K3GDUOS_CTC)
.RCOMP0 = 0x5D,
.RCOMP_charging = 0x62,
.temp_cohot = -175,
.temp_cocold = -5825,
#elif defined(CONFIG_MACH_KLTE_CTC)
.RCOMP0 = 0x68,
.RCOMP_charging = 0x75,
.temp_cohot = -175,
.temp_cocold = -5825,
#elif defined(CONFIG_MACH_KLTE_CHN)
.RCOMP0 = 0x62,
.RCOMP_charging = 0x65,
.temp_cohot = -175,
.temp_cocold = -5825,
#elif defined(CONFIG_MACH_KLTE_SKT) || defined(CONFIG_MACH_KLTE_KTT) || \
defined(CONFIG_MACH_KLTE_LGT)
.RCOMP0 = 0x5D,
.RCOMP_charging = 0x68,
.temp_cohot = -175,
.temp_cocold = -5825,
#elif defined(CONFIG_SEC_KSPORTS_PROJECT)
.RCOMP0 = 0x67,
.RCOMP_charging = 0x67,
.temp_cohot = -175,
.temp_cocold = -5825,
#elif defined(CONFIG_SEC_K_PROJECT)
.RCOMP0 = 0x5D,
.RCOMP_charging = 0x5D,
.temp_cohot = -175,
.temp_cocold = -5825,
#elif defined(CONFIG_MACH_KACTIVELTE_KOR)
.RCOMP0 = 0x7E,
.RCOMP_charging = 0x7E,
.temp_cohot = -762,
.temp_cocold = -4787,
#elif defined(CONFIG_SEC_KACTIVE_PROJECT)
.RCOMP0 = 0x5D,
.RCOMP_charging = 0x5D,
.temp_cohot = -175,
.temp_cocold = -5825,
#else
.RCOMP0 = 0x73,
.RCOMP_charging = 0x8D,
.temp_cohot = -1000,
.temp_cocold = -4350,
#endif
.is_using_model_data = true,
.type_str = "SDI",
}
};
#else
static struct battery_data_t samsung_battery_data[] = {
/* SDI battery data (High voltage 4.35V) */
{
#if defined(CONFIG_MACH_PICASSO) || defined(CONFIG_MACH_LT03)
.Capacity = 0x3F76, /* N1/N2: 8123mAh */
#elif defined(CONFIG_MACH_MONDRIAN)
.Capacity = 0x257E,
#else
.Capacity = 0x4A38, /* V1/V2: 9500mAh */
#endif
.low_battery_comp_voltage = 3500,
.low_battery_table = {
/* range, slope, offset */
{-5000, 0, 0}, /* dummy for top limit */
{-1250, 0, 3320},
{-750, 97, 3451},
{-100, 96, 3461},
{0, 0, 3456},
},
.temp_adjust_table = {
/* range, slope, offset */
{47000, 122, 8950},
{60000, 200, 51000},
{100000, 0, 0}, /* dummy for top limit */
},
.type_str = "SDI",
}
};
#endif
#if defined(CONFIG_MACH_KLTE_CTC)
#define CAPACITY_MAX 980
#define CAPACITY_MAX_MARGIN 50
#define CAPACITY_MIN -7
#elif defined(CONFIG_MACH_KACTIVELTE_KOR)
#define CAPACITY_MAX 990
#define CAPACITY_MAX_MARGIN 70
#define CAPACITY_MIN 0
#elif defined(CONFIG_SEC_K_PROJECT) || defined(CONFIG_SEC_KACTIVE_PROJECT) || \
defined(CONFIG_SEC_KSPORTS_PROJECT)
#define CAPACITY_MAX 990
#define CAPACITY_MAX_MARGIN 50
#define CAPACITY_MIN -7
#elif defined(CONFIG_MACH_HLTESKT) || defined(CONFIG_MACH_HLTEKTT) || \
defined(CONFIG_MACH_HLTELGT) || defined(CONFIG_MACH_HLTEDCM) || \
defined(CONFIG_MACH_HLTEKDI)
#define CAPACITY_MAX 980
#define CAPACITY_MAX_MARGIN 50
#define CAPACITY_MIN -7
#elif defined(CONFIG_MACH_FRESCOLTESKT)||defined(CONFIG_MACH_FRESCOLTEKTT)||defined(CONFIG_MACH_FRESCOLTELGT)
#define CAPACITY_MAX 980
#define CAPACITY_MAX_MARGIN 50
#define CAPACITY_MIN 3
#elif defined(CONFIG_MACH_FLTEEUR) || defined(CONFIG_MACH_FLTESKT)
#define CAPACITY_MAX 990
#define CAPACITY_MAX_MARGIN 50
#define CAPACITY_MIN 0
#elif defined(CONFIG_MACH_MONDRIAN)
#define CAPACITY_MAX 1000
#define CAPACITY_MAX_MARGIN 50
#define CAPACITY_MIN 0
#elif defined(CONFIG_SEC_H_PROJECT) /* from H USA/EUR */
#define CAPACITY_MAX 990
#define CAPACITY_MAX_MARGIN 50
#define CAPACITY_MIN -7
#elif defined(CONFIG_SEC_JS_PROJECT)
#define CAPACITY_MAX 970
#define CAPACITY_MAX_MARGIN 50
#define CAPACITY_MIN -7
#else /* CONFIG_SEC_KS01_PROJECT */
#define CAPACITY_MAX 1000
#define CAPACITY_MAX_MARGIN 50
#define CAPACITY_MIN 0
#endif
#if defined(CONFIG_MACH_KLTE_EUR) || defined(CONFIG_MACH_KLTE_ATT) || defined(CONFIG_MACH_KLTE_TMO) || \
defined (CONFIG_MACH_KLTE_SKT) || defined(CONFIG_MACH_KLTE_KTT) || defined(CONFIG_MACH_KLTE_LGT) || \
defined(CONFIG_MACH_KLTE_SPR) || defined(CONFIG_MACH_KLTE_CAN) || defined(CONFIG_MACH_KLTE_MTR) || \
defined(CONFIG_MACH_KLTE_VZW) || defined(CONFIG_SEC_LOCALE_CHN) || defined(CONFIG_MACH_KLTE_AUS_TEL) || \
defined(CONFIG_MACH_KLTE_LRA)
static sec_bat_adc_table_data_t temp_table[] = {
{26009, 900},
{26280, 850},
{26600, 800},
{26950, 750},
{27325, 700},
{27737, 650},
{28180, 600},
{28699, 550},
{29360, 500},
{29970, 450},
{30995, 400},
{32046, 350},
{32985, 300},
{34050, 250},
{35139, 200},
{36179, 150},
{37208, 100},
{38237, 50},
{38414, 40},
{38598, 30},
{38776, 20},
{38866, 10},
{38956, 0},
{39102, -10},
{39247, -20},
{39393, -30},
{39538, -40},
{39684, -50},
{40490, -100},
{41187, -150},
{41652, -200},
{42030, -250},
{42327, -300},
};
#elif defined(CONFIG_MACH_KACTIVELTE_EUR) || defined(CONFIG_MACH_KACTIVELTE_ATT) || defined(CONFIG_MACH_KACTIVELTE_CAN) || defined(CONFIG_MACH_KACTIVELTE_SKT) \
|| defined(CONFIG_MACH_KACTIVELTE_DCM)
static sec_bat_adc_table_data_t temp_table[] = {
{26009, 900},
{26280, 850},
{26600, 800},
{26950, 750},
{27168, 700},
{27519, 650},
{27984, 600},
{28596, 550},
{29256, 500},
{30029, 450},
{30881, 400},
{32682, 300},
{35159, 200},
{37244, 100},
{38264, 50},
{38890, 20},
{39075, 10},
{39228, 0},
{39383, -10},
{39557, -20},
{40002, -50},
{41724, -200},
{42373, -300},
};
#elif defined(CONFIG_SEC_KSPORTS_PROJECT)
static sec_bat_adc_table_data_t temp_table[] = {
{25744, 900},
{26015, 850},
{26335, 800},
{26685, 750},
{27082, 700},
{27512, 650},
{27900, 600},
{28223, 550},
{28438, 530},
{28790, 500},
{29080, 490},
{29370, 480},
{29660, 470},
{29950, 460},
{30250, 450},
{31223, 400},
{32138, 350},
{33153, 300},
{34177, 250},
{35432, 200},
{36520, 150},
{37636, 100},
{38598, 50},
{38700, 40},
{38930, 30},
{38950, 20},
{39050, 10},
{39168, 0},
{39281, -10},
{39438, -20},
{39596, -30},
{39728, -40},
{39898, -50},
{40594, -100},
{41193, -150},
{41651, -200},
{42033, -250},
{42325, -300},
};
#elif defined (CONFIG_MACH_KLTE_DCM)
static sec_bat_adc_table_data_t temp_table[] = {
{25844, 900},
{26113, 850},
{26595, 800},
{26896, 750},
{27238, 700},
{27679, 650},
{28193, 600},
{28768, 550},
{29412, 500},
{30169, 450},
{31008, 400},
{31917, 350},
{32901, 300},
{33955, 250},
{35039, 200},
{36132, 150},
{37183, 100},
{38158, 50},
{39041, 0},
{39856, -50},
{40561, -100},
{41146, -150},
{41622, -200},
};
#elif defined (CONFIG_MACH_KLTE_SBM)
static sec_bat_adc_table_data_t temp_table[] = {
{25844, 900},
{26113, 850},
{26595, 800},
{26896, 750},
{27238, 700},
{27679, 650},
{28193, 600},
{28768, 550},
{29412, 500},
{30169, 450},
{31008, 400},
{31917, 350},
{32901, 300},
{33955, 250},
{35039, 200},
{36132, 150},
{37183, 100},
{38158, 50},
{39041, 0},
{39856, -50},
{40561, -100},
{41146, -150},
{41622, -200},
};
#elif defined (CONFIG_MACH_KLTE_KDI)
static sec_bat_adc_table_data_t temp_table[] = {
{25844, 900},
{26113, 850},
{26595, 800},
{26896, 750},
{27238, 700},
{27679, 650},
{28193, 600},
{28768, 550},
{29412, 500},
{30169, 450},
{31008, 400},
{31917, 350},
{32901, 300},
{33955, 250},
{35039, 200},
{36132, 150},
{37183, 100},
{38158, 50},
{39041, 0},
{39856, -50},
{40561, -100},
{41146, -150},
{41622, -200},
};
#elif defined (CONFIG_MACH_KLTE_USC) || defined(CONFIG_MACH_KLTE_ACG)
static sec_bat_adc_table_data_t temp_table[] = {
{26013, 900},
{26227, 850},
{26482, 800},
{26784, 750},
{27122, 700},
{27559, 650},
{28096, 600},
{28667, 550},
{29275, 500},
{30069, 450},
{30896, 400},
{31800, 350},
{32788, 300},
{33844, 250},
{34932, 200},
{36041, 150},
{37107, 100},
{38098, 50},
{38955, 0},
{39804, -50},
{40505, -100},
{41101, -150},
{41597, -200},
};
#elif defined(CONFIG_MACH_H3GDUOS_CTC)
static sec_bat_adc_table_data_t temp_table[] = {
{25844, 900},
{26113, 850},
{26398, 800},
{26764, 750},
{27240, 700},
{27662, 650},
{28202, 600},
{28777, 550},
{29444, 500},
{30193, 450},
{31040, 400},
{31953, 350},
{32942, 300},
{33991, 250},
{35070, 200},
{36168, 150},
{37238, 100},
{38234, 50},
{38414, 40},
{38640, 30},
{38866, 20},
{39092, 10},
{39139, 0},
{39342, -10},
{39545, -30},
{39748, -40},
{39954, -50},
{40641, -100},
{41204, -150},
{41689, -200},
};
#elif defined(CONFIG_MACH_HLTEUSC)
static sec_bat_adc_table_data_t temp_table[] = {
{25908, 900},
{26111, 850},
{26357, 800},
{26651, 750},
{26962, 700},
{27363, 650},
{27850, 600},
{28407, 550},
{29084, 500},
{29857, 450},
{30684, 400},
{31576, 350},
{32674, 300},
{33694, 250},
{34848, 200},
{35963, 150},
{37118, 100},
{38166, 50},
{39104, 0},
{39932, -50},
{40629, -100},
{41224, -150},
{41704, -200},
};
#elif defined(CONFIG_MACH_HLTEKDI)
static sec_bat_adc_table_data_t temp_table[] = {
{25844, 900},
{26113, 850},
{26398, 800},
{26764, 750},
{27293, 700},
{27703, 650},
{28203, 600},
{28773, 550},
{29414, 500},
{30181, 450},
{31023, 400},
{31932, 350},
{32924, 300},
{33962, 250},
{35007, 200},
{36069, 150},
{37080, 100},
{38102, 50},
{39049, 0},
{39542, -50},
{40564, -100},
{41130, -150},
{41651, -200},
};
#elif defined(CONFIG_SEC_H_PROJECT)
static sec_bat_adc_table_data_t temp_table[] = {
{25950, 900},
{26173, 850},
{26424, 800},
{26727, 750},
{27281, 700},
{27669, 650},
{28178, 600},
{28724, 550},
{29342, 500},
{30101, 450},
{30912, 400},
{31807, 350},
{32823, 300},
{33858, 250},
{34950, 200},
{36049, 150},
{37054, 100},
{38025, 50},
{38219, 40},
{38448, 30},
{38626, 20},
{38795, 10},
{38989, 0},
{39229, -10},
{39540, -30},
{39687, -40},
{39822, -50},
{40523, -100},
{41123, -150},
{41619, -200},
};
#elif defined(CONFIG_SEC_JS_PROJECT)
static sec_bat_adc_table_data_t temp_table[] = {
{25950, 900},
{26173, 850},
{26424, 800},
{26727, 750},
{27281, 700},
{27669, 650},
{28178, 600},
{28724, 550},
{29342, 500},
{30101, 450},
{30912, 400},
{31807, 350},
{32823, 300},
{33858, 250},
{34950, 200},
{36049, 150},
{37054, 100},
{38025, 50},
{38219, 40},
{38448, 30},
{38626, 20},
{38795, 10},
{38989, 0},
{39229, -10},
{39540, -30},
{39687, -40},
{39822, -50},
{40523, -100},
{41123, -150},
{41619, -200},
};
#elif defined(CONFIG_MACH_FRESCOLTESKT)||defined(CONFIG_MACH_FRESCOLTEKTT)||defined(CONFIG_MACH_FRESCOLTELGT)
static sec_bat_adc_table_data_t temp_table[] = {
{25827, 900},
{26033, 850},
{26253, 800},
{26415, 750},
{27069, 700},
{27497, 650},
{27911, 600},
{28464, 550},
{28927, 500},
{29785, 450},
{30575, 400},
{31398, 350},
{32513, 300},
{33557, 250},
{34594, 200},
{35889, 150},
{36651, 100},
{37637, 50},
{37831, 40},
{38025, 30},
{38219, 20},
{38448, 10},
{38626, 0},
{38789, -10},
{39229, -30},
{39417, -40},
{39617, -50},
{40202, -100},
{40962, -150},
{41521, -200},
};
#elif defined(CONFIG_MACH_FLTEEUR) || defined(CONFIG_MACH_FLTESKT)
static sec_bat_adc_table_data_t temp_table[] = {
{25844, 900},
{26113, 850},
{26398, 800},
{26764, 750},
{26960, 700},
{27435, 650},
{27885, 600},
{28463, 550},
{29087, 500},
{29988, 450},
{30883, 400},
{31831, 350},
{32868, 300},
{33667, 250},
{34657, 200},
{35871, 150},
{36980, 100},
{38018, 50},
{38965, 0},
{39722, -50},
{40720, -100},
{41309, -150},
{41772, -200},
};
#elif defined(CONFIG_MACH_KS01SKT) || defined(CONFIG_MACH_KS01KTT) || \
defined(CONFIG_MACH_KS01LGT) || defined(CONFIG_MACH_JACTIVESKT)
static sec_bat_adc_table_data_t temp_table[] = {
{25844, 900},
{26113, 850},
{26398, 800},
{26764, 750},
{27281, 700},
{27669, 650},
{28178, 600},
{28724, 550},
{29342, 500},
{30101, 450},
{30912, 400},
{31807, 350},
{32823, 300},
{33858, 250},
{34950, 200},
{36049, 150},
{37054, 100},
{38025, 50},
{38219, 40},
{38448, 30},
{38626, 20},
{38795, 10},
{38989, 0},
{39229, -10},
{39540, -30},
{39687, -40},
{39822, -50},
{40523, -100},
{41123, -150},
{41619, -200},
};
#elif defined(CONFIG_MACH_PICASSO_SPR)
static sec_bat_adc_table_data_t temp_table[] = {
{1100, 1140},
{1000, 1040},
{700, 940},
{645, 840},
{615, 740},
{600, 640},
{561, 601},
{560, 590},
{536, 566},
{535, 555},
{521, 541},
{520, 520},
{400, 400},
{300, 300},
{200, 200},
{100, 100},
{0, 0},
{-100, -100},
{-200, -200},
{-300, -300},
};
#elif defined(CONFIG_SEC_VIENNA_PROJECT) || defined(CONFIG_SEC_V2_PROJECT) ||\
defined(CONFIG_MACH_PICASSO_EUR) || defined(CONFIG_MACH_LT03)
static sec_bat_adc_table_data_t temp_table[] = {
{1100, 1140},
{1000, 1040},
{900, 940},
{800, 840},
{700, 740},
{600, 640},
{561, 601},
{560, 590},
{536, 566},
{535, 555},
{521, 541},
{520, 520},
{400, 400},
{300, 300},
{200, 200},
{100, 100},
{0, 0},
{-100, -100},
{-200, -200},
{-300, -300},
};
#elif defined(CONFIG_MACH_MONDRIANWIFI_USA)
static sec_bat_adc_table_data_t temp_table[] = {
{1100, 1165},
{1000, 1065},
{900, 965},
{800, 865},
{700, 795},
{616, 700},
{607, 670},
{590, 655},
{580, 640},
{574, 635},
{570, 630},
{565, 605},
{555, 600},
{550, 595},
{545, 585},
{520, 550},
{490, 510},
{470, 500},
{460, 460},
{450, 450},
{400, 400},
{300, 300},
{200, 200},
{100, 100},
{0, 0},
{-10, -10},
{-20, -25},
{-30, -38},
{-40, -52},
{-50, -65},
{-60, -78},
{-70, -90},
{-100, -150},
{-200, -250},
{-300, -350},
{-400, -450},
};
#elif defined(CONFIG_MACH_MONDRIAN)
static sec_bat_adc_table_data_t temp_table[] = {
{1100, 1165},
{1000, 1065},
{900, 965},
{800, 865},
{700, 795},
{616, 700},
{607, 670},
{590, 655},
{580, 640},
{574, 635},
{570, 630},
{565, 605},
{555, 600},
{550, 595},
{545, 585},
{540, 575},
{480, 480},
{470, 470},
{460, 460},
{450, 450},
{400, 400},
{300, 300},
{200, 200},
{100, 100},
{0, 0},
{-10, -10},
{-20, -25},
{-30, -38},
{-40, -52},
{-50, -65},
{-60, -78},
{-70, -90},
{-100, -150},
{-200, -250},
{-300, -350},
{-400, -450},
};
/* only for G870F0 */
#elif defined(CONFIG_MACH_KACTIVELTE_KOR)
static sec_bat_adc_table_data_t temp_table[] = {
{25935, 900},
{26149, 850},
{26399, 800},
{26741, 750},
{27052, 700},
{27441, 650},
{27971, 600},
{28551, 550},
{29229, 500},
{30011, 450},
{30895, 400},
{31867, 350},
{32921, 300},
{34036, 250},
{35168, 200},
{36303, 150},
{37374, 100},
{38371, 50},
{39252, 0},
{40077, -50},
{40826, -100},
{41381, -150},
{41824, -200},
};
#else
static sec_bat_adc_table_data_t temp_table[] = {
{25950, 900},
{26173, 850},
{26424, 800},
{26727, 750},
{26884, 700},
{27346, 650},
{27750, 600},
{28213, 550},
{28760, 500},
{29384, 450},
{30180, 400},
{31095, 350},
{32085, 300},
{33132, 250},
{34242, 200},
{35340, 150},
{36430, 100},
{37471, 50},
{38406, 0},
{39388, -50},
{40184, -100},
{40852, -150},
{41420, -200},
{41685, -210},
{41786, -220},
{41887, -230},
{41987, -240},
{42088, -250},
{42178, -260},
{42268, -270},
{42358, -280},
{42448, -290},
{42538, -300},
};
#endif
static sec_bat_adc_table_data_t chg_temp_table[] = {
{0, 0},
};
#if defined(CONFIG_SEC_K_PROJECT) || defined(CONFIG_SEC_KACTIVE_PROJECT) || \
defined(CONFIG_SEC_KSPORTS_PROJECT)
#define TEMP_HIGHLIMIT_THRESHOLD_EVENT 800
#define TEMP_HIGHLIMIT_RECOVERY_EVENT 750
#define TEMP_HIGHLIMIT_THRESHOLD_NORMAL 800
#define TEMP_HIGHLIMIT_RECOVERY_NORMAL 750
#define TEMP_HIGHLIMIT_THRESHOLD_LPM 800
#define TEMP_HIGHLIMIT_RECOVERY_LPM 750
#endif
#if defined(CONFIG_MACH_KLTE_TMO) || defined(CONFIG_MACH_KLTE_ATT) || \
defined(CONFIG_MACH_KLTE_CAN) || defined(CONFIG_MACH_KLTE_SPR) || \
defined(CONFIG_MACH_KLTE_MTR) || defined(CONFIG_MACH_KACTIVELTE_SKT)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 560
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 540
#define TEMP_HIGH_RECOVERY_LPM 500
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM -20
#elif defined(CONFIG_MACH_KSPORTSLTE_SPR)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 550
#define TEMP_HIGH_RECOVERY_NORMAL 470
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 500
#define TEMP_HIGH_RECOVERY_LPM 480
#define TEMP_LOW_THRESHOLD_LPM -30
#define TEMP_LOW_RECOVERY_LPM 23
#elif defined(CONFIG_MACH_KACTIVELTE_ATT)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 550
#define TEMP_HIGH_RECOVERY_NORMAL 470
#define TEMP_LOW_THRESHOLD_NORMAL -30
#define TEMP_LOW_RECOVERY_NORMAL 20
#define TEMP_HIGH_THRESHOLD_LPM 525
#define TEMP_HIGH_RECOVERY_LPM 470
#define TEMP_LOW_THRESHOLD_LPM -10
#define TEMP_LOW_RECOVERY_LPM 20
#elif defined(CONFIG_MACH_KLTE_VZW) || defined(CONFIG_MACH_KLTE_LRA)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 560
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 540
#define TEMP_HIGH_RECOVERY_LPM 500
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM -20
#elif defined (CONFIG_MACH_KLTE_ACG)
#define TEMP_HIGH_THRESHOLD_EVENT 540
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 540
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 540
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined (CONFIG_MACH_KLTE_USC)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 600
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 600
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined (CONFIG_MACH_KLTE_JPN)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 600
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 600
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_SEC_K_PROJECT) || defined(CONFIG_SEC_KACTIVE_PROJECT) || \
defined(CONFIG_SEC_LOCALE_CHN)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 600
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 600
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_HLTESKT) || defined(CONFIG_MACH_HLTEKTT) || defined(CONFIG_MACH_HLTELGT)
#define TEMP_HIGH_THRESHOLD_EVENT 680
#define TEMP_HIGH_RECOVERY_EVENT 440
#define TEMP_LOW_THRESHOLD_EVENT -45
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 680
#define TEMP_HIGH_RECOVERY_NORMAL 440
#define TEMP_LOW_THRESHOLD_NORMAL -45
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 680
#define TEMP_HIGH_RECOVERY_LPM 440
#define TEMP_LOW_THRESHOLD_LPM -45
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_FRESCOLTESKT)||defined(CONFIG_MACH_FRESCOLTEKTT)||defined(CONFIG_MACH_FRESCOLTELGT)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 600
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 600
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_HLTEATT) || defined(CONFIG_MACH_HLTETMO)
#define TEMP_HIGH_THRESHOLD_EVENT 610
#define TEMP_HIGH_RECOVERY_EVENT 400
#define TEMP_LOW_THRESHOLD_EVENT -45
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 490
#define TEMP_HIGH_RECOVERY_NORMAL 440
#define TEMP_LOW_THRESHOLD_NORMAL -45
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 490
#define TEMP_HIGH_RECOVERY_LPM 440
#define TEMP_LOW_THRESHOLD_LPM -45
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_HLTESPR)
#define TEMP_HIGH_THRESHOLD_EVENT 640
#define TEMP_HIGH_RECOVERY_EVENT 438
#define TEMP_LOW_THRESHOLD_EVENT -37
#define TEMP_LOW_RECOVERY_EVENT 11
#define TEMP_HIGH_THRESHOLD_NORMAL 529
#define TEMP_HIGH_RECOVERY_NORMAL 438
#define TEMP_LOW_THRESHOLD_NORMAL -37
#define TEMP_LOW_RECOVERY_NORMAL 11
#define TEMP_HIGH_THRESHOLD_LPM 529
#define TEMP_HIGH_RECOVERY_LPM 459
#define TEMP_LOW_THRESHOLD_LPM -23
#define TEMP_LOW_RECOVERY_LPM -10
#elif defined(CONFIG_MACH_HLTEVZW)
#define TEMP_HIGH_THRESHOLD_EVENT 650
#define TEMP_HIGH_RECOVERY_EVENT 450
#define TEMP_LOW_THRESHOLD_EVENT -45
#define TEMP_LOW_RECOVERY_EVENT -10
#define TEMP_HIGH_THRESHOLD_NORMAL 550
#define TEMP_HIGH_RECOVERY_NORMAL 450
#define TEMP_LOW_THRESHOLD_NORMAL -45
#define TEMP_LOW_RECOVERY_NORMAL -10
#define TEMP_HIGH_THRESHOLD_LPM 520
#define TEMP_HIGH_RECOVERY_LPM 470
#define TEMP_LOW_THRESHOLD_LPM -45
#define TEMP_LOW_RECOVERY_LPM -15
#elif defined(CONFIG_MACH_HLTEDCM)
#define TEMP_HIGH_THRESHOLD_EVENT 625
#define TEMP_HIGH_RECOVERY_EVENT 420
#define TEMP_LOW_THRESHOLD_EVENT -45
#define TEMP_LOW_RECOVERY_EVENT -5
#define TEMP_HIGH_THRESHOLD_NORMAL 625
#define TEMP_HIGH_RECOVERY_NORMAL 420
#define TEMP_LOW_THRESHOLD_NORMAL -45
#define TEMP_LOW_RECOVERY_NORMAL -5
#define TEMP_HIGH_THRESHOLD_LPM 625
#define TEMP_HIGH_RECOVERY_LPM 420
#define TEMP_LOW_THRESHOLD_LPM -45
#define TEMP_LOW_RECOVERY_LPM -5
#elif defined(CONFIG_MACH_HLTEKDI)
#define TEMP_HIGH_THRESHOLD_EVENT 625
#define TEMP_HIGH_RECOVERY_EVENT 420
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 625
#define TEMP_HIGH_RECOVERY_NORMAL 420
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 625
#define TEMP_HIGH_RECOVERY_LPM 420
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_HLTEUSC)
#define TEMP_HIGH_THRESHOLD_EVENT 650
#define TEMP_HIGH_RECOVERY_EVENT 440
#define TEMP_LOW_THRESHOLD_EVENT -45
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 640
#define TEMP_HIGH_RECOVERY_NORMAL 450
#define TEMP_LOW_THRESHOLD_NORMAL -45
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 650
#define TEMP_HIGH_RECOVERY_LPM 440
#define TEMP_LOW_THRESHOLD_LPM -45
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_H3GDUOS_CTC)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 600
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 600
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_HLTEAUS)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 600
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 600
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_H3G_CHN_CMCC)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -45
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 600
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -45
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 600
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -45
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_HLTEEUR)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 400
#define TEMP_LOW_THRESHOLD_EVENT -45
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 600
#define TEMP_HIGH_RECOVERY_NORMAL 400
#define TEMP_LOW_THRESHOLD_NORMAL -45
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 600
#define TEMP_HIGH_RECOVERY_LPM 400
#define TEMP_LOW_THRESHOLD_LPM -45
#define TEMP_LOW_RECOVERY_LPM 0
/* H Project*/
#elif defined(CONFIG_SEC_H_PROJECT)
#define TEMP_HIGH_THRESHOLD_EVENT 650
#define TEMP_HIGH_RECOVERY_EVENT 440
#define TEMP_LOW_THRESHOLD_EVENT -45
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 650
#define TEMP_HIGH_RECOVERY_NORMAL 440
#define TEMP_LOW_THRESHOLD_NORMAL -45
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 650
#define TEMP_HIGH_RECOVERY_LPM 440
#define TEMP_LOW_THRESHOLD_LPM -45
#define TEMP_LOW_RECOVERY_LPM 0
/* JS Project*/
#elif defined(CONFIG_SEC_JS_PROJECT)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 400
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 600
#define TEMP_HIGH_RECOVERY_NORMAL 400
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 600
#define TEMP_HIGH_RECOVERY_LPM 400
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_FLTEEUR) || defined(CONFIG_MACH_FLTESKT)
#define TEMP_HIGH_THRESHOLD_EVENT 700
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 700
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 700
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_SEC_KS01_PROJECT)
#if defined(CONFIG_MACH_KS01EUR)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 600
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 600
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_KS01SKT) || defined(CONFIG_MACH_KS01LGT)
#define TEMP_HIGH_THRESHOLD_EVENT 670
#define TEMP_HIGH_RECOVERY_EVENT 420
#define TEMP_LOW_THRESHOLD_EVENT -45
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 670
#define TEMP_HIGH_RECOVERY_NORMAL 420
#define TEMP_LOW_THRESHOLD_NORMAL -45
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 670
#define TEMP_HIGH_RECOVERY_LPM 420
#define TEMP_LOW_THRESHOLD_LPM -45
#define TEMP_LOW_RECOVERY_LPM 0
#else /* CONFIG_MACH_KS01KTT */
#define TEMP_HIGH_THRESHOLD_EVENT 670
#define TEMP_HIGH_RECOVERY_EVENT 440
#define TEMP_LOW_THRESHOLD_EVENT -45
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 670
#define TEMP_HIGH_RECOVERY_NORMAL 440
#define TEMP_LOW_THRESHOLD_NORMAL -45
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 670
#define TEMP_HIGH_RECOVERY_LPM 440
#define TEMP_LOW_THRESHOLD_LPM -45
#define TEMP_LOW_RECOVERY_LPM 0
#endif
#elif defined(CONFIG_SEC_JACTIVE_PROJECT)
#define TEMP_HIGH_THRESHOLD_EVENT 670
#define TEMP_HIGH_RECOVERY_EVENT 420
#define TEMP_LOW_THRESHOLD_EVENT -45
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 670
#define TEMP_HIGH_RECOVERY_NORMAL 420
#define TEMP_LOW_THRESHOLD_NORMAL -45
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 670
#define TEMP_HIGH_RECOVERY_LPM 420
#define TEMP_LOW_THRESHOLD_LPM -45
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_MONDRIANWIFI_USA)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 450
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 510
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 600
#define TEMP_HIGH_RECOVERY_LPM 450
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_MONDRIAN)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 600
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 600
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_VIENNAVZW)
#define TEMP_HIGH_THRESHOLD_EVENT 590
#define TEMP_HIGH_RECOVERY_EVENT 470
#define TEMP_LOW_THRESHOLD_EVENT -25
#define TEMP_LOW_RECOVERY_EVENT 15
#define TEMP_HIGH_THRESHOLD_NORMAL 530
#define TEMP_HIGH_RECOVERY_NORMAL 480
#define TEMP_LOW_THRESHOLD_NORMAL -25
#define TEMP_LOW_RECOVERY_NORMAL 15
#define TEMP_HIGH_THRESHOLD_LPM 500
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -40
#define TEMP_LOW_RECOVERY_LPM 5
#elif defined(CONFIG_MACH_VIENNAATT)
#define TEMP_HIGH_THRESHOLD_EVENT 590
#define TEMP_HIGH_RECOVERY_EVENT 470
#define TEMP_LOW_THRESHOLD_EVENT -25
#define TEMP_LOW_RECOVERY_EVENT 5
#define TEMP_HIGH_THRESHOLD_NORMAL 545
#define TEMP_HIGH_RECOVERY_NORMAL 470
#define TEMP_LOW_THRESHOLD_NORMAL -25
#define TEMP_LOW_RECOVERY_NORMAL 5
#define TEMP_HIGH_THRESHOLD_LPM 500
#define TEMP_HIGH_RECOVERY_LPM 480
#define TEMP_LOW_THRESHOLD_LPM -35
#define TEMP_LOW_RECOVERY_LPM 5
#elif defined(CONFIG_MACH_V2)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -40
#define TEMP_LOW_RECOVERY_EVENT 10
#define TEMP_HIGH_THRESHOLD_NORMAL 600
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -40
#define TEMP_LOW_RECOVERY_NORMAL 10
#define TEMP_HIGH_THRESHOLD_LPM 600
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -40
#define TEMP_LOW_RECOVERY_LPM 10
#elif defined(CONFIG_MACH_VIENNAEUR) || defined(CONFIG_MACH_VIENNAKOR)
#define TEMP_HIGH_THRESHOLD_EVENT 590
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -40
#define TEMP_LOW_RECOVERY_EVENT 10
#define TEMP_HIGH_THRESHOLD_NORMAL 590
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -40
#define TEMP_LOW_RECOVERY_NORMAL 10
#define TEMP_HIGH_THRESHOLD_LPM 590
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -40
#define TEMP_LOW_RECOVERY_LPM 10
#elif defined(CONFIG_MACH_PICASSO_SPR)
#define TEMP_HIGH_THRESHOLD_EVENT 507
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 507
#define TEMP_HIGH_RECOVERY_NORMAL 470
#define TEMP_LOW_THRESHOLD_NORMAL -33
#define TEMP_LOW_RECOVERY_NORMAL 4
#define TEMP_HIGH_THRESHOLD_LPM 490
#define TEMP_HIGH_RECOVERY_LPM 480
#define TEMP_LOW_THRESHOLD_LPM 10
#define TEMP_LOW_RECOVERY_LPM 15
#elif defined(CONFIG_MACH_PICASSO_EUR)
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 460
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 600
#define TEMP_HIGH_RECOVERY_NORMAL 460
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 600
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_LT03)
#if defined(CONFIG_MACH_LT03_VZW)
#define TEMP_HIGH_THRESHOLD_EVENT 567
#define TEMP_HIGH_RECOVERY_EVENT 480
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 530
#define TEMP_HIGH_RECOVERY_NORMAL 480
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 507
#define TEMP_HIGH_RECOVERY_LPM 480
#define TEMP_LOW_THRESHOLD_LPM -20
#define TEMP_LOW_RECOVERY_LPM 0
#elif defined(CONFIG_MACH_LT03_TMO)
#define TEMP_HIGH_THRESHOLD_EVENT 530
#define TEMP_HIGH_RECOVERY_EVENT 480
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 530
#define TEMP_HIGH_RECOVERY_NORMAL 480
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 510
#define TEMP_HIGH_RECOVERY_LPM 460
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#else
#define TEMP_HIGH_THRESHOLD_EVENT 600
#define TEMP_HIGH_RECOVERY_EVENT 400
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 600
#define TEMP_HIGH_RECOVERY_NORMAL 400
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 600
#define TEMP_HIGH_RECOVERY_LPM 400
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#endif
#else
#define TEMP_HIGH_THRESHOLD_EVENT 700
#define TEMP_HIGH_RECOVERY_EVENT 420
#define TEMP_LOW_THRESHOLD_EVENT -50
#define TEMP_LOW_RECOVERY_EVENT 0
#define TEMP_HIGH_THRESHOLD_NORMAL 700
#define TEMP_HIGH_RECOVERY_NORMAL 420
#define TEMP_LOW_THRESHOLD_NORMAL -50
#define TEMP_LOW_RECOVERY_NORMAL 0
#define TEMP_HIGH_THRESHOLD_LPM 700
#define TEMP_HIGH_RECOVERY_LPM 420
#define TEMP_LOW_THRESHOLD_LPM -50
#define TEMP_LOW_RECOVERY_LPM 0
#endif
#endif //CONFIG_BATTERY_SAMSUNG_DATA
#if defined(CONFIG_MACH_MONDRIAN)
int sec_bat_check_battery_company(void)
{
int result = BATT_TYPE_ATL;
int rc, data = -1;
struct qpnp_vadc_result results;
rc = qpnp_vadc_read(NULL, LR_MUX5_PU2_AMUX_THM2, &results);
if (rc) {
pr_err("%s: Unable to read batt id rc=%d\n",
__func__, rc);
return BATT_TYPE_ATL;
}
data = results.adc_code;
pr_info("%s: batt_id_adc = (%d)\n", __func__, data);
/* SDI: 28500, ATL: 31000 */
if (data > 31000) {
result = BATT_TYPE_ATL;
} else {
result = BATT_TYPE_SDI;
}
return result;
}
#endif
void sec_bat_check_batt_id(struct sec_battery_info *battery)
{
#if defined(CONFIG_SENSORS_QPNP_ADC_VOLTAGE)
#if defined(CONFIG_FUELGAUGE_MAX17050)
int rc, data = -1;
struct qpnp_vadc_result results;
#if defined(CONFIG_MACH_PICASSO) || defined(CONFIG_MACH_LT03) || defined(CONFIG_MACH_VIENNA)
rc = qpnp_vadc_read(NULL, LR_MUX9_PU2_AMUX_THM5, &results);
#else
rc = qpnp_vadc_read(NULL, LR_MUX5_PU2_AMUX_THM2, &results);
#endif
if (rc) {
pr_err("%s: Unable to read batt id rc=%d\n",
__func__, rc);
return;
}
data = results.adc_code;
pr_info("%s: batt_id_adc = (%d)\n", __func__, data);
#if defined(CONFIG_MACH_PICASSO) || defined(CONFIG_MACH_LT03)
/* SDI: 28000, BYD: 29000, ATL: 31000 */
if (data > 31000) { /* ATL */
battery->pdata->vendor = "ATL ATL";
samsung_battery_data[0].Capacity = 0x4074;
samsung_battery_data[0].type_str = "ATL";
} else if (data > 29000) { /* BYD */
battery->pdata->vendor = "BYD BYD";
samsung_battery_data[0].Capacity = 0x4010;
samsung_battery_data[0].type_str = "BYD";
}
#endif
#if defined(CONFIG_MACH_VIENNA) || defined(CONFIG_MACH_MONDRIAN)
/* SDI: 28500, ATL: 31000 */
if (data > 31000) {
battery->pdata->vendor = "ATL ATL";
#if defined(CONFIG_MACH_MONDRIAN)
samsung_battery_data[0].Capacity = 0x2614; /* Mondrian : 4874mAh */
#else
samsung_battery_data[0].Capacity = 0x4958; /* Vienna */
#endif
samsung_battery_data[0].type_str = "ATL";
}
#endif
pr_err("%s: batt_type(%s), batt_id(%d), cap(0x%x), type(%s)\n",
__func__, battery->pdata->vendor, data,
samsung_battery_data[0].Capacity, samsung_battery_data[0].type_str);
#endif
#endif
}
static void sec_bat_adc_ap_init(struct platform_device *pdev,
struct sec_battery_info *battery)
{
#if 0
struct power_supply *psy_fuelgauge;
struct sec_fuelgauge_info *fuelgauge;
psy_fuelgauge = get_power_supply_by_name(battery->pdata->fuelgauge_name);
if (!psy_fuelgauge) {
pr_err("%s : can't get sec-fuelgauge\n", __func__);
} else {
fuelgauge = container_of(psy_fuelgauge, struct sec_fuelgauge_info, psy_fg);
adc_client = qpnp_get_vadc(&fuelgauge->client->dev, "sec-fuelgauge");
if (IS_ERR(adc_client)) {
int rc;
rc = PTR_ERR(adc_client);
if (rc != -EPROBE_DEFER)
pr_err("%s: Fail to get vadc %d\n", __func__, rc);
}
}
#endif
#if defined(CONFIG_ARCH_MSM8974PRO)
temp_channel = LR_MUX5_PU1_AMUX_THM2;
#elif defined(CONFIG_SEC_H_PROJECT) || defined(CONFIG_SEC_JS_PROJECT) || defined(CONFIG_SEC_KS01_PROJECT) || defined(CONFIG_SEC_FRESCO_PROJECT) || defined(CONFIG_SEC_JACTIVE_PROJECT)
temp_channel = LR_MUX5_PU2_AMUX_THM2;
#else
temp_channel = LR_MUX4_PU2_AMUX_THM1;
#endif
if (battery->pdata->chg_temp_check)
chg_temp_channel = LR_MUX9_PU1_AMUX_THM5;
#if defined(CONFIG_FUELGAUGE_MAX17050)
/* battery id checking*/
sec_bat_check_batt_id(battery);
#endif
}
static int sec_bat_adc_ap_read(struct sec_battery_info *battery, int channel)
{
struct qpnp_vadc_result results;
int rc = -1;
int data = -1;
switch (channel)
{
case SEC_BAT_ADC_CHANNEL_TEMP :
rc = qpnp_vadc_read(NULL, temp_channel, &results);
if (rc) {
pr_err("%s: Unable to read batt temperature rc=%d\n",
__func__, rc);
return 0;
}
data = results.adc_code;
break;
case SEC_BAT_ADC_CHANNEL_TEMP_AMBIENT:
data = 33000;
break;
case SEC_BAT_ADC_CHANNEL_BAT_CHECK :
qpnp_vadc_read(NULL, P_MUX8_1_3, &results);
data = ((int)results.physical) / 1000;
break;
#if defined(CONFIG_FUELGAUGE_MAX17050)
case SEC_BAT_ADC_CHANNEL_INBAT_VOLTAGE:
qpnp_vadc_read(NULL, P_MUX5_1_1, &results);
/* pullup resistance: 1M, pulldown: 470k */
data = ((int)results.physical) * 1470 / 470 / 1000;
break;
#endif
case SEC_BAT_ADC_CHANNEL_CHG_TEMP:
rc = qpnp_vadc_read(NULL, chg_temp_channel, &results);
if (rc) {
pr_err("%s: Unable to read chg temperature rc=%d\n",
__func__, rc);
return 33000;
}
data = results.adc_code;
break;
default :
break;
}
pr_debug("%s: data(%d)\n", __func__, data);
return data;
}
static void sec_bat_adc_ap_exit(void)
{
}
static void sec_bat_adc_none_init(struct platform_device *pdev,
struct sec_battery_info *battery)
{
}
static int sec_bat_adc_none_read(struct sec_battery_info *battery, int channel)
{
return 0;
}
static void sec_bat_adc_none_exit(void)
{
}
static void sec_bat_adc_ic_init(struct platform_device *pdev,
struct sec_battery_info *battery)
{
}
static int sec_bat_adc_ic_read(struct sec_battery_info *battery, int channel)
{
return 0;
}
static void sec_bat_adc_ic_exit(void)
{
}
static int adc_read_type(struct sec_battery_info *battery, int channel)
{
int adc = 0;
switch (battery->pdata->temp_adc_type)
{
case SEC_BATTERY_ADC_TYPE_NONE :
adc = sec_bat_adc_none_read(battery, channel);
break;
case SEC_BATTERY_ADC_TYPE_AP :
adc = sec_bat_adc_ap_read(battery, channel);
break;
case SEC_BATTERY_ADC_TYPE_IC :
adc = sec_bat_adc_ic_read(battery, channel);
break;
case SEC_BATTERY_ADC_TYPE_NUM :
break;
default :
break;
}
pr_debug("[%s] ADC = %d\n", __func__, adc);
return adc;
}
static void adc_init_type(struct platform_device *pdev,
struct sec_battery_info *battery)
{
switch (battery->pdata->temp_adc_type)
{
case SEC_BATTERY_ADC_TYPE_NONE :
sec_bat_adc_none_init(pdev, battery);
break;
case SEC_BATTERY_ADC_TYPE_AP :
sec_bat_adc_ap_init(pdev, battery);
break;
case SEC_BATTERY_ADC_TYPE_IC :
sec_bat_adc_ic_init(pdev, battery);
break;
case SEC_BATTERY_ADC_TYPE_NUM :
break;
default :
break;
}
}
static void adc_exit_type(struct sec_battery_info *battery)
{
switch (battery->pdata->temp_adc_type)
{
case SEC_BATTERY_ADC_TYPE_NONE :
sec_bat_adc_none_exit();
break;
case SEC_BATTERY_ADC_TYPE_AP :
sec_bat_adc_ap_exit();
break;
case SEC_BATTERY_ADC_TYPE_IC :
sec_bat_adc_ic_exit();
break;
case SEC_BATTERY_ADC_TYPE_NUM :
break;
default :
break;
}
}
int adc_read(struct sec_battery_info *battery, int channel)
{
int adc = 0;
adc = adc_read_type(battery, channel);
pr_debug("[%s]adc = %d\n", __func__, adc);
return adc;
}
void adc_exit(struct sec_battery_info *battery)
{
adc_exit_type(battery);
}
bool sec_bat_check_jig_status(void)
{
#if defined(CONFIG_SEC_H_PROJECT) || defined(CONFIG_SEC_JS_PROJECT) || defined(CONFIG_SEC_F_PROJECT) || \
defined(CONFIG_SEC_KS01_PROJECT) || defined(CONFIG_MACH_MONDRIAN) || \
defined(CONFIG_SEC_K_PROJECT) || defined(CONFIG_SEC_FRESCO_PROJECT) || \
defined(CONFIG_SEC_KACTIVE_PROJECT) || defined(CONFIG_SEC_KSPORTS_PROJECT) || \
defined(CONFIG_SEC_JACTIVE_PROJECT) || defined(CONFIG_SEC_S_PROJECT) || \
defined(CONFIG_SEC_PATEK_PROJECT)
#if defined(CONFIG_EXTCON)
return get_jig_state();
#else
extern bool is_jig_attached; // from sec-switch
return is_jig_attached;
#endif
#else
if (!sec_fuelgauge) {
pr_err("%s: sec_fuelgauge is empty\n", __func__);
return false;
}
if (sec_fuelgauge->pdata->jig_irq >= 0) {
if (gpio_get_value_cansleep(sec_fuelgauge->pdata->jig_irq))
return true;
else
return false;
} else {
pr_err("%s: jig_irq is invalid\n", __func__);
return false;
}
#endif
}
/* callback for battery check
* return : bool
* true - battery detected, false battery NOT detected
*/
bool sec_bat_check_callback(struct sec_battery_info *battery)
{
struct power_supply *psy;
union power_supply_propval value;
pr_info("%s: battery->pdata->bat_irq_gpio(%d)\n",
__func__, battery->pdata->bat_irq_gpio);
psy = get_power_supply_by_name(("sec-charger"));
if (!psy) {
pr_err("%s: Fail to get psy (%s)\n",
__func__, "sec-charger");
value.intval = 1;
} else {
if (battery->pdata->bat_irq_gpio > 0) {
value.intval = !gpio_get_value(battery->pdata->bat_irq_gpio);
pr_info("%s: Battery status(%d)\n",
__func__, value.intval);
if (value.intval == 0) {
return value.intval;
}
#if defined(CONFIG_MACH_HLTEATT) || defined(CONFIG_MACH_HLTESPR) || \
defined(CONFIG_MACH_HLTEVZW) || defined(CONFIG_MACH_HLTETMO) || \
defined(CONFIG_MACH_HLTEUSC)
{
int data, ret;
struct qpnp_vadc_result result;
struct qpnp_pin_cfg adc_param = {
.mode = 4,
.ain_route = 3,
.src_sel = 0,
.master_en =1,
};
struct qpnp_pin_cfg int_param = {
.mode = 0,
.vin_sel = 2,
.src_sel = 0,
.master_en =1,
};
ret = qpnp_pin_config(battery->pdata->bat_irq_gpio, &adc_param);
if (ret < 0)
pr_info("%s: qpnp config error: %d\n",
__func__, ret);
/* check the adc from vf pin */
qpnp_vadc_read(NULL, P_MUX8_1_3, &result);
data = ((int)result.physical) / 1000;
pr_info("%s: (%dmV) is connected.\n",
__func__, data);
if(data < SHORT_BATTERY_STANDARD) {
pr_info("%s: Short Battery(%dmV) is connected.\n",
__func__, data);
value.intval = 0;
}
ret = qpnp_pin_config(battery->pdata->bat_irq_gpio, &int_param);
if (ret < 0)
pr_info("%s: qpnp config error int: %d\n",
__func__, ret);
}
#endif
} else {
int ret;
ret = psy->get_property(psy, POWER_SUPPLY_PROP_PRESENT, &(value));
if (ret < 0) {
pr_err("%s: Fail to sec-charger get_property (%d=>%d)\n",
__func__, POWER_SUPPLY_PROP_PRESENT, ret);
value.intval = 1;
}
}
}
return value.intval;
}
void sec_bat_check_cable_result_callback(struct device *dev,
int cable_type)
{
#if defined(CONFIG_SEC_H_PROJECT) || defined(CONFIG_SEC_JS_PROJECT) || defined(CONFIG_SEC_FRESCO_PROJECT)
struct regulator *ldo11;
current_cable_type = cable_type;
if (current_cable_type == POWER_SUPPLY_TYPE_BATTERY)
{
pr_info("%s set ldo off\n", __func__);
ldo11 = regulator_get(NULL, "8941_l11");
if(ldo11 > 0)
{
regulator_disable(ldo11);
}
}
else
{
pr_info("%s set ldo on\n", __func__);
ldo11 = regulator_get(NULL, "8941_l11");
if(ldo11 > 0)
{
regulator_enable(ldo11);
}
}
#elif defined(CONFIG_SEC_K_PROJECT) || defined(CONFIG_SEC_KACTIVE_PROJECT) || \
defined(CONFIG_SEC_KSPORTS_PROJECT) || defined(CONFIG_SEC_S_PROJECT)
struct regulator *max77826_ldo6;
current_cable_type = cable_type;
if (current_cable_type == POWER_SUPPLY_TYPE_BATTERY)
{
pr_info("%s set ldo off\n", __func__);
max77826_ldo6 = regulator_get(NULL, "max77826_ldo6");
if(max77826_ldo6) {
regulator_disable(max77826_ldo6);
regulator_put(max77826_ldo6);
}
}
else
{
pr_info("%s set ldo on\n", __func__);
max77826_ldo6 = regulator_get(NULL, "max77826_ldo6");
if(max77826_ldo6) {
regulator_enable(max77826_ldo6);
regulator_put(max77826_ldo6);
}
}
#elif defined(CONFIG_SEC_PATEK_PROJECT)
struct regulator *vreg_lvs3;
current_cable_type = cable_type;
if (current_cable_type == POWER_SUPPLY_TYPE_BATTERY)
{
pr_info("%s set lvs3 off\n", __func__);
vreg_lvs3 = regulator_get(NULL, "8084_lvs3");
if (!IS_ERR(vreg_lvs3))
{
if (regulator_disable(vreg_lvs3))
pr_err("%s: error for disabling regulator VF_1P8\n", __func__);
regulator_put(vreg_lvs3);
}
}
else
{
pr_info("%s set lvs3 on\n", __func__);
vreg_lvs3 = regulator_get(NULL, "8084_lvs3");
if (!IS_ERR(vreg_lvs3))
{
if (regulator_enable(vreg_lvs3))
pr_err("%s: error for enabling regulator VF_1P8\n", __func__);
regulator_put(vreg_lvs3);
}
}
#endif
}
int sec_bat_check_cable_callback(struct sec_battery_info *battery)
{
union power_supply_propval value;
#ifdef CONFIG_USB_SWITCH_FSA9485
bool ta_status;
ta_status = gpio_get_value_cansleep(battery->pdata->ta_irq_gpio) ? false : true;
fsa9485_mmdock_vbus_check(ta_status);
#endif
if (battery->pdata->ta_irq_gpio == 0) {
pr_err("%s: ta_int_gpio is 0 or not assigned yet(cable_type(%d))\n",
__func__, current_cable_type);
} else {
if (battery->wire_status == POWER_SUPPLY_TYPE_BATTERY &&
#if defined(CONFIG_SEC_LT03_PROJECT)
!battery->ps_enable &&
#endif
!gpio_get_value_cansleep(battery->pdata->ta_irq_gpio)) {
pr_info("%s : VBUS IN\n", __func__);
value.intval = POWER_SUPPLY_TYPE_UARTOFF;
psy_do_property("battery", set, POWER_SUPPLY_PROP_ONLINE, value);
current_cable_type = POWER_SUPPLY_TYPE_UARTOFF;
return POWER_SUPPLY_TYPE_UARTOFF;
}
if ((battery->wire_status == POWER_SUPPLY_TYPE_UARTOFF ||
battery->wire_status == POWER_SUPPLY_TYPE_CARDOCK) &&
gpio_get_value_cansleep(battery->pdata->ta_irq_gpio)) {
pr_info("%s : VBUS OUT\n", __func__);
value.intval = POWER_SUPPLY_TYPE_BATTERY;
psy_do_property("battery", set, POWER_SUPPLY_PROP_ONLINE, value);
current_cable_type = POWER_SUPPLY_TYPE_BATTERY;
return POWER_SUPPLY_TYPE_BATTERY;
}
}
return current_cable_type;
}
void board_battery_init(struct platform_device *pdev, struct sec_battery_info *battery)
{
if ((!battery->pdata->temp_adc_table) &&
(battery->pdata->thermal_source == SEC_BATTERY_THERMAL_SOURCE_ADC)) {
pr_info("%s : assign temp adc table\n", __func__);
battery->pdata->temp_adc_table = temp_table;
battery->pdata->temp_amb_adc_table = temp_table;
battery->pdata->temp_adc_table_size = sizeof(temp_table)/sizeof(sec_bat_adc_table_data_t);
battery->pdata->temp_amb_adc_table_size = sizeof(temp_table)/sizeof(sec_bat_adc_table_data_t);
}
if ((!battery->pdata->chg_temp_adc_table) &&
(battery->pdata->chg_temp_check)) {
pr_info("%s : assign chg temp adc table\n", __func__);
battery->pdata->chg_temp_adc_table = chg_temp_table;
battery->pdata->chg_temp_adc_table_size = sizeof(chg_temp_table)/sizeof(sec_bat_adc_table_data_t);
}
battery->pdata->event_check = true;
#if defined(CONFIG_SEC_K_PROJECT) || defined(CONFIG_SEC_KACTIVE_PROJECT) || \
defined(CONFIG_SEC_KSPORTS_PROJECT) || defined(CONFIG_SEC_S_PROJECT) || \
defined(CONFIG_SEC_PATEK_PROJECT)
battery->pdata->temp_highlimit_threshold_event = TEMP_HIGHLIMIT_THRESHOLD_EVENT;
battery->pdata->temp_highlimit_recovery_event = TEMP_HIGHLIMIT_RECOVERY_EVENT;
battery->pdata->temp_highlimit_threshold_normal = TEMP_HIGHLIMIT_THRESHOLD_NORMAL;
battery->pdata->temp_highlimit_recovery_normal = TEMP_HIGHLIMIT_RECOVERY_NORMAL;
battery->pdata->temp_highlimit_threshold_lpm = TEMP_HIGHLIMIT_THRESHOLD_LPM;
battery->pdata->temp_highlimit_recovery_lpm = TEMP_HIGHLIMIT_RECOVERY_LPM;
#endif
battery->pdata->temp_high_threshold_event = TEMP_HIGH_THRESHOLD_EVENT;
battery->pdata->temp_high_recovery_event = TEMP_HIGH_RECOVERY_EVENT;
battery->pdata->temp_low_threshold_event = TEMP_LOW_THRESHOLD_EVENT;
battery->pdata->temp_low_recovery_event = TEMP_LOW_RECOVERY_EVENT;
battery->pdata->temp_high_threshold_normal = TEMP_HIGH_THRESHOLD_NORMAL;
battery->pdata->temp_high_recovery_normal = TEMP_HIGH_RECOVERY_NORMAL;
battery->pdata->temp_low_threshold_normal = TEMP_LOW_THRESHOLD_NORMAL;
battery->pdata->temp_low_recovery_normal = TEMP_LOW_RECOVERY_NORMAL;
battery->pdata->temp_high_threshold_lpm = TEMP_HIGH_THRESHOLD_LPM;
battery->pdata->temp_high_recovery_lpm = TEMP_HIGH_RECOVERY_LPM;
battery->pdata->temp_low_threshold_lpm = TEMP_LOW_THRESHOLD_LPM;
battery->pdata->temp_low_recovery_lpm = TEMP_LOW_RECOVERY_LPM;
#if defined(CONFIG_MACH_KLTE_ATT) || defined(CONFIG_MACH_KLTE_TMO) || \
defined(CONFIG_MACH_KLTE_SPR) || defined(CONFIG_MACH_KLTE_VZW) || \
defined(CONFIG_MACH_KLTE_MTR) || defined(CONFIG_MACH_KSPORTSLTE_SPR) || \
defined(CONFIG_MACH_KLTE_USC) || defined(CONFIG_MACH_KACTIVELTE_ATT) || \
defined(CONFIG_MACH_KLTE_ACG) || defined(CONFIG_MACH_KLTE_LRA) || \
defined(CONFIG_MACH_KACTIVELTE_SKT) || defined(CONFIG_SEC_S_PROJECT)
battery->pdata->check_adc_max = 1110;
battery->pdata->check_adc_min = 150;
#endif
#if defined(CONFIG_BATTERY_SWELLING)
battery->pdata->swelling_high_temp_block = BATT_SWELLING_HIGH_TEMP_BLOCK;
battery->pdata->swelling_high_temp_recov = BATT_SWELLING_HIGH_TEMP_RECOV;
battery->pdata->swelling_low_temp_blck = BATT_SWELLING_LOW_TEMP_BLOCK;
battery->pdata->swelling_low_temp_recov = BATT_SWELLING_LOW_TEMP_RECOV;
battery->pdata->swelling_rechg_voltage = BATT_SWELLING_RECHG_VOLTAGE;
battery->pdata->swelling_block_time = BATT_SWELLING_BLOCK_TIME;
#endif
adc_init_type(pdev, battery);
}
#if defined(CONFIG_FUELGAUGE_MAX77823)
void board_fuelgauge_init(struct max77823_fuelgauge_data *fuelgauge)
{
sec_fuelgauge = 0;
if (!fuelgauge->pdata->battery_data) {
pr_info("%s : assign battery data\n", __func__);
fuelgauge->pdata->battery_data = (void *)samsung_battery_data;
}
}
#else
void board_fuelgauge_init(struct sec_fuelgauge_info *fuelgauge)
{
sec_fuelgauge = fuelgauge;
if (!fuelgauge->pdata->battery_data) {
pr_info("%s : assign battery data\n", __func__);
fuelgauge->pdata->battery_data = (void *)samsung_battery_data;
}
fuelgauge->pdata->capacity_max = CAPACITY_MAX;
fuelgauge->pdata->capacity_max_margin = CAPACITY_MAX_MARGIN;
fuelgauge->pdata->capacity_min = CAPACITY_MIN;
#if defined(CONFIG_SEC_VIENNA_PROJECT) || defined(CONFIG_SEC_V2_PROJECT) ||\
defined(CONFIG_MACH_PICASSO_LTE) || defined(CONFIG_MACH_MONDRIAN) || defined(CONFIG_MACH_LT03) ||\
defined(CONFIG_MACH_KLIMT) || defined(CONFIG_MACH_CHAGALL)
fuelgauge->pdata->temp_adc_table = temp_table;
fuelgauge->pdata->temp_adc_table_size = sizeof(temp_table)/sizeof(sec_bat_adc_table_data_t);
#endif
#if defined(CONFIG_FUELGAUGE_MAX17048)
pr_info("%s: RCOMP0: 0x%x, RCOMP_charging: 0x%x, "
"temp_cohot: %d, temp_cocold: %d, "
"is_using_model_data: %d, type_str: %s, "
"capacity_max: %d, capacity_max_margin: %d, "
"capacity_min: %d, \n", __func__ ,
get_battery_data(fuelgauge).RCOMP0,
get_battery_data(fuelgauge).RCOMP_charging,
get_battery_data(fuelgauge).temp_cohot,
get_battery_data(fuelgauge).temp_cocold,
get_battery_data(fuelgauge).is_using_model_data,
get_battery_data(fuelgauge).type_str,
fuelgauge->pdata->capacity_max,
fuelgauge->pdata->capacity_max_margin,
fuelgauge->pdata->capacity_min
);
#endif
}
#endif
void cable_initial_check(struct sec_battery_info *battery)
{
union power_supply_propval value;
pr_info("%s : current_cable_type : (%d)\n", __func__, current_cable_type);
if (POWER_SUPPLY_TYPE_BATTERY != current_cable_type) {
if (current_cable_type == POWER_SUPPLY_TYPE_POWER_SHARING) {
value.intval = current_cable_type;
psy_do_property("ps", set,
POWER_SUPPLY_PROP_ONLINE, value);
} else {
value.intval = current_cable_type;
psy_do_property("battery", set,
POWER_SUPPLY_PROP_ONLINE, value);
}
} else {
psy_do_property(battery->pdata->charger_name, get,
POWER_SUPPLY_PROP_ONLINE, value);
if (value.intval == POWER_SUPPLY_TYPE_WIRELESS) {
value.intval = 1;
psy_do_property("wireless", set,
POWER_SUPPLY_PROP_ONLINE, value);
}
if (battery->pdata->ta_irq_gpio == 0) {
pr_err("%s: ta_int_gpio is 0 or not assigned yet(cable_type(%d))\n",
__func__, current_cable_type);
} else {
if (battery->wire_status == POWER_SUPPLY_TYPE_BATTERY &&
!gpio_get_value_cansleep(battery->pdata->ta_irq_gpio)) {
#if defined(CONFIG_USB_SWITCH_FSA9485)
if (!mhl_connection_state()) {
#endif
pr_info("%s : VBUS IN\n", __func__);
value.intval = POWER_SUPPLY_TYPE_UARTOFF;
psy_do_property("battery", set, POWER_SUPPLY_PROP_ONLINE, value);
current_cable_type = POWER_SUPPLY_TYPE_UARTOFF;
#if defined(CONFIG_USB_SWITCH_FSA9485)
}
#endif
}
if ((battery->wire_status == POWER_SUPPLY_TYPE_UARTOFF ||
battery->wire_status == POWER_SUPPLY_TYPE_CARDOCK) &&
gpio_get_value_cansleep(battery->pdata->ta_irq_gpio)) {
pr_info("%s : VBUS OUT\n", __func__);
value.intval = POWER_SUPPLY_TYPE_BATTERY;
psy_do_property("battery", set, POWER_SUPPLY_PROP_ONLINE, value);
current_cable_type = POWER_SUPPLY_TYPE_BATTERY;
}
}
}
}