HID: core: remove the absolute need of hid_have_special_driver[]
authorBenjamin Tissoires <benjamin.tissoires@redhat.com>
Mon, 20 Nov 2017 10:48:44 +0000 (11:48 +0100)
committerJiri Kosina <jkosina@suse.cz>
Tue, 21 Nov 2017 10:14:48 +0000 (11:14 +0100)
commite04a0442d33b8cf183bba38646447b891bb02123
tree4d61ef8247b214bfc4f91fc79bd6e72c4dee77c4
parentf745d162f469a4b1e805779a8b0d9157100c813c
HID: core: remove the absolute need of hid_have_special_driver[]

Most HID devices behave properly when they are used with hid-generic.
Since kernel v4.12, we do not poll for input reports at plug in, so
hid-generic should behave properly with all HID devices.

There has been a long standing list of HID devices that have a special
driver. It used to be just a few, but with time, this list went too big,
and we can not ask users to know which HID special driver will pick up
their device.

We can teach hid-generic to be nice with others. If a device is not
explicitly marked with HID_QUIRK_HAVE_SPECIAL_DRIVER, we can allow
hid-generic to pick up the device as long as no other loaded HID driver
will match the device.

When the special driver appears, hid-generic can step back and let
the special driver handling the device. In case this special driver
is removed, this good old pal of hid-generic will rebind to the device.

This basically makes the list hid_have_special_driver[] useless. It
still allows to not see a hid-generic driver bound and removed during
boot, so we can keep it around.

This will also help other people to have a special HID driver without
the need of recompiling hid-core.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-core.c
drivers/hid/hid-generic.c
include/linux/hid.h