Re: [PATCH RFT] gpio: zevio: Get correct gpio output value

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

IIRC I tested that and input and output are independant of each other.
If you set a pin as output and write a 1 into the output register, but you connect the pin to ground physically output is "1" and input "0".
Which behaviour is the correct one for gpio_get?

Bye,
Fabian

Am Montag, 7. April 2014, 14:34:52 schrieb Axel Lin:
> Read gpio output value from ZEVIO_GPIO_OUTPUT.
> The spin_lock is required to ensure the direction is not changed before reading
> input/output value.
> 
> Signed-off-by: Axel Lin <axel.lin@xxxxxxxxxx>
> ---
> Hi Fabian,
> The document only mentions:
>   +10 (R/W): Direction (set bit to 0 for output, 1 for input)
>   +14 (R/W): GPIO output bit
>   +18 (R): Reads GPIO input bit.
> So I'm not sure if reading ZEVIO_GPIO_INPUT returns correct status when the
> direction is output. So I think this needs test.
> 
> Regards,
> Axel
>  drivers/gpio/gpio-zevio.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpio/gpio-zevio.c b/drivers/gpio/gpio-zevio.c
> index 9bf5034..29b0150 100644
> --- a/drivers/gpio/gpio-zevio.c
> +++ b/drivers/gpio/gpio-zevio.c
> @@ -81,9 +81,15 @@ static inline void zevio_gpio_port_set(struct zevio_gpio *c, unsigned pin,
>  static int zevio_gpio_get(struct gpio_chip *chip, unsigned pin)
>  {
>  	struct zevio_gpio *controller = to_zevio_gpio(chip);
> +	u32 val, dir;
>  
> -	/* Only reading allowed, so no spinlock needed */
> -	u32 val = zevio_gpio_port_get(controller, pin, ZEVIO_GPIO_INPUT);
> +	spin_lock(&controller->lock);
> +	dir = zevio_gpio_port_get(controller, pin, ZEVIO_GPIO_DIRECTION);
> +	if (dir | BIT(ZEVIO_GPIO_BIT(pin)))
> +		val = zevio_gpio_port_get(controller, pin, ZEVIO_GPIO_INPUT);
> +	else
> +		val = zevio_gpio_port_get(controller, pin, ZEVIO_GPIO_OUTPUT);
> +	spin_unlock(&controller->lock);
>  
>  	return (val >> ZEVIO_GPIO_BIT(pin)) & 0x1;
>  }
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-gpio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux