RE: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250

2012-02-09 Thread Kukjin Kim
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

2012-02-09 Thread Kukjin Kim
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

2012-02-04 Thread Sylwester Nawrocki
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

2012-02-02 Thread Grant Likely
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

2012-02-02 Thread Grant Likely
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

2012-01-31 Thread Kyungmin Park
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

2012-01-31 Thread Russell King - ARM Linux
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

2012-01-31 Thread Sylwester Nawrocki
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

2012-01-31 Thread Kukjin Kim
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