2022-10-26 12:32:44

by Alistair Francis

[permalink] [raw]
Subject: [PATCH v10 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

v10:
- Fix device tree binding errors
- Add commit message about defcofig cahnges
v9:
- Fixup kernel robot failures
v8:
- Rebase and resend
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 TT21000 touchscreen controller
ARM: imx_v6_v7_defconfig: Enable the cyttsp5 touchscreen
ARM: dts: imx7d-remarkable2: Enable the cyttsp5

.../input/touchscreen/cypress,tt21000.yaml | 106 ++
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, 1126 insertions(+)
create mode 100644 Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml
create mode 100644 drivers/input/touchscreen/cyttsp5.c

--
2.37.3



2022-10-26 12:34:53

by Alistair Francis

[permalink] [raw]
Subject: [PATCH v10 2/4] dt-bindings: input: Add Cypress TT21000 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]>
Reviewed-by: Rob Herring <[email protected]>
---
.../input/touchscreen/cypress,tt21000.yaml | 106 ++++++++++++++++++
1 file changed, 106 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..1959ec394768
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml
@@ -0,0 +1,106 @@
+# 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 TT21000 touchscreen controller
+
+description: The Cypress TT21000 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
+
+ '#address-cells':
+ const: 1
+
+ '#size-cells':
+ const: 0
+
+ interrupts:
+ maxItems: 1
+
+ vdd-supply:
+ description: Regulator for voltage.
+
+ reset-gpios:
+ maxItems: 1
+
+ linux,keycodes:
+ description: EV_ABS specific event code generated by the axis.
+
+patternProperties:
+ "^button@[0-9]+$":
+ type: object
+ $ref: ../input.yaml#
+ properties:
+ reg:
+ maxItems: 1
+ linux,keycodes:
+ 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.37.3


2022-10-26 12:36:17

by Alistair Francis

[permalink] [raw]
Subject: [PATCH v10 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 a2a91bfdd98e..fea480af8e48 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";
@@ -47,6 +48,18 @@ reg_digitizer: regulator-digitizer {
startup-delay-us = <100000>; /* 100 ms */
};

+ 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";
@@ -84,6 +97,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>;
+ };
+ };
+};
+
&snvs_pwrkey {
status = "okay";
};
@@ -177,6 +254,15 @@ MX7D_PAD_SAI1_TX_BCLK__GPIO6_IO13 0x14
>;
};

+ 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
@@ -184,6 +270,20 @@ 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_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.37.3


2022-10-26 13:07:48

by Alistair Francis

[permalink] [raw]
Subject: [PATCH v10 3/4] ARM: imx_v6_v7_defconfig: Enable the cyttsp5 touchscreen

The imx6/7 based devices Remarkable 2, Kobo Clara HD, Kobo Libra H2O,
Tolino Shine 3, Tolino Vision 5 all contain a Cypress TT2100
touchscreen so enable the corresponding driver.

Signed-off-by: Alistair Francis <[email protected]>
---
arch/arm/configs/imx_v6_v7_defconfig | 1 +
1 file changed, 1 insertion(+)

diff --git a/arch/arm/configs/imx_v6_v7_defconfig b/arch/arm/configs/imx_v6_v7_defconfig
index 078d61b758a9..8665b192d83c 100644
--- a/arch/arm/configs/imx_v6_v7_defconfig
+++ b/arch/arm/configs/imx_v6_v7_defconfig
@@ -166,6 +166,7 @@ CONFIG_TOUCHSCREEN_ADS7846=y
CONFIG_TOUCHSCREEN_AD7879=y
CONFIG_TOUCHSCREEN_AD7879_I2C=y
CONFIG_TOUCHSCREEN_ATMEL_MXT=y
+CONFIG_TOUCHSCREEN_CYTTSP5=y
CONFIG_TOUCHSCREEN_DA9052=y
CONFIG_TOUCHSCREEN_EGALAX=y
CONFIG_TOUCHSCREEN_GOODIX=y
--
2.37.3


2022-11-01 00:05:36

by Dmitry Torokhov

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

On Wed, Oct 26, 2022 at 09:49:06PM +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]>
> Reviewed-by: Rob Herring <[email protected]>

Applied, thank you.

--
Dmitry

2022-11-01 13:21:28

by Rob Herring

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

On Mon, Oct 31, 2022 at 6:49 PM Dmitry Torokhov
<[email protected]> wrote:
>
> On Wed, Oct 26, 2022 at 09:49:06PM +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]>
> > Reviewed-by: Rob Herring <[email protected]>
>
> Applied, thank you.

It looks like you applied v8, not this version. linux-next now has a warning:

/builds/robherring/linux-dt/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.example.dtb:
touchscreen@24: Unevaluated properties are not allowed
('#address-cells', '#size-cells' were unexpected)
From schema:
/builds/robherring/linux-dt/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml

>
> --
> Dmitry

2022-11-01 15:36:00

by Dmitry Torokhov

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

On Tue, Nov 01, 2022 at 06:50:23AM -0500, Rob Herring wrote:
> On Mon, Oct 31, 2022 at 6:49 PM Dmitry Torokhov
> <[email protected]> wrote:
> >
> > On Wed, Oct 26, 2022 at 09:49:06PM +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]>
> > > Reviewed-by: Rob Herring <[email protected]>
> >
> > Applied, thank you.
>
> It looks like you applied v8, not this version. linux-next now has a warning:
>
> /builds/robherring/linux-dt/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.example.dtb:
> touchscreen@24: Unevaluated properties are not allowed
> ('#address-cells', '#size-cells' were unexpected)
> From schema:
> /builds/robherring/linux-dt/Documentation/devicetree/bindings/input/touchscreen/cypress,tt21000.yaml

Oops, should be fixed now.

--
Dmitry

2022-11-10 08:35:57

by Shawn Guo

[permalink] [raw]
Subject: Re: [PATCH v10 3/4] ARM: imx_v6_v7_defconfig: Enable the cyttsp5 touchscreen

On Wed, Oct 26, 2022 at 09:49:07PM +1000, Alistair Francis wrote:
> The imx6/7 based devices Remarkable 2, Kobo Clara HD, Kobo Libra H2O,
> Tolino Shine 3, Tolino Vision 5 all contain a Cypress TT2100
> touchscreen so enable the corresponding driver.
>
> Signed-off-by: Alistair Francis <[email protected]>

Applied, thanks!

2022-11-11 02:59:35

by Shawn Guo

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

On Wed, Oct 26, 2022 at 09:49:08PM +1000, Alistair Francis wrote:
> 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 a2a91bfdd98e..fea480af8e48 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";
> @@ -47,6 +48,18 @@ reg_digitizer: regulator-digitizer {
> startup-delay-us = <100000>; /* 100 ms */
> };
>
> + 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";
> @@ -84,6 +97,70 @@ wacom_digitizer: digitizer@9 {
> };
> };
>
> +&i2c3 {
> + clock-frequency = <100000>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_i2c3>;
> + status = "okay";
> +
> + tsc@24 {

`touchscreen` for node name?

> + #address-cells = <1>;
> + #size-cells = <0>;
> +

Unnecessary newline.

> + compatible = "cypress,tt21000";

We idiomatically begin property list with compatible.

> + reg = <0x24>;
> +

Unnecessary newline.

Shawn

> + 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>;
> + };
> + };
> +};
> +
> &snvs_pwrkey {
> status = "okay";
> };
> @@ -177,6 +254,15 @@ MX7D_PAD_SAI1_TX_BCLK__GPIO6_IO13 0x14
> >;
> };
>
> + 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
> @@ -184,6 +270,20 @@ 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_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.37.3
>