[ARM] 3033/1: S3C2410 - add generic gpio_cfgpin options
authorBen Dooks <ben-linux@fluff.org>
Fri, 28 Oct 2005 14:26:41 +0000 (15:26 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 28 Oct 2005 14:26:41 +0000 (15:26 +0100)
Patch from Ben Dooks

Add generic values for the parameters to the
s3c2410_gpio_cfgpin() function, so that a caller
does not need to know the exact constant for
the specified pin.

This is very useful for the case where a driver
is passed a gpio pin number and needs to reconfigure
the pin's function.

Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-s3c2410/gpio.c
include/asm-arm/arch-s3c2410/regs-gpio.h

index 94f1776cf3127dd3169f785ef70d8dd543dbdaa7..23ea3d5fa09c1be9bcc9084c1c8203b72b7c80c4 100644 (file)
@@ -30,6 +30,7 @@
  *     04-Oct-2004  BJD  Added irq filter controls for GPIO
  *     05-Nov-2004  BJD  EXPORT_SYMBOL() added for all code
  *     13-Mar-2005  BJD  Updates for __iomem
+ *     26-Oct-2005  BJD  Added generic configuration types
  */
 
 
@@ -58,6 +59,27 @@ void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function)
                mask = 3 << S3C2410_GPIO_OFFSET(pin)*2;
        }
 
+       switch (function) {
+       case S3C2410_GPIO_LEAVE:
+               mask = 0;
+               function = 0;
+               break;
+
+       case S3C2410_GPIO_INPUT:
+       case S3C2410_GPIO_OUTPUT:
+       case S3C2410_GPIO_SFN2:
+       case S3C2410_GPIO_SFN3:
+               if (pin < S3C2410_GPIO_BANKB) {
+                       function &= 1;
+                       function <<= S3C2410_GPIO_OFFSET(pin);
+               } else {
+                       function &= 3;
+                       function <<= S3C2410_GPIO_OFFSET(pin)*2;
+               }
+       }
+
+       /* modify the specified register wwith IRQs off */
+
        local_irq_save(flags);
 
        con  = __raw_readl(base + 0x00);
index 2053cbacffc3d8c8c40523f63a2fb465dcb88888..cb33d57c146c09fab2268f0daf9aae493098a09a 100644 (file)
@@ -20,6 +20,7 @@
  *    18-11-2004     BJD     Added S3C2440 AC97 controls
  *    10-Mar-2005    LCVR    Changed S3C2410_VA to S3C24XX_VA
  *    28-Mar-2005    LCVR    Fixed definition of GPB10
+ *    26-Oct-2005    BJD     Added generic configuration types
 */
 
 
 /* general configuration options */
 
 #define S3C2410_GPIO_LEAVE   (0xFFFFFFFF)
+#define S3C2410_GPIO_INPUT   (0xFFFFFFF0)
+#define S3C2410_GPIO_OUTPUT  (0xFFFFFFF1)
+#define S3C2410_GPIO_IRQ     (0xFFFFFFF2)      /* not available for all */
+#define S3C2410_GPIO_SFN2    (0xFFFFFFF2)      /* not available on A */
+#define S3C2410_GPIO_SFN3    (0xFFFFFFF3)      /* not available on A */
 
 /* configure GPIO ports A..G */