{ HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_3) },
        { HID_USB_DEVICE(USB_VENDOR_ID_HANVON, USB_DEVICE_ID_HANVON_MULTITOUCH) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_IDEACOM, USB_DEVICE_ID_IDEACOM_IDC6650) },
        { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK, USB_DEVICE_ID_HOLTEK_ON_LINE_GRIP) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ILITEK, USB_DEVICE_ID_ILITEK_MULTITOUCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_IRTOUCHSYSTEMS, USB_DEVICE_ID_IRTOUCH_INFRARED_USB) },
 
 #define MT_QUIRK_SLOT_IS_CONTACTID     (1 << 1)
 #define MT_QUIRK_CYPRESS               (1 << 2)
 #define MT_QUIRK_SLOT_IS_CONTACTNUMBER (1 << 3)
-#define MT_QUIRK_VALID_IS_INRANGE      (1 << 4)
-#define MT_QUIRK_VALID_IS_CONFIDENCE   (1 << 5)
-#define MT_QUIRK_EGALAX_XYZ_FIXUP      (1 << 6)
-#define MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE   (1 << 7)
+#define MT_QUIRK_ALWAYS_VALID          (1 << 4)
+#define MT_QUIRK_VALID_IS_INRANGE      (1 << 5)
+#define MT_QUIRK_VALID_IS_CONFIDENCE   (1 << 6)
+#define MT_QUIRK_EGALAX_XYZ_FIXUP      (1 << 7)
+#define MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE   (1 << 8)
 
 struct mt_slot {
        __s32 x, y, p, w, h;
 /* classes of device behavior */
 #define MT_CLS_DEFAULT                         0x0001
 
-#define MT_CLS_CONFIDENCE                      0x0002
-#define MT_CLS_CONFIDENCE_MINUS_ONE            0x0003
-#define MT_CLS_DUAL_INRANGE_CONTACTID          0x0004
-#define MT_CLS_DUAL_INRANGE_CONTACTNUMBER      0x0005
-#define MT_CLS_DUAL_NSMU_CONTACTID             0x0006
+#define MT_CLS_SERIAL                          0x0002
+#define MT_CLS_CONFIDENCE                      0x0003
+#define MT_CLS_CONFIDENCE_MINUS_ONE            0x0004
+#define MT_CLS_DUAL_INRANGE_CONTACTID          0x0005
+#define MT_CLS_DUAL_INRANGE_CONTACTNUMBER      0x0006
+#define MT_CLS_DUAL_NSMU_CONTACTID             0x0007
 
 /* vendor specific classes */
 #define MT_CLS_3M                              0x0101
 struct mt_class mt_classes[] = {
        { .name = MT_CLS_DEFAULT,
                .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP },
+       { .name = MT_CLS_SERIAL,
+               .quirks = MT_QUIRK_ALWAYS_VALID},
        { .name = MT_CLS_CONFIDENCE,
                .quirks = MT_QUIRK_VALID_IS_CONFIDENCE },
        { .name = MT_CLS_CONFIDENCE_MINUS_ONE,
        if (hid->claimed & HID_CLAIMED_INPUT && td->slots) {
                switch (usage->hid) {
                case HID_DG_INRANGE:
-                       if (quirks & MT_QUIRK_VALID_IS_INRANGE)
+                       if (quirks & MT_QUIRK_ALWAYS_VALID)
+                               td->curvalid = true;
+                       else if (quirks & MT_QUIRK_VALID_IS_INRANGE)
                                td->curvalid = value;
                        break;
                case HID_DG_TIPSWITCH:
                HID_USB_DEVICE(USB_VENDOR_ID_GOODTOUCH,
                        USB_DEVICE_ID_GOODTOUCH_000f) },
 
+       /* Ideacom panel */
+       { .driver_data = MT_CLS_SERIAL,
+               HID_USB_DEVICE(USB_VENDOR_ID_IDEACOM,
+                       USB_DEVICE_ID_IDEACOM_IDC6650) },
+
        /* Ilitek dual touch panel */
        {  .driver_data = MT_CLS_DEFAULT,
                HID_USB_DEVICE(USB_VENDOR_ID_ILITEK,