• Johan Hovold's avatar
    HID: i2c-hid: fix handling of unpopulated devices · 9af867c0
    Johan Hovold authored
    A recent commit reordered probe so that the interrupt line is now
    requested before making sure that the device exists.
    
    This breaks machines like the Lenovo ThinkPad X13s which rely on the
    HID driver to probe second-source devices and only register the variant
    that is actually populated. Specifically, the interrupt line may now
    already be (temporarily) claimed when doing asynchronous probing of the
    touchpad:
    
    	genirq: Flags mismatch irq 191. 00082008 (hid-over-i2c) vs. 00082008 (hid-over-i2c)
    	i2c_hid_of 21-0015: Could not register for hid-over-i2c interrupt, irq = 191, ret = -16
    	i2c_hid_of: probe of 21-0015 failed with error -16
    
    Fix this by restoring the old behaviour of first making sure the device
    exists before requesting the interrupt line.
    
    Note that something like this should probably be implemented also for
    "panel followers", whose actual probe is currently effectively deferred
    until the DRM panel is probed (e.g. by powering down the device after
    making sure it exists and only then register it as a follower).
    
    Fixes: 675cd877 ("HID: i2c-hid: Rearrange probe() to power things up later")
    Cc: Douglas Anderson <dianders@chromium.org>
    Cc: Maxime Ripard <mripard@kernel.org>
    Signed-off-by: default avatarJohan Hovold <johan+linaro@kernel.org>
    Tested-by: default avatarDennis Gilmore <dgilmore@redhat.com>
    Reviewed-by: default avatarDouglas Anderson <dianders@chromium.org>
    Tested-by: default avatarDouglas Anderson <dianders@chromium.org>
    Link: https://lore.kernel.org/r/20231002155857.24584-1-johan+linaro@kernel.orgSigned-off-by: default avatarBenjamin Tissoires <bentiss@kernel.org>
    9af867c0
i2c-hid-core.c 33.5 KB