battery_meter.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  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 cust_data_size;
  117. int daemon_cmd_num;
  118. int soc_flow;
  119. int hw_fg_force_use_sw_ocv;
  120. /* ADC resister */
  121. int r_bat_sense;
  122. int r_i_sense;
  123. int r_charger_1;
  124. int r_charger_2;
  125. int temperature_t0;
  126. int temperature_t1;
  127. int temperature_t2;
  128. int temperature_t3;
  129. int temperature_t;
  130. int fg_meter_resistance;
  131. /* Qmax for battery */
  132. int q_max_pos_50;
  133. int q_max_pos_25;
  134. int q_max_pos_0;
  135. int q_max_neg_10;
  136. int q_max_pos_50_h_current;
  137. int q_max_pos_25_h_current;
  138. int q_max_pos_0_h_current;
  139. int q_max_neg_10_h_current;
  140. int oam_d5; /* 1 : D5, 0: D2 */
  141. int change_tracking_point;
  142. int cust_tracking_point;
  143. int cust_r_sense;
  144. int cust_hw_cc;
  145. int aging_tuning_value;
  146. int cust_r_fg_offset;
  147. int ocv_board_compesate;
  148. int r_fg_board_base;
  149. int r_fg_board_slope;
  150. int car_tune_value;
  151. /* HW Fuel gague */
  152. int current_detect_r_fg;
  153. int minerroroffset;
  154. int fg_vbat_average_size;
  155. int r_fg_value;
  156. int difference_hwocv_rtc;
  157. int difference_hwocv_swocv;
  158. int difference_swocv_rtc;
  159. int difference_vbat_rtc;
  160. int difference_swocv_rtc_pos;
  161. int max_swocv;
  162. int max_hwocv;
  163. int max_vbat;
  164. int difference_hwocv_vbat;
  165. int suspend_current_threshold;
  166. int ocv_check_time;
  167. int shutdown_system_voltage;
  168. int recharge_tolerance;
  169. int fixed_tbat_25;
  170. int batterypseudo100;
  171. int batterypseudo1;
  172. /* Dynamic change wake up period of battery thread when suspend*/
  173. int vbat_normal_wakeup;
  174. int vbat_low_power_wakeup;
  175. int normal_wakeup_period;
  176. int low_power_wakeup_period;
  177. int close_poweroff_wakeup_period;
  178. int init_soc_by_sw_soc;
  179. int sync_ui_soc_imm; /*3. ui soc sync to fg soc immediately*/
  180. int mtk_enable_aging_algorithm; /*6. q_max aging algorithm*/
  181. int md_sleep_current_check; /*5. gauge adjust by ocv 9. md sleep current check*/
  182. int q_max_by_current; /*7. qmax variant by current loading.*/
  183. int q_max_sys_voltage; /*8. qmax variant by sys voltage.*/
  184. int shutdown_gauge0;
  185. int shutdown_gauge1_xmins;
  186. int shutdown_gauge1_mins;
  187. int min_charging_smooth_time;
  188. int embedded_battery;
  189. /* SW Fuel gauge */
  190. int apsleep_battery_voltage_compensate;
  191. int max_smooth_time;
  192. int smooth_uisoc2;
  193. int trk_point_en;
  194. int trk_point_thr;
  195. };
  196. #endif
  197. typedef enum {
  198. FG_DAEMON_CMD_GET_INIT_FLAG,
  199. FG_DAEMON_CMD_GET_SOC,
  200. FG_DAEMON_CMD_GET_DOD0,
  201. FG_DAEMON_CMD_GET_DOD1,
  202. FG_DAEMON_CMD_GET_HW_OCV,
  203. FG_DAEMON_CMD_GET_HW_FG_INIT_CURRENT,
  204. FG_DAEMON_CMD_GET_HW_FG_CURRENT,
  205. FG_DAEMON_CMD_GET_HW_FG_INIT_CURRENT_SIGN,
  206. FG_DAEMON_CMD_GET_HW_FG_CURRENT_SIGN,
  207. FG_DAEMON_CMD_GET_HW_FG_CAR_ACT,
  208. FG_DAEMON_CMD_GET_TEMPERTURE,
  209. FG_DAEMON_CMD_DUMP_REGISTER,
  210. FG_DAEMON_CMD_CHARGING_ENABLE,
  211. FG_DAEMON_CMD_GET_BATTERY_INIT_VOLTAGE,
  212. FG_DAEMON_CMD_GET_BATTERY_VOLTAGE,
  213. FG_DAEMON_CMD_FGADC_RESET,
  214. FG_DAEMON_CMD_GET_BATTERY_PLUG_STATUS,
  215. FG_DAEMON_CMD_GET_RTC_SPARE_FG_VALUE,
  216. FG_DAEMON_CMD_IS_CHARGER_EXIST,
  217. FG_DAEMON_CMD_IS_BATTERY_FULL, /* bat_is_battery_full, */
  218. FG_DAEMON_CMD_SET_BATTERY_FULL, /* bat_set_battery_full, */
  219. FG_DAEMON_CMD_SET_RTC, /* set RTC, */
  220. FG_DAEMON_CMD_SET_POWEROFF, /* set Poweroff, */
  221. FG_DAEMON_CMD_IS_KPOC, /* is KPOC, */
  222. FG_DAEMON_CMD_GET_BOOT_REASON, /* g_boot_reason, */
  223. FG_DAEMON_CMD_GET_CHARGING_CURRENT,
  224. FG_DAEMON_CMD_GET_CHARGER_VOLTAGE,
  225. FG_DAEMON_CMD_GET_SHUTDOWN_COND,
  226. FG_DAEMON_CMD_GET_CUSTOM_SETTING,
  227. FG_DAEMON_CMD_GET_UI_SOC,
  228. FG_DAEMON_CMD_GET_CV_VALUE,
  229. FG_DAEMON_CMD_GET_DURATION_TIME,
  230. FG_DAEMON_CMD_GET_TRACKING_TIME,
  231. FG_DAEMON_CMD_GET_CURRENT_TH,
  232. FG_DAEMON_CMD_GET_CHECK_TIME,
  233. FG_DAEMON_CMD_GET_DIFFERENCE_VOLTAGE_UPDATE,
  234. FG_DAEMON_CMD_GET_AGING1_LOAD_SOC,
  235. FG_DAEMON_CMD_GET_AGING1_UPDATE_SOC,
  236. FG_DAEMON_CMD_GET_SHUTDOWN_SYSTEM_VOLTAGE,
  237. FG_DAEMON_CMD_GET_CHARGE_TRACKING_TIME,
  238. FG_DAEMON_CMD_GET_DISCHARGE_TRACKING_TIME,
  239. FG_DAEMON_CMD_GET_SHUTDOWN_GAUGE0,
  240. FG_DAEMON_CMD_GET_SHUTDOWN_GAUGE1_XMINS,
  241. FG_DAEMON_CMD_GET_SHUTDOWN_GAUGE1_MINS,
  242. FG_DAEMON_CMD_SET_SUSPEND_TIME,
  243. FG_DAEMON_CMD_SET_WAKEUP_SMOOTH_TIME,
  244. FG_DAEMON_CMD_SET_IS_CHARGING,
  245. FG_DAEMON_CMD_SET_RBAT,
  246. FG_DAEMON_CMD_SET_SWOCV,
  247. FG_DAEMON_CMD_SET_DOD0,
  248. FG_DAEMON_CMD_SET_DOD1,
  249. FG_DAEMON_CMD_SET_QMAX,
  250. FG_DAEMON_CMD_SET_SOC,
  251. FG_DAEMON_CMD_SET_UI_SOC,
  252. FG_DAEMON_CMD_SET_UI_SOC2,
  253. FG_DAEMON_CMD_SET_INIT_FLAG,
  254. FG_DAEMON_CMD_SET_DAEMON_PID,
  255. FG_DAEMON_CMD_NOTIFY_DAEMON,
  256. FG_DAEMON_CMD_CHECK_FG_DAEMON_VERSION,
  257. FG_DAEMON_CMD_SET_OAM_V_OCV,
  258. FG_DAEMON_CMD_SET_OAM_R,
  259. FG_DAEMON_CMD_GET_SUSPEND_TIME,
  260. FG_DAEMON_CMD_GET_SUSPEND_CAR,
  261. FG_DAEMON_CMD_IS_HW_OCV_UPDATE,
  262. FG_DAEMON_CMD_PRINT_LOG,
  263. FG_DAEMON_CMD_FROM_USER_NUMBER
  264. } FG_DAEMON_CTRL_CMD_FROM_USER;
  265. /* ============================================================ */
  266. /* External Variables */
  267. /* ============================================================ */
  268. extern struct battery_meter_custom_data batt_meter_cust_data;
  269. #if !defined(CONFIG_MTK_HAFG_20)
  270. #ifdef MTK_ENABLE_AGING_ALGORITHM
  271. extern unsigned int suspend_time;
  272. #endif
  273. #endif
  274. extern unsigned int _g_bat_sleep_total_time;
  275. #if !defined(CONFIG_MTK_HAFG_20)
  276. extern BOOL bat_spm_timeout;
  277. #else
  278. extern bool bat_spm_timeout;
  279. extern unsigned int sleep_total_time;
  280. #endif
  281. extern char *saved_command_line;
  282. extern BATTERY_VOLTAGE_ENUM cv_voltage;
  283. extern unsigned int battery_tracking_time;
  284. extern unsigned int wake_up_smooth_time;
  285. extern kal_bool g_battery_soc_ready;
  286. extern void bat_update_thread_wakeup(void);
  287. #ifdef MTK_MULTI_BAT_PROFILE_SUPPORT
  288. extern int IMM_GetOneChannelValue_Cali(int Channel, int *voltage);
  289. #endif
  290. /* ============================================================ */
  291. /* External function */
  292. /* ============================================================ */
  293. extern signed int battery_meter_get_battery_voltage(kal_bool update);
  294. extern signed int battery_meter_get_charging_current_imm(void);
  295. extern signed int battery_meter_get_charging_current(void);
  296. extern signed int battery_meter_get_battery_current(void);
  297. extern kal_bool battery_meter_get_battery_current_sign(void);
  298. extern signed int battery_meter_get_car(void);
  299. extern signed int battery_meter_get_battery_temperature(void);
  300. extern signed int battery_meter_get_charger_voltage(void);
  301. extern signed int battery_meter_get_battery_percentage(void);
  302. extern signed int battery_meter_initial(void);
  303. extern signed int battery_meter_reset(void);
  304. extern signed int battery_meter_sync(signed int bat_i_sense_offset);
  305. extern signed int battery_meter_get_battery_zcv(void);
  306. extern signed int battery_meter_get_battery_nPercent_zcv(void); /* 15% zcv, 15% can be customized */
  307. extern signed int battery_meter_get_battery_nPercent_UI_SOC(void); /* tracking point */
  308. extern signed int battery_meter_get_tempR(signed int dwVolt);
  309. extern signed int battery_meter_get_tempV(void);
  310. extern signed int battery_meter_get_VSense(void);/* isense voltage */
  311. extern int wakeup_fg_algo(int flow_state);
  312. #if defined(CUST_CAPACITY_OCV2CV_TRANSFORM)
  313. extern void battery_meter_set_reset_soc(kal_bool bUSE_UI_SOC);
  314. extern signed int battery_meter_get_battery_soc(void);
  315. #endif
  316. #ifdef MTK_MULTI_BAT_PROFILE_SUPPORT
  317. extern int IMM_GetOneChannelValue_Cali(int Channel, int *voltage);
  318. #ifdef MTK_GET_BATTERY_ID_BY_AUXADC
  319. extern unsigned int upmu_get_reg_value(unsigned int reg);
  320. extern int IMM_GetOneChannelValue(int dwChannel, int data[4], int *rawdata);
  321. extern int IMM_IsAdcInitReady(void);
  322. extern unsigned int pmic_config_interface(unsigned int RegNum, unsigned int val, unsigned int MASK, unsigned int SHIFT);
  323. extern unsigned int pmic_read_interface(unsigned int RegNum, unsigned int *val, unsigned int MASK, unsigned int SHIFT);
  324. extern unsigned int get_pmic_mt6325_cid(void);
  325. #endif
  326. #endif
  327. extern void fgauge_algo_run_get_init_data(void);
  328. extern void battery_meter_set_init_flag(kal_bool flag);
  329. extern void battery_meter_reset_sleep_time(void);
  330. extern int battery_meter_get_low_battery_interrupt_status(void);
  331. extern void mt_battery_set_init_vol(int);
  332. #if defined(CONFIG_MTK_HAFG_20)
  333. unsigned int get_cv_voltage(void);
  334. #endif
  335. extern void battery_meter_set_fg_int(void);
  336. #endif /* #ifndef _BATTERY_METER_H */