mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 13:14:02 +02:00
drm/msm/dp: make bridge helpers use dp_display to allow re-use
dp_bridge helpers take drm_bridge as an input and extract the dp_display object to be used in the dp_display module. Rather than doing it in a roundabout way, directly pass the dp_display object to these helpers so that the MST bridge can also re-use the same helpers. Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Patchwork: https://patchwork.freedesktop.org/patch/742750/ Link: https://lore.kernel.org/r/20260728-dp_mstclean-v9-13-f7779fce10f4@oss.qualcomm.com Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
This commit is contained in:
parent
894a6e16ab
commit
e8d91d17f7
|
|
@ -740,25 +740,22 @@ static int msm_dp_display_disable(struct msm_dp_display_private *dp)
|
|||
|
||||
/**
|
||||
* msm_dp_bridge_mode_valid - callback to determine if specified mode is valid
|
||||
* @bridge: Pointer to drm bridge structure
|
||||
* @dp: Pointer to dp display structure
|
||||
* @info: display info
|
||||
* @mode: Pointer to drm mode structure
|
||||
* Returns: Validity status for specified mode
|
||||
*/
|
||||
enum drm_mode_status msm_dp_bridge_mode_valid(struct drm_bridge *bridge,
|
||||
const struct drm_display_info *info,
|
||||
const struct drm_display_mode *mode)
|
||||
enum drm_mode_status msm_dp_display_mode_valid(struct msm_dp *dp,
|
||||
const struct drm_display_info *info,
|
||||
const struct drm_display_mode *mode)
|
||||
{
|
||||
const u32 num_components = 3, default_bpp = 24;
|
||||
struct msm_dp_display_private *msm_dp_display;
|
||||
struct msm_dp_link_info *link_info;
|
||||
u32 mode_rate_khz = 0, supported_rate_khz = 0, mode_bpp = 0;
|
||||
struct msm_dp *dp;
|
||||
int mode_pclk_khz = mode->clock;
|
||||
bool is_yuv_420;
|
||||
|
||||
dp = to_dp_bridge(bridge)->msm_dp_display;
|
||||
|
||||
if (!dp || !mode_pclk_khz || !dp->connector) {
|
||||
DRM_ERROR("invalid params\n");
|
||||
return -EINVAL;
|
||||
|
|
@ -1404,18 +1401,16 @@ int msm_dp_modeset_init(struct msm_dp *msm_dp_display, struct drm_device *dev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
void msm_dp_bridge_atomic_pre_enable(struct drm_bridge *drm_bridge,
|
||||
struct drm_atomic_commit *state)
|
||||
void msm_dp_display_atomic_pre_enable(struct msm_dp *msm_dp_display,
|
||||
struct drm_atomic_commit *state)
|
||||
{
|
||||
struct msm_dp_bridge *msm_dp_bridge = to_dp_bridge(drm_bridge);
|
||||
struct msm_dp *dp = msm_dp_bridge->msm_dp_display;
|
||||
struct msm_dp_display_private *msm_dp_display;
|
||||
struct msm_dp_display_private *dp;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *crtc_state;
|
||||
|
||||
msm_dp_display = container_of(dp, struct msm_dp_display_private, msm_dp_display);
|
||||
dp = container_of(msm_dp_display, struct msm_dp_display_private, msm_dp_display);
|
||||
|
||||
crtc = drm_atomic_get_new_crtc_for_encoder(state, drm_bridge->encoder);
|
||||
crtc = drm_atomic_get_new_crtc_for_encoder(state, msm_dp_display->bridge->encoder);
|
||||
if (!crtc)
|
||||
return;
|
||||
crtc_state = drm_atomic_get_new_crtc_state(state, crtc);
|
||||
|
|
@ -1425,14 +1420,12 @@ void msm_dp_bridge_atomic_pre_enable(struct drm_bridge *drm_bridge,
|
|||
* state and runs before the bridge's .atomic_enable(), so the mode must
|
||||
* be programmed here, in .atomic_pre_enable().
|
||||
*/
|
||||
msm_dp_display_set_mode(dp, &crtc_state->adjusted_mode, msm_dp_display->panel);
|
||||
msm_dp_display_set_mode(msm_dp_display, &crtc_state->adjusted_mode, dp->panel);
|
||||
}
|
||||
|
||||
void msm_dp_bridge_atomic_enable(struct drm_bridge *drm_bridge,
|
||||
struct drm_atomic_commit *state)
|
||||
void msm_dp_display_atomic_enable(struct msm_dp *msm_dp_display,
|
||||
struct drm_atomic_commit *state)
|
||||
{
|
||||
struct msm_dp_bridge *msm_dp_bridge = to_dp_bridge(drm_bridge);
|
||||
struct msm_dp *msm_dp_display = msm_dp_bridge->msm_dp_display;
|
||||
int rc = 0;
|
||||
struct msm_dp_display_private *dp;
|
||||
|
||||
|
|
@ -1457,11 +1450,8 @@ void msm_dp_bridge_atomic_enable(struct drm_bridge *drm_bridge,
|
|||
drm_dbg_dp(msm_dp_display->drm_dev, "type=%d Done\n", msm_dp_display->connector_type);
|
||||
}
|
||||
|
||||
void msm_dp_bridge_atomic_disable(struct drm_bridge *drm_bridge,
|
||||
struct drm_atomic_commit *state)
|
||||
void msm_dp_display_atomic_disable(struct msm_dp *dp)
|
||||
{
|
||||
struct msm_dp_bridge *msm_dp_bridge = to_dp_bridge(drm_bridge);
|
||||
struct msm_dp *dp = msm_dp_bridge->msm_dp_display;
|
||||
struct msm_dp_display_private *msm_dp_display;
|
||||
|
||||
msm_dp_display = container_of(dp, struct msm_dp_display_private, msm_dp_display);
|
||||
|
|
@ -1478,11 +1468,8 @@ static void msm_dp_display_unprepare(struct msm_dp_display_private *dp)
|
|||
drm_dbg_dp(dp->drm_dev, "type=%d Done\n", msm_dp_display->connector_type);
|
||||
}
|
||||
|
||||
void msm_dp_bridge_atomic_post_disable(struct drm_bridge *drm_bridge,
|
||||
struct drm_atomic_commit *state)
|
||||
void msm_dp_display_atomic_post_disable(struct msm_dp *dp)
|
||||
{
|
||||
struct msm_dp_bridge *msm_dp_bridge = to_dp_bridge(drm_bridge);
|
||||
struct msm_dp *dp = msm_dp_bridge->msm_dp_display;
|
||||
struct msm_dp_display_private *msm_dp_display;
|
||||
|
||||
msm_dp_display = container_of(dp, struct msm_dp_display_private, msm_dp_display);
|
||||
|
|
|
|||
|
|
@ -33,5 +33,14 @@ void msm_dp_display_signal_audio_start(struct msm_dp *msm_dp_display);
|
|||
void msm_dp_display_signal_audio_complete(struct msm_dp *msm_dp_display);
|
||||
void msm_dp_display_set_psr(struct msm_dp *dp, bool enter);
|
||||
void msm_dp_display_debugfs_init(struct msm_dp *msm_dp_display, struct dentry *dentry, bool is_edp);
|
||||
void msm_dp_display_atomic_post_disable(struct msm_dp *dp_display);
|
||||
void msm_dp_display_atomic_disable(struct msm_dp *dp_display);
|
||||
void msm_dp_display_atomic_pre_enable(struct msm_dp *dp_display,
|
||||
struct drm_atomic_commit *state);
|
||||
void msm_dp_display_atomic_enable(struct msm_dp *dp_display,
|
||||
struct drm_atomic_commit *state);
|
||||
enum drm_mode_status msm_dp_display_mode_valid(struct msm_dp *dp,
|
||||
const struct drm_display_info *info,
|
||||
const struct drm_display_mode *mode);
|
||||
|
||||
#endif /* _DP_DISPLAY_H_ */
|
||||
|
|
|
|||
|
|
@ -49,6 +49,52 @@ static void msm_dp_bridge_debugfs_init(struct drm_bridge *bridge, struct dentry
|
|||
msm_dp_display_debugfs_init(dp, root, false);
|
||||
}
|
||||
|
||||
static void msm_dp_bridge_atomic_pre_enable(struct drm_bridge *drm_bridge,
|
||||
struct drm_atomic_commit *state)
|
||||
{
|
||||
struct msm_dp_bridge *dp_bridge = to_dp_bridge(drm_bridge);
|
||||
struct msm_dp *dp = dp_bridge->msm_dp_display;
|
||||
|
||||
msm_dp_display_atomic_pre_enable(dp, state);
|
||||
}
|
||||
|
||||
static void msm_dp_bridge_atomic_enable(struct drm_bridge *drm_bridge,
|
||||
struct drm_atomic_commit *state)
|
||||
{
|
||||
struct msm_dp_bridge *dp_bridge = to_dp_bridge(drm_bridge);
|
||||
struct msm_dp *dp = dp_bridge->msm_dp_display;
|
||||
|
||||
msm_dp_display_atomic_enable(dp, state);
|
||||
}
|
||||
|
||||
static void msm_dp_bridge_atomic_disable(struct drm_bridge *drm_bridge,
|
||||
struct drm_atomic_commit *state)
|
||||
{
|
||||
struct msm_dp_bridge *dp_bridge = to_dp_bridge(drm_bridge);
|
||||
struct msm_dp *dp = dp_bridge->msm_dp_display;
|
||||
|
||||
msm_dp_display_atomic_disable(dp);
|
||||
}
|
||||
|
||||
static void msm_dp_bridge_atomic_post_disable(struct drm_bridge *drm_bridge,
|
||||
struct drm_atomic_commit *state)
|
||||
{
|
||||
struct msm_dp_bridge *dp_bridge = to_dp_bridge(drm_bridge);
|
||||
struct msm_dp *dp = dp_bridge->msm_dp_display;
|
||||
|
||||
msm_dp_display_atomic_post_disable(dp);
|
||||
}
|
||||
|
||||
static enum drm_mode_status msm_dp_bridge_mode_valid(struct drm_bridge *drm_bridge,
|
||||
const struct drm_display_info *info,
|
||||
const struct drm_display_mode *mode)
|
||||
{
|
||||
struct msm_dp_bridge *dp_bridge = to_dp_bridge(drm_bridge);
|
||||
struct msm_dp *dp = dp_bridge->msm_dp_display;
|
||||
|
||||
return msm_dp_display_mode_valid(dp, info, mode);
|
||||
}
|
||||
|
||||
static const struct drm_bridge_funcs msm_dp_bridge_ops = {
|
||||
.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
|
||||
.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
|
||||
|
|
@ -116,7 +162,7 @@ static void msm_edp_bridge_atomic_enable(struct drm_bridge *drm_bridge,
|
|||
return;
|
||||
}
|
||||
|
||||
msm_dp_bridge_atomic_enable(drm_bridge, state);
|
||||
msm_dp_display_atomic_enable(dp, state);
|
||||
}
|
||||
|
||||
static void msm_edp_bridge_atomic_disable(struct drm_bridge *drm_bridge,
|
||||
|
|
|
|||
|
|
@ -27,17 +27,6 @@ int msm_dp_bridge_init(struct msm_dp *msm_dp_display, struct drm_device *dev,
|
|||
|
||||
enum drm_connector_status msm_dp_bridge_detect(struct drm_bridge *bridge,
|
||||
struct drm_connector *connector);
|
||||
void msm_dp_bridge_atomic_pre_enable(struct drm_bridge *drm_bridge,
|
||||
struct drm_atomic_commit *state);
|
||||
void msm_dp_bridge_atomic_enable(struct drm_bridge *drm_bridge,
|
||||
struct drm_atomic_commit *state);
|
||||
void msm_dp_bridge_atomic_disable(struct drm_bridge *drm_bridge,
|
||||
struct drm_atomic_commit *state);
|
||||
void msm_dp_bridge_atomic_post_disable(struct drm_bridge *drm_bridge,
|
||||
struct drm_atomic_commit *state);
|
||||
enum drm_mode_status msm_dp_bridge_mode_valid(struct drm_bridge *bridge,
|
||||
const struct drm_display_info *info,
|
||||
const struct drm_display_mode *mode);
|
||||
void msm_dp_bridge_hpd_enable(struct drm_bridge *bridge);
|
||||
void msm_dp_bridge_hpd_disable(struct drm_bridge *bridge);
|
||||
void msm_dp_bridge_hpd_notify(struct drm_bridge *bridge,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user