return -EAGAIN;
                }
 
-               if (for_busy && (temp & I2SR_IBB))
+               if (for_busy && (temp & I2SR_IBB)) {
+                       i2c_imx->stopped = 0;
                        break;
-               if (!for_busy && !(temp & I2SR_IBB))
+               }
+               if (!for_busy && !(temp & I2SR_IBB)) {
+                       i2c_imx->stopped = 1;
                        break;
+               }
                if (time_after(jiffies, orig_jiffies + msecs_to_jiffies(500))) {
                        dev_dbg(&i2c_imx->adapter.dev,
                                "<%s> I2C bus is busy\n", __func__);
        result = i2c_imx_bus_busy(i2c_imx, 1);
        if (result)
                return result;
-       i2c_imx->stopped = 0;
 
        temp |= I2CR_IIEN | I2CR_MTX | I2CR_TXAK;
        temp &= ~I2CR_DMAEN;
                udelay(i2c_imx->disable_delay);
        }
 
-       if (!i2c_imx->stopped) {
+       if (!i2c_imx->stopped)
                i2c_imx_bus_busy(i2c_imx, 0);
-               i2c_imx->stopped = 1;
-       }
 
        /* Disable I2C controller */
        temp = i2c_imx->hwdata->i2cr_ien_opcode ^ I2CR_IEN,
                temp &= ~(I2CR_MSTA | I2CR_MTX);
                imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
                i2c_imx_bus_busy(i2c_imx, 0);
-               i2c_imx->stopped = 1;
        } else {
                /*
                 * For i2c master receiver repeat restart operation like:
                                temp &= ~(I2CR_MSTA | I2CR_MTX);
                                imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
                                i2c_imx_bus_busy(i2c_imx, 0);
-                               i2c_imx->stopped = 1;
                        } else {
                                /*
                                 * For i2c master receiver repeat restart operation like: