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

Commit 446f7bff authored by Tomi Valkeinen's avatar Tomi Valkeinen
Browse files

OMAP: DSS2: move set/get_update_mode()



Move set/get_update_mode() 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 225b650d
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -478,11 +478,6 @@ struct omap_dss_device {
			       u16 x, u16 y, u16 w, u16 h);
	int (*sync)(struct omap_dss_device *dssdev);

	int (*set_update_mode)(struct omap_dss_device *dssdev,
			enum omap_dss_update_mode);
	enum omap_dss_update_mode (*get_update_mode)
		(struct omap_dss_device *dssdev);

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

@@ -507,6 +502,10 @@ struct omap_dss_driver {

	void (*setup_update)(struct omap_dss_device *dssdev,
			u16 x, u16 y, u16 w, u16 h);
	int (*set_update_mode)(struct omap_dss_device *dssdev,
			enum omap_dss_update_mode);
	enum omap_dss_update_mode (*get_update_mode)(
			struct omap_dss_device *dssdev);

	int (*enable_te)(struct omap_dss_device *dssdev, bool enable);
	int (*wait_for_te)(struct omap_dss_device *dssdev);
+16 −0
Original line number Diff line number Diff line
@@ -995,6 +995,20 @@ static void taal_esd_work(struct work_struct *work)
	queue_delayed_work(td->esd_wq, &td->esd_work, TAAL_ESD_CHECK_PERIOD);
}

static int taal_set_update_mode(struct omap_dss_device *dssdev,
		enum omap_dss_update_mode mode)
{
	if (mode != OMAP_DSS_UPDATE_MANUAL)
		return -EINVAL;
	return 0;
}

static enum omap_dss_update_mode taal_get_update_mode(
		struct omap_dss_device *dssdev)
{
	return OMAP_DSS_UPDATE_MANUAL;
}

static struct omap_dss_driver taal_driver = {
	.probe		= taal_probe,
	.remove		= taal_remove,
@@ -1005,6 +1019,8 @@ static struct omap_dss_driver taal_driver = {
	.resume		= taal_resume,

	.setup_update	= taal_setup_update,
	.set_update_mode = taal_set_update_mode,
	.get_update_mode = taal_get_update_mode,
	.get_resolution	= taal_get_resolution,
	.get_recommended_bpp = omapdss_default_get_recommended_bpp,

+3 −3
Original line number Diff line number Diff line
@@ -69,8 +69,8 @@ static ssize_t display_upd_mode_show(struct device *dev,
{
	struct omap_dss_device *dssdev = to_dss_device(dev);
	enum omap_dss_update_mode mode = OMAP_DSS_UPDATE_AUTO;
	if (dssdev->get_update_mode)
		mode = dssdev->get_update_mode(dssdev);
	if (dssdev->driver->get_update_mode)
		mode = dssdev->driver->get_update_mode(dssdev);
	return snprintf(buf, PAGE_SIZE, "%d\n", mode);
}

@@ -94,7 +94,7 @@ static ssize_t display_upd_mode_store(struct device *dev,
		return -EINVAL;
	}

	r = dssdev->set_update_mode(dssdev, mode);
	r = dssdev->driver->set_update_mode(dssdev, mode);
	if (r)
		return r;

+0 −27
Original line number Diff line number Diff line
@@ -36,7 +36,6 @@
#include "dss.h"

static struct {
	int update_enabled;
	struct regulator *vdds_dsi_reg;
} dpi;

@@ -376,30 +375,6 @@ static void dpi_get_timings(struct omap_dss_device *dssdev,
	*timings = dssdev->panel.timings;
}

static int dpi_display_set_update_mode(struct omap_dss_device *dssdev,
		enum omap_dss_update_mode mode)
{
	if (mode == OMAP_DSS_UPDATE_MANUAL)
		return -EINVAL;

	if (mode == OMAP_DSS_UPDATE_DISABLED) {
		dssdev->manager->disable(dssdev->manager);
		dpi.update_enabled = 0;
	} else {
		dssdev->manager->enable(dssdev->manager);
		dpi.update_enabled = 1;
	}

	return 0;
}

static enum omap_dss_update_mode dpi_display_get_update_mode(
		struct omap_dss_device *dssdev)
{
	return dpi.update_enabled ? OMAP_DSS_UPDATE_AUTO :
		OMAP_DSS_UPDATE_DISABLED;
}

int dpi_init_display(struct omap_dss_device *dssdev)
{
	DSSDBG("init_display\n");
@@ -411,8 +386,6 @@ int dpi_init_display(struct omap_dss_device *dssdev)
	dssdev->set_timings = dpi_set_timings;
	dssdev->check_timings = dpi_check_timings;
	dssdev->get_timings = dpi_get_timings;
	dssdev->set_update_mode = dpi_display_set_update_mode;
	dssdev->get_update_mode = dpi_display_get_update_mode;

	return 0;
}
+11 −104
Original line number Diff line number Diff line
@@ -243,8 +243,6 @@ static struct
	struct dsi_update_region active_update_region;
	struct completion update_completion;

	enum omap_dss_update_mode user_update_mode;
	enum omap_dss_update_mode update_mode;
	bool te_enabled;
	bool use_ext_te;

@@ -345,9 +343,6 @@ static void dsi_perf_show(const char *name)
	if (!dsi_perf)
		return;

	if (dsi.update_mode == OMAP_DSS_UPDATE_DISABLED)
		return;

	t = ktime_get();

	setup_time = ktime_sub(dsi.perf_start_time, dsi.perf_setup_time);
@@ -1704,7 +1699,6 @@ static int dsi_force_tx_stop_mode_io(void)

static int dsi_vc_enable(int channel, bool enable)
{
	if (dsi.update_mode != OMAP_DSS_UPDATE_AUTO)
	DSSDBG("dsi_vc_enable channel %d, enable %d\n",
			channel, enable);

@@ -1886,8 +1880,7 @@ static u16 dsi_vc_flush_receive_data(int channel)

static int dsi_vc_send_bta(int channel)
{
	if (dsi.update_mode != OMAP_DSS_UPDATE_AUTO &&
			(dsi.debug_write || dsi.debug_read))
	if (dsi.debug_write || dsi.debug_read)
		DSSDBG("dsi_vc_send_bta %d\n", channel);

	WARN_ON(!dsi_bus_is_locked());
@@ -2740,7 +2733,6 @@ static void dsi_update_screen_dispc(struct omap_dss_device *dssdev,

	use_te_trigger = dsi.te_enabled && !dsi.use_ext_te;

	if (dsi.update_mode != OMAP_DSS_UPDATE_AUTO)
	DSSDBG("dsi_update_screen_dispc(%d,%d %dx%d)\n",
			x, y, w, h);

@@ -2840,45 +2832,6 @@ static void dsi_set_update_region(struct omap_dss_device *dssdev,

}

static int dsi_set_update_mode(struct omap_dss_device *dssdev,
		enum omap_dss_update_mode mode)
{
	int r = 0;
	int i;

	WARN_ON(!dsi_bus_is_locked());

	if (dsi.update_mode != mode) {
		dsi.update_mode = mode;

		/* Mark the overlays dirty, and do apply(), so that we get the
		 * overlays configured properly after update mode change. */
		for (i = 0; i < omap_dss_get_num_overlays(); ++i) {
			struct omap_overlay *ovl;
			ovl = omap_dss_get_overlay(i);
			if (ovl->manager == dssdev->manager)
				ovl->info_dirty = true;
		}

		r = dssdev->manager->apply(dssdev->manager);

		if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE &&
				mode == OMAP_DSS_UPDATE_AUTO) {
			u16 w, h;

			DSSDBG("starting auto update\n");

			dssdev->driver->get_resolution(dssdev, &w, &h);

			dsi_set_update_region(dssdev, 0, 0, w, h);

			wake_up(&dsi.waitqueue);
		}
	}

	return r;
}

static void dsi_handle_framedone(void)
{
	int r;
@@ -2887,7 +2840,6 @@ static void dsi_handle_framedone(void)

	use_te_trigger = dsi.te_enabled && !dsi.use_ext_te;

	if (dsi.update_mode != OMAP_DSS_UPDATE_AUTO)
	DSSDBG("FRAMEDONE\n");

	if (use_te_trigger) {
@@ -2927,9 +2879,7 @@ static int dsi_update_thread(void *data)

	while (1) {
		wait_event_interruptible(dsi.waitqueue,
				dsi.update_mode == OMAP_DSS_UPDATE_AUTO ||
				(dsi.update_mode == OMAP_DSS_UPDATE_MANUAL &&
				 dsi.update_region.dirty == true) ||
				dsi.update_region.dirty == true ||
				kthread_should_stop());

		if (kthread_should_stop())
@@ -2937,8 +2887,7 @@ static int dsi_update_thread(void *data)

		dsi_bus_lock();

		if (dsi.update_mode == OMAP_DSS_UPDATE_DISABLED ||
				kthread_should_stop()) {
		if (kthread_should_stop()) {
			dsi_bus_unlock();
			break;
		}
@@ -2960,7 +2909,6 @@ static int dsi_update_thread(void *data)

		if (device->manager->caps & OMAP_DSS_OVL_MGR_CAP_DISPC) {

			if (dsi.update_mode == OMAP_DSS_UPDATE_MANUAL)
			dss_setup_partial_planes(device,
					&x, &y, &w, &h);

@@ -3254,8 +3202,6 @@ static int dsi_display_enable(struct omap_dss_device *dssdev)

	dsi.use_ext_te = dssdev->phy.dsi.ext_te;

	dsi_set_update_mode(dssdev, dsi.user_update_mode);

	dsi_bus_unlock();
	mutex_unlock(&dsi.lock);

@@ -3286,7 +3232,6 @@ static void dsi_display_disable(struct omap_dss_device *dssdev)
			dssdev->state == OMAP_DSS_DISPLAY_SUSPENDED)
		goto end;

	dsi.update_mode = OMAP_DSS_UPDATE_DISABLED;
	dssdev->state = OMAP_DSS_DISPLAY_DISABLED;

	dsi_display_uninit_dispc(dssdev);
@@ -3313,7 +3258,6 @@ static int dsi_display_suspend(struct omap_dss_device *dssdev)
			dssdev->state == OMAP_DSS_DISPLAY_SUSPENDED)
		goto end;

	dsi.update_mode = OMAP_DSS_UPDATE_DISABLED;
	dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED;

	dsi_display_uninit_dispc(dssdev);
@@ -3363,8 +3307,6 @@ static int dsi_display_resume(struct omap_dss_device *dssdev)

	dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;

	dsi_set_update_mode(dssdev, dsi.user_update_mode);

	dsi_bus_unlock();
	mutex_unlock(&dsi.lock);

@@ -3392,9 +3334,6 @@ static int dsi_display_update(struct omap_dss_device *dssdev,

	mutex_lock(&dsi.lock);

	if (dsi.update_mode != OMAP_DSS_UPDATE_MANUAL)
		goto end;

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

@@ -3436,8 +3375,7 @@ static int dsi_display_sync(struct omap_dss_device *dssdev)
	mutex_lock(&dsi.lock);
	dsi_bus_lock();

	if (dsi.update_mode == OMAP_DSS_UPDATE_MANUAL &&
			dsi.update_region.dirty) {
	if (dsi.update_region.dirty) {
		INIT_COMPLETION(dsi.update_completion);
		wait = true;
	} else {
@@ -3454,32 +3392,6 @@ static int dsi_display_sync(struct omap_dss_device *dssdev)
	return 0;
}

static int dsi_display_set_update_mode(struct omap_dss_device *dssdev,
		enum omap_dss_update_mode mode)
{
	int r = 0;

	DSSDBGF("%d", mode);

	mutex_lock(&dsi.lock);
	dsi_bus_lock();

	dsi.user_update_mode = mode;
	r = dsi_set_update_mode(dssdev, mode);

	dsi_bus_unlock();
	mutex_unlock(&dsi.lock);

	return r;
}

static enum omap_dss_update_mode dsi_display_get_update_mode(
		struct omap_dss_device *dssdev)
{
	return dsi.update_mode;
}


int omapdss_dsi_enable_te(struct omap_dss_device *dssdev, bool enable)
{
	dsi.te_enabled = enable;
@@ -3510,8 +3422,6 @@ int dsi_init_display(struct omap_dss_device *dssdev)
	dssdev->resume = dsi_display_resume;
	dssdev->update = dsi_display_update;
	dssdev->sync = dsi_display_sync;
	dssdev->set_update_mode = dsi_display_set_update_mode;
	dssdev->get_update_mode = dsi_display_get_update_mode;

	/* XXX these should be figured out dynamically */
	dssdev->caps = OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE |
@@ -3562,9 +3472,6 @@ int dsi_init(struct platform_device *pdev)
	dsi.te_timer.data = 0;
#endif

	dsi.update_mode = OMAP_DSS_UPDATE_DISABLED;
	dsi.user_update_mode = OMAP_DSS_UPDATE_DISABLED;

	dsi.base = ioremap(DSI_BASE, DSI_SZ_REGS);
	if (!dsi.base) {
		DSSERR("can't ioremap DSI\n");
Loading