]> rtime.felk.cvut.cz Git - hercules2020/nv-tegra/linux-4.4.git/commitdiff
pm/resume: Add support for early resume
authorSuresh Mangipudi <smangipudi@nvidia.com>
Tue, 16 May 2017 10:26:11 +0000 (15:56 +0530)
committermobile promotions <svcmobile_promotions@nvidia.com>
Thu, 25 May 2017 10:45:02 +0000 (03:45 -0700)
Sometimes, there is a need to sequence the resume of different
drivers regardless of their registration. For example, for Tegra
platform, GPIO resume should be before the pinmux resume to avoid
glitch. On this, GPIO resume will configure the GPIO control
register before pins are enable after resume.

Add support to have the early_resume() callback which get called
before resume() so that respective driver's resume can be sequenced
over other drivers.

Bug 200298115

Change-Id: I794f6aea613a30cda8ba5decbf8ce62571c8e44b
Signed-off-by: Suresh Mangipudi <smangipudi@nvidia.com>
Reviewed-on: http://git-master/r/1482937
(cherry picked from commit 73fa1fcde1982ea05f83b39f6d0281d8b10c968e)
Reviewed-on: http://git-master/r/1487954
GVS: Gerrit_Virtual_Submit
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
drivers/base/syscore.c
include/linux/syscore_ops.h

index 62a4fa8fc8baee29f7121ac9435a21b1a958fe13..b0118ef73229e367e7e04d7fae559fe481c4f65a 100644 (file)
@@ -101,6 +101,15 @@ void syscore_resume(void)
        WARN_ONCE(!irqs_disabled(),
                "Interrupts enabled before system core resume.\n");
 
+       list_for_each_entry(ops, &syscore_ops_list, node)
+               if (ops->early_resume) {
+                       if (initcall_debug)
+                               pr_info("PM: Calling %pF\n", ops->early_resume);
+                       ops->early_resume();
+                       WARN_ONCE(!irqs_disabled(),
+                               "Interrupts enabled after %pF\n",
+                               ops->early_resume);
+               }
        list_for_each_entry(ops, &syscore_ops_list, node)
                if (ops->resume) {
                        if (initcall_debug)
index 8b4a10f9393b18b1eed2a87432cbf26f203f6585..c47e32a9555b3491e7328c9cfd21977d97cce826 100644 (file)
@@ -15,6 +15,7 @@ struct syscore_ops {
        struct list_head node;
        int (*suspend)(void);
        void (*resume)(void);
+       void (*early_resume)(void);
        void (*shutdown)(void);
        int (*save)(void);
        void (*restore)(void);