Re: [PATCH v2 4/4] input: wacom: Intuos5 multitouch sensor support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Mar 12, 2012 at 5:36 PM, Jason Gerecke <killertofu@xxxxxxxxx> wrote:
> Intuos5 tablets with PTH-* model numbers include a multitouch sensor
> which use the same touch reports as the 3rd-generation Bamboo. No
> useful information is in the HID descriptor for the touch interface
> so hardcoded values are used during setup.
>
> Signed-off-by: Jason Gerecke <killertofu@xxxxxxxxx>
> ---
> Changes from v1:
>  * Fixed calculation of x_phy and y_phy (logic for the 3rd-gen Bamboo
>   which I copied is incorrect! Patch on the way.)

Thanks for catching.

For patches 1, 2, and 4 in this series:

Reviewed-by: Chris Bagwell <chris@xxxxxxxxxxxxxx>

I did review and didn't see any issues with patch #3 but I'm not
familiar with LED support to comment.

Chris

>
>  drivers/input/tablet/wacom_sys.c |   24 ++++++++++++++
>  drivers/input/tablet/wacom_wac.c |   63 +++++++++++++++++++++++++++++++++++---
>  2 files changed, 82 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c
> index 11b4c05..528e3a4 100644
> --- a/drivers/input/tablet/wacom_sys.c
> +++ b/drivers/input/tablet/wacom_sys.c
> @@ -228,6 +228,9 @@ static int wacom_parse_logical_collection(unsigned char *report,
>  * 3rd gen Bamboo Touch no longer define a Digitizer-Finger Pysical
>  * Collection. Instead they define a Logical Collection with a single
>  * Logical Maximum for both X and Y.
> + *
> + * Intuos5 touch interface does not contain useful data. We deal with
> + * this after returning from this function.
>  */
>  static int wacom_parse_hid(struct usb_interface *intf,
>                           struct hid_descriptor *hid_desc,
> @@ -924,6 +927,27 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
>        if (error)
>                goto fail3;
>
> +       /* Intuos5 has no useful data about its touch interface in its
> +        * HID descriptor. If this is the touch interface (wMaxPacketSize
> +        * of WACOM_PKGLEN_BBTOUCH3), override the table values.
> +        */
> +       if (features->type >= INTUOS5S && features->type <= INTUOS5L) {
> +               if (endpoint->wMaxPacketSize == WACOM_PKGLEN_BBTOUCH3) {
> +                       features->device_type = BTN_TOOL_FINGER;
> +                       features->pktlen = WACOM_PKGLEN_BBTOUCH3;
> +
> +                       features->x_phy =
> +                               (features->x_max * 100) / features->x_resolution;
> +                       features->y_phy =
> +                               (features->y_max * 100) / features->y_resolution;
> +
> +                       features->x_max = 4096;
> +                       features->y_max = 4096;
> +               } else {
> +                       features->device_type = BTN_TOOL_PEN;
> +               }
> +       }
> +
>        wacom_setup_device_quirks(features);
>
>        strlcpy(wacom_wac->name, features->name, sizeof(wacom_wac->name));
> diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
> index 86827c7..30067ae 100644
> --- a/drivers/input/tablet/wacom_wac.c
> +++ b/drivers/input/tablet/wacom_wac.c
> @@ -321,6 +321,9 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
>
>        /* Enter report */
>        if ((data[1] & 0xfc) == 0xc0) {
> +               if (features->type >= INTUOS5S && features->type <= INTUOS5L)
> +                       wacom->shared->stylus_in_proximity = true;
> +
>                /* serial number of the tool */
>                wacom->serial[idx] = ((data[3] & 0x0f) << 28) +
>                        (data[4] << 20) + (data[5] << 12) +
> @@ -406,6 +409,9 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
>
>        /* Exit report */
>        if ((data[1] & 0xfe) == 0x80) {
> +               if (features->type >= INTUOS5S && features->type <= INTUOS5L)
> +                       wacom->shared->stylus_in_proximity = false;
> +
>                /*
>                 * Reset all states otherwise we lose the initial states
>                 * when in-prox next time
> @@ -1111,9 +1117,6 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
>        case INTUOS4S:
>        case INTUOS4:
>        case INTUOS4L:
> -       case INTUOS5S:
> -       case INTUOS5:
> -       case INTUOS5L:
>        case CINTIQ:
>        case WACOM_BEE:
>        case WACOM_21UX2:
> @@ -1121,6 +1124,15 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
>                sync = wacom_intuos_irq(wacom_wac);
>                break;
>
> +       case INTUOS5S:
> +       case INTUOS5:
> +       case INTUOS5L:
> +               if (len == WACOM_PKGLEN_BBTOUCH3)
> +                       sync = wacom_bpt3_touch(wacom_wac);
> +               else
> +                       sync = wacom_intuos_irq(wacom_wac);
> +               break;
> +
>        case TABLETPC:
>        case TABLETPC2FG:
>                sync = wacom_tpc_irq(wacom_wac, len);
> @@ -1191,7 +1203,7 @@ void wacom_setup_device_quirks(struct wacom_features *features)
>
>        /* these device have multiple inputs */
>        if (features->type == TABLETPC || features->type == TABLETPC2FG ||
> -           features->type == BAMBOO_PT)
> +           features->type == BAMBOO_PT || (features->type >= INTUOS5S && features->type <= INTUOS5L))
>                features->quirks |= WACOM_QUIRK_MULTI_INPUT;
>
>        /* quirk for bamboo touch with 2 low res touches */
> @@ -1350,13 +1362,54 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
>
>        case INTUOS5:
>        case INTUOS5L:
> +               if (features->device_type == BTN_TOOL_PEN) {
> +                       __set_bit(BTN_7, input_dev->keybit);
> +                       __set_bit(BTN_8, input_dev->keybit);
> +               }
> +               /* fall through */
> +
> +       case INTUOS5S:
> +               __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
> +
> +               if (features->device_type == BTN_TOOL_PEN) {
> +                       for (i = 0; i < 7; i++)
> +                               __set_bit(BTN_0 + i, input_dev->keybit);
> +
> +                       input_set_abs_params(input_dev, ABS_DISTANCE, 0,
> +                                             features->distance_max,
> +                                             0, 0);
> +
> +                       input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
> +
> +                       wacom_setup_intuos(wacom_wac);
> +               } else if (features->device_type == BTN_TOOL_FINGER) {
> +                       __clear_bit(ABS_MISC, input_dev->absbit);
> +
> +                       __set_bit(BTN_TOOL_FINGER, input_dev->keybit);
> +                       __set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit);
> +                       __set_bit(BTN_TOOL_TRIPLETAP, input_dev->keybit);
> +                       __set_bit(BTN_TOOL_QUADTAP, input_dev->keybit);
> +
> +                       input_mt_init_slots(input_dev, 16);
> +
> +                       input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
> +                                            0, 255, 0, 0);
> +
> +                       input_set_abs_params(input_dev, ABS_MT_POSITION_X,
> +                                            0, features->x_max,
> +                                            features->x_fuzz, 0);
> +                       input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
> +                                            0, features->y_max,
> +                                            features->y_fuzz, 0);
> +               }
> +               break;
> +
>        case INTUOS4:
>        case INTUOS4L:
>                __set_bit(BTN_7, input_dev->keybit);
>                __set_bit(BTN_8, input_dev->keybit);
>                /* fall through */
>
> -       case INTUOS5S:
>        case INTUOS4S:
>                for (i = 0; i < 7; i++)
>                        __set_bit(BTN_0 + i, input_dev->keybit);
> --
> 1.7.9.1
>
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux