]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/bridge: it6505: Switch to common helpers to power up/down dp link
authorAndy Yan <andy.yan@rock-chips.com>
Tue, 18 Mar 2025 06:34:39 +0000 (14:34 +0800)
committerDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Wed, 2 Apr 2025 14:41:27 +0000 (17:41 +0300)
Use the common dp link power up/down helpers to avoid duplicating code.

Signed-off-by: Andy Yan <andy.yan@rock-chips.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20250318063452.4983-5-andyshrk@163.com
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
drivers/gpu/drm/bridge/ite-it6505.c

index 4e8b1dcba64fcf09ffd68d1a57dec5d30190ebe6..1383d1e21afea1acb46b7bd28860908b58832dbc 100644 (file)
@@ -771,40 +771,6 @@ static void it6505_calc_video_info(struct it6505 *it6505)
                             DRM_MODE_ARG(&it6505->video_info));
 }
 
-static int it6505_drm_dp_link_set_power(struct drm_dp_aux *aux,
-                                       struct it6505_drm_dp_link *link,
-                                       u8 mode)
-{
-       u8 value;
-       int err;
-
-       /* DP_SET_POWER register is only available on DPCD v1.1 and later */
-       if (link->revision < DPCD_V_1_1)
-               return 0;
-
-       err = drm_dp_dpcd_readb(aux, DP_SET_POWER, &value);
-       if (err < 0)
-               return err;
-
-       value &= ~DP_SET_POWER_MASK;
-       value |= mode;
-
-       err = drm_dp_dpcd_writeb(aux, DP_SET_POWER, value);
-       if (err < 0)
-               return err;
-
-       if (mode == DP_SET_POWER_D0) {
-               /*
-                * According to the DP 1.1 specification, a "Sink Device must
-                * exit the power saving state within 1 ms" (Section 2.5.3.1,
-                * Table 5-52, "Sink Control Field" (register 0x600).
-                */
-               usleep_range(1000, 2000);
-       }
-
-       return 0;
-}
-
 static void it6505_clear_int(struct it6505 *it6505)
 {
        it6505_write(it6505, INT_STATUS_01, 0xFF);
@@ -2578,8 +2544,7 @@ static void it6505_irq_hpd(struct it6505 *it6505)
                }
                it6505->auto_train_retry = AUTO_TRAIN_RETRY;
 
-               it6505_drm_dp_link_set_power(&it6505->aux, &it6505->link,
-                                            DP_SET_POWER_D0);
+               drm_dp_link_power_up(&it6505->aux, it6505->link.revision);
                dp_sink_count = it6505_dpcd_read(it6505, DP_SINK_COUNT);
                it6505->sink_count = DP_GET_SINK_COUNT(dp_sink_count);
 
@@ -2910,8 +2875,7 @@ static enum drm_connector_status it6505_detect(struct it6505 *it6505)
        }
 
        if (it6505->hpd_state) {
-               it6505_drm_dp_link_set_power(&it6505->aux, &it6505->link,
-                                            DP_SET_POWER_D0);
+               drm_dp_link_power_up(&it6505->aux, it6505->link.revision);
                dp_sink_count = it6505_dpcd_read(it6505, DP_SINK_COUNT);
                it6505->sink_count = DP_GET_SINK_COUNT(dp_sink_count);
                DRM_DEV_DEBUG_DRIVER(dev, "it6505->sink_count:%d branch:%d",
@@ -3234,8 +3198,7 @@ static void it6505_bridge_atomic_enable(struct drm_bridge *bridge,
        it6505_int_mask_enable(it6505);
        it6505_video_reset(it6505);
 
-       it6505_drm_dp_link_set_power(&it6505->aux, &it6505->link,
-                                    DP_SET_POWER_D0);
+       drm_dp_link_power_up(&it6505->aux, it6505->link.revision);
 }
 
 static void it6505_bridge_atomic_disable(struct drm_bridge *bridge,
@@ -3247,8 +3210,7 @@ static void it6505_bridge_atomic_disable(struct drm_bridge *bridge,
        DRM_DEV_DEBUG_DRIVER(dev, "start");
 
        if (it6505->powered) {
-               it6505_drm_dp_link_set_power(&it6505->aux, &it6505->link,
-                                            DP_SET_POWER_D3);
+               drm_dp_link_power_down(&it6505->aux, it6505->link.revision);
                it6505_video_disable(it6505);
        }
 }