[Intel-gfx] [PATCH v2 03/11] drm/i915: Refactor non-EDID fixed mode duplication

Jani Nikula jani.nikula at linux.intel.com
Thu Mar 31 13:23:59 UTC 2022


On Thu, 31 Mar 2022, Ville Syrjala <ville.syrjala at linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> All the non-EDID fixed mode functions basically do the exact
> same thing. Let's refactor the common bits into a shared
> function.
>
> There are minor differences on how the mode types are populated,
> whether the display info physical size is updated, and the debug
> print. The differences are purely accidental, so unifying them is
> actually a good thing.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>

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

> ---
>  drivers/gpu/drm/i915/display/intel_panel.c | 66 ++++++++++------------
>  1 file changed, 30 insertions(+), 36 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_panel.c b/drivers/gpu/drm/i915/display/intel_panel.c
> index 415aa381f732..1e56ca9033e0 100644
> --- a/drivers/gpu/drm/i915/display/intel_panel.c
> +++ b/drivers/gpu/drm/i915/display/intel_panel.c
> @@ -243,68 +243,62 @@ void intel_panel_add_edid_fixed_mode(struct intel_connector *connector)
>  	list_add_tail(&fixed_mode->head, &connector->panel.fixed_modes);
>  }
>  
> -void intel_panel_add_vbt_lfp_fixed_mode(struct intel_connector *connector)
> +static void intel_panel_add_fixed_mode(struct intel_connector *connector,
> +				       struct drm_display_mode *fixed_mode,
> +				       const char *type)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
> +	struct drm_i915_private *i915 = to_i915(connector->base.dev);
>  	struct drm_display_info *info = &connector->base.display_info;
> -	struct drm_display_mode *fixed_mode;
>  
> -	if (!dev_priv->vbt.lfp_lvds_vbt_mode)
> -		return;
> -
> -	fixed_mode = drm_mode_duplicate(&dev_priv->drm,
> -					dev_priv->vbt.lfp_lvds_vbt_mode);
>  	if (!fixed_mode)
>  		return;
>  
> -	fixed_mode->type |= DRM_MODE_TYPE_PREFERRED;
> -
> -	drm_dbg_kms(&dev_priv->drm, "[CONNECTOR:%d:%s] using mode from VBT: " DRM_MODE_FMT "\n",
> -		    connector->base.base.id, connector->base.name,
> -		    DRM_MODE_ARG(fixed_mode));
> +	fixed_mode->type |= DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
>  
>  	info->width_mm = fixed_mode->width_mm;
>  	info->height_mm = fixed_mode->height_mm;
>  
> +	drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s] using %s fixed mode: " DRM_MODE_FMT "\n",
> +		    connector->base.base.id, connector->base.name, type,
> +		    DRM_MODE_ARG(fixed_mode));
> +
>  	list_add_tail(&fixed_mode->head, &connector->panel.fixed_modes);
>  }
>  
> -void intel_panel_add_vbt_sdvo_fixed_mode(struct intel_connector *connector)
> +void intel_panel_add_vbt_lfp_fixed_mode(struct intel_connector *connector)
>  {
>  	struct drm_i915_private *i915 = to_i915(connector->base.dev);
> -	struct drm_display_mode *fixed_mode;
> -
> -	if (!i915->vbt.sdvo_lvds_vbt_mode)
> -		return;
> +	const struct drm_display_mode *mode;
>  
> -	fixed_mode = drm_mode_duplicate(&i915->drm,
> -					i915->vbt.sdvo_lvds_vbt_mode);
> -	if (!fixed_mode)
> +	mode = i915->vbt.lfp_lvds_vbt_mode;
> +	if (!mode)
>  		return;
>  
> -	/* Guarantee the mode is preferred */
> -	fixed_mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
> -
> -	list_add_tail(&fixed_mode->head, &connector->panel.fixed_modes);
> +	intel_panel_add_fixed_mode(connector,
> +				   drm_mode_duplicate(&i915->drm, mode),
> +				   "VBT LFP");
>  }
>  
> -void intel_panel_add_encoder_fixed_mode(struct intel_connector *connector,
> -					struct intel_encoder *encoder)
> +void intel_panel_add_vbt_sdvo_fixed_mode(struct intel_connector *connector)
>  {
>  	struct drm_i915_private *i915 = to_i915(connector->base.dev);
> -	struct drm_display_mode *fixed_mode;
> +	const struct drm_display_mode *mode;
>  
> -	fixed_mode = intel_encoder_current_mode(encoder);
> -	if (!fixed_mode)
> +	mode = i915->vbt.sdvo_lvds_vbt_mode;
> +	if (!mode)
>  		return;
>  
> -	drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s] using current (BIOS) mode: " DRM_MODE_FMT "\n",
> -		    connector->base.base.id, connector->base.name,
> -		    DRM_MODE_ARG(fixed_mode));
> -
> -	fixed_mode->type |= DRM_MODE_TYPE_PREFERRED;
> +	intel_panel_add_fixed_mode(connector,
> +				   drm_mode_duplicate(&i915->drm, mode),
> +				   "VBT SDVO");
> +}
>  
> -	list_add_tail(&fixed_mode->head, &connector->panel.fixed_modes);
> +void intel_panel_add_encoder_fixed_mode(struct intel_connector *connector,
> +					struct intel_encoder *encoder)
> +{
> +	intel_panel_add_fixed_mode(connector,
> +				   intel_encoder_current_mode(encoder),
> +				   "current (BIOS)");
>  }
>  
>  /* adjusted_mode has been preset to be the panel's fixed mode */

-- 
Jani Nikula, Intel Open Source Graphics Center


More information about the Intel-gfx mailing list