]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/arm/plat-mxc/iomux-mx1-mx2.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
[linux-2.6-omap-h63xx.git] / arch / arm / plat-mxc / iomux-mx1-mx2.c
index 1985571eb40cf491f831e37f19b814974962d33a..df6f18395686bcfe73d9b3cc40b21bac900aaad3 100644 (file)
@@ -30,9 +30,9 @@
 #include <linux/string.h>
 #include <linux/gpio.h>
 
-#include <asm/hardware.h>
+#include <mach/hardware.h>
 #include <asm/mach/map.h>
-#include <asm/arch/iomux-mx1-mx2.h>
+#include <mach/iomux-mx1-mx2.h>
 
 void mxc_gpio_mode(int gpio_mode)
 {
@@ -110,12 +110,13 @@ void mxc_gpio_mode(int gpio_mode)
 EXPORT_SYMBOL(mxc_gpio_mode);
 
 int mxc_gpio_setup_multiple_pins(const int *pin_list, unsigned count,
-                               int alloc_mode, const char *label)
+               const char *label)
 {
        const int *p = pin_list;
        int i;
        unsigned gpio;
        unsigned mode;
+       int ret = -EINVAL;
 
        for (i = 0; i < count; i++) {
                gpio = *p & (GPIO_PIN_MASK | GPIO_PORT_MASK);
@@ -124,33 +125,33 @@ int mxc_gpio_setup_multiple_pins(const int *pin_list, unsigned count,
                if (gpio >= (GPIO_PORT_MAX + 1) * 32)
                        goto setup_error;
 
-               if (alloc_mode & MXC_GPIO_ALLOC_MODE_RELEASE)
-                       gpio_free(gpio);
-               else if (!(alloc_mode & MXC_GPIO_ALLOC_MODE_NO_ALLOC))
-                       if (gpio_request(gpio, label)
-                          && !(alloc_mode & MXC_GPIO_ALLOC_MODE_TRY_ALLOC))
-                               goto setup_error;
+               ret = gpio_request(gpio, label);
+               if (ret)
+                       goto setup_error;
 
-               if (!(alloc_mode & (MXC_GPIO_ALLOC_MODE_ALLOC_ONLY |
-                                   MXC_GPIO_ALLOC_MODE_RELEASE)))
-                       mxc_gpio_mode(gpio | mode);
+               mxc_gpio_mode(gpio | mode);
 
                p++;
        }
        return 0;
 
 setup_error:
-       if (alloc_mode & (MXC_GPIO_ALLOC_MODE_NO_ALLOC |
-           MXC_GPIO_ALLOC_MODE_TRY_ALLOC))
-               return -EINVAL;
+       mxc_gpio_release_multiple_pins(pin_list, i);
+       return ret;
+}
+EXPORT_SYMBOL(mxc_gpio_setup_multiple_pins);
 
-       while (p != pin_list) {
-               p--;
-               gpio = *p & (GPIO_PIN_MASK | GPIO_PORT_MASK);
+void mxc_gpio_release_multiple_pins(const int *pin_list, int count)
+{
+       const int *p = pin_list;
+       int i;
+
+       for (i = 0; i < count; i++) {
+               unsigned gpio = *p & (GPIO_PIN_MASK | GPIO_PORT_MASK);
                gpio_free(gpio);
+               p++;
        }
 
-       return -EINVAL;
 }
-EXPORT_SYMBOL(mxc_gpio_setup_multiple_pins);
+EXPORT_SYMBOL(mxc_gpio_release_multiple_pins);