On Tue, 18 Nov 2014, Matt Roper <matthew.d.roper at intel.com> wrote: > From: Gustavo Padovan <gustavo.padovan at collabora.co.uk> > > We need to get hdisplay and vdisplay in a few places so create a > helper to make our job easier. > > v2 (by Matt): Use new stereo doubling function (suggested by Ville) > > Cc: dri-devel at lists.freedesktop.org > Suggested-by: Ville Syrjälä <ville.syrjala at linux.intel.com> > Signed-off-by: Gustavo Padovan <gustavo.padovan at collabora.co.uk> > Signed-off-by: Matt Roper <matthew.d.roper at intel.com> > --- > drivers/gpu/drm/drm_crtc.c | 22 ++++++++++++---------- > drivers/gpu/drm/i915/intel_display.c | 6 +++--- > include/drm/drm_crtc.h | 2 ++ > 3 files changed, 17 insertions(+), 13 deletions(-) > > diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c > index 56737e7..64ec23b 100644 > --- a/drivers/gpu/drm/drm_crtc.c > +++ b/drivers/gpu/drm/drm_crtc.c > @@ -2493,6 +2493,17 @@ int drm_mode_set_config_internal(struct drm_mode_set > *set) > } > EXPORT_SYMBOL(drm_mode_set_config_internal); > > +void drm_crtc_get_hv_timing(const struct drm_display_mode *mode, > + int *hdisplay, int *vdisplay) > +{ > + struct drm_display_mode adjusted = *mode;
I'd prefer using drm_mode_copy(). It doesn't matter here and now, but if it starts to matter in the future the problems will be hard to track. BR, Jani. > + > + drm_mode_stereo_double(&adjusted); > + *hdisplay = adjusted.crtc_hdisplay; > + *vdisplay = adjusted.crtc_vdisplay; > +} > +EXPORT_SYMBOL(drm_crtc_get_hv_timing); > + > /** > * drm_crtc_check_viewport - Checks that a framebuffer is big enough for the > * CRTC viewport > @@ -2510,16 +2521,7 @@ int drm_crtc_check_viewport(const struct drm_crtc > *crtc, > { > int hdisplay, vdisplay; > > - hdisplay = mode->hdisplay; > - vdisplay = mode->vdisplay; > - > - if (drm_mode_is_stereo(mode)) { > - struct drm_display_mode adjusted = *mode; > - > - drm_mode_set_crtcinfo(&adjusted, CRTC_STEREO_DOUBLE); > - hdisplay = adjusted.crtc_hdisplay; > - vdisplay = adjusted.crtc_vdisplay; > - } > + drm_crtc_get_hv_timing(mode, &hdisplay, &vdisplay); > > if (crtc->invert_dimensions) > swap(hdisplay, vdisplay); > diff --git a/drivers/gpu/drm/i915/intel_display.c > b/drivers/gpu/drm/i915/intel_display.c > index 320bf4c..a967623 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -10158,9 +10158,9 @@ intel_modeset_pipe_config(struct drm_crtc *crtc, > * computation to clearly distinguish it from the adjusted mode, which > * can be changed by the connectors in the below retry loop. > */ > - drm_mode_set_crtcinfo(&pipe_config->requested_mode, CRTC_STEREO_DOUBLE); > - pipe_config->pipe_src_w = pipe_config->requested_mode.crtc_hdisplay; > - pipe_config->pipe_src_h = pipe_config->requested_mode.crtc_vdisplay; > + drm_crtc_get_hv_timing(&pipe_config->requested_mode, > + &pipe_config->pipe_src_w, > + &pipe_config->pipe_src_h); > > encoder_retry: > /* Ensure the port clock defaults are reset when retrying. */ > diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h > index 7b28ab0..23236f6 100644 > --- a/include/drm/drm_crtc.h > +++ b/include/drm/drm_crtc.h > @@ -1138,6 +1138,8 @@ extern int drm_plane_init(struct drm_device *dev, > extern void drm_plane_cleanup(struct drm_plane *plane); > extern unsigned int drm_plane_index(struct drm_plane *plane); > extern void drm_plane_force_disable(struct drm_plane *plane); > +extern void drm_crtc_get_hv_timing(const struct drm_display_mode *mode, > + int *hdisplay, int *vdisplay); > extern int drm_crtc_check_viewport(const struct drm_crtc *crtc, > int x, int y, > const struct drm_display_mode *mode, > -- > 1.8.5.1 > > _______________________________________________ > dri-devel mailing list > dri-devel at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel -- Jani Nikula, Intel Open Source Technology Center