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