diff options
Diffstat (limited to 'drivers/input/input.c')
| -rw-r--r-- | drivers/input/input.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c index 935a1835de2d..8ff92aa13a0a 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c | |||
| @@ -29,6 +29,14 @@ MODULE_LICENSE("GPL"); | |||
| 29 | 29 | ||
| 30 | #define INPUT_DEVICES 256 | 30 | #define INPUT_DEVICES 256 |
| 31 | 31 | ||
| 32 | /* | ||
| 33 | * EV_ABS events which should not be cached are listed here. | ||
| 34 | */ | ||
| 35 | static unsigned int input_abs_bypass_init_data[] __initdata = { | ||
| 36 | 0 | ||
| 37 | }; | ||
| 38 | static unsigned long input_abs_bypass[BITS_TO_LONGS(ABS_CNT)]; | ||
| 39 | |||
| 32 | static LIST_HEAD(input_dev_list); | 40 | static LIST_HEAD(input_dev_list); |
| 33 | static LIST_HEAD(input_handler_list); | 41 | static LIST_HEAD(input_handler_list); |
| 34 | 42 | ||
| @@ -192,6 +200,11 @@ static void input_handle_event(struct input_dev *dev, | |||
| 192 | case EV_ABS: | 200 | case EV_ABS: |
| 193 | if (is_event_supported(code, dev->absbit, ABS_MAX)) { | 201 | if (is_event_supported(code, dev->absbit, ABS_MAX)) { |
| 194 | 202 | ||
| 203 | if (test_bit(code, input_abs_bypass)) { | ||
| 204 | disposition = INPUT_PASS_TO_HANDLERS; | ||
| 205 | break; | ||
| 206 | } | ||
| 207 | |||
| 195 | value = input_defuzz_abs_event(value, | 208 | value = input_defuzz_abs_event(value, |
| 196 | dev->abs[code], dev->absfuzz[code]); | 209 | dev->abs[code], dev->absfuzz[code]); |
| 197 | 210 | ||
| @@ -1634,10 +1647,20 @@ static const struct file_operations input_fops = { | |||
| 1634 | .open = input_open_file, | 1647 | .open = input_open_file, |
| 1635 | }; | 1648 | }; |
| 1636 | 1649 | ||
| 1650 | static void __init input_init_abs_bypass(void) | ||
| 1651 | { | ||
| 1652 | const unsigned int *p; | ||
| 1653 | |||
| 1654 | for (p = input_abs_bypass_init_data; *p; p++) | ||
| 1655 | input_abs_bypass[BIT_WORD(*p)] |= BIT_MASK(*p); | ||
| 1656 | } | ||
| 1657 | |||
| 1637 | static int __init input_init(void) | 1658 | static int __init input_init(void) |
| 1638 | { | 1659 | { |
| 1639 | int err; | 1660 | int err; |
| 1640 | 1661 | ||
| 1662 | input_init_abs_bypass(); | ||
| 1663 | |||
| 1641 | err = class_register(&input_class); | 1664 | err = class_register(&input_class); |
| 1642 | if (err) { | 1665 | if (err) { |
| 1643 | printk(KERN_ERR "input: unable to register input_dev class\n"); | 1666 | printk(KERN_ERR "input: unable to register input_dev class\n"); |
