]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/bridge: ti-sn65dsi86: Clear old error bits before AUX transfers
authorDouglas Anderson <dianders@chromium.org>
Fri, 8 May 2020 23:33:29 +0000 (16:33 -0700)
committerSam Ravnborg <sam@ravnborg.org>
Mon, 18 May 2020 18:01:14 +0000 (20:01 +0200)
The AUX channel transfer error bits in the status register are latched
and need to be cleared.  Clear them before doing our transfer so we
don't see old bits and get confused.

Without this patch having a single failure would mean that all future
transfers would look like they failed.

Fixes: b814ec6d4535 ("drm/bridge: ti-sn65dsi86: Implement AUX channel")
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Reviewed-by: Rob Clark <robdclark@gmail.com>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20200508163314.1.Idfa69d5d3fc9623083c0ff78572fea87dccb199c@changeid
drivers/gpu/drm/bridge/ti-sn65dsi86.c

index 3b91fa0ebdf9248e52d6c6d564b4efdb8c8a84c4..03a29c797784b4c3c40160523e6f7437351fd777 100644 (file)
@@ -869,6 +869,12 @@ static ssize_t ti_sn_aux_transfer(struct drm_dp_aux *aux,
                                     buf[i]);
        }
 
+       /* Clear old status bits before start so we don't get confused */
+       regmap_write(pdata->regmap, SN_AUX_CMD_STATUS_REG,
+                    AUX_IRQ_STATUS_NAT_I2C_FAIL |
+                    AUX_IRQ_STATUS_AUX_RPLY_TOUT |
+                    AUX_IRQ_STATUS_AUX_SHORT);
+
        regmap_write(pdata->regmap, SN_AUX_CMD_REG, request_val | AUX_CMD_SEND);
 
        ret = regmap_read_poll_timeout(pdata->regmap, SN_AUX_CMD_REG, val,