1
2
3
4
5
6
7
8
9
10
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
35
36static struct regulator_consumer_supply tps61052_vaudio_consumers[] = {
37
38
39
40
41
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
59 REGULATOR_SUPPLY("vddi", "mcde_disp_sony_acx424akp.0"),
60
61 REGULATOR_SUPPLY("vdd1", "samsung_s6d16d0.0"),
62
63 REGULATOR_SUPPLY("vdd1", "samsung_s6d16d0.1"),
64
65 REGULATOR_SUPPLY("vcc", "gpio-keys.0"),
66
67 REGULATOR_SUPPLY("vcc", "2-0029"),
68
69 REGULATOR_SUPPLY("vdd", "2-0018"),
70
71 REGULATOR_SUPPLY("vdd", "2-0019"),
72
73 REGULATOR_SUPPLY("vdd", "2-001e"),
74
75 REGULATOR_SUPPLY("avdd", "3-005c"),
76 REGULATOR_SUPPLY("avdd", "3-005d"),
77
78 REGULATOR_SUPPLY("vdd", "3-004b"),
79
80 REGULATOR_SUPPLY("vdd", "2-0068"),
81
82 REGULATOR_SUPPLY("vdd", "3-0029"),
83
84 REGULATOR_SUPPLY("vdd", "2-005c"),
85
86 REGULATOR_SUPPLY("vcpin", "spi8.0"),
87
88 REGULATOR_SUPPLY("vaux12v5", "mmio_camera"),
89};
90
91static struct regulator_consumer_supply ab8500_vaux2_consumers[] = {
92
93 REGULATOR_SUPPLY("vmmc", "sdi4"),
94
95 REGULATOR_SUPPLY("vcc-N2158", "ab8500-codec.0"),
96
97 REGULATOR_SUPPLY("vcc-N2158", "ab8500-acc-det.0"),
98
99 REGULATOR_SUPPLY("vcc-N2158", "mcde_tv_ab8500.4"),
100
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
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
121 REGULATOR_SUPPLY("v-aux8", NULL),
122};
123
124static struct regulator_consumer_supply ab8505_vadc_consumers[] = {
125
126 REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"),
127
128 REGULATOR_SUPPLY("vddadc", "ab8500-charger.0"),
129};
130
131static struct regulator_consumer_supply ab8500_vtvout_consumers[] = {
132
133 REGULATOR_SUPPLY("vtvout", "ab8500-denc.0"),
134
135 REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"),
136
137 REGULATOR_SUPPLY("vddadc", "ab8500-charger.0"),
138
139 REGULATOR_SUPPLY("vtvout", "mcde_tv_ab8500.4"),
140};
141
142static struct regulator_consumer_supply ab8500_vaud_consumers[] = {
143
144 REGULATOR_SUPPLY("vaud", "ab8500-codec.0"),
145};
146
147static struct regulator_consumer_supply ab8500_vamic1_consumers[] = {
148
149 REGULATOR_SUPPLY("vamic1", "ab8500-codec.0"),
150};
151
152static struct regulator_consumer_supply ab8500_vamic2_consumers[] = {
153
154 REGULATOR_SUPPLY("vamic2", "ab8500-codec.0"),
155};
156
157static struct regulator_consumer_supply ab8500_vdmic_consumers[] = {
158
159 REGULATOR_SUPPLY("vdmic", "ab8500-codec.0"),
160};
161
162static struct regulator_consumer_supply ab8500_vintcore_consumers[] = {
163
164 REGULATOR_SUPPLY("v-intcore", NULL),
165
166 REGULATOR_SUPPLY("vddulpivio18", "ab8500-usb.0"),
167
168 REGULATOR_SUPPLY("v-intcore", "abx500-clk.0"),
169};
170
171static struct regulator_consumer_supply ab8505_usb_consumers[] = {
172
173 REGULATOR_SUPPLY("v-ape", NULL),
174};
175
176static struct regulator_consumer_supply ab8500_vana_consumers[] = {
177
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
185 REGULATOR_SUPPLY("vddcsi1v2", "mmio_camera"),
186};
187
188
189static struct ab8500_regulator_reg_init ab8500_reg_init[] = {
190
191
192
193
194 INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL2, 0xf0, 0x00),
195
196
197
198
199
200
201 INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL3, 0xff, 0x00),
202
203
204
205
206 INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL4, 0x07, 0x00),
207
208
209
210
211
212
213 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID1, 0xe8, 0x00),
214
215
216
217
218
219 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID2, 0x70, 0x40),
220
221
222
223
224
225
226 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID1, 0xe8, 0x00),
227
228
229
230
231
232 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID2, 0x07, 0x00),
233
234
235
236
237
238
239 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID1, 0xe8, 0x00),
240
241
242
243
244
245 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID2, 0x07, 0x04),
246
247
248
249
250 INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID1, 0xa0, 0x00),
251
252
253
254
255
256
257
258 INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID2, 0x1f, 0x00),
259
260
261
262
263
264
265
266
267
268 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID1, 0xfe, 0x2a),
269
270
271
272
273
274
275
276
277
278 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID2, 0xfe, 0x20),
279
280
281
282
283
284
285
286 INIT_REGULATOR_REGISTER(AB8500_REGUMISC1, 0xfe, 0x10),
287
288
289
290
291
292
293 INIT_REGULATOR_REGISTER(AB8500_VAUDIOSUPPLY, 0x1e, 0x00),
294
295
296
297
298 INIT_REGULATOR_REGISTER(AB8500_REGUCTRL1VAMIC, 0x03, 0x00),
299
300
301
302
303 INIT_REGULATOR_REGISTER(AB8500_VPLLVANAREGU, 0x0f, 0x02),
304
305
306
307
308 INIT_REGULATOR_REGISTER(AB8500_VREFDDR, 0x03, 0x00),
309
310
311
312
313
314
315
316 INIT_REGULATOR_REGISTER(AB8500_EXTSUPPLYREGU, 0xff, 0x13),
317
318
319
320
321 INIT_REGULATOR_REGISTER(AB8500_VAUX12REGU, 0x0f, 0x01),
322
323
324
325 INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3REGU, 0x03, 0x00),
326
327
328
329 INIT_REGULATOR_REGISTER(AB8500_VAUX1SEL, 0x0f, 0x0C),
330
331
332
333 INIT_REGULATOR_REGISTER(AB8500_VAUX2SEL, 0x0f, 0x0d),
334
335
336
337 INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3SEL, 0x07, 0x07),
338
339
340
341 INIT_REGULATOR_REGISTER(AB8500_REGUCTRL2SPARE, 0x01, 0x00),
342
343
344
345
346
347
348
349
350 INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH, 0xfc, 0x00),
351
352
353
354
355
356 INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH2, 0x16, 0x00),
357};
358
359
360static struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = {
361
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,
371 },
372 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers),
373 .consumer_supplies = ab8500_vaux1_consumers,
374 },
375
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
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
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
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
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
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
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
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
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
481static struct regulator_consumer_supply ab8500_ext_supply3_consumers[] = {
482
483 REGULATOR_SUPPLY("vinvsim", "sim-detect.0"),
484};
485
486
487static struct ab8500_ext_regulator_cfg ab8500_ext_supply2 = {
488 .hwreq = true,
489};
490
491
492
493
494static struct regulator_init_data ab8500_ext_regulators[] = {
495
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
507 [AB8500_EXT_SUPPLY2] = {
508 .constraints = {
509 .name = "ab8500-ext-supply2",
510 .min_uV = 1360000,
511 .max_uV = 1360000,
512 },
513 },
514
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
530static struct ab8500_regulator_reg_init ab8505_reg_init[] = {
531
532
533
534
535
536
537 INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL1, 0x00, 0x00),
538
539
540
541
542
543 INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL2, 0x30, 0x00),
544
545
546
547
548 INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL3, 0xf0, 0x00),
549
550
551
552
553 INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL4, 0x07, 0x00),
554
555
556
557
558
559
560
561
562
563
564 INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQ1HPVALID1, 0xe8, 0x00),
565
566
567
568
569
570
571 INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQ1HPVALID2, 0x00, 0x00),
572
573
574
575
576
577
578
579
580
581
582 INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ1VALID1, 0xe8, 0x00),
583
584
585
586 INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ1VALID2, 0x00, 0x00),
587
588
589
590
591
592
593
594
595
596
597 INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ2VALID1, 0xe8, 0x00),
598
599
600
601 INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ2VALID2, 0x00, 0x00),
602
603
604
605
606
607
608
609
610
611
612
613 INIT_REGULATOR_REGISTER(AB8505_REGUSWHPREQVALID1, 0xa0, 0x00),
614
615
616
617
618
619 INIT_REGULATOR_REGISTER(AB8505_REGUSWHPREQVALID2, 0x03, 0x00),
620
621
622
623
624
625 INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQVALID1, 0x0e, 0x0a),
626
627
628
629
630
631 INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQVALID2, 0x0e, 0x00),
632
633
634
635
636
637
638 INIT_REGULATOR_REGISTER(AB8505_REGUVAUX4REQVALID, 0x00, 0x00),
639
640
641
642
643
644
645
646 INIT_REGULATOR_REGISTER(AB8505_REGUMISC1, 0xfe, 0x10),
647
648
649
650
651
652
653 INIT_REGULATOR_REGISTER(AB8505_VAUDIOSUPPLY, 0x1e, 0x00),
654
655
656
657
658 INIT_REGULATOR_REGISTER(AB8505_REGUCTRL1VAMIC, 0x03, 0x00),
659
660
661
662
663
664
665 INIT_REGULATOR_REGISTER(AB8505_VSMPSAREGU, 0x00, 0x00),
666
667
668
669
670
671
672 INIT_REGULATOR_REGISTER(AB8505_VSMPSBREGU, 0x00, 0x00),
673
674
675
676
677
678
679 INIT_REGULATOR_REGISTER(AB8505_VSAFEREGU, 0x00, 0x00),
680
681
682
683
684 INIT_REGULATOR_REGISTER(AB8505_VPLLVANAREGU, 0x0f, 0x02),
685
686
687
688
689
690
691
692 INIT_REGULATOR_REGISTER(AB8505_EXTSUPPLYREGU, 0xff, 0x30),
693
694
695
696
697 INIT_REGULATOR_REGISTER(AB8505_VAUX12REGU, 0x0f, 0x01),
698
699
700
701 INIT_REGULATOR_REGISTER(AB8505_VRF1VAUX3REGU, 0x03, 0x00),
702
703
704
705 INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL1, 0x00, 0x00),
706
707
708
709 INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL2, 0x00, 0x00),
710
711
712
713 INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL3, 0x00, 0x00),
714
715
716
717 INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL1, 0x00, 0x00),
718
719
720
721 INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL2, 0x00, 0x00),
722
723
724
725 INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL3, 0x00, 0x00),
726
727
728
729 INIT_REGULATOR_REGISTER(AB8505_VSAFESEL1, 0x00, 0x00),
730
731
732
733 INIT_REGULATOR_REGISTER(AB8505_VSAFESEL2, 0x00, 0x00),
734
735
736
737 INIT_REGULATOR_REGISTER(AB8505_VSAFESEL3, 0x00, 0x00),
738
739
740
741 INIT_REGULATOR_REGISTER(AB8505_VAUX1SEL, 0x0f, 0x0C),
742
743
744
745 INIT_REGULATOR_REGISTER(AB8505_VAUX2SEL, 0x0f, 0x0d),
746
747
748
749 INIT_REGULATOR_REGISTER(AB8505_VRF1VAUX3SEL, 0x07, 0x07),
750
751
752
753 INIT_REGULATOR_REGISTER(AB8505_VAUX4REQCTRL, 0x00, 0x00),
754
755
756
757 INIT_REGULATOR_REGISTER(AB8505_VAUX4REGU, 0x00, 0x00),
758
759
760
761 INIT_REGULATOR_REGISTER(AB8505_VAUX4SEL, 0x00, 0x00),
762
763
764
765
766
767
768
769
770 INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH, 0xfc, 0x00),
771
772
773
774
775
776 INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH2, 0x16, 0x00),
777
778
779
780 INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH3, 0x01, 0x00),
781
782
783
784
785
786
787
788
789 INIT_REGULATOR_REGISTER(AB8505_CTRLVAUX5, 0x00, 0x00),
790
791
792
793
794
795
796 INIT_REGULATOR_REGISTER(AB8505_CTRLVAUX6, 0x00, 0x00),
797};
798
799static struct regulator_init_data ab8505_regulators[AB8505_NUM_REGULATORS] = {
800
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,
809 },
810 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers),
811 .consumer_supplies = ab8500_vaux1_consumers,
812 },
813
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
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
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
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
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
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
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
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
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
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
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
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
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
1032
1033 if (cpu_is_u8520()) {
1034
1035 ab8500_modify_reg_init(AB8505_VAUX12REGU, 0x0f, 0x05);
1036 }
1037
1038
1039
1040
1041
1042 if (cpu_is_u8500v20()) {
1043
1044 ab8500_modify_reg_init(AB8500_REGUREQUESTCTRL3, 0x01, 0x01);
1045
1046
1047 ab8500_modify_reg_init(AB8500_REGUSYSCLKREQ1HPVALID2,
1048 0x20, 0x20);
1049
1050
1051 ab8500_modify_reg_init(AB8500_EXTSUPPLYREGU, 0x0c, 0x04);
1052
1053
1054 regulator = &ab8500_ext_regulators[AB8500_EXT_SUPPLY2];
1055 regulator->constraints.always_on = 1;
1056
1057
1058 regulator = &ab8500_ext_regulators[AB8500_EXT_SUPPLY2];
1059 regulator->constraints.state_mem.disabled = 1;
1060 regulator->constraints.state_standby.disabled = 1;
1061
1062
1063 regulator->driver_data = (void *)&ab8500_ext_supply2;
1064 }
1065}
1066