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