[Intel-gfx] [PATCH 7/8] drm/i915/sdvo: Reduce copy-pasta in output setup

Jani Nikula jani.nikula at linux.intel.com
Thu Oct 27 14:45:02 UTC 2022


On Wed, 26 Oct 2022, Ville Syrjala <ville.syrjala at linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> Avoid having to call the output init function for each
> output type separately. We can just call the right one
> based on the "class" of the output.
>
> Technically we could just walk the bits of the bitmask
> but that could change the order in which we initialize
> the outputs. To avoid any behavioural changes keep to
> the same explicit probe order as before.
>
> 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_sdvo.c | 66 +++++++++++------------
>  1 file changed, 33 insertions(+), 33 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index 4784c05a1b71..58d147cc7633 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -2922,11 +2922,38 @@ static u16 intel_sdvo_filter_output_flags(u16 flags)
>  	return flags;
>  }
>  
> +static bool intel_sdvo_output_init(struct intel_sdvo *sdvo, u16 type)
> +{
> +	if (type & SDVO_TMDS_MASK)
> +		return intel_sdvo_dvi_init(sdvo, type);
> +	else if (type & SDVO_TV_MASK)
> +		return intel_sdvo_tv_init(sdvo, type);
> +	else if (type & SDVO_RGB_MASK)
> +		return intel_sdvo_analog_init(sdvo, type);
> +	else if (type & SDVO_LVDS_MASK)
> +		return intel_sdvo_lvds_init(sdvo, type);
> +	else
> +		return false;
> +}
> +
>  static bool
>  intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo)
>  {
> +	static const u16 probe_order[] = {
> +		SDVO_OUTPUT_TMDS0,
> +		SDVO_OUTPUT_TMDS1,
> +		/* TV has no XXX1 function block */
> +		SDVO_OUTPUT_SVID0,
> +		SDVO_OUTPUT_CVBS0,
> +		SDVO_OUTPUT_YPRPB0,
> +		SDVO_OUTPUT_RGB0,
> +		SDVO_OUTPUT_RGB1,
> +		SDVO_OUTPUT_LVDS0,
> +		SDVO_OUTPUT_LVDS1,
> +	};
>  	struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
>  	u16 flags;
> +	int i;
>  
>  	flags = intel_sdvo_filter_output_flags(intel_sdvo->caps.output_flags);
>  
> @@ -2940,42 +2967,15 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo)
>  
>  	intel_sdvo_select_ddc_bus(i915, intel_sdvo);
>  
> -	if (flags & SDVO_OUTPUT_TMDS0)
> -		if (!intel_sdvo_dvi_init(intel_sdvo, SDVO_OUTPUT_TMDS0))
> -			return false;
> -
> -	if (flags & SDVO_OUTPUT_TMDS1)
> -		if (!intel_sdvo_dvi_init(intel_sdvo, SDVO_OUTPUT_TMDS1))
> -			return false;
> -
> -	/* TV has no XXX1 function block */
> -	if (flags & SDVO_OUTPUT_SVID0)
> -		if (!intel_sdvo_tv_init(intel_sdvo, SDVO_OUTPUT_SVID0))
> -			return false;
> -
> -	if (flags & SDVO_OUTPUT_CVBS0)
> -		if (!intel_sdvo_tv_init(intel_sdvo, SDVO_OUTPUT_CVBS0))
> -			return false;
> +	for (i = 0; i < ARRAY_SIZE(probe_order); i++) {
> +		u16 type = flags & probe_order[i];
>  
> -	if (flags & SDVO_OUTPUT_YPRPB0)
> -		if (!intel_sdvo_tv_init(intel_sdvo, SDVO_OUTPUT_YPRPB0))
> -			return false;
> -
> -	if (flags & SDVO_OUTPUT_RGB0)
> -		if (!intel_sdvo_analog_init(intel_sdvo, SDVO_OUTPUT_RGB0))
> -			return false;
> -
> -	if (flags & SDVO_OUTPUT_RGB1)
> -		if (!intel_sdvo_analog_init(intel_sdvo, SDVO_OUTPUT_RGB1))
> -			return false;
> -
> -	if (flags & SDVO_OUTPUT_LVDS0)
> -		if (!intel_sdvo_lvds_init(intel_sdvo, SDVO_OUTPUT_LVDS0))
> -			return false;
> +		if (!type)
> +			continue;
>  
> -	if (flags & SDVO_OUTPUT_LVDS1)
> -		if (!intel_sdvo_lvds_init(intel_sdvo, SDVO_OUTPUT_LVDS1))
> +		if (!intel_sdvo_output_init(intel_sdvo, type))
>  			return false;
> +	}
>  
>  	intel_sdvo->base.pipe_mask = ~0;

-- 
Jani Nikula, Intel Open Source Graphics Center


More information about the Intel-gfx mailing list