GPIO: Tegra2: add GPIO driver for Tegra2
Subsystems (3)
v5 cover GPIO: Tegra2: add GPIO driver for Tegra2
This patchset adds a GPIO driver for Tegra2 SoC, and enables it for all boards
Changes in V2:
- use 'gpio_pin' enum in gpio.h (Simon Glass review request)
- change 'GPIO_PORT8' to 'GPIO_FULLPORT' (Simon Glass request)
- change 'offset' to 'pin' globally
- enable GPIO for all boards (tegra2-common.h)
Changes in V3:
- use common cmd_gpio; remove redundant cmd processing code
- add gpio_request, gpio_free and gpio_toggle
- alias 'gpio_status' to 'gpio_info' for use in cmd_gpio
Changes in V4:
- update code as per Mike Frysinger's review comments
- rewrite gpio_info, aka gpio_status
Changes in V5:
- NUL-terminate the name string in gpio_request
Tom Warren (2):
GPIO: Tegra2: add GPIO driver for Tegra2
arm: Tegra2: GPIO: enable GPIO for Tegra2 boards
arch/arm/include/asm/arch-tegra2/gpio.h | 250 +++++++++++++++++++++++++++++-- arch/arm/include/asm/gpio.h | 38 +++++ drivers/gpio/Makefile | 1 + drivers/gpio/tegra2_gpio.c | 255 +++++++++++++++++++++++++++++++ include/configs/tegra2-common.h | 2 + 5 files changed, 536 insertions(+), 10 deletions(-) create mode 100644 arch/arm/include/asm/gpio.h create mode 100644 drivers/gpio/tegra2_gpio.c
Signature · 1 line
1.7.5.4
PATCH v5 1/2 GPIO: Tegra2: add GPIO driver for Tegra2
---
Changes in V2:
- use 'gpio_pin' enum in gpio.h (Simon Glass review request)
- change 'GPIO_PORT8' to 'GPIO_FULLPORT' (Simon Glass request)
- change 'offset' to 'pin' globally
Changes in V3:
- use common cmd_gpio; remove redundant cmd processing code
- add gpio_request, gpio_free and gpio_toggle
- alias 'gpio_status' to 'gpio_info' for use in cmd_gpio
Changes in V4:
- update code as per Mike Frysinger's review comments
- rewrite gpio_info, aka gpio_status
Changes in V5:
- NUL-terminate the name string in gpio_request
arch/arm/include/asm/arch-tegra2/gpio.h | 250 +++++++++++++++++++++++++++++-- arch/arm/include/asm/gpio.h | 38 +++++ drivers/gpio/Makefile | 1 + drivers/gpio/tegra2_gpio.c | 255 +++++++++++++++++++++++++++++++ 4 files changed, 534 insertions(+), 10 deletions(-) create mode 100644 arch/arm/include/asm/gpio.h create mode 100644 drivers/gpio/tegra2_gpio.c
arch/arm/include/asm/arch-tegra2/gpio.h +240 -10
@@ -23,11 +23,13 @@#define _TEGRA2_GPIO_H_/* -* The Tegra 2x GPIO controller has 222 GPIOs arranged in 8 banks of 4 ports, +* The Tegra 2x GPIO controller has 224 GPIOs arranged in 7 banks of 4 ports, * each with 8 GPIOs. */ -#define TEGRA_GPIO_PORTS 4/* The number of ports per bank */ -#define TEGRA_GPIO_BANKS 8/* The number of banks */ +#define TEGRA_GPIO_PORTS 4/* number of ports per bank */ +#define TEGRA_GPIO_BANKS 7/* number of banks */ +#define MAX_NUM_GPIOS (TEGRA_GPIO_PORTS * TEGRA_GPIO_BANKS * 8) +#define GPIO_NAME_SIZE 20/* gpio_request max label len */ /* GPIO Controller registers for a single bank */ struct gpio_ctlr_bank {
@@ -45,15 +47,243 @@ struct gpio_ctlr {struct gpio_ctlr_bank gpio_bank[TEGRA_GPIO_BANKS ]; }; -#define GPIO_BANK (x) ((x) >> 5) -#define GPIO_PORT (x) (((x) >> 3) & 0x3) -#define GPIO_BIT (x) ((x) & 0x7) +#define GPIO_BANK (x) ((x) >> 5) +#define GPIO_PORT (x) (((x) >> 3) & 0x3) +#define GPIO_FULLPORT (x) ((x) >> 3) +#define GPIO_BIT (x) ((x) & 0x7) + +enum gpio_pin { +GPIO_PA0 =0 ,/* pin 0 */ +GPIO_PA1 , +GPIO_PA2 , +GPIO_PA3 , +GPIO_PA4 , +GPIO_PA5 , +GPIO_PA6 , +GPIO_PA7 , +GPIO_PB0 ,/* pin 8 */ +GPIO_PB1 , +GPIO_PB2 , +GPIO_PB3 , +GPIO_PB4 , +GPIO_PB5 , +GPIO_PB6 , +GPIO_PB7 , +GPIO_PC0 ,/* pin 16 */ +GPIO_PC1 , +GPIO_PC2 , +GPIO_PC3 , +GPIO_PC4 , +GPIO_PC5 , +GPIO_PC6 , +GPIO_PC7 , +GPIO_PD0 ,/* pin 24 */ +GPIO_PD1 , +GPIO_PD2 , +GPIO_PD3 , +GPIO_PD4 , +GPIO_PD5 , +GPIO_PD6 , +GPIO_PD7 , +GPIO_PE0 ,/* pin 32 */ +GPIO_PE1 , +GPIO_PE2 , +GPIO_PE3 , +GPIO_PE4 , +GPIO_PE5 , +GPIO_PE6 , +GPIO_PE7 , +GPIO_PF0 ,/* pin 40 */ +GPIO_PF1 , +GPIO_PF2 , +GPIO_PF3 , +GPIO_PF4 , +GPIO_PF5 , +GPIO_PF6 , +GPIO_PF7 , +GPIO_PG0 ,/* pin 48 */ +GPIO_PG1 , +GPIO_PG2 , +GPIO_PG3 , +GPIO_PG4 , +GPIO_PG5 , +GPIO_PG6 , +GPIO_PG7 , +GPIO_PH0 ,/* pin 56 */ +GPIO_PH1 , +GPIO_PH2 , +GPIO_PH3 , +GPIO_PH4 , +GPIO_PH5 , +GPIO_PH6 , +GPIO_PH7 , +GPIO_PI0 ,/* pin 64 */ +GPIO_PI1 , +GPIO_PI2 , +GPIO_PI3 , +GPIO_PI4 , +GPIO_PI5 , +GPIO_PI6 , +GPIO_PI7 , +GPIO_PJ0 ,/* pin 72 */ +GPIO_PJ1 , +GPIO_PJ2 , +GPIO_PJ3 , +GPIO_PJ4 , +GPIO_PJ5 , +GPIO_PJ6 , +GPIO_PJ7 , +GPIO_PK0 ,/* pin 80 */ +GPIO_PK1 , +GPIO_PK2 , +GPIO_PK3 , +GPIO_PK4 , +GPIO_PK5 , +GPIO_PK6 , +GPIO_PK7 , +GPIO_PL0 ,/* pin 88 */ +GPIO_PL1 , +GPIO_PL2 , +GPIO_PL3 , +GPIO_PL4 , +GPIO_PL5 , +GPIO_PL6 , +GPIO_PL7 , +GPIO_PM0 ,/* pin 96 */ +GPIO_PM1 , +GPIO_PM2 , +GPIO_PM3 , +GPIO_PM4 , +GPIO_PM5 , +GPIO_PM6 , +GPIO_PM7 , +GPIO_PN0 ,/* pin 104 */ +GPIO_PN1 , +GPIO_PN2 , +GPIO_PN3 , +GPIO_PN4 , +GPIO_PN5 , +GPIO_PN6 , +GPIO_PN7 , +GPIO_PO0 ,/* pin 112 */ +GPIO_PO1 , +GPIO_PO2 , +GPIO_PO3 , +GPIO_PO4 , +GPIO_PO5 , +GPIO_PO6 , +GPIO_PO7 , +GPIO_PP0 ,/* pin 120 */ +GPIO_PP1 , +GPIO_PP2 , +GPIO_PP3 , +GPIO_PP4 , +GPIO_PP5 , +GPIO_PP6 , +GPIO_PP7 , +GPIO_PQ0 ,/* pin 128 */ +GPIO_PQ1 , +GPIO_PQ2 , +GPIO_PQ3 , +GPIO_PQ4 , +GPIO_PQ5 , +GPIO_PQ6 , +GPIO_PQ7 , +GPIO_PR0 ,/* pin 136 */ +GPIO_PR1 , +GPIO_PR2 , +GPIO_PR3 , +GPIO_PR4 , +GPIO_PR5 , +GPIO_PR6 , +GPIO_PR7 , +GPIO_PS0 ,/* pin 144 */ +GPIO_PS1 , +GPIO_PS2 , +GPIO_PS3 , +GPIO_PS4 , +GPIO_PS5 , +GPIO_PS6 , +GPIO_PS7 , +GPIO_PT0 ,/* pin 152 */ +GPIO_PT1 , +GPIO_PT2 , +GPIO_PT3 , +GPIO_PT4 , +GPIO_PT5 , +GPIO_PT6 , +GPIO_PT7 , +GPIO_PU0 ,/* pin 160 */ +GPIO_PU1 , +GPIO_PU2 , +GPIO_PU3 , +GPIO_PU4 , +GPIO_PU5 , +GPIO_PU6 , +GPIO_PU7 , +GPIO_PV0 ,/* pin 168 */ +GPIO_PV1 , +GPIO_PV2 , +GPIO_PV3 , +GPIO_PV4 , +GPIO_PV5 , +GPIO_PV6 , +GPIO_PV7 , +GPIO_PW0 ,/* pin 176 */ +GPIO_PW1 , +GPIO_PW2 , +GPIO_PW3 , +GPIO_PW4 , +GPIO_PW5 , +GPIO_PW6 , +GPIO_PW7 , +GPIO_PX0 ,/* pin 184 */ +GPIO_PX1 , +GPIO_PX2 , +GPIO_PX3 , +GPIO_PX4 , +GPIO_PX5 , +GPIO_PX6 , +GPIO_PX7 , +GPIO_PY0 ,/* pin 192 */ +GPIO_PY1 , +GPIO_PY2 , +GPIO_PY3 , +GPIO_PY4 , +GPIO_PY5 , +GPIO_PY6 , +GPIO_PY7 , +GPIO_PZ0 ,/* pin 200 */ +GPIO_PZ1 , +GPIO_PZ2 , +GPIO_PZ3 , +GPIO_PZ4 , +GPIO_PZ5 , +GPIO_PZ6 , +GPIO_PZ7 , +GPIO_PAA0 ,/* pin 208 */ +GPIO_PAA1 , +GPIO_PAA2 , +GPIO_PAA3 , +GPIO_PAA4 , +GPIO_PAA5 , +GPIO_PAA6 , +GPIO_PAA7 , +GPIO_PBB0 ,/* pin 216 */ +GPIO_PBB1 , +GPIO_PBB2 , +GPIO_PBB3 , +GPIO_PBB4 , +GPIO_PBB5 , +GPIO_PBB6 , +GPIO_PBB7 ,/* pin 223 */ +};/* -* GPIO_PI3 = Port I = 8, bit = 3. -* Seaboard: used for UART/SPI selection -* Harmony: not used +* Tegra2-specific GPIO API */ -#define GPIO_PI3 ((8 << 3) | 3) +void gpio_info (void ); + +#define gpio_status () gpio_info()#endif /* TEGRA2_GPIO_H_ */
arch/arm/include/asm/gpio.h new file +38 -0
@@ -0,0 +1,38 @@ +/* +* Copyright (c) 2011, NVIDIA Corp. All rights reserved. +* See file CREDITS for list of people who contributed to this +* project. +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, +* MA 02111-1307 USA +*/ + +#ifndef _GPIO_H_ +#define _GPIO_H_ + +#include <asm/arch/gpio.h> +/* +* Generic GPIO API +*/ + +int gpio_request (int gp,const char *label); +void gpio_free (int gp); +void gpio_toggle_value (int gp); +int gpio_direction_input (int gp); +int gpio_direction_output (int gp,int value); +int gpio_get_value (int gp); +void gpio_set_value (int gp,int value); + +#endif /* _GPIO_H_ */
drivers/gpio/Makefile +1 -0
@@ -31,6 +31,7 @@ COBJS-$(CONFIG_MARVELL_MFP) += mvmfp.o COBJS-$(CONFIG_MXC_GPIO) += mxc_gpio.o COBJS-$(CONFIG_PCA953X) += pca953x.o COBJS-$(CONFIG_S5P) += s5p_gpio.o +COBJS-$(CONFIG_TEGRA2_GPIO) += tegra2_gpio.o COBJS := $(COBJS-y) SRCS := $(COBJS:.o=.c)
drivers/gpio/tegra2_gpio.c new file +255 -0
255 lines not on this page · raw message
Signature · 1 line
1.7.5.4
PATCH v5 1/2 GPIO: Tegra2: add GPIO driver for Tegra2
Quoted 16 lines · Tom Warren
Signed-off-by Tom Warren <[email protected]>---
Changes in V2:
? ? ? ?- use 'gpio_pin' enum ingpio.h(Simon Glass review request) ? ? ? ?- change 'GPIO_PORT8' to 'GPIO_FULLPORT' (Simon Glass request) ? ? ? ?- change 'offset' to 'pin' globally
Changes in V3:
? ? ? ?- use commoncmd_gpio; remove redundant cmd processing code ? ? ? ?- addgpio_request,gpio_freeandgpio_toggle
? ? ? ?- alias 'gpio_status' to 'gpio_info' for use incmd_gpioChanges in V4:
? ? ? ?- update code as per Mike Frysinger's review comments ? ? ? ?- rewritegpio_info, akagpio_status
Changes in V5:
? ? ? ?- NUL-terminate the name string ingpio_request
Quoted 8 lines
?arch/arm/include/asm/arch-tegra2/gpio.h | ?250 +++++++++++++++++++++++++++++-- ?arch/arm/include/asm/gpio.h ? ? ? ? ? ? | ? 38 +++++ ?drivers/gpio/Makefile ? ? ? ? ? ? ? ? ? | ? ?1 + ?drivers/gpio/tegra2_gpio.c ? ? ? ? ? ? ?| ?255 +++++++++++++++++++++++++++++++?4 files changed, 534 insertions(+), 10 deletions(-) ?create mode 100644
arch/arm/include/asm/gpio.h?create mode 100644drivers/gpio/tegra2_gpio.c
<snip>
Has this patch been accepted? or is there anymore feedback?
Mike gave it an 'otherwise, looks fine' prior to the ASCIIZ fix in V5.
Thanks,
Tom
PATCH v5 1/2 GPIO: Tegra2: add GPIO driver for Tegra2
Hi Tom,
Le 24/06/2011 19:58, Tom Warren a ?crit :
Quoted 25 lines · Tom Warren
Quoted 16 lines
Signed-off-by Tom Warren<[email protected]>---
Changes in V2:
- use 'gpio_pin' enum ingpio.h(Simon Glass review request)
- change 'GPIO_PORT8' to 'GPIO_FULLPORT' (Simon Glass request)
- change 'offset' to 'pin' globally
Changes in V3:
- use commoncmd_gpio; remove redundant cmd processing code
- addgpio_request,gpio_freeandgpio_toggle
- alias 'gpio_status' to 'gpio_info' for use incmd_gpio
Changes in V4:
- update code as per Mike Frysinger's review comments
- rewritegpio_info, akagpio_status
Changes in V5:
- NUL-terminate the name string ingpio_requestQuoted 8 lines
arch/arm/include/asm/arch-tegra2/gpio.h | 250 +++++++++++++++++++++++++++++-- arch/arm/include/asm/gpio.h | 38 +++++ drivers/gpio/Makefile | 1 + drivers/gpio/tegra2_gpio.c | 255 +++++++++++++++++++++++++++++++ 4 files changed, 534 insertions(+), 10 deletions(-)create mode 100644
arch/arm/include/asm/gpio.h
create mode 100644drivers/gpio/tegra2_gpio.c
Quoted 4 lines
<snip>
Has this patch been accepted? or is there anymore feedback?Mike gave it an 'otherwise, looks fine' prior to the ASCIIZ fix in V5.
Seems like no other comments have been made, so:
Applied to u-boot-arm/next, to be moved to master after 2011-06 release.
Quoted 3 lines
Thanks,
Tom
Amicalement,
Signature · 1 line
Albert.
PATCH v5 2/2 arm: Tegra2: GPIO: enable GPIO for Tegra2 boards
In reply to Tom Warren---
Changes in V2:
- enable GPIO for all boards (tegra2-common.h)
Changes in V3:
- enable use of common cmd_gpio
include/configs/tegra2-common.h | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
include/configs/tegra2-common.h +2 -0
@@ -160,4 +160,6 @@ CONFIG_SYS_INIT_RAM_SIZE - \ GENERATED_GBL_DATA_SIZE) +#define CONFIG_TEGRA2_GPIO +#define CONFIG_CMD_GPIO #endif /* __TEGRA2_COMMON_H */
Signature · 1 line
1.7.5.4