From 9436e90aa0ebafb1c706006c9b778fbd13a25112 Mon Sep 17 00:00:00 2001
From: yuri <yuri.mazzuoli@seco.com>
Date: Tue, 2 May 2023 17:30:55 +0200
Subject: [PATCH] [DRIVER][TOUCH] fix Cypress TrueTouch(TM) v5 driver
 compatibility with kernel 5.10 - replace deprecated function setup_timer with
 timer_setup - use of_get_named_gpio when reading devicetree gpio settings

---
 drivers/input/touchscreen/cyttsp5/cyttsp5_core.c |  9 +++++----
 .../input/touchscreen/cyttsp5/cyttsp5_devtree.c  | 16 ++++++++++------
 2 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_core.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_core.c
index 70ed7fabde02d..c681f5d9a45e4 100644
--- a/drivers/input/touchscreen/cyttsp5/cyttsp5_core.c
+++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_core.c
@@ -3549,9 +3549,11 @@ queue_startup:
 	cyttsp5_start_wd_timer(cd);
 }
 
-static void cyttsp5_watchdog_timer(unsigned long handle)
+static void cyttsp5_watchdog_timer(struct timer_list *t)
 {
-	struct cyttsp5_core_data *cd = (struct cyttsp5_core_data *)handle;
+	struct cyttsp5_core_data *cd;
+
+	cd = from_timer(cd, t, watchdog_timer);
 
 	if (!cd)
 		return;
@@ -5584,8 +5586,7 @@ int cyttsp5_probe(const struct cyttsp5_bus_ops *ops, struct device *dev,
 	}
 
 	/* Setup watchdog timer */
-	setup_timer(&cd->watchdog_timer, cyttsp5_watchdog_timer,
-			(unsigned long)cd);
+	timer_setup(&cd->watchdog_timer, cyttsp5_watchdog_timer,0);
 
 	rc = cyttsp5_setup_irq_gpio(cd);
 	if (rc < 0) {
diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_devtree.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_devtree.c
index c51911af6232b..691f2a823c1aa 100644
--- a/drivers/input/touchscreen/cyttsp5/cyttsp5_devtree.c
+++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_devtree.c
@@ -29,6 +29,7 @@
 #include <linux/err.h>
 #include <linux/of_device.h>
 #include <linux/slab.h>
+#include <linux/of_gpio.h>
 
 /* cyttsp */
 #include "cyttsp5_regs.h"
@@ -579,10 +580,11 @@ static struct cyttsp5_core_platform_data *create_and_get_core_pdata(
 	}
 
 	/* Required fields */
-	rc = of_property_read_u32(core_node, "cy,irq_gpio", &value);
-	if (rc)
+	pdata->irq_gpio = of_get_named_gpio(core_node, "cy,irq_gpio", 0);
+	if (!pdata->irq_gpio){
+		pr_err("No valid irq gpio");
 		goto fail_free;
-	pdata->irq_gpio = value;
+	}
 
 	rc = of_property_read_u32(core_node, "cy,hid_desc_register", &value);
 	if (rc)
@@ -593,9 +595,11 @@ static struct cyttsp5_core_platform_data *create_and_get_core_pdata(
 	/* rst_gpio is optional since a platform may use
 	 * power cycling instead of using the XRES pin
 	 */
-	rc = of_property_read_u32(core_node, "cy,rst_gpio", &value);
-	if (!rc)
-		pdata->rst_gpio = value;
+	pdata->rst_gpio = of_get_named_gpio(core_node, "cy,irq_gpio", 0);
+	if (!pdata->rst_gpio || !gpio_is_valid(pdata->rst_gpio) ){
+		pr_info("No valid irq gpio");
+		pdata->rst_gpio = NULL;
+	}
 
 	rc = of_property_read_u32(core_node, "cy,level_irq_udelay", &value);
 	if (!rc)
-- 
GitLab