Commit 68573a56 authored by Biju Das's avatar Biju Das
Browse files

drm: renesas: rz-du: rzg2l_du_encoder: Fix max dot clock for DPI



As per the RZ/G2UL hardware manual Table 33.4 Clock List, the maximum
dot clock for the DPI interface is 83.5 MHz. Add mode_valid callback
to reject modes greater than 83.5 MHz.

Suggested-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: default avatarBiju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: default avatarLad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241022082433.32513-3-biju.das.jz@bp.renesas.com
parent e22c857a
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@
#include <linux/export.h>
#include <linux/of.h>

#include <drm/drm_atomic_helper.h>
#include <drm/drm_bridge.h>
#include <drm/drm_bridge_connector.h>
#include <drm/drm_panel.h>
@@ -24,6 +25,22 @@
static const struct drm_encoder_funcs rzg2l_du_encoder_funcs = {
};

static enum drm_mode_status
rzg2l_du_encoder_mode_valid(struct drm_encoder *encoder,
			    const struct drm_display_mode *mode)
{
	struct rzg2l_du_encoder *renc = to_rzg2l_encoder(encoder);

	if (renc->output == RZG2L_DU_OUTPUT_DPAD0 && mode->clock > 83500)
		return MODE_CLOCK_HIGH;

	return MODE_OK;
}

static const struct drm_encoder_helper_funcs rzg2l_du_encoder_helper_funcs = {
	.mode_valid = rzg2l_du_encoder_mode_valid,
};

int rzg2l_du_encoder_init(struct rzg2l_du_device  *rcdu,
			  enum rzg2l_du_output output,
			  struct device_node *enc_node)
@@ -48,6 +65,7 @@ int rzg2l_du_encoder_init(struct rzg2l_du_device *rcdu,
		return PTR_ERR(renc);

	renc->output = output;
	drm_encoder_helper_add(&renc->base, &rzg2l_du_encoder_helper_funcs);

	/* Attach the bridge to the encoder. */
	ret = drm_bridge_attach(&renc->base, bridge, NULL,