Added a property to enable user space to set aspect ratio. This patch contains declaration of the property and code to create the property.
Signed-off-by: Vandana Kannan vandana.kannan@intel.com Cc: dri-devel@lists.freedesktop.org --- drivers/gpu/drm/drm_crtc.c | 31 +++++++++++++++++++++++++++++++ include/drm/drm_crtc.h | 2 ++ 2 files changed, 33 insertions(+)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index d8b7099..6cd34ad 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -139,6 +139,12 @@ static const struct drm_prop_enum_list drm_scaling_mode_enum_list[] = { DRM_MODE_SCALE_ASPECT, "Full aspect" }, };
+static const struct drm_prop_enum_list drm_aspect_ratio_enum_list[] = { + { HDMI_PICTURE_ASPECT_NONE, "Automatic" }, + { HDMI_PICTURE_ASPECT_4_3, "4:3" }, + { HDMI_PICTURE_ASPECT_16_9, "16:9" }, +}; + /* * Non-global properties, but "required" for certain connectors. */ @@ -1334,6 +1340,31 @@ int drm_mode_create_scaling_mode_property(struct drm_device *dev) EXPORT_SYMBOL(drm_mode_create_scaling_mode_property);
/** + * drm_mode_create_aspect_ratio_property - create aspect ratio property + * @dev: DRM device + * + * Called by a driver the first time it's needed, must be attached to desired + * connectors. + */ +int drm_mode_create_aspect_ratio_property(struct drm_device *dev) +{ + struct drm_property *aspect_ratio; + + if (dev->mode_config.aspect_ratio_property) + return 0; + + aspect_ratio = + drm_property_create_enum(dev, 0, "aspect ratio", + drm_aspect_ratio_enum_list, + ARRAY_SIZE(drm_aspect_ratio_enum_list)); + + dev->mode_config.aspect_ratio_property = aspect_ratio; + + return 0; +} +EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property); + +/** * drm_mode_create_dirty_property - create dirty property * @dev: DRM device * diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index c061bb3..99bb6ed 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -797,6 +797,7 @@ struct drm_mode_config {
/* Optional properties */ struct drm_property *scaling_mode_property; + struct drm_property *aspect_ratio_property; struct drm_property *dirty_info_property;
/* dumb ioctl parameters */ @@ -966,6 +967,7 @@ extern int drm_mode_create_dvi_i_properties(struct drm_device *dev); extern int drm_mode_create_tv_properties(struct drm_device *dev, int num_formats, char *formats[]); extern int drm_mode_create_scaling_mode_property(struct drm_device *dev); +extern int drm_mode_create_aspect_ratio_property(struct drm_device *dev); extern int drm_mode_create_dirty_info_property(struct drm_device *dev); extern const char *drm_get_encoder_name(const struct drm_encoder *encoder);
On Apr-07-2014 3:33 PM, Kannan, Vandana wrote:
Added a property to enable user space to set aspect ratio. This patch contains declaration of the property and code to create the property.
Signed-off-by: Vandana Kannan vandana.kannan@intel.com Cc: dri-devel@lists.freedesktop.org
This patch series is being submitted as discussed in http://lists.freedesktop.org/archives/dri-devel/2014-April/056593.html
-Vandana
drivers/gpu/drm/drm_crtc.c | 31 +++++++++++++++++++++++++++++++ include/drm/drm_crtc.h | 2 ++ 2 files changed, 33 insertions(+)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index d8b7099..6cd34ad 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -139,6 +139,12 @@ static const struct drm_prop_enum_list drm_scaling_mode_enum_list[] = { DRM_MODE_SCALE_ASPECT, "Full aspect" }, };
+static const struct drm_prop_enum_list drm_aspect_ratio_enum_list[] = {
- { HDMI_PICTURE_ASPECT_NONE, "Automatic" },
- { HDMI_PICTURE_ASPECT_4_3, "4:3" },
- { HDMI_PICTURE_ASPECT_16_9, "16:9" },
+};
/*
- Non-global properties, but "required" for certain connectors.
*/ @@ -1334,6 +1340,31 @@ int drm_mode_create_scaling_mode_property(struct drm_device *dev) EXPORT_SYMBOL(drm_mode_create_scaling_mode_property);
/**
- drm_mode_create_aspect_ratio_property - create aspect ratio property
- @dev: DRM device
- Called by a driver the first time it's needed, must be attached to desired
- connectors.
- */
+int drm_mode_create_aspect_ratio_property(struct drm_device *dev) +{
- struct drm_property *aspect_ratio;
- if (dev->mode_config.aspect_ratio_property)
return 0;
- aspect_ratio =
drm_property_create_enum(dev, 0, "aspect ratio",
drm_aspect_ratio_enum_list,
ARRAY_SIZE(drm_aspect_ratio_enum_list));
- dev->mode_config.aspect_ratio_property = aspect_ratio;
- return 0;
+} +EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property);
+/**
- drm_mode_create_dirty_property - create dirty property
- @dev: DRM device
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index c061bb3..99bb6ed 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -797,6 +797,7 @@ struct drm_mode_config {
/* Optional properties */ struct drm_property *scaling_mode_property;
struct drm_property *aspect_ratio_property; struct drm_property *dirty_info_property;
/* dumb ioctl parameters */
@@ -966,6 +967,7 @@ extern int drm_mode_create_dvi_i_properties(struct drm_device *dev); extern int drm_mode_create_tv_properties(struct drm_device *dev, int num_formats, char *formats[]); extern int drm_mode_create_scaling_mode_property(struct drm_device *dev); +extern int drm_mode_create_aspect_ratio_property(struct drm_device *dev); extern int drm_mode_create_dirty_info_property(struct drm_device *dev); extern const char *drm_get_encoder_name(const struct drm_encoder *encoder);
On Apr-07-2014 3:24 PM, Vandana Kannan wrote:
On Apr-07-2014 3:33 PM, Kannan, Vandana wrote:
Added a property to enable user space to set aspect ratio. This patch contains declaration of the property and code to create the property.
Signed-off-by: Vandana Kannan vandana.kannan@intel.com Cc: dri-devel@lists.freedesktop.org
This patch series is being submitted as discussed in http://lists.freedesktop.org/archives/dri-devel/2014-April/056593.html
-Vandana
Please help review this patch series to enable user space to set aspect ratio for AVI infoframe.
http://lists.freedesktop.org/archives/intel-gfx/2014-April/043226.html http://lists.freedesktop.org/archives/intel-gfx/2014-April/043228.html http://lists.freedesktop.org/archives/intel-gfx/2014-April/043227.html
-Vandana
drivers/gpu/drm/drm_crtc.c | 31 +++++++++++++++++++++++++++++++ include/drm/drm_crtc.h | 2 ++ 2 files changed, 33 insertions(+)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index d8b7099..6cd34ad 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -139,6 +139,12 @@ static const struct drm_prop_enum_list drm_scaling_mode_enum_list[] = { DRM_MODE_SCALE_ASPECT, "Full aspect" }, };
+static const struct drm_prop_enum_list drm_aspect_ratio_enum_list[] = {
- { HDMI_PICTURE_ASPECT_NONE, "Automatic" },
- { HDMI_PICTURE_ASPECT_4_3, "4:3" },
- { HDMI_PICTURE_ASPECT_16_9, "16:9" },
+};
/*
- Non-global properties, but "required" for certain connectors.
*/ @@ -1334,6 +1340,31 @@ int drm_mode_create_scaling_mode_property(struct drm_device *dev) EXPORT_SYMBOL(drm_mode_create_scaling_mode_property);
/**
- drm_mode_create_aspect_ratio_property - create aspect ratio property
- @dev: DRM device
- Called by a driver the first time it's needed, must be attached to desired
- connectors.
- */
+int drm_mode_create_aspect_ratio_property(struct drm_device *dev) +{
- struct drm_property *aspect_ratio;
- if (dev->mode_config.aspect_ratio_property)
return 0;
- aspect_ratio =
drm_property_create_enum(dev, 0, "aspect ratio",
drm_aspect_ratio_enum_list,
ARRAY_SIZE(drm_aspect_ratio_enum_list));
- dev->mode_config.aspect_ratio_property = aspect_ratio;
- return 0;
+} +EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property);
+/**
- drm_mode_create_dirty_property - create dirty property
- @dev: DRM device
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index c061bb3..99bb6ed 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -797,6 +797,7 @@ struct drm_mode_config {
/* Optional properties */ struct drm_property *scaling_mode_property;
struct drm_property *aspect_ratio_property; struct drm_property *dirty_info_property;
/* dumb ioctl parameters */
@@ -966,6 +967,7 @@ extern int drm_mode_create_dvi_i_properties(struct drm_device *dev); extern int drm_mode_create_tv_properties(struct drm_device *dev, int num_formats, char *formats[]); extern int drm_mode_create_scaling_mode_property(struct drm_device *dev); +extern int drm_mode_create_aspect_ratio_property(struct drm_device *dev); extern int drm_mode_create_dirty_info_property(struct drm_device *dev); extern const char *drm_get_encoder_name(const struct drm_encoder *encoder);
dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel
In case user has specified an input for aspect ratio through the property, then the user space value for PAR would take preference over the value from CEA mode list.
Signed-off-by: Vandana Kannan vandana.kannan@intel.com Cc: dri-devel@lists.freedesktop.org --- drivers/gpu/drm/drm_edid.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index b8d6c51..62680e7 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -3630,8 +3630,13 @@ drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame,
frame->picture_aspect = HDMI_PICTURE_ASPECT_NONE;
- /* Populate picture aspect ratio from CEA mode list */ - if (frame->video_code > 0) + /* Populate picture aspect ratio from either CEA mode list or + * user input + */ + if (mode->picture_aspect_ratio == HDMI_PICTURE_ASPECT_4_3 || + mode->picture_aspect_ratio == HDMI_PICTURE_ASPECT_16_9) + frame->picture_aspect = mode->picture_aspect_ratio; + else if (frame->video_code > 0) frame->picture_aspect = drm_get_cea_aspect_ratio( frame->video_code);
dri-devel@lists.freedesktop.org