Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pinctrl: bcm2835: Fix initial value for direction_output

Currently the provided initial value for bcm2835_gpio_direction_output
has no effect. So fix this issue by changing the value before
changing the GPIO direction. As a result we need to move the function below
bcm2835_gpio_set.

Suggested-by: Martin Sperl <kernel@martin.sperl.org>
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Acked-by: Eric Anholt <eric@anholt.net>
Acked-by: Stephen Warren <swarren@wwwdotorg.org>
Fixes: e1b2dc70cd5b ("pinctrl: add bcm2835 driver")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

authored by

Stefan Wahren and committed by
Linus Walleij
4c02cba1 99a735b3

+7 -6
+7 -6
drivers/pinctrl/bcm/pinctrl-bcm2835.c
··· 342 342 return bcm2835_gpio_get_bit(pc, GPLEV0, offset); 343 343 } 344 344 345 - static int bcm2835_gpio_direction_output(struct gpio_chip *chip, 346 - unsigned offset, int value) 347 - { 348 - return pinctrl_gpio_direction_output(chip->base + offset); 349 - } 350 - 351 345 static void bcm2835_gpio_set(struct gpio_chip *chip, unsigned offset, int value) 352 346 { 353 347 struct bcm2835_pinctrl *pc = dev_get_drvdata(chip->dev); 354 348 355 349 bcm2835_gpio_set_bit(pc, value ? GPSET0 : GPCLR0, offset); 350 + } 351 + 352 + static int bcm2835_gpio_direction_output(struct gpio_chip *chip, 353 + unsigned offset, int value) 354 + { 355 + bcm2835_gpio_set(chip, offset, value); 356 + return pinctrl_gpio_direction_output(chip->base + offset); 356 357 } 357 358 358 359 static int bcm2835_gpio_to_irq(struct gpio_chip *chip, unsigned offset)