HID: hid-rkvr: update TP input events
[firefly-linux-kernel-4.4.55.git] / drivers / hid / hid-rkvr.c
index eada6a54c520b54a582abfbd7753b8cf752399ac..969bbc78348d56a14274cacdbd543b0ffdc15f5c 100644 (file)
@@ -35,6 +35,7 @@
 #define RKVR_HIDRAW_BUFFER_SIZE 64
 #define RKVR_HIDRAW_MAX_DEVICES 8
 #define RKVR_FIRST_MINOR 0
+#define RK_HID_GEAR_TOUCH
 
 static struct class *rkvr_class;
 
@@ -562,8 +563,10 @@ static int rkvr_keys_event(struct hid_device *hdev, void *data, unsigned long le
                rkvr_send_key_event(input, KEY_RIGHT, 1);
                rkvr_send_key_event(input, KEY_RIGHT, 0);
        } else if (rkvr_data->rkvr_data.key_map.key_enter_pressed) {
-               rkvr_send_key_event(input, KEY_ENTER, 1);
-               rkvr_send_key_event(input, KEY_ENTER, 0);
+               input_event(input, EV_MSC, MSC_SCAN, 0x90001);
+               rkvr_send_key_event(input, BTN_MOUSE, 1);
+               input_event(input, EV_MSC, MSC_SCAN, 0x90001);
+               rkvr_send_key_event(input, BTN_MOUSE, 0);
        }
 
        if (rkvr_data->rkvr_data.key_map.psensor_on) {
@@ -605,7 +608,6 @@ static int rkvr_report_event(struct hid_device *hid, u8 *data, int len)
                        list->buffer[list->head].value = kmemdup(data, len, GFP_ATOMIC);
                        if (!list->buffer[list->head].value) {
                                ret = -ENOMEM;
-                               spin_unlock_irqrestore(&dev->list_lock, flags);
                                break;
                        }
 
@@ -753,9 +755,9 @@ static int hid_get_capability(struct device *dev, struct hid_capability *caps)
 static void hid_report_fill_rw(unsigned char *buf, u8 reg, u8 *data, int len, int w)
 {
        if (w)
-               buf[0] = (1 << 7) | (len && 0x7f);
+               buf[0] = (1 << 7) | (len & 0x7f);
        else
-               buf[0] = len && 0x7f;
+               buf[0] = len & 0x7f;
        buf[1] = reg;
        memcpy(&buf[2], data, len);
 }
@@ -1036,7 +1038,8 @@ static unsigned int key_codes[] = {
        KEY_RIGHT,
        KEY_UP,
        KEY_DOWN,
-       KEY_ENTER
+       KEY_ENTER,
+       BTN_MOUSE
 };
 
 static int __must_check rkvr_keys_probe(struct hid_device *hdev)
@@ -1064,6 +1067,14 @@ static int __must_check rkvr_keys_probe(struct hid_device *hdev)
                input_set_capability(input, EV_KEY, key_codes[i]);
        }
 
+#ifdef RK_HID_GEAR_TOUCH
+       set_bit(EV_REL, input->evbit);
+       input_set_capability(input, EV_REL, REL_X);
+       input_set_capability(input, EV_REL, REL_Y);
+       input_set_capability(input, EV_MSC, MSC_SCAN);
+       input_set_capability(input, EV_KEY, 0x110);
+#endif
+
        error = input_register_device(input);
        if (error) {
                hid_err(hdev, "rkvr-s: Unable to register input device, error: %d\n", error);