* Re: [v3 2/3] drm: Add DP colorspace property
2018-11-20 14:22 ` [v3 2/3] drm: Add DP " Uma Shankar
@ 2018-11-20 14:11 ` Chris Wilson
2018-11-20 14:16 ` Shankar, Uma
0 siblings, 1 reply; 9+ messages in thread
From: Chris Wilson @ 2018-11-20 14:11 UTC (permalink / raw)
To: Uma Shankar, dri-devel, intel-gfx
Cc: hansverk, ville.syrjala, maarten.lankhorst, jonas
Quoting Uma Shankar (2018-11-20 14:22:10)
> @@ -1457,6 +1480,18 @@ int drm_mode_create_colorspace_property(struct drm_connector *connector)
> return -ENOMEM;
>
> dev->mode_config.hdmi_colorspace_property = prop;
> + } else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
> + connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
> + if (dev->mode_config.dp_colorspace_property)
> + return 0;
> +
> + prop = drm_property_create_enum(dev, DRM_MODE_PROP_ENUM,
> + "DP_Colorspace", dp_colorspace,
> + ARRAY_SIZE(dp_colorspace));
> + if (!prop)
> + return -ENOMEM;
Why different names for DP/HDMI?
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [v3 2/3] drm: Add DP colorspace property
2018-11-20 14:11 ` Chris Wilson
@ 2018-11-20 14:16 ` Shankar, Uma
2018-11-20 15:25 ` Ville Syrjälä
0 siblings, 1 reply; 9+ messages in thread
From: Shankar, Uma @ 2018-11-20 14:16 UTC (permalink / raw)
To: Chris Wilson, dri-devel@lists.freedesktop.org,
intel-gfx@lists.freedesktop.org
Cc: hansverk@cisco.com, Syrjala, Ville, Lankhorst, Maarten,
jonas@kwiboo.se
>-----Original Message-----
>From: Chris Wilson [mailto:chris@chris-wilson.co.uk]
>Sent: Tuesday, November 20, 2018 7:41 PM
>To: Shankar, Uma <uma.shankar@intel.com>; dri-devel@lists.freedesktop.org;
>intel-gfx@lists.freedesktop.org
>Cc: Syrjala, Ville <ville.syrjala@intel.com>; jonas@kwiboo.se;
>hansverk@cisco.com; Shankar, Uma <uma.shankar@intel.com>; Lankhorst,
>Maarten <maarten.lankhorst@intel.com>
>Subject: Re: [v3 2/3] drm: Add DP colorspace property
>
>Quoting Uma Shankar (2018-11-20 14:22:10)
>> @@ -1457,6 +1480,18 @@ int drm_mode_create_colorspace_property(struct
>drm_connector *connector)
>> return -ENOMEM;
>>
>> dev->mode_config.hdmi_colorspace_property = prop;
>> + } else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP
>||
>> + connector->connector_type ==
>DRM_MODE_CONNECTOR_DisplayPort) {
>> + if (dev->mode_config.dp_colorspace_property)
>> + return 0;
>> +
>> + prop = drm_property_create_enum(dev, DRM_MODE_PROP_ENUM,
>> + "DP_Colorspace", dp_colorspace,
>> + ARRAY_SIZE(dp_colorspace));
>> + if (!prop)
>> + return -ENOMEM;
>
>Why different names for DP/HDMI?
There are some colorspaces specific to HDMI and DP, hence we created separate properties
for these encoders. This is just to expose DP specifc colorspaces on a DP connector and same way
for HDMI. Earlier, we had just one but it was giving DP stuff as well to a HDMI Connector and vice-versa
which was not looking good.
Regards,
Uma Shankar
>-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 9+ messages in thread
* [v3 0/3] Add Colorspace connector property interface
@ 2018-11-20 14:22 Uma Shankar
2018-11-20 14:22 ` [v3 1/3] drm: Add HDMI colorspace property Uma Shankar
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Uma Shankar @ 2018-11-20 14:22 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: ville.syrjala, jonas, hansverk, maarten.lankhorst
This patch series creates a new connector property to program
colorspace to sink devices. Modern sink devices support more
than 1 type of colorspace like 601, 709, BT2020 etc. This helps
to switch based on content type which is to be displayed. The
decision lies with compositors as to in which scenarios, a
particular colorspace will be picked.
This will be helpful mostly to switch to higher gamut colorspaces
like BT2020 when the media content is encoded as BT2020. Thereby
giving a good visual experience to users.
The expectation from userspace is that it should parse the EDID
and get supported colorspaces. Use this property and switch to the
one supported. Kernel will not give the supported colorspaces since
this is panel dependent and our curremt property infrastructure is
not supporting it.
This can be tested by using xrandr with below command:
xrandr --output HDMI2 --set "HDMI_Colorspace" "BT2020_rgb"
Note: Haven't tested this version. Wanted to get feedback if this
approach looks ok. Will test and refloat next version along with
review fixes if any.
v2: Addressed Ville and Maarten's review comments. Merged the 2nd
and 3rd patch into one common logical patch.
v3: Removed Adobe references from enum definitions as per
Ville, Hans Verkuil and Jonas Karlman suggestions. Changed
default to an unset state where driver will assign the colorspace
when not chosen by user, suggested by Ville and Maarten. Addressed
other misc review comments from Maarten. Split the changes to
have separate colorspace property for DP and HDMI.
Uma Shankar (3):
drm: Add HDMI colorspace property
drm: Add DP colorspace property
drm/i915: Attach colorspace property and enable modeset
drivers/gpu/drm/drm_atomic_uapi.c | 8 +++
drivers/gpu/drm/drm_connector.c | 97 ++++++++++++++++++++++++++++++++++
drivers/gpu/drm/i915/intel_atomic.c | 2 +
drivers/gpu/drm/i915/intel_connector.c | 8 +++
drivers/gpu/drm/i915/intel_drv.h | 1 +
drivers/gpu/drm/i915/intel_hdmi.c | 7 +++
include/drm/drm_connector.h | 15 ++++++
include/drm/drm_mode_config.h | 12 +++++
include/uapi/drm/drm_mode.h | 35 ++++++++++++
9 files changed, 185 insertions(+)
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 9+ messages in thread
* [v3 1/3] drm: Add HDMI colorspace property
2018-11-20 14:22 [v3 0/3] Add Colorspace connector property interface Uma Shankar
@ 2018-11-20 14:22 ` Uma Shankar
2018-11-20 15:26 ` Ville Syrjälä
2018-11-20 14:22 ` [v3 2/3] drm: Add DP " Uma Shankar
2018-11-20 14:22 ` [v3 3/3] drm/i915: Attach colorspace property and enable modeset Uma Shankar
2 siblings, 1 reply; 9+ messages in thread
From: Uma Shankar @ 2018-11-20 14:22 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: ville.syrjala, jonas, hansverk, maarten.lankhorst
This patch adds a HDMI colorspace property, enabling
userspace to switch to various supported colorspaces.
This will help enable BT2020 along with other colorspaces.
v2: Addressed Maarten and Ville's review comments. Enhanced
the colorspace enum to incorporate both HDMI and DP supported
colorspaces. Also, added a default option for colorspace.
v3: Removed Adobe references from enum definitions as per
Ville, Hans Verkuil and Jonas Karlman suggestions. Changed
Default to an unset state where driver will assign the colorspace
is not chosen by user, suggested by Ville and Maarten. Addressed
other misc review comments from Maarten. Split the changes to
have separate colorspace property for DP and HDMI.
Signed-off-by: Uma Shankar <uma.shankar@intel.com>
---
drivers/gpu/drm/drm_atomic_uapi.c | 4 +++
drivers/gpu/drm/drm_connector.c | 62 +++++++++++++++++++++++++++++++++++++++
include/drm/drm_connector.h | 8 +++++
include/drm/drm_mode_config.h | 6 ++++
include/uapi/drm/drm_mode.h | 16 ++++++++++
5 files changed, 96 insertions(+)
diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
index 86ac339..4e09a38 100644
--- a/drivers/gpu/drm/drm_atomic_uapi.c
+++ b/drivers/gpu/drm/drm_atomic_uapi.c
@@ -721,6 +721,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
state->picture_aspect_ratio = val;
} else if (property == config->content_type_property) {
state->content_type = val;
+ } else if (property == config->hdmi_colorspace_property) {
+ state->hdmi_colorspace = val;
} else if (property == connector->scaling_mode_property) {
state->scaling_mode = val;
} else if (property == connector->content_protection_property) {
@@ -797,6 +799,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
*val = state->picture_aspect_ratio;
} else if (property == config->content_type_property) {
*val = state->content_type;
+ } else if (property == config->hdmi_colorspace_property) {
+ *val = state->hdmi_colorspace;
} else if (property == connector->scaling_mode_property) {
*val = state->scaling_mode;
} else if (property == connector->content_protection_property) {
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index fa9baac..1906e4a 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -826,6 +826,30 @@ int drm_display_info_set_bus_formats(struct drm_display_info *info,
};
DRM_ENUM_NAME_FN(drm_get_content_protection_name, drm_cp_enum_list)
+static const struct drm_prop_enum_list hdmi_colorspace[] = {
+ /* Standard Definition Colorimetry based on CEA 861 */
+ { COLORIMETRY_ITU_601, "ITU_601" },
+ { COLORIMETRY_ITU_709, "ITU_709" },
+ /* Standard Definition Colorimetry based on IEC 61966-2-4 */
+ { COLORIMETRY_XV_YCC_601, "XV_YCC_601" },
+ /* High Definition Colorimetry based on IEC 61966-2-4 */
+ { COLORIMETRY_XV_YCC_709, "XV_YCC_709" },
+ /* Colorimetry based on IEC 61966-2-1/Amendment 1 */
+ { COLORIMETRY_S_YCC_601, "S_YCC_601" },
+ /* Colorimetry based on IEC 61966-2-5 [33] */
+ { COLORIMETRY_OPYCC_601, "opYCC_601" },
+ /* Colorimetry based on IEC 61966-2-5 */
+ { COLORIMETRY_OPRGB, "opRGB" },
+ /* Colorimetry based on ITU-R BT.2020 */
+ { COLORIMETRY_BT2020_RGB, "BT2020_RGB" },
+ /* Colorimetry based on ITU-R BT.2020 */
+ { COLORIMETRY_BT2020_YCC, "BT2020_YCC" },
+ /* Colorimetry based on ITU-R BT.2020 */
+ { COLORIMETRY_BT2020_CYCC, "BT2020_CYCC" },
+ /* For Default case, driver will set the colorspace */
+ { COLORIMETRY_DEFAULT, "Default" },
+};
+
/**
* DOC: standard connector properties
*
@@ -1402,6 +1426,44 @@ int drm_mode_create_aspect_ratio_property(struct drm_device *dev)
EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property);
/**
+ * drm_mode_create_colorspace_property - create colorspace property
+ * colorspace:
+ * This property helps select a suitable colorspace based on the sink
+ * capability. Modern sink devices support wider gamut like BT2020.
+ * This helps switch to BT2020 mode if the BT2020 encoded video stream
+ * is being played by the user, same for any other colorspace.
+ * @dev: DRM device
+ *
+ * Called by a driver the first time it's needed, must be attached to desired
+ * connectors.
+ *
+ * Returns:
+ * Zero on success, negative errno on failure.
+ */
+int drm_mode_create_colorspace_property(struct drm_connector *connector)
+{
+ struct drm_device *dev = connector->dev;
+ struct drm_property *prop;
+
+ if (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
+ connector->connector_type == DRM_MODE_CONNECTOR_HDMIB) {
+ if (dev->mode_config.hdmi_colorspace_property)
+ return 0;
+
+ prop = drm_property_create_enum(dev, DRM_MODE_PROP_ENUM,
+ "HDMI_Colorspace",
+ hdmi_colorspace, ARRAY_SIZE(hdmi_colorspace));
+ if (!prop)
+ return -ENOMEM;
+
+ dev->mode_config.hdmi_colorspace_property = prop;
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL(drm_mode_create_colorspace_property);
+
+/**
* drm_mode_create_content_type_property - create content type property
* @dev: DRM device
*
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index af0a761..5fda56d 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -497,6 +497,13 @@ struct drm_connector_state {
unsigned int content_protection;
/**
+ * @hdmi_colorspace: Connector property to request colorspace
+ * change on HDMI Sink. This is most commonly used to switch to
+ * wider color gamuts like BT2020.
+ */
+ enum hdmi_full_colorimetry hdmi_colorspace;
+
+ /**
* @writeback_job: Writeback job for writeback connectors
*
* Holds the framebuffer and out-fence for a writeback connector. As
@@ -1272,6 +1279,7 @@ int drm_connector_attach_scaling_mode_property(struct drm_connector *connector,
int drm_connector_attach_content_protection_property(
struct drm_connector *connector);
int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
+int drm_mode_create_colorspace_property(struct drm_connector *connector);
int drm_mode_create_content_type_property(struct drm_device *dev);
void drm_hdmi_avi_infoframe_content_type(struct hdmi_avi_infoframe *frame,
const struct drm_connector_state *conn_state);
diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
index 5dbeabd..ec7cab8 100644
--- a/include/drm/drm_mode_config.h
+++ b/include/drm/drm_mode_config.h
@@ -869,6 +869,12 @@ struct drm_mode_config {
uint32_t cursor_width, cursor_height;
/**
+ * @hdmi_colorspace_property: Connector property to set the suitable
+ * colorspace supported by the HDMI sink.
+ */
+ struct drm_property *hdmi_colorspace_property;
+
+ /**
* @suspend_state:
*
* Atomic state when suspended.
diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
index d3e0fe3..cc4df26 100644
--- a/include/uapi/drm/drm_mode.h
+++ b/include/uapi/drm/drm_mode.h
@@ -210,6 +210,22 @@
#define DRM_MODE_CONTENT_PROTECTION_DESIRED 1
#define DRM_MODE_CONTENT_PROTECTION_ENABLED 2
+enum hdmi_full_colorimetry {
+ /* CEA 861 Normal Colorimetry options */
+ COLORIMETRY_ITU_601 = 0,
+ COLORIMETRY_ITU_709,
+ /* CEA 861 Extended Colorimetry Options */
+ COLORIMETRY_XV_YCC_601,
+ COLORIMETRY_XV_YCC_709,
+ COLORIMETRY_S_YCC_601,
+ COLORIMETRY_OPYCC_601,
+ COLORIMETRY_OPRGB,
+ COLORIMETRY_BT2020_RGB,
+ COLORIMETRY_BT2020_YCC,
+ COLORIMETRY_BT2020_CYCC,
+ COLORIMETRY_DEFAULT,
+};
+
struct drm_mode_modeinfo {
__u32 clock;
__u16 hdisplay;
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [v3 2/3] drm: Add DP colorspace property
2018-11-20 14:22 [v3 0/3] Add Colorspace connector property interface Uma Shankar
2018-11-20 14:22 ` [v3 1/3] drm: Add HDMI colorspace property Uma Shankar
@ 2018-11-20 14:22 ` Uma Shankar
2018-11-20 14:11 ` Chris Wilson
2018-11-20 14:22 ` [v3 3/3] drm/i915: Attach colorspace property and enable modeset Uma Shankar
2 siblings, 1 reply; 9+ messages in thread
From: Uma Shankar @ 2018-11-20 14:22 UTC (permalink / raw)
To: intel-gfx, dri-devel
Cc: ville.syrjala, jonas, hansverk, Uma Shankar, maarten.lankhorst
This patch adds a DP colorspace property, enabling
userspace to switch to various supported colorspaces.
This will help enable BT2020 along with other colorspaces.
v2: Addressed Maarten and Ville's review comments. Enhanced
the colorspace enum to incorporate both HDMI and DP supported
colorspaces. Also, added a default option for colorspace.
v3: Split the changes to have separate colorspace property for
DP and HDMI.
Signed-off-by: Uma Shankar <uma.shankar@intel.com>
---
drivers/gpu/drm/drm_atomic_uapi.c | 4 ++++
drivers/gpu/drm/drm_connector.c | 35 +++++++++++++++++++++++++++++++++++
include/drm/drm_connector.h | 7 +++++++
include/drm/drm_mode_config.h | 6 ++++++
include/uapi/drm/drm_mode.h | 19 +++++++++++++++++++
5 files changed, 71 insertions(+)
diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
index 4e09a38..37d51299b 100644
--- a/drivers/gpu/drm/drm_atomic_uapi.c
+++ b/drivers/gpu/drm/drm_atomic_uapi.c
@@ -723,6 +723,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
state->content_type = val;
} else if (property == config->hdmi_colorspace_property) {
state->hdmi_colorspace = val;
+ } else if (property == config->dp_colorspace_property) {
+ state->dp_colorspace = val;
} else if (property == connector->scaling_mode_property) {
state->scaling_mode = val;
} else if (property == connector->content_protection_property) {
@@ -801,6 +803,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
*val = state->content_type;
} else if (property == config->hdmi_colorspace_property) {
*val = state->hdmi_colorspace;
+ } else if (property == config->dp_colorspace_property) {
+ *val = state->dp_colorspace;
} else if (property == connector->scaling_mode_property) {
*val = state->scaling_mode;
} else if (property == connector->content_protection_property) {
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 1906e4a..5bb9cb6 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -850,6 +850,29 @@ int drm_display_info_set_bus_formats(struct drm_display_info *info,
{ COLORIMETRY_DEFAULT, "Default" },
};
+static const struct drm_prop_enum_list dp_colorspace[] = {
+ /* Standard Definition Colorimetry based on CEA 861 */
+ { DP_COLORIMETRY_ITU_601, "ITU_601" },
+ { DP_COLORIMETRY_ITU_709, "ITU_709" },
+ /* Standard Definition Colorimetry based on IEC 61966-2-4 */
+ { DP_COLORIMETRY_XV_YCC_601, "XV_YCC_601" },
+ /* High Definition Colorimetry based on IEC 61966-2-4 */
+ { DP_COLORIMETRY_XV_YCC_709, "XV_YCC_709" },
+ /* Colorimetry based on IEC 61966-2-5 */
+ { DP_COLORIMETRY_OPRGB, "opRGB" },
+ /* DP MSA Colorimetry */
+ { DP_COLORIMETRY_Y_CBCR_ITU_601, "YCBCR_ITU_601" },
+ { DP_COLORIMETRY_Y_CBCR_ITU_709, "YCBCR_ITU_709" },
+ { DP_COLORIMETRY_SRGB, "sRGB" },
+ { DP_COLORIMETRY_RGB_WIDE_GAMUT, "RGB Wide Gamut" },
+ { DP_COLORIMETRY_SCRGB, "scRGB" },
+ { DP_COLORIMETRY_DCI_P3, "DCI-P3" },
+ { DP_COLORIMETRY_CUSTOM_COLOR_PROFILE, "Custom Profile" },
+ /* For Default case, driver will set the colorspace */
+ { DP_COLORIMETRY_DEFAULT, "Default" },
+};
+
+
/**
* DOC: standard connector properties
*
@@ -1457,6 +1480,18 @@ int drm_mode_create_colorspace_property(struct drm_connector *connector)
return -ENOMEM;
dev->mode_config.hdmi_colorspace_property = prop;
+ } else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
+ connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
+ if (dev->mode_config.dp_colorspace_property)
+ return 0;
+
+ prop = drm_property_create_enum(dev, DRM_MODE_PROP_ENUM,
+ "DP_Colorspace", dp_colorspace,
+ ARRAY_SIZE(dp_colorspace));
+ if (!prop)
+ return -ENOMEM;
+
+ dev->mode_config.dp_colorspace_property = prop;
}
return 0;
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index 5fda56d..4596e24 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -504,6 +504,13 @@ struct drm_connector_state {
enum hdmi_full_colorimetry hdmi_colorspace;
/**
+ * @dp_colorspace: Connector property to request colorspace
+ * change on DP Sink. This is most commonly used to switch to
+ * wider color gamuts like BT2020.
+ */
+ enum dp_full_colorimetry dp_colorspace;
+
+ /**
* @writeback_job: Writeback job for writeback connectors
*
* Holds the framebuffer and out-fence for a writeback connector. As
diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
index ec7cab8..87b0698 100644
--- a/include/drm/drm_mode_config.h
+++ b/include/drm/drm_mode_config.h
@@ -875,6 +875,12 @@ struct drm_mode_config {
struct drm_property *hdmi_colorspace_property;
/**
+ * @dp_colorspace_property: Connector property to set the suitable
+ * colorspace supported by the DP sink.
+ */
+ struct drm_property *dp_colorspace_property;
+
+ /**
* @suspend_state:
*
* Atomic state when suspended.
diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
index cc4df26..1cd7346 100644
--- a/include/uapi/drm/drm_mode.h
+++ b/include/uapi/drm/drm_mode.h
@@ -226,6 +226,25 @@ enum hdmi_full_colorimetry {
COLORIMETRY_DEFAULT,
};
+enum dp_full_colorimetry {
+ /* CEA 861 Normal Colorimetry options */
+ DP_COLORIMETRY_ITU_601 = 0,
+ DP_COLORIMETRY_ITU_709,
+ /* CEA 861 Extended Colorimetry Options */
+ DP_COLORIMETRY_XV_YCC_601,
+ DP_COLORIMETRY_XV_YCC_709,
+ DP_COLORIMETRY_OPRGB,
+ /* DP MSA Colorimetry Options */
+ DP_COLORIMETRY_Y_CBCR_ITU_601,
+ DP_COLORIMETRY_Y_CBCR_ITU_709,
+ DP_COLORIMETRY_SRGB,
+ DP_COLORIMETRY_RGB_WIDE_GAMUT,
+ DP_COLORIMETRY_SCRGB,
+ DP_COLORIMETRY_DCI_P3,
+ DP_COLORIMETRY_CUSTOM_COLOR_PROFILE,
+ DP_COLORIMETRY_DEFAULT,
+};
+
struct drm_mode_modeinfo {
__u32 clock;
__u16 hdisplay;
--
1.9.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [v3 3/3] drm/i915: Attach colorspace property and enable modeset
2018-11-20 14:22 [v3 0/3] Add Colorspace connector property interface Uma Shankar
2018-11-20 14:22 ` [v3 1/3] drm: Add HDMI colorspace property Uma Shankar
2018-11-20 14:22 ` [v3 2/3] drm: Add DP " Uma Shankar
@ 2018-11-20 14:22 ` Uma Shankar
2 siblings, 0 replies; 9+ messages in thread
From: Uma Shankar @ 2018-11-20 14:22 UTC (permalink / raw)
To: intel-gfx, dri-devel
Cc: ville.syrjala, jonas, hansverk, Uma Shankar, maarten.lankhorst
This patch attaches the colorspace connector property to the
hdmi connector. Based on colorspace change, modeset will be
triggered to switch to new colorspace.
Based on colorspace property value create an infoframe
with appropriate colorspace. This can be used to send an
infoframe packet with proper colorspace value set which
will help to enable wider color gamut like BT2020 on sink.
This patch attaches and enables HDMI colorspace, DP will be
taken care separately.
v2: Merged the changes of creating infoframe as well to this
patch as per Maarten's suggestion.
v3: Addressed review comments from Shashank. Separated HDMI
and DP colorspaces as suggested by Ville and Maarten.
Signed-off-by: Uma Shankar <uma.shankar@intel.com>
---
drivers/gpu/drm/i915/intel_atomic.c | 2 ++
drivers/gpu/drm/i915/intel_connector.c | 8 ++++++++
drivers/gpu/drm/i915/intel_drv.h | 1 +
drivers/gpu/drm/i915/intel_hdmi.c | 7 +++++++
4 files changed, 18 insertions(+)
diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c
index a5a2c8f..45624ca 100644
--- a/drivers/gpu/drm/i915/intel_atomic.c
+++ b/drivers/gpu/drm/i915/intel_atomic.c
@@ -125,6 +125,8 @@ int intel_digital_connector_atomic_check(struct drm_connector *conn,
*/
if (new_conn_state->force_audio != old_conn_state->force_audio ||
new_conn_state->broadcast_rgb != old_conn_state->broadcast_rgb ||
+ new_state->hdmi_colorspace != old_state->hdmi_colorspace ||
+ new_state->dp_colorspace != old_state->dp_colorspace ||
new_conn_state->base.picture_aspect_ratio != old_conn_state->base.picture_aspect_ratio ||
new_conn_state->base.content_type != old_conn_state->base.content_type ||
new_conn_state->base.scaling_mode != old_conn_state->base.scaling_mode)
diff --git a/drivers/gpu/drm/i915/intel_connector.c b/drivers/gpu/drm/i915/intel_connector.c
index 18e370f..b4c20d8 100644
--- a/drivers/gpu/drm/i915/intel_connector.c
+++ b/drivers/gpu/drm/i915/intel_connector.c
@@ -262,3 +262,11 @@ int intel_ddc_get_modes(struct drm_connector *connector,
connector->dev->mode_config.aspect_ratio_property,
DRM_MODE_PICTURE_ASPECT_NONE);
}
+
+void
+intel_attach_hdmi_colorspace_property(struct drm_connector *connector)
+{
+ if (!drm_mode_create_colorspace_property(connector))
+ drm_object_attach_property(&connector->base,
+ connector->dev->mode_config.hdmi_colorspace_property, 0);
+}
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index f575ba2..a1afe71 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1761,6 +1761,7 @@ int intel_connector_update_modes(struct drm_connector *connector,
void intel_attach_force_audio_property(struct drm_connector *connector);
void intel_attach_broadcast_rgb_property(struct drm_connector *connector);
void intel_attach_aspect_ratio_property(struct drm_connector *connector);
+void intel_attach_hdmi_colorspace_property(struct drm_connector *connector);
/* intel_csr.c */
void intel_csr_ucode_init(struct drm_i915_private *);
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index e2c6a2b..26e8828 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -486,6 +486,11 @@ static void intel_hdmi_set_avi_infoframe(struct intel_encoder *encoder,
else
frame.avi.colorspace = HDMI_COLORSPACE_RGB;
+ if (conn_state->hdmi_colorspace >= COLORIMETRY_XV_YCC_601) {
+ frame.avi.colorimetry = HDMI_COLORIMETRY_EXTENDED;
+ frame.avi.extended_colorimetry = conn_state->hdmi_colorspace;
+ }
+
drm_hdmi_avi_infoframe_quant_range(&frame.avi, adjusted_mode,
crtc_state->limited_color_range ?
HDMI_QUANTIZATION_RANGE_LIMITED :
@@ -2135,6 +2140,8 @@ static void intel_hdmi_destroy(struct drm_connector *connector)
intel_attach_force_audio_property(connector);
intel_attach_broadcast_rgb_property(connector);
intel_attach_aspect_ratio_property(connector);
+ intel_attach_hdmi_colorspace_property(connector);
+
drm_connector_attach_content_type_property(connector);
connector->state->picture_aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
--
1.9.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [v3 2/3] drm: Add DP colorspace property
2018-11-20 14:16 ` Shankar, Uma
@ 2018-11-20 15:25 ` Ville Syrjälä
0 siblings, 0 replies; 9+ messages in thread
From: Ville Syrjälä @ 2018-11-20 15:25 UTC (permalink / raw)
To: Shankar, Uma
Cc: Syrjala, Ville, jonas@kwiboo.se, intel-gfx@lists.freedesktop.org,
dri-devel@lists.freedesktop.org, hansverk@cisco.com,
Lankhorst, Maarten
On Tue, Nov 20, 2018 at 02:16:38PM +0000, Shankar, Uma wrote:
>
>
> >-----Original Message-----
> >From: Chris Wilson [mailto:chris@chris-wilson.co.uk]
> >Sent: Tuesday, November 20, 2018 7:41 PM
> >To: Shankar, Uma <uma.shankar@intel.com>; dri-devel@lists.freedesktop.org;
> >intel-gfx@lists.freedesktop.org
> >Cc: Syrjala, Ville <ville.syrjala@intel.com>; jonas@kwiboo.se;
> >hansverk@cisco.com; Shankar, Uma <uma.shankar@intel.com>; Lankhorst,
> >Maarten <maarten.lankhorst@intel.com>
> >Subject: Re: [v3 2/3] drm: Add DP colorspace property
> >
> >Quoting Uma Shankar (2018-11-20 14:22:10)
> >> @@ -1457,6 +1480,18 @@ int drm_mode_create_colorspace_property(struct
> >drm_connector *connector)
> >> return -ENOMEM;
> >>
> >> dev->mode_config.hdmi_colorspace_property = prop;
> >> + } else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP
> >||
> >> + connector->connector_type ==
> >DRM_MODE_CONNECTOR_DisplayPort) {
> >> + if (dev->mode_config.dp_colorspace_property)
> >> + return 0;
> >> +
> >> + prop = drm_property_create_enum(dev, DRM_MODE_PROP_ENUM,
> >> + "DP_Colorspace", dp_colorspace,
> >> + ARRAY_SIZE(dp_colorspace));
> >> + if (!prop)
> >> + return -ENOMEM;
> >
> >Why different names for DP/HDMI?
> There are some colorspaces specific to HDMI and DP, hence we created separate properties
> for these encoders.
Why does that require different names for the props?
> This is just to expose DP specifc colorspaces on a DP connector and same way
> for HDMI. Earlier, we had just one but it was giving DP stuff as well to a HDMI Connector and vice-versa
> which was not looking good.
>
> Regards,
> Uma Shankar
> >-Chris
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [v3 1/3] drm: Add HDMI colorspace property
2018-11-20 14:22 ` [v3 1/3] drm: Add HDMI colorspace property Uma Shankar
@ 2018-11-20 15:26 ` Ville Syrjälä
2018-11-27 15:21 ` Shankar, Uma
0 siblings, 1 reply; 9+ messages in thread
From: Ville Syrjälä @ 2018-11-20 15:26 UTC (permalink / raw)
To: Uma Shankar
Cc: ville.syrjala, jonas, intel-gfx, dri-devel, hansverk,
maarten.lankhorst
On Tue, Nov 20, 2018 at 07:52:09PM +0530, Uma Shankar wrote:
> This patch adds a HDMI colorspace property, enabling
> userspace to switch to various supported colorspaces.
> This will help enable BT2020 along with other colorspaces.
>
> v2: Addressed Maarten and Ville's review comments. Enhanced
> the colorspace enum to incorporate both HDMI and DP supported
> colorspaces. Also, added a default option for colorspace.
>
> v3: Removed Adobe references from enum definitions as per
> Ville, Hans Verkuil and Jonas Karlman suggestions. Changed
> Default to an unset state where driver will assign the colorspace
> is not chosen by user, suggested by Ville and Maarten. Addressed
> other misc review comments from Maarten. Split the changes to
> have separate colorspace property for DP and HDMI.
>
> Signed-off-by: Uma Shankar <uma.shankar@intel.com>
> ---
> drivers/gpu/drm/drm_atomic_uapi.c | 4 +++
> drivers/gpu/drm/drm_connector.c | 62 +++++++++++++++++++++++++++++++++++++++
> include/drm/drm_connector.h | 8 +++++
> include/drm/drm_mode_config.h | 6 ++++
> include/uapi/drm/drm_mode.h | 16 ++++++++++
> 5 files changed, 96 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
> index 86ac339..4e09a38 100644
> --- a/drivers/gpu/drm/drm_atomic_uapi.c
> +++ b/drivers/gpu/drm/drm_atomic_uapi.c
> @@ -721,6 +721,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
> state->picture_aspect_ratio = val;
> } else if (property == config->content_type_property) {
> state->content_type = val;
> + } else if (property == config->hdmi_colorspace_property) {
> + state->hdmi_colorspace = val;
> } else if (property == connector->scaling_mode_property) {
> state->scaling_mode = val;
> } else if (property == connector->content_protection_property) {
> @@ -797,6 +799,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
> *val = state->picture_aspect_ratio;
> } else if (property == config->content_type_property) {
> *val = state->content_type;
> + } else if (property == config->hdmi_colorspace_property) {
> + *val = state->hdmi_colorspace;
> } else if (property == connector->scaling_mode_property) {
> *val = state->scaling_mode;
> } else if (property == connector->content_protection_property) {
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> index fa9baac..1906e4a 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -826,6 +826,30 @@ int drm_display_info_set_bus_formats(struct drm_display_info *info,
> };
> DRM_ENUM_NAME_FN(drm_get_content_protection_name, drm_cp_enum_list)
>
> +static const struct drm_prop_enum_list hdmi_colorspace[] = {
My idea was that we create just the one prop, and filter it as needed.
> + /* Standard Definition Colorimetry based on CEA 861 */
> + { COLORIMETRY_ITU_601, "ITU_601" },
> + { COLORIMETRY_ITU_709, "ITU_709" },
> + /* Standard Definition Colorimetry based on IEC 61966-2-4 */
> + { COLORIMETRY_XV_YCC_601, "XV_YCC_601" },
> + /* High Definition Colorimetry based on IEC 61966-2-4 */
> + { COLORIMETRY_XV_YCC_709, "XV_YCC_709" },
> + /* Colorimetry based on IEC 61966-2-1/Amendment 1 */
> + { COLORIMETRY_S_YCC_601, "S_YCC_601" },
> + /* Colorimetry based on IEC 61966-2-5 [33] */
> + { COLORIMETRY_OPYCC_601, "opYCC_601" },
> + /* Colorimetry based on IEC 61966-2-5 */
> + { COLORIMETRY_OPRGB, "opRGB" },
> + /* Colorimetry based on ITU-R BT.2020 */
> + { COLORIMETRY_BT2020_RGB, "BT2020_RGB" },
> + /* Colorimetry based on ITU-R BT.2020 */
> + { COLORIMETRY_BT2020_YCC, "BT2020_YCC" },
> + /* Colorimetry based on ITU-R BT.2020 */
> + { COLORIMETRY_BT2020_CYCC, "BT2020_CYCC" },
> + /* For Default case, driver will set the colorspace */
> + { COLORIMETRY_DEFAULT, "Default" },
"Default" needs to be the default.
> +};
> +
> /**
> * DOC: standard connector properties
> *
> @@ -1402,6 +1426,44 @@ int drm_mode_create_aspect_ratio_property(struct drm_device *dev)
> EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property);
>
> /**
> + * drm_mode_create_colorspace_property - create colorspace property
> + * colorspace:
> + * This property helps select a suitable colorspace based on the sink
> + * capability. Modern sink devices support wider gamut like BT2020.
> + * This helps switch to BT2020 mode if the BT2020 encoded video stream
> + * is being played by the user, same for any other colorspace.
> + * @dev: DRM device
> + *
> + * Called by a driver the first time it's needed, must be attached to desired
> + * connectors.
> + *
> + * Returns:
> + * Zero on success, negative errno on failure.
> + */
> +int drm_mode_create_colorspace_property(struct drm_connector *connector)
> +{
> + struct drm_device *dev = connector->dev;
> + struct drm_property *prop;
> +
> + if (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
> + connector->connector_type == DRM_MODE_CONNECTOR_HDMIB) {
> + if (dev->mode_config.hdmi_colorspace_property)
> + return 0;
> +
> + prop = drm_property_create_enum(dev, DRM_MODE_PROP_ENUM,
> + "HDMI_Colorspace",
> + hdmi_colorspace, ARRAY_SIZE(hdmi_colorspace));
> + if (!prop)
> + return -ENOMEM;
> +
> + dev->mode_config.hdmi_colorspace_property = prop;
> + }
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(drm_mode_create_colorspace_property);
> +
> +/**
> * drm_mode_create_content_type_property - create content type property
> * @dev: DRM device
> *
> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
> index af0a761..5fda56d 100644
> --- a/include/drm/drm_connector.h
> +++ b/include/drm/drm_connector.h
> @@ -497,6 +497,13 @@ struct drm_connector_state {
> unsigned int content_protection;
>
> /**
> + * @hdmi_colorspace: Connector property to request colorspace
> + * change on HDMI Sink. This is most commonly used to switch to
> + * wider color gamuts like BT2020.
> + */
> + enum hdmi_full_colorimetry hdmi_colorspace;
> +
> + /**
> * @writeback_job: Writeback job for writeback connectors
> *
> * Holds the framebuffer and out-fence for a writeback connector. As
> @@ -1272,6 +1279,7 @@ int drm_connector_attach_scaling_mode_property(struct drm_connector *connector,
> int drm_connector_attach_content_protection_property(
> struct drm_connector *connector);
> int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
> +int drm_mode_create_colorspace_property(struct drm_connector *connector);
> int drm_mode_create_content_type_property(struct drm_device *dev);
> void drm_hdmi_avi_infoframe_content_type(struct hdmi_avi_infoframe *frame,
> const struct drm_connector_state *conn_state);
> diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
> index 5dbeabd..ec7cab8 100644
> --- a/include/drm/drm_mode_config.h
> +++ b/include/drm/drm_mode_config.h
> @@ -869,6 +869,12 @@ struct drm_mode_config {
> uint32_t cursor_width, cursor_height;
>
> /**
> + * @hdmi_colorspace_property: Connector property to set the suitable
> + * colorspace supported by the HDMI sink.
> + */
> + struct drm_property *hdmi_colorspace_property;
> +
> + /**
> * @suspend_state:
> *
> * Atomic state when suspended.
> diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
> index d3e0fe3..cc4df26 100644
> --- a/include/uapi/drm/drm_mode.h
> +++ b/include/uapi/drm/drm_mode.h
> @@ -210,6 +210,22 @@
> #define DRM_MODE_CONTENT_PROTECTION_DESIRED 1
> #define DRM_MODE_CONTENT_PROTECTION_ENABLED 2
>
> +enum hdmi_full_colorimetry {
> + /* CEA 861 Normal Colorimetry options */
> + COLORIMETRY_ITU_601 = 0,
> + COLORIMETRY_ITU_709,
> + /* CEA 861 Extended Colorimetry Options */
> + COLORIMETRY_XV_YCC_601,
> + COLORIMETRY_XV_YCC_709,
> + COLORIMETRY_S_YCC_601,
> + COLORIMETRY_OPYCC_601,
> + COLORIMETRY_OPRGB,
> + COLORIMETRY_BT2020_RGB,
> + COLORIMETRY_BT2020_YCC,
> + COLORIMETRY_BT2020_CYCC,
> + COLORIMETRY_DEFAULT,
> +};
> +
> struct drm_mode_modeinfo {
> __u32 clock;
> __u16 hdisplay;
> --
> 1.9.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Ville Syrjälä
Intel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: [v3 1/3] drm: Add HDMI colorspace property
2018-11-20 15:26 ` Ville Syrjälä
@ 2018-11-27 15:21 ` Shankar, Uma
0 siblings, 0 replies; 9+ messages in thread
From: Shankar, Uma @ 2018-11-27 15:21 UTC (permalink / raw)
To: Ville Syrjälä
Cc: Syrjala, Ville, jonas@kwiboo.se, intel-gfx@lists.freedesktop.org,
dri-devel@lists.freedesktop.org, hansverk@cisco.com,
Lankhorst, Maarten
>-----Original Message-----
>From: Ville Syrjälä [mailto:ville.syrjala@linux.intel.com]
>Sent: Tuesday, November 20, 2018 8:56 PM
>To: Shankar, Uma <uma.shankar@intel.com>
>Cc: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org; Syrjala, Ville
><ville.syrjala@intel.com>; jonas@kwiboo.se; hansverk@cisco.com; Lankhorst,
>Maarten <maarten.lankhorst@intel.com>
>Subject: Re: [v3 1/3] drm: Add HDMI colorspace property
>
>On Tue, Nov 20, 2018 at 07:52:09PM +0530, Uma Shankar wrote:
>> This patch adds a HDMI colorspace property, enabling userspace to
>> switch to various supported colorspaces.
>> This will help enable BT2020 along with other colorspaces.
>>
>> v2: Addressed Maarten and Ville's review comments. Enhanced the
>> colorspace enum to incorporate both HDMI and DP supported colorspaces.
>> Also, added a default option for colorspace.
>>
>> v3: Removed Adobe references from enum definitions as per Ville, Hans
>> Verkuil and Jonas Karlman suggestions. Changed Default to an unset
>> state where driver will assign the colorspace is not chosen by user,
>> suggested by Ville and Maarten. Addressed other misc review comments
>> from Maarten. Split the changes to have separate colorspace property
>> for DP and HDMI.
>>
>> Signed-off-by: Uma Shankar <uma.shankar@intel.com>
>> ---
>> drivers/gpu/drm/drm_atomic_uapi.c | 4 +++
>> drivers/gpu/drm/drm_connector.c | 62
>+++++++++++++++++++++++++++++++++++++++
>> include/drm/drm_connector.h | 8 +++++
>> include/drm/drm_mode_config.h | 6 ++++
>> include/uapi/drm/drm_mode.h | 16 ++++++++++
>> 5 files changed, 96 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/drm_atomic_uapi.c
>> b/drivers/gpu/drm/drm_atomic_uapi.c
>> index 86ac339..4e09a38 100644
>> --- a/drivers/gpu/drm/drm_atomic_uapi.c
>> +++ b/drivers/gpu/drm/drm_atomic_uapi.c
>> @@ -721,6 +721,8 @@ static int drm_atomic_connector_set_property(struct
>drm_connector *connector,
>> state->picture_aspect_ratio = val;
>> } else if (property == config->content_type_property) {
>> state->content_type = val;
>> + } else if (property == config->hdmi_colorspace_property) {
>> + state->hdmi_colorspace = val;
>> } else if (property == connector->scaling_mode_property) {
>> state->scaling_mode = val;
>> } else if (property == connector->content_protection_property) { @@
>> -797,6 +799,8 @@ static int drm_atomic_connector_set_property(struct
>drm_connector *connector,
>> *val = state->picture_aspect_ratio;
>> } else if (property == config->content_type_property) {
>> *val = state->content_type;
>> + } else if (property == config->hdmi_colorspace_property) {
>> + *val = state->hdmi_colorspace;
>> } else if (property == connector->scaling_mode_property) {
>> *val = state->scaling_mode;
>> } else if (property == connector->content_protection_property) {
>> diff --git a/drivers/gpu/drm/drm_connector.c
>> b/drivers/gpu/drm/drm_connector.c index fa9baac..1906e4a 100644
>> --- a/drivers/gpu/drm/drm_connector.c
>> +++ b/drivers/gpu/drm/drm_connector.c
>> @@ -826,6 +826,30 @@ int drm_display_info_set_bus_formats(struct
>> drm_display_info *info, };
>> DRM_ENUM_NAME_FN(drm_get_content_protection_name,
>drm_cp_enum_list)
>>
>> +static const struct drm_prop_enum_list hdmi_colorspace[] = {
>
>My idea was that we create just the one prop, and filter it as needed.
Got it Ville, It can be done with one property. I will create an absolute list with all the
colorspaces and then create subset out of this list for respective connectors (DP and HDMI)
keeping common property name as "Colorspace". Will float the new version shortly.
>> + /* Standard Definition Colorimetry based on CEA 861 */
>> + { COLORIMETRY_ITU_601, "ITU_601" },
>> + { COLORIMETRY_ITU_709, "ITU_709" },
>> + /* Standard Definition Colorimetry based on IEC 61966-2-4 */
>> + { COLORIMETRY_XV_YCC_601, "XV_YCC_601" },
>> + /* High Definition Colorimetry based on IEC 61966-2-4 */
>> + { COLORIMETRY_XV_YCC_709, "XV_YCC_709" },
>> + /* Colorimetry based on IEC 61966-2-1/Amendment 1 */
>> + { COLORIMETRY_S_YCC_601, "S_YCC_601" },
>> + /* Colorimetry based on IEC 61966-2-5 [33] */
>> + { COLORIMETRY_OPYCC_601, "opYCC_601" },
>> + /* Colorimetry based on IEC 61966-2-5 */
>> + { COLORIMETRY_OPRGB, "opRGB" },
>> + /* Colorimetry based on ITU-R BT.2020 */
>> + { COLORIMETRY_BT2020_RGB, "BT2020_RGB" },
>> + /* Colorimetry based on ITU-R BT.2020 */
>> + { COLORIMETRY_BT2020_YCC, "BT2020_YCC" },
>> + /* Colorimetry based on ITU-R BT.2020 */
>> + { COLORIMETRY_BT2020_CYCC, "BT2020_CYCC" },
>> + /* For Default case, driver will set the colorspace */
>> + { COLORIMETRY_DEFAULT, "Default" },
>
>"Default" needs to be the default.
Ok, will make this as 0 and put it in the beginning of the list. Hope that is ok.
>> +};
>> +
>> /**
>> * DOC: standard connector properties
>> *
>> @@ -1402,6 +1426,44 @@ int
>> drm_mode_create_aspect_ratio_property(struct drm_device *dev)
>> EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property);
>>
>> /**
>> + * drm_mode_create_colorspace_property - create colorspace property
>> + * colorspace:
>> + * This property helps select a suitable colorspace based on the sink
>> + * capability. Modern sink devices support wider gamut like BT2020.
>> + * This helps switch to BT2020 mode if the BT2020 encoded video stream
>> + * is being played by the user, same for any other colorspace.
>> + * @dev: DRM device
>> + *
>> + * Called by a driver the first time it's needed, must be attached to
>> +desired
>> + * connectors.
>> + *
>> + * Returns:
>> + * Zero on success, negative errno on failure.
>> + */
>> +int drm_mode_create_colorspace_property(struct drm_connector
>> +*connector) {
>> + struct drm_device *dev = connector->dev;
>> + struct drm_property *prop;
>> +
>> + if (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
>> + connector->connector_type ==
>DRM_MODE_CONNECTOR_HDMIB) {
>> + if (dev->mode_config.hdmi_colorspace_property)
>> + return 0;
>> +
>> + prop = drm_property_create_enum(dev,
>DRM_MODE_PROP_ENUM,
>> + "HDMI_Colorspace",
>> + hdmi_colorspace,
>ARRAY_SIZE(hdmi_colorspace));
>> + if (!prop)
>> + return -ENOMEM;
>> +
>> + dev->mode_config.hdmi_colorspace_property = prop;
>> + }
>> +
>> + return 0;
>> +}
>> +EXPORT_SYMBOL(drm_mode_create_colorspace_property);
>> +
>> +/**
>> * drm_mode_create_content_type_property - create content type property
>> * @dev: DRM device
>> *
>> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
>> index af0a761..5fda56d 100644
>> --- a/include/drm/drm_connector.h
>> +++ b/include/drm/drm_connector.h
>> @@ -497,6 +497,13 @@ struct drm_connector_state {
>> unsigned int content_protection;
>>
>> /**
>> + * @hdmi_colorspace: Connector property to request colorspace
>> + * change on HDMI Sink. This is most commonly used to switch to
>> + * wider color gamuts like BT2020.
>> + */
>> + enum hdmi_full_colorimetry hdmi_colorspace;
>> +
>> + /**
>> * @writeback_job: Writeback job for writeback connectors
>> *
>> * Holds the framebuffer and out-fence for a writeback connector. As
>> @@ -1272,6 +1279,7 @@ int
>> drm_connector_attach_scaling_mode_property(struct drm_connector
>*connector, int drm_connector_attach_content_protection_property(
>> struct drm_connector *connector);
>> int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
>> +int drm_mode_create_colorspace_property(struct drm_connector
>> +*connector);
>> int drm_mode_create_content_type_property(struct drm_device *dev);
>> void drm_hdmi_avi_infoframe_content_type(struct hdmi_avi_infoframe
>*frame,
>> const struct drm_connector_state
>*conn_state); diff --git
>> a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h index
>> 5dbeabd..ec7cab8 100644
>> --- a/include/drm/drm_mode_config.h
>> +++ b/include/drm/drm_mode_config.h
>> @@ -869,6 +869,12 @@ struct drm_mode_config {
>> uint32_t cursor_width, cursor_height;
>>
>> /**
>> + * @hdmi_colorspace_property: Connector property to set the suitable
>> + * colorspace supported by the HDMI sink.
>> + */
>> + struct drm_property *hdmi_colorspace_property;
>> +
>> + /**
>> * @suspend_state:
>> *
>> * Atomic state when suspended.
>> diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
>> index d3e0fe3..cc4df26 100644
>> --- a/include/uapi/drm/drm_mode.h
>> +++ b/include/uapi/drm/drm_mode.h
>> @@ -210,6 +210,22 @@
>> #define DRM_MODE_CONTENT_PROTECTION_DESIRED 1
>> #define DRM_MODE_CONTENT_PROTECTION_ENABLED 2
>>
>> +enum hdmi_full_colorimetry {
>> + /* CEA 861 Normal Colorimetry options */
>> + COLORIMETRY_ITU_601 = 0,
>> + COLORIMETRY_ITU_709,
>> + /* CEA 861 Extended Colorimetry Options */
>> + COLORIMETRY_XV_YCC_601,
>> + COLORIMETRY_XV_YCC_709,
>> + COLORIMETRY_S_YCC_601,
>> + COLORIMETRY_OPYCC_601,
>> + COLORIMETRY_OPRGB,
>> + COLORIMETRY_BT2020_RGB,
>> + COLORIMETRY_BT2020_YCC,
>> + COLORIMETRY_BT2020_CYCC,
>> + COLORIMETRY_DEFAULT,
>> +};
>> +
>> struct drm_mode_modeinfo {
>> __u32 clock;
>> __u16 hdisplay;
>> --
>> 1.9.1
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
>--
>Ville Syrjälä
>Intel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2018-11-27 15:21 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-11-20 14:22 [v3 0/3] Add Colorspace connector property interface Uma Shankar
2018-11-20 14:22 ` [v3 1/3] drm: Add HDMI colorspace property Uma Shankar
2018-11-20 15:26 ` Ville Syrjälä
2018-11-27 15:21 ` Shankar, Uma
2018-11-20 14:22 ` [v3 2/3] drm: Add DP " Uma Shankar
2018-11-20 14:11 ` Chris Wilson
2018-11-20 14:16 ` Shankar, Uma
2018-11-20 15:25 ` Ville Syrjälä
2018-11-20 14:22 ` [v3 3/3] drm/i915: Attach colorspace property and enable modeset Uma Shankar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).