diff options
Diffstat (limited to 'arch/arm/mach-pxa/generic.c')
-rw-r--r-- | arch/arm/mach-pxa/generic.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/arch/arm/mach-pxa/generic.c b/arch/arm/mach-pxa/generic.c index 2263a84844a1..1c34946ee16e 100644 --- a/arch/arm/mach-pxa/generic.c +++ b/arch/arm/mach-pxa/generic.c | |||
@@ -105,6 +105,44 @@ int pxa_gpio_mode(int gpio_mode) | |||
105 | 105 | ||
106 | EXPORT_SYMBOL(pxa_gpio_mode); | 106 | EXPORT_SYMBOL(pxa_gpio_mode); |
107 | 107 | ||
108 | int gpio_direction_input(unsigned gpio) | ||
109 | { | ||
110 | unsigned long flags; | ||
111 | u32 mask; | ||
112 | |||
113 | if (gpio > pxa_last_gpio) | ||
114 | return -EINVAL; | ||
115 | |||
116 | mask = GPIO_bit(gpio); | ||
117 | local_irq_save(flags); | ||
118 | GPDR(gpio) &= ~mask; | ||
119 | local_irq_restore(flags); | ||
120 | |||
121 | return 0; | ||
122 | } | ||
123 | EXPORT_SYMBOL(gpio_direction_input); | ||
124 | |||
125 | int gpio_direction_output(unsigned gpio, int value) | ||
126 | { | ||
127 | unsigned long flags; | ||
128 | u32 mask; | ||
129 | |||
130 | if (gpio > pxa_last_gpio) | ||
131 | return -EINVAL; | ||
132 | |||
133 | mask = GPIO_bit(gpio); | ||
134 | local_irq_save(flags); | ||
135 | if (value) | ||
136 | GPSR(gpio) = mask; | ||
137 | else | ||
138 | GPCR(gpio) = mask; | ||
139 | GPDR(gpio) |= mask; | ||
140 | local_irq_restore(flags); | ||
141 | |||
142 | return 0; | ||
143 | } | ||
144 | EXPORT_SYMBOL(gpio_direction_output); | ||
145 | |||
108 | /* | 146 | /* |
109 | * Return GPIO level | 147 | * Return GPIO level |
110 | */ | 148 | */ |