|
@@ -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)
|