@@ -561,6 +561,10 @@ static void intel_dsi_pre_enable(struct intel_encoder *encoder,
intel_dsi_prepare(encoder, pipe_config);
+ /* Panel Enable */
+ drm_panel_power_on(intel_dsi->panel);
+ msleep(intel_dsi->panel_on_delay);
+
/* Panel Enable over CRC PMIC */
if (intel_dsi->gpio_panel)
gpiod_set_value_cansleep(intel_dsi->gpio_panel, 1);
@@ -576,6 +580,8 @@ static void intel_dsi_pre_enable(struct intel_encoder *encoder,
I915_WRITE(DSPCLK_GATE_D, val);
}
+ drm_panel_reset(intel_dsi->panel);
+
/* put device in ready state */
intel_dsi_device_ready(encoder);
@@ -493,7 +493,6 @@ static void generic_exec_sequence(struct drm_panel *panel, enum mipi_seq seq_id)
static int vbt_panel_prepare(struct drm_panel *panel)
{
- generic_exec_sequence(panel, MIPI_SEQ_ASSERT_RESET);
generic_exec_sequence(panel, MIPI_SEQ_POWER_ON);
generic_exec_sequence(panel, MIPI_SEQ_DEASSERT_RESET);
generic_exec_sequence(panel, MIPI_SEQ_INIT_OTP);
@@ -561,10 +560,18 @@ static int vbt_panel_power_off(struct drm_panel *panel)
return 0;
}
+static int vbt_panel_reset(struct drm_panel *panel)
+{
+ generic_exec_sequence(panel, MIPI_SEQ_ASSERT_RESET);
+
+ return 0;
+}
+
static const struct drm_panel_funcs vbt_panel_funcs = {
.disable = vbt_panel_disable,
.unprepare = vbt_panel_unprepare,
.prepare = vbt_panel_prepare,
+ .reset = vbt_panel_reset,
.power_on = vbt_panel_power_on,
.power_off = vbt_panel_power_off,
.enable = vbt_panel_enable,
Enable the call back for MIPI reset sequence. This is needed to reset the panel, and is part of the VBT spec. Signed-off-by: Uma Shankar <uma.shankar@intel.com> --- drivers/gpu/drm/i915/intel_dsi.c | 6 ++++++ drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 9 ++++++++- 2 files changed, 14 insertions(+), 1 deletion(-)