]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/client: Send pending hotplug events after resume
authorThomas Zimmermann <tzimmermann@suse.de>
Thu, 12 Dec 2024 17:08:44 +0000 (18:08 +0100)
committerMaarten Lankhorst <dev@lankhorst.se>
Wed, 5 Mar 2025 20:48:49 +0000 (21:48 +0100)
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>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241212170913.185939-4-tzimmermann@suse.de
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
drivers/gpu/drm/drm_client_event.c
include/drm/drm_client.h

index 8514df4a2e65a7698a561ba790be2a58ec15e6d7..bd93cd93d51907b1e3099e4892000be08d8f9ccc 100644 (file)
@@ -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;
 }
 
index 3b13cf29ed55c636b19c6611f5236563cb0bc175..146ca80e35db682ef6214d5b260b68dd63671c8c 100644 (file)
@@ -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:
         *