i2c_int_disable(idev, MST_STATUS_TFL);
        }
 
-       if (status & MST_STATUS_SCC) {
-               /* Stop completed */
-               i2c_int_disable(idev, ~MST_STATUS_TSS);
-               complete(&idev->msg_complete);
-       } else if (status & MST_STATUS_SNS) {
-               /* Transfer done */
-               i2c_int_disable(idev, ~MST_STATUS_TSS);
-               if (i2c_m_rd(idev->msg) && idev->msg_xfrd < idev->msg->len)
-                       axxia_i2c_empty_rx_fifo(idev);
-               complete(&idev->msg_complete);
-       } else if (status & MST_STATUS_TSS) {
-               /* Transfer timeout */
-               idev->msg_err = -ETIMEDOUT;
-               i2c_int_disable(idev, ~MST_STATUS_TSS);
-               complete(&idev->msg_complete);
-       } else if (unlikely(status & MST_STATUS_ERR)) {
+       if (unlikely(status & MST_STATUS_ERR)) {
                /* Transfer error */
                i2c_int_disable(idev, ~0);
                if (status & MST_STATUS_AL)
                        readl(idev->base + MST_TX_BYTES_XFRD),
                        readl(idev->base + MST_TX_XFER));
                complete(&idev->msg_complete);
+       } else if (status & MST_STATUS_SCC) {
+               /* Stop completed */
+               i2c_int_disable(idev, ~MST_STATUS_TSS);
+               complete(&idev->msg_complete);
+       } else if (status & MST_STATUS_SNS) {
+               /* Transfer done */
+               i2c_int_disable(idev, ~MST_STATUS_TSS);
+               if (i2c_m_rd(idev->msg) && idev->msg_xfrd < idev->msg->len)
+                       axxia_i2c_empty_rx_fifo(idev);
+               complete(&idev->msg_complete);
+       } else if (status & MST_STATUS_TSS) {
+               /* Transfer timeout */
+               idev->msg_err = -ETIMEDOUT;
+               i2c_int_disable(idev, ~MST_STATUS_TSS);
+               complete(&idev->msg_complete);
        }
 
 out: