Skip to content

Commit

Permalink
ARM: OMAP: Remove loses_context variable from timer platform data
Browse files Browse the repository at this point in the history
The platform data variable loses_context is used to determine if the timer may
lose its logic state during power transitions and so needs to be restored. This
information is also provided in the HWMOD device attributes for OMAP2+ devices
via the OMAP_TIMER_ALWON flag. When this flag is set the timer will not lose
context. So use the HWMOD device attributes to determine this.

For OMAP1 devices, loses_context is never set and so set the OMAP_TIMER_ALWON
flag for OMAP1 timers to ensure that code is equivalent.

Signed-off-by: Jon Hunter <jon-hunter@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
  • Loading branch information
Jon Hunter authored and Tony Lindgren committed Jun 14, 2012
1 parent 67d2e76 commit 1c2d076
Show file tree
Hide file tree
Showing 4 changed files with 5 additions and 10 deletions.
1 change: 1 addition & 0 deletions arch/arm/mach-omap1/timer.c
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ static int __init omap1_dm_timer_init(void)

pdata->set_timer_src = omap1_dm_timer_set_src;
pdata->needs_manual_reset = 1;
pdata->timer_capability = OMAP_TIMER_ALWON;

ret = platform_device_add_data(pdev, pdata, sizeof(*pdata));
if (ret) {
Expand Down
3 changes: 0 additions & 3 deletions arch/arm/mach-omap2/timer.c
Original file line number Diff line number Diff line change
Expand Up @@ -462,7 +462,6 @@ static int __init omap_timer_init(struct omap_hwmod *oh, void *unused)
struct dmtimer_platform_data *pdata;
struct platform_device *pdev;
struct omap_timer_capability_dev_attr *timer_dev_attr;
struct powerdomain *pwrdm;

pr_debug("%s: %s\n", __func__, oh->name);

Expand Down Expand Up @@ -495,8 +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;

pwrdm = omap_hwmod_get_pwrdm(oh);
pdata->loses_context = pwrdm_can_ever_lose_context(pwrdm);
#ifdef CONFIG_PM
pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count;
#endif
Expand Down
8 changes: 4 additions & 4 deletions arch/arm/plat-omap/dmtimer.c
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ int omap_dm_timer_start(struct omap_dm_timer *timer)

omap_dm_timer_enable(timer);

if (timer->loses_context) {
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)
Expand Down Expand Up @@ -374,7 +374,8 @@ int omap_dm_timer_stop(struct omap_dm_timer *timer)

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

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

Expand Down Expand Up @@ -447,7 +448,7 @@ int omap_dm_timer_set_load_start(struct omap_dm_timer *timer, int autoreload,

omap_dm_timer_enable(timer);

if (timer->loses_context) {
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)
Expand Down Expand Up @@ -692,7 +693,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->loses_context = pdata->loses_context;
timer->get_context_loss_count = pdata->get_context_loss_count;
timer->capability = pdata->timer_capability;

Expand Down
3 changes: 0 additions & 3 deletions arch/arm/plat-omap/include/plat/dmtimer.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,6 @@ struct timer_regs {
struct dmtimer_platform_data {
int (*set_timer_src)(struct platform_device *pdev, int source);
u32 needs_manual_reset:1;
bool loses_context;

int (*get_context_loss_count)(struct device *dev);
u32 timer_capability;
};
Expand Down Expand Up @@ -264,7 +262,6 @@ struct omap_dm_timer {
unsigned reserved:1;
unsigned posted:1;
struct timer_regs context;
bool loses_context;
int ctx_loss_count;
int revision;
u32 capability;
Expand Down

0 comments on commit 1c2d076

Please sign in to comment.