S5P: Exynos: Add GPIO numbering feature
Subsystems (3)
v13 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.
Changes in v10:
- Made arch-exynos/gpio.h -> arch/gpio.h.
- Removed dead code.
- Replaced exynos_gpio_get calls with corresponding pin number.
- Edited pin numbmers in dts files.
Changes in v11:
- Created and fixed pinmux_config for Exynos 4412.
- Removed dead code.
Changes in v12:
- Added change logs in individual patches.
- Fixed few bugs and typos.
- Added "Acked-by: Przemyslaw Marczak".
Changes in v13:
- Fixed typo by replacing EXYNOS5420_GPIO_B10 with EXYNOS5420_GPIO_B20 at line # 4149 of patch 1/2.
Akshay Saraswat (2):
S5P: Exynos: Add GPIO pin numbering and rename definitions
S5P: Exynos: Config: Enable GPIO CMD config
arch/arm/cpu/armv7/exynos/pinmux.c | 561 +++++---- arch/arm/dts/exynos4210-origen.dts | 4 +- arch/arm/dts/exynos4210-trats.dts | 6 +- arch/arm/dts/exynos4210-universal_c210.dts | 4 +- arch/arm/dts/exynos4412-trats2.dts | 4 +- arch/arm/include/asm/arch-exynos/cpu.h | 17 +- arch/arm/include/asm/arch-exynos/gpio.h | 1761 +++++++++++++++++++++++----- arch/arm/include/asm/arch-s5pc1xx/gpio.h | 948 ++++++++++++--- board/samsung/arndale/arndale.c | 11 +- board/samsung/goni/goni.c | 32 +- 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 | 19 +- board/samsung/trats/trats.c | 39 +- board/samsung/trats2/trats2.c | 74 +- board/samsung/universal_c210/universal.c | 51 +- drivers/gpio/s5p_gpio.c | 204 +++- include/configs/exynos5-dt.h | 2 + include/configs/s5p_goni.h | 4 +- include/configs/s5pc210_universal.h | 16 +- include/configs/smdkv310.h | 1 + include/configs/trats.h | 8 +- include/configs/trats2.h | 4 +- 25 files changed, 2918 insertions(+), 911 deletions(-)
Signature · 1 line
1.8.3.2
PATCH v13 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
---
Changes in v13:
- Fixed typo by replacing EXYNOS5420_GPIO_B10 with EXYNOS5420_GPIO_B20 at line # 4149.
Changes in v12:
- Added change log in this patch.
- Fixed few bugs and typos.
- Added "Acked-by: Przemyslaw Marczak".
Changes in v11:
- Created and fixed pinmux_config for Exynos 4412.
- Removed dead code.
Changes in v10:
- Made arch-exynos/gpio.h -> arch/gpio.h.
- Removed dead code.
- Edited pin numbmers in dts files.
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.
Changes in V8:
- Fixed arndale board compile time errors introduced due to patch-set v7.
Changes in V7:
- Added changes for other SoCs like Exynos 4412, 4210 etc.
Changes in V6:
- Updated patch with corresponding changes for Exynos 5420.
Changes in V5:
- Rebased on latest u-boot-samsung tree.
- Removed Exynos5 specific code in gpio driver api to get 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 V3:
- GPIO Table added to calculate the base address
of input gpio bank.
arch/arm/cpu/armv7/exynos/pinmux.c | 561 +++++---- arch/arm/dts/exynos4210-origen.dts | 4 +- arch/arm/dts/exynos4210-trats.dts | 6 +- arch/arm/dts/exynos4210-universal_c210.dts | 4 +- arch/arm/dts/exynos4412-trats2.dts | 4 +- arch/arm/include/asm/arch-exynos/cpu.h | 17 +- arch/arm/include/asm/arch-exynos/gpio.h | 1761 +++++++++++++++++++++++----- arch/arm/include/asm/arch-s5pc1xx/gpio.h | 948 ++++++++++++--- board/samsung/arndale/arndale.c | 11 +- board/samsung/goni/goni.c | 32 +- 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 | 19 +- board/samsung/trats/trats.c | 39 +- board/samsung/trats2/trats2.c | 74 +- board/samsung/universal_c210/universal.c | 51 +- drivers/gpio/s5p_gpio.c | 204 +++- 19 files changed, 2899 insertions(+), 895 deletions(-)
arch/arm/cpu/armv7/exynos/pinmux.c +318 -243
@@ -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,41 +150,41 @@ 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 * power on the eMMC. The 5420 iROM makes * 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 ); +if ((peripheral ==PERIPH_ID_SDMMC0 ) && (i == (start +2 ))) { +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++) { -if (i ==2 ) +for (i = start; i < (start +7 ); i++) { +if (i == (start +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,41 +606,138 @@ 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 :debug ("%s: invalid peripheral %d" , __func__, 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 )); +for (i = start; i < (start + count); i++) { +gpio_set_pull (i,S5P_GPIO_PULL_NONE ); +gpio_cfg_pin (i,S5P_GPIO_FUNC (0x2 )); + } +} + +static void exynos4x12_i2c_config (int peripheral,int flags) +{ +switch (peripheral) { +case PERIPH_ID_I2C0 : +gpio_cfg_pin (EXYNOS4X12_GPIO_D10 ,S5P_GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS4X12_GPIO_D11 ,S5P_GPIO_FUNC (0x2 )); +break ; +case PERIPH_ID_I2C1 : +gpio_cfg_pin (EXYNOS4X12_GPIO_D12 ,S5P_GPIO_FUNC (0x2 )); +gpio_cfg_pin (EXYNOS4X12_GPIO_D13 ,S5P_GPIO_FUNC (0x2 )); +break ; +case PERIPH_ID_I2C2 : +gpio_cfg_pin (EXYNOS4X12_GPIO_A06 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS4X12_GPIO_A07 ,S5P_GPIO_FUNC (0x3 )); +break ; +case PERIPH_ID_I2C3 : +gpio_cfg_pin (EXYNOS4X12_GPIO_A12 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS4X12_GPIO_A13 ,S5P_GPIO_FUNC (0x3 )); +break ; +case PERIPH_ID_I2C4 : +gpio_cfg_pin (EXYNOS4X12_GPIO_B2 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS4X12_GPIO_B3 ,S5P_GPIO_FUNC (0x3 )); +break ; +case PERIPH_ID_I2C5 : +gpio_cfg_pin (EXYNOS4X12_GPIO_B6 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS4X12_GPIO_B7 ,S5P_GPIO_FUNC (0x3 )); +break ; +case PERIPH_ID_I2C6 : +gpio_cfg_pin (EXYNOS4X12_GPIO_C13 ,S5P_GPIO_FUNC (0x4 )); +gpio_cfg_pin (EXYNOS4X12_GPIO_C14 ,S5P_GPIO_FUNC (0x4 )); +break ; +case PERIPH_ID_I2C7 : +gpio_cfg_pin (EXYNOS4X12_GPIO_D02 ,S5P_GPIO_FUNC (0x3 )); +gpio_cfg_pin (EXYNOS4X12_GPIO_D03 ,S5P_GPIO_FUNC (0x3 )); +break ; + } +} + +static int exynos4x12_mmc_config (int peripheral,int flags) +{ +int i, start =0 , start_ext =0 ; + +switch (peripheral) { +case PERIPH_ID_SDMMC0 : + start =EXYNOS4X12_GPIO_K00 ; + start_ext =EXYNOS4X12_GPIO_K13 ; +break ; +case PERIPH_ID_SDMMC2 : + start =EXYNOS4X12_GPIO_K20 ; + start_ext =EXYNOS4X12_GPIO_K33 ; +break ; +default : +return -1 ; } +for (i = start; i < (start +7 ); i++) { +if (i == (start +2 )) +continue ; +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 = 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 ); + } + } + +return 0 ; } + +static void exynos4x12_uart_config (int peripheral) +{ +int i, start, count; + +switch (peripheral) { +case PERIPH_ID_UART0 : + start =EXYNOS4X12_GPIO_A00 ; + count =4 ; +break ; +case PERIPH_ID_UART1 : + start =EXYNOS4X12_GPIO_A04 ; + count =4 ; +break ; +case PERIPH_ID_UART2 : + start =EXYNOS4X12_GPIO_A10 ; + count =4 ; +break ; +case PERIPH_ID_UART3 : + start =EXYNOS4X12_GPIO_A14 ; + count =2 ; +break ; +default : +debug ("%s: invalid peripheral %d" , __func__, peripheral); +return ; + } +for (i = start; i < (start + count); i++) { +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) {switch (peripheral) {
@@ -736,6 +773,41 @@ static int exynos4_pinmux_config(int peripheral, int flags)return 0 ; } +static int exynos4x12_pinmux_config (int peripheral,int flags) +{ +switch (peripheral) { +case PERIPH_ID_UART0 : +case PERIPH_ID_UART1 : +case PERIPH_ID_UART2 : +case PERIPH_ID_UART3 : +exynos4x12_uart_config (peripheral); +break ; +case PERIPH_ID_I2C0 : +case PERIPH_ID_I2C1 : +case PERIPH_ID_I2C2 : +case PERIPH_ID_I2C3 : +case PERIPH_ID_I2C4 : +case PERIPH_ID_I2C5 : +case PERIPH_ID_I2C6 : +case PERIPH_ID_I2C7 : +exynos4x12_i2c_config (peripheral, flags); +break ; +case PERIPH_ID_SDMMC0 : +case PERIPH_ID_SDMMC2 : +return exynos4x12_mmc_config (peripheral, flags); +case PERIPH_ID_SDMMC1 : +case PERIPH_ID_SDMMC3 : +case PERIPH_ID_SDMMC4 : +debug ("SDMMC device %d not implemented\n" , peripheral); +return -1 ; +default : +debug ("%s: invalid peripheral %d" , __func__, peripheral); +return -1 ; + } + +return 0 ; +} +int exynos_pinmux_config (int peripheral,int flags) {if (cpu_is_exynos5 ()) {
@@ -744,11 +816,14 @@ int exynos_pinmux_config(int peripheral, int flags)else if (proid_is_exynos5250 ())return exynos5_pinmux_config (peripheral, flags); }else if (cpu_is_exynos4 ()) { -return exynos4_pinmux_config (peripheral, flags); - }else { -debug ("pinmux functionality not supported\n" ); +if (proid_is_exynos4412 ()) +return exynos4x12_pinmux_config (peripheral, flags); +else +return exynos4_pinmux_config (peripheral, flags); } +debug ("pinmux functionality not supported\n" ); +return -1 ; }
@@ -787,7 +862,7 @@ int pinmux_decode_periph_id(const void *blob, int node)return exynos5_pinmux_decode_periph_id (blob, node); else if (cpu_is_exynos4()) return exynos4_pinmux_decode_periph_id(blob, node); - else - return PERIPH_ID_NONE; + + return PERIPH_ID_NONE; }#endif
arch/arm/dts/exynos4210-origen.dts +2 -2
@@ -36,10 +36,10 @@ sdhci@12530000 { samsung,bus-width = <4>; samsung,timing = <1 2 3>; - cd-gpios = <&gpio 0x2008002 0>; + cd-gpios = <&gpio 0xA2 0>; }; sdhci at 12540000 { status = "disabled"; }; -}; +};
arch/arm/dts/exynos4210-trats.dts +3 -3
@@ -101,7 +101,7 @@ sdhci at 12510000 { samsung,bus-width = <8>; samsung,timing = <1 3 3>; - pwr-gpios = <&gpio 0x2008002 0>; + pwr-gpios = <&gpio 0xA2 0>; }; sdhci at 12520000 {
@@ -111,10 +111,10 @@ sdhci at 12530000 { samsung,bus-width = <4>; samsung,timing = <1 2 3>; - cd-gpios = <&gpio 0x20c6004 0>; + cd-gpios = <&gpio 0x39C 0>; }; sdhci at 12540000 { status = "disabled"; }; -}; +};
arch/arm/dts/exynos4210-universal_c210.dts +2 -2
@@ -24,7 +24,7 @@ sdhci at 12510000 { samsung,bus-width = <8>; samsung,timing = <1 3 3>; - pwr-gpios = <&gpio 0x2008002 0>; + pwr-gpios = <&gpio 0xA2 0>; }; sdhci at 12520000 {
@@ -34,7 +34,7 @@ sdhci at 12530000 { samsung,bus-width = <4>; samsung,timing = <1 2 3>; - cd-gpios = <&gpio 0x20c6004 0>; + cd-gpios = <&gpio 0x39C 0>; }; sdhci at 12540000 {
arch/arm/dts/exynos4412-trats2.dts +2 -2
@@ -415,7 +415,7 @@ sdhci at 12510000 { samsung,bus-width = <8>; samsung,timing = <1 3 3>; - pwr-gpios = <&gpio 0x2004002 0>; + pwr-gpios = <&gpio 0xB2 0>; }; sdhci at 12520000 {
@@ -425,7 +425,7 @@ sdhci at 12530000 { samsung,bus-width = <4>; samsung,timing = <1 2 3>; - cd-gpios = <&gpio 0x20C6004 0>; + cd-gpios = <&gpio 0x3BC 0>; }; sdhci at 12540000 {
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 +1474 -287
1,802 lines not on this page · raw message
arch/arm/include/asm/arch-s5pc1xx/gpio.h +804 -144
192 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 +171 -33
204 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
1.8.3.2
Part of the diff is not shown here. View the raw message.
PATCH v13 2/2 S5P: Exynos: Config: Enable GPIO CMD config
In reply to Akshay SaraswatEnabling configs for GPIO CMD, EXYNOS4 family and replacing exynos_gpio_get with new linear GPIO pin number required because of the new function asking only 2 arguments (pin and value) instead of 3 (bank, pin and value).
---
Changes in v12:
- Added change log in this patch.
- Added "Acked-by: Przemyslaw Marczak".
Changes in v10:
- Replaced exynos_gpio_get calls with corresponding pin number.
Changes in V8:
- Changed Subject to reflect affected SoCs/boards.
Changes in V6:
- Isolated config changes in a new patch.
include/configs/exynos5-dt.h | 2 ++ include/configs/s5p_goni.h | 4 ++-- include/configs/s5pc210_universal.h | 16 ++++++++-------- include/configs/smdkv310.h | 1 + include/configs/trats.h | 8 ++++---- include/configs/trats2.h | 4 ++-- 6 files changed, 19 insertions(+), 16 deletions(-)
include/configs/exynos5-dt.h +2 -0
@@ -288,4 +288,6 @@#define CONFIG_CMD_BOOTZ +#define CONFIG_CMD_GPIO +#endif /* __CONFIG_H */
include/configs/s5p_goni.h +2 -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 S5PC110_GPIO_J43 +#define CONFIG_SOFT_I2C_GPIO_SDA S5PC110_GPIO_J40#define CONFIG_SYS_I2C #define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */
include/configs/s5pc210_universal.h +8 -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 EXYNOS4_GPIO_B7 +#define CONFIG_SOFT_I2C_GPIO_SDA 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 EXYNOS4_GPIO_Y31 +#define CONFIG_SOFT_SPI_GPIO_MOSI EXYNOS4_GPIO_Y33 +#define CONFIG_SOFT_SPI_GPIO_MISO EXYNOS4_GPIO_Y30 +#define CONFIG_SOFT_SPI_GPIO_CS 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 EXYNOS4_GPIO_X20 +#define KEY_VOL_DOWN_GPIO EXYNOS4_GPIO_X21#endif /* __ASSEMBLY__ */ /* LCD console */
include/configs/smdkv310.h +1 -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*/
include/configs/trats.h +4 -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 EXYNOS4_GPIO_Y41 +#define CONFIG_SOFT_I2C_GPIO_SDA 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 EXYNOS4_GPIO_X20 +#define KEY_VOL_DOWN_GPIO EXYNOS4_GPIO_X21#endif /* __ASSEMBLY__ */ /* LCD console */
include/configs/trats2.h +2 -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 EXYNOS4X12_GPIO_X22 +#define KEY_VOL_DOWN_GPIO EXYNOS4X12_GPIO_X33#endif /* __ASSEMBLY__ */ /* LCD console */
Signature · 1 line
1.8.3.2
v13 cover S5P: Exynos: Add GPIO numbering feature
In reply to Akshay SaraswatDear Akshay Saraswat,
Quoted 81 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.
Changes in v10:
- Madearch-exynos/gpio.h->arch/gpio.h.
- Removed dead code.
- Replacedexynos_gpio_getcalls with corresponding pin number.
- Edited pin numbmers in dts files.
Changes in v11:
- Created and fixedpinmux_configfor Exynos 4412.
- Removed dead code.
Changes in v12:
- Added change logs in individual patches.
- Fixed few bugs and typos.
- Added "Acked-by: Przemyslaw Marczak".
Changes in v13:- Fixed typo by replacing EXYNOS5420_GPIO_B10 with EXYNOS5420_GPIO_B20 at line # 4149 of patch 1/2.Akshay Saraswat (2):
S5P: Exynos: Add GPIO pin numbering and rename definitions
S5P: Exynos: Config: Enable GPIO CMD configarch/arm/cpu/armv7/exynos/pinmux.c | 561 +++++---- arch/arm/dts/exynos4210-origen.dts | 4 +- arch/arm/dts/exynos4210-trats.dts | 6 +- arch/arm/dts/exynos4210-universal_c210.dts | 4 +- arch/arm/dts/exynos4412-trats2.dts | 4 +- arch/arm/include/asm/arch-exynos/cpu.h | 17 +- arch/arm/include/asm/arch-exynos/gpio.h | 1761 +++++++++++++++++++++++----- arch/arm/include/asm/arch-s5pc1xx/gpio.h | 948 ++++++++++++--- board/samsung/arndale/arndale.c | 11 +- board/samsung/goni/goni.c | 32 +- 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 | 19 +- board/samsung/trats/trats.c | 39 +- board/samsung/trats2/trats2.c | 74 +- board/samsung/universal_c210/universal.c | 51 +-
Quoted 9 lines
drivers/gpio/s5p_gpio.c | 204 +++- include/configs/exynos5-dt.h | 2 + include/configs/s5p_goni.h | 4 +- include/configs/s5pc210_universal.h | 16 +- include/configs/smdkv310.h | 1 + include/configs/trats.h | 8 +- include/configs/trats2.h | 4 +- 25 files changed, 2918 insertions(+), 911 deletions(-)
applied to u-boot-samsung.
Dear SAMSUNG developers,
If you have any problem, please tell us immediately.
Thanks,
Minkyu Kang.
v13 cover S5P: Exynos: Add GPIO numbering feature
Well..
In my case, exynos4 (trats2) is working fine until now.
Quoted 104 lines · Minkyu Kang
Dear Akshay Saraswat,
Quoted 81 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.
Changes in v10:
- Madearch-exynos/gpio.h->arch/gpio.h.
- Removed dead code.
- Replacedexynos_gpio_getcalls with corresponding pin number.
- Edited pin numbmers in dts files.
Changes in v11:
- Created and fixedpinmux_configfor Exynos 4412.
- Removed dead code.
Changes in v12:
- Added change logs in individual patches.
- Fixed few bugs and typos.
- Added "Acked-by: Przemyslaw Marczak".
Changes in v13:- Fixed typo by replacing EXYNOS5420_GPIO_B10 with EXYNOS5420_GPIO_B20 at line # 4149 of patch 1/2.Akshay Saraswat (2):
S5P: Exynos: Add GPIO pin numbering and rename definitions
S5P: Exynos: Config: Enable GPIO CMD configarch/arm/cpu/armv7/exynos/pinmux.c | 561 +++++---- arch/arm/dts/exynos4210-origen.dts | 4 +- arch/arm/dts/exynos4210-trats.dts | 6 +- arch/arm/dts/exynos4210-universal_c210.dts | 4 +- arch/arm/dts/exynos4412-trats2.dts | 4 +- arch/arm/include/asm/arch-exynos/cpu.h | 17 +- arch/arm/include/asm/arch-exynos/gpio.h | 1761 +++++++++++++++++++++++----- arch/arm/include/asm/arch-s5pc1xx/gpio.h | 948 ++++++++++++--- board/samsung/arndale/arndale.c | 11 +- board/samsung/goni/goni.c | 32 +- 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 | 19 +- board/samsung/trats/trats.c | 39 +- board/samsung/trats2/trats2.c | 74 +- board/samsung/universal_c210/universal.c | 51 +-Quoted 9 lines
drivers/gpio/s5p_gpio.c | 204 +++- include/configs/exynos5-dt.h | 2 + include/configs/s5p_goni.h | 4 +- include/configs/s5pc210_universal.h | 16 +- include/configs/smdkv310.h | 1 + include/configs/trats.h | 8 +- include/configs/trats2.h | 4 +- 25 files changed, 2918 insertions(+), 911 deletions(-)applied to u-boot-samsung.
Dear SAMSUNG developers,
If you have any problem, please tell us immediately.
Thanks,
Minkyu Kang.