ab8500.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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. */
  9. #ifndef __LINUX_MFD_AB8500_REGULATOR_H
  10. #define __LINUX_MFD_AB8500_REGULATOR_H
  11. #include <linux/platform_device.h>
  12. /* AB8500 regulators */
  13. enum ab8500_regulator_id {
  14. AB8500_LDO_AUX1,
  15. AB8500_LDO_AUX2,
  16. AB8500_LDO_AUX3,
  17. AB8500_LDO_INTCORE,
  18. AB8500_LDO_TVOUT,
  19. AB8500_LDO_AUDIO,
  20. AB8500_LDO_ANAMIC1,
  21. AB8500_LDO_ANAMIC2,
  22. AB8500_LDO_DMIC,
  23. AB8500_LDO_ANA,
  24. AB8500_NUM_REGULATORS,
  25. };
  26. /* AB9450 regulators */
  27. enum ab9540_regulator_id {
  28. AB9540_LDO_AUX1,
  29. AB9540_LDO_AUX2,
  30. AB9540_LDO_AUX3,
  31. AB9540_LDO_AUX4,
  32. AB9540_LDO_INTCORE,
  33. AB9540_LDO_TVOUT,
  34. AB9540_LDO_USB,
  35. AB9540_LDO_AUDIO,
  36. AB9540_LDO_ANAMIC1,
  37. AB9540_LDO_ANAMIC2,
  38. AB9540_LDO_DMIC,
  39. AB9540_LDO_ANA,
  40. AB9540_SYSCLKREQ_2,
  41. AB9540_SYSCLKREQ_4,
  42. AB9540_NUM_REGULATORS,
  43. };
  44. /* AB8500 and AB9540 register initialization */
  45. struct ab8500_regulator_reg_init {
  46. int id;
  47. u8 mask;
  48. u8 value;
  49. };
  50. #define INIT_REGULATOR_REGISTER(_id, _mask, _value) \
  51. { \
  52. .id = _id, \
  53. .mask = _mask, \
  54. .value = _value, \
  55. }
  56. /* AB8500 registers */
  57. enum ab8500_regulator_reg {
  58. AB8500_REGUREQUESTCTRL2,
  59. AB8500_REGUREQUESTCTRL3,
  60. AB8500_REGUREQUESTCTRL4,
  61. AB8500_REGUSYSCLKREQ1HPVALID1,
  62. AB8500_REGUSYSCLKREQ1HPVALID2,
  63. AB8500_REGUHWHPREQ1VALID1,
  64. AB8500_REGUHWHPREQ1VALID2,
  65. AB8500_REGUHWHPREQ2VALID1,
  66. AB8500_REGUHWHPREQ2VALID2,
  67. AB8500_REGUSWHPREQVALID1,
  68. AB8500_REGUSWHPREQVALID2,
  69. AB8500_REGUSYSCLKREQVALID1,
  70. AB8500_REGUSYSCLKREQVALID2,
  71. AB8500_REGUMISC1,
  72. AB8500_VAUDIOSUPPLY,
  73. AB8500_REGUCTRL1VAMIC,
  74. AB8500_VPLLVANAREGU,
  75. AB8500_VREFDDR,
  76. AB8500_EXTSUPPLYREGU,
  77. AB8500_VAUX12REGU,
  78. AB8500_VRF1VAUX3REGU,
  79. AB8500_VAUX1SEL,
  80. AB8500_VAUX2SEL,
  81. AB8500_VRF1VAUX3SEL,
  82. AB8500_REGUCTRL2SPARE,
  83. AB8500_REGUCTRLDISCH,
  84. AB8500_REGUCTRLDISCH2,
  85. AB8500_NUM_REGULATOR_REGISTERS,
  86. };
  87. /* AB9540 registers */
  88. enum ab9540_regulator_reg {
  89. AB9540_REGUREQUESTCTRL1,
  90. AB9540_REGUREQUESTCTRL2,
  91. AB9540_REGUREQUESTCTRL3,
  92. AB9540_REGUREQUESTCTRL4,
  93. AB9540_REGUSYSCLKREQ1HPVALID1,
  94. AB9540_REGUSYSCLKREQ1HPVALID2,
  95. AB9540_REGUHWHPREQ1VALID1,
  96. AB9540_REGUHWHPREQ1VALID2,
  97. AB9540_REGUHWHPREQ2VALID1,
  98. AB9540_REGUHWHPREQ2VALID2,
  99. AB9540_REGUSWHPREQVALID1,
  100. AB9540_REGUSWHPREQVALID2,
  101. AB9540_REGUSYSCLKREQVALID1,
  102. AB9540_REGUSYSCLKREQVALID2,
  103. AB9540_REGUVAUX4REQVALID,
  104. AB9540_REGUMISC1,
  105. AB9540_VAUDIOSUPPLY,
  106. AB9540_REGUCTRL1VAMIC,
  107. AB9540_VSMPS1REGU,
  108. AB9540_VSMPS2REGU,
  109. AB9540_VSMPS3REGU, /* NOTE! PRCMU register */
  110. AB9540_VPLLVANAREGU,
  111. AB9540_EXTSUPPLYREGU,
  112. AB9540_VAUX12REGU,
  113. AB9540_VRF1VAUX3REGU,
  114. AB9540_VSMPS1SEL1,
  115. AB9540_VSMPS1SEL2,
  116. AB9540_VSMPS1SEL3,
  117. AB9540_VSMPS2SEL1,
  118. AB9540_VSMPS2SEL2,
  119. AB9540_VSMPS2SEL3,
  120. AB9540_VSMPS3SEL1, /* NOTE! PRCMU register */
  121. AB9540_VSMPS3SEL2, /* NOTE! PRCMU register */
  122. AB9540_VAUX1SEL,
  123. AB9540_VAUX2SEL,
  124. AB9540_VRF1VAUX3SEL,
  125. AB9540_REGUCTRL2SPARE,
  126. AB9540_VAUX4REQCTRL,
  127. AB9540_VAUX4REGU,
  128. AB9540_VAUX4SEL,
  129. AB9540_REGUCTRLDISCH,
  130. AB9540_REGUCTRLDISCH2,
  131. AB9540_REGUCTRLDISCH3,
  132. AB9540_NUM_REGULATOR_REGISTERS,
  133. };
  134. /* AB8500 external regulators */
  135. struct ab8500_ext_regulator_cfg {
  136. bool hwreq; /* requires hw mode or high power mode */
  137. };
  138. enum ab8500_ext_regulator_id {
  139. AB8500_EXT_SUPPLY1,
  140. AB8500_EXT_SUPPLY2,
  141. AB8500_EXT_SUPPLY3,
  142. AB8500_NUM_EXT_REGULATORS,
  143. };
  144. /* AB8500 regulator platform data */
  145. struct ab8500_regulator_platform_data {
  146. int num_reg_init;
  147. struct ab8500_regulator_reg_init *reg_init;
  148. int num_regulator;
  149. struct regulator_init_data *regulator;
  150. int num_ext_regulator;
  151. struct regulator_init_data *ext_regulator;
  152. };
  153. /* AB8500 external regulator functions (internal) */
  154. #ifdef CONFIG_REGULATOR_AB8500_EXT
  155. int ab8500_ext_regulator_init(struct platform_device *pdev);
  156. int ab8500_ext_regulator_exit(struct platform_device *pdev);
  157. #else
  158. inline int ab8500_ext_regulator_init(struct platform_device *pdev)
  159. {
  160. return 0;
  161. }
  162. inline int ab8500_ext_regulator_exit(struct platform_device *pdev)
  163. {
  164. return 0;
  165. }
  166. #endif
  167. #endif