[PATCH v5 0/7] Input: synaptics-rmi4 - add quirks for third party touchscreen controllers

David Heidelberg via B4 Relay posted 7 patches 10 months ago
There is a newer version of this series
.../devicetree/bindings/input/syna,rmi4.yaml       |  11 +-
drivers/input/rmi4/rmi_driver.c                    | 124 +++++++++++++++++----
drivers/input/rmi4/rmi_driver.h                    |  10 ++
drivers/input/rmi4/rmi_f01.c                       |  14 +++
drivers/input/rmi4/rmi_f12.c                       | 117 ++++++++++++++-----
drivers/input/rmi4/rmi_f55.c                       |   5 +
include/linux/rmi.h                                |   3 +
7 files changed, 234 insertions(+), 50 deletions(-)
[PATCH v5 0/7] Input: synaptics-rmi4 - add quirks for third party touchscreen controllers
Posted by David Heidelberg via B4 Relay 10 months ago
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.

---
Changes in v5:
- Removed -i2c suffix from rmi4-s3706b-i2c (Krzysztof).
- Link to v4: https://lore.kernel.org/r/20250402-synaptics-rmi4-v4-0-1bb95959e564@ixit.cz

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 <baclofen@tuta.io>) to
  Kaustabh Chakraborty <kauschluss@disroot.org>.
  Verified ownership through the sdm845 chatroom on Matrix.
- Link to v3: https://lore.kernel.org/r/20250308-synaptics-rmi4-v3-0-215d3e7289a2@ixit.cz

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/20230929-caleb-rmi4-quirks-v2-0-b227ac498d88@linaro.org

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/20230929-caleb-rmi4-quirks-v1-0-cc3c703f022d@linaro.org

---
Caleb Connolly (1):
      Input: synaptics-rmi4 - handle duplicate/unknown PDT entries

David Heidelberg (1):
      dt-bindings: input: syna,rmi4: Document syna,rmi4-s3706b

Kaustabh Chakraborty (5):
      Input: synaptics-rmi4 - f12: use hardcoded values for aftermarket touch ICs
      Input: synaptics-rmi4 - f55: handle zero electrode count
      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

 .../devicetree/bindings/input/syna,rmi4.yaml       |  11 +-
 drivers/input/rmi4/rmi_driver.c                    | 124 +++++++++++++++++----
 drivers/input/rmi4/rmi_driver.h                    |  10 ++
 drivers/input/rmi4/rmi_f01.c                       |  14 +++
 drivers/input/rmi4/rmi_f12.c                       | 117 ++++++++++++++-----
 drivers/input/rmi4/rmi_f55.c                       |   5 +
 include/linux/rmi.h                                |   3 +
 7 files changed, 234 insertions(+), 50 deletions(-)
---
base-commit: f0a16f5363325cc8d9382471cdc7b654c53254c9
change-id: 20250308-synaptics-rmi4-c832b2f73ceb

Best regards,
-- 
David Heidelberg <david@ixit.cz>
Re: [PATCH v5 0/7] Input: synaptics-rmi4 - add quirks for third party touchscreen controllers
Posted by David Heidelberg 9 months, 1 week ago
Kind ping on the series.

When the series is considered solid, it will improve Linux usability on 
lower-quality touchscreen replacements (including those from other 
vendors and models) outside of our Snapdragon 845 downstream fork.

Thank you
David

On 10/04/2025 16:28, David Heidelberg via B4 Relay wrote:
> 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.
> 
> ---
> Changes in v5:
> - Removed -i2c suffix from rmi4-s3706b-i2c (Krzysztof).
> - Link to v4: https://lore.kernel.org/r/20250402-synaptics-rmi4-v4-0-1bb95959e564@ixit.cz
> 
> 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 <baclofen@tuta.io>) to
>    Kaustabh Chakraborty <kauschluss@disroot.org>.
>    Verified ownership through the sdm845 chatroom on Matrix.
> - Link to v3: https://lore.kernel.org/r/20250308-synaptics-rmi4-v3-0-215d3e7289a2@ixit.cz
> 
> 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/20230929-caleb-rmi4-quirks-v2-0-b227ac498d88@linaro.org
> 
> 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/20230929-caleb-rmi4-quirks-v1-0-cc3c703f022d@linaro.org
> 
> ---
> Caleb Connolly (1):
>        Input: synaptics-rmi4 - handle duplicate/unknown PDT entries
> 
> David Heidelberg (1):
>        dt-bindings: input: syna,rmi4: Document syna,rmi4-s3706b
> 
> Kaustabh Chakraborty (5):
>        Input: synaptics-rmi4 - f12: use hardcoded values for aftermarket touch ICs
>        Input: synaptics-rmi4 - f55: handle zero electrode count
>        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
> 
>   .../devicetree/bindings/input/syna,rmi4.yaml       |  11 +-
>   drivers/input/rmi4/rmi_driver.c                    | 124 +++++++++++++++++----
>   drivers/input/rmi4/rmi_driver.h                    |  10 ++
>   drivers/input/rmi4/rmi_f01.c                       |  14 +++
>   drivers/input/rmi4/rmi_f12.c                       | 117 ++++++++++++++-----
>   drivers/input/rmi4/rmi_f55.c                       |   5 +
>   include/linux/rmi.h                                |   3 +
>   7 files changed, 234 insertions(+), 50 deletions(-)
> ---
> base-commit: f0a16f5363325cc8d9382471cdc7b654c53254c9
> change-id: 20250308-synaptics-rmi4-c832b2f73ceb
> 
> Best regards,

-- 
David Heidelberg
Re: [PATCH v5 0/7] Input: synaptics-rmi4 - add quirks for third party touchscreen controllers
Posted by David Heidelberg 8 months ago
Hello Dmitry,

is there anything else I should adjust to get these fixes merged?

Thank you
David

On 03/05/2025 16:02, David Heidelberg wrote:
> Kind ping on the series.
> 
> When the series is considered solid, it will improve Linux usability on 
> lower-quality touchscreen replacements (including those from other 
> vendors and models) outside of our Snapdragon 845 downstream fork.
> 
> Thank you
> David
> 
> On 10/04/2025 16:28, David Heidelberg via B4 Relay wrote:
>> 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.
>>
>> ---
>> Changes in v5:
>> - Removed -i2c suffix from rmi4-s3706b-i2c (Krzysztof).
>> - Link to v4: https://lore.kernel.org/r/20250402-synaptics-rmi4- 
>> v4-0-1bb95959e564@ixit.cz
>>
>> 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 
>> <baclofen@tuta.io>) to
>>    Kaustabh Chakraborty <kauschluss@disroot.org>.
>>    Verified ownership through the sdm845 chatroom on Matrix.
>> - Link to v3: https://lore.kernel.org/r/20250308-synaptics-rmi4- 
>> v3-0-215d3e7289a2@ixit.cz
>>
>> 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/20230929-caleb-rmi4-quirks- 
>> v2-0-b227ac498d88@linaro.org
>>
>> 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/20230929-caleb-rmi4-quirks- 
>> v1-0-cc3c703f022d@linaro.org
>>
>> ---
>> Caleb Connolly (1):
>>        Input: synaptics-rmi4 - handle duplicate/unknown PDT entries
>>
>> David Heidelberg (1):
>>        dt-bindings: input: syna,rmi4: Document syna,rmi4-s3706b
>>
>> Kaustabh Chakraborty (5):
>>        Input: synaptics-rmi4 - f12: use hardcoded values for 
>> aftermarket touch ICs
>>        Input: synaptics-rmi4 - f55: handle zero electrode count
>>        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
>>
>>   .../devicetree/bindings/input/syna,rmi4.yaml       |  11 +-
>>   drivers/input/rmi4/rmi_driver.c                    | 124 +++++++++++ 
>> ++++++----
>>   drivers/input/rmi4/rmi_driver.h                    |  10 ++
>>   drivers/input/rmi4/rmi_f01.c                       |  14 +++
>>   drivers/input/rmi4/rmi_f12.c                       | 117 +++++++++++ 
>> +++-----
>>   drivers/input/rmi4/rmi_f55.c                       |   5 +
>>   include/linux/rmi.h                                |   3 +
>>   7 files changed, 234 insertions(+), 50 deletions(-)
>> ---
>> base-commit: f0a16f5363325cc8d9382471cdc7b654c53254c9
>> change-id: 20250308-synaptics-rmi4-c832b2f73ceb
>>
>> Best regards,
> 

-- 
David Heidelberg

Re: [PATCH v5 0/7] Input: synaptics-rmi4 - add quirks for third party touchscreen controllers
Posted by David Heidelberg 7 months ago
Hello Dmitry,

I hope you're doing well. Just a gentle reminder about the patch series 
I sent earlier. Please let me know if there's anything I can do to help 
move it forward.

Thank you for your time and consideration.

Best regards,
David

On 11/06/2025 10:10, David Heidelberg wrote:
> Hello Dmitry,
> 
> is there anything else I should adjust to get these fixes merged?
> 
> Thank you
> David
> 
> On 03/05/2025 16:02, David Heidelberg wrote:
>> Kind ping on the series.
>>
>> When the series is considered solid, it will improve Linux usability 
>> on lower-quality touchscreen replacements (including those from other 
>> vendors and models) outside of our Snapdragon 845 downstream fork.
>>
>> Thank you
>> David
>>
>> On 10/04/2025 16:28, David Heidelberg via B4 Relay wrote:
>>> 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.
>>>
>>> ---
>>> Changes in v5:
>>> - Removed -i2c suffix from rmi4-s3706b-i2c (Krzysztof).
>>> - Link to v4: https://lore.kernel.org/r/20250402-synaptics-rmi4- 
>>> v4-0-1bb95959e564@ixit.cz
>>>
>>> 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 
>>> <baclofen@tuta.io>) to
>>>    Kaustabh Chakraborty <kauschluss@disroot.org>.
>>>    Verified ownership through the sdm845 chatroom on Matrix.
>>> - Link to v3: https://lore.kernel.org/r/20250308-synaptics-rmi4- 
>>> v3-0-215d3e7289a2@ixit.cz
>>>
>>> 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/20230929-caleb-rmi4-quirks- 
>>> v2-0-b227ac498d88@linaro.org
>>>
>>> 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/20230929-caleb-rmi4-quirks- 
>>> v1-0-cc3c703f022d@linaro.org
>>>
>>> ---
>>> Caleb Connolly (1):
>>>        Input: synaptics-rmi4 - handle duplicate/unknown PDT entries
>>>
>>> David Heidelberg (1):
>>>        dt-bindings: input: syna,rmi4: Document syna,rmi4-s3706b
>>>
>>> Kaustabh Chakraborty (5):
>>>        Input: synaptics-rmi4 - f12: use hardcoded values for 
>>> aftermarket touch ICs
>>>        Input: synaptics-rmi4 - f55: handle zero electrode count
>>>        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
>>>
>>>   .../devicetree/bindings/input/syna,rmi4.yaml       |  11 +-
>>>   drivers/input/rmi4/rmi_driver.c                    | 124 ++++++++++ 
>>> + ++++++----
>>>   drivers/input/rmi4/rmi_driver.h                    |  10 ++
>>>   drivers/input/rmi4/rmi_f01.c                       |  14 +++
>>>   drivers/input/rmi4/rmi_f12.c                       | 117 ++++++++++ 
>>> + +++-----
>>>   drivers/input/rmi4/rmi_f55.c                       |   5 +
>>>   include/linux/rmi.h                                |   3 +
>>>   7 files changed, 234 insertions(+), 50 deletions(-)
>>> ---
>>> base-commit: f0a16f5363325cc8d9382471cdc7b654c53254c9
>>> change-id: 20250308-synaptics-rmi4-c832b2f73ceb
>>>
>>> Best regards,
>>
> 

-- 
David Heidelberg