From: Uma Shankar <uma.shankar@xxxxxxxxx> Fix BXT DSI disable sequence as per latest updates in BSpec. Signed-off-by: Uma Shankar <uma.shankar@xxxxxxxxx> Signed-off-by: Vidya Srinivas <vidya.srinivas@xxxxxxxxx> --- drivers/gpu/drm/i915/intel_dsi.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c index 538755b..808158f 100644 --- a/drivers/gpu/drm/i915/intel_dsi.c +++ b/drivers/gpu/drm/i915/intel_dsi.c @@ -632,8 +632,10 @@ static void intel_dsi_disable(struct intel_encoder *encoder) for_each_dsi_port(port, intel_dsi->ports) wait_for_dsi_fifo_empty(intel_dsi, port); - intel_dsi_port_disable(encoder); - msleep(2); + if (!IS_BROXTON(dev_priv)) { + intel_dsi_port_disable(encoder); + usleep_range(2000, 2500); + } } for_each_dsi_port(port, intel_dsi->ports) { @@ -641,7 +643,11 @@ static void intel_dsi_disable(struct intel_encoder *encoder) I915_WRITE(MIPI_DEVICE_READY(port), 0x0); intel_dsi_reset_clocks(encoder, port); - I915_WRITE(MIPI_EOT_DISABLE(port), CLOCKSTOP); + temp = 0; + if (intel_dsi->clock_stop) { + temp |= CLOCKSTOP; + I915_WRITE(MIPI_EOT_DISABLE(port), temp); + } temp = I915_READ(MIPI_DSI_FUNC_PRG(port)); temp &= ~VID_MODE_FORMAT_MASK; @@ -707,12 +713,25 @@ static void intel_dsi_post_disable(struct intel_encoder *encoder, struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base); u32 val; + enum port port; DRM_DEBUG_KMS("\n"); intel_dsi_disable(encoder); - intel_dsi_clear_device_ready(encoder); + if (IS_BROXTON(dev_priv)) { + /* + * Reset the DSI Device ready first for both ports + * and then port control registers for both ports + */ + for_each_dsi_port(port, intel_dsi->ports) + I915_WRITE(MIPI_DEVICE_READY(port), 0); + + for_each_dsi_port(port, intel_dsi->ports) + I915_WRITE(BXT_MIPI_PORT_CTRL(port), 0); + } else { + intel_dsi_clear_device_ready(encoder); + } if (IS_BROXTON(dev_priv)) { /* Power down DSI regulator to save power */ @@ -737,6 +756,8 @@ static void intel_dsi_post_disable(struct intel_encoder *encoder, drm_panel_unprepare(intel_dsi->panel); + /* Disable Panel */ + drm_panel_power_off(intel_dsi->panel); msleep(intel_dsi->panel_off_delay); /* Panel Disable over CRC PMIC */ -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx