]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Input: edt-ft5x06 - do not hardcode interrupt trigger type
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Sat, 12 Sep 2015 17:11:09 +0000 (10:11 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Mon, 28 Sep 2015 00:34:00 +0000 (17:34 -0700)
Instead of hardcoding IRQ trigger type to IRQF_TRIGGER_FALLING, let's
respect settings specified in device tree. To be compatible with older
DTSes, if trigger type is not set up in DTS we'll set it to default
(falling edge).

Tested-by: Franklin S Cooper Jr <fcooper@ti.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt
drivers/input/touchscreen/edt-ft5x06.c

index 9330d4d34cb92670d8a8c5a9c0db294dcc64add5..bedd7ddc56aabee435bcaebb3bb67d72289d14fc 100644 (file)
@@ -49,7 +49,7 @@ Example:
                pinctrl-names = "default";
                pinctrl-0 = <&edt_ft5x06_pins>;
                interrupt-parent = <&gpio2>;
-               interrupts = <5 0>;
+               interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
                reset-gpios = <&gpio2 6 GPIO_ACTIVE_LOW>;
                wake-gpios = <&gpio4 9 GPIO_ACTIVE_HIGH>;
        };
index ef8a7cddb017fab160cdd7b133a54a95611dc878..7239c314c9e9bf398620ee98a11461b9050987ea 100644 (file)
@@ -27,6 +27,7 @@
 
 #include <linux/module.h>
 #include <linux/ratelimit.h>
+#include <linux/irq.h>
 #include <linux/interrupt.h>
 #include <linux/input.h>
 #include <linux/i2c.h>
@@ -874,6 +875,7 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client,
 {
        struct edt_ft5x06_ts_data *tsdata;
        struct input_dev *input;
+       unsigned long irq_flags;
        int error;
        char fw_version[EDT_NAME_LEN];
 
@@ -959,9 +961,13 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client,
        input_set_drvdata(input, tsdata);
        i2c_set_clientdata(client, tsdata);
 
-       error = devm_request_threaded_irq(&client->dev, client->irq, NULL,
-                                       edt_ft5x06_ts_isr,
-                                       IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
+       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");