sudo mkdir /config/vkms/my-vkms/connectors/connector0
+Connectors have 1 configurable attribute:
+
+- status: Connection status: 1 connected, 2 disconnected, 3 unknown (same values
+ as those exposed by the "status" property of a connector)
+
To finish the configuration, link the different pipeline items::
sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/plane0/possible_crtcs
#include "vkms_drv.h"
#include "vkms_config.h"
#include "vkms_configfs.h"
+#include "vkms_connector.h"
/* To avoid registering configfs more than once or unregistering on error */
static bool is_configfs_registered;
.ct_owner = THIS_MODULE,
};
+static ssize_t connector_status_show(struct config_item *item, char *page)
+{
+ struct vkms_configfs_connector *connector;
+ enum drm_connector_status status;
+
+ connector = connector_item_to_vkms_configfs_connector(item);
+
+ scoped_guard(mutex, &connector->dev->lock)
+ status = vkms_config_connector_get_status(connector->config);
+
+ return sprintf(page, "%u", status);
+}
+
+static ssize_t connector_status_store(struct config_item *item,
+ const char *page, size_t count)
+{
+ struct vkms_configfs_connector *connector;
+ enum drm_connector_status status;
+
+ connector = connector_item_to_vkms_configfs_connector(item);
+
+ if (kstrtouint(page, 10, &status))
+ return -EINVAL;
+
+ if (status != connector_status_connected &&
+ status != connector_status_disconnected &&
+ status != connector_status_unknown)
+ return -EINVAL;
+
+ scoped_guard(mutex, &connector->dev->lock) {
+ vkms_config_connector_set_status(connector->config, status);
+
+ if (connector->dev->enabled)
+ vkms_trigger_connector_hotplug(connector->dev->config->dev);
+ }
+
+ return (ssize_t)count;
+}
+
+CONFIGFS_ATTR(connector_, status);
+
+static struct configfs_attribute *connector_item_attrs[] = {
+ &connector_attr_status,
+ NULL,
+};
+
static void connector_release(struct config_item *item)
{
struct vkms_configfs_connector *connector;
};
static const struct config_item_type connector_item_type = {
+ .ct_attrs = connector_item_attrs,
.ct_item_ops = &connector_item_operations,
.ct_owner = THIS_MODULE,
};