[ARM] MX1/MX2: simplify mxc_gpio_setup_multiple_pins
authorSascha Hauer <s.hauer@pengutronix.de>
Tue, 4 Nov 2008 15:48:46 +0000 (16:48 +0100)
committerSascha Hauer <s.hauer@pengutronix.de>
Tue, 16 Dec 2008 13:46:14 +0000 (14:46 +0100)
mxc_gpio_setup_multiple_pins used to take several ALLOC_MODE flags. Most
of them are unused, so simplify the function by removing the flags. Also,
instead of using a confusing MXC_GPIO_ALLOC_MODE_RELEASE flag in a function
having alloc in its name, add a mxc_gpio_release_multiple_pins function.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
arch/arm/mach-mx2/mx27ads.c
arch/arm/mach-mx2/pcm038.c
arch/arm/plat-mxc/include/mach/iomux-mx1-mx2.h
arch/arm/plat-mxc/iomux-mx1-mx2.c

index 56e22d3ca075a7e6ae886b206a29bc6bcb507ebd..a06497674436e33c9be8b987e2858e6954949fe0 100644 (file)
@@ -68,15 +68,14 @@ static int mxc_uart0_pins[] = {
 static int uart_mxc_port0_init(struct platform_device *pdev)
 {
        return mxc_gpio_setup_multiple_pins(mxc_uart0_pins,
-                       ARRAY_SIZE(mxc_uart0_pins),
-                       MXC_GPIO_ALLOC_MODE_NORMAL, "UART0");
+                       ARRAY_SIZE(mxc_uart0_pins), "UART0");
 }
 
 static int uart_mxc_port0_exit(struct platform_device *pdev)
 {
-       return mxc_gpio_setup_multiple_pins(mxc_uart0_pins,
-                       ARRAY_SIZE(mxc_uart0_pins),
-                       MXC_GPIO_ALLOC_MODE_RELEASE, "UART0");
+       mxc_gpio_release_multiple_pins(mxc_uart0_pins,
+                       ARRAY_SIZE(mxc_uart0_pins));
+       return 0;
 }
 
 static int mxc_uart1_pins[] = {
@@ -89,15 +88,14 @@ static int mxc_uart1_pins[] = {
 static int uart_mxc_port1_init(struct platform_device *pdev)
 {
        return mxc_gpio_setup_multiple_pins(mxc_uart1_pins,
-                       ARRAY_SIZE(mxc_uart1_pins),
-                       MXC_GPIO_ALLOC_MODE_NORMAL, "UART1");
+                       ARRAY_SIZE(mxc_uart1_pins), "UART1");
 }
 
 static int uart_mxc_port1_exit(struct platform_device *pdev)
 {
-       return mxc_gpio_setup_multiple_pins(mxc_uart1_pins,
-                       ARRAY_SIZE(mxc_uart1_pins),
-                       MXC_GPIO_ALLOC_MODE_RELEASE, "UART1");
+       mxc_gpio_setup_release_pins(mxc_uart1_pins,
+                       ARRAY_SIZE(mxc_uart1_pins));
+       return 0;
 }
 
 static int mxc_uart2_pins[] = {
@@ -110,15 +108,14 @@ static int mxc_uart2_pins[] = {
 static int uart_mxc_port2_init(struct platform_device *pdev)
 {
        return mxc_gpio_setup_multiple_pins(mxc_uart2_pins,
-                       ARRAY_SIZE(mxc_uart2_pins),
-                       MXC_GPIO_ALLOC_MODE_NORMAL, "UART2");
+                       ARRAY_SIZE(mxc_uart2_pins), "UART2");
 }
 
 static int uart_mxc_port2_exit(struct platform_device *pdev)
 {
-       return mxc_gpio_setup_multiple_pins(mxc_uart2_pins,
-                       ARRAY_SIZE(mxc_uart2_pins),
-                       MXC_GPIO_ALLOC_MODE_RELEASE, "UART2");
+       mxc_gpio_release_multiple_pins(mxc_uart2_pins,
+                       ARRAY_SIZE(mxc_uart2_pins));
+       return 0;
 }
 
 static int mxc_uart3_pins[] = {
@@ -131,15 +128,13 @@ static int mxc_uart3_pins[] = {
 static int uart_mxc_port3_init(struct platform_device *pdev)
 {
        return mxc_gpio_setup_multiple_pins(mxc_uart3_pins,
-                       ARRAY_SIZE(mxc_uart3_pins),
-                       MXC_GPIO_ALLOC_MODE_NORMAL, "UART3");
+                       ARRAY_SIZE(mxc_uart3_pins), "UART3");
 }
 
 static int uart_mxc_port3_exit(struct platform_device *pdev)
 {
-       return mxc_gpio_setup_multiple_pins(mxc_uart3_pins,
-                       ARRAY_SIZE(mxc_uart3_pins),
-                       MXC_GPIO_ALLOC_MODE_RELEASE, "UART3");
+       mxc_gpio_release_multiple_pins(mxc_uart3_pins,
+                       ARRAY_SIZE(mxc_uart3_pins));
 }
 
 static int mxc_uart4_pins[] = {
@@ -152,15 +147,14 @@ static int mxc_uart4_pins[] = {
 static int uart_mxc_port4_init(struct platform_device *pdev)
 {
        return mxc_gpio_setup_multiple_pins(mxc_uart4_pins,
-                       ARRAY_SIZE(mxc_uart4_pins),
-                       MXC_GPIO_ALLOC_MODE_NORMAL, "UART4");
+                       ARRAY_SIZE(mxc_uart4_pins), "UART4");
 }
 
 static int uart_mxc_port4_exit(struct platform_device *pdev)
 {
-       return mxc_gpio_setup_multiple_pins(mxc_uart4_pins,
-                       ARRAY_SIZE(mxc_uart4_pins),
-                       MXC_GPIO_ALLOC_MODE_RELEASE, "UART4");
+       mxc_gpio_release_multiple_pins(mxc_uart4_pins,
+                       ARRAY_SIZE(mxc_uart4_pins));
+       return 0;
 }
 
 static int mxc_uart5_pins[] = {
@@ -173,15 +167,14 @@ static int mxc_uart5_pins[] = {
 static int uart_mxc_port5_init(struct platform_device *pdev)
 {
        return mxc_gpio_setup_multiple_pins(mxc_uart5_pins,
-                       ARRAY_SIZE(mxc_uart5_pins),
-                       MXC_GPIO_ALLOC_MODE_NORMAL, "UART5");
+                       ARRAY_SIZE(mxc_uart5_pins), "UART5");
 }
 
 static int uart_mxc_port5_exit(struct platform_device *pdev)
 {
-       return mxc_gpio_setup_multiple_pins(mxc_uart5_pins,
-                       ARRAY_SIZE(mxc_uart5_pins),
-                       MXC_GPIO_ALLOC_MODE_RELEASE, "UART5");
+       mxc_gpio_release_multiple_pins(mxc_uart5_pins,
+                       ARRAY_SIZE(mxc_uart5_pins));
+       return 0;
 }
 
 static struct platform_device *platform_devices[] __initdata = {
@@ -212,15 +205,13 @@ static int mxc_fec_pins[] = {
 static void gpio_fec_active(void)
 {
        mxc_gpio_setup_multiple_pins(mxc_fec_pins,
-                       ARRAY_SIZE(mxc_fec_pins),
-                       MXC_GPIO_ALLOC_MODE_NORMAL, "FEC");
+                       ARRAY_SIZE(mxc_fec_pins), "FEC");
 }
 
 static void gpio_fec_inactive(void)
 {
-       mxc_gpio_setup_multiple_pins(mxc_fec_pins,
-                       ARRAY_SIZE(mxc_fec_pins),
-                       MXC_GPIO_ALLOC_MODE_RELEASE, "FEC");
+       mxc_gpio_release_multiple_pins(mxc_fec_pins,
+                       ARRAY_SIZE(mxc_fec_pins));
 }
 
 static struct imxuart_platform_data uart_pdata[] = {
index ac516b1d3f77ad1213cd08ce8607ba06c06b8f85..91a1e4bbccbc9c713e413de44913fc978da24f67 100644 (file)
@@ -64,15 +64,14 @@ static int mxc_uart0_pins[] = {
 static int uart_mxc_port0_init(struct platform_device *pdev)
 {
        return mxc_gpio_setup_multiple_pins(mxc_uart0_pins,
-                       ARRAY_SIZE(mxc_uart0_pins),
-                       MXC_GPIO_ALLOC_MODE_NORMAL, "UART0");
+                       ARRAY_SIZE(mxc_uart0_pins), "UART0");
 }
 
 static int uart_mxc_port0_exit(struct platform_device *pdev)
 {
-       return mxc_gpio_setup_multiple_pins(mxc_uart0_pins,
-                       ARRAY_SIZE(mxc_uart0_pins),
-                       MXC_GPIO_ALLOC_MODE_RELEASE, "UART0");
+       mxc_gpio_release_multiple_pins(mxc_uart0_pins,
+                       ARRAY_SIZE(mxc_uart0_pins));
+       return 0;
 }
 
 static int mxc_uart1_pins[] = {
@@ -85,15 +84,14 @@ static int mxc_uart1_pins[] = {
 static int uart_mxc_port1_init(struct platform_device *pdev)
 {
        return mxc_gpio_setup_multiple_pins(mxc_uart1_pins,
-                       ARRAY_SIZE(mxc_uart1_pins),
-                       MXC_GPIO_ALLOC_MODE_NORMAL, "UART1");
+                       ARRAY_SIZE(mxc_uart1_pins), "UART1");
 }
 
 static int uart_mxc_port1_exit(struct platform_device *pdev)
 {
-       return mxc_gpio_setup_multiple_pins(mxc_uart1_pins,
-                       ARRAY_SIZE(mxc_uart1_pins),
-                       MXC_GPIO_ALLOC_MODE_RELEASE, "UART1");
+       mxc_gpio_release_multiple_pins(mxc_uart1_pins,
+                       ARRAY_SIZE(mxc_uart1_pins));
+       return 0;
 }
 
 static int mxc_uart2_pins[] = { PE10_PF_UART3_CTS,
@@ -104,15 +102,14 @@ static int mxc_uart2_pins[] = { PE10_PF_UART3_CTS,
 static int uart_mxc_port2_init(struct platform_device *pdev)
 {
        return mxc_gpio_setup_multiple_pins(mxc_uart2_pins,
-                       ARRAY_SIZE(mxc_uart2_pins),
-                       MXC_GPIO_ALLOC_MODE_NORMAL, "UART2");
+                       ARRAY_SIZE(mxc_uart2_pins), "UART2");
 }
 
 static int uart_mxc_port2_exit(struct platform_device *pdev)
 {
-       return mxc_gpio_setup_multiple_pins(mxc_uart2_pins,
-                       ARRAY_SIZE(mxc_uart2_pins),
-                       MXC_GPIO_ALLOC_MODE_RELEASE, "UART2");
+       mxc_gpio_release_multiple_pins(mxc_uart2_pins,
+                       ARRAY_SIZE(mxc_uart2_pins));
+       return 0;
 }
 
 static struct imxuart_platform_data uart_pdata[] = {
@@ -155,15 +152,13 @@ static int mxc_fec_pins[] = {
 static void gpio_fec_active(void)
 {
        mxc_gpio_setup_multiple_pins(mxc_fec_pins,
-                       ARRAY_SIZE(mxc_fec_pins),
-                       MXC_GPIO_ALLOC_MODE_NORMAL, "FEC");
+                       ARRAY_SIZE(mxc_fec_pins), "FEC");
 }
 
 static void gpio_fec_inactive(void)
 {
-       mxc_gpio_setup_multiple_pins(mxc_fec_pins,
-                       ARRAY_SIZE(mxc_fec_pins),
-                       MXC_GPIO_ALLOC_MODE_RELEASE, "FEC");
+       mxc_gpio_release_multiple_pins(mxc_fec_pins,
+                       ARRAY_SIZE(mxc_fec_pins));
 }
 
 static struct platform_device *platform_devices[] __initdata = {
index f49d798c5c3c1ea16024f4d93093917f2677df3c..6c331c939c009ac989e7810c2f3cb4c3f7be6d92 100644 (file)
 
 #include <linux/io.h>
 
-#define MXC_GPIO_ALLOC_MODE_NORMAL     0
-#define MXC_GPIO_ALLOC_MODE_NO_ALLOC   1
-#define MXC_GPIO_ALLOC_MODE_TRY_ALLOC  2
-#define MXC_GPIO_ALLOC_MODE_ALLOC_ONLY 4
-#define MXC_GPIO_ALLOC_MODE_RELEASE    8
-
 /*
  *  GPIO Module and I/O Multiplexer
  *  x = 0..3 for reg_A, reg_B, reg_C, reg_D
 
 extern void mxc_gpio_mode(int gpio_mode);
 extern int mxc_gpio_setup_multiple_pins(const int *pin_list, unsigned count,
-                                       int alloc_mode, const char *label);
+                                       const char *label);
+extern void mxc_gpio_release_multiple_pins(const int *pin_list, int count);
 
 /*-------------------------------------------------------------------------*/
 
index d97387aa9a42f9e87d756832374cc79cca1efe00..df6f18395686bcfe73d9b3cc40b21bac900aaad3 100644 (file)
@@ -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);