sec_charging_common.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654
  1. /*
  2. * sec_charging_common.h
  3. * Samsung Mobile Charging Common Header
  4. *
  5. * Copyright (C) 2012 Samsung Electronics, Inc.
  6. *
  7. *
  8. * This software is licensed under the terms of the GNU General Public
  9. * License version 2, as published by the Free Software Foundation, and
  10. * may be copied, distributed, and modified under those terms.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. */
  18. #ifndef __SEC_CHARGING_COMMON_H
  19. #define __SEC_CHARGING_COMMON_H __FILE__
  20. #include <linux/module.h>
  21. #include <linux/init.h>
  22. #include <linux/platform_device.h>
  23. #include <linux/err.h>
  24. #include <linux/delay.h>
  25. #include <linux/gpio.h>
  26. #include <linux/irq.h>
  27. #include <linux/interrupt.h>
  28. #include <linux/i2c.h>
  29. #include <linux/power_supply.h>
  30. #include <linux/slab.h>
  31. #include <linux/device.h>
  32. #include <linux/pm_wakeup.h>
  33. #include <linux/battery/sec_battery_common.h>
  34. #include <dt-bindings/battery/sec-battery.h>
  35. #include "sec_battery_vote.h"
  36. #include "sec_charging_modprobe.h"
  37. /* definitions */
  38. #define SEC_BATTERY_CABLE_HV_WIRELESS_ETX 100
  39. #define SEC_BATTERY_CABLE_SILENT_TYPE 99
  40. #define WC_AUTH_MSG "@WC_AUTH "
  41. #define WC_TX_MSG "@Tx_Mode "
  42. #define MFC_LDO_ON 1
  43. #define MFC_LDO_OFF 0
  44. #define TX_ID_CHECK_CNT 3
  45. #define MISALIGN_TX_TRY_CNT 3
  46. #define WL_TO_W 99
  47. #if IS_ENABLED(CONFIG_USB_FACTORY_MODE)
  48. #define FOREACH_BOOT_MODE(GEN_BOOT_MODE) \
  49. GEN_BOOT_MODE(NO_MODE) \
  50. GEN_BOOT_MODE(OB_MODE) \
  51. GEN_BOOT_MODE(IB_MODE)
  52. #define GENERATE_BOOT_MODE_ENUM(ENUM) ENUM,
  53. #define GENERATE_BOOT_MODE_STRING(STRING) #STRING,
  54. enum BOOT_MODE_ENUM {
  55. FOREACH_BOOT_MODE(GENERATE_BOOT_MODE_ENUM)
  56. };
  57. static const char * const BOOT_MODE_STRING[] = {
  58. FOREACH_BOOT_MODE(GENERATE_BOOT_MODE_STRING)
  59. };
  60. #endif
  61. enum battery_thermal_zone {
  62. BAT_THERMAL_COLD = 0,
  63. BAT_THERMAL_COOL3,
  64. BAT_THERMAL_COOL2,
  65. BAT_THERMAL_COOL1,
  66. BAT_THERMAL_NORMAL,
  67. BAT_THERMAL_WARM,
  68. BAT_THERMAL_OVERHEAT,
  69. BAT_THERMAL_OVERHEATLIMIT,
  70. };
  71. enum sb_wireless_mode {
  72. SB_WRL_NONE = 0,
  73. SB_WRL_RX_MODE = 1,
  74. SB_WRL_TX_MODE = 2,
  75. };
  76. enum rx_device_type {
  77. NO_DEV = 0,
  78. OTHER_DEV,
  79. SS_GEAR,
  80. SS_PHONE,
  81. SS_BUDS,
  82. };
  83. enum power_supply_ext_health {
  84. POWER_SUPPLY_EXT_HEALTH_MIN = 20,
  85. POWER_SUPPLY_EXT_HEALTH_UNDERVOLTAGE = POWER_SUPPLY_EXT_HEALTH_MIN,
  86. POWER_SUPPLY_EXT_HEALTH_OVERHEATLIMIT,
  87. POWER_SUPPLY_EXT_HEALTH_VSYS_OVP,
  88. POWER_SUPPLY_EXT_HEALTH_VBAT_OVP,
  89. POWER_SUPPLY_EXT_HEALTH_DC_ERR,
  90. POWER_SUPPLY_EXT_HEALTH_MAX,
  91. };
  92. enum sec_battery_current_type {
  93. /* uA */
  94. SEC_BATTERY_CURRENT_UA = 0,
  95. /* mA */
  96. SEC_BATTERY_CURRENT_MA,
  97. };
  98. enum sec_battery_voltage_type {
  99. /* uA */
  100. SEC_BATTERY_VOLTAGE_UV = 0,
  101. /* mA */
  102. SEC_BATTERY_VOLTAGE_MV,
  103. };
  104. enum sec_battery_temp_type {
  105. /* temp */
  106. SEC_BATTERY_TEMP_TEMP = 0,
  107. /* adc */
  108. SEC_BATTERY_TEMP_ADC,
  109. };
  110. #if IS_ENABLED(CONFIG_DUAL_BATTERY)
  111. enum sec_battery_dual_mode {
  112. SEC_DUAL_BATTERY_MAIN = 0,
  113. SEC_DUAL_BATTERY_SUB,
  114. SEC_DUAL_BATTERY_TOTAL,
  115. };
  116. #endif
  117. enum sec_battery_capacity_mode {
  118. /* designed capacity */
  119. SEC_BATTERY_CAPACITY_DESIGNED = 0,
  120. /* absolute capacity by fuel gauge */
  121. SEC_BATTERY_CAPACITY_ABSOLUTE,
  122. /* temperary capacity in the time */
  123. SEC_BATTERY_CAPACITY_TEMPERARY,
  124. /* current capacity now */
  125. SEC_BATTERY_CAPACITY_CURRENT,
  126. /* cell aging information */
  127. SEC_BATTERY_CAPACITY_AGEDCELL,
  128. /* charge count */
  129. SEC_BATTERY_CAPACITY_CYCLE,
  130. /* full capacity rep */
  131. SEC_BATTERY_CAPACITY_FULL,
  132. /* QH capacity */
  133. SEC_BATTERY_CAPACITY_QH,
  134. /* vfsoc */
  135. SEC_BATTERY_CAPACITY_VFSOC,
  136. /* rcomp0 */
  137. SEC_BATTERY_CAPACITY_RC0,
  138. };
  139. enum sec_wireless_info_mode {
  140. SEC_WIRELESS_OTP_FIRM_RESULT = 0,
  141. SEC_WIRELESS_IC_REVISION,
  142. SEC_WIRELESS_IC_GRADE,
  143. SEC_WIRELESS_IC_CHIP_ID,
  144. SEC_WIRELESS_OTP_FIRM_VER_BIN,
  145. SEC_WIRELESS_OTP_FIRM_VER,
  146. SEC_WIRELESS_OTP_FIRM_VERIFY,
  147. SEC_WIRELESS_MST_SWITCH_VERIFY,
  148. };
  149. enum sec_wireless_firmware_update_mode {
  150. SEC_WIRELESS_FW_UPDATE_SDCARD_MODE = 0, /* manual update mode , firmware file must be in sdcard */
  151. SEC_WIRELESS_FW_UPDATE_BUILTIN_MODE, /* factory line update mode, MSP wirtes only this mode */
  152. SEC_WIRELESS_FW_UPDATE_AUTO_MODE, /* auto update mode, it works during kernel on, very similar to BUILTIN MODE */
  153. SEC_WIRELESS_FW_UPDATE_SPU_MODE, /* spu update mode */
  154. SEC_WIRELESS_FW_UPDATE_SPU_VERIFY_MODE, /* for automation test */
  155. };
  156. enum sec_tx_sharing_mode {
  157. SEC_TX_OFF = 0,
  158. SEC_TX_STANDBY,
  159. SEC_TX_POWER_TRANSFER,
  160. SEC_TX_ERROR,
  161. };
  162. enum sec_wireless_auth_mode {
  163. WIRELESS_AUTH_WAIT = 0,
  164. WIRELESS_AUTH_START,
  165. WIRELESS_AUTH_SENT,
  166. WIRELESS_AUTH_RECEIVED,
  167. WIRELESS_AUTH_FAIL,
  168. WIRELESS_AUTH_PASS,
  169. };
  170. enum sec_wireless_pad_id {
  171. WC_PAD_ID_UNKNOWN = 0x00,
  172. /* 0x01~1F : Single Port */
  173. WC_PAD_ID_SNGL_NOBLE = 0x10,
  174. WC_PAD_ID_SNGL_VEHICLE,
  175. WC_PAD_ID_SNGL_MINI,
  176. WC_PAD_ID_SNGL_ZERO,
  177. WC_PAD_ID_SNGL_DREAM,
  178. /* 0x20~2F : Multi Port */
  179. /* 0x30~3F : Stand Type */
  180. WC_PAD_ID_STAND_HERO = 0x30,
  181. WC_PAD_ID_STAND_DREAM,
  182. /* 0x40~4F : External Battery Pack */
  183. WC_PAD_ID_EXT_BATT_PACK = 0x40,
  184. WC_PAD_ID_EXT_BATT_PACK_TA,
  185. /* 0x50~6F : Reserved */
  186. WC_PAD_ID_UNO_TX = 0x72,
  187. WC_PAD_ID_UNO_TX_B0 = 0x80,
  188. WC_PAD_ID_UNO_TX_B1,
  189. WC_PAD_ID_UNO_TX_B2,
  190. WC_PAD_ID_UNO_TX_MAX = 0x9F,
  191. WC_PAD_ID_AUTH_PAD = 0xA0,
  192. WC_PAD_ID_DAVINCI_PAD_V,
  193. WC_PAD_ID_DAVINCI_PAD_H,
  194. WC_PAD_ID_AUTH_PAD_ACLASS_END = 0xAF,
  195. WC_PAD_ID_AUTH_PAD_END = 0xBF,
  196. /* reserved 0xA1 ~ 0xBF for auth pad */
  197. WC_PAD_ID_MAX = 0xFF,
  198. };
  199. enum sec_battery_adc_channel {
  200. SEC_BAT_ADC_CHANNEL_CABLE_CHECK = 0,
  201. SEC_BAT_ADC_CHANNEL_BATID_CHECK,
  202. SEC_BAT_ADC_CHANNEL_TEMP,
  203. SEC_BAT_ADC_CHANNEL_TEMP_AMBIENT,
  204. SEC_BAT_ADC_CHANNEL_FULL_CHECK,
  205. SEC_BAT_ADC_CHANNEL_VOLTAGE_NOW,
  206. SEC_BAT_ADC_CHANNEL_CHG_TEMP,
  207. SEC_BAT_ADC_CHANNEL_INBAT_VOLTAGE,
  208. SEC_BAT_ADC_CHANNEL_DISCHARGING_CHECK,
  209. SEC_BAT_ADC_CHANNEL_DISCHARGING_NTC,
  210. SEC_BAT_ADC_CHANNEL_WPC_TEMP,
  211. SEC_BAT_ADC_CHANNEL_SUB_CHG_TEMP,
  212. SEC_BAT_ADC_CHANNEL_USB_TEMP,
  213. SEC_BAT_ADC_CHANNEL_SUB_BAT_TEMP,
  214. SEC_BAT_ADC_CHANNEL_BLKT_TEMP,
  215. SEC_BAT_ADC_CHANNEL_NUM,
  216. };
  217. enum sec_battery_charge_mode {
  218. SEC_BAT_CHG_MODE_BUCK_OFF = 0, /* buck, chg off */
  219. SEC_BAT_CHG_MODE_CHARGING_OFF,
  220. SEC_BAT_CHG_MODE_PASS_THROUGH,
  221. SEC_BAT_CHG_MODE_CHARGING, /* buck, chg on */
  222. SEC_BAT_CHG_MODE_OTG_ON,
  223. SEC_BAT_CHG_MODE_OTG_OFF,
  224. SEC_BAT_CHG_MODE_UNO_ON,
  225. SEC_BAT_CHG_MODE_UNO_OFF,
  226. SEC_BAT_CHG_MODE_UNO_ONLY,
  227. SEC_BAT_CHG_MODE_NOT_SET,
  228. SEC_BAT_CHG_MODE_MAX,
  229. };
  230. /* charging mode */
  231. enum sec_battery_charging_mode {
  232. /* no charging */
  233. SEC_BATTERY_CHARGING_NONE = 0,
  234. /* 1st charging */
  235. SEC_BATTERY_CHARGING_1ST,
  236. /* 2nd charging */
  237. SEC_BATTERY_CHARGING_2ND,
  238. /* recharging */
  239. SEC_BATTERY_CHARGING_RECHARGING,
  240. };
  241. /* POWER_SUPPLY_EXT_PROP_MEASURE_SYS */
  242. enum sec_battery_measure_sys {
  243. SEC_BATTERY_ISYS_MA = 0,
  244. SEC_BATTERY_ISYS_UA,
  245. SEC_BATTERY_ISYS_AVG_MA,
  246. SEC_BATTERY_ISYS_AVG_UA,
  247. SEC_BATTERY_VSYS,
  248. };
  249. /* POWER_SUPPLY_EXT_PROP_MEASURE_INPUT */
  250. enum sec_battery_measure_input {
  251. SEC_BATTERY_IIN_MA = 0,
  252. SEC_BATTERY_IIN_UA,
  253. SEC_BATTERY_VBYP,
  254. SEC_BATTERY_VIN_MA,
  255. SEC_BATTERY_VIN_UA,
  256. };
  257. enum sec_battery_direct_charging_source_ctrl {
  258. SEC_TEST_MODE = 0x1,
  259. SEC_SEND_UVDM = 0x2,
  260. SEC_STORE_MODE = 0x4,
  261. };
  262. enum sec_battery_slate_mode {
  263. SEC_SLATE_OFF = 0,
  264. SEC_SLATE_MODE,
  265. SEC_SMART_SWITCH_SLATE,
  266. SEC_SMART_SWITCH_SRC,
  267. };
  268. extern const char *sb_rx_type_str(int type);
  269. extern const char *sb_vout_ctr_mode_str(int vout_mode);
  270. extern const char *sb_rx_vout_str(int vout);
  271. /* tx_event */
  272. #define BATT_TX_EVENT_WIRELESS_TX_STATUS 0x00000001
  273. #define BATT_TX_EVENT_WIRELESS_RX_CONNECT 0x00000002
  274. #define BATT_TX_EVENT_WIRELESS_TX_FOD 0x00000004
  275. #define BATT_TX_EVENT_WIRELESS_TX_HIGH_TEMP 0x00000008
  276. #define BATT_TX_EVENT_WIRELESS_RX_UNSAFE_TEMP 0x00000010
  277. #define BATT_TX_EVENT_WIRELESS_RX_CHG_SWITCH 0x00000020
  278. #define BATT_TX_EVENT_WIRELESS_RX_CS100 0x00000040
  279. #define BATT_TX_EVENT_WIRELESS_TX_OTG_ON 0x00000080
  280. #define BATT_TX_EVENT_WIRELESS_TX_LOW_TEMP 0x00000100
  281. #define BATT_TX_EVENT_WIRELESS_TX_SOC_DRAIN 0x00000200
  282. #define BATT_TX_EVENT_WIRELESS_TX_CRITICAL_EOC 0x00000400
  283. #define BATT_TX_EVENT_WIRELESS_TX_CAMERA_ON 0x00000800
  284. #define BATT_TX_EVENT_WIRELESS_TX_OCP 0x00001000
  285. #define BATT_TX_EVENT_WIRELESS_TX_MISALIGN 0x00002000
  286. #define BATT_TX_EVENT_WIRELESS_TX_ETC 0x00004000
  287. #define BATT_TX_EVENT_WIRELESS_TX_RETRY 0x00008000
  288. #define BATT_TX_EVENT_WIRELESS_TX_5V_TA 0x00010000
  289. #define BATT_TX_EVENT_WIRELESS_TX_AC_MISSING 0x00020000
  290. #define BATT_TX_EVENT_WIRELESS_ALL_MASK 0x0003ffff
  291. #define BATT_TX_EVENT_WIRELESS_TX_ERR (BATT_TX_EVENT_WIRELESS_TX_FOD | \
  292. BATT_TX_EVENT_WIRELESS_TX_HIGH_TEMP | BATT_TX_EVENT_WIRELESS_RX_UNSAFE_TEMP | \
  293. BATT_TX_EVENT_WIRELESS_RX_CHG_SWITCH | BATT_TX_EVENT_WIRELESS_RX_CS100 | \
  294. BATT_TX_EVENT_WIRELESS_TX_OTG_ON | BATT_TX_EVENT_WIRELESS_TX_LOW_TEMP | \
  295. BATT_TX_EVENT_WIRELESS_TX_SOC_DRAIN | BATT_TX_EVENT_WIRELESS_TX_CRITICAL_EOC | \
  296. BATT_TX_EVENT_WIRELESS_TX_CAMERA_ON | BATT_TX_EVENT_WIRELESS_TX_OCP | \
  297. BATT_TX_EVENT_WIRELESS_TX_MISALIGN | BATT_TX_EVENT_WIRELESS_TX_ETC | \
  298. BATT_TX_EVENT_WIRELESS_TX_5V_TA | BATT_TX_EVENT_WIRELESS_TX_AC_MISSING)
  299. #define SEC_BAT_TX_RETRY_NONE 0x0000
  300. #define SEC_BAT_TX_RETRY_MISALIGN 0x0001
  301. #define SEC_BAT_TX_RETRY_CAMERA 0x0002
  302. #define SEC_BAT_TX_RETRY_CALL 0x0004
  303. #define SEC_BAT_TX_RETRY_MIX_TEMP 0x0008
  304. #define SEC_BAT_TX_RETRY_HIGH_TEMP 0x0010
  305. #define SEC_BAT_TX_RETRY_LOW_TEMP 0x0020
  306. #define SEC_BAT_TX_RETRY_OCP 0x0040
  307. #define SEC_BAT_TX_RETRY_AC_MISSING 0x0080
  308. /* ext_event */
  309. #define BATT_EXT_EVENT_NONE 0x00000000
  310. #define BATT_EXT_EVENT_CAMERA 0x00000001
  311. #define BATT_EXT_EVENT_DEX 0x00000002
  312. #define BATT_EXT_EVENT_CALL 0x00000004
  313. #define SEC_BAT_ERROR_CAUSE_NONE 0x0000
  314. #define SEC_BAT_ERROR_CAUSE_FG_INIT_FAIL 0x0001
  315. #define SEC_BAT_ERROR_CAUSE_I2C_FAIL 0xFFFFFFFF
  316. /* monitor activation */
  317. enum sec_battery_polling_time_type {
  318. /* same order with power supply status */
  319. SEC_BATTERY_POLLING_TIME_BASIC = 0,
  320. SEC_BATTERY_POLLING_TIME_CHARGING,
  321. SEC_BATTERY_POLLING_TIME_DISCHARGING,
  322. SEC_BATTERY_POLLING_TIME_NOT_CHARGING,
  323. SEC_BATTERY_POLLING_TIME_SLEEP,
  324. };
  325. /* BATT_INBAT_VOLTAGE */
  326. enum sec_battery_fgsrc_switching {
  327. SEC_BAT_INBAT_FGSRC_SWITCHING_VBAT = 0,
  328. SEC_BAT_INBAT_FGSRC_SWITCHING_VSYS,
  329. SEC_BAT_FGSRC_SWITCHING_VBAT,
  330. SEC_BAT_FGSRC_SWITCHING_VSYS
  331. };
  332. enum ta_alert_mode {
  333. OCP_NONE = 0,
  334. OCP_DETECT,
  335. OCP_WA_ACTIVE,
  336. };
  337. enum tx_switch_mode_state {
  338. TX_SWITCH_MODE_OFF = 0,
  339. TX_SWITCH_CHG_ONLY,
  340. TX_SWITCH_UNO_ONLY,
  341. TX_SWITCH_GEAR_PPS, /* temporary mode */
  342. };
  343. enum d2d_auth_type {
  344. D2D_AUTH_NONE = 0,
  345. D2D_AUTH_SRC,
  346. D2D_AUTH_SNK,
  347. };
  348. enum d2d_mode {
  349. HP_D2D_NONE = 0,
  350. HP_D2D_ON,
  351. HP_D2D_BATT_TMP,
  352. HP_D2D_LRP_TMP,
  353. HP_D2D_OCP,
  354. HP_D2D_SOC,
  355. HP_D2D_LCD,
  356. };
  357. enum {
  358. RX_POWER_NONE,
  359. RX_POWER_5W,
  360. RX_POWER_7_5W,
  361. RX_POWER_12W,
  362. RX_POWER_15W,
  363. };
  364. enum mfc_phm_state {
  365. NONE_PHM = 0,
  366. EXIT_PHM,
  367. ENTER_PHM,
  368. FAILED_PHM,
  369. END_PHM,
  370. };
  371. /* full check condition type (can be used overlapped) */
  372. #define sec_battery_full_condition_t unsigned int
  373. /* battery check : POWER_SUPPLY_PROP_PRESENT */
  374. enum sec_battery_check {
  375. /* No Check for internal battery */
  376. SEC_BATTERY_CHECK_NONE,
  377. /* by ADC */
  378. SEC_BATTERY_CHECK_ADC,
  379. /* by callback function (battery certification by 1 wired)*/
  380. SEC_BATTERY_CHECK_CALLBACK,
  381. /* by PMIC */
  382. SEC_BATTERY_CHECK_PMIC,
  383. /* by fuel gauge */
  384. SEC_BATTERY_CHECK_FUELGAUGE,
  385. /* by charger */
  386. SEC_BATTERY_CHECK_CHARGER,
  387. /* by interrupt (use check_battery_callback() to check battery) */
  388. SEC_BATTERY_CHECK_INT,
  389. #if IS_ENABLED(CONFIG_DUAL_BATTERY)
  390. /* by dual battery */
  391. SEC_BATTERY_CHECK_DUAL_BAT_GPIO,
  392. #endif
  393. };
  394. #define sec_battery_check_t \
  395. enum sec_battery_check
  396. /* cable check (can be used overlapped) */
  397. #define sec_battery_cable_check_t unsigned int
  398. /* check cable source (can be used overlapped) */
  399. #define sec_battery_cable_source_t unsigned int
  400. /* capacity calculation type (can be used overlapped) */
  401. #define sec_fuelgauge_capacity_type_t int
  402. /* SEC_FUELGAUGE_CAPACITY_TYPE_RESET
  403. * use capacity information to reset fuel gauge
  404. * (only for driver algorithm, can NOT be set by user)
  405. */
  406. #define SEC_FUELGAUGE_CAPACITY_TYPE_RESET (-1)
  407. /* SEC_FUELGAUGE_CAPACITY_TYPE_RAW
  408. * use capacity information from fuel gauge directly
  409. */
  410. #define SEC_FUELGAUGE_CAPACITY_TYPE_RAW 0x1
  411. /* SEC_FUELGAUGE_CAPACITY_TYPE_SCALE
  412. * rescale capacity by scaling, need min and max value for scaling
  413. */
  414. #define SEC_FUELGAUGE_CAPACITY_TYPE_SCALE 0x2
  415. /* SEC_FUELGAUGE_CAPACITY_TYPE_DYNAMIC_SCALE
  416. * change only maximum capacity dynamically
  417. * to keep time for every SOC unit
  418. */
  419. #define SEC_FUELGAUGE_CAPACITY_TYPE_DYNAMIC_SCALE 0x4
  420. /* SEC_FUELGAUGE_CAPACITY_TYPE_ATOMIC
  421. * change capacity value by only -1 or +1
  422. * no sudden change of capacity
  423. */
  424. #define SEC_FUELGAUGE_CAPACITY_TYPE_ATOMIC 0x8
  425. /* SEC_FUELGAUGE_CAPACITY_TYPE_SKIP_ABNORMAL
  426. * skip current capacity value
  427. * if it is abnormal value
  428. */
  429. #define SEC_FUELGAUGE_CAPACITY_TYPE_SKIP_ABNORMAL 0x10
  430. #define SEC_FUELGAUGE_CAPACITY_TYPE_CAPACITY_POINT 0x20
  431. #define SEC_FUELGAUGE_CAPACITY_TYPE_LOST_SOC 0x40
  432. #define SEC_FUELGAUGE_CAPACITY_TYPE_REPCAP 0x80
  433. /* charger function settings (can be used overlapped) */
  434. /* SEC_CHARGER_NO_GRADUAL_CHARGING_CURRENT
  435. * disable gradual charging current setting
  436. * SUMMIT:AICL, MAXIM:regulation loop
  437. */
  438. #define SEC_CHARGER_NO_GRADUAL_CHARGING_CURRENT 1
  439. /* SEC_CHARGER_MINIMUM_SIOP_CHARGING_CURRENT
  440. * charging current should be over than USB charging current
  441. */
  442. #define SEC_CHARGER_MINIMUM_SIOP_CHARGING_CURRENT 2
  443. #define SEC_BATTERY_CABLE_TYPE_FROM_MTK 1
  444. #if defined(CONFIG_TABLET_MODEL_CONCEPT) && !defined(CONFIG_SEC_FACTORY)
  445. #define SLOW_CHARGING_CURRENT_STANDARD 1000
  446. #else
  447. #define SLOW_CHARGING_CURRENT_STANDARD 400
  448. #endif
  449. typedef struct sec_age_data {
  450. unsigned int cycle;
  451. unsigned int float_voltage;
  452. unsigned int recharge_condition_vcell;
  453. unsigned int full_condition_vcell;
  454. unsigned int full_condition_soc;
  455. #if defined(CONFIG_BATTERY_AGE_FORECAST_B2B)
  456. unsigned int max_charging_current;
  457. #endif
  458. } sec_age_data_t;
  459. typedef struct {
  460. unsigned int cycle;
  461. unsigned int asoc;
  462. } battery_health_condition;
  463. #define is_ppde_wireless_type(cable_type) ( \
  464. cable_type == SEC_BATTERY_CABLE_PREPARE_WIRELESS_20 || \
  465. cable_type == SEC_BATTERY_CABLE_HV_WIRELESS_20_LIMIT || \
  466. cable_type == SEC_BATTERY_CABLE_HV_WIRELESS_20)
  467. #define is_pwr_nego_wireless_type(cable_type) ( \
  468. cable_type == SEC_BATTERY_CABLE_HV_WIRELESS_20 || \
  469. cable_type == SEC_BATTERY_CABLE_WIRELESS_EPP)
  470. #define is_hv_wireless_type(cable_type) ( \
  471. cable_type == SEC_BATTERY_CABLE_HV_WIRELESS || \
  472. cable_type == SEC_BATTERY_CABLE_WIRELESS_HV_STAND || \
  473. cable_type == SEC_BATTERY_CABLE_HV_WIRELESS_20 || \
  474. cable_type == SEC_BATTERY_CABLE_HV_WIRELESS_20_LIMIT || \
  475. cable_type == SEC_BATTERY_CABLE_WIRELESS_HV_VEHICLE || \
  476. cable_type == SEC_BATTERY_CABLE_WIRELESS_HV_PACK || \
  477. cable_type == SEC_BATTERY_CABLE_WIRELESS_EPP)
  478. #define is_nv_wireless_type(cable_type) ( \
  479. cable_type == SEC_BATTERY_CABLE_WIRELESS || \
  480. cable_type == SEC_BATTERY_CABLE_PMA_WIRELESS || \
  481. cable_type == SEC_BATTERY_CABLE_WIRELESS_PACK || \
  482. cable_type == SEC_BATTERY_CABLE_WIRELESS_STAND || \
  483. cable_type == SEC_BATTERY_CABLE_WIRELESS_VEHICLE || \
  484. cable_type == SEC_BATTERY_CABLE_PREPARE_WIRELESS_HV || \
  485. cable_type == SEC_BATTERY_CABLE_PREPARE_WIRELESS_20 || \
  486. cable_type == SEC_BATTERY_CABLE_WIRELESS_TX || \
  487. cable_type == SEC_BATTERY_CABLE_WIRELESS_EPP_NV)
  488. #define is_wireless_type(cable_type) ( \
  489. is_hv_wireless_type(cable_type) || \
  490. is_nv_wireless_type(cable_type))
  491. #define is_wireless_fake_type(cable_type) ( \
  492. cable_type == SEC_BATTERY_CABLE_WIRELESS_FAKE || \
  493. cable_type == SEC_BATTERY_CABLE_WIRELESS_EPP_FAKE)
  494. #define is_wireless_all_type(cable_type) ( \
  495. is_wireless_type(cable_type) || \
  496. is_wireless_fake_type(cable_type))
  497. #define is_not_wireless_type(cable_type) ( \
  498. cable_type != SEC_BATTERY_CABLE_WIRELESS && \
  499. cable_type != SEC_BATTERY_CABLE_PMA_WIRELESS && \
  500. cable_type != SEC_BATTERY_CABLE_WIRELESS_PACK && \
  501. cable_type != SEC_BATTERY_CABLE_WIRELESS_STAND && \
  502. cable_type != SEC_BATTERY_CABLE_HV_WIRELESS && \
  503. cable_type != SEC_BATTERY_CABLE_PREPARE_WIRELESS_HV && \
  504. cable_type != SEC_BATTERY_CABLE_WIRELESS_HV_STAND && \
  505. cable_type != SEC_BATTERY_CABLE_WIRELESS_VEHICLE && \
  506. cable_type != SEC_BATTERY_CABLE_WIRELESS_HV_VEHICLE && \
  507. cable_type != SEC_BATTERY_CABLE_WIRELESS_TX && \
  508. cable_type != SEC_BATTERY_CABLE_PREPARE_WIRELESS_20 && \
  509. cable_type != SEC_BATTERY_CABLE_HV_WIRELESS_20 && \
  510. cable_type != SEC_BATTERY_CABLE_HV_WIRELESS_20_LIMIT && \
  511. cable_type != SEC_BATTERY_CABLE_WIRELESS_HV_PACK && \
  512. cable_type != SEC_BATTERY_CABLE_WIRELESS_EPP && \
  513. cable_type != SEC_BATTERY_CABLE_WIRELESS_EPP_NV)
  514. #define is_wired_type(cable_type) \
  515. (is_not_wireless_type(cable_type) && (cable_type != SEC_BATTERY_CABLE_NONE) && \
  516. (cable_type != SEC_BATTERY_CABLE_OTG))
  517. #define is_hv_qc_wire_type(cable_type) ( \
  518. cable_type == SEC_BATTERY_CABLE_QC20 || \
  519. cable_type == SEC_BATTERY_CABLE_QC30)
  520. #define is_hv_afc_wire_type(cable_type) ( \
  521. cable_type == SEC_BATTERY_CABLE_9V_ERR || \
  522. cable_type == SEC_BATTERY_CABLE_9V_TA || \
  523. cable_type == SEC_BATTERY_CABLE_9V_UNKNOWN || \
  524. cable_type == SEC_BATTERY_CABLE_12V_TA)
  525. #define is_hv_wire_9v_type(cable_type) ( \
  526. cable_type == SEC_BATTERY_CABLE_9V_ERR || \
  527. cable_type == SEC_BATTERY_CABLE_9V_TA || \
  528. cable_type == SEC_BATTERY_CABLE_9V_UNKNOWN || \
  529. cable_type == SEC_BATTERY_CABLE_POGO_9V || \
  530. cable_type == SEC_BATTERY_CABLE_QC20)
  531. #define is_hv_wire_12v_type(cable_type) ( \
  532. cable_type == SEC_BATTERY_CABLE_12V_TA || \
  533. cable_type == SEC_BATTERY_CABLE_QC30)
  534. #define is_hv_wire_type(cable_type) ( \
  535. is_hv_afc_wire_type(cable_type) || is_hv_qc_wire_type(cable_type))
  536. #define is_nocharge_type(cable_type) ( \
  537. cable_type == SEC_BATTERY_CABLE_NONE || \
  538. cable_type == SEC_BATTERY_CABLE_OTG || \
  539. cable_type == SEC_BATTERY_CABLE_POWER_SHARING)
  540. #define chg_can_sleep_type(cable_type) ( \
  541. !is_wired_type(cable_type) || cable_type == SEC_BATTERY_CABLE_TIMEOUT)
  542. #define is_slate_mode(battery) ((battery->current_event & SEC_BAT_CURRENT_EVENT_SLATE) \
  543. == SEC_BAT_CURRENT_EVENT_SLATE)
  544. #define can_usb_suspend_type(cable_type) ( \
  545. cable_type == SEC_BATTERY_CABLE_PDIC || \
  546. cable_type == SEC_BATTERY_CABLE_FPDO_DC || \
  547. cable_type == SEC_BATTERY_CABLE_PDIC_APDO || \
  548. cable_type == SEC_BATTERY_CABLE_USB || \
  549. cable_type == SEC_BATTERY_CABLE_USB_CDP)
  550. #define is_pd_wire_type(cable_type) ( \
  551. cable_type == SEC_BATTERY_CABLE_PDIC || \
  552. cable_type == SEC_BATTERY_CABLE_FPDO_DC || \
  553. cable_type == SEC_BATTERY_CABLE_PDIC_APDO)
  554. #define is_pd_apdo_wire_type(cable_type) ( \
  555. cable_type == SEC_BATTERY_CABLE_FPDO_DC || \
  556. cable_type == SEC_BATTERY_CABLE_PDIC_APDO)
  557. #define is_pd_fpdo_wire_type(cable_type) ( \
  558. cable_type == SEC_BATTERY_CABLE_PDIC)
  559. #define is_hv_pdo_wire_type(cable_type, hv_pdo) ( \
  560. (cable_type == SEC_BATTERY_CABLE_PDIC || \
  561. cable_type == SEC_BATTERY_CABLE_FPDO_DC || \
  562. cable_type == SEC_BATTERY_CABLE_PDIC_APDO) && \
  563. hv_pdo)
  564. #define is_pogo_wire_type(cable_type) ( \
  565. cable_type == SEC_BATTERY_CABLE_POGO || \
  566. cable_type == SEC_BATTERY_CABLE_POGO_9V)
  567. #define is_wcin_type(cable_type) ( \
  568. is_pogo_wire_type(cable_type) || is_wireless_type(cable_type))
  569. #endif /* __SEC_CHARGING_COMMON_H */