spinlock_t lock;
};
+static void __iomem *snvs_base;
+
static u32 rtc_read_lp_counter(void __iomem *ioaddr)
{
u64 read1, read2;
return events ? IRQ_HANDLED : IRQ_NONE;
}
+static void snvs_poweroff(void)
+{
+ u32 value;
+
+ value = readl(snvs_base + SNVS_LPCR);
+ /* set TOP and DP_EN bit */
+ writel(value | 0x60, snvs_base + SNVS_LPCR);
+}
+
static int snvs_rtc_probe(struct platform_device *pdev)
{
struct snvs_rtc_data *data;
/* Clear interrupt status */
writel(0xffffffff, data->ioaddr + SNVS_LPSR);
+ snvs_base = data->ioaddr;
/* Enable RTC */
snvs_rtc_enable(data, true);
dev_err(&pdev->dev, "failed to register rtc: %d\n", ret);
return ret;
}
+ /*
+ * if no specific power off function in board file, power off system by
+ * SNVS
+ */
+ if (!pm_power_off)
+ pm_power_off = snvs_poweroff;
return 0;
}