Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7c27fa57 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Tomi Valkeinen
Browse files

drm/omap: Call dispc timings check operation directly



Instead of call the dispc timings check function dispc_mgr_timings_ok()
from the internal encoders .check_timings() operation, expose it through
the dispc ops (after renaming it to check_timings) and call it directly
from omapdrm. This allows removal of now empty omap_dss_device
.check_timings() operations.

Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarSebastian Reichel <sebastian.reichel@collabora.co.uk>
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent 3fbda31e
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -3113,28 +3113,29 @@ static bool _dispc_mgr_pclk_ok(struct dispc_device *dispc,
		return pclk <= dispc->feat->max_tv_pclk;
}

bool dispc_mgr_timings_ok(struct dispc_device *dispc, enum omap_channel channel,
static int dispc_mgr_check_timings(struct dispc_device *dispc,
				   enum omap_channel channel,
				   const struct videomode *vm)
{
	if (!_dispc_mgr_size_ok(dispc, vm->hactive, vm->vactive))
		return false;
		return MODE_BAD;

	if (!_dispc_mgr_pclk_ok(dispc, channel, vm->pixelclock))
		return false;
		return MODE_BAD;

	if (dss_mgr_is_lcd(channel)) {
		/* TODO: OMAP4+ supports interlace for LCD outputs */
		if (vm->flags & DISPLAY_FLAGS_INTERLACED)
			return false;
			return MODE_BAD;

		if (!_dispc_lcd_timings_ok(dispc, vm->hsync_len,
				vm->hfront_porch, vm->hback_porch,
				vm->vsync_len, vm->vfront_porch,
				vm->vback_porch))
			return false;
			return MODE_BAD;
	}

	return true;
	return MODE_OK;
}

static void _dispc_mgr_set_lcd_timings(struct dispc_device *dispc,
@@ -3236,7 +3237,7 @@ static void dispc_mgr_set_timings(struct dispc_device *dispc,

	DSSDBG("channel %d xres %u yres %u\n", channel, t.hactive, t.vactive);

	if (!dispc_mgr_timings_ok(dispc, channel, &t)) {
	if (dispc_mgr_check_timings(dispc, channel, &t)) {
		BUG();
		return;
	}
@@ -4733,6 +4734,7 @@ static const struct dispc_ops dispc_ops = {
	.mgr_go_busy = dispc_mgr_go_busy,
	.mgr_go = dispc_mgr_go,
	.mgr_set_lcd_config = dispc_mgr_set_lcd_config,
	.mgr_check_timings = dispc_mgr_check_timings,
	.mgr_set_timings = dispc_mgr_set_timings,
	.mgr_setup = dispc_mgr_setup,
	.mgr_gamma_size = dispc_mgr_gamma_size,
+0 −4
Original line number Diff line number Diff line
@@ -496,7 +496,6 @@ static int dpi_check_timings(struct omap_dss_device *dssdev,
			     struct videomode *vm)
{
	struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev);
	enum omap_channel channel = dpi->output.dispc_channel;
	int lck_div, pck_div;
	unsigned long fck;
	unsigned long pck;
@@ -506,9 +505,6 @@ static int dpi_check_timings(struct omap_dss_device *dssdev,
	if (vm->hactive % 8 != 0)
		return -EINVAL;

	if (!dispc_mgr_timings_ok(dpi->dss->dispc, channel, vm))
		return -EINVAL;

	if (vm->pixelclock == 0)
		return -EINVAL;

+0 −3
Original line number Diff line number Diff line
@@ -417,9 +417,6 @@ bool dispc_div_calc(struct dispc_device *dispc, unsigned long dispc_freq,
		    unsigned long pck_min, unsigned long pck_max,
		    dispc_div_calc_func func, void *data);

bool dispc_mgr_timings_ok(struct dispc_device *dispc,
			  enum omap_channel channel,
			  const struct videomode *vm);
int dispc_calc_clock_rates(struct dispc_device *dispc,
			   unsigned long dispc_fclk_rate,
			   struct dispc_clock_info *cinfo);
+0 −12
Original line number Diff line number Diff line
@@ -251,17 +251,6 @@ static void hdmi_power_off_full(struct omap_hdmi *hdmi)
	hdmi_power_off_core(hdmi);
}

static int hdmi_display_check_timings(struct omap_dss_device *dssdev,
				      struct videomode *vm)
{
	struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev);

	if (!dispc_mgr_timings_ok(hdmi->dss->dispc, dssdev->dispc_channel, vm))
		return -EINVAL;

	return 0;
}

static void hdmi_display_set_timings(struct omap_dss_device *dssdev,
				     const struct videomode *vm)
{
@@ -508,7 +497,6 @@ static const struct omap_dss_device_ops hdmi_ops = {
	.enable			= hdmi_display_enable,
	.disable		= hdmi_display_disable,

	.check_timings		= hdmi_display_check_timings,
	.set_timings		= hdmi_display_set_timings,

	.read_edid		= hdmi_read_edid,
+0 −12
Original line number Diff line number Diff line
@@ -250,17 +250,6 @@ static void hdmi_power_off_full(struct omap_hdmi *hdmi)
	hdmi_power_off_core(hdmi);
}

static int hdmi_display_check_timings(struct omap_dss_device *dssdev,
				      struct videomode *vm)
{
	struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev);

	if (!dispc_mgr_timings_ok(hdmi->dss->dispc, dssdev->dispc_channel, vm))
		return -EINVAL;

	return 0;
}

static void hdmi_display_set_timings(struct omap_dss_device *dssdev,
				     const struct videomode *vm)
{
@@ -502,7 +491,6 @@ static const struct omap_dss_device_ops hdmi_ops = {
	.enable			= hdmi_display_enable,
	.disable		= hdmi_display_disable,

	.check_timings		= hdmi_display_check_timings,
	.set_timings		= hdmi_display_set_timings,

	.read_edid		= hdmi_read_edid,
Loading