[AVR32] Introduce at32_reserve_pin()
[pandora-kernel.git] / arch / avr32 / mach-at32ap / pio.c
index c3f596c..9ba5654 100644 (file)
@@ -135,7 +135,28 @@ fail:
        dump_stack();
 }
 
-/*--------------------------------------------------------------------------*/
+/* Reserve a pin, preventing anyone else from changing its configuration. */
+void __init at32_reserve_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);
+               goto fail;
+       }
+
+       if (unlikely(test_and_set_bit(pin_index, &pio->pinmux_mask))) {
+               printk("%s: pin %u is busy\n", pio->name, pin_index);
+               goto fail;
+       }
+
+       return;
+
+fail:
+       dump_stack();
+}
 
 /*--------------------------------------------------------------------------*/