X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/ms2-fixes/blobdiff_plain/a24856748de5cf6fde97b2fb27537570d6f9ece1..a6322a6f9aac1788492a6a54b8880dc27fece842:/debounce.c diff --git a/debounce.c b/debounce.c index f2793a4..5694d12 100644 --- a/debounce.c +++ b/debounce.c @@ -2,6 +2,10 @@ #include #include #include +#include + +/* hardware debounce: (value + 1) * 31us */ +#define GPIO_DEBOUNCE_TIME 0x1 #define PREFIX "debounce: " @@ -333,6 +337,24 @@ static struct device debounce_device = { .release = debounce_release, }; +static void hw_debounce_pin(int gpio, int enable) { + printk(KERN_INFO PREFIX "%sabling hardware debounce for GPIO %d\n", (enable?"En":"Dis"), gpio); + if (enable) + omap_set_gpio_debounce_time(gpio, GPIO_DEBOUNCE_TIME); + omap_set_gpio_debounce(gpio, enable); +} + +static void hw_debounce(int enable) { + int i; + + if (gpio_evmi == NULL) + return; + + for (i = 0; i < gpio_evmi->ninputs; i++) { + hw_debounce_pin(gpio_evmi->input_gpios[i], enable); + } +} + static int __init debounce_init(void) { struct device *event_dev = NULL; @@ -359,6 +381,8 @@ static int __init debounce_init(void) return err; } + hw_debounce(1); + err = device_create_file(&debounce_device, &dev_attr_debounce_delay); err = device_create_file(&debounce_device, &dev_attr_settle_time); err = device_create_file(&debounce_device, &dev_attr_poll_time); @@ -402,6 +426,7 @@ static void __exit debounce_exit(void) gpio_evmi->settle_time = old_settle_time; gpio_evmi->poll_time = old_poll_time; } + hw_debounce(0); device_remove_file(&debounce_device, &dev_attr_debounce_delay); device_remove_file(&debounce_device, &dev_attr_settle_time); device_remove_file(&debounce_device, &dev_attr_poll_time);