Commit 167dac97 authored by Bjorn Andersson's avatar Bjorn Andersson Committed by Rob Clark

drm/msm/dp: Modify prototype of encoder based API

Functions in the DisplayPort code that relates to individual instances
(encoders) are passed both the struct msm_dp and the struct drm_encoder.
But in a situation where multiple DP instances would exist this means
that the caller need to resolve which struct msm_dp relates to the
struct drm_encoder at hand.

Store a reference to the struct msm_dp associated with each
dpu_encoder_virt to allow the particular instance to be associate with
the encoder in the following patch.
Reviewed-by: default avatarAbhinav Kumar <abhinavk@codeaurora.org>
Reviewed-by: default avatarStephen Boyd <swboyd@chromium.org>
Signed-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
Link: https://lore.kernel.org/r/20211016221843.2167329-3-bjorn.andersson@linaro.orgSigned-off-by: default avatarRob Clark <robdclark@chromium.org>
parent d624e50a
...@@ -168,6 +168,7 @@ enum dpu_enc_rc_states { ...@@ -168,6 +168,7 @@ enum dpu_enc_rc_states {
* @vsync_event_work: worker to handle vsync event for autorefresh * @vsync_event_work: worker to handle vsync event for autorefresh
* @topology: topology of the display * @topology: topology of the display
* @idle_timeout: idle timeout duration in milliseconds * @idle_timeout: idle timeout duration in milliseconds
* @dp: msm_dp pointer, for DP encoders
*/ */
struct dpu_encoder_virt { struct dpu_encoder_virt {
struct drm_encoder base; struct drm_encoder base;
...@@ -206,6 +207,8 @@ struct dpu_encoder_virt { ...@@ -206,6 +207,8 @@ struct dpu_encoder_virt {
struct msm_display_topology topology; struct msm_display_topology topology;
u32 idle_timeout; u32 idle_timeout;
struct msm_dp *dp;
}; };
#define to_dpu_encoder_virt(x) container_of(x, struct dpu_encoder_virt, base) #define to_dpu_encoder_virt(x) container_of(x, struct dpu_encoder_virt, base)
...@@ -992,8 +995,8 @@ static void dpu_encoder_virt_mode_set(struct drm_encoder *drm_enc, ...@@ -992,8 +995,8 @@ static void dpu_encoder_virt_mode_set(struct drm_encoder *drm_enc,
trace_dpu_enc_mode_set(DRMID(drm_enc)); trace_dpu_enc_mode_set(DRMID(drm_enc));
if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS && priv->dp) if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS)
msm_dp_display_mode_set(priv->dp, drm_enc, mode, adj_mode); msm_dp_display_mode_set(dpu_enc->dp, drm_enc, mode, adj_mode);
list_for_each_entry(conn_iter, connector_list, head) list_for_each_entry(conn_iter, connector_list, head)
if (conn_iter->encoder == drm_enc) if (conn_iter->encoder == drm_enc)
...@@ -1174,9 +1177,8 @@ static void dpu_encoder_virt_enable(struct drm_encoder *drm_enc) ...@@ -1174,9 +1177,8 @@ static void dpu_encoder_virt_enable(struct drm_encoder *drm_enc)
_dpu_encoder_virt_enable_helper(drm_enc); _dpu_encoder_virt_enable_helper(drm_enc);
if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS && priv->dp) { if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS) {
ret = msm_dp_display_enable(priv->dp, ret = msm_dp_display_enable(dpu_enc->dp, drm_enc);
drm_enc);
if (ret) { if (ret) {
DPU_ERROR_ENC(dpu_enc, "dp display enable failed: %d\n", DPU_ERROR_ENC(dpu_enc, "dp display enable failed: %d\n",
ret); ret);
...@@ -1216,8 +1218,8 @@ static void dpu_encoder_virt_disable(struct drm_encoder *drm_enc) ...@@ -1216,8 +1218,8 @@ static void dpu_encoder_virt_disable(struct drm_encoder *drm_enc)
/* wait for idle */ /* wait for idle */
dpu_encoder_wait_for_event(drm_enc, MSM_ENC_TX_COMPLETE); dpu_encoder_wait_for_event(drm_enc, MSM_ENC_TX_COMPLETE);
if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS && priv->dp) { if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS) {
if (msm_dp_display_pre_disable(priv->dp, drm_enc)) if (msm_dp_display_pre_disable(dpu_enc->dp, drm_enc))
DPU_ERROR_ENC(dpu_enc, "dp display push idle failed\n"); DPU_ERROR_ENC(dpu_enc, "dp display push idle failed\n");
} }
...@@ -1245,8 +1247,8 @@ static void dpu_encoder_virt_disable(struct drm_encoder *drm_enc) ...@@ -1245,8 +1247,8 @@ static void dpu_encoder_virt_disable(struct drm_encoder *drm_enc)
DPU_DEBUG_ENC(dpu_enc, "encoder disabled\n"); DPU_DEBUG_ENC(dpu_enc, "encoder disabled\n");
if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS && priv->dp) { if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS) {
if (msm_dp_display_disable(priv->dp, drm_enc)) if (msm_dp_display_disable(dpu_enc->dp, drm_enc))
DPU_ERROR_ENC(dpu_enc, "dp display disable failed\n"); DPU_ERROR_ENC(dpu_enc, "dp display disable failed\n");
} }
...@@ -2162,7 +2164,8 @@ int dpu_encoder_setup(struct drm_device *dev, struct drm_encoder *enc, ...@@ -2162,7 +2164,8 @@ int dpu_encoder_setup(struct drm_device *dev, struct drm_encoder *enc,
timer_setup(&dpu_enc->vsync_event_timer, timer_setup(&dpu_enc->vsync_event_timer,
dpu_encoder_vsync_event_handler, dpu_encoder_vsync_event_handler,
0); 0);
else if (disp_info->intf_type == DRM_MODE_ENCODER_TMDS)
dpu_enc->dp = priv->dp;
INIT_DELAYED_WORK(&dpu_enc->delayed_off_work, INIT_DELAYED_WORK(&dpu_enc->delayed_off_work,
dpu_encoder_off_work); dpu_encoder_off_work);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment