static int wm831x_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) { struct wm831x_rtc *wm831x_rtc = dev_get_drvdata(dev); if (enabled) return wm831x_rtc_start_alarm(wm831x_rtc); else return wm831x_rtc_stop_alarm(wm831x_rtc); }
/* Enable the alarm if it should be enabled (in case it was disabled to * prevent use as a wake source). */ static int wm831x_rtc_resume(struct device *dev) { struct wm831x_rtc *wm831x_rtc = dev_get_drvdata(dev); int ret; if (wm831x_rtc->alarm_enabled) { ret = wm831x_rtc_start_alarm(wm831x_rtc); if (ret != 0) dev_err(dev, "Failed to restart RTC alarm: %d\n", ret); } return 0; }
static int wm831x_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm) { struct wm831x_rtc *wm831x_rtc = dev_get_drvdata(dev); struct wm831x *wm831x = wm831x_rtc->wm831x; int ret; unsigned long time; ret = rtc_tm_to_time(&alrm->time, &time); if (ret < 0) { dev_err(dev, "Failed to convert time: %d\n", ret); return ret; } ret = wm831x_rtc_stop_alarm(wm831x_rtc); if (ret < 0) { dev_err(dev, "Failed to stop alarm: %d\n", ret); return ret; } ret = wm831x_reg_write(wm831x, WM831X_RTC_ALARM_1, (time >> 16) & 0xffff); if (ret < 0) { dev_err(dev, "Failed to write ALARM_1: %d\n", ret); return ret; } ret = wm831x_reg_write(wm831x, WM831X_RTC_ALARM_2, time & 0xffff); if (ret < 0) { dev_err(dev, "Failed to write ALARM_2: %d\n", ret); return ret; } if (alrm->enabled) { ret = wm831x_rtc_start_alarm(wm831x_rtc); if (ret < 0) { dev_err(dev, "Failed to start alarm: %d\n", ret); return ret; } } return 0; }