Message ID | 1345403595-9678-49-git-send-email-daniel.vetter@ffwll.ch (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On Sun, 19 Aug 2012 21:13:05 +0200 Daniel Vetter <daniel.vetter@ffwll.ch> wrote: > The "is this encoder cloned" check will be reused by the lvds encoder, > hence exract it. > > v2: Be a bit more careful about that we need to check the new, staged > ouput configuration in the check_non_cloned helper ... > > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> > --- > drivers/gpu/drm/i915/intel_display.c | 22 ++++++++++++++++++++++ > drivers/gpu/drm/i915/intel_drv.h | 1 + > drivers/gpu/drm/i915/intel_tv.c | 7 ++----- > 3 files changed, 25 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index c7bd573..c59569e 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -6563,6 +6563,28 @@ static struct drm_crtc_helper_funcs intel_helper_funcs = { > .disable = intel_crtc_disable, > }; > > +bool intel_encoder_check_non_cloned(struct intel_encoder *encoder) > +{ > + struct intel_encoder *other_encoder; > + struct drm_crtc *crtc = &encoder->new_crtc->base; > + > + if (WARN_ON(!crtc)) > + return true; > + > + list_for_each_entry(other_encoder, > + &crtc->dev->mode_config.encoder_list, > + base.head) { > + > + if (&other_encoder->new_crtc->base != crtc || > + encoder == other_encoder) > + continue; > + else > + return false; > + } > + > + return true; > +} encoder_is_cloned() would make the callers more readable and avoid the double negative... Otherwise, Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
On Wed, Sep 05, 2012 at 11:02:15AM -0700, Jesse Barnes wrote: > On Sun, 19 Aug 2012 21:13:05 +0200 > Daniel Vetter <daniel.vetter@ffwll.ch> wrote: > > > The "is this encoder cloned" check will be reused by the lvds encoder, > > hence exract it. > > > > v2: Be a bit more careful about that we need to check the new, staged > > ouput configuration in the check_non_cloned helper ... > > > > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> > > --- > > drivers/gpu/drm/i915/intel_display.c | 22 ++++++++++++++++++++++ > > drivers/gpu/drm/i915/intel_drv.h | 1 + > > drivers/gpu/drm/i915/intel_tv.c | 7 ++----- > > 3 files changed, 25 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > > index c7bd573..c59569e 100644 > > --- a/drivers/gpu/drm/i915/intel_display.c > > +++ b/drivers/gpu/drm/i915/intel_display.c > > @@ -6563,6 +6563,28 @@ static struct drm_crtc_helper_funcs intel_helper_funcs = { > > .disable = intel_crtc_disable, > > }; > > > > +bool intel_encoder_check_non_cloned(struct intel_encoder *encoder) > > +{ > > + struct intel_encoder *other_encoder; > > + struct drm_crtc *crtc = &encoder->new_crtc->base; > > + > > + if (WARN_ON(!crtc)) > > + return true; > > + > > + list_for_each_entry(other_encoder, > > + &crtc->dev->mode_config.encoder_list, > > + base.head) { > > + > > + if (&other_encoder->new_crtc->base != crtc || > > + encoder == other_encoder) > > + continue; > > + else > > + return false; > > + } > > + > > + return true; > > +} > > encoder_is_cloned() would make the callers more readable and avoid the > double negative... Ok, got a bit bored and applied this bikeshed here, too. Won't bother with resending though. -Daniel
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index c7bd573..c59569e 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -6563,6 +6563,28 @@ static struct drm_crtc_helper_funcs intel_helper_funcs = { .disable = intel_crtc_disable, }; +bool intel_encoder_check_non_cloned(struct intel_encoder *encoder) +{ + struct intel_encoder *other_encoder; + struct drm_crtc *crtc = &encoder->new_crtc->base; + + if (WARN_ON(!crtc)) + return true; + + list_for_each_entry(other_encoder, + &crtc->dev->mode_config.encoder_list, + base.head) { + + if (&other_encoder->new_crtc->base != crtc || + encoder == other_encoder) + continue; + else + return false; + } + + return true; +} + static bool intel_encoder_crtc_ok(struct drm_encoder *encoder, struct drm_crtc *crtc) { diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index ae807af..4aaf75c 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -455,6 +455,7 @@ extern void intel_crtc_update_dpms(struct drm_crtc *crtc); extern void intel_encoder_disable(struct drm_encoder *encoder); extern void intel_encoder_destroy(struct drm_encoder *encoder); extern void intel_encoder_dpms(struct intel_encoder *encoder, int mode); +extern bool intel_encoder_check_non_cloned(struct intel_encoder *encoder); extern void intel_connector_dpms(struct drm_connector *, int mode); extern bool intel_connector_get_hw_state(struct intel_connector *connector); extern void intel_connector_check_state(struct intel_connector *); diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c index 98ad7fd..4def811 100644 --- a/drivers/gpu/drm/i915/intel_tv.c +++ b/drivers/gpu/drm/i915/intel_tv.c @@ -910,17 +910,14 @@ intel_tv_mode_fixup(struct drm_encoder *encoder, const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode) { - struct drm_device *dev = encoder->dev; struct intel_tv *intel_tv = enc_to_intel_tv(encoder); const struct tv_mode *tv_mode = intel_tv_mode_find(intel_tv); - struct intel_encoder *other_encoder; if (!tv_mode) return false; - for_each_encoder_on_crtc(dev, encoder->crtc, other_encoder) - if (&other_encoder->base != encoder) - return false; + if (!intel_encoder_check_non_cloned(&intel_tv->base)) + return false; adjusted_mode->clock = tv_mode->clock; return true;
The "is this encoder cloned" check will be reused by the lvds encoder, hence exract it. v2: Be a bit more careful about that we need to check the new, staged ouput configuration in the check_non_cloned helper ... Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> --- drivers/gpu/drm/i915/intel_display.c | 22 ++++++++++++++++++++++ drivers/gpu/drm/i915/intel_drv.h | 1 + drivers/gpu/drm/i915/intel_tv.c | 7 ++----- 3 files changed, 25 insertions(+), 5 deletions(-)