On Tue, Mar 04, 2025 at 11:18:52AM +0100, Kory Maincent wrote: > +static int tps23881_irq_handler(int irq, struct pse_controller_dev *pcdev, > + unsigned long *notifs, > + unsigned long *notifs_mask) > +{ > + struct tps23881_priv *priv = to_tps23881_priv(pcdev); > + struct i2c_client *client = priv->client; > + int ret, it_mask; > + > + /* Get interruption mask */ > + ret = i2c_smbus_read_word_data(client, TPS23881_REG_IT_MASK); > + if (ret < 0) > + return ret; > + it_mask = ret; > + > + /* Read interrupt register until it frees the interruption pin. */ > + while (true) { If the hardware has a stuck interrupt, this could result in an infinite loop. max_retries with some sane value would be good. > + ret = i2c_smbus_read_word_data(client, TPS23881_REG_IT); > + if (ret < 0) > + return ret; > + > + /* No more relevant interruption */ > + if (!(ret & it_mask)) > + return 0; > + > + ret = tps23881_irq_event_handler(priv, (u16)ret, notifs, > + notifs_mask); > + if (ret) > + return ret; > + } > + return 0; > +} > + > +static int tps23881_setup_irq(struct tps23881_priv *priv, int irq) > +{ > + struct i2c_client *client = priv->client; > + struct pse_irq_desc irq_desc = { > + .name = "tps23881-irq", here or in devm_pse_irq_helper() it would be good to add intex suffix to the irq handler name. v> + .map_event = tps23881_irq_handler, > + }; > + int ret; > + u16 val; > + > + val = TPS23881_REG_IT_IFAULT | TPS23881_REG_IT_SUPF; > + val |= val << 8; > + ret = i2c_smbus_write_word_data(client, TPS23881_REG_IT_MASK, val); > + if (ret) > + return ret; > + > + ret = i2c_smbus_read_word_data(client, TPS23881_REG_GEN_MASK); > + if (ret < 0) > + return ret; > + > + val = (u16)(ret | TPS23881_REG_INTEN | TPS23881_REG_INTEN << 8); > + ret = i2c_smbus_write_word_data(client, TPS23881_REG_GEN_MASK, val); > + if (ret < 0) > + return ret; > + > + return devm_pse_irq_helper(&priv->pcdev, irq, 0, &irq_desc); > +} -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |