diff mbox

[v2,05/14] drm/sti: Try to fix up the tvout possible clones

Message ID 20180618123841.23731-1-ville.syrjala@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ville Syrjälä June 18, 2018, 12:38 p.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

The current possible_clones setup doesn't look sensible. I'm assuming
the 0 and 1 are supposed to refer to the indexes of the hdmi and hda
encoders? So it kinda looks like we want hda+hdmi cloning, but then
dvo also claims to be cloneable with hdmi, but hdmi won't recipricate.

Benjamin tells me all encoders should be cloneable with each other,
so let's fix up the masks to indicate that.

Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
Cc: Vincent Abriou <vincent.abriou@st.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/sti/sti_tvout.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

Comments

Benjamin Gaignard June 20, 2018, 9:02 a.m. UTC | #1
2018-06-18 14:38 GMT+02:00 Ville Syrjala <ville.syrjala@linux.intel.com>:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> The current possible_clones setup doesn't look sensible. I'm assuming
> the 0 and 1 are supposed to refer to the indexes of the hdmi and hda
> encoders? So it kinda looks like we want hda+hdmi cloning, but then
> dvo also claims to be cloneable with hdmi, but hdmi won't recipricate.
>
> Benjamin tells me all encoders should be cloneable with each other,
> so let's fix up the masks to indicate that.
>
> Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
> Cc: Vincent Abriou <vincent.abriou@st.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Acked-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>

Thanks

> ---
>  drivers/gpu/drm/sti/sti_tvout.c | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/sti/sti_tvout.c b/drivers/gpu/drm/sti/sti_tvout.c
> index 7d495307fe79..8bca519b3bfe 100644
> --- a/drivers/gpu/drm/sti/sti_tvout.c
> +++ b/drivers/gpu/drm/sti/sti_tvout.c
> @@ -668,7 +668,6 @@ sti_tvout_create_dvo_encoder(struct drm_device *dev,
>         drm_encoder = &encoder->encoder;
>
>         drm_encoder->possible_crtcs = ENCODER_CRTC_MASK;
> -       drm_encoder->possible_clones = 1 << 0;
>
>         drm_encoder_init(dev, drm_encoder,
>                          &sti_tvout_encoder_funcs, DRM_MODE_ENCODER_LVDS,
> @@ -721,7 +720,6 @@ static struct drm_encoder *sti_tvout_create_hda_encoder(struct drm_device *dev,
>         drm_encoder = &encoder->encoder;
>
>         drm_encoder->possible_crtcs = ENCODER_CRTC_MASK;
> -       drm_encoder->possible_clones = 1 << 0;
>
>         drm_encoder_init(dev, drm_encoder,
>                         &sti_tvout_encoder_funcs, DRM_MODE_ENCODER_DAC, NULL);
> @@ -770,7 +768,6 @@ static struct drm_encoder *sti_tvout_create_hdmi_encoder(struct drm_device *dev,
>         drm_encoder = &encoder->encoder;
>
>         drm_encoder->possible_crtcs = ENCODER_CRTC_MASK;
> -       drm_encoder->possible_clones = 1 << 1;
>
>         drm_encoder_init(dev, drm_encoder,
>                         &sti_tvout_encoder_funcs, DRM_MODE_ENCODER_TMDS, NULL);
> @@ -786,6 +783,13 @@ static void sti_tvout_create_encoders(struct drm_device *dev,
>         tvout->hdmi = sti_tvout_create_hdmi_encoder(dev, tvout);
>         tvout->hda = sti_tvout_create_hda_encoder(dev, tvout);
>         tvout->dvo = sti_tvout_create_dvo_encoder(dev, tvout);
> +
> +       tvout->hdmi->possible_clones = drm_encoder_mask(tvout->hdmi) |
> +               drm_encoder_mask(tvout->hda) | drm_encoder_mask(tvout->dvo);
> +       tvout->hda->possible_clones = drm_encoder_mask(tvout->hdmi) |
> +               drm_encoder_mask(tvout->hda) | drm_encoder_mask(tvout->dvo);
> +       tvout->dvo->possible_clones = drm_encoder_mask(tvout->hdmi) |
> +               drm_encoder_mask(tvout->hda) | drm_encoder_mask(tvout->dvo);
>  }
>
>  static void sti_tvout_destroy_encoders(struct sti_tvout *tvout)
> --
> 2.16.4
>
diff mbox

Patch

diff --git a/drivers/gpu/drm/sti/sti_tvout.c b/drivers/gpu/drm/sti/sti_tvout.c
index 7d495307fe79..8bca519b3bfe 100644
--- a/drivers/gpu/drm/sti/sti_tvout.c
+++ b/drivers/gpu/drm/sti/sti_tvout.c
@@ -668,7 +668,6 @@  sti_tvout_create_dvo_encoder(struct drm_device *dev,
 	drm_encoder = &encoder->encoder;
 
 	drm_encoder->possible_crtcs = ENCODER_CRTC_MASK;
-	drm_encoder->possible_clones = 1 << 0;
 
 	drm_encoder_init(dev, drm_encoder,
 			 &sti_tvout_encoder_funcs, DRM_MODE_ENCODER_LVDS,
@@ -721,7 +720,6 @@  static struct drm_encoder *sti_tvout_create_hda_encoder(struct drm_device *dev,
 	drm_encoder = &encoder->encoder;
 
 	drm_encoder->possible_crtcs = ENCODER_CRTC_MASK;
-	drm_encoder->possible_clones = 1 << 0;
 
 	drm_encoder_init(dev, drm_encoder,
 			&sti_tvout_encoder_funcs, DRM_MODE_ENCODER_DAC, NULL);
@@ -770,7 +768,6 @@  static struct drm_encoder *sti_tvout_create_hdmi_encoder(struct drm_device *dev,
 	drm_encoder = &encoder->encoder;
 
 	drm_encoder->possible_crtcs = ENCODER_CRTC_MASK;
-	drm_encoder->possible_clones = 1 << 1;
 
 	drm_encoder_init(dev, drm_encoder,
 			&sti_tvout_encoder_funcs, DRM_MODE_ENCODER_TMDS, NULL);
@@ -786,6 +783,13 @@  static void sti_tvout_create_encoders(struct drm_device *dev,
 	tvout->hdmi = sti_tvout_create_hdmi_encoder(dev, tvout);
 	tvout->hda = sti_tvout_create_hda_encoder(dev, tvout);
 	tvout->dvo = sti_tvout_create_dvo_encoder(dev, tvout);
+
+	tvout->hdmi->possible_clones = drm_encoder_mask(tvout->hdmi) |
+		drm_encoder_mask(tvout->hda) | drm_encoder_mask(tvout->dvo);
+	tvout->hda->possible_clones = drm_encoder_mask(tvout->hdmi) |
+		drm_encoder_mask(tvout->hda) | drm_encoder_mask(tvout->dvo);
+	tvout->dvo->possible_clones = drm_encoder_mask(tvout->hdmi) |
+		drm_encoder_mask(tvout->hda) | drm_encoder_mask(tvout->dvo);
 }
 
 static void sti_tvout_destroy_encoders(struct sti_tvout *tvout)