aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVandana Kannan <vandana.kannan@intel.com>2014-06-11 01:16:48 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-07-23 01:05:24 -0400
commitff587e45a1a1690f5cd713a2782672c579460365 (patch)
tree60ae8b4f2ac76b957efcbb239b407034463e7136
parent34638118f987c3f4136e442b65de22d73a0458cb (diff)
drm/crtc: Add property for aspect ratio
Added a property to enable user space to set aspect ratio. This patch contains declaration of the property and code to create the property. v2: Thierry's review comments. - Made aspect ratio enum generic instead of HDMI/CEA specfic - Removed usage of temporary aspect_ratio variable v3: Thierry's review comments. - Fixed indentation v4: Thierry's review comments. - Return ENOMEM when property creation fails Signed-off-by: Vandana Kannan <vandana.kannan@intel.com> Cc: Thierry Reding <thierry.reding@gmail.com> Reviewed-by: Thierry Reding <treding@nvidia.com> Acked-by: Dave Airlie <airlied@gmail.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/drm_crtc.c33
-rw-r--r--include/drm/drm_crtc.h2
-rw-r--r--include/uapi/drm/drm_mode.h5
3 files changed, 40 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 89bab66558ef..f0a777747907 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -182,6 +182,12 @@ static const struct drm_prop_enum_list drm_scaling_mode_enum_list[] =
182 { DRM_MODE_SCALE_ASPECT, "Full aspect" }, 182 { DRM_MODE_SCALE_ASPECT, "Full aspect" },
183}; 183};
184 184
185static const struct drm_prop_enum_list drm_aspect_ratio_enum_list[] = {
186 { DRM_MODE_PICTURE_ASPECT_NONE, "Automatic" },
187 { DRM_MODE_PICTURE_ASPECT_4_3, "4:3" },
188 { DRM_MODE_PICTURE_ASPECT_16_9, "16:9" },
189};
190
185/* 191/*
186 * Non-global properties, but "required" for certain connectors. 192 * Non-global properties, but "required" for certain connectors.
187 */ 193 */
@@ -1391,6 +1397,33 @@ int drm_mode_create_scaling_mode_property(struct drm_device *dev)
1391EXPORT_SYMBOL(drm_mode_create_scaling_mode_property); 1397EXPORT_SYMBOL(drm_mode_create_scaling_mode_property);
1392 1398
1393/** 1399/**
1400 * drm_mode_create_aspect_ratio_property - create aspect ratio property
1401 * @dev: DRM device
1402 *
1403 * Called by a driver the first time it's needed, must be attached to desired
1404 * connectors.
1405 *
1406 * Returns:
1407 * Zero on success, errno on failure.
1408 */
1409int drm_mode_create_aspect_ratio_property(struct drm_device *dev)
1410{
1411 if (dev->mode_config.aspect_ratio_property)
1412 return 0;
1413
1414 dev->mode_config.aspect_ratio_property =
1415 drm_property_create_enum(dev, 0, "aspect ratio",
1416 drm_aspect_ratio_enum_list,
1417 ARRAY_SIZE(drm_aspect_ratio_enum_list));
1418
1419 if (dev->mode_config.aspect_ratio_property == NULL)
1420 return -ENOMEM;
1421
1422 return 0;
1423}
1424EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property);
1425
1426/**
1394 * drm_mode_create_dirty_property - create dirty property 1427 * drm_mode_create_dirty_property - create dirty property
1395 * @dev: DRM device 1428 * @dev: DRM device
1396 * 1429 *
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 08ed55e02762..be7114e76d1b 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -835,6 +835,7 @@ struct drm_mode_config {
835 835
836 /* Optional properties */ 836 /* Optional properties */
837 struct drm_property *scaling_mode_property; 837 struct drm_property *scaling_mode_property;
838 struct drm_property *aspect_ratio_property;
838 struct drm_property *dirty_info_property; 839 struct drm_property *dirty_info_property;
839 840
840 /* dumb ioctl parameters */ 841 /* dumb ioctl parameters */
@@ -1023,6 +1024,7 @@ extern int drm_mode_create_dvi_i_properties(struct drm_device *dev);
1023extern int drm_mode_create_tv_properties(struct drm_device *dev, int num_formats, 1024extern int drm_mode_create_tv_properties(struct drm_device *dev, int num_formats,
1024 char *formats[]); 1025 char *formats[]);
1025extern int drm_mode_create_scaling_mode_property(struct drm_device *dev); 1026extern int drm_mode_create_scaling_mode_property(struct drm_device *dev);
1027extern int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
1026extern int drm_mode_create_dirty_info_property(struct drm_device *dev); 1028extern int drm_mode_create_dirty_info_property(struct drm_device *dev);
1027 1029
1028extern int drm_mode_connector_attach_encoder(struct drm_connector *connector, 1030extern int drm_mode_connector_attach_encoder(struct drm_connector *connector,
diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
index def54f9e07ca..a0db2d4aa5f0 100644
--- a/include/uapi/drm/drm_mode.h
+++ b/include/uapi/drm/drm_mode.h
@@ -88,6 +88,11 @@
88#define DRM_MODE_SCALE_CENTER 2 /* Centered, no scaling */ 88#define DRM_MODE_SCALE_CENTER 2 /* Centered, no scaling */
89#define DRM_MODE_SCALE_ASPECT 3 /* Full screen, preserve aspect */ 89#define DRM_MODE_SCALE_ASPECT 3 /* Full screen, preserve aspect */
90 90
91/* Picture aspect ratio options */
92#define DRM_MODE_PICTURE_ASPECT_NONE 0
93#define DRM_MODE_PICTURE_ASPECT_4_3 1
94#define DRM_MODE_PICTURE_ASPECT_16_9 2
95
91/* Dithering mode options */ 96/* Dithering mode options */
92#define DRM_MODE_DITHERING_OFF 0 97#define DRM_MODE_DITHERING_OFF 0
93#define DRM_MODE_DITHERING_ON 1 98#define DRM_MODE_DITHERING_ON 1