#include "wacom_wac.h"
 #include "wacom.h"
+#include <linux/input/mt.h>
 
 #define WAC_MSG_RETRIES                5
 
                wacom_wac_usage_mapping(hdev, field, usage);
 }
 
+static void wacom_post_parse_hid(struct hid_device *hdev,
+                                struct wacom_features *features)
+{
+       struct wacom *wacom = hid_get_drvdata(hdev);
+       struct wacom_wac *wacom_wac = &wacom->wacom_wac;
+
+       if (features->type == HID_GENERIC) {
+               /* Any last-minute generic device setup */
+               if (features->touch_max > 1) {
+                       input_mt_init_slots(wacom_wac->input, wacom_wac->features.touch_max,
+                                   INPUT_MT_DIRECT);
+               }
+       }
+}
+
 static void wacom_parse_hid(struct hid_device *hdev,
                           struct wacom_features *features)
 {
                                wacom_usage_mapping(hdev, hreport->field[i],
                                                hreport->field[i]->usage + j);
        }
+
+       wacom_post_parse_hid(hdev, features);
 }
 
 static int wacom_hid_set_device_mode(struct hid_device *hdev)
 
 {
        struct wacom *wacom = hid_get_drvdata(hdev);
        struct wacom_wac *wacom_wac = &wacom->wacom_wac;
-       struct input_dev *input = wacom_wac->input;
        unsigned touch_max = wacom_wac->features.touch_max;
 
        switch (usage->hid) {
                                        ABS_MT_POSITION_Y, 4);
                break;
        case HID_DG_CONTACTID:
-               input_mt_init_slots(input, wacom_wac->features.touch_max,
-                       INPUT_MT_DIRECT);
                break;
        case HID_DG_INRANGE:
                break;