On Wed, 8 Feb 2017 16:20:55 +0530 Vidya Srinivas <vidya.srinivas@xxxxxxxxx> wrote: > 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); > + } This could be simplified to just if (intel_dsi->clock_stop) I915_WRITE(MIPI_EOT_DISABLE(port), CLOCKSTOP); > > 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); This depends on the previous patch, which I don't think is the direction we want to go. If the code is reworked to not use the drm_panel interface, then this would need to change also. > msleep(intel_dsi->panel_off_delay); > Do we need to call intel_disable_dsi_pll(encoder) here as part of the power off? > /* Panel Disable over CRC PMIC */ -- -- Bob Paauwe Bob.J.Paauwe@xxxxxxxxx IOTG / PED Software Organization Intel Corp. Folsom, CA (916) 356-6193 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx