axp-sply.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  1. #ifndef _LINUX_AXP_SPLY_H_
  2. #define _LINUX_AXP_SPLY_H_
  3. /* AXP18 */
  4. #define AXP18_STATUS POWER18_STATUS
  5. #define AXP18_CHARGE_STATUS POWER18_ONOFF
  6. #define AXP18_IN_CHARGE (1 << 2)
  7. #define AXP18_CHARGE_CONTROL1 POWER18_CHARGE1
  8. #define AXP18_CHARGER_ENABLE (1 << 7)
  9. #define AXP18_CHG_CURLIM_ENABLE (1 << 3)
  10. #define AXP18_CHARGE_CONTROL2 POWER18_CHARGE2
  11. #define AXP18_FAULT_LOG1 POWER18_INTSTS1
  12. #define AXP18_FAULT_LOG2 POWER18_INTSTS3
  13. #define AXP18_FAULT_LOG_BATINACT (1 << 0)
  14. #define AXP18_FAULT_LOG_COLD (1 << 1)
  15. #define AXP18_FAULT_LOG_OVER_TEMP (1 << 2)
  16. #define AXP18_FAULT_LOG_VBAT_LOW (1 << 6)
  17. #define AXP18_FAULT_LOG_VBAT_OVER (1 << 7)
  18. #define AXP18_FINISH_CHARGE (1 << 2)
  19. #define AXP18_ADC_CONTROL POWER18_ADCSW_CTL
  20. #define AXP18_ADC_BATVOL_ENABLE (1 << 7)
  21. #define AXP18_ADC_BATCUR_ENABLE (1 << 6)
  22. #define AXP18_ADC_ACVOL_ENABLE (1 << 5)
  23. #define AXP18_ADC_ACCUR_ENABLE (1 << 4)
  24. #define AXP18_DATA_BUFFER1 POWER18_DATA_BUFFER1
  25. #define AXP18_DATA_BUFFER2 POWER18_DATA_BUFFER2
  26. #define AXP18_VBAT_RES POWER18_BATTERY_VOL
  27. #define AXP18_IBAT_RES POWER18_BATTERY_CURRENT
  28. #define AXP18_VAC_RES POWER18_DCIN_VOL
  29. #define AXP18_IAC_RES POWER18_DCIN_CURRENT
  30. #define AXP18_CHARGE_VBUS POWER18_IPS_SET
  31. #define AXP20_VOL_MAX 12 // capability buffer length
  32. static struct input_dev * powerkeydev;
  33. const unsigned int AXP18_NOTIFIER_ON = AXP18_IRQ_EXTOV |
  34. AXP18_IRQ_EXTIN |
  35. AXP18_IRQ_EXTRE |
  36. AXP18_IRQ_EXTLO |
  37. AXP18_IRQ_TEMOV |
  38. AXP18_IRQ_TEMLO |
  39. AXP18_IRQ_BATIN |
  40. AXP18_IRQ_BATRE |
  41. AXP18_IRQ_PEKLO |
  42. AXP18_IRQ_PEKSH ;
  43. /* AXP19 */
  44. #define AXP19_CHARGE_STATUS POWER19_STATUS
  45. #define AXP19_IN_CHARGE (1 << 6)
  46. #define AXP19_CHARGE_CONTROL1 POWER19_CHARGE1
  47. #define AXP19_CHARGER_ENABLE (1 << 7)
  48. #define AXP19_CHARGE_CONTROL2 POWER19_CHARGE2
  49. #define AXP19_BUCHARGE_CONTROL POWER19_BACKUP_CHG
  50. #define AXP19_BUCHARGER_ENABLE (1 << 7)
  51. #define AXP19_FAULT_LOG1 POWER19_MODE_CHGSTATUS
  52. #define AXP19_FAULT_LOG_CHA_CUR_LOW (1 << 2)
  53. #define AXP19_FAULT_LOG_BATINACT (1 << 3)
  54. #define AXP19_FAULT_LOG_OVER_TEMP (1 << 7)
  55. #define AXP19_FAULT_LOG2 POWER19_INTSTS2
  56. #define AXP19_FAULT_LOG_COLD (1 << 0)
  57. #define AXP19_FINISH_CHARGE (1 << 2)
  58. #define AXP19_ADC_CONTROL1 POWER19_ADC_EN1
  59. #define AXP19_ADC_BATVOL_ENABLE (1 << 7)
  60. #define AXP19_ADC_BATCUR_ENABLE (1 << 6)
  61. #define AXP19_ADC_DCINVOL_ENABLE (1 << 5)
  62. #define AXP19_ADC_DCINCUR_ENABLE (1 << 4)
  63. #define AXP19_ADC_USBVOL_ENABLE (1 << 3)
  64. #define AXP19_ADC_USBCUR_ENABLE (1 << 2)
  65. #define AXP19_ADC_APSVOL_ENABLE (1 << 1)
  66. #define AXP19_ADC_TSVOL_ENABLE (1 << 0)
  67. #define AXP19_ADC_CONTROL2 POWER19_ADC_EN2
  68. #define AXP19_ADC_INTERTEM_ENABLE (1 << 7)
  69. #define AXP19_ADC_GPIO0_ENABLE (1 << 3)
  70. #define AXP19_ADC_GPIO1_ENABLE (1 << 2)
  71. #define AXP19_ADC_GPIO2_ENABLE (1 << 1)
  72. #define AXP19_ADC_GPIO3_ENABLE (1 << 0)
  73. #define AXP19_ADC_CONTROL3 POWER19_ADC_SPEED
  74. #define AXP19_VACH_RES POWER19_ACIN_VOL_H8
  75. #define AXP19_VACL_RES POWER19_ACIN_VOL_L4
  76. #define AXP19_IACH_RES POWER19_ACIN_CUR_H8
  77. #define AXP19_IACL_RES POWER19_ACIN_CUR_L4
  78. #define AXP19_VUSBH_RES POWER19_VBUS_VOL_H8
  79. #define AXP19_VUSBL_RES POWER19_VBUS_VOL_L4
  80. #define AXP19_IUSBH_RES POWER19_VBUS_CUR_H8
  81. #define AXP19_IUSBL_RES POWER19_VBUS_CUR_L4
  82. #define AXP19_TICH_RES (0x5E)
  83. #define AXP19_TICL_RES (0x5F)
  84. #define AXP19_TSH_RES (0x62)
  85. #define AXP19_ISL_RES (0x63)
  86. #define AXP19_VGPIO0H_RES (0x64)
  87. #define AXP19_VGPIO0L_RES (0x65)
  88. #define AXP19_VGPIO1H_RES (0x66)
  89. #define AXP19_VGPIO1L_RES (0x67)
  90. #define AXP19_VGPIO2H_RES (0x68)
  91. #define AXP19_VGPIO2L_RES (0x69)
  92. #define AXP19_VGPIO3H_RES (0x6A)
  93. #define AXP19_VGPIO3L_RES (0x6B)
  94. #define AXP19_PBATH_RES POWER19_BAT_POWERH8
  95. #define AXP19_PBATM_RES POWER19_BAT_POWERM8
  96. #define AXP19_PBATL_RES POWER19_BAT_POWERL8
  97. #define AXP19_VBATH_RES POWER19_BAT_AVERVOL_H8
  98. #define AXP19_VBATL_RES POWER19_BAT_AVERVOL_L4
  99. #define AXP19_ICHARH_RES POWER19_BAT_AVERCHGCUR_H8
  100. #define AXP19_ICHARL_RES POWER19_BAT_AVERCHGCUR_L5
  101. #define AXP19_IDISCHARH_RES POWER19_BAT_AVERDISCHGCUR_H8
  102. #define AXP19_IDISCHARL_RES POWER19_BAT_AVERDISCHGCUR_L5
  103. #define AXP19_VAPSH_RES POWER19_APS_AVERVOL_H8
  104. #define AXP19_VAPSL_RES POWER19_APS_AVERVOL_L4
  105. #define AXP19_COULOMB_CONTROL POWER19_COULOMB_CTL
  106. #define AXP19_COULOMB_ENABLE (1 << 7)
  107. #define AXP19_COULOMB_SUSPEND (1 << 6)
  108. #define AXP19_COULOMB_CLEAR (1 << 5)
  109. #define AXP19_CCHAR3_RES POWER19_BAT_CHGCOULOMB3
  110. #define AXP19_CCHAR2_RES POWER19_BAT_CHGCOULOMB2
  111. #define AXP19_CCHAR1_RES POWER19_BAT_CHGCOULOMB1
  112. #define AXP19_CCHAR0_RES POWER19_BAT_CHGCOULOMB0
  113. #define AXP19_CDISCHAR3_RES POWER19_BAT_DISCHGCOULOMB3
  114. #define AXP19_CDISCHAR2_RES POWER19_BAT_DISCHGCOULOMB2
  115. #define AXP19_CDISCHAR1_RES POWER19_BAT_DISCHGCOULOMB1
  116. #define AXP19_CDISCHAR0_RES POWER19_BAT_DISCHGCOULOMB0
  117. #define AXP19_DATA_BUFFER0 POWER19_DATA_BUFFER1
  118. #define AXP19_DATA_BUFFER1 POWER19_DATA_BUFFER2
  119. #define AXP19_DATA_BUFFER2 POWER19_DATA_BUFFER3
  120. #define AXP19_DATA_BUFFER3 POWER19_DATA_BUFFER4
  121. #define AXP19_CHARGE_VBUS POWER19_IPS_SET
  122. #define AXP19_CHARGE_LED POWER19_OFF_CTL
  123. #define AXP19_TIMER_CTL POWER19_TIMER_CTL
  124. const unsigned int AXP19_NOTIFIER_ON = AXP19_IRQ_USBOV |
  125. AXP19_IRQ_USBIN |
  126. AXP19_IRQ_USBRE |
  127. AXP19_IRQ_USBLO |
  128. AXP19_IRQ_ACOV |
  129. AXP19_IRQ_ACIN |
  130. AXP19_IRQ_ACRE |
  131. AXP19_IRQ_TEMOV |
  132. AXP19_IRQ_TEMLO |
  133. AXP19_IRQ_BATIN |
  134. AXP19_IRQ_BATRE |
  135. AXP19_IRQ_PEKLO |
  136. AXP19_IRQ_PEKSH ;
  137. /* AXP20 */
  138. #define AXP20_CHARGE_STATUS POWER20_STATUS
  139. #define AXP20_IN_CHARGE (1 << 6)
  140. #define AXP20_CHARGE_CONTROL1 POWER20_CHARGE1
  141. #define AXP20_CHARGER_ENABLE (1 << 7)
  142. #define AXP20_CHARGE_CONTROL2 POWER20_CHARGE2
  143. #define AXP20_BUCHARGE_CONTROL POWER20_BACKUP_CHG
  144. #define AXP20_BUCHARGER_ENABLE (1 << 7)
  145. #define AXP20_FAULT_LOG1 POWER20_MODE_CHGSTATUS
  146. #define AXP20_FAULT_LOG_CHA_CUR_LOW (1 << 2)
  147. #define AXP20_FAULT_LOG_BATINACT (1 << 3)
  148. #define AXP20_FAULT_LOG_OVER_TEMP (1 << 7)
  149. #define AXP20_FAULT_LOG2 POWER20_INTSTS2
  150. #define AXP20_FAULT_LOG_COLD (1 << 0)
  151. #define AXP20_FINISH_CHARGE (1 << 2)
  152. #define AXP20_ADC_CONTROL1 POWER20_ADC_EN1
  153. #define AXP20_ADC_BATVOL_ENABLE (1 << 7)
  154. #define AXP20_ADC_BATCUR_ENABLE (1 << 6)
  155. #define AXP20_ADC_DCINVOL_ENABLE (1 << 5)
  156. #define AXP20_ADC_DCINCUR_ENABLE (1 << 4)
  157. #define AXP20_ADC_USBVOL_ENABLE (1 << 3)
  158. #define AXP20_ADC_USBCUR_ENABLE (1 << 2)
  159. #define AXP20_ADC_APSVOL_ENABLE (1 << 1)
  160. #define AXP20_ADC_TSVOL_ENABLE (1 << 0)
  161. #define AXP20_ADC_CONTROL2 POWER20_ADC_EN2
  162. #define AXP20_ADC_INTERTEM_ENABLE (1 << 7)
  163. #define AXP20_ADC_GPIO0_ENABLE (1 << 3)
  164. #define AXP20_ADC_GPIO1_ENABLE (1 << 2)
  165. #define AXP20_ADC_GPIO2_ENABLE (1 << 1)
  166. #define AXP20_ADC_GPIO3_ENABLE (1 << 0)
  167. #define AXP20_ADC_CONTROL3 POWER20_ADC_SPEED
  168. #define AXP20_VACH_RES POWER20_ACIN_VOL_H8
  169. #define AXP20_VACL_RES POWER20_ACIN_VOL_L4
  170. #define AXP20_IACH_RES POWER20_ACIN_CUR_H8
  171. #define AXP20_IACL_RES POWER20_ACIN_CUR_L4
  172. #define AXP20_VUSBH_RES POWER20_VBUS_VOL_H8
  173. #define AXP20_VUSBL_RES POWER20_VBUS_VOL_L4
  174. #define AXP20_IUSBH_RES POWER20_VBUS_CUR_H8
  175. #define AXP20_IUSBL_RES POWER20_VBUS_CUR_L4
  176. #define AXP20_TICH_RES (0x5E)
  177. #define AXP20_TICL_RES (0x5F)
  178. #define AXP20_TSH_RES (0x62)
  179. #define AXP20_ISL_RES (0x63)
  180. #define AXP20_VGPIO0H_RES (0x64)
  181. #define AXP20_VGPIO0L_RES (0x65)
  182. #define AXP20_VGPIO1H_RES (0x66)
  183. #define AXP20_VGPIO1L_RES (0x67)
  184. #define AXP20_VGPIO2H_RES (0x68)
  185. #define AXP20_VGPIO2L_RES (0x69)
  186. #define AXP20_VGPIO3H_RES (0x6A)
  187. #define AXP20_VGPIO3L_RES (0x6B)
  188. #define AXP20_PBATH_RES POWER20_BAT_POWERH8
  189. #define AXP20_PBATM_RES POWER20_BAT_POWERM8
  190. #define AXP20_PBATL_RES POWER20_BAT_POWERL8
  191. #define AXP20_VBATH_RES POWER20_BAT_AVERVOL_H8
  192. #define AXP20_VBATL_RES POWER20_BAT_AVERVOL_L4
  193. #define AXP20_ICHARH_RES POWER20_BAT_AVERCHGCUR_H8
  194. #define AXP20_ICHARL_RES POWER20_BAT_AVERCHGCUR_L5
  195. #define AXP20_IDISCHARH_RES POWER20_BAT_AVERDISCHGCUR_H8
  196. #define AXP20_IDISCHARL_RES POWER20_BAT_AVERDISCHGCUR_L5
  197. #define AXP20_VAPSH_RES POWER20_APS_AVERVOL_H8
  198. #define AXP20_VAPSL_RES POWER20_APS_AVERVOL_L4
  199. #define AXP20_COULOMB_CONTROL POWER20_COULOMB_CTL
  200. #define AXP20_COULOMB_ENABLE (1 << 7)
  201. #define AXP20_COULOMB_SUSPEND (1 << 6)
  202. #define AXP20_COULOMB_CLEAR (1 << 5)
  203. #define AXP20_CCHAR3_RES POWER20_BAT_CHGCOULOMB3
  204. #define AXP20_CCHAR2_RES POWER20_BAT_CHGCOULOMB2
  205. #define AXP20_CCHAR1_RES POWER20_BAT_CHGCOULOMB1
  206. #define AXP20_CCHAR0_RES POWER20_BAT_CHGCOULOMB0
  207. #define AXP20_CDISCHAR3_RES POWER20_BAT_DISCHGCOULOMB3
  208. #define AXP20_CDISCHAR2_RES POWER20_BAT_DISCHGCOULOMB2
  209. #define AXP20_CDISCHAR1_RES POWER20_BAT_DISCHGCOULOMB1
  210. #define AXP20_CDISCHAR0_RES POWER20_BAT_DISCHGCOULOMB0
  211. #define AXP20_DATA_BUFFER0 POWER20_DATA_BUFFER1
  212. #define AXP20_DATA_BUFFER1 POWER20_DATA_BUFFER2
  213. #define AXP20_DATA_BUFFER2 POWER20_DATA_BUFFER3
  214. #define AXP20_DATA_BUFFER3 POWER20_DATA_BUFFER4
  215. #define AXP20_DATA_BUFFER4 POWER20_DATA_BUFFER5
  216. #define AXP20_DATA_BUFFER5 POWER20_DATA_BUFFER6
  217. #define AXP20_DATA_BUFFER6 POWER20_DATA_BUFFER7
  218. #define AXP20_DATA_BUFFER7 POWER20_DATA_BUFFER8
  219. #define AXP20_DATA_BUFFER8 POWER20_DATA_BUFFER9
  220. #define AXP20_DATA_BUFFER9 POWER20_DATA_BUFFERA
  221. #define AXP20_DATA_BUFFERA POWER20_DATA_BUFFERB
  222. #define AXP20_DATA_BUFFERB POWER20_DATA_BUFFERC
  223. #define AXP20_IC_TYPE POWER20_IC_TYPE
  224. #define AXP20_CAP (0xB9)
  225. #define AXP20_CHARGE_VBUS POWER20_IPS_SET
  226. #define AXP20_APS_WARNING1 POWER20_APS_WARNING1
  227. #define AXP20_APS_WARNING2 POWER20_APS_WARNING2
  228. #define AXP20_TIMER_CTL POWER20_TIMER_CTL
  229. #define AXP20_INTTEMP (0x5E)
  230. const unsigned int AXP20_NOTIFIER_ON = //AXP20_IRQ_USBOV |
  231. AXP20_IRQ_USBIN |
  232. AXP20_IRQ_USBRE |
  233. //AXP20_IRQ_USBLO |
  234. //AXP20_IRQ_ACOV |
  235. AXP20_IRQ_ACIN |
  236. AXP20_IRQ_ACRE |
  237. //AXP20_IRQ_TEMOV |
  238. //AXP20_IRQ_TEMLO |
  239. AXP20_IRQ_BATIN |
  240. AXP20_IRQ_BATRE |
  241. //AXP20_IRQ_PEKLO |
  242. //AXP20_IRQ_PEKSH |
  243. AXP20_IRQ_CHAST |
  244. AXP20_IRQ_CHAOV;
  245. #define AXP_CHG_ATTR(_name) \
  246. { \
  247. .attr = { .name = #_name,.mode = 0644 }, \
  248. .show = _name##_show, \
  249. .store = _name##_store, \
  250. }
  251. struct axp_adc_res {//struct change
  252. uint16_t vbat_res;
  253. uint16_t ibat_res;
  254. uint16_t ichar_res;
  255. uint16_t idischar_res;
  256. uint16_t vac_res;
  257. uint16_t iac_res;
  258. uint16_t vusb_res;
  259. uint16_t iusb_res;
  260. };
  261. struct axp_charger {
  262. /*power supply sysfs*/
  263. struct power_supply batt;
  264. struct power_supply ac;
  265. struct power_supply usb;
  266. struct power_supply bubatt;
  267. /*i2c device*/
  268. struct device *master;
  269. /* adc */
  270. struct axp_adc_res adc;
  271. unsigned int sample_time;
  272. /*monitor*/
  273. struct delayed_work work;
  274. unsigned int interval;
  275. /*battery info*/
  276. struct power_supply_info *battery_info;
  277. /*charger control*/
  278. bool chgen;
  279. bool limit_on;
  280. unsigned int chgcur;
  281. unsigned int chgvol;
  282. unsigned int chgend;
  283. /*charger time */
  284. int chgpretime;
  285. int chgcsttime;
  286. /*external charger*/
  287. bool chgexten;
  288. int chgextcur;
  289. /* charger status */
  290. bool bat_det;
  291. bool is_on;
  292. bool is_finish;
  293. bool ac_not_enough;
  294. bool ac_det;
  295. bool usb_det;
  296. bool ac_valid;
  297. bool usb_valid;
  298. bool ext_valid;
  299. bool bat_current_direction;
  300. bool in_short;
  301. bool batery_active;
  302. bool low_charge_current;
  303. bool int_over_temp;
  304. bool charge_on;
  305. uint8_t fault;
  306. int vbat;
  307. int ibat;
  308. int pbat;
  309. int vac;
  310. int iac;
  311. int vusb;
  312. int iusb;
  313. int ocv;
  314. int disvbat;
  315. int disibat;
  316. /*rest time*/
  317. int rest_vol;
  318. int ocv_rest_vol;
  319. int base_restvol;
  320. int rest_time;
  321. int resume;
  322. /*ic temperature*/
  323. int ic_temp;
  324. /*irq*/
  325. struct notifier_block nb;
  326. /*power led control*/
  327. void (*led_control)(flag);
  328. /*debug file*/
  329. struct dentry *debug_file;
  330. };
  331. static struct task_struct *main_task;
  332. static uint8_t coulomb_flag;
  333. static struct axp_charger *axp_charger;
  334. static int Total_Cap = 0;
  335. static int Cap_Index = 0;
  336. static int flag_state_change = 0;
  337. static int Bat_Cap_Buffer[AXP20_VOL_MAX];
  338. static int counter = 0;
  339. static int bat_cap = 0;
  340. static int charge_index = 0;
  341. static int state_count = 0;
  342. static int rdc_count = 0;
  343. #define CONFIG_USE_COL //Elvis fool
  344. #if defined (CONFIG_USE_COL)
  345. static int cap_count1 = 0,cap_count2 = 0,cap_count3 = 0,cap_count4 = 0;
  346. #endif
  347. static int axp_debug = 0;
  348. #endif