Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c67fed85 authored by Jani Nikula's avatar Jani Nikula
Browse files
parent 40795782
Loading
Loading
Loading
Loading
+22 −40
Original line number Original line Diff line number Diff line
@@ -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)


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;
}
}