This patch series is focused on improving the compatibility and usability of the
hid-pidff force feedback driver. Last patch introduces a new, universal driver
for PID devices that need some special handling like report fixups, remapping the
button range, managing new pidff quirks and setting desirable fuzz/flat values.
This work has been done in the span of the past months with the help of the great
Linux simracing community, with a little input from sim flight fans from FFBeast.
No changes interfere with compliant and currently working PID devices.
I'm not married to the name. It's what we used previously, but if "universal" is
confusing (pidff is already the generic driver), we can come up with something
better like "hid-quirky-pidff" :)
Question about the header management. Maybe I should create a separate
hid-pidff.h file and move all the HID_PID related definitions there?
Signed-off-by: Tomasz Pakuła <tomasz.pakula.oficjalny@gmail.com>
---
Changes in v6:
- Rebased on v6.13
- Added missing SOBs
- Reworked and fixed pidff_reset function
- Simplified pidff_upload_effect function
- Moved magic values into defines
- Added PERIODIC effect period rescaling
- Support "split" devices with a separate "input device" for buttons
- Fixed comment styling
- Improved set_gain handling
- Fixed MISSING_PBO quirk
- Fix possible null pointer dereference while calling
pidff_needs_set_envelope
- Link to v5: https://lore.kernel.org/all/20250119131356.1006582-1-tomasz.pakula.oficjalny@gmail.com (local)
Changes in v5:
- Added PERIODIC_SINE_ONLY quirk
- Link to v4: https://lore.kernel.org/all/20250113124923.234060-7-tomasz.pakula.oficjalny@gmail.com (local)
Changes in v4:
- Added PXN devices and their hid ids
- Added hid-universal-pidff entry in the MAINTAINERS file
- Link to v3: https://lore.kernel.org/all/20250106213539.77709-2-tomasz.pakula.oficjalny@gmail.com (local)
Changes in v3:
- Fixed a missed incompatible pointer type while assigning hid_pidff_init_with_quirks
to init_function pointer (void -> int)
- Improved Kconfig entry name to adhere to the alphabetical order of special
HID drivers
- Extended cover letter
- Link to v2: https://lore.kernel.org/all/20250105193628.296350-1-tomasz.pakula.oficjalny@gmail.com (local)
Changes in v2:
- Fix typo in a comment
- Fix a possible null pointer dereference when calling hid_pidff_init_with_quirks
especially when compiling with HID_PID=n
- Fix axis identifier when updating fuzz/flat for FFBeast Joystick
- Link to v1: https://lore.kernel.org/all/20241231154731.1719919-1-tomasz.pakula.oficjalny@gmail.com (local)
---
Tomasz Pakuła (17):
HID: pidff: Convert infinite length from Linux API to PID standard
HID: pidff: Do not send effect envelope if it's empty
HID: pidff: Clamp PERIODIC effect period to device's logical range
HID: pidff: Add MISSING_DELAY quirk and its detection
HID: pidff: Add MISSING_PBO quirk and its detection
HID: pidff: Add PERMISSIVE_CONTROL quirk
HID: pidff: Add hid_pidff_init_with_quirks and export as GPL symbol
HID: pidff: Add FIX_WHEEL_DIRECTION quirk
HID: pidff: Stop all effects before enabling actuators
HID: Add hid-universal-pidff driver and supported device ids
MAINTAINERS: Add entry for hid-universal-pidff driver
HID: pidff: Add PERIODIC_SINE_ONLY quirk
HID: pidff: Completely rework and fix pidff_reset function
HID: pidff: Simplify pidff_upload_effect function
HID: pidff: Define values used in pidff_find_special_fields
HID: pidff: Rescale period value to match device units
HID: pidff: Improve ff gain handling
MAINTAINERS | 7 +
drivers/hid/Kconfig | 14 +
drivers/hid/Makefile | 1 +
drivers/hid/hid-ids.h | 31 +++
drivers/hid/hid-universal-pidff.c | 197 ++++++++++++++
drivers/hid/usbhid/hid-pidff.c | 439 ++++++++++++++++++++----------
include/linux/hid.h | 9 +
7 files changed, 549 insertions(+), 149 deletions(-)
create mode 100644 drivers/hid/hid-universal-pidff.c
--
2.48.1