rtc: interface: Add power_off_program to rtc_class_ops
authorKeerthy <j-keerthy@ti.com>
Fri, 2 Nov 2018 10:28:07 +0000 (15:58 +0530)
committerTero Kristo <t-kristo@ti.com>
Tue, 6 Nov 2018 13:03:47 +0000 (15:03 +0200)
Add an interface function to set up the rtc for a power_off
mode.

Signed-off-by: Keerthy <j-keerthy@ti.com>
drivers/rtc/interface.c
drivers/rtc/rtc-omap.c
include/linux/rtc.h

index 3d577e259e91b94f6e1b5abbce60bf3746308803..be8c0fd377b1d2174ef5c212deb9fa3e813ea504 100644 (file)
@@ -1076,3 +1076,15 @@ int rtc_set_offset(struct rtc_device *rtc, long offset)
        trace_rtc_set_offset(offset, ret);
        return ret;
 }
+
+/**
+ * rtc_power_off_program - Some of the rtc are hooked on to PMIC_EN
+ * line and can be used to power off the SoC.
+ *
+ * Kernel interface to program rtc to power off
+ */
+int rtc_power_off_program(struct rtc_device *rtc)
+{
+       return rtc->ops->power_off_program(rtc->dev.parent);
+}
+EXPORT_SYMBOL_GPL(rtc_power_off_program);
index 0d97733e262dbf0df8e0edbdf2d65b847a86cb9f..8a3347ca9a7acd32f88af42965d63cf8ba84a74f 100644 (file)
@@ -523,6 +523,7 @@ static const struct rtc_class_ops omap_rtc_ops = {
        .read_alarm     = omap_rtc_read_alarm,
        .set_alarm      = omap_rtc_set_alarm,
        .alarm_irq_enable = omap_rtc_alarm_irq_enable,
+       .power_off_program = omap_rtc_power_off_program,
 };
 
 static const struct omap_rtc_device_type omap_rtc_default_type = {
index 6aedc30003e731576ae87857666b2abe5b510187..711e494b6d28e50d42c5ace00d8ed2b596288e8f 100644 (file)
@@ -85,6 +85,7 @@ struct rtc_class_ops {
        int (*alarm_irq_enable)(struct device *, unsigned int enabled);
        int (*read_offset)(struct device *, long *offset);
        int (*set_offset)(struct device *, long offset);
+       int (*power_off_program)(struct device *dev);
 };
 
 struct rtc_timer {
@@ -216,6 +217,7 @@ void rtc_timer_cancel(struct rtc_device *rtc, struct rtc_timer *timer);
 int rtc_read_offset(struct rtc_device *rtc, long *offset);
 int rtc_set_offset(struct rtc_device *rtc, long offset);
 void rtc_timer_do_work(struct work_struct *work);
+int rtc_power_off_program(struct rtc_device *rtc);
 
 static inline bool is_leap_year(unsigned int year)
 {