/arch/arm/mach-msm/board-8930-regulator-pm8038.c

https://github.com/AICP/kernel_google_msm · C · 585 lines · 514 code · 36 blank · 35 comment · 0 complexity · adb8e31392c9510749fb3a916ab66e3e MD5 · raw file

  1. /*
  2. * Copyright (c) 2011-2012, 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. /*
  14. * This file contains regulator configuration and mappings for targets
  15. * consisting of MSM8930 and PM8038.
  16. */
  17. #include <linux/regulator/pm8xxx-regulator.h>
  18. #include "board-8930.h"
  19. #define VREG_CONSUMERS(_id) \
  20. static struct regulator_consumer_supply vreg_consumers_##_id[]
  21. /*
  22. * Consumer specific regulator names:
  23. * regulator name consumer dev_name
  24. */
  25. VREG_CONSUMERS(L1) = {
  26. REGULATOR_SUPPLY("8038_l1", NULL),
  27. REGULATOR_SUPPLY("iris_vddrfa", "wcnss_wlan.0"),
  28. };
  29. VREG_CONSUMERS(L2) = {
  30. REGULATOR_SUPPLY("8038_l2", NULL),
  31. REGULATOR_SUPPLY("iris_vdddig", "wcnss_wlan.0"),
  32. REGULATOR_SUPPLY("dsi_vdda", "mipi_dsi.1"),
  33. REGULATOR_SUPPLY("mipi_csi_vdd", "msm_csid.0"),
  34. REGULATOR_SUPPLY("mipi_csi_vdd", "msm_csid.1"),
  35. REGULATOR_SUPPLY("mipi_csi_vdd", "msm_csid.2"),
  36. };
  37. VREG_CONSUMERS(L3) = {
  38. REGULATOR_SUPPLY("8038_l3", NULL),
  39. REGULATOR_SUPPLY("HSUSB_3p3", "msm_otg"),
  40. };
  41. VREG_CONSUMERS(L4) = {
  42. REGULATOR_SUPPLY("8038_l4", NULL),
  43. REGULATOR_SUPPLY("HSUSB_1p8", "msm_otg"),
  44. REGULATOR_SUPPLY("iris_vddxo", "wcnss_wlan.0"),
  45. };
  46. VREG_CONSUMERS(L5) = {
  47. REGULATOR_SUPPLY("8038_l5", NULL),
  48. REGULATOR_SUPPLY("sdc_vdd", "msm_sdcc.1"),
  49. };
  50. VREG_CONSUMERS(L6) = {
  51. REGULATOR_SUPPLY("8038_l6", NULL),
  52. REGULATOR_SUPPLY("sdc_vdd", "msm_sdcc.3"),
  53. };
  54. VREG_CONSUMERS(L7) = {
  55. REGULATOR_SUPPLY("8038_l7", NULL),
  56. };
  57. VREG_CONSUMERS(L8) = {
  58. REGULATOR_SUPPLY("8038_l8", NULL),
  59. REGULATOR_SUPPLY("dsi_vdc", "mipi_dsi.1"),
  60. };
  61. VREG_CONSUMERS(L9) = {
  62. REGULATOR_SUPPLY("8038_l9", NULL),
  63. REGULATOR_SUPPLY("vdd_ana", "3-004a"),
  64. REGULATOR_SUPPLY("vdd", "3-0024"),
  65. REGULATOR_SUPPLY("cam_vana", "4-001a"),
  66. REGULATOR_SUPPLY("cam_vana", "4-006c"),
  67. REGULATOR_SUPPLY("cam_vana", "4-0048"),
  68. REGULATOR_SUPPLY("cam_vaf", "4-001a"),
  69. REGULATOR_SUPPLY("cam_vaf", "4-006c"),
  70. REGULATOR_SUPPLY("cam_vaf", "4-0048"),
  71. REGULATOR_SUPPLY("cam_vana", "4-0020"),
  72. REGULATOR_SUPPLY("cam_vaf", "4-0020"),
  73. REGULATOR_SUPPLY("vdd", "12-0018"),
  74. REGULATOR_SUPPLY("vdd", "12-0068"),
  75. };
  76. VREG_CONSUMERS(L10) = {
  77. REGULATOR_SUPPLY("8038_l10", NULL),
  78. REGULATOR_SUPPLY("iris_vddpa", "wcnss_wlan.0"),
  79. };
  80. VREG_CONSUMERS(L11) = {
  81. REGULATOR_SUPPLY("8038_l11", NULL),
  82. REGULATOR_SUPPLY("vdd_dig", "3-004a"),
  83. REGULATOR_SUPPLY("iris_vddio", "wcnss_wlan.0"),
  84. REGULATOR_SUPPLY("riva_vddpx", "wcnss_wlan.0"),
  85. REGULATOR_SUPPLY("sdc_vdd_io", "msm_sdcc.1"),
  86. REGULATOR_SUPPLY("VDDIO_CDC", "sitar-slim"),
  87. REGULATOR_SUPPLY("CDC_VDDA_TX", "sitar-slim"),
  88. REGULATOR_SUPPLY("CDC_VDDA_RX", "sitar-slim"),
  89. REGULATOR_SUPPLY("VDDIO_CDC", "sitar1p1-slim"),
  90. REGULATOR_SUPPLY("CDC_VDDA_TX", "sitar1p1-slim"),
  91. REGULATOR_SUPPLY("CDC_VDDA_RX", "sitar1p1-slim"),
  92. REGULATOR_SUPPLY("vddp", "0-0048"),
  93. REGULATOR_SUPPLY("mhl_iovcc18", "0-0039"),
  94. };
  95. VREG_CONSUMERS(L12) = {
  96. REGULATOR_SUPPLY("8038_l12", NULL),
  97. REGULATOR_SUPPLY("cam_vdig", "4-001a"),
  98. REGULATOR_SUPPLY("cam_vdig", "4-006c"),
  99. REGULATOR_SUPPLY("cam_vdig", "4-0048"),
  100. REGULATOR_SUPPLY("cam_vdig", "4-0020"),
  101. };
  102. VREG_CONSUMERS(L13) = {
  103. REGULATOR_SUPPLY("8038_l13", NULL),
  104. };
  105. VREG_CONSUMERS(L14) = {
  106. REGULATOR_SUPPLY("8038_l14", NULL),
  107. REGULATOR_SUPPLY("pa_therm", "pm8xxx-adc"),
  108. };
  109. VREG_CONSUMERS(L15) = {
  110. REGULATOR_SUPPLY("8038_l15", NULL),
  111. };
  112. VREG_CONSUMERS(L16) = {
  113. REGULATOR_SUPPLY("8038_l16", NULL),
  114. REGULATOR_SUPPLY("core_vdd", "pil_qdsp6v4.2"),
  115. };
  116. VREG_CONSUMERS(L17) = {
  117. REGULATOR_SUPPLY("8038_l17", NULL),
  118. };
  119. VREG_CONSUMERS(L18) = {
  120. REGULATOR_SUPPLY("8038_l18", NULL),
  121. };
  122. VREG_CONSUMERS(L19) = {
  123. REGULATOR_SUPPLY("8038_l19", NULL),
  124. REGULATOR_SUPPLY("core_vdd", "pil_qdsp6v4.1"),
  125. };
  126. VREG_CONSUMERS(L20) = {
  127. REGULATOR_SUPPLY("8038_l20", NULL),
  128. REGULATOR_SUPPLY("VDDD_CDC_D", "sitar-slim"),
  129. REGULATOR_SUPPLY("CDC_VDDA_A_1P2V", "sitar-slim"),
  130. REGULATOR_SUPPLY("VDDD_CDC_D", "sitar1p1-slim"),
  131. REGULATOR_SUPPLY("CDC_VDDA_A_1P2V", "sitar1p1-slim"),
  132. REGULATOR_SUPPLY("mhl_avcc12", "0-0039"),
  133. };
  134. VREG_CONSUMERS(L21) = {
  135. REGULATOR_SUPPLY("8038_l21", NULL),
  136. };
  137. VREG_CONSUMERS(L22) = {
  138. REGULATOR_SUPPLY("8038_l22", NULL),
  139. REGULATOR_SUPPLY("sdc_vdd_io", "msm_sdcc.3"),
  140. };
  141. VREG_CONSUMERS(L23) = {
  142. REGULATOR_SUPPLY("8038_l23", NULL),
  143. REGULATOR_SUPPLY("dsi_vddio", "mipi_dsi.1"),
  144. REGULATOR_SUPPLY("hdmi_avdd", "hdmi_msm.0"),
  145. REGULATOR_SUPPLY("hdmi_vcc", "hdmi_msm.0"),
  146. REGULATOR_SUPPLY("pll_vdd", "pil_riva"),
  147. REGULATOR_SUPPLY("pll_vdd", "pil_qdsp6v4.1"),
  148. REGULATOR_SUPPLY("pll_vdd", "pil_qdsp6v4.2"),
  149. };
  150. VREG_CONSUMERS(L24) = {
  151. REGULATOR_SUPPLY("8038_l24", NULL),
  152. REGULATOR_SUPPLY("riva_vddmx", "wcnss_wlan.0"),
  153. };
  154. VREG_CONSUMERS(L25) = {
  155. REGULATOR_SUPPLY("8038_l25", NULL),
  156. };
  157. VREG_CONSUMERS(L26) = {
  158. REGULATOR_SUPPLY("8038_l26", NULL),
  159. };
  160. VREG_CONSUMERS(L27) = {
  161. REGULATOR_SUPPLY("8038_l27", NULL),
  162. REGULATOR_SUPPLY("core_vdd", "pil_qdsp6v4.0"),
  163. };
  164. VREG_CONSUMERS(S1) = {
  165. REGULATOR_SUPPLY("8038_s1", NULL),
  166. REGULATOR_SUPPLY("riva_vddcx", "wcnss_wlan.0"),
  167. };
  168. VREG_CONSUMERS(S2) = {
  169. REGULATOR_SUPPLY("8038_s2", NULL),
  170. };
  171. VREG_CONSUMERS(S3) = {
  172. REGULATOR_SUPPLY("8038_s3", NULL),
  173. };
  174. VREG_CONSUMERS(S4) = {
  175. REGULATOR_SUPPLY("8038_s4", NULL),
  176. REGULATOR_SUPPLY("CDC_VDD_CP", "sitar-slim"),
  177. REGULATOR_SUPPLY("CDC_VDD_CP", "sitar1p1-slim"),
  178. };
  179. VREG_CONSUMERS(S5) = {
  180. REGULATOR_SUPPLY("8038_s5", NULL),
  181. REGULATOR_SUPPLY("krait0", "acpuclk-8627"),
  182. REGULATOR_SUPPLY("krait0", "acpuclk-8930"),
  183. REGULATOR_SUPPLY("krait0", "acpuclk-8930aa"),
  184. REGULATOR_SUPPLY("krait0", "acpuclk-8930ab"),
  185. };
  186. VREG_CONSUMERS(S6) = {
  187. REGULATOR_SUPPLY("8038_s6", NULL),
  188. REGULATOR_SUPPLY("krait1", "acpuclk-8627"),
  189. REGULATOR_SUPPLY("krait1", "acpuclk-8930"),
  190. REGULATOR_SUPPLY("krait1", "acpuclk-8930aa"),
  191. REGULATOR_SUPPLY("krait1", "acpuclk-8930ab"),
  192. };
  193. VREG_CONSUMERS(LVS1) = {
  194. REGULATOR_SUPPLY("8038_lvs1", NULL),
  195. REGULATOR_SUPPLY("cam_vio", "4-001a"),
  196. REGULATOR_SUPPLY("cam_vio", "4-006c"),
  197. REGULATOR_SUPPLY("cam_vio", "4-0048"),
  198. REGULATOR_SUPPLY("cam_vio", "4-0020"),
  199. };
  200. VREG_CONSUMERS(LVS2) = {
  201. REGULATOR_SUPPLY("8038_lvs2", NULL),
  202. REGULATOR_SUPPLY("vcc_i2c", "3-004a"),
  203. REGULATOR_SUPPLY("vcc_i2c", "3-0024"),
  204. REGULATOR_SUPPLY("vcc_i2c", "0-0048"),
  205. REGULATOR_SUPPLY("vddio", "12-0018"),
  206. REGULATOR_SUPPLY("vlogic", "12-0068"),
  207. };
  208. VREG_CONSUMERS(EXT_5V) = {
  209. REGULATOR_SUPPLY("ext_5v", NULL),
  210. REGULATOR_SUPPLY("hdmi_mvs", "hdmi_msm.0"),
  211. REGULATOR_SUPPLY("mhl_usb_hs_switch", "msm_otg"),
  212. };
  213. VREG_CONSUMERS(EXT_OTG_SW) = {
  214. REGULATOR_SUPPLY("ext_otg_sw", NULL),
  215. REGULATOR_SUPPLY("vbus_otg", "msm_otg"),
  216. };
  217. VREG_CONSUMERS(VDD_DIG_CORNER) = {
  218. REGULATOR_SUPPLY("vdd_dig_corner", NULL),
  219. REGULATOR_SUPPLY("hsusb_vdd_dig", "msm_otg"),
  220. };
  221. #define PM8XXX_VREG_INIT(_id, _name, _min_uV, _max_uV, _modes, _ops, \
  222. _apply_uV, _pull_down, _always_on, _supply_regulator, \
  223. _system_uA, _enable_time, _reg_id) \
  224. { \
  225. .init_data = { \
  226. .constraints = { \
  227. .valid_modes_mask = _modes, \
  228. .valid_ops_mask = _ops, \
  229. .min_uV = _min_uV, \
  230. .max_uV = _max_uV, \
  231. .input_uV = _max_uV, \
  232. .apply_uV = _apply_uV, \
  233. .always_on = _always_on, \
  234. .name = _name, \
  235. }, \
  236. .num_consumer_supplies = \
  237. ARRAY_SIZE(vreg_consumers_##_id), \
  238. .consumer_supplies = vreg_consumers_##_id, \
  239. .supply_regulator = _supply_regulator, \
  240. }, \
  241. .id = _reg_id, \
  242. .pull_down_enable = _pull_down, \
  243. .system_uA = _system_uA, \
  244. .enable_time = _enable_time, \
  245. }
  246. #define PM8XXX_LDO(_id, _name, _always_on, _pull_down, _min_uV, _max_uV, \
  247. _enable_time, _supply_regulator, _system_uA, _reg_id) \
  248. PM8XXX_VREG_INIT(_id, _name, _min_uV, _max_uV, REGULATOR_MODE_NORMAL \
  249. | REGULATOR_MODE_IDLE, REGULATOR_CHANGE_VOLTAGE | \
  250. REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_MODE | \
  251. REGULATOR_CHANGE_DRMS, 0, _pull_down, _always_on, \
  252. _supply_regulator, _system_uA, _enable_time, _reg_id)
  253. #define PM8XXX_NLDO1200(_id, _name, _always_on, _pull_down, _min_uV, \
  254. _max_uV, _enable_time, _supply_regulator, _system_uA, _reg_id) \
  255. PM8XXX_VREG_INIT(_id, _name, _min_uV, _max_uV, REGULATOR_MODE_NORMAL \
  256. | REGULATOR_MODE_IDLE, REGULATOR_CHANGE_VOLTAGE | \
  257. REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_MODE | \
  258. REGULATOR_CHANGE_DRMS, 0, _pull_down, _always_on, \
  259. _supply_regulator, _system_uA, _enable_time, _reg_id)
  260. #define PM8XXX_SMPS(_id, _name, _always_on, _pull_down, _min_uV, _max_uV, \
  261. _enable_time, _supply_regulator, _system_uA, _reg_id) \
  262. PM8XXX_VREG_INIT(_id, _name, _min_uV, _max_uV, REGULATOR_MODE_NORMAL \
  263. | REGULATOR_MODE_IDLE, REGULATOR_CHANGE_VOLTAGE | \
  264. REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_MODE | \
  265. REGULATOR_CHANGE_DRMS, 0, _pull_down, _always_on, \
  266. _supply_regulator, _system_uA, _enable_time, _reg_id)
  267. #define PM8XXX_FTSMPS(_id, _name, _always_on, _pull_down, _min_uV, _max_uV, \
  268. _enable_time, _supply_regulator, _system_uA, _reg_id) \
  269. PM8XXX_VREG_INIT(_id, _name, _min_uV, _max_uV, REGULATOR_MODE_NORMAL, \
  270. REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS \
  271. | REGULATOR_CHANGE_MODE, 0, _pull_down, _always_on, \
  272. _supply_regulator, _system_uA, _enable_time, _reg_id)
  273. #define PM8XXX_VS(_id, _name, _always_on, _pull_down, _enable_time, \
  274. _supply_regulator, _reg_id) \
  275. PM8XXX_VREG_INIT(_id, _name, 0, 0, 0, REGULATOR_CHANGE_STATUS, 0, \
  276. _pull_down, _always_on, _supply_regulator, 0, _enable_time, \
  277. _reg_id)
  278. #define PM8XXX_VS300(_id, _name, _always_on, _pull_down, _enable_time, \
  279. _supply_regulator, _reg_id) \
  280. PM8XXX_VREG_INIT(_id, _name, 0, 0, 0, REGULATOR_CHANGE_STATUS, 0, \
  281. _pull_down, _always_on, _supply_regulator, 0, _enable_time, \
  282. _reg_id)
  283. #define PM8XXX_NCP(_id, _name, _always_on, _min_uV, _max_uV, _enable_time, \
  284. _supply_regulator, _reg_id) \
  285. PM8XXX_VREG_INIT(_id, _name, _min_uV, _max_uV, 0, \
  286. REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS, 0, 0, \
  287. _always_on, _supply_regulator, 0, _enable_time, _reg_id)
  288. /* Pin control initialization */
  289. #define PM8XXX_PC(_id, _name, _always_on, _pin_fn, _pin_ctrl, \
  290. _supply_regulator, _reg_id) \
  291. { \
  292. .init_data = { \
  293. .constraints = { \
  294. .valid_ops_mask = REGULATOR_CHANGE_STATUS, \
  295. .always_on = _always_on, \
  296. .name = _name, \
  297. }, \
  298. .num_consumer_supplies = \
  299. ARRAY_SIZE(vreg_consumers_##_id##_PC), \
  300. .consumer_supplies = vreg_consumers_##_id##_PC, \
  301. .supply_regulator = _supply_regulator, \
  302. }, \
  303. .id = _reg_id, \
  304. .pin_fn = PM8XXX_VREG_PIN_FN_##_pin_fn, \
  305. .pin_ctrl = _pin_ctrl, \
  306. }
  307. #define RPM_INIT(_id, _min_uV, _max_uV, _modes, _ops, _apply_uV, _default_uV, \
  308. _peak_uA, _avg_uA, _pull_down, _pin_ctrl, _freq, _pin_fn, \
  309. _force_mode, _sleep_set_force_mode, _power_mode, _state, \
  310. _sleep_selectable, _always_on, _supply_regulator, _system_uA) \
  311. { \
  312. .init_data = { \
  313. .constraints = { \
  314. .valid_modes_mask = _modes, \
  315. .valid_ops_mask = _ops, \
  316. .min_uV = _min_uV, \
  317. .max_uV = _max_uV, \
  318. .input_uV = _min_uV, \
  319. .apply_uV = _apply_uV, \
  320. .always_on = _always_on, \
  321. }, \
  322. .num_consumer_supplies = \
  323. ARRAY_SIZE(vreg_consumers_##_id), \
  324. .consumer_supplies = vreg_consumers_##_id, \
  325. .supply_regulator = _supply_regulator, \
  326. }, \
  327. .id = RPM_VREG_ID_PM8038_##_id, \
  328. .default_uV = _default_uV, \
  329. .peak_uA = _peak_uA, \
  330. .avg_uA = _avg_uA, \
  331. .pull_down_enable = _pull_down, \
  332. .pin_ctrl = _pin_ctrl, \
  333. .freq = RPM_VREG_FREQ_##_freq, \
  334. .pin_fn = _pin_fn, \
  335. .force_mode = _force_mode, \
  336. .sleep_set_force_mode = _sleep_set_force_mode, \
  337. .power_mode = _power_mode, \
  338. .state = _state, \
  339. .sleep_selectable = _sleep_selectable, \
  340. .system_uA = _system_uA, \
  341. }
  342. #define RPM_LDO(_id, _always_on, _pd, _sleep_selectable, _min_uV, _max_uV, \
  343. _supply_regulator, _system_uA, _init_peak_uA) \
  344. RPM_INIT(_id, _min_uV, _max_uV, REGULATOR_MODE_NORMAL \
  345. | REGULATOR_MODE_IDLE, REGULATOR_CHANGE_VOLTAGE \
  346. | REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_MODE \
  347. | REGULATOR_CHANGE_DRMS, 0, _max_uV, _init_peak_uA, 0, _pd, \
  348. RPM_VREG_PIN_CTRL_NONE, NONE, RPM_VREG_PIN_FN_8930_NONE, \
  349. RPM_VREG_FORCE_MODE_8930_NONE, \
  350. RPM_VREG_FORCE_MODE_8930_NONE, RPM_VREG_POWER_MODE_8930_PWM, \
  351. RPM_VREG_STATE_OFF, _sleep_selectable, _always_on, \
  352. _supply_regulator, _system_uA)
  353. #define RPM_SMPS(_id, _always_on, _pd, _sleep_selectable, _min_uV, _max_uV, \
  354. _supply_regulator, _system_uA, _freq, _force_mode, \
  355. _sleep_set_force_mode) \
  356. RPM_INIT(_id, _min_uV, _max_uV, REGULATOR_MODE_NORMAL \
  357. | REGULATOR_MODE_IDLE, REGULATOR_CHANGE_VOLTAGE \
  358. | REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_MODE \
  359. | REGULATOR_CHANGE_DRMS, 0, _min_uV, _system_uA, 0, _pd, \
  360. RPM_VREG_PIN_CTRL_NONE, _freq, RPM_VREG_PIN_FN_8930_NONE, \
  361. RPM_VREG_FORCE_MODE_8930_##_force_mode, \
  362. RPM_VREG_FORCE_MODE_8930_##_sleep_set_force_mode, \
  363. RPM_VREG_POWER_MODE_8930_PWM, RPM_VREG_STATE_OFF, \
  364. _sleep_selectable, _always_on, _supply_regulator, _system_uA)
  365. #define RPM_VS(_id, _always_on, _pd, _sleep_selectable, _supply_regulator) \
  366. RPM_INIT(_id, 0, 0, 0, REGULATOR_CHANGE_STATUS, 0, 0, 1000, 1000, _pd, \
  367. RPM_VREG_PIN_CTRL_NONE, NONE, RPM_VREG_PIN_FN_8930_NONE, \
  368. RPM_VREG_FORCE_MODE_8930_NONE, \
  369. RPM_VREG_FORCE_MODE_8930_NONE, RPM_VREG_POWER_MODE_8930_PWM, \
  370. RPM_VREG_STATE_OFF, _sleep_selectable, _always_on, \
  371. _supply_regulator, 0)
  372. #define RPM_NCP(_id, _always_on, _sleep_selectable, _min_uV, _max_uV, \
  373. _supply_regulator, _freq) \
  374. RPM_INIT(_id, _min_uV, _max_uV, 0, REGULATOR_CHANGE_VOLTAGE \
  375. | REGULATOR_CHANGE_STATUS, 0, _max_uV, 1000, 1000, 0, \
  376. RPM_VREG_PIN_CTRL_NONE, _freq, RPM_VREG_PIN_FN_8930_NONE, \
  377. RPM_VREG_FORCE_MODE_8930_NONE, \
  378. RPM_VREG_FORCE_MODE_8930_NONE, RPM_VREG_POWER_MODE_8930_PWM, \
  379. RPM_VREG_STATE_OFF, _sleep_selectable, _always_on, \
  380. _supply_regulator, 0)
  381. #define RPM_CORNER(_id, _always_on, _sleep_selectable, _min_uV, _max_uV, \
  382. _supply_regulator) \
  383. RPM_INIT(_id, _min_uV, _max_uV, 0, REGULATOR_CHANGE_VOLTAGE \
  384. | REGULATOR_CHANGE_STATUS, 0, _max_uV, 0, 0, 0, \
  385. RPM_VREG_PIN_CTRL_NONE, NONE, RPM_VREG_PIN_FN_8930_NONE, \
  386. RPM_VREG_FORCE_MODE_8930_NONE, \
  387. RPM_VREG_FORCE_MODE_8930_NONE, RPM_VREG_POWER_MODE_8930_PWM, \
  388. RPM_VREG_STATE_OFF, _sleep_selectable, _always_on, \
  389. _supply_regulator, 0)
  390. /* Pin control initialization */
  391. #define RPM_PC_INIT(_id, _always_on, _pin_fn, _pin_ctrl, _supply_regulator) \
  392. { \
  393. .init_data = { \
  394. .constraints = { \
  395. .valid_ops_mask = REGULATOR_CHANGE_STATUS, \
  396. .always_on = _always_on, \
  397. }, \
  398. .num_consumer_supplies = \
  399. ARRAY_SIZE(vreg_consumers_##_id##_PC), \
  400. .consumer_supplies = vreg_consumers_##_id##_PC, \
  401. .supply_regulator = _supply_regulator, \
  402. }, \
  403. .id = RPM_VREG_ID_PM8038_##_id##_PC, \
  404. .pin_fn = RPM_VREG_PIN_FN_8930_##_pin_fn, \
  405. .pin_ctrl = _pin_ctrl, \
  406. }
  407. #define GPIO_VREG(_id, _reg_name, _gpio_label, _gpio, _supply_regulator) \
  408. [MSM8930_GPIO_VREG_ID_##_id] = { \
  409. .init_data = { \
  410. .constraints = { \
  411. .valid_ops_mask = REGULATOR_CHANGE_STATUS, \
  412. }, \
  413. .num_consumer_supplies = \
  414. ARRAY_SIZE(vreg_consumers_##_id), \
  415. .consumer_supplies = vreg_consumers_##_id, \
  416. .supply_regulator = _supply_regulator, \
  417. }, \
  418. .regulator_name = _reg_name, \
  419. .gpio_label = _gpio_label, \
  420. .gpio = _gpio, \
  421. }
  422. #define SAW_VREG_INIT(_id, _name, _min_uV, _max_uV) \
  423. { \
  424. .constraints = { \
  425. .name = _name, \
  426. .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, \
  427. .min_uV = _min_uV, \
  428. .max_uV = _max_uV, \
  429. }, \
  430. .num_consumer_supplies = ARRAY_SIZE(vreg_consumers_##_id), \
  431. .consumer_supplies = vreg_consumers_##_id, \
  432. }
  433. /* GPIO regulator constraints */
  434. struct gpio_regulator_platform_data
  435. msm8930_pm8038_gpio_regulator_pdata[] __devinitdata = {
  436. /* ID vreg_name gpio_label gpio supply */
  437. GPIO_VREG(EXT_5V, "ext_5v", "ext_5v_en", 63, NULL),
  438. GPIO_VREG(EXT_OTG_SW, "ext_otg_sw", "ext_otg_sw_en", 97, "ext_5v"),
  439. };
  440. /* SAW regulator constraints */
  441. struct regulator_init_data msm8930_pm8038_saw_regulator_core0_pdata =
  442. /* ID vreg_name min_uV max_uV */
  443. SAW_VREG_INIT(S5, "8038_s5", 850000, 1300000);
  444. struct regulator_init_data msm8930_pm8038_saw_regulator_core1_pdata =
  445. SAW_VREG_INIT(S6, "8038_s6", 850000, 1300000);
  446. /* PM8038 regulator constraints */
  447. struct pm8xxx_regulator_platform_data
  448. msm8930_pm8038_regulator_pdata[] __devinitdata = {
  449. /*
  450. * ID name always_on pd min_uV max_uV en_t supply
  451. * system_uA reg_ID
  452. */
  453. PM8XXX_NLDO1200(L16, "8038_l16", 0, 1, 375000, 1050000, 200, "8038_s3",
  454. 0, 0),
  455. PM8XXX_NLDO1200(L19, "8038_l19", 0, 1, 375000, 1050000, 200, "8038_s3",
  456. 0, 1),
  457. PM8XXX_NLDO1200(L27, "8038_l27", 0, 1, 375000, 1050000, 200, "8038_s3",
  458. 0, 2),
  459. };
  460. static struct rpm_regulator_init_data
  461. msm8930_rpm_regulator_init_data[] __devinitdata = {
  462. /* ID a_on pd ss min_uV max_uV supply sys_uA freq fm ss_fm */
  463. RPM_SMPS(S1, 0, 1, 1, 500000, 1150000, NULL, 100000, 4p80, AUTO, LPM),
  464. RPM_SMPS(S2, 1, 1, 1, 1400000, 1400000, NULL, 100000, 1p60, AUTO, LPM),
  465. RPM_SMPS(S3, 0, 1, 1, 1150000, 1150000, NULL, 100000, 3p20, AUTO, AUTO),
  466. RPM_SMPS(S4, 1, 1, 1, 1950000, 2200000, NULL, 100000, 1p60, AUTO, LPM),
  467. /* ID a_on pd ss min_uV max_uV supply sys_uA init_ip */
  468. RPM_LDO(L1, 0, 1, 0, 1300000, 1300000, "8038_s2", 0, 0),
  469. RPM_LDO(L2, 0, 1, 0, 1200000, 1200000, "8038_s2", 0, 0),
  470. RPM_LDO(L3, 0, 1, 0, 3075000, 3075000, NULL, 0, 0),
  471. RPM_LDO(L4, 1, 1, 0, 1800000, 1800000, NULL, 10000, 10000),
  472. RPM_LDO(L5, 0, 1, 0, 2950000, 2950000, NULL, 0, 0),
  473. RPM_LDO(L6, 0, 1, 0, 2950000, 2950000, NULL, 0, 0),
  474. RPM_LDO(L7, 0, 1, 0, 2050000, 2050000, "8038_s4", 0, 0),
  475. RPM_LDO(L8, 0, 1, 0, 2800000, 2800000, NULL, 0, 0),
  476. RPM_LDO(L9, 0, 1, 0, 2850000, 2850000, NULL, 0, 0),
  477. RPM_LDO(L10, 0, 1, 0, 2900000, 2900000, NULL, 0, 0),
  478. RPM_LDO(L11, 1, 1, 0, 1800000, 1800000, "8038_s4", 10000, 10000),
  479. RPM_LDO(L12, 0, 1, 0, 1200000, 1200000, "8038_s2", 0, 0),
  480. RPM_LDO(L13, 0, 0, 0, 2220000, 2220000, NULL, 0, 0),
  481. RPM_LDO(L14, 0, 1, 0, 1800000, 1800000, NULL, 0, 0),
  482. RPM_LDO(L15, 0, 1, 0, 1800000, 2950000, NULL, 0, 0),
  483. RPM_LDO(L17, 0, 1, 0, 1800000, 2950000, NULL, 0, 0),
  484. RPM_LDO(L18, 0, 1, 0, 1800000, 1800000, NULL, 0, 0),
  485. RPM_LDO(L20, 1, 1, 0, 1250000, 1250000, "8038_s2", 10000, 10000),
  486. RPM_LDO(L21, 0, 1, 0, 1900000, 1900000, "8038_s4", 0, 0),
  487. RPM_LDO(L22, 1, 1, 0, 1850000, 2950000, NULL, 10000, 10000),
  488. RPM_LDO(L23, 1, 1, 1, 1800000, 1800000, "8038_s4", 0, 0),
  489. RPM_LDO(L24, 0, 1, 1, 500000, 1150000, "8038_s2", 10000, 10000),
  490. RPM_LDO(L25, 0, 0, 0, 1740000, 1740000, "8038_l13", 0, 0),
  491. RPM_LDO(L26, 1, 1, 0, 1050000, 1050000, "8038_s2", 10000, 10000),
  492. /* ID a_on pd ss supply */
  493. RPM_VS(LVS1, 0, 1, 0, "8038_l11"),
  494. RPM_VS(LVS2, 0, 1, 0, "8038_l11"),
  495. /* ID a_on ss min_corner max_corner supply */
  496. RPM_CORNER(VDD_DIG_CORNER, 0, 1, RPM_VREG_CORNER_NONE,
  497. RPM_VREG_CORNER_HIGH, NULL),
  498. };
  499. int msm8930_pm8038_regulator_pdata_len __devinitdata =
  500. ARRAY_SIZE(msm8930_pm8038_regulator_pdata);
  501. #define RPM_REG_MAP(_id, _sleep_also, _voter, _supply, _dev_name) \
  502. { \
  503. .vreg_id = RPM_VREG_ID_PM8038_##_id, \
  504. .sleep_also = _sleep_also, \
  505. .voter = _voter, \
  506. .supply = _supply, \
  507. .dev_name = _dev_name, \
  508. }
  509. static struct rpm_regulator_consumer_mapping
  510. msm_rpm_regulator_consumer_mapping[] __devinitdata = {
  511. RPM_REG_MAP(L23, 0, 1, "krait0_hfpll", "acpuclk-8930"),
  512. RPM_REG_MAP(L23, 0, 2, "krait1_hfpll", "acpuclk-8930"),
  513. RPM_REG_MAP(L23, 0, 6, "l2_hfpll", "acpuclk-8930"),
  514. RPM_REG_MAP(L24, 0, 1, "krait0_mem", "acpuclk-8930"),
  515. RPM_REG_MAP(L24, 0, 2, "krait1_mem", "acpuclk-8930"),
  516. RPM_REG_MAP(VDD_DIG_CORNER, 0, 1, "krait0_dig", "acpuclk-8930"),
  517. RPM_REG_MAP(VDD_DIG_CORNER, 0, 2, "krait1_dig", "acpuclk-8930"),
  518. RPM_REG_MAP(L23, 0, 1, "krait0_hfpll", "acpuclk-8627"),
  519. RPM_REG_MAP(L23, 0, 2, "krait1_hfpll", "acpuclk-8627"),
  520. RPM_REG_MAP(L23, 0, 6, "l2_hfpll", "acpuclk-8627"),
  521. RPM_REG_MAP(L24, 0, 1, "krait0_mem", "acpuclk-8627"),
  522. RPM_REG_MAP(L24, 0, 2, "krait1_mem", "acpuclk-8627"),
  523. RPM_REG_MAP(VDD_DIG_CORNER, 0, 1, "krait0_dig", "acpuclk-8627"),
  524. RPM_REG_MAP(VDD_DIG_CORNER, 0, 2, "krait1_dig", "acpuclk-8627"),
  525. RPM_REG_MAP(L23, 0, 1, "krait0_hfpll", "acpuclk-8930aa"),
  526. RPM_REG_MAP(L23, 0, 2, "krait1_hfpll", "acpuclk-8930aa"),
  527. RPM_REG_MAP(L23, 0, 6, "l2_hfpll", "acpuclk-8930aa"),
  528. RPM_REG_MAP(L24, 0, 1, "krait0_mem", "acpuclk-8930aa"),
  529. RPM_REG_MAP(L24, 0, 2, "krait1_mem", "acpuclk-8930aa"),
  530. RPM_REG_MAP(VDD_DIG_CORNER, 0, 1, "krait0_dig", "acpuclk-8930aa"),
  531. RPM_REG_MAP(VDD_DIG_CORNER, 0, 2, "krait1_dig", "acpuclk-8930aa"),
  532. RPM_REG_MAP(L23, 0, 1, "krait0_hfpll", "acpuclk-8930ab"),
  533. RPM_REG_MAP(L23, 0, 2, "krait1_hfpll", "acpuclk-8930ab"),
  534. RPM_REG_MAP(L23, 0, 6, "l2_hfpll", "acpuclk-8930ab"),
  535. RPM_REG_MAP(L24, 0, 1, "krait0_mem", "acpuclk-8930ab"),
  536. RPM_REG_MAP(L24, 0, 2, "krait1_mem", "acpuclk-8930ab"),
  537. RPM_REG_MAP(VDD_DIG_CORNER, 0, 1, "krait0_dig", "acpuclk-8930ab"),
  538. RPM_REG_MAP(VDD_DIG_CORNER, 0, 2, "krait1_dig", "acpuclk-8930ab"),
  539. };
  540. struct rpm_regulator_platform_data
  541. msm8930_pm8038_rpm_regulator_pdata __devinitdata = {
  542. .init_data = msm8930_rpm_regulator_init_data,
  543. .num_regulators = ARRAY_SIZE(msm8930_rpm_regulator_init_data),
  544. .version = RPM_VREG_VERSION_8930,
  545. .vreg_id_vdd_mem = RPM_VREG_ID_PM8038_L24,
  546. .vreg_id_vdd_dig = RPM_VREG_ID_PM8038_VDD_DIG_CORNER,
  547. .consumer_map = msm_rpm_regulator_consumer_mapping,
  548. .consumer_map_len = ARRAY_SIZE(msm_rpm_regulator_consumer_mapping),
  549. };