2022-03-23 23:35:58

by Alistair Francis

[permalink] [raw]
Subject: [PATCH v7 0/4] Add support for the Cypress cyttsp5

This patch series builds on top of [1] and adds support for the cyttsp5

touchscreen controller for the reMarkable 2.



I first tried to add an I2C HID device. Although the cyttsp5 has some HID

looking aspects it is not HID compatible. Just in trying to probe the device

I found:

- The HID descriptor has extra padding

- The HID descriptor sets the high bytes of the descriptor length

- The HID descriptor has extra unrecognised tags

- The HID reset command doesn't appear to work



I don't think there is a way to use the I2C HID framework with the cyttsp5.

For anyone interested you can see the work here [2]. In that branch though I

can only obtain a HID descriptor, nothing else works without more core

changes.



So instead I rebased the series from [1]. Converted to the new yaml DTS

documentation, added regulator support and fixed a x/y miscalculation bug.



1: https://lwn.net/ml/linux-kernel/[email protected]/

2: https://github.com/alistair23/linux/commits/rM2-mainline-cyttsp5-hid



v7:

- Fix device tree warnings

v6:

- Use reg for the button properties

v5:

- Address review comments from v4



Alistair Francis (4):

Input: Add driver for Cypress Generation 5 touchscreen

dt-bindings: input: Add Cypress TT2100 touchscreen controller

ARM: imx_v6_v7_defconfig: Enable the cyttsp5 touchscreen

ARM: dts: imx7d-remarkable2: Enable the cyttsp5



.../input/touchscreen/cypress,tt21000.yaml | 101 ++

arch/arm/boot/dts/imx7d-remarkable2.dts | 100 ++

arch/arm/configs/imx_v6_v7_defconfig | 1 +

drivers/input/touchscreen/Kconfig | 16 +

drivers/input/touchscreen/Makefile | 1 +

drivers/input/touchscreen/cyttsp5.c | 902 ++++++++++++++++++

6 files changed, 1121 insertions(+)

create mode 100644 Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml

create mode 100644 drivers/input/touchscreen/cyttsp5.c



--

2.35.1




2022-03-25 07:35:24

by Alistair Francis

[permalink] [raw]
Subject: [PATCH v7 4/4] ARM: dts: imx7d-remarkable2: Enable the cyttsp5

Add support for the cyttsp5 touchscreen controller for the reMarkable 2.

Signed-off-by: Alistair Francis <[email protected]>
---
arch/arm/boot/dts/imx7d-remarkable2.dts | 100 ++++++++++++++++++++++++
1 file changed, 100 insertions(+)

diff --git a/arch/arm/boot/dts/imx7d-remarkable2.dts b/arch/arm/boot/dts/imx7d-remarkable2.dts
index 03a4029e1e57..b0c5bea32a09 100644
--- a/arch/arm/boot/dts/imx7d-remarkable2.dts
+++ b/arch/arm/boot/dts/imx7d-remarkable2.dts
@@ -8,6 +8,7 @@
/dts-v1/;

#include "imx7d.dtsi"
+#include <dt-bindings/input/linux-event-codes.h>

/ {
model = "reMarkable 2.0";
@@ -78,6 +79,18 @@ reg_sdoe: regulator-sdoe {
enable-active-high;
};

+ reg_touch: regulator-touch {
+ compatible = "regulator-fixed";
+ regulator-name = "VDD_3V3_TOUCH";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ pinctrl-names = "default", "sleep";
+ pinctrl-0 = <&pinctrl_touch_reg>;
+ pinctrl-1 = <&pinctrl_touch_reg>;
+ gpio = <&gpio1 11 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
wifi_pwrseq: wifi_pwrseq {
compatible = "mmc-pwrseq-simple";
pinctrl-names = "default";
@@ -125,6 +138,70 @@ wacom_digitizer: digitizer@9 {
};
};

+&i2c3 {
+ clock-frequency = <100000>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_i2c3>;
+ status = "okay";
+
+ tsc@24 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ compatible = "cypress,tt21000";
+ reg = <0x24>;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_touch>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <14 IRQ_TYPE_EDGE_FALLING>;
+ reset-gpios = <&gpio1 13 GPIO_ACTIVE_LOW>;
+ vdd-supply = <&reg_touch>;
+ touchscreen-size-x = <880>;
+ touchscreen-size-y = <1280>;
+
+ button@0 {
+ reg = <0>;
+ linux,keycodes = <KEY_HOMEPAGE>;
+ };
+
+ button@1 {
+ reg = <1>;
+ linux,keycodes = <KEY_MENU>;
+ };
+
+ button@2 {
+ reg = <2>;
+ linux,keycodes = <KEY_BACK>;
+ };
+
+ button@3 {
+ reg = <3>;
+ linux,keycodes = <KEY_SEARCH>;
+ };
+
+ button@4 {
+ reg = <4>;
+ linux,keycodes = <KEY_VOLUMEDOWN>;
+ };
+
+ button@5 {
+ reg = <5>;
+ linux,keycodes = <KEY_VOLUMEUP>;
+ };
+
+ button@6 {
+ reg = <6>;
+ linux,keycodes = <KEY_CAMERA>;
+ };
+
+ button@7 {
+ reg = <7>;
+ linux,keycodes = <KEY_POWER>;
+ };
+ };
+};
+
&i2c4 {
clock-frequency = <100000>;
pinctrl-names = "default", "sleep";
@@ -266,6 +343,15 @@ MX7D_PAD_ENET1_RGMII_TXC__GPIO7_IO11 0x00000014
>;
};

+ pinctrl_touch: touchgrp {
+ fsl,pins = <
+ /* CYTTSP interrupt */
+ MX7D_PAD_GPIO1_IO14__GPIO1_IO14 0x54
+ /* CYTTSP reset */
+ MX7D_PAD_GPIO1_IO13__GPIO1_IO13 0x04
+ >;
+ };
+
pinctrl_i2c1: i2c1grp {
fsl,pins = <
MX7D_PAD_I2C1_SDA__I2C1_SDA 0x4000007f
@@ -273,6 +359,13 @@ MX7D_PAD_I2C1_SCL__I2C1_SCL 0x4000007f
>;
};

+ pinctrl_i2c3: i2c3grp {
+ fsl,pins = <
+ MX7D_PAD_I2C3_SDA__I2C3_SDA 0x4000007f
+ MX7D_PAD_I2C3_SCL__I2C3_SCL 0x4000007f
+ >;
+ };
+
pinctrl_i2c4: i2c4grp {
fsl,pins = <
MX7D_PAD_I2C4_SDA__I2C4_SDA 0x4000007f
@@ -320,6 +413,13 @@ MX7D_PAD_LCD_DATA22__GPIO3_IO27 0x74
>;
};

+ pinctrl_touch_reg: touchreggrp {
+ fsl,pins = <
+ /* TOUCH_PWR_EN */
+ MX7D_PAD_GPIO1_IO11__GPIO1_IO11 0x14
+ >;
+ };
+
pinctrl_uart1: uart1grp {
fsl,pins = <
MX7D_PAD_UART1_TX_DATA__UART1_DCE_TX 0x79
--
2.35.1

2022-03-25 19:43:21

by Alistair Francis

[permalink] [raw]
Subject: [PATCH v7 2/4] dt-bindings: input: Add Cypress TT2100 touchscreen controller

Add the Cypress TrueTouch Generation 5 touchscreen device tree bindings
documentation. It can use I2C or SPI bus.
This touchscreen can handle some defined zone that are designed and
sent as button. To be able to customize the keycode sent, the
"linux,code" property in a "button" sub-node can be used.

Signed-off-by: Alistair Francis <[email protected]>
Reviewed-by: Linus Walleij <[email protected]>
---
.../input/touchscreen/cypress,tt21000.yaml | 101 ++++++++++++++++++
1 file changed, 101 insertions(+)
create mode 100644 Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml

diff --git a/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml b/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml
new file mode 100644
index 000000000000..3fc4b7011040
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml
@@ -0,0 +1,101 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/input/touchscreen/cypress,tt21000.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Cypress TT2100 touchscreen controller
+
+description: The Cypress TT2100 series (also known as "CYTTSP5" after
+ the marketing name Cypress TrueTouch Standard Product series 5).
+
+maintainers:
+ - Alistair Francis <[email protected]>
+
+allOf:
+ - $ref: touchscreen.yaml#
+
+properties:
+ compatible:
+ const: cypress,tt21000
+
+ reg:
+ maxItems: 1
+
+ interrupts:
+ maxItems: 1
+
+ vdd-supply:
+ description: Regulator for voltage.
+
+ reset-gpios:
+ maxItems: 1
+
+ linux,keycodes:
+ $ref: /schemas/types.yaml#/definitions/uint32
+ description: EV_ABS specific event code generated by the axis.
+
+patternProperties:
+ "^button@[0-9]+$":
+ type: object
+ properties:
+ reg:
+ maxItems: 1
+ linux,keycodes:
+ $ref: /schemas/types.yaml#/definitions/uint32
+ description: Keycode to emit
+
+ required:
+ - reg
+ - linux,keycodes
+
+ additionalProperties: false
+
+required:
+ - compatible
+ - reg
+ - interrupts
+ - vdd-supply
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/irq.h>
+ #include <dt-bindings/gpio/gpio.h>
+ #include <dt-bindings/input/linux-event-codes.h>
+
+ i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ touchscreen@24 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ compatible = "cypress,tt21000";
+ reg = <0x24>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&tp_reset_ds203>;
+ interrupt-parent = <&pio>;
+ interrupts = <1 5 IRQ_TYPE_LEVEL_LOW>;
+ reset-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>;
+ vdd-supply = <&reg_touch>;
+
+ button@0 {
+ reg = <0>;
+ linux,keycodes = <KEY_HOMEPAGE>;
+ };
+
+ button@1 {
+ reg = <1>;
+ linux,keycodes = <KEY_MENU>;
+ };
+
+ button@2 {
+ reg = <2>;
+ linux,keycodes = <KEY_BACK>;
+ };
+ };
+ };
+...
--
2.35.1

2022-03-30 12:37:45

by Rob Herring

[permalink] [raw]
Subject: Re: [PATCH v7 2/4] dt-bindings: input: Add Cypress TT2100 touchscreen controller

On Wed, 23 Mar 2022 22:00:19 +1000, Alistair Francis wrote:
> Add the Cypress TrueTouch Generation 5 touchscreen device tree bindings
> documentation. It can use I2C or SPI bus.
> This touchscreen can handle some defined zone that are designed and
> sent as button. To be able to customize the keycode sent, the
> "linux,code" property in a "button" sub-node can be used.
>
> Signed-off-by: Alistair Francis <[email protected]>
> Reviewed-by: Linus Walleij <[email protected]>
> ---
> .../input/touchscreen/cypress,tt21000.yaml | 101 ++++++++++++++++++
> 1 file changed, 101 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml
>

Reviewed-by: Rob Herring <[email protected]>

2022-04-22 20:57:24

by Alistair Francis

[permalink] [raw]
Subject: Re: [PATCH v7 0/4] Add support for the Cypress cyttsp5

On Wed, Mar 23, 2022 at 10:00 PM Alistair Francis
<[email protected]> wrote:
>
> This patch series builds on top of [1] and adds support for the cyttsp5
> touchscreen controller for the reMarkable 2.
>
> I first tried to add an I2C HID device. Although the cyttsp5 has some HID
> looking aspects it is not HID compatible. Just in trying to probe the device
> I found:
> - The HID descriptor has extra padding
> - The HID descriptor sets the high bytes of the descriptor length
> - The HID descriptor has extra unrecognised tags
> - The HID reset command doesn't appear to work
>
> I don't think there is a way to use the I2C HID framework with the cyttsp5.
> For anyone interested you can see the work here [2]. In that branch though I
> can only obtain a HID descriptor, nothing else works without more core
> changes.
>
> So instead I rebased the series from [1]. Converted to the new yaml DTS
> documentation, added regulator support and fixed a x/y miscalculation bug.

The DT bindings have been reviewed, any comments on the driver
implementation? It has been tested on a few different devices

Alistair

>
> 1: https://lwn.net/ml/linux-kernel/[email protected]/
> 2: https://github.com/alistair23/linux/commits/rM2-mainline-cyttsp5-hid
>
> v7:
> - Fix device tree warnings
> v6:
> - Use reg for the button properties
> v5:
> - Address review comments from v4
>
> Alistair Francis (4):
> Input: Add driver for Cypress Generation 5 touchscreen
> dt-bindings: input: Add Cypress TT2100 touchscreen controller
> ARM: imx_v6_v7_defconfig: Enable the cyttsp5 touchscreen
> ARM: dts: imx7d-remarkable2: Enable the cyttsp5
>
> .../input/touchscreen/cypress,tt21000.yaml | 101 ++
> arch/arm/boot/dts/imx7d-remarkable2.dts | 100 ++
> arch/arm/configs/imx_v6_v7_defconfig | 1 +
> drivers/input/touchscreen/Kconfig | 16 +
> drivers/input/touchscreen/Makefile | 1 +
> drivers/input/touchscreen/cyttsp5.c | 902 ++++++++++++++++++
> 6 files changed, 1121 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml
> create mode 100644 drivers/input/touchscreen/cyttsp5.c
>
> --
> 2.35.1
>

2022-05-24 13:51:35

by Alistair Francis

[permalink] [raw]
Subject: Re: [PATCH v7 0/4] Add support for the Cypress cyttsp5

On Wed, Apr 20, 2022 at 10:25 PM Alistair Francis <[email protected]> wrote:
>
> On Wed, Mar 23, 2022 at 10:00 PM Alistair Francis
> <[email protected]> wrote:
> >
> > This patch series builds on top of [1] and adds support for the cyttsp5
> > touchscreen controller for the reMarkable 2.
> >
> > I first tried to add an I2C HID device. Although the cyttsp5 has some HID
> > looking aspects it is not HID compatible. Just in trying to probe the device
> > I found:
> > - The HID descriptor has extra padding
> > - The HID descriptor sets the high bytes of the descriptor length
> > - The HID descriptor has extra unrecognised tags
> > - The HID reset command doesn't appear to work
> >
> > I don't think there is a way to use the I2C HID framework with the cyttsp5.
> > For anyone interested you can see the work here [2]. In that branch though I
> > can only obtain a HID descriptor, nothing else works without more core
> > changes.
> >
> > So instead I rebased the series from [1]. Converted to the new yaml DTS
> > documentation, added regulator support and fixed a x/y miscalculation bug.
>
> The DT bindings have been reviewed, any comments on the driver
> implementation? It has been tested on a few different devices

Any comments? It would be great to try and get this in 5.19

Alistair

>
> Alistair
>
> >
> > 1: https://lwn.net/ml/linux-kernel/[email protected]/
> > 2: https://github.com/alistair23/linux/commits/rM2-mainline-cyttsp5-hid
> >
> > v7:
> > - Fix device tree warnings
> > v6:
> > - Use reg for the button properties
> > v5:
> > - Address review comments from v4
> >
> > Alistair Francis (4):
> > Input: Add driver for Cypress Generation 5 touchscreen
> > dt-bindings: input: Add Cypress TT2100 touchscreen controller
> > ARM: imx_v6_v7_defconfig: Enable the cyttsp5 touchscreen
> > ARM: dts: imx7d-remarkable2: Enable the cyttsp5
> >
> > .../input/touchscreen/cypress,tt21000.yaml | 101 ++
> > arch/arm/boot/dts/imx7d-remarkable2.dts | 100 ++
> > arch/arm/configs/imx_v6_v7_defconfig | 1 +
> > drivers/input/touchscreen/Kconfig | 16 +
> > drivers/input/touchscreen/Makefile | 1 +
> > drivers/input/touchscreen/cyttsp5.c | 902 ++++++++++++++++++
> > 6 files changed, 1121 insertions(+)
> > create mode 100644 Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml
> > create mode 100644 drivers/input/touchscreen/cyttsp5.c
> >
> > --
> > 2.35.1
> >