• Jason Gerecke's avatar
    HID: wacom: generic: Treat serial number and related fields as unsigned · ff479731
    Jason Gerecke authored
    The HID descriptors for most Wacom devices oddly declare the serial
    number and other related fields as signed integers. When these numbers
    are ingested by the HID subsystem, they are automatically sign-extended
    into 32-bit integers. We treat the fields as unsigned elsewhere in the
    kernel and userspace, however, so this sign-extension causes problems.
    In particular, the sign-extended tool ID sent to userspace as ABS_MISC
    does not properly match unsigned IDs used by xf86-input-wacom and libwacom.
    
    We introduce a function 'wacom_s32tou' that can undo the automatic sign
    extension performed by 'hid_snto32'. We call this function when processing
    the serial number and related fields to ensure that we are dealing with
    and reporting the unsigned form. We opt to use this method rather than
    adding a descriptor fixup in 'wacom_hid_usage_quirk' since it should be
    more robust in the face of future devices.
    
    Ref: https://github.com/linuxwacom/input-wacom/issues/134
    Fixes: f85c9dc6 ("HID: wacom: generic: Support tool ID and additional tool types")
    CC: <stable@vger.kernel.org> # v4.10+
    Signed-off-by: default avatarJason Gerecke <jason.gerecke@wacom.com>
    Reviewed-by: default avatarAaron Armstrong Skomra <aaron.skomra@wacom.com>
    Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
    ff479731
wacom_wac.c 153 KB