u8 pending[NR_GPIO_REGS];
        u8 src[NR_GPIO_REGS] = {0, 0, 0};
        unsigned long n, status;
-       int ret;
+       int i, ret;
 
        ret = regmap_bulk_read(pctl->stmfx->map, STMFX_REG_IRQ_GPI_PENDING,
                               &pending, NR_GPIO_REGS);
        regmap_bulk_write(pctl->stmfx->map, STMFX_REG_IRQ_GPI_SRC,
                          src, NR_GPIO_REGS);
 
-       status = *(unsigned long *)pending;
+       BUILD_BUG_ON(NR_GPIO_REGS > sizeof(status));
+       for (i = 0, status = 0; i < NR_GPIO_REGS; i++)
+               status |= (unsigned long)pending[i] << (i * 8);
        for_each_set_bit(n, &status, gc->ngpio) {
                handle_nested_irq(irq_find_mapping(gc->irq.domain, n));
                stmfx_pinctrl_irq_toggle_trigger(pctl, n);