The tegra_dsi_prepare function performs hardware setup and should be called before any register readings or there will be a risk of device hangup on register access. To avoid this situation, tegra_dsi_prepare must be called at the beginning of tegra_dsi_encoder_enable.
Signed-off-by: Svyatoslav Ryhel <clamo...@gmail.com> --- drivers/gpu/drm/tegra/dsi.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c index 278bf2c85524..8e80c7efe8b4 100644 --- a/drivers/gpu/drm/tegra/dsi.c +++ b/drivers/gpu/drm/tegra/dsi.c @@ -914,6 +914,12 @@ static void tegra_dsi_encoder_enable(struct drm_encoder *encoder) u32 value; int err; + err = tegra_dsi_prepare(dsi); + if (err < 0) { + dev_err(dsi->dev, "failed to prepare: %d\n", err); + return; + } + /* If the bootloader enabled DSI it needs to be disabled * in order for the panel initialization commands to be * properly sent. @@ -923,12 +929,6 @@ static void tegra_dsi_encoder_enable(struct drm_encoder *encoder) if (value & DSI_POWER_CONTROL_ENABLE) tegra_dsi_disable(dsi); - err = tegra_dsi_prepare(dsi); - if (err < 0) { - dev_err(dsi->dev, "failed to prepare: %d\n", err); - return; - } - state = tegra_dsi_get_state(dsi); tegra_dsi_set_timeout(dsi, state->bclk, state->vrefresh); -- 2.48.1