Re: [PATCH 1/2] HID: wacom: Only report rotation for art pen

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

 



Hi Jiri,

Sorry for the noise. Both patches in this set are bug-fixing. I forgot
to add Cc: stable@xxxxxxxxxxxxxxx in the patches. This patch (1/2) can
be backported to 4.9 or later; the other one (2/2) can be backported
to 4.14 or later.

Thanks a lot,
Ping




On Fri, May 13, 2022 at 2:52 PM Ping Cheng <pinglinux@xxxxxxxxx> wrote:
>
> The generic routine, wacom_wac_pen_event, turns rotation value 90
> degree anti-clockwise before posting the events. This non-zero
> event trggers a non-zero ABS_Z event for non art pen tools. However,
> HID_DG_TWIST is only supported by art pen.
>
> Signed-off-by: Ping Cheng <ping.cheng@xxxxxxxxx>
> Reviewed-by: Jason Gerecke <jason.gerecke@xxxxxxxxx>
> --
> Hi Jiri,
>
> This is kind of a version 2 of the last one I posted two days ago.
> I updated the logic so it has less changed lines: 29 vs 158! Hopefully,
> the logic is easier to follow now. Please ignore the last one.
>
> Thank you!
> ---
>  drivers/hid/wacom_wac.c | 29 +++++++++++++++++++++--------
>  1 file changed, 21 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
> index a7176fc0635d..3bee4f46003d 100644
> --- a/drivers/hid/wacom_wac.c
> +++ b/drivers/hid/wacom_wac.c
> @@ -638,9 +638,26 @@ static int wacom_intuos_id_mangle(int tool_id)
>         return (tool_id & ~0xFFF) << 4 | (tool_id & 0xFFF);
>  }
>
> +static bool wacom_is_art_pen(int tool_id)
> +{
> +       bool is_art_pen = false;
> +
> +       switch (tool_id) {
> +       case 0x885:     /* Intuos3 Marker Pen */
> +       case 0x804:     /* Intuos4/5 13HD/24HD Marker Pen */
> +       case 0x10804:   /* Intuos4/5 13HD/24HD Art Pen */
> +               is_art_pen = true;
> +               break;
> +       }
> +       return is_art_pen;
> +}
> +
>  static int wacom_intuos_get_tool_type(int tool_id)
>  {
> -       int tool_type;
> +       int tool_type = BTN_TOOL_PEN;
> +
> +       if (wacom_is_art_pen(tool_id)
> +               return tool_type;
>
>         switch (tool_id) {
>         case 0x812: /* Inking pen */
> @@ -655,12 +672,9 @@ static int wacom_intuos_get_tool_type(int tool_id)
>         case 0x852:
>         case 0x823: /* Intuos3 Grip Pen */
>         case 0x813: /* Intuos3 Classic Pen */
> -       case 0x885: /* Intuos3 Marker Pen */
>         case 0x802: /* Intuos4/5 13HD/24HD General Pen */
> -       case 0x804: /* Intuos4/5 13HD/24HD Marker Pen */
>         case 0x8e2: /* IntuosHT2 pen */
>         case 0x022:
> -       case 0x10804: /* Intuos4/5 13HD/24HD Art Pen */
>         case 0x10842: /* MobileStudio Pro Pro Pen slim */
>         case 0x14802: /* Intuos4/5 13HD/24HD Classic Pen */
>         case 0x16802: /* Cintiq 13HD Pro Pen */
> @@ -718,10 +732,6 @@ static int wacom_intuos_get_tool_type(int tool_id)
>         case 0x10902: /* Intuos4/5 13HD/24HD Airbrush */
>                 tool_type = BTN_TOOL_AIRBRUSH;
>                 break;
> -
> -       default: /* Unknown tool */
> -               tool_type = BTN_TOOL_PEN;
> -               break;
>         }
>         return tool_type;
>  }
> @@ -2323,6 +2333,9 @@ static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field
>                 }
>                 return;
>         case HID_DG_TWIST:
> +               /* don't modify the value if the pen doesn't support the feature */
> +               if (!wacom_is_art_pen(wacom_wac->id[0])) return;
> +
>                 /*
>                  * Userspace expects pen twist to have its zero point when
>                  * the buttons/finger is on the tablet's left. HID values
> --
> 2.25.1
>



[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