]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/asm-arm/arch-omap/gpio.h
ARM: OMAP: Add 24xx GPIO debounce support
[linux-2.6-omap-h63xx.git] / include / asm-arm / arch-omap / gpio.h
index f486b72070eab1b39893264a5730186ca33397f9..164da09be09550fe8e45b91a8f09687d9b59047c 100644 (file)
@@ -5,7 +5,7 @@
  *
  * Copyright (C) 2003-2005 Nokia Corporation
  *
- * Written by Juha Yrjölä <juha.yrjola@nokia.com>
+ * Written by Juha Yrjölä <juha.yrjola@nokia.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -62,6 +62,8 @@
 #define OMAP_MPUIO_LATCH               0x34
 #endif
 
+#define OMAP34XX_NR_GPIOS              6
+
 #define OMAP_MPUIO(nr)         (OMAP_MAX_GPIO_LINES + (nr))
 #define OMAP_GPIO_IS_MPUIO(nr) ((nr) >= OMAP_MAX_GPIO_LINES)
 
@@ -75,5 +77,74 @@ extern void omap_free_gpio(int gpio);
 extern void omap_set_gpio_direction(int gpio, int is_input);
 extern void omap_set_gpio_dataout(int gpio, int enable);
 extern int omap_get_gpio_datain(int gpio);
+extern void omap_set_gpio_debounce(int gpio, int enable);
+extern void omap_set_gpio_debounce_time(int gpio, int enable);
+
+/*-------------------------------------------------------------------------*/
+
+/* wrappers for "new style" GPIO calls. the old OMAP-specfic ones should
+ * eventually be removed (along with this errno.h inclusion), and maybe
+ * gpios should put MPUIOs last too.
+ */
+
+#include <asm/errno.h>
+
+static inline int gpio_request(unsigned gpio, const char *label)
+{
+       return omap_request_gpio(gpio);
+}
+
+static inline void gpio_free(unsigned gpio)
+{
+       omap_free_gpio(gpio);
+}
+
+static inline int __gpio_set_direction(unsigned gpio, int is_input)
+{
+       if (cpu_class_is_omap2()) {
+               if (gpio > OMAP_MAX_GPIO_LINES)
+                       return -EINVAL;
+       } else {
+               if (gpio > (OMAP_MAX_GPIO_LINES + 16 /* MPUIO */))
+                       return -EINVAL;
+       }
+       omap_set_gpio_direction(gpio, is_input);
+       return 0;
+}
+
+static inline int gpio_direction_input(unsigned gpio)
+{
+       return __gpio_set_direction(gpio, 1);
+}
+
+static inline int gpio_direction_output(unsigned gpio, int value)
+{
+       omap_set_gpio_dataout(gpio, value);
+       return __gpio_set_direction(gpio, 0);
+}
+
+static inline int gpio_get_value(unsigned gpio)
+{
+       return omap_get_gpio_datain(gpio);
+}
+
+static inline void gpio_set_value(unsigned gpio, int value)
+{
+       omap_set_gpio_dataout(gpio, value);
+}
+
+#include <asm-generic/gpio.h>          /* cansleep wrappers */
+
+static inline int gpio_to_irq(unsigned gpio)
+{
+       return OMAP_GPIO_IRQ(gpio);
+}
+
+static inline int irq_to_gpio(unsigned irq)
+{
+       if (cpu_class_is_omap1() && (irq < (IH_MPUIO_BASE + 16)))
+               return (irq - IH_MPUIO_BASE) + OMAP_MAX_GPIO_LINES;
+       return irq - IH_GPIO_BASE;
+}
 
 #endif