]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
pinctrl: sprd: Add CM4 sleep mode support
authorBruce Chen <bruce.chen@unisoc.com>
Wed, 16 Oct 2019 12:23:39 +0000 (20:23 +0800)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 16 Oct 2019 14:01:24 +0000 (16:01 +0200)
For the new Spreadtrum pin controller, it expands 6bits to describe the
pin sleep mode with adding one CM4_SLEEP mode, which means the pin sleep
related configuration will be loaded automatically by hardware when the
CM4 system goes into deep sleep mode.

Signed-off-by: Bruce Chen <bruce.chen@unisoc.com>
Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
Link: https://lore.kernel.org/r/8ae52263b0625c416461821c457e6789b67170b6.1571228451.git.baolin.wang@linaro.org
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/sprd/pinctrl-sprd.c

index 8869843d34e3e17d3066331be2f5375aa79bd2cf..157712ab05a89aeafeb6ac3b52ce1927f4e8b11d 100644 (file)
@@ -41,7 +41,8 @@
 #define PUBCP_SLEEP_MODE               BIT(14)
 #define TGLDSP_SLEEP_MODE              BIT(15)
 #define AGDSP_SLEEP_MODE               BIT(16)
-#define SLEEP_MODE_MASK                        GENMASK(3, 0)
+#define CM4_SLEEP_MODE                 BIT(17)
+#define SLEEP_MODE_MASK                        GENMASK(5, 0)
 #define SLEEP_MODE_SHIFT               13
 
 #define SLEEP_INPUT                    BIT(1)
@@ -81,6 +82,7 @@ enum pin_sleep_mode {
        PUBCP_SLEEP = BIT(1),
        TGLDSP_SLEEP = BIT(2),
        AGDSP_SLEEP = BIT(3),
+       CM4_SLEEP = BIT(4),
 };
 
 enum pin_func_sel {
@@ -616,6 +618,8 @@ static int sprd_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin_id,
                                        val |= TGLDSP_SLEEP_MODE;
                                if (arg & AGDSP_SLEEP)
                                        val |= AGDSP_SLEEP_MODE;
+                               if (arg & CM4_SLEEP)
+                                       val |= CM4_SLEEP_MODE;
 
                                mask = SLEEP_MODE_MASK;
                                shift = SLEEP_MODE_SHIFT;