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 Reviewed-by: Shashank Sharma <shashank.sharma@intel.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/1525777785-9740-7-git-send-email-ankit.k.nautiyal@intel.com
This commit is contained in:
parent
bfe2e2c956
commit
7595bda2fb
|
@ -324,6 +324,15 @@ drm_setclientcap(struct drm_device *dev, void *data, struct drm_file *file_priv)
|
|||
return -EINVAL;
|
||||
file_priv->atomic = req->value;
|
||||
file_priv->universal_planes = req->value;
|
||||
/*
|
||||
* No atomic user-space blows up on aspect ratio mode bits.
|
||||
*/
|
||||
file_priv->aspect_ratio_allowed = req->value;
|
||||
break;
|
||||
case DRM_CLIENT_CAP_ASPECT_RATIO:
|
||||
if (req->value > 1)
|
||||
return -EINVAL;
|
||||
file_priv->aspect_ratio_allowed = req->value;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
|
|
@ -180,6 +180,14 @@ struct drm_file {
|
|||
/** @atomic: True if client understands atomic properties. */
|
||||
unsigned atomic:1;
|
||||
|
||||
/**
|
||||
* @aspect_ratio_allowed:
|
||||
*
|
||||
* True, if client can handle picture aspect ratios, and has requested
|
||||
* to pass this information along with the mode.
|
||||
*/
|
||||
unsigned aspect_ratio_allowed:1;
|
||||
|
||||
/**
|
||||
* @is_master:
|
||||
*
|
||||
|
|
|
@ -680,6 +680,13 @@ struct drm_get_cap {
|
|||
*/
|
||||
#define DRM_CLIENT_CAP_ATOMIC 3
|
||||
|
||||
/**
|
||||
* DRM_CLIENT_CAP_ASPECT_RATIO
|
||||
*
|
||||
* If set to 1, the DRM core will provide aspect ratio information in modes.
|
||||
*/
|
||||
#define DRM_CLIENT_CAP_ASPECT_RATIO 4
|
||||
|
||||
/** DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */
|
||||
struct drm_set_client_cap {
|
||||
__u64 capability;
|
||||
|
|
Loading…
Reference in a new issue