Samsung Aquila & GONI update
Subsystems (3)
PATCH v3 1/1 Samsung Aquila & GONI update
Hello,
This short patch series adds basic framebuffer defintion to Samsung GONI board as well as PMIC8998 support for both Samsung Aquila and GONI boards. MAX8998 PMIC driver has been accepted by regulator subsystem maintainers and is already available in the 'next' kernel tree (see commit 8d017ab9f81089cb5ffde0e354d13130c1c19999).
Changes since v2:
- cleaned some tabs&spaces errors, renamed max8998_platform_data to {aquila,goni}_max8998_pdata
- removed some superfluous includes
(suggested by Kukjin Kim)
Changes since v1:
- removed all consumer entries, will be readded with aproperiate devices (suggested by Mark Brown)
The series contains the following patches:
[PATCH 1/3] ARM: S5PV210: GONI: add support for framebuffer [PATCH 2/3] ARM: S5PV210: Aquila: add support for MAX8998 PMIC [PATCH 3/3] ARM: S5PV210: GONI: add support for MAX8998 PMIC
Best regards
Signature · 2 lines
Marek Szyprowski Samsung Poland R&D Center
PATCH 1/3 ARM: S5PV210: GONI: add support for framebuffer
This patch adds required platform definitions to enable s3c-fb driver on GONI board. One framebuffer window in 480x800x16bpp mode is defined.
--- arch/arm/mach-s5pv210/Kconfig | 2 ++ arch/arm/mach-s5pv210/mach-goni.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 0 deletions(-)
arch/arm/mach-s5pv210/Kconfig +2 -0
@@ -59,6 +59,8 @@ config MACH_GONI bool "GONI" select CPU_S5PV210 select ARCH_SPARSEMEM_ENABLE + select S5PV210_SETUP_FB_24BPP + select S3C_DEV_FB select S5PC110_DEV_ONENAND help Machine support for Samsung GONI board
arch/arm/mach-s5pv210/mach-goni.c +34 -0
@@ -12,6 +12,7 @@#include <linux/types.h> #include <linux/init.h> #include <linux/serial_core.h> +#include <linux/fb.h> #include <asm/mach/arch.h> #include <asm/mach/map.h>
@@ -20,11 +21,13 @@#include <mach/map.h> #include <mach/regs-clock.h> +#include <mach/regs-fb.h> #include <plat/regs-serial.h> #include <plat/s5pv210.h> #include <plat/devs.h> #include <plat/cpu.h> +#include <plat/fb.h> /* Following are default values for UCON, ULCON and UFCON UART registers */ #define S5PV210_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \
@@ -73,7 +76,35 @@ static struct s3c2410_uartcfg goni_uartcfgs[] __initdata = { }, }; +/* Frame Buffer */ +static struct s3c_fb_pd_win goni_fb_win0 = { + .win_mode = { + .pixclock =1000000000000ULL / ((16 +16 +2 +480 )*(28 +3 +2 +800 )*55 ), + .left_margin =16 , + .right_margin =16 , + .upper_margin =3 , + .lower_margin =28 , + .hsync_len =2 , + .vsync_len =2 , + .xres =480 , + .yres =800 , + .refresh =55 , + }, + .max_bpp =32 , + .default_bpp =16 , +}; + +static struct s3c_fb_platdata goni_lcd_pdata__initdata = { + .win[0 ] = &goni_fb_win0, + .vidcon0 =VIDCON0_VIDOUT_RGB |VIDCON0_PNRMODE_RGB | +VIDCON0_CLKSEL_LCD , + .vidcon1 =VIDCON1_INV_VCLK |VIDCON1_INV_VDEN + |VIDCON1_INV_HSYNC |VIDCON1_INV_VSYNC , + .setup_gpio = s5pv210_fb_gpio_setup_24bpp, +}; +static struct platform_device *goni_devices[]__initdata = { + &s3c_device_fb, &s5pc110_device_onenand, };
@@ -86,6 +117,9 @@ static void __init goni_map_io(void)static void __init goni_machine_init (void ) { +/* FB */ +s3c_fb_set_platdata (&goni_lcd_pdata); +platform_add_devices (goni_devices,ARRAY_SIZE (goni_devices)); }
Signature · 1 line
1.7.1.569.g6f426
PATCH 1/3 ARM: S5PV210: GONI: add support for framebuffer
Review
Quoted 27 lines · Marek Szyprowski
This patch adds required platform definitions to enable s3c-fb driver on GONI board. One framebuffer window in 480x800x16bpp mode is defined.
Signed-off-by Marek Szyprowski <[email protected]>Signed-off-by Kyungmin Park <[email protected]>--- arch/arm/mach-s5pv210/Kconfig | 2 ++ arch/arm/mach-s5pv210/mach-goni.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 0 deletions(-)arch/arm/mach-s5pv210/Kconfig +2
-0@@ -59,6 +59,8 @@ config MACH_GONI bool "GONI" select CPU_S5PV210 select ARCH_SPARSEMEM_ENABLE + select S5PV210_SETUP_FB_24BPP + select S3C_DEV_FB select S5PC110_DEV_ONENAND help Machine support for Samsung GONI board(quoted diff) +0
-0
b/arch/arm/mach-s5pv210/mach-
Quoted 15 lines
goni.c
index 88c38e3..bec488e 100644arch/arm/mach-s5pv210/mach-goni.c +1
-0@@ -12,6 +12,7 @@#include <linux/types.h> #include <linux/init.h> #include <linux/serial_core.h> +#include <linux/fb.h> #include <asm/mach/arch.h> #include <asm/mach/map.h> @@ -20,11 +21,13 @@#include <mach/map.h>
arch/arm/mach-s5pv210/mach-goni.c line 32
Quoted 10 lines
arch/arm/mach-s5pv210/mach-goni.c +2
-0#include <mach/regs-clock.h> +#include <mach/regs-fb.h> #include <plat/regs-serial.h> #include <plat/s5pv210.h> #include <plat/devs.h> #include <plat/cpu.h> +#include <plat/fb.h> /* Following are default values for UCON, ULCON and UFCON UART registers
*/
arch/arm/mach-s5pv210/mach-goni.c static struct s3c2410_uartcfg goni_uartcfgs[]
Quoted 2 lines
arch/arm/mach-s5pv210/mach-goni.c +0
-0#define S5PV210_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \@@ -73,7 +76,35 @@ static struct s3c2410_uartcfg goni_uartcfgs[]
__initdata = {
Quoted 37 lines
arch/arm/mach-s5pv210/mach-goni.c +28
-0}, }; +/* Frame Buffer */ +static struct s3c_fb_pd_win goni_fb_win0 = { + .win_mode = { + .pixclock =1000000000000ULL / ((16 +16 +2 +480 )*(28 +3 +2 +800 )*55 ), + .left_margin =16 , + .right_margin =16 , + .upper_margin =3 , + .lower_margin =28 , + .hsync_len =2 , + .vsync_len =2 , + .xres =480 , + .yres =800 , + .refresh =55 , + }, + .max_bpp =32 , + .default_bpp =16 , +}; + +static struct s3c_fb_platdata goni_lcd_pdata__initdata = { + .win[0 ] = &goni_fb_win0, + .vidcon0 =VIDCON0_VIDOUT_RGB |VIDCON0_PNRMODE_RGB | +VIDCON0_CLKSEL_LCD , + .vidcon1 =VIDCON1_INV_VCLK |VIDCON1_INV_VDEN + |VIDCON1_INV_HSYNC |VIDCON1_INV_VSYNC , + .setup_gpio = s5pv210_fb_gpio_setup_24bpp, +}; +static struct platform_device *goni_devices[]__initdata = { + &s3c_device_fb, &s5pc110_device_onenand, };
arch/arm/mach-s5pv210/mach-goni.c static void __init goni_map_io(void)
Quoted 10 lines
arch/arm/mach-s5pv210/mach-goni.c +3
-1@@ -86,6 +117,9 @@ static void __init goni_map_io(void)static void __init goni_machine_init (void ) { +/* FB */ +s3c_fb_set_platdata (&goni_lcd_pdata); +platform_add_devices (goni_devices,ARRAY_SIZE (goni_devices)); } --
Looks ok..will apply.
Thanks.
Best regards,
Kgene.
--
Kukjin Kim <[email protected]>, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd.
PATCH 2/3 ARM: S5PV210: Aquila: add support for MAX8998 PMIC
In reply to Marek SzyprowskiThis patch adds required platform definitions for MAX8998 PMIC driver. Power regulators for LDO and BUCK outputs has been defined as well as a simple gpio-keys button for power key (to enable wakeup functionality with external interrupt).
--- arch/arm/mach-s5pv210/mach-aquila.c | 325 +++++++++++++++++++++++++++++++++++ 1 files changed, 325 insertions(+), 0 deletions(-)
arch/arm/mach-s5pv210/mach-aquila.c +325 -0
@@ -13,6 +13,12 @@#include <linux/init.h> #include <linux/serial_core.h> #include <linux/fb.h> +#include <linux/i2c.h> +#include <linux/i2c-gpio.h> +#include <linux/mfd/max8998.h> +#include <linux/gpio_keys.h> +#include <linux/input.h> +#include <linux/gpio.h> #include <asm/mach/arch.h> #include <asm/mach/map.h>
@@ -23,6 +29,7 @@#include <mach/regs-clock.h> #include <mach/regs-fb.h> +#include <plat/gpio-cfg.h> #include <plat/regs-serial.h> #include <plat/s5pv210.h> #include <plat/devs.h>
@@ -122,7 +129,320 @@ static struct s3c_fb_platdata aquila_lcd_pdata __initdata = { .setup_gpio = s5pv210_fb_gpio_setup_24bpp, }; +/* MAX8998 regulators */ +#if defined(CONFIG_REGULATOR_MAX8998 ) || defined(CONFIG_REGULATOR_MAX8998_MODULE ) + +static struct regulator_init_data aquila_ldo2_data = { + .constraints = { + .name ="VALIVE_1.1V" , + .min_uV =1100000 , + .max_uV =1100000 , + .apply_uV =1 , + .always_on =1 , + .state_mem = { + .enabled =1 , + }, + }, +}; + +static struct regulator_init_data aquila_ldo3_data = { + .constraints = { + .name ="VUSB/MIPI_1.1V" , + .min_uV =1100000 , + .max_uV =1100000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data aquila_ldo4_data = { + .constraints = { + .name ="VDAC_3.3V" , + .min_uV =3300000 , + .max_uV =3300000 , + .apply_uV =1 , + }, +}; + +static struct regulator_init_data aquila_ldo5_data = { + .constraints = { + .name ="VTF_2.8V" , + .min_uV =2800000 , + .max_uV =2800000 , + .apply_uV =1 , + }, +}; + +static struct regulator_init_data aquila_ldo6_data = { + .constraints = { + .name ="VCC_3.3V" , + .min_uV =3300000 , + .max_uV =3300000 , + .apply_uV =1 , + }, +}; + +static struct regulator_init_data aquila_ldo7_data = { + .constraints = { + .name ="VCC_3.0V" , + .min_uV =3000000 , + .max_uV =3000000 , + .apply_uV =1 , + .boot_on =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data aquila_ldo8_data = { + .constraints = { + .name ="VUSB/VADC_3.3V" , + .min_uV =3300000 , + .max_uV =3300000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data aquila_ldo9_data = { + .constraints = { + .name ="VCC/VCAM_2.8V" , + .min_uV =2800000 , + .max_uV =2800000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data aquila_ldo10_data = { + .constraints = { + .name ="VPLL_1.1V" , + .min_uV =1100000 , + .max_uV =1100000 , + .apply_uV =1 , + .boot_on =1 , + }, +}; + +static struct regulator_init_data aquila_ldo11_data = { + .constraints = { + .name ="CAM_IO_2.8V" , + .min_uV =2800000 , + .max_uV =2800000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data aquila_ldo12_data = { + .constraints = { + .name ="CAM_ISP_1.2V" , + .min_uV =1200000 , + .max_uV =1200000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data aquila_ldo13_data = { + .constraints = { + .name ="CAM_A_2.8V" , + .min_uV =2800000 , + .max_uV =2800000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data aquila_ldo14_data = { + .constraints = { + .name ="CAM_CIF_1.8V" , + .min_uV =1800000 , + .max_uV =1800000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data aquila_ldo15_data = { + .constraints = { + .name ="CAM_AF_3.3V" , + .min_uV =3300000 , + .max_uV =3300000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data aquila_ldo16_data = { + .constraints = { + .name ="VMIPI_1.8V" , + .min_uV =1800000 , + .max_uV =1800000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data aquila_ldo17_data = { + .constraints = { + .name ="CAM_8M_1.8V" , + .min_uV =1800000 , + .max_uV =1800000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +/* BUCK */ +static struct regulator_consumer_supply buck1_consumer[] = { + { .supply ="vddarm" , }, +}; + +static struct regulator_consumer_supply buck2_consumer[] = { + { .supply ="vddint" , }, +}; + +static struct regulator_init_data aquila_buck1_data = { + .constraints = { + .name ="VARM_1.2V" , + .min_uV =1200000 , + .max_uV =1200000 , + .apply_uV =1 , + .valid_ops_mask =REGULATOR_CHANGE_VOLTAGE | +REGULATOR_CHANGE_STATUS , + }, + .num_consumer_supplies =ARRAY_SIZE (buck1_consumer), + .consumer_supplies = buck1_consumer, +}; + +static struct regulator_init_data aquila_buck2_data = { + .constraints = { + .name ="VINT_1.2V" , + .min_uV =1200000 , + .max_uV =1200000 , + .apply_uV =1 , + .valid_ops_mask =REGULATOR_CHANGE_VOLTAGE | +REGULATOR_CHANGE_STATUS , + }, + .num_consumer_supplies =ARRAY_SIZE (buck2_consumer), + .consumer_supplies = buck2_consumer, +}; + +static struct regulator_init_data aquila_buck3_data = { + .constraints = { + .name ="VCC_1.8V" , + .min_uV =1800000 , + .max_uV =1800000 , + .apply_uV =1 , + .state_mem = { + .enabled =1 , + }, + }, +}; + +static struct regulator_init_data aquila_buck4_data = { + .constraints = { + .name ="CAM_CORE_1.2V" , + .min_uV =1200000 , + .max_uV =1200000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct max8998_regulator_data aquila_regulators[] = { + {MAX8998_LDO2 , &aquila_ldo2_data }, + {MAX8998_LDO3 , &aquila_ldo3_data }, + {MAX8998_LDO4 , &aquila_ldo4_data }, + {MAX8998_LDO5 , &aquila_ldo5_data }, + {MAX8998_LDO6 , &aquila_ldo6_data }, + {MAX8998_LDO7 , &aquila_ldo7_data }, + {MAX8998_LDO8 , &aquila_ldo8_data }, + {MAX8998_LDO9 , &aquila_ldo9_data }, + {MAX8998_LDO10 , &aquila_ldo10_data }, + {MAX8998_LDO11 , &aquila_ldo11_data }, + {MAX8998_LDO12 , &aquila_ldo12_data }, + {MAX8998_LDO13 , &aquila_ldo13_data }, + {MAX8998_LDO14 , &aquila_ldo14_data }, + {MAX8998_LDO15 , &aquila_ldo15_data }, + {MAX8998_LDO16 , &aquila_ldo16_data }, + {MAX8998_LDO17 , &aquila_ldo17_data }, + {MAX8998_BUCK1 , &aquila_buck1_data }, + {MAX8998_BUCK2 , &aquila_buck2_data }, + {MAX8998_BUCK3 , &aquila_buck3_data }, + {MAX8998_BUCK4 , &aquila_buck4_data }, +}; + +static struct max8998_platform_data aquila_max8998_pdata = { + .num_regulators =ARRAY_SIZE (aquila_regulators), + .regulators = aquila_regulators, +}; +#endif + +/* GPIO I2C PMIC */ +#define AP_I2C_GPIO_PMIC_BUS_4 4 +static struct i2c_gpio_platform_data aquila_i2c_gpio_pmic_data = { + .sda_pin =S5PV210_GPJ4 (0 ),/* XMSMCSN */ + .scl_pin =S5PV210_GPJ4 (3 ),/* XMSMIRQN */ +}; + +static struct platform_device aquila_i2c_gpio_pmic = { + .name ="i2c-gpio" , + .id =AP_I2C_GPIO_PMIC_BUS_4 , + .dev = { + .platform_data = &aquila_i2c_gpio_pmic_data, + }, +}; + +static struct i2c_board_info i2c_gpio_pmic_devs[] __initdata = { +#if defined(CONFIG_REGULATOR_MAX8998) || defined(CONFIG_REGULATOR_MAX8998_MODULE) + { + /* 0xCC when SRAD = 0 */ + I2C_BOARD_INFO("max8998", 0xCC >> 1), + .platform_data = &aquila_max8998_pdata, + }, +#endif +}; + +/* PMIC Power button */ +static struct gpio_keys_button aquila_gpio_keys_table[] = { + { + .code = KEY_POWER, + .gpio = S5PV210_GPH2(6), + .desc = "gpio-keys: KEY_POWER", + .type = EV_KEY, + .active_low = 1, + .wakeup = 1, + .debounce_interval = 1, + }, +}; + +static struct gpio_keys_platform_data aquila_gpio_keys_data = { + .buttons = aquila_gpio_keys_table, + .nbuttons = ARRAY_SIZE(aquila_gpio_keys_table), +}; + +static struct platform_device aquila_device_gpiokeys = { + .name = "gpio-keys", + .dev = { + .platform_data = &aquila_gpio_keys_data, + }, +}; + +static void __init aquila_pmic_init(void) +{ + /* AP_PMIC_IRQ: EINT7 */ + s3c_gpio_cfgpin(S5PV210_GPH0(7), S3C_GPIO_SFN(0xf)); + s3c_gpio_setpull(S5PV210_GPH0(7), S3C_GPIO_PULL_UP); + + /* nPower: EINT22 */ + s3c_gpio_cfgpin(S5PV210_GPH2(6), S3C_GPIO_SFN(0xf)); + s3c_gpio_setpull(S5PV210_GPH2(6), S3C_GPIO_PULL_UP); +} + static struct platform_device *aquila_devices[] __initdata = { + &aquila_i2c_gpio_pmic, + &aquila_device_gpiokeys, &s3c_device_fb, &s5pc110_device_onenand, };
@@ -136,6 +456,11 @@ static void __init aquila_map_io(void)static void __init aquila_machine_init (void ) { +/* PMIC */ +aquila_pmic_init (); +i2c_register_board_info (AP_I2C_GPIO_PMIC_BUS_4 , i2c_gpio_pmic_devs, +ARRAY_SIZE (i2c_gpio_pmic_devs)); +/* FB */ s3c_fb_set_platdata (&aquila_lcd_pdata);
Signature · 1 line
1.7.1.569.g6f426
PATCH 2/3 ARM: S5PV210: Aquila: add support for MAX8998 PMIC
Quoted 7 lines · Marek Szyprowski
This patch adds required platform definitions for MAX8998 PMIC driver. Power regulators for LDO and BUCK outputs has been defined as well as a simple gpio-keys button for power key (to enable wakeup functionality with external interrupt).
Signed-off-by Marek Szyprowski <[email protected]>Signed-off-by Kyungmin Park <[email protected]>
For the regulator API usage:
PATCH 2/3 ARM: S5PV210: Aquila: add support for MAX8998 PMIC
Quoted 3 lines · Mark Brown
Quoted 1 line · Marek Szyprowski
This patch adds required platform definitions for MAX8998 PMIC driver.
Power
Quoted 10 lines
Quoted 6 lines
regulators for LDO and BUCK outputs has been defined as well as a simple gpio-keys button for power key (to enable wakeup functionality with external interrupt).
Signed-off-by Marek Szyprowski <[email protected]>Signed-off-by Kyungmin Park <[email protected]>For the regulator API usage:
Acked-by Mark Brown <[email protected]>
Thanks for your ack.
Best regards,
Kgene.
--
Kukjin Kim <[email protected]>, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd.
PATCH 2/3 ARM: S5PV210: Aquila: add support for MAX8998 PMIC
In reply to Marek SzyprowskiQuoted 2 lines · Marek Szyprowski
This patch adds required platform definitions for MAX8998 PMIC driver.
Power
Quoted 7 lines
regulators for LDO and BUCK outputs has been defined as well as a simple gpio-keys button for power key (to enable wakeup functionality with external interrupt).
Signed-off-by Marek Szyprowski <[email protected]>Signed-off-by Kyungmin Park <[email protected]>---
Ok..will apply :-)
Thanks.
Best regards,
Kgene.
--
Kukjin Kim <[email protected]>, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd.
PATCH 3/3 ARM: S5PV210: GONI: add support for MAX8998 PMIC
In reply to Marek SzyprowskiThis patch adds required platform definitions for MAX8998 PMIC driver. Power regulators for LDO and BUCK outputs has been defined as well as a simple gpio-keys button for power key (to enable wakeup functionality with external interrupt).
--- arch/arm/mach-s5pv210/mach-goni.c | 324 +++++++++++++++++++++++++++++++++++++ 1 files changed, 324 insertions(+), 0 deletions(-)
arch/arm/mach-s5pv210/mach-goni.c +324 -0
@@ -13,6 +13,12 @@#include <linux/init.h> #include <linux/serial_core.h> #include <linux/fb.h> +#include <linux/i2c.h> +#include <linux/i2c-gpio.h> +#include <linux/mfd/max8998.h> +#include <linux/gpio_keys.h> +#include <linux/input.h> +#include <linux/gpio.h> #include <asm/mach/arch.h> #include <asm/mach/map.h>
@@ -23,6 +29,7 @@#include <mach/regs-clock.h> #include <mach/regs-fb.h> +#include <plat/gpio-cfg.h> #include <plat/regs-serial.h> #include <plat/s5pv210.h> #include <plat/devs.h>
@@ -103,9 +110,322 @@ static struct s3c_fb_platdata goni_lcd_pdata __initdata = { .setup_gpio = s5pv210_fb_gpio_setup_24bpp, }; +/* MAX8998 regulators */ +#if defined(CONFIG_REGULATOR_MAX8998 ) || defined(CONFIG_REGULATOR_MAX8998_MODULE ) + +static struct regulator_init_data goni_ldo2_data = { + .constraints = { + .name ="VALIVE_1.1V" , + .min_uV =1100000 , + .max_uV =1100000 , + .apply_uV =1 , + .always_on =1 , + .state_mem = { + .enabled =1 , + }, + }, +}; + +static struct regulator_init_data goni_ldo3_data = { + .constraints = { + .name ="VUSB/MIPI_1.1V" , + .min_uV =1100000 , + .max_uV =1100000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data goni_ldo4_data = { + .constraints = { + .name ="VDAC_3.3V" , + .min_uV =3300000 , + .max_uV =3300000 , + .apply_uV =1 , + }, +}; + +static struct regulator_init_data goni_ldo5_data = { + .constraints = { + .name ="VTF_2.8V" , + .min_uV =2800000 , + .max_uV =2800000 , + .apply_uV =1 , + }, +}; + +static struct regulator_init_data goni_ldo6_data = { + .constraints = { + .name ="VCC_3.3V" , + .min_uV =3300000 , + .max_uV =3300000 , + .apply_uV =1 , + }, +}; + +static struct regulator_init_data goni_ldo7_data = { + .constraints = { + .name ="VLCD_1.8V" , + .min_uV =1800000 , + .max_uV =1800000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data goni_ldo8_data = { + .constraints = { + .name ="VUSB/VADC_3.3V" , + .min_uV =3300000 , + .max_uV =3300000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data goni_ldo9_data = { + .constraints = { + .name ="VCC/VCAM_2.8V" , + .min_uV =2800000 , + .max_uV =2800000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data goni_ldo10_data = { + .constraints = { + .name ="VPLL_1.1V" , + .min_uV =1100000 , + .max_uV =1100000 , + .apply_uV =1 , + .boot_on =1 , + }, +}; + +static struct regulator_init_data goni_ldo11_data = { + .constraints = { + .name ="CAM_IO_2.8V" , + .min_uV =2800000 , + .max_uV =2800000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data goni_ldo12_data = { + .constraints = { + .name ="CAM_ISP_1.2V" , + .min_uV =1200000 , + .max_uV =1200000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data goni_ldo13_data = { + .constraints = { + .name ="CAM_A_2.8V" , + .min_uV =2800000 , + .max_uV =2800000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data goni_ldo14_data = { + .constraints = { + .name ="CAM_CIF_1.8V" , + .min_uV =1800000 , + .max_uV =1800000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data goni_ldo15_data = { + .constraints = { + .name ="CAM_AF_3.3V" , + .min_uV =3300000 , + .max_uV =3300000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data goni_ldo16_data = { + .constraints = { + .name ="VMIPI_1.8V" , + .min_uV =1800000 , + .max_uV =1800000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct regulator_init_data goni_ldo17_data = { + .constraints = { + .name ="VCC_3.0V_LCD" , + .min_uV =3000000 , + .max_uV =3000000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +/* BUCK */ +static struct regulator_consumer_supply buck1_consumer[] = { + { .supply ="vddarm" , }, +}; + +static struct regulator_consumer_supply buck2_consumer[] = { + { .supply ="vddint" , }, +}; + +static struct regulator_init_data goni_buck1_data = { + .constraints = { + .name ="VARM_1.2V" , + .min_uV =1200000 , + .max_uV =1200000 , + .apply_uV =1 , + .valid_ops_mask =REGULATOR_CHANGE_VOLTAGE | +REGULATOR_CHANGE_STATUS , + }, + .num_consumer_supplies =ARRAY_SIZE (buck1_consumer), + .consumer_supplies = buck1_consumer, +}; + +static struct regulator_init_data goni_buck2_data = { + .constraints = { + .name ="VINT_1.2V" , + .min_uV =1200000 , + .max_uV =1200000 , + .apply_uV =1 , + .valid_ops_mask =REGULATOR_CHANGE_VOLTAGE | +REGULATOR_CHANGE_STATUS , + }, + .num_consumer_supplies =ARRAY_SIZE (buck2_consumer), + .consumer_supplies = buck2_consumer, +}; + +static struct regulator_init_data goni_buck3_data = { + .constraints = { + .name ="VCC_1.8V" , + .min_uV =1800000 , + .max_uV =1800000 , + .apply_uV =1 , + .state_mem = { + .enabled =1 , + }, + }, +}; + +static struct regulator_init_data goni_buck4_data = { + .constraints = { + .name ="CAM_CORE_1.2V" , + .min_uV =1200000 , + .max_uV =1200000 , + .apply_uV =1 , + .always_on =1 , + }, +}; + +static struct max8998_regulator_data goni_regulators[] = { + {MAX8998_LDO2 , &goni_ldo2_data }, + {MAX8998_LDO3 , &goni_ldo3_data }, + {MAX8998_LDO4 , &goni_ldo4_data }, + {MAX8998_LDO5 , &goni_ldo5_data }, + {MAX8998_LDO6 , &goni_ldo6_data }, + {MAX8998_LDO7 , &goni_ldo7_data }, + {MAX8998_LDO8 , &goni_ldo8_data }, + {MAX8998_LDO9 , &goni_ldo9_data }, + {MAX8998_LDO10 , &goni_ldo10_data }, + {MAX8998_LDO11 , &goni_ldo11_data }, + {MAX8998_LDO12 , &goni_ldo12_data }, + {MAX8998_LDO13 , &goni_ldo13_data }, + {MAX8998_LDO14 , &goni_ldo14_data }, + {MAX8998_LDO15 , &goni_ldo15_data }, + {MAX8998_LDO16 , &goni_ldo16_data }, + {MAX8998_LDO17 , &goni_ldo17_data }, + {MAX8998_BUCK1 , &goni_buck1_data }, + {MAX8998_BUCK2 , &goni_buck2_data }, + {MAX8998_BUCK3 , &goni_buck3_data }, + {MAX8998_BUCK4 , &goni_buck4_data }, +}; + +static struct max8998_platform_data goni_max8998_pdata = { + .num_regulators =ARRAY_SIZE (goni_regulators), + .regulators = goni_regulators, +}; +#endif + +/* GPIO I2C PMIC */ +#define AP_I2C_GPIO_PMIC_BUS_4 4 +static struct i2c_gpio_platform_data goni_i2c_gpio_pmic_data = { + .sda_pin =S5PV210_GPJ4 (0 ),/* XMSMCSN */ + .scl_pin =S5PV210_GPJ4 (3 ),/* XMSMIRQN */ +}; + +static struct platform_device goni_i2c_gpio_pmic = { + .name ="i2c-gpio" , + .id =AP_I2C_GPIO_PMIC_BUS_4 , + .dev = { + .platform_data = &goni_i2c_gpio_pmic_data, + }, +}; + +static struct i2c_board_info i2c_gpio_pmic_devs[] __initdata = { +#if defined(CONFIG_REGULATOR_MAX8998) || defined(CONFIG_REGULATOR_MAX8998_MODULE) + { + /* 0xCC when SRAD = 0 */ + I2C_BOARD_INFO("max8998", 0xCC >> 1), + .platform_data = &goni_max8998_pdata, + }, +#endif +}; + +/* PMIC Power button */ +static struct gpio_keys_button goni_gpio_keys_table[] = { + { + .code = KEY_POWER, + .gpio = S5PV210_GPH2(6), + .desc = "gpio-keys: KEY_POWER", + .type = EV_KEY, + .active_low = 1, + .wakeup = 1, + .debounce_interval = 1, + }, +}; + +static struct gpio_keys_platform_data goni_gpio_keys_data = { + .buttons = goni_gpio_keys_table, + .nbuttons = ARRAY_SIZE(goni_gpio_keys_table), +}; + +static struct platform_device goni_device_gpiokeys = { + .name = "gpio-keys", + .dev = { + .platform_data = &goni_gpio_keys_data, + }, +}; + +static void __init goni_pmic_init(void) +{ + /* AP_PMIC_IRQ: EINT7 */ + s3c_gpio_cfgpin(S5PV210_GPH0(7), S3C_GPIO_SFN(0xf)); + s3c_gpio_setpull(S5PV210_GPH0(7), S3C_GPIO_PULL_UP); + + /* nPower: EINT22 */ + s3c_gpio_cfgpin(S5PV210_GPH2(6), S3C_GPIO_SFN(0xf)); + s3c_gpio_setpull(S5PV210_GPH2(6), S3C_GPIO_PULL_UP); +} + + static struct platform_device *goni_devices[] __initdata = { &s3c_device_fb, &s5pc110_device_onenand, + &goni_i2c_gpio_pmic, + &goni_device_gpiokeys, }; static void __init goni_map_io(void)
@@ -117,6 +437,10 @@ static void __init goni_map_io(void)static void __init goni_machine_init (void ) { +/* PMIC */ +goni_pmic_init (); +i2c_register_board_info (AP_I2C_GPIO_PMIC_BUS_4 , i2c_gpio_pmic_devs, +ARRAY_SIZE (i2c_gpio_pmic_devs));/* FB */ s3c_fb_set_platdata (&goni_lcd_pdata);
Signature · 1 line
1.7.1.569.g6f426
PATCH 3/3 ARM: S5PV210: GONI: add support for MAX8998 PMIC
Quoted 7 lines · Marek Szyprowski
This patch adds required platform definitions for MAX8998 PMIC driver. Power regulators for LDO and BUCK outputs has been defined as well as a simple gpio-keys button for power key (to enable wakeup functionality with external interrupt).
Signed-off-by Marek Szyprowski <[email protected]>Signed-off-by Kyungmin Park <[email protected]>
For the regulator API usage:
PATCH 3/3 ARM: S5PV210: GONI: add support for MAX8998 PMIC
In reply to Marek SzyprowskiQuoted 2 lines · Marek Szyprowski
This patch adds required platform definitions for MAX8998 PMIC driver.
Power
Quoted 7 lines
regulators for LDO and BUCK outputs has been defined as well as a simple gpio-keys button for power key (to enable wakeup functionality with external interrupt).
Signed-off-by Marek Szyprowski <[email protected]>Signed-off-by Kyungmin Park <[email protected]>---
Ok..will apply.
Thanks.
Best regards,
Kgene.
--
Kukjin Kim <[email protected]>, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd.