Add the attribute supported_colorspaces to configure the supported colorspace of a connector. It will allows emulating some HDR features of displays. This feature is only supported for HDMI, DP and eDP connectors.
Reviewed-by: Luca Ceresoli <[email protected]> Signed-off-by: Louis Chauvet <[email protected]> --- Documentation/ABI/testing/configfs-vkms | 8 +++++++ Documentation/gpu/vkms.rst | 7 +++++- drivers/gpu/drm/vkms/vkms_configfs.c | 40 +++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/Documentation/ABI/testing/configfs-vkms b/Documentation/ABI/testing/configfs-vkms index 5452140cc508..f750e616be54 100644 --- a/Documentation/ABI/testing/configfs-vkms +++ b/Documentation/ABI/testing/configfs-vkms @@ -40,6 +40,14 @@ Description: Type of the connector. Possible values match those exposed by the "type" field in drm_connector. +What: /sys/kernel/config/vkms/<device>/connectors/<connector>/supported_colorspaces +Date: Nov 2025 +Contact: [email protected] +Description: + Supported colorspaces for HDMI, DP, and eDP connectors. + Value is a bitfield, where 0x1 = NO_DATA, 0x2 = SMPTE_170M_YCC, + etc. See enum drm_colorspace for full list. + What: /sys/kernel/config/vkms/<device>/connectors/<connector>/possible_encoders Date: Nov 2025 Contact: [email protected] diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 41c6f4733663..1c4a8023374c 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -138,11 +138,16 @@ Last but not least, create one or more connectors:: sudo mkdir /config/vkms/my-vkms/connectors/connector0 -Connectors have 2 configurable attribute: +Connectors have 3 configurable attribute: - status: Connection status: 1 connected, 2 disconnected, 3 unknown (same values as those exposed by the "status" property of a connector) - type: Type of connector. Same values as exposed by the "type" field in drm_connector. +- supported_colorspaces: Supported colorspaces values for HDMI, DP and eDP connectors. + If supported_colorspaces is not 0, the HDR_OUTPUT_METADATA will also be created. + Value is a bitfield, 0x1 = NO_DATA, 0x2 = SMPTE_170M_YCC... see enum drm_colorspace + for full list. + To finish the configuration, link the different pipeline items:: diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vkms_configfs.c index d6a85d6c466f..90bf6e6995ae 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -1233,12 +1233,52 @@ static ssize_t connector_type_store(struct config_item *item, return count; } +static ssize_t connector_supported_colorspaces_show(struct config_item *item, char *page) +{ + struct vkms_configfs_connector *connector; + int colorspaces; + + connector = connector_item_to_vkms_configfs_connector(item); + + scoped_guard(mutex, &connector->dev->lock) + colorspaces = vkms_config_connector_get_supported_colorspaces(connector->config); + + return sprintf(page, "%u", colorspaces); +} + +static ssize_t connector_supported_colorspaces_store(struct config_item *item, + const char *page, size_t count) +{ + struct vkms_configfs_connector *connector; + int val, ret; + + connector = connector_item_to_vkms_configfs_connector(item); + + ret = kstrtouint(page, 10, &val); + if (ret) + return ret; + + if ((val & -BIT(DRM_MODE_COLORIMETRY_COUNT)) != 0) + return -EINVAL; + + scoped_guard(mutex, &connector->dev->lock) { + if (connector->dev->enabled) + return -EBUSY; + + vkms_config_connector_set_supported_colorspaces(connector->config, val); + } + + return count; +} + CONFIGFS_ATTR(connector_, status); CONFIGFS_ATTR(connector_, type); +CONFIGFS_ATTR(connector_, supported_colorspaces); static struct configfs_attribute *connector_item_attrs[] = { &connector_attr_status, &connector_attr_type, + &connector_attr_supported_colorspaces, NULL, }; -- 2.51.2
