From 1c2583eaade3583a7eef1b12aed2efd9182555da Mon Sep 17 00:00:00 2001 From: zhuyanlin Date: Mon, 18 Apr 2022 14:25:25 +0800 Subject: [PATCH] sched:cpuload_oneshot: add pm callcacks Signed-off-by: zhuyanlin --- sched/sched/sched_cpuload_oneshot.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/sched/sched/sched_cpuload_oneshot.c b/sched/sched/sched_cpuload_oneshot.c index 37eb796debb..985127dc0c2 100644 --- a/sched/sched/sched_cpuload_oneshot.c +++ b/sched/sched/sched_cpuload_oneshot.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include "clock/clock.h" @@ -98,6 +99,9 @@ struct sched_oneshot_s int32_t maxdelay; int32_t error; #endif +#ifdef CONFIG_PM + struct pm_callback_s pm_cb; +#endif }; /**************************************************************************** @@ -225,6 +229,24 @@ static void nxsched_oneshot_callback(FAR struct oneshot_lowerhalf_s *lower, nxsched_oneshot_start(); } +#ifdef CONFIG_PM +static void nxsched_oneshot_pmnotify(FAR struct pm_callback_s *cb, + int domain, enum pm_state_e pmstate) +{ + if (domain == PM_IDLE_DOMAIN) + { + if (pmstate == PM_RESTORE) + { + nxsched_oneshot_start(); + } + else + { + ONESHOT_CANCEL(g_sched_oneshot.oneshot, NULL); + } + } +} +#endif + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -281,6 +303,13 @@ void nxsched_oneshot_extclk(FAR struct oneshot_lowerhalf_s *lower) g_sched_oneshot.prng.z = g_sched_oneshot.prng.x << 25; #endif +#ifdef CONFIG_PM + /* Register pm notify */ + + g_sched_oneshot.pm_cb.notify = nxsched_oneshot_pmnotify; + pm_register(&g_sched_oneshot.pm_cb); +#endif + /* Then start the oneshot */ g_sched_oneshot.oneshot = lower;