Input: add input_set_capability() helper
authorDmitry Torokhov <dtor@insightbb.com>
Wed, 25 Apr 2007 04:53:18 +0000 (00:53 -0400)
committerDmitry Torokhov <dtor@insightbb.com>
Wed, 25 Apr 2007 04:53:18 +0000 (00:53 -0400)
Add input_set_capability() helper used to indicate that an input
device supports a certain event without need to manipulate bitmaps
directly.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/input.c
include/linux/input.h

index 173c2861ec58fd3bee32950385d59f08cab8f0cb..915e9ab7cab0faad95ad5391b9493eb946bb1d7f 100644 (file)
@@ -1046,6 +1046,62 @@ void input_free_device(struct input_dev *dev)
 }
 EXPORT_SYMBOL(input_free_device);
 
+/**
+ * input_set_capability - mark device as capable of a certain event
+ * @dev: device that is capable of emitting or accepting event
+ * @type: type of the event (EV_KEY, EV_REL, etc...)
+ * @code: event code
+ *
+ * In addition to setting up corresponding bit in appropriate capability
+ * bitmap the function also adjusts dev->evbit.
+ */
+void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int code)
+{
+       switch (type) {
+       case EV_KEY:
+               __set_bit(code, dev->keybit);
+               break;
+
+       case EV_REL:
+               __set_bit(code, dev->relbit);
+               break;
+
+       case EV_ABS:
+               __set_bit(code, dev->absbit);
+               break;
+
+       case EV_MSC:
+               __set_bit(code, dev->mscbit);
+               break;
+
+       case EV_SW:
+               __set_bit(code, dev->swbit);
+               break;
+
+       case EV_LED:
+               __set_bit(code, dev->ledbit);
+               break;
+
+       case EV_SND:
+               __set_bit(code, dev->sndbit);
+               break;
+
+       case EV_FF:
+               __set_bit(code, dev->ffbit);
+               break;
+
+       default:
+               printk(KERN_ERR
+                       "input_set_capability: unknown type %u (code %u)\n",
+                       type, code);
+               dump_stack();
+               return;
+       }
+
+       __set_bit(type, dev->evbit);
+}
+EXPORT_SYMBOL(input_set_capability);
+
 int input_register_device(struct input_dev *dev)
 {
        static atomic_t input_no = ATOMIC_INIT(0);
index 7b6d7c408b075506d923e90a8983fc9873ae55f5..1789ee9df4dd814153eb5988ac0065540baf812e 100644 (file)
@@ -1160,6 +1160,8 @@ static inline void input_sync(struct input_dev *dev)
        input_event(dev, EV_SYN, SYN_REPORT, 0);
 }
 
+void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int code);
+
 static inline void input_set_abs_params(struct input_dev *dev, int axis, int min, int max, int fuzz, int flat)
 {
        dev->absmin[axis] = min;