• David Herrmann's avatar
    HID: wiimote: Add output queue for wiimote driver · 23c063cb
    David Herrmann authored
    The raw hid output function that is supported by bluetooth low-level
    hid driver does not provide an output queue and also may sleep. The
    wiimote driver, though, may need to send data in atomic context so
    this patch adds a buffered output queue for the wiimote driver.
    
    We use the shared workqueue to send our buffer to the hid device.
    There is always only one active worker which flushes the whole output
    queue to the device. If our queue is full, every further
    output is discarded.
    
    Special care is needed in the deinitialization routine. When
    wiimote_hid_remove is called, HID input is already disabled, but HID
    output may still be used from our worker and is then discarded by the
    lower HID layers. Therefore, we can safely disable the input layer since it
    is the only layer that still sends input events.
    Future sysfs attributes must be freed before unregistering input to
    avoid the sysfs handlers to send input events to a non-existing input
    layer.
    Signed-off-by: default avatarDavid Herrmann <dh.herrmann@googlemail.com>
    Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
    23c063cb
hid-wiimote.c 6.3 KB