• Anthony Martin's avatar
    Input: synaptics - fix device info appearing different on reconnect · 2ed56448
    Anthony Martin authored
    commit 3f9db52d upstream.
    
    User-modified input settings no longer survive a suspend/resume cycle.
    Starting with 4.12, the touchpad is reinitialized on every reconnect
    because the hardware appears to be different. This can be reproduced
    by running the following as root:
    
        echo -n reconnect >/sys/devices/platform/i8042/serio1/drvctl
    
    A line like the following will show up in dmesg:
    
        [30378.295794] psmouse serio1: synaptics: hardware appears to be
                       different: id(149271-149271), model(114865-114865),
                       caps(d047b3-d047b1), ext(b40000-b40000).
    
    Note the single bit difference in caps: bit 1 (SYN_CAP_MULTIFINGER).
    
    This happens because we modify our stored copy of the device info
    capabilities when we enable advanced gesture mode but this change is
    not reflected in the actual hardware capabilities.
    
    It worked in the past because synaptics_query_hardware used to modify
    the stored synaptics_device_info struct instead of filling in a new
    one, as it does now.
    
    Fix it by no longer faking the SYN_CAP_MULTIFINGER bit when setting
    advanced gesture mode. This necessitated a small refactoring.
    
    Fixes: 6c53694f ("Input: synaptics - split device info into a separate structure")
    Signed-off-by: default avatarAnthony Martin <ality@pbrane.org>
    Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    2ed56448
synaptics.c 48.4 KB