]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
power: reset: at91-poweroff: add RTT wakeup capability
authorClaudiu Beznea <claudiu.beznea@microchip.com>
Thu, 21 Feb 2019 13:45:48 +0000 (13:45 +0000)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Fri, 5 Apr 2019 15:50:45 +0000 (17:50 +0200)
Add RTT wakeup capability.

Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/reset/at91-sama5d2_shdwc.c

index 2b686c55b7175081387bb27c98dc39729db3b7b6..0747e0cdf3506a1065a3e677c62320c89e8c802b 100644 (file)
 
 #define SHDW_WK_PIN(reg, cfg)  ((reg) & AT91_SHDW_WKUPIS((cfg)->wkup_pin_input))
 #define SHDW_RTCWK(reg, cfg)   (((reg) >> ((cfg)->sr_rtcwk_shift)) & 0x1)
+#define SHDW_RTTWK(reg, cfg)   (((reg) >> ((cfg)->sr_rttwk_shift)) & 0x1)
 #define SHDW_RTCWKEN(cfg)      (1 << ((cfg)->mr_rtcwk_shift))
+#define SHDW_RTTWKEN(cfg)      (1 << ((cfg)->mr_rttwk_shift))
 
 #define DBC_PERIOD_US(x)       DIV_ROUND_UP_ULL((1000000 * (x)), \
                                                        SLOW_CLOCK_FREQ)
 
+#define SHDW_CFG_NOT_USED      (32)
+
 struct shdwc_config {
        u8 wkup_pin_input;
        u8 mr_rtcwk_shift;
+       u8 mr_rttwk_shift;
        u8 sr_rtcwk_shift;
+       u8 sr_rttwk_shift;
 };
 
 struct shdwc {
@@ -104,6 +110,8 @@ static void __init at91_wakeup_status(struct platform_device *pdev)
                reason = "WKUP pin";
        else if (SHDW_RTCWK(reg, shdw->cfg))
                reason = "RTC";
+       else if (SHDW_RTTWK(reg, shdw->cfg))
+               reason = "RTT";
 
        pr_info("AT91: Wake-Up source: %s\n", reason);
 }
@@ -221,6 +229,9 @@ static void at91_shdwc_dt_configure(struct platform_device *pdev)
        if (of_property_read_bool(np, "atmel,wakeup-rtc-timer"))
                mode |= SHDW_RTCWKEN(shdw->cfg);
 
+       if (of_property_read_bool(np, "atmel,wakeup-rtt-timer"))
+               mode |= SHDW_RTTWKEN(shdw->cfg);
+
        dev_dbg(&pdev->dev, "%s: mode = %#x\n", __func__, mode);
        writel(mode, shdw->shdwc_base + AT91_SHDW_MR);
 
@@ -231,7 +242,10 @@ static void at91_shdwc_dt_configure(struct platform_device *pdev)
 static const struct shdwc_config sama5d2_shdwc_config = {
        .wkup_pin_input = 0,
        .mr_rtcwk_shift = 17,
+       .mr_rttwk_shift = SHDW_CFG_NOT_USED,
        .sr_rtcwk_shift = 5,
+       .sr_rttwk_shift = SHDW_CFG_NOT_USED,
+};
 };
 
 static const struct of_device_id at91_shdwc_of_match[] = {