On 2020-05-06 14:42, Andy Shevchenko wrote: > On Sat, Apr 25, 2020 at 02:51:49PM +0300, Andy Shevchenko wrote: >> Refactor pca954x_irq_handler() to: >> - use for_each_set_bit() macro >> - use IRQ_RETVAL() macro >> >> Above change makes code easy to read and understand. > > If there is no comments, Wolfram, can you apply this? Perhaps that's best, I have had the intention to get to this for a very long time and I'm very sorry for delaying. The number of patches for i2c-mux is so low that I have not bothered to automate the process, but that also means that I have to sort of rediscover how to do it a few times a year. It's simply not effective... Wolfram, I think it would be better if I just quit my i2c-mux tree and I instead review/ack patches that you then take. Would that be ok with you? Again, sorry for being a road-block. Reviewed-by: Peter Rosin <peda@xxxxxxxxxx> Cheers, Peter >> Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> >> --- >> v3: rebase on top of latest rc >> drivers/i2c/muxes/i2c-mux-pca954x.c | 17 +++++++---------- >> 1 file changed, 7 insertions(+), 10 deletions(-) >> >> diff --git a/drivers/i2c/muxes/i2c-mux-pca954x.c b/drivers/i2c/muxes/i2c-mux-pca954x.c >> index a0d926ae3f864..b764c7c746e96 100644 >> --- a/drivers/i2c/muxes/i2c-mux-pca954x.c >> +++ b/drivers/i2c/muxes/i2c-mux-pca954x.c >> @@ -327,21 +327,18 @@ static DEVICE_ATTR_RW(idle_state); >> static irqreturn_t pca954x_irq_handler(int irq, void *dev_id) >> { >> struct pca954x *data = dev_id; >> - unsigned int child_irq; >> - int ret, i, handled = 0; >> + unsigned long pending; >> + int ret, i; >> >> ret = i2c_smbus_read_byte(data->client); >> if (ret < 0) >> return IRQ_NONE; >> >> - for (i = 0; i < data->chip->nchans; i++) { >> - if (ret & BIT(PCA954X_IRQ_OFFSET + i)) { >> - child_irq = irq_linear_revmap(data->irq, i); >> - handle_nested_irq(child_irq); >> - handled++; >> - } >> - } >> - return handled ? IRQ_HANDLED : IRQ_NONE; >> + pending = (ret >> PCA954X_IRQ_OFFSET) & (BIT(data->chip->nchans) - 1); >> + for_each_set_bit(i, &pending, data->chip->nchans) >> + handle_nested_irq(irq_linear_revmap(data->irq, i)); >> + >> + return IRQ_RETVAL(pending); >> } >> >> static int pca954x_irq_set_type(struct irq_data *idata, unsigned int type) >> -- >> 2.26.2 >> >