On Thu, Jul 1, 2010 at 2:49 AM, Ben Skeggs <skeggsb at gmail.com> wrote: > From: Ben Skeggs <bskeggs at redhat.com> > > Original behaviour will be preserved for drivers that don't implement > disable() hooks for an encoder. > > Signed-off-by: Ben Skeggs <bskeggs at redhat.com>
Reviewed-by: Alex Deucher <alexdeucher at gmail.com> > --- > ?drivers/gpu/drm/drm_crtc_helper.c | ? 22 ++++++++++++++-------- > ?1 files changed, 14 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/drm_crtc_helper.c > b/drivers/gpu/drm/drm_crtc_helper.c > index 9b2a541..1eaa315 100644 > --- a/drivers/gpu/drm/drm_crtc_helper.c > +++ b/drivers/gpu/drm/drm_crtc_helper.c > @@ -201,6 +201,17 @@ bool drm_helper_crtc_in_use(struct drm_crtc *crtc) > ?} > ?EXPORT_SYMBOL(drm_helper_crtc_in_use); > > +static void > +drm_encoder_disable(struct drm_encoder *encoder) > +{ > + ? ? ? struct drm_encoder_helper_funcs *encoder_funcs = > encoder->helper_private; > + > + ? ? ? if (encoder_funcs->disable) > + ? ? ? ? ? ? ? (*encoder_funcs->disable)(encoder); > + ? ? ? else > + ? ? ? ? ? ? ? (*encoder_funcs->dpms)(encoder, DRM_MODE_DPMS_OFF); > +} > + > ?/** > ?* drm_helper_disable_unused_functions - disable unused objects > ?* @dev: DRM device > @@ -215,7 +226,6 @@ void drm_helper_disable_unused_functions(struct > drm_device *dev) > ?{ > ? ? ? ?struct drm_encoder *encoder; > ? ? ? ?struct drm_connector *connector; > - ? ? ? struct drm_encoder_helper_funcs *encoder_funcs; > ? ? ? ?struct drm_crtc *crtc; > > ? ? ? ?list_for_each_entry(connector, &dev->mode_config.connector_list, head) > { > @@ -226,12 +236,8 @@ void drm_helper_disable_unused_functions(struct > drm_device *dev) > ? ? ? ?} > > ? ? ? ?list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { > - ? ? ? ? ? ? ? encoder_funcs = encoder->helper_private; > ? ? ? ? ? ? ? ?if (!drm_helper_encoder_in_use(encoder)) { > - ? ? ? ? ? ? ? ? ? ? ? if (encoder_funcs->disable) > - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (*encoder_funcs->disable)(encoder); > - ? ? ? ? ? ? ? ? ? ? ? else > - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (*encoder_funcs->dpms)(encoder, > DRM_MODE_DPMS_OFF); > + ? ? ? ? ? ? ? ? ? ? ? drm_encoder_disable(encoder); > ? ? ? ? ? ? ? ? ? ? ? ?/* disconnector encoder from any connector */ > ? ? ? ? ? ? ? ? ? ? ? ?encoder->crtc = NULL; > ? ? ? ? ? ? ? ?} > @@ -292,11 +298,11 @@ drm_crtc_prepare_encoders(struct drm_device *dev) > ? ? ? ? ? ? ? ?encoder_funcs = encoder->helper_private; > ? ? ? ? ? ? ? ?/* Disable unused encoders */ > ? ? ? ? ? ? ? ?if (encoder->crtc == NULL) > - ? ? ? ? ? ? ? ? ? ? ? (*encoder_funcs->dpms)(encoder, DRM_MODE_DPMS_OFF); > + ? ? ? ? ? ? ? ? ? ? ? drm_encoder_disable(encoder); > ? ? ? ? ? ? ? ?/* Disable encoders whose CRTC is about to change */ > ? ? ? ? ? ? ? ?if (encoder_funcs->get_crtc && > ? ? ? ? ? ? ? ? ? ?encoder->crtc != (*encoder_funcs->get_crtc)(encoder)) > - ? ? ? ? ? ? ? ? ? ? ? (*encoder_funcs->dpms)(encoder, DRM_MODE_DPMS_OFF); > + ? ? ? ? ? ? ? ? ? ? ? drm_encoder_disable(encoder); > ? ? ? ?} > ?} > > -- > 1.7.1 > > _______________________________________________ > dri-devel mailing list > dri-devel at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel >