> On Mon, Aug 10, 2015 at 03:26:09PM +0800, Xiong Zhang wrote:
> > Only internal eDP, LVDS, DVI screen could set scalling mode, some
> > customers need to set scalling mode for external DP, HDMI, VGA screen.
> > Let's fulfill this.
> >
> > bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90989
> >
> > Signed-off-by: Xiong Zhang <xiong.y.zh...@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_dp.c | 63
> > ++++++++++++++++++++++++++++-------------
> >  1 file changed, 44 insertions(+), 19 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_dp.c
> > b/drivers/gpu/drm/i915/intel_dp.c index f1b9f93..2da334b 100644
> > --- a/drivers/gpu/drm/i915/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > @@ -207,7 +207,13 @@ intel_dp_mode_valid(struct drm_connector
> *connector,
> >     int target_clock = mode->clock;
> >     int max_rate, mode_rate, max_lanes, max_link_clock;
> >
> > -   if (is_edp(intel_dp) && fixed_mode) {
> > +   if (mode->clock < 10000)
> > +           return MODE_CLOCK_LOW;
> > +
> > +   if (mode->flags & DRM_MODE_FLAG_DBLCLK)
> > +           return MODE_H_ILLEGAL;
> > +
> > +   if (!intel_panel_scale_none(&intel_connector->panel)) {
> >             if (mode->hdisplay > fixed_mode->hdisplay)
> >                     return MODE_PANEL;
> >
> > @@ -226,12 +232,6 @@ intel_dp_mode_valid(struct drm_connector
> *connector,
> >     if (mode_rate > max_rate)
> >             return MODE_CLOCK_HIGH;
> >
> > -   if (mode->clock < 10000)
> > -           return MODE_CLOCK_LOW;
> > -
> > -   if (mode->flags & DRM_MODE_FLAG_DBLCLK)
> > -           return MODE_H_ILLEGAL;
> > -
> >     return MODE_OK;
> >  }
> >
> > @@ -1378,7 +1378,7 @@ intel_dp_compute_config(struct intel_encoder
> *encoder,
> >     pipe_config->has_drrs = false;
> >     pipe_config->has_audio = intel_dp->has_audio && port != PORT_A;
> >
> > -   if (is_edp(intel_dp) && intel_connector->panel.fixed_mode) {
> > +   if (!intel_panel_scale_none(&intel_connector->panel)) {
> >             intel_fixed_panel_mode(intel_connector->panel.fixed_mode,
> >                                    adjusted_mode);
> >
> > @@ -4592,6 +4592,23 @@ static int intel_dp_get_modes(struct
> drm_connector *connector)
> >     edid = intel_connector->detect_edid;
> >     if (edid) {
> >             int ret = intel_connector_update_modes(connector, edid);
> > +
> > +           if (ret && intel_connector->panel.fixed_mode == NULL) {
> > +                   /* init fixed mode as preferred mode for DP */
> > +                   struct drm_display_mode *fixed_mode = NULL;
> > +                   struct drm_display_mode *scan;
> > +
> > +                   list_for_each_entry(scan, &connector->probed_modes, 
> > head) {
> > +                           if (scan->type & DRM_MODE_TYPE_PREFERRED)
> > +                                   fixed_mode = 
> > drm_mode_duplicate(connector->dev,
> > +                                                                   scan);
> > +                   }
> > +
> > +                   if (fixed_mode)
> > +                           intel_panel_init(&intel_connector->panel,
> > +                                            fixed_mode, NULL);
> > +           }
> 
> How are we supposed to get rid of a stale fixed_mode when some other
> display gets plugged in?
[Zhang, Xiong Y] Thanks so much for your good question. Yes, we should clear the
stale fitting_mode and fixed_mode when display is disconnect in 
intel_dp_hpd_pulse() function.
> 
> Also what would happen if the preferred mode can't be supported due to some
> source limitation?
[Zhang, Xiong Y] In this case, which mode should be selected as fixed_mode ?
As you said maybe kernel isn't the right place to do such decision.
> 
> In general I'm not entirely happy with having this kind of policy in the 
> kernel.
> I'd much prefer if we could get crtc size and border properties done so that
> userspace could set up the scaling any which way it chooses.
[Zhang, Xiong Y] Could you give more detail about your preference ?

thanks
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to