battery_common.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. #ifndef BATTERY_COMMON_H
  2. #define BATTERY_COMMON_H
  3. #include <linux/ioctl.h>
  4. #include <mt-plat/charging.h>
  5. #include <linux/time.h>
  6. /*****************************************************************************
  7. * BATTERY VOLTAGE
  8. ****************************************************************************/
  9. #define PRE_CHARGE_VOLTAGE (3200)
  10. #define SYSTEM_OFF_VOLTAGE (3400)
  11. #define CONSTANT_CURRENT_CHARGE_VOLTAGE (4100)
  12. #define CONSTANT_VOLTAGE_CHARGE_VOLTAGE (4200)
  13. #define CV_DROPDOWN_VOLTAGE (4000)
  14. #define CHARGER_THRESH_HOLD (4300)
  15. #define BATTERY_UVLO_VOLTAGE (2700)
  16. #ifndef SHUTDOWN_SYSTEM_VOLTAGE
  17. #define SHUTDOWN_SYSTEM_VOLTAGE (3400)
  18. #endif
  19. /*****************************************************************************
  20. * BATTERY TIMER
  21. ****************************************************************************/
  22. /* #define MAX_CHARGING_TIME 1*60*60 // 1hr */
  23. /* #define MAX_CHARGING_TIME 8*60*60 // 8hr */
  24. /* #define MAX_CHARGING_TIME 12*60*60 // 12hr */
  25. #define MAX_CHARGING_TIME (24*60*60) /* 24hr */
  26. #define MAX_POSTFULL_SAFETY_TIME (1*30*60)/* 30mins */
  27. #define MAX_PreCC_CHARGING_TIME (1*30*60)/* 0.5hr */
  28. /* #define MAX_CV_CHARGING_TIME 1*30*60 // 0.5hr */
  29. #define MAX_CV_CHARGING_TIME (3*60*60)/* 3hr */
  30. #define MUTEX_TIMEOUT (5000)
  31. #define BAT_TASK_PERIOD (10)/* 10sec */
  32. #define g_free_bat_temp (100)0 /* 1 s */
  33. /*****************************************************************************
  34. * BATTERY Protection
  35. ****************************************************************************/
  36. #define Battery_Percent_100 (100)
  37. #define charger_OVER_VOL (1)
  38. #define BATTERY_UNDER_VOL (2)
  39. #define BATTERY_OVER_TEMP (3)
  40. #define ADC_SAMPLE_TIMES (5)
  41. /*****************************************************************************
  42. * Pulse Charging State
  43. ****************************************************************************/
  44. #define CHR_PRE (0x1000)
  45. #define CHR_CC (0x1001)
  46. #define CHR_TOP_OFF (0x1002)
  47. #define CHR_POST_FULL (0x1003)
  48. #define CHR_BATFULL (0x1004)
  49. #define CHR_ERROR (0x1005)
  50. #define CHR_HOLD (0x1006)
  51. /*****************************************************************************
  52. * CallState
  53. ****************************************************************************/
  54. #define CALL_IDLE (0)
  55. #define CALL_ACTIVE (1)
  56. /*****************************************************************************
  57. * Enum
  58. ****************************************************************************/
  59. typedef unsigned int WORD;
  60. typedef enum {
  61. PMU_STATUS_OK = 0,
  62. PMU_STATUS_FAIL = 1,
  63. } PMU_STATUS;
  64. typedef enum {
  65. USB_SUSPEND = 0,
  66. USB_UNCONFIGURED,
  67. USB_CONFIGURED
  68. } usb_state_enum;
  69. typedef enum {
  70. BATTERY_AVG_CURRENT = 0,
  71. BATTERY_AVG_VOLT = 1,
  72. BATTERY_AVG_TEMP = 2,
  73. BATTERY_AVG_MAX
  74. } BATTERY_AVG_ENUM;
  75. typedef enum {
  76. BATTERY_THREAD_TIME = 0,
  77. CAR_TIME,
  78. SUSPEND_TIME,
  79. DURATION_NUM
  80. } BATTERY_TIME_ENUM;
  81. /*****************************************************************************
  82. * JEITA battery temperature standard
  83. charging info ,like temperatue, charging current, re-charging voltage, CV threshold would be reconfigurated.
  84. Temperature hysteresis default 6C.
  85. Reference table:
  86. degree AC Current USB current CV threshold Recharge Vol hysteresis condition
  87. > 60 no charging current, X X <54(Down)
  88. 45~60 600mA 450mA 4.1V 4V <39(Down) >60(Up)
  89. 10~45 600mA 450mA 4.2V 4.1V <10(Down) >45(Up)
  90. 0~10 600mA 450mA 4.1V 4V <0(Down) >16(Up)
  91. -10~0 200mA 200mA 4V 3.9V <-10(Down) >6(Up)
  92. <-10 no charging current, X X >-10(Up)
  93. ****************************************************************************/
  94. typedef enum {
  95. TEMP_BELOW_NEG_10 = 0,
  96. TEMP_NEG_10_TO_POS_0,
  97. TEMP_POS_0_TO_POS_10,
  98. TEMP_POS_10_TO_POS_45,
  99. TEMP_POS_45_TO_POS_60,
  100. TEMP_ABOVE_POS_60
  101. } temp_state_enum;
  102. #define TEMP_POS_60_THRESHOLD 50
  103. #define TEMP_POS_60_THRES_MINUS_X_DEGREE 47
  104. #define TEMP_POS_45_THRESHOLD 45
  105. #define TEMP_POS_45_THRES_MINUS_X_DEGREE 39
  106. #define TEMP_POS_10_THRESHOLD 10
  107. #define TEMP_POS_10_THRES_PLUS_X_DEGREE 16
  108. #define TEMP_POS_0_THRESHOLD 0
  109. #define TEMP_POS_0_THRES_PLUS_X_DEGREE 6
  110. #ifdef CONFIG_MTK_FAN5405_SUPPORT
  111. #define TEMP_NEG_10_THRESHOLD 0
  112. #define TEMP_NEG_10_THRES_PLUS_X_DEGREE 0
  113. #elif defined(CONFIG_MTK_BQ24158_SUPPORT)
  114. #define TEMP_NEG_10_THRESHOLD 0
  115. #define TEMP_NEG_10_THRES_PLUS_X_DEGREE 0
  116. #else
  117. #define TEMP_NEG_10_THRESHOLD 0
  118. #define TEMP_NEG_10_THRES_PLUS_X_DEGREE 0
  119. #endif
  120. /*****************************************************************************
  121. * Normal battery temperature state
  122. ****************************************************************************/
  123. typedef enum {
  124. TEMP_POS_LOW = 0,
  125. TEMP_POS_NORMAL,
  126. TEMP_POS_HIGH
  127. } batt_temp_state_enum;
  128. #ifndef BATTERY_BOOL
  129. #define BATTERY_BOOL
  130. typedef enum {
  131. KAL_FALSE = 0,
  132. KAL_TRUE = 1,
  133. } kal_bool;
  134. #endif
  135. #ifndef BOOL
  136. typedef unsigned char BOOL;
  137. #endif
  138. #ifndef FALSE
  139. #define FALSE (0)
  140. #endif
  141. #ifndef TRUE
  142. #define TRUE (1)
  143. #endif
  144. /*****************************************************************************
  145. * structure
  146. ****************************************************************************/
  147. typedef struct {
  148. kal_bool bat_exist;
  149. kal_bool bat_full;
  150. signed int bat_charging_state;
  151. unsigned int bat_vol;
  152. kal_bool bat_in_recharging_state;
  153. unsigned int Vsense;
  154. kal_bool charger_exist;
  155. unsigned int charger_vol;
  156. signed int charger_protect_status;
  157. signed int ICharging;
  158. signed int IBattery;
  159. signed int temperature;
  160. signed int temperatureR;
  161. signed int temperatureV;
  162. unsigned int total_charging_time;
  163. unsigned int PRE_charging_time;
  164. unsigned int CC_charging_time;
  165. unsigned int TOPOFF_charging_time;
  166. unsigned int POSTFULL_charging_time;
  167. unsigned int charger_type;
  168. signed int SOC;
  169. signed int UI_SOC;
  170. signed int UI_SOC2;
  171. unsigned int nPercent_ZCV;
  172. unsigned int nPrecent_UI_SOC_check_point;
  173. unsigned int ZCV;
  174. } PMU_ChargerStruct;
  175. struct battery_custom_data {
  176. /* mt_charging.h */
  177. /* stop charging while in talking mode */
  178. int stop_charging_in_takling;
  179. int talking_recharge_voltage;
  180. int talking_sync_time;
  181. /* Battery Temperature Protection */
  182. int mtk_temperature_recharge_support;
  183. int max_charge_temperature;
  184. int max_charge_temperature_minus_x_degree;
  185. int min_charge_temperature;
  186. int min_charge_temperature_plus_x_degree;
  187. int err_charge_temperature;
  188. /* Linear Charging Threshold */
  189. int v_pre2cc_thres;
  190. int v_cc2topoff_thres;
  191. int recharging_voltage;
  192. int charging_full_current;
  193. /* Charging Current Setting */
  194. int config_usb_if;
  195. int usb_charger_current_suspend;
  196. int usb_charger_current_unconfigured;
  197. int usb_charger_current_configured;
  198. int usb_charger_current;
  199. int ac_charger_input_current;
  200. int ac_charger_current;
  201. int non_std_ac_charger_current;
  202. int charging_host_charger_current;
  203. int apple_0_5a_charger_current;
  204. int apple_1_0a_charger_current;
  205. int apple_2_1a_charger_current;
  206. /* Precise Tunning
  207. int battery_average_data_number;
  208. int battery_average_size;
  209. */
  210. /* charger error check */
  211. int bat_low_temp_protect_enable;
  212. int v_charger_enable;
  213. int v_charger_max;
  214. int v_charger_min;
  215. /* Tracking TIME */
  216. int onehundred_percent_tracking_time;
  217. int npercent_tracking_time;
  218. int sync_to_real_tracking_time;
  219. int v_0percent_tracking;
  220. /* Battery Notify
  221. int battery_notify_case_0001_vcharger;
  222. int battery_notify_case_0002_vbattemp;
  223. int battery_notify_case_0003_icharging;
  224. int battery_notify_case_0004_vbat;
  225. int battery_notify_case_0005_total_chargingtime;
  226. */
  227. /* High battery support */
  228. int high_battery_voltage_support;
  229. /* JEITA parameter */
  230. int mtk_jeita_standard_support;
  231. int cust_soc_jeita_sync_time;
  232. int jeita_recharge_voltage;
  233. int jeita_temp_above_pos_60_cv_voltage;
  234. int jeita_temp_pos_45_to_pos_60_cv_voltage;
  235. int jeita_temp_pos_10_to_pos_45_cv_voltage;
  236. int jeita_temp_pos_0_to_pos_10_cv_voltage;
  237. int jeita_temp_neg_10_to_pos_0_cv_voltage;
  238. int jeita_temp_below_neg_10_cv_voltage;
  239. /* For JEITA Linear Charging only */
  240. int jeita_neg_10_to_pos_0_full_current;
  241. int jeita_temp_pos_45_to_pos_60_recharge_voltage;
  242. int jeita_temp_pos_10_to_pos_45_recharge_voltage;
  243. int jeita_temp_pos_0_to_pos_10_recharge_voltage;
  244. int jeita_temp_neg_10_to_pos_0_recharge_voltage;
  245. int jeita_temp_pos_45_to_pos_60_cc2topoff_threshold;
  246. int jeita_temp_pos_10_to_pos_45_cc2topoff_threshold;
  247. int jeita_temp_pos_0_to_pos_10_cc2topoff_threshold;
  248. int jeita_temp_neg_10_to_pos_0_cc2topoff_threshold;
  249. /* cust_pe.h */
  250. int mtk_pump_express_plus_support;
  251. int ta_start_battery_soc;
  252. int ta_stop_battery_soc;
  253. int ta_ac_12v_input_current;
  254. int ta_ac_9v_input_current;
  255. int ta_ac_7v_input_current;
  256. int ta_ac_charging_current;
  257. int ta_12v_support;
  258. int ta_9v_support;
  259. };
  260. /*****************************************************************************
  261. * Extern Variable
  262. ****************************************************************************/
  263. extern PMU_ChargerStruct BMT_status;
  264. extern struct battery_custom_data batt_cust_data;
  265. extern CHARGING_CONTROL battery_charging_control;
  266. extern kal_bool g_ftm_battery_flag;
  267. extern int charging_level_data[1];
  268. extern kal_bool g_call_state;
  269. extern kal_bool g_charging_full_reset_bat_meter;
  270. #if defined(CONFIG_MTK_PUMP_EXPRESS_SUPPORT) || defined(CONFIG_MTK_PUMP_EXPRESS_PLUS_SUPPORT)
  271. extern kal_bool ta_check_chr_type;
  272. extern kal_bool ta_cable_out_occur;
  273. extern kal_bool is_ta_connect;
  274. extern struct wake_lock TA_charger_suspend_lock;
  275. #endif
  276. /*****************************************************************************
  277. * Extern Function
  278. ****************************************************************************/
  279. extern void charging_suspend_enable(void);
  280. extern void charging_suspend_disable(void);
  281. extern kal_bool bat_is_charger_exist(void);
  282. extern kal_bool bat_is_charging_full(void);
  283. extern unsigned int bat_get_ui_percentage(void);
  284. extern unsigned int get_charging_setting_current(void);
  285. extern unsigned int bat_is_recharging_phase(void);
  286. extern void do_chrdet_int_task(void);
  287. extern void set_usb_current_unlimited(bool enable);
  288. extern bool get_usb_current_unlimited(void);
  289. extern CHARGER_TYPE mt_get_charger_type(void);
  290. #if defined(CONFIG_MTK_HAFG_20)
  291. extern struct timespec mt_battery_get_duration_time_act(BATTERY_TIME_ENUM duration_type);
  292. #endif
  293. extern unsigned int mt_battery_get_duration_time(BATTERY_TIME_ENUM duration_type);
  294. extern void mt_battery_update_time(struct timespec *pre_time, BATTERY_TIME_ENUM duration_type);
  295. extern unsigned int mt_battery_shutdown_check(void);
  296. extern unsigned char bat_is_kpoc(void);
  297. #ifdef CONFIG_MTK_SMART_BATTERY
  298. extern void wake_up_bat(void);
  299. extern void wake_up_bat2(void);
  300. extern void wake_up_bat3(void);
  301. extern unsigned long BAT_Get_Battery_Voltage(int polling_mode);
  302. extern void mt_battery_charging_algorithm(void);
  303. #if defined(CONFIG_MTK_JEITA_STANDARD_SUPPORT)
  304. extern PMU_STATUS do_jeita_state_machine(void);
  305. #endif
  306. #else
  307. #define wake_up_bat() do {} while (0)
  308. #define wake_up_bat2() do {} while (0)
  309. #define wake_up_bat3() do {} while (0)
  310. #define BAT_Get_Battery_Voltage(polling_mode) ({ 0; })
  311. #endif
  312. #ifdef CONFIG_MTK_POWER_EXT_DETECT
  313. extern kal_bool bat_is_ext_power(void);
  314. #endif
  315. extern int g_platform_boot_mode;
  316. extern bool mt_usb_is_device(void);
  317. #if defined(CONFIG_USB_MTK_HDRC) || defined(CONFIG_USB_MU3D_DRV)
  318. extern void mt_usb_connect(void);
  319. extern void mt_usb_disconnect(void);
  320. #else
  321. #define mt_usb_connect() do { } while (0)
  322. #define mt_usb_disconnect() do { } while (0)
  323. #endif
  324. void check_battery_exist(void);
  325. #ifdef DLPT_POWER_OFF_EN
  326. extern int dlpt_check_power_off(void);
  327. #endif
  328. extern kal_bool is_usb_rdy(void);
  329. extern unsigned int upmu_get_reg_value(unsigned int reg);
  330. /* usb header */
  331. extern bool mt_usb_is_device(void);
  332. #if defined(CONFIG_USB_MTK_HDRC) || defined(CONFIG_USB_MU3D_DRV)
  333. extern void mt_usb_connect(void);
  334. extern void mt_usb_disconnect(void);
  335. #else
  336. #define mt_usb_connect() do { } while (0)
  337. #define mt_usb_disconnect() do { } while (0)
  338. #endif
  339. #endif /* #ifndef BATTERY_COMMON_H */