{
        int lane, lane_count, retval;
        u32 reg;
-       u8 link_align, link_status[2], adjust_request[2], spread;
+       u8 link_align, link_status[2], adjust_request[2];
 
        usleep_range(400, 401);
 
                dev_dbg(dp->dev, "final lane count = %.2x\n",
                        dp->link_train.lane_count);
 
-               retval = drm_dp_dpcd_readb(&dp->aux, DP_MAX_DOWNSPREAD,
-                                          &spread);
-               if (retval != 1) {
-                       dev_err(dp->dev, "failed to read downspread %d\n",
-                               retval);
-                       dp->fast_train_enable = false;
-               } else {
-                       dp->fast_train_enable =
-                               (spread & DP_NO_AUX_HANDSHAKE_LINK_TRAINING) ?
-                                       true : false;
-               }
-               dev_dbg(dp->dev, "fast link training %s\n",
-                       dp->fast_train_enable ? "supported" : "unsupported");
-
                dp->link_train.lt_state = FINISHED;
 
                return 0;
        return IRQ_HANDLED;
 }
 
+static int analogix_dp_fast_link_train_detection(struct analogix_dp_device *dp)
+{
+       int ret;
+       u8 spread;
+
+       ret = drm_dp_dpcd_readb(&dp->aux, DP_MAX_DOWNSPREAD, &spread);
+       if (ret != 1) {
+               dev_err(dp->dev, "failed to read downspread %d\n", ret);
+               return ret;
+       }
+       dp->fast_train_enable = !!(spread & DP_NO_AUX_HANDSHAKE_LINK_TRAINING);
+       dev_dbg(dp->dev, "fast link training %s\n",
+               dp->fast_train_enable ? "supported" : "unsupported");
+       return 0;
+}
+
 static int analogix_dp_commit(struct analogix_dp_device *dp)
 {
        int ret;
        if (ret)
                return ret;
 
-       if (dp->psr_enable)
+       if (dp->psr_enable) {
                ret = analogix_dp_enable_sink_psr(dp);
+               if (ret)
+                       return ret;
+       }
+
+       /* Check whether panel supports fast training */
+       ret =  analogix_dp_fast_link_train_detection(dp);
+       if (ret)
+               dp->psr_enable = false;
 
        return ret;
 }