ARM: at91: pm: add support for 2.5V LDO regulator control
authorClaudiu Beznea <claudiu.beznea@microchip.com>
Thu, 15 Apr 2021 10:50:00 +0000 (13:50 +0300)
committerNicolas Ferre <nicolas.ferre@microchip.com>
Mon, 19 Jul 2021 12:32:12 +0000 (14:32 +0200)
Add support to disable/enable 2.5V LDO regulator when entering/exiting
any ULP mode.

Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
Signed-off-by: Nicolas Ferre <nicolas.ferre@microchip.com>
Link: https://lore.kernel.org/r/20210415105010.569620-15-claudiu.beznea@microchip.com
arch/arm/mach-at91/pm.h
arch/arm/mach-at91/pm_suspend.S

index 6664740..53bdc90 100644 (file)
@@ -13,6 +13,7 @@
 #include <soc/at91/at91sam9_ddrsdr.h>
 #include <soc/at91/at91sam9_sdramc.h>
 #include <soc/at91/sama7-ddr.h>
+#include <soc/at91/sama7-sfrbu.h>
 
 #define AT91_MEMCTRL_MC                0
 #define AT91_MEMCTRL_SDRAMC    1
index 8b0b861..9c9e08f 100644 (file)
@@ -83,6 +83,29 @@ tmp3 .req    r6
 
        .endm
 
+/**
+ * Set state for 2.5V low power regulator
+ * @ena: 0 - disable regulator
+ *      1 - enable regulator
+ *
+ * Side effects: overwrites r7, r8, r9, r10
+ */
+       .macro at91_2_5V_reg_set_low_power ena
+#ifdef CONFIG_SOC_SAMA7
+       ldr     r7, .sfrbu
+       mov     r8, #\ena
+       ldr     r9, [r7, #AT91_SFRBU_25LDOCR]
+       orr     r9, r9, #AT91_SFRBU_25LDOCR_LP
+       cmp     r8, #1
+       beq     lp_done_\ena
+       bic     r9, r9, #AT91_SFRBU_25LDOCR_LP
+lp_done_\ena:
+       ldr     r10, =AT91_SFRBU_25LDOCR_LDOANAKEY
+       orr     r9, r9, r10
+       str     r9, [r7, #AT91_SFRBU_25LDOCR]
+#endif
+       .endm
+
        .text
 
        .arm
@@ -906,6 +929,9 @@ save_mck:
 
        at91_plla_disable
 
+       /* Enable low power mode for 2.5V regulator. */
+       at91_2_5V_reg_set_low_power 1
+
        ldr     tmp3, .pm_mode
        cmp     tmp3, #AT91_PM_ULP1
        beq     ulp1_mode
@@ -918,6 +944,9 @@ ulp1_mode:
        b       ulp_exit
 
 ulp_exit:
+       /* Disable low power mode for 2.5V regulator. */
+       at91_2_5V_reg_set_low_power 0
+
        ldr     pmc, .pmc_base
 
        at91_plla_enable