drm/bridge: tc358767: Implement atomic_check callback
Implement .atomic_check callback which prevents user space from setting unsupported mode. The tc_edp_common_atomic_check() variant is already prepared for DSI-to-DPI mode addition, which has different frequency limits. Reviewed-by: Lucas Stach <l.stach@pengutronix.de> Tested-by: Lucas Stach <l.stach@pengutronix.de> # In both DPI to eDP and DSI to DPI mode. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Jonas Karlman <jonas@kwiboo.se> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com> Cc: Maxime Ripard <maxime@cerno.tech> Cc: Neil Armstrong <narmstrong@baylibre.com> Cc: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Robert Foss <robert.foss@linaro.org> Link: https://patchwork.freedesktop.org/patch/msgid/20220329085015.39159-6-marex@denx.de
This commit is contained in:
parent
f5be62394d
commit
65fdbb714d
@ -1289,6 +1289,31 @@ static bool tc_bridge_mode_fixup(struct drm_bridge *bridge,
|
||||
return true;
|
||||
}
|
||||
|
||||
static int tc_common_atomic_check(struct drm_bridge *bridge,
|
||||
struct drm_bridge_state *bridge_state,
|
||||
struct drm_crtc_state *crtc_state,
|
||||
struct drm_connector_state *conn_state,
|
||||
const unsigned int max_khz)
|
||||
{
|
||||
tc_bridge_mode_fixup(bridge, &crtc_state->mode,
|
||||
&crtc_state->adjusted_mode);
|
||||
|
||||
if (crtc_state->adjusted_mode.clock > max_khz)
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tc_edp_atomic_check(struct drm_bridge *bridge,
|
||||
struct drm_bridge_state *bridge_state,
|
||||
struct drm_crtc_state *crtc_state,
|
||||
struct drm_connector_state *conn_state)
|
||||
{
|
||||
/* DPI->(e)DP interface clock limitation: upto 154 MHz */
|
||||
return tc_common_atomic_check(bridge, bridge_state, crtc_state,
|
||||
conn_state, 154000);
|
||||
}
|
||||
|
||||
static enum drm_mode_status
|
||||
tc_edp_mode_valid(struct drm_bridge *bridge,
|
||||
const struct drm_display_info *info,
|
||||
@ -1463,6 +1488,7 @@ static const struct drm_bridge_funcs tc_edp_bridge_funcs = {
|
||||
.detach = tc_edp_bridge_detach,
|
||||
.mode_valid = tc_edp_mode_valid,
|
||||
.mode_set = tc_bridge_mode_set,
|
||||
.atomic_check = tc_edp_atomic_check,
|
||||
.atomic_enable = tc_edp_bridge_atomic_enable,
|
||||
.atomic_disable = tc_edp_bridge_atomic_disable,
|
||||
.mode_fixup = tc_bridge_mode_fixup,
|
||||
|
Loading…
x
Reference in New Issue
Block a user