From: AngeloGioacchino Del Regno <hidden> Date: 2021-01-14 18:06:00
This patch series converts the i2c-qup bindings to YAML and then
adds support for noise rejection, which is needed for some noisy
hardware, like the touchscreen on the F(x)Tec Pro1.
After adding noise rejection, the touchscreen stopped showing
ghost touch issues and lockups.
Tested on F(x)Tec Pro1 (MSM8998).
Changes in v3, as per Bjorn's review:
- Moved bitfield.h to maintain sort order
- Removed useless variable initialization
- Removed linebreak
Changes in v2:
- Fixed ARM (32) build error (added bitfield.h inclusion)
AngeloGioacchino Del Regno (3):
dt-bindings: i2c: qcom,i2c-qup: Convert txt to YAML schema
i2c: qup: Introduce SCL/SDA noise rejection
dt-bindings: i2c: qcom,i2c-qup: Document noise rejection properties
.../devicetree/bindings/i2c/qcom,i2c-qup.txt | 40 -------
.../devicetree/bindings/i2c/qcom,i2c-qup.yaml | 101 ++++++++++++++++++
drivers/i2c/busses/i2c-qup.c | 15 +++
3 files changed, 116 insertions(+), 40 deletions(-)
delete mode 100644 Documentation/devicetree/bindings/i2c/qcom,i2c-qup.txt
create mode 100644 Documentation/devicetree/bindings/i2c/qcom,i2c-qup.yaml
--
2.29.2
From: AngeloGioacchino Del Regno <hidden> Date: 2021-01-14 18:05:26
Document the new noise rejection properties "qcom,noise-reject-sda"
and "qcom,noise-reject-scl".
Signed-off-by: AngeloGioacchino Del Regno <redacted>
---
.../devicetree/bindings/i2c/qcom,i2c-qup.yaml | 14 ++++++++++++++
1 file changed, 14 insertions(+)
@@ -58,6 +58,20 @@ properties:'#size-cells':const:0+qcom,noise-reject-sda:+$ref:/schemas/types.yaml#/definitions/uint32+description:Noise rejection level for the SDA line.+minimum:0+maximum:3+default:0++qcom,noise-reject-scl:+$ref:/schemas/types.yaml#/definitions/uint32+description:Noise rejection level for the SCL line.+minimum:0+maximum:3+default:0+required:-compatible-clocks
From: Rob Herring <robh@kernel.org> Date: 2021-01-25 22:19:31
On Thu, 14 Jan 2021 19:04:15 +0100, AngeloGioacchino Del Regno wrote:
Document the new noise rejection properties "qcom,noise-reject-sda"
and "qcom,noise-reject-scl".
Signed-off-by: AngeloGioacchino Del Regno <redacted>
---
.../devicetree/bindings/i2c/qcom,i2c-qup.yaml | 14 ++++++++++++++
1 file changed, 14 insertions(+)
What does this u32 describe? I wonder if we can introduce a generic
property instead of a vendor-specific one.
Describes a "noise rejection level"... zero is disabled, 1-2-3 are
min-med-high. That's what the hardware accepts.
Also, there's no "real" documentation on this, so it wasn't possible
to map it to any real measurement unit as well...
@@ -1,40 +0,0 @@-Qualcomm Universal Peripheral (QUP) I2C controller--Required properties:- - compatible: Should be:- * "qcom,i2c-qup-v1.1.1" for 8660, 8960 and 8064.- * "qcom,i2c-qup-v2.1.1" for 8974 v1.- * "qcom,i2c-qup-v2.2.1" for 8974 v2 and later.- - reg: Should contain QUP register address and length.- - interrupts: Should contain I2C interrupt.-- - clocks: A list of phandles + clock-specifiers, one for each entry in- clock-names.- - clock-names: Should contain:- * "core" for the core clock- * "iface" for the AHB clock-- - #address-cells: Should be <1> Address cells for i2c device address- - #size-cells: Should be <0> as i2c addresses have no size component--Optional properties:- - clock-frequency: Should specify the desired i2c bus clock frequency in Hz,- defaults to 100kHz if omitted.--Child nodes should conform to i2c bus binding.--Example:-- i2c@f9924000 {- compatible = "qcom,i2c-qup-v2.2.1";- reg = <0xf9924000 0x1000>;- interrupts = <0 96 0>;-- clocks = <&gcc GCC_BLSP1_QUP2_I2C_APPS_CLK>, <&gcc GCC_BLSP1_AHB_CLK>;- clock-names = "core", "iface";-- clock-frequency = <355000>;-- #address-cells = <1>;- #size-cells = <0>;- };
@@ -1,40 +0,0 @@-Qualcomm Universal Peripheral (QUP) I2C controller--Required properties:- - compatible: Should be:- * "qcom,i2c-qup-v1.1.1" for 8660, 8960 and 8064.- * "qcom,i2c-qup-v2.1.1" for 8974 v1.- * "qcom,i2c-qup-v2.2.1" for 8974 v2 and later.- - reg: Should contain QUP register address and length.- - interrupts: Should contain I2C interrupt.-- - clocks: A list of phandles + clock-specifiers, one for each entry in- clock-names.- - clock-names: Should contain:- * "core" for the core clock- * "iface" for the AHB clock-- - #address-cells: Should be <1> Address cells for i2c device address- - #size-cells: Should be <0> as i2c addresses have no size component--Optional properties:- - clock-frequency: Should specify the desired i2c bus clock frequency in Hz,- defaults to 100kHz if omitted.--Child nodes should conform to i2c bus binding.--Example:-- i2c@f9924000 {- compatible = "qcom,i2c-qup-v2.2.1";- reg = <0xf9924000 0x1000>;- interrupts = <0 96 0>;-- clocks = <&gcc GCC_BLSP1_QUP2_I2C_APPS_CLK>, <&gcc GCC_BLSP1_AHB_CLK>;- clock-names = "core", "iface";-- clock-frequency = <355000>;-- #address-cells = <1>;- #size-cells = <0>;- };
From: AngeloGioacchino Del Regno <hidden> Date: 2021-01-14 18:05:28
Some I2C devices may be glitchy due to electrical noise coming
from the device itself or because of possible board design issues.
To overcome this issue, the QUP's I2C in Qualcomm SoCs supports
a noise rejection setting for both SCL and SDA lines.
Introduce a setting for noise rejection through device properties,
"qcom,noise-reject-sda" and "qcom,noise-reject-scl", which will
be used to set the level of noise rejection sensitivity.
If the properties are not specified, noise rejection will not be
enabled.
Signed-off-by: AngeloGioacchino Del Regno <redacted>
---
drivers/i2c/busses/i2c-qup.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)