HID: retain initial quirks set up when creating HID devices
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 7 Feb 2023 23:03:30 +0000 (15:03 -0800)
committerBenjamin Tissoires <benjamin.tissoires@redhat.com>
Thu, 9 Feb 2023 13:24:30 +0000 (14:24 +0100)
commit03a86105556e23650e4470c09f91cf7c360d5e28
tree6bdf8e660c267f9ed42caf9a5cb84c6b3dd19d15
parenta2f416bf062a38bb76cccd526d2d286b8e4db4d9
HID: retain initial quirks set up when creating HID devices

In certain circumstances, such as when creating I2C-connected HID
devices, we want to pass and retain some quirks (axis inversion, etc).
The source of such quirks may be device tree, or DMI data, or something
else not readily available to the HID core itself and therefore cannot
be reconstructed easily. To allow this, introduce "initial_quirks" field
in hid_device structure and use it when determining the final set of
quirks.

This fixes the problem with i2c-hid setting up device-tree sourced
quirks too late and losing them on device rebind, and also allows to
sever the tie between hid-code and i2c-hid when applying DMI-based
quirks.

Fixes: b60d3c803d76 ("HID: i2c-hid-of: Expose the touchscreen-inverted properties")
Fixes: a2f416bf062a ("HID: multitouch: Add quirks for flipped axes")
Reviewed-by: Guenter Roeck <groeck@chromium.org>
Tested-by: Allen Ballway <ballway@chromium.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Reviewed-by: Alistair Francis <alistair@alistair23.me>
Link: https://lore.kernel.org/r/Y+LYwu3Zs13hdVDy@google.com
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
drivers/hid/hid-quirks.c
drivers/hid/i2c-hid/i2c-hid-core.c
drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c
include/linux/hid.h