• C
    HID: core: check whether Usage Page item is after Usage ID items · 8d22b705
    Candle Sun 提交于
    commit 1cb0d2aee26335d0bccf29100c7bed00ebece851 upstream.
    
    Upstream commit 58e75155009c ("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: NCandle Sun <candle.sun@unisoc.com>
    Signed-off-by: NNianfu Bai <nianfu.bai@unisoc.com>
    Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>
    Signed-off-by: NJiri Kosina <jkosina@suse.cz>
    Cc: Siarhei Vishniakou <svv@google.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    8d22b705
hid-core.c 58.2 KB