[PATCH v9 0/5] Input: synaptics-rmi4 - add quirks for third party touchscreen controllers
David Heidelberg via B4 Relay <[email protected]> Fri, 31 Jul 2026 22:34:11 +0200
| Newsgroups | org.kernel.vger.phone-devel,org.kernel.feeds.b4-sent,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-input,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
With the growing popularity of running upstream Linux on mobile devices, we're beginning to run into more and more edgecases. The OnePlus 6 is a fairly well supported 2018 era smartphone, selling over a million units in it's first 22 days. With this level of popularity, it's almost inevitable that we get third party replacement displays, and as a result, replacement touchscreen controllers. The OnePlus 6 shipped with an extremely usecase specific touchscreen driver, it implemented only the bare minimum parts of the highly generic rmi4 protocol, instead hardcoding most of the register addresses. As a result, the third party touchscreen controllers that are often found in replacement screens, implement only the registers that the downstream driver reads from. They additionally have other restrictions such as heavy penalties on unaligned reads. This series attempts to implement the necessary workaround to support some of these chips with the rmi4 driver. Although it's worth noting that at the time of writing there are other unofficial controllers in the wild that don't work even with these patches. We have been shipping these patches in postmarketOS for the last several years, and they are known to not cause any regressions on the OnePlus 6/6T (with the official Synaptics controller), however I don't own any other rmi4 hardware to further validate this. The series is also available (until merged) at https://codeberg.org/sdm845/linux/commits/b4/synaptics-rmi4 --- Changes in v9: - Corrected the rmi_s3706_fallback_pdt sequence (dec -> hex). Thanks to Marcus. - Separate changes moving the code around to own commit, send separately as Input: synaptics-rmi4 - f12: Move sensor initialization into own function - Dropped `Input: synaptics-rmi4 - f55: handle zero electrode count` as it seems to be redundant and we cannot reproduce (at least for now). - Link to v8: https://lore.kernel.org/r/[email protected] Changes in v8: - The pdt_scan_state->pdts array should actually be of size (RMI_PDT_MAX+1). (Casey) - Move the pdt_count introduction to the relevant patch. (Casey) - Link to v7: https://lore.kernel.org/r/[email protected] Changes in v7: - Rebased on top of next-20260320, no other changes. - Link to v6: https://lore.kernel.org/r/[email protected] Changes in v6: - Rebased on top of next-20251113. - No other change since the Rob Herring comment. - Link to v5: https://lore.kernel.org/r/[email protected] Changes in v5: - Removed -i2c suffix from rmi4-s3706b-i2c (Krzysztof). - Link to v4: https://lore.kernel.org/r/[email protected] Changes in v4: - Replaced patch "dt-bindings: input: syna,rmi4: document syna,pdt-fallback-desc" with patch documenting specific touchscreen model used in OnePlus 6 and 6T. - Fixed zero electrode return code (Dmitry). - Switched the duplicate detection algo to bitmap (Dmitry). - Optimized rmi_device_platform_data struct to avoid unnecessary padding. - Changed fallback_size from int to unsigned int. - Changed SoB from nickname and old address (methanal <[email protected]>) to Kaustabh Chakraborty <[email protected]>. Verified ownership through the sdm845 chatroom on Matrix. - Link to v3: https://lore.kernel.org/r/[email protected] Changes in v3: - reworded dt-bindings property description - fixed the rmi_driver_of_probe definition for non device-tree builds. - fixed some indentation issues reported by checkpatch - change rmi_pdt_entry_is_valid() variable to unsigned - Link to v2: https://lore.kernel.org/all/[email protected] Changes in v2: - Improve dt-bindings patch (thanks Rob) - Add missing cast in patch 5 to fix the pointer arithmetic - Link to v1: https://lore.kernel.org/r/[email protected] --- Casey Connolly (1): Input: synaptics-rmi4 - handle duplicate/unknown PDT entries Kaustabh Chakraborty (4): Input: synaptics-rmi4 - f12: use hardcoded values for aftermarket touch ICs Input: synaptics-rmi4 - don't do unaligned reads in IRQ context Input: synaptics-rmi4 - read product ID on aftermarket touch ICs Input: synaptics-rmi4 - support fallback values for PDT descriptor bytes drivers/input/rmi4/rmi_driver.c | 125 +++++++++++++++++++++++++++++++++------- drivers/input/rmi4/rmi_driver.h | 10 ++++ drivers/input/rmi4/rmi_f01.c | 14 +++++ drivers/input/rmi4/rmi_f12.c | 76 ++++++++++++++++++++---- include/linux/rmi.h | 3 + 5 files changed, 195 insertions(+), 33 deletions(-) --- base-commit: 3d5670d672ae08b8c534b7beed6f57c8b44e7b43 change-id: 20250308-synaptics-rmi4-c832b2f73ceb prerequisite-change-id: 20260627-synaptics-rmi4-fnsplit-3698a620b73c:v1 prerequisite-patch-id: 450869dc191388eb997574e376ee9c85991de503 Best regards, -- David Heidelberg <[email protected]>