S5P: Exynos: Add GPIO numbering feature
Subsystems (3)
v9 cover S5P: Exynos: Add GPIO numbering feature
Used a script to recheck/verify pin mapping and existing mapping appears to be fine, returning correct bank and pin values. Did ./MAKEALL -a arm and found all Exynos/S5P related boards compiled successfully.
Couldn't test booting over all of them.
Tested U-Boot bootup over SMDK5420, SMDK5250, Snow. Requesting maintaners to please test over affected SoCs/boards.
Changes in V2:
- Enabled CMD_GPIO as suggested by Simon Glass
and supported same for EXYNOS5.
Changes in V3:
- New patch added to rename S5P GPIO definitions
to S5P_GPIO.
- GPIO Table added to calculate the base address
of input gpio bank.
Changes in V4:
- To have consistent 0..n-1 GPIO numbering the banks are divided into different parts where ever they have holes in them.
- Function and table to support gpio command moved to s5p-gpio driver.
- Rebased on latest u-boot-samsung tree.
Changes in V5:
- Rebased on latest u-boot-samsung tree.
- Removed Exynos5 specific code in gpio driver api to get bank.
- Added #define HAVE_GENERIC_GPIO in config file
to remove conditinal CPU check in gpio driver.
Changes in V6:
- Isolated config changes in a new patch.
- Updated patches with corresponding changes for Exynos 5420.
Changes in V7:
- Added changes for other SoCs like Exynos 4412, 4210 etc.
Changes in V8:
- Changed Subject of patch 2/2 to reflect affected SoCs/boards.
- Fixed arndale board compile time errors introduced due to patch-set v7.
Changes in V9:
- Fixed checkpatch errors.
- Fixed naming error in exynosxxxx_gpio_data arrays which could be the possible reason behind data abort witnessed over Exynos4 boards.
Akshay Saraswat (2):
EXYNOS: Add GPIO pin numbering and rename definitions
S5P: Exynos: Config: Enable Generic GPIO and CMD configs
arch/arm/cpu/armv7/exynos/pinmux.c | 403 +++---- arch/arm/include/asm/arch-exynos/cpu.h | 17 +- arch/arm/include/asm/arch-exynos/gpio.h | 1786 +++++++++++++++++++++++++----- arch/arm/include/asm/arch-s5pc1xx/gpio.h | 941 +++++++++++++--- board/samsung/arndale/arndale.c | 11 +- board/samsung/goni/goni.c | 26 +- board/samsung/smdk5250/exynos5-dt.c | 20 +- board/samsung/smdk5250/smdk5250.c | 19 +- board/samsung/smdk5420/smdk5420.c | 15 +- board/samsung/smdkc100/smdkc100.c | 5 +- board/samsung/smdkv310/smdkv310.c | 17 +- board/samsung/trats/trats.c | 39 +- board/samsung/trats2/trats2.c | 74 +- board/samsung/universal_c210/universal.c | 51 +- drivers/gpio/s5p_gpio.c | 195 +++- include/configs/arndale.h | 1 + include/configs/exynos5-dt.h | 3 + include/configs/origen.h | 1 + include/configs/s5p_goni.h | 5 +- include/configs/s5pc210_universal.h | 17 +- include/configs/smdkc100.h | 1 + include/configs/smdkv310.h | 2 + include/configs/trats.h | 9 +- include/configs/trats2.h | 5 +- 24 files changed, 2806 insertions(+), 857 deletions(-)
Signature · 1 line
1.7.9.5
PATCH v9 1/2 S5P: Exynos: Add GPIO pin numbering and rename definitions
This patch includes following changes :
* Adds gpio pin numbering support for EXYNOS SOCs.
To have consistent 0..n-1 GPIO numbering the banks are divided into different parts where ever they have holes in them.
* Rename GPIO definitions from GPIO_... to S5P_GPIO_... These changes were done to enable cmd_gpio for EXYNOS and cmd_gpio has GPIO_INPUT same as s5p_gpio driver and hence getting a error during compilation.
* Adds support for name to gpio conversion in s5p_gpio to enable gpio command EXYNOS SoCs. Function has been added to asm/gpio.h to decode the input gpio name to gpio number.
Example: SMDK5420 # gpio set gpa00
--- arch/arm/cpu/armv7/exynos/pinmux.c | 403 +++---- arch/arm/include/asm/arch-exynos/cpu.h | 17 +- arch/arm/include/asm/arch-exynos/gpio.h | 1786 +++++++++++++++++++++++++----- arch/arm/include/asm/arch-s5pc1xx/gpio.h | 941 +++++++++++++--- board/samsung/arndale/arndale.c | 11 +- board/samsung/goni/goni.c | 26 +- board/samsung/smdk5250/exynos5-dt.c | 20 +- board/samsung/smdk5250/smdk5250.c | 19 +- board/samsung/smdk5420/smdk5420.c | 15 +- board/samsung/smdkc100/smdkc100.c | 5 +- board/samsung/smdkv310/smdkv310.c | 17 +- board/samsung/trats/trats.c | 39 +- board/samsung/trats2/trats2.c | 74 +- board/samsung/universal_c210/universal.c | 51 +- drivers/gpio/s5p_gpio.c | 195 +++- 15 files changed, 2778 insertions(+), 841 deletions(-)
arch/arm/cpu/armv7/exynos/pinmux.c +168 -235
@@ -13,30 +13,23 @@static void exynos5_uart_config (int peripheral) { -struct exynos5_gpio_part1 *gpio1 = - (struct exynos5_gpio_part1 *)samsung_get_base_gpio_part1 (); -struct s5p_gpio_bank *bank;int i, start, count;switch (peripheral) {case PERIPH_ID_UART0 : - bank = &gpio1->a0; - start =0 ; + start =EXYNOS5_GPIO_A00 ; count =4 ;break ;case PERIPH_ID_UART1 : - bank = &gpio1->d0; - start =0 ; + start =EXYNOS5_GPIO_D00 ; count =4 ;break ;case PERIPH_ID_UART2 : - bank = &gpio1->a1; - start =0 ; + start =EXYNOS5_GPIO_A10 ; count =4 ;break ;case PERIPH_ID_UART3 : - bank = &gpio1->a1; - start =4 ; + start =EXYNOS5_GPIO_A14 ; count =2 ;break ;default :
@@ -44,37 +37,30 @@ static void exynos5_uart_config(int peripheral)return ; }for (i = start; i < start + count; i++) { -s5p_gpio_set_pull (bank, i,GPIO_PULL_NONE ); -s5p_gpio_cfg_pin (bank, i,GPIO_FUNC (0x2 )); +gpio_set_pull (i,S5P_GPIO_PULL_NONE ); +gpio_cfg_pin (i,S5P_GPIO_FUNC (0x2 )); } }static void exynos5420_uart_config (int peripheral) { -struct exynos5420_gpio_part1 *gpio1 = - (struct exynos5420_gpio_part1 *)samsung_get_base_gpio_part1 (); -struct s5p_gpio_bank *bank;int i, start, count;switch (peripheral) {case PERIPH_ID_UART0 : - bank = &gpio1->a0; - start =0 ; + start =EXYNOS5420_GPIO_A00 ; count =4 ;break ;case PERIPH_ID_UART1 : - bank = &gpio1->a0; - start =4 ; + start =EXYNOS5420_GPIO_A04 ; count =4 ;break ;case PERIPH_ID_UART2 : - bank = &gpio1->a1; - start =0 ; + start =EXYNOS5420_GPIO_A10 ; count =4 ;break ;case PERIPH_ID_UART3 : - bank = &gpio1->a1; - start =4 ; + start =EXYNOS5420_GPIO_A14 ; count =2 ;break ;default :
@@ -83,64 +69,59 @@ static void exynos5420_uart_config(int peripheral) }for (i = start; i < start + count; i++) { -s5p_gpio_set_pull (bank, i,GPIO_PULL_NONE ); -s5p_gpio_cfg_pin (bank, i,GPIO_FUNC (0x2 )); +gpio_set_pull (i,S5P_GPIO_PULL_NONE ); +gpio_cfg_pin (i,S5P_GPIO_FUNC (0x2 )); } }static int exynos5_mmc_config (int peripheral,int flags) { -struct exynos5_gpio_part1 *gpio1 = - (struct exynos5_gpio_part1 *)samsung_get_base_gpio_part1 (); -struct s5p_gpio_bank *bank, *bank_ext; -int i, start =0 , gpio_func =0 ; +int i, start, start_ext, gpio_func =0 ;switch (peripheral) {case PERIPH_ID_SDMMC0 : - bank = &gpio1->c0; - bank_ext = &gpio1->c1; - start =0 ; - gpio_func =GPIO_FUNC (0x2 ); + start =EXYNOS5_GPIO_C00 ; + start_ext =EXYNOS5_GPIO_C10 ; + gpio_func =S5P_GPIO_FUNC (0x2 );break ;case PERIPH_ID_SDMMC1 : - bank = &gpio1->c2; - bank_ext =NULL ; + start =EXYNOS5_GPIO_C20 ; + start_ext =0 ;break ;case PERIPH_ID_SDMMC2 : - bank = &gpio1->c3; - bank_ext = &gpio1->c4; - start =3 ; - gpio_func =GPIO_FUNC (0x3 ); + start =EXYNOS5_GPIO_C30 ; + start_ext =EXYNOS5_GPIO_C43 ; + gpio_func =S5P_GPIO_FUNC (0x3 );break ;case PERIPH_ID_SDMMC3 : - bank = &gpio1->c4; - bank_ext =NULL ; + start =EXYNOS5_GPIO_C40 ; + start_ext =0 ;break ;default :debug ("%s: invalid peripheral %d" , __func__, peripheral);return -1 ; } -if ((flags &PINMUX_FLAG_8BIT_MODE ) && !bank_ext) { +if ((flags &PINMUX_FLAG_8BIT_MODE ) && !start_ext) {debug ("SDMMC device %d does not support 8bit mode" , peripheral);return -1 ; }if (flags &PINMUX_FLAG_8BIT_MODE ) { -for (i = start; i <= (start +3 ); i++) { -s5p_gpio_cfg_pin (bank_ext, i, gpio_func); -s5p_gpio_set_pull (bank_ext, i,GPIO_PULL_UP ); -s5p_gpio_set_drv (bank_ext, i,GPIO_DRV_4X ); +for (i = start_ext; i <= (start_ext +3 ); i++) { +gpio_cfg_pin (i, gpio_func); +gpio_set_pull (i,S5P_GPIO_PULL_UP ); +gpio_set_drv (i,S5P_GPIO_DRV_4X ); } } -for (i =0 ; i <2 ; i++) { -s5p_gpio_cfg_pin (bank, i,GPIO_FUNC (0x2 )); -s5p_gpio_set_pull (bank, i,GPIO_PULL_NONE ); -s5p_gpio_set_drv (bank, i,GPIO_DRV_4X ); +for (i = start; i < (start +2 ); i++) { +gpio_cfg_pin (i,S5P_GPIO_FUNC (0x2 )); +gpio_set_pull (i,S5P_GPIO_PULL_NONE ); +gpio_set_drv (i,S5P_GPIO_DRV_4X ); } -for (i =3 ; i <=6 ; i++) { -s5p_gpio_cfg_pin (bank, i,GPIO_FUNC (0x2 )); -s5p_gpio_set_pull (bank, i,GPIO_PULL_UP ); -s5p_gpio_set_drv (bank, i,GPIO_DRV_4X ); +for (i = (start +3 ); i <= (start +6 ); i++) { +gpio_cfg_pin (i,S5P_GPIO_FUNC (0x2 )); +gpio_set_pull (i,S5P_GPIO_PULL_UP ); +gpio_set_drv (i,S5P_GPIO_DRV_4X ); }return 0 ;
@@ -148,26 +129,20 @@ static int exynos5_mmc_config(int peripheral, int flags)static int exynos5420_mmc_config (int peripheral,int flags) { -struct exynos5420_gpio_part3 *gpio3 = - (struct exynos5420_gpio_part3 *)samsung_get_base_gpio_part3 (); -struct s5p_gpio_bank *bank =NULL , *bank_ext =NULL ; -int i, start; +int i, start =0 , start_ext =0 ;switch (peripheral) {case PERIPH_ID_SDMMC0 : - bank = &gpio3->c0; - bank_ext = &gpio3->c3; - start =0 ; + start =EXYNOS5420_GPIO_C00 ; + start_ext =EXYNOS5420_GPIO_C30 ;break ;case PERIPH_ID_SDMMC1 : - bank = &gpio3->c1; - bank_ext = &gpio3->d1; - start =4 ; + start =EXYNOS5420_GPIO_C10 ; + start_ext =EXYNOS5420_GPIO_D14 ;break ;case PERIPH_ID_SDMMC2 : - bank = &gpio3->c2; - bank_ext =NULL ; - start =0 ; + start =EXYNOS5420_GPIO_C20 ; + start_ext =0 ;break ;default : start =0 ;
@@ -175,21 +150,21 @@ static int exynos5420_mmc_config(int peripheral, int flags)return -1 ; } -if ((flags &PINMUX_FLAG_8BIT_MODE ) && !bank_ext) { +if ((flags &PINMUX_FLAG_8BIT_MODE ) && !start_ext) {debug ("SDMMC device %d does not support 8bit mode" , peripheral);return -1 ; }if (flags &PINMUX_FLAG_8BIT_MODE ) { -for (i = start; i <= (start +3 ); i++) { -s5p_gpio_cfg_pin (bank_ext, i,GPIO_FUNC (0x2 )); -s5p_gpio_set_pull (bank_ext, i,GPIO_PULL_UP ); -s5p_gpio_set_drv (bank_ext, i,GPIO_DRV_4X ); +for (i = start_ext; i <= (start_ext +3 ); i++) { +gpio_cfg_pin (i,S5P_GPIO_FUNC (0x2 )); +gpio_set_pull (i,S5P_GPIO_PULL_UP ); +gpio_set_drv (i,S5P_GPIO_DRV_4X ); } } -for (i =0 ; i <3 ; i++) { +for (i = start; i < (start +3 ); i++) {/* * MMC0 is intended to be used for eMMC. The * card detect pin is used as a VDDEN signal to
@@ -197,19 +172,19 @@ static int exynos5420_mmc_config(int peripheral, int flags)* this same assumption. */ if ((peripheral ==PERIPH_ID_SDMMC0 ) && (i ==2 )) { -s5p_gpio_set_value (bank, i,1 ); -s5p_gpio_cfg_pin (bank, i,GPIO_OUTPUT ); +gpio_set_value (i,1 ); +gpio_cfg_pin (i,S5P_GPIO_OUTPUT ); }else { -s5p_gpio_cfg_pin (bank, i,GPIO_FUNC (0x2 )); +gpio_cfg_pin (i,S5P_GPIO_FUNC (0x2 )); } -s5p_gpio_set_pull (bank, i,GPIO_PULL_NONE ); -s5p_gpio_set_drv (bank, i,GPIO_DRV_4X ); +gpio_set_pull (i,S5P_GPIO_PULL_NONE ); +gpio_set_drv (i,S5P_GPIO_DRV_4X ); } -for (i =3 ; i <=6 ; i++) { -s5p_gpio_cfg_pin (bank, i,GPIO_FUNC (0x2 )); -s5p_gpio_set_pull (bank, i,GPIO_PULL_UP ); -s5p_gpio_set_drv (bank, i,GPIO_DRV_4X ); +for (i = (start +3 ); i <= (start +6 ); i++) { +gpio_cfg_pin (i,S5P_GPIO_FUNC (0x2 )); +gpio_set_pull (i,S5P_GPIO_PULL_UP ); +gpio_set_drv (i,S5P_GPIO_DRV_4X ); }return 0 ;
@@ -217,8 +192,6 @@ static int exynos5420_mmc_config(int peripheral, int flags)static void exynos5_sromc_config (int flags) { -struct exynos5_gpio_part1 *gpio1 = - (struct exynos5_gpio_part1 *)samsung_get_base_gpio_part1 ();int i;/*
@@ -236,13 +209,13 @@ static void exynos5_sromc_config(int flags)* GPY1[2] SROM_WAIT(2) * GPY1[3] EBI_DATA_RDn(2) */ -s5p_gpio_cfg_pin (&gpio1->y0, (flags &PINMUX_FLAG_BANK ), -GPIO_FUNC (2 )); -s5p_gpio_cfg_pin (&gpio1->y0,4 ,GPIO_FUNC (2 )); -s5p_gpio_cfg_pin (&gpio1->y0,5 ,GPIO_FUNC (2 )); +gpio_cfg_pin (EXYNOS5_GPIO_Y00 + (flags &PINMUX_FLAG_BANK ), +S5P_GPIO_FUNC (2 )); +gpio_cfg_pin (EXYNOS5_GPIO_Y04 ,S5P_GPIO_FUNC (2 )); +gpio_cfg_pin (EXYNOS5_GPIO_Y05 ,S5P_GPIO_FUNC (2 ));for (i =0 ; i <4 ; i++) -s5p_gpio_cfg_pin (&gpio1->y1, i,GPIO_FUNC (2 )); +gpio_cfg_pin (EXYNOS5_GPIO_Y10 + i,S5P_GPIO_FUNC (2 ));/* * EBI: 8 Addrss Lines
@@ -277,108 +250,101 @@ static void exynos5_sromc_config(int flags)* GPY6[7] EBI_DATA[15](2) */ for (i =0 ; i <8 ; i++) { -s5p_gpio_cfg_pin (&gpio1->y3, i,GPIO_FUNC (2 )); -s5p_gpio_set_pull (&gpio1->y3, i,GPIO_PULL_UP ); +gpio_cfg_pin (EXYNOS5_GPIO_Y30 + i,S5P_GPIO_FUNC (2 )); +gpio_set_pull (EXYNOS5_GPIO_Y30 + i,S5P_GPIO_PULL_UP ); -s5p_gpio_cfg_pin (&gpio1->y5, i,GPIO_FUNC (2 )); -s5p_gpio_set_pull (&gpio1->y5, i,GPIO_PULL_UP ); +gpio_cfg_pin (EXYNOS5_GPIO_Y50 + i,S5P_GPIO_FUNC (2 )); +gpio_set_pull (EXYNOS5_GPIO_Y50 + i,S5P_GPIO_PULL_UP ); -s5p_gpio_cfg_pin (&gpio1->y6, i,GPIO_FUNC (2 )); -s5p_gpio_set_pull (&gpio1->y6, i,GPIO_PULL_UP ); +gpio_cfg_pin (EXYNOS5_GPIO_Y60 + i,S5P_GPIO_FUNC (2 )); +gpio_set_pull (EXYNOS5_GPIO_Y60 + i,S5P_GPIO_PULL_UP ); } }static void exynos5_i2c_config (int peripheral,int flags) { - -struct exynos5_gpio_part1 *gpio1 = - (struct exynos5_gpio_part1 *)samsung_get_base_gpio_part1 (); -switch (peripheral) {case PERIPH_ID_I2C0 : -s5p_gpio_cfg_pin (&gpio1->b3,0 ,GPIO_FUNC (0x2 )); -s5p_gpio_cfg_pin (&gpio1->b3,1 ,GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS5_GPIO_B30 ,S5P_GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS5_GPIO_B31 ,S5P_GPIO_FUNC (0x2 ));break ;case PERIPH_ID_I2C1 : -s5p_gpio_cfg_pin (&gpio1->b3,2 ,GPIO_FUNC (0x2 )); -s5p_gpio_cfg_pin (&gpio1->b3,3 ,GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS5_GPIO_B32 ,S5P_GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS5_GPIO_B33 ,S5P_GPIO_FUNC (0x2 ));break ;case PERIPH_ID_I2C2 : -s5p_gpio_cfg_pin (&gpio1->a0,6 ,GPIO_FUNC (0x3 )); -s5p_gpio_cfg_pin (&gpio1->a0,7 ,GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5_GPIO_A06 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5_GPIO_A07 ,S5P_GPIO_FUNC (0x3 ));break ;case PERIPH_ID_I2C3 : -s5p_gpio_cfg_pin (&gpio1->a1,2 ,GPIO_FUNC (0x3 )); -s5p_gpio_cfg_pin (&gpio1->a1,3 ,GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5_GPIO_A12 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5_GPIO_A13 ,S5P_GPIO_FUNC (0x3 ));break ;case PERIPH_ID_I2C4 : -s5p_gpio_cfg_pin (&gpio1->a2,0 ,GPIO_FUNC (0x3 )); -s5p_gpio_cfg_pin (&gpio1->a2,1 ,GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5_GPIO_A20 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5_GPIO_A21 ,S5P_GPIO_FUNC (0x3 ));break ;case PERIPH_ID_I2C5 : -s5p_gpio_cfg_pin (&gpio1->a2,2 ,GPIO_FUNC (0x3 )); -s5p_gpio_cfg_pin (&gpio1->a2,3 ,GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5_GPIO_A22 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5_GPIO_A23 ,S5P_GPIO_FUNC (0x3 ));break ;case PERIPH_ID_I2C6 : -s5p_gpio_cfg_pin (&gpio1->b1,3 ,GPIO_FUNC (0x4 )); -s5p_gpio_cfg_pin (&gpio1->b1,4 ,GPIO_FUNC (0x4 )); +gpio_cfg_pin (EXYNOS5_GPIO_B13 ,S5P_GPIO_FUNC (0x4 )); +gpio_cfg_pin (EXYNOS5_GPIO_B14 ,S5P_GPIO_FUNC (0x4 ));break ;case PERIPH_ID_I2C7 : -s5p_gpio_cfg_pin (&gpio1->b2,2 ,GPIO_FUNC (0x3 )); -s5p_gpio_cfg_pin (&gpio1->b2,3 ,GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5_GPIO_B22 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5_GPIO_B23 ,S5P_GPIO_FUNC (0x3 ));break ; } }static void exynos5420_i2c_config (int peripheral) { -struct exynos5420_gpio_part1 *gpio1 = - (struct exynos5420_gpio_part1 *)samsung_get_base_gpio_part1 (); -switch (peripheral) {case PERIPH_ID_I2C0 : -s5p_gpio_cfg_pin (&gpio1->b3,0 ,GPIO_FUNC (0x2 )); -s5p_gpio_cfg_pin (&gpio1->b3,1 ,GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS5420_GPIO_B30 ,S5P_GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS5420_GPIO_B31 ,S5P_GPIO_FUNC (0x2 ));break ;case PERIPH_ID_I2C1 : -s5p_gpio_cfg_pin (&gpio1->b3,2 ,GPIO_FUNC (0x2 )); -s5p_gpio_cfg_pin (&gpio1->b3,3 ,GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS5420_GPIO_B32 ,S5P_GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS5420_GPIO_B33 ,S5P_GPIO_FUNC (0x2 ));break ;case PERIPH_ID_I2C2 : -s5p_gpio_cfg_pin (&gpio1->a0,6 ,GPIO_FUNC (0x3 )); -s5p_gpio_cfg_pin (&gpio1->a0,7 ,GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5420_GPIO_A06 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5420_GPIO_A07 ,S5P_GPIO_FUNC (0x3 ));break ;case PERIPH_ID_I2C3 : -s5p_gpio_cfg_pin (&gpio1->a1,2 ,GPIO_FUNC (0x3 )); -s5p_gpio_cfg_pin (&gpio1->a1,3 ,GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5420_GPIO_A12 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5420_GPIO_A13 ,S5P_GPIO_FUNC (0x3 ));break ;case PERIPH_ID_I2C4 : -s5p_gpio_cfg_pin (&gpio1->a2,0 ,GPIO_FUNC (0x3 )); -s5p_gpio_cfg_pin (&gpio1->a2,1 ,GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5420_GPIO_A20 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5420_GPIO_A21 ,S5P_GPIO_FUNC (0x3 ));break ;case PERIPH_ID_I2C5 : -s5p_gpio_cfg_pin (&gpio1->a2,2 ,GPIO_FUNC (0x3 )); -s5p_gpio_cfg_pin (&gpio1->a2,3 ,GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5420_GPIO_A22 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5420_GPIO_A23 ,S5P_GPIO_FUNC (0x3 ));break ;case PERIPH_ID_I2C6 : -s5p_gpio_cfg_pin (&gpio1->b1,3 ,GPIO_FUNC (0x4 )); -s5p_gpio_cfg_pin (&gpio1->b1,4 ,GPIO_FUNC (0x4 )); +gpio_cfg_pin (EXYNOS5420_GPIO_B13 ,S5P_GPIO_FUNC (0x4 )); +gpio_cfg_pin (EXYNOS5420_GPIO_B14 ,S5P_GPIO_FUNC (0x4 ));break ;case PERIPH_ID_I2C7 : -s5p_gpio_cfg_pin (&gpio1->b2,2 ,GPIO_FUNC (0x3 )); -s5p_gpio_cfg_pin (&gpio1->b2,3 ,GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5420_GPIO_B22 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS5420_GPIO_B23 ,S5P_GPIO_FUNC (0x3 ));break ;case PERIPH_ID_I2C8 : -s5p_gpio_cfg_pin (&gpio1->b3,4 ,GPIO_FUNC (0x2 )); -s5p_gpio_cfg_pin (&gpio1->b3,5 ,GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS5420_GPIO_B34 ,S5P_GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS5420_GPIO_B35 ,S5P_GPIO_FUNC (0x2 ));break ;case PERIPH_ID_I2C9 : -s5p_gpio_cfg_pin (&gpio1->b3,6 ,GPIO_FUNC (0x2 )); -s5p_gpio_cfg_pin (&gpio1->b3,7 ,GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS5420_GPIO_B36 ,S5P_GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS5420_GPIO_B37 ,S5P_GPIO_FUNC (0x2 ));break ;case PERIPH_ID_I2C10 : -s5p_gpio_cfg_pin (&gpio1->b4,0 ,GPIO_FUNC (0x2 )); -s5p_gpio_cfg_pin (&gpio1->b4,1 ,GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS5420_GPIO_B40 ,S5P_GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS5420_GPIO_B41 ,S5P_GPIO_FUNC (0x2 ));break ; } }
@@ -386,19 +352,15 @@ static void exynos5420_i2c_config(int peripheral)static void exynos5_i2s_config (int peripheral) {int i; -struct exynos5_gpio_part1 *gpio1 = - (struct exynos5_gpio_part1 *)samsung_get_base_gpio_part1 (); -struct exynos5_gpio_part4 *gpio4 = - (struct exynos5_gpio_part4 *)samsung_get_base_gpio_part4 ();switch (peripheral) {case PERIPH_ID_I2S0 :for (i =0 ; i <5 ; i++) -s5p_gpio_cfg_pin (&gpio4->z, i,GPIO_FUNC (0x02 )); +gpio_cfg_pin (EXYNOS5_GPIO_Z0 +i,S5P_GPIO_FUNC (0x02 ));break ;case PERIPH_ID_I2S1 :for (i =0 ; i <5 ; i++) -s5p_gpio_cfg_pin (&gpio1->b0, i,GPIO_FUNC (0x02 )); +gpio_cfg_pin (EXYNOS5_GPIO_B00 +i,S5P_GPIO_FUNC (0x02 ));break ; } }
@@ -406,75 +368,57 @@ static void exynos5_i2s_config(int peripheral)void exynos5_spi_config (int peripheral) {int cfg =0 , pin =0 , i; -struct s5p_gpio_bank *bank =NULL ; -struct exynos5_gpio_part1 *gpio1 = - (struct exynos5_gpio_part1 *)samsung_get_base_gpio_part1 (); -struct exynos5_gpio_part2 *gpio2 = - (struct exynos5_gpio_part2 *)samsung_get_base_gpio_part2 ();switch (peripheral) {case PERIPH_ID_SPI0 : - bank = &gpio1->a2; - cfg =GPIO_FUNC (0x2 ); - pin =0 ; + cfg =S5P_GPIO_FUNC (0x2 ); + pin =EXYNOS5_GPIO_A20 ;break ;case PERIPH_ID_SPI1 : - bank = &gpio1->a2; - cfg =GPIO_FUNC (0x2 ); - pin =4 ; + cfg =S5P_GPIO_FUNC (0x2 ); + pin =EXYNOS5_GPIO_A24 ;break ;case PERIPH_ID_SPI2 : - bank = &gpio1->b1; - cfg =GPIO_FUNC (0x5 ); - pin =1 ; + cfg =S5P_GPIO_FUNC (0x5 ); + pin =EXYNOS5_GPIO_B11 ;break ;case PERIPH_ID_SPI3 : - bank = &gpio2->f1; - cfg =GPIO_FUNC (0x2 ); - pin =0 ; + cfg =S5P_GPIO_FUNC (0x2 ); + pin =EXYNOS5_GPIO_F10 ;break ;case PERIPH_ID_SPI4 :for (i =0 ; i <2 ; i++) { -s5p_gpio_cfg_pin (&gpio2->f0, i +2 ,GPIO_FUNC (0x4 )); -s5p_gpio_cfg_pin (&gpio2->e0, i +4 ,GPIO_FUNC (0x4 )); +gpio_cfg_pin (EXYNOS5_GPIO_F02 + i,S5P_GPIO_FUNC (0x4 )); +gpio_cfg_pin (EXYNOS5_GPIO_E04 + i,S5P_GPIO_FUNC (0x4 )); }break ; }if (peripheral !=PERIPH_ID_SPI4 ) {for (i = pin; i < pin +4 ; i++) -s5p_gpio_cfg_pin (bank, i, cfg); +gpio_cfg_pin (i, cfg); } }void exynos5420_spi_config (int peripheral) {int cfg, pin, i; -struct s5p_gpio_bank *bank =NULL ; -struct exynos5420_gpio_part1 *gpio1 = - (struct exynos5420_gpio_part1 *)samsung_get_base_gpio_part1 (); -struct exynos5420_gpio_part4 *gpio4 = - (struct exynos5420_gpio_part4 *)samsung_get_base_gpio_part4 ();switch (peripheral) {case PERIPH_ID_SPI0 : - bank = &gpio1->a2; - cfg =GPIO_FUNC (0x2 ); - pin =0 ; + pin =EXYNOS5420_GPIO_A20 ; + cfg =S5P_GPIO_FUNC (0x2 );break ;case PERIPH_ID_SPI1 : - bank = &gpio1->a2; - cfg =GPIO_FUNC (0x2 ); - pin =4 ; + pin =EXYNOS5420_GPIO_A24 ; + cfg =S5P_GPIO_FUNC (0x2 );break ;case PERIPH_ID_SPI2 : - bank = &gpio1->b1; - cfg =GPIO_FUNC (0x5 ); - pin =1 ; + pin =EXYNOS5420_GPIO_B11 ; + cfg =S5P_GPIO_FUNC (0x5 );break ;case PERIPH_ID_SPI3 : - bank = &gpio4->f1; - cfg =GPIO_FUNC (0x2 ); - pin =0 ; + pin =EXYNOS5420_GPIO_F10 ; + cfg =S5P_GPIO_FUNC (0x2 );break ;case PERIPH_ID_SPI4 : cfg =0 ;
@@ -489,11 +433,13 @@ void exynos5420_spi_config(int peripheral)if (peripheral !=PERIPH_ID_SPI4 ) {for (i = pin; i < pin +4 ; i++) -s5p_gpio_cfg_pin (bank, i, cfg); +gpio_cfg_pin (i, cfg); }else {for (i =0 ; i <2 ; i++) { -s5p_gpio_cfg_pin (&gpio4->f0, i +2 ,GPIO_FUNC (0x4 )); -s5p_gpio_cfg_pin (&gpio4->e0, i +4 ,GPIO_FUNC (0x4 )); +gpio_cfg_pin (EXYNOS5420_GPIO_F02 + i, +S5P_GPIO_FUNC (0x4 )); +gpio_cfg_pin (EXYNOS5420_GPIO_E04 + i, +S5P_GPIO_FUNC (0x4 )); } } }
@@ -588,76 +534,70 @@ static int exynos5420_pinmux_config(int peripheral, int flags)static void exynos4_i2c_config (int peripheral,int flags) { -struct exynos4_gpio_part1 *gpio1 = - (struct exynos4_gpio_part1 *)samsung_get_base_gpio_part1 (); -switch (peripheral) {case PERIPH_ID_I2C0 : -s5p_gpio_cfg_pin (&gpio1->d1,0 ,GPIO_FUNC (0x2 )); -s5p_gpio_cfg_pin (&gpio1->d1,1 ,GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS4_GPIO_D10 ,S5P_GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS4_GPIO_D11 ,S5P_GPIO_FUNC (0x2 ));break ;case PERIPH_ID_I2C1 : -s5p_gpio_cfg_pin (&gpio1->d1,2 ,GPIO_FUNC (0x2 )); -s5p_gpio_cfg_pin (&gpio1->d1,3 ,GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS4_GPIO_D12 ,S5P_GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS4_GPIO_D13 ,S5P_GPIO_FUNC (0x2 ));break ;case PERIPH_ID_I2C2 : -s5p_gpio_cfg_pin (&gpio1->a0,6 ,GPIO_FUNC (0x3 )); -s5p_gpio_cfg_pin (&gpio1->a0,7 ,GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS4_GPIO_A06 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS4_GPIO_A07 ,S5P_GPIO_FUNC (0x3 ));break ;case PERIPH_ID_I2C3 : -s5p_gpio_cfg_pin (&gpio1->a1,2 ,GPIO_FUNC (0x3 )); -s5p_gpio_cfg_pin (&gpio1->a1,3 ,GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS4_GPIO_A12 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS4_GPIO_A13 ,S5P_GPIO_FUNC (0x3 ));break ;case PERIPH_ID_I2C4 : -s5p_gpio_cfg_pin (&gpio1->b,2 ,GPIO_FUNC (0x3 )); -s5p_gpio_cfg_pin (&gpio1->b,3 ,GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS4_GPIO_B2 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS4_GPIO_B3 ,S5P_GPIO_FUNC (0x3 ));break ;case PERIPH_ID_I2C5 : -s5p_gpio_cfg_pin (&gpio1->b,6 ,GPIO_FUNC (0x3 )); -s5p_gpio_cfg_pin (&gpio1->b,7 ,GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS4_GPIO_B6 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS4_GPIO_B7 ,S5P_GPIO_FUNC (0x3 ));break ;case PERIPH_ID_I2C6 : -s5p_gpio_cfg_pin (&gpio1->c1,3 ,GPIO_FUNC (0x4 )); -s5p_gpio_cfg_pin (&gpio1->c1,4 ,GPIO_FUNC (0x4 )); +gpio_cfg_pin (EXYNOS4_GPIO_C13 ,S5P_GPIO_FUNC (0x4 )); +gpio_cfg_pin (EXYNOS4_GPIO_C14 ,S5P_GPIO_FUNC (0x4 ));break ;case PERIPH_ID_I2C7 : -s5p_gpio_cfg_pin (&gpio1->d0,2 ,GPIO_FUNC (0x3 )); -s5p_gpio_cfg_pin (&gpio1->d0,3 ,GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS4_GPIO_D02 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS4_GPIO_D03 ,S5P_GPIO_FUNC (0x3 ));break ; } }static int exynos4_mmc_config (int peripheral,int flags) { -struct exynos4_gpio_part2 *gpio2 = - (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2 (); -struct s5p_gpio_bank *bank, *bank_ext; -int i; +int i, start =0 , start_ext =0 ;switch (peripheral) {case PERIPH_ID_SDMMC0 : - bank = &gpio2->k0; - bank_ext = &gpio2->k1; + start =EXYNOS4_GPIO_K00 ; + start_ext =EXYNOS4_GPIO_K13 ;break ;case PERIPH_ID_SDMMC2 : - bank = &gpio2->k2; - bank_ext = &gpio2->k3; + start =EXYNOS4_GPIO_K20 ; + start_ext =EXYNOS4_GPIO_K33 ;break ;default :return -1 ; } -for (i =0 ; i <7 ; i++) { +for (i = start; i < (start +7 ); i++) {if (i ==2 )continue ; -s5p_gpio_cfg_pin (bank, i,GPIO_FUNC (0x2 )); -s5p_gpio_set_pull (bank, i,GPIO_PULL_NONE ); -s5p_gpio_set_drv (bank, i,GPIO_DRV_4X ); +gpio_cfg_pin (i,S5P_GPIO_FUNC (0x2 )); +gpio_set_pull (i,S5P_GPIO_PULL_NONE ); +gpio_set_drv (i,S5P_GPIO_DRV_4X ); }if (flags &PINMUX_FLAG_8BIT_MODE ) { -for (i =3 ; i <7 ; i++) { -s5p_gpio_cfg_pin (bank_ext, i,GPIO_FUNC (0x3 )); -s5p_gpio_set_pull (bank_ext, i,GPIO_PULL_NONE ); -s5p_gpio_set_drv (bank_ext, i,GPIO_DRV_4X ); +for (i = start_ext; i < (start_ext +4 ); i++) { +gpio_cfg_pin (i,S5P_GPIO_FUNC (0x3 )); +gpio_set_pull (i,S5P_GPIO_PULL_NONE ); +gpio_set_drv (i,S5P_GPIO_DRV_4X ); } }
@@ -666,30 +606,23 @@ static int exynos4_mmc_config(int peripheral, int flags)static void exynos4_uart_config (int peripheral) { -struct exynos4_gpio_part1 *gpio1 = - (struct exynos4_gpio_part1 *)samsung_get_base_gpio_part1 (); -struct s5p_gpio_bank *bank;int i, start, count;switch (peripheral) {case PERIPH_ID_UART0 : - bank = &gpio1->a0; - start =0 ; + start =EXYNOS4_GPIO_A00 ; count =4 ;break ;case PERIPH_ID_UART1 : - bank = &gpio1->a0; - start =4 ; + start =EXYNOS4_GPIO_A04 ; count =4 ;break ;case PERIPH_ID_UART2 : - bank = &gpio1->a1; - start =0 ; + start =EXYNOS4_GPIO_A10 ; count =4 ;break ;case PERIPH_ID_UART3 : - bank = &gpio1->a1; - start =4 ; + start =EXYNOS4_GPIO_A14 ; count =2 ;break ;default :
@@ -697,8 +630,8 @@ static void exynos4_uart_config(int peripheral)return ; }for (i = start; i < start + count; i++) { -s5p_gpio_set_pull (bank, i,GPIO_PULL_NONE ); -s5p_gpio_cfg_pin (bank, i,GPIO_FUNC (0x2 )); +gpio_set_pull (i,S5P_GPIO_PULL_NONE ); +gpio_cfg_pin (i,S5P_GPIO_FUNC (0x2 )); } }static int exynos4_pinmux_config (int peripheral,int flags)
arch/arm/include/asm/arch-exynos/cpu.h +11 -6
@@ -98,7 +98,7 @@#define EXYNOS5_I2C_SPACING 0x10000#define EXYNOS5_AUDIOSS_BASE 0x03810000 -#define EXYNOS5_GPIO_PART4_BASE 0x03860000 +#define EXYNOS5_GPIO_PART8_BASE 0x03860000#define EXYNOS5_PRO_ID 0x10000000#define EXYNOS5_CLOCK_BASE 0x10010000#define EXYNOS5_POWER_BASE 0x10040000
@@ -108,9 +108,13 @@#define EXYNOS5_WATCHDOG_BASE 0x101D0000#define EXYNOS5_ACE_SFR_BASE 0x10830000#define EXYNOS5_DMC_PHY_BASE 0x10C00000 -#define EXYNOS5_GPIO_PART3_BASE 0x10D10000 +#define EXYNOS5_GPIO_PART5_BASE 0x10D10000 +#define EXYNOS5_GPIO_PART6_BASE 0x10D10060 +#define EXYNOS5_GPIO_PART7_BASE 0x10D100C0#define EXYNOS5_DMC_CTRL_BASE 0x10DD0000#define EXYNOS5_GPIO_PART1_BASE 0x11400000 +#define EXYNOS5_GPIO_PART2_BASE 0x114002E0 +#define EXYNOS5_GPIO_PART3_BASE 0x11400C00#define EXYNOS5_MIPI_DSIM_BASE 0x11D00000#define EXYNOS5_USB_HOST_XHCI_BASE 0x12000000#define EXYNOS5_USB3PHY_BASE 0x12100000
@@ -125,7 +129,7 @@#define EXYNOS5_I2S_BASE 0x12D60000#define EXYNOS5_PWMTIMER_BASE 0x12DD0000#define EXYNOS5_SPI_ISP_BASE 0x131A0000 -#define EXYNOS5_GPIO_PART2_BASE 0x13400000 +#define EXYNOS5_GPIO_PART4_BASE 0x13400000#define EXYNOS5_FIMD_BASE 0x14400000#define EXYNOS5_DP_BASE 0x145B0000
@@ -135,7 +139,7 @@/* EXYNOS5420 */ #define EXYNOS5420_AUDIOSS_BASE 0x03810000 -#define EXYNOS5420_GPIO_PART5_BASE 0x03860000 +#define EXYNOS5420_GPIO_PART6_BASE 0x03860000#define EXYNOS5420_PRO_ID 0x10000000#define EXYNOS5420_CLOCK_BASE 0x10010000#define EXYNOS5420_POWER_BASE 0x10040000
@@ -158,8 +162,9 @@#define EXYNOS5420_PWMTIMER_BASE 0x12DD0000#define EXYNOS5420_SPI_ISP_BASE 0x131A0000#define EXYNOS5420_GPIO_PART2_BASE 0x13400000 -#define EXYNOS5420_GPIO_PART3_BASE 0x13410000 -#define EXYNOS5420_GPIO_PART4_BASE 0x14000000 +#define EXYNOS5420_GPIO_PART3_BASE 0x13400C00 +#define EXYNOS5420_GPIO_PART4_BASE 0x13410000 +#define EXYNOS5420_GPIO_PART5_BASE 0x14000000#define EXYNOS5420_GPIO_PART1_BASE 0x14010000#define EXYNOS5420_MIPI_DSIM_BASE 0x14500000#define EXYNOS5420_DP_BASE 0x145B0000
arch/arm/include/asm/arch-exynos/gpio.h +1507 -279
1,812 lines not on this page · raw message
arch/arm/include/asm/arch-s5pc1xx/gpio.h +815 -126
426 lines not on this page · raw message
board/samsung/trats2/trats2.c +30 -44
74 lines not on this page · raw message
board/samsung/universal_c210/universal.c +23 -28
51 lines not on this page · raw message
drivers/gpio/s5p_gpio.c +169 -26
195 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
1.7.9.5
Part of the diff is not shown here. View the raw message.
PATCH v9 1/2 S5P: Exynos: Add GPIO pin numbering and rename definitions
Hi,
Quoted 41 lines · Akshay Saraswat
This patch includes following changes :
* Adds gpio pin numbering support for EXYNOS SOCs.
To have consistent 0..n-1 GPIO numbering the banks are divided into different parts where ever they have holes in them.* Rename GPIO definitions from
GPIO_... toS5P_GPIO_... These changes were done to enablecmd_gpiofor EXYNOS andcmd_gpiohasGPIO_INPUTsame ass5p_gpiodriver and hence getting a error during compilation.* Adds support for name to gpio conversion in
s5p_gpioto enable gpio command EXYNOS SoCs. Function has been added toasm/gpio.hto decode the input gpio name to gpio number.
Example: SMDK5420 # gpio set gpa00Signed-off-by Leela Krishna Amudala <[email protected]>Signed-off-by Rajeshwari Shinde <[email protected]>Signed-off-by Akshay Saraswat <[email protected]>--- arch/arm/cpu/armv7/exynos/pinmux.c | 403 +++---- arch/arm/include/asm/arch-exynos/cpu.h | 17 +- arch/arm/include/asm/arch-exynos/gpio.h | 1786 +++++++++++++++++++++++++----- arch/arm/include/asm/arch-s5pc1xx/gpio.h | 941 +++++++++++++--- board/samsung/arndale/arndale.c | 11 +- board/samsung/goni/goni.c | 26 +- board/samsung/smdk5250/exynos5-dt.c | 20 +- board/samsung/smdk5250/smdk5250.c | 19 +- board/samsung/smdk5420/smdk5420.c | 15 +- board/samsung/smdkc100/smdkc100.c | 5 +- board/samsung/smdkv310/smdkv310.c | 17 +- board/samsung/trats/trats.c | 39 +- board/samsung/trats2/trats2.c | 74 +- board/samsung/universal_c210/universal.c | 51 +- drivers/gpio/s5p_gpio.c | 195 +++- 15 files changed, 2778 insertions(+), 841 deletions(-)drivers/gpio/s5p_gpio.c +0
-0
drivers/gpio/s5p_gpio.c line 11
Quoted 4 lines
drivers/gpio/s5p_gpio.c +1
-0@@ -8,11 +8,12 @@#include <common.h> #include <asm/io.h> #include <asm/gpio.h> +#include <asm/arch-exynos/gpio.h>
This is common driver, so it should be:
#include <asm/arch/gpio.h>
drivers/gpio/s5p_gpio.c line 16
Quoted 5 lines
drivers/gpio/s5p_gpio.c +1
-1#define S5P_GPIO_GET_BANK (x) ((x >> S5P_GPIO_BANK_SHIFT) \ & S5P_GPIO_BANK_MASK) -#define S5P_GPIO_GET_PIN (x) (x & S5P_GPIO_PIN_MASK) +#define S5P_GPIO_GET_PIN (x) ((x & S5P_GPIO_PIN_MASK) % GPIO_PER_BANK)
And again...we don't need above macros, we can use now linear numbering.
Quoted 13 lines
drivers/gpio/s5p_gpio.c +13
-0+#ifdef HAVE_GENERIC_GPIO +struct s5p_gpio_bank *s5p_gpio_get_bank (unsigned int gpio) +{ +const struct gpio_info *data; +unsigned int upto; +int i, count; + + data =get_gpio_data (); + count =get_bank_num (); +for (i = upto =0 ; i < count; + i++, upto = data->max_gpio, data++) { +debug ("i=%d, upto=%d\n" , i, upto); +if (gpio < data->max_gpio) {
drivers/gpio/s5p_gpio.c void s5p_gpio_set_rate(struct s5p_gpio_bank *bank, int gpio, int mode) · line 247
Quoted 10 lines
drivers/gpio/s5p_gpio.c +10
-0+struct s5p_gpio_bank *bank; + bank = (struct s5p_gpio_bank *)data->reg_addr; + bank += (gpio - upto) /GPIO_PER_BANK ; +debug ("gpio=%d, bank=%p\n" , gpio, bank); + return bank; + } + } +return NULL ; +} +#else
You are using exynos_gpio_get() in code but this function is not compiled. Again please remove it.
drivers/gpio/s5p_gpio.c struct s5p_gpio_bank *s5p_gpio_get_bank(unsigned gpio) · line 255
Quoted 8 lines
struct s5p_gpio_bank *s5p_gpio_get_bank(unsigned gpio) { unsigned bank = S5P_GPIO_GET_BANK(gpio);drivers/gpio/s5p_gpio.c +1
-0@@ -134,6 +252,7 @@ struct s5p_gpio_bank *s5p_gpio_get_bank(unsigned gpio) return (struct s5p_gpio_bank *)(base + bank); } +#endif
Thanks
Signature · 4 lines
Przemyslaw Marczak Samsung R&D Institute Poland Samsung Electronics p.marczak at samsung.com
PATCH v9 2/2 S5P: Exynos: Config: Enable Generic GPIO and CMD configs
In reply to Akshay SaraswatEnabling configs for GPIO CMD and Generic GPIO in case of S5P and Exynos target boards.
Also, doing modifications in the config definitions wherever required due to change in gpio macros pin numbering enums.
--- include/configs/arndale.h | 1 + include/configs/exynos5-dt.h | 3 +++ include/configs/origen.h | 1 + include/configs/s5p_goni.h | 5 +++-- include/configs/s5pc210_universal.h | 17 +++++++++-------- include/configs/smdkc100.h | 1 + include/configs/smdkv310.h | 2 ++ include/configs/trats.h | 9 +++++---- include/configs/trats2.h | 5 +++-- 9 files changed, 28 insertions(+), 16 deletions(-)
include/configs/arndale.h +1 -0
@@ -249,4 +249,5 @@/* Enable Time Command */ #define CONFIG_CMD_TIME +#define HAVE_GENERIC_GPIO #endif /* __CONFIG_H */
include/configs/exynos5-dt.h +3 -0
@@ -288,4 +288,7 @@#define CONFIG_CMD_BOOTZ +#define HAVE_GENERIC_GPIO +#define CONFIG_CMD_GPIO +#endif /* __CONFIG_H */
include/configs/origen.h +1 -0
@@ -95,4 +95,5 @@#define BL2_START_OFFSET ((CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)/512)#define BL2_SIZE_BLOC_COUNT (COPY_BL2_SIZE/512) +#define HAVE_GENERIC_GPIO #endif /* __CONFIG_H */
include/configs/s5p_goni.h +3 -2
@@ -214,8 +214,8 @@/* * I2C Settings */ -#define CONFIG_SOFT_I2C_GPIO_SCL s5pc110_gpio_get(j4, 3) -#define CONFIG_SOFT_I2C_GPIO_SDA s5pc110_gpio_get(j4, 0) +#define CONFIG_SOFT_I2C_GPIO_SCL s5p_gpio_get(S5PC110_GPIO_J43) +#define CONFIG_SOFT_I2C_GPIO_SDA s5p_gpio_get(S5PC110_GPIO_J40)#define CONFIG_SYS_I2C #define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */
@@ -227,4 +227,5 @@#define CONFIG_USB_GADGET_S3C_UDC_OTG #define CONFIG_USB_GADGET_DUALSPEED +#define HAVE_GENERIC_GPIO #endif /* __CONFIG_H */
include/configs/s5pc210_universal.h +9 -8
@@ -170,8 +170,8 @@/* * I2C Settings */ -#define CONFIG_SOFT_I2C_GPIO_SCL exynos4_gpio_get(1, b, 7) -#define CONFIG_SOFT_I2C_GPIO_SDA exynos4_gpio_get(1, b, 6) +#define CONFIG_SOFT_I2C_GPIO_SCL exynos_gpio_get(1, EXYNOS4_GPIO_B7) +#define CONFIG_SOFT_I2C_GPIO_SDA exynos_gpio_get(1, EXYNOS4_GPIO_B6)#define CONFIG_CMD_I2C
@@ -196,10 +196,10 @@*/ #define CONFIG_SOFT_SPI #define CONFIG_SOFT_SPI_MODE SPI_MODE_3 -#define CONFIG_SOFT_SPI_GPIO_SCLK exynos4_gpio_get(2, y3, 1) -#define CONFIG_SOFT_SPI_GPIO_MOSI exynos4_gpio_get(2, y3, 3) -#define CONFIG_SOFT_SPI_GPIO_MISO exynos4_gpio_get(2, y3, 0) -#define CONFIG_SOFT_SPI_GPIO_CS exynos4_gpio_get(2, y4, 3) +#define CONFIG_SOFT_SPI_GPIO_SCLK exynos_gpio_get(2, EXYNOS4_GPIO_Y31) +#define CONFIG_SOFT_SPI_GPIO_MOSI exynos_gpio_get(2, EXYNOS4_GPIO_Y33) +#define CONFIG_SOFT_SPI_GPIO_MISO exynos_gpio_get(2, EXYNOS4_GPIO_Y30) +#define CONFIG_SOFT_SPI_GPIO_CS exynos_gpio_get(2, EXYNOS4_GPIO_Y43)#define SPI_DELAY udelay(1)#undef SPI_INIT
@@ -231,8 +231,8 @@ int universal_spi_read(void);#define KEY_PWR_INTERRUPT_REG MAX8998_REG_IRQ1#define KEY_PWR_INTERRUPT_MASK (1 << 7) -#define KEY_VOL_UP_GPIO exynos4_gpio_get(2, x2, 0) -#define KEY_VOL_DOWN_GPIO exynos4_gpio_get(2, x2, 1) +#define KEY_VOL_UP_GPIO exynos_gpio_get(2, EXYNOS4_GPIO_X20) +#define KEY_VOL_DOWN_GPIO exynos_gpio_get(2, EXYNOS4_GPIO_X21)#endif /* __ASSEMBLY__ */ /* LCD console */
@@ -253,4 +253,5 @@ int universal_spi_read(void);#define LCD_XRES 480#define LCD_YRES 800 +#define HAVE_GENERIC_GPIO #endif /* __CONFIG_H */
include/configs/smdkc100.h +1 -0
@@ -217,4 +217,5 @@#define CONFIG_ENV_SROM_BANK 3/* Select SROM Bank-3 for Ethernet*/ #endif /* CONFIG_CMD_NET */ +#define HAVE_GENERIC_GPIO #endif /* __CONFIG_H */
include/configs/smdkv310.h +2 -0
@@ -12,6 +12,7 @@/* High Level Configuration Options */ #define CONFIG_SAMSUNG 1/* in a SAMSUNG core */ #define CONFIG_S5P 1/* S5P Family */ +#define CONFIG_EXYNOS4 /* EXYNOS4 Family */ #define CONFIG_EXYNOS4210 1/* which is a EXYNOS4210 SoC */ #define CONFIG_SMDKV310 1/* working with SMDKV310*/
@@ -148,4 +149,5 @@/* Enable devicetree support */ #define CONFIG_OF_LIBFDT +#define HAVE_GENERIC_GPIO #endif /* __CONFIG_H */
include/configs/trats.h +5 -4
@@ -207,8 +207,8 @@#define CONFIG_SYS_I2C_INIT_BOARD /* I2C FG */ -#define CONFIG_SOFT_I2C_GPIO_SCL exynos4_gpio_get(2, y4, 1) -#define CONFIG_SOFT_I2C_GPIO_SDA exynos4_gpio_get(2, y4, 0) +#define CONFIG_SOFT_I2C_GPIO_SCL exynos_gpio_get(2, EXYNOS4_GPIO_Y41) +#define CONFIG_SOFT_I2C_GPIO_SDA exynos_gpio_get(2, EXYNOS4_GPIO_Y40)/* POWER */ #define CONFIG_POWER
@@ -245,8 +245,8 @@#define KEY_PWR_INTERRUPT_REG MAX8997_REG_INT1#define KEY_PWR_INTERRUPT_MASK (1 << 0) -#define KEY_VOL_UP_GPIO exynos4_gpio_get(2, x2, 0) -#define KEY_VOL_DOWN_GPIO exynos4_gpio_get(2, x2, 1) +#define KEY_VOL_UP_GPIO exynos_gpio_get(2, EXYNOS4_GPIO_X20) +#define KEY_VOL_DOWN_GPIO exynos_gpio_get(2, EXYNOS4_GPIO_X21)#endif /* __ASSEMBLY__ */ /* LCD console */
@@ -267,4 +267,5 @@#define LCD_XRES 720#define LCD_YRES 1280 +#define HAVE_GENERIC_GPIO #endif /* __CONFIG_H */
include/configs/trats2.h +3 -2
@@ -227,8 +227,8 @@ int get_soft_i2c_sda_pin(void);#define KEY_PWR_INTERRUPT_REG MAX77686_REG_PMIC_INT1#define KEY_PWR_INTERRUPT_MASK (1 << 1) -#define KEY_VOL_UP_GPIO exynos4x12_gpio_get(2, x2, 2) -#define KEY_VOL_DOWN_GPIO exynos4x12_gpio_get(2, x3, 3) +#define KEY_VOL_UP_GPIO exynos_gpio_get(2, EXYNOS4X12_GPIO_X22) +#define KEY_VOL_DOWN_GPIO exynos_gpio_get(2, EXYNOS4X12_GPIO_X33)#endif /* __ASSEMBLY__ */ /* LCD console */
@@ -249,4 +249,5 @@ int get_soft_i2c_sda_pin(void);#define LCD_XRES 720#define LCD_YRES 1280 +#define HAVE_GENERIC_GPIO #endif /* __CONFIG_H */
Signature · 1 line
1.7.9.5
v9 cover S5P: Exynos: Add GPIO numbering feature
In reply to Akshay SaraswatHello,
Quoted 65 lines · Akshay Saraswat
Used a script to recheck/verify pin mapping and existing mapping appears to be fine, returning correct bank and pin values. Did ./MAKEALL -a arm and found all Exynos/S5P related boards compiled successfully.
Couldn't test booting over all of them.
Tested U-Boot bootup over SMDK5420, SMDK5250, Snow. Requesting maintaners to please test over affected SoCs/boards.Changes in V2:
- EnabledCMD_GPIOas suggested by Simon Glass
and supported same for EXYNOS5.
Changes in V3:
- New patch added to rename S5P GPIO definitions
toS5P_GPIO.
- GPIO Table added to calculate the base address
of input gpio bank.
Changes in V4:
- To have consistent 0..n-1 GPIO numbering the banks are divided into different parts where ever they have holes in them.
- Function and table to support gpio command moved to s5p-gpio driver.
- Rebased on latest u-boot-samsung tree.
Changes in V5:
- Rebased on latest u-boot-samsung tree.
- Removed Exynos5 specific code in gpio driver api to get bank.
- Added #defineHAVE_GENERIC_GPIOin config file
to remove conditinal CPU check in gpio driver.
Changes in V6:
- Isolated config changes in a new patch.
- Updated patches with corresponding changes for Exynos 5420.
Changes in V7:
- Added changes for other SoCs like Exynos 4412, 4210 etc.
Changes in V8:
- Changed Subject of patch 2/2 to reflect affected SoCs/boards.
- Fixed arndale board compile time errors introduced due to patch-set v7.
Changes in V9:
- Fixed checkpatch errors.
- Fixed naming error inexynosxxxx_gpio_dataarrays which could be the possible reason behind data abort witnessed over Exynos4 boards.Akshay Saraswat (2):
EXYNOS: Add GPIO pin numbering and rename definitions
S5P: Exynos: Config: Enable Generic GPIO and CMD configsarch/arm/cpu/armv7/exynos/pinmux.c | 403 +++---- arch/arm/include/asm/arch-exynos/cpu.h | 17 +- arch/arm/include/asm/arch-exynos/gpio.h | 1786 +++++++++++++++++++++++++----- arch/arm/include/asm/arch-s5pc1xx/gpio.h | 941 +++++++++++++--- board/samsung/arndale/arndale.c | 11 +- board/samsung/goni/goni.c | 26 +- board/samsung/smdk5250/exynos5-dt.c | 20 +- board/samsung/smdk5250/smdk5250.c | 19 +- board/samsung/smdk5420/smdk5420.c | 15 +- board/samsung/smdkc100/smdkc100.c | 5 +- board/samsung/smdkv310/smdkv310.c | 17 +- board/samsung/trats/trats.c | 39 +- board/samsung/trats2/trats2.c | 74 +- board/samsung/universal_c210/universal.c | 51 +- drivers/gpio/s5p_gpio.c | 195 +++- include/configs/arndale.h | 1 + include/configs/exynos5-dt.h | 3 +
Quoted 9 lines
include/configs/origen.h | 1 + include/configs/s5p_goni.h | 5 +- include/configs/s5pc210_universal.h | 17 +- include/configs/smdkc100.h | 1 + include/configs/smdkv310.h | 2 + include/configs/trats.h | 9 +- include/configs/trats2.h | 5 +- 24 files changed, 2806 insertions(+), 857 deletions(-)
I think that you missed my last few comments.
You are still using exynos_gpio_get() - what for?
It returns some number and next it's interpreted as
gpio continuous number - but it isn't continuous.
It's because each samsung board has now defined "HAVE_GENERIC_GPIO", so gpio numbers are interpreted as linear.
We don't need additional macro since you introduce linear numbering.
Please read my last comments again.
I tried test this on trats2 device but data abort occurs at PMIC init, it's probably because exynos_gpio_get(). Please use just gpio numbering as you defined in this patchset.
Thank you
Signature · 4 lines
Przemyslaw Marczak Samsung R&D Institute Poland Samsung Electronics p.marczak at samsung.com