~ubuntu-branches/debian/wheezy/linux-2.6/wheezy

« back to all changes in this revision

Viewing changes to drivers/input/tablet/wacom_wac.c

  • Committer: Bazaar Package Importer
  • Author(s): Ben Hutchings, Ben Hutchings, Aurelien Jarno
  • Date: 2011-06-07 12:14:05 UTC
  • mfrom: (43.1.9 sid)
  • Revision ID: james.westby@ubuntu.com-20110607121405-i3h1rd7nrnd2b73h
Tags: 2.6.39-2
[ Ben Hutchings ]
* [x86] Enable BACKLIGHT_APPLE, replacing BACKLIGHT_MBP_NVIDIA
  (Closes: #627492)
* cgroups: Disable memory resource controller by default. Allow it
  to be enabled using kernel parameter 'cgroup_enable=memory'.
* rt2800usb: Enable support for more USB devices including
  Linksys WUSB600N (Closes: #596626) (this change was accidentally
  omitted from 2.6.39-1)
* [x86] Remove Celeron from list of processors supporting PAE. Most
  'Celeron M' models do not.
* Update debconf template translations:
  - Swedish (Martin Bagge) (Closes: #628932)
  - French (David Prévot) (Closes: #628191)
* aufs: Update for 2.6.39 (Closes: #627837)
* Add stable 2.6.39.1, including:
  - ext4: dont set PageUptodate in ext4_end_bio()
  - pata_cmd64x: fix boot crash on parisc (Closes: #622997, #622745)
  - ext3: Fix fs corruption when make_indexed_dir() fails
  - netfilter: nf_ct_sip: validate Content-Length in TCP SIP messages
  - sctp: fix race between sctp_bind_addr_free() and
    sctp_bind_addr_conflict()
  - sctp: fix memory leak of the ASCONF queue when free asoc
  - md/bitmap: fix saving of events_cleared and other state
  - cdc_acm: Fix oops when Droids MuIn LCD is connected
  - cx88: Fix conversion from BKL to fine-grained locks (Closes: #619827)
  - keys: Set cred->user_ns in key_replace_session_keyring (CVE-2011-2184)
  - tmpfs: fix race between truncate and writepage
  - nfs41: Correct offset for LAYOUTCOMMIT
  - xen/mmu: fix a race window causing leave_mm BUG()
  - ext4: fix possible use-after-free in ext4_remove_li_request()
  For the complete list of changes, see:
   http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.39.1
* Bump ABI to 2
* netfilter: Enable IP_SET, IP_SET_BITMAP_IP, IP_SET_BITMAP_IPMAC,
  IP_SET_BITMAP_PORT, IP_SET_HASH_IP, IP_SET_HASH_IPPORT,
  IP_SET_HASH_IPPORTIP, IP_SET_HASH_IPPORTNET, IP_SET_HASH_NET,
  IP_SET_HASH_NETPORT, IP_SET_LIST_SET, NETFILTER_XT_SET as modules
  (Closes: #629401)

[ Aurelien Jarno ]
* [mipsel/loongson-2f] Disable_SCSI_LPFC to workaround GCC ICE.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
#include "wacom.h"
17
17
#include <linux/input/mt.h>
18
18
 
 
19
/* resolution for penabled devices */
 
20
#define WACOM_PL_RES            20
 
21
#define WACOM_PENPRTN_RES       40
 
22
#define WACOM_VOLITO_RES        50
 
23
#define WACOM_GRAPHIRE_RES      80
 
24
#define WACOM_INTUOS_RES        100
 
25
#define WACOM_INTUOS3_RES       200
 
26
 
19
27
static int wacom_penpartner_irq(struct wacom_wac *wacom)
20
28
{
21
29
        unsigned char *data = wacom->data;
675
683
        return 1;
676
684
}
677
685
 
678
 
 
679
 
static void wacom_tpc_finger_in(struct wacom_wac *wacom, char *data, int idx)
680
 
{
681
 
        struct input_dev *input = wacom->input;
682
 
        int finger = idx + 1;
683
 
        int x = le16_to_cpup((__le16 *)&data[finger * 2]) & 0x7fff;
684
 
        int y = le16_to_cpup((__le16 *)&data[4 + finger * 2]) & 0x7fff;
685
 
 
686
 
        /*
687
 
         * Work around input core suppressing "duplicate" events since
688
 
         * we are abusing ABS_X/ABS_Y to transmit multi-finger data.
689
 
         * This should go away once we switch to true multitouch
690
 
         * protocol.
691
 
         */
692
 
        if (wacom->last_finger != finger) {
693
 
                if (x == input_abs_get_val(input, ABS_X))
694
 
                        x++;
695
 
 
696
 
                if (y == input_abs_get_val(input, ABS_Y))
697
 
                        y++;
698
 
        }
699
 
 
700
 
        input_report_abs(input, ABS_X, x);
701
 
        input_report_abs(input, ABS_Y, y);
702
 
        input_report_abs(input, ABS_MISC, wacom->id[0]);
703
 
        input_report_key(input, wacom->tool[finger], 1);
704
 
        if (!idx)
705
 
                input_report_key(input, BTN_TOUCH, 1);
706
 
        input_event(input, EV_MSC, MSC_SERIAL, finger);
707
 
        input_sync(input);
708
 
 
709
 
        wacom->last_finger = finger;
710
 
}
711
 
 
712
 
static void wacom_tpc_touch_out(struct wacom_wac *wacom, int idx)
713
 
{
714
 
        struct input_dev *input = wacom->input;
715
 
        int finger = idx + 1;
716
 
 
717
 
        input_report_abs(input, ABS_X, 0);
718
 
        input_report_abs(input, ABS_Y, 0);
719
 
        input_report_abs(input, ABS_MISC, 0);
720
 
        input_report_key(input, wacom->tool[finger], 0);
721
 
        if (!idx)
722
 
                input_report_key(input, BTN_TOUCH, 0);
723
 
        input_event(input, EV_MSC, MSC_SERIAL, finger);
724
 
        input_sync(input);
725
 
}
726
 
 
727
 
static void wacom_tpc_touch_in(struct wacom_wac *wacom, size_t len)
728
 
{
729
 
        char *data = wacom->data;
730
 
        struct input_dev *input = wacom->input;
731
 
 
732
 
        wacom->tool[1] = BTN_TOOL_DOUBLETAP;
733
 
        wacom->id[0] = TOUCH_DEVICE_ID;
734
 
        wacom->tool[2] = BTN_TOOL_TRIPLETAP;
735
 
 
736
 
        if (len != WACOM_PKGLEN_TPC1FG) {
737
 
 
738
 
                switch (data[0]) {
739
 
 
740
 
                case WACOM_REPORT_TPC1FG:
741
 
                        input_report_abs(input, ABS_X, le16_to_cpup((__le16 *)&data[2]));
742
 
                        input_report_abs(input, ABS_Y, le16_to_cpup((__le16 *)&data[4]));
743
 
                        input_report_abs(input, ABS_PRESSURE, le16_to_cpup((__le16 *)&data[6]));
744
 
                        input_report_key(input, BTN_TOUCH, le16_to_cpup((__le16 *)&data[6]));
745
 
                        input_report_abs(input, ABS_MISC, wacom->id[0]);
746
 
                        input_report_key(input, wacom->tool[1], 1);
747
 
                        input_sync(input);
748
 
                        break;
749
 
 
750
 
                case WACOM_REPORT_TPC2FG:
751
 
                        if (data[1] & 0x01)
752
 
                                wacom_tpc_finger_in(wacom, data, 0);
753
 
                        else if (wacom->id[1] & 0x01)
754
 
                                wacom_tpc_touch_out(wacom, 0);
755
 
 
756
 
                        if (data[1] & 0x02)
757
 
                                wacom_tpc_finger_in(wacom, data, 1);
758
 
                        else if (wacom->id[1] & 0x02)
759
 
                                wacom_tpc_touch_out(wacom, 1);
760
 
                        break;
761
 
                }
762
 
        } else {
763
 
                input_report_abs(input, ABS_X, get_unaligned_le16(&data[1]));
764
 
                input_report_abs(input, ABS_Y, get_unaligned_le16(&data[3]));
765
 
                input_report_key(input, BTN_TOUCH, 1);
766
 
                input_report_abs(input, ABS_MISC, wacom->id[1]);
767
 
                input_report_key(input, wacom->tool[1], 1);
768
 
                input_sync(input);
769
 
        }
770
 
}
771
 
 
772
 
static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len)
773
 
{
774
 
        struct wacom_features *features = &wacom->features;
775
 
        char *data = wacom->data;
776
 
        struct input_dev *input = wacom->input;
777
 
        int prox = 0, pressure;
778
 
        int retval = 0;
779
 
 
780
 
        dbg("wacom_tpc_irq: received report #%d", data[0]);
781
 
 
782
 
        if (len == WACOM_PKGLEN_TPC1FG ||                /* single touch */
783
 
            data[0] == WACOM_REPORT_TPC1FG ||            /* single touch */
784
 
            data[0] == WACOM_REPORT_TPC2FG) {            /* 2FG touch */
785
 
 
786
 
                if (wacom->shared->stylus_in_proximity) {
787
 
                        if (wacom->id[1] & 0x01)
788
 
                                wacom_tpc_touch_out(wacom, 0);
789
 
 
790
 
                        if (wacom->id[1] & 0x02)
791
 
                                wacom_tpc_touch_out(wacom, 1);
792
 
 
793
 
                        wacom->id[1] = 0;
794
 
                        return 0;
795
 
                }
796
 
 
797
 
                if (len == WACOM_PKGLEN_TPC1FG) {       /* with touch */
 
686
static int wacom_tpc_mt_touch(struct wacom_wac *wacom)
 
687
{
 
688
        struct input_dev *input = wacom->input;
 
689
        unsigned char *data = wacom->data;
 
690
        int contact_with_no_pen_down_count = 0;
 
691
        int i;
 
692
 
 
693
        for (i = 0; i < 2; i++) {
 
694
                int p = data[1] & (1 << i);
 
695
                bool touch = p && !wacom->shared->stylus_in_proximity;
 
696
 
 
697
                input_mt_slot(input, i);
 
698
                input_mt_report_slot_state(input, MT_TOOL_FINGER, touch);
 
699
                if (touch) {
 
700
                        int x = le16_to_cpup((__le16 *)&data[i * 2 + 2]) & 0x7fff;
 
701
                        int y = le16_to_cpup((__le16 *)&data[i * 2 + 6]) & 0x7fff;
 
702
 
 
703
                        input_report_abs(input, ABS_MT_POSITION_X, x);
 
704
                        input_report_abs(input, ABS_MT_POSITION_Y, y);
 
705
                        contact_with_no_pen_down_count++;
 
706
                }
 
707
        }
 
708
 
 
709
        /* keep touch state for pen event */
 
710
        wacom->shared->touch_down = (contact_with_no_pen_down_count > 0);
 
711
 
 
712
        input_mt_report_pointer_emulation(input, true);
 
713
 
 
714
        return 1;
 
715
}
 
716
 
 
717
static int wacom_tpc_single_touch(struct wacom_wac *wacom, size_t len)
 
718
{
 
719
        char *data = wacom->data;
 
720
        struct input_dev *input = wacom->input;
 
721
        bool prox;
 
722
        int x = 0, y = 0;
 
723
 
 
724
        if (!wacom->shared->stylus_in_proximity) {
 
725
                if (len == WACOM_PKGLEN_TPC1FG) {
798
726
                        prox = data[0] & 0x01;
799
 
                } else {  /* with capacity */
800
 
                        if (data[0] == WACOM_REPORT_TPC1FG)
801
 
                                /* single touch */
802
 
                                prox = data[1] & 0x01;
803
 
                        else
804
 
                                /* 2FG touch data */
805
 
                                prox = data[1] & 0x03;
806
 
                }
807
 
 
808
 
                if (prox) {
809
 
                        if (!wacom->id[1])
810
 
                                wacom->last_finger = 1;
811
 
                        wacom_tpc_touch_in(wacom, len);
812
 
                } else {
813
 
                        if (data[0] == WACOM_REPORT_TPC2FG) {
814
 
                                /* 2FGT out-prox */
815
 
                                if (wacom->id[1] & 0x01)
816
 
                                        wacom_tpc_touch_out(wacom, 0);
817
 
 
818
 
                                if (wacom->id[1] & 0x02)
819
 
                                        wacom_tpc_touch_out(wacom, 1);
820
 
                        } else
821
 
                                /* one finger touch */
822
 
                                wacom_tpc_touch_out(wacom, 0);
823
 
 
824
 
                        wacom->id[0] = 0;
825
 
                }
826
 
                /* keep prox bit to send proper out-prox event */
827
 
                wacom->id[1] = prox;
828
 
        } else if (data[0] == WACOM_REPORT_PENABLED) { /* Penabled */
829
 
                prox = data[1] & 0x20;
830
 
 
831
 
                if (!wacom->shared->stylus_in_proximity) { /* first in prox */
832
 
                        /* Going into proximity select tool */
833
 
                        wacom->tool[0] = (data[1] & 0x0c) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN;
834
 
                        if (wacom->tool[0] == BTN_TOOL_PEN)
835
 
                                wacom->id[0] = STYLUS_DEVICE_ID;
836
 
                        else
837
 
                                wacom->id[0] = ERASER_DEVICE_ID;
838
 
 
839
 
                        wacom->shared->stylus_in_proximity = true;
840
 
                }
 
727
                        x = get_unaligned_le16(&data[1]);
 
728
                        y = get_unaligned_le16(&data[3]);
 
729
                } else { /* with capacity */
 
730
                        prox = data[1] & 0x01;
 
731
                        x = le16_to_cpup((__le16 *)&data[2]);
 
732
                        y = le16_to_cpup((__le16 *)&data[4]);
 
733
                }
 
734
        } else
 
735
                /* force touch out when pen is in prox */
 
736
                prox = 0;
 
737
 
 
738
        if (prox) {
 
739
                input_report_abs(input, ABS_X, x);
 
740
                input_report_abs(input, ABS_Y, y);
 
741
        }
 
742
        input_report_key(input, BTN_TOUCH, prox);
 
743
 
 
744
        /* keep touch state for pen events */
 
745
        wacom->shared->touch_down = prox;
 
746
 
 
747
        return 1;
 
748
}
 
749
 
 
750
static int wacom_tpc_pen(struct wacom_wac *wacom)
 
751
{
 
752
        struct wacom_features *features = &wacom->features;
 
753
        char *data = wacom->data;
 
754
        struct input_dev *input = wacom->input;
 
755
        int pressure;
 
756
        bool prox = data[1] & 0x20;
 
757
 
 
758
        if (!wacom->shared->stylus_in_proximity) /* first in prox */
 
759
                /* Going into proximity select tool */
 
760
                wacom->tool[0] = (data[1] & 0x0c) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN;
 
761
 
 
762
        /* keep pen state for touch events */
 
763
        wacom->shared->stylus_in_proximity = prox;
 
764
 
 
765
        /* send pen events only when touch is up or forced out */
 
766
        if (!wacom->shared->touch_down) {
841
767
                input_report_key(input, BTN_STYLUS, data[1] & 0x02);
842
768
                input_report_key(input, BTN_STYLUS2, data[1] & 0x10);
843
769
                input_report_abs(input, ABS_X, le16_to_cpup((__le16 *)&data[2]));
847
773
                        pressure = features->pressure_max + pressure + 1;
848
774
                input_report_abs(input, ABS_PRESSURE, pressure);
849
775
                input_report_key(input, BTN_TOUCH, data[1] & 0x05);
850
 
                if (!prox) { /* out-prox */
851
 
                        wacom->id[0] = 0;
852
 
                        wacom->shared->stylus_in_proximity = false;
853
 
                }
854
776
                input_report_key(input, wacom->tool[0], prox);
855
 
                input_report_abs(input, ABS_MISC, wacom->id[0]);
856
 
                retval = 1;
 
777
                return 1;
857
778
        }
858
 
        return retval;
 
779
 
 
780
        return 0;
 
781
}
 
782
 
 
783
static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len)
 
784
{
 
785
        char *data = wacom->data;
 
786
 
 
787
        dbg("wacom_tpc_irq: received report #%d", data[0]);
 
788
 
 
789
        if (len == WACOM_PKGLEN_TPC1FG || data[0] == WACOM_REPORT_TPC1FG)
 
790
                return wacom_tpc_single_touch(wacom, len);
 
791
        else if (data[0] == WACOM_REPORT_TPC2FG)
 
792
                return wacom_tpc_mt_touch(wacom);
 
793
        else if (data[0] == WACOM_REPORT_PENABLED)
 
794
                return wacom_tpc_pen(wacom);
 
795
 
 
796
        return 0;
859
797
}
860
798
 
861
799
static int wacom_bpt_touch(struct wacom_wac *wacom)
1078
1016
{
1079
1017
 
1080
1018
        /* touch device found but size is not defined. use default */
1081
 
        if (features->device_type == BTN_TOOL_DOUBLETAP && !features->x_max) {
 
1019
        if (features->device_type == BTN_TOOL_FINGER && !features->x_max) {
1082
1020
                features->x_max = 1023;
1083
1021
                features->y_max = 1023;
1084
1022
        }
1090
1028
 
1091
1029
        /* quirks for bamboo touch */
1092
1030
        if (features->type == BAMBOO_PT &&
1093
 
            features->device_type == BTN_TOOL_TRIPLETAP) {
 
1031
            features->device_type == BTN_TOOL_DOUBLETAP) {
1094
1032
                features->x_max <<= 5;
1095
1033
                features->y_max <<= 5;
1096
1034
                features->x_fuzz <<= 5;
1125
1063
        input_set_abs_params(input_dev, ABS_PRESSURE, 0, features->pressure_max,
1126
1064
                             features->pressure_fuzz, 0);
1127
1065
 
 
1066
        if (features->device_type == BTN_TOOL_PEN) {
 
1067
                /* penabled devices have fixed resolution for each model */
 
1068
                input_abs_set_res(input_dev, ABS_X, features->x_resolution);
 
1069
                input_abs_set_res(input_dev, ABS_Y, features->y_resolution);
 
1070
        } else {
 
1071
                input_abs_set_res(input_dev, ABS_X,
 
1072
                        wacom_calculate_touch_res(features->x_max,
 
1073
                                                features->x_phy));
 
1074
                input_abs_set_res(input_dev, ABS_Y,
 
1075
                        wacom_calculate_touch_res(features->y_max,
 
1076
                                                features->y_phy));
 
1077
        }
 
1078
 
1128
1079
        __set_bit(ABS_MISC, input_dev->absbit);
1129
1080
 
1130
1081
        switch (wacom_wac->features.type) {
1226
1177
                break;
1227
1178
 
1228
1179
        case TABLETPC2FG:
1229
 
                if (features->device_type == BTN_TOOL_TRIPLETAP) {
1230
 
                        __set_bit(BTN_TOOL_TRIPLETAP, input_dev->keybit);
1231
 
                        input_set_capability(input_dev, EV_MSC, MSC_SERIAL);
 
1180
                if (features->device_type == BTN_TOOL_DOUBLETAP) {
 
1181
 
 
1182
                        input_mt_init_slots(input_dev, 2);
 
1183
                        input_set_abs_params(input_dev, ABS_MT_TOOL_TYPE,
 
1184
                                        0, MT_TOOL_MAX, 0, 0);
 
1185
                        input_set_abs_params(input_dev, ABS_MT_POSITION_X,
 
1186
                                        0, features->x_max, 0, 0);
 
1187
                        input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
 
1188
                                        0, features->y_max, 0, 0);
1232
1189
                }
1233
1190
                /* fall through */
1234
1191
 
1235
1192
        case TABLETPC:
1236
 
                if (features->device_type == BTN_TOOL_DOUBLETAP ||
1237
 
                    features->device_type == BTN_TOOL_TRIPLETAP) {
1238
 
                        input_abs_set_res(input_dev, ABS_X,
1239
 
                                wacom_calculate_touch_res(features->x_max,
1240
 
                                                        features->x_phy));
1241
 
                        input_abs_set_res(input_dev, ABS_Y,
1242
 
                                wacom_calculate_touch_res(features->y_max,
1243
 
                                                        features->y_phy));
1244
 
                        __set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit);
1245
 
                }
 
1193
                __clear_bit(ABS_MISC, input_dev->absbit);
1246
1194
 
1247
1195
                if (features->device_type != BTN_TOOL_PEN)
1248
1196
                        break;  /* no need to process stylus stuff */
1264
1212
        case BAMBOO_PT:
1265
1213
                __clear_bit(ABS_MISC, input_dev->absbit);
1266
1214
 
1267
 
                if (features->device_type == BTN_TOOL_TRIPLETAP) {
 
1215
                if (features->device_type == BTN_TOOL_DOUBLETAP) {
1268
1216
                        __set_bit(BTN_LEFT, input_dev->keybit);
1269
1217
                        __set_bit(BTN_FORWARD, input_dev->keybit);
1270
1218
                        __set_bit(BTN_BACK, input_dev->keybit);
1283
1231
                        input_set_abs_params(input_dev, ABS_MT_PRESSURE,
1284
1232
                                             0, features->pressure_max,
1285
1233
                                             features->pressure_fuzz, 0);
1286
 
                        input_abs_set_res(input_dev, ABS_X,
1287
 
                                wacom_calculate_touch_res(features->x_max,
1288
 
                                                        features->x_phy));
1289
 
                        input_abs_set_res(input_dev, ABS_Y,
1290
 
                                wacom_calculate_touch_res(features->y_max,
1291
 
                                                        features->y_phy));
1292
1234
                } else if (features->device_type == BTN_TOOL_PEN) {
1293
1235
                        __set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
1294
1236
                        __set_bit(BTN_TOOL_PEN, input_dev->keybit);
1300
1242
}
1301
1243
 
1302
1244
static const struct wacom_features wacom_features_0x00 =
1303
 
        { "Wacom Penpartner",     WACOM_PKGLEN_PENPRTN,    5040,  3780,  255,  0, PENPARTNER };
 
1245
        { "Wacom Penpartner",     WACOM_PKGLEN_PENPRTN,    5040,  3780,  255,
 
1246
          0, PENPARTNER, WACOM_PENPRTN_RES, WACOM_PENPRTN_RES };
1304
1247
static const struct wacom_features wacom_features_0x10 =
1305
 
        { "Wacom Graphire",       WACOM_PKGLEN_GRAPHIRE,  10206,  7422,  511, 63, GRAPHIRE };
 
1248
        { "Wacom Graphire",       WACOM_PKGLEN_GRAPHIRE,  10206,  7422,  511,
 
1249
          63, GRAPHIRE, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1306
1250
static const struct wacom_features wacom_features_0x11 =
1307
 
        { "Wacom Graphire2 4x5",  WACOM_PKGLEN_GRAPHIRE,  10206,  7422,  511, 63, GRAPHIRE };
 
1251
        { "Wacom Graphire2 4x5",  WACOM_PKGLEN_GRAPHIRE,  10206,  7422,  511,
 
1252
          63, GRAPHIRE, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1308
1253
static const struct wacom_features wacom_features_0x12 =
1309
 
        { "Wacom Graphire2 5x7",  WACOM_PKGLEN_GRAPHIRE,  13918, 10206,  511, 63, GRAPHIRE };
 
1254
        { "Wacom Graphire2 5x7",  WACOM_PKGLEN_GRAPHIRE,  13918, 10206,  511,
 
1255
          63, GRAPHIRE, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1310
1256
static const struct wacom_features wacom_features_0x13 =
1311
 
        { "Wacom Graphire3",      WACOM_PKGLEN_GRAPHIRE,  10208,  7424,  511, 63, GRAPHIRE };
 
1257
        { "Wacom Graphire3",      WACOM_PKGLEN_GRAPHIRE,  10208,  7424,  511,
 
1258
          63, GRAPHIRE, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1312
1259
static const struct wacom_features wacom_features_0x14 =
1313
 
        { "Wacom Graphire3 6x8",  WACOM_PKGLEN_GRAPHIRE,  16704, 12064,  511, 63, GRAPHIRE };
 
1260
        { "Wacom Graphire3 6x8",  WACOM_PKGLEN_GRAPHIRE,  16704, 12064,  511,
 
1261
          63, GRAPHIRE, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1314
1262
static const struct wacom_features wacom_features_0x15 =
1315
 
        { "Wacom Graphire4 4x5",  WACOM_PKGLEN_GRAPHIRE,  10208,  7424,  511, 63, WACOM_G4 };
 
1263
        { "Wacom Graphire4 4x5",  WACOM_PKGLEN_GRAPHIRE,  10208,  7424,  511,
 
1264
          63, WACOM_G4, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1316
1265
static const struct wacom_features wacom_features_0x16 =
1317
 
        { "Wacom Graphire4 6x8",  WACOM_PKGLEN_GRAPHIRE,  16704, 12064,  511, 63, WACOM_G4 };
 
1266
        { "Wacom Graphire4 6x8",  WACOM_PKGLEN_GRAPHIRE,  16704, 12064,  511,
 
1267
          63, WACOM_G4, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1318
1268
static const struct wacom_features wacom_features_0x17 =
1319
 
        { "Wacom BambooFun 4x5",  WACOM_PKGLEN_BBFUN,     14760,  9225,  511, 63, WACOM_MO };
 
1269
        { "Wacom BambooFun 4x5",  WACOM_PKGLEN_BBFUN,     14760,  9225,  511,
 
1270
          63, WACOM_MO, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1320
1271
static const struct wacom_features wacom_features_0x18 =
1321
 
        { "Wacom BambooFun 6x8",  WACOM_PKGLEN_BBFUN,     21648, 13530,  511, 63, WACOM_MO };
 
1272
        { "Wacom BambooFun 6x8",  WACOM_PKGLEN_BBFUN,     21648, 13530,  511,
 
1273
          63, WACOM_MO, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1322
1274
static const struct wacom_features wacom_features_0x19 =
1323
 
        { "Wacom Bamboo1 Medium", WACOM_PKGLEN_GRAPHIRE,  16704, 12064,  511, 63, GRAPHIRE };
 
1275
        { "Wacom Bamboo1 Medium", WACOM_PKGLEN_GRAPHIRE,  16704, 12064,  511,
 
1276
          63, GRAPHIRE, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1324
1277
static const struct wacom_features wacom_features_0x60 =
1325
 
        { "Wacom Volito",         WACOM_PKGLEN_GRAPHIRE,   5104,  3712,  511, 63, GRAPHIRE };
 
1278
        { "Wacom Volito",         WACOM_PKGLEN_GRAPHIRE,   5104,  3712,  511,
 
1279
          63, GRAPHIRE, WACOM_VOLITO_RES, WACOM_VOLITO_RES };
1326
1280
static const struct wacom_features wacom_features_0x61 =
1327
 
        { "Wacom PenStation2",    WACOM_PKGLEN_GRAPHIRE,   3250,  2320,  255, 63, GRAPHIRE };
 
1281
        { "Wacom PenStation2",    WACOM_PKGLEN_GRAPHIRE,   3250,  2320,  255,
 
1282
          63, GRAPHIRE, WACOM_VOLITO_RES, WACOM_VOLITO_RES };
1328
1283
static const struct wacom_features wacom_features_0x62 =
1329
 
        { "Wacom Volito2 4x5",    WACOM_PKGLEN_GRAPHIRE,   5104,  3712,  511, 63, GRAPHIRE };
 
1284
        { "Wacom Volito2 4x5",    WACOM_PKGLEN_GRAPHIRE,   5104,  3712,  511,
 
1285
          63, GRAPHIRE, WACOM_VOLITO_RES, WACOM_VOLITO_RES };
1330
1286
static const struct wacom_features wacom_features_0x63 =
1331
 
        { "Wacom Volito2 2x3",    WACOM_PKGLEN_GRAPHIRE,   3248,  2320,  511, 63, GRAPHIRE };
 
1287
        { "Wacom Volito2 2x3",    WACOM_PKGLEN_GRAPHIRE,   3248,  2320,  511,
 
1288
          63, GRAPHIRE, WACOM_VOLITO_RES, WACOM_VOLITO_RES };
1332
1289
static const struct wacom_features wacom_features_0x64 =
1333
 
        { "Wacom PenPartner2",    WACOM_PKGLEN_GRAPHIRE,   3250,  2320,  511, 63, GRAPHIRE };
 
1290
        { "Wacom PenPartner2",    WACOM_PKGLEN_GRAPHIRE,   3250,  2320,  511,
 
1291
          63, GRAPHIRE, WACOM_VOLITO_RES, WACOM_VOLITO_RES };
1334
1292
static const struct wacom_features wacom_features_0x65 =
1335
 
        { "Wacom Bamboo",         WACOM_PKGLEN_BBFUN,     14760,  9225,  511, 63, WACOM_MO };
 
1293
        { "Wacom Bamboo",         WACOM_PKGLEN_BBFUN,     14760,  9225,  511,
 
1294
          63, WACOM_MO, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1336
1295
static const struct wacom_features wacom_features_0x69 =
1337
 
        { "Wacom Bamboo1",        WACOM_PKGLEN_GRAPHIRE,   5104,  3712,  511, 63, GRAPHIRE };
 
1296
        { "Wacom Bamboo1",        WACOM_PKGLEN_GRAPHIRE,   5104,  3712,  511,
 
1297
          63, GRAPHIRE, WACOM_PENPRTN_RES, WACOM_PENPRTN_RES };
1338
1298
static const struct wacom_features wacom_features_0x20 =
1339
 
        { "Wacom Intuos 4x5",     WACOM_PKGLEN_INTUOS,    12700, 10600, 1023, 31, INTUOS };
 
1299
        { "Wacom Intuos 4x5",     WACOM_PKGLEN_INTUOS,    12700, 10600, 1023,
 
1300
          31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1340
1301
static const struct wacom_features wacom_features_0x21 =
1341
 
        { "Wacom Intuos 6x8",     WACOM_PKGLEN_INTUOS,    20320, 16240, 1023, 31, INTUOS };
 
1302
        { "Wacom Intuos 6x8",     WACOM_PKGLEN_INTUOS,    20320, 16240, 1023,
 
1303
          31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1342
1304
static const struct wacom_features wacom_features_0x22 =
1343
 
        { "Wacom Intuos 9x12",    WACOM_PKGLEN_INTUOS,    30480, 24060, 1023, 31, INTUOS };
 
1305
        { "Wacom Intuos 9x12",    WACOM_PKGLEN_INTUOS,    30480, 24060, 1023,
 
1306
          31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1344
1307
static const struct wacom_features wacom_features_0x23 =
1345
 
        { "Wacom Intuos 12x12",   WACOM_PKGLEN_INTUOS,    30480, 31680, 1023, 31, INTUOS };
 
1308
        { "Wacom Intuos 12x12",   WACOM_PKGLEN_INTUOS,    30480, 31680, 1023,
 
1309
          31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1346
1310
static const struct wacom_features wacom_features_0x24 =
1347
 
        { "Wacom Intuos 12x18",   WACOM_PKGLEN_INTUOS,    45720, 31680, 1023, 31, INTUOS };
 
1311
        { "Wacom Intuos 12x18",   WACOM_PKGLEN_INTUOS,    45720, 31680, 1023,
 
1312
          31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1348
1313
static const struct wacom_features wacom_features_0x30 =
1349
 
        { "Wacom PL400",          WACOM_PKGLEN_GRAPHIRE,   5408,  4056,  255,  0, PL };
 
1314
        { "Wacom PL400",          WACOM_PKGLEN_GRAPHIRE,   5408,  4056,  255,
 
1315
          0, PL, WACOM_PL_RES, WACOM_PL_RES };
1350
1316
static const struct wacom_features wacom_features_0x31 =
1351
 
        { "Wacom PL500",          WACOM_PKGLEN_GRAPHIRE,   6144,  4608,  255,  0, PL };
 
1317
        { "Wacom PL500",          WACOM_PKGLEN_GRAPHIRE,   6144,  4608,  255,
 
1318
          0, PL, WACOM_PL_RES, WACOM_PL_RES };
1352
1319
static const struct wacom_features wacom_features_0x32 =
1353
 
        { "Wacom PL600",          WACOM_PKGLEN_GRAPHIRE,   6126,  4604,  255,  0, PL };
 
1320
        { "Wacom PL600",          WACOM_PKGLEN_GRAPHIRE,   6126,  4604,  255,
 
1321
          0, PL, WACOM_PL_RES, WACOM_PL_RES };
1354
1322
static const struct wacom_features wacom_features_0x33 =
1355
 
        { "Wacom PL600SX",        WACOM_PKGLEN_GRAPHIRE,   6260,  5016,  255,  0, PL };
 
1323
        { "Wacom PL600SX",        WACOM_PKGLEN_GRAPHIRE,   6260,  5016,  255,
 
1324
          0, PL, WACOM_PL_RES, WACOM_PL_RES };
1356
1325
static const struct wacom_features wacom_features_0x34 =
1357
 
        { "Wacom PL550",          WACOM_PKGLEN_GRAPHIRE,   6144,  4608,  511,  0, PL };
 
1326
        { "Wacom PL550",          WACOM_PKGLEN_GRAPHIRE,   6144,  4608,  511,
 
1327
          0, PL, WACOM_PL_RES, WACOM_PL_RES };
1358
1328
static const struct wacom_features wacom_features_0x35 =
1359
 
        { "Wacom PL800",          WACOM_PKGLEN_GRAPHIRE,   7220,  5780,  511,  0, PL };
 
1329
        { "Wacom PL800",          WACOM_PKGLEN_GRAPHIRE,   7220,  5780,  511,
 
1330
          0, PL, WACOM_PL_RES, WACOM_PL_RES };
1360
1331
static const struct wacom_features wacom_features_0x37 =
1361
 
        { "Wacom PL700",          WACOM_PKGLEN_GRAPHIRE,   6758,  5406,  511,  0, PL };
 
1332
        { "Wacom PL700",          WACOM_PKGLEN_GRAPHIRE,   6758,  5406,  511,
 
1333
          0, PL, WACOM_PL_RES, WACOM_PL_RES };
1362
1334
static const struct wacom_features wacom_features_0x38 =
1363
 
        { "Wacom PL510",          WACOM_PKGLEN_GRAPHIRE,   6282,  4762,  511,  0, PL };
 
1335
        { "Wacom PL510",          WACOM_PKGLEN_GRAPHIRE,   6282,  4762,  511,
 
1336
          0, PL, WACOM_PL_RES, WACOM_PL_RES };
1364
1337
static const struct wacom_features wacom_features_0x39 =
1365
 
        { "Wacom DTU710",         WACOM_PKGLEN_GRAPHIRE,  34080, 27660,  511,  0, PL };
 
1338
        { "Wacom DTU710",         WACOM_PKGLEN_GRAPHIRE,  34080, 27660,  511,
 
1339
          0, PL, WACOM_PL_RES, WACOM_PL_RES };
1366
1340
static const struct wacom_features wacom_features_0xC4 =
1367
 
        { "Wacom DTF521",         WACOM_PKGLEN_GRAPHIRE,   6282,  4762,  511,  0, PL };
 
1341
        { "Wacom DTF521",         WACOM_PKGLEN_GRAPHIRE,   6282,  4762,  511,
 
1342
          0, PL, WACOM_PL_RES, WACOM_PL_RES };
1368
1343
static const struct wacom_features wacom_features_0xC0 =
1369
 
        { "Wacom DTF720",         WACOM_PKGLEN_GRAPHIRE,   6858,  5506,  511,  0, PL };
 
1344
        { "Wacom DTF720",         WACOM_PKGLEN_GRAPHIRE,   6858,  5506,  511,
 
1345
          0, PL, WACOM_PL_RES, WACOM_PL_RES };
1370
1346
static const struct wacom_features wacom_features_0xC2 =
1371
 
        { "Wacom DTF720a",        WACOM_PKGLEN_GRAPHIRE,   6858,  5506,  511,  0, PL };
 
1347
        { "Wacom DTF720a",        WACOM_PKGLEN_GRAPHIRE,   6858,  5506,  511,
 
1348
          0, PL, WACOM_PL_RES, WACOM_PL_RES };
1372
1349
static const struct wacom_features wacom_features_0x03 =
1373
 
        { "Wacom Cintiq Partner", WACOM_PKGLEN_GRAPHIRE,  20480, 15360,  511,  0, PTU };
 
1350
        { "Wacom Cintiq Partner", WACOM_PKGLEN_GRAPHIRE,  20480, 15360,  511,
 
1351
          0, PTU, WACOM_PL_RES, WACOM_PL_RES };
1374
1352
static const struct wacom_features wacom_features_0x41 =
1375
 
        { "Wacom Intuos2 4x5",    WACOM_PKGLEN_INTUOS,    12700, 10600, 1023, 31, INTUOS };
 
1353
        { "Wacom Intuos2 4x5",    WACOM_PKGLEN_INTUOS,    12700, 10600, 1023,
 
1354
          31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1376
1355
static const struct wacom_features wacom_features_0x42 =
1377
 
        { "Wacom Intuos2 6x8",    WACOM_PKGLEN_INTUOS,    20320, 16240, 1023, 31, INTUOS };
 
1356
        { "Wacom Intuos2 6x8",    WACOM_PKGLEN_INTUOS,    20320, 16240, 1023,
 
1357
          31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1378
1358
static const struct wacom_features wacom_features_0x43 =
1379
 
        { "Wacom Intuos2 9x12",   WACOM_PKGLEN_INTUOS,    30480, 24060, 1023, 31, INTUOS };
 
1359
        { "Wacom Intuos2 9x12",   WACOM_PKGLEN_INTUOS,    30480, 24060, 1023,
 
1360
          31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1380
1361
static const struct wacom_features wacom_features_0x44 =
1381
 
        { "Wacom Intuos2 12x12",  WACOM_PKGLEN_INTUOS,    30480, 31680, 1023, 31, INTUOS };
 
1362
        { "Wacom Intuos2 12x12",  WACOM_PKGLEN_INTUOS,    30480, 31680, 1023,
 
1363
          31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1382
1364
static const struct wacom_features wacom_features_0x45 =
1383
 
        { "Wacom Intuos2 12x18",  WACOM_PKGLEN_INTUOS,    45720, 31680, 1023, 31, INTUOS };
 
1365
        { "Wacom Intuos2 12x18",  WACOM_PKGLEN_INTUOS,    45720, 31680, 1023,
 
1366
          31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1384
1367
static const struct wacom_features wacom_features_0xB0 =
1385
 
        { "Wacom Intuos3 4x5",    WACOM_PKGLEN_INTUOS,    25400, 20320, 1023, 63, INTUOS3S };
 
1368
        { "Wacom Intuos3 4x5",    WACOM_PKGLEN_INTUOS,    25400, 20320, 1023,
 
1369
          63, INTUOS3S, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1386
1370
static const struct wacom_features wacom_features_0xB1 =
1387
 
        { "Wacom Intuos3 6x8",    WACOM_PKGLEN_INTUOS,    40640, 30480, 1023, 63, INTUOS3 };
 
1371
        { "Wacom Intuos3 6x8",    WACOM_PKGLEN_INTUOS,    40640, 30480, 1023,
 
1372
          63, INTUOS3, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1388
1373
static const struct wacom_features wacom_features_0xB2 =
1389
 
        { "Wacom Intuos3 9x12",   WACOM_PKGLEN_INTUOS,    60960, 45720, 1023, 63, INTUOS3 };
 
1374
        { "Wacom Intuos3 9x12",   WACOM_PKGLEN_INTUOS,    60960, 45720, 1023,
 
1375
          63, INTUOS3, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1390
1376
static const struct wacom_features wacom_features_0xB3 =
1391
 
        { "Wacom Intuos3 12x12",  WACOM_PKGLEN_INTUOS,    60960, 60960, 1023, 63, INTUOS3L };
 
1377
        { "Wacom Intuos3 12x12",  WACOM_PKGLEN_INTUOS,    60960, 60960, 1023,
 
1378
          63, INTUOS3L, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1392
1379
static const struct wacom_features wacom_features_0xB4 =
1393
 
        { "Wacom Intuos3 12x19",  WACOM_PKGLEN_INTUOS,    97536, 60960, 1023, 63, INTUOS3L };
 
1380
        { "Wacom Intuos3 12x19",  WACOM_PKGLEN_INTUOS,    97536, 60960, 1023,
 
1381
          63, INTUOS3L, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1394
1382
static const struct wacom_features wacom_features_0xB5 =
1395
 
        { "Wacom Intuos3 6x11",   WACOM_PKGLEN_INTUOS,    54204, 31750, 1023, 63, INTUOS3 };
 
1383
        { "Wacom Intuos3 6x11",   WACOM_PKGLEN_INTUOS,    54204, 31750, 1023,
 
1384
          63, INTUOS3, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1396
1385
static const struct wacom_features wacom_features_0xB7 =
1397
 
        { "Wacom Intuos3 4x6",    WACOM_PKGLEN_INTUOS,    31496, 19685, 1023, 63, INTUOS3S };
 
1386
        { "Wacom Intuos3 4x6",    WACOM_PKGLEN_INTUOS,    31496, 19685, 1023,
 
1387
          63, INTUOS3S, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1398
1388
static const struct wacom_features wacom_features_0xB8 =
1399
 
        { "Wacom Intuos4 4x6",    WACOM_PKGLEN_INTUOS,    31496, 19685, 2047, 63, INTUOS4S };
 
1389
        { "Wacom Intuos4 4x6",    WACOM_PKGLEN_INTUOS,    31496, 19685, 2047,
 
1390
          63, INTUOS4S, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1400
1391
static const struct wacom_features wacom_features_0xB9 =
1401
 
        { "Wacom Intuos4 6x9",    WACOM_PKGLEN_INTUOS,    44704, 27940, 2047, 63, INTUOS4 };
 
1392
        { "Wacom Intuos4 6x9",    WACOM_PKGLEN_INTUOS,    44704, 27940, 2047,
 
1393
          63, INTUOS4, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1402
1394
static const struct wacom_features wacom_features_0xBA =
1403
 
        { "Wacom Intuos4 8x13",   WACOM_PKGLEN_INTUOS,    65024, 40640, 2047, 63, INTUOS4L };
 
1395
        { "Wacom Intuos4 8x13",   WACOM_PKGLEN_INTUOS,    65024, 40640, 2047,
 
1396
          63, INTUOS4L, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1404
1397
static const struct wacom_features wacom_features_0xBB =
1405
 
        { "Wacom Intuos4 12x19",  WACOM_PKGLEN_INTUOS,    97536, 60960, 2047, 63, INTUOS4L };
 
1398
        { "Wacom Intuos4 12x19",  WACOM_PKGLEN_INTUOS,    97536, 60960, 2047,
 
1399
          63, INTUOS4L, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1406
1400
static const struct wacom_features wacom_features_0xBC =
1407
 
        { "Wacom Intuos4 WL",     WACOM_PKGLEN_INTUOS,    40840, 25400, 2047, 63, INTUOS4 };
 
1401
        { "Wacom Intuos4 WL",     WACOM_PKGLEN_INTUOS,    40840, 25400, 2047,
 
1402
          63, INTUOS4, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1408
1403
static const struct wacom_features wacom_features_0x3F =
1409
 
        { "Wacom Cintiq 21UX",    WACOM_PKGLEN_INTUOS,    87200, 65600, 1023, 63, CINTIQ };
 
1404
        { "Wacom Cintiq 21UX",    WACOM_PKGLEN_INTUOS,    87200, 65600, 1023,
 
1405
          63, CINTIQ, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1410
1406
static const struct wacom_features wacom_features_0xC5 =
1411
 
        { "Wacom Cintiq 20WSX",   WACOM_PKGLEN_INTUOS,    86680, 54180, 1023, 63, WACOM_BEE };
 
1407
        { "Wacom Cintiq 20WSX",   WACOM_PKGLEN_INTUOS,    86680, 54180, 1023,
 
1408
          63, WACOM_BEE, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1412
1409
static const struct wacom_features wacom_features_0xC6 =
1413
 
        { "Wacom Cintiq 12WX",    WACOM_PKGLEN_INTUOS,    53020, 33440, 1023, 63, WACOM_BEE };
 
1410
        { "Wacom Cintiq 12WX",    WACOM_PKGLEN_INTUOS,    53020, 33440, 1023,
 
1411
          63, WACOM_BEE, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1414
1412
static const struct wacom_features wacom_features_0xC7 =
1415
 
        { "Wacom DTU1931",        WACOM_PKGLEN_GRAPHIRE,  37832, 30305,  511,  0, PL };
 
1413
        { "Wacom DTU1931",        WACOM_PKGLEN_GRAPHIRE,  37832, 30305,  511,
 
1414
          0, PL, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1416
1415
static const struct wacom_features wacom_features_0xCE =
1417
 
        { "Wacom DTU2231",        WACOM_PKGLEN_GRAPHIRE,  47864, 27011,  511,  0, DTU };
 
1416
        { "Wacom DTU2231",        WACOM_PKGLEN_GRAPHIRE,  47864, 27011,  511,
 
1417
          0, DTU, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1418
1418
static const struct wacom_features wacom_features_0xF0 =
1419
 
        { "Wacom DTU1631",        WACOM_PKGLEN_GRAPHIRE,  34623, 19553,  511,  0, DTU };
 
1419
        { "Wacom DTU1631",        WACOM_PKGLEN_GRAPHIRE,  34623, 19553,  511,
 
1420
          0, DTU, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1420
1421
static const struct wacom_features wacom_features_0xCC =
1421
 
        { "Wacom Cintiq 21UX2",   WACOM_PKGLEN_INTUOS,    87200, 65600, 2047, 63, WACOM_21UX2 };
 
1422
        { "Wacom Cintiq 21UX2",   WACOM_PKGLEN_INTUOS,    87200, 65600, 2047,
 
1423
          63, WACOM_21UX2, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1422
1424
static const struct wacom_features wacom_features_0x90 =
1423
 
        { "Wacom ISDv4 90",       WACOM_PKGLEN_GRAPHIRE,  26202, 16325,  255,  0, TABLETPC };
 
1425
        { "Wacom ISDv4 90",       WACOM_PKGLEN_GRAPHIRE,  26202, 16325,  255,
 
1426
          0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1424
1427
static const struct wacom_features wacom_features_0x93 =
1425
 
        { "Wacom ISDv4 93",       WACOM_PKGLEN_GRAPHIRE,  26202, 16325,  255,  0, TABLETPC };
 
1428
        { "Wacom ISDv4 93",       WACOM_PKGLEN_GRAPHIRE,  26202, 16325,  255,
 
1429
          0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1426
1430
static const struct wacom_features wacom_features_0x9A =
1427
 
        { "Wacom ISDv4 9A",       WACOM_PKGLEN_GRAPHIRE,  26202, 16325,  255,  0, TABLETPC };
 
1431
        { "Wacom ISDv4 9A",       WACOM_PKGLEN_GRAPHIRE,  26202, 16325,  255,
 
1432
          0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1428
1433
static const struct wacom_features wacom_features_0x9F =
1429
 
        { "Wacom ISDv4 9F",       WACOM_PKGLEN_GRAPHIRE,  26202, 16325,  255,  0, TABLETPC };
 
1434
        { "Wacom ISDv4 9F",       WACOM_PKGLEN_GRAPHIRE,  26202, 16325,  255,
 
1435
          0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1430
1436
static const struct wacom_features wacom_features_0xE2 =
1431
 
        { "Wacom ISDv4 E2",       WACOM_PKGLEN_TPC2FG,    26202, 16325,  255,  0, TABLETPC2FG };
 
1437
        { "Wacom ISDv4 E2",       WACOM_PKGLEN_TPC2FG,    26202, 16325,  255,
 
1438
          0, TABLETPC2FG, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1432
1439
static const struct wacom_features wacom_features_0xE3 =
1433
 
        { "Wacom ISDv4 E3",       WACOM_PKGLEN_TPC2FG,    26202, 16325,  255,  0, TABLETPC2FG };
 
1440
        { "Wacom ISDv4 E3",       WACOM_PKGLEN_TPC2FG,    26202, 16325,  255,
 
1441
          0, TABLETPC2FG, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
 
1442
static const struct wacom_features wacom_features_0xE6 =
 
1443
        { "Wacom ISDv4 E6",       WACOM_PKGLEN_TPC2FG,    27760, 15694,  255,
 
1444
          0, TABLETPC2FG, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1434
1445
static const struct wacom_features wacom_features_0x47 =
1435
 
        { "Wacom Intuos2 6x8",    WACOM_PKGLEN_INTUOS,    20320, 16240, 1023, 31, INTUOS };
1436
 
static struct wacom_features wacom_features_0xD0 =
1437
 
        { "Wacom Bamboo 2FG",     WACOM_PKGLEN_BBFUN,     14720,  9200, 1023, 63, BAMBOO_PT };
1438
 
static struct wacom_features wacom_features_0xD1 =
1439
 
        { "Wacom Bamboo 2FG 4x5", WACOM_PKGLEN_BBFUN,     14720,  9200, 1023, 63, BAMBOO_PT };
1440
 
static struct wacom_features wacom_features_0xD2 =
1441
 
        { "Wacom Bamboo Craft",   WACOM_PKGLEN_BBFUN,     14720,  9200, 1023, 63, BAMBOO_PT };
1442
 
static struct wacom_features wacom_features_0xD3 =
1443
 
        { "Wacom Bamboo 2FG 6x8", WACOM_PKGLEN_BBFUN,     21648, 13530, 1023, 63, BAMBOO_PT };
 
1446
        { "Wacom Intuos2 6x8",    WACOM_PKGLEN_INTUOS,    20320, 16240, 1023,
 
1447
          31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
 
1448
static const struct wacom_features wacom_features_0xD0 =
 
1449
        { "Wacom Bamboo 2FG",     WACOM_PKGLEN_BBFUN,     14720,  9200, 1023,
 
1450
          63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
 
1451
static const struct wacom_features wacom_features_0xD1 =
 
1452
        { "Wacom Bamboo 2FG 4x5", WACOM_PKGLEN_BBFUN,     14720,  9200, 1023,
 
1453
          63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
 
1454
static const struct wacom_features wacom_features_0xD2 =
 
1455
        { "Wacom Bamboo Craft",   WACOM_PKGLEN_BBFUN,     14720,  9200, 1023,
 
1456
          63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
 
1457
static const struct wacom_features wacom_features_0xD3 =
 
1458
        { "Wacom Bamboo 2FG 6x8", WACOM_PKGLEN_BBFUN,     21648, 13530, 1023,
 
1459
          63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1444
1460
static const struct wacom_features wacom_features_0xD4 =
1445
 
        { "Wacom Bamboo Pen",     WACOM_PKGLEN_BBFUN,     14720,  9200,  255, 63, BAMBOO_PT };
1446
 
static struct wacom_features wacom_features_0xD6 =
1447
 
        { "Wacom BambooPT 2FG 4x5", WACOM_PKGLEN_BBFUN,   14720,  9200, 1023, 63, BAMBOO_PT };
1448
 
static struct wacom_features wacom_features_0xD7 =
1449
 
        { "Wacom BambooPT 2FG Small", WACOM_PKGLEN_BBFUN, 14720,  9200, 1023, 63, BAMBOO_PT };
1450
 
static struct wacom_features wacom_features_0xD8 =
1451
 
        { "Wacom Bamboo Comic 2FG", WACOM_PKGLEN_BBFUN,   21648, 13530, 1023, 63, BAMBOO_PT };
1452
 
static struct wacom_features wacom_features_0xDA =
1453
 
        { "Wacom Bamboo 2FG 4x5 SE", WACOM_PKGLEN_BBFUN,  14720,  9200, 1023, 63, BAMBOO_PT };
 
1461
        { "Wacom Bamboo Pen",     WACOM_PKGLEN_BBFUN,     14720,  9200,  255,
 
1462
          63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
 
1463
static const struct wacom_features wacom_features_0xD6 =
 
1464
        { "Wacom BambooPT 2FG 4x5", WACOM_PKGLEN_BBFUN,   14720,  9200, 1023,
 
1465
          63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
 
1466
static const struct wacom_features wacom_features_0xD7 =
 
1467
        { "Wacom BambooPT 2FG Small", WACOM_PKGLEN_BBFUN, 14720,  9200, 1023,
 
1468
          63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
 
1469
static const struct wacom_features wacom_features_0xD8 =
 
1470
        { "Wacom Bamboo Comic 2FG", WACOM_PKGLEN_BBFUN,   21648, 13530, 1023,
 
1471
          63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
 
1472
static const struct wacom_features wacom_features_0xDA =
 
1473
        { "Wacom Bamboo 2FG 4x5 SE", WACOM_PKGLEN_BBFUN,  14720,  9200, 1023,
 
1474
          63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1454
1475
static struct wacom_features wacom_features_0xDB =
1455
 
        { "Wacom Bamboo 2FG 6x8 SE", WACOM_PKGLEN_BBFUN,  21648, 13530, 1023, 63, BAMBOO_PT };
 
1476
        { "Wacom Bamboo 2FG 6x8 SE", WACOM_PKGLEN_BBFUN,  21648, 13530, 1023,
 
1477
          63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1456
1478
static const struct wacom_features wacom_features_0x6004 =
1457
 
        { "ISD-V4",               WACOM_PKGLEN_GRAPHIRE,  12800, 8000, 255, 0, TABLETPC };
 
1479
        { "ISD-V4",               WACOM_PKGLEN_GRAPHIRE,  12800,  8000,  255,
 
1480
          0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1458
1481
 
1459
1482
#define USB_DEVICE_WACOM(prod)                                  \
1460
1483
        USB_DEVICE(USB_VENDOR_ID_WACOM, prod),                  \
1541
1564
        { USB_DEVICE_WACOM(0x9F) },
1542
1565
        { USB_DEVICE_WACOM(0xE2) },
1543
1566
        { USB_DEVICE_WACOM(0xE3) },
 
1567
        { USB_DEVICE_WACOM(0xE6) },
1544
1568
        { USB_DEVICE_WACOM(0x47) },
1545
1569
        { USB_DEVICE_LENOVO(0x6004) },
1546
1570
        { }