Commit 466f4388 authored by José Expósito's avatar José Expósito Committed by Luca Ceresoli
Browse files

drm/vkms: Allow to update the connector status



Implement the drm_connector_funcs.detect() callback to update the
connector status by returning the status stored in the configuration.

Tested-by: default avatarMark Yacoub <markyacoub@google.com>
Reviewed-by: default avatarLouis Chauvet <louis.chauvet@bootlin.com>
Reviewed-by: default avatarHarry Wentland <harry.wentland@amd.com>
Reviewed-by: default avatarLuca Ceresoli <luca.ceresoli@bootlin.com>
Signed-off-by: default avatarJosé Expósito <jose.exposito89@gmail.com>
Link: https://lore.kernel.org/r/20251016175618.10051-16-jose.exposito89@gmail.com


Signed-off-by: default avatarLuca Ceresoli <luca.ceresoli@bootlin.com>
parent 6f00987f
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -5,9 +5,37 @@
#include <drm/drm_managed.h>
#include <drm/drm_probe_helper.h>

#include "vkms_config.h"
#include "vkms_connector.h"

static enum drm_connector_status vkms_connector_detect(struct drm_connector *connector,
						       bool force)
{
	struct drm_device *dev = connector->dev;
	struct vkms_device *vkmsdev = drm_device_to_vkms_device(dev);
	struct vkms_connector *vkms_connector;
	enum drm_connector_status status;
	struct vkms_config_connector *connector_cfg;

	vkms_connector = drm_connector_to_vkms_connector(connector);

	/*
	 * The connector configuration might not exist if its configfs directory
	 * was deleted. Therefore, use the configuration if present or keep the
	 * current status if we can not access it anymore.
	 */
	status = connector->status;

	vkms_config_for_each_connector(vkmsdev->config, connector_cfg) {
		if (connector_cfg->connector == vkms_connector)
			status = vkms_config_connector_get_status(connector_cfg);
	}

	return status;
}

static const struct drm_connector_funcs vkms_connector_funcs = {
	.detect = vkms_connector_detect,
	.fill_modes = drm_helper_probe_single_connector_modes,
	.reset = drm_atomic_helper_connector_reset,
	.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
+3 −0
Original line number Diff line number Diff line
@@ -5,6 +5,9 @@

#include "vkms_drv.h"

#define drm_connector_to_vkms_connector(target) \
	container_of(target, struct vkms_connector, base)

/**
 * struct vkms_connector - VKMS custom type wrapping around the DRM connector
 *