* [PATCH] S5PC210: universal: update support pmic for c210 universal board
@ 2010-12-23 8:56 Donghwa Lee
2010-12-23 9:05 ` Russell King - ARM Linux
2010-12-23 9:06 ` Kyungmin Park
0 siblings, 2 replies; 4+ messages in thread
From: Donghwa Lee @ 2010-12-23 8:56 UTC (permalink / raw)
To: linux-arm-kernel
This patch supports pmic for c210 universal board.
Signed-off-by: Donghwa Lee <dh09.lee@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
arch/arm/mach-s5pv310/Kconfig | 2 +
arch/arm/mach-s5pv310/include/mach/irqs.h | 27 +
arch/arm/mach-s5pv310/mach-universal_c210.c | 687 +++++++++++++++++++++++++++
3 files changed, 716 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-s5pv310/Kconfig b/arch/arm/mach-s5pv310/Kconfig
index c6d735c..e379646 100644
--- a/arch/arm/mach-s5pv310/Kconfig
+++ b/arch/arm/mach-s5pv310/Kconfig
@@ -87,7 +87,9 @@ config MACH_UNIVERSAL_C210
select S3C_DEV_HSMMC3
select S5PV310_SETUP_SDHCI
select S3C_DEV_I2C1
+ select S3C_DEV_I2C5
select S5PV310_SETUP_I2C1
+ select S5PV310_SETUP_I2C5
help
Machine support for Samsung Mobile Universal S5PC210 Reference
Board. S5PC210(MCP) is one of package option of S5PV310
diff --git a/arch/arm/mach-s5pv310/include/mach/irqs.h b/arch/arm/mach-s5pv310/include/mach/irqs.h
index 99e7dad..6d7c5f0 100644
--- a/arch/arm/mach-s5pv310/include/mach/irqs.h
+++ b/arch/arm/mach-s5pv310/include/mach/irqs.h
@@ -101,6 +101,11 @@
#define IRQ_EINT16_31 COMBINER_IRQ(39, 0)
+/* UART interrupts, each UART has 4 intterupts per channel so
+ * * use the space between the ISA and S3C main interrupts. Note, these
+ * * are not in the same order as the S3C24XX series! */
+#define IRQ_S5P_UART_BASE4 COMBINER_IRQ(40,0)
+
#define MAX_COMBINER_NR 40
#define S5P_IRQ_EINT_BASE COMBINER_IRQ(MAX_COMBINER_NR, 0)
@@ -108,6 +113,28 @@
#define S5P_EINT_BASE1 (S5P_IRQ_EINT_BASE + 0)
#define S5P_EINT_BASE2 (S5P_IRQ_EINT_BASE + 16)
+/* S3C compatibilty defines */
+#define IRQ_S3CUART_RX4 IRQ_S5P_UART_RX4
+
+#define IRQ_EINT_BASE IRQ_S5P_UART_BASE4 + 4
+
+#define EINT_NUMBER(x) ((x) + IRQ_EINT_BASE)
+
+#ifdef CONFIG_SAMSUNG_IRQ_GPIO
+/* GPIO interrupts */
+#define IRQ_GPIO_BASE EINT_NUMBER(32)
+#define IRQ_GPIO1_NR_GROUPS 16
+#define IRQ_GPIO2_NR_GROUPS 9
+#define IRQ_GPIO_GROUP(x) (IRQ_GPIO_BASE + ((x) * 8))
+#define IRQ_GPIO_END IRQ_GPIO_GROUP(IRQ_GPIO1_NR_GROUPS + IRQ_GPIO2_NR_GROUPS)
+#else
+#define IRQ_GPIO_END EINT_NUMBER(32)
+#endif
+
+#define IRQ_BOARD_START IRQ_GPIO_END
+#define IRQ_MAX8998_BASE IRQ_BOARD_START
+#define IRQ_MAX8998_NR 18
+
/* Set the default NR_IRQS */
#define NR_IRQS (S5P_IRQ_EINT_BASE + 32)
diff --git a/arch/arm/mach-s5pv310/mach-universal_c210.c b/arch/arm/mach-s5pv310/mach-universal_c210.c
index 766e3ab..6e796c9 100644
--- a/arch/arm/mach-s5pv310/mach-universal_c210.c
+++ b/arch/arm/mach-s5pv310/mach-universal_c210.c
@@ -11,10 +11,14 @@
#include <linux/serial_core.h>
#include <linux/input.h>
#include <linux/i2c.h>
+#include <linux/i2c-gpio.h>
#include <linux/gpio_keys.h>
#include <linux/gpio.h>
+#include <linux/fb.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/fixed.h>
+#include <linux/regulator/max8952.h>
+#include <linux/mfd/max8998.h>
#include <linux/mmc/host.h>
#include <asm/mach/arch.h>
@@ -25,8 +29,15 @@
#include <plat/cpu.h>
#include <plat/devs.h>
#include <plat/sdhci.h>
+#include <plat/gpio-cfg.h>
+#include <plat/gpio-core.h>
+#include <plat/regs-fb.h>
+#include <plat/clock.h>
+#include <plat/iic.h>
+#include <mach/gpio.h>
#include <mach/map.h>
+#include <mach/regs-clock.h>
/* Following are default values for UCON, ULCON and UFCON UART registers */
#define UNIVERSAL_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \
@@ -69,6 +80,677 @@ static struct s3c2410_uartcfg universal_uartcfgs[] __initdata = {
},
};
+/* I2C5: PMICs LP3974, MAX8952 */
+static struct regulator_consumer_supply max8952_consumer[] = {
+ {
+ .supply = "varm_1.2v_c210",
+ }, {
+ .supply = "vdd_arm",
+ },
+};
+
+static struct max8952_platform_data universal_max8952_pdata = {
+ .gpio_vid0 = S5PV310_GPX0(3),
+ .gpio_vid1 = S5PV310_GPX0(4),
+ .gpio_en = -1, /* Not controllable, set "Always High" */
+ .default_mode = 3, /* vid0 = 1, vid1 = 1 */
+ .dvs_mode = { 18, 28, 43, 33 },
+ /*
+ * 0.95 1.05 1.20 1.10V (Defaule: 1.10V)
+ * 1.10V is 0x3 so that we can reduce current at sleep
+ * because there are pull-up's at vid0 and vid1 and 1.10V is
+ * the default voltage (cpufreq is supposed to set at the
+ * default voltage/frequency during suspend).
+ */
+ .sync_freq = 0, /* default: fastest */
+ .ramp_speed = 0, /* default: fastest */
+
+ .reg_data = {
+ .constraints = {
+ .name = "VARM_1.2V",
+ .min_uV = 770000,
+ .max_uV = 1400000,
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
+ .always_on = 1,
+ .state_mem = {
+ .enabled = 1,
+ .disabled = 0,
+ /*
+ * MAX8952's EN is connected to an
+ * uncontrollable pin. Assume it is
+ * "ON".
+ */
+ }
+ },
+ .num_consumer_supplies = ARRAY_SIZE(max8952_consumer),
+ .consumer_supplies = max8952_consumer,
+ },
+};
+
+static struct regulator_consumer_supply lp3974_buck1_consumer[] = {
+ {
+ .supply = "vint_1.1v_c210",
+ }, {
+ .supply = "vdd_int",
+ },
+};
+
+static struct regulator_consumer_supply lp3974_buck2_consumer[] = {
+ {
+ .supply = "vg3d_1.2v_c210",
+ },
+};
+
+static struct regulator_consumer_supply lp3974_buck3_consumer[] = {
+ {
+ .supply = "vcc_1.8v_pda",
+ },
+};
+
+static struct regulator_consumer_supply lp3974_buck4_consumer[] = {
+ {
+ .supply = "vmem_1.2v_c210",
+ },
+};
+
+static struct regulator_consumer_supply lp3974_ldo2_consumer[] = {
+ REGULATOR_SUPPLY("valive", NULL),
+};
+
+static struct regulator_consumer_supply lp3974_ldo3_consumer[] = {
+ REGULATOR_SUPPLY("vusb_a", NULL),
+ REGULATOR_SUPPLY("vmipi_1.1v", NULL),
+};
+
+static struct regulator_consumer_supply lp3974_ldo4_consumer[] = {
+ REGULATOR_SUPPLY("vadc", NULL),
+};
+
+static struct regulator_consumer_supply lp3974_ldo5_consumer[] = {
+ REGULATOR_SUPPLY("vmmc", "s3c-sdhci.2"),
+};
+
+static struct regulator_consumer_supply lp3974_ldo7_consumer[] = {
+ REGULATOR_SUPPLY("vmipi_1.8v", NULL),
+ REGULATOR_SUPPLY("vlcd_1.8v", NULL),
+};
+
+static struct regulator_consumer_supply lp3974_ldo8_consumer[] = {
+ REGULATOR_SUPPLY("vusb_d", NULL),
+ REGULATOR_SUPPLY("vdac", NULL),
+};
+
+static struct regulator_consumer_supply lp3974_ldo9_consumer[] = {
+ REGULATOR_SUPPLY("vcc_2.8v_pda", NULL),
+};
+
+static struct regulator_consumer_supply lp3974_ldo10_consumer[] = {
+ REGULATOR_SUPPLY("vpll", NULL),
+};
+
+static struct regulator_consumer_supply lp3974_ldo11_consumer[] = {
+ {
+ .supply = "cam_af_3.3v",
+ },
+};
+
+static struct regulator_consumer_supply lp3974_ldo12_consumer[] = {
+ {
+ .supply = "ps_2.8v",
+ },
+};
+
+static struct regulator_consumer_supply lp3974_ldo13_consumer[] = {
+ REGULATOR_SUPPLY("vhsic", NULL),
+};
+
+static struct regulator_consumer_supply lp3974_ldo14_consumer[] = {
+ {
+ .supply = "cam_i_host_1.8v",
+ },
+};
+
+static struct regulator_consumer_supply lp3974_ldo15_consumer[] = {
+ {
+ .supply = "cam_s_dig_1.2v",
+ }, {
+ .supply = "fm33_core_1.2v",
+ },
+};
+
+static struct regulator_consumer_supply lp3974_ldo16_consumer[] = {
+ {
+ .supply = "cam_s_ana_2.8v",
+ },
+};
+
+static struct regulator_consumer_supply lp3974_ldo17_consumer[] = {
+ REGULATOR_SUPPLY("vlcd_3.0v", NULL),
+};
+
+static struct regulator_consumer_supply lp3974_esafeout1_consumer[] = {
+ {
+ .supply = "usb_vbus_ap_5v",
+ },
+};
+
+static struct regulator_consumer_supply lp3974_esafeout2_consumer[] = {
+ {
+ .supply = "usb_vbus_cp_5v",
+ },
+};
+
+static struct regulator_consumer_supply lp3974_charger_consumer[] = {
+ {
+ .supply = "battery_charger",
+ },
+};
+
+static struct regulator_init_data lp3974_buck1_data = {
+ .constraints = {
+ .name = "VINT_1.1V",
+ .min_uV = 750000,
+ .max_uV = 1500000,
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
+ REGULATOR_CHANGE_STATUS,
+ .boot_on = 1,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_buck1_consumer),
+ .consumer_supplies = lp3974_buck1_consumer,
+};
+
+static struct regulator_init_data lp3974_buck2_data = {
+ .constraints = {
+ .name = "VG3D_1.2V",
+ .min_uV = 1200000,
+ .max_uV = 1200000,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .apply_uV = 1,
+ .boot_on = 0,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_buck2_consumer),
+ .consumer_supplies = lp3974_buck2_consumer,
+};
+
+static struct regulator_init_data lp3974_buck3_data = {
+ .constraints = {
+ .name = "VCC_1.8V",
+ .min_uV = 1800000,
+ .max_uV = 1800000,
+ .apply_uV = 1,
+ .always_on = 1,
+ .state_mem = {
+ .enabled = 1,
+ .disabled = 0,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_buck3_consumer),
+ .consumer_supplies = lp3974_buck3_consumer,
+};
+
+static struct regulator_init_data lp3974_buck4_data = {
+ .constraints = {
+ .name = "VMEM_1.2V",
+ .min_uV = 1200000,
+ .max_uV = 1200000,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .boot_on = 1,
+ .apply_uV = 1,
+ .state_mem = {
+ .enabled = 1,
+ .disabled = 0,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_buck4_consumer),
+ .consumer_supplies = lp3974_buck4_consumer,
+};
+
+static struct regulator_init_data lp3974_ldo2_data = {
+ .constraints = {
+ .name = "VALIVE_1.2V",
+ .min_uV = 1200000,
+ .max_uV = 1200000,
+ .apply_uV = 1,
+ .always_on = 1,
+ .state_mem = {
+ .enabled = 1,
+ .disabled = 0,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo2_consumer),
+ .consumer_supplies = lp3974_ldo2_consumer,
+};
+
+static struct regulator_init_data lp3974_ldo3_data = {
+ .constraints = {
+ .name = "VUSB/MIPI_1.1V",
+ .min_uV = 1100000,
+ .max_uV = 1100000,
+ .apply_uV = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo3_consumer),
+ .consumer_supplies = lp3974_ldo3_consumer,
+};
+
+static struct regulator_init_data lp3974_ldo4_data = {
+ .constraints = {
+ .name = "VADC_3.3V",
+ .min_uV = 3300000,
+ .max_uV = 3300000,
+ .apply_uV = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo4_consumer),
+ .consumer_supplies = lp3974_ldo4_consumer,
+};
+
+static struct regulator_init_data lp3974_ldo5_data = {
+ .constraints = {
+ .name = "VTF_2.8V",
+ .min_uV = 2800000,
+ .max_uV = 2800000,
+ .apply_uV = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo5_consumer),
+ .consumer_supplies = lp3974_ldo5_consumer,
+};
+
+static struct regulator_init_data lp3974_ldo6_data = {
+ .constraints = {
+ .name = "LDO6",
+ .min_uV = 2000000,
+ .max_uV = 2000000,
+ .apply_uV = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+};
+
+static struct regulator_init_data lp3974_ldo7_data = {
+ .constraints = {
+ .name = "VLCD/VMIPI_1.8V",
+ .min_uV = 1800000,
+ .max_uV = 1800000,
+ .apply_uV = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo7_consumer),
+ .consumer_supplies = lp3974_ldo7_consumer,
+};
+
+static struct regulator_init_data lp3974_ldo8_data = {
+ .constraints = {
+ .name = "VUSB/VDAC_3.3V",
+ .min_uV = 3300000,
+ .max_uV = 3300000,
+ .apply_uV = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo8_consumer),
+ .consumer_supplies = lp3974_ldo8_consumer,
+};
+
+static struct regulator_init_data lp3974_ldo9_data = {
+ .constraints = {
+ .name = "VCC_2.8V",
+ .min_uV = 2800000,
+ .max_uV = 2800000,
+ .apply_uV = 1,
+ .always_on = 1,
+ .state_mem = {
+ .enabled = 1,
+ .disabled = 0,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo9_consumer),
+ .consumer_supplies = lp3974_ldo9_consumer,
+};
+
+static struct regulator_init_data lp3974_ldo10_data = {
+ .constraints = {
+ .name = "VPLL_1.1V",
+ .min_uV = 1100000,
+ .max_uV = 1100000,
+ .apply_uV = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo10_consumer),
+ .consumer_supplies = lp3974_ldo10_consumer,
+};
+
+static struct regulator_init_data lp3974_ldo11_data = {
+ .constraints = {
+ .name = "CAM_AF_3.3V",
+ .min_uV = 3300000,
+ .max_uV = 3300000,
+ .apply_uV = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo11_consumer),
+ .consumer_supplies = lp3974_ldo11_consumer,
+};
+
+static struct regulator_init_data lp3974_ldo12_data = {
+ .constraints = {
+ .name = "PS_2.8V",
+ .min_uV = 2800000,
+ .max_uV = 2800000,
+ .apply_uV = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo12_consumer),
+ .consumer_supplies = lp3974_ldo12_consumer,
+};
+
+static struct regulator_init_data lp3974_ldo13_data = {
+ .constraints = {
+ .name = "VHSIC_1.2V",
+ .min_uV = 1200000,
+ .max_uV = 1200000,
+ .apply_uV = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo13_consumer),
+ .consumer_supplies = lp3974_ldo13_consumer,
+};
+
+static struct regulator_init_data lp3974_ldo14_data = {
+ .constraints = {
+ .name = "CAM_I_HOST_1.8V",
+ .min_uV = 1800000,
+ .max_uV = 1800000,
+ .apply_uV = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo14_consumer),
+ .consumer_supplies = lp3974_ldo14_consumer,
+};
+
+static struct regulator_init_data lp3974_ldo15_data = {
+ .constraints = {
+ .name = "CAM_S_DIG/FM33_CORE_1.2V",
+ .min_uV = 1200000,
+ .max_uV = 1200000,
+ .apply_uV = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo15_consumer),
+ .consumer_supplies = lp3974_ldo15_consumer,
+};
+
+static struct regulator_init_data lp3974_ldo16_data = {
+ .constraints = {
+ .name = "CAM_S_ANA_2.8V",
+ .min_uV = 2800000,
+ .max_uV = 2800000,
+ .apply_uV = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo16_consumer),
+ .consumer_supplies = lp3974_ldo16_consumer,
+};
+
+static struct regulator_init_data lp3974_ldo17_data = {
+ .constraints = {
+ .name = "VCC_3.0V_LCD",
+ .min_uV = 3000000,
+ .max_uV = 3000000,
+ .apply_uV = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo17_consumer),
+ .consumer_supplies = lp3974_ldo17_consumer,
+};
+
+static struct regulator_init_data lp3974_32khz_ap_data = {
+ .constraints = {
+ .name = "32KHz AP",
+ .always_on = 1,
+ .state_mem = {
+ .enabled = 1,
+ .disabled = 0,
+ },
+ },
+};
+
+static struct regulator_init_data lp3974_32khz_cp_data = {
+ .constraints = {
+ .name = "32KHz CP",
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+};
+
+static struct regulator_init_data lp3974_vichg_data = {
+ .constraints = {
+ .name = "VICHG",
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+};
+
+static struct regulator_init_data lp3974_esafeout1_data = {
+ .constraints = {
+ .name = "SAFEOUT1",
+ .min_uV = 4800000,
+ .max_uV = 4800000,
+ .apply_uV = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_esafeout1_consumer),
+ .consumer_supplies = lp3974_esafeout1_consumer,
+};
+
+static struct regulator_init_data lp3974_esafeout2_data = {
+ .constraints = {
+ .name = "SAFEOUT2",
+ .min_uV = 4800000,
+ .max_uV = 4800000,
+ .apply_uV = 1,
+ .boot_on = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+ .state_mem = {
+ .enabled = 0,
+ .disabled = 1,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_esafeout2_consumer),
+ .consumer_supplies = lp3974_esafeout2_consumer,
+};
+
+static struct regulator_init_data lp3974_charger_data = {
+ .constraints = {
+ .name = "CHARGER",
+ .min_uA = 100000,
+ .max_uA = 800000,
+ .boot_on = 1,
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS |
+ REGULATOR_CHANGE_CURRENT,
+ .state_mem = {
+ .enabled = 1,
+ .disabled = 0,
+ },
+ /* Charger may be turned on anytime */
+ .state_disk = {
+ .enabled = 1,
+ .disabled = 0,
+ },
+ .state_standby = {
+ .enabled = 1,
+ .disabled = 0,
+ },
+ },
+ .num_consumer_supplies = ARRAY_SIZE(lp3974_charger_consumer),
+ .consumer_supplies = lp3974_charger_consumer,
+};
+
+static struct max8998_regulator_data lp3974_regulators[] = {
+ { MAX8998_LDO2, &lp3974_ldo2_data },
+ { MAX8998_LDO3, &lp3974_ldo3_data },
+ { MAX8998_LDO4, &lp3974_ldo4_data },
+ { MAX8998_LDO5, &lp3974_ldo5_data },
+ { MAX8998_LDO6, &lp3974_ldo6_data },
+ { MAX8998_LDO7, &lp3974_ldo7_data },
+ { MAX8998_LDO8, &lp3974_ldo8_data },
+ { MAX8998_LDO9, &lp3974_ldo9_data },
+ { MAX8998_LDO10, &lp3974_ldo10_data },
+ { MAX8998_LDO11, &lp3974_ldo11_data },
+ { MAX8998_LDO12, &lp3974_ldo12_data },
+ { MAX8998_LDO13, &lp3974_ldo13_data },
+ { MAX8998_LDO14, &lp3974_ldo14_data },
+ { MAX8998_LDO15, &lp3974_ldo15_data },
+ { MAX8998_LDO16, &lp3974_ldo16_data },
+ { MAX8998_LDO17, &lp3974_ldo17_data },
+ { MAX8998_BUCK1, &lp3974_buck1_data },
+ { MAX8998_BUCK2, &lp3974_buck2_data },
+ { MAX8998_BUCK3, &lp3974_buck3_data },
+ { MAX8998_BUCK4, &lp3974_buck4_data },
+ { MAX8998_EN32KHZ_AP, &lp3974_32khz_ap_data },
+ { MAX8998_EN32KHZ_CP, &lp3974_32khz_cp_data },
+ { MAX8998_ENVICHG, &lp3974_vichg_data },
+ { MAX8998_ESAFEOUT1, &lp3974_esafeout1_data },
+ { MAX8998_ESAFEOUT2, &lp3974_esafeout2_data },
+ { MAX8998_CHARGER, &lp3974_charger_data },
+};
+
+static struct max8998_platform_data universal_lp3974_pdata = {
+ .irq_base = IRQ_MAX8998_BASE,
+ .num_regulators = ARRAY_SIZE(lp3974_regulators),
+ .regulators = lp3974_regulators,
+ .buck1_set1 = -1,
+ .buck1_set2 = -1,
+ .buck2_set3 = -1,
+ .wakeup = true,
+ .eoc = 150,
+ .restart = 100,
+ .timeout = 5,
+};
+
+static void __init universal_pmic_init(void)
+{
+ int gpio;
+
+ gpio = S5PV310_GPE2(0);
+ gpio_request(gpio, "BUCK2_EN");
+ gpio_direction_output(gpio, 0);
+ s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
+
+ gpio = S5PV310_GPX0(3);
+ gpio_request(gpio, "ARM_OUTPUT_SEL_A");
+ gpio_direction_output(gpio, universal_max8952_pdata.default_mode % 2);
+ s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
+
+ gpio = S5PV310_GPX0(4);
+ gpio_request(gpio, "ARM_OUTPUT_SEL_B");
+ gpio_direction_output(gpio, (universal_max8952_pdata.default_mode / 2) % 2);
+ s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
+
+ gpio = S5PV310_GPX0(5);
+ gpio_request(gpio, "BUCK1_EN_A");
+ gpio_direction_output(gpio, 0);
+ s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
+
+ gpio = S5PV310_GPX0(6);
+ gpio_request(gpio, "BUCK1_EN_B");
+ gpio_direction_output(gpio, 0);
+ s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
+
+ gpio = S5PV310_GPX0(7);
+ gpio_request(gpio, "AP_PMIC_IRQ");
+ s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf));
+ s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
+
+ /* TO BE ENABLED LATER
+ regulator_has_full_constraints();
+ */
+}
+
+/* GPIO I2C 5 (PMIC) */
+enum { I2C5_MAX8952, I2C5_LP3974 };
+static struct i2c_board_info i2c5_devs[] __initdata = {
+ [I2C5_MAX8952] = {
+ I2C_BOARD_INFO("max8952", 0xC0 >> 1),
+ .platform_data = &universal_max8952_pdata,
+ },
+ [I2C5_LP3974] = {
+ I2C_BOARD_INFO("lp3974-regerr", 0xCC >> 1),
+ .platform_data = &universal_lp3974_pdata,
+ },
+};
+
static struct gpio_keys_button universal_gpio_keys_tables[] = {
{
.code = KEY_VOLUMEUP,
@@ -200,6 +882,7 @@ static struct i2c_board_info i2c1_devs[] __initdata = {
static struct platform_device *universal_devices[] __initdata = {
/* Samsung Platform Devices */
+ &s3c_device_i2c5,
&mmc0_fixed_voltage,
&s3c_device_hsmmc0,
&s3c_device_hsmmc2,
@@ -224,6 +907,10 @@ static void __init universal_machine_init(void)
i2c_register_board_info(0, i2c0_devs, ARRAY_SIZE(i2c0_devs));
i2c_register_board_info(1, i2c1_devs, ARRAY_SIZE(i2c1_devs));
+ universal_pmic_init();
+ s3c_i2c5_set_platdata(NULL);
+ i2c_register_board_info(5, i2c5_devs, ARRAY_SIZE(i2c5_devs));
+
/* Last */
platform_add_devices(universal_devices, ARRAY_SIZE(universal_devices));
}
--
1.6.0.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH] S5PC210: universal: update support pmic for c210 universal board
2010-12-23 8:56 [PATCH] S5PC210: universal: update support pmic for c210 universal board Donghwa Lee
@ 2010-12-23 9:05 ` Russell King - ARM Linux
2010-12-23 9:06 ` Kyungmin Park
1 sibling, 0 replies; 4+ messages in thread
From: Russell King - ARM Linux @ 2010-12-23 9:05 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Dec 23, 2010 at 05:56:27PM +0900, Donghwa Lee wrote:
> @@ -11,10 +11,14 @@
> #include <linux/serial_core.h>
> #include <linux/input.h>
> #include <linux/i2c.h>
> +#include <linux/i2c-gpio.h>
> #include <linux/gpio_keys.h>
> #include <linux/gpio.h>
linux/gpio.h included here.
> +#include <linux/fb.h>
> #include <linux/regulator/machine.h>
> #include <linux/regulator/fixed.h>
> +#include <linux/regulator/max8952.h>
> +#include <linux/mfd/max8998.h>
> #include <linux/mmc/host.h>
>
> #include <asm/mach/arch.h>
> @@ -25,8 +29,15 @@
> #include <plat/cpu.h>
> #include <plat/devs.h>
> #include <plat/sdhci.h>
> +#include <plat/gpio-cfg.h>
> +#include <plat/gpio-core.h>
> +#include <plat/regs-fb.h>
> +#include <plat/clock.h>
> +#include <plat/iic.h>
>
> +#include <mach/gpio.h>
So you don't need mach/gpio.h, because:
=== linux/gpio.h ===
#ifndef __LINUX_GPIO_H
#define __LINUX_GPIO_H
/* see Documentation/gpio.txt */
#ifdef CONFIG_GENERIC_GPIO
#include <asm/gpio.h>
#else
...
=== asm/gpio.h ===
#ifndef _ARCH_ARM_GPIO_H
#define _ARCH_ARM_GPIO_H
/* not all ARM platforms necessarily support this API ... */
#include <mach/gpio.h>
#endif /* _ARCH_ARM_GPIO_H */
It gets included via linux/gpio.h.
Don't add asm/gpio.h OR mach/gpio.h includes. Use linux/gpio.h instead.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] S5PC210: universal: update support pmic for c210 universal board
2010-12-23 8:56 [PATCH] S5PC210: universal: update support pmic for c210 universal board Donghwa Lee
2010-12-23 9:05 ` Russell King - ARM Linux
@ 2010-12-23 9:06 ` Kyungmin Park
2010-12-23 9:18 ` Donghwa Lee
1 sibling, 1 reply; 4+ messages in thread
From: Kyungmin Park @ 2010-12-23 9:06 UTC (permalink / raw)
To: linux-arm-kernel
Sorry for bothering you,
Please discard this patch, it breaks the s5pc210 irqs styles.
Thank you,
Kyungmin Park
On Thu, Dec 23, 2010 at 5:56 PM, Donghwa Lee <dh09.lee@samsung.com> wrote:
> This patch supports pmic for c210 universal board.
>
> Signed-off-by: Donghwa Lee <dh09.lee@samsung.com>
> Signed-off-by: Kyungmin Park ?<kyungmin.park@samsung.com>
> ---
> ?arch/arm/mach-s5pv310/Kconfig ? ? ? ? ? ? ? | ? ?2 +
> ?arch/arm/mach-s5pv310/include/mach/irqs.h ? | ? 27 +
> ?arch/arm/mach-s5pv310/mach-universal_c210.c | ?687 +++++++++++++++++++++++++++
> ?3 files changed, 716 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-s5pv310/Kconfig b/arch/arm/mach-s5pv310/Kconfig
> index c6d735c..e379646 100644
> --- a/arch/arm/mach-s5pv310/Kconfig
> +++ b/arch/arm/mach-s5pv310/Kconfig
> @@ -87,7 +87,9 @@ config MACH_UNIVERSAL_C210
> ? ? ? ?select S3C_DEV_HSMMC3
> ? ? ? ?select S5PV310_SETUP_SDHCI
> ? ? ? ?select S3C_DEV_I2C1
> + ? ? ? select S3C_DEV_I2C5
> ? ? ? ?select S5PV310_SETUP_I2C1
> + ? ? ? select S5PV310_SETUP_I2C5
> ? ? ? ?help
> ? ? ? ? ?Machine support for Samsung Mobile Universal S5PC210 Reference
> ? ? ? ? ?Board. S5PC210(MCP) is one of package option of S5PV310
> diff --git a/arch/arm/mach-s5pv310/include/mach/irqs.h b/arch/arm/mach-s5pv310/include/mach/irqs.h
> index 99e7dad..6d7c5f0 100644
> --- a/arch/arm/mach-s5pv310/include/mach/irqs.h
> +++ b/arch/arm/mach-s5pv310/include/mach/irqs.h
> @@ -101,6 +101,11 @@
>
> ?#define IRQ_EINT16_31 ? ? ? ? ?COMBINER_IRQ(39, 0)
>
> +/* UART interrupts, each UART has 4 intterupts per channel so
> + * ?* use the space between the ISA and S3C main interrupts. Note, these
> + * ? * are not in the same order as the S3C24XX series! */
> +#define IRQ_S5P_UART_BASE4 ? ? COMBINER_IRQ(40,0)
> +
> ?#define MAX_COMBINER_NR ? ? ? ? ? ? ? ?40
>
> ?#define S5P_IRQ_EINT_BASE ? ? ?COMBINER_IRQ(MAX_COMBINER_NR, 0)
> @@ -108,6 +113,28 @@
> ?#define S5P_EINT_BASE1 ? ? ? ? (S5P_IRQ_EINT_BASE + 0)
> ?#define S5P_EINT_BASE2 ? ? ? ? (S5P_IRQ_EINT_BASE + 16)
>
> +/* S3C compatibilty defines */
> +#define IRQ_S3CUART_RX4 ? ? ? ? ? ? ? ?IRQ_S5P_UART_RX4
> +
> +#define IRQ_EINT_BASE ? ? ? ? ?IRQ_S5P_UART_BASE4 + 4
> +
> +#define EINT_NUMBER(x) ? ? ? ? ((x) + IRQ_EINT_BASE)
> +
> +#ifdef CONFIG_SAMSUNG_IRQ_GPIO
> +/* GPIO interrupts */
> +#define IRQ_GPIO_BASE ? ? ? ? ?EINT_NUMBER(32)
> +#define IRQ_GPIO1_NR_GROUPS ? ?16
> +#define IRQ_GPIO2_NR_GROUPS ? ?9
> +#define IRQ_GPIO_GROUP(x) ? ? ?(IRQ_GPIO_BASE + ((x) * 8))
> +#define IRQ_GPIO_END ? ? ? ? ? IRQ_GPIO_GROUP(IRQ_GPIO1_NR_GROUPS + IRQ_GPIO2_NR_GROUPS)
> +#else
> +#define IRQ_GPIO_END ? ? ? ? ? EINT_NUMBER(32)
> +#endif
> +
> +#define IRQ_BOARD_START ? ? ? ? ? ? ? ?IRQ_GPIO_END
> +#define IRQ_MAX8998_BASE ? ? ? IRQ_BOARD_START
> +#define IRQ_MAX8998_NR ? ? ? ? 18
> +
> ?/* Set the default NR_IRQS */
>
> ?#define NR_IRQS ? ? ? ? ? ? ? ? ? ? ? ?(S5P_IRQ_EINT_BASE + 32)
> diff --git a/arch/arm/mach-s5pv310/mach-universal_c210.c b/arch/arm/mach-s5pv310/mach-universal_c210.c
> index 766e3ab..6e796c9 100644
> --- a/arch/arm/mach-s5pv310/mach-universal_c210.c
> +++ b/arch/arm/mach-s5pv310/mach-universal_c210.c
> @@ -11,10 +11,14 @@
> ?#include <linux/serial_core.h>
> ?#include <linux/input.h>
> ?#include <linux/i2c.h>
> +#include <linux/i2c-gpio.h>
> ?#include <linux/gpio_keys.h>
> ?#include <linux/gpio.h>
> +#include <linux/fb.h>
> ?#include <linux/regulator/machine.h>
> ?#include <linux/regulator/fixed.h>
> +#include <linux/regulator/max8952.h>
> +#include <linux/mfd/max8998.h>
> ?#include <linux/mmc/host.h>
>
> ?#include <asm/mach/arch.h>
> @@ -25,8 +29,15 @@
> ?#include <plat/cpu.h>
> ?#include <plat/devs.h>
> ?#include <plat/sdhci.h>
> +#include <plat/gpio-cfg.h>
> +#include <plat/gpio-core.h>
> +#include <plat/regs-fb.h>
> +#include <plat/clock.h>
> +#include <plat/iic.h>
>
> +#include <mach/gpio.h>
> ?#include <mach/map.h>
> +#include <mach/regs-clock.h>
>
> ?/* Following are default values for UCON, ULCON and UFCON UART registers */
> ?#define UNIVERSAL_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | ? ? ? ?\
> @@ -69,6 +80,677 @@ static struct s3c2410_uartcfg universal_uartcfgs[] __initdata = {
> ? ? ? ?},
> ?};
>
> +/* I2C5: PMICs LP3974, MAX8952 */
> +static struct regulator_consumer_supply max8952_consumer[] = {
> + ? ? ? {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "varm_1.2v_c210",
> + ? ? ? }, {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "vdd_arm",
> + ? ? ? },
> +};
> +
> +static struct max8952_platform_data universal_max8952_pdata = {
> + ? ? ? .gpio_vid0 ? ? ? ? ? ? ?= S5PV310_GPX0(3),
> + ? ? ? .gpio_vid1 ? ? ? ? ? ? ?= S5PV310_GPX0(4),
> + ? ? ? .gpio_en ? ? ? ? ? ? ? ?= -1, /* Not controllable, set "Always High" */
> + ? ? ? .default_mode ? ? ? ? ? = 3, /* vid0 = 1, vid1 = 1 */
> + ? ? ? .dvs_mode ? ? ? ? ? ? ? = { 18, 28, 43, 33 },
> + ? ? ? ? ? ? ? /*
> + ? ? ? ? ? ? ? ?* ? ? ?0.95 1.05 1.20 1.10V (Defaule: 1.10V)
> + ? ? ? ? ? ? ? ?* 1.10V is 0x3 so that we can reduce current at sleep
> + ? ? ? ? ? ? ? ?* because there are pull-up's at vid0 and vid1 and 1.10V is
> + ? ? ? ? ? ? ? ?* the default voltage (cpufreq is supposed to set at the
> + ? ? ? ? ? ? ? ?* default voltage/frequency during suspend).
> + ? ? ? ? ? ? ? ?*/
> + ? ? ? .sync_freq ? ? ? ? ? ? ?= 0, /* default: fastest */
> + ? ? ? .ramp_speed ? ? ? ? ? ? = 0, /* default: fastest */
> +
> + ? ? ? .reg_data ? ? ? ? ? ? ? = {
> + ? ? ? ? ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .name ? ? ? ? ? = "VARM_1.2V",
> + ? ? ? ? ? ? ? ? ? ? ? .min_uV ? ? ? ? = 770000,
> + ? ? ? ? ? ? ? ? ? ? ? .max_uV ? ? ? ? = 1400000,
> + ? ? ? ? ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
> + ? ? ? ? ? ? ? ? ? ? ? .always_on ? ? ?= 1,
> + ? ? ? ? ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .enabled ? ? ? ?= 1,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .disabled ? ? ? = 0,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?* MAX8952's EN is connected to an
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?* uncontrollable pin. Assume it is
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?* "ON".
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?*/
> + ? ? ? ? ? ? ? ? ? ? ? }
> + ? ? ? ? ? ? ? },
> + ? ? ? ? ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(max8952_consumer),
> + ? ? ? ? ? ? ? .consumer_supplies ? ? ?= max8952_consumer,
> + ? ? ? },
> +};
> +
> +static struct regulator_consumer_supply lp3974_buck1_consumer[] = {
> + ? ? ? {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "vint_1.1v_c210",
> + ? ? ? }, {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "vdd_int",
> + ? ? ? },
> +};
> +
> +static struct regulator_consumer_supply lp3974_buck2_consumer[] = {
> + ? ? ? {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "vg3d_1.2v_c210",
> + ? ? ? },
> +};
> +
> +static struct regulator_consumer_supply lp3974_buck3_consumer[] = {
> + ? ? ? {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "vcc_1.8v_pda",
> + ? ? ? },
> +};
> +
> +static struct regulator_consumer_supply lp3974_buck4_consumer[] = {
> + ? ? ? {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "vmem_1.2v_c210",
> + ? ? ? },
> +};
> +
> +static struct regulator_consumer_supply lp3974_ldo2_consumer[] = {
> + ? ? ? REGULATOR_SUPPLY("valive", NULL),
> +};
> +
> +static struct regulator_consumer_supply lp3974_ldo3_consumer[] = {
> + ? ? ? REGULATOR_SUPPLY("vusb_a", NULL),
> + ? ? ? REGULATOR_SUPPLY("vmipi_1.1v", NULL),
> +};
> +
> +static struct regulator_consumer_supply lp3974_ldo4_consumer[] = {
> + ? ? ? REGULATOR_SUPPLY("vadc", NULL),
> +};
> +
> +static struct regulator_consumer_supply lp3974_ldo5_consumer[] = {
> + ? ? ? REGULATOR_SUPPLY("vmmc", "s3c-sdhci.2"),
> +};
> +
> +static struct regulator_consumer_supply lp3974_ldo7_consumer[] = {
> + ? ? ? REGULATOR_SUPPLY("vmipi_1.8v", NULL),
> + ? ? ? REGULATOR_SUPPLY("vlcd_1.8v", NULL),
> +};
> +
> +static struct regulator_consumer_supply lp3974_ldo8_consumer[] = {
> + ? ? ? REGULATOR_SUPPLY("vusb_d", NULL),
> + ? ? ? REGULATOR_SUPPLY("vdac", NULL),
> +};
> +
> +static struct regulator_consumer_supply lp3974_ldo9_consumer[] = {
> + ? ? ? REGULATOR_SUPPLY("vcc_2.8v_pda", NULL),
> +};
> +
> +static struct regulator_consumer_supply lp3974_ldo10_consumer[] = {
> + ? ? ? REGULATOR_SUPPLY("vpll", NULL),
> +};
> +
> +static struct regulator_consumer_supply lp3974_ldo11_consumer[] = {
> + ? ? ? {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "cam_af_3.3v",
> + ? ? ? },
> +};
> +
> +static struct regulator_consumer_supply lp3974_ldo12_consumer[] = {
> + ? ? ? {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "ps_2.8v",
> + ? ? ? },
> +};
> +
> +static struct regulator_consumer_supply lp3974_ldo13_consumer[] = {
> + ? ? ? REGULATOR_SUPPLY("vhsic", NULL),
> +};
> +
> +static struct regulator_consumer_supply lp3974_ldo14_consumer[] = {
> + ? ? ? {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "cam_i_host_1.8v",
> + ? ? ? },
> +};
> +
> +static struct regulator_consumer_supply lp3974_ldo15_consumer[] = {
> + ? ? ? {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "cam_s_dig_1.2v",
> + ? ? ? }, {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "fm33_core_1.2v",
> + ? ? ? },
> +};
> +
> +static struct regulator_consumer_supply lp3974_ldo16_consumer[] = {
> + ? ? ? {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "cam_s_ana_2.8v",
> + ? ? ? },
> +};
> +
> +static struct regulator_consumer_supply lp3974_ldo17_consumer[] = {
> + ? ? ? REGULATOR_SUPPLY("vlcd_3.0v", NULL),
> +};
> +
> +static struct regulator_consumer_supply lp3974_esafeout1_consumer[] = {
> + ? ? ? {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "usb_vbus_ap_5v",
> + ? ? ? },
> +};
> +
> +static struct regulator_consumer_supply lp3974_esafeout2_consumer[] = {
> + ? ? ? {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "usb_vbus_cp_5v",
> + ? ? ? },
> +};
> +
> +static struct regulator_consumer_supply lp3974_charger_consumer[] = {
> + ? ? ? {
> + ? ? ? ? ? ? ? .supply ? ? ? ? = "battery_charger",
> + ? ? ? },
> +};
> +
> +static struct regulator_init_data lp3974_buck1_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "VINT_1.1V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 750000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 1500000,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
> + ? ? ? ? ? ? ? ? ? ? ? REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .boot_on ? ? ? ?= 1,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies = ARRAY_SIZE(lp3974_buck1_consumer),
> + ? ? ? .consumer_supplies = lp3974_buck1_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_buck2_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "VG3D_1.2V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 1200000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 1200000,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .boot_on ? ? ? ?= 0,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies = ARRAY_SIZE(lp3974_buck2_consumer),
> + ? ? ? .consumer_supplies = lp3974_buck2_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_buck3_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "VCC_1.8V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 1800000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 1800000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .always_on ? ? ?= 1,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 1,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 0,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies = ARRAY_SIZE(lp3974_buck3_consumer),
> + ? ? ? .consumer_supplies = lp3974_buck3_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_buck4_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "VMEM_1.2V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 1200000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 1200000,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .boot_on ? ? ? ?= 1,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 1,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 0,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_buck4_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_buck4_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_ldo2_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "VALIVE_1.2V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 1200000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 1200000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .always_on ? ? ?= 1,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 1,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 0,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_ldo2_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_ldo2_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_ldo3_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "VUSB/MIPI_1.1V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 1100000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 1100000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_ldo3_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_ldo3_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_ldo4_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "VADC_3.3V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 3300000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 3300000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_ldo4_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_ldo4_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_ldo5_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "VTF_2.8V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 2800000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 2800000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_ldo5_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_ldo5_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_ldo6_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "LDO6",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 2000000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 2000000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> +};
> +
> +static struct regulator_init_data lp3974_ldo7_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "VLCD/VMIPI_1.8V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 1800000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 1800000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_ldo7_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_ldo7_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_ldo8_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "VUSB/VDAC_3.3V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 3300000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 3300000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_ldo8_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_ldo8_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_ldo9_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "VCC_2.8V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 2800000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 2800000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .always_on ? ? ?= 1,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 1,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 0,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_ldo9_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_ldo9_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_ldo10_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "VPLL_1.1V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 1100000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 1100000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_ldo10_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_ldo10_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_ldo11_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "CAM_AF_3.3V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 3300000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 3300000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_ldo11_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_ldo11_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_ldo12_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "PS_2.8V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 2800000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 2800000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_ldo12_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_ldo12_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_ldo13_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "VHSIC_1.2V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 1200000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 1200000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_ldo13_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_ldo13_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_ldo14_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "CAM_I_HOST_1.8V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 1800000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 1800000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_ldo14_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_ldo14_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_ldo15_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "CAM_S_DIG/FM33_CORE_1.2V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 1200000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 1200000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_ldo15_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_ldo15_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_ldo16_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "CAM_S_ANA_2.8V",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 2800000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 2800000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_ldo16_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_ldo16_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_ldo17_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "VCC_3.0V_LCD",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 3000000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 3000000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_ldo17_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_ldo17_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_32khz_ap_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "32KHz AP",
> + ? ? ? ? ? ? ? .always_on ? ? ?= 1,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 1,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 0,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> +};
> +
> +static struct regulator_init_data lp3974_32khz_cp_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "32KHz CP",
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> +};
> +
> +static struct regulator_init_data lp3974_vichg_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "VICHG",
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> +};
> +
> +static struct regulator_init_data lp3974_esafeout1_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "SAFEOUT1",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 4800000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 4800000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_esafeout1_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_esafeout1_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_esafeout2_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "SAFEOUT2",
> + ? ? ? ? ? ? ? .min_uV ? ? ? ? = 4800000,
> + ? ? ? ? ? ? ? .max_uV ? ? ? ? = 4800000,
> + ? ? ? ? ? ? ? .apply_uV ? ? ? = 1,
> + ? ? ? ? ? ? ? .boot_on ? ? ? ?= 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 0,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 1,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_esafeout2_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_esafeout2_consumer,
> +};
> +
> +static struct regulator_init_data lp3974_charger_data = {
> + ? ? ? .constraints ? ?= {
> + ? ? ? ? ? ? ? .name ? ? ? ? ? = "CHARGER",
> + ? ? ? ? ? ? ? .min_uA ? ? ? ? = 100000,
> + ? ? ? ? ? ? ? .max_uA ? ? ? ? = 800000,
> + ? ? ? ? ? ? ? .boot_on ? ? ? ?= 1,
> + ? ? ? ? ? ? ? .valid_ops_mask = REGULATOR_CHANGE_STATUS |
> + ? ? ? ? ? ? ? ? ? ? ? REGULATOR_CHANGE_CURRENT,
> + ? ? ? ? ? ? ? .state_mem ? ? ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 1,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 0,
> + ? ? ? ? ? ? ? },
> + ? ? ? ? ? ? ? /* Charger may be turned on anytime */
> + ? ? ? ? ? ? ? .state_disk ? ? = {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 1,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 0,
> + ? ? ? ? ? ? ? },
> + ? ? ? ? ? ? ? .state_standby ?= {
> + ? ? ? ? ? ? ? ? ? ? ? .enabled = 1,
> + ? ? ? ? ? ? ? ? ? ? ? .disabled = 0,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> + ? ? ? .num_consumer_supplies ?= ARRAY_SIZE(lp3974_charger_consumer),
> + ? ? ? .consumer_supplies ? ? ?= lp3974_charger_consumer,
> +};
> +
> +static struct max8998_regulator_data lp3974_regulators[] = {
> + ? ? ? { MAX8998_LDO2, ?&lp3974_ldo2_data },
> + ? ? ? { MAX8998_LDO3, ?&lp3974_ldo3_data },
> + ? ? ? { MAX8998_LDO4, ?&lp3974_ldo4_data },
> + ? ? ? { MAX8998_LDO5, ?&lp3974_ldo5_data },
> + ? ? ? { MAX8998_LDO6, ?&lp3974_ldo6_data },
> + ? ? ? { MAX8998_LDO7, ?&lp3974_ldo7_data },
> + ? ? ? { MAX8998_LDO8, ?&lp3974_ldo8_data },
> + ? ? ? { MAX8998_LDO9, ?&lp3974_ldo9_data },
> + ? ? ? { MAX8998_LDO10, &lp3974_ldo10_data },
> + ? ? ? { MAX8998_LDO11, &lp3974_ldo11_data },
> + ? ? ? { MAX8998_LDO12, &lp3974_ldo12_data },
> + ? ? ? { MAX8998_LDO13, &lp3974_ldo13_data },
> + ? ? ? { MAX8998_LDO14, &lp3974_ldo14_data },
> + ? ? ? { MAX8998_LDO15, &lp3974_ldo15_data },
> + ? ? ? { MAX8998_LDO16, &lp3974_ldo16_data },
> + ? ? ? { MAX8998_LDO17, &lp3974_ldo17_data },
> + ? ? ? { MAX8998_BUCK1, &lp3974_buck1_data },
> + ? ? ? { MAX8998_BUCK2, &lp3974_buck2_data },
> + ? ? ? { MAX8998_BUCK3, &lp3974_buck3_data },
> + ? ? ? { MAX8998_BUCK4, &lp3974_buck4_data },
> + ? ? ? { MAX8998_EN32KHZ_AP, &lp3974_32khz_ap_data },
> + ? ? ? { MAX8998_EN32KHZ_CP, &lp3974_32khz_cp_data },
> + ? ? ? { MAX8998_ENVICHG, &lp3974_vichg_data },
> + ? ? ? { MAX8998_ESAFEOUT1, &lp3974_esafeout1_data },
> + ? ? ? { MAX8998_ESAFEOUT2, &lp3974_esafeout2_data },
> + ? ? ? { MAX8998_CHARGER, &lp3974_charger_data },
> +};
> +
> +static struct max8998_platform_data universal_lp3974_pdata = {
> + ? ? ? .irq_base ? ? ? ? ? ? ? = IRQ_MAX8998_BASE,
> + ? ? ? .num_regulators ? ? ? ? = ARRAY_SIZE(lp3974_regulators),
> + ? ? ? .regulators ? ? ? ? ? ? = lp3974_regulators,
> + ? ? ? .buck1_set1 ? ? ? ? ? ? = -1,
> + ? ? ? .buck1_set2 ? ? ? ? ? ? = -1,
> + ? ? ? .buck2_set3 ? ? ? ? ? ? = -1,
> + ? ? ? .wakeup ? ? ? ? ? ? ? ? = true,
> + ? ? ? .eoc ? ? ? ? ? ? ? ? ? ?= 150,
> + ? ? ? .restart ? ? ? ? ? ? ? ?= 100,
> + ? ? ? .timeout ? ? ? ? ? ? ? ?= 5,
> +};
> +
> +static void __init universal_pmic_init(void)
> +{
> + ? ? ? int gpio;
> +
> + ? ? ? gpio = S5PV310_GPE2(0);
> + ? ? ? gpio_request(gpio, "BUCK2_EN");
> + ? ? ? gpio_direction_output(gpio, 0);
> + ? ? ? s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
> +
> + ? ? ? gpio = S5PV310_GPX0(3);
> + ? ? ? gpio_request(gpio, "ARM_OUTPUT_SEL_A");
> + ? ? ? gpio_direction_output(gpio, universal_max8952_pdata.default_mode % 2);
> + ? ? ? s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
> +
> + ? ? ? gpio = S5PV310_GPX0(4);
> + ? ? ? gpio_request(gpio, "ARM_OUTPUT_SEL_B");
> + ? ? ? gpio_direction_output(gpio, (universal_max8952_pdata.default_mode / 2) % 2);
> + ? ? ? s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
> +
> + ? ? ? gpio = S5PV310_GPX0(5);
> + ? ? ? gpio_request(gpio, "BUCK1_EN_A");
> + ? ? ? gpio_direction_output(gpio, 0);
> + ? ? ? s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
> +
> + ? ? ? gpio = S5PV310_GPX0(6);
> + ? ? ? gpio_request(gpio, "BUCK1_EN_B");
> + ? ? ? gpio_direction_output(gpio, 0);
> + ? ? ? s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
> +
> + ? ? ? gpio = S5PV310_GPX0(7);
> + ? ? ? gpio_request(gpio, "AP_PMIC_IRQ");
> + ? ? ? s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf));
> + ? ? ? s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
> +
> + ? ? ? /* TO BE ENABLED LATER
> + ? ? ? regulator_has_full_constraints();
> + ? ? ? */
> +}
> +
> +/* GPIO I2C 5 (PMIC) */
> +enum { I2C5_MAX8952, I2C5_LP3974 };
> +static struct i2c_board_info i2c5_devs[] __initdata = {
> + ? ? ? [I2C5_MAX8952] = {
> + ? ? ? ? ? ? ? I2C_BOARD_INFO("max8952", 0xC0 >> 1),
> + ? ? ? ? ? ? ? .platform_data ?= &universal_max8952_pdata,
> + ? ? ? },
> + ? ? ? [I2C5_LP3974] = {
> + ? ? ? ? ? ? ? I2C_BOARD_INFO("lp3974-regerr", 0xCC >> 1),
> + ? ? ? ? ? ? ? .platform_data ?= &universal_lp3974_pdata,
> + ? ? ? },
> +};
> +
> ?static struct gpio_keys_button universal_gpio_keys_tables[] = {
> ? ? ? ?{
> ? ? ? ? ? ? ? ?.code ? ? ? ? ? ? ? ? ? = KEY_VOLUMEUP,
> @@ -200,6 +882,7 @@ static struct i2c_board_info i2c1_devs[] __initdata = {
>
> ?static struct platform_device *universal_devices[] __initdata = {
> ? ? ? ?/* Samsung Platform Devices */
> + ? ? ? &s3c_device_i2c5,
> ? ? ? ?&mmc0_fixed_voltage,
> ? ? ? ?&s3c_device_hsmmc0,
> ? ? ? ?&s3c_device_hsmmc2,
> @@ -224,6 +907,10 @@ static void __init universal_machine_init(void)
> ? ? ? ?i2c_register_board_info(0, i2c0_devs, ARRAY_SIZE(i2c0_devs));
> ? ? ? ?i2c_register_board_info(1, i2c1_devs, ARRAY_SIZE(i2c1_devs));
>
> + ? ? ? universal_pmic_init();
> + ? ? ? s3c_i2c5_set_platdata(NULL);
> + ? ? ? i2c_register_board_info(5, i2c5_devs, ARRAY_SIZE(i2c5_devs));
> +
> ? ? ? ?/* Last */
> ? ? ? ?platform_add_devices(universal_devices, ARRAY_SIZE(universal_devices));
> ?}
> --
> 1.6.0.4
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] S5PC210: universal: update support pmic for c210 universal board
2010-12-23 9:06 ` Kyungmin Park
@ 2010-12-23 9:18 ` Donghwa Lee
0 siblings, 0 replies; 4+ messages in thread
From: Donghwa Lee @ 2010-12-23 9:18 UTC (permalink / raw)
To: linux-arm-kernel
Ok, I will modify this patch and then resend it.
Thank you for comment.
On 2010-12-23 ?? 6:06 , Kyungmin Park wrote:
> Sorry for bothering you,
>
> Please discard this patch, it breaks the s5pc210 irqs styles.
>
> Thank you,
> Kyungmin Park
>
> On Thu, Dec 23, 2010 at 5:56 PM, Donghwa Lee <dh09.lee@samsung.com> wrote:
>> This patch supports pmic for c210 universal board.
>>
>> Signed-off-by: Donghwa Lee <dh09.lee@samsung.com>
>> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
>> ---
>> arch/arm/mach-s5pv310/Kconfig | 2 +
>> arch/arm/mach-s5pv310/include/mach/irqs.h | 27 +
>> arch/arm/mach-s5pv310/mach-universal_c210.c | 687 +++++++++++++++++++++++++++
>> 3 files changed, 716 insertions(+), 0 deletions(-)
>>
>> diff --git a/arch/arm/mach-s5pv310/Kconfig b/arch/arm/mach-s5pv310/Kconfig
>> index c6d735c..e379646 100644
>> --- a/arch/arm/mach-s5pv310/Kconfig
>> +++ b/arch/arm/mach-s5pv310/Kconfig
>> @@ -87,7 +87,9 @@ config MACH_UNIVERSAL_C210
>> select S3C_DEV_HSMMC3
>> select S5PV310_SETUP_SDHCI
>> select S3C_DEV_I2C1
>> + select S3C_DEV_I2C5
>> select S5PV310_SETUP_I2C1
>> + select S5PV310_SETUP_I2C5
>> help
>> Machine support for Samsung Mobile Universal S5PC210 Reference
>> Board. S5PC210(MCP) is one of package option of S5PV310
>> diff --git a/arch/arm/mach-s5pv310/include/mach/irqs.h b/arch/arm/mach-s5pv310/include/mach/irqs.h
>> index 99e7dad..6d7c5f0 100644
>> --- a/arch/arm/mach-s5pv310/include/mach/irqs.h
>> +++ b/arch/arm/mach-s5pv310/include/mach/irqs.h
>> @@ -101,6 +101,11 @@
>>
>> #define IRQ_EINT16_31 COMBINER_IRQ(39, 0)
>>
>> +/* UART interrupts, each UART has 4 intterupts per channel so
>> + * * use the space between the ISA and S3C main interrupts. Note, these
>> + * * are not in the same order as the S3C24XX series! */
>> +#define IRQ_S5P_UART_BASE4 COMBINER_IRQ(40,0)
>> +
>> #define MAX_COMBINER_NR 40
>>
>> #define S5P_IRQ_EINT_BASE COMBINER_IRQ(MAX_COMBINER_NR, 0)
>> @@ -108,6 +113,28 @@
>> #define S5P_EINT_BASE1 (S5P_IRQ_EINT_BASE + 0)
>> #define S5P_EINT_BASE2 (S5P_IRQ_EINT_BASE + 16)
>>
>> +/* S3C compatibilty defines */
>> +#define IRQ_S3CUART_RX4 IRQ_S5P_UART_RX4
>> +
>> +#define IRQ_EINT_BASE IRQ_S5P_UART_BASE4 + 4
>> +
>> +#define EINT_NUMBER(x) ((x) + IRQ_EINT_BASE)
>> +
>> +#ifdef CONFIG_SAMSUNG_IRQ_GPIO
>> +/* GPIO interrupts */
>> +#define IRQ_GPIO_BASE EINT_NUMBER(32)
>> +#define IRQ_GPIO1_NR_GROUPS 16
>> +#define IRQ_GPIO2_NR_GROUPS 9
>> +#define IRQ_GPIO_GROUP(x) (IRQ_GPIO_BASE + ((x) * 8))
>> +#define IRQ_GPIO_END IRQ_GPIO_GROUP(IRQ_GPIO1_NR_GROUPS + IRQ_GPIO2_NR_GROUPS)
>> +#else
>> +#define IRQ_GPIO_END EINT_NUMBER(32)
>> +#endif
>> +
>> +#define IRQ_BOARD_START IRQ_GPIO_END
>> +#define IRQ_MAX8998_BASE IRQ_BOARD_START
>> +#define IRQ_MAX8998_NR 18
>> +
>> /* Set the default NR_IRQS */
>>
>> #define NR_IRQS (S5P_IRQ_EINT_BASE + 32)
>> diff --git a/arch/arm/mach-s5pv310/mach-universal_c210.c b/arch/arm/mach-s5pv310/mach-universal_c210.c
>> index 766e3ab..6e796c9 100644
>> --- a/arch/arm/mach-s5pv310/mach-universal_c210.c
>> +++ b/arch/arm/mach-s5pv310/mach-universal_c210.c
>> @@ -11,10 +11,14 @@
>> #include <linux/serial_core.h>
>> #include <linux/input.h>
>> #include <linux/i2c.h>
>> +#include <linux/i2c-gpio.h>
>> #include <linux/gpio_keys.h>
>> #include <linux/gpio.h>
>> +#include <linux/fb.h>
>> #include <linux/regulator/machine.h>
>> #include <linux/regulator/fixed.h>
>> +#include <linux/regulator/max8952.h>
>> +#include <linux/mfd/max8998.h>
>> #include <linux/mmc/host.h>
>>
>> #include <asm/mach/arch.h>
>> @@ -25,8 +29,15 @@
>> #include <plat/cpu.h>
>> #include <plat/devs.h>
>> #include <plat/sdhci.h>
>> +#include <plat/gpio-cfg.h>
>> +#include <plat/gpio-core.h>
>> +#include <plat/regs-fb.h>
>> +#include <plat/clock.h>
>> +#include <plat/iic.h>
>>
>> +#include <mach/gpio.h>
>> #include <mach/map.h>
>> +#include <mach/regs-clock.h>
>>
>> /* Following are default values for UCON, ULCON and UFCON UART registers */
>> #define UNIVERSAL_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \
>> @@ -69,6 +80,677 @@ static struct s3c2410_uartcfg universal_uartcfgs[] __initdata = {
>> },
>> };
>>
>> +/* I2C5: PMICs LP3974, MAX8952 */
>> +static struct regulator_consumer_supply max8952_consumer[] = {
>> + {
>> + .supply = "varm_1.2v_c210",
>> + }, {
>> + .supply = "vdd_arm",
>> + },
>> +};
>> +
>> +static struct max8952_platform_data universal_max8952_pdata = {
>> + .gpio_vid0 = S5PV310_GPX0(3),
>> + .gpio_vid1 = S5PV310_GPX0(4),
>> + .gpio_en = -1, /* Not controllable, set "Always High" */
>> + .default_mode = 3, /* vid0 = 1, vid1 = 1 */
>> + .dvs_mode = { 18, 28, 43, 33 },
>> + /*
>> + * 0.95 1.05 1.20 1.10V (Defaule: 1.10V)
>> + * 1.10V is 0x3 so that we can reduce current at sleep
>> + * because there are pull-up's at vid0 and vid1 and 1.10V is
>> + * the default voltage (cpufreq is supposed to set at the
>> + * default voltage/frequency during suspend).
>> + */
>> + .sync_freq = 0, /* default: fastest */
>> + .ramp_speed = 0, /* default: fastest */
>> +
>> + .reg_data = {
>> + .constraints = {
>> + .name = "VARM_1.2V",
>> + .min_uV = 770000,
>> + .max_uV = 1400000,
>> + .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
>> + .always_on = 1,
>> + .state_mem = {
>> + .enabled = 1,
>> + .disabled = 0,
>> + /*
>> + * MAX8952's EN is connected to an
>> + * uncontrollable pin. Assume it is
>> + * "ON".
>> + */
>> + }
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(max8952_consumer),
>> + .consumer_supplies = max8952_consumer,
>> + },
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_buck1_consumer[] = {
>> + {
>> + .supply = "vint_1.1v_c210",
>> + }, {
>> + .supply = "vdd_int",
>> + },
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_buck2_consumer[] = {
>> + {
>> + .supply = "vg3d_1.2v_c210",
>> + },
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_buck3_consumer[] = {
>> + {
>> + .supply = "vcc_1.8v_pda",
>> + },
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_buck4_consumer[] = {
>> + {
>> + .supply = "vmem_1.2v_c210",
>> + },
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_ldo2_consumer[] = {
>> + REGULATOR_SUPPLY("valive", NULL),
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_ldo3_consumer[] = {
>> + REGULATOR_SUPPLY("vusb_a", NULL),
>> + REGULATOR_SUPPLY("vmipi_1.1v", NULL),
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_ldo4_consumer[] = {
>> + REGULATOR_SUPPLY("vadc", NULL),
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_ldo5_consumer[] = {
>> + REGULATOR_SUPPLY("vmmc", "s3c-sdhci.2"),
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_ldo7_consumer[] = {
>> + REGULATOR_SUPPLY("vmipi_1.8v", NULL),
>> + REGULATOR_SUPPLY("vlcd_1.8v", NULL),
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_ldo8_consumer[] = {
>> + REGULATOR_SUPPLY("vusb_d", NULL),
>> + REGULATOR_SUPPLY("vdac", NULL),
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_ldo9_consumer[] = {
>> + REGULATOR_SUPPLY("vcc_2.8v_pda", NULL),
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_ldo10_consumer[] = {
>> + REGULATOR_SUPPLY("vpll", NULL),
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_ldo11_consumer[] = {
>> + {
>> + .supply = "cam_af_3.3v",
>> + },
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_ldo12_consumer[] = {
>> + {
>> + .supply = "ps_2.8v",
>> + },
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_ldo13_consumer[] = {
>> + REGULATOR_SUPPLY("vhsic", NULL),
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_ldo14_consumer[] = {
>> + {
>> + .supply = "cam_i_host_1.8v",
>> + },
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_ldo15_consumer[] = {
>> + {
>> + .supply = "cam_s_dig_1.2v",
>> + }, {
>> + .supply = "fm33_core_1.2v",
>> + },
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_ldo16_consumer[] = {
>> + {
>> + .supply = "cam_s_ana_2.8v",
>> + },
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_ldo17_consumer[] = {
>> + REGULATOR_SUPPLY("vlcd_3.0v", NULL),
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_esafeout1_consumer[] = {
>> + {
>> + .supply = "usb_vbus_ap_5v",
>> + },
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_esafeout2_consumer[] = {
>> + {
>> + .supply = "usb_vbus_cp_5v",
>> + },
>> +};
>> +
>> +static struct regulator_consumer_supply lp3974_charger_consumer[] = {
>> + {
>> + .supply = "battery_charger",
>> + },
>> +};
>> +
>> +static struct regulator_init_data lp3974_buck1_data = {
>> + .constraints = {
>> + .name = "VINT_1.1V",
>> + .min_uV = 750000,
>> + .max_uV = 1500000,
>> + .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
>> + REGULATOR_CHANGE_STATUS,
>> + .boot_on = 1,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_buck1_consumer),
>> + .consumer_supplies = lp3974_buck1_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_buck2_data = {
>> + .constraints = {
>> + .name = "VG3D_1.2V",
>> + .min_uV = 1200000,
>> + .max_uV = 1200000,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .apply_uV = 1,
>> + .boot_on = 0,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_buck2_consumer),
>> + .consumer_supplies = lp3974_buck2_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_buck3_data = {
>> + .constraints = {
>> + .name = "VCC_1.8V",
>> + .min_uV = 1800000,
>> + .max_uV = 1800000,
>> + .apply_uV = 1,
>> + .always_on = 1,
>> + .state_mem = {
>> + .enabled = 1,
>> + .disabled = 0,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_buck3_consumer),
>> + .consumer_supplies = lp3974_buck3_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_buck4_data = {
>> + .constraints = {
>> + .name = "VMEM_1.2V",
>> + .min_uV = 1200000,
>> + .max_uV = 1200000,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .boot_on = 1,
>> + .apply_uV = 1,
>> + .state_mem = {
>> + .enabled = 1,
>> + .disabled = 0,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_buck4_consumer),
>> + .consumer_supplies = lp3974_buck4_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo2_data = {
>> + .constraints = {
>> + .name = "VALIVE_1.2V",
>> + .min_uV = 1200000,
>> + .max_uV = 1200000,
>> + .apply_uV = 1,
>> + .always_on = 1,
>> + .state_mem = {
>> + .enabled = 1,
>> + .disabled = 0,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo2_consumer),
>> + .consumer_supplies = lp3974_ldo2_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo3_data = {
>> + .constraints = {
>> + .name = "VUSB/MIPI_1.1V",
>> + .min_uV = 1100000,
>> + .max_uV = 1100000,
>> + .apply_uV = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo3_consumer),
>> + .consumer_supplies = lp3974_ldo3_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo4_data = {
>> + .constraints = {
>> + .name = "VADC_3.3V",
>> + .min_uV = 3300000,
>> + .max_uV = 3300000,
>> + .apply_uV = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo4_consumer),
>> + .consumer_supplies = lp3974_ldo4_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo5_data = {
>> + .constraints = {
>> + .name = "VTF_2.8V",
>> + .min_uV = 2800000,
>> + .max_uV = 2800000,
>> + .apply_uV = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo5_consumer),
>> + .consumer_supplies = lp3974_ldo5_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo6_data = {
>> + .constraints = {
>> + .name = "LDO6",
>> + .min_uV = 2000000,
>> + .max_uV = 2000000,
>> + .apply_uV = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo7_data = {
>> + .constraints = {
>> + .name = "VLCD/VMIPI_1.8V",
>> + .min_uV = 1800000,
>> + .max_uV = 1800000,
>> + .apply_uV = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo7_consumer),
>> + .consumer_supplies = lp3974_ldo7_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo8_data = {
>> + .constraints = {
>> + .name = "VUSB/VDAC_3.3V",
>> + .min_uV = 3300000,
>> + .max_uV = 3300000,
>> + .apply_uV = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo8_consumer),
>> + .consumer_supplies = lp3974_ldo8_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo9_data = {
>> + .constraints = {
>> + .name = "VCC_2.8V",
>> + .min_uV = 2800000,
>> + .max_uV = 2800000,
>> + .apply_uV = 1,
>> + .always_on = 1,
>> + .state_mem = {
>> + .enabled = 1,
>> + .disabled = 0,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo9_consumer),
>> + .consumer_supplies = lp3974_ldo9_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo10_data = {
>> + .constraints = {
>> + .name = "VPLL_1.1V",
>> + .min_uV = 1100000,
>> + .max_uV = 1100000,
>> + .apply_uV = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo10_consumer),
>> + .consumer_supplies = lp3974_ldo10_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo11_data = {
>> + .constraints = {
>> + .name = "CAM_AF_3.3V",
>> + .min_uV = 3300000,
>> + .max_uV = 3300000,
>> + .apply_uV = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo11_consumer),
>> + .consumer_supplies = lp3974_ldo11_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo12_data = {
>> + .constraints = {
>> + .name = "PS_2.8V",
>> + .min_uV = 2800000,
>> + .max_uV = 2800000,
>> + .apply_uV = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo12_consumer),
>> + .consumer_supplies = lp3974_ldo12_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo13_data = {
>> + .constraints = {
>> + .name = "VHSIC_1.2V",
>> + .min_uV = 1200000,
>> + .max_uV = 1200000,
>> + .apply_uV = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo13_consumer),
>> + .consumer_supplies = lp3974_ldo13_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo14_data = {
>> + .constraints = {
>> + .name = "CAM_I_HOST_1.8V",
>> + .min_uV = 1800000,
>> + .max_uV = 1800000,
>> + .apply_uV = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo14_consumer),
>> + .consumer_supplies = lp3974_ldo14_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo15_data = {
>> + .constraints = {
>> + .name = "CAM_S_DIG/FM33_CORE_1.2V",
>> + .min_uV = 1200000,
>> + .max_uV = 1200000,
>> + .apply_uV = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo15_consumer),
>> + .consumer_supplies = lp3974_ldo15_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo16_data = {
>> + .constraints = {
>> + .name = "CAM_S_ANA_2.8V",
>> + .min_uV = 2800000,
>> + .max_uV = 2800000,
>> + .apply_uV = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo16_consumer),
>> + .consumer_supplies = lp3974_ldo16_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_ldo17_data = {
>> + .constraints = {
>> + .name = "VCC_3.0V_LCD",
>> + .min_uV = 3000000,
>> + .max_uV = 3000000,
>> + .apply_uV = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo17_consumer),
>> + .consumer_supplies = lp3974_ldo17_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_32khz_ap_data = {
>> + .constraints = {
>> + .name = "32KHz AP",
>> + .always_on = 1,
>> + .state_mem = {
>> + .enabled = 1,
>> + .disabled = 0,
>> + },
>> + },
>> +};
>> +
>> +static struct regulator_init_data lp3974_32khz_cp_data = {
>> + .constraints = {
>> + .name = "32KHz CP",
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> +};
>> +
>> +static struct regulator_init_data lp3974_vichg_data = {
>> + .constraints = {
>> + .name = "VICHG",
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> +};
>> +
>> +static struct regulator_init_data lp3974_esafeout1_data = {
>> + .constraints = {
>> + .name = "SAFEOUT1",
>> + .min_uV = 4800000,
>> + .max_uV = 4800000,
>> + .apply_uV = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_esafeout1_consumer),
>> + .consumer_supplies = lp3974_esafeout1_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_esafeout2_data = {
>> + .constraints = {
>> + .name = "SAFEOUT2",
>> + .min_uV = 4800000,
>> + .max_uV = 4800000,
>> + .apply_uV = 1,
>> + .boot_on = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> + .state_mem = {
>> + .enabled = 0,
>> + .disabled = 1,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_esafeout2_consumer),
>> + .consumer_supplies = lp3974_esafeout2_consumer,
>> +};
>> +
>> +static struct regulator_init_data lp3974_charger_data = {
>> + .constraints = {
>> + .name = "CHARGER",
>> + .min_uA = 100000,
>> + .max_uA = 800000,
>> + .boot_on = 1,
>> + .valid_ops_mask = REGULATOR_CHANGE_STATUS |
>> + REGULATOR_CHANGE_CURRENT,
>> + .state_mem = {
>> + .enabled = 1,
>> + .disabled = 0,
>> + },
>> + /* Charger may be turned on anytime */
>> + .state_disk = {
>> + .enabled = 1,
>> + .disabled = 0,
>> + },
>> + .state_standby = {
>> + .enabled = 1,
>> + .disabled = 0,
>> + },
>> + },
>> + .num_consumer_supplies = ARRAY_SIZE(lp3974_charger_consumer),
>> + .consumer_supplies = lp3974_charger_consumer,
>> +};
>> +
>> +static struct max8998_regulator_data lp3974_regulators[] = {
>> + { MAX8998_LDO2, &lp3974_ldo2_data },
>> + { MAX8998_LDO3, &lp3974_ldo3_data },
>> + { MAX8998_LDO4, &lp3974_ldo4_data },
>> + { MAX8998_LDO5, &lp3974_ldo5_data },
>> + { MAX8998_LDO6, &lp3974_ldo6_data },
>> + { MAX8998_LDO7, &lp3974_ldo7_data },
>> + { MAX8998_LDO8, &lp3974_ldo8_data },
>> + { MAX8998_LDO9, &lp3974_ldo9_data },
>> + { MAX8998_LDO10, &lp3974_ldo10_data },
>> + { MAX8998_LDO11, &lp3974_ldo11_data },
>> + { MAX8998_LDO12, &lp3974_ldo12_data },
>> + { MAX8998_LDO13, &lp3974_ldo13_data },
>> + { MAX8998_LDO14, &lp3974_ldo14_data },
>> + { MAX8998_LDO15, &lp3974_ldo15_data },
>> + { MAX8998_LDO16, &lp3974_ldo16_data },
>> + { MAX8998_LDO17, &lp3974_ldo17_data },
>> + { MAX8998_BUCK1, &lp3974_buck1_data },
>> + { MAX8998_BUCK2, &lp3974_buck2_data },
>> + { MAX8998_BUCK3, &lp3974_buck3_data },
>> + { MAX8998_BUCK4, &lp3974_buck4_data },
>> + { MAX8998_EN32KHZ_AP, &lp3974_32khz_ap_data },
>> + { MAX8998_EN32KHZ_CP, &lp3974_32khz_cp_data },
>> + { MAX8998_ENVICHG, &lp3974_vichg_data },
>> + { MAX8998_ESAFEOUT1, &lp3974_esafeout1_data },
>> + { MAX8998_ESAFEOUT2, &lp3974_esafeout2_data },
>> + { MAX8998_CHARGER, &lp3974_charger_data },
>> +};
>> +
>> +static struct max8998_platform_data universal_lp3974_pdata = {
>> + .irq_base = IRQ_MAX8998_BASE,
>> + .num_regulators = ARRAY_SIZE(lp3974_regulators),
>> + .regulators = lp3974_regulators,
>> + .buck1_set1 = -1,
>> + .buck1_set2 = -1,
>> + .buck2_set3 = -1,
>> + .wakeup = true,
>> + .eoc = 150,
>> + .restart = 100,
>> + .timeout = 5,
>> +};
>> +
>> +static void __init universal_pmic_init(void)
>> +{
>> + int gpio;
>> +
>> + gpio = S5PV310_GPE2(0);
>> + gpio_request(gpio, "BUCK2_EN");
>> + gpio_direction_output(gpio, 0);
>> + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
>> +
>> + gpio = S5PV310_GPX0(3);
>> + gpio_request(gpio, "ARM_OUTPUT_SEL_A");
>> + gpio_direction_output(gpio, universal_max8952_pdata.default_mode % 2);
>> + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
>> +
>> + gpio = S5PV310_GPX0(4);
>> + gpio_request(gpio, "ARM_OUTPUT_SEL_B");
>> + gpio_direction_output(gpio, (universal_max8952_pdata.default_mode / 2) % 2);
>> + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
>> +
>> + gpio = S5PV310_GPX0(5);
>> + gpio_request(gpio, "BUCK1_EN_A");
>> + gpio_direction_output(gpio, 0);
>> + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
>> +
>> + gpio = S5PV310_GPX0(6);
>> + gpio_request(gpio, "BUCK1_EN_B");
>> + gpio_direction_output(gpio, 0);
>> + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
>> +
>> + gpio = S5PV310_GPX0(7);
>> + gpio_request(gpio, "AP_PMIC_IRQ");
>> + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf));
>> + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
>> +
>> + /* TO BE ENABLED LATER
>> + regulator_has_full_constraints();
>> + */
>> +}
>> +
>> +/* GPIO I2C 5 (PMIC) */
>> +enum { I2C5_MAX8952, I2C5_LP3974 };
>> +static struct i2c_board_info i2c5_devs[] __initdata = {
>> + [I2C5_MAX8952] = {
>> + I2C_BOARD_INFO("max8952", 0xC0 >> 1),
>> + .platform_data = &universal_max8952_pdata,
>> + },
>> + [I2C5_LP3974] = {
>> + I2C_BOARD_INFO("lp3974-regerr", 0xCC >> 1),
>> + .platform_data = &universal_lp3974_pdata,
>> + },
>> +};
>> +
>> static struct gpio_keys_button universal_gpio_keys_tables[] = {
>> {
>> .code = KEY_VOLUMEUP,
>> @@ -200,6 +882,7 @@ static struct i2c_board_info i2c1_devs[] __initdata = {
>>
>> static struct platform_device *universal_devices[] __initdata = {
>> /* Samsung Platform Devices */
>> + &s3c_device_i2c5,
>> &mmc0_fixed_voltage,
>> &s3c_device_hsmmc0,
>> &s3c_device_hsmmc2,
>> @@ -224,6 +907,10 @@ static void __init universal_machine_init(void)
>> i2c_register_board_info(0, i2c0_devs, ARRAY_SIZE(i2c0_devs));
>> i2c_register_board_info(1, i2c1_devs, ARRAY_SIZE(i2c1_devs));
>>
>> + universal_pmic_init();
>> + s3c_i2c5_set_platdata(NULL);
>> + i2c_register_board_info(5, i2c5_devs, ARRAY_SIZE(i2c5_devs));
>> +
>> /* Last */
>> platform_add_devices(universal_devices, ARRAY_SIZE(universal_devices));
>> }
>> --
>> 1.6.0.4
>>
>>
>> _______________________________________________
>> linux-arm-kernel mailing list
>> linux-arm-kernel at lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2010-12-23 9:18 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-23 8:56 [PATCH] S5PC210: universal: update support pmic for c210 universal board Donghwa Lee
2010-12-23 9:05 ` Russell King - ARM Linux
2010-12-23 9:06 ` Kyungmin Park
2010-12-23 9:18 ` Donghwa Lee
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox