diff mbox

[v2,7/7] drm/i915: Add HDMI aspect ratio property for SDVO

Message ID 1443188370-2493-1-git-send-email-ville.syrjala@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ville Syrjälä Sept. 25, 2015, 1:39 p.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Handle the HDMI aspect ratio property the same way in the SDVO code
as we handle it in the HDMI code.

v2: Remove stray whitespace change

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/intel_drv.h   |  1 +
 drivers/gpu/drm/i915/intel_hdmi.c  |  9 ---------
 drivers/gpu/drm/i915/intel_modes.c |  9 +++++++++
 drivers/gpu/drm/i915/intel_sdvo.c  | 28 ++++++++++++++++++++++++++++
 4 files changed, 38 insertions(+), 9 deletions(-)

Comments

Kahola, Mika Sept. 28, 2015, 12:18 p.m. UTC | #1
Reviewed-by: Mika Kahola <mika.kahola@intel.com>

On Fri, 2015-09-25 at 16:39 +0300, ville.syrjala@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Handle the HDMI aspect ratio property the same way in the SDVO code
> as we handle it in the HDMI code.
> 
> v2: Remove stray whitespace change
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_drv.h   |  1 +
>  drivers/gpu/drm/i915/intel_hdmi.c  |  9 ---------
>  drivers/gpu/drm/i915/intel_modes.c |  9 +++++++++
>  drivers/gpu/drm/i915/intel_sdvo.c  | 28 ++++++++++++++++++++++++++++
>  4 files changed, 38 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index c98ed81..ed66a4f 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1300,6 +1300,7 @@ int intel_connector_update_modes(struct drm_connector *connector,
>  int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter);
>  void intel_attach_force_audio_property(struct drm_connector *connector);
>  void intel_attach_broadcast_rgb_property(struct drm_connector *connector);
> +void intel_attach_aspect_ratio_property(struct drm_connector *connector);
>  
> 
>  /* intel_overlay.c */
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index af231ed..3c5f2c9 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -2004,15 +2004,6 @@ static const struct drm_encoder_funcs intel_hdmi_enc_funcs = {
>  };
>  
>  static void
> -intel_attach_aspect_ratio_property(struct drm_connector *connector)
> -{
> -	if (!drm_mode_create_aspect_ratio_property(connector->dev))
> -		drm_object_attach_property(&connector->base,
> -			connector->dev->mode_config.aspect_ratio_property,
> -			DRM_MODE_PICTURE_ASPECT_NONE);
> -}
> -
> -static void
>  intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *connector)
>  {
>  	intel_attach_force_audio_property(connector);
> diff --git a/drivers/gpu/drm/i915/intel_modes.c b/drivers/gpu/drm/i915/intel_modes.c
> index 0e860f3..38a4c8c 100644
> --- a/drivers/gpu/drm/i915/intel_modes.c
> +++ b/drivers/gpu/drm/i915/intel_modes.c
> @@ -126,3 +126,12 @@ intel_attach_broadcast_rgb_property(struct drm_connector *connector)
>  
>  	drm_object_attach_property(&connector->base, prop, 0);
>  }
> +
> +void
> +intel_attach_aspect_ratio_property(struct drm_connector *connector)
> +{
> +	if (!drm_mode_create_aspect_ratio_property(connector->dev))
> +		drm_object_attach_property(&connector->base,
> +			connector->dev->mode_config.aspect_ratio_property,
> +			DRM_MODE_PICTURE_ASPECT_NONE);
> +}
> diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
> index 857b1bd..c42b636 100644
> --- a/drivers/gpu/drm/i915/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/intel_sdvo.c
> @@ -107,6 +107,11 @@ struct intel_sdvo {
>  	bool color_range_auto;
>  
>  	/**
> +	 * HDMI user specified aspect ratio
> +	 */
> +	enum hdmi_picture_aspect aspect_ratio;
> +
> +	/**
>  	 * This is set if we're going to treat the device as TV-out.
>  	 *
>  	 * While we have these nice friendly flags for output types that ought
> @@ -1181,6 +1186,10 @@ static bool intel_sdvo_compute_config(struct intel_encoder *encoder,
>  	if (intel_sdvo->is_tv)
>  		i9xx_adjust_sdvo_tv_clock(pipe_config);
>  
> +	/* Set user selected PAR to incoming mode's member */
> +	if (intel_sdvo->is_hdmi)
> +		adjusted_mode->picture_aspect_ratio = intel_sdvo->aspect_ratio;
> +
>  	return true;
>  }
>  
> @@ -2043,6 +2052,23 @@ intel_sdvo_set_property(struct drm_connector *connector,
>  		goto done;
>  	}
>  
> +	if (property == connector->dev->mode_config.aspect_ratio_property) {
> +		switch (val) {
> +		case DRM_MODE_PICTURE_ASPECT_NONE:
> +			intel_sdvo->aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
> +			break;
> +		case DRM_MODE_PICTURE_ASPECT_4_3:
> +			intel_sdvo->aspect_ratio = HDMI_PICTURE_ASPECT_4_3;
> +			break;
> +		case DRM_MODE_PICTURE_ASPECT_16_9:
> +			intel_sdvo->aspect_ratio = HDMI_PICTURE_ASPECT_16_9;
> +			break;
> +		default:
> +			return -EINVAL;
> +		}
> +		goto done;
> +	}
> +
>  #define CHECK_PROPERTY(name, NAME) \
>  	if (intel_sdvo_connector->name == property) { \
>  		if (intel_sdvo_connector->cur_##name == temp_value) return 0; \
> @@ -2382,6 +2408,8 @@ intel_sdvo_add_hdmi_properties(struct intel_sdvo *intel_sdvo,
>  		intel_attach_broadcast_rgb_property(&connector->base.base);
>  		intel_sdvo->color_range_auto = true;
>  	}
> +	intel_attach_aspect_ratio_property(&connector->base.base);
> +	intel_sdvo->aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
>  }
>  
>  static struct intel_sdvo_connector *intel_sdvo_connector_alloc(void)
Daniel Vetter Sept. 28, 2015, 1:27 p.m. UTC | #2
On Mon, Sep 28, 2015 at 03:18:10PM +0300, Mika Kahola wrote:
> Reviewed-by: Mika Kahola <mika.kahola@intel.com>
> 
> On Fri, 2015-09-25 at 16:39 +0300, ville.syrjala@linux.intel.com wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > 
> > Handle the HDMI aspect ratio property the same way in the SDVO code
> > as we handle it in the HDMI code.
> > 
> > v2: Remove stray whitespace change
> > 
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Merged the remaining patches from this series, thanks.
-Daniel

> > ---
> >  drivers/gpu/drm/i915/intel_drv.h   |  1 +
> >  drivers/gpu/drm/i915/intel_hdmi.c  |  9 ---------
> >  drivers/gpu/drm/i915/intel_modes.c |  9 +++++++++
> >  drivers/gpu/drm/i915/intel_sdvo.c  | 28 ++++++++++++++++++++++++++++
> >  4 files changed, 38 insertions(+), 9 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> > index c98ed81..ed66a4f 100644
> > --- a/drivers/gpu/drm/i915/intel_drv.h
> > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > @@ -1300,6 +1300,7 @@ int intel_connector_update_modes(struct drm_connector *connector,
> >  int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter);
> >  void intel_attach_force_audio_property(struct drm_connector *connector);
> >  void intel_attach_broadcast_rgb_property(struct drm_connector *connector);
> > +void intel_attach_aspect_ratio_property(struct drm_connector *connector);
> >  
> > 
> >  /* intel_overlay.c */
> > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> > index af231ed..3c5f2c9 100644
> > --- a/drivers/gpu/drm/i915/intel_hdmi.c
> > +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> > @@ -2004,15 +2004,6 @@ static const struct drm_encoder_funcs intel_hdmi_enc_funcs = {
> >  };
> >  
> >  static void
> > -intel_attach_aspect_ratio_property(struct drm_connector *connector)
> > -{
> > -	if (!drm_mode_create_aspect_ratio_property(connector->dev))
> > -		drm_object_attach_property(&connector->base,
> > -			connector->dev->mode_config.aspect_ratio_property,
> > -			DRM_MODE_PICTURE_ASPECT_NONE);
> > -}
> > -
> > -static void
> >  intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *connector)
> >  {
> >  	intel_attach_force_audio_property(connector);
> > diff --git a/drivers/gpu/drm/i915/intel_modes.c b/drivers/gpu/drm/i915/intel_modes.c
> > index 0e860f3..38a4c8c 100644
> > --- a/drivers/gpu/drm/i915/intel_modes.c
> > +++ b/drivers/gpu/drm/i915/intel_modes.c
> > @@ -126,3 +126,12 @@ intel_attach_broadcast_rgb_property(struct drm_connector *connector)
> >  
> >  	drm_object_attach_property(&connector->base, prop, 0);
> >  }
> > +
> > +void
> > +intel_attach_aspect_ratio_property(struct drm_connector *connector)
> > +{
> > +	if (!drm_mode_create_aspect_ratio_property(connector->dev))
> > +		drm_object_attach_property(&connector->base,
> > +			connector->dev->mode_config.aspect_ratio_property,
> > +			DRM_MODE_PICTURE_ASPECT_NONE);
> > +}
> > diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
> > index 857b1bd..c42b636 100644
> > --- a/drivers/gpu/drm/i915/intel_sdvo.c
> > +++ b/drivers/gpu/drm/i915/intel_sdvo.c
> > @@ -107,6 +107,11 @@ struct intel_sdvo {
> >  	bool color_range_auto;
> >  
> >  	/**
> > +	 * HDMI user specified aspect ratio
> > +	 */
> > +	enum hdmi_picture_aspect aspect_ratio;
> > +
> > +	/**
> >  	 * This is set if we're going to treat the device as TV-out.
> >  	 *
> >  	 * While we have these nice friendly flags for output types that ought
> > @@ -1181,6 +1186,10 @@ static bool intel_sdvo_compute_config(struct intel_encoder *encoder,
> >  	if (intel_sdvo->is_tv)
> >  		i9xx_adjust_sdvo_tv_clock(pipe_config);
> >  
> > +	/* Set user selected PAR to incoming mode's member */
> > +	if (intel_sdvo->is_hdmi)
> > +		adjusted_mode->picture_aspect_ratio = intel_sdvo->aspect_ratio;
> > +
> >  	return true;
> >  }
> >  
> > @@ -2043,6 +2052,23 @@ intel_sdvo_set_property(struct drm_connector *connector,
> >  		goto done;
> >  	}
> >  
> > +	if (property == connector->dev->mode_config.aspect_ratio_property) {
> > +		switch (val) {
> > +		case DRM_MODE_PICTURE_ASPECT_NONE:
> > +			intel_sdvo->aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
> > +			break;
> > +		case DRM_MODE_PICTURE_ASPECT_4_3:
> > +			intel_sdvo->aspect_ratio = HDMI_PICTURE_ASPECT_4_3;
> > +			break;
> > +		case DRM_MODE_PICTURE_ASPECT_16_9:
> > +			intel_sdvo->aspect_ratio = HDMI_PICTURE_ASPECT_16_9;
> > +			break;
> > +		default:
> > +			return -EINVAL;
> > +		}
> > +		goto done;
> > +	}
> > +
> >  #define CHECK_PROPERTY(name, NAME) \
> >  	if (intel_sdvo_connector->name == property) { \
> >  		if (intel_sdvo_connector->cur_##name == temp_value) return 0; \
> > @@ -2382,6 +2408,8 @@ intel_sdvo_add_hdmi_properties(struct intel_sdvo *intel_sdvo,
> >  		intel_attach_broadcast_rgb_property(&connector->base.base);
> >  		intel_sdvo->color_range_auto = true;
> >  	}
> > +	intel_attach_aspect_ratio_property(&connector->base.base);
> > +	intel_sdvo->aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
> >  }
> >  
> >  static struct intel_sdvo_connector *intel_sdvo_connector_alloc(void)
> 
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index c98ed81..ed66a4f 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1300,6 +1300,7 @@  int intel_connector_update_modes(struct drm_connector *connector,
 int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter);
 void intel_attach_force_audio_property(struct drm_connector *connector);
 void intel_attach_broadcast_rgb_property(struct drm_connector *connector);
+void intel_attach_aspect_ratio_property(struct drm_connector *connector);
 
 
 /* intel_overlay.c */
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index af231ed..3c5f2c9 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -2004,15 +2004,6 @@  static const struct drm_encoder_funcs intel_hdmi_enc_funcs = {
 };
 
 static void
-intel_attach_aspect_ratio_property(struct drm_connector *connector)
-{
-	if (!drm_mode_create_aspect_ratio_property(connector->dev))
-		drm_object_attach_property(&connector->base,
-			connector->dev->mode_config.aspect_ratio_property,
-			DRM_MODE_PICTURE_ASPECT_NONE);
-}
-
-static void
 intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *connector)
 {
 	intel_attach_force_audio_property(connector);
diff --git a/drivers/gpu/drm/i915/intel_modes.c b/drivers/gpu/drm/i915/intel_modes.c
index 0e860f3..38a4c8c 100644
--- a/drivers/gpu/drm/i915/intel_modes.c
+++ b/drivers/gpu/drm/i915/intel_modes.c
@@ -126,3 +126,12 @@  intel_attach_broadcast_rgb_property(struct drm_connector *connector)
 
 	drm_object_attach_property(&connector->base, prop, 0);
 }
+
+void
+intel_attach_aspect_ratio_property(struct drm_connector *connector)
+{
+	if (!drm_mode_create_aspect_ratio_property(connector->dev))
+		drm_object_attach_property(&connector->base,
+			connector->dev->mode_config.aspect_ratio_property,
+			DRM_MODE_PICTURE_ASPECT_NONE);
+}
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 857b1bd..c42b636 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -107,6 +107,11 @@  struct intel_sdvo {
 	bool color_range_auto;
 
 	/**
+	 * HDMI user specified aspect ratio
+	 */
+	enum hdmi_picture_aspect aspect_ratio;
+
+	/**
 	 * This is set if we're going to treat the device as TV-out.
 	 *
 	 * While we have these nice friendly flags for output types that ought
@@ -1181,6 +1186,10 @@  static bool intel_sdvo_compute_config(struct intel_encoder *encoder,
 	if (intel_sdvo->is_tv)
 		i9xx_adjust_sdvo_tv_clock(pipe_config);
 
+	/* Set user selected PAR to incoming mode's member */
+	if (intel_sdvo->is_hdmi)
+		adjusted_mode->picture_aspect_ratio = intel_sdvo->aspect_ratio;
+
 	return true;
 }
 
@@ -2043,6 +2052,23 @@  intel_sdvo_set_property(struct drm_connector *connector,
 		goto done;
 	}
 
+	if (property == connector->dev->mode_config.aspect_ratio_property) {
+		switch (val) {
+		case DRM_MODE_PICTURE_ASPECT_NONE:
+			intel_sdvo->aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
+			break;
+		case DRM_MODE_PICTURE_ASPECT_4_3:
+			intel_sdvo->aspect_ratio = HDMI_PICTURE_ASPECT_4_3;
+			break;
+		case DRM_MODE_PICTURE_ASPECT_16_9:
+			intel_sdvo->aspect_ratio = HDMI_PICTURE_ASPECT_16_9;
+			break;
+		default:
+			return -EINVAL;
+		}
+		goto done;
+	}
+
 #define CHECK_PROPERTY(name, NAME) \
 	if (intel_sdvo_connector->name == property) { \
 		if (intel_sdvo_connector->cur_##name == temp_value) return 0; \
@@ -2382,6 +2408,8 @@  intel_sdvo_add_hdmi_properties(struct intel_sdvo *intel_sdvo,
 		intel_attach_broadcast_rgb_property(&connector->base.base);
 		intel_sdvo->color_range_auto = true;
 	}
+	intel_attach_aspect_ratio_property(&connector->base.base);
+	intel_sdvo->aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
 }
 
 static struct intel_sdvo_connector *intel_sdvo_connector_alloc(void)