Commit 5d156a9c authored by Andy Yan's avatar Andy Yan Committed by Dmitry Baryshkov
Browse files

drm/bridge: Pass down connector to drm bridge detect hook



In some application scenarios, we hope to get the corresponding
connector when the bridge's detect hook is invoked.

In most cases, we can get the connector by drm_atomic_get_connector_for_encoder
if the encoder attached to the bridge is enabled, however there will
still be some scenarios where the detect hook of the bridge is called
but the corresponding encoder has not been enabled yet. For instance,
this occurs when the device is hot plug in for the first time.

Since the call to bridge's detect is initiated by the connector, passing
down the corresponding connector directly will make things simpler.

Signed-off-by: default avatarAndy Yan <andy.yan@rock-chips.com>
Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20250703125027.311109-3-andyshrk@163.com


[DB: added the chunk to the cdn-dp driver]
Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
parent 02bb63d1
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -864,7 +864,8 @@ static int adv7511_bridge_attach(struct drm_bridge *bridge,
	return ret;
}

static enum drm_connector_status adv7511_bridge_detect(struct drm_bridge *bridge)
static enum drm_connector_status
adv7511_bridge_detect(struct drm_bridge *bridge, struct drm_connector *connector)
{
	struct adv7511 *adv = bridge_to_adv7511(bridge);

+1 −1
Original line number Diff line number Diff line
@@ -2448,7 +2448,7 @@ anx7625_audio_update_connector_status(struct anx7625_data *ctx,
				      enum drm_connector_status status);

static enum drm_connector_status
anx7625_bridge_detect(struct drm_bridge *bridge)
anx7625_bridge_detect(struct drm_bridge *bridge, struct drm_connector *connector)
{
	struct anx7625_data *ctx = bridge_to_anx7625(bridge);
	struct device *dev = ctx->dev;
+2 −1
Original line number Diff line number Diff line
@@ -2143,7 +2143,8 @@ static int cdns_mhdp_atomic_check(struct drm_bridge *bridge,
	return 0;
}

static enum drm_connector_status cdns_mhdp_bridge_detect(struct drm_bridge *bridge)
static enum drm_connector_status
cdns_mhdp_bridge_detect(struct drm_bridge *bridge, struct drm_connector *connector)
{
	struct cdns_mhdp_device *mhdp = bridge_to_mhdp(bridge);

+1 −1
Original line number Diff line number Diff line
@@ -215,7 +215,7 @@ static enum drm_connector_status ch7033_connector_detect(
{
	struct ch7033_priv *priv = conn_to_ch7033_priv(connector);

	return drm_bridge_detect(priv->next_bridge);
	return drm_bridge_detect(priv->next_bridge, connector);
}

static const struct drm_connector_funcs ch7033_connector_funcs = {
+8 −3
Original line number Diff line number Diff line
@@ -40,8 +40,7 @@ static int display_connector_attach(struct drm_bridge *bridge,
	return flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR ? 0 : -EINVAL;
}

static enum drm_connector_status
display_connector_detect(struct drm_bridge *bridge)
static enum drm_connector_status display_connector_detect(struct drm_bridge *bridge)
{
	struct display_connector *conn = to_display_connector(bridge);

@@ -82,6 +81,12 @@ display_connector_detect(struct drm_bridge *bridge)
	}
}

static enum drm_connector_status
display_connector_bridge_detect(struct drm_bridge *bridge, struct drm_connector *connector)
{
	return display_connector_detect(bridge);
}

static const struct drm_edid *display_connector_edid_read(struct drm_bridge *bridge,
							  struct drm_connector *connector)
{
@@ -172,7 +177,7 @@ static u32 *display_connector_get_input_bus_fmts(struct drm_bridge *bridge,

static const struct drm_bridge_funcs display_connector_bridge_funcs = {
	.attach = display_connector_attach,
	.detect = display_connector_detect,
	.detect = display_connector_bridge_detect,
	.edid_read = display_connector_edid_read,
	.atomic_get_output_bus_fmts = display_connector_get_output_bus_fmts,
	.atomic_get_input_bus_fmts = display_connector_get_input_bus_fmts,
Loading