diff options
| -rw-r--r-- | drivers/gpio/pl061.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpio/pl061.c b/drivers/gpio/pl061.c index cc3b5e0b595a..2196f318114c 100644 --- a/drivers/gpio/pl061.c +++ b/drivers/gpio/pl061.c | |||
| @@ -91,6 +91,12 @@ static int pl061_direction_output(struct gpio_chip *gc, unsigned offset, | |||
| 91 | gpiodir = readb(chip->base + GPIODIR); | 91 | gpiodir = readb(chip->base + GPIODIR); |
| 92 | gpiodir |= 1 << offset; | 92 | gpiodir |= 1 << offset; |
| 93 | writeb(gpiodir, chip->base + GPIODIR); | 93 | writeb(gpiodir, chip->base + GPIODIR); |
| 94 | |||
| 95 | /* | ||
| 96 | * gpio value is set again, because pl061 doesn't allow to set value of | ||
| 97 | * a gpio pin before configuring it in OUT mode. | ||
| 98 | */ | ||
| 99 | writeb(!!value << offset, chip->base + (1 << (offset + 2))); | ||
| 94 | spin_unlock_irqrestore(&chip->lock, flags); | 100 | spin_unlock_irqrestore(&chip->lock, flags); |
| 95 | 101 | ||
| 96 | return 0; | 102 | return 0; |
