Merge tag 'rtc-5.14' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux
[linux-2.6-microblaze.git] / drivers / pinctrl / pinctrl-mcp23s08.c
index ce2d801..bccebe4 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/module.h>
 #include <linux/export.h>
 #include <linux/gpio/driver.h>
+#include <linux/gpio/consumer.h>
 #include <linux/slab.h>
 #include <asm/byteorder.h>
 #include <linux/interrupt.h>
@@ -351,6 +352,11 @@ static irqreturn_t mcp23s08_irq(int irq, void *data)
        if (mcp_read(mcp, MCP_INTF, &intf))
                goto unlock;
 
+       if (intf == 0) {
+               /* There is no interrupt pending */
+               goto unlock;
+       }
+
        if (mcp_read(mcp, MCP_INTCAP, &intcap))
                goto unlock;
 
@@ -368,11 +374,6 @@ static irqreturn_t mcp23s08_irq(int irq, void *data)
        mcp->cached_gpio = gpio;
        mutex_unlock(&mcp->lock);
 
-       if (intf == 0) {
-               /* There is no interrupt pending */
-               return IRQ_HANDLED;
-       }
-
        dev_dbg(mcp->chip.parent,
                "intcap 0x%04X intf 0x%04X gpio_orig 0x%04X gpio 0x%04X\n",
                intcap, intf, gpio_orig, gpio);
@@ -558,6 +559,8 @@ int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev,
        mcp->chip.parent = dev;
        mcp->chip.owner = THIS_MODULE;
 
+       mcp->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
+
        /* verify MCP_IOCON.SEQOP = 0, so sequential reads work,
         * and MCP_IOCON.HAEN = 1, so we work with all chips.
         */