Tested the current input-wacom master (9d7af79697) *without* this
patch on my CentOS 6.9 VM using three devices (all with touch
switches): 1st-gen Intuos, 2nd-gen Intuos Pro, and Cintiq Pro 32. In
all cases, everything seemed to work as expected:

  * Single finger touch worked correctly
  * Touch switch enabled / disabled touch input
  * Touch switch state is correctly reported by xsetwacom
  * Multi-finger touch works correctly for the two Pro devices (it is
disabled for the 1st-gen Intuos by the HEAD commit due to its style of
multitouch events [DOUBLE,TRIPLE,QUADTAP] confusing the X driver).

There must be something different between our test setups...

Jason
---
Now instead of four in the eights place /
you’ve got three, ‘Cause you added one  /
(That is to say, eight) to the two,     /
But you can’t take seven from three,    /
So you look at the sixty-fours....



On Tue, Apr 24, 2018 at 9:42 PM, Jason Gerecke <killert...@gmail.com> wrote:
> On Tue, Apr 24, 2018 at 12:19 AM, Ping Cheng <pingli...@gmail.com> wrote:
>> On Mon, Apr 23, 2018 at 4:37 PM Peter Hutterer <peter.hutte...@who-t.net>
>> wrote:
>>>
>>> On Mon, Apr 23, 2018 at 12:44:51PM -0700, Aaron Armstrong Skomra wrote:
>>> > Setting the bit for SW_MUTE_DEVICE on kernels which do not have
>>> > SW_MUTE_DEVICE declared in input.h (prior to 3.13), causes these
>>> > devices' touch interfaces not to work.
>>>
>>> Why is that? is that switch always enabled or something? because if it's
>>> always on 0, no-one in userspace should care. This seems like a separate
>>> issue somewhere.
>>
>>
>> The switch can be enabled/disabled by some devices. So, if it is set, its
>> value could be 1.
>>
>
> Agreed with Peter... This sounds like a symptom of something else. In
> my experience the kernel doesn't care about "unknown" SW/ABS/KEY
> events, so any problem would have to be in our kernel or X driver. The
> fact that "only" removing the declaration SW_MUTE_DEVICE is enough to
> fix the issue is a head-scratcher.
>
>>> > Fixes: 7d13c26dd972 ("Backport support for the touch on/off switch").
>>> > Signed-off-by: Aaron Armstrong Skomra<sko...@gmail.com>
>>> > ---
>>> > 1. Does INTUOSHT have a touch switch?
>>
>>
>> Yes, INTUOSHT has a hard touch switch.
>>
>>> Maybe the check for
>>> > BTN_TOOL_DOUBLETAP excludes INTUOSHT right after we catch its case.
>>
>>
>> Have to look into the details...
>>
>>> >
>>> > 2. Does TABLETPC somehow need this commit to disable touch? I don't
>>> > think
>>> > it could be using this non-existant constant, but I don't know which
>>> > devices TABLETPC applies to etc.
>>
>>
>> No TPC devices have touch switch.
>>
>>> On the Intuos Pro 2 and Intuos (CTH-680)
>>> > this switch is purely the reporting of the switch (the hardware disables
>>> > the touch) so removing our attempt at reporting the switch is of minor
>>> > consequence.
>>>
>>> with my "i don't follow input-wacom that closely" hat on:
>>> TABLETPC are the devices built into laptops. Google Bill Gates presenting
>>> a
>>> tablet pc, that's how far they go back. They have styli that only activate
>>> on press, with no proximity, etc. But they don't have the MUTE switch,
>>> that
>>> one was added for the 24QHD (or so?) to represent the physical hw switch.
>>
>>
>> Touch switch was first added to INTUOSHT.
>>
>>
>>> > 3. Why was SW_MUTE_DEVICE orignally backported? My guess was that it was
>>> > to remove differences between each of our kernel directories. But it
>>> > could
>>
>>
>> I feel it is just to sync with upstream code. Is that right Jason?
>>
>
> Git blame says it's been in the 2.6.38 tree since December 2013
> (commit 955bc05d68). I added it to the 2.6.30 tree in December 2017
> about a month after doing my Cintiq Pro backports. I *probably* tested
> that code the touch switch (and touch) worked for the Cintiq Pro, but
> I can absolutely guarantee that touch has been tested on 2.6.38 at
> multiple points in the past four years.
>
>>> > be for some other reason that I don't know of, in that case I will be
>>> > missing something here.
>>> >
>>> > 4. My guess is that SW_MUTE_DEVICE is supported in RHEL 7 (this bug was
>>> > found on RHEL 6) and that this code was tested against it, which is why
>>> > we
>>> > didn't catch this. ie RHEL probably added SW_MUTE_DEVICE to their
>>> > kernel.
>>>
>>> yep, looks like it was backported to the RHEL7.x kernel at some point but
>>> I
>>
>>
>> SW_MUTE_DEVICE is in RHEL 7 doesn’t mean other kernels older than 3.13
>> backported it. We have to support those vanilla kernels. Looks like we may
>> have to test more kernels and probably treat RHEL7 differently.
>> .
>
> I doubt RHEL having SW_MUTE_DEVICE "support" matters at all.
> SW_MUTE_DEVICE is only declared in a header and defined in our driver.
> Nothing else in the kernel should care if a random (known or unknown)
> SW integer is declared.
>
>>>
>>> don't have the exact version on-hand. We tend to backport the professional
>>> tablets so it was likely part of the 24QHD or whichever device needed that
>>> one.
>>
>>
>> Intuos Pro 2 is the first professional tablet that has a hardware touch
>> switch.
>>
>> Cheers,
>> Ping
>>
>>> > It could also be that later input subsystems fail more gracefully when
>>> > they recieve a "__set_bit" that they are unfamiliar with, I'm not sure
>>> > if
>>> > we want to find supported vanilla versions of these older kernels to
>>> > test
>>> > against.  Also, I have no idea how to check RHEL 7 source or if that's
>>> > possible. If necessary we can either revise this commit to check for
>>> > RHEL
>>> > 7 or come back and do that at a later date for this event which again is
>>> > of minor importance.
>>>
>
> I'd verify that something's not wrong with our test setup before
> moving forward with this patch. It seems too odd that touch is broken
> on anything merely declaring SW_MUTE_DEVICE, especially when that code
> has been working (at the very least for 2.6.38, and likely even for
> 2.6.30) in the past.
>
> Jason
> ---
> Now instead of four in the eights place /
> you’ve got three, ‘Cause you added one  /
> (That is to say, eight) to the two,     /
> But you can’t take seven from three,    /
> So you look at the sixty-fours....
>
>>> The official way if you don't have a RHEL install
>>> is https://git.centos.org/project/rpms
>>> yes, that's a CentOS link, for more backstory see:
>>> https://lwn.net/Articles/603865/
>>>
>>> The kernel is here:
>>> https://git.centos.org/summary/?r=rpms/kernel.git
>>>
>>> And to 'unzip' the RPM file, I have a script that wraps this:
>>>   rpm2cpio $rpmfile | cpio -idmv --no-absolute-filenames
>>>
>>>
>>> Alternatively, there's also the Red Hat Developers program which gives you
>>> free access to RHEL.
>>> https://developers.redhat.com/
>>>
>>> Cheers,
>>>    Peter
>>>
>>>
>>> >
>>> >  2.6.32/wacom_wac.c | 3 ---
>>> >  2.6.38/wacom_wac.c | 3 ---
>>> >  3.7/wacom_wac.c    | 3 ---
>>> >  3 files changed, 9 deletions(-)
>>> >
>>> > diff --git a/2.6.32/wacom_wac.c b/2.6.32/wacom_wac.c
>>> > index 9f9899917a41..98589bea8f17 100644
>>> > --- a/2.6.32/wacom_wac.c
>>> > +++ b/2.6.32/wacom_wac.c
>>> > @@ -2276,7 +2276,6 @@ void wacom_setup_input_capabilities(struct
>>> > input_dev *input_dev,
>>> >                       __set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit);
>>> >
>>> >                       input_dev->evbit[0] |= BIT_MASK(EV_SW);
>>> > -                     __set_bit(SW_MUTE_DEVICE, input_dev->swbit);
>>> >                       wacom_wac->shared->has_mute_touch_switch = true;
>>> >               } else {
>>> >                       __set_bit(BTN_STYLUS3, input_dev->keybit);
>>> > @@ -2351,7 +2350,6 @@ void wacom_setup_input_capabilities(struct
>>> > input_dev *input_dev,
>>> >
>>> >                       if ((input_dev->id.product >= 0x353 &&
>>> > input_dev->id.product <= 0x356)) {
>>> >                               input_dev->evbit[0] |= BIT_MASK(EV_SW);
>>> > -                             __set_bit(SW_MUTE_DEVICE,
>>> > input_dev->swbit);
>>> >                               wacom_wac->shared->has_mute_touch_switch =
>>> > true;
>>> >                               wacom_wac->shared->is_touch_on = true;
>>> >                       }
>>> > @@ -2394,7 +2392,6 @@ void wacom_setup_input_capabilities(struct
>>> > input_dev *input_dev,
>>> >               if (features->touch_max &&
>>> >                   features->device_type == BTN_TOOL_DOUBLETAP) {
>>> >                       input_dev->evbit[0] |= BIT_MASK(EV_SW);
>>> > -                     __set_bit(SW_MUTE_DEVICE, input_dev->swbit);
>>> >                       wacom_wac->shared->has_mute_touch_switch = true;
>>> >               }
>>> >               /* fall through */
>>> > diff --git a/2.6.38/wacom_wac.c b/2.6.38/wacom_wac.c
>>> > index e0b5af1fc850..858602daf993 100644
>>> > --- a/2.6.38/wacom_wac.c
>>> > +++ b/2.6.38/wacom_wac.c
>>> > @@ -2539,7 +2539,6 @@ int wacom_setup_input_capabilities(struct
>>> > input_dev *input_dev,
>>> >               }
>>> >               else {
>>> >                       input_dev->evbit[0] |= BIT_MASK(EV_SW);
>>> > -                     __set_bit(SW_MUTE_DEVICE, input_dev->swbit);
>>> >                       wacom_wac->shared->has_mute_touch_switch = true;
>>> >               }
>>> >               err = wacom_create_slots(wacom_wac);
>>> > @@ -2647,7 +2646,6 @@ int wacom_setup_input_capabilities(struct
>>> > input_dev *input_dev,
>>> >               if ((features->device_type == BTN_TOOL_FINGER) &&
>>> >                   (input_dev->id.product >= 0x353 &&
>>> > input_dev->id.product <= 0x356)) {
>>> >                       input_dev->evbit[0] |= BIT_MASK(EV_SW);
>>> > -                     __set_bit(SW_MUTE_DEVICE, input_dev->swbit);
>>> >                       wacom_wac->shared->has_mute_touch_switch = true;
>>> >                       wacom_wac->shared->is_touch_on = true;
>>> >               }
>>> > @@ -2693,7 +2691,6 @@ int wacom_setup_input_capabilities(struct
>>> > input_dev *input_dev,
>>> >               if (features->touch_max &&
>>> >                   features->device_type == BTN_TOOL_FINGER) {
>>> >                       input_dev->evbit[0] |= BIT_MASK(EV_SW);
>>> > -                     __set_bit(SW_MUTE_DEVICE, input_dev->swbit);
>>> >                       wacom_wac->shared->has_mute_touch_switch = true;
>>> >               }
>>> >               /* fall through */
>>> > diff --git a/3.7/wacom_wac.c b/3.7/wacom_wac.c
>>> > index c91093e13de3..42b2050eb1e4 100644
>>> > --- a/3.7/wacom_wac.c
>>> > +++ b/3.7/wacom_wac.c
>>> > @@ -2511,7 +2511,6 @@ int wacom_setup_input_capabilities(struct
>>> > input_dev *input_dev,
>>> >               }
>>> >               else {
>>> >                       input_dev->evbit[0] |= BIT_MASK(EV_SW);
>>> > -                     __set_bit(SW_MUTE_DEVICE, input_dev->swbit);
>>> >                       wacom_wac->shared->has_mute_touch_switch = true;
>>> >               }
>>> >               /* fall through */
>>> > @@ -2592,7 +2591,6 @@ int wacom_setup_input_capabilities(struct
>>> > input_dev *input_dev,
>>> >               if ((features->device_type == BTN_TOOL_FINGER) &&
>>> >                   (input_dev->id.product >= 0x353 &&
>>> > input_dev->id.product <= 0x356)) {
>>> >                       input_dev->evbit[0] |= BIT_MASK(EV_SW);
>>> > -                     __set_bit(SW_MUTE_DEVICE, input_dev->swbit);
>>> >                       wacom_wac->shared->has_mute_touch_switch = true;
>>> >                       wacom_wac->shared->is_touch_on = true;
>>> >               }
>>> > @@ -2638,7 +2636,6 @@ int wacom_setup_input_capabilities(struct
>>> > input_dev *input_dev,
>>> >               if (features->touch_max &&
>>> >                   features->device_type == BTN_TOOL_FINGER) {
>>> >                       input_dev->evbit[0] |= BIT_MASK(EV_SW);
>>> > -                     __set_bit(SW_MUTE_DEVICE, input_dev->swbit);
>>> >                       wacom_wac->shared->has_mute_touch_switch = true;
>>> >               }
>>> >               /* fall through */
>>> > --
>>> > 2.7.4
>>> >
>>> >
>>> >
>>> > ------------------------------------------------------------------------------
>>> > Check out the vibrant tech community on one of the world's most
>>> > engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>>> > _______________________________________________
>>> > Linuxwacom-devel mailing list
>>> > Linuxwacom-devel@lists.sourceforge.net
>>> > https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
>>> >
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Check out the vibrant tech community on one of the world's most
>>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>>> _______________________________________________
>>> Linuxwacom-devel mailing list
>>> Linuxwacom-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to