2 * linux/arch/arm/mach-s5pv310/max8997-c1.c
4 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
5 * MyungJoo Ham <myungjoo.ham@samsung.com>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
11 * MAX8997 Setting for C1 Board
14 #include <linux/mfd/max8997.h>
15 #include <linux/regulator/machine.h>
17 #include <mach/gpio.h>
18 #include <mach/irqs.h>
20 #include <plat/gpio-cfg.h>
22 void __init c1_pmic_init(void)
26 /* TODO: SET1, SET2, SET3, AP_PMIC_IRQ< ... */
27 gpio = S5PV310_GPX0(7);
28 gpio_request(gpio, "AP_PMIC_IRQ");
29 s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf));
30 s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
33 static struct regulator_consumer_supply c1_max8997_ldo1_consumer[] = {
34 REGULATOR_SUPPLY("vadc", NULL),
35 REGULATOR_SUPPLY("vadc", "s5p-charger"),
37 static struct regulator_consumer_supply c1_max8997_ldo2_consumer[] = {
38 REGULATOR_SUPPLY("vdd_alive", "s5pc210"), /* FIXME: device name */
40 static struct regulator_consumer_supply c1_max8997_ldo3_consumer[] = {
41 REGULATOR_SUPPLY("vusb_a", NULL), /* TODO: DEV NAME? */
42 REGULATOR_SUPPLY("vmipi_1.1v", NULL), /* obsolete */
43 REGULATOR_SUPPLY("vdd11", "mipi"), /* FIXME: device name */
45 static struct regulator_consumer_supply c1_max8997_ldo4_consumer[] = {
46 REGULATOR_SUPPLY("vmipi_1.8V", NULL), /* obsolete */
47 REGULATOR_SUPPLY("vdd18", "mipi"), /* FIXME: device name */
48 REGULATOR_SUPPLY("mipi_csi", "s5p-mipi-csis.0"), /* FIXME: device name */
50 static struct regulator_consumer_supply c1_max8997_ldo5_consumer[] = {
51 REGULATOR_SUPPLY("vhsic", NULL), /* obsolete? 8*/
52 REGULATOR_SUPPLY("vdd12_uhost", "s5pc210"), /* FIXME: device name */
54 static struct regulator_consumer_supply c1_max8997_ldo6_consumer[] = {
55 REGULATOR_SUPPLY("vcc_1.8v", "ld9040"),
57 static struct regulator_consumer_supply c1_max8997_ldo7_consumer[] = {
58 REGULATOR_SUPPLY("dig_18", "0-001f"),
60 static struct regulator_consumer_supply c1_max8997_ldo8_consumer[] = {
61 REGULATOR_SUPPLY("vusb_d", NULL), /* TODO: DEV NAME? */
62 REGULATOR_SUPPLY("vdac", NULL), /* TODO: DEV NAME? */
64 static struct regulator_consumer_supply c1_max8997_ldo9_consumer[] = {
65 REGULATOR_SUPPLY("vcc_2.8v_pda", NULL), /* FIXME: update name */
67 static struct regulator_consumer_supply c1_max8997_ldo10_consumer[] = {
68 REGULATOR_SUPPLY("vpll", NULL), /* obsolete? */
69 REGULATOR_SUPPLY("vdd11_pll", "s5pc210"), /* FIXME: device name */
71 static struct regulator_consumer_supply c1_max8997_ldo11_consumer[] = {
72 REGULATOR_SUPPLY("touch_2.8v", NULL),
74 static struct regulator_consumer_supply c1_max8997_ldo12_consumer[] = {
75 REGULATOR_SUPPLY("vddio", "17-003c"), /* TODO: double check the name */
77 static struct regulator_consumer_supply c1_max8997_ldo13_consumer[] = {
78 REGULATOR_SUPPLY("vcc_3.0v_lcd", "ld9040"),
80 static struct regulator_consumer_supply c1_max8997_ldo14_consumer[] = {
81 REGULATOR_SUPPLY("inmotor", "max8997-haptic"),
83 static struct regulator_consumer_supply c1_max8997_ldo15_consumer[] = {
84 REGULATOR_SUPPLY("led_a_2.8v", NULL), /* FIXME: dev name of motor */
86 static struct regulator_consumer_supply c1_max8997_ldo16_consumer[] = {
87 REGULATOR_SUPPLY("d_sensor", "0-001f"),
89 static struct regulator_consumer_supply c1_max8997_ldo17_consumer[] = {
90 REGULATOR_SUPPLY("vtf_2.8v", "s3c-sdhci.2"),
92 static struct regulator_consumer_supply c1_max8997_ldo18_consumer[] = {
93 REGULATOR_SUPPLY("touch_led_3.3v", NULL),
95 static struct regulator_consumer_supply c1_max8997_ldo21_consumer[] = {
96 /* "Memory I/O Power" */
99 static struct regulator_consumer_supply c1_max8997_buck1_consumer[] = {
100 REGULATOR_SUPPLY("vdd_arm", NULL),
102 static struct regulator_consumer_supply c1_max8997_buck2_consumer[] = {
103 REGULATOR_SUPPLY("vdd_int", NULL),
105 static struct regulator_consumer_supply c1_max8997_buck3_consumer[] = {
106 REGULATOR_SUPPLY("vg3d", "mali_dev.0"),
108 static struct regulator_consumer_supply c1_max8997_buck4_consumer[] = {
109 REGULATOR_SUPPLY("core", "0-001f"),
111 static struct regulator_consumer_supply c1_max8997_buck5_consumer[] = {
112 REGULATOR_SUPPLY("vdd_mem", NULL), /* LPDDR's Core Power */
114 static struct regulator_consumer_supply c1_max8997_buck6_consumer[] = {
115 REGULATOR_SUPPLY("dig_28", "0-001f"),
117 static struct regulator_consumer_supply c1_max8997_buck7_consumer[] = {
118 REGULATOR_SUPPLY("vcc_sub_2.0v", "0-003c"), /* TODO: double check the name */
121 static struct regulator_consumer_supply c1_max8997_esafeout1_consumer[] = {
122 REGULATOR_SUPPLY("usb_vbus_ap_5v", NULL), /* obsolete. FIXME name? */
124 static struct regulator_consumer_supply c1_max8997_esafeout2_consumer[] = {
125 REGULATOR_SUPPLY("usb_vbus_cp_5v", NULL), /* obsolete. FIXME name? */
128 static struct regulator_consumer_supply c1_max8997_charger_consumer[] = {
129 REGULATOR_SUPPLY("vinchg1", "charger-manager.0"),
131 static struct regulator_consumer_supply c1_max8997_charger_topoff_consumer[] = {
132 REGULATOR_SUPPLY("vinchg_stop", NULL),
135 static struct regulator_consumer_supply c1_max8997_32khz_ap_consumer[] = {
136 REGULATOR_SUPPLY("gps_clk", NULL),
137 REGULATOR_SUPPLY("bt_clk", NULL),
138 REGULATOR_SUPPLY("wifi_clk", NULL),
140 static struct regulator_init_data c1_max8997_ldo1_data = {
142 .name = "VADC_3.3V_C210",
145 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
152 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo1_consumer),
153 .consumer_supplies = c1_max8997_ldo1_consumer,
156 static struct regulator_init_data c1_max8997_ldo2_data = {
158 .name = "VALIVE_1.1V_C210",
168 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo2_consumer),
169 .consumer_supplies = c1_max8997_ldo2_consumer,
172 static struct regulator_init_data c1_max8997_ldo3_data = {
174 .name = "VUSB/MIPI_1.1V_C210",
177 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
184 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo3_consumer),
185 .consumer_supplies = c1_max8997_ldo3_consumer,
188 static struct regulator_init_data c1_max8997_ldo4_data = {
190 .name = "VMIPI_1.8V",
193 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
200 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo4_consumer),
201 .consumer_supplies = c1_max8997_ldo4_consumer,
204 static struct regulator_init_data c1_max8997_ldo5_data = {
206 .name = "VHSIC_1.2V_C210",
209 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
216 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo5_consumer),
217 .consumer_supplies = c1_max8997_ldo5_consumer,
220 static struct regulator_init_data c1_max8997_ldo6_data = {
222 .name = "VCC_1.8V_PDA",
232 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo6_consumer),
233 .consumer_supplies = c1_max8997_ldo6_consumer,
236 static struct regulator_init_data c1_max8997_ldo7_data = {
238 .name = "CAM_ISP_1.8V",
241 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
248 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo7_consumer),
249 .consumer_supplies = c1_max8997_ldo7_consumer,
252 static struct regulator_init_data c1_max8997_ldo8_data = {
254 .name = "VUSB/VDAC_3.3V_C210",
257 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
264 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo8_consumer),
265 .consumer_supplies = c1_max8997_ldo8_consumer,
268 static struct regulator_init_data c1_max8997_ldo9_data = {
270 .name = "VCC_2.8V_PDA",
280 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo9_consumer),
281 .consumer_supplies = c1_max8997_ldo9_consumer,
284 static struct regulator_init_data c1_max8997_ldo10_data = {
286 .name = "VPLL_1.1V_C210",
296 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo10_consumer),
297 .consumer_supplies = c1_max8997_ldo10_consumer,
300 static struct regulator_init_data c1_max8997_ldo11_data = {
302 .name = "TOUCH_2.8V",
305 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
312 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo11_consumer),
313 .consumer_supplies = c1_max8997_ldo11_consumer,
316 static struct regulator_init_data c1_max8997_ldo12_data = {
318 .name = "VT_CAM_1.8V",
321 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
328 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo12_consumer),
329 .consumer_supplies = c1_max8997_ldo12_consumer,
332 static struct regulator_init_data c1_max8997_ldo13_data = {
334 .name = "VCC_3.0V_LCD",
337 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
344 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo13_consumer),
345 .consumer_supplies = c1_max8997_ldo13_consumer,
348 static struct regulator_init_data c1_max8997_ldo14_data = {
350 .name = "VCC_3.0V_MOTOR",
353 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
360 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo14_consumer),
361 .consumer_supplies = c1_max8997_ldo14_consumer,
364 static struct regulator_init_data c1_max8997_ldo15_data = {
366 .name = "LED_A_2.8V",
370 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
376 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo15_consumer),
377 .consumer_supplies = c1_max8997_ldo15_consumer,
380 static struct regulator_init_data c1_max8997_ldo16_data = {
382 .name = "CAM_SENSOR_IO_1.8V",
385 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
392 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo16_consumer),
393 .consumer_supplies = c1_max8997_ldo16_consumer,
396 static struct regulator_init_data c1_max8997_ldo17_data = {
401 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
408 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo17_consumer),
409 .consumer_supplies = c1_max8997_ldo17_consumer,
412 static struct regulator_init_data c1_max8997_ldo18_data = {
414 .name = "TOUCH_LED_3.3V",
417 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
424 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo18_consumer),
425 .consumer_supplies = c1_max8997_ldo18_consumer,
428 static struct regulator_init_data c1_max8997_ldo21_data = {
430 .name = "VDDQ_M1M2_1.2V",
440 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_ldo21_consumer),
441 .consumer_supplies = c1_max8997_ldo21_consumer,
444 static struct regulator_init_data c1_max8997_buck1_data = {
446 .name = "VARM_1.2V_C210",
449 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
456 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_buck1_consumer),
457 .consumer_supplies = c1_max8997_buck1_consumer,
460 static struct regulator_init_data c1_max8997_buck2_data = {
462 .name = "VINT_1.1V_C210",
465 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
472 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_buck2_consumer),
473 .consumer_supplies = c1_max8997_buck2_consumer,
476 static struct regulator_init_data c1_max8997_buck3_data = {
478 .name = "VG3D_1.1V_C210",
481 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
482 REGULATOR_CHANGE_STATUS,
488 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_buck3_consumer),
489 .consumer_supplies = c1_max8997_buck3_consumer,
492 static struct regulator_init_data c1_max8997_buck4_data = {
494 .name = "CAM_ISP_CORE_1.2V",
498 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
504 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_buck4_consumer),
505 .consumer_supplies = c1_max8997_buck4_consumer,
508 static struct regulator_init_data c1_max8997_buck5_data = {
510 .name = "VMEM_1.2V_C210",
520 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_buck5_consumer),
521 .consumer_supplies = c1_max8997_buck5_consumer,
524 static struct regulator_init_data c1_max8997_buck6_data = {
526 .name = "CAM_AF_2.8V",
530 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
536 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_buck6_consumer),
537 .consumer_supplies = c1_max8997_buck6_consumer,
540 static struct regulator_init_data c1_max8997_buck7_data = {
542 .name = "VCC_SUB_2.0V",
552 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_buck7_consumer),
553 .consumer_supplies = c1_max8997_buck7_consumer,
556 static struct regulator_init_data c1_max8997_32khz_ap_data = {
565 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_32khz_ap_consumer),
566 .consumer_supplies = c1_max8997_32khz_ap_consumer,
569 static struct regulator_init_data c1_max8997_32khz_cp_data = {
579 static struct regulator_init_data c1_max8997_vichg_data = {
589 static struct regulator_init_data c1_max8997_esafeout1_data = {
592 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
598 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_esafeout1_consumer),
599 .consumer_supplies = c1_max8997_esafeout1_consumer,
602 static struct regulator_init_data c1_max8997_esafeout2_data = {
605 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
611 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_esafeout2_consumer),
612 .consumer_supplies = c1_max8997_esafeout2_consumer,
615 static struct regulator_init_data c1_max8997_charger_cv_data = {
617 .name = "CHARGER_CV",
624 static struct regulator_init_data c1_max8997_charger_data = {
630 .valid_ops_mask = REGULATOR_CHANGE_STATUS |
631 REGULATOR_CHANGE_CURRENT,
633 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_charger_consumer),
634 .consumer_supplies = c1_max8997_charger_consumer,
637 static struct regulator_init_data c1_max8997_charger_topoff_data = {
639 .name = "CHARGER TOPOFF",
642 .valid_ops_mask = REGULATOR_CHANGE_CURRENT,
644 .num_consumer_supplies = ARRAY_SIZE(c1_max8997_charger_topoff_consumer),
645 .consumer_supplies = c1_max8997_charger_topoff_consumer,
648 static struct max8997_regulator_data c1_max8997_regulators[] = {
649 { MAX8997_LDO1, &c1_max8997_ldo1_data },
650 { MAX8997_LDO2, &c1_max8997_ldo2_data },
651 { MAX8997_LDO3, &c1_max8997_ldo3_data },
652 { MAX8997_LDO4, &c1_max8997_ldo4_data },
653 { MAX8997_LDO5, &c1_max8997_ldo5_data },
654 { MAX8997_LDO6, &c1_max8997_ldo6_data },
655 { MAX8997_LDO7, &c1_max8997_ldo7_data },
656 { MAX8997_LDO8, &c1_max8997_ldo8_data },
657 { MAX8997_LDO9, &c1_max8997_ldo9_data },
658 { MAX8997_LDO10, &c1_max8997_ldo10_data },
659 { MAX8997_LDO11, &c1_max8997_ldo11_data },
660 { MAX8997_LDO12, &c1_max8997_ldo12_data },
661 { MAX8997_LDO13, &c1_max8997_ldo13_data },
662 { MAX8997_LDO14, &c1_max8997_ldo14_data },
663 { MAX8997_LDO15, &c1_max8997_ldo15_data },
664 { MAX8997_LDO16, &c1_max8997_ldo16_data },
665 { MAX8997_LDO17, &c1_max8997_ldo17_data },
666 { MAX8997_LDO18, &c1_max8997_ldo18_data },
667 { MAX8997_LDO21, &c1_max8997_ldo21_data },
669 { MAX8997_BUCK1, &c1_max8997_buck1_data },
670 { MAX8997_BUCK2, &c1_max8997_buck2_data },
671 { MAX8997_BUCK3, &c1_max8997_buck3_data },
672 { MAX8997_BUCK4, &c1_max8997_buck4_data },
673 { MAX8997_BUCK5, &c1_max8997_buck5_data },
674 { MAX8997_BUCK6, &c1_max8997_buck6_data },
675 { MAX8997_BUCK7, &c1_max8997_buck7_data },
677 { MAX8997_EN32KHZ_AP, &c1_max8997_32khz_ap_data },
678 { MAX8997_EN32KHZ_CP, &c1_max8997_32khz_cp_data },
680 { MAX8997_ENVICHG, &c1_max8997_vichg_data },
681 { MAX8997_ESAFEOUT1, &c1_max8997_esafeout1_data },
682 { MAX8997_ESAFEOUT2, &c1_max8997_esafeout2_data },
683 { MAX8997_CHARGER_CV, &c1_max8997_charger_cv_data },
684 { MAX8997_CHARGER, &c1_max8997_charger_data },
685 { MAX8997_CHARGER_TOPOFF, &c1_max8997_charger_topoff_data },
688 extern struct max8997_muic_platform_data c1_muic_pdata;
689 extern struct max8997_haptic_platform_data c1_haptic_pdata;
691 struct max8997_platform_data c1_max8997_pdata = {
692 .irq_base = IRQ_PMIC_BASE,
696 .num_regulators = ARRAY_SIZE(c1_max8997_regulators),
697 .regulators = c1_max8997_regulators,
699 .buck125_gpios = { S5PV310_GPX0(5), S5PV310_GPX0(6), S5PV310_GPL0(0) },
700 .buck125_default_idx = 0,
701 .buck1_gpiodvs = false,
702 .buck2_gpiodvs = true,
703 .buck5_gpiodvs = false,
705 .buck1_voltage[0] = 1350000, /* 1.35V */
706 .buck1_voltage[1] = 1300000, /* 1.3V */
707 .buck1_voltage[2] = 1250000, /* 1.25V */
708 .buck1_voltage[3] = 1200000, /* 1.2V */
709 .buck1_voltage[4] = 1150000, /* 1.15V */
710 .buck1_voltage[5] = 1100000, /* 1.1V */
711 .buck1_voltage[6] = 1000000, /* 1.0V */ /* No room for 1.05V */
712 .buck1_voltage[7] = 950000, /* 0.95V */
714 .buck2_voltage[0] = 1100000, /* 1.1V */
715 .buck2_voltage[1] = 1000000, /* 1.0V */
716 .buck2_voltage[2] = 950000, /* 0.95V */
717 .buck2_voltage[3] = 900000, /* 0.9V */
718 .buck2_voltage[4] = 1100000, /* 1.1V */
719 .buck2_voltage[5] = 1000000, /* 1.0V */
720 .buck2_voltage[6] = 950000, /* 0.95V */
721 .buck2_voltage[7] = 900000, /* 0.9V */
723 .buck5_voltage[0] = 1200000, /* 1.2V */
724 .buck5_voltage[1] = 1200000, /* 1.2V */
725 .buck5_voltage[2] = 1200000, /* 1.2V */
726 .buck5_voltage[3] = 1200000, /* 1.2V */
727 .buck5_voltage[4] = 1200000, /* 1.2V */
728 .buck5_voltage[5] = 1200000, /* 1.2V */
729 .buck5_voltage[6] = 1200000, /* 1.2V */
730 .buck5_voltage[7] = 1200000, /* 1.2V */
734 .eoc_ratio = 0, /* TODO: change after ratio is implemented */
735 .vichg_adc_get_uV = NULL, /* TODO: Need to fill this in */
739 .haptic_pdata = &c1_haptic_pdata,
742 .muic_pdata = &c1_muic_pdata,