HID: cypress: Support Varmilo Keyboards' media hotkeys
authorFrank Yang <puilp0502@gmail.com>
Thu, 20 Aug 2020 18:16:50 +0000 (03:16 +0900)
committerJiri Kosina <jkosina@suse.cz>
Fri, 23 Oct 2020 11:23:44 +0000 (13:23 +0200)
commit652f3d00de523a17b0cebe7b90debccf13aa8c31
tree67ea2fbd48bbc54f38728d4540c1747a9c6077de
parent3c785a06dee99501a17f8e8cf29b2b7e3f1e94ea
HID: cypress: Support Varmilo Keyboards' media hotkeys

The Varmilo VA104M Keyboard (04b4:07b1, reported as Varmilo Z104M)
exposes media control hotkeys as a USB HID consumer control device, but
these keys do not work in the current (5.8-rc1) kernel due to the
incorrect HID report descriptor. Fix the problem by modifying the
internal HID report descriptor.

More specifically, the keyboard report descriptor specifies the
logical boundary as 572~10754 (0x023c ~ 0x2a02) while the usage
boundary is specified as 0~10754 (0x00 ~ 0x2a02). This results in an
incorrect interpretation of input reports, causing inputs to be ignored.
By setting the Logical Minimum to zero, we align the logical boundary
with the Usage ID boundary.

Some notes:

* There seem to be multiple variants of the VA104M keyboard. This
  patch specifically targets 04b4:07b1 variant.

* The device works out-of-the-box on Windows platform with the generic
  consumer control device driver (hidserv.inf). This suggests that
  Windows either ignores the Logical Minimum/Logical Maximum or
  interprets the Usage ID assignment differently from the linux
  implementation; Maybe there are other devices out there that only
  works on Windows due to this problem?

Signed-off-by: Frank Yang <puilp0502@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-cypress.c
drivers/hid/hid-ids.h