diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index b932ae11b92b..c218b0b2c1b2 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -3219,10 +3219,11 @@ static ssize_t dsi_host_transfer(struct mipi_dsi_host *host, cmd_flags |= DSI_CTRL_CMD_ASYNC_WAIT; if (msg->rx_buf) - flags |= DSI_CTRL_CMD_READ; + cmd_flags |= DSI_CTRL_CMD_READ; rc = dsi_ctrl_cmd_transfer(display->ctrl[ctrl_idx].ctrl, msg, &cmd_flags); - if (rc) { + if (((cmd_flags & DSI_CTRL_CMD_READ) && rc <= 0) || + (!(cmd_flags & DSI_CTRL_CMD_READ) && rc)) { DSI_ERR("[%s] cmd transfer failed, rc=%d\n", display->name, rc); goto error_disable_cmd_engine;