From: Michael Gernoth Date: Sun, 31 Jul 2011 11:02:22 +0000 (+0200) Subject: update module for more matrix-flags X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/ms2-fixes/commitdiff_plain/a24856748de5cf6fde97b2fb27537570d6f9ece1 update module for more matrix-flags --- diff --git a/MS2Debounce/assets/debounce.ko b/MS2Debounce/assets/debounce.ko index ebcac51..26b9824 100644 Binary files a/MS2Debounce/assets/debounce.ko and b/MS2Debounce/assets/debounce.ko differ diff --git a/debounce.c b/debounce.c index 029ff91..f2793a4 100644 --- a/debounce.c +++ b/debounce.c @@ -125,9 +125,6 @@ static ssize_t store_flags(struct device *dev, struct device_attribute *attr, co printk(KERN_INFO PREFIX "flags: 0x%x\n", flags); - if (flags & GPIOKPF_DRIVE_INACTIVE) - return count; - gpio_evmi->flags = flags; return count; @@ -263,6 +260,58 @@ static ssize_t store_print_phantom_keys_flag(struct device *dev, struct device_a return count; } +static ssize_t show_active_high_flag(struct device *dev, struct device_attribute *attr, char *buf) +{ + if (!gpio_evmi) + return -ENODEV; + + return snprintf(buf, PAGE_SIZE, "%u\n", (gpio_evmi->flags & GPIOKPF_ACTIVE_HIGH) ? 1 : 0); +} + +static ssize_t store_active_high_flag(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +{ + unsigned flag; + + if (!gpio_evmi) + return -ENODEV; + + sscanf(buf, "%u", &flag); + + if (flag) { + gpio_evmi->flags |= GPIOKPF_ACTIVE_HIGH; + } else { + gpio_evmi->flags &= ~GPIOKPF_ACTIVE_HIGH; + } + + return count; +} + +static ssize_t show_drive_inactive_flag(struct device *dev, struct device_attribute *attr, char *buf) +{ + if (!gpio_evmi) + return -ENODEV; + + return snprintf(buf, PAGE_SIZE, "%u\n", (gpio_evmi->flags & GPIOKPF_DRIVE_INACTIVE) ? 1 : 0); +} + +static ssize_t store_drive_inactive_flag(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +{ + unsigned flag; + + if (!gpio_evmi) + return -ENODEV; + + sscanf(buf, "%u", &flag); + + if (flag) { + gpio_evmi->flags |= GPIOKPF_DRIVE_INACTIVE; + } else { + gpio_evmi->flags &= ~GPIOKPF_DRIVE_INACTIVE; + } + + return count; +} + static DEVICE_ATTR(debounce_delay, (S_IRUGO | S_IWUGO), show_debounce_delay, store_debounce_delay); static DEVICE_ATTR(settle_time, (S_IRUGO | S_IWUGO), show_settle_time, store_settle_time); static DEVICE_ATTR(poll_time, (S_IRUGO | S_IWUGO), show_poll_time, store_poll_time); @@ -272,6 +321,8 @@ static DEVICE_ATTR(remove_some_phantom_keys_flag, (S_IRUGO | S_IWUGO), show_remo static DEVICE_ATTR(print_unmapped_keys_flag, (S_IRUGO | S_IWUGO), show_print_unmapped_keys_flag, store_print_unmapped_keys_flag); static DEVICE_ATTR(print_mapped_keys_flag, (S_IRUGO | S_IWUGO), show_print_mapped_keys_flag, store_print_mapped_keys_flag); static DEVICE_ATTR(print_phantom_keys_flag, (S_IRUGO | S_IWUGO), show_print_phantom_keys_flag, store_print_phantom_keys_flag); +static DEVICE_ATTR(active_high_flag, (S_IRUGO), show_active_high_flag, store_active_high_flag); +static DEVICE_ATTR(drive_inactive_flag, (S_IRUGO | S_IWUGO), show_drive_inactive_flag, store_drive_inactive_flag); static void debounce_release(struct device *dev) { @@ -317,6 +368,8 @@ static int __init debounce_init(void) err = device_create_file(&debounce_device, &dev_attr_print_unmapped_keys_flag); err = device_create_file(&debounce_device, &dev_attr_print_mapped_keys_flag); err = device_create_file(&debounce_device, &dev_attr_print_phantom_keys_flag); + err = device_create_file(&debounce_device, &dev_attr_active_high_flag); + err = device_create_file(&debounce_device, &dev_attr_drive_inactive_flag); printk(KERN_INFO PREFIX "settle_time: %u\n", gpio_evmi->settle_time.tv.nsec); printk(KERN_INFO PREFIX "poll_time: %u\n", gpio_evmi->poll_time.tv.nsec); @@ -358,6 +411,8 @@ static void __exit debounce_exit(void) device_remove_file(&debounce_device, &dev_attr_print_unmapped_keys_flag); device_remove_file(&debounce_device, &dev_attr_print_mapped_keys_flag); device_remove_file(&debounce_device, &dev_attr_print_phantom_keys_flag); + device_remove_file(&debounce_device, &dev_attr_active_high_flag); + device_remove_file(&debounce_device, &dev_attr_drive_inactive_flag); device_unregister(&debounce_device); }