Index: usb-devel/drivers/hid/hid-core.c =================================================================== --- usb-devel.orig/drivers/hid/hid-core.c +++ usb-devel/drivers/hid/hid-core.c @@ -1057,6 +1057,8 @@ static void hid_apply_multiplier(struct while (multiplier_collection->parent_idx != -1 && multiplier_collection->type != HID_COLLECTION_LOGICAL) multiplier_collection = &hid->collection[multiplier_collection->parent_idx]; + if (multiplier_collection->type != HID_COLLECTION_LOGICAL) + multiplier_collection = NULL; effective_multiplier = hid_calculate_multiplier(hid, multiplier); @@ -1191,6 +1193,9 @@ int hid_open_report(struct hid_device *d } device->collection_size = HID_DEFAULT_NUM_COLLECTIONS; + /* Needed for usages before the first collection */ + device->collection[0].parent_idx = -1; + ret = -EINVAL; while ((start = fetch_item(start, end, &item)) != NULL) {