u-boot-2016/drivers/gpio
Stephen Warren 0c35e3a8b4 ARM: tegra: don't enable GPIOs until direction is set
Tegra's GPIO driver currently enables pins as GPIO as soon as they're
requested. This is not safe, since the desired direction and output value
are not yet known. This could cause a glitch on the output pins between
gpio_request() and gpio_direction_*(), depending on what values happen to
be in the GPIO controller's in/out and out-value registers vs. the final
desired configuration.

To solve this, defer enabling pins as GPIOs until some gpio_direction_*()
is invoked, and the desired configuration is explicitly programmed.

In theory this change could cause regressions, if code exists that claims
a GPIO, never explicitly sets a direction, and then gets/sets the GPIO
value based on that assumption. However, I've read through all the Tegra-
related board files and device drivers that touch GPIOs and I do not see
such buggy code anywhere.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Tom Warren <twarren@nvidia.com>
2015-10-02 11:05:01 -07:00
..
adi_gpio2.c blackfin: Move machine specific gpio_port_t structure back to blackfin arch folder. 2013-11-04 16:50:46 +08:00
altera_pio.c Add GPL-2.0+ SPDX-License-Identifier to source files 2013-07-24 09:44:38 -04:00
at91_gpio.c dm: core: Add dev_get_uclass_priv() to access uclass private data 2015-04-16 19:27:42 -06:00
axp_gpio.c sunxi: axp: Remove non driver-model support from the axp gpio code 2015-05-04 16:51:54 +02:00
bcm2835_gpio.c dm: core: Add dev_get_uclass_priv() to access uclass private data 2015-04-16 19:27:42 -06:00
da8xx_gpio.c Add GPL-2.0+ SPDX-License-Identifier to source files 2013-07-24 09:44:38 -04:00
db8500_gpio.c snowball: Add support for ux500 based snowball board 2012-09-01 14:58:19 +02:00
dwapb_gpio.c gpio: Add DW APB GPIO driver 2015-08-23 11:56:20 +02:00
gpio-uclass.c dm: gpio: Check a GPIO is valid before using it 2015-08-05 21:06:14 -06:00
hi6220_gpio.c dm: gpio: hi6220: Add a hi6220 GPIO driver model driver. 2015-08-12 20:47:58 -04:00
intel_ich6_gpio.c x86: gpio: Tidy up gpio_ich6_get_base() and callers 2015-08-26 07:54:15 -07:00
Kconfig rockchip: gpio: Add rockchip GPIO driver 2015-09-02 21:28:23 -06:00
kona_gpio.c gpio: kona: Add Kona gpio driver 2014-02-22 19:30:27 +01:00
kw_gpio.c gpio: make local functions static 2014-10-25 07:02:01 -04:00
lpc32xx_gpio.c gpio: lpc32xx: fix issues with port3 gpio 2015-09-11 17:15:34 -04:00
Makefile rockchip: gpio: Add rockchip GPIO driver 2015-09-02 21:28:23 -06:00
mpc83xx_gpio.c Add GPL-2.0+ SPDX-License-Identifier to source files 2013-07-24 09:44:38 -04:00
mvgpio.c Add GPL-2.0+ SPDX-License-Identifier to source files 2013-07-24 09:44:38 -04:00
mvgpio.h mvgpio: remove CONFIG_SHEEVA_88SV331xV5 dependency 2015-04-23 13:59:18 -04:00
mvmfp.c gpio: mvmfp: support newer MFP bit definitions 2015-04-23 13:59:18 -04:00
mxc_gpio.c imx: mxc_gpio: add support for imx7d SoC 2015-09-02 15:31:33 +02:00
mxs_gpio.c mxs_gpio: fix the handling in gpio_direction_output() 2013-11-13 10:09:09 +01:00
omap_gpio.c gpio: omap: Drop 'method' parameter 2015-08-12 20:48:06 -04:00
pca953x.c gpio: pca953x: Use ARRAY_SIZE instead of reinventing it 2013-08-16 13:45:15 -04:00
pca9698.c Add GPL-2.0+ SPDX-License-Identifier to source files 2013-07-24 09:44:38 -04:00
rk_gpio.c rockchip: gpio: Add rockchip GPIO driver 2015-09-02 21:28:23 -06:00
s3c2440_gpio.c gpio: s3c: Fix the GPIO driver 2015-05-06 17:00:58 +09:00
s5p_gpio.c dm: Use dev_get_addr() where possible 2015-08-31 07:57:26 -06:00
sandbox.c dm: core: Add dev_get_uclass_priv() to access uclass private data 2015-04-16 19:27:42 -06:00
sh_pfc.c gpio: sh-pfc: fix gpio input read 2015-08-31 17:26:03 +09:00
spear_gpio.c gpio: spear_gpio: Fix gpio_set_value() implementation 2014-07-04 21:37:29 +02:00
stm32_gpio.c gpio: stm32: add stm32f1 support 2015-05-28 08:18:24 -04:00
sunxi_gpio.c dm: Use dev_get_addr() where possible 2015-08-31 07:57:26 -06:00
sx151x.c Add support for SX151x SPI GPIO Expanders 2013-11-08 09:39:13 -05:00
tca642x.c gpio: tca642x: Add the tca642x gpio expander driver 2013-07-30 09:21:42 -04:00
tegra_gpio.c ARM: tegra: don't enable GPIOs until direction is set 2015-10-02 11:05:01 -07:00
vybrid_gpio.c of: clean up OF_CONTROL ifdef conditionals 2015-08-18 13:46:05 -04:00
xilinx_gpio.c Add GPL-2.0+ SPDX-License-Identifier to source files 2013-07-24 09:44:38 -04:00
zynq_gpio.c gpio: add Xilinx Zynq PS GPIO driver 2015-04-29 10:41:24 +02:00