On Mon, Nov 12, 2018 at 06:59:53PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrj...@linux.intel.com>
> 
> Rewrite the preferred mode selection to just check
> whether the TV modes is HD or SD. For SD TV modes we
> favor 480 line modes, for 720p we prefer 720 line modes,
> and for 1080i/p we prefer 1080 line modes.
> 
> Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>

Reviewed-by: Imre Deak <imre.d...@intel.com>

> ---
>  drivers/gpu/drm/i915/intel_tv.c | 50 ++++++++++++++++++++-------------
>  1 file changed, 30 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
> index 97a82878359f..54189080cfb1 100644
> --- a/drivers/gpu/drm/i915/intel_tv.c
> +++ b/drivers/gpu/drm/i915/intel_tv.c
> @@ -860,6 +860,14 @@ intel_tv_mode_valid(struct drm_connector *connector,
>       return MODE_CLOCK_RANGE;
>  }
>  
> +static int
> +intel_tv_mode_vdisplay(const struct tv_mode *tv_mode)
> +{
> +     if (tv_mode->progressive)
> +             return tv_mode->nbr_end + 1;
> +     else
> +             return 2 * (tv_mode->nbr_end + 1);
> +}
>  
>  static void
>  intel_tv_get_config(struct intel_encoder *encoder,
> @@ -1098,10 +1106,7 @@ static void intel_tv_pre_enable(struct intel_encoder 
> *encoder,
>       /* Filter ctl must be set before TV_WIN_SIZE */
>       I915_WRITE(TV_FILTER_CTL_1, TV_AUTO_SCALE);
>       xsize = tv_mode->hblank_start - tv_mode->hblank_end;
> -     if (tv_mode->progressive)
> -             ysize = tv_mode->nbr_end + 1;
> -     else
> -             ysize = 2 * (tv_mode->nbr_end + 1);
> +     ysize = intel_tv_mode_vdisplay(tv_mode);
>  
>       xpos = conn_state->tv.margins.left;
>       ypos = conn_state->tv.margins.top;
> @@ -1320,22 +1325,28 @@ static const struct input_res {
>       {"1920x1080", 1920, 1080},
>  };
>  
> -/*
> - * Chose preferred mode  according to line number of TV format
> - */
> +/* Choose preferred mode according to line number of TV format */
> +static bool
> +intel_tv_is_preferred_mode(const struct drm_display_mode *mode,
> +                        const struct tv_mode *tv_mode)
> +{
> +     int vdisplay = intel_tv_mode_vdisplay(tv_mode);
> +
> +     /* prefer 480 line modes for all SD TV modes */
> +     if (vdisplay <= 576)
> +             vdisplay = 480;
> +
> +     return vdisplay == mode->vdisplay;
> +}
> +
>  static void
> -intel_tv_choose_preferred_modes(const struct tv_mode *tv_mode,
> -                            struct drm_display_mode *mode_ptr)
> +intel_tv_set_mode_type(struct drm_display_mode *mode,
> +                    const struct tv_mode *tv_mode)
>  {
> -     if (tv_mode->nbr_end < 480 && mode_ptr->vdisplay == 480)
> -             mode_ptr->type |= DRM_MODE_TYPE_PREFERRED;
> -     else if (tv_mode->nbr_end > 480) {
> -             if (tv_mode->progressive == true && tv_mode->nbr_end < 720) {
> -                     if (mode_ptr->vdisplay == 720)
> -                             mode_ptr->type |= DRM_MODE_TYPE_PREFERRED;
> -             } else if (mode_ptr->vdisplay == 1080)
> -                             mode_ptr->type |= DRM_MODE_TYPE_PREFERRED;
> -     }
> +     mode->type = DRM_MODE_TYPE_DRIVER;
> +
> +     if (intel_tv_is_preferred_mode(mode, tv_mode))
> +             mode->type |= DRM_MODE_TYPE_PREFERRED;
>  }
>  
>  static int
> @@ -1383,8 +1394,7 @@ intel_tv_get_modes(struct drm_connector *connector)
>               tmp = div_u64(tmp, 1000000);
>               mode_ptr->clock = (int) tmp;
>  
> -             mode_ptr->type = DRM_MODE_TYPE_DRIVER;
> -             intel_tv_choose_preferred_modes(tv_mode, mode_ptr);
> +             intel_tv_set_mode_type(mode_ptr, tv_mode);
>               drm_mode_probed_add(connector, mode_ptr);
>               count++;
>       }
> -- 
> 2.18.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to