extcon: usbc-tusb320: Set interrupt polarity based on device-tree
authorLukas Funke <Lukas.Funke@weidmueller.com>
Wed, 22 Nov 2023 08:07:48 +0000 (09:07 +0100)
committerChanwoo Choi <cw00.choi@samsung.com>
Tue, 5 Dec 2023 01:09:19 +0000 (10:09 +0900)
Remove 'IRQF_TRIGGER_FALLING' request which is not allowed on
every interrupt controller (i.e. arm64 GIC). Replace flag by a
request that depends on the actual device-tree setting.

Link: https://lore.kernel.org/all/02a701da2717$48abf150$da03d3f0$@samsung.com/
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202311221355.yxYpTIw3-lkp@intel.com/
Signed-off-by: Lukas Funke <lukas.funke@weidmueller.com>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
drivers/extcon/extcon-usbc-tusb320.c

index 4d08c2123e5980e27cfe262607ee8320fb004242..2eab341de6b76f3b3ca3d89b008b8800d5260ae1 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/usb/typec.h>
 #include <linux/usb/typec_altmode.h>
 #include <linux/usb/role.h>
+#include <linux/irq.h>
 
 #define TUSB320_REG8                           0x8
 #define TUSB320_REG8_CURRENT_MODE_ADVERTISE    GENMASK(7, 6)
@@ -515,6 +516,8 @@ static int tusb320_probe(struct i2c_client *client)
        const void *match_data;
        unsigned int revision;
        int ret;
+       u32 irq_trigger_type = IRQF_TRIGGER_FALLING;
+       struct irq_data *irq_d;
 
        priv = devm_kzalloc(&client->dev, sizeof(*priv), GFP_KERNEL);
        if (!priv)
@@ -568,9 +571,13 @@ static int tusb320_probe(struct i2c_client *client)
                 */
                tusb320_state_update_handler(priv, true);
 
+       irq_d = irq_get_irq_data(client->irq);
+       if (irq_d)
+               irq_trigger_type = irqd_get_trigger_type(irq_d);
+
        ret = devm_request_threaded_irq(priv->dev, client->irq, NULL,
                                        tusb320_irq_handler,
-                                       IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
+                                       IRQF_ONESHOT | irq_trigger_type,
                                        client->name, priv);
        if (ret)
                tusb320_typec_remove(priv);