]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/i915/lspcon: use generic poll_timeout_us() instead of wait_for()
authorJani Nikula <jani.nikula@intel.com>
Thu, 28 Aug 2025 12:20:59 +0000 (15:20 +0300)
committerJani Nikula <jani.nikula@intel.com>
Thu, 4 Sep 2025 11:02:59 +0000 (14:02 +0300)
Prefer generic poll helpers over i915 custom helpers.

The functional change is losing the exponentially growing sleep of
wait_for(), which used to be 10, 20, 40, ..., 640, and 1280 us.

Use an arbitrary constant 5 ms sleep instead. The timeouts remain, being
400 ms or 800 ms, depending on the case.

Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
Link: https://lore.kernel.org/r/4065fa96c0ef6afd51a384f365761d2ca802256b.1756383233.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_lspcon.c

index abc4b562083d50458411051e18fdf6373411bdf4..d56026c4efddd62e58afacc0f3858c76ffcb4e4c 100644 (file)
@@ -23,6 +23,8 @@
  *
  */
 
+#include <linux/iopoll.h>
+
 #include <drm/display/drm_dp_dual_mode_helper.h>
 #include <drm/display/drm_hdmi_helper.h>
 #include <drm/drm_atomic_helper.h>
@@ -181,6 +183,8 @@ static enum drm_lspcon_mode lspcon_wait_mode(struct intel_lspcon *lspcon,
        struct intel_dp *intel_dp = lspcon_to_intel_dp(lspcon);
        struct intel_display *display = to_intel_display(intel_dp);
        enum drm_lspcon_mode current_mode;
+       int timeout_us;
+       int ret;
 
        current_mode = lspcon_get_current_mode(lspcon);
        if (current_mode == mode)
@@ -189,9 +193,12 @@ static enum drm_lspcon_mode lspcon_wait_mode(struct intel_lspcon *lspcon,
        drm_dbg_kms(display->drm, "Waiting for LSPCON mode %s to settle\n",
                    lspcon_mode_name(mode));
 
-       wait_for((current_mode = lspcon_get_current_mode(lspcon)) == mode,
-                lspcon_get_mode_settle_timeout(lspcon));
-       if (current_mode != mode)
+       timeout_us = lspcon_get_mode_settle_timeout(lspcon) * 1000;
+
+       ret = poll_timeout_us(current_mode = lspcon_get_current_mode(lspcon),
+                             current_mode == mode,
+                             5000, timeout_us, false);
+       if (ret)
                drm_err(display->drm, "LSPCON mode hasn't settled\n");
 
 out: