diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /drivers/input/joydev.c | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'drivers/input/joydev.c')
-rw-r--r-- | drivers/input/joydev.c | 52 |
1 files changed, 35 insertions, 17 deletions
diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c index b1bd6dd32286..423e0e6031ab 100644 --- a/drivers/input/joydev.c +++ b/drivers/input/joydev.c | |||
@@ -286,6 +286,8 @@ static int joydev_open(struct inode *inode, struct file *file) | |||
286 | goto err_free_client; | 286 | goto err_free_client; |
287 | 287 | ||
288 | file->private_data = client; | 288 | file->private_data = client; |
289 | nonseekable_open(inode, file); | ||
290 | |||
289 | return 0; | 291 | return 0; |
290 | 292 | ||
291 | err_free_client: | 293 | err_free_client: |
@@ -775,6 +777,20 @@ static void joydev_cleanup(struct joydev *joydev) | |||
775 | input_close_device(handle); | 777 | input_close_device(handle); |
776 | } | 778 | } |
777 | 779 | ||
780 | |||
781 | static bool joydev_match(struct input_handler *handler, struct input_dev *dev) | ||
782 | { | ||
783 | /* Avoid touchpads and touchscreens */ | ||
784 | if (test_bit(EV_KEY, dev->evbit) && test_bit(BTN_TOUCH, dev->keybit)) | ||
785 | return false; | ||
786 | |||
787 | /* Avoid tablets, digitisers and similar devices */ | ||
788 | if (test_bit(EV_KEY, dev->evbit) && test_bit(BTN_DIGI, dev->keybit)) | ||
789 | return false; | ||
790 | |||
791 | return true; | ||
792 | } | ||
793 | |||
778 | static int joydev_connect(struct input_handler *handler, struct input_dev *dev, | 794 | static int joydev_connect(struct input_handler *handler, struct input_dev *dev, |
779 | const struct input_device_id *id) | 795 | const struct input_device_id *id) |
780 | { | 796 | { |
@@ -894,22 +910,6 @@ static void joydev_disconnect(struct input_handle *handle) | |||
894 | put_device(&joydev->dev); | 910 | put_device(&joydev->dev); |
895 | } | 911 | } |
896 | 912 | ||
897 | static const struct input_device_id joydev_blacklist[] = { | ||
898 | { | ||
899 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | | ||
900 | INPUT_DEVICE_ID_MATCH_KEYBIT, | ||
901 | .evbit = { BIT_MASK(EV_KEY) }, | ||
902 | .keybit = { [BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH) }, | ||
903 | }, /* Avoid itouchpads and touchscreens */ | ||
904 | { | ||
905 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | | ||
906 | INPUT_DEVICE_ID_MATCH_KEYBIT, | ||
907 | .evbit = { BIT_MASK(EV_KEY) }, | ||
908 | .keybit = { [BIT_WORD(BTN_DIGI)] = BIT_MASK(BTN_DIGI) }, | ||
909 | }, /* Avoid tablets, digitisers and similar devices */ | ||
910 | { } /* Terminating entry */ | ||
911 | }; | ||
912 | |||
913 | static const struct input_device_id joydev_ids[] = { | 913 | static const struct input_device_id joydev_ids[] = { |
914 | { | 914 | { |
915 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | | 915 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | |
@@ -929,6 +929,24 @@ static const struct input_device_id joydev_ids[] = { | |||
929 | .evbit = { BIT_MASK(EV_ABS) }, | 929 | .evbit = { BIT_MASK(EV_ABS) }, |
930 | .absbit = { BIT_MASK(ABS_THROTTLE) }, | 930 | .absbit = { BIT_MASK(ABS_THROTTLE) }, |
931 | }, | 931 | }, |
932 | { | ||
933 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | | ||
934 | INPUT_DEVICE_ID_MATCH_KEYBIT, | ||
935 | .evbit = { BIT_MASK(EV_KEY) }, | ||
936 | .keybit = {[BIT_WORD(BTN_JOYSTICK)] = BIT_MASK(BTN_JOYSTICK) }, | ||
937 | }, | ||
938 | { | ||
939 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | | ||
940 | INPUT_DEVICE_ID_MATCH_KEYBIT, | ||
941 | .evbit = { BIT_MASK(EV_KEY) }, | ||
942 | .keybit = { [BIT_WORD(BTN_GAMEPAD)] = BIT_MASK(BTN_GAMEPAD) }, | ||
943 | }, | ||
944 | { | ||
945 | .flags = INPUT_DEVICE_ID_MATCH_EVBIT | | ||
946 | INPUT_DEVICE_ID_MATCH_KEYBIT, | ||
947 | .evbit = { BIT_MASK(EV_KEY) }, | ||
948 | .keybit = { [BIT_WORD(BTN_TRIGGER_HAPPY)] = BIT_MASK(BTN_TRIGGER_HAPPY) }, | ||
949 | }, | ||
932 | { } /* Terminating entry */ | 950 | { } /* Terminating entry */ |
933 | }; | 951 | }; |
934 | 952 | ||
@@ -936,13 +954,13 @@ MODULE_DEVICE_TABLE(input, joydev_ids); | |||
936 | 954 | ||
937 | static struct input_handler joydev_handler = { | 955 | static struct input_handler joydev_handler = { |
938 | .event = joydev_event, | 956 | .event = joydev_event, |
957 | .match = joydev_match, | ||
939 | .connect = joydev_connect, | 958 | .connect = joydev_connect, |
940 | .disconnect = joydev_disconnect, | 959 | .disconnect = joydev_disconnect, |
941 | .fops = &joydev_fops, | 960 | .fops = &joydev_fops, |
942 | .minor = JOYDEV_MINOR_BASE, | 961 | .minor = JOYDEV_MINOR_BASE, |
943 | .name = "joydev", | 962 | .name = "joydev", |
944 | .id_table = joydev_ids, | 963 | .id_table = joydev_ids, |
945 | .blacklist = joydev_blacklist, | ||
946 | }; | 964 | }; |
947 | 965 | ||
948 | static int __init joydev_init(void) | 966 | static int __init joydev_init(void) |