unsigned last_field_index;      /* last field index of the report */
        unsigned last_slot_field;       /* the last field of a slot */
        __s8 inputmode;         /* InputMode HID feature, -1 if non-existent */
+       __s8 inputmode_index;   /* InputMode HID feature index in the report */
        __s8 maxcontact_report_id;      /* Maximum Contact Number HID feature,
                                   -1 if non-existent */
        __u8 num_received;      /* how many contacts we received */
                struct hid_field *field, struct hid_usage *usage)
 {
        struct mt_device *td = hid_get_drvdata(hdev);
+       int i;
 
        switch (usage->hid) {
        case HID_DG_INPUTMODE:
                td->inputmode = field->report->id;
+               td->inputmode_index = 0; /* has to be updated below */
+
+               for (i=0; i < field->maxusage; i++) {
+                       if (field->usage[i].hid == usage->hid) {
+                               td->inputmode_index = i;
+                               break;
+                       }
+               }
+
                break;
        case HID_DG_CONTACTMAX:
                td->maxcontact_report_id = field->report->id;
        re = &(hdev->report_enum[HID_FEATURE_REPORT]);
        r = re->report_id_hash[td->inputmode];
        if (r) {
-               r->field[0]->value[0] = 0x02;
+               r->field[0]->value[td->inputmode_index] = 0x02;
                usbhid_submit_report(hdev, r, USB_DIR_OUT);
        }
 }