RE: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250
Kyungmin Park wrote: > > On 2/1/12, Russell King - ARM Linux wrote: > > On Wed, Feb 01, 2012 at 12:50:39AM +0900, Kukjin Kim wrote: > >> From: Sangsu Park > >> > >> This patch adds follwing. > >> - IO-map for EXYNOS5250 GPIO support > >> - EXYNOS5250 GPIO bank size/number definitions > >> - memory map definition for S5P GPIO4 > >> > >> Signed-off-by: Sangsu Park > >> Signed-off-by: Kukjin Kim > > > > Do you actually need these static mapping definitions? The samsung > > gpiolib initialization is called from a core_initcall(), and at this > > time ioremap() is fully capable of working. > > If it assumes it has 8 gpios, you can make it simple calculate it like > this. > But unfortunately, it has not 8 gpios in each gpio bank. Thanks. Best regards, Kgene. -- Kukjin Kim , Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. > enum exynos5_gpios { > EXYNOS5_GPIO_A, > ... > }; > > EXYNOS5_GPIO_A_START(n) (EXYNOS5_GPIO_A * 8) > > with this one, it can make a simple gpio driver when using irq domain for > GPIO. > -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250
Grant Likely wrote: > > On Tue, Jan 31, 2012 at 10:40:43PM +, Russell King - ARM Linux wrote: > > On Wed, Feb 01, 2012 at 12:50:39AM +0900, Kukjin Kim wrote: > > > From: Sangsu Park > > > > > > This patch adds follwing. > > > - IO-map for EXYNOS5250 GPIO support > > > - EXYNOS5250 GPIO bank size/number definitions > > > - memory map definition for S5P GPIO4 > > > > > > Signed-off-by: Sangsu Park > > > Signed-off-by: Kukjin Kim > > > > Do you actually need these static mapping definitions? The samsung > > gpiolib initialization is called from a core_initcall(), and at this > > time ioremap() is fully capable of working. > > Indeed. Please get rid of the S5P_VA_GPIO* macros and use ioremap to > set up the registers mappings. I understand that the existing code > already does that, but I don't want to see any more added. Also, it > is easy to fix by adding the ioremap calls to samsung_gpio_init() > Yes, I agree. Will be updated with ioremap(). Thanks. Best regards, Kgene. -- Kukjin Kim , Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250
On 02/02/2012 07:22 PM, Grant Likely wrote: >>> /* the end of the EXYNOS4 specific gpios */ >>> #define EXYNOS4_GPIO_END (EXYNOS4_GPZ(EXYNOS4_GPIO_Z_NR) + 1) >>> -#define S3C_GPIO_END EXYNOS4_GPIO_END >>> >>> -/* define the number of gpios we need to the one after the GPZ() range */ >>> -#define ARCH_NR_GPIOS (EXYNOS4_GPZ(EXYNOS4_GPIO_Z_NR) + >>> \ >>> -CONFIG_SAMSUNG_GPIO_EXTRA + 1) >>> +/* EXYNOS5 serise */ >>> +/* GPIO bank sizes */ >>> +#define EXYNOS5_GPIO_A0_NR (8) >> >> nit: It's been always a mystery to me, what are the parentheses around the >> numbers helpful for ? IMHO even if there is more things like this in >> the file it might be better to skip extra parentheses here. > > It protects against the preprocessor combining a macro with other code in > unpredictable ways. For example: > > #define SIZE 10 + 20 > int i = SIZE * 5; > > Without the parenthesis the result of i is 110, when the programmer would > expect 150. Right, I guess it's a fundamental requirement most people are aware about. Nevertheless my point were only single integers. > For single integers like these, the parenthesis aren't actually necessary, but > I given that for every other #define it is good practice, I don't object to > seeing them on single integers also. I respect that but I have a different opinion. :-) Those parentheses have always been bugging me, they decrease readability for virtually no benefit. They're more an aesthetic issue though so I wouldn't argue more about it. Just will try to get used, and I'll avoid them where possible. :-) -- Regards, Sylwester -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250
On Tue, Jan 31, 2012 at 10:40:43PM +, Russell King - ARM Linux wrote: > On Wed, Feb 01, 2012 at 12:50:39AM +0900, Kukjin Kim wrote: > > From: Sangsu Park > > > > This patch adds follwing. > > - IO-map for EXYNOS5250 GPIO support > > - EXYNOS5250 GPIO bank size/number definitions > > - memory map definition for S5P GPIO4 > > > > Signed-off-by: Sangsu Park > > Signed-off-by: Kukjin Kim > > Do you actually need these static mapping definitions? The samsung > gpiolib initialization is called from a core_initcall(), and at this > time ioremap() is fully capable of working. Indeed. Please get rid of the S5P_VA_GPIO* macros and use ioremap to set up the registers mappings. I understand that the existing code already does that, but I don't want to see any more added. Also, it is easy to fix by adding the ioremap calls to samsung_gpio_init() g. -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250
On Tue, Jan 31, 2012 at 05:34:02PM +0100, Sylwester Nawrocki wrote: > Hi Kukjin, > > I have few comments below... > > On 01/31/2012 04:50 PM, Kukjin Kim wrote: > > From: Sangsu Park > > > > This patch adds follwing. > > s/follwing/following. > > nit: AFAIK it's a good habit not to start a commit description > with "This patch.." > "This patch..." descriptions are just fine. I write a lot of patches that way, but I do expect description of not just what a patch does, but why the patch is necessary. > > -/* EXYNOS4 GPIO number definitions */ > > +/* GPIO number definitions */ > > #define EXYNOS4_GPA0(_nr) (EXYNOS4_GPIO_A0_START + (_nr)) > > #define EXYNOS4_GPA1(_nr) (EXYNOS4_GPIO_A1_START + (_nr)) > > #define EXYNOS4_GPB(_nr) (EXYNOS4_GPIO_B_START + (_nr)) > > @@ -140,10 +139,138 @@ enum s5p_gpio_number { > > > > /* the end of the EXYNOS4 specific gpios */ > > #define EXYNOS4_GPIO_END (EXYNOS4_GPZ(EXYNOS4_GPIO_Z_NR) + 1) > > -#define S3C_GPIO_END EXYNOS4_GPIO_END > > > > -/* define the number of gpios we need to the one after the GPZ() range */ > > -#define ARCH_NR_GPIOS (EXYNOS4_GPZ(EXYNOS4_GPIO_Z_NR) + > > \ > > -CONFIG_SAMSUNG_GPIO_EXTRA + 1) > > +/* EXYNOS5 serise */ > > +/* GPIO bank sizes */ > > +#define EXYNOS5_GPIO_A0_NR (8) > > nit: It's been always a mystery to me, what are the parentheses around the > numbers helpful for ? IMHO even if there is more things like this in > the file it might be better to skip extra parentheses here. It protects against the preprocessor combining a macro with other code in unpredictable ways. For example: #define SIZE 10 + 20 int i = SIZE * 5; Without the parenthesis the result of i is 110, when the programmer would expect 150. For single integers like these, the parenthesis aren't actually necessary, but I given that for every other #define it is good practice, I don't object to seeing them on single integers also. g. -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250
On 2/1/12, Russell King - ARM Linux wrote: > On Wed, Feb 01, 2012 at 12:50:39AM +0900, Kukjin Kim wrote: >> From: Sangsu Park >> >> This patch adds follwing. >> - IO-map for EXYNOS5250 GPIO support >> - EXYNOS5250 GPIO bank size/number definitions >> - memory map definition for S5P GPIO4 >> >> Signed-off-by: Sangsu Park >> Signed-off-by: Kukjin Kim > > Do you actually need these static mapping definitions? The samsung > gpiolib initialization is called from a core_initcall(), and at this > time ioremap() is fully capable of working. If it assumes it has 8 gpios, you can make it simple calculate it like this. enum exynos5_gpios { EXYNOS5_GPIO_A, ... }; EXYNOS5_GPIO_A_START(n) (EXYNOS5_GPIO_A * 8) with this one, it can make a simple gpio driver when using irq domain for GPIO. Thank you, Kyungmin Park > -- > To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" > in > the body of a message to majord...@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250
On Wed, Feb 01, 2012 at 12:50:39AM +0900, Kukjin Kim wrote: > From: Sangsu Park > > This patch adds follwing. > - IO-map for EXYNOS5250 GPIO support > - EXYNOS5250 GPIO bank size/number definitions > - memory map definition for S5P GPIO4 > > Signed-off-by: Sangsu Park > Signed-off-by: Kukjin Kim Do you actually need these static mapping definitions? The samsung gpiolib initialization is called from a core_initcall(), and at this time ioremap() is fully capable of working. -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250
Hi Kukjin, I have few comments below... On 01/31/2012 04:50 PM, Kukjin Kim wrote: > From: Sangsu Park > > This patch adds follwing. s/follwing/following. nit: AFAIK it's a good habit not to start a commit description with "This patch.." > - IO-map for EXYNOS5250 GPIO support > - EXYNOS5250 GPIO bank size/number definitions > - memory map definition for S5P GPIO4 > > Signed-off-by: Sangsu Park > Signed-off-by: Kukjin Kim > --- > arch/arm/mach-exynos/common.c| 20 +++ > arch/arm/mach-exynos/include/mach/gpio.h | 221 > -- > arch/arm/mach-exynos/include/mach/map.h |4 + > arch/arm/plat-samsung/include/plat/map-s5p.h |1 + > 4 files changed, 199 insertions(+), 47 deletions(-) > > diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c > index 6ab3c5a..225acc7 100644 > --- a/arch/arm/mach-exynos/common.c > +++ b/arch/arm/mach-exynos/common.c > @@ -271,6 +271,26 @@ static struct map_desc exynos5_iodesc[] __initdata = { > .pfn= __phys_to_pfn(EXYNOS5_PA_GIC_DIST), > .length = SZ_64K, > .type = MT_DEVICE, > + }, { > + .virtual= (unsigned long)S5P_VA_GPIO1, > + .pfn= __phys_to_pfn(EXYNOS5_PA_GPIO1), > + .length = SZ_4K, > + .type = MT_DEVICE, > + }, { > + .virtual= (unsigned long)S5P_VA_GPIO2, > + .pfn= __phys_to_pfn(EXYNOS5_PA_GPIO2), > + .length = SZ_4K, > + .type = MT_DEVICE, > + }, { > + .virtual= (unsigned long)S5P_VA_GPIO3, > + .pfn= __phys_to_pfn(EXYNOS5_PA_GPIO3), > + .length = SZ_4K, > + .type = MT_DEVICE, > + }, { > + .virtual= (unsigned long)S5P_VA_GPIO4, > + .pfn= __phys_to_pfn(EXYNOS5_PA_GPIO4), > + .length = SZ_256, > + .type = MT_DEVICE, > }, > }; > > diff --git a/arch/arm/mach-exynos/include/mach/gpio.h > b/arch/arm/mach-exynos/include/mach/gpio.h > index 80523ca..a9c3944 100644 > --- a/arch/arm/mach-exynos/include/mach/gpio.h > +++ b/arch/arm/mach-exynos/include/mach/gpio.h > @@ -13,8 +13,11 @@ > #ifndef __ASM_ARCH_GPIO_H > #define __ASM_ARCH_GPIO_H __FILE__ > > -/* Practically, GPIO banks up to GPZ are the configurable gpio banks */ > +/* MACRO for EXYNOS GPIO numbering */ > +#define EXYNOS_GPIO_NEXT(__gpio) \ > + ((__gpio##_START) + (__gpio##_NR) + CONFIG_S3C_GPIO_SPACE + 1) > > +/* EXYNOS4 serise */ > /* GPIO bank sizes */ > #define EXYNOS4_GPIO_A0_NR (8) > #define EXYNOS4_GPIO_A1_NR (6) > @@ -55,51 +58,47 @@ > #define EXYNOS4_GPIO_Z_NR(7) > > /* GPIO bank numbers */ > - > -#define EXYNOS4_GPIO_NEXT(__gpio) \ > - ((__gpio##_START) + (__gpio##_NR) + CONFIG_S3C_GPIO_SPACE + 1) > - > -enum s5p_gpio_number { > +enum exynos4_gpio_number { > EXYNOS4_GPIO_A0_START = 0, > - EXYNOS4_GPIO_A1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_A0), > - EXYNOS4_GPIO_B_START= EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_A1), > - EXYNOS4_GPIO_C0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_B), > - EXYNOS4_GPIO_C1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_C0), > - EXYNOS4_GPIO_D0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_C1), > - EXYNOS4_GPIO_D1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_D0), > - EXYNOS4_GPIO_E0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_D1), > - EXYNOS4_GPIO_E1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_E0), > - EXYNOS4_GPIO_E2_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_E1), > - EXYNOS4_GPIO_E3_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_E2), > - EXYNOS4_GPIO_E4_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_E3), > - EXYNOS4_GPIO_F0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_E4), > - EXYNOS4_GPIO_F1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_F0), > - EXYNOS4_GPIO_F2_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_F1), > - EXYNOS4_GPIO_F3_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_F2), > - EXYNOS4_GPIO_J0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_F3), > - EXYNOS4_GPIO_J1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_J0), > - EXYNOS4_GPIO_K0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_J1), > - EXYNOS4_GPIO_K1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_K0), > - EXYNOS4_GPIO_K2_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_K1), > - EXYNOS4_GPIO_K3_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_K2), > - EXYNOS4_GPIO_L0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_K3), > - EXYNOS4_GPIO_L1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_L0), > - EXYNOS4_GPIO_L2_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_L1), > - EXYNOS4_GPIO_X0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_L2), > - EXYNOS4_GPIO_X1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_X0), > - EXYNOS4_GPIO_X2_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_X1), > - EXYNOS4_GPIO_X
[PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250
From: Sangsu Park This patch adds follwing. - IO-map for EXYNOS5250 GPIO support - EXYNOS5250 GPIO bank size/number definitions - memory map definition for S5P GPIO4 Signed-off-by: Sangsu Park Signed-off-by: Kukjin Kim --- arch/arm/mach-exynos/common.c| 20 +++ arch/arm/mach-exynos/include/mach/gpio.h | 221 -- arch/arm/mach-exynos/include/mach/map.h |4 + arch/arm/plat-samsung/include/plat/map-s5p.h |1 + 4 files changed, 199 insertions(+), 47 deletions(-) diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c index 6ab3c5a..225acc7 100644 --- a/arch/arm/mach-exynos/common.c +++ b/arch/arm/mach-exynos/common.c @@ -271,6 +271,26 @@ static struct map_desc exynos5_iodesc[] __initdata = { .pfn= __phys_to_pfn(EXYNOS5_PA_GIC_DIST), .length = SZ_64K, .type = MT_DEVICE, + }, { + .virtual= (unsigned long)S5P_VA_GPIO1, + .pfn= __phys_to_pfn(EXYNOS5_PA_GPIO1), + .length = SZ_4K, + .type = MT_DEVICE, + }, { + .virtual= (unsigned long)S5P_VA_GPIO2, + .pfn= __phys_to_pfn(EXYNOS5_PA_GPIO2), + .length = SZ_4K, + .type = MT_DEVICE, + }, { + .virtual= (unsigned long)S5P_VA_GPIO3, + .pfn= __phys_to_pfn(EXYNOS5_PA_GPIO3), + .length = SZ_4K, + .type = MT_DEVICE, + }, { + .virtual= (unsigned long)S5P_VA_GPIO4, + .pfn= __phys_to_pfn(EXYNOS5_PA_GPIO4), + .length = SZ_256, + .type = MT_DEVICE, }, }; diff --git a/arch/arm/mach-exynos/include/mach/gpio.h b/arch/arm/mach-exynos/include/mach/gpio.h index 80523ca..a9c3944 100644 --- a/arch/arm/mach-exynos/include/mach/gpio.h +++ b/arch/arm/mach-exynos/include/mach/gpio.h @@ -13,8 +13,11 @@ #ifndef __ASM_ARCH_GPIO_H #define __ASM_ARCH_GPIO_H __FILE__ -/* Practically, GPIO banks up to GPZ are the configurable gpio banks */ +/* MACRO for EXYNOS GPIO numbering */ +#define EXYNOS_GPIO_NEXT(__gpio) \ + ((__gpio##_START) + (__gpio##_NR) + CONFIG_S3C_GPIO_SPACE + 1) +/* EXYNOS4 serise */ /* GPIO bank sizes */ #define EXYNOS4_GPIO_A0_NR (8) #define EXYNOS4_GPIO_A1_NR (6) @@ -55,51 +58,47 @@ #define EXYNOS4_GPIO_Z_NR (7) /* GPIO bank numbers */ - -#define EXYNOS4_GPIO_NEXT(__gpio) \ - ((__gpio##_START) + (__gpio##_NR) + CONFIG_S3C_GPIO_SPACE + 1) - -enum s5p_gpio_number { +enum exynos4_gpio_number { EXYNOS4_GPIO_A0_START = 0, - EXYNOS4_GPIO_A1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_A0), - EXYNOS4_GPIO_B_START= EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_A1), - EXYNOS4_GPIO_C0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_B), - EXYNOS4_GPIO_C1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_C0), - EXYNOS4_GPIO_D0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_C1), - EXYNOS4_GPIO_D1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_D0), - EXYNOS4_GPIO_E0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_D1), - EXYNOS4_GPIO_E1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_E0), - EXYNOS4_GPIO_E2_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_E1), - EXYNOS4_GPIO_E3_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_E2), - EXYNOS4_GPIO_E4_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_E3), - EXYNOS4_GPIO_F0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_E4), - EXYNOS4_GPIO_F1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_F0), - EXYNOS4_GPIO_F2_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_F1), - EXYNOS4_GPIO_F3_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_F2), - EXYNOS4_GPIO_J0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_F3), - EXYNOS4_GPIO_J1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_J0), - EXYNOS4_GPIO_K0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_J1), - EXYNOS4_GPIO_K1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_K0), - EXYNOS4_GPIO_K2_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_K1), - EXYNOS4_GPIO_K3_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_K2), - EXYNOS4_GPIO_L0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_K3), - EXYNOS4_GPIO_L1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_L0), - EXYNOS4_GPIO_L2_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_L1), - EXYNOS4_GPIO_X0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_L2), - EXYNOS4_GPIO_X1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_X0), - EXYNOS4_GPIO_X2_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_X1), - EXYNOS4_GPIO_X3_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_X2), - EXYNOS4_GPIO_Y0_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_X3), - EXYNOS4_GPIO_Y1_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y0), - EXYNOS4_GPIO_Y2_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y1), - EXYNOS4_GPIO_Y3_START