return i == busy;
 }
 
-static irqreturn_t stm32f7_i2c_slave_isr_event(struct stm32f7_i2c_dev *i2c_dev)
+static irqreturn_t stm32f7_i2c_slave_isr_event(struct stm32f7_i2c_dev *i2c_dev, u32 status)
 {
        void __iomem *base = i2c_dev->base;
-       u32 cr2, status, mask;
+       u32 cr2, mask;
        u8 val;
        int ret;
 
-       status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
-
        /* Slave transmitter mode */
        if (status & STM32F7_I2C_ISR_TXIS) {
                i2c_slave_event(i2c_dev->slave_running,
        u32 status, mask;
        int ret;
 
-       if (!i2c_dev->master_mode)
-               return stm32f7_i2c_slave_isr_event(i2c_dev);
-
        status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
 
+       if (!i2c_dev->master_mode)
+               return stm32f7_i2c_slave_isr_event(i2c_dev, status);
+
        /* NACK received */
        if (status & STM32F7_I2C_ISR_NACKF) {
                dev_dbg(i2c_dev->dev, "<%s>: Receive NACK (addr %x)\n",