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

Commit 0b30ec1c authored by Jon Hunter's avatar Jon Hunter Committed by Tony Lindgren
Browse files

ARM: OMAP: Remove timer function pointer for context loss counter



For OMAP2+ devices, a function pointer that returns the number of times a timer
power domain has lost context is passed to the dmtimer driver. This function
pointer is only populated for OMAP2+ devices and it is pointing to a platform
function. Given that this is a platform function, we can simplify the code by
removing the function pointer and referencing the function directly. We can use
the OMAP_TIMER_ALWON flag to determine if we need to call this function for
OMAP1 and OMAP2+ devices.

The benefit of this change is the we can remove the function pointer from the
platform data and simplifies the dmtimer migration to device-tree.

Signed-off-by: default avatarJon Hunter <jon-hunter@ti.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 1c2d076b
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -494,9 +494,6 @@ static int __init omap_timer_init(struct omap_hwmod *oh, void *unused)
	if (timer_dev_attr)
		pdata->timer_capability = timer_dev_attr->timer_capability;

#ifdef CONFIG_PM
	pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count;
#endif
	pdev = omap_device_build(name, id, oh, pdata, sizeof(*pdata),
				 NULL, 0, 0);

+7 −10
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@
#include <linux/pm_runtime.h>

#include <plat/dmtimer.h>
#include <plat/omap-pm.h>

#include <mach/hardware.h>

@@ -342,9 +343,8 @@ int omap_dm_timer_start(struct omap_dm_timer *timer)
	omap_dm_timer_enable(timer);

	if (!(timer->capability & OMAP_TIMER_ALWON)) {
		u32 ctx_loss_cnt_after =
			timer->get_context_loss_count(&timer->pdev->dev);
		if (ctx_loss_cnt_after != timer->ctx_loss_count)
		if (omap_pm_get_dev_context_loss_count(&timer->pdev->dev) !=
				timer->ctx_loss_count)
			omap_timer_restore_context(timer);
	}

@@ -374,10 +374,9 @@ int omap_dm_timer_stop(struct omap_dm_timer *timer)

	__omap_dm_timer_stop(timer, timer->posted, rate);

	if (!(timer->capability & OMAP_TIMER_ALWON) &&
			timer->get_context_loss_count)
	if (!(timer->capability & OMAP_TIMER_ALWON))
		timer->ctx_loss_count =
			timer->get_context_loss_count(&timer->pdev->dev);
			omap_pm_get_dev_context_loss_count(&timer->pdev->dev);

	/*
	 * Since the register values are computed and written within
@@ -449,9 +448,8 @@ int omap_dm_timer_set_load_start(struct omap_dm_timer *timer, int autoreload,
	omap_dm_timer_enable(timer);

	if (!(timer->capability & OMAP_TIMER_ALWON)) {
		u32 ctx_loss_cnt_after =
			timer->get_context_loss_count(&timer->pdev->dev);
		if (ctx_loss_cnt_after != timer->ctx_loss_count)
		if (omap_pm_get_dev_context_loss_count(&timer->pdev->dev) !=
				timer->ctx_loss_count)
			omap_timer_restore_context(timer);
	}

@@ -693,7 +691,6 @@ static int __devinit omap_dm_timer_probe(struct platform_device *pdev)
	timer->irq = irq->start;
	timer->reserved = omap_dm_timer_reserved_systimer(timer->id);
	timer->pdev = pdev;
	timer->get_context_loss_count = pdata->get_context_loss_count;
	timer->capability = pdata->timer_capability;

	/* Skip pm_runtime_enable for OMAP1 */
+0 −3
Original line number Diff line number Diff line
@@ -91,7 +91,6 @@ struct timer_regs {
struct dmtimer_platform_data {
	int (*set_timer_src)(struct platform_device *pdev, int source);
	u32 needs_manual_reset:1;
	int (*get_context_loss_count)(struct device *dev);
	u32 timer_capability;
};

@@ -267,8 +266,6 @@ struct omap_dm_timer {
	u32 capability;
	struct platform_device *pdev;
	struct list_head node;

	int (*get_context_loss_count)(struct device *dev);
};

int omap_dm_timer_prepare(struct omap_dm_timer *timer);