pmic.h 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. #ifndef _PMIC_SW_H_
  2. #define _PMIC_SW_H_
  3. #define PMIC_DEBUG
  4. /*
  5. * The CHIP INFO
  6. */
  7. #define PMIC6328_E1_CID_CODE 0x2810
  8. #define PMIC6328_E2_CID_CODE 0x2820
  9. #define PMIC6328_E3_CID_CODE 0x2830
  10. #define pmic_emerg(fmt, args...) pr_emerg("[SPM-PMIC] " fmt, ##args)
  11. #define pmic_alert(fmt, args...) pr_alert("[SPM-PMIC] " fmt, ##args)
  12. #define pmic_crit(fmt, args...) pr_crit("[SPM-PMIC] " fmt, ##args)
  13. #define pmic_err(fmt, args...) pr_err("[SPM-PMIC] " fmt, ##args)
  14. #define pmic_warn(fmt, args...) pr_warn("[SPM-PMIC] " fmt, ##args)
  15. #define pmic_notice(fmt, args...) pr_notice("[SPM-PMIC] " fmt, ##args)
  16. #define pmic_info(fmt, args...) pr_info("[SPM-PMIC] " fmt, ##args)
  17. #define pmic_debug(fmt, args...) pr_info("[SPM-PMIC] " fmt, ##args) /* pr_debug show nothing */
  18. /* just use in suspend flow for important log due to console suspend */
  19. #define pmic_spm_crit2(fmt, args...) \
  20. do { \
  21. aee_sram_printk(fmt, ##args); \
  22. pmic_crit(fmt, ##args); \
  23. } while (0)
  24. #define PMICTAG "[PMIC] "
  25. #ifdef PMIC_DEBUG
  26. #define PMICDEB(fmt, arg...) pr_debug(PMICTAG "cpuid=%d, " fmt, raw_smp_processor_id(), ##arg)
  27. #define PMICFUC(fmt, arg...) pr_debug(PMICTAG "cpuid=%d, %s\n", raw_smp_processor_id(), __func__)
  28. #endif
  29. /*#define PMICLOG(fmt, arg...) pr_debug(PMICTAG fmt, ##arg)*/
  30. #define PMICERR(fmt, arg...) pr_debug(PMICTAG "ERROR,line=%d " fmt, __LINE__, ##arg)
  31. #define PMICREG(fmt, arg...) pr_debug(PMICTAG fmt, ##arg)
  32. #define PMIC_EN REGULATOR_CHANGE_STATUS
  33. #define PMIC_VOL REGULATOR_CHANGE_VOLTAGE
  34. #define PMIC_EN_VOL 9
  35. #define PMIC_INT_WIDTH 16
  36. #define GETSIZE(array) (sizeof(array)/sizeof(array[0]))
  37. /* extern functions */
  38. extern PMU_FLAG_TABLE_ENTRY pmu_flags_table[];
  39. extern unsigned int bat_get_ui_percentage(void);
  40. extern signed int fgauge_read_IM_current(void *data);
  41. extern void pmic_auxadc_lock(void);
  42. extern void pmic_auxadc_unlock(void);
  43. extern unsigned int bat_get_ui_percentage(void);
  44. extern signed int fgauge_read_v_by_d(int d_val);
  45. extern signed int fgauge_read_r_bat_by_v(signed int voltage);
  46. /*extern PMU_ChargerStruct BMT_status;*//*have defined in battery_common.h */
  47. extern void kpd_pwrkey_pmic_handler(unsigned long pressed);
  48. extern void kpd_pmic_rstkey_handler(unsigned long pressed);
  49. extern int is_mt6311_sw_ready(void);
  50. extern int is_mt6311_exist(void);
  51. extern int get_mt6311_i2c_ch_num(void);
  52. #if !defined CONFIG_MTK_LEGACY
  53. extern void pmu_drv_tool_customization_init(void);
  54. #endif
  55. extern int batt_init_cust_data(void);
  56. extern unsigned int mt_gpio_to_irq(unsigned int gpio);
  57. extern int mt_gpio_set_debounce(unsigned gpio, unsigned debounce);
  58. /*---------------------------------------------------*/
  59. /* controllable voltage , not fixed step */
  60. #define PMIC_LDO_GEN1(_name, en, vol, array, use, mode) \
  61. { \
  62. .desc = { \
  63. .name = #_name, \
  64. .n_voltages = (sizeof(array)/sizeof(array[0])), \
  65. .ops = &mtk_regulator_ops, \
  66. .type = REGULATOR_VOLTAGE, \
  67. }, \
  68. .init_data = { \
  69. .constraints = { \
  70. .valid_ops_mask = (mode), \
  71. }, \
  72. }, \
  73. .en_att = __ATTR(LDO_##_name##_STATUS, 0664, show_LDO_STATUS, store_LDO_STATUS), \
  74. .voltage_att = __ATTR(LDO_##_name##_VOLTAGE, 0664, show_LDO_VOLTAGE, store_LDO_VOLTAGE), \
  75. .pvoltages = (void *)(array), \
  76. .en_reg = (PMU_FLAGS_LIST_ENUM)(en), \
  77. .vol_reg = (PMU_FLAGS_LIST_ENUM)(vol), \
  78. .isUsedable = (use), \
  79. }
  80. /* controllable voltage , fixed step */
  81. #define PMIC_LDO_GEN2(_name, en, vol, min, max, step, use, mode) \
  82. { \
  83. .desc = { \
  84. .name = #_name, \
  85. .n_voltages = ((max) - (min)) / (step) + 1, \
  86. .ops = &mtk_regulator_ops, \
  87. .type = REGULATOR_VOLTAGE, \
  88. .min_uV = (min), \
  89. .uV_step = (step), \
  90. }, \
  91. .init_data = { \
  92. .constraints = { \
  93. .valid_ops_mask = (mode), \
  94. }, \
  95. }, \
  96. .en_att = __ATTR(LDO_##_name##_STATUS, 0664, show_LDO_STATUS, store_LDO_STATUS), \
  97. .voltage_att = __ATTR(LDO_##_name##_VOLTAGE, 0664, show_LDO_VOLTAGE, store_LDO_VOLTAGE), \
  98. .en_reg = (en), \
  99. .vol_reg = (vol), \
  100. .isUsedable = (use), \
  101. }
  102. #define PMIC_BUCK_GEN(_name, en, vol, min, max, step) \
  103. { \
  104. .desc = { \
  105. .name = #_name, \
  106. .n_voltages = ((max) - (min)) / (step) + 1, \
  107. .min_uV = (min), \
  108. .uV_step = (step), \
  109. }, \
  110. .en_att = __ATTR(BUCK_##_name##_STATUS, 0664, show_BUCK_STATUS, store_BUCK_STATUS), \
  111. .voltage_att = __ATTR(BUCK_##_name##_VOLTAGE, 0664, show_BUCK_VOLTAGE, store_BUCK_VOLTAGE), \
  112. .qi_en_reg = (en), \
  113. .qi_vol_reg = (vol), \
  114. .isUsedable = 0, \
  115. }
  116. /* fixed voltage */
  117. #define PMIC_LDO_GEN3(_name, en, fixvoltage, use, mode) \
  118. { \
  119. .desc = { \
  120. .name = #_name, \
  121. .n_voltages = 1, \
  122. .ops = &mtk_regulator_ops, \
  123. .type = REGULATOR_VOLTAGE, \
  124. }, \
  125. .init_data = { \
  126. .constraints = { \
  127. .valid_ops_mask = (mode), \
  128. }, \
  129. }, \
  130. .en_att = __ATTR(LDO_##_name##_STATUS, 0664, show_LDO_STATUS, store_LDO_STATUS), \
  131. .voltage_att = __ATTR(LDO_##_name##_VOLTAGE, 0664, show_LDO_VOLTAGE, store_LDO_VOLTAGE), \
  132. .en_reg = (en), \
  133. .fixedVoltage_uv = (fixvoltage), \
  134. .isUsedable = (use), \
  135. }
  136. struct mtk_regulator {
  137. struct regulator_desc desc;
  138. struct regulator_init_data init_data;
  139. struct regulator_config config;
  140. struct device_attribute en_att;
  141. struct device_attribute voltage_att;
  142. struct regulator_dev *rdev;
  143. PMU_FLAGS_LIST_ENUM en_reg;
  144. PMU_FLAGS_LIST_ENUM vol_reg;
  145. PMU_FLAGS_LIST_ENUM qi_en_reg;
  146. PMU_FLAGS_LIST_ENUM qi_vol_reg;
  147. const void *pvoltages;
  148. bool isUsedable;
  149. struct regulator *reg;
  150. };
  151. #define PMIC_INTERRUPT_WIDTH 16
  152. #define PMIC_S_INT_GEN(_name) \
  153. { \
  154. .name = #_name, \
  155. }
  156. #define PMIC_M_INTS_GEN(adr, enA, setA, clearA, interrupt) \
  157. { \
  158. .address = adr, \
  159. .en = enA, \
  160. .set = setA, \
  161. .clear = clearA, \
  162. .interrupts = interrupt, \
  163. }
  164. struct pmic_interrupt_bit {
  165. const char *name;
  166. void (*callback)(void);
  167. unsigned int times;
  168. };
  169. struct pmic_interrupts {
  170. unsigned int address;
  171. unsigned int en;
  172. unsigned int set;
  173. unsigned int clear;
  174. struct pmic_interrupt_bit *interrupts;
  175. };
  176. /* controllable voltage , not fixed step */
  177. /*
  178. #define PMIC_LDO_GEN1(_name, en, vol, array, use) \
  179. { \
  180. .desc = { \
  181. .name = #_name, \
  182. .n_voltages = (sizeof(array)/sizeof(array[0])), \
  183. .ops = &mtk_regulator_ops, \
  184. .type = REGULATOR_VOLTAGE, \
  185. .owner = THIS_MODULE, \
  186. }, \
  187. .en_att = __ATTR(LDO_##_name##_STATUS, 0664, show_LDO_STATUS, store_LDO_STATUS), \
  188. .voltage_att = __ATTR(LDO_##_name##_VOLTAGE, 0664, show_LDO_VOLTAGE, store_LDO_VOLTAGE), \
  189. .pvoltages = array, \
  190. .en_reg = (en), \
  191. .vol_reg = (vol), \
  192. .isUsedable = (use), \
  193. }
  194. */
  195. /* fixed voltage */
  196. /*
  197. #define PMIC_LDO_GEN2(_name, en, fixvoltage, use) \
  198. { \
  199. .desc = { \
  200. .name = #_name, \
  201. .n_voltages = 1, \
  202. .ops = &mtk_regulator_ops, \
  203. .type = REGULATOR_VOLTAGE, \
  204. .owner = THIS_MODULE, \
  205. }, \
  206. .en_att = __ATTR(LDO_##_name##_STATUS, 0664, show_LDO_STATUS, store_LDO_STATUS), \
  207. .voltage_att = __ATTR(LDO_##_name##_VOLTAGE, 0664, show_LDO_VOLTAGE, store_LDO_VOLTAGE), \
  208. .en_reg = (en), \
  209. .fixedVoltage_uv = (fixvoltage), \
  210. .isUsedable = (use), \
  211. }
  212. */
  213. /* controllable voltage , fixed step */
  214. /*
  215. #define PMIC_LDO_GEN3(_name, en, vol, min, max, step, use) \
  216. { \
  217. .desc = { \
  218. .name = #_name, \
  219. .n_voltages = ((max) - (min)) / (step) + 1, \
  220. .ops = &mtk_regulator_ops, \
  221. .type = REGULATOR_VOLTAGE, \
  222. .owner = THIS_MODULE, \
  223. .min_uV = (min), \
  224. .uV_step = (step), \
  225. }, \
  226. .en_att = __ATTR(LDO_##_name##_STATUS, 0664, show_LDO_STATUS, store_LDO_STATUS), \
  227. .voltage_att = __ATTR(LDO_##_name##_VOLTAGE, 0664, show_LDO_VOLTAGE, store_LDO_VOLTAGE), \
  228. .en_reg = (en), \
  229. .vol_reg = (vol), \
  230. .isUsedable = (use), \
  231. }
  232. #define PMIC_BUCK_GEN(_name, en, vol, min, max, step) \
  233. { \
  234. .desc = { \
  235. .name = #_name, \
  236. .n_voltages = ((max) - (min)) / (step) + 1, \
  237. .min_uV = (min), \
  238. .uV_step = (step), \
  239. }, \
  240. .en_att = __ATTR(BUCK_##_name##_STATUS, 0664, show_BUCK_STATUS, store_BUCK_STATUS), \
  241. .voltage_att = __ATTR(BUCK_##_name##_VOLTAGE, 0664, show_BUCK_VOLTAGE, store_BUCK_VOLTAGE), \
  242. .en_reg = (en), \
  243. .vol_reg = (vol), \
  244. .isUsedable = 0, \
  245. }
  246. */
  247. #endif /* _PMIC_SW_H_ */