Re: [PATCH 1/5] HID: wacom: Use hdev->product in wacom_setup_touch_input_capabilities

From: Ping Cheng

Date: Tue Sep 01 2026 - 12:33:31 EST


On Tue, Sep 1, 2026 at 5:49 AM Lee Jones <lee@xxxxxxxxxx> wrote:
>
> Ping, Jason,
>
> > Thank you for your effort and persistence! We (Wacom and Wacom's
> > customers) are lucky to have people like you working in this
> > community!
>
> Thank you! :)
>
> > In addition to making sure that you know your contribution is greatly
> > appreciated, I am giving you an initial testing feedback so you know
> > you are on the right track.
> >
> > I manually tested a few older and new Wacom tablets. Some of them have
> > touch switches, some don't. They all worked well!
> >
> > Two more details I'd like to share.
> >
> > The first one is about the touch-only tablet. In all the models of
> > Wacom tablets, there was only one model that is touch-only. It was a
> > Bamboo Touch (model CTT-460) released on September 24, 2009. So, it
> > was more than 17 years ago. However, the quality of Wacom tablets are
> > so high, it is possible that some people are still using those ones
> > ;).
> >
> > The second one is about the type of touch on/off switches. There are
> > two types of touch on/off switches: it can be a soft key or hardware
> > switch. The hardware touch switch is easy to understand. The soft key
> > touch switch is actually an on-screen display in the shape of fingers,
> > where the touch on/off is controlled by the driver: [1]. This softkey
> > touch switch, somehow, is not reported to the userland by the existing
> > driver. Your patchset doesn't show it either.
> >
> > I will do more testing to figure out the root cause of the softkey issue.
>
> Is there anything left for me to do?

I guess you'd still need to figure out if Sashiko-bot's infinite-loop
suggestion and other potential issues are real or not.

I have the hardware. I will test the patches when they are updated.
Right now, I am still on the softkey switch issue. The existing driver
works for softkey. It is reported from the kernel driver. The issue is
sometimes it is not showing up in the userland, which we know. The new
patchset moved the logic. I think the sibling_pending routing should
be the one that's responsible for the SW_MUTE_DEVICE recognition. But
the shared structure only knows the pen and touch. It is the pad that
holds the touch switch usage....

I'll share my findings with you when I have a solution.

Cheers,
Ping

> > [1] ttps://github.com/linuxwacom/input-wacom/blob/master/4.18/wacom_wac.c#L2063
> >
> > On Tue, Aug 25, 2026 at 10:09 AM Lee Jones <lee@xxxxxxxxxx> wrote:
> > >
> > > Replace the lookup-dependent 'wacom_wac->shared->touch->product' references
> > > with 'hdev->product' inside wacom_setup_touch_input_capabilities() since
> > > 'hdev' is already available (via container_of) and represents the touch
> > > device itself.
> > >
> > > Signed-off-by: Lee Jones <lee@xxxxxxxxxx>
> > > ---
> > >
> > > v7 -> v8: New patch
> > >
> > > drivers/hid/wacom_wac.c | 18 +++++++++---------
> > > 1 file changed, 9 insertions(+), 9 deletions(-)
> > >
> > > diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
> > > index a29bf051ada7..4436faf2d2bb 100644
> > > --- a/drivers/hid/wacom_wac.c
> > > +++ b/drivers/hid/wacom_wac.c
> > > @@ -3953,8 +3953,8 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev,
> > > int wacom_setup_touch_input_capabilities(struct input_dev *input_dev,
> > > struct wacom_wac *wacom_wac)
> > > {
> > > + struct hid_device *hdev = container_of(wacom_wac, struct wacom, wacom_wac)->hdev;
> > > struct wacom_features *features = &wacom_wac->features;
> > > -
> > > if (!(features->device_type & WACOM_DEVICETYPE_TOUCH))
> > > return -ENODEV;
> > >
> > > @@ -3963,9 +3963,11 @@ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev,
> > > else
> > > __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
> > >
> > > - if (features->type == HID_GENERIC)
> > > + if (features->type == HID_GENERIC) {
> > > + hid_dbg(hdev, "generic touch setup\n");
> > > /* setup has already been done */
> > > return 0;
> > > + }
> > >
> > > input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
> > > __set_bit(BTN_TOUCH, input_dev->keybit);
> > > @@ -3997,19 +3999,17 @@ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev,
> > > input_dev->evbit[0] |= BIT_MASK(EV_SW);
> > > __set_bit(SW_MUTE_DEVICE, input_dev->swbit);
> > >
> > > - if (wacom_wac->shared->touch->product == 0x361) {
> > > + if (hdev->product == 0x361) {
> > > input_set_abs_params(input_dev, ABS_MT_POSITION_X,
> > > 0, 12440, 4, 0);
> > > input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
> > > 0, 8640, 4, 0);
> > > - }
> > > - else if (wacom_wac->shared->touch->product == 0x360) {
> > > + } else if (hdev->product == 0x360) {
> > > input_set_abs_params(input_dev, ABS_MT_POSITION_X,
> > > 0, 8960, 4, 0);
> > > input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
> > > 0, 5920, 4, 0);
> > > - }
> > > - else if (wacom_wac->shared->touch->product == 0x393) {
> > > + } else if (hdev->product == 0x393) {
> > > input_set_abs_params(input_dev, ABS_MT_POSITION_X,
> > > 0, 6400, 4, 0);
> > > input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
> > > @@ -4039,8 +4039,8 @@ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev,
> > > fallthrough;
> > >
> > > case WACOM_27QHDT:
> > > - if (wacom_wac->shared->touch->product == 0x32C ||
> > > - wacom_wac->shared->touch->product == 0xF6) {
> > > + if (hdev->product == 0x32C ||
> > > + hdev->product == 0xF6) {
> > > input_dev->evbit[0] |= BIT_MASK(EV_SW);
> > > __set_bit(SW_MUTE_DEVICE, input_dev->swbit);
> > > wacom_wac->has_mute_touch_switch = true;
> > > --
> > > 2.55.0.887.g758fc8c411-goog
> > >
> > >
>
> --
> Lee Jones