drm/i915/dp: Attach colorspace property
authorGwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Thu, 19 Sep 2019 19:53:08 +0000 (22:53 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 15 Oct 2019 13:24:59 +0000 (16:24 +0300)
It attaches the colorspace connector property to a DisplayPort connector.
Based on colorspace change, modeset will be triggered to switch to a new
colorspace.

And in order to distinguish colorspace bwtween DP and HDMI connector, it
adds a handling of drm_mode_create_dp_colorspace_property() to
intel_attach_colorspace_property().

Based on colorspace property value create a VSC SDP packet with appropriate
colorspace. This would help to enable wider color gamut like BT2020 on a
sink device.

v9: Addressed review comments from Ville
  - Add a handling of drm_mode_create_dp_colorspace_property() to
    intel_attach_colorspace_property(). This hunk moved from the previous
    commit.

Signed-off-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Reviewed-by: Uma Shankar <uma.shankar@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190919195311.13972-6-gwan-gyeong.mun@intel.com
drivers/gpu/drm/i915/display/intel_connector.c
drivers/gpu/drm/i915/display/intel_dp.c

index ba2ef165a01ae59c9a7857c293b2e27dc601657d..1133c4e97bb4b2a8be9522542fc59a3d73b49988 100644 (file)
@@ -277,7 +277,22 @@ intel_attach_aspect_ratio_property(struct drm_connector *connector)
 void
 intel_attach_colorspace_property(struct drm_connector *connector)
 {
-       if (!drm_mode_create_hdmi_colorspace_property(connector))
-               drm_object_attach_property(&connector->base,
-                                          connector->colorspace_property, 0);
+       switch (connector->connector_type) {
+       case DRM_MODE_CONNECTOR_HDMIA:
+       case DRM_MODE_CONNECTOR_HDMIB:
+               if (drm_mode_create_hdmi_colorspace_property(connector))
+                       return;
+               break;
+       case DRM_MODE_CONNECTOR_DisplayPort:
+       case DRM_MODE_CONNECTOR_eDP:
+               if (drm_mode_create_dp_colorspace_property(connector))
+                       return;
+               break;
+       default:
+               DRM_DEBUG_KMS("Colorspace property not supported\n");
+               return;
+       }
+
+       drm_object_attach_property(&connector->base,
+                                  connector->colorspace_property, 0);
 }
index d8dd7035ca46dcf17e9c476886866a66ca3b4ef4..4bc4afe96ba913279d77478a76ad80cb21e02483 100644 (file)
@@ -6476,6 +6476,8 @@ intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connect
        else if (INTEL_GEN(dev_priv) >= 5)
                drm_connector_attach_max_bpc_property(connector, 6, 12);
 
+       intel_attach_colorspace_property(connector);
+
        if (intel_dp_is_edp(intel_dp)) {
                u32 allowed_scalers;