aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/avr32/mach-at32ap/include/mach/portmux.h1
-rw-r--r--arch/avr32/mach-at32ap/pio.c19
2 files changed, 20 insertions, 0 deletions
diff --git a/arch/avr32/mach-at32ap/include/mach/portmux.h b/arch/avr32/mach-at32ap/include/mach/portmux.h
index b1abe6b4e4ef..4bbf99ec2c43 100644
--- a/arch/avr32/mach-at32ap/include/mach/portmux.h
+++ b/arch/avr32/mach-at32ap/include/mach/portmux.h
@@ -24,6 +24,7 @@
24void at32_select_periph(unsigned int pin, unsigned int periph, 24void at32_select_periph(unsigned int pin, unsigned int periph,
25 unsigned long flags); 25 unsigned long flags);
26void at32_select_gpio(unsigned int pin, unsigned long flags); 26void at32_select_gpio(unsigned int pin, unsigned long flags);
27void at32_deselect_pin(unsigned int pin);
27void at32_reserve_pin(unsigned int pin); 28void at32_reserve_pin(unsigned int pin);
28 29
29#endif /* __ASM_ARCH_PORTMUX_H__ */ 30#endif /* __ASM_ARCH_PORTMUX_H__ */
diff --git a/arch/avr32/mach-at32ap/pio.c b/arch/avr32/mach-at32ap/pio.c
index 405ee6bad4ce..90ef538ae547 100644
--- a/arch/avr32/mach-at32ap/pio.c
+++ b/arch/avr32/mach-at32ap/pio.c
@@ -134,6 +134,25 @@ fail:
134 dump_stack(); 134 dump_stack();
135} 135}
136 136
137/*
138 * Undo a previous pin reservation. Will not affect the hardware
139 * configuration.
140 */
141void at32_deselect_pin(unsigned int pin)
142{
143 struct pio_device *pio;
144 unsigned int pin_index = pin & 0x1f;
145
146 pio = gpio_to_pio(pin);
147 if (unlikely(!pio)) {
148 printk("pio: invalid pin %u\n", pin);
149 dump_stack();
150 return;
151 }
152
153 clear_bit(pin_index, &pio->pinmux_mask);
154}
155
137/* Reserve a pin, preventing anyone else from changing its configuration. */ 156/* Reserve a pin, preventing anyone else from changing its configuration. */
138void __init at32_reserve_pin(unsigned int pin) 157void __init at32_reserve_pin(unsigned int pin)
139{ 158{