aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.10/950-0380-Input-edt-ft5x06-Poll-the-device-if-no-interrupt-is-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-5.10/950-0380-Input-edt-ft5x06-Poll-the-device-if-no-interrupt-is-.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.10/950-0380-Input-edt-ft5x06-Poll-the-device-if-no-interrupt-is-.patch98
1 files changed, 0 insertions, 98 deletions
diff --git a/target/linux/bcm27xx/patches-5.10/950-0380-Input-edt-ft5x06-Poll-the-device-if-no-interrupt-is-.patch b/target/linux/bcm27xx/patches-5.10/950-0380-Input-edt-ft5x06-Poll-the-device-if-no-interrupt-is-.patch
deleted file mode 100644
index 0b99d4bf9e..0000000000
--- a/target/linux/bcm27xx/patches-5.10/950-0380-Input-edt-ft5x06-Poll-the-device-if-no-interrupt-is-.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-From d7763e8128b7697f5521e08f097f455d20aab5be Mon Sep 17 00:00:00 2001
-From: Dave Stevenson <dave.stevenson@raspberrypi.com>
-Date: Fri, 6 Nov 2020 18:45:10 +0000
-Subject: [PATCH] Input: edt-ft5x06: Poll the device if no interrupt is
- configured.
-
-Not all systems have the interrupt line wired up, so switch to
-polling the touchscreen off a timer if no interrupt line is
-configured.
-
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
----
- drivers/input/touchscreen/edt-ft5x06.c | 51 +++++++++++++++++++++-----
- 1 file changed, 41 insertions(+), 10 deletions(-)
-
---- a/drivers/input/touchscreen/edt-ft5x06.c
-+++ b/drivers/input/touchscreen/edt-ft5x06.c
-@@ -69,6 +69,8 @@
- #define EDT_RAW_DATA_RETRIES 100
- #define EDT_RAW_DATA_DELAY 1000 /* usec */
-
-+#define POLL_INTERVAL_MS 17 /* 17ms = 60fps */
-+
- enum edt_pmode {
- EDT_PMODE_NOT_SUPPORTED,
- EDT_PMODE_HIBERNATE,
-@@ -126,6 +128,9 @@ struct edt_ft5x06_ts_data {
-
- struct edt_reg_addr reg_addr;
- enum edt_ver version;
-+
-+ struct timer_list timer;
-+ struct work_struct work_i2c_poll;
- };
-
- struct edt_i2c_chip_data {
-@@ -275,6 +280,22 @@ out:
- return IRQ_HANDLED;
- }
-
-+static void edt_ft5x06_ts_irq_poll_timer(struct timer_list *t)
-+{
-+ struct edt_ft5x06_ts_data *tsdata = from_timer(tsdata, t, timer);
-+
-+ schedule_work(&tsdata->work_i2c_poll);
-+ mod_timer(&tsdata->timer, jiffies + msecs_to_jiffies(POLL_INTERVAL_MS));
-+}
-+
-+static void edt_ft5x06_ts_work_i2c_poll(struct work_struct *work)
-+{
-+ struct edt_ft5x06_ts_data *tsdata = container_of(work,
-+ struct edt_ft5x06_ts_data, work_i2c_poll);
-+
-+ edt_ft5x06_ts_isr(0, tsdata);
-+}
-+
- static int edt_ft5x06_register_write(struct edt_ft5x06_ts_data *tsdata,
- u8 addr, u8 value)
- {
-@@ -1221,17 +1242,27 @@ static int edt_ft5x06_ts_probe(struct i2
-
- i2c_set_clientdata(client, tsdata);
-
-- irq_flags = irq_get_trigger_type(client->irq);
-- if (irq_flags == IRQF_TRIGGER_NONE)
-- irq_flags = IRQF_TRIGGER_FALLING;
-- irq_flags |= IRQF_ONESHOT;
--
-- error = devm_request_threaded_irq(&client->dev, client->irq,
-- NULL, edt_ft5x06_ts_isr, irq_flags,
-- client->name, tsdata);
-- if (error) {
-- dev_err(&client->dev, "Unable to request touchscreen IRQ.\n");
-- return error;
-+ if (client->irq) {
-+ irq_flags = irq_get_trigger_type(client->irq);
-+ if (irq_flags == IRQF_TRIGGER_NONE)
-+ irq_flags = IRQF_TRIGGER_FALLING;
-+ irq_flags |= IRQF_ONESHOT;
-+
-+ error = devm_request_threaded_irq(&client->dev, client->irq,
-+ NULL, edt_ft5x06_ts_isr,
-+ irq_flags, client->name,
-+ tsdata);
-+ if (error) {
-+ dev_err(&client->dev, "Unable to request touchscreen IRQ.\n");
-+ return error;
-+ }
-+ } else {
-+ INIT_WORK(&tsdata->work_i2c_poll,
-+ edt_ft5x06_ts_work_i2c_poll);
-+ timer_setup(&tsdata->timer, edt_ft5x06_ts_irq_poll_timer, 0);
-+ tsdata->timer.expires = jiffies +
-+ msecs_to_jiffies(POLL_INTERVAL_MS);
-+ add_timer(&tsdata->timer);
- }
-
- error = devm_device_add_group(&client->dev, &edt_ft5x06_attr_group);