HID: wacom: Correct behavior when processing some confidence == false touches
[platform/kernel/linux-rpi.git] / drivers / hid / wacom_wac.c
index 471db78..8289ce7 100644 (file)
@@ -2649,8 +2649,8 @@ static void wacom_wac_finger_slot(struct wacom_wac *wacom_wac,
 {
        struct hid_data *hid_data = &wacom_wac->hid_data;
        bool mt = wacom_wac->features.touch_max > 1;
-       bool prox = hid_data->tipswitch &&
-                   report_touch_events(wacom_wac);
+       bool touch_down = hid_data->tipswitch && hid_data->confidence;
+       bool prox = touch_down && report_touch_events(wacom_wac);
 
        if (touch_is_muted(wacom_wac)) {
                if (!wacom_wac->shared->touch_down)
@@ -2700,24 +2700,6 @@ static void wacom_wac_finger_slot(struct wacom_wac *wacom_wac,
        }
 }
 
-static bool wacom_wac_slot_is_active(struct input_dev *dev, int key)
-{
-       struct input_mt *mt = dev->mt;
-       struct input_mt_slot *s;
-
-       if (!mt)
-               return false;
-
-       for (s = mt->slots; s != mt->slots + mt->num_slots; s++) {
-               if (s->key == key &&
-                       input_mt_get_value(s, ABS_MT_TRACKING_ID) >= 0) {
-                       return true;
-               }
-       }
-
-       return false;
-}
-
 static void wacom_wac_finger_event(struct hid_device *hdev,
                struct hid_field *field, struct hid_usage *usage, __s32 value)
 {
@@ -2768,14 +2750,8 @@ static void wacom_wac_finger_event(struct hid_device *hdev,
        }
 
        if (usage->usage_index + 1 == field->report_count) {
-               if (equivalent_usage == wacom_wac->hid_data.last_slot_field) {
-                       bool touch_removed = wacom_wac_slot_is_active(wacom_wac->touch_input,
-                               wacom_wac->hid_data.id) && !wacom_wac->hid_data.tipswitch;
-
-                       if (wacom_wac->hid_data.confidence || touch_removed) {
-                               wacom_wac_finger_slot(wacom_wac, wacom_wac->touch_input);
-                       }
-               }
+               if (equivalent_usage == wacom_wac->hid_data.last_slot_field)
+                       wacom_wac_finger_slot(wacom_wac, wacom_wac->touch_input);
        }
 }