sec_cisd.h 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. /*
  2. * sec_cisd.h
  3. * Samsung Mobile Charger Header
  4. *
  5. * Copyright (C) 2015 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_CISD_H
  19. #define __SEC_CISD_H __FILE__
  20. #define CISD_STATE_NONE 0x00
  21. #define CISD_STATE_OVER_VOLTAGE 0x01
  22. #define is_cisd_check_type(cable_type) ( \
  23. cable_type == SEC_BATTERY_CABLE_TA || \
  24. cable_type == SEC_BATTERY_CABLE_9V_TA || \
  25. cable_type == SEC_BATTERY_CABLE_9V_UNKNOWN || \
  26. cable_type == SEC_BATTERY_CABLE_9V_ERR || \
  27. cable_type == SEC_BATTERY_CABLE_PDIC)
  28. enum cisd_data {
  29. CISD_DATA_RESET_ALG = 0,
  30. CISD_DATA_ALG_INDEX,
  31. CISD_DATA_FULL_COUNT,
  32. CISD_DATA_CAP_MAX,
  33. CISD_DATA_CAP_MIN,
  34. CISD_DATA_RECHARGING_COUNT,
  35. CISD_DATA_VALERT_COUNT,
  36. CISD_DATA_CYCLE,
  37. CISD_DATA_WIRE_COUNT,
  38. CISD_DATA_WIRELESS_COUNT,
  39. CISD_DATA_HIGH_TEMP_SWELLING,
  40. CISD_DATA_LOW_TEMP_SWELLING,
  41. CISD_DATA_WC_HIGH_TEMP_SWELLING,
  42. CISD_DATA_SWELLING_FULL_CNT,
  43. CISD_DATA_SWELLING_RECOVERY_CNT,
  44. CISD_DATA_AICL_COUNT,
  45. CISD_DATA_BATT_TEMP_MAX,
  46. CISD_DATA_BATT_TEMP_MIN,
  47. CISD_DATA_CHG_TEMP_MAX,
  48. CISD_DATA_CHG_TEMP_MIN,
  49. CISD_DATA_WPC_TEMP_MAX,
  50. CISD_DATA_WPC_TEMP_MIN,
  51. CISD_DATA_USB_TEMP_MAX,
  52. CISD_DATA_USB_TEMP_MIN,
  53. CISD_DATA_CHG_BATT_TEMP_MAX,
  54. CISD_DATA_CHG_BATT_TEMP_MIN,
  55. CISD_DATA_CHG_CHG_TEMP_MAX,
  56. CISD_DATA_CHG_CHG_TEMP_MIN,
  57. CISD_DATA_CHG_WPC_TEMP_MAX,
  58. CISD_DATA_CHG_WPC_TEMP_MIN,
  59. CISD_DATA_CHG_USB_TEMP_MAX,
  60. CISD_DATA_CHG_USB_TEMP_MIN,
  61. CISD_DATA_USB_OVERHEAT_CHARGING, /* 32 */
  62. CISD_DATA_UNSAFETY_VOLTAGE,
  63. CISD_DATA_UNSAFETY_TEMPERATURE,
  64. CISD_DATA_SAFETY_TIMER,
  65. CISD_DATA_VSYS_OVP,
  66. CISD_DATA_VBAT_OVP,
  67. CISD_DATA_USB_OVERHEAT_RAPID_CHANGE,
  68. CISD_DATA_ASOC,
  69. CISD_DATA_USB_OVERHEAT_ALONE,
  70. CISD_DATA_CAP_NOM,
  71. CISD_DATA_RC0,
  72. CISD_DATA_MAX,
  73. };
  74. enum cisd_data_per_day {
  75. CISD_DATA_FULL_COUNT_PER_DAY = CISD_DATA_MAX,
  76. CISD_DATA_CAP_MAX_PER_DAY,
  77. CISD_DATA_CAP_MIN_PER_DAY,
  78. CISD_DATA_RECHARGING_COUNT_PER_DAY,
  79. CISD_DATA_VALERT_COUNT_PER_DAY,
  80. CISD_DATA_WIRE_COUNT_PER_DAY,
  81. CISD_DATA_WIRELESS_COUNT_PER_DAY,
  82. CISD_DATA_HIGH_TEMP_SWELLING_PER_DAY,
  83. CISD_DATA_LOW_TEMP_SWELLING_PER_DAY,
  84. CISD_DATA_WC_HIGH_TEMP_SWELLING_PER_DAY,
  85. CISD_DATA_SWELLING_FULL_CNT_PER_DAY,
  86. CISD_DATA_SWELLING_RECOVERY_CNT_PER_DAY,
  87. CISD_DATA_AICL_COUNT_PER_DAY,
  88. CISD_DATA_BATT_TEMP_MAX_PER_DAY,
  89. CISD_DATA_BATT_TEMP_MIN_PER_DAY,
  90. CISD_DATA_SUB_BATT_TEMP_MAX_PER_DAY,
  91. CISD_DATA_SUB_BATT_TEMP_MIN_PER_DAY,
  92. CISD_DATA_CHG_TEMP_MAX_PER_DAY,
  93. CISD_DATA_CHG_TEMP_MIN_PER_DAY,
  94. CISD_DATA_USB_TEMP_MAX_PER_DAY,
  95. CISD_DATA_USB_TEMP_MIN_PER_DAY,
  96. CISD_DATA_CHG_BATT_TEMP_MAX_PER_DAY,
  97. CISD_DATA_CHG_BATT_TEMP_MIN_PER_DAY,
  98. CISD_DATA_CHG_SUB_BATT_TEMP_MAX_PER_DAY,
  99. CISD_DATA_CHG_SUB_BATT_TEMP_MIN_PER_DAY,
  100. CISD_DATA_CHG_CHG_TEMP_MAX_PER_DAY,
  101. CISD_DATA_CHG_CHG_TEMP_MIN_PER_DAY,
  102. CISD_DATA_CHG_USB_TEMP_MAX_PER_DAY,
  103. CISD_DATA_CHG_USB_TEMP_MIN_PER_DAY,
  104. CISD_DATA_USB_OVERHEAT_CHARGING_PER_DAY,
  105. CISD_DATA_UNSAFE_VOLTAGE_PER_DAY,
  106. CISD_DATA_UNSAFE_TEMPERATURE_PER_DAY,
  107. CISD_DATA_SAFETY_TIMER_PER_DAY, /* 32 */
  108. CISD_DATA_VSYS_OVP_PER_DAY,
  109. CISD_DATA_VBAT_OVP_PER_DAY,
  110. CISD_DATA_USB_OVERHEAT_RAPID_CHANGE_PER_DAY,
  111. CISD_DATA_BUCK_OFF_PER_DAY,
  112. CISD_DATA_USB_OVERHEAT_ALONE_PER_DAY,
  113. CISD_DATA_DROP_VALUE_PER_DAY,
  114. CISD_DATA_CHG_RETENTION_TIME_PER_DAY,
  115. CISD_DATA_TOTAL_CHG_RETENTION_TIME_PER_DAY,
  116. CISD_DATA_MAX_PER_DAY,
  117. };
  118. enum {
  119. CISD_CABLE_TA = 0,
  120. CISD_CABLE_AFC,
  121. CISD_CABLE_AFC_FAIL,
  122. CISD_CABLE_QC,
  123. CISD_CABLE_QC_FAIL,
  124. CISD_CABLE_PD,
  125. CISD_CABLE_PD_HIGH,
  126. CISD_CABLE_HV_WC_20,
  127. CISD_CABLE_FPDO_DC,
  128. CISD_CABLE_TYPE_MAX,
  129. };
  130. enum {
  131. TX_ON = 0,
  132. TX_OTHER,
  133. TX_GEAR,
  134. TX_PHONE,
  135. TX_BUDS,
  136. TX_DATA_MAX,
  137. };
  138. enum {
  139. EVENT_DC_ERR = 0,
  140. EVENT_TA_OCP_DET,
  141. EVENT_TA_OCP_ON,
  142. EVENT_OVP_POWER,
  143. EVENT_OVP_SIGNAL,
  144. EVENT_OTG,
  145. EVENT_D2D,
  146. #if IS_ENABLED(CONFIG_DUAL_BATTERY)
  147. EVENT_MAIN_BAT_ERR,
  148. EVENT_SUB_BAT_ERR,
  149. EVENT_BAT_WA_ERR,
  150. #endif
  151. EVENT_DATA_MAX,
  152. };
  153. extern const char *cisd_data_str[];
  154. extern const char *cisd_data_str_d[];
  155. extern const char *cisd_cable_data_str[];
  156. extern const char *cisd_tx_data_str[];
  157. extern const char *cisd_event_data_str[];
  158. #define PAD_INDEX_STRING "INDEX"
  159. #define PAD_JSON_STRING "PAD_0x"
  160. #define MAX_PAD_ID 0xFF
  161. #define MAX_CHARGER_POWER 100
  162. #define POWER_JSON_STRING "POWER_"
  163. #define POWER_COUNT_JSON_STRING "COUNT"
  164. #define SS_PD_VID 0x04E8
  165. #define MIN_SS_PD_PID 0x3000
  166. #define MAX_SS_PD_PID 0x30FF
  167. #define PD_JSON_STRING "PID_0x"
  168. #define PD_COUNT_JSON_STRING "PID"
  169. struct pad_data {
  170. unsigned int id;
  171. unsigned int count;
  172. struct pad_data* prev;
  173. struct pad_data* next;
  174. };
  175. struct power_data {
  176. unsigned int power;
  177. unsigned int count;
  178. struct power_data* prev;
  179. struct power_data* next;
  180. };
  181. struct pd_data {
  182. unsigned short pid;
  183. unsigned int count;
  184. struct pd_data *prev;
  185. struct pd_data *next;
  186. };
  187. struct cisd {
  188. unsigned int cisd_alg_index;
  189. unsigned int state;
  190. unsigned int ab_vbat_max_count;
  191. unsigned int ab_vbat_check_count;
  192. int max_voltage_thr;
  193. unsigned int gpio_ovp_power;
  194. unsigned int irq_ovp_power;
  195. unsigned int gpio_ovp_signal;
  196. unsigned int irq_ovp_signal;
  197. /* Big Data Field */
  198. int data[CISD_DATA_MAX_PER_DAY];
  199. int cable_data[CISD_CABLE_TYPE_MAX];
  200. unsigned int tx_data[TX_DATA_MAX];
  201. unsigned int event_data[EVENT_DATA_MAX];
  202. struct mutex padlock;
  203. struct mutex powerlock;
  204. struct mutex pdlock;
  205. struct pad_data* pad_array;
  206. struct power_data* power_array;
  207. struct pd_data *pd_array;
  208. unsigned int pad_count;
  209. unsigned int power_count;
  210. unsigned int pd_count;
  211. };
  212. extern struct cisd *gcisd;
  213. static inline void set_cisd_data(int type, int value)
  214. {
  215. if (gcisd && (type >= CISD_DATA_RESET_ALG && type < CISD_DATA_MAX_PER_DAY))
  216. gcisd->data[type] = value;
  217. }
  218. static inline int get_cisd_data(int type)
  219. {
  220. if (!gcisd || (type < CISD_DATA_RESET_ALG || type >= CISD_DATA_MAX_PER_DAY))
  221. return -1;
  222. return gcisd->data[type];
  223. }
  224. static inline void increase_cisd_count(int type)
  225. {
  226. if (gcisd && (type >= CISD_DATA_RESET_ALG && type < CISD_DATA_MAX_PER_DAY))
  227. gcisd->data[type]++;
  228. }
  229. void init_cisd_pad_data(struct cisd *cisd);
  230. void count_cisd_pad_data(struct cisd *cisd, unsigned int pad_id);
  231. void init_cisd_power_data(struct cisd* cisd);
  232. void count_cisd_power_data(struct cisd* cisd, int power);
  233. void init_cisd_pd_data(struct cisd *cisd);
  234. void count_cisd_pd_data(unsigned short vid, unsigned short pid);
  235. #endif /* __SEC_CISD_H */