aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/input.c
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2011-03-19 02:38:50 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2011-03-19 02:38:50 -0400
commit97eb3f24352ec6632c2127b35d8087d2a809a9b9 (patch)
tree722948059bbd325bbca232269490124231df80d4 /drivers/input/input.c
parent439581ec07fa9cf3f519dd461a2cf41cfd3adcb4 (diff)
parentdef179c271ac9b5020deca798470521f14d11edd (diff)
Merge branch 'next' into for-linus
Diffstat (limited to 'drivers/input/input.c')
-rw-r--r--drivers/input/input.c56
1 files changed, 7 insertions, 49 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c
index b8894a059f87..d6e8bd8a851c 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -26,7 +26,6 @@
26#include <linux/device.h> 26#include <linux/device.h>
27#include <linux/mutex.h> 27#include <linux/mutex.h>
28#include <linux/rcupdate.h> 28#include <linux/rcupdate.h>
29#include <linux/smp_lock.h>
30#include "input-compat.h" 29#include "input-compat.h"
31 30
32MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>"); 31MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
@@ -792,22 +791,9 @@ int input_get_keycode(struct input_dev *dev, struct input_keymap_entry *ke)
792 int retval; 791 int retval;
793 792
794 spin_lock_irqsave(&dev->event_lock, flags); 793 spin_lock_irqsave(&dev->event_lock, flags);
795 794 retval = dev->getkeycode(dev, ke);
796 if (dev->getkeycode) {
797 /*
798 * Support for legacy drivers, that don't implement the new
799 * ioctls
800 */
801 u32 scancode = ke->index;
802
803 memcpy(ke->scancode, &scancode, sizeof(scancode));
804 ke->len = sizeof(scancode);
805 retval = dev->getkeycode(dev, scancode, &ke->keycode);
806 } else {
807 retval = dev->getkeycode_new(dev, ke);
808 }
809
810 spin_unlock_irqrestore(&dev->event_lock, flags); 795 spin_unlock_irqrestore(&dev->event_lock, flags);
796
811 return retval; 797 return retval;
812} 798}
813EXPORT_SYMBOL(input_get_keycode); 799EXPORT_SYMBOL(input_get_keycode);
@@ -832,35 +818,7 @@ int input_set_keycode(struct input_dev *dev,
832 818
833 spin_lock_irqsave(&dev->event_lock, flags); 819 spin_lock_irqsave(&dev->event_lock, flags);
834 820
835 if (dev->setkeycode) { 821 retval = dev->setkeycode(dev, ke, &old_keycode);
836 /*
837 * Support for legacy drivers, that don't implement the new
838 * ioctls
839 */
840 unsigned int scancode;
841
842 retval = input_scancode_to_scalar(ke, &scancode);
843 if (retval)
844 goto out;
845
846 /*
847 * We need to know the old scancode, in order to generate a
848 * keyup effect, if the set operation happens successfully
849 */
850 if (!dev->getkeycode) {
851 retval = -EINVAL;
852 goto out;
853 }
854
855 retval = dev->getkeycode(dev, scancode, &old_keycode);
856 if (retval)
857 goto out;
858
859 retval = dev->setkeycode(dev, scancode, ke->keycode);
860 } else {
861 retval = dev->setkeycode_new(dev, ke, &old_keycode);
862 }
863
864 if (retval) 822 if (retval)
865 goto out; 823 goto out;
866 824
@@ -1847,11 +1805,11 @@ int input_register_device(struct input_dev *dev)
1847 dev->rep[REP_PERIOD] = 33; 1805 dev->rep[REP_PERIOD] = 33;
1848 } 1806 }
1849 1807
1850 if (!dev->getkeycode && !dev->getkeycode_new) 1808 if (!dev->getkeycode)
1851 dev->getkeycode_new = input_default_getkeycode; 1809 dev->getkeycode = input_default_getkeycode;
1852 1810
1853 if (!dev->setkeycode && !dev->setkeycode_new) 1811 if (!dev->setkeycode)
1854 dev->setkeycode_new = input_default_setkeycode; 1812 dev->setkeycode = input_default_setkeycode;
1855 1813
1856 dev_set_name(&dev->dev, "input%ld", 1814 dev_set_name(&dev->dev, "input%ld",
1857 (unsigned long) atomic_inc_return(&input_no) - 1); 1815 (unsigned long) atomic_inc_return(&input_no) - 1);