diff mbox

[48/58] drm/i915: use staged outuput config in tv->mode_fixup

Message ID 1345403595-9678-49-git-send-email-daniel.vetter@ffwll.ch (mailing list archive)
State Accepted
Headers show

Commit Message

Daniel Vetter Aug. 19, 2012, 7:13 p.m. UTC
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(-)

Comments

Jesse Barnes Sept. 5, 2012, 6:02 p.m. UTC | #1
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>
Daniel Vetter Sept. 6, 2012, 7:30 a.m. UTC | #2
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 mbox

Patch

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;