[PATCH 19/24] drm/msm/dp: drop redundant panel->connector
From: Dmitry Baryshkov
Date: Wed Jul 22 2026 - 02:40:46 EST
struct msm_dp_panel kept its own copy of the drm_connector, a plain alias
of msm_dp.connector assigned once in msm_dp_modeset_init(). It was only
dereferenced in three places, each of which either already has a
connector at hand or is reached from a caller that does:
- msm_dp_display_set_mode() runs from the .atomic_enable bridge
callback, which can fetch the connector from the atomic state;
- msm_dp_display_get_modes() is called from the .get_modes bridge
callback, which is passed the connector;
- msm_dp_panel_handle_sink_request() is called from
msm_dp_display_process_hpd_high(), which holds the connector.
Pass the connector down to those functions and drop the duplicate field.
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
---
drivers/gpu/drm/msm/dp/dp_display.c | 27 +++++++++++----------------
drivers/gpu/drm/msm/dp/dp_display.h | 3 ++-
drivers/gpu/drm/msm/dp/dp_drm.c | 2 +-
drivers/gpu/drm/msm/dp/dp_panel.c | 5 +++--
drivers/gpu/drm/msm/dp/dp_panel.h | 4 ++--
5 files changed, 19 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
index 7f55cace596f..461420a72820 100644
--- a/drivers/gpu/drm/msm/dp/dp_display.c
+++ b/drivers/gpu/drm/msm/dp/dp_display.c
@@ -304,7 +304,7 @@ static int msm_dp_display_process_hpd_high(struct msm_dp_display_private *dp)
dp->msm_dp_display.psr_supported = dp->panel->psr_cap.version && psr_enabled;
dp->audio_supported = info->has_audio;
- msm_dp_panel_handle_sink_request(dp->panel, drm_edid);
+ msm_dp_panel_handle_sink_request(dp->panel, drm_edid, connector);
/*
* set sink to normal operation mode -- D0
@@ -600,7 +600,8 @@ static int msm_dp_init_sub_modules(struct msm_dp_display_private *dp)
static int msm_dp_display_set_mode(struct msm_dp *msm_dp_display,
const struct drm_display_mode *adjusted_mode,
- struct msm_dp_panel *msm_dp_panel)
+ struct msm_dp_panel *msm_dp_panel,
+ struct drm_connector *connector)
{
struct msm_dp_display_private *dp;
u32 bpp;
@@ -611,7 +612,7 @@ static int msm_dp_display_set_mode(struct msm_dp *msm_dp_display,
if (msm_dp_display_check_video_test(msm_dp_display))
bpp = msm_dp_display_get_test_bpp(msm_dp_display);
else
- bpp = msm_dp_panel->connector->display_info.bpc * 3;
+ bpp = connector->display_info.bpc * 3;
msm_dp_panel->msm_dp_mode.bpp = bpp ? bpp : 24; /* Default bpp */
msm_dp_panel->msm_dp_mode.v_active_low =
@@ -619,7 +620,7 @@ static int msm_dp_display_set_mode(struct msm_dp *msm_dp_display,
msm_dp_panel->msm_dp_mode.h_active_low =
!!(adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC);
msm_dp_panel->msm_dp_mode.out_fmt_is_yuv_420 =
- drm_mode_is_420_only(&msm_dp_panel->connector->display_info, adjusted_mode) &&
+ drm_mode_is_420_only(&connector->display_info, adjusted_mode) &&
msm_dp_panel->vsc_sdp_supported;
msm_dp_panel_init_panel_info(msm_dp_panel);
@@ -769,18 +770,14 @@ enum drm_mode_status msm_dp_bridge_mode_valid(struct drm_bridge *bridge,
return MODE_OK;
}
-int msm_dp_display_get_modes(struct msm_dp *dp)
+int msm_dp_display_get_modes(struct msm_dp *dp, struct drm_connector *connector)
{
- struct msm_dp_display_private *msm_dp_display;
-
if (!dp) {
DRM_ERROR("invalid params\n");
return 0;
}
- msm_dp_display = container_of(dp, struct msm_dp_display_private, msm_dp_display);
-
- return drm_edid_connector_add_modes(msm_dp_display->panel->connector);
+ return drm_edid_connector_add_modes(connector);
}
bool msm_dp_display_check_video_test(struct msm_dp *dp)
@@ -1350,13 +1347,10 @@ static int msm_dp_modeset_init(struct msm_display *display,
struct drm_device *dev, struct drm_encoder *encoder)
{
struct msm_dp *msm_dp_display = container_of(display, struct msm_dp, display);
- struct msm_dp_display_private *msm_dp_priv;
int ret;
msm_dp_display->drm_dev = dev;
- msm_dp_priv = container_of(msm_dp_display, struct msm_dp_display_private, msm_dp_display);
-
ret = msm_dp_bridge_init(msm_dp_display, dev, encoder);
if (ret) {
DRM_DEV_ERROR(dev->dev,
@@ -1373,8 +1367,6 @@ static int msm_dp_modeset_init(struct msm_display *display,
return ret;
}
- msm_dp_priv->panel->connector = msm_dp_display->connector;
-
return 0;
}
@@ -1438,9 +1430,12 @@ void msm_dp_bridge_atomic_pre_enable(struct drm_bridge *drm_bridge,
struct msm_dp_display_private *msm_dp_display;
struct drm_crtc *crtc;
struct drm_crtc_state *crtc_state;
+ struct drm_connector *connector;
msm_dp_display = container_of(dp, struct msm_dp_display_private, msm_dp_display);
+ connector = drm_atomic_get_new_connector_for_encoder(state, drm_bridge->encoder);
+
crtc = drm_atomic_get_new_crtc_for_encoder(state, drm_bridge->encoder);
if (!crtc)
return;
@@ -1451,7 +1446,7 @@ 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(dp, &crtc_state->adjusted_mode, msm_dp_display->panel, connector);
}
void msm_dp_bridge_atomic_enable(struct drm_bridge *drm_bridge,
diff --git a/drivers/gpu/drm/msm/dp/dp_display.h b/drivers/gpu/drm/msm/dp/dp_display.h
index 8c34a473c7db..f1523dbe33d5 100644
--- a/drivers/gpu/drm/msm/dp/dp_display.h
+++ b/drivers/gpu/drm/msm/dp/dp_display.h
@@ -28,7 +28,8 @@ struct msm_dp {
bool psr_supported;
};
-int msm_dp_display_get_modes(struct msm_dp *msm_dp_display);
+int msm_dp_display_get_modes(struct msm_dp *msm_dp_display,
+ struct drm_connector *connector);
bool msm_dp_display_check_video_test(struct msm_dp *msm_dp_display);
int msm_dp_display_get_test_bpp(struct msm_dp *msm_dp_display);
void msm_dp_display_signal_audio_start(struct msm_dp *msm_dp_display);
diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_drm.c
index da005babe411..8dbe7d682ddf 100644
--- a/drivers/gpu/drm/msm/dp/dp_drm.c
+++ b/drivers/gpu/drm/msm/dp/dp_drm.c
@@ -32,7 +32,7 @@ static int msm_dp_bridge_get_modes(struct drm_bridge *bridge, struct drm_connect
dp = to_dp_bridge(bridge)->msm_dp_display;
/* pluggable case assumes EDID is read when HPD */
- rc = msm_dp_display_get_modes(dp);
+ rc = msm_dp_display_get_modes(dp, connector);
if (rc <= 0) {
DRM_ERROR("failed to get DP sink modes, rc=%d\n", rc);
return rc;
diff --git a/drivers/gpu/drm/msm/dp/dp_panel.c b/drivers/gpu/drm/msm/dp/dp_panel.c
index bde4a772d22c..30a44e7e8e62 100644
--- a/drivers/gpu/drm/msm/dp/dp_panel.c
+++ b/drivers/gpu/drm/msm/dp/dp_panel.c
@@ -305,7 +305,8 @@ static u8 msm_dp_panel_get_edid_checksum(const struct edid *edid)
}
void msm_dp_panel_handle_sink_request(struct msm_dp_panel *msm_dp_panel,
- const struct drm_edid *drm_edid)
+ const struct drm_edid *drm_edid,
+ struct drm_connector *connector)
{
struct msm_dp_panel_private *panel;
@@ -324,7 +325,7 @@ void msm_dp_panel_handle_sink_request(struct msm_dp_panel *msm_dp_panel,
if (edid)
checksum = msm_dp_panel_get_edid_checksum(edid);
else
- checksum = msm_dp_panel->connector->real_edid_checksum;
+ checksum = connector->real_edid_checksum;
msm_dp_link_send_edid_checksum(panel->link, checksum);
msm_dp_link_send_test_response(panel->link);
diff --git a/drivers/gpu/drm/msm/dp/dp_panel.h b/drivers/gpu/drm/msm/dp/dp_panel.h
index 53b7b4463551..f73e11e57ced 100644
--- a/drivers/gpu/drm/msm/dp/dp_panel.h
+++ b/drivers/gpu/drm/msm/dp/dp_panel.h
@@ -33,7 +33,6 @@ struct msm_dp_panel {
u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS];
struct msm_dp_link_info link_info;
- struct drm_connector *connector;
struct msm_dp_display_mode msm_dp_mode;
struct msm_dp_panel_psr psr_cap;
bool video_test;
@@ -51,7 +50,8 @@ int msm_dp_panel_read_link_caps(struct msm_dp_panel *msm_dp_panel,
u32 msm_dp_panel_get_mode_bpp(struct msm_dp_panel *msm_dp_panel, u32 mode_max_bpp,
u32 mode_pclk_khz);
void msm_dp_panel_handle_sink_request(struct msm_dp_panel *msm_dp_panel,
- const struct drm_edid *drm_edid);
+ const struct drm_edid *drm_edid,
+ struct drm_connector *connector);
void msm_dp_panel_tpg_config(struct msm_dp_panel *msm_dp_panel, bool enable);
void msm_dp_panel_clear_dsc_dto(struct msm_dp_panel *msm_dp_panel);
--
2.47.3