drm/msm/dpu: move widebus logic to its own API
authorPaloma Arellano <quic_parellan@quicinc.com>
Thu, 22 Feb 2024 19:39:54 +0000 (11:39 -0800)
committerDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Mon, 4 Mar 2024 09:34:21 +0000 (11:34 +0200)
Widebus enablement is decided by the interfaces based on their specific
checks and that already happens with DSI/DP specific helpers. Let's
invoke these helpers from dpu_encoder_is_widebus_enabled() to make it
cleaner overall.

Signed-off-by: Paloma Arellano <quic_parellan@quicinc.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Patchwork: https://patchwork.freedesktop.org/patch/579632/
Link: https://lore.kernel.org/r/20240222194025.25329-10-quic_parellan@quicinc.com
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h

index c55178b5f5eedfabc58ec9ec975a2672281e439e..a6adf95c3d2cb8d0df0b411ee73cb70aadb27de5 100644 (file)
@@ -221,9 +221,21 @@ static u32 dither_matrix[DITHER_MATRIX_SZ] = {
 
 bool dpu_encoder_is_widebus_enabled(const struct drm_encoder *drm_enc)
 {
-       const struct dpu_encoder_virt *dpu_enc = to_dpu_encoder_virt(drm_enc);
+       const struct dpu_encoder_virt *dpu_enc;
+       struct msm_drm_private *priv = drm_enc->dev->dev_private;
+       const struct msm_display_info *disp_info;
+       int index;
+
+       dpu_enc = to_dpu_encoder_virt(drm_enc);
+       disp_info = &dpu_enc->disp_info;
+       index = disp_info->h_tile_instance[0];
+
+       if (disp_info->intf_type == INTF_DP)
+               return msm_dp_wide_bus_available(priv->dp[index]);
+       else if (disp_info->intf_type == INTF_DSI)
+               return msm_dsi_wide_bus_enabled(priv->dsi[index]);
 
-       return dpu_enc->wide_bus_en;
+       return false;
 }
 
 bool dpu_encoder_is_dsc_enabled(const struct drm_encoder *drm_enc)
@@ -1209,26 +1221,17 @@ static void dpu_encoder_virt_atomic_enable(struct drm_encoder *drm_enc,
        struct dpu_encoder_virt *dpu_enc = NULL;
        int ret = 0;
        struct drm_display_mode *cur_mode = NULL;
-       struct msm_drm_private *priv = drm_enc->dev->dev_private;
-       struct msm_display_info *disp_info;
-       int index;
 
        dpu_enc = to_dpu_encoder_virt(drm_enc);
-       disp_info = &dpu_enc->disp_info;
-       index = disp_info->h_tile_instance[0];
-
        dpu_enc->dsc = dpu_encoder_get_dsc_config(drm_enc);
 
        atomic_set(&dpu_enc->frame_done_timeout_cnt, 0);
 
-       if (disp_info->intf_type == INTF_DP)
-               dpu_enc->wide_bus_en = msm_dp_wide_bus_available(priv->dp[index]);
-       else if (disp_info->intf_type == INTF_DSI)
-               dpu_enc->wide_bus_en = msm_dsi_wide_bus_enabled(priv->dsi[index]);
-
        mutex_lock(&dpu_enc->enc_lock);
        cur_mode = &dpu_enc->base.crtc->state->adjusted_mode;
 
+       dpu_enc->wide_bus_en = dpu_encoder_is_widebus_enabled(drm_enc);
+
        trace_dpu_enc_enable(DRMID(drm_enc), cur_mode->hdisplay,
                             cur_mode->vdisplay);
 
index fe6b1d312a742e5d7f8a26b3e2cb75c26364df77..67aef59c1f99cf61fcb0d82cbab1e5b27414770b 100644 (file)
@@ -156,6 +156,10 @@ int dpu_encoder_get_linecount(struct drm_encoder *drm_enc);
  */
 int dpu_encoder_get_vsync_count(struct drm_encoder *drm_enc);
 
+/**
+ * dpu_encoder_is_widebus_enabled - return bool value if widebus is enabled
+ * @drm_enc:    Pointer to previously created drm encoder structure
+ */
 bool dpu_encoder_is_widebus_enabled(const struct drm_encoder *drm_enc);
 
 /**