diff options
author | Vandana Kannan <vandana.kannan@intel.com> | 2014-06-11 01:16:48 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-07-23 01:05:24 -0400 |
commit | ff587e45a1a1690f5cd713a2782672c579460365 (patch) | |
tree | 60ae8b4f2ac76b957efcbb239b407034463e7136 | |
parent | 34638118f987c3f4136e442b65de22d73a0458cb (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.c | 33 | ||||
-rw-r--r-- | include/drm/drm_crtc.h | 2 | ||||
-rw-r--r-- | include/uapi/drm/drm_mode.h | 5 |
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 | ||
185 | static 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) | |||
1391 | EXPORT_SYMBOL(drm_mode_create_scaling_mode_property); | 1397 | EXPORT_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 | */ | ||
1409 | int 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 | } | ||
1424 | EXPORT_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); | |||
1023 | extern int drm_mode_create_tv_properties(struct drm_device *dev, int num_formats, | 1024 | extern int drm_mode_create_tv_properties(struct drm_device *dev, int num_formats, |
1024 | char *formats[]); | 1025 | char *formats[]); |
1025 | extern int drm_mode_create_scaling_mode_property(struct drm_device *dev); | 1026 | extern int drm_mode_create_scaling_mode_property(struct drm_device *dev); |
1027 | extern int drm_mode_create_aspect_ratio_property(struct drm_device *dev); | ||
1026 | extern int drm_mode_create_dirty_info_property(struct drm_device *dev); | 1028 | extern int drm_mode_create_dirty_info_property(struct drm_device *dev); |
1027 | 1029 | ||
1028 | extern int drm_mode_connector_attach_encoder(struct drm_connector *connector, | 1030 | extern 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 |