Add a new attribute to connector to change its type. This is mostly cosmetic and don't have direct effect in VKMS behavior.
Reviewed-by: Luca Ceresoli <[email protected]> Signed-off-by: Louis Chauvet <[email protected]> --- Documentation/ABI/testing/configfs-vkms | 7 ++++ Documentation/gpu/vkms.rst | 3 +- drivers/gpu/drm/vkms/vkms_configfs.c | 65 +++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 1 deletion(-) diff --git a/Documentation/ABI/testing/configfs-vkms b/Documentation/ABI/testing/configfs-vkms index 34cb6aeec411..5452140cc508 100644 --- a/Documentation/ABI/testing/configfs-vkms +++ b/Documentation/ABI/testing/configfs-vkms @@ -33,6 +33,13 @@ Description: Connection status of the connector. Possible values: 1 - connected, 2 - disconnected, 3 - unknown. +What: /sys/kernel/config/vkms/<device>/connectors/<connector>/type +Date: Nov 2025 +Contact: [email protected] +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>/possible_encoders Date: Nov 2025 Contact: [email protected] diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 791c4f33a90a..41c6f4733663 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -138,10 +138,11 @@ Last but not least, create one or more connectors:: sudo mkdir /config/vkms/my-vkms/connectors/connector0 -Connectors have 1 configurable attribute: +Connectors have 2 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. 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 e7f3ab54b5a1..d6a85d6c466f 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -1170,10 +1170,75 @@ static ssize_t connector_status_store(struct config_item *item, return (ssize_t)count; } +static ssize_t connector_type_show(struct config_item *item, char *page) +{ + struct vkms_configfs_connector *connector; + int type; + + connector = connector_item_to_vkms_configfs_connector(item); + + scoped_guard(mutex, &connector->dev->lock) { + type = vkms_config_connector_get_type(connector->config); + } + + return sprintf(page, "%u", type); +} + +static ssize_t connector_type_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; + + switch (val) { + case DRM_MODE_CONNECTOR_Unknown: + case DRM_MODE_CONNECTOR_VGA: + case DRM_MODE_CONNECTOR_DVII: + case DRM_MODE_CONNECTOR_DVID: + case DRM_MODE_CONNECTOR_DVIA: + case DRM_MODE_CONNECTOR_Composite: + case DRM_MODE_CONNECTOR_SVIDEO: + case DRM_MODE_CONNECTOR_LVDS: + case DRM_MODE_CONNECTOR_Component: + case DRM_MODE_CONNECTOR_9PinDIN: + case DRM_MODE_CONNECTOR_DisplayPort: + case DRM_MODE_CONNECTOR_HDMIA: + case DRM_MODE_CONNECTOR_HDMIB: + case DRM_MODE_CONNECTOR_TV: + case DRM_MODE_CONNECTOR_eDP: + case DRM_MODE_CONNECTOR_VIRTUAL: + case DRM_MODE_CONNECTOR_DSI: + case DRM_MODE_CONNECTOR_DPI: + case DRM_MODE_CONNECTOR_SPI: + case DRM_MODE_CONNECTOR_USB: + break; + default: + return -EINVAL; + } + + scoped_guard(mutex, &connector->dev->lock) { + if (connector->dev->enabled) + return -EBUSY; + + vkms_config_connector_set_type(connector->config, val); + } + + return count; +} + CONFIGFS_ATTR(connector_, status); +CONFIGFS_ATTR(connector_, type); static struct configfs_attribute *connector_item_attrs[] = { &connector_attr_status, + &connector_attr_type, NULL, }; -- 2.51.2
