Commit c51d921a authored by Archit Taneja's avatar Archit Taneja Committed by Tomi Valkeinen
Browse files

OMAPDSS: DISPC: Use a common function to set manager timings



Currently, a LCD manager's timings is set by dispc_mgr_set_lcd_timings() and TV
manager's timings is set by dispc_set_digit_size(). Use a common function called
dispc_mgr_set_timings() which sets timings for both type of managers.

We finally want the interface drivers to use an overlay manager function to
configure it's timings, having a common DISPC function would make things
cleaner.

For LCD managers, dispc_mgr_set_timings() sets LCD size and blanking values, for
TV manager, it sets only the TV size since blanking values don't exist for TV.

Signed-off-by: default avatarArchit Taneja <archit@ti.com>
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent e5c09e06
Loading
Loading
Loading
Loading
+24 −19
Original line number Diff line number Diff line
@@ -992,7 +992,7 @@ static void dispc_mgr_set_lcd_size(enum omap_channel channel, u16 width,
	dispc_write_reg(DISPC_SIZE_MGR(channel), val);
}

void dispc_set_digit_size(u16 width, u16 height)
static void dispc_mgr_set_digit_size(u16 width, u16 height)
{
	u32 val;
	BUG_ON((width > (1 << 11)) || (height > (1 << 11)));
@@ -2341,15 +2341,17 @@ static void _dispc_mgr_set_lcd_timings(enum omap_channel channel, int hsw,
}

/* change name to mode? */
void dispc_mgr_set_lcd_timings(enum omap_channel channel,
void dispc_mgr_set_timings(enum omap_channel channel,
		struct omap_video_timings *timings)
{
	unsigned xtot, ytot;
	unsigned long ht, vt;

	if (!_dispc_lcd_timings_ok(timings->hsw, timings->hfp,
				timings->hbp, timings->vsw,
				timings->vfp, timings->vbp))
	DSSDBG("channel %d xres %u yres %u\n", channel, timings->x_res,
			timings->y_res);

	if (dispc_mgr_is_lcd(channel)) {
		if (!dispc_lcd_timings_ok(timings))
			BUG();

		_dispc_mgr_set_lcd_timings(channel, timings->hsw, timings->hfp,
@@ -2358,20 +2360,23 @@ void dispc_mgr_set_lcd_timings(enum omap_channel channel,

		dispc_mgr_set_lcd_size(channel, timings->x_res, timings->y_res);

	xtot = timings->x_res + timings->hfp + timings->hsw + timings->hbp;
	ytot = timings->y_res + timings->vfp + timings->vsw + timings->vbp;
		xtot = timings->x_res + timings->hfp + timings->hsw +
				timings->hbp;
		ytot = timings->y_res + timings->vfp + timings->vsw +
				timings->vbp;

		ht = (timings->pixel_clock * 1000) / xtot;
		vt = (timings->pixel_clock * 1000) / xtot / ytot;

	DSSDBG("channel %d xres %u yres %u\n", channel, timings->x_res,
			timings->y_res);
		DSSDBG("pck %u\n", timings->pixel_clock);
		DSSDBG("hsw %d hfp %d hbp %d vsw %d vfp %d vbp %d\n",
			timings->hsw, timings->hfp, timings->hbp,
			timings->vsw, timings->vfp, timings->vbp);

		DSSDBG("hsync %luHz, vsync %luHz\n", ht, vt);
	} else {
		dispc_mgr_set_digit_size(timings->x_res, timings->y_res);
	}
}

static void dispc_mgr_set_lcd_divisor(enum omap_channel channel, u16 lck_div,
+1 −1
Original line number Diff line number Diff line
@@ -156,7 +156,7 @@ static int dpi_set_mode(struct omap_dss_device *dssdev)
		t->pixel_clock = pck;
	}

	dispc_mgr_set_lcd_timings(dssdev->manager->id, t);
	dispc_mgr_set_timings(dssdev->manager->id, t);

	return 0;
}
+2 −2
Original line number Diff line number Diff line
@@ -4219,12 +4219,12 @@ static int dsi_display_init_dispc(struct omap_dss_device *dssdev)
		dispc_mgr_enable_stallmode(dssdev->manager->id, true);
		dispc_mgr_enable_fifohandcheck(dssdev->manager->id, 1);

		dispc_mgr_set_lcd_timings(dssdev->manager->id, &timings);
		dispc_mgr_set_timings(dssdev->manager->id, &timings);
	} else {
		dispc_mgr_enable_stallmode(dssdev->manager->id, false);
		dispc_mgr_enable_fifohandcheck(dssdev->manager->id, 0);

		dispc_mgr_set_lcd_timings(dssdev->manager->id,
		dispc_mgr_set_timings(dssdev->manager->id,
			&dssdev->panel.timings);
	}

+1 −2
Original line number Diff line number Diff line
@@ -407,7 +407,6 @@ void dispc_disable_sidle(void);
void dispc_lcd_enable_signal_polarity(bool act_high);
void dispc_lcd_enable_signal(bool enable);
void dispc_pck_free_enable(bool enable);
void dispc_set_digit_size(u16 width, u16 height);
void dispc_enable_fifomerge(bool enable);
void dispc_enable_gamma_table(bool enable);
void dispc_set_loadmode(enum omap_dss_load_mode mode);
@@ -442,7 +441,7 @@ void dispc_mgr_enable_stallmode(enum omap_channel channel, bool enable);
void dispc_mgr_set_tft_data_lines(enum omap_channel channel, u8 data_lines);
void dispc_mgr_set_lcd_display_type(enum omap_channel channel,
		enum omap_lcd_display_type type);
void dispc_mgr_set_lcd_timings(enum omap_channel channel,
void dispc_mgr_set_timings(enum omap_channel channel,
		struct omap_video_timings *timings);
void dispc_mgr_set_pol_freq(enum omap_channel channel,
		enum omap_panel_config config, u8 acbi, u8 acb);
+1 −2
Original line number Diff line number Diff line
@@ -376,8 +376,7 @@ static int hdmi_power_on(struct omap_dss_device *dssdev)
	dispc_enable_gamma_table(0);

	/* tv size */
	dispc_set_digit_size(dssdev->panel.timings.x_res,
			dssdev->panel.timings.y_res);
	dispc_mgr_set_timings(dssdev->manager->id, &dssdev->panel.timings);

	hdmi.ip_data.ops->video_enable(&hdmi.ip_data, 1);

Loading