Am Montag, 13. Mai 2019, 14:00:24 CEST schrieb Joe Burmeister: > Though it has a 'standby' it doesn't appear to be an issue and > marking the chip with can_sleep means gpiolib.c won't allow its use > as a interrupt controller. > --- > drivers/pinctrl/pinctrl-mcp23s08.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/pinctrl/pinctrl-mcp23s08.c b/drivers/pinctrl/pinctrl-mcp23s08.c > index 3fc63cb5b332..7334d8eb9135 100644 > --- a/drivers/pinctrl/pinctrl-mcp23s08.c > +++ b/drivers/pinctrl/pinctrl-mcp23s08.c > @@ -890,7 +890,7 @@ static int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev, > return PTR_ERR(mcp->regmap); > > mcp->chip.base = base; > - mcp->chip.can_sleep = true; > + mcp->chip.can_sleep = false; > mcp->chip.parent = dev; > mcp->chip.owner = THIS_MODULE; > > IMHO this is completly wrong, please refer to the documentation of this flag, e.g. https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/gpio/driver.h#n217 It essentially means you can't use this GPIOs from atomic context, as SPI or I2C transfers block/sleep, hence the name. In your case the IRQs are probably not requested as threaded, as stated in the link above. Best regards, Alexander