From 8a45f16b78071074032fe3ef8ab248082fdb77a2 Mon Sep 17 00:00:00 2001 From: Haavard Skinnemoen Date: Fri, 19 Sep 2008 17:13:28 +0200 Subject: [PATCH] --- yaml --- r: 113209 b: refs/heads/master c: ece2678c62ce13ef11a8b43526ccc5db8d711ed3 h: refs/heads/master i: 113207: a65283cd66e71d60c2f222f44f3ad87d50154d65 v: v3 --- [refs] | 2 +- .../avr32/mach-at32ap/include/mach/portmux.h | 1 + trunk/arch/avr32/mach-at32ap/pio.c | 19 +++++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 0c273161241a..4a8acca673db 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 96706600de83966812b01a3cb310a13da2a1a4e9 +refs/heads/master: ece2678c62ce13ef11a8b43526ccc5db8d711ed3 diff --git a/trunk/arch/avr32/mach-at32ap/include/mach/portmux.h b/trunk/arch/avr32/mach-at32ap/include/mach/portmux.h index b1abe6b4e4ef..4bbf99ec2c43 100644 --- a/trunk/arch/avr32/mach-at32ap/include/mach/portmux.h +++ b/trunk/arch/avr32/mach-at32ap/include/mach/portmux.h @@ -24,6 +24,7 @@ void at32_select_periph(unsigned int pin, unsigned int periph, unsigned long flags); void at32_select_gpio(unsigned int pin, unsigned long flags); +void at32_deselect_pin(unsigned int pin); void at32_reserve_pin(unsigned int pin); #endif /* __ASM_ARCH_PORTMUX_H__ */ diff --git a/trunk/arch/avr32/mach-at32ap/pio.c b/trunk/arch/avr32/mach-at32ap/pio.c index 405ee6bad4ce..90ef538ae547 100644 --- a/trunk/arch/avr32/mach-at32ap/pio.c +++ b/trunk/arch/avr32/mach-at32ap/pio.c @@ -134,6 +134,25 @@ void __init at32_select_gpio(unsigned int pin, unsigned long flags) dump_stack(); } +/* + * Undo a previous pin reservation. Will not affect the hardware + * configuration. + */ +void at32_deselect_pin(unsigned int pin) +{ + struct pio_device *pio; + unsigned int pin_index = pin & 0x1f; + + pio = gpio_to_pio(pin); + if (unlikely(!pio)) { + printk("pio: invalid pin %u\n", pin); + dump_stack(); + return; + } + + clear_bit(pin_index, &pio->pinmux_mask); +} + /* Reserve a pin, preventing anyone else from changing its configuration. */ void __init at32_reserve_pin(unsigned int pin) {