]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
ARM: OMAP: add 24xx GPIO debounce support
authorKevin Hilman <khilman@mvista.com>
Fri, 4 May 2007 21:40:29 +0000 (14:40 -0700)
committerTony Lindgren <tony@atomide.com>
Fri, 4 May 2007 23:37:32 +0000 (16:37 -0700)
Signed-off-by: Kevin Hilman <khilman@mvista.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/plat-omap/gpio.c
include/asm-arm/arch-omap/gpio.h

index b645ba459789394f39ad43387798755f23b70779..3cd3d7f1465d34e7acf04f36409e52dfbc6097d7 100644 (file)
 #define OMAP24XX_GPIO_LEVELDETECT1     0x0044
 #define OMAP24XX_GPIO_RISINGDETECT     0x0048
 #define OMAP24XX_GPIO_FALLINGDETECT    0x004c
+#define OMAP24XX_GPIO_DEBOUNCE_EN      0x0050
+#define OMAP24XX_GPIO_DEBOUNCE_VAL     0x0054
 #define OMAP24XX_GPIO_CLEARIRQENABLE1  0x0060
 #define OMAP24XX_GPIO_SETIRQENABLE1    0x0064
 #define OMAP24XX_GPIO_CLEARWKUENA      0x0080
@@ -484,6 +486,43 @@ static inline void set_24xx_gpio_triggering(struct gpio_bank *bank, int gpio, in
        /* FIXME: Possibly do 'set_irq_handler(j, handle_level_irq)' if only level
         * triggering requested. */
 }
+
+void
+omap_set_gpio_debounce(int gpio, int enable)
+{
+       struct gpio_bank *bank;
+       void __iomem *reg;
+       u32 val, l = 1 << get_gpio_index(gpio);
+
+       bank = get_gpio_bank(gpio);
+       reg = bank->base;
+
+       reg += OMAP24XX_GPIO_DEBOUNCE_EN;
+       val = __raw_readl(reg);
+
+       if (enable)
+               val |= l;
+       else
+               val &= ~l;
+
+       __raw_writel(val, reg);
+}
+EXPORT_SYMBOL(omap_set_gpio_debounce);
+
+void
+omap_set_gpio_debounce_time(int gpio, int enc_time)
+{
+       struct gpio_bank *bank;
+       void __iomem *reg;
+
+       bank = get_gpio_bank(gpio);
+       reg = bank->base;
+
+       enc_time &= 0xff;
+       reg += OMAP24XX_GPIO_DEBOUNCE_VAL;
+       __raw_writel(enc_time, reg);
+}
+EXPORT_SYMBOL(omap_set_gpio_debounce_time);
 #endif
 
 static int _set_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger)
index c2ae7d867dd5d984a7d89e36a9ffad85a38c1dcf..6ed8074d203fd97220868a8be7611d0104b60df7 100644 (file)
@@ -78,6 +78,11 @@ extern int omap_get_gpio_datain(int gpio);
 extern void omap2_gpio_prepare_for_retention(void);
 extern void omap2_gpio_resume_after_retention(void);
 
+#ifdef CONFIG_ARCH_OMAP24XX
+extern void omap_set_gpio_debounce(int gpio, int enable);
+extern void omap_set_gpio_debounce_time(int gpio, int enable);
+#endif
+
 /*-------------------------------------------------------------------------*/
 
 /* wrappers for "new style" GPIO calls. the old OMAP-specfic ones should