Unverified Commit 65fdbb71 authored by Marek Vasut's avatar Marek Vasut Committed by Robert Foss
Browse files

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: default avatarLucas 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: default avatarMarek 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: default avatarRobert Foss <robert.foss@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20220329085015.39159-6-marex@denx.de
parent f5be6239
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -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,