mt_battery_common.h 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. #ifndef BATTERY_COMMON_H
  2. #define BATTERY_COMMON_H
  3. #include <linux/ioctl.h>
  4. #include <linux/types.h>
  5. #include "mt_charging.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. /*****************************************************************************
  17. * BATTERY TIMER
  18. ****************************************************************************/
  19. #define MAX_CHARGING_TIME (12*60*60) /* 12hr */
  20. #define MAX_POSTFULL_SAFETY_TIME (1*30*60) /* 30mins */
  21. #define MAX_PreCC_CHARGING_TIME (1*30*60) /* 0.5hr */
  22. #define MAX_CV_CHARGING_TIME (3*60*60) /* 3hr */
  23. #define MUTEX_TIMEOUT 5000
  24. #define BAT_TASK_PERIOD 10 /* 10sec */
  25. #define g_free_bat_temp 1000 /* 1 s */
  26. /*****************************************************************************
  27. * BATTERY Protection
  28. ****************************************************************************/
  29. #define Battery_Percent_100 100
  30. #define charger_OVER_VOL 1
  31. #define BATTERY_UNDER_VOL 2
  32. #define BATTERY_OVER_TEMP 3
  33. #define ADC_SAMPLE_TIMES 5
  34. /*****************************************************************************
  35. * Pulse Charging State
  36. ****************************************************************************/
  37. #define CHR_PRE 0x1000
  38. #define CHR_CC 0x1001
  39. #define CHR_TOP_OFF 0x1002
  40. #define CHR_POST_FULL 0x1003
  41. #define CHR_BATFULL 0x1004
  42. #define CHR_ERROR 0x1005
  43. #define CHR_HOLD 0x1006
  44. #define CHR_CMD_HOLD 0x1007
  45. /*****************************************************************************
  46. * Call State
  47. ****************************************************************************/
  48. #define CALL_IDLE 0
  49. #define CALL_ACTIVE 1
  50. /*****************************************************************************
  51. * Enum
  52. ****************************************************************************/
  53. enum PMU_STATUS {
  54. PMU_STATUS_OK = 0,
  55. PMU_STATUS_FAIL = 1,
  56. };
  57. enum temp_state_enum {
  58. TEMP_BELOW_NEG_10 = 0,
  59. TEMP_NEG_10_TO_POS_0,
  60. TEMP_POS_0_TO_POS_10,
  61. TEMP_POS_10_TO_POS_45,
  62. TEMP_POS_45_TO_POS_60,
  63. TEMP_ABOVE_POS_60
  64. };
  65. /*****************************************************************************
  66. * structure
  67. ****************************************************************************/
  68. struct PMU_ChargerStruct {
  69. bool bat_exist;
  70. bool bat_full;
  71. s32 bat_charging_state;
  72. u32 bat_vol;
  73. bool bat_in_recharging_state;
  74. u32 Vsense;
  75. bool charger_exist;
  76. u32 charger_vol;
  77. s32 charger_protect_status;
  78. s32 ICharging;
  79. s32 IBattery;
  80. s32 temperature;
  81. s32 temperatureR;
  82. s32 temperatureV;
  83. u32 total_charging_time;
  84. u32 PRE_charging_time;
  85. u32 CC_charging_time;
  86. u32 TOPOFF_charging_time;
  87. u32 POSTFULL_charging_time;
  88. u32 charger_type;
  89. s32 SOC;
  90. s32 UI_SOC;
  91. u32 nPercent_ZCV;
  92. u32 nPrecent_UI_SOC_check_point;
  93. u32 ZCV;
  94. };
  95. struct mt_battery_charging_custom_data;
  96. struct battery_common_data {
  97. int irq;
  98. bool common_init_done:1;
  99. bool init_done:1;
  100. bool down:1;
  101. bool usb_host_mode:1;
  102. CHARGING_CONTROL charger;
  103. };
  104. /*****************************************************************************
  105. * Extern Variable
  106. ****************************************************************************/
  107. extern struct battery_common_data g_bat;
  108. extern struct PMU_ChargerStruct BMT_status;
  109. extern bool g_ftm_battery_flag;
  110. extern int charging_level_data[1];
  111. extern bool g_call_state;
  112. extern bool g_cmd_hold_charging;
  113. extern bool g_charging_full_reset_bat_meter;
  114. extern struct mt_battery_charging_custom_data *p_bat_charging_data;
  115. extern int g_platform_boot_mode;
  116. extern s32 g_custom_charging_current;
  117. #if defined(CONFIG_MTK_JEITA_STANDARD_SUPPORT)
  118. extern int g_temp_status;
  119. #endif
  120. extern bool g_bat_init_flag;
  121. #if defined(CONFIG_MTK_PUMP_EXPRESS_PLUS_SUPPORT)
  122. extern struct wake_lock TA_charger_suspend_lock;
  123. extern bool ta_check_chr_type;
  124. extern bool ta_cable_out_occur;
  125. extern bool is_ta_connect;
  126. extern bool ta_vchr_tuning;
  127. extern int ta_v_chr_org;
  128. #endif
  129. static inline int get_bat_average_voltage(void)
  130. {
  131. return BMT_status.bat_vol;
  132. }
  133. static inline void bat_charger_init(struct mt_battery_charging_custom_data *pdata)
  134. {
  135. if (g_bat.charger)
  136. g_bat.charger(CHARGING_CMD_INIT, pdata);
  137. }
  138. static inline void bat_charger_set_cv_voltage(int cv_voltage)
  139. {
  140. if (g_bat.charger)
  141. g_bat.charger(CHARGING_CMD_SET_CV_VOLTAGE, &cv_voltage);
  142. }
  143. static inline void bat_charger_enable(bool enable)
  144. {
  145. u32 charging_enable = enable;
  146. if (g_bat.charger)
  147. g_bat.charger(CHARGING_CMD_ENABLE, &charging_enable);
  148. }
  149. static inline void bat_charger_enable_power_path(bool enable)
  150. {
  151. u32 charging_enable = enable;
  152. if (g_bat.charger)
  153. g_bat.charger(CHARGING_CMD_ENABLE_POWERPATH, &charging_enable);
  154. }
  155. static inline bool bat_charger_is_pcm_timer_trigger(void)
  156. {
  157. bool is_pcm_timer_trigger = false;
  158. if (g_bat.charger)
  159. g_bat.charger(CHARGING_CMD_GET_IS_PCM_TIMER_TRIGGER, &is_pcm_timer_trigger);
  160. return is_pcm_timer_trigger != 0;
  161. }
  162. static inline void bat_charger_reset_watchdog_timer(void)
  163. {
  164. if (g_bat.charger)
  165. g_bat.charger(CHARGING_CMD_RESET_WATCH_DOG_TIMER, NULL);
  166. }
  167. static inline void bat_charger_dump_register(void)
  168. {
  169. if (g_bat.charger)
  170. g_bat.charger(CHARGING_CMD_DUMP_REGISTER, NULL);
  171. }
  172. static inline int bat_charger_get_platform_boot_mode(void)
  173. {
  174. int val = 0;
  175. if (g_bat.charger)
  176. g_bat.charger(CHARGING_CMD_GET_PLATFORM_BOOT_MODE, &val);
  177. return val;
  178. }
  179. static inline int bat_charger_get_charger_type(void)
  180. {
  181. int chr_type = CHARGER_UNKNOWN;
  182. if (g_bat.charger)
  183. g_bat.charger(CHARGING_CMD_GET_CHARGER_TYPE, &chr_type);
  184. #if defined(CONFIG_POWER_EXT) && defined(NO_EXTERNAL_CHARGER)
  185. chr_type = STANDARD_HOST;
  186. #endif
  187. return chr_type;
  188. }
  189. static inline void bat_charger_set_platform_reset(void)
  190. {
  191. if (g_bat.charger)
  192. g_bat.charger(CHARGING_CMD_SET_PLATFORM_RESET, NULL);
  193. }
  194. static inline int bat_charger_get_battery_status(void)
  195. {
  196. int battery_status = 0;
  197. if (g_bat.charger)
  198. g_bat.charger(CHARGING_CMD_GET_BATTERY_STATUS, &battery_status);
  199. return battery_status;
  200. }
  201. static inline void bat_charger_set_hv_threshold(u32 hv_voltage)
  202. {
  203. if (g_bat.charger)
  204. g_bat.charger(CHARGING_CMD_SET_HV_THRESHOLD, &hv_voltage);
  205. }
  206. static inline bool bat_charger_get_hv_status(void)
  207. {
  208. bool hv_status = 0;
  209. if (g_bat.charger)
  210. g_bat.charger(CHARGING_CMD_GET_HV_STATUS, &hv_status);
  211. return hv_status != 0;
  212. }
  213. static inline int bat_charger_get_charging_current(void)
  214. {
  215. int charging_current = 0;
  216. if (g_bat.charger)
  217. g_bat.charger(CHARGING_CMD_GET_CURRENT, &charging_current);
  218. return charging_current;
  219. }
  220. static inline int bat_charger_get_input_current(void)
  221. {
  222. int input_current = 0;
  223. if (g_bat.charger)
  224. g_bat.charger(CHARGING_CMD_GET_INPUT_CURRENT, &input_current);
  225. return input_current;
  226. }
  227. static inline bool bat_charger_get_detect_status(void)
  228. {
  229. bool chr_status = false;
  230. if (g_bat.charger)
  231. g_bat.charger(CHARGING_CMD_GET_CHARGER_DET_STATUS, &chr_status);
  232. return chr_status != 0;
  233. }
  234. static inline bool bat_charger_get_charging_status(void)
  235. {
  236. u32 status = 0;
  237. if (g_bat.charger)
  238. g_bat.charger(CHARGING_CMD_GET_CHARGING_STATUS, &status);
  239. return status != 0;
  240. }
  241. static inline void bat_charger_set_input_current(int val)
  242. {
  243. if (g_bat.charger)
  244. g_bat.charger(CHARGING_CMD_SET_INPUT_CURRENT, &val);
  245. }
  246. static inline void bat_charger_set_current(int val)
  247. {
  248. if (g_bat.charger)
  249. g_bat.charger(CHARGING_CMD_SET_CURRENT, &val);
  250. }
  251. static inline void bat_charger_boost_enable(bool enable)
  252. {
  253. u32 boost_enable = enable;
  254. if (g_bat.charger)
  255. g_bat.charger(CHARGING_CMD_BOOST_ENABLE, &boost_enable);
  256. }
  257. static inline void bat_charger_set_ta_pattern(bool enable)
  258. {
  259. u32 ta_enable = enable;
  260. if (g_bat.charger)
  261. g_bat.charger(CHARGING_CMD_SET_TA_CURRENT_PATTERN, &ta_enable);
  262. }
  263. /*****************************************************************************
  264. * Extern Function
  265. ****************************************************************************/
  266. extern int read_tbat_value(void);
  267. extern bool pmic_chrdet_status(void);
  268. extern bool bat_is_charger_exist(void);
  269. extern bool bat_is_charging_full(void);
  270. extern u32 bat_get_ui_percentage(void);
  271. extern u32 get_charging_setting_current(void);
  272. extern u32 bat_is_recharging_phase(void);
  273. extern u32 set_bat_charging_current_limit(int limit);
  274. extern void mt_power_off(void);
  275. extern bool mt_usb_is_device(void);
  276. extern void mt_usb_connect(void);
  277. extern void mt_usb_disconnect(void);
  278. extern int set_rtc_spare_fg_value(int val);
  279. extern int get_rtc_spare_fg_value(void);
  280. extern bool mt_usb_is_device(void);
  281. #if defined(CONFIG_USB_MTK_HDRC) || defined(CONFIG_SSUSB_DRV)
  282. extern void mt_usb_connect(void);
  283. extern void mt_usb_disconnect(void);
  284. #else
  285. #define mt_usb_connect() do { } while (0)
  286. #define mt_usb_disconnect() do { } while (0)
  287. #endif
  288. #ifdef CONFIG_MTK_SMART_BATTERY
  289. extern void wake_up_bat(void);
  290. extern unsigned long BAT_Get_Battery_Voltage(int polling_mode);
  291. extern void mt_battery_charging_algorithm(void);
  292. #if defined(CONFIG_MTK_JEITA_STANDARD_SUPPORT)
  293. extern int do_jeita_state_machine(void);
  294. #endif
  295. #else
  296. #define wake_up_bat() do {} while (0)
  297. #define BAT_Get_Battery_Voltage(polling_mode) ({ 0; })
  298. #endif
  299. #endif /* #ifndef BATTERY_COMMON_H */