drm: Add and handle new aspect ratios in DRM layer
authorShashank Sharma <shashank.sharma@intel.com>
Tue, 8 May 2018 11:09:45 +0000 (16:39 +0530)
committerMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Fri, 11 May 2018 07:23:55 +0000 (09:23 +0200)
HDMI 2.0/CEA-861-F introduces two new aspect ratios:
- 64:27
- 256:135

This patch:
-  Adds new DRM flags for to represent these new aspect ratios.
-  Adds new cases to handle these aspect ratios while converting
from user->kernel mode or vise versa.

This patch was once reviewed and merged, and later reverted due
to lack of DRM client protection, while adding aspect ratio bits
in user modes. This is a re-spin of the series, with DRM client
cap protection.

The previous series can be found here:
https://pw-emeril.freedesktop.org/series/10850/

Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
Reviewed-by: Sean Paul <seanpaul@chromium.org> (V2)
Reviewed-by: Jose Abreu <Jose.Abreu@synopsys.com> (V2)
Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
Cc: Sean Paul <seanpaul@chromium.org>
Cc: Jose Abreu <Jose.Abreu@synopsys.com>
Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
V3: rebase
V4: rebase
V5: corrected the macro name for an aspect ratio, in a switch case.
V6: rebase
V7: rebase
V8: rebase
V9: rebase
V10: rebase
V11: rebase
V12: rebase
V13: rebase
V14: rebase

Acked-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-11-git-send-email-ankit.k.nautiyal@intel.com
drivers/gpu/drm/drm_modes.c
include/uapi/drm/drm_mode.h

index 7dfabdd6bcc8dceb1f9825586b534c0c6bee5ab7..c78ca0e84ffdc312860dc49805cc3b8e95bacce7 100644 (file)
@@ -1656,6 +1656,12 @@ void drm_mode_convert_to_umode(struct drm_mode_modeinfo *out,
        case HDMI_PICTURE_ASPECT_16_9:
                out->flags |= DRM_MODE_FLAG_PIC_AR_16_9;
                break;
+       case HDMI_PICTURE_ASPECT_64_27:
+               out->flags |= DRM_MODE_FLAG_PIC_AR_64_27;
+               break;
+       case HDMI_PICTURE_ASPECT_256_135:
+               out->flags |= DRM_MODE_FLAG_PIC_AR_256_135;
+               break;
        case HDMI_PICTURE_ASPECT_RESERVED:
        default:
                out->flags |= DRM_MODE_FLAG_PIC_AR_NONE;
@@ -1721,6 +1727,12 @@ int drm_mode_convert_umode(struct drm_device *dev,
        case DRM_MODE_FLAG_PIC_AR_16_9:
                out->picture_aspect_ratio |= HDMI_PICTURE_ASPECT_16_9;
                break;
+       case DRM_MODE_FLAG_PIC_AR_64_27:
+               out->picture_aspect_ratio |= HDMI_PICTURE_ASPECT_64_27;
+               break;
+       case DRM_MODE_FLAG_PIC_AR_256_135:
+               out->picture_aspect_ratio |= HDMI_PICTURE_ASPECT_256_135;
+               break;
        default:
                out->picture_aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
                break;
index 50bcf4214ff9745c3d1aaec55fbef99ea6c5f516..4b3a1bb58e68053bd880aa373fe5385730baaade 100644 (file)
@@ -93,6 +93,8 @@ extern "C" {
 #define DRM_MODE_PICTURE_ASPECT_NONE           0
 #define DRM_MODE_PICTURE_ASPECT_4_3            1
 #define DRM_MODE_PICTURE_ASPECT_16_9           2
+#define DRM_MODE_PICTURE_ASPECT_64_27          3
+#define DRM_MODE_PICTURE_ASPECT_256_135                4
 
 /* Aspect ratio flag bitmask (4 bits 22:19) */
 #define DRM_MODE_FLAG_PIC_AR_MASK              (0x0F<<19)
@@ -102,6 +104,10 @@ extern "C" {
                        (DRM_MODE_PICTURE_ASPECT_4_3<<19)
 #define  DRM_MODE_FLAG_PIC_AR_16_9 \
                        (DRM_MODE_PICTURE_ASPECT_16_9<<19)
+#define  DRM_MODE_FLAG_PIC_AR_64_27 \
+                       (DRM_MODE_PICTURE_ASPECT_64_27<<19)
+#define  DRM_MODE_FLAG_PIC_AR_256_135 \
+                       (DRM_MODE_PICTURE_ASPECT_256_135<<19)
 
 #define  DRM_MODE_FLAG_ALL     (DRM_MODE_FLAG_PHSYNC |         \
                                 DRM_MODE_FLAG_NHSYNC |         \