diff options
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/mach-at91/gpio.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-sa1100/generic.c | 3 |
2 files changed, 4 insertions, 2 deletions
diff --git a/arch/arm/mach-at91/gpio.c b/arch/arm/mach-at91/gpio.c index 44211a0af19a..ba4a1bb3ee40 100644 --- a/arch/arm/mach-at91/gpio.c +++ b/arch/arm/mach-at91/gpio.c | |||
@@ -215,13 +215,14 @@ int gpio_direction_input(unsigned pin) | |||
215 | } | 215 | } |
216 | EXPORT_SYMBOL(gpio_direction_input); | 216 | EXPORT_SYMBOL(gpio_direction_input); |
217 | 217 | ||
218 | int gpio_direction_output(unsigned pin) | 218 | int gpio_direction_output(unsigned pin, int value) |
219 | { | 219 | { |
220 | void __iomem *pio = pin_to_controller(pin); | 220 | void __iomem *pio = pin_to_controller(pin); |
221 | unsigned mask = pin_to_mask(pin); | 221 | unsigned mask = pin_to_mask(pin); |
222 | 222 | ||
223 | if (!pio || !(__raw_readl(pio + PIO_PSR) & mask)) | 223 | if (!pio || !(__raw_readl(pio + PIO_PSR) & mask)) |
224 | return -EINVAL; | 224 | return -EINVAL; |
225 | __raw_writel(mask, pio + (value ? PIO_SODR : PIO_CODR)); | ||
225 | __raw_writel(mask, pio + PIO_OER); | 226 | __raw_writel(mask, pio + PIO_OER); |
226 | return 0; | 227 | return 0; |
227 | } | 228 | } |
diff --git a/arch/arm/mach-sa1100/generic.c b/arch/arm/mach-sa1100/generic.c index 192a5a26cf2b..edc349e5fcf7 100644 --- a/arch/arm/mach-sa1100/generic.c +++ b/arch/arm/mach-sa1100/generic.c | |||
@@ -153,7 +153,7 @@ int gpio_direction_input(unsigned gpio) | |||
153 | 153 | ||
154 | EXPORT_SYMBOL(gpio_direction_input); | 154 | EXPORT_SYMBOL(gpio_direction_input); |
155 | 155 | ||
156 | int gpio_direction_output(unsigned gpio) | 156 | int gpio_direction_output(unsigned gpio, int value) |
157 | { | 157 | { |
158 | unsigned long flags; | 158 | unsigned long flags; |
159 | 159 | ||
@@ -161,6 +161,7 @@ int gpio_direction_output(unsigned gpio) | |||
161 | return -EINVAL; | 161 | return -EINVAL; |
162 | 162 | ||
163 | local_irq_save(flags); | 163 | local_irq_save(flags); |
164 | gpio_set_value(gpio, value); | ||
164 | GPDR |= GPIO_GPIO(gpio); | 165 | GPDR |= GPIO_GPIO(gpio); |
165 | local_irq_restore(flags); | 166 | local_irq_restore(flags); |
166 | return 0; | 167 | return 0; |