On Thu, Mar 05, 2020 at 09:34:46PM +0000, Peter Rosin wrote: > On 2020-03-05 16:53, 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. > > + pending = ret >> PCA954X_IRQ_OFFSET; > > + for_each_set_bit(i, &pending, data->chip->nchans) > > + handle_nested_irq(irq_linear_revmap(data->irq, i)); > > + > > + return IRQ_RETVAL(pending); > > What if ret has some bit set above the bit corresponding to the last channel? We will "handle" spurious interrupt. > Maybe that's somehow not possible, but if that's the case it's not apparent. So, does pending = (ret >> PCA954X_IRQ_OFFSET) & (BIT(data->chip->nchans) - 1); satisfy you? -- With Best Regards, Andy Shevchenko