Commit c67fed85 authored by Jani Nikula's avatar Jani Nikula
parent 40795782
...@@ -265,18 +265,30 @@ static const char *sequence_name(enum mipi_seq seq_id) ...@@ -265,18 +265,30 @@ static const char *sequence_name(enum mipi_seq seq_id)
return "(unknown)"; return "(unknown)";
} }
static void generic_exec_sequence(struct intel_dsi *intel_dsi, const u8 *data) static void generic_exec_sequence(struct drm_panel *panel, enum mipi_seq seq_id)
{ {
struct vbt_panel *vbt_panel = to_vbt_panel(panel);
struct intel_dsi *intel_dsi = vbt_panel->intel_dsi;
struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev); struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev);
const u8 *data;
fn_mipi_elem_exec mipi_elem_exec; fn_mipi_elem_exec mipi_elem_exec;
if (!data) if (WARN_ON(seq_id >= ARRAY_SIZE(dev_priv->vbt.dsi.sequence)))
return; return;
DRM_DEBUG_DRIVER("Starting MIPI sequence %u - %s\n", data = dev_priv->vbt.dsi.sequence[seq_id];
*data, sequence_name(*data)); if (!data) {
DRM_DEBUG_KMS("MIPI sequence %d - %s not available\n",
seq_id, sequence_name(seq_id));
return;
}
/* go to the first element of the sequence */ WARN_ON(*data != seq_id);
DRM_DEBUG_KMS("Starting MIPI sequence %d - %s\n",
seq_id, sequence_name(seq_id));
/* Skip Sequence Byte. */
data++; data++;
/* Skip Size of Sequence. */ /* Skip Size of Sequence. */
...@@ -317,59 +329,29 @@ static void generic_exec_sequence(struct intel_dsi *intel_dsi, const u8 *data) ...@@ -317,59 +329,29 @@ static void generic_exec_sequence(struct intel_dsi *intel_dsi, const u8 *data)
static int vbt_panel_prepare(struct drm_panel *panel) static int vbt_panel_prepare(struct drm_panel *panel)
{ {
struct vbt_panel *vbt_panel = to_vbt_panel(panel); generic_exec_sequence(panel, MIPI_SEQ_ASSERT_RESET);
struct intel_dsi *intel_dsi = vbt_panel->intel_dsi; generic_exec_sequence(panel, MIPI_SEQ_INIT_OTP);
struct drm_device *dev = intel_dsi->base.base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
const u8 *sequence;
sequence = dev_priv->vbt.dsi.sequence[MIPI_SEQ_ASSERT_RESET];
generic_exec_sequence(intel_dsi, sequence);
sequence = dev_priv->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP];
generic_exec_sequence(intel_dsi, sequence);
return 0; return 0;
} }
static int vbt_panel_unprepare(struct drm_panel *panel) static int vbt_panel_unprepare(struct drm_panel *panel)
{ {
struct vbt_panel *vbt_panel = to_vbt_panel(panel); generic_exec_sequence(panel, MIPI_SEQ_DEASSERT_RESET);
struct intel_dsi *intel_dsi = vbt_panel->intel_dsi;
struct drm_device *dev = intel_dsi->base.base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
const u8 *sequence;
sequence = dev_priv->vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET];
generic_exec_sequence(intel_dsi, sequence);
return 0; return 0;
} }
static int vbt_panel_enable(struct drm_panel *panel) static int vbt_panel_enable(struct drm_panel *panel)
{ {
struct vbt_panel *vbt_panel = to_vbt_panel(panel); generic_exec_sequence(panel, MIPI_SEQ_DISPLAY_ON);
struct intel_dsi *intel_dsi = vbt_panel->intel_dsi;
struct drm_device *dev = intel_dsi->base.base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
const u8 *sequence;
sequence = dev_priv->vbt.dsi.sequence[MIPI_SEQ_DISPLAY_ON];
generic_exec_sequence(intel_dsi, sequence);
return 0; return 0;
} }
static int vbt_panel_disable(struct drm_panel *panel) static int vbt_panel_disable(struct drm_panel *panel)
{ {
struct vbt_panel *vbt_panel = to_vbt_panel(panel); generic_exec_sequence(panel, MIPI_SEQ_DISPLAY_OFF);
struct intel_dsi *intel_dsi = vbt_panel->intel_dsi;
struct drm_device *dev = intel_dsi->base.base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
const u8 *sequence;
sequence = dev_priv->vbt.dsi.sequence[MIPI_SEQ_DISPLAY_OFF];
generic_exec_sequence(intel_dsi, sequence);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment