Merge branches 'doc', 'multitouch', 'upstream' and 'upstream-fixes' into for-linus
[pandora-kernel.git] / drivers / hid / hid-multitouch.c
index b21251b..ecd4d2d 100644 (file)
@@ -83,15 +83,18 @@ struct mt_class {
 };
 
 /* classes of device behavior */
-#define MT_CLS_DEFAULT                         1
-#define MT_CLS_DUAL_INRANGE_CONTACTID          2
-#define MT_CLS_DUAL_INRANGE_CONTACTNUMBER      3
-#define MT_CLS_CYPRESS                         4
-#define MT_CLS_EGALAX                          5
-#define MT_CLS_STANTUM                         6
-#define MT_CLS_3M                              7
-#define MT_CLS_CONFIDENCE                      8
-#define MT_CLS_CONFIDENCE_MINUS_ONE            9
+#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
+
+/* vendor specific classes */
+#define MT_CLS_3M                              0x0101
+#define MT_CLS_CYPRESS                         0x0102
+#define MT_CLS_EGALAX                          0x0103
 
 #define MT_DEFAULT_MAXCONTACT  10
 
@@ -130,6 +133,11 @@ static int find_slot_from_contactid(struct mt_device *td)
 struct mt_class mt_classes[] = {
        { .name = MT_CLS_DEFAULT,
                .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP },
+       { .name = MT_CLS_CONFIDENCE,
+               .quirks = MT_QUIRK_VALID_IS_CONFIDENCE },
+       { .name = MT_CLS_CONFIDENCE_MINUS_ONE,
+               .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
+                       MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE },
        { .name = MT_CLS_DUAL_INRANGE_CONTACTID,
                .quirks = MT_QUIRK_VALID_IS_INRANGE |
                        MT_QUIRK_SLOT_IS_CONTACTID,
@@ -138,13 +146,24 @@ struct mt_class mt_classes[] = {
                .quirks = MT_QUIRK_VALID_IS_INRANGE |
                        MT_QUIRK_SLOT_IS_CONTACTNUMBER,
                .maxcontacts = 2 },
+       { .name = MT_CLS_DUAL_NSMU_CONTACTID,
+               .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
+                       MT_QUIRK_SLOT_IS_CONTACTID,
+               .maxcontacts = 2 },
+
+       /*
+        * vendor specific classes
+        */
+       { .name = MT_CLS_3M,
+               .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
+                       MT_QUIRK_SLOT_IS_CONTACTID,
+               .sn_move = 2048,
+               .sn_width = 128,
+               .sn_height = 128 },
        { .name = MT_CLS_CYPRESS,
                .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
                        MT_QUIRK_CYPRESS,
                .maxcontacts = 10 },
-       { .name = MT_CLS_CONFIDENCE_MINUS_ONE,
-               .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
-                       MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE },
        { .name = MT_CLS_EGALAX,
                .quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
                        MT_QUIRK_VALID_IS_INRANGE |
@@ -153,16 +172,6 @@ struct mt_class mt_classes[] = {
                .sn_move = 4096,
                .sn_pressure = 32,
        },
-       { .name = MT_CLS_STANTUM,
-               .quirks = MT_QUIRK_VALID_IS_CONFIDENCE },
-       { .name = MT_CLS_3M,
-               .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
-                       MT_QUIRK_SLOT_IS_CONTACTID,
-               .sn_move = 2048,
-               .sn_width = 128,
-               .sn_height = 128 },
-       { .name = MT_CLS_CONFIDENCE,
-               .quirks = MT_QUIRK_VALID_IS_CONFIDENCE },
 
        { }
 };
@@ -565,6 +574,11 @@ static const struct hid_device_id mt_devices[] = {
                HID_USB_DEVICE(USB_VENDOR_ID_3M,
                        USB_DEVICE_ID_3M2256) },
 
+       /* ActionStar panels */
+       { .driver_data = MT_CLS_DEFAULT,
+               HID_USB_DEVICE(USB_VENDOR_ID_ACTIONSTAR,
+                       USB_DEVICE_ID_ACTIONSTAR_1011) },
+
        /* Cando panels */
        { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
                HID_USB_DEVICE(USB_VENDOR_ID_CANDO,
@@ -579,16 +593,50 @@ static const struct hid_device_id mt_devices[] = {
                HID_USB_DEVICE(USB_VENDOR_ID_CANDO,
                        USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) },
 
+       /* CVTouch panels */
+       { .driver_data = MT_CLS_DEFAULT,
+               HID_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
+                       USB_DEVICE_ID_CVTOUCH_SCREEN) },
+
        /* Cypress panel */
        { .driver_data = MT_CLS_CYPRESS,
                HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS,
                        USB_DEVICE_ID_CYPRESS_TRUETOUCH) },
 
+       /* eGalax devices (resistive) */
+       {  .driver_data = MT_CLS_EGALAX,
+               HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
+                       USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) },
+       {  .driver_data = MT_CLS_EGALAX,
+               HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
+                       USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH3) },
+
+       /* eGalax devices (capacitive) */
+       {  .driver_data = MT_CLS_EGALAX,
+               HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
+                       USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1) },
+       {  .driver_data = MT_CLS_EGALAX,
+               HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
+                       USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH2) },
+       {  .driver_data = MT_CLS_EGALAX,
+               HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
+                       USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH4) },
+
+       /* Elo TouchSystems IntelliTouch Plus panel */
+       { .driver_data = MT_CLS_DUAL_NSMU_CONTACTID,
+               HID_USB_DEVICE(USB_VENDOR_ID_ELO,
+                       USB_DEVICE_ID_ELO_TS2515) },
+
        /* GeneralTouch panel */
        { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
                HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
                        USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) },
 
+       /* GoodTouch panels */
+       { .driver_data = MT_CLS_DEFAULT,
+               HID_USB_DEVICE(USB_VENDOR_ID_GOODTOUCH,
+                       USB_DEVICE_ID_GOODTOUCH_000f) },
+
        /* Ilitek dual touch panel */
        {  .driver_data = MT_CLS_DEFAULT,
                HID_USB_DEVICE(USB_VENDOR_ID_ILITEK,
@@ -599,6 +647,11 @@ static const struct hid_device_id mt_devices[] = {
                HID_USB_DEVICE(USB_VENDOR_ID_IRTOUCHSYSTEMS,
                        USB_DEVICE_ID_IRTOUCH_INFRARED_USB) },
 
+       /* Lumio panels */
+       { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
+               HID_USB_DEVICE(USB_VENDOR_ID_LUMIO,
+                       USB_DEVICE_ID_CRYSTALTOUCH) },
+
        /* MosArt panels */
        { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
                HID_USB_DEVICE(USB_VENDOR_ID_ASUS,
@@ -623,36 +676,30 @@ static const struct hid_device_id mt_devices[] = {
                HID_USB_DEVICE(USB_VENDOR_ID_CANDO,
                        USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },
 
-       /* Resistive eGalax devices */
-       {  .driver_data = MT_CLS_EGALAX,
-               HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
-                       USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) },
-       {  .driver_data = MT_CLS_EGALAX,
-               HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
-                       USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH3) },
-
-       /* Capacitive eGalax devices */
-       {  .driver_data = MT_CLS_EGALAX,
-               HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
-                       USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1) },
-       {  .driver_data = MT_CLS_EGALAX,
-               HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
-                       USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH2) },
-       {  .driver_data = MT_CLS_EGALAX,
-               HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
-                       USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH4) },
-
        /* Stantum panels */
-       { .driver_data = MT_CLS_STANTUM,
+       { .driver_data = MT_CLS_CONFIDENCE,
                HID_USB_DEVICE(USB_VENDOR_ID_STANTUM,
                        USB_DEVICE_ID_MTP)},
-       { .driver_data = MT_CLS_STANTUM,
+       { .driver_data = MT_CLS_CONFIDENCE,
                HID_USB_DEVICE(USB_VENDOR_ID_STANTUM,
                        USB_DEVICE_ID_MTP_STM)},
-       { .driver_data = MT_CLS_STANTUM,
+       { .driver_data = MT_CLS_CONFIDENCE,
                HID_USB_DEVICE(USB_VENDOR_ID_STANTUM,
                        USB_DEVICE_ID_MTP_SITRONIX)},
 
+       /* Touch International panels */
+       { .driver_data = MT_CLS_DEFAULT,
+               HID_USB_DEVICE(USB_VENDOR_ID_TOUCH_INTL,
+                       USB_DEVICE_ID_TOUCH_INTL_MULTI_TOUCH) },
+
+       /* Unitec panels */
+       { .driver_data = MT_CLS_DEFAULT,
+               HID_USB_DEVICE(USB_VENDOR_ID_UNITEC,
+                       USB_DEVICE_ID_UNITEC_USB_TOUCH_0709) },
+       { .driver_data = MT_CLS_DEFAULT,
+               HID_USB_DEVICE(USB_VENDOR_ID_UNITEC,
+                       USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) },
+
        { }
 };
 MODULE_DEVICE_TABLE(hid, mt_devices);