static void sh_cmt_clock_event_mode(enum clock_event_mode mode, struct clock_event_device *ced) { struct sh_cmt_priv *p = ced_to_sh_cmt(ced); /* deal with old setting first */ switch (ced->mode) { case CLOCK_EVT_MODE_PERIODIC: case CLOCK_EVT_MODE_ONESHOT: sh_cmt_stop(p, FLAG_CLOCKEVENT); break; default: break; } switch (mode) { case CLOCK_EVT_MODE_PERIODIC: pr_info("sh_cmt: %s used for periodic clock events\n", ced->name); sh_cmt_clock_event_start(p, 1); break; case CLOCK_EVT_MODE_ONESHOT: pr_info("sh_cmt: %s used for oneshot clock events\n", ced->name); sh_cmt_clock_event_start(p, 0); break; case CLOCK_EVT_MODE_SHUTDOWN: case CLOCK_EVT_MODE_UNUSED: sh_cmt_stop(p, FLAG_CLOCKEVENT); break; default: break; } }
static void sh_cmt_clocksource_suspend(struct clocksource *cs) { struct sh_cmt_priv *p = cs_to_sh_cmt(cs); sh_cmt_stop(p, FLAG_CLOCKSOURCE); pm_genpd_syscore_poweroff(&p->pdev->dev); }
static void sh_cmt_clocksource_disable(struct clocksource *cs) { struct sh_cmt_priv *p = cs_to_sh_cmt(cs); WARN_ON(!p->cs_enabled); sh_cmt_stop(p, FLAG_CLOCKSOURCE); p->cs_enabled = false; }
static int sh_cmt_suspend(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct sh_cmt_priv *p = platform_get_drvdata(pdev); p->flags_suspend = p->flags; sh_cmt_stop(p, p->flags); return 0; }
static void sh_cmt_clocksource_disable(struct clocksource *cs) { sh_cmt_stop(cs_to_sh_cmt(cs), FLAG_CLOCKSOURCE); }