OSDN Git Service

drm/probe-helper: abstract .get_modes() connector helper call
authorJani Nikula <jani.nikula@intel.com>
Wed, 8 Jun 2022 07:50:37 +0000 (10:50 +0300)
committerJani Nikula <jani.nikula@intel.com>
Mon, 13 Jun 2022 09:31:27 +0000 (12:31 +0300)
Abstract the .get_modes() connector helper call, including the
override/firmware EDID fallback, for clarity.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/a4de51efc246e4f5bcbf7b84d66bb49aaf7fd974.1654674560.git.jani.nikula@intel.com
drivers/gpu/drm/drm_probe_helper.c

index 75a7164..a8d26b2 100644 (file)
@@ -354,6 +354,24 @@ drm_helper_probe_detect(struct drm_connector *connector,
 }
 EXPORT_SYMBOL(drm_helper_probe_detect);
 
+static int drm_helper_probe_get_modes(struct drm_connector *connector)
+{
+       const struct drm_connector_helper_funcs *connector_funcs =
+               connector->helper_private;
+       int count;
+
+       count = connector_funcs->get_modes(connector);
+
+       /*
+        * Fallback for when DDC probe failed in drm_get_edid() and thus skipped
+        * override/firmware EDID.
+        */
+       if (count == 0 && connector->status == connector_status_connected)
+               count = drm_add_override_edid_modes(connector);
+
+       return count;
+}
+
 static int __drm_helper_update_and_validate(struct drm_connector *connector,
                                            uint32_t maxX, uint32_t maxY,
                                            struct drm_modeset_acquire_ctx *ctx)
@@ -473,8 +491,6 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
 {
        struct drm_device *dev = connector->dev;
        struct drm_display_mode *mode;
-       const struct drm_connector_helper_funcs *connector_funcs =
-               connector->helper_private;
        int count = 0, ret;
        enum drm_connector_status old_status;
        struct drm_modeset_acquire_ctx ctx;
@@ -559,14 +575,7 @@ retry:
                goto exit;
        }
 
-       count = (*connector_funcs->get_modes)(connector);
-
-       /*
-        * Fallback for when DDC probe failed in drm_get_edid() and thus skipped
-        * override/firmware EDID.
-        */
-       if (count == 0 && connector->status == connector_status_connected)
-               count = drm_add_override_edid_modes(connector);
+       count = drm_helper_probe_get_modes(connector);
 
        if (count == 0 && (connector->status == connector_status_connected ||
                           connector->status == connector_status_unknown)) {