drm/probe_helper: extract two helper functions
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Tue, 24 Jan 2023 10:45:47 +0000 (12:45 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Tue, 7 Feb 2023 14:07:19 +0000 (15:07 +0100)
Extract drm_kms_helper_enable_hpd() and drm_kms_helper_disable_hpd(),
two helpers that enable and disable HPD handling on all device's
connectors.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20230124104548.3234554-1-dmitry.baryshkov@linaro.org
(cherry picked from commit cbf143b282c64e59559cc8351c0b5b1ab4bbdcbe)
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
drivers/gpu/drm/drm_probe_helper.c

index 95aeeed..ab787d7 100644 (file)
@@ -222,6 +222,45 @@ drm_connector_mode_valid(struct drm_connector *connector,
        return ret;
 }
 
+static void drm_kms_helper_disable_hpd(struct drm_device *dev)
+{
+       struct drm_connector *connector;
+       struct drm_connector_list_iter conn_iter;
+
+       drm_connector_list_iter_begin(dev, &conn_iter);
+       drm_for_each_connector_iter(connector, &conn_iter) {
+               const struct drm_connector_helper_funcs *funcs =
+                       connector->helper_private;
+
+               if (funcs && funcs->disable_hpd)
+                       funcs->disable_hpd(connector);
+       }
+       drm_connector_list_iter_end(&conn_iter);
+}
+
+static bool drm_kms_helper_enable_hpd(struct drm_device *dev)
+{
+       bool poll = false;
+       struct drm_connector *connector;
+       struct drm_connector_list_iter conn_iter;
+
+       drm_connector_list_iter_begin(dev, &conn_iter);
+       drm_for_each_connector_iter(connector, &conn_iter) {
+               const struct drm_connector_helper_funcs *funcs =
+                       connector->helper_private;
+
+               if (funcs && funcs->enable_hpd)
+                       funcs->enable_hpd(connector);
+
+               if (connector->polled & (DRM_CONNECTOR_POLL_CONNECT |
+                                        DRM_CONNECTOR_POLL_DISCONNECT))
+                       poll = true;
+       }
+       drm_connector_list_iter_end(&conn_iter);
+
+       return poll;
+}
+
 #define DRM_OUTPUT_POLL_PERIOD (10*HZ)
 /**
  * drm_kms_helper_poll_enable - re-enable output polling.
@@ -241,26 +280,12 @@ drm_connector_mode_valid(struct drm_connector *connector,
 void drm_kms_helper_poll_enable(struct drm_device *dev)
 {
        bool poll = false;
-       struct drm_connector *connector;
-       struct drm_connector_list_iter conn_iter;
        unsigned long delay = DRM_OUTPUT_POLL_PERIOD;
 
        if (!dev->mode_config.poll_enabled || !drm_kms_helper_poll)
                return;
 
-       drm_connector_list_iter_begin(dev, &conn_iter);
-       drm_for_each_connector_iter(connector, &conn_iter) {
-               const struct drm_connector_helper_funcs *funcs =
-                       connector->helper_private;
-
-               if (funcs && funcs->enable_hpd)
-                       funcs->enable_hpd(connector);
-
-               if (connector->polled & (DRM_CONNECTOR_POLL_CONNECT |
-                                        DRM_CONNECTOR_POLL_DISCONNECT))
-                       poll = true;
-       }
-       drm_connector_list_iter_end(&conn_iter);
+       poll = drm_kms_helper_enable_hpd(dev);
 
        if (dev->mode_config.delayed_event) {
                /*
@@ -810,24 +835,13 @@ EXPORT_SYMBOL(drm_kms_helper_is_poll_worker);
 
 static void drm_kms_helper_poll_disable_fini(struct drm_device *dev, bool fini)
 {
-       struct drm_connector *connector;
-       struct drm_connector_list_iter conn_iter;
-
        if (!dev->mode_config.poll_enabled)
                return;
 
        if (fini)
                dev->mode_config.poll_enabled = false;
 
-       drm_connector_list_iter_begin(dev, &conn_iter);
-       drm_for_each_connector_iter(connector, &conn_iter) {
-               const struct drm_connector_helper_funcs *funcs =
-                       connector->helper_private;
-
-               if (funcs && funcs->disable_hpd)
-                       funcs->disable_hpd(connector);
-       }
-       drm_connector_list_iter_end(&conn_iter);
+       drm_kms_helper_disable_hpd(dev);
 
        cancel_delayed_work_sync(&dev->mode_config.output_poll_work);
 }