linux-stable/drivers/hid
Candle Sun 564262cf42 HID: core: check whether Usage Page item is after Usage ID items
commit 1cb0d2aee2 upstream.

Upstream commit 58e7515500 ("HID: core: move Usage Page concatenation
to Main item") adds support for Usage Page item after Usage ID items
(such as keyboards manufactured by Primax).

Usage Page concatenation in Main item works well for following report
descriptor patterns:

    USAGE_PAGE (Keyboard)                   05 07
    USAGE_MINIMUM (Keyboard LeftControl)    19 E0
    USAGE_MAXIMUM (Keyboard Right GUI)      29 E7
    LOGICAL_MINIMUM (0)                     15 00
    LOGICAL_MAXIMUM (1)                     25 01
    REPORT_SIZE (1)                         75 01
    REPORT_COUNT (8)                        95 08
    INPUT (Data,Var,Abs)                    81 02

-------------

    USAGE_MINIMUM (Keyboard LeftControl)    19 E0
    USAGE_MAXIMUM (Keyboard Right GUI)      29 E7
    LOGICAL_MINIMUM (0)                     15 00
    LOGICAL_MAXIMUM (1)                     25 01
    REPORT_SIZE (1)                         75 01
    REPORT_COUNT (8)                        95 08
    USAGE_PAGE (Keyboard)                   05 07
    INPUT (Data,Var,Abs)                    81 02

But it makes the parser act wrong for the following report
descriptor pattern(such as some Gamepads):

    USAGE_PAGE (Button)                     05 09
    USAGE (Button 1)                        09 01
    USAGE (Button 2)                        09 02
    USAGE (Button 4)                        09 04
    USAGE (Button 5)                        09 05
    USAGE (Button 7)                        09 07
    USAGE (Button 8)                        09 08
    USAGE (Button 14)                       09 0E
    USAGE (Button 15)                       09 0F
    USAGE (Button 13)                       09 0D
    USAGE_PAGE (Consumer Devices)           05 0C
    USAGE (Back)                            0a 24 02
    USAGE (HomePage)                        0a 23 02
    LOGICAL_MINIMUM (0)                     15 00
    LOGICAL_MAXIMUM (1)                     25 01
    REPORT_SIZE (1)                         75 01
    REPORT_COUNT (11)                       95 0B
    INPUT (Data,Var,Abs)                    81 02

With Usage Page concatenation in Main item, parser recognizes all the
11 Usages as consumer keys, it is not the HID device's real intention.

This patch checks whether Usage Page is really defined after Usage ID
items by comparing usage page using status.

Usage Page concatenation on currently defined Usage Page will always
do in local parsing when Usage ID items encountered.

When Main item is parsing, concatenation will do again with last
defined Usage Page if this page has not been used in the previous
usages concatenation.

Signed-off-by: Candle Sun <candle.sun@unisoc.com>
Signed-off-by: Nianfu Bai <nianfu.bai@unisoc.com>
Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Cc: Siarhei Vishniakou <svv@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-05 15:38:29 +01:00
..
i2c-hid HID: i2c-hid: add Trekstor Primebook C11B to descriptor override 2019-11-06 12:43:32 +01:00
intel-ish-hid HID: intel-ish-hid: fixes incorrect error handling 2019-12-05 15:37:26 +01:00
usbhid HID: hiddev: do cleanup in failure of opening a device 2019-08-25 10:50:07 +02:00
hid-a4tech.c HID: input: fix a4tech horizontal wheel custom usage 2019-08-29 08:26:40 +02:00
hid-accutouch.c HID: Accutouch: Add driver for ELO Accutouch 2216 USB Touchscreens 2017-03-21 15:03:55 +01:00
hid-alps.c Merge branches 'for-4.8/upstream-fixes', 'for-4.9/alps', 'for-4.9/hid-input', 'for-4.9/intel-ish', 'for-4.9/kye-uclogic-waltop-fixes', 'for-4.9/logitech', 'for-4.9/sony', 'for-4.9/upstream' and 'for-4.9/wacom' into for-linus 2016-10-07 09:59:48 +02:00
hid-apple.c HID: apple: Fix stuck function keys when using FN 2019-10-07 18:55:10 +02:00
hid-appleir.c HID: hid-input: allow input_configured callback return errors 2015-11-05 09:51:50 -08:00
hid-asus.c HID: asus: Add T100CHI bluetooth keyboard dock touchpad support 2017-08-08 10:05:23 +02:00
hid-aureal.c HID: fix some indenting issues 2015-10-21 13:15:53 +02:00
hid-axff.c HID: Fix assumption that devices have inputs 2019-11-06 12:43:33 +01:00
hid-belkin.c
hid-betopff.c
hid-cherry.c
hid-chicony.c HID: move Asus keyboard support from hid-chicony to hid-asus 2017-06-08 13:47:52 +02:00
hid-cmedia.c HID: Support for CMedia CM6533 HID audio jack controls 2016-03-02 10:31:36 +01:00
hid-core.c HID: core: check whether Usage Page item is after Usage ID items 2019-12-05 15:38:29 +01:00
hid-corsair.c HID: corsair: Add driver Scimitar Pro RGB gaming mouse 1b1c:1b3e support to hid-corsair 2017-03-21 14:46:15 +01:00
hid-cp2112.c HID: cp2112: prevent sleeping function called from invalid context 2019-09-10 10:32:17 +01:00
hid-cypress.c HID: hid-cypress: validate length of report 2017-01-06 16:06:43 +01:00
hid-debug.c HID: debug: fix race condition with between rdesc_show() and device removal 2019-05-08 07:20:47 +02:00
hid-dr.c HID: Fix assumption that devices have inputs 2019-11-06 12:43:33 +01:00
hid-elecom.c HID: hid-elecom: extend to fix descriptor for HUGE trackball 2017-10-11 15:46:22 +02:00
hid-elo.c HID: elo: clear BTN_LEFT mapping 2018-03-19 08:42:47 +01:00
hid-emsff.c HID: Fix assumption that devices have inputs 2019-11-06 12:43:33 +01:00
hid-ezkey.c
hid-gaff.c HID: Fix assumption that devices have inputs 2019-11-06 12:43:33 +01:00
hid-gembird.c HID: gembird: add new driver to fix Gembird JPD-DualForce 2 2015-08-18 15:03:43 +02:00
hid-generic.c
hid-gfrm.c HID: hid-gfrm: avoid warning for input_configured API change 2015-11-05 10:15:35 -08:00
hid-gt683r.c HID: use to_hid_device() 2015-12-28 13:41:44 +01:00
hid-gyration.c
hid-holtek-kbd.c HID: holtek: test for sanity of intfdata 2019-08-25 10:50:06 +02:00
hid-holtek-mouse.c
hid-holtekff.c HID: Fix assumption that devices have inputs 2019-11-06 12:43:33 +01:00
hid-hyperv.c HID: hyperv: Use in-place iterator API in the channel callback 2019-11-06 12:43:06 +01:00
hid-icade.c
hid-ids.h HID: Add quirk for HP X1200 PIXART OEM mouse 2019-08-09 17:53:32 +02:00
hid-input.c HID: Add ASUS T100CHI keyboard dock battery quirks 2019-11-06 12:42:56 +01:00
hid-ite.c HID: ite: Add USB id match for another ITE based keyboard rfkill key quirk 2019-01-13 10:00:56 +01:00
hid-kensington.c
hid-keytouch.c
hid-kye.c scripts/spelling.txt: add "comsume(r)" pattern and fix typo instances 2017-02-27 18:43:47 -08:00
hid-lcpower.c
hid-led.c HID: hid-led: fix issue with transfer buffer not being dma capable 2016-10-10 10:47:03 +02:00
hid-lenovo.c HID: lenovo: Add checks to fix of_led_classdev_register 2019-02-12 19:46:09 +01:00
hid-lg.c HID: logitech: Fix general protection fault caused by Logitech driver 2019-10-05 12:47:33 +02:00
hid-lg.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
hid-lg2ff.c HID: Fix assumption that devices have inputs 2019-11-06 12:43:33 +01:00
hid-lg3ff.c HID: Fix assumption that devices have inputs 2019-11-06 12:43:33 +01:00
hid-lg4ff.c HID: Fix assumption that devices have inputs 2019-11-06 12:43:33 +01:00
hid-lg4ff.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
hid-lgff.c HID: Fix assumption that devices have inputs 2019-11-06 12:43:33 +01:00
hid-logitech-dj.c HID: logitech-dj: allow devices to request full pairing information 2017-04-06 14:36:36 +02:00
hid-logitech-hidpp.c HID: Fix assumption that devices have inputs 2019-11-06 12:43:33 +01:00
hid-magicmouse.c Revert "HID: magicmouse: Set multi-touch keybits for Magic Mouse" 2017-06-20 10:38:17 +02:00
hid-mf.c HID: hid-mf: add force feedback support for Mayflash DolphinBar and GameCube 2017-01-11 22:12:44 +01:00
hid-microsoft.c HID: multitouch: enable Surface 3 Type Cover Pro to report multitouch data 2017-01-20 15:17:19 +01:00
hid-monterey.c
hid-multitouch.c HID: multitouch: Add pointstick support for Cirque Touchpad 2018-12-13 09:18:48 +01:00
hid-nti.c HID: Add quirk driver for NTI USB-SUN adapter 2017-03-06 13:16:33 +01:00
hid-ntrig.c HID: hid-ntrig: add error handling for sysfs_create_group 2018-10-03 17:00:52 -07:00
hid-ortek.c HID: ortek: add one more buggy device 2017-07-24 17:38:21 +02:00
hid-penmount.c HID: penmount: report only one button for PenMount 6000 USB touchscreen controller 2016-03-10 17:17:26 +01:00
hid-petalynx.c
hid-picolcd.h
hid-picolcd_backlight.c HID: picoLCD: Deletion of unnecessary checks before three function calls 2015-06-29 14:51:12 +02:00
hid-picolcd_cir.c media: rc: rename RC_TYPE_* to RC_PROTO_* and RC_BIT_* to RC_PROTO_BIT_* 2017-08-20 10:02:48 -04:00
hid-picolcd_core.c
hid-picolcd_debugfs.c HID: picoLCD: Spelling s/REPORT_WRTIE_MEMORY/REPORT_WRITE_MEMORY/ 2017-03-24 15:45:04 +01:00
hid-picolcd_fb.c
hid-picolcd_lcd.c HID: picoLCD: Deletion of unnecessary checks before three function calls 2015-06-29 14:51:12 +02:00
hid-picolcd_leds.c HID: use to_hid_device() 2015-12-28 13:41:44 +01:00
hid-pl.c
hid-plantronics.c HID: hid-plantronics: Re-resend Update to map button for PTT products 2018-08-03 07:50:33 +02:00
hid-primax.c
hid-prodikeys.c HID: prodikeys: Fix general protection fault during probe 2019-10-05 12:47:32 +02:00
hid-retrode.c HID: Add driver for Retrode2 joypad adapter 2017-06-22 14:44:11 +02:00
hid-rmi.c HID: Fix hid_report_len usage 2018-04-24 09:36:28 +02:00
hid-roccat-arvo.c HID: use kobj_to_dev() 2015-12-28 13:41:51 +01:00
hid-roccat-arvo.h
hid-roccat-common.c HID: use kobj_to_dev() 2015-12-28 13:41:51 +01:00
hid-roccat-common.h
hid-roccat-isku.c HID: use kobj_to_dev() 2015-12-28 13:41:51 +01:00
hid-roccat-isku.h
hid-roccat-kone.c HID: use kobj_to_dev() 2015-12-28 13:41:51 +01:00
hid-roccat-kone.h
hid-roccat-koneplus.c HID: use kobj_to_dev() 2015-12-28 13:41:51 +01:00
hid-roccat-koneplus.h
hid-roccat-konepure.c
hid-roccat-kovaplus.c HID: roccat: prevent an out of bounds read in kovaplus_profile_activated() 2018-04-26 11:02:10 +02:00
hid-roccat-kovaplus.h
hid-roccat-lua.c HID: use kobj_to_dev() 2015-12-28 13:41:51 +01:00
hid-roccat-lua.h
hid-roccat-pyra.c HID: use kobj_to_dev() 2015-12-28 13:41:51 +01:00
hid-roccat-pyra.h
hid-roccat-ryos.c
hid-roccat-savu.c
hid-roccat-savu.h
hid-roccat.c sched/headers: Prepare to move signal wakeup & sigpending methods from <linux/sched.h> into <linux/sched/signal.h> 2017-03-02 08:42:32 +01:00
hid-saitek.c HID: hid-saitek: Add device ID for RAT 7 Contagion 2018-10-10 08:54:23 +02:00
hid-samsung.c
hid-sensor-custom.c iio/hid-sensors: Fix IIO_CHAN_INFO_RAW returning wrong values for signed numbers 2018-12-17 09:28:49 +01:00
hid-sensor-hub.c iio/hid-sensors: Fix IIO_CHAN_INFO_RAW returning wrong values for signed numbers 2018-12-17 09:28:49 +01:00
hid-sjoy.c HID: sjoy: support Super Joy Box 4 2015-05-07 10:47:53 +02:00
hid-sony.c HID: Fix assumption that devices have inputs 2019-11-06 12:43:33 +01:00
hid-speedlink.c
hid-steelseries.c HID: use to_hid_device() 2015-12-28 13:41:44 +01:00
hid-sunplus.c
hid-tivo.c
hid-tmff.c HID: Fix assumption that devices have inputs 2019-11-06 12:43:33 +01:00
hid-topseed.c
hid-twinhan.c
hid-uclogic.c HID: uclogic: add support for Ugee Tablet EX07S 2017-04-06 14:50:11 +02:00
hid-udraw-ps3.c HID: udraw-ps3: accel_limits is local to the driver 2016-11-15 14:23:17 +01:00
hid-waltop.c HID: Remove broken links to tablet descriptions 2016-09-19 14:32:21 +02:00
hid-wiimote-core.c
hid-wiimote-debug.c
hid-wiimote-modules.c HID: wiimote: Fix wiimote mp scale linearization 2016-03-18 17:31:38 +01:00
hid-wiimote.h HID: use to_hid_device() 2015-12-28 13:41:44 +01:00
hid-xinmo.c HID: xinmo: fix for out of range for THT 2P arcade controller. 2017-03-24 15:43:03 +01:00
hid-zpff.c HID: Fix assumption that devices have inputs 2019-11-06 12:43:33 +01:00
hid-zydacron.c
hidraw.c HID: hidraw: Fix invalid read in hidraw_ioctl 2019-10-05 12:47:33 +02:00
Kconfig HID: lenovo: Add support for IBM/Lenovo Scrollpoint mice 2018-06-21 04:02:48 +09:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
uhid.c HID: uhid: forbid UHID_CREATE under KERNEL_DS or elevated privileges 2018-11-27 16:10:51 +01:00
wacom.h HID: wacom: generic: Treat serial number and related fields as unsigned 2019-11-12 19:18:04 +01:00
wacom_sys.c HID: wacom: generic: read HID_DG_CONTACTMAX from any feature report 2019-09-21 07:15:26 +02:00
wacom_wac.c HID: wacom: generic: Treat serial number and related fields as unsigned 2019-11-12 19:18:04 +01:00
wacom_wac.h HID: wacom: generic: only switch the mode on devices with LEDs 2019-07-31 07:28:41 +02:00