On Wed, Mar 28, 2012 at 9:29 AM, Jason Gerecke <killert...@gmail.com> wrote:
> Based on upstream commit 803296b678a43005e3bc0aaa1951d211bd76a054
>
> Signed-off-by: Jason Gerecke <killert...@gmail.com>

Acked-by: Ping Cheng <pi...@wacom.com> for the set.

Ping

> ---
>  2.6.30/wacom_wac.c |   77 
> +++++++++++++++++++++++++++++++++++++++++++++++++++-
>  2.6.30/wacom_wac.h |    1 +
>  2.6.36/wacom_wac.c |   77 
> +++++++++++++++++++++++++++++++++++++++++++++++++++-
>  2.6.36/wacom_wac.h |    1 +
>  4 files changed, 154 insertions(+), 2 deletions(-)
>
> diff --git a/2.6.30/wacom_wac.c b/2.6.30/wacom_wac.c
> index bad56d3..46f306f 100755
> --- a/2.6.30/wacom_wac.c
> +++ b/2.6.30/wacom_wac.c
> @@ -613,7 +613,8 @@ static void wacom_intuos_general(struct wacom_wac *wacom)
>        /* general pen packet */
>        if ((data[1] & 0xb8) == 0xa0) {
>                t = (data[6] << 2) | ((data[7] >> 6) & 3);
> -               if (features->type >= INTUOS4S && features->type <= 
> WACOM_21UX2)
> +               if ((features->type >= INTUOS4S && features->type <= 
> WACOM_21UX2) ||
> +                   features->type == WACOM_24HD)
>                        t = (t << 1) | (data[1] & 1);
>                input_report_abs(input, ABS_PRESSURE, t);
>                input_report_abs(input, ABS_TILT_X,
> @@ -677,6 +678,56 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
>                                input_report_abs(input, ABS_MISC, 
> PAD_DEVICE_ID);
>                        else
>                                input_report_abs(input, ABS_MISC, 0);
> +               } else if (features->type == WACOM_24HD) {
> +                       input_report_key(input, BTN_0, (data[6] & 0x01));
> +                       input_report_key(input, BTN_1, (data[6] & 0x02));
> +                       input_report_key(input, BTN_2, (data[6] & 0x04));
> +                       input_report_key(input, BTN_3, (data[6] & 0x08));
> +                       input_report_key(input, BTN_4, (data[6] & 0x10));
> +                       input_report_key(input, BTN_5, (data[6] & 0x20));
> +                       input_report_key(input, BTN_6, (data[6] & 0x40));
> +                       input_report_key(input, BTN_7, (data[6] & 0x80));
> +                       input_report_key(input, BTN_8, (data[8] & 0x01));
> +                       input_report_key(input, BTN_9, (data[8] & 0x02));
> +                       input_report_key(input, BTN_A, (data[8] & 0x04));
> +                       input_report_key(input, BTN_B, (data[8] & 0x08));
> +                       input_report_key(input, BTN_C, (data[8] & 0x10));
> +                       input_report_key(input, BTN_X, (data[8] & 0x20));
> +                       input_report_key(input, BTN_Y, (data[8] & 0x40));
> +                       input_report_key(input, BTN_Z, (data[8] & 0x80));
> +
> +                       /*
> +                        * Three "buttons" are available on the 24HD which are
> +                        * physically implemented as a touchstrip. Each button
> +                        * is approximately 3 bits wide with a 2 bit spacing.
> +                        * The raw touchstrip bits are stored at:
> +                        *    ((data[3] & 0x1f) << 8) | data[4])
> +                        */
> +                       input_report_key(input, KEY_PROG1, data[4] & 0x07);
> +                       input_report_key(input, KEY_PROG2, data[4] & 0xE0);
> +                       input_report_key(input, KEY_PROG3, data[3] & 0x1C);
> +
> +                       if (data[1] & 0x80) {
> +                               input_report_abs(input, ABS_WHEEL, (data[1] & 
> 0x7f));
> +                       } else {
> +                               /* Out of proximity, clear wheel value. */
> +                               input_report_abs(input, ABS_WHEEL, 0);
> +                       }
> +
> +                       if (data[2] & 0x80) {
> +                               input_report_abs(input, ABS_THROTTLE, 
> (data[2] & 0x7f));
> +                       } else {
> +                               /* Out of proximity, clear wheel value. */
> +                               input_report_abs(input, ABS_THROTTLE, 0);
> +                       }
> +
> +                       if (data[1] | data[2] | (data[3] & 0x1f) | data[4] | 
> data[6] | data[8]) {
> +                               input_report_key(input, wacom->tool[1], 1);
> +                               input_report_abs(input, ABS_MISC, 
> PAD_DEVICE_ID);
> +                       } else {
> +                               input_report_key(input, wacom->tool[1], 0);
> +                               input_report_abs(input, ABS_MISC, 0);
> +                       }
>                } else {
>                        if (features->type == WACOM_21UX2) {
>                                input_report_key(input, BTN_0, (data[5] & 
> 0x01));
> @@ -1054,6 +1105,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t 
> len)
>        case CINTIQ:
>        case WACOM_BEE:
>        case WACOM_21UX2:
> +       case WACOM_24HD:
>                sync = wacom_intuos_irq(wacom_wac);
>                break;
>
> @@ -1178,6 +1230,26 @@ void wacom_setup_input_capabilities(struct input_dev 
> *input_dev,
>                __set_bit(BTN_STYLUS2, input_dev->keybit);
>                break;
>
> +       case WACOM_24HD:
> +               __set_bit(BTN_A, input_dev->keybit);
> +               __set_bit(BTN_B, input_dev->keybit);
> +               __set_bit(BTN_C, input_dev->keybit);
> +               __set_bit(BTN_X, input_dev->keybit);
> +               __set_bit(BTN_Y, input_dev->keybit);
> +               __set_bit(BTN_Z, input_dev->keybit);
> +
> +               for (i = 0; i < 10; i++)
> +                       __set_bit(BTN_0 + i, input_dev->keybit);
> +
> +               __set_bit(KEY_PROG1, input_dev->keybit);
> +               __set_bit(KEY_PROG2, input_dev->keybit);
> +               __set_bit(KEY_PROG3, input_dev->keybit);
> +
> +               input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
> +               input_set_abs_params(input_dev, ABS_THROTTLE, 0, 71, 0, 0);
> +               wacom_setup_cintiq(wacom_wac);
> +               break;
> +
>        case WACOM_21UX2:
>                __set_bit(BTN_A, input_dev->keybit);
>                __set_bit(BTN_B, input_dev->keybit);
> @@ -1409,6 +1481,8 @@ static const struct wacom_features wacom_features_0xBB =
>        { "Wacom Intuos4 12x19",  WACOM_PKGLEN_INTUOS,    97536, 60960, 2047, 
> 63, INTUOS4L };
>  static const struct wacom_features wacom_features_0xBC =
>        { "Wacom Intuos4 WL",     WACOM_PKGLEN_INTUOS,    40840, 25400, 2047, 
> 63, INTUOS4 };
> +static const struct wacom_features wacom_features_0xF4 =
> +       { "Wacom Cintiq 24HD",    WACOM_PKGLEN_INTUOS,   104480, 65600, 2047, 
> 63, WACOM_24HD };
>  static const struct wacom_features wacom_features_0x3F =
>        { "Wacom Cintiq 21UX",    WACOM_PKGLEN_INTUOS,    87200, 65600, 1023, 
> 63, CINTIQ };
>  static const struct wacom_features wacom_features_0xC5 =
> @@ -1546,6 +1620,7 @@ const struct usb_device_id wacom_ids[] = {
>        { USB_DEVICE_WACOM(0xE3) },
>        { USB_DEVICE_WACOM(0xE6) },
>        { USB_DEVICE_WACOM(0x47) },
> +       { USB_DEVICE_WACOM(0xF4) },
>        { USB_DEVICE_LENOVO(0x6004) },
>        { }
>  };
> diff --git a/2.6.30/wacom_wac.h b/2.6.30/wacom_wac.h
> index aabe67c..dc88f98 100755
> --- a/2.6.30/wacom_wac.h
> +++ b/2.6.30/wacom_wac.h
> @@ -53,6 +53,7 @@ enum {
>        INTUOS4S,
>        INTUOS4,
>        INTUOS4L,
> +       WACOM_24HD,
>        WACOM_21UX2,
>        CINTIQ,
>        WACOM_BEE,
> diff --git a/2.6.36/wacom_wac.c b/2.6.36/wacom_wac.c
> index c6b9efb..9318580 100644
> --- a/2.6.36/wacom_wac.c
> +++ b/2.6.36/wacom_wac.c
> @@ -451,7 +451,7 @@ static void wacom_intuos_general(struct wacom_wac *wacom)
>        if ((data[1] & 0xb8) == 0xa0) {
>                t = (data[6] << 2) | ((data[7] >> 6) & 3);
>                if ((features->type >= INTUOS4S && features->type <= INTUOS4L) 
> ||
> -                   features->type == WACOM_21UX2) {
> +                   features->type == WACOM_21UX2 || features->type == 
> WACOM_24HD) {
>                        t = (t << 1) | (data[1] & 1);
>                }
>                input_report_abs(input, ABS_PRESSURE, t);
> @@ -516,6 +516,56 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
>                                input_report_abs(input, ABS_MISC, 
> PAD_DEVICE_ID);
>                        else
>                                input_report_abs(input, ABS_MISC, 0);
> +               } else if (features->type == WACOM_24HD) {
> +                       input_report_key(input, BTN_0, (data[6] & 0x01));
> +                       input_report_key(input, BTN_1, (data[6] & 0x02));
> +                       input_report_key(input, BTN_2, (data[6] & 0x04));
> +                       input_report_key(input, BTN_3, (data[6] & 0x08));
> +                       input_report_key(input, BTN_4, (data[6] & 0x10));
> +                       input_report_key(input, BTN_5, (data[6] & 0x20));
> +                       input_report_key(input, BTN_6, (data[6] & 0x40));
> +                       input_report_key(input, BTN_7, (data[6] & 0x80));
> +                       input_report_key(input, BTN_8, (data[8] & 0x01));
> +                       input_report_key(input, BTN_9, (data[8] & 0x02));
> +                       input_report_key(input, BTN_A, (data[8] & 0x04));
> +                       input_report_key(input, BTN_B, (data[8] & 0x08));
> +                       input_report_key(input, BTN_C, (data[8] & 0x10));
> +                       input_report_key(input, BTN_X, (data[8] & 0x20));
> +                       input_report_key(input, BTN_Y, (data[8] & 0x40));
> +                       input_report_key(input, BTN_Z, (data[8] & 0x80));
> +
> +                       /*
> +                        * Three "buttons" are available on the 24HD which are
> +                        * physically implemented as a touchstrip. Each button
> +                        * is approximately 3 bits wide with a 2 bit spacing.
> +                        * The raw touchstrip bits are stored at:
> +                        *    ((data[3] & 0x1f) << 8) | data[4])
> +                        */
> +                       input_report_key(input, KEY_PROG1, data[4] & 0x07);
> +                       input_report_key(input, KEY_PROG2, data[4] & 0xE0);
> +                       input_report_key(input, KEY_PROG3, data[3] & 0x1C);
> +
> +                       if (data[1] & 0x80) {
> +                               input_report_abs(input, ABS_WHEEL, (data[1] & 
> 0x7f));
> +                       } else {
> +                               /* Out of proximity, clear wheel value. */
> +                               input_report_abs(input, ABS_WHEEL, 0);
> +                       }
> +
> +                       if (data[2] & 0x80) {
> +                               input_report_abs(input, ABS_THROTTLE, 
> (data[2] & 0x7f));
> +                       } else {
> +                               /* Out of proximity, clear wheel value. */
> +                               input_report_abs(input, ABS_THROTTLE, 0);
> +                       }
> +
> +                       if (data[1] | data[2] | (data[3] & 0x1f) | data[4] | 
> data[6] | data[8]) {
> +                               input_report_key(input, wacom->tool[1], 1);
> +                               input_report_abs(input, ABS_MISC, 
> PAD_DEVICE_ID);
> +                       } else {
> +                               input_report_key(input, wacom->tool[1], 0);
> +                               input_report_abs(input, ABS_MISC, 0);
> +                       }
>                } else {
>                        if (features->type == WACOM_21UX2) {
>                                input_report_key(input, BTN_0, (data[5] & 
> 0x01));
> @@ -1048,6 +1098,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t 
> len)
>        case CINTIQ:
>        case WACOM_BEE:
>        case WACOM_21UX2:
> +       case WACOM_24HD:
>                sync = wacom_intuos_irq(wacom_wac);
>                break;
>
> @@ -1202,6 +1253,26 @@ void wacom_setup_input_capabilities(struct input_dev 
> *input_dev,
>                __set_bit(BTN_STYLUS2, input_dev->keybit);
>                break;
>
> +       case WACOM_24HD:
> +               __set_bit(BTN_A, input_dev->keybit);
> +               __set_bit(BTN_B, input_dev->keybit);
> +               __set_bit(BTN_C, input_dev->keybit);
> +               __set_bit(BTN_X, input_dev->keybit);
> +               __set_bit(BTN_Y, input_dev->keybit);
> +               __set_bit(BTN_Z, input_dev->keybit);
> +
> +               for (i = 0; i < 10; i++)
> +                       __set_bit(BTN_0 + i, input_dev->keybit);
> +
> +               __set_bit(KEY_PROG1, input_dev->keybit);
> +               __set_bit(KEY_PROG2, input_dev->keybit);
> +               __set_bit(KEY_PROG3, input_dev->keybit);
> +
> +               input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
> +               input_set_abs_params(input_dev, ABS_THROTTLE, 0, 71, 0, 0);
> +               wacom_setup_cintiq(wacom_wac);
> +               break;
> +
>        case WACOM_21UX2:
>                __set_bit(BTN_A, input_dev->keybit);
>                __set_bit(BTN_B, input_dev->keybit);
> @@ -1503,6 +1574,9 @@ static const struct wacom_features wacom_features_0xBB =
>  static const struct wacom_features wacom_features_0xBC =
>        { "Wacom Intuos4 WL",     WACOM_PKGLEN_INTUOS,    40840, 25400, 2047,
>          63, INTUOS4, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
> +static const struct wacom_features wacom_features_0xF4 =
> +       { "Wacom Cintiq 24HD",    WACOM_PKGLEN_INTUOS,   104480, 65600, 2047,
> +         63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
>  static const struct wacom_features wacom_features_0x3F =
>        { "Wacom Cintiq 21UX",    WACOM_PKGLEN_INTUOS,    87200, 65600, 1023,
>          63, CINTIQ, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
> @@ -1694,6 +1768,7 @@ const struct usb_device_id wacom_ids[] = {
>        { USB_DEVICE_WACOM(0xE5) },
>        { USB_DEVICE_WACOM(0xE6) },
>        { USB_DEVICE_WACOM(0x47) },
> +       { USB_DEVICE_WACOM(0xF4) },
>        { USB_DEVICE_LENOVO(0x6004) },
>        { }
>  };
> diff --git a/2.6.36/wacom_wac.h b/2.6.36/wacom_wac.h
> index bdddc8d..e686791 100644
> --- a/2.6.36/wacom_wac.h
> +++ b/2.6.36/wacom_wac.h
> @@ -66,6 +66,7 @@ enum {
>        INTUOS4S,
>        INTUOS4,
>        INTUOS4L,
> +       WACOM_24HD,
>        WACOM_21UX2,
>        CINTIQ,
>        WACOM_BEE,
> --
> 1.7.9.1
>
>
> ------------------------------------------------------------------------------
> This SF email is sponsosred by:
> Try Windows Azure free for 90 days Click Here
> http://p.sf.net/sfu/sfd2d-msazure
> _______________________________________________
> Linuxwacom-devel mailing list
> Linuxwacom-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to