* [PATCH 0/2] ARM: EXYNOS: support GPIO for EXYNOS5250 @ 2012-01-31 15:50 ` Kukjin Kim 0 siblings, 0 replies; 22+ messages in thread From: Kukjin Kim @ 2012-01-31 15:50 UTC (permalink / raw) To: linux-arm-kernel, linux-samsung-soc; +Cc: Grant Likely This patch adds support GPIOlib for EXYNOS5250 SoC. Note: this patch depends on supporting EXYNOS5250 patches and will be updated when EXYNOS5 DT is supported. [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 [PATCH 2/2] gpio/samsung: add support GPIOlib for EXYNOS5250 ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 0/2] ARM: EXYNOS: support GPIO for EXYNOS5250 @ 2012-01-31 15:50 ` Kukjin Kim 0 siblings, 0 replies; 22+ messages in thread From: Kukjin Kim @ 2012-01-31 15:50 UTC (permalink / raw) To: linux-arm-kernel This patch adds support GPIOlib for EXYNOS5250 SoC. Note: this patch depends on supporting EXYNOS5250 patches and will be updated when EXYNOS5 DT is supported. [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 [PATCH 2/2] gpio/samsung: add support GPIOlib for EXYNOS5250 ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 2012-01-31 15:50 ` Kukjin Kim @ 2012-01-31 15:50 ` Kukjin Kim -1 siblings, 0 replies; 22+ messages in thread From: Kukjin Kim @ 2012-01-31 15:50 UTC (permalink / raw) To: linux-arm-kernel, linux-samsung-soc; +Cc: Grant Likely, Sangsu Park, Kukjin Kim From: Sangsu Park <sangsu4u.park@samsung.com> 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 <sangsu4u.park@samsung.com> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> --- 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 = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y2), - EXYNOS4_GPIO_Y4_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y3), - EXYNOS4_GPIO_Y5_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y4), - EXYNOS4_GPIO_Y6_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y5), - EXYNOS4_GPIO_Z_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y6), + EXYNOS4_GPIO_A1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_A0), + EXYNOS4_GPIO_B_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_A1), + EXYNOS4_GPIO_C0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_B), + EXYNOS4_GPIO_C1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_C0), + EXYNOS4_GPIO_D0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_C1), + EXYNOS4_GPIO_D1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_D0), + EXYNOS4_GPIO_E0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_D1), + EXYNOS4_GPIO_E1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E0), + EXYNOS4_GPIO_E2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E1), + EXYNOS4_GPIO_E3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E2), + EXYNOS4_GPIO_E4_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E3), + EXYNOS4_GPIO_F0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E4), + EXYNOS4_GPIO_F1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F0), + EXYNOS4_GPIO_F2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F1), + EXYNOS4_GPIO_F3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F2), + EXYNOS4_GPIO_J0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F3), + EXYNOS4_GPIO_J1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_J0), + EXYNOS4_GPIO_K0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_J1), + EXYNOS4_GPIO_K1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K0), + EXYNOS4_GPIO_K2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K1), + EXYNOS4_GPIO_K3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K2), + EXYNOS4_GPIO_L0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K3), + EXYNOS4_GPIO_L1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_L0), + EXYNOS4_GPIO_L2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_L1), + EXYNOS4_GPIO_X0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_L2), + EXYNOS4_GPIO_X1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X0), + EXYNOS4_GPIO_X2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X1), + EXYNOS4_GPIO_X3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X2), + EXYNOS4_GPIO_Y0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X3), + EXYNOS4_GPIO_Y1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y0), + EXYNOS4_GPIO_Y2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y1), + EXYNOS4_GPIO_Y3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y2), + EXYNOS4_GPIO_Y4_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y3), + EXYNOS4_GPIO_Y5_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y4), + EXYNOS4_GPIO_Y6_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y5), + EXYNOS4_GPIO_Z_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y6), }; -/* 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) +#define EXYNOS5_GPIO_A1_NR (6) +#define EXYNOS5_GPIO_A2_NR (8) +#define EXYNOS5_GPIO_B0_NR (5) +#define EXYNOS5_GPIO_B1_NR (5) +#define EXYNOS5_GPIO_B2_NR (4) +#define EXYNOS5_GPIO_B3_NR (4) +#define EXYNOS5_GPIO_C0_NR (7) +#define EXYNOS5_GPIO_C1_NR (7) +#define EXYNOS5_GPIO_C2_NR (7) +#define EXYNOS5_GPIO_C3_NR (7) +#define EXYNOS5_GPIO_D0_NR (8) +#define EXYNOS5_GPIO_D1_NR (8) +#define EXYNOS5_GPIO_Y0_NR (6) +#define EXYNOS5_GPIO_Y1_NR (4) +#define EXYNOS5_GPIO_Y2_NR (6) +#define EXYNOS5_GPIO_Y3_NR (8) +#define EXYNOS5_GPIO_Y4_NR (8) +#define EXYNOS5_GPIO_Y5_NR (8) +#define EXYNOS5_GPIO_Y6_NR (8) +#define EXYNOS5_GPIO_X0_NR (8) +#define EXYNOS5_GPIO_X1_NR (8) +#define EXYNOS5_GPIO_X2_NR (8) +#define EXYNOS5_GPIO_X3_NR (8) +#define EXYNOS5_GPIO_E0_NR (8) +#define EXYNOS5_GPIO_E1_NR (2) +#define EXYNOS5_GPIO_F0_NR (4) +#define EXYNOS5_GPIO_F1_NR (4) +#define EXYNOS5_GPIO_G0_NR (8) +#define EXYNOS5_GPIO_G1_NR (8) +#define EXYNOS5_GPIO_G2_NR (2) +#define EXYNOS5_GPIO_H0_NR (4) +#define EXYNOS5_GPIO_H1_NR (8) +#define EXYNOS5_GPIO_V0_NR (8) +#define EXYNOS5_GPIO_V1_NR (8) +#define EXYNOS5_GPIO_V2_NR (8) +#define EXYNOS5_GPIO_V3_NR (8) +#define EXYNOS5_GPIO_V4_NR (2) +#define EXYNOS5_GPIO_Z_NR (7) + +/* GPIO bank numbers */ +enum exynos5_gpio_number { + EXYNOS5_GPIO_A0_START = 0, + EXYNOS5_GPIO_A1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_A0), + EXYNOS5_GPIO_A2_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_A1), + EXYNOS5_GPIO_B0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_A2), + EXYNOS5_GPIO_B1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_B0), + EXYNOS5_GPIO_B2_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_B1), + EXYNOS5_GPIO_B3_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_B2), + EXYNOS5_GPIO_C0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_B3), + EXYNOS5_GPIO_C1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_C0), + EXYNOS5_GPIO_C2_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_C1), + EXYNOS5_GPIO_C3_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_C2), + EXYNOS5_GPIO_D0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_C3), + EXYNOS5_GPIO_D1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_D0), + EXYNOS5_GPIO_Y0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_D1), + EXYNOS5_GPIO_Y1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y0), + EXYNOS5_GPIO_Y2_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y1), + EXYNOS5_GPIO_Y3_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y2), + EXYNOS5_GPIO_Y4_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y3), + EXYNOS5_GPIO_Y5_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y4), + EXYNOS5_GPIO_Y6_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y5), + EXYNOS5_GPIO_X0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y6), + EXYNOS5_GPIO_X1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_X0), + EXYNOS5_GPIO_X2_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_X1), + EXYNOS5_GPIO_X3_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_X2), + EXYNOS5_GPIO_E0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_X3), + EXYNOS5_GPIO_E1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_E0), + EXYNOS5_GPIO_F0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_E1), + EXYNOS5_GPIO_F1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_F0), + EXYNOS5_GPIO_G0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_F1), + EXYNOS5_GPIO_G1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_G0), + EXYNOS5_GPIO_G2_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_G1), + EXYNOS5_GPIO_H0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_G2), + EXYNOS5_GPIO_H1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_H0), + EXYNOS5_GPIO_V0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_H1), + EXYNOS5_GPIO_V1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_V0), + EXYNOS5_GPIO_V2_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_V1), + EXYNOS5_GPIO_V3_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_V2), + EXYNOS5_GPIO_V4_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_V3), + EXYNOS5_GPIO_Z_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_V4), +}; + +/* GPIO number definitions */ +#define EXYNOS5_GPA0(_nr) (EXYNOS5_GPIO_A0_START + (_nr)) +#define EXYNOS5_GPA1(_nr) (EXYNOS5_GPIO_A1_START + (_nr)) +#define EXYNOS5_GPA2(_nr) (EXYNOS5_GPIO_A2_START + (_nr)) +#define EXYNOS5_GPB0(_nr) (EXYNOS5_GPIO_B0_START + (_nr)) +#define EXYNOS5_GPB1(_nr) (EXYNOS5_GPIO_B1_START + (_nr)) +#define EXYNOS5_GPB2(_nr) (EXYNOS5_GPIO_B2_START + (_nr)) +#define EXYNOS5_GPB3(_nr) (EXYNOS5_GPIO_B3_START + (_nr)) +#define EXYNOS5_GPC0(_nr) (EXYNOS5_GPIO_C0_START + (_nr)) +#define EXYNOS5_GPC1(_nr) (EXYNOS5_GPIO_C1_START + (_nr)) +#define EXYNOS5_GPC2(_nr) (EXYNOS5_GPIO_C2_START + (_nr)) +#define EXYNOS5_GPC3(_nr) (EXYNOS5_GPIO_C3_START + (_nr)) +#define EXYNOS5_GPD0(_nr) (EXYNOS5_GPIO_D0_START + (_nr)) +#define EXYNOS5_GPD1(_nr) (EXYNOS5_GPIO_D1_START + (_nr)) +#define EXYNOS5_GPY0(_nr) (EXYNOS5_GPIO_Y0_START + (_nr)) +#define EXYNOS5_GPY1(_nr) (EXYNOS5_GPIO_Y1_START + (_nr)) +#define EXYNOS5_GPY2(_nr) (EXYNOS5_GPIO_Y2_START + (_nr)) +#define EXYNOS5_GPY3(_nr) (EXYNOS5_GPIO_Y3_START + (_nr)) +#define EXYNOS5_GPY4(_nr) (EXYNOS5_GPIO_Y4_START + (_nr)) +#define EXYNOS5_GPY5(_nr) (EXYNOS5_GPIO_Y5_START + (_nr)) +#define EXYNOS5_GPY6(_nr) (EXYNOS5_GPIO_Y6_START + (_nr)) +#define EXYNOS5_GPX0(_nr) (EXYNOS5_GPIO_X0_START + (_nr)) +#define EXYNOS5_GPX1(_nr) (EXYNOS5_GPIO_X1_START + (_nr)) +#define EXYNOS5_GPX2(_nr) (EXYNOS5_GPIO_X2_START + (_nr)) +#define EXYNOS5_GPX3(_nr) (EXYNOS5_GPIO_X3_START + (_nr)) +#define EXYNOS5_GPE0(_nr) (EXYNOS5_GPIO_E0_START + (_nr)) +#define EXYNOS5_GPE1(_nr) (EXYNOS5_GPIO_E1_START + (_nr)) +#define EXYNOS5_GPF0(_nr) (EXYNOS5_GPIO_F0_START + (_nr)) +#define EXYNOS5_GPF1(_nr) (EXYNOS5_GPIO_F1_START + (_nr)) +#define EXYNOS5_GPG0(_nr) (EXYNOS5_GPIO_G0_START + (_nr)) +#define EXYNOS5_GPG1(_nr) (EXYNOS5_GPIO_G1_START + (_nr)) +#define EXYNOS5_GPG2(_nr) (EXYNOS5_GPIO_G2_START + (_nr)) +#define EXYNOS5_GPH0(_nr) (EXYNOS5_GPIO_H0_START + (_nr)) +#define EXYNOS5_GPH1(_nr) (EXYNOS5_GPIO_H1_START + (_nr)) +#define EXYNOS5_GPV0(_nr) (EXYNOS5_GPIO_V0_START + (_nr)) +#define EXYNOS5_GPV1(_nr) (EXYNOS5_GPIO_V1_START + (_nr)) +#define EXYNOS5_GPV2(_nr) (EXYNOS5_GPIO_V2_START + (_nr)) +#define EXYNOS5_GPV3(_nr) (EXYNOS5_GPIO_V3_START + (_nr)) +#define EXYNOS5_GPV4(_nr) (EXYNOS5_GPIO_V4_START + (_nr)) +#define EXYNOS5_GPZ(_nr) (EXYNOS5_GPIO_Z_START + (_nr)) + +/* the end of the EXYNOS5 specific gpios */ +#define EXYNOS5_GPIO_END (EXYNOS5_GPZ(EXYNOS5_GPIO_Z_NR) + 1) + +#define S3C_GPIO_END (EXYNOS4_GPIO_END > EXYNOS5_GPIO_END ?\ + EXYNOS4_GPIO_END : EXYNOS5_GPIO_END) +#define ARCH_NR_GPIOS (CONFIG_SAMSUNG_GPIO_EXTRA + S3C_GPIO_END) #endif /* __ASM_ARCH_GPIO_H */ diff --git a/arch/arm/mach-exynos/include/mach/map.h b/arch/arm/mach-exynos/include/mach/map.h index 300ed7e..b157eb4 100644 --- a/arch/arm/mach-exynos/include/mach/map.h +++ b/arch/arm/mach-exynos/include/mach/map.h @@ -107,6 +107,10 @@ #define EXYNOS4_PA_GPIO1 0x11400000 #define EXYNOS4_PA_GPIO2 0x11000000 #define EXYNOS4_PA_GPIO3 0x03860000 +#define EXYNOS5_PA_GPIO1 0x11400000 +#define EXYNOS5_PA_GPIO2 0x13400000 +#define EXYNOS5_PA_GPIO3 0x10D10000 +#define EXYNOS5_PA_GPIO4 0x03680000 #define EXYNOS4_PA_MIPI_CSIS0 0x11880000 #define EXYNOS4_PA_MIPI_CSIS1 0x11890000 diff --git a/arch/arm/plat-samsung/include/plat/map-s5p.h b/arch/arm/plat-samsung/include/plat/map-s5p.h index c2d7bda..01e8d83 100644 --- a/arch/arm/plat-samsung/include/plat/map-s5p.h +++ b/arch/arm/plat-samsung/include/plat/map-s5p.h @@ -20,6 +20,7 @@ #define S5P_VA_GPIO1 S5P_VA_GPIO #define S5P_VA_GPIO2 S3C_ADDR(0x02240000) #define S5P_VA_GPIO3 S3C_ADDR(0x02280000) +#define S5P_VA_GPIO4 S3C_ADDR(0x022C0000) #define S5P_VA_SYSRAM S3C_ADDR(0x02400000) #define S5P_VA_DMC0 S3C_ADDR(0x02440000) -- 1.7.4.4 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 @ 2012-01-31 15:50 ` Kukjin Kim 0 siblings, 0 replies; 22+ messages in thread From: Kukjin Kim @ 2012-01-31 15:50 UTC (permalink / raw) To: linux-arm-kernel From: Sangsu Park <sangsu4u.park@samsung.com> 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 <sangsu4u.park@samsung.com> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> --- 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 = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y2), - EXYNOS4_GPIO_Y4_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y3), - EXYNOS4_GPIO_Y5_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y4), - EXYNOS4_GPIO_Y6_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y5), - EXYNOS4_GPIO_Z_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y6), + EXYNOS4_GPIO_A1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_A0), + EXYNOS4_GPIO_B_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_A1), + EXYNOS4_GPIO_C0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_B), + EXYNOS4_GPIO_C1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_C0), + EXYNOS4_GPIO_D0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_C1), + EXYNOS4_GPIO_D1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_D0), + EXYNOS4_GPIO_E0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_D1), + EXYNOS4_GPIO_E1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E0), + EXYNOS4_GPIO_E2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E1), + EXYNOS4_GPIO_E3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E2), + EXYNOS4_GPIO_E4_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E3), + EXYNOS4_GPIO_F0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E4), + EXYNOS4_GPIO_F1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F0), + EXYNOS4_GPIO_F2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F1), + EXYNOS4_GPIO_F3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F2), + EXYNOS4_GPIO_J0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F3), + EXYNOS4_GPIO_J1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_J0), + EXYNOS4_GPIO_K0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_J1), + EXYNOS4_GPIO_K1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K0), + EXYNOS4_GPIO_K2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K1), + EXYNOS4_GPIO_K3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K2), + EXYNOS4_GPIO_L0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K3), + EXYNOS4_GPIO_L1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_L0), + EXYNOS4_GPIO_L2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_L1), + EXYNOS4_GPIO_X0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_L2), + EXYNOS4_GPIO_X1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X0), + EXYNOS4_GPIO_X2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X1), + EXYNOS4_GPIO_X3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X2), + EXYNOS4_GPIO_Y0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X3), + EXYNOS4_GPIO_Y1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y0), + EXYNOS4_GPIO_Y2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y1), + EXYNOS4_GPIO_Y3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y2), + EXYNOS4_GPIO_Y4_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y3), + EXYNOS4_GPIO_Y5_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y4), + EXYNOS4_GPIO_Y6_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y5), + EXYNOS4_GPIO_Z_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y6), }; -/* 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) +#define EXYNOS5_GPIO_A1_NR (6) +#define EXYNOS5_GPIO_A2_NR (8) +#define EXYNOS5_GPIO_B0_NR (5) +#define EXYNOS5_GPIO_B1_NR (5) +#define EXYNOS5_GPIO_B2_NR (4) +#define EXYNOS5_GPIO_B3_NR (4) +#define EXYNOS5_GPIO_C0_NR (7) +#define EXYNOS5_GPIO_C1_NR (7) +#define EXYNOS5_GPIO_C2_NR (7) +#define EXYNOS5_GPIO_C3_NR (7) +#define EXYNOS5_GPIO_D0_NR (8) +#define EXYNOS5_GPIO_D1_NR (8) +#define EXYNOS5_GPIO_Y0_NR (6) +#define EXYNOS5_GPIO_Y1_NR (4) +#define EXYNOS5_GPIO_Y2_NR (6) +#define EXYNOS5_GPIO_Y3_NR (8) +#define EXYNOS5_GPIO_Y4_NR (8) +#define EXYNOS5_GPIO_Y5_NR (8) +#define EXYNOS5_GPIO_Y6_NR (8) +#define EXYNOS5_GPIO_X0_NR (8) +#define EXYNOS5_GPIO_X1_NR (8) +#define EXYNOS5_GPIO_X2_NR (8) +#define EXYNOS5_GPIO_X3_NR (8) +#define EXYNOS5_GPIO_E0_NR (8) +#define EXYNOS5_GPIO_E1_NR (2) +#define EXYNOS5_GPIO_F0_NR (4) +#define EXYNOS5_GPIO_F1_NR (4) +#define EXYNOS5_GPIO_G0_NR (8) +#define EXYNOS5_GPIO_G1_NR (8) +#define EXYNOS5_GPIO_G2_NR (2) +#define EXYNOS5_GPIO_H0_NR (4) +#define EXYNOS5_GPIO_H1_NR (8) +#define EXYNOS5_GPIO_V0_NR (8) +#define EXYNOS5_GPIO_V1_NR (8) +#define EXYNOS5_GPIO_V2_NR (8) +#define EXYNOS5_GPIO_V3_NR (8) +#define EXYNOS5_GPIO_V4_NR (2) +#define EXYNOS5_GPIO_Z_NR (7) + +/* GPIO bank numbers */ +enum exynos5_gpio_number { + EXYNOS5_GPIO_A0_START = 0, + EXYNOS5_GPIO_A1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_A0), + EXYNOS5_GPIO_A2_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_A1), + EXYNOS5_GPIO_B0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_A2), + EXYNOS5_GPIO_B1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_B0), + EXYNOS5_GPIO_B2_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_B1), + EXYNOS5_GPIO_B3_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_B2), + EXYNOS5_GPIO_C0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_B3), + EXYNOS5_GPIO_C1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_C0), + EXYNOS5_GPIO_C2_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_C1), + EXYNOS5_GPIO_C3_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_C2), + EXYNOS5_GPIO_D0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_C3), + EXYNOS5_GPIO_D1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_D0), + EXYNOS5_GPIO_Y0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_D1), + EXYNOS5_GPIO_Y1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y0), + EXYNOS5_GPIO_Y2_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y1), + EXYNOS5_GPIO_Y3_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y2), + EXYNOS5_GPIO_Y4_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y3), + EXYNOS5_GPIO_Y5_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y4), + EXYNOS5_GPIO_Y6_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y5), + EXYNOS5_GPIO_X0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_Y6), + EXYNOS5_GPIO_X1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_X0), + EXYNOS5_GPIO_X2_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_X1), + EXYNOS5_GPIO_X3_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_X2), + EXYNOS5_GPIO_E0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_X3), + EXYNOS5_GPIO_E1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_E0), + EXYNOS5_GPIO_F0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_E1), + EXYNOS5_GPIO_F1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_F0), + EXYNOS5_GPIO_G0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_F1), + EXYNOS5_GPIO_G1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_G0), + EXYNOS5_GPIO_G2_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_G1), + EXYNOS5_GPIO_H0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_G2), + EXYNOS5_GPIO_H1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_H0), + EXYNOS5_GPIO_V0_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_H1), + EXYNOS5_GPIO_V1_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_V0), + EXYNOS5_GPIO_V2_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_V1), + EXYNOS5_GPIO_V3_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_V2), + EXYNOS5_GPIO_V4_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_V3), + EXYNOS5_GPIO_Z_START = EXYNOS_GPIO_NEXT(EXYNOS5_GPIO_V4), +}; + +/* GPIO number definitions */ +#define EXYNOS5_GPA0(_nr) (EXYNOS5_GPIO_A0_START + (_nr)) +#define EXYNOS5_GPA1(_nr) (EXYNOS5_GPIO_A1_START + (_nr)) +#define EXYNOS5_GPA2(_nr) (EXYNOS5_GPIO_A2_START + (_nr)) +#define EXYNOS5_GPB0(_nr) (EXYNOS5_GPIO_B0_START + (_nr)) +#define EXYNOS5_GPB1(_nr) (EXYNOS5_GPIO_B1_START + (_nr)) +#define EXYNOS5_GPB2(_nr) (EXYNOS5_GPIO_B2_START + (_nr)) +#define EXYNOS5_GPB3(_nr) (EXYNOS5_GPIO_B3_START + (_nr)) +#define EXYNOS5_GPC0(_nr) (EXYNOS5_GPIO_C0_START + (_nr)) +#define EXYNOS5_GPC1(_nr) (EXYNOS5_GPIO_C1_START + (_nr)) +#define EXYNOS5_GPC2(_nr) (EXYNOS5_GPIO_C2_START + (_nr)) +#define EXYNOS5_GPC3(_nr) (EXYNOS5_GPIO_C3_START + (_nr)) +#define EXYNOS5_GPD0(_nr) (EXYNOS5_GPIO_D0_START + (_nr)) +#define EXYNOS5_GPD1(_nr) (EXYNOS5_GPIO_D1_START + (_nr)) +#define EXYNOS5_GPY0(_nr) (EXYNOS5_GPIO_Y0_START + (_nr)) +#define EXYNOS5_GPY1(_nr) (EXYNOS5_GPIO_Y1_START + (_nr)) +#define EXYNOS5_GPY2(_nr) (EXYNOS5_GPIO_Y2_START + (_nr)) +#define EXYNOS5_GPY3(_nr) (EXYNOS5_GPIO_Y3_START + (_nr)) +#define EXYNOS5_GPY4(_nr) (EXYNOS5_GPIO_Y4_START + (_nr)) +#define EXYNOS5_GPY5(_nr) (EXYNOS5_GPIO_Y5_START + (_nr)) +#define EXYNOS5_GPY6(_nr) (EXYNOS5_GPIO_Y6_START + (_nr)) +#define EXYNOS5_GPX0(_nr) (EXYNOS5_GPIO_X0_START + (_nr)) +#define EXYNOS5_GPX1(_nr) (EXYNOS5_GPIO_X1_START + (_nr)) +#define EXYNOS5_GPX2(_nr) (EXYNOS5_GPIO_X2_START + (_nr)) +#define EXYNOS5_GPX3(_nr) (EXYNOS5_GPIO_X3_START + (_nr)) +#define EXYNOS5_GPE0(_nr) (EXYNOS5_GPIO_E0_START + (_nr)) +#define EXYNOS5_GPE1(_nr) (EXYNOS5_GPIO_E1_START + (_nr)) +#define EXYNOS5_GPF0(_nr) (EXYNOS5_GPIO_F0_START + (_nr)) +#define EXYNOS5_GPF1(_nr) (EXYNOS5_GPIO_F1_START + (_nr)) +#define EXYNOS5_GPG0(_nr) (EXYNOS5_GPIO_G0_START + (_nr)) +#define EXYNOS5_GPG1(_nr) (EXYNOS5_GPIO_G1_START + (_nr)) +#define EXYNOS5_GPG2(_nr) (EXYNOS5_GPIO_G2_START + (_nr)) +#define EXYNOS5_GPH0(_nr) (EXYNOS5_GPIO_H0_START + (_nr)) +#define EXYNOS5_GPH1(_nr) (EXYNOS5_GPIO_H1_START + (_nr)) +#define EXYNOS5_GPV0(_nr) (EXYNOS5_GPIO_V0_START + (_nr)) +#define EXYNOS5_GPV1(_nr) (EXYNOS5_GPIO_V1_START + (_nr)) +#define EXYNOS5_GPV2(_nr) (EXYNOS5_GPIO_V2_START + (_nr)) +#define EXYNOS5_GPV3(_nr) (EXYNOS5_GPIO_V3_START + (_nr)) +#define EXYNOS5_GPV4(_nr) (EXYNOS5_GPIO_V4_START + (_nr)) +#define EXYNOS5_GPZ(_nr) (EXYNOS5_GPIO_Z_START + (_nr)) + +/* the end of the EXYNOS5 specific gpios */ +#define EXYNOS5_GPIO_END (EXYNOS5_GPZ(EXYNOS5_GPIO_Z_NR) + 1) + +#define S3C_GPIO_END (EXYNOS4_GPIO_END > EXYNOS5_GPIO_END ?\ + EXYNOS4_GPIO_END : EXYNOS5_GPIO_END) +#define ARCH_NR_GPIOS (CONFIG_SAMSUNG_GPIO_EXTRA + S3C_GPIO_END) #endif /* __ASM_ARCH_GPIO_H */ diff --git a/arch/arm/mach-exynos/include/mach/map.h b/arch/arm/mach-exynos/include/mach/map.h index 300ed7e..b157eb4 100644 --- a/arch/arm/mach-exynos/include/mach/map.h +++ b/arch/arm/mach-exynos/include/mach/map.h @@ -107,6 +107,10 @@ #define EXYNOS4_PA_GPIO1 0x11400000 #define EXYNOS4_PA_GPIO2 0x11000000 #define EXYNOS4_PA_GPIO3 0x03860000 +#define EXYNOS5_PA_GPIO1 0x11400000 +#define EXYNOS5_PA_GPIO2 0x13400000 +#define EXYNOS5_PA_GPIO3 0x10D10000 +#define EXYNOS5_PA_GPIO4 0x03680000 #define EXYNOS4_PA_MIPI_CSIS0 0x11880000 #define EXYNOS4_PA_MIPI_CSIS1 0x11890000 diff --git a/arch/arm/plat-samsung/include/plat/map-s5p.h b/arch/arm/plat-samsung/include/plat/map-s5p.h index c2d7bda..01e8d83 100644 --- a/arch/arm/plat-samsung/include/plat/map-s5p.h +++ b/arch/arm/plat-samsung/include/plat/map-s5p.h @@ -20,6 +20,7 @@ #define S5P_VA_GPIO1 S5P_VA_GPIO #define S5P_VA_GPIO2 S3C_ADDR(0x02240000) #define S5P_VA_GPIO3 S3C_ADDR(0x02280000) +#define S5P_VA_GPIO4 S3C_ADDR(0x022C0000) #define S5P_VA_SYSRAM S3C_ADDR(0x02400000) #define S5P_VA_DMC0 S3C_ADDR(0x02440000) -- 1.7.4.4 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 2012-01-31 15:50 ` Kukjin Kim @ 2012-01-31 16:34 ` Sylwester Nawrocki -1 siblings, 0 replies; 22+ messages in thread From: Sylwester Nawrocki @ 2012-01-31 16:34 UTC (permalink / raw) To: Kukjin Kim; +Cc: linux-arm-kernel, linux-samsung-soc, Grant Likely, Sangsu Park Hi Kukjin, I have few comments below... On 01/31/2012 04:50 PM, Kukjin Kim wrote: > From: Sangsu Park <sangsu4u.park@samsung.com> > > 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 <sangsu4u.park@samsung.com> > Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> > --- > 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 = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y2), > - EXYNOS4_GPIO_Y4_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y3), > - EXYNOS4_GPIO_Y5_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y4), > - EXYNOS4_GPIO_Y6_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y5), > - EXYNOS4_GPIO_Z_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y6), > + EXYNOS4_GPIO_A1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_A0), > + EXYNOS4_GPIO_B_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_A1), > + EXYNOS4_GPIO_C0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_B), > + EXYNOS4_GPIO_C1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_C0), > + EXYNOS4_GPIO_D0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_C1), > + EXYNOS4_GPIO_D1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_D0), > + EXYNOS4_GPIO_E0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_D1), > + EXYNOS4_GPIO_E1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E0), > + EXYNOS4_GPIO_E2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E1), > + EXYNOS4_GPIO_E3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E2), > + EXYNOS4_GPIO_E4_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E3), > + EXYNOS4_GPIO_F0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E4), > + EXYNOS4_GPIO_F1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F0), > + EXYNOS4_GPIO_F2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F1), > + EXYNOS4_GPIO_F3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F2), > + EXYNOS4_GPIO_J0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F3), > + EXYNOS4_GPIO_J1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_J0), > + EXYNOS4_GPIO_K0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_J1), > + EXYNOS4_GPIO_K1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K0), > + EXYNOS4_GPIO_K2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K1), > + EXYNOS4_GPIO_K3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K2), > + EXYNOS4_GPIO_L0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K3), > + EXYNOS4_GPIO_L1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_L0), > + EXYNOS4_GPIO_L2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_L1), > + EXYNOS4_GPIO_X0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_L2), > + EXYNOS4_GPIO_X1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X0), > + EXYNOS4_GPIO_X2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X1), > + EXYNOS4_GPIO_X3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X2), > + EXYNOS4_GPIO_Y0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X3), > + EXYNOS4_GPIO_Y1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y0), > + EXYNOS4_GPIO_Y2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y1), > + EXYNOS4_GPIO_Y3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y2), > + EXYNOS4_GPIO_Y4_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y3), > + EXYNOS4_GPIO_Y5_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y4), > + EXYNOS4_GPIO_Y6_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y5), > + EXYNOS4_GPIO_Z_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y6), > }; Are you planning to add support for exynos4212/exynos4412 as well anytime soon ? I've done some work towards this and I'd like to avoid duplicating efforts. > -/* 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. > +#define EXYNOS5_GPIO_A1_NR (6) > +#define EXYNOS5_GPIO_A2_NR (8) > +#define EXYNOS5_GPIO_B0_NR (5) > +#define EXYNOS5_GPIO_B1_NR (5) > +#define EXYNOS5_GPIO_B2_NR (4) > +#define EXYNOS5_GPIO_B3_NR (4) > +#define EXYNOS5_GPIO_C0_NR (7) > +#define EXYNOS5_GPIO_C1_NR (7) > +#define EXYNOS5_GPIO_C2_NR (7) > +#define EXYNOS5_GPIO_C3_NR (7) > +#define EXYNOS5_GPIO_D0_NR (8) > +#define EXYNOS5_GPIO_D1_NR (8) > +#define EXYNOS5_GPIO_Y0_NR (6) > +#define EXYNOS5_GPIO_Y1_NR (4) > +#define EXYNOS5_GPIO_Y2_NR (6) > +#define EXYNOS5_GPIO_Y3_NR (8) > +#define EXYNOS5_GPIO_Y4_NR (8) > +#define EXYNOS5_GPIO_Y5_NR (8) > +#define EXYNOS5_GPIO_Y6_NR (8) > +#define EXYNOS5_GPIO_X0_NR (8) > +#define EXYNOS5_GPIO_X1_NR (8) > +#define EXYNOS5_GPIO_X2_NR (8) > +#define EXYNOS5_GPIO_X3_NR (8) > +#define EXYNOS5_GPIO_E0_NR (8) > +#define EXYNOS5_GPIO_E1_NR (2) > +#define EXYNOS5_GPIO_F0_NR (4) > +#define EXYNOS5_GPIO_F1_NR (4) > +#define EXYNOS5_GPIO_G0_NR (8) > +#define EXYNOS5_GPIO_G1_NR (8) > +#define EXYNOS5_GPIO_G2_NR (2) > +#define EXYNOS5_GPIO_H0_NR (4) > +#define EXYNOS5_GPIO_H1_NR (8) > +#define EXYNOS5_GPIO_V0_NR (8) > +#define EXYNOS5_GPIO_V1_NR (8) > +#define EXYNOS5_GPIO_V2_NR (8) > +#define EXYNOS5_GPIO_V3_NR (8) > +#define EXYNOS5_GPIO_V4_NR (2) > +#define EXYNOS5_GPIO_Z_NR (7) Thanks, -- Sylwester Nawrocki Samsung Poland R&D Center ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 @ 2012-01-31 16:34 ` Sylwester Nawrocki 0 siblings, 0 replies; 22+ messages in thread From: Sylwester Nawrocki @ 2012-01-31 16:34 UTC (permalink / raw) To: linux-arm-kernel Hi Kukjin, I have few comments below... On 01/31/2012 04:50 PM, Kukjin Kim wrote: > From: Sangsu Park <sangsu4u.park@samsung.com> > > 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 <sangsu4u.park@samsung.com> > Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> > --- > 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 = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y2), > - EXYNOS4_GPIO_Y4_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y3), > - EXYNOS4_GPIO_Y5_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y4), > - EXYNOS4_GPIO_Y6_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y5), > - EXYNOS4_GPIO_Z_START = EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_Y6), > + EXYNOS4_GPIO_A1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_A0), > + EXYNOS4_GPIO_B_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_A1), > + EXYNOS4_GPIO_C0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_B), > + EXYNOS4_GPIO_C1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_C0), > + EXYNOS4_GPIO_D0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_C1), > + EXYNOS4_GPIO_D1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_D0), > + EXYNOS4_GPIO_E0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_D1), > + EXYNOS4_GPIO_E1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E0), > + EXYNOS4_GPIO_E2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E1), > + EXYNOS4_GPIO_E3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E2), > + EXYNOS4_GPIO_E4_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E3), > + EXYNOS4_GPIO_F0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_E4), > + EXYNOS4_GPIO_F1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F0), > + EXYNOS4_GPIO_F2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F1), > + EXYNOS4_GPIO_F3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F2), > + EXYNOS4_GPIO_J0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_F3), > + EXYNOS4_GPIO_J1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_J0), > + EXYNOS4_GPIO_K0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_J1), > + EXYNOS4_GPIO_K1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K0), > + EXYNOS4_GPIO_K2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K1), > + EXYNOS4_GPIO_K3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K2), > + EXYNOS4_GPIO_L0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_K3), > + EXYNOS4_GPIO_L1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_L0), > + EXYNOS4_GPIO_L2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_L1), > + EXYNOS4_GPIO_X0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_L2), > + EXYNOS4_GPIO_X1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X0), > + EXYNOS4_GPIO_X2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X1), > + EXYNOS4_GPIO_X3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X2), > + EXYNOS4_GPIO_Y0_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_X3), > + EXYNOS4_GPIO_Y1_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y0), > + EXYNOS4_GPIO_Y2_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y1), > + EXYNOS4_GPIO_Y3_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y2), > + EXYNOS4_GPIO_Y4_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y3), > + EXYNOS4_GPIO_Y5_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y4), > + EXYNOS4_GPIO_Y6_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y5), > + EXYNOS4_GPIO_Z_START = EXYNOS_GPIO_NEXT(EXYNOS4_GPIO_Y6), > }; Are you planning to add support for exynos4212/exynos4412 as well anytime soon ? I've done some work towards this and I'd like to avoid duplicating efforts. > -/* 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. > +#define EXYNOS5_GPIO_A1_NR (6) > +#define EXYNOS5_GPIO_A2_NR (8) > +#define EXYNOS5_GPIO_B0_NR (5) > +#define EXYNOS5_GPIO_B1_NR (5) > +#define EXYNOS5_GPIO_B2_NR (4) > +#define EXYNOS5_GPIO_B3_NR (4) > +#define EXYNOS5_GPIO_C0_NR (7) > +#define EXYNOS5_GPIO_C1_NR (7) > +#define EXYNOS5_GPIO_C2_NR (7) > +#define EXYNOS5_GPIO_C3_NR (7) > +#define EXYNOS5_GPIO_D0_NR (8) > +#define EXYNOS5_GPIO_D1_NR (8) > +#define EXYNOS5_GPIO_Y0_NR (6) > +#define EXYNOS5_GPIO_Y1_NR (4) > +#define EXYNOS5_GPIO_Y2_NR (6) > +#define EXYNOS5_GPIO_Y3_NR (8) > +#define EXYNOS5_GPIO_Y4_NR (8) > +#define EXYNOS5_GPIO_Y5_NR (8) > +#define EXYNOS5_GPIO_Y6_NR (8) > +#define EXYNOS5_GPIO_X0_NR (8) > +#define EXYNOS5_GPIO_X1_NR (8) > +#define EXYNOS5_GPIO_X2_NR (8) > +#define EXYNOS5_GPIO_X3_NR (8) > +#define EXYNOS5_GPIO_E0_NR (8) > +#define EXYNOS5_GPIO_E1_NR (2) > +#define EXYNOS5_GPIO_F0_NR (4) > +#define EXYNOS5_GPIO_F1_NR (4) > +#define EXYNOS5_GPIO_G0_NR (8) > +#define EXYNOS5_GPIO_G1_NR (8) > +#define EXYNOS5_GPIO_G2_NR (2) > +#define EXYNOS5_GPIO_H0_NR (4) > +#define EXYNOS5_GPIO_H1_NR (8) > +#define EXYNOS5_GPIO_V0_NR (8) > +#define EXYNOS5_GPIO_V1_NR (8) > +#define EXYNOS5_GPIO_V2_NR (8) > +#define EXYNOS5_GPIO_V3_NR (8) > +#define EXYNOS5_GPIO_V4_NR (2) > +#define EXYNOS5_GPIO_Z_NR (7) Thanks, -- Sylwester Nawrocki Samsung Poland R&D Center ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 2012-01-31 16:34 ` Sylwester Nawrocki @ 2012-02-02 18:22 ` Grant Likely -1 siblings, 0 replies; 22+ messages in thread From: Grant Likely @ 2012-02-02 18:22 UTC (permalink / raw) To: Sylwester Nawrocki Cc: Kukjin Kim, linux-arm-kernel, linux-samsung-soc, Sangsu Park 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 <sangsu4u.park@samsung.com> > > > > 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. ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 @ 2012-02-02 18:22 ` Grant Likely 0 siblings, 0 replies; 22+ messages in thread From: Grant Likely @ 2012-02-02 18:22 UTC (permalink / raw) To: linux-arm-kernel 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 <sangsu4u.park@samsung.com> > > > > 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. ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 2012-02-02 18:22 ` Grant Likely @ 2012-02-04 13:46 ` Sylwester Nawrocki -1 siblings, 0 replies; 22+ messages in thread From: Sylwester Nawrocki @ 2012-02-04 13:46 UTC (permalink / raw) To: Grant Likely Cc: Sylwester Nawrocki, Kukjin Kim, linux-arm-kernel, linux-samsung-soc, Sangsu Park 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 ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 @ 2012-02-04 13:46 ` Sylwester Nawrocki 0 siblings, 0 replies; 22+ messages in thread From: Sylwester Nawrocki @ 2012-02-04 13:46 UTC (permalink / raw) To: linux-arm-kernel 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 ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 2012-01-31 15:50 ` Kukjin Kim @ 2012-01-31 22:40 ` Russell King - ARM Linux -1 siblings, 0 replies; 22+ messages in thread From: Russell King - ARM Linux @ 2012-01-31 22:40 UTC (permalink / raw) To: Kukjin Kim; +Cc: linux-arm-kernel, linux-samsung-soc, Grant Likely, Sangsu Park On Wed, Feb 01, 2012 at 12:50:39AM +0900, Kukjin Kim wrote: > From: Sangsu Park <sangsu4u.park@samsung.com> > > 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 <sangsu4u.park@samsung.com> > Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> 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. ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 @ 2012-01-31 22:40 ` Russell King - ARM Linux 0 siblings, 0 replies; 22+ messages in thread From: Russell King - ARM Linux @ 2012-01-31 22:40 UTC (permalink / raw) To: linux-arm-kernel On Wed, Feb 01, 2012 at 12:50:39AM +0900, Kukjin Kim wrote: > From: Sangsu Park <sangsu4u.park@samsung.com> > > 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 <sangsu4u.park@samsung.com> > Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> 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. ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 2012-01-31 22:40 ` Russell King - ARM Linux @ 2012-01-31 23:56 ` Kyungmin Park -1 siblings, 0 replies; 22+ messages in thread From: Kyungmin Park @ 2012-01-31 23:56 UTC (permalink / raw) To: Russell King - ARM Linux Cc: Kukjin Kim, linux-arm-kernel, linux-samsung-soc, Grant Likely, Sangsu Park On 2/1/12, Russell King - ARM Linux <linux@arm.linux.org.uk> wrote: > On Wed, Feb 01, 2012 at 12:50:39AM +0900, Kukjin Kim wrote: >> From: Sangsu Park <sangsu4u.park@samsung.com> >> >> 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 <sangsu4u.park@samsung.com> >> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> > > 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 majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 @ 2012-01-31 23:56 ` Kyungmin Park 0 siblings, 0 replies; 22+ messages in thread From: Kyungmin Park @ 2012-01-31 23:56 UTC (permalink / raw) To: linux-arm-kernel On 2/1/12, Russell King - ARM Linux <linux@arm.linux.org.uk> wrote: > On Wed, Feb 01, 2012 at 12:50:39AM +0900, Kukjin Kim wrote: >> From: Sangsu Park <sangsu4u.park@samsung.com> >> >> 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 <sangsu4u.park@samsung.com> >> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> > > 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 majordomo at vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 22+ messages in thread
* RE: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 2012-01-31 23:56 ` Kyungmin Park @ 2012-02-09 11:48 ` Kukjin Kim -1 siblings, 0 replies; 22+ messages in thread From: Kukjin Kim @ 2012-02-09 11:48 UTC (permalink / raw) To: 'Kyungmin Park', 'Russell King - ARM Linux' Cc: linux-arm-kernel, linux-samsung-soc, 'Grant Likely', 'Sangsu Park' Kyungmin Park wrote: > > On 2/1/12, Russell King - ARM Linux <linux@arm.linux.org.uk> wrote: > > On Wed, Feb 01, 2012 at 12:50:39AM +0900, Kukjin Kim wrote: > >> From: Sangsu Park <sangsu4u.park@samsung.com> > >> > >> 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 <sangsu4u.park@samsung.com> > >> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> > > > > 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 <kgene.kim@samsung.com>, 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. > ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 @ 2012-02-09 11:48 ` Kukjin Kim 0 siblings, 0 replies; 22+ messages in thread From: Kukjin Kim @ 2012-02-09 11:48 UTC (permalink / raw) To: linux-arm-kernel Kyungmin Park wrote: > > On 2/1/12, Russell King - ARM Linux <linux@arm.linux.org.uk> wrote: > > On Wed, Feb 01, 2012 at 12:50:39AM +0900, Kukjin Kim wrote: > >> From: Sangsu Park <sangsu4u.park@samsung.com> > >> > >> 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 <sangsu4u.park@samsung.com> > >> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> > > > > 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 <kgene.kim@samsung.com>, 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. > ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 2012-01-31 22:40 ` Russell King - ARM Linux @ 2012-02-02 18:27 ` Grant Likely -1 siblings, 0 replies; 22+ messages in thread From: Grant Likely @ 2012-02-02 18:27 UTC (permalink / raw) To: Russell King - ARM Linux Cc: Kukjin Kim, Sangsu Park, linux-samsung-soc, linux-arm-kernel On Tue, Jan 31, 2012 at 10:40:43PM +0000, Russell King - ARM Linux wrote: > On Wed, Feb 01, 2012 at 12:50:39AM +0900, Kukjin Kim wrote: > > From: Sangsu Park <sangsu4u.park@samsung.com> > > > > 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 <sangsu4u.park@samsung.com> > > Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> > > 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. ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 @ 2012-02-02 18:27 ` Grant Likely 0 siblings, 0 replies; 22+ messages in thread From: Grant Likely @ 2012-02-02 18:27 UTC (permalink / raw) To: linux-arm-kernel On Tue, Jan 31, 2012 at 10:40:43PM +0000, Russell King - ARM Linux wrote: > On Wed, Feb 01, 2012 at 12:50:39AM +0900, Kukjin Kim wrote: > > From: Sangsu Park <sangsu4u.park@samsung.com> > > > > 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 <sangsu4u.park@samsung.com> > > Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> > > 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. ^ permalink raw reply [flat|nested] 22+ messages in thread
* RE: [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 2012-02-02 18:27 ` Grant Likely @ 2012-02-09 11:44 ` Kukjin Kim -1 siblings, 0 replies; 22+ messages in thread From: Kukjin Kim @ 2012-02-09 11:44 UTC (permalink / raw) To: 'Grant Likely', 'Russell King - ARM Linux' Cc: 'Sangsu Park', linux-samsung-soc, linux-arm-kernel Grant Likely wrote: > > On Tue, Jan 31, 2012 at 10:40:43PM +0000, Russell King - ARM Linux wrote: > > On Wed, Feb 01, 2012 at 12:50:39AM +0900, Kukjin Kim wrote: > > > From: Sangsu Park <sangsu4u.park@samsung.com> > > > > > > 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 <sangsu4u.park@samsung.com> > > > Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> > > > > 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 <kgene.kim@samsung.com>, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 1/2] ARM: EXYNOS: add support GPIO for EXYNOS5250 @ 2012-02-09 11:44 ` Kukjin Kim 0 siblings, 0 replies; 22+ messages in thread From: Kukjin Kim @ 2012-02-09 11:44 UTC (permalink / raw) To: linux-arm-kernel Grant Likely wrote: > > On Tue, Jan 31, 2012 at 10:40:43PM +0000, Russell King - ARM Linux wrote: > > On Wed, Feb 01, 2012 at 12:50:39AM +0900, Kukjin Kim wrote: > > > From: Sangsu Park <sangsu4u.park@samsung.com> > > > > > > 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 <sangsu4u.park@samsung.com> > > > Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> > > > > 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 <kgene.kim@samsung.com>, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 2/2] gpio/samsung: add support GPIOlib for EXYNOS5250 2012-01-31 15:50 ` Kukjin Kim @ 2012-01-31 15:50 ` Kukjin Kim -1 siblings, 0 replies; 22+ messages in thread From: Kukjin Kim @ 2012-01-31 15:50 UTC (permalink / raw) To: linux-arm-kernel, linux-samsung-soc; +Cc: Grant Likely, Sangsu Park, Kukjin Kim From: Sangsu Park <sangsu4u.park@samsung.com> This patch adds gpio_chips for EXYNOS5250 and replaces exynos4_xxx() with exynos_xxx() and variables to support exynos4 and exynos5 together. Signed-off-by: Sangsu Park <sangsu4u.park@samsung.com> Cc: Grant Likely <grant.likely@secretlab.ca> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> --- drivers/gpio/gpio-samsung.c | 356 +++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 343 insertions(+), 13 deletions(-) diff --git a/drivers/gpio/gpio-samsung.c b/drivers/gpio/gpio-samsung.c index a766177..f81f567 100644 --- a/drivers/gpio/gpio-samsung.c +++ b/drivers/gpio/gpio-samsung.c @@ -169,7 +169,7 @@ int s3c24xx_gpio_setpull_1down(struct samsung_gpio_chip *chip, return s3c24xx_gpio_setpull_1(chip, off, pull, S3C_GPIO_PULL_DOWN); } -static int exynos4_gpio_setpull(struct samsung_gpio_chip *chip, +static int exynos_gpio_setpull(struct samsung_gpio_chip *chip, unsigned int off, samsung_gpio_pull_t pull) { if (pull == S3C_GPIO_PULL_UP) @@ -178,7 +178,7 @@ static int exynos4_gpio_setpull(struct samsung_gpio_chip *chip, return samsung_gpio_setpull_updown(chip, off, pull); } -static samsung_gpio_pull_t exynos4_gpio_getpull(struct samsung_gpio_chip *chip, +static samsung_gpio_pull_t exynos_gpio_getpull(struct samsung_gpio_chip *chip, unsigned int off) { samsung_gpio_pull_t pull; @@ -452,9 +452,9 @@ static struct samsung_gpio_cfg s3c24xx_gpiocfg_banka = { }; #endif -static struct samsung_gpio_cfg exynos4_gpio_cfg = { - .set_pull = exynos4_gpio_setpull, - .get_pull = exynos4_gpio_getpull, +static struct samsung_gpio_cfg exynos_gpio_cfg = { + .set_pull = exynos_gpio_setpull, + .get_pull = exynos_gpio_getpull, .set_config = samsung_gpio_setcfg_4bit, .get_config = samsung_gpio_getcfg_4bit, }; @@ -502,13 +502,13 @@ static struct samsung_gpio_cfg samsung_gpio_cfgs[] = { .get_config = samsung_gpio_getcfg_2bit, }, [8] = { - .set_pull = exynos4_gpio_setpull, - .get_pull = exynos4_gpio_getpull, + .set_pull = exynos_gpio_setpull, + .get_pull = exynos_gpio_getpull, }, [9] = { .cfg_eint = 0x3, - .set_pull = exynos4_gpio_setpull, - .get_pull = exynos4_gpio_getpull, + .set_pull = exynos_gpio_setpull, + .get_pull = exynos_gpio_getpull, } }; @@ -2113,7 +2113,7 @@ static struct samsung_gpio_chip s5pv210_gpios_4bit[] = { }; /* - * Followings are the gpio banks in EXYNOS4210 + * Followings are the gpio banks in EXYNOS * * The 'config' member when left to NULL, is initialized to the default * structure samsung_gpio_cfgs[3] in the init function below. @@ -2386,6 +2386,282 @@ static struct samsung_gpio_chip exynos4_gpios_3[] = { #endif }; +static struct samsung_gpio_chip exynos5_gpios_1[] = { +#ifdef CONFIG_ARCH_EXYNOS5 + { + .chip = { + .base = EXYNOS5_GPA0(0), + .ngpio = EXYNOS5_GPIO_A0_NR, + .label = "GPA0", + }, + }, { + .chip = { + .base = EXYNOS5_GPA1(0), + .ngpio = EXYNOS5_GPIO_A1_NR, + .label = "GPA1", + }, + }, { + .chip = { + .base = EXYNOS5_GPA2(0), + .ngpio = EXYNOS5_GPIO_A2_NR, + .label = "GPA2", + }, + }, { + .chip = { + .base = EXYNOS5_GPB0(0), + .ngpio = EXYNOS5_GPIO_B0_NR, + .label = "GPB0", + }, + }, { + .chip = { + .base = EXYNOS5_GPB1(0), + .ngpio = EXYNOS5_GPIO_B1_NR, + .label = "GPB1", + }, + }, { + .chip = { + .base = EXYNOS5_GPB2(0), + .ngpio = EXYNOS5_GPIO_B2_NR, + .label = "GPB2", + }, + }, { + .chip = { + .base = EXYNOS5_GPB3(0), + .ngpio = EXYNOS5_GPIO_B3_NR, + .label = "GPB3", + }, + }, { + .chip = { + .base = EXYNOS5_GPC0(0), + .ngpio = EXYNOS5_GPIO_C0_NR, + .label = "GPC0", + }, + }, { + .chip = { + .base = EXYNOS5_GPC1(0), + .ngpio = EXYNOS5_GPIO_C1_NR, + .label = "GPC1", + }, + }, { + .chip = { + .base = EXYNOS5_GPC2(0), + .ngpio = EXYNOS5_GPIO_C2_NR, + .label = "GPC2", + }, + }, { + .chip = { + .base = EXYNOS5_GPC3(0), + .ngpio = EXYNOS5_GPIO_C3_NR, + .label = "GPC3", + }, + }, { + .chip = { + .base = EXYNOS5_GPD0(0), + .ngpio = EXYNOS5_GPIO_D0_NR, + .label = "GPD0", + }, + }, { + .chip = { + .base = EXYNOS5_GPD1(0), + .ngpio = EXYNOS5_GPIO_D1_NR, + .label = "GPD1", + }, + }, { + .chip = { + .base = EXYNOS5_GPY0(0), + .ngpio = EXYNOS5_GPIO_Y0_NR, + .label = "GPY0", + }, + }, { + .chip = { + .base = EXYNOS5_GPY1(0), + .ngpio = EXYNOS5_GPIO_Y1_NR, + .label = "GPY1", + }, + }, { + .chip = { + .base = EXYNOS5_GPY2(0), + .ngpio = EXYNOS5_GPIO_Y2_NR, + .label = "GPY2", + }, + }, { + .chip = { + .base = EXYNOS5_GPY3(0), + .ngpio = EXYNOS5_GPIO_Y3_NR, + .label = "GPY3", + }, + }, { + .chip = { + .base = EXYNOS5_GPY4(0), + .ngpio = EXYNOS5_GPIO_Y4_NR, + .label = "GPY4", + }, + }, { + .chip = { + .base = EXYNOS5_GPY5(0), + .ngpio = EXYNOS5_GPIO_Y5_NR, + .label = "GPY5", + }, + }, { + .chip = { + .base = EXYNOS5_GPY6(0), + .ngpio = EXYNOS5_GPIO_Y6_NR, + .label = "GPY6", + }, + }, { + .base = (S5P_VA_GPIO1 + 0xC00), + .config = &samsung_gpio_cfgs[9], + .irq_base = IRQ_EINT(0), + .chip = { + .base = EXYNOS5_GPX0(0), + .ngpio = EXYNOS5_GPIO_X0_NR, + .label = "GPX0", + .to_irq = samsung_gpiolib_to_irq, + }, + }, { + .base = (S5P_VA_GPIO1 + 0xC20), + .config = &samsung_gpio_cfgs[9], + .irq_base = IRQ_EINT(8), + .chip = { + .base = EXYNOS5_GPX1(0), + .ngpio = EXYNOS5_GPIO_X1_NR, + .label = "GPX1", + .to_irq = samsung_gpiolib_to_irq, + }, + }, { + .base = (S5P_VA_GPIO1 + 0xC40), + .config = &samsung_gpio_cfgs[9], + .irq_base = IRQ_EINT(16), + .chip = { + .base = EXYNOS5_GPX2(0), + .ngpio = EXYNOS5_GPIO_X2_NR, + .label = "GPX2", + .to_irq = samsung_gpiolib_to_irq, + }, + }, { + .base = (S5P_VA_GPIO1 + 0xC60), + .config = &samsung_gpio_cfgs[9], + .irq_base = IRQ_EINT(24), + .chip = { + .base = EXYNOS5_GPX3(0), + .ngpio = EXYNOS5_GPIO_X3_NR, + .label = "GPX3", + .to_irq = samsung_gpiolib_to_irq, + }, + }, +#endif +}; + +static struct samsung_gpio_chip exynos5_gpios_2[] = { +#ifdef CONFIG_ARCH_EXYNOS5 + { + .chip = { + .base = EXYNOS5_GPE0(0), + .ngpio = EXYNOS5_GPIO_E0_NR, + .label = "GPE0", + }, + }, { + .chip = { + .base = EXYNOS5_GPE1(0), + .ngpio = EXYNOS5_GPIO_E1_NR, + .label = "GPE1", + }, + }, { + .chip = { + .base = EXYNOS5_GPF0(0), + .ngpio = EXYNOS5_GPIO_F0_NR, + .label = "GPF0", + }, + }, { + .chip = { + .base = EXYNOS5_GPF1(0), + .ngpio = EXYNOS5_GPIO_F1_NR, + .label = "GPF1", + }, + }, { + .chip = { + .base = EXYNOS5_GPG0(0), + .ngpio = EXYNOS5_GPIO_G0_NR, + .label = "GPG0", + }, + }, { + .chip = { + .base = EXYNOS5_GPG1(0), + .ngpio = EXYNOS5_GPIO_G1_NR, + .label = "GPG1", + }, + }, { + .chip = { + .base = EXYNOS5_GPG2(0), + .ngpio = EXYNOS5_GPIO_G2_NR, + .label = "GPG2", + }, + }, { + .chip = { + .base = EXYNOS5_GPH0(0), + .ngpio = EXYNOS5_GPIO_H0_NR, + .label = "GPH0", + }, + }, { + .chip = { + .base = EXYNOS5_GPH1(0), + .ngpio = EXYNOS5_GPIO_H1_NR, + .label = "GPH1", + + }, + }, +#endif +}; + +static struct samsung_gpio_chip exynos5_gpios_3[] = { +#ifdef CONFIG_ARCH_EXYNOS5 + { + .chip = { + .base = EXYNOS5_GPV0(0), + .ngpio = EXYNOS5_GPIO_V0_NR, + .label = "GPV0", + }, + }, { + .chip = { + .base = EXYNOS5_GPV1(0), + .ngpio = EXYNOS5_GPIO_V1_NR, + .label = "GPV1", + }, + }, { + .chip = { + .base = EXYNOS5_GPV2(0), + .ngpio = EXYNOS5_GPIO_V2_NR, + .label = "GPV2", + }, + }, { + .chip = { + .base = EXYNOS5_GPV3(0), + .ngpio = EXYNOS5_GPIO_V3_NR, + .label = "GPV3", + }, + }, { + .chip = { + .base = EXYNOS5_GPV4(0), + .ngpio = EXYNOS5_GPIO_V4_NR, + .label = "GPV4", + }, + }, +#endif +}; + +static struct samsung_gpio_chip exynos5_gpios_4[] = { +#ifdef CONFIG_ARCH_EXYNOS5 + { + .chip = { + .base = EXYNOS5_GPZ(0), + .ngpio = EXYNOS5_GPIO_Z_NR, + .label = "GPZ", + }, + }, +#endif +}; + + #if defined(CONFIG_ARCH_EXYNOS4) && defined(CONFIG_OF) static int exynos4_gpio_xlate(struct gpio_chip *gc, struct device_node *np, const void *gpio_spec, u32 *flags) @@ -2521,7 +2797,7 @@ static __init int samsung_gpiolib_init(void) for (i = 0; i < nr_chips; i++, chip++) { if (!chip->config) { - chip->config = &exynos4_gpio_cfg; + chip->config = &exynos_gpio_cfg; chip->group = group++; } #ifdef CONFIG_CPU_EXYNOS4210 @@ -2537,7 +2813,7 @@ static __init int samsung_gpiolib_init(void) for (i = 0; i < nr_chips; i++, chip++) { if (!chip->config) { - chip->config = &exynos4_gpio_cfg; + chip->config = &exynos_gpio_cfg; chip->group = group++; } #ifdef CONFIG_CPU_EXYNOS4210 @@ -2553,7 +2829,7 @@ static __init int samsung_gpiolib_init(void) for (i = 0; i < nr_chips; i++, chip++) { if (!chip->config) { - chip->config = &exynos4_gpio_cfg; + chip->config = &exynos_gpio_cfg; chip->group = group++; } #ifdef CONFIG_CPU_EXYNOS4210 @@ -2567,6 +2843,60 @@ static __init int samsung_gpiolib_init(void) s5p_register_gpioint_bank(IRQ_GPIO_XA, 0, IRQ_GPIO1_NR_GROUPS); s5p_register_gpioint_bank(IRQ_GPIO_XB, IRQ_GPIO1_NR_GROUPS, IRQ_GPIO2_NR_GROUPS); #endif + } else if (soc_is_exynos5250()) { + group = 0; + + /* gpio part1 */ + chip = exynos5_gpios_1; + nr_chips = ARRAY_SIZE(exynos5_gpios_1); + + for (i = 0; i < nr_chips; i++, chip++) { + if (!chip->config) { + chip->config = &exynos_gpio_cfg; + chip->group = group++; + } + } + samsung_gpiolib_add_4bit_chips(exynos5_gpios_1, + nr_chips, S5P_VA_GPIO1); + + /* gpio part2 */ + chip = exynos5_gpios_2; + nr_chips = ARRAY_SIZE(exynos5_gpios_2); + + for (i = 0; i < nr_chips; i++, chip++) { + if (!chip->config) { + chip->config = &exynos_gpio_cfg; + chip->group = group++; + } + } + samsung_gpiolib_add_4bit_chips(exynos5_gpios_2, + nr_chips, S5P_VA_GPIO2); + + /* gpio part3 */ + chip = exynos5_gpios_3; + nr_chips = ARRAY_SIZE(exynos5_gpios_3); + + for (i = 0; i < nr_chips; i++, chip++) { + if (!chip->config) { + chip->config = &exynos_gpio_cfg; + chip->group = group++; + } + } + samsung_gpiolib_add_4bit_chips(exynos5_gpios_3, + nr_chips, S5P_VA_GPIO3); + + /* gpio part4 */ + chip = exynos5_gpios_4; + nr_chips = ARRAY_SIZE(exynos5_gpios_4); + + for (i = 0; i < nr_chips; i++, chip++) { + if (!chip->config) { + chip->config = &exynos_gpio_cfg; + chip->group = group++; + } + } + samsung_gpiolib_add_4bit_chips(exynos5_gpios_4, + nr_chips, S5P_VA_GPIO4); } else { WARN(1, "Unknown SoC in gpio-samsung, no GPIOs added\n"); return -ENODEV; -- 1.7.4.4 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 2/2] gpio/samsung: add support GPIOlib for EXYNOS5250 @ 2012-01-31 15:50 ` Kukjin Kim 0 siblings, 0 replies; 22+ messages in thread From: Kukjin Kim @ 2012-01-31 15:50 UTC (permalink / raw) To: linux-arm-kernel From: Sangsu Park <sangsu4u.park@samsung.com> This patch adds gpio_chips for EXYNOS5250 and replaces exynos4_xxx() with exynos_xxx() and variables to support exynos4 and exynos5 together. Signed-off-by: Sangsu Park <sangsu4u.park@samsung.com> Cc: Grant Likely <grant.likely@secretlab.ca> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> --- drivers/gpio/gpio-samsung.c | 356 +++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 343 insertions(+), 13 deletions(-) diff --git a/drivers/gpio/gpio-samsung.c b/drivers/gpio/gpio-samsung.c index a766177..f81f567 100644 --- a/drivers/gpio/gpio-samsung.c +++ b/drivers/gpio/gpio-samsung.c @@ -169,7 +169,7 @@ int s3c24xx_gpio_setpull_1down(struct samsung_gpio_chip *chip, return s3c24xx_gpio_setpull_1(chip, off, pull, S3C_GPIO_PULL_DOWN); } -static int exynos4_gpio_setpull(struct samsung_gpio_chip *chip, +static int exynos_gpio_setpull(struct samsung_gpio_chip *chip, unsigned int off, samsung_gpio_pull_t pull) { if (pull == S3C_GPIO_PULL_UP) @@ -178,7 +178,7 @@ static int exynos4_gpio_setpull(struct samsung_gpio_chip *chip, return samsung_gpio_setpull_updown(chip, off, pull); } -static samsung_gpio_pull_t exynos4_gpio_getpull(struct samsung_gpio_chip *chip, +static samsung_gpio_pull_t exynos_gpio_getpull(struct samsung_gpio_chip *chip, unsigned int off) { samsung_gpio_pull_t pull; @@ -452,9 +452,9 @@ static struct samsung_gpio_cfg s3c24xx_gpiocfg_banka = { }; #endif -static struct samsung_gpio_cfg exynos4_gpio_cfg = { - .set_pull = exynos4_gpio_setpull, - .get_pull = exynos4_gpio_getpull, +static struct samsung_gpio_cfg exynos_gpio_cfg = { + .set_pull = exynos_gpio_setpull, + .get_pull = exynos_gpio_getpull, .set_config = samsung_gpio_setcfg_4bit, .get_config = samsung_gpio_getcfg_4bit, }; @@ -502,13 +502,13 @@ static struct samsung_gpio_cfg samsung_gpio_cfgs[] = { .get_config = samsung_gpio_getcfg_2bit, }, [8] = { - .set_pull = exynos4_gpio_setpull, - .get_pull = exynos4_gpio_getpull, + .set_pull = exynos_gpio_setpull, + .get_pull = exynos_gpio_getpull, }, [9] = { .cfg_eint = 0x3, - .set_pull = exynos4_gpio_setpull, - .get_pull = exynos4_gpio_getpull, + .set_pull = exynos_gpio_setpull, + .get_pull = exynos_gpio_getpull, } }; @@ -2113,7 +2113,7 @@ static struct samsung_gpio_chip s5pv210_gpios_4bit[] = { }; /* - * Followings are the gpio banks in EXYNOS4210 + * Followings are the gpio banks in EXYNOS * * The 'config' member when left to NULL, is initialized to the default * structure samsung_gpio_cfgs[3] in the init function below. @@ -2386,6 +2386,282 @@ static struct samsung_gpio_chip exynos4_gpios_3[] = { #endif }; +static struct samsung_gpio_chip exynos5_gpios_1[] = { +#ifdef CONFIG_ARCH_EXYNOS5 + { + .chip = { + .base = EXYNOS5_GPA0(0), + .ngpio = EXYNOS5_GPIO_A0_NR, + .label = "GPA0", + }, + }, { + .chip = { + .base = EXYNOS5_GPA1(0), + .ngpio = EXYNOS5_GPIO_A1_NR, + .label = "GPA1", + }, + }, { + .chip = { + .base = EXYNOS5_GPA2(0), + .ngpio = EXYNOS5_GPIO_A2_NR, + .label = "GPA2", + }, + }, { + .chip = { + .base = EXYNOS5_GPB0(0), + .ngpio = EXYNOS5_GPIO_B0_NR, + .label = "GPB0", + }, + }, { + .chip = { + .base = EXYNOS5_GPB1(0), + .ngpio = EXYNOS5_GPIO_B1_NR, + .label = "GPB1", + }, + }, { + .chip = { + .base = EXYNOS5_GPB2(0), + .ngpio = EXYNOS5_GPIO_B2_NR, + .label = "GPB2", + }, + }, { + .chip = { + .base = EXYNOS5_GPB3(0), + .ngpio = EXYNOS5_GPIO_B3_NR, + .label = "GPB3", + }, + }, { + .chip = { + .base = EXYNOS5_GPC0(0), + .ngpio = EXYNOS5_GPIO_C0_NR, + .label = "GPC0", + }, + }, { + .chip = { + .base = EXYNOS5_GPC1(0), + .ngpio = EXYNOS5_GPIO_C1_NR, + .label = "GPC1", + }, + }, { + .chip = { + .base = EXYNOS5_GPC2(0), + .ngpio = EXYNOS5_GPIO_C2_NR, + .label = "GPC2", + }, + }, { + .chip = { + .base = EXYNOS5_GPC3(0), + .ngpio = EXYNOS5_GPIO_C3_NR, + .label = "GPC3", + }, + }, { + .chip = { + .base = EXYNOS5_GPD0(0), + .ngpio = EXYNOS5_GPIO_D0_NR, + .label = "GPD0", + }, + }, { + .chip = { + .base = EXYNOS5_GPD1(0), + .ngpio = EXYNOS5_GPIO_D1_NR, + .label = "GPD1", + }, + }, { + .chip = { + .base = EXYNOS5_GPY0(0), + .ngpio = EXYNOS5_GPIO_Y0_NR, + .label = "GPY0", + }, + }, { + .chip = { + .base = EXYNOS5_GPY1(0), + .ngpio = EXYNOS5_GPIO_Y1_NR, + .label = "GPY1", + }, + }, { + .chip = { + .base = EXYNOS5_GPY2(0), + .ngpio = EXYNOS5_GPIO_Y2_NR, + .label = "GPY2", + }, + }, { + .chip = { + .base = EXYNOS5_GPY3(0), + .ngpio = EXYNOS5_GPIO_Y3_NR, + .label = "GPY3", + }, + }, { + .chip = { + .base = EXYNOS5_GPY4(0), + .ngpio = EXYNOS5_GPIO_Y4_NR, + .label = "GPY4", + }, + }, { + .chip = { + .base = EXYNOS5_GPY5(0), + .ngpio = EXYNOS5_GPIO_Y5_NR, + .label = "GPY5", + }, + }, { + .chip = { + .base = EXYNOS5_GPY6(0), + .ngpio = EXYNOS5_GPIO_Y6_NR, + .label = "GPY6", + }, + }, { + .base = (S5P_VA_GPIO1 + 0xC00), + .config = &samsung_gpio_cfgs[9], + .irq_base = IRQ_EINT(0), + .chip = { + .base = EXYNOS5_GPX0(0), + .ngpio = EXYNOS5_GPIO_X0_NR, + .label = "GPX0", + .to_irq = samsung_gpiolib_to_irq, + }, + }, { + .base = (S5P_VA_GPIO1 + 0xC20), + .config = &samsung_gpio_cfgs[9], + .irq_base = IRQ_EINT(8), + .chip = { + .base = EXYNOS5_GPX1(0), + .ngpio = EXYNOS5_GPIO_X1_NR, + .label = "GPX1", + .to_irq = samsung_gpiolib_to_irq, + }, + }, { + .base = (S5P_VA_GPIO1 + 0xC40), + .config = &samsung_gpio_cfgs[9], + .irq_base = IRQ_EINT(16), + .chip = { + .base = EXYNOS5_GPX2(0), + .ngpio = EXYNOS5_GPIO_X2_NR, + .label = "GPX2", + .to_irq = samsung_gpiolib_to_irq, + }, + }, { + .base = (S5P_VA_GPIO1 + 0xC60), + .config = &samsung_gpio_cfgs[9], + .irq_base = IRQ_EINT(24), + .chip = { + .base = EXYNOS5_GPX3(0), + .ngpio = EXYNOS5_GPIO_X3_NR, + .label = "GPX3", + .to_irq = samsung_gpiolib_to_irq, + }, + }, +#endif +}; + +static struct samsung_gpio_chip exynos5_gpios_2[] = { +#ifdef CONFIG_ARCH_EXYNOS5 + { + .chip = { + .base = EXYNOS5_GPE0(0), + .ngpio = EXYNOS5_GPIO_E0_NR, + .label = "GPE0", + }, + }, { + .chip = { + .base = EXYNOS5_GPE1(0), + .ngpio = EXYNOS5_GPIO_E1_NR, + .label = "GPE1", + }, + }, { + .chip = { + .base = EXYNOS5_GPF0(0), + .ngpio = EXYNOS5_GPIO_F0_NR, + .label = "GPF0", + }, + }, { + .chip = { + .base = EXYNOS5_GPF1(0), + .ngpio = EXYNOS5_GPIO_F1_NR, + .label = "GPF1", + }, + }, { + .chip = { + .base = EXYNOS5_GPG0(0), + .ngpio = EXYNOS5_GPIO_G0_NR, + .label = "GPG0", + }, + }, { + .chip = { + .base = EXYNOS5_GPG1(0), + .ngpio = EXYNOS5_GPIO_G1_NR, + .label = "GPG1", + }, + }, { + .chip = { + .base = EXYNOS5_GPG2(0), + .ngpio = EXYNOS5_GPIO_G2_NR, + .label = "GPG2", + }, + }, { + .chip = { + .base = EXYNOS5_GPH0(0), + .ngpio = EXYNOS5_GPIO_H0_NR, + .label = "GPH0", + }, + }, { + .chip = { + .base = EXYNOS5_GPH1(0), + .ngpio = EXYNOS5_GPIO_H1_NR, + .label = "GPH1", + + }, + }, +#endif +}; + +static struct samsung_gpio_chip exynos5_gpios_3[] = { +#ifdef CONFIG_ARCH_EXYNOS5 + { + .chip = { + .base = EXYNOS5_GPV0(0), + .ngpio = EXYNOS5_GPIO_V0_NR, + .label = "GPV0", + }, + }, { + .chip = { + .base = EXYNOS5_GPV1(0), + .ngpio = EXYNOS5_GPIO_V1_NR, + .label = "GPV1", + }, + }, { + .chip = { + .base = EXYNOS5_GPV2(0), + .ngpio = EXYNOS5_GPIO_V2_NR, + .label = "GPV2", + }, + }, { + .chip = { + .base = EXYNOS5_GPV3(0), + .ngpio = EXYNOS5_GPIO_V3_NR, + .label = "GPV3", + }, + }, { + .chip = { + .base = EXYNOS5_GPV4(0), + .ngpio = EXYNOS5_GPIO_V4_NR, + .label = "GPV4", + }, + }, +#endif +}; + +static struct samsung_gpio_chip exynos5_gpios_4[] = { +#ifdef CONFIG_ARCH_EXYNOS5 + { + .chip = { + .base = EXYNOS5_GPZ(0), + .ngpio = EXYNOS5_GPIO_Z_NR, + .label = "GPZ", + }, + }, +#endif +}; + + #if defined(CONFIG_ARCH_EXYNOS4) && defined(CONFIG_OF) static int exynos4_gpio_xlate(struct gpio_chip *gc, struct device_node *np, const void *gpio_spec, u32 *flags) @@ -2521,7 +2797,7 @@ static __init int samsung_gpiolib_init(void) for (i = 0; i < nr_chips; i++, chip++) { if (!chip->config) { - chip->config = &exynos4_gpio_cfg; + chip->config = &exynos_gpio_cfg; chip->group = group++; } #ifdef CONFIG_CPU_EXYNOS4210 @@ -2537,7 +2813,7 @@ static __init int samsung_gpiolib_init(void) for (i = 0; i < nr_chips; i++, chip++) { if (!chip->config) { - chip->config = &exynos4_gpio_cfg; + chip->config = &exynos_gpio_cfg; chip->group = group++; } #ifdef CONFIG_CPU_EXYNOS4210 @@ -2553,7 +2829,7 @@ static __init int samsung_gpiolib_init(void) for (i = 0; i < nr_chips; i++, chip++) { if (!chip->config) { - chip->config = &exynos4_gpio_cfg; + chip->config = &exynos_gpio_cfg; chip->group = group++; } #ifdef CONFIG_CPU_EXYNOS4210 @@ -2567,6 +2843,60 @@ static __init int samsung_gpiolib_init(void) s5p_register_gpioint_bank(IRQ_GPIO_XA, 0, IRQ_GPIO1_NR_GROUPS); s5p_register_gpioint_bank(IRQ_GPIO_XB, IRQ_GPIO1_NR_GROUPS, IRQ_GPIO2_NR_GROUPS); #endif + } else if (soc_is_exynos5250()) { + group = 0; + + /* gpio part1 */ + chip = exynos5_gpios_1; + nr_chips = ARRAY_SIZE(exynos5_gpios_1); + + for (i = 0; i < nr_chips; i++, chip++) { + if (!chip->config) { + chip->config = &exynos_gpio_cfg; + chip->group = group++; + } + } + samsung_gpiolib_add_4bit_chips(exynos5_gpios_1, + nr_chips, S5P_VA_GPIO1); + + /* gpio part2 */ + chip = exynos5_gpios_2; + nr_chips = ARRAY_SIZE(exynos5_gpios_2); + + for (i = 0; i < nr_chips; i++, chip++) { + if (!chip->config) { + chip->config = &exynos_gpio_cfg; + chip->group = group++; + } + } + samsung_gpiolib_add_4bit_chips(exynos5_gpios_2, + nr_chips, S5P_VA_GPIO2); + + /* gpio part3 */ + chip = exynos5_gpios_3; + nr_chips = ARRAY_SIZE(exynos5_gpios_3); + + for (i = 0; i < nr_chips; i++, chip++) { + if (!chip->config) { + chip->config = &exynos_gpio_cfg; + chip->group = group++; + } + } + samsung_gpiolib_add_4bit_chips(exynos5_gpios_3, + nr_chips, S5P_VA_GPIO3); + + /* gpio part4 */ + chip = exynos5_gpios_4; + nr_chips = ARRAY_SIZE(exynos5_gpios_4); + + for (i = 0; i < nr_chips; i++, chip++) { + if (!chip->config) { + chip->config = &exynos_gpio_cfg; + chip->group = group++; + } + } + samsung_gpiolib_add_4bit_chips(exynos5_gpios_4, + nr_chips, S5P_VA_GPIO4); } else { WARN(1, "Unknown SoC in gpio-samsung, no GPIOs added\n"); return -ENODEV; -- 1.7.4.4 ^ permalink raw reply related [flat|nested] 22+ messages in thread
end of thread, other threads:[~2012-02-09 11:48 UTC | newest] Thread overview: 22+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-01-31 15:50 [PATCH 0/2] ARM: EXYNOS: support GPIO for EXYNOS5250 Kukjin Kim 2012-01-31 15:50 ` Kukjin Kim 2012-01-31 15:50 ` [PATCH 1/2] ARM: EXYNOS: add " Kukjin Kim 2012-01-31 15:50 ` Kukjin Kim 2012-01-31 16:34 ` Sylwester Nawrocki 2012-01-31 16:34 ` Sylwester Nawrocki 2012-02-02 18:22 ` Grant Likely 2012-02-02 18:22 ` Grant Likely 2012-02-04 13:46 ` Sylwester Nawrocki 2012-02-04 13:46 ` Sylwester Nawrocki 2012-01-31 22:40 ` Russell King - ARM Linux 2012-01-31 22:40 ` Russell King - ARM Linux 2012-01-31 23:56 ` Kyungmin Park 2012-01-31 23:56 ` Kyungmin Park 2012-02-09 11:48 ` Kukjin Kim 2012-02-09 11:48 ` Kukjin Kim 2012-02-02 18:27 ` Grant Likely 2012-02-02 18:27 ` Grant Likely 2012-02-09 11:44 ` Kukjin Kim 2012-02-09 11:44 ` Kukjin Kim 2012-01-31 15:50 ` [PATCH 2/2] gpio/samsung: add support GPIOlib " Kukjin Kim 2012-01-31 15:50 ` Kukjin Kim
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.