• Benjamin Tissoires's avatar
    HID: usbhid: prevent unwanted events to be sent when re-opening the device · b905811a
    Benjamin Tissoires authored
    When events occurs while no one is listening to the node (hid->open == 0
    and usb_kill_urb() called) some events are still stacked somewhere in
    the USB (kernel or device?) stack. When the node gets reopened, these
    events are drained, and this results in spurious touch down/up, or mouse
    button clicks.
    
    The problem was spotted with touchscreens in fdo bug #81781 [1], but it
    actually occurs with any mouse using hid-generic or touchscreen.
    
    A way to reproduce it is to call:
    
    $ xinput disable 9 ; sleep 5 ; xinput enable 9
    
    With 9 being the device ID for the touchscreen/mouse. During the "sleep",
    produce some touch events or click events. When "xinput enable" is called,
    at least one click is generated.
    
    This patch tries to fix this by draining the queue for 50 msec and
    during this time frame, not forwarding these old events to the hid layer.
    
    Hans completed the explanation:
    """
    Devices like mice (basically any hid device) will have a fifo
    on the device side, when we stop submitting urbs to get hid reports from
    it, that fifo will fill up, and when we resume we will get whatever
    is there in that fifo.
    """
    
    [1] https://bugs.freedesktop.org/show_bug.cgi?id=81781Signed-off-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
    Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
    b905811a
usbhid.h 4.14 KB