ab8500.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. /*
  2. * Copyright (C) ST-Ericsson SA 2010
  3. *
  4. * License Terms: GNU General Public License v2
  5. *
  6. * Authors: Sundar Iyer <sundar.iyer@stericsson.com> for ST-Ericsson
  7. * Bengt Jonsson <bengt.g.jonsson@stericsson.com> for ST-Ericsson
  8. * Daniel Willerud <daniel.willerud@stericsson.com> for ST-Ericsson
  9. */
  10. #ifndef __LINUX_MFD_AB8500_REGULATOR_H
  11. #define __LINUX_MFD_AB8500_REGULATOR_H
  12. #include <linux/platform_device.h>
  13. /* AB8500 regulators */
  14. enum ab8500_regulator_id {
  15. AB8500_LDO_AUX1,
  16. AB8500_LDO_AUX2,
  17. AB8500_LDO_AUX3,
  18. AB8500_LDO_INTCORE,
  19. AB8500_LDO_TVOUT,
  20. AB8500_LDO_AUDIO,
  21. AB8500_LDO_ANAMIC1,
  22. AB8500_LDO_ANAMIC2,
  23. AB8500_LDO_DMIC,
  24. AB8500_LDO_ANA,
  25. AB8500_NUM_REGULATORS,
  26. };
  27. /* AB8505 regulators */
  28. enum ab8505_regulator_id {
  29. AB8505_LDO_AUX1,
  30. AB8505_LDO_AUX2,
  31. AB8505_LDO_AUX3,
  32. AB8505_LDO_AUX4,
  33. AB8505_LDO_AUX5,
  34. AB8505_LDO_AUX6,
  35. AB8505_LDO_INTCORE,
  36. AB8505_LDO_ADC,
  37. AB8505_LDO_USB,
  38. AB8505_LDO_AUDIO,
  39. AB8505_LDO_ANAMIC1,
  40. AB8505_LDO_ANAMIC2,
  41. AB8505_LDO_AUX8,
  42. AB8505_LDO_ANA,
  43. AB8505_SYSCLKREQ_2,
  44. AB8505_SYSCLKREQ_4,
  45. AB8505_NUM_REGULATORS,
  46. };
  47. /* AB9540 regulators */
  48. enum ab9540_regulator_id {
  49. AB9540_LDO_AUX1,
  50. AB9540_LDO_AUX2,
  51. AB9540_LDO_AUX3,
  52. AB9540_LDO_AUX4,
  53. AB9540_LDO_INTCORE,
  54. AB9540_LDO_TVOUT,
  55. AB9540_LDO_USB,
  56. AB9540_LDO_AUDIO,
  57. AB9540_LDO_ANAMIC1,
  58. AB9540_LDO_ANAMIC2,
  59. AB9540_LDO_DMIC,
  60. AB9540_LDO_ANA,
  61. AB9540_SYSCLKREQ_2,
  62. AB9540_SYSCLKREQ_4,
  63. AB9540_NUM_REGULATORS,
  64. };
  65. /* AB8500, AB8505, and AB9540 register initialization */
  66. struct ab8500_regulator_reg_init {
  67. int id;
  68. u8 mask;
  69. u8 value;
  70. };
  71. #define INIT_REGULATOR_REGISTER(_id, _mask, _value) \
  72. { \
  73. .id = _id, \
  74. .mask = _mask, \
  75. .value = _value, \
  76. }
  77. /* AB8500 registers */
  78. enum ab8500_regulator_reg {
  79. AB8500_REGUREQUESTCTRL2,
  80. AB8500_REGUREQUESTCTRL3,
  81. AB8500_REGUREQUESTCTRL4,
  82. AB8500_REGUSYSCLKREQ1HPVALID1,
  83. AB8500_REGUSYSCLKREQ1HPVALID2,
  84. AB8500_REGUHWHPREQ1VALID1,
  85. AB8500_REGUHWHPREQ1VALID2,
  86. AB8500_REGUHWHPREQ2VALID1,
  87. AB8500_REGUHWHPREQ2VALID2,
  88. AB8500_REGUSWHPREQVALID1,
  89. AB8500_REGUSWHPREQVALID2,
  90. AB8500_REGUSYSCLKREQVALID1,
  91. AB8500_REGUSYSCLKREQVALID2,
  92. AB8500_REGUMISC1,
  93. AB8500_VAUDIOSUPPLY,
  94. AB8500_REGUCTRL1VAMIC,
  95. AB8500_VPLLVANAREGU,
  96. AB8500_VREFDDR,
  97. AB8500_EXTSUPPLYREGU,
  98. AB8500_VAUX12REGU,
  99. AB8500_VRF1VAUX3REGU,
  100. AB8500_VAUX1SEL,
  101. AB8500_VAUX2SEL,
  102. AB8500_VRF1VAUX3SEL,
  103. AB8500_REGUCTRL2SPARE,
  104. AB8500_REGUCTRLDISCH,
  105. AB8500_REGUCTRLDISCH2,
  106. AB8500_NUM_REGULATOR_REGISTERS,
  107. };
  108. /* AB8505 registers */
  109. enum ab8505_regulator_reg {
  110. AB8505_REGUREQUESTCTRL1,
  111. AB8505_REGUREQUESTCTRL2,
  112. AB8505_REGUREQUESTCTRL3,
  113. AB8505_REGUREQUESTCTRL4,
  114. AB8505_REGUSYSCLKREQ1HPVALID1,
  115. AB8505_REGUSYSCLKREQ1HPVALID2,
  116. AB8505_REGUHWHPREQ1VALID1,
  117. AB8505_REGUHWHPREQ1VALID2,
  118. AB8505_REGUHWHPREQ2VALID1,
  119. AB8505_REGUHWHPREQ2VALID2,
  120. AB8505_REGUSWHPREQVALID1,
  121. AB8505_REGUSWHPREQVALID2,
  122. AB8505_REGUSYSCLKREQVALID1,
  123. AB8505_REGUSYSCLKREQVALID2,
  124. AB8505_REGUVAUX4REQVALID,
  125. AB8505_REGUMISC1,
  126. AB8505_VAUDIOSUPPLY,
  127. AB8505_REGUCTRL1VAMIC,
  128. AB8505_VSMPSAREGU,
  129. AB8505_VSMPSBREGU,
  130. AB8505_VSAFEREGU, /* NOTE! PRCMU register */
  131. AB8505_VPLLVANAREGU,
  132. AB8505_EXTSUPPLYREGU,
  133. AB8505_VAUX12REGU,
  134. AB8505_VRF1VAUX3REGU,
  135. AB8505_VSMPSASEL1,
  136. AB8505_VSMPSASEL2,
  137. AB8505_VSMPSASEL3,
  138. AB8505_VSMPSBSEL1,
  139. AB8505_VSMPSBSEL2,
  140. AB8505_VSMPSBSEL3,
  141. AB8505_VSAFESEL1, /* NOTE! PRCMU register */
  142. AB8505_VSAFESEL2, /* NOTE! PRCMU register */
  143. AB8505_VSAFESEL3, /* NOTE! PRCMU register */
  144. AB8505_VAUX1SEL,
  145. AB8505_VAUX2SEL,
  146. AB8505_VRF1VAUX3SEL,
  147. AB8505_VAUX4REQCTRL,
  148. AB8505_VAUX4REGU,
  149. AB8505_VAUX4SEL,
  150. AB8505_REGUCTRLDISCH,
  151. AB8505_REGUCTRLDISCH2,
  152. AB8505_REGUCTRLDISCH3,
  153. AB8505_CTRLVAUX5,
  154. AB8505_CTRLVAUX6,
  155. AB8505_NUM_REGULATOR_REGISTERS,
  156. };
  157. /* AB9540 registers */
  158. enum ab9540_regulator_reg {
  159. AB9540_REGUREQUESTCTRL1,
  160. AB9540_REGUREQUESTCTRL2,
  161. AB9540_REGUREQUESTCTRL3,
  162. AB9540_REGUREQUESTCTRL4,
  163. AB9540_REGUSYSCLKREQ1HPVALID1,
  164. AB9540_REGUSYSCLKREQ1HPVALID2,
  165. AB9540_REGUHWHPREQ1VALID1,
  166. AB9540_REGUHWHPREQ1VALID2,
  167. AB9540_REGUHWHPREQ2VALID1,
  168. AB9540_REGUHWHPREQ2VALID2,
  169. AB9540_REGUSWHPREQVALID1,
  170. AB9540_REGUSWHPREQVALID2,
  171. AB9540_REGUSYSCLKREQVALID1,
  172. AB9540_REGUSYSCLKREQVALID2,
  173. AB9540_REGUVAUX4REQVALID,
  174. AB9540_REGUMISC1,
  175. AB9540_VAUDIOSUPPLY,
  176. AB9540_REGUCTRL1VAMIC,
  177. AB9540_VSMPS1REGU,
  178. AB9540_VSMPS2REGU,
  179. AB9540_VSMPS3REGU, /* NOTE! PRCMU register */
  180. AB9540_VPLLVANAREGU,
  181. AB9540_EXTSUPPLYREGU,
  182. AB9540_VAUX12REGU,
  183. AB9540_VRF1VAUX3REGU,
  184. AB9540_VSMPS1SEL1,
  185. AB9540_VSMPS1SEL2,
  186. AB9540_VSMPS1SEL3,
  187. AB9540_VSMPS2SEL1,
  188. AB9540_VSMPS2SEL2,
  189. AB9540_VSMPS2SEL3,
  190. AB9540_VSMPS3SEL1, /* NOTE! PRCMU register */
  191. AB9540_VSMPS3SEL2, /* NOTE! PRCMU register */
  192. AB9540_VAUX1SEL,
  193. AB9540_VAUX2SEL,
  194. AB9540_VRF1VAUX3SEL,
  195. AB9540_REGUCTRL2SPARE,
  196. AB9540_VAUX4REQCTRL,
  197. AB9540_VAUX4REGU,
  198. AB9540_VAUX4SEL,
  199. AB9540_REGUCTRLDISCH,
  200. AB9540_REGUCTRLDISCH2,
  201. AB9540_REGUCTRLDISCH3,
  202. AB9540_NUM_REGULATOR_REGISTERS,
  203. };
  204. /* AB8500 external regulators */
  205. struct ab8500_ext_regulator_cfg {
  206. bool hwreq; /* requires hw mode or high power mode */
  207. };
  208. enum ab8500_ext_regulator_id {
  209. AB8500_EXT_SUPPLY1,
  210. AB8500_EXT_SUPPLY2,
  211. AB8500_EXT_SUPPLY3,
  212. AB8500_NUM_EXT_REGULATORS,
  213. };
  214. /* AB8500 regulator platform data */
  215. struct ab8500_regulator_platform_data {
  216. int num_reg_init;
  217. struct ab8500_regulator_reg_init *reg_init;
  218. int num_regulator;
  219. struct regulator_init_data *regulator;
  220. int num_ext_regulator;
  221. struct regulator_init_data *ext_regulator;
  222. };
  223. /* AB8500 external regulator functions (internal) */
  224. #ifdef CONFIG_REGULATOR_AB8500_EXT
  225. int ab8500_ext_regulator_init(struct platform_device *pdev);
  226. int ab8500_ext_regulator_exit(struct platform_device *pdev);
  227. #else
  228. inline int ab8500_ext_regulator_init(struct platform_device *pdev)
  229. {
  230. return 0;
  231. }
  232. inline int ab8500_ext_regulator_exit(struct platform_device *pdev)
  233. {
  234. return 0;
  235. }
  236. #endif
  237. #ifdef CONFIG_REGULATOR_AB8500_DEBUG
  238. int ab8500_regulator_debug_init(struct platform_device *pdev);
  239. int ab8500_regulator_debug_exit(struct platform_device *pdev);
  240. #else
  241. static inline int ab8500_regulator_debug_init(struct platform_device *pdev)
  242. {
  243. return 0;
  244. }
  245. static inline int ab8500_regulator_debug_exit(struct platform_device *pdev)
  246. {
  247. return 0;
  248. }
  249. #endif
  250. #endif