board-mop500-regulators.c 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063
  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>
  7. * Bengt Jonsson <bengt.g.jonsson@stericsson.com>
  8. * Daniel Willerud <daniel.willerud@stericsson.com>
  9. *
  10. * MOP500 board specific initialization for regulators
  11. */
  12. #include <linux/kernel.h>
  13. #include <linux/regulator/machine.h>
  14. #include <linux/regulator/ab8500.h>
  15. #include "board-mop500-regulators.h"
  16. #include "id.h"
  17. static struct regulator_consumer_supply gpio_en_3v3_consumers[] = {
  18. REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
  19. };
  20. struct regulator_init_data gpio_en_3v3_regulator = {
  21. .constraints = {
  22. .name = "EN-3V3",
  23. .min_uV = 3300000,
  24. .max_uV = 3300000,
  25. .valid_ops_mask = REGULATOR_CHANGE_STATUS,
  26. },
  27. .num_consumer_supplies = ARRAY_SIZE(gpio_en_3v3_consumers),
  28. .consumer_supplies = gpio_en_3v3_consumers,
  29. };
  30. /*
  31. * TPS61052 regulator
  32. */
  33. static struct regulator_consumer_supply tps61052_vaudio_consumers[] = {
  34. /*
  35. * Boost converter supply to raise voltage on audio speaker, this
  36. * is actually connected to three pins, VInVhfL (left amplifier)
  37. * VInVhfR (right amplifier) and VIntDClassInt - all three must
  38. * be connected to the same voltage.
  39. */
  40. REGULATOR_SUPPLY("vintdclassint", "ab8500-codec.0"),
  41. };
  42. struct regulator_init_data tps61052_regulator = {
  43. .constraints = {
  44. .name = "vaudio-hf",
  45. .min_uV = 4500000,
  46. .max_uV = 4500000,
  47. .valid_ops_mask = REGULATOR_CHANGE_STATUS,
  48. },
  49. .num_consumer_supplies = ARRAY_SIZE(tps61052_vaudio_consumers),
  50. .consumer_supplies = tps61052_vaudio_consumers,
  51. };
  52. static struct regulator_consumer_supply ab8500_vaux1_consumers[] = {
  53. /* Main display, u8500 R3 uib */
  54. REGULATOR_SUPPLY("vddi", "mcde_disp_sony_acx424akp.0"),
  55. /* Main display, u8500 uib and ST uib */
  56. REGULATOR_SUPPLY("vdd1", "samsung_s6d16d0.0"),
  57. /* Secondary display, ST uib */
  58. REGULATOR_SUPPLY("vdd1", "samsung_s6d16d0.1"),
  59. /* SFH7741 proximity sensor */
  60. REGULATOR_SUPPLY("vcc", "gpio-keys.0"),
  61. /* BH1780GLS ambient light sensor */
  62. REGULATOR_SUPPLY("vcc", "2-0029"),
  63. /* lsm303dlh accelerometer */
  64. REGULATOR_SUPPLY("vdd", "2-0018"),
  65. /* lsm303dlhc accelerometer */
  66. REGULATOR_SUPPLY("vdd", "2-0019"),
  67. /* lsm303dlh magnetometer */
  68. REGULATOR_SUPPLY("vdd", "2-001e"),
  69. /* Rohm BU21013 Touchscreen devices */
  70. REGULATOR_SUPPLY("avdd", "3-005c"),
  71. REGULATOR_SUPPLY("avdd", "3-005d"),
  72. /* Synaptics RMI4 Touchscreen device */
  73. REGULATOR_SUPPLY("vdd", "3-004b"),
  74. /* L3G4200D Gyroscope device */
  75. REGULATOR_SUPPLY("vdd", "2-0068"),
  76. /* Ambient light sensor device */
  77. REGULATOR_SUPPLY("vdd", "3-0029"),
  78. /* Pressure sensor device */
  79. REGULATOR_SUPPLY("vdd", "2-005c"),
  80. /* Cypress TrueTouch Touchscreen device */
  81. REGULATOR_SUPPLY("vcpin", "spi8.0"),
  82. /* Camera device */
  83. REGULATOR_SUPPLY("vaux12v5", "mmio_camera"),
  84. };
  85. static struct regulator_consumer_supply ab8500_vaux2_consumers[] = {
  86. /* On-board eMMC power */
  87. REGULATOR_SUPPLY("vmmc", "sdi4"),
  88. /* AB8500 audio codec */
  89. REGULATOR_SUPPLY("vcc-N2158", "ab8500-codec.0"),
  90. /* AB8500 accessory detect 1 */
  91. REGULATOR_SUPPLY("vcc-N2158", "ab8500-acc-det.0"),
  92. /* AB8500 Tv-out device */
  93. REGULATOR_SUPPLY("vcc-N2158", "mcde_tv_ab8500.4"),
  94. /* AV8100 HDMI device */
  95. REGULATOR_SUPPLY("vcc-N2158", "av8100_hdmi.3"),
  96. };
  97. static struct regulator_consumer_supply ab8500_vaux3_consumers[] = {
  98. REGULATOR_SUPPLY("v-SD-STM", "stm"),
  99. /* External MMC slot power */
  100. REGULATOR_SUPPLY("vmmc", "sdi0"),
  101. };
  102. static struct regulator_consumer_supply ab8505_vaux4_consumers[] = {
  103. };
  104. static struct regulator_consumer_supply ab8505_vaux5_consumers[] = {
  105. };
  106. static struct regulator_consumer_supply ab8505_vaux6_consumers[] = {
  107. };
  108. static struct regulator_consumer_supply ab8505_vaux8_consumers[] = {
  109. /* AB8500 audio codec device */
  110. REGULATOR_SUPPLY("v-aux8", NULL),
  111. };
  112. static struct regulator_consumer_supply ab8505_vadc_consumers[] = {
  113. /* Internal general-purpose ADC */
  114. REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"),
  115. /* ADC for charger */
  116. REGULATOR_SUPPLY("vddadc", "ab8500-charger.0"),
  117. };
  118. static struct regulator_consumer_supply ab8500_vtvout_consumers[] = {
  119. /* TV-out DENC supply */
  120. REGULATOR_SUPPLY("vtvout", "ab8500-denc.0"),
  121. /* Internal general-purpose ADC */
  122. REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"),
  123. /* ADC for charger */
  124. REGULATOR_SUPPLY("vddadc", "ab8500-charger.0"),
  125. /* AB8500 Tv-out device */
  126. REGULATOR_SUPPLY("vtvout", "mcde_tv_ab8500.4"),
  127. };
  128. static struct regulator_consumer_supply ab8500_vaud_consumers[] = {
  129. /* AB8500 audio-codec main supply */
  130. REGULATOR_SUPPLY("vaud", "ab8500-codec.0"),
  131. };
  132. static struct regulator_consumer_supply ab8500_vamic1_consumers[] = {
  133. /* AB8500 audio-codec Mic1 supply */
  134. REGULATOR_SUPPLY("vamic1", "ab8500-codec.0"),
  135. };
  136. static struct regulator_consumer_supply ab8500_vamic2_consumers[] = {
  137. /* AB8500 audio-codec Mic2 supply */
  138. REGULATOR_SUPPLY("vamic2", "ab8500-codec.0"),
  139. };
  140. static struct regulator_consumer_supply ab8500_vdmic_consumers[] = {
  141. /* AB8500 audio-codec DMic supply */
  142. REGULATOR_SUPPLY("vdmic", "ab8500-codec.0"),
  143. };
  144. static struct regulator_consumer_supply ab8500_vintcore_consumers[] = {
  145. /* SoC core supply, no device */
  146. REGULATOR_SUPPLY("v-intcore", NULL),
  147. /* USB Transceiver */
  148. REGULATOR_SUPPLY("vddulpivio18", "ab8500-usb.0"),
  149. /* Handled by abx500 clk driver */
  150. REGULATOR_SUPPLY("v-intcore", "abx500-clk.0"),
  151. };
  152. static struct regulator_consumer_supply ab8505_usb_consumers[] = {
  153. /* HS USB OTG physical interface */
  154. REGULATOR_SUPPLY("v-ape", NULL),
  155. };
  156. static struct regulator_consumer_supply ab8500_vana_consumers[] = {
  157. /* DB8500 DSI */
  158. REGULATOR_SUPPLY("vdddsi1v2", "mcde"),
  159. REGULATOR_SUPPLY("vdddsi1v2", "b2r2_core"),
  160. REGULATOR_SUPPLY("vdddsi1v2", "b2r2_1_core"),
  161. REGULATOR_SUPPLY("vdddsi1v2", "dsilink.0"),
  162. REGULATOR_SUPPLY("vdddsi1v2", "dsilink.1"),
  163. REGULATOR_SUPPLY("vdddsi1v2", "dsilink.2"),
  164. /* DB8500 CSI */
  165. REGULATOR_SUPPLY("vddcsi1v2", "mmio_camera"),
  166. };
  167. /* ab8500 regulator register initialization */
  168. static struct ab8500_regulator_reg_init ab8500_reg_init[] = {
  169. /*
  170. * VanaRequestCtrl = HP/LP depending on VxRequest
  171. * VextSupply1RequestCtrl = HP/LP depending on VxRequest
  172. */
  173. INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL2, 0xf0, 0x00),
  174. /*
  175. * VextSupply2RequestCtrl = HP/LP depending on VxRequest
  176. * VextSupply3RequestCtrl = HP/LP depending on VxRequest
  177. * Vaux1RequestCtrl = HP/LP depending on VxRequest
  178. * Vaux2RequestCtrl = HP/LP depending on VxRequest
  179. */
  180. INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL3, 0xff, 0x00),
  181. /*
  182. * Vaux3RequestCtrl = HP/LP depending on VxRequest
  183. * SwHPReq = Control through SWValid disabled
  184. */
  185. INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL4, 0x07, 0x00),
  186. /*
  187. * VanaSysClkReq1HPValid = disabled
  188. * Vaux1SysClkReq1HPValid = disabled
  189. * Vaux2SysClkReq1HPValid = disabled
  190. * Vaux3SysClkReq1HPValid = disabled
  191. */
  192. INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID1, 0xe8, 0x00),
  193. /*
  194. * VextSupply1SysClkReq1HPValid = disabled
  195. * VextSupply2SysClkReq1HPValid = disabled
  196. * VextSupply3SysClkReq1HPValid = SysClkReq1 controlled
  197. */
  198. INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID2, 0x70, 0x40),
  199. /*
  200. * VanaHwHPReq1Valid = disabled
  201. * Vaux1HwHPreq1Valid = disabled
  202. * Vaux2HwHPReq1Valid = disabled
  203. * Vaux3HwHPReqValid = disabled
  204. */
  205. INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID1, 0xe8, 0x00),
  206. /*
  207. * VextSupply1HwHPReq1Valid = disabled
  208. * VextSupply2HwHPReq1Valid = disabled
  209. * VextSupply3HwHPReq1Valid = disabled
  210. */
  211. INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID2, 0x07, 0x00),
  212. /*
  213. * VanaHwHPReq2Valid = disabled
  214. * Vaux1HwHPReq2Valid = disabled
  215. * Vaux2HwHPReq2Valid = disabled
  216. * Vaux3HwHPReq2Valid = disabled
  217. */
  218. INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID1, 0xe8, 0x00),
  219. /*
  220. * VextSupply1HwHPReq2Valid = disabled
  221. * VextSupply2HwHPReq2Valid = disabled
  222. * VextSupply3HwHPReq2Valid = HWReq2 controlled
  223. */
  224. INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID2, 0x07, 0x04),
  225. /*
  226. * VanaSwHPReqValid = disabled
  227. * Vaux1SwHPReqValid = disabled
  228. */
  229. INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID1, 0xa0, 0x00),
  230. /*
  231. * Vaux2SwHPReqValid = disabled
  232. * Vaux3SwHPReqValid = disabled
  233. * VextSupply1SwHPReqValid = disabled
  234. * VextSupply2SwHPReqValid = disabled
  235. * VextSupply3SwHPReqValid = disabled
  236. */
  237. INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID2, 0x1f, 0x00),
  238. /*
  239. * SysClkReq2Valid1 = SysClkReq2 controlled
  240. * SysClkReq3Valid1 = disabled
  241. * SysClkReq4Valid1 = SysClkReq4 controlled
  242. * SysClkReq5Valid1 = disabled
  243. * SysClkReq6Valid1 = SysClkReq6 controlled
  244. * SysClkReq7Valid1 = disabled
  245. * SysClkReq8Valid1 = disabled
  246. */
  247. INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID1, 0xfe, 0x2a),
  248. /*
  249. * SysClkReq2Valid2 = disabled
  250. * SysClkReq3Valid2 = disabled
  251. * SysClkReq4Valid2 = disabled
  252. * SysClkReq5Valid2 = disabled
  253. * SysClkReq6Valid2 = SysClkReq6 controlled
  254. * SysClkReq7Valid2 = disabled
  255. * SysClkReq8Valid2 = disabled
  256. */
  257. INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID2, 0xfe, 0x20),
  258. /*
  259. * VTVoutEna = disabled
  260. * Vintcore12Ena = disabled
  261. * Vintcore12Sel = 1.25 V
  262. * Vintcore12LP = inactive (HP)
  263. * VTVoutLP = inactive (HP)
  264. */
  265. INIT_REGULATOR_REGISTER(AB8500_REGUMISC1, 0xfe, 0x10),
  266. /*
  267. * VaudioEna = disabled
  268. * VdmicEna = disabled
  269. * Vamic1Ena = disabled
  270. * Vamic2Ena = disabled
  271. */
  272. INIT_REGULATOR_REGISTER(AB8500_VAUDIOSUPPLY, 0x1e, 0x00),
  273. /*
  274. * Vamic1_dzout = high-Z when Vamic1 is disabled
  275. * Vamic2_dzout = high-Z when Vamic2 is disabled
  276. */
  277. INIT_REGULATOR_REGISTER(AB8500_REGUCTRL1VAMIC, 0x03, 0x00),
  278. /*
  279. * VPll = Hw controlled (NOTE! PRCMU bits)
  280. * VanaRegu = force off
  281. */
  282. INIT_REGULATOR_REGISTER(AB8500_VPLLVANAREGU, 0x0f, 0x02),
  283. /*
  284. * VrefDDREna = disabled
  285. * VrefDDRSleepMode = inactive (no pulldown)
  286. */
  287. INIT_REGULATOR_REGISTER(AB8500_VREFDDR, 0x03, 0x00),
  288. /*
  289. * VextSupply1Regu = force LP
  290. * VextSupply2Regu = force OFF
  291. * VextSupply3Regu = force HP (-> STBB2=LP and TPS=LP)
  292. * ExtSupply2Bypass = ExtSupply12LPn ball is 0 when Ena is 0
  293. * ExtSupply3Bypass = ExtSupply3LPn ball is 0 when Ena is 0
  294. */
  295. INIT_REGULATOR_REGISTER(AB8500_EXTSUPPLYREGU, 0xff, 0x13),
  296. /*
  297. * Vaux1Regu = force HP
  298. * Vaux2Regu = force off
  299. */
  300. INIT_REGULATOR_REGISTER(AB8500_VAUX12REGU, 0x0f, 0x01),
  301. /*
  302. * Vaux3Regu = force off
  303. */
  304. INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3REGU, 0x03, 0x00),
  305. /*
  306. * Vaux1Sel = 2.8 V
  307. */
  308. INIT_REGULATOR_REGISTER(AB8500_VAUX1SEL, 0x0f, 0x0C),
  309. /*
  310. * Vaux2Sel = 2.9 V
  311. */
  312. INIT_REGULATOR_REGISTER(AB8500_VAUX2SEL, 0x0f, 0x0d),
  313. /*
  314. * Vaux3Sel = 2.91 V
  315. */
  316. INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3SEL, 0x07, 0x07),
  317. /*
  318. * VextSupply12LP = disabled (no LP)
  319. */
  320. INIT_REGULATOR_REGISTER(AB8500_REGUCTRL2SPARE, 0x01, 0x00),
  321. /*
  322. * Vaux1Disch = short discharge time
  323. * Vaux2Disch = short discharge time
  324. * Vaux3Disch = short discharge time
  325. * Vintcore12Disch = short discharge time
  326. * VTVoutDisch = short discharge time
  327. * VaudioDisch = short discharge time
  328. */
  329. INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH, 0xfc, 0x00),
  330. /*
  331. * VanaDisch = short discharge time
  332. * VdmicPullDownEna = pulldown disabled when Vdmic is disabled
  333. * VdmicDisch = short discharge time
  334. */
  335. INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH2, 0x16, 0x00),
  336. };
  337. /* AB8500 regulators */
  338. static struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = {
  339. /* supplies to the display/camera */
  340. [AB8500_LDO_AUX1] = {
  341. .constraints = {
  342. .name = "V-DISPLAY",
  343. .min_uV = 2800000,
  344. .max_uV = 3300000,
  345. .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
  346. REGULATOR_CHANGE_STATUS,
  347. .boot_on = 1, /* display is on at boot */
  348. },
  349. .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers),
  350. .consumer_supplies = ab8500_vaux1_consumers,
  351. },
  352. /* supplies to the on-board eMMC */
  353. [AB8500_LDO_AUX2] = {
  354. .constraints = {
  355. .name = "V-eMMC1",
  356. .min_uV = 1100000,
  357. .max_uV = 3300000,
  358. .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
  359. REGULATOR_CHANGE_STATUS |
  360. REGULATOR_CHANGE_MODE,
  361. .valid_modes_mask = REGULATOR_MODE_NORMAL |
  362. REGULATOR_MODE_IDLE,
  363. },
  364. .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux2_consumers),
  365. .consumer_supplies = ab8500_vaux2_consumers,
  366. },
  367. /* supply for VAUX3, supplies to SDcard slots */
  368. [AB8500_LDO_AUX3] = {
  369. .constraints = {
  370. .name = "V-MMC-SD",
  371. .min_uV = 1100000,
  372. .max_uV = 3300000,
  373. .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
  374. REGULATOR_CHANGE_STATUS |
  375. REGULATOR_CHANGE_MODE,
  376. .valid_modes_mask = REGULATOR_MODE_NORMAL |
  377. REGULATOR_MODE_IDLE,
  378. },
  379. .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux3_consumers),
  380. .consumer_supplies = ab8500_vaux3_consumers,
  381. },
  382. /* supply for tvout, gpadc, TVOUT LDO */
  383. [AB8500_LDO_TVOUT] = {
  384. .constraints = {
  385. .name = "V-TVOUT",
  386. .valid_ops_mask = REGULATOR_CHANGE_STATUS,
  387. },
  388. .num_consumer_supplies = ARRAY_SIZE(ab8500_vtvout_consumers),
  389. .consumer_supplies = ab8500_vtvout_consumers,
  390. },
  391. /* supply for ab8500-vaudio, VAUDIO LDO */
  392. [AB8500_LDO_AUDIO] = {
  393. .constraints = {
  394. .name = "V-AUD",
  395. .valid_ops_mask = REGULATOR_CHANGE_STATUS,
  396. },
  397. .num_consumer_supplies = ARRAY_SIZE(ab8500_vaud_consumers),
  398. .consumer_supplies = ab8500_vaud_consumers,
  399. },
  400. /* supply for v-anamic1 VAMic1-LDO */
  401. [AB8500_LDO_ANAMIC1] = {
  402. .constraints = {
  403. .name = "V-AMIC1",
  404. .valid_ops_mask = REGULATOR_CHANGE_STATUS,
  405. },
  406. .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic1_consumers),
  407. .consumer_supplies = ab8500_vamic1_consumers,
  408. },
  409. /* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */
  410. [AB8500_LDO_ANAMIC2] = {
  411. .constraints = {
  412. .name = "V-AMIC2",
  413. .valid_ops_mask = REGULATOR_CHANGE_STATUS,
  414. },
  415. .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic2_consumers),
  416. .consumer_supplies = ab8500_vamic2_consumers,
  417. },
  418. /* supply for v-dmic, VDMIC LDO */
  419. [AB8500_LDO_DMIC] = {
  420. .constraints = {
  421. .name = "V-DMIC",
  422. .valid_ops_mask = REGULATOR_CHANGE_STATUS,
  423. },
  424. .num_consumer_supplies = ARRAY_SIZE(ab8500_vdmic_consumers),
  425. .consumer_supplies = ab8500_vdmic_consumers,
  426. },
  427. /* supply for v-intcore12, VINTCORE12 LDO */
  428. [AB8500_LDO_INTCORE] = {
  429. .constraints = {
  430. .name = "V-INTCORE",
  431. .min_uV = 1250000,
  432. .max_uV = 1350000,
  433. .input_uV = 1800000,
  434. .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
  435. REGULATOR_CHANGE_STATUS |
  436. REGULATOR_CHANGE_MODE |
  437. REGULATOR_CHANGE_DRMS,
  438. .valid_modes_mask = REGULATOR_MODE_NORMAL |
  439. REGULATOR_MODE_IDLE,
  440. },
  441. .num_consumer_supplies = ARRAY_SIZE(ab8500_vintcore_consumers),
  442. .consumer_supplies = ab8500_vintcore_consumers,
  443. },
  444. /* supply for U8500 CSI-DSI, VANA LDO */
  445. [AB8500_LDO_ANA] = {
  446. .constraints = {
  447. .name = "V-CSI-DSI",
  448. .valid_ops_mask = REGULATOR_CHANGE_STATUS,
  449. },
  450. .num_consumer_supplies = ARRAY_SIZE(ab8500_vana_consumers),
  451. .consumer_supplies = ab8500_vana_consumers,
  452. },
  453. };
  454. /* supply for VextSupply3 */
  455. static struct regulator_consumer_supply ab8500_ext_supply3_consumers[] = {
  456. /* SIM supply for 3 V SIM cards */
  457. REGULATOR_SUPPLY("vinvsim", "sim-detect.0"),
  458. };
  459. /* extended configuration for VextSupply2, only used for HREFP_V20 boards */
  460. static struct ab8500_ext_regulator_cfg ab8500_ext_supply2 = {
  461. .hwreq = true,
  462. };
  463. /*
  464. * AB8500 external regulators
  465. */
  466. static struct regulator_init_data ab8500_ext_regulators[] = {
  467. /* fixed Vbat supplies VSMPS1_EXT_1V8 */
  468. [AB8500_EXT_SUPPLY1] = {
  469. .constraints = {
  470. .name = "ab8500-ext-supply1",
  471. .min_uV = 1800000,
  472. .max_uV = 1800000,
  473. .initial_mode = REGULATOR_MODE_IDLE,
  474. .boot_on = 1,
  475. .always_on = 1,
  476. },
  477. },
  478. /* fixed Vbat supplies VSMPS2_EXT_1V36 and VSMPS5_EXT_1V15 */
  479. [AB8500_EXT_SUPPLY2] = {
  480. .constraints = {
  481. .name = "ab8500-ext-supply2",
  482. .min_uV = 1360000,
  483. .max_uV = 1360000,
  484. },
  485. },
  486. /* fixed Vbat supplies VSMPS3_EXT_3V4 and VSMPS4_EXT_3V4 */
  487. [AB8500_EXT_SUPPLY3] = {
  488. .constraints = {
  489. .name = "ab8500-ext-supply3",
  490. .min_uV = 3400000,
  491. .max_uV = 3400000,
  492. .valid_ops_mask = REGULATOR_CHANGE_STATUS,
  493. .boot_on = 1,
  494. },
  495. .num_consumer_supplies =
  496. ARRAY_SIZE(ab8500_ext_supply3_consumers),
  497. .consumer_supplies = ab8500_ext_supply3_consumers,
  498. },
  499. };
  500. /* ab8505 regulator register initialization */
  501. static struct ab8500_regulator_reg_init ab8505_reg_init[] = {
  502. /*
  503. * VarmRequestCtrl
  504. * VsmpsCRequestCtrl
  505. * VsmpsARequestCtrl
  506. * VsmpsBRequestCtrl
  507. */
  508. INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL1, 0x00, 0x00),
  509. /*
  510. * VsafeRequestCtrl
  511. * VpllRequestCtrl
  512. * VanaRequestCtrl = HP/LP depending on VxRequest
  513. */
  514. INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL2, 0x30, 0x00),
  515. /*
  516. * Vaux1RequestCtrl = HP/LP depending on VxRequest
  517. * Vaux2RequestCtrl = HP/LP depending on VxRequest
  518. */
  519. INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL3, 0xf0, 0x00),
  520. /*
  521. * Vaux3RequestCtrl = HP/LP depending on VxRequest
  522. * SwHPReq = Control through SWValid disabled
  523. */
  524. INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL4, 0x07, 0x00),
  525. /*
  526. * VsmpsASysClkReq1HPValid
  527. * VsmpsBSysClkReq1HPValid
  528. * VsafeSysClkReq1HPValid
  529. * VanaSysClkReq1HPValid = disabled
  530. * VpllSysClkReq1HPValid
  531. * Vaux1SysClkReq1HPValid = disabled
  532. * Vaux2SysClkReq1HPValid = disabled
  533. * Vaux3SysClkReq1HPValid = disabled
  534. */
  535. INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQ1HPVALID1, 0xe8, 0x00),
  536. /*
  537. * VsmpsCSysClkReq1HPValid
  538. * VarmSysClkReq1HPValid
  539. * VbbSysClkReq1HPValid
  540. * VsmpsMSysClkReq1HPValid
  541. */
  542. INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQ1HPVALID2, 0x00, 0x00),
  543. /*
  544. * VsmpsAHwHPReq1Valid
  545. * VsmpsBHwHPReq1Valid
  546. * VsafeHwHPReq1Valid
  547. * VanaHwHPReq1Valid = disabled
  548. * VpllHwHPReq1Valid
  549. * Vaux1HwHPreq1Valid = disabled
  550. * Vaux2HwHPReq1Valid = disabled
  551. * Vaux3HwHPReqValid = disabled
  552. */
  553. INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ1VALID1, 0xe8, 0x00),
  554. /*
  555. * VsmpsMHwHPReq1Valid
  556. */
  557. INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ1VALID2, 0x00, 0x00),
  558. /*
  559. * VsmpsAHwHPReq2Valid
  560. * VsmpsBHwHPReq2Valid
  561. * VsafeHwHPReq2Valid
  562. * VanaHwHPReq2Valid = disabled
  563. * VpllHwHPReq2Valid
  564. * Vaux1HwHPReq2Valid = disabled
  565. * Vaux2HwHPReq2Valid = disabled
  566. * Vaux3HwHPReq2Valid = disabled
  567. */
  568. INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ2VALID1, 0xe8, 0x00),
  569. /*
  570. * VsmpsMHwHPReq2Valid
  571. */
  572. INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ2VALID2, 0x00, 0x00),
  573. /**
  574. * VsmpsCSwHPReqValid
  575. * VarmSwHPReqValid
  576. * VsmpsASwHPReqValid
  577. * VsmpsBSwHPReqValid
  578. * VsafeSwHPReqValid
  579. * VanaSwHPReqValid
  580. * VanaSwHPReqValid = disabled
  581. * VpllSwHPReqValid
  582. * Vaux1SwHPReqValid = disabled
  583. */
  584. INIT_REGULATOR_REGISTER(AB8505_REGUSWHPREQVALID1, 0xa0, 0x00),
  585. /*
  586. * Vaux2SwHPReqValid = disabled
  587. * Vaux3SwHPReqValid = disabled
  588. * VsmpsMSwHPReqValid
  589. */
  590. INIT_REGULATOR_REGISTER(AB8505_REGUSWHPREQVALID2, 0x03, 0x00),
  591. /*
  592. * SysClkReq2Valid1 = SysClkReq2 controlled
  593. * SysClkReq3Valid1 = disabled
  594. * SysClkReq4Valid1 = SysClkReq4 controlled
  595. */
  596. INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQVALID1, 0x0e, 0x0a),
  597. /*
  598. * SysClkReq2Valid2 = disabled
  599. * SysClkReq3Valid2 = disabled
  600. * SysClkReq4Valid2 = disabled
  601. */
  602. INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQVALID2, 0x0e, 0x00),
  603. /*
  604. * Vaux4SwHPReqValid
  605. * Vaux4HwHPReq2Valid
  606. * Vaux4HwHPReq1Valid
  607. * Vaux4SysClkReq1HPValid
  608. */
  609. INIT_REGULATOR_REGISTER(AB8505_REGUVAUX4REQVALID, 0x00, 0x00),
  610. /*
  611. * VadcEna = disabled
  612. * VintCore12Ena = disabled
  613. * VintCore12Sel = 1.25 V
  614. * VintCore12LP = inactive (HP)
  615. * VadcLP = inactive (HP)
  616. */
  617. INIT_REGULATOR_REGISTER(AB8505_REGUMISC1, 0xfe, 0x10),
  618. /*
  619. * VaudioEna = disabled
  620. * Vaux8Ena = disabled
  621. * Vamic1Ena = disabled
  622. * Vamic2Ena = disabled
  623. */
  624. INIT_REGULATOR_REGISTER(AB8505_VAUDIOSUPPLY, 0x1e, 0x00),
  625. /*
  626. * Vamic1_dzout = high-Z when Vamic1 is disabled
  627. * Vamic2_dzout = high-Z when Vamic2 is disabled
  628. */
  629. INIT_REGULATOR_REGISTER(AB8505_REGUCTRL1VAMIC, 0x03, 0x00),
  630. /*
  631. * VsmpsARegu
  632. * VsmpsASelCtrl
  633. * VsmpsAAutoMode
  634. * VsmpsAPWMMode
  635. */
  636. INIT_REGULATOR_REGISTER(AB8505_VSMPSAREGU, 0x00, 0x00),
  637. /*
  638. * VsmpsBRegu
  639. * VsmpsBSelCtrl
  640. * VsmpsBAutoMode
  641. * VsmpsBPWMMode
  642. */
  643. INIT_REGULATOR_REGISTER(AB8505_VSMPSBREGU, 0x00, 0x00),
  644. /*
  645. * VsafeRegu
  646. * VsafeSelCtrl
  647. * VsafeAutoMode
  648. * VsafePWMMode
  649. */
  650. INIT_REGULATOR_REGISTER(AB8505_VSAFEREGU, 0x00, 0x00),
  651. /*
  652. * VPll = Hw controlled (NOTE! PRCMU bits)
  653. * VanaRegu = force off
  654. */
  655. INIT_REGULATOR_REGISTER(AB8505_VPLLVANAREGU, 0x0f, 0x02),
  656. /*
  657. * VextSupply1Regu = force OFF (OTP_ExtSupply12LPnPolarity 1)
  658. * VextSupply2Regu = force OFF (OTP_ExtSupply12LPnPolarity 1)
  659. * VextSupply3Regu = force OFF (OTP_ExtSupply3LPnPolarity 0)
  660. * ExtSupply2Bypass = ExtSupply12LPn ball is 0 when Ena is 0
  661. * ExtSupply3Bypass = ExtSupply3LPn ball is 0 when Ena is 0
  662. */
  663. INIT_REGULATOR_REGISTER(AB8505_EXTSUPPLYREGU, 0xff, 0x30),
  664. /*
  665. * Vaux1Regu = force HP
  666. * Vaux2Regu = force off
  667. */
  668. INIT_REGULATOR_REGISTER(AB8505_VAUX12REGU, 0x0f, 0x01),
  669. /*
  670. * Vaux3Regu = force off
  671. */
  672. INIT_REGULATOR_REGISTER(AB8505_VRF1VAUX3REGU, 0x03, 0x00),
  673. /*
  674. * VsmpsASel1
  675. */
  676. INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL1, 0x00, 0x00),
  677. /*
  678. * VsmpsASel2
  679. */
  680. INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL2, 0x00, 0x00),
  681. /*
  682. * VsmpsASel3
  683. */
  684. INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL3, 0x00, 0x00),
  685. /*
  686. * VsmpsBSel1
  687. */
  688. INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL1, 0x00, 0x00),
  689. /*
  690. * VsmpsBSel2
  691. */
  692. INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL2, 0x00, 0x00),
  693. /*
  694. * VsmpsBSel3
  695. */
  696. INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL3, 0x00, 0x00),
  697. /*
  698. * VsafeSel1
  699. */
  700. INIT_REGULATOR_REGISTER(AB8505_VSAFESEL1, 0x00, 0x00),
  701. /*
  702. * VsafeSel2
  703. */
  704. INIT_REGULATOR_REGISTER(AB8505_VSAFESEL2, 0x00, 0x00),
  705. /*
  706. * VsafeSel3
  707. */
  708. INIT_REGULATOR_REGISTER(AB8505_VSAFESEL3, 0x00, 0x00),
  709. /*
  710. * Vaux1Sel = 2.8 V
  711. */
  712. INIT_REGULATOR_REGISTER(AB8505_VAUX1SEL, 0x0f, 0x0C),
  713. /*
  714. * Vaux2Sel = 2.9 V
  715. */
  716. INIT_REGULATOR_REGISTER(AB8505_VAUX2SEL, 0x0f, 0x0d),
  717. /*
  718. * Vaux3Sel = 2.91 V
  719. */
  720. INIT_REGULATOR_REGISTER(AB8505_VRF1VAUX3SEL, 0x07, 0x07),
  721. /*
  722. * Vaux4RequestCtrl
  723. */
  724. INIT_REGULATOR_REGISTER(AB8505_VAUX4REQCTRL, 0x00, 0x00),
  725. /*
  726. * Vaux4Regu
  727. */
  728. INIT_REGULATOR_REGISTER(AB8505_VAUX4REGU, 0x00, 0x00),
  729. /*
  730. * Vaux4Sel
  731. */
  732. INIT_REGULATOR_REGISTER(AB8505_VAUX4SEL, 0x00, 0x00),
  733. /*
  734. * Vaux1Disch = short discharge time
  735. * Vaux2Disch = short discharge time
  736. * Vaux3Disch = short discharge time
  737. * Vintcore12Disch = short discharge time
  738. * VTVoutDisch = short discharge time
  739. * VaudioDisch = short discharge time
  740. */
  741. INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH, 0xfc, 0x00),
  742. /*
  743. * VanaDisch = short discharge time
  744. * Vaux8PullDownEna = pulldown disabled when Vaux8 is disabled
  745. * Vaux8Disch = short discharge time
  746. */
  747. INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH2, 0x16, 0x00),
  748. /*
  749. * Vaux4Disch = short discharge time
  750. */
  751. INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH3, 0x01, 0x00),
  752. /*
  753. * Vaux5Sel
  754. * Vaux5LP
  755. * Vaux5Ena
  756. * Vaux5Disch
  757. * Vaux5DisSfst
  758. * Vaux5DisPulld
  759. */
  760. INIT_REGULATOR_REGISTER(AB8505_CTRLVAUX5, 0x00, 0x00),
  761. /*
  762. * Vaux6Sel
  763. * Vaux6LP
  764. * Vaux6Ena
  765. * Vaux6DisPulld
  766. */
  767. INIT_REGULATOR_REGISTER(AB8505_CTRLVAUX6, 0x00, 0x00),
  768. };
  769. struct regulator_init_data ab8505_regulators[AB8505_NUM_REGULATORS] = {
  770. /* supplies to the display/camera */
  771. [AB8505_LDO_AUX1] = {
  772. .constraints = {
  773. .name = "V-DISPLAY",
  774. .min_uV = 2800000,
  775. .max_uV = 3300000,
  776. .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
  777. REGULATOR_CHANGE_STATUS,
  778. .boot_on = 1, /* display is on at boot */
  779. },
  780. .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers),
  781. .consumer_supplies = ab8500_vaux1_consumers,
  782. },
  783. /* supplies to the on-board eMMC */
  784. [AB8505_LDO_AUX2] = {
  785. .constraints = {
  786. .name = "V-eMMC1",
  787. .min_uV = 1100000,
  788. .max_uV = 3300000,
  789. .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
  790. REGULATOR_CHANGE_STATUS |
  791. REGULATOR_CHANGE_MODE,
  792. .valid_modes_mask = REGULATOR_MODE_NORMAL |
  793. REGULATOR_MODE_IDLE,
  794. },
  795. .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux2_consumers),
  796. .consumer_supplies = ab8500_vaux2_consumers,
  797. },
  798. /* supply for VAUX3, supplies to SDcard slots */
  799. [AB8505_LDO_AUX3] = {
  800. .constraints = {
  801. .name = "V-MMC-SD",
  802. .min_uV = 1100000,
  803. .max_uV = 3300000,
  804. .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
  805. REGULATOR_CHANGE_STATUS |
  806. REGULATOR_CHANGE_MODE,
  807. .valid_modes_mask = REGULATOR_MODE_NORMAL |
  808. REGULATOR_MODE_IDLE,
  809. },
  810. .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux3_consumers),
  811. .consumer_supplies = ab8500_vaux3_consumers,
  812. },
  813. /* supply for VAUX4, supplies to NFC and standalone secure element */
  814. [AB8505_LDO_AUX4] = {
  815. .constraints = {
  816. .name = "V-NFC-SE",
  817. .min_uV = 1100000,
  818. .max_uV = 3300000,
  819. .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
  820. REGULATOR_CHANGE_STATUS |
  821. REGULATOR_CHANGE_MODE,
  822. .valid_modes_mask = REGULATOR_MODE_NORMAL |
  823. REGULATOR_MODE_IDLE,
  824. },
  825. .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux4_consumers),
  826. .consumer_supplies = ab8505_vaux4_consumers,
  827. },
  828. /* supply for VAUX5, supplies to TBD */
  829. [AB8505_LDO_AUX5] = {
  830. .constraints = {
  831. .name = "V-AUX5",
  832. .min_uV = 1050000,
  833. .max_uV = 2790000,
  834. .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
  835. REGULATOR_CHANGE_STATUS |
  836. REGULATOR_CHANGE_MODE,
  837. .valid_modes_mask = REGULATOR_MODE_NORMAL |
  838. REGULATOR_MODE_IDLE,
  839. },
  840. .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux5_consumers),
  841. .consumer_supplies = ab8505_vaux5_consumers,
  842. },
  843. /* supply for VAUX6, supplies to TBD */
  844. [AB8505_LDO_AUX6] = {
  845. .constraints = {
  846. .name = "V-AUX6",
  847. .min_uV = 1050000,
  848. .max_uV = 2790000,
  849. .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
  850. REGULATOR_CHANGE_STATUS |
  851. REGULATOR_CHANGE_MODE,
  852. .valid_modes_mask = REGULATOR_MODE_NORMAL |
  853. REGULATOR_MODE_IDLE,
  854. },
  855. .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux6_consumers),
  856. .consumer_supplies = ab8505_vaux6_consumers,
  857. },
  858. /* supply for gpadc, ADC LDO */
  859. [AB8505_LDO_ADC] = {
  860. .constraints = {
  861. .name = "V-ADC",
  862. .valid_ops_mask = REGULATOR_CHANGE_STATUS,
  863. },
  864. .num_consumer_supplies = ARRAY_SIZE(ab8505_vadc_consumers),
  865. .consumer_supplies = ab8505_vadc_consumers,
  866. },
  867. /* supply for ab8500-vaudio, VAUDIO LDO */
  868. [AB8505_LDO_AUDIO] = {
  869. .constraints = {
  870. .name = "V-AUD",
  871. .valid_ops_mask = REGULATOR_CHANGE_STATUS,
  872. },
  873. .num_consumer_supplies = ARRAY_SIZE(ab8500_vaud_consumers),
  874. .consumer_supplies = ab8500_vaud_consumers,
  875. },
  876. /* supply for v-anamic1 VAMic1-LDO */
  877. [AB8505_LDO_ANAMIC1] = {
  878. .constraints = {
  879. .name = "V-AMIC1",
  880. .valid_ops_mask = REGULATOR_CHANGE_STATUS |
  881. REGULATOR_CHANGE_MODE,
  882. .valid_modes_mask = REGULATOR_MODE_NORMAL |
  883. REGULATOR_MODE_IDLE,
  884. },
  885. .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic1_consumers),
  886. .consumer_supplies = ab8500_vamic1_consumers,
  887. },
  888. /* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */
  889. [AB8505_LDO_ANAMIC2] = {
  890. .constraints = {
  891. .name = "V-AMIC2",
  892. .valid_ops_mask = REGULATOR_CHANGE_STATUS |
  893. REGULATOR_CHANGE_MODE,
  894. .valid_modes_mask = REGULATOR_MODE_NORMAL |
  895. REGULATOR_MODE_IDLE,
  896. },
  897. .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic2_consumers),
  898. .consumer_supplies = ab8500_vamic2_consumers,
  899. },
  900. /* supply for v-aux8, VAUX8 LDO */
  901. [AB8505_LDO_AUX8] = {
  902. .constraints = {
  903. .name = "V-AUX8",
  904. .valid_ops_mask = REGULATOR_CHANGE_STATUS,
  905. },
  906. .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux8_consumers),
  907. .consumer_supplies = ab8505_vaux8_consumers,
  908. },
  909. /* supply for v-intcore12, VINTCORE12 LDO */
  910. [AB8505_LDO_INTCORE] = {
  911. .constraints = {
  912. .name = "V-INTCORE",
  913. .min_uV = 1250000,
  914. .max_uV = 1350000,
  915. .input_uV = 1800000,
  916. .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
  917. REGULATOR_CHANGE_STATUS |
  918. REGULATOR_CHANGE_MODE |
  919. REGULATOR_CHANGE_DRMS,
  920. .valid_modes_mask = REGULATOR_MODE_NORMAL |
  921. REGULATOR_MODE_IDLE,
  922. },
  923. .num_consumer_supplies = ARRAY_SIZE(ab8500_vintcore_consumers),
  924. .consumer_supplies = ab8500_vintcore_consumers,
  925. },
  926. /* supply for LDO USB */
  927. [AB8505_LDO_USB] = {
  928. .constraints = {
  929. .name = "V-USB",
  930. .valid_ops_mask = REGULATOR_CHANGE_STATUS |
  931. REGULATOR_CHANGE_MODE,
  932. .valid_modes_mask = REGULATOR_MODE_NORMAL |
  933. REGULATOR_MODE_IDLE,
  934. },
  935. .num_consumer_supplies = ARRAY_SIZE(ab8505_usb_consumers),
  936. .consumer_supplies = ab8505_usb_consumers,
  937. },
  938. /* supply for U8500 CSI-DSI, VANA LDO */
  939. [AB8505_LDO_ANA] = {
  940. .constraints = {
  941. .name = "V-CSI-DSI",
  942. .valid_ops_mask = REGULATOR_CHANGE_STATUS,
  943. },
  944. .num_consumer_supplies = ARRAY_SIZE(ab8500_vana_consumers),
  945. .consumer_supplies = ab8500_vana_consumers,
  946. },
  947. };
  948. struct ab8500_regulator_platform_data ab8500_regulator_plat_data = {
  949. .reg_init = ab8500_reg_init,
  950. .num_reg_init = ARRAY_SIZE(ab8500_reg_init),
  951. .regulator = ab8500_regulators,
  952. .num_regulator = ARRAY_SIZE(ab8500_regulators),
  953. .ext_regulator = ab8500_ext_regulators,
  954. .num_ext_regulator = ARRAY_SIZE(ab8500_ext_regulators),
  955. };
  956. /* Use the AB8500 init settings for AB8505 as they are the same right now */
  957. struct ab8500_regulator_platform_data ab8505_regulator_plat_data = {
  958. .reg_init = ab8505_reg_init,
  959. .num_reg_init = ARRAY_SIZE(ab8505_reg_init),
  960. .regulator = ab8505_regulators,
  961. .num_regulator = ARRAY_SIZE(ab8505_regulators),
  962. };
  963. static void ab8500_modify_reg_init(int id, u8 mask, u8 value)
  964. {
  965. int i;
  966. if (cpu_is_u8520()) {
  967. for (i = ARRAY_SIZE(ab8505_reg_init) - 1; i >= 0; i--) {
  968. if (ab8505_reg_init[i].id == id) {
  969. u8 initval = ab8505_reg_init[i].value;
  970. initval = (initval & ~mask) | (value & mask);
  971. ab8505_reg_init[i].value = initval;
  972. BUG_ON(mask & ~ab8505_reg_init[i].mask);
  973. return;
  974. }
  975. }
  976. } else {
  977. for (i = ARRAY_SIZE(ab8500_reg_init) - 1; i >= 0; i--) {
  978. if (ab8500_reg_init[i].id == id) {
  979. u8 initval = ab8500_reg_init[i].value;
  980. initval = (initval & ~mask) | (value & mask);
  981. ab8500_reg_init[i].value = initval;
  982. BUG_ON(mask & ~ab8500_reg_init[i].mask);
  983. return;
  984. }
  985. }
  986. }
  987. BUG_ON(1);
  988. }
  989. void mop500_regulator_init(void)
  990. {
  991. struct regulator_init_data *regulator;
  992. /*
  993. * Temporarily turn on Vaux2 on 8520 machine
  994. */
  995. if (cpu_is_u8520()) {
  996. /* Vaux2 initialized to be on */
  997. ab8500_modify_reg_init(AB8505_VAUX12REGU, 0x0f, 0x05);
  998. }
  999. /*
  1000. * Handle AB8500_EXT_SUPPLY2 on HREFP_V20_V50 boards (do it for
  1001. * all HREFP_V20 boards)
  1002. */
  1003. if (cpu_is_u8500v20()) {
  1004. /* VextSupply2RequestCtrl = HP/OFF depending on VxRequest */
  1005. ab8500_modify_reg_init(AB8500_REGUREQUESTCTRL3, 0x01, 0x01);
  1006. /* VextSupply2SysClkReq1HPValid = SysClkReq1 controlled */
  1007. ab8500_modify_reg_init(AB8500_REGUSYSCLKREQ1HPVALID2,
  1008. 0x20, 0x20);
  1009. /* VextSupply2 = force HP at initialization */
  1010. ab8500_modify_reg_init(AB8500_EXTSUPPLYREGU, 0x0c, 0x04);
  1011. /* enable VextSupply2 during platform active */
  1012. regulator = &ab8500_ext_regulators[AB8500_EXT_SUPPLY2];
  1013. regulator->constraints.always_on = 1;
  1014. /* disable VextSupply2 in suspend */
  1015. regulator = &ab8500_ext_regulators[AB8500_EXT_SUPPLY2];
  1016. regulator->constraints.state_mem.disabled = 1;
  1017. regulator->constraints.state_standby.disabled = 1;
  1018. /* enable VextSupply2 HW control (used in suspend) */
  1019. regulator->driver_data = (void *)&ab8500_ext_supply2;
  1020. }
  1021. }