mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 05:31:37 -04:00
drm/bridge: cadence: cdns-mhdp8546-core: Add mode_valid hook to drm_bridge_funcs
Add cdns_mhdp_bridge_mode_valid() to check if specific mode is valid for
this bridge or not. In the legacy usecase with
!DRM_BRIDGE_ATTACH_NO_CONNECTOR we were using the hook from
drm_connector_helper_funcs but with DRM_BRIDGE_ATTACH_NO_CONNECTOR
we need to have mode_valid() in drm_bridge_funcs.
Without this patch, when using DRM_BRIDGE_ATTACH_NO_CONNECTOR
flag, the cdns_mhdp_bandwidth_ok() function would not be called
during mode validation, potentially allowing modes that exceed
the bridge's bandwidth capabilities to be incorrectly marked as
valid.
Fixes: c932ced6b5 ("drm/tidss: Update encoder/bridge chain connect model")
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Jayesh Choudhary <j-choudhary@ti.com>
Signed-off-by: Harikrishna Shenoy <h-shenoy@ti.com>
Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Link: https://patch.msgid.link/20251209120332.3559893-3-h-shenoy@ti.com
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
This commit is contained in:
committed by
Luca Ceresoli
parent
43d6508ddb
commit
6dbff34016
@@ -2162,6 +2162,25 @@ static const struct drm_edid *cdns_mhdp_bridge_edid_read(struct drm_bridge *brid
|
||||
return cdns_mhdp_edid_read(mhdp, connector);
|
||||
}
|
||||
|
||||
static enum drm_mode_status
|
||||
cdns_mhdp_bridge_mode_valid(struct drm_bridge *bridge,
|
||||
const struct drm_display_info *info,
|
||||
const struct drm_display_mode *mode)
|
||||
{
|
||||
struct cdns_mhdp_device *mhdp = bridge_to_mhdp(bridge);
|
||||
|
||||
mutex_lock(&mhdp->link_mutex);
|
||||
|
||||
if (!cdns_mhdp_bandwidth_ok(mhdp, mode, mhdp->link.num_lanes,
|
||||
mhdp->link.rate)) {
|
||||
mutex_unlock(&mhdp->link_mutex);
|
||||
return MODE_CLOCK_HIGH;
|
||||
}
|
||||
|
||||
mutex_unlock(&mhdp->link_mutex);
|
||||
return MODE_OK;
|
||||
}
|
||||
|
||||
static const struct drm_bridge_funcs cdns_mhdp_bridge_funcs = {
|
||||
.atomic_enable = cdns_mhdp_atomic_enable,
|
||||
.atomic_disable = cdns_mhdp_atomic_disable,
|
||||
@@ -2176,6 +2195,7 @@ static const struct drm_bridge_funcs cdns_mhdp_bridge_funcs = {
|
||||
.edid_read = cdns_mhdp_bridge_edid_read,
|
||||
.hpd_enable = cdns_mhdp_bridge_hpd_enable,
|
||||
.hpd_disable = cdns_mhdp_bridge_hpd_disable,
|
||||
.mode_valid = cdns_mhdp_bridge_mode_valid,
|
||||
};
|
||||
|
||||
static bool cdns_mhdp_detect_hpd(struct cdns_mhdp_device *mhdp, bool *hpd_pulse)
|
||||
|
||||
Reference in New Issue
Block a user