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

Commit 225b650d authored by Tomi Valkeinen's avatar Tomi Valkeinen
Browse files

OMAP: DSS2: move enable/get_te()



Move enable/get_te() from omap_dss_device to omap_dss_driver.

This is part of a larger patch-set, which moves the control from omapdss
driver to the display driver.

Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@nokia.com>
parent a2699504
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -483,9 +483,6 @@ struct omap_dss_device {
	enum omap_dss_update_mode (*get_update_mode)
		(struct omap_dss_device *dssdev);

	int (*enable_te)(struct omap_dss_device *dssdev, bool enable);
	int (*get_te)(struct omap_dss_device *dssdev);

	int (*set_wss)(struct omap_dss_device *dssdev, u32 wss);
	u32 (*get_wss)(struct omap_dss_device *dssdev);

@@ -513,6 +510,7 @@ struct omap_dss_driver {

	int (*enable_te)(struct omap_dss_device *dssdev, bool enable);
	int (*wait_for_te)(struct omap_dss_device *dssdev);
	int (*get_te)(struct omap_dss_device *dssdev);

	u8 (*get_rotate)(struct omap_dss_device *dssdev);
	int (*set_rotate)(struct omap_dss_device *dssdev, u8 rotate);
@@ -567,5 +565,6 @@ int omap_dispc_wait_for_irq_interruptible_timeout(u32 irqmask,
#define to_dss_device(x) container_of((x), struct omap_dss_device, dev)

void omapdss_dsi_vc_enable_hs(int channel, bool enable);
int omapdss_dsi_enable_te(struct omap_dss_device *dssdev, bool enable);

#endif
+18 −0
Original line number Diff line number Diff line
@@ -736,6 +736,8 @@ static int taal_enable_te(struct omap_dss_device *dssdev, bool enable)
	struct taal_data *td = dev_get_drvdata(&dssdev->dev);
	int r;

	dsi_bus_lock();

	td->te_enabled = enable;

	if (enable)
@@ -743,9 +745,23 @@ static int taal_enable_te(struct omap_dss_device *dssdev, bool enable)
	else
		r = taal_dcs_write_0(DCS_TEAR_OFF);

	omapdss_dsi_enable_te(dssdev, enable);

	/* XXX for some reason, DSI TE breaks if we don't wait here.
	 * Panel bug? Needs more studying */
	msleep(100);

	dsi_bus_unlock();

	return r;
}

static int taal_get_te(struct omap_dss_device *dssdev)
{
	struct taal_data *td = dev_get_drvdata(&dssdev->dev);
	return td->te_enabled;
}

static int taal_wait_te(struct omap_dss_device *dssdev)
{
	struct taal_data *td = dev_get_drvdata(&dssdev->dev);
@@ -993,7 +1009,9 @@ static struct omap_dss_driver taal_driver = {
	.get_recommended_bpp = omapdss_default_get_recommended_bpp,

	.enable_te	= taal_enable_te,
	.get_te		= taal_get_te,
	.wait_for_te	= taal_wait_te,

	.set_rotate	= taal_rotate,
	.get_rotate	= taal_get_rotate,
	.set_mirror	= taal_mirror,
+4 −3
Original line number Diff line number Diff line
@@ -106,7 +106,8 @@ static ssize_t display_tear_show(struct device *dev,
{
	struct omap_dss_device *dssdev = to_dss_device(dev);
	return snprintf(buf, PAGE_SIZE, "%d\n",
			dssdev->get_te ? dssdev->get_te(dssdev) : 0);
			dssdev->driver->get_te ?
			dssdev->driver->get_te(dssdev) : 0);
}

static ssize_t display_tear_store(struct device *dev,
@@ -116,12 +117,12 @@ static ssize_t display_tear_store(struct device *dev,
	unsigned long te;
	int r;

	if (!dssdev->enable_te || !dssdev->get_te)
	if (!dssdev->driver->enable_te || !dssdev->driver->get_te)
		return -ENOENT;

	te = simple_strtoul(buf, NULL, 0);

	r = dssdev->enable_te(dssdev, te);
	r = dssdev->driver->enable_te(dssdev, te);
	if (r)
		return r;

+3 −50
Original line number Diff line number Diff line
@@ -2879,20 +2879,6 @@ static int dsi_set_update_mode(struct omap_dss_device *dssdev,
	return r;
}

static int dsi_set_te(struct omap_dss_device *dssdev, bool enable)
{
	int r = 0;

	if (dssdev->driver->enable_te) {
		r = dssdev->driver->enable_te(dssdev, enable);
		/* XXX for some reason, DSI TE breaks if we don't wait here.
		 * Panel bug? Needs more studying */
		msleep(100);
	}

	return r;
}

static void dsi_handle_framedone(void)
{
	int r;
@@ -3267,9 +3253,6 @@ static int dsi_display_enable(struct omap_dss_device *dssdev)
	dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;

	dsi.use_ext_te = dssdev->phy.dsi.ext_te;
	r = dsi_set_te(dssdev, dsi.te_enabled);
	if (r)
		goto err4;

	dsi_set_update_mode(dssdev, dsi.user_update_mode);

@@ -3278,9 +3261,6 @@ static int dsi_display_enable(struct omap_dss_device *dssdev)

	return 0;

err4:

	dsi_display_uninit_dsi(dssdev);
err3:
	dsi_display_uninit_dispc(dssdev);
err2:
@@ -3383,10 +3363,6 @@ static int dsi_display_resume(struct omap_dss_device *dssdev)

	dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;

	r = dsi_set_te(dssdev, dsi.te_enabled);
	if (r)
		goto err2;

	dsi_set_update_mode(dssdev, dsi.user_update_mode);

	dsi_bus_unlock();
@@ -3504,33 +3480,12 @@ static enum omap_dss_update_mode dsi_display_get_update_mode(
}


static int dsi_display_enable_te(struct omap_dss_device *dssdev, bool enable)
int omapdss_dsi_enable_te(struct omap_dss_device *dssdev, bool enable)
{
	int r = 0;

	DSSDBGF("%d", enable);

	if (!dssdev->driver->enable_te)
		return -ENOENT;

	dsi_bus_lock();

	dsi.te_enabled = enable;

	if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE)
		goto end;

	r = dsi_set_te(dssdev, enable);
end:
	dsi_bus_unlock();

	return r;
}

static int dsi_display_get_te(struct omap_dss_device *dssdev)
{
	return dsi.te_enabled;
	return 0;
}
EXPORT_SYMBOL(omapdss_dsi_enable_te);

void dsi_get_overlay_fifo_thresholds(enum omap_plane plane,
		u32 fifo_size, enum omap_burst_size *burst_size,
@@ -3557,8 +3512,6 @@ int dsi_init_display(struct omap_dss_device *dssdev)
	dssdev->sync = dsi_display_sync;
	dssdev->set_update_mode = dsi_display_set_update_mode;
	dssdev->get_update_mode = dsi_display_get_update_mode;
	dssdev->enable_te = dsi_display_enable_te;
	dssdev->get_te = dsi_display_get_te;

	/* XXX these should be figured out dynamically */
	dssdev->caps = OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE |
+0 −7
Original line number Diff line number Diff line
@@ -1232,12 +1232,6 @@ static int rfbi_display_sync(struct omap_dss_device *dssdev)
	return 0;
}

static int rfbi_display_enable_te(struct omap_dss_device *dssdev, bool enable)
{
	dssdev->driver->enable_te(dssdev, enable);
	return 0;
}

static int rfbi_display_enable(struct omap_dss_device *dssdev)
{
	int r;
@@ -1299,7 +1293,6 @@ int rfbi_init_display(struct omap_dss_device *dssdev)
	dssdev->disable = rfbi_display_disable;
	dssdev->update = rfbi_display_update;
	dssdev->sync = rfbi_display_sync;
	dssdev->enable_te = rfbi_display_enable_te;

	rfbi.dssdev[dssdev->phy.rfbi.channel] = dssdev;

Loading