Hi all,

I messed up in input-wacom 0.12.0 release.  I said that it supported
2nd gen Bamboo but it did not.

Its just a few lines of code so I missed it in the noise.  At the
moment I took the dtor-next snapshot, the 2nd gen support was only in
his dtor-for-linus branch.

So this patch is to get todays dtor-next branch which includes 2nd gen
Bamboo and for a bonus includes Jason's just committed Cintiq 24HD
support.

If no one objects, I'd like to plan on a new input-wacom-0.12.1
release that includes this 1 patch before next weekend.

Sound good?

Chris


On Sun, Dec 18, 2011 at 9:23 PM,  <[email protected]> wrote:
> From: Chris Bagwell <[email protected]>
>
> Previous version was missing 2nd gen Bamboo support
> even though git commit said it was supported.
>
> Signed-off-by: Chris Bagwell <[email protected]>
> ---
>  2.6.38/wacom_sys.c |   19 ++------
>  2.6.38/wacom_wac.c |  129 +++++++++++++++++++++++++++++++++++++++++++++------
>  2.6.38/wacom_wac.h |    1 +
>  3 files changed, 118 insertions(+), 31 deletions(-)
>
> diff --git a/2.6.38/wacom_sys.c b/2.6.38/wacom_sys.c
> index ab498e4..7e63183 100644
> --- a/2.6.38/wacom_sys.c
> +++ b/2.6.38/wacom_sys.c
> @@ -315,13 +315,6 @@ static int wacom_parse_hid(struct usb_interface *intf,
>                                                        
> get_unaligned_le16(&report[i + 3]);
>                                                i += 4;
>                                        }
> -                               } else if (usage == WCM_DIGITIZER) {
> -                                       /* max pressure isn't reported
> -                                       features->pressure_max = (unsigned 
> short)
> -                                                       (report[i+4] << 8  | 
> report[i + 3]);
> -                                       */
> -                                       features->pressure_max = 255;
> -                                       i += 4;
>                                }
>                                break;
>
> @@ -380,13 +373,6 @@ static int wacom_parse_hid(struct usb_interface *intf,
>                                pen = 1;
>                                i++;
>                                break;
> -
> -                       case HID_USAGE_UNDEFINED:
> -                               if (usage == WCM_DESKTOP && finger) /* 
> capacity */
> -                                       features->pressure_max =
> -                                               get_unaligned_le16(&report[i 
> + 3]);
> -                               i += 4;
> -                               break;
>                        }
>                        break;
>
> @@ -577,7 +563,8 @@ static int wacom_led_control(struct wacom *wacom)
>        if (!buf)
>                return -ENOMEM;
>
> -       if (wacom->wacom_wac.features.type == WACOM_21UX2)
> +       if (wacom->wacom_wac.features.type == WACOM_21UX2 ||
> +           wacom->wacom_wac.features.type == WACOM_24HD)
>                led = (wacom->led.select[1] << 4) | 0x40;
>
>        led |=  wacom->led.select[0] | 0x4;
> @@ -796,6 +783,7 @@ static int wacom_initialize_leds(struct wacom *wacom)
>                                           &intuos4_led_attr_group);
>                break;
>
> +       case WACOM_24HD:
>        case WACOM_21UX2:
>                wacom->led.select[0] = 0;
>                wacom->led.select[1] = 0;
> @@ -830,6 +818,7 @@ static void wacom_destroy_leds(struct wacom *wacom)
>                                   &intuos4_led_attr_group);
>                break;
>
> +       case WACOM_24HD:
>        case WACOM_21UX2:
>                sysfs_remove_group(&wacom->intf->dev.kobj,
>                                   &cintiq_led_attr_group);
> diff --git a/2.6.38/wacom_wac.c b/2.6.38/wacom_wac.c
> index 6b9adc7..a22e778 100644
> --- a/2.6.38/wacom_wac.c
> +++ b/2.6.38/wacom_wac.c
> @@ -452,7 +452,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);
> @@ -519,6 +519,56 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
>                                input_report_key(input, wacom->tool[1], 0);
>                                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 second 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));
> @@ -803,25 +853,26 @@ static int wacom_bpt_touch(struct wacom_wac *wacom)
>            return 0;
>
>        for (i = 0; i < 2; i++) {
> -               int p = data[9 * i + 2];
> -               bool touch = p && !wacom->shared->stylus_in_proximity;
> +               int offset = (data[1] & 0x80) ? (8 * i) : (9 * i);
> +               bool touch = data[offset + 3] & 0x80;
>
> -               input_mt_slot(input, i);
> -               input_mt_report_slot_state(input, MT_TOOL_FINGER, touch);
>                /*
>                 * Touch events need to be disabled while stylus is
>                 * in proximity because user's hand is resting on touchpad
>                 * and sending unwanted events.  User expects tablet buttons
>                 * to continue working though.
>                 */
> +               touch = touch && !wacom->shared->stylus_in_proximity;
> +
> +               input_mt_slot(input, i);
> +               input_mt_report_slot_state(input, MT_TOOL_FINGER, touch);
>                if (touch) {
> -                       int x = get_unaligned_be16(&data[9 * i + 3]) & 0x7ff;
> -                       int y = get_unaligned_be16(&data[9 * i + 5]) & 0x7ff;
> +                       int x = get_unaligned_be16(&data[offset + 3]) & 0x7ff;
> +                       int y = get_unaligned_be16(&data[offset + 5]) & 0x7ff;
>                        if (features->quirks & WACOM_QUIRK_BBTOUCH_LOWRES) {
>                                x <<= 5;
>                                y <<= 5;
>                        }
> -                       input_report_abs(input, ABS_MT_PRESSURE, p);
>                        input_report_abs(input, ABS_MT_POSITION_X, x);
>                        input_report_abs(input, ABS_MT_POSITION_Y, y);
>                }
> @@ -1018,6 +1069,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;
>
> @@ -1126,10 +1178,11 @@ void wacom_setup_input_capabilities(struct input_dev 
> *input_dev,
>                             features->x_fuzz, 0);
>        input_set_abs_params(input_dev, ABS_Y, 0, features->y_max,
>                             features->y_fuzz, 0);
> -       input_set_abs_params(input_dev, ABS_PRESSURE, 0, 
> features->pressure_max,
> -                            features->pressure_fuzz, 0);
>
>        if (features->device_type == BTN_TOOL_PEN) {
> +               input_set_abs_params(input_dev, ABS_PRESSURE, 0, 
> features->pressure_max,
> +                            features->pressure_fuzz, 0);
> +
>                /* penabled devices have fixed resolution for each model */
>                input_abs_set_res(input_dev, ABS_X, features->x_resolution);
>                input_abs_set_res(input_dev, ABS_Y, features->y_resolution);
> @@ -1168,6 +1221,28 @@ void wacom_setup_input_capabilities(struct input_dev 
> *input_dev,
>                __set_bit(BTN_TOOL_MOUSE, input_dev->keybit);
>                __set_bit(BTN_STYLUS, input_dev->keybit);
>                __set_bit(BTN_STYLUS2, input_dev->keybit);
> +
> +               __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
> +               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:
> @@ -1190,12 +1265,12 @@ void wacom_setup_input_capabilities(struct input_dev 
> *input_dev,
>                for (i = 0; i < 8; i++)
>                        __set_bit(BTN_0 + i, input_dev->keybit);
>
> -               if (wacom_wac->features.type != WACOM_21UX2) {
> -                       input_set_abs_params(input_dev, ABS_RX, 0, 4096, 0, 
> 0);
> -                       input_set_abs_params(input_dev, ABS_RY, 0, 4096, 0, 
> 0);
> -               }
> -
> +               input_set_abs_params(input_dev, ABS_RX, 0, 4096, 0, 0);
> +               input_set_abs_params(input_dev, ABS_RY, 0, 4096, 0, 0);
>                input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
> +
> +               __set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
> +
>                wacom_setup_cintiq(wacom_wac);
>                break;
>
> @@ -1220,6 +1295,8 @@ void wacom_setup_input_capabilities(struct input_dev 
> *input_dev,
>                /* fall through */
>
>        case INTUOS:
> +               __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
> +
>                wacom_setup_intuos(wacom_wac);
>                break;
>
> @@ -1235,6 +1312,8 @@ void wacom_setup_input_capabilities(struct input_dev 
> *input_dev,
>
>                input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
>                wacom_setup_intuos(wacom_wac);
> +
> +               __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
>                break;
>
>        case TABLETPC2FG:
> @@ -1253,26 +1332,40 @@ void wacom_setup_input_capabilities(struct input_dev 
> *input_dev,
>        case TABLETPC:
>                __clear_bit(ABS_MISC, input_dev->absbit);
>
> +               __set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
> +
>                if (features->device_type != BTN_TOOL_PEN)
>                        break;  /* no need to process stylus stuff */
>
>                /* fall through */
>
>        case PL:
> -       case PTU:
>        case DTU:
>                __set_bit(BTN_TOOL_PEN, input_dev->keybit);
> +               __set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
>                __set_bit(BTN_STYLUS, input_dev->keybit);
>                __set_bit(BTN_STYLUS2, input_dev->keybit);
> +
> +               __set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
> +               break;
> +
> +       case PTU:
> +               __set_bit(BTN_STYLUS2, input_dev->keybit);
>                /* fall through */
>
>        case PENPARTNER:
> +               __set_bit(BTN_TOOL_PEN, input_dev->keybit);
>                __set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
> +               __set_bit(BTN_STYLUS, input_dev->keybit);
> +
> +               __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
>                break;
>
>        case BAMBOO_PT:
>                __clear_bit(ABS_MISC, input_dev->absbit);
>
> +               __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
> +
>                if (features->device_type == BTN_TOOL_DOUBLETAP) {
>                        __set_bit(BTN_LEFT, input_dev->keybit);
>                        __set_bit(BTN_FORWARD, input_dev->keybit);
> @@ -1481,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 };
> @@ -1680,6 +1776,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.38/wacom_wac.h b/2.6.38/wacom_wac.h
> index 27f1d1c..050acae 100644
> --- a/2.6.38/wacom_wac.h
> +++ b/2.6.38/wacom_wac.h
> @@ -59,6 +59,7 @@ enum {
>        INTUOS4S,
>        INTUOS4,
>        INTUOS4L,
> +       WACOM_24HD,
>        WACOM_21UX2,
>        CINTIQ,
>        WACOM_BEE,
> --
> 1.7.7.4
>

------------------------------------------------------------------------------
Learn Windows Azure Live!  Tuesday, Dec 13, 2011
Microsoft is holding a special Learn Windows Azure training event for 
developers. It will provide a great way to learn Windows Azure and what it 
provides. You can attend the event by watching it streamed LIVE online.  
Learn more at http://p.sf.net/sfu/ms-windowsazure
_______________________________________________
Linuxwacom-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to