int res_y;
        int contact_size;
        int max_contacts;
+       int report_size;
 };
 
 struct asus_drvdata {
        .max_y = 1758,
        .contact_size = 5,
        .max_contacts = 5,
+       .report_size = 28 /* 2 byte header + 5 * 5 + 1 byte footer */,
 };
 
 static const struct asus_touchpad_info asus_t100ta_tp = {
        .res_y = 27, /* units/mm */
        .contact_size = 5,
        .max_contacts = 5,
+       .report_size = 28 /* 2 byte header + 5 * 5 + 1 byte footer */,
 };
 
 static const struct asus_touchpad_info asus_t100ha_tp = {
        .res_y = 29, /* units/mm */
        .contact_size = 5,
        .max_contacts = 5,
+       .report_size = 28 /* 2 byte header + 5 * 5 + 1 byte footer */,
 };
 
 static const struct asus_touchpad_info asus_t200ta_tp = {
        .res_y = 28, /* units/mm */
        .contact_size = 5,
        .max_contacts = 5,
+       .report_size = 28 /* 2 byte header + 5 * 5 + 1 byte footer */,
 };
 
 static const struct asus_touchpad_info asus_t100chi_tp = {
        .res_y = 29, /* units/mm */
        .contact_size = 3,
        .max_contacts = 4,
+       .report_size = 15 /* 2 byte header + 3 * 4 + 1 byte footer */,
 };
 
 static void asus_report_contact_down(struct asus_drvdata *drvdat,
        int i, toolType = MT_TOOL_FINGER;
        u8 *contactData = data + 2;
 
-       if (size != 3 + drvdat->tp->contact_size * drvdat->tp->max_contacts)
+       if (size != drvdat->tp->report_size)
                return 0;
 
        for (i = 0; i < drvdat->tp->max_contacts; i++) {