battery_meter.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. #ifndef _BATTERY_METER_H
  2. #define _BATTERY_METER_H
  3. #include <linux/platform_device.h>
  4. #include <mach/mt_battery_meter.h>
  5. #include <mt-plat/charging.h>
  6. #if 0
  7. #include <mt-plat/mt_typedefs.h>
  8. #endif
  9. /* ============================================================ */
  10. /* define */
  11. /* ============================================================ */
  12. #define FG_CURRENT_AVERAGE_SIZE 30
  13. /* ============================================================ */
  14. /* ENUM */
  15. /* ============================================================ */
  16. /* ============================================================ */
  17. /* structure */
  18. /* ============================================================ */
  19. #define FGD_NL_MSG_T_HDR_LEN 12
  20. #define FGD_NL_MSG_MAX_LEN 9200
  21. struct fgd_nl_msg_t {
  22. unsigned int fgd_cmd;
  23. unsigned int fgd_data_len;
  24. unsigned int fgd_ret_data_len;
  25. char fgd_data[FGD_NL_MSG_MAX_LEN];
  26. };
  27. enum {
  28. FG_MAIN = 1,
  29. FG_SUSPEND = 2,
  30. FG_RESUME = 4,
  31. FG_CHARGER = 8,
  32. FG_INIT = 16
  33. };
  34. enum {
  35. HW_FG,
  36. SW_FG,
  37. AUXADC
  38. };
  39. /* ============================================================ */
  40. /* typedef */
  41. /* ============================================================ */
  42. #ifndef BATTERY_BOOL
  43. #define BATTERY_BOOL
  44. typedef enum {
  45. KAL_FALSE = 0,
  46. KAL_TRUE = 1,
  47. } kal_bool;
  48. #endif
  49. #ifndef BOOL
  50. typedef unsigned char BOOL;
  51. #endif
  52. typedef struct {
  53. signed int BatteryTemp;
  54. signed int TemperatureR;
  55. } BATT_TEMPERATURE;
  56. #if !defined(CONFIG_MTK_HAFG_20)
  57. struct battery_meter_custom_data {
  58. /* mt_battery_meter.h */
  59. /* ADC resister */
  60. int r_bat_sense;
  61. int r_i_sense;
  62. int r_charger_1;
  63. int r_charger_2;
  64. int temperature_t0;
  65. int temperature_t1;
  66. int temperature_t2;
  67. int temperature_t3;
  68. int temperature_t;
  69. int fg_meter_resistance;
  70. /* Qmax for battery */
  71. int q_max_pos_50;
  72. int q_max_pos_25;
  73. int q_max_pos_0;
  74. int q_max_neg_10;
  75. int q_max_pos_50_h_current;
  76. int q_max_pos_25_h_current;
  77. int q_max_pos_0_h_current;
  78. int q_max_neg_10_h_current;
  79. int oam_d5; /* 1 : D5, 0: D2 */
  80. int change_tracking_point;
  81. int cust_tracking_point;
  82. int cust_r_sense;
  83. int cust_hw_cc;
  84. int aging_tuning_value;
  85. int cust_r_fg_offset;
  86. int ocv_board_compesate;
  87. int r_fg_board_base;
  88. int r_fg_board_slope;
  89. int car_tune_value;
  90. /* HW Fuel gague */
  91. int current_detect_r_fg;
  92. int minerroroffset;
  93. int fg_vbat_average_size;
  94. int r_fg_value;
  95. int cust_poweron_delta_capacity_tolrance;
  96. int cust_poweron_low_capacity_tolrance;
  97. int cust_poweron_max_vbat_tolrance;
  98. int cust_poweron_delta_vbat_tolrance;
  99. int cust_poweron_delta_hw_sw_ocv_capacity_tolrance;
  100. int fixed_tbat_25;
  101. int vbat_remove_detection;
  102. /* Dynamic change wake up period of battery thread when suspend */
  103. int vbat_normal_wakeup;
  104. int vbat_low_power_wakeup;
  105. int normal_wakeup_period;
  106. int low_power_wakeup_period;
  107. int close_poweroff_wakeup_period;
  108. /* mt_battery_meter.h */
  109. int bat_ntc;
  110. int rbat_pull_up_r;
  111. int rbat_pull_up_volt;
  112. };
  113. #else
  114. struct battery_meter_custom_data {
  115. /* cust_battery_meter.h */
  116. int soc_flow;
  117. int hw_fg_force_use_sw_ocv;
  118. /* ADC resister */
  119. int r_bat_sense;
  120. int r_i_sense;
  121. int r_charger_1;
  122. int r_charger_2;
  123. int temperature_t0;
  124. int temperature_t1;
  125. int temperature_t2;
  126. int temperature_t3;
  127. int temperature_t;
  128. int fg_meter_resistance;
  129. /* Qmax for battery */
  130. int q_max_pos_50;
  131. int q_max_pos_25;
  132. int q_max_pos_0;
  133. int q_max_neg_10;
  134. int q_max_pos_50_h_current;
  135. int q_max_pos_25_h_current;
  136. int q_max_pos_0_h_current;
  137. int q_max_neg_10_h_current;
  138. int oam_d5; /* 1 : D5, 0: D2 */
  139. int change_tracking_point;
  140. int cust_tracking_point;
  141. int cust_r_sense;
  142. int cust_hw_cc;
  143. int aging_tuning_value;
  144. int cust_r_fg_offset;
  145. int ocv_board_compesate;
  146. int r_fg_board_base;
  147. int r_fg_board_slope;
  148. int car_tune_value;
  149. /* HW Fuel gague */
  150. int current_detect_r_fg;
  151. int minerroroffset;
  152. int fg_vbat_average_size;
  153. int r_fg_value;
  154. int difference_hwocv_rtc;
  155. int difference_hwocv_swocv;
  156. int difference_swocv_rtc;
  157. int max_swocv;
  158. int max_hwocv;
  159. int max_vbat;
  160. int difference_hwocv_vbat;
  161. int suspend_current_threshold;
  162. int ocv_check_time;
  163. int shutdown_system_voltage;
  164. int recharge_tolerance;
  165. int fixed_tbat_25;
  166. int batterypseudo100;
  167. int batterypseudo1;
  168. /* Dynamic change wake up period of battery thread when suspend*/
  169. int vbat_normal_wakeup;
  170. int vbat_low_power_wakeup;
  171. int normal_wakeup_period;
  172. int low_power_wakeup_period;
  173. int close_poweroff_wakeup_period;
  174. int init_soc_by_sw_soc;
  175. int sync_ui_soc_imm; /*3. ui soc sync to fg soc immediately*/
  176. int mtk_enable_aging_algorithm; /*6. q_max aging algorithm*/
  177. int md_sleep_current_check; /*5. gauge adjust by ocv 9. md sleep current check*/
  178. int q_max_by_current; /*7. qmax variant by current loading.*/
  179. int q_max_sys_voltage; /*8. qmax variant by sys voltage.*/
  180. int shutdown_gauge0;
  181. int shutdown_gauge1_xmins;
  182. int shutdown_gauge1_mins;
  183. int min_charging_smooth_time;
  184. /* SW Fuel gauge */
  185. int apsleep_battery_voltage_compensate;
  186. };
  187. #endif
  188. typedef enum {
  189. FG_DAEMON_CMD_GET_INIT_FLAG,
  190. FG_DAEMON_CMD_GET_SOC,
  191. FG_DAEMON_CMD_GET_DOD0,
  192. FG_DAEMON_CMD_GET_DOD1,
  193. FG_DAEMON_CMD_GET_HW_OCV,
  194. FG_DAEMON_CMD_GET_HW_FG_INIT_CURRENT,
  195. FG_DAEMON_CMD_GET_HW_FG_CURRENT,
  196. FG_DAEMON_CMD_GET_HW_FG_INIT_CURRENT_SIGN,
  197. FG_DAEMON_CMD_GET_HW_FG_CURRENT_SIGN,
  198. FG_DAEMON_CMD_GET_HW_FG_CAR_ACT,
  199. FG_DAEMON_CMD_GET_TEMPERTURE,
  200. FG_DAEMON_CMD_DUMP_REGISTER,
  201. FG_DAEMON_CMD_CHARGING_ENABLE,
  202. FG_DAEMON_CMD_GET_BATTERY_INIT_VOLTAGE,
  203. FG_DAEMON_CMD_GET_BATTERY_VOLTAGE,
  204. FG_DAEMON_CMD_FGADC_RESET,
  205. FG_DAEMON_CMD_GET_BATTERY_PLUG_STATUS,
  206. FG_DAEMON_CMD_GET_RTC_SPARE_FG_VALUE,
  207. FG_DAEMON_CMD_IS_CHARGER_EXIST,
  208. FG_DAEMON_CMD_IS_BATTERY_FULL, /* bat_is_battery_full, */
  209. FG_DAEMON_CMD_SET_BATTERY_FULL, /* bat_set_battery_full, */
  210. FG_DAEMON_CMD_SET_RTC, /* set RTC, */
  211. FG_DAEMON_CMD_SET_POWEROFF, /* set Poweroff, */
  212. FG_DAEMON_CMD_IS_KPOC, /* is KPOC, */
  213. FG_DAEMON_CMD_GET_BOOT_REASON, /* g_boot_reason, */
  214. FG_DAEMON_CMD_GET_CHARGING_CURRENT,
  215. FG_DAEMON_CMD_GET_CHARGER_VOLTAGE,
  216. FG_DAEMON_CMD_GET_SHUTDOWN_COND,
  217. FG_DAEMON_CMD_GET_CUSTOM_SETTING,
  218. FG_DAEMON_CMD_GET_UI_SOC,
  219. FG_DAEMON_CMD_GET_CV_VALUE,
  220. FG_DAEMON_CMD_GET_DURATION_TIME,
  221. FG_DAEMON_CMD_GET_TRACKING_TIME,
  222. FG_DAEMON_CMD_GET_CURRENT_TH,
  223. FG_DAEMON_CMD_GET_CHECK_TIME,
  224. FG_DAEMON_CMD_GET_DIFFERENCE_VOLTAGE_UPDATE,
  225. FG_DAEMON_CMD_GET_AGING1_LOAD_SOC,
  226. FG_DAEMON_CMD_GET_AGING1_UPDATE_SOC,
  227. FG_DAEMON_CMD_GET_SHUTDOWN_SYSTEM_VOLTAGE,
  228. FG_DAEMON_CMD_GET_CHARGE_TRACKING_TIME,
  229. FG_DAEMON_CMD_GET_DISCHARGE_TRACKING_TIME,
  230. FG_DAEMON_CMD_GET_SHUTDOWN_GAUGE0,
  231. FG_DAEMON_CMD_GET_SHUTDOWN_GAUGE1_XMINS,
  232. FG_DAEMON_CMD_GET_SHUTDOWN_GAUGE1_MINS,
  233. FG_DAEMON_CMD_SET_SUSPEND_TIME,
  234. FG_DAEMON_CMD_SET_WAKEUP_SMOOTH_TIME,
  235. FG_DAEMON_CMD_SET_IS_CHARGING,
  236. FG_DAEMON_CMD_SET_RBAT,
  237. FG_DAEMON_CMD_SET_SWOCV,
  238. FG_DAEMON_CMD_SET_DOD0,
  239. FG_DAEMON_CMD_SET_DOD1,
  240. FG_DAEMON_CMD_SET_QMAX,
  241. FG_DAEMON_CMD_SET_SOC,
  242. FG_DAEMON_CMD_SET_UI_SOC,
  243. FG_DAEMON_CMD_SET_UI_SOC2,
  244. FG_DAEMON_CMD_SET_INIT_FLAG,
  245. FG_DAEMON_CMD_SET_DAEMON_PID,
  246. FG_DAEMON_CMD_NOTIFY_DAEMON,
  247. FG_DAEMON_CMD_CHECK_FG_DAEMON_VERSION,
  248. FG_DAEMON_CMD_SET_OAM_V_OCV,
  249. FG_DAEMON_CMD_SET_OAM_R,
  250. FG_DAEMON_CMD_GET_SUSPEND_TIME,
  251. FG_DAEMON_CMD_GET_SUSPEND_CAR,
  252. FG_DAEMON_CMD_IS_HW_OCV_UPDATE,
  253. FG_DAEMON_CMD_FROM_USER_NUMBER
  254. } FG_DAEMON_CTRL_CMD_FROM_USER;
  255. /* ============================================================ */
  256. /* External Variables */
  257. /* ============================================================ */
  258. extern struct battery_meter_custom_data batt_meter_cust_data;
  259. #if !defined(CONFIG_MTK_HAFG_20)
  260. #ifdef MTK_ENABLE_AGING_ALGORITHM
  261. extern unsigned int suspend_time;
  262. #endif
  263. #endif
  264. extern unsigned int _g_bat_sleep_total_time;
  265. #if !defined(CONFIG_MTK_HAFG_20)
  266. extern BOOL bat_spm_timeout;
  267. #else
  268. extern bool bat_spm_timeout;
  269. extern unsigned int sleep_total_time;
  270. #endif
  271. extern char *saved_command_line;
  272. extern BATTERY_VOLTAGE_ENUM cv_voltage;
  273. extern unsigned int battery_tracking_time;
  274. extern unsigned int wake_up_smooth_time;
  275. extern kal_bool g_battery_soc_ready;
  276. extern void bat_update_thread_wakeup(void);
  277. #ifdef MTK_MULTI_BAT_PROFILE_SUPPORT
  278. extern int IMM_GetOneChannelValue_Cali(int Channel, int *voltage);
  279. #endif
  280. /* ============================================================ */
  281. /* External function */
  282. /* ============================================================ */
  283. extern signed int battery_meter_get_battery_voltage(kal_bool update);
  284. extern signed int battery_meter_get_charging_current_imm(void);
  285. extern signed int battery_meter_get_charging_current(void);
  286. extern signed int battery_meter_get_battery_current(void);
  287. extern kal_bool battery_meter_get_battery_current_sign(void);
  288. extern signed int battery_meter_get_car(void);
  289. extern signed int battery_meter_get_battery_temperature(void);
  290. extern signed int battery_meter_get_charger_voltage(void);
  291. extern signed int battery_meter_get_battery_percentage(void);
  292. extern signed int battery_meter_initial(void);
  293. extern signed int battery_meter_reset(void);
  294. extern signed int battery_meter_sync(signed int bat_i_sense_offset);
  295. extern signed int battery_meter_get_battery_zcv(void);
  296. extern signed int battery_meter_get_battery_nPercent_zcv(void); /* 15% zcv, 15% can be customized */
  297. extern signed int battery_meter_get_battery_nPercent_UI_SOC(void); /* tracking point */
  298. extern signed int battery_meter_get_tempR(signed int dwVolt);
  299. extern signed int battery_meter_get_tempV(void);
  300. extern signed int battery_meter_get_VSense(void);/* isense voltage */
  301. extern int wakeup_fg_algo(int flow_state);
  302. #if defined(CUST_CAPACITY_OCV2CV_TRANSFORM)
  303. extern void battery_meter_set_reset_soc(kal_bool bUSE_UI_SOC);
  304. extern signed int battery_meter_get_battery_soc(void);
  305. #endif
  306. #ifdef MTK_MULTI_BAT_PROFILE_SUPPORT
  307. extern int IMM_GetOneChannelValue_Cali(int Channel, int *voltage);
  308. #ifdef MTK_GET_BATTERY_ID_BY_AUXADC
  309. extern unsigned int upmu_get_reg_value(unsigned int reg);
  310. extern int IMM_GetOneChannelValue(int dwChannel, int data[4], int *rawdata);
  311. extern int IMM_IsAdcInitReady(void);
  312. extern unsigned int pmic_config_interface(unsigned int RegNum, unsigned int val, unsigned int MASK, unsigned int SHIFT);
  313. extern unsigned int pmic_read_interface(unsigned int RegNum, unsigned int *val, unsigned int MASK, unsigned int SHIFT);
  314. extern unsigned int get_pmic_mt6325_cid(void);
  315. #endif
  316. #endif
  317. extern void fgauge_algo_run_get_init_data(void);
  318. extern void battery_meter_set_init_flag(kal_bool flag);
  319. extern void battery_meter_reset_sleep_time(void);
  320. extern int battery_meter_get_low_battery_interrupt_status(void);
  321. #if defined(CONFIG_MTK_HAFG_20)
  322. unsigned int get_cv_voltage(void);
  323. #endif
  324. #endif /* #ifndef _BATTERY_METER_H */