diff options
Diffstat (limited to 'sound/aoa')
-rw-r--r-- | sound/aoa/core/snd-aoa-gpio-feature.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/sound/aoa/core/snd-aoa-gpio-feature.c b/sound/aoa/core/snd-aoa-gpio-feature.c index 2c6eb7784cc9..bab97547a052 100644 --- a/sound/aoa/core/snd-aoa-gpio-feature.c +++ b/sound/aoa/core/snd-aoa-gpio-feature.c | |||
@@ -207,6 +207,17 @@ static void ftr_handle_notify(void *data) | |||
207 | mutex_unlock(¬if->mutex); | 207 | mutex_unlock(¬if->mutex); |
208 | } | 208 | } |
209 | 209 | ||
210 | static void gpio_enable_dual_edge(int gpio) | ||
211 | { | ||
212 | int v; | ||
213 | |||
214 | if (gpio == -1) | ||
215 | return; | ||
216 | v = pmac_call_feature(PMAC_FTR_READ_GPIO, NULL, gpio, 0); | ||
217 | v |= 0x80; /* enable dual edge */ | ||
218 | pmac_call_feature(PMAC_FTR_WRITE_GPIO, NULL, gpio, v); | ||
219 | } | ||
220 | |||
210 | static void ftr_gpio_init(struct gpio_runtime *rt) | 221 | static void ftr_gpio_init(struct gpio_runtime *rt) |
211 | { | 222 | { |
212 | get_gpio("headphone-mute", NULL, | 223 | get_gpio("headphone-mute", NULL, |
@@ -234,6 +245,10 @@ static void ftr_gpio_init(struct gpio_runtime *rt) | |||
234 | &linein_detect_gpio, | 245 | &linein_detect_gpio, |
235 | &linein_detect_gpio_activestate); | 246 | &linein_detect_gpio_activestate); |
236 | 247 | ||
248 | gpio_enable_dual_edge(headphone_detect_gpio); | ||
249 | gpio_enable_dual_edge(lineout_detect_gpio); | ||
250 | gpio_enable_dual_edge(linein_detect_gpio); | ||
251 | |||
237 | get_irq(headphone_detect_node, &headphone_detect_irq); | 252 | get_irq(headphone_detect_node, &headphone_detect_irq); |
238 | get_irq(lineout_detect_node, &lineout_detect_irq); | 253 | get_irq(lineout_detect_node, &lineout_detect_irq); |
239 | get_irq(linein_detect_node, &linein_detect_irq); | 254 | get_irq(linein_detect_node, &linein_detect_irq); |