[Intel-gfx] [PATCH 15/15] drm/i915/dsi: reduce tedious repetition

Daniel Vetter daniel at ffwll.ch
Tue Jan 5 06:25:14 PST 2016


On Mon, Dec 21, 2015 at 03:11:06PM +0200, Jani Nikula wrote:
> Make it a bit tidier.

Also more save.

> Signed-off-by: Jani Nikula <jani.nikula at intel.com>

Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>

> ---
>  drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 62 +++++++++++-------------------
>  1 file changed, 22 insertions(+), 40 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> index 1f9c80d21904..f0116a6c14cd 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> @@ -317,18 +317,30 @@ static const char *sequence_name(enum mipi_seq seq_id)
>  		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);
> +	const u8 *data;
>  	fn_mipi_elem_exec mipi_elem_exec;
>  
> -	if (!data)
> +	if (WARN_ON(seq_id >= ARRAY_SIZE(dev_priv->vbt.dsi.sequence)))
>  		return;
>  
> -	DRM_DEBUG_DRIVER("Starting MIPI sequence %u - %s\n",
> -			 *data, sequence_name(*data));
> +	data = dev_priv->vbt.dsi.sequence[seq_id];
> +	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++;
>  
>  	/* Skip Size of Sequence. */
> @@ -370,59 +382,29 @@ static void generic_exec_sequence(struct intel_dsi *intel_dsi, const u8 *data)
>  
>  static int vbt_panel_prepare(struct drm_panel *panel)
>  {
> -	struct vbt_panel *vbt_panel = to_vbt_panel(panel);
> -	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_ASSERT_RESET];
> -	generic_exec_sequence(intel_dsi, sequence);
> -
> -	sequence = dev_priv->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP];
> -	generic_exec_sequence(intel_dsi, sequence);
> +	generic_exec_sequence(panel, MIPI_SEQ_ASSERT_RESET);
> +	generic_exec_sequence(panel, MIPI_SEQ_INIT_OTP);
>  
>  	return 0;
>  }
>  
>  static int vbt_panel_unprepare(struct drm_panel *panel)
>  {
> -	struct vbt_panel *vbt_panel = to_vbt_panel(panel);
> -	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);
> +	generic_exec_sequence(panel, MIPI_SEQ_DEASSERT_RESET);
>  
>  	return 0;
>  }
>  
>  static int vbt_panel_enable(struct drm_panel *panel)
>  {
> -	struct vbt_panel *vbt_panel = to_vbt_panel(panel);
> -	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);
> +	generic_exec_sequence(panel, MIPI_SEQ_DISPLAY_ON);
>  
>  	return 0;
>  }
>  
>  static int vbt_panel_disable(struct drm_panel *panel)
>  {
> -	struct vbt_panel *vbt_panel = to_vbt_panel(panel);
> -	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);
> +	generic_exec_sequence(panel, MIPI_SEQ_DISPLAY_OFF);
>  
>  	return 0;
>  }
> -- 
> 2.1.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the Intel-gfx mailing list