From: dh09.lee@samsung.com (Donghwa Lee)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] S5PC210: universal: update support pmic for c210 universal board
Date: Thu, 23 Dec 2010 18:18:33 +0900 [thread overview]
Message-ID: <4D1313E9.6080504@samsung.com> (raw)
In-Reply-To: <AANLkTik=j1zKPHprSbtmz6u=ZTSzHU=H+8JtSL3x2UTk@mail.gmail.com>
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
>>
prev parent reply other threads:[~2010-12-23 9:18 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
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 message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D1313E9.6080504@samsung.com \
--to=dh09.lee@samsung.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.