History

drm: Add DRM client cap for aspect-ratio

To enable aspect-ratio support in DRM, blindly exposing the aspect ratio information along with mode, can break things in existing non-atomic user-spaces which have no intention or support to use this aspect ratio information. To avoid this, a new drm client cap is required to enable a non-atomic user-space to advertise if it supports modes with aspect-ratio. Based on this cap value, the kernel will take a call on exposing the aspect ratio info in modes or not. This patch adds the client cap for aspect-ratio. Since no atomic-userspaces blow up on receiving aspect-ratio information, the client cap for aspect-ratio is always enabled for atomic clients. Cc: Ville Syrjala <ville.syrjala@linux.intel.com> Cc: Shashank Sharma <shashank.sharma@intel.com> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com> V3: rebase V4: As suggested by Marteen Lankhorst modified the commit message explaining the need to use the DRM cap for aspect-ratio. Also, tweaked the comment lines in the code for better understanding and clarity, as recommended by Shashank Sharma. V5: rebase V6: rebase V7: rebase V8: rebase V9: rebase V10: rebase V11: rebase V12: As suggested by Daniel Vetter and Ville Syrjala, always enable aspect-ratio client cap for atomic userspaces, if no atomic userspace breaks on aspect-ratio bits. V13: rebase V14: rebase

Ankit Nautiyal committed 8 years ago

Commit 7595bda1 parent bfe2e2c3 files · +24 −0Browse files

Unified · Split

3 files
  1. drivers/gpu/drm/drm_ioctl.c +9 −0
  2. include/drm/drm_file.h +8 −0
  3. include/uapi/drm/drm.h +7 −0
drivers/gpu/drm/drm_ioctl.c+9−0
@@ -324,6 +324,15 @@ drm_setclientcap(struct drm_device *dev, void *data, struct drm_file *file_priv) · 323 unmodified lines
324 return -EINVAL;324 return -EINVAL;
325 file_priv->atomic = req->value;325 file_priv->atomic = req->value;
326 file_priv->universal_planes = req->value;326 file_priv->universal_planes = req->value;
327 /*
328 * No atomic user-space blows up on aspect ratio mode bits.
329 */
330 file_priv->aspect_ratio_allowed = req->value;
331 break;
332 case DRM_CLIENT_CAP_ASPECT_RATIO:
333 if (req->value > 1)
334 return -EINVAL;
335 file_priv->aspect_ratio_allowed = req->value;
327 break;336 break;
328 default:337 default:
329 return -EINVAL;338 return -EINVAL;
include/drm/drm_file.h+8−0
@@ -180,6 +180,14 @@ struct drm_file { · 179 unmodified lines
180 /** @atomic: True if client understands atomic properties. */180 /** @atomic: True if client understands atomic properties. */
181 unsigned atomic:1;181 unsigned atomic:1;
182 182
183 /**
184 * @aspect_ratio_allowed:
185 *
186 * True, if client can handle picture aspect ratios, and has requested
187 * to pass this information along with the mode.
188 */
189 unsigned aspect_ratio_allowed:1;
190
183 /**191 /**
184 * @is_master:192 * @is_master:
185 *193 *
include/uapi/drm/drm.h+7−0
@@ -680,6 +680,13 @@ struct drm_get_cap { · 679 unmodified lines
680 */680 */
681#define DRM_CLIENT_CAP_ATOMIC 3681#define DRM_CLIENT_CAP_ATOMIC 3
682 682
683/**
684 * DRM_CLIENT_CAP_ASPECT_RATIO
685 *
686 * If set to 1, the DRM core will provide aspect ratio information in modes.
687 */
688#define DRM_CLIENT_CAP_ASPECT_RATIO 4
689
683/** DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */690/** DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */
684struct drm_set_client_cap {691struct drm_set_client_cap {
685 __u64 capability;692 __u64 capability;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t