]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
Input: tsc2007 - make interrupt optional
authorSvyatoslav Ryhel <clamor95@gmail.com>
Wed, 3 Sep 2025 13:53:24 +0000 (06:53 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 3 Sep 2025 13:59:13 +0000 (06:59 -0700)
In case tsc2007 is used as an ADC sensor there will be no interrupt
provided at all, so set up an interrupt only if one is present.

Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
Link: https://lore.kernel.org/r/20250824091927.105121-3-clamor95@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/touchscreen/tsc2007_core.c

index 9fda83acccb192f97f0a543d5239698539be9f2e..05e00a084c88dec11b1d4758c3428811a55d46ba 100644 (file)
@@ -177,7 +177,8 @@ static void tsc2007_stop(struct tsc2007 *ts)
        mb();
        wake_up(&ts->wait);
 
-       disable_irq(ts->irq);
+       if (ts->irq)
+               disable_irq(ts->irq);
 }
 
 static int tsc2007_open(struct input_dev *input_dev)
@@ -188,7 +189,8 @@ static int tsc2007_open(struct input_dev *input_dev)
        ts->stopped = false;
        mb();
 
-       enable_irq(ts->irq);
+       if (ts->irq)
+               enable_irq(ts->irq);
 
        /* Prepare for touch readings - power down ADC and enable PENIRQ */
        err = tsc2007_xfer(ts, PWRDOWN);
@@ -361,17 +363,19 @@ static int tsc2007_probe(struct i2c_client *client)
                        pdata->init_platform_hw();
        }
 
-       err = devm_request_threaded_irq(&client->dev, ts->irq,
-                                       NULL, tsc2007_soft_irq,
-                                       IRQF_ONESHOT,
-                                       client->dev.driver->name, ts);
-       if (err) {
-               dev_err(&client->dev, "Failed to request irq %d: %d\n",
-                       ts->irq, err);
-               return err;
-       }
+       if (ts->irq) {
+               err = devm_request_threaded_irq(&client->dev, ts->irq,
+                                               NULL, tsc2007_soft_irq,
+                                               IRQF_ONESHOT,
+                                               client->dev.driver->name, ts);
+               if (err) {
+                       dev_err(&client->dev, "Failed to request irq %d: %d\n",
+                               ts->irq, err);
+                       return err;
+               }
 
-       tsc2007_stop(ts);
+               tsc2007_stop(ts);
+       }
 
        /* power down the chip (TSC2007_SETUP does not ACK on I2C) */
        err = tsc2007_xfer(ts, PWRDOWN);