The gpiolib code is always returning 0 when reading pad values if the pads are configured as output. Using DR registers instead of PSR is fixing that. Signed-off-by: Arnaud Patard Index: linux-2.6-submit/arch/arm/plat-mxc/gpio.c =================================================================== --- linux-2.6-submit.orig/arch/arm/plat-mxc/gpio.c 2010-11-24 18:00:47.000000000 +0100 +++ linux-2.6-submit/arch/arm/plat-mxc/gpio.c 2010-11-24 18:06:54.000000000 +0100 @@ -276,6 +276,10 @@ { struct mxc_gpio_port *port = container_of(chip, struct mxc_gpio_port, chip); + u32 l = __raw_readl(port->base + GPIO_GDIR); + + if (cpu_is_mx51() && (l & (1 << offset))) + return (__raw_readl(port->base + GPIO_DR) >> offset) & 1; return (__raw_readl(port->base + GPIO_PSR) >> offset) & 1; }