drm/i915: Add HDMI aspect ratio property for SDVO
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 25 Sep 2015 13:39:30 +0000 (16:39 +0300)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 30 Sep 2015 08:20:12 +0000 (10:20 +0200)
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>
Reviewed-by: Mika Kahola <mika.kahola@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_drv.h
drivers/gpu/drm/i915/intel_hdmi.c
drivers/gpu/drm/i915/intel_modes.c
drivers/gpu/drm/i915/intel_sdvo.c

index c98ed81c3a2e20425a503eb8bce24044f35446f5..ed66a4f26dbd035eba05ab43b51b4a82910e0c37 100644 (file)
@@ -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 */
index af231ede477673efbe4f354be906ef36be90fa6c..3c5f2c92218096ca2ef58c774b63717f31814525 100644 (file)
@@ -2003,15 +2003,6 @@ static const struct drm_encoder_funcs intel_hdmi_enc_funcs = {
        .destroy = intel_encoder_destroy,
 };
 
-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)
 {
index 0e860f39933d8581cce867d8a3eaa8d955edc4a9..38a4c8ce7e63a5da4506094d682ea06310cc9de7 100644 (file)
@@ -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);
+}
index 857b1bd7115657ac582645e192a37e0862654a42..c42b636c20877d0f37031e42864b9cf30da18fbe 100644 (file)
@@ -106,6 +106,11 @@ struct intel_sdvo {
        uint32_t color_range;
        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.
         *
@@ -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)