static void sh_tmu_clock_event_mode(enum clock_event_mode mode, struct clock_event_device *ced) { struct sh_tmu_priv *p = ced_to_sh_tmu(ced); int disabled = 0; /* deal with old setting first */ switch (ced->mode) { case CLOCK_EVT_MODE_PERIODIC: case CLOCK_EVT_MODE_ONESHOT: sh_tmu_disable(p); disabled = 1; break; default: break; } switch (mode) { case CLOCK_EVT_MODE_PERIODIC: dev_info(&p->pdev->dev, "used for periodic clock events\n"); sh_tmu_clock_event_start(p, 1); break; case CLOCK_EVT_MODE_ONESHOT: dev_info(&p->pdev->dev, "used for oneshot clock events\n"); sh_tmu_clock_event_start(p, 0); break; case CLOCK_EVT_MODE_UNUSED: if (!disabled) sh_tmu_disable(p); break; case CLOCK_EVT_MODE_SHUTDOWN: default: break; } }
static int sh_tmu_clock_event_next(unsigned long delta, struct clock_event_device *ced) { struct sh_tmu_channel *ch = ced_to_sh_tmu(ced); BUG_ON(ced->mode != CLOCK_EVT_MODE_ONESHOT); /* program new delta value */ sh_tmu_set_next(ch, delta, 0); return 0; }
static void sh_tmu_clock_event_resume(struct clock_event_device *ced) { pm_genpd_syscore_poweron(&ced_to_sh_tmu(ced)->tmu->pdev->dev); }
static void sh_tmu_clock_event_suspend(struct clock_event_device *ced) { pm_genpd_syscore_poweroff(&ced_to_sh_tmu(ced)->pdev->dev); }