diff mbox series

[03/12] drm/client: Send pending hotplug events after resume

Message ID 20241212170913.185939-4-tzimmermann@suse.de (mailing list archive)
State New, archived
Headers show
Series drm/{i915,xe}: Convert to DRM client setup | expand

Commit Message

Thomas Zimmermann Dec. 12, 2024, 5:08 p.m. UTC
If a hotplug event arrives while the client has been suspended,
DRM's client code will deliver the event after resuming. The
functionality has been taken form i915, where it can be removed
by a later commit.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/drm_client_event.c | 9 +++++++++
 include/drm/drm_client.h           | 8 ++++++++
 2 files changed, 17 insertions(+)
diff mbox series

Patch

diff --git a/drivers/gpu/drm/drm_client_event.c b/drivers/gpu/drm/drm_client_event.c
index 8514df4a2e65..bd93cd93d519 100644
--- a/drivers/gpu/drm/drm_client_event.c
+++ b/drivers/gpu/drm/drm_client_event.c
@@ -60,6 +60,12 @@  static void drm_client_hotplug(struct drm_client_dev *client)
 	if (client->hotplug_failed)
 		return;
 
+	if (client->suspended) {
+		client->hotplug_pending = true;
+		return;
+	}
+
+	client->hotplug_pending = false;
 	ret = client->funcs->hotplug(client);
 	drm_dbg_kms(dev, "%s: ret=%d\n", client->name, ret);
 	if (ret)
@@ -159,6 +165,9 @@  static int drm_client_resume(struct drm_client_dev *client, bool holds_console_l
 
 	client->suspended = false;
 
+	if (client->hotplug_pending)
+		drm_client_hotplug(client);
+
 	return ret;
 }
 
diff --git a/include/drm/drm_client.h b/include/drm/drm_client.h
index 3b13cf29ed55..146ca80e35db 100644
--- a/include/drm/drm_client.h
+++ b/include/drm/drm_client.h
@@ -142,6 +142,14 @@  struct drm_client_dev {
 	 */
 	bool suspended;
 
+	/**
+	 * @hotplug_pending:
+	 *
+	 * A hotplug event has been received while the client was suspended.
+	 * Try again on resume.
+	 */
+	bool hotplug_pending;
+
 	/**
 	 * @hotplug_failed:
 	 *