]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/ddi: prefer poll_timeout_us() over readx_poll_timeout()
authorJani Nikula <jani.nikula@intel.com>
Thu, 28 Aug 2025 12:21:01 +0000 (15:21 +0300)
committerJani Nikula <jani.nikula@intel.com>
Thu, 4 Sep 2025 11:02:59 +0000 (14:02 +0300)
Unify on using poll_timeout_us() throughout instead of mixing with
readx_poll_timeout(). While the latter can be ever so slightly simpler,
they are both complicated enough that it's better to unify on one
approach only.

While at it, better separate the handling of error returns from
drm_dp_dpcd_readb() and the actual status byte. This is best achieved by
inlining the read_fec_detected_status() function, and switching to
drm_dp_dpcd_read_byte().

v2: Use drm_dp_dpcd_read_byte() (Imre)

Cc: Imre Deak <imre.deak@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
Link: https://lore.kernel.org/r/63b10a36c7ab545c640b24bc8fc007ce2ea74623.1756383233.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_ddi.c

index 4e4ea3a0ff836804cbad35454d988809a8d4dd1f..46017091bb0bcaebbf5a502a70a67fce2d56c749 100644 (file)
@@ -2340,34 +2340,24 @@ static void intel_dp_sink_set_fec_ready(struct intel_dp *intel_dp,
                drm_dbg_kms(display->drm, "Failed to clear FEC detected flags\n");
 }
 
-static int read_fec_detected_status(struct drm_dp_aux *aux)
-{
-       int ret;
-       u8 status;
-
-       ret = drm_dp_dpcd_readb(aux, DP_FEC_STATUS, &status);
-       if (ret < 0)
-               return ret;
-
-       return status;
-}
-
 static int wait_for_fec_detected(struct drm_dp_aux *aux, bool enabled)
 {
        struct intel_display *display = to_intel_display(aux->drm_dev);
        int mask = enabled ? DP_FEC_DECODE_EN_DETECTED : DP_FEC_DECODE_DIS_DETECTED;
-       int status;
-       int err;
+       u8 status = 0;
+       int ret, err;
 
-       err = readx_poll_timeout(read_fec_detected_status, aux, status,
-                                status & mask || status < 0,
-                                10000, 200000);
+       ret = poll_timeout_us(err = drm_dp_dpcd_read_byte(aux, DP_FEC_STATUS, &status),
+                             err || (status & mask),
+                             10 * 1000, 200 * 1000, false);
 
-       if (err || status < 0) {
+       /* Either can be non-zero, but not both */
+       ret = ret ?: err;
+       if (ret) {
                drm_dbg_kms(display->drm,
-                           "Failed waiting for FEC %s to get detected: %d (status %d)\n",
-                           str_enabled_disabled(enabled), err, status);
-               return err ? err : status;
+                           "Failed waiting for FEC %s to get detected: %d (status 0x%02x)\n",
+                           str_enabled_disabled(enabled), ret, status);
+               return ret;
        }
 
        return 0;