mirror of https://gitee.com/openkylin/linux.git
pinctrl: vt8500: Ensure value reg is updated when setting direction
Current code only touches the direction register when setting direction to output, which breaks logic like echo high > /sys/class/gpio/gpio0/direction which is expected to also set the value. This patch also adds a call to update the value register when setting direction to output. Signed-off-by: Alexey Charkov <alchark@gmail.com> Acked-by: Tony Prisk <linux@prisktech.co.nz> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
4b660a7f5c
commit
7ea456436f
|
@ -523,17 +523,6 @@ static int wmt_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
|
|||
return GPIOF_DIR_IN;
|
||||
}
|
||||
|
||||
static int wmt_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
return pinctrl_gpio_direction_input(chip->base + offset);
|
||||
}
|
||||
|
||||
static int wmt_gpio_direction_output(struct gpio_chip *chip, unsigned offset,
|
||||
int value)
|
||||
{
|
||||
return pinctrl_gpio_direction_output(chip->base + offset);
|
||||
}
|
||||
|
||||
static int wmt_gpio_get_value(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
struct wmt_pinctrl_data *data = dev_get_drvdata(chip->dev);
|
||||
|
@ -568,6 +557,18 @@ static void wmt_gpio_set_value(struct gpio_chip *chip, unsigned offset,
|
|||
wmt_clearbits(data, reg_data_out, BIT(bit));
|
||||
}
|
||||
|
||||
static int wmt_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
return pinctrl_gpio_direction_input(chip->base + offset);
|
||||
}
|
||||
|
||||
static int wmt_gpio_direction_output(struct gpio_chip *chip, unsigned offset,
|
||||
int value)
|
||||
{
|
||||
wmt_gpio_set_value(chip, offset, value);
|
||||
return pinctrl_gpio_direction_output(chip->base + offset);
|
||||
}
|
||||
|
||||
static struct gpio_chip wmt_gpio_chip = {
|
||||
.label = "gpio-wmt",
|
||||
.owner = THIS_MODULE,
|
||||
|
|
Loading…
Reference in New Issue