board-msm7627-regulator.c 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. /*
  2. * Copyright (c) 2011, The Linux Foundation. All rights reserved.
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License version 2 and
  6. * only version 2 as published by the Free Software Foundation.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. */
  13. #include "board-msm7627-regulator.h"
  14. #define PCOM_VREG_CONSUMERS(name) \
  15. static struct regulator_consumer_supply __pcom_vreg_supply_##name[]
  16. #define PCOM_VREG_CONSTRAINT_LVSW(_name, _always_on, _boot_on, _supply_uV) \
  17. { \
  18. .name = #_name, \
  19. .min_uV = 0, \
  20. .max_uV = 0, \
  21. .input_uV = _supply_uV, \
  22. .valid_modes_mask = REGULATOR_MODE_NORMAL, \
  23. .valid_ops_mask = REGULATOR_CHANGE_STATUS, \
  24. .apply_uV = 0, \
  25. .boot_on = _boot_on, \
  26. .always_on = _always_on \
  27. }
  28. #define PCOM_VREG_CONSTRAINT_DYN(_name, _min_uV, _max_uV, _always_on, \
  29. _boot_on, _apply_uV, _supply_uV) \
  30. { \
  31. .name = #_name, \
  32. .min_uV = _min_uV, \
  33. .max_uV = _max_uV, \
  34. .valid_modes_mask = REGULATOR_MODE_NORMAL, \
  35. .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS, \
  36. .input_uV = _supply_uV, \
  37. .apply_uV = _apply_uV, \
  38. .boot_on = _boot_on, \
  39. .always_on = _always_on \
  40. }
  41. #define PCOM_VREG_INIT(_name, _supply, _constraints)\
  42. { \
  43. .supply_regulator = _supply, \
  44. .consumer_supplies = __pcom_vreg_supply_##_name, \
  45. .num_consumer_supplies = ARRAY_SIZE(__pcom_vreg_supply_##_name), \
  46. .constraints = _constraints \
  47. }
  48. #define PCOM_VREG_SMP(_name, _id, _supply, _min_uV, _max_uV, _rise_time, \
  49. _pulldown, _always_on, _boot_on, _apply_uV, _supply_uV) \
  50. { \
  51. .init_data = PCOM_VREG_INIT(_name, _supply, \
  52. PCOM_VREG_CONSTRAINT_DYN(_name, _min_uV, _max_uV, _always_on, \
  53. _boot_on, _apply_uV, _supply_uV)), \
  54. .id = _id, \
  55. .rise_time = _rise_time, \
  56. .pulldown = _pulldown, \
  57. .negative = 0, \
  58. }
  59. #define PCOM_VREG_LDO PCOM_VREG_SMP
  60. PCOM_VREG_CONSUMERS(smps0) = {
  61. REGULATOR_SUPPLY("smps0", NULL),
  62. REGULATOR_SUPPLY("msmc1", NULL),
  63. };
  64. PCOM_VREG_CONSUMERS(smps1) = {
  65. REGULATOR_SUPPLY("smps1", NULL),
  66. REGULATOR_SUPPLY("msmc2", NULL),
  67. };
  68. PCOM_VREG_CONSUMERS(smps2) = {
  69. REGULATOR_SUPPLY("smps2", NULL),
  70. REGULATOR_SUPPLY("pa", NULL),
  71. };
  72. PCOM_VREG_CONSUMERS(smps3) = {
  73. REGULATOR_SUPPLY("smps3", NULL),
  74. REGULATOR_SUPPLY("msme1", NULL),
  75. };
  76. PCOM_VREG_CONSUMERS(ldo00) = {
  77. REGULATOR_SUPPLY("ldo00", NULL),
  78. REGULATOR_SUPPLY("gp3", NULL),
  79. };
  80. PCOM_VREG_CONSUMERS(ldo01) = {
  81. REGULATOR_SUPPLY("ldo01", NULL),
  82. REGULATOR_SUPPLY("msma", NULL),
  83. };
  84. PCOM_VREG_CONSUMERS(ldo02) = {
  85. REGULATOR_SUPPLY("ldo02", NULL),
  86. REGULATOR_SUPPLY("msmp", NULL),
  87. };
  88. PCOM_VREG_CONSUMERS(ldo03) = {
  89. REGULATOR_SUPPLY("ldo03", NULL),
  90. REGULATOR_SUPPLY("ruim", NULL),
  91. };
  92. PCOM_VREG_CONSUMERS(ldo04) = {
  93. REGULATOR_SUPPLY("ldo04", NULL),
  94. REGULATOR_SUPPLY("tcxo", NULL),
  95. };
  96. PCOM_VREG_CONSUMERS(ldo05) = {
  97. REGULATOR_SUPPLY("ldo05", NULL),
  98. REGULATOR_SUPPLY("mmc", NULL),
  99. };
  100. PCOM_VREG_CONSUMERS(ldo06) = {
  101. REGULATOR_SUPPLY("ldo06", NULL),
  102. REGULATOR_SUPPLY("usb", NULL),
  103. };
  104. PCOM_VREG_CONSUMERS(ldo07) = {
  105. REGULATOR_SUPPLY("ldo07", NULL),
  106. REGULATOR_SUPPLY("rfrx1", NULL),
  107. };
  108. PCOM_VREG_CONSUMERS(ldo08) = {
  109. REGULATOR_SUPPLY("ldo08", NULL),
  110. REGULATOR_SUPPLY("synt", NULL),
  111. };
  112. PCOM_VREG_CONSUMERS(ldo09) = {
  113. REGULATOR_SUPPLY("ldo09", NULL),
  114. REGULATOR_SUPPLY("gp1", NULL),
  115. };
  116. PCOM_VREG_CONSUMERS(ldo10) = {
  117. REGULATOR_SUPPLY("ldo10", NULL),
  118. REGULATOR_SUPPLY("gp4", NULL),
  119. };
  120. PCOM_VREG_CONSUMERS(ldo11) = {
  121. REGULATOR_SUPPLY("ldo11", NULL),
  122. REGULATOR_SUPPLY("gp2", NULL),
  123. };
  124. PCOM_VREG_CONSUMERS(ldo12) = {
  125. REGULATOR_SUPPLY("ldo12", NULL),
  126. REGULATOR_SUPPLY("rftx", NULL),
  127. };
  128. PCOM_VREG_CONSUMERS(ldo13) = {
  129. REGULATOR_SUPPLY("ldo13", NULL),
  130. REGULATOR_SUPPLY("wlan", NULL),
  131. };
  132. PCOM_VREG_CONSUMERS(ldo14) = {
  133. REGULATOR_SUPPLY("ldo14", NULL),
  134. REGULATOR_SUPPLY("rf", NULL),
  135. };
  136. PCOM_VREG_CONSUMERS(ldo15) = {
  137. REGULATOR_SUPPLY("ldo15", NULL),
  138. REGULATOR_SUPPLY("gp6", NULL),
  139. };
  140. PCOM_VREG_CONSUMERS(ldo16) = {
  141. REGULATOR_SUPPLY("ldo16", NULL),
  142. REGULATOR_SUPPLY("gp5", NULL),
  143. };
  144. PCOM_VREG_CONSUMERS(ldo17) = {
  145. REGULATOR_SUPPLY("ldo17", NULL),
  146. REGULATOR_SUPPLY("msme2", NULL),
  147. };
  148. /**
  149. * Minimum and Maximum range for the regulators is as per the
  150. * device Datasheet. Actual value used by consumer is between
  151. * the provided range.
  152. */
  153. static struct proccomm_regulator_info msm7627_pcom_vreg_info[] = {
  154. /* Standard regulators (SMPS and LDO)
  155. * R = rise time (us)
  156. * P = pulldown (1 = pull down, 0 = float, -1 = don't care)
  157. * A = always on
  158. * B = boot on
  159. * V = automatic voltage set (meaningful for single-voltage regs only)
  160. * S = supply voltage (uV)
  161. * name id supp min uV max uV R P A B V S */
  162. PCOM_VREG_SMP(smps0, 3, NULL, 750000, 3050000, 0, -1, 0, 0, 0, 0),
  163. PCOM_VREG_SMP(smps1, 4, NULL, 750000, 3050000, 0, -1, 0, 0, 0, 0),
  164. PCOM_VREG_SMP(smps2, 10, NULL, 750000, 3050000, 0, -1, 0, 0, 0, 0),
  165. PCOM_VREG_SMP(smps3, 2, NULL, 750000, 3050000, 0, -1, 0, 0, 0, 0),
  166. PCOM_VREG_LDO(ldo00, 5, NULL, 2850000, 2850000, 0, -1, 0, 0, 0, 0),
  167. PCOM_VREG_LDO(ldo01, 0, NULL, 2600000, 2600000, 0, -1, 0, 0, 0, 0),
  168. PCOM_VREG_LDO(ldo02, 1, NULL, 2600000, 2600000, 0, -1, 0, 0, 0, 0),
  169. PCOM_VREG_LDO(ldo03, 19, NULL, 2850000, 2850000, 0, -1, 0, 0, 0, 0),
  170. PCOM_VREG_LDO(ldo04, 9, NULL, 2850000, 2850000, 0, -1, 0, 0, 0, 0),
  171. PCOM_VREG_LDO(ldo05, 18, NULL, 2850000, 2850000, 0, -1, 0, 0, 0, 0),
  172. PCOM_VREG_LDO(ldo06, 16, NULL, 3300000, 3300000, 0, -1, 0, 0, 0, 0),
  173. PCOM_VREG_LDO(ldo07, 12, NULL, 2700000, 2700000, 0, -1, 0, 0, 0, 0),
  174. PCOM_VREG_LDO(ldo08, 14, NULL, 2700000, 2700000, 0, -1, 0, 0, 0, 0),
  175. PCOM_VREG_LDO(ldo09, 8, NULL, 2900000, 2900000, 0, -1, 0, 0, 0, 0),
  176. PCOM_VREG_LDO(ldo10, 7, NULL, 2600000, 2600000, 0, -1, 0, 0, 0, 0),
  177. PCOM_VREG_LDO(ldo11, 21, NULL, 1800000, 1800000, 0, -1, 0, 0, 0, 0),
  178. PCOM_VREG_LDO(ldo12, 11, NULL, 1800000, 1800000, 0, -1, 0, 0, 0, 0),
  179. PCOM_VREG_LDO(ldo13, 15, NULL, 1800000, 2850000, 0, -1, 0, 0, 0, 0),
  180. PCOM_VREG_LDO(ldo14, 24, NULL, 2700000, 2700000, 0, -1, 0, 0, 0, 0),
  181. PCOM_VREG_LDO(ldo15, 23, NULL, 2600000, 2600000, 0, -1, 0, 0, 0, 0),
  182. PCOM_VREG_LDO(ldo16, 22, NULL, 2850000, 3000000, 0, -1, 0, 0, 0, 0),
  183. PCOM_VREG_LDO(ldo17, 6, NULL, 1300000, 1300000, 0, -1, 0, 0, 0, 0),
  184. };
  185. struct proccomm_regulator_platform_data msm7627_proccomm_regulator_data = {
  186. .regs = msm7627_pcom_vreg_info,
  187. .nregs = ARRAY_SIZE(msm7627_pcom_vreg_info)
  188. };