16 #include <linux/module.h>
17 #include <linux/kernel.h>
18 #include <linux/time.h>
19 #include <linux/rtc.h>
29 #define WM8350_SET_ALM_RETRIES 5
30 #define WM8350_SET_TIME_RETRIES 5
31 #define WM8350_GET_TIME_RETRIES 5
33 #define to_wm8350_from_rtc_dev(d) container_of(d, struct wm8350, rtc.pdev.dev)
41 u16 time1[4], time2[4];
58 if (
memcmp(time1, time2,
sizeof(time1)) == 0) {
82 dev_dbg(dev,
"Read (%d left): %04x %04x %04x %04x\n",
84 time1[0], time1[1], time1[2], time1[3]);
90 dev_err(dev,
"timed out reading RTC time\n");
111 time[3] |= (tm->
tm_year + 1900) % 100;
113 dev_dbg(dev,
"Setting: %04x %04x %04x %04x\n",
114 time[0], time[1], time[2], time[3]);
128 dev_err(dev,
"timed out on set confirmation\n");
146 static int wm8350_rtc_readalarm(
struct device *dev,
struct rtc_wkalrm *alrm)
158 if (tm->
tm_sec == WM8350_RTC_ALMSECS_MASK)
162 if (tm->
tm_min == WM8350_RTC_ALMMINS_MASK)
168 if (tm->
tm_hour == WM8350_RTC_ALMHRS_MASK)
176 if (tm->
tm_mon == WM8350_RTC_ALMMTH_MASK)
192 static int wm8350_rtc_stop_alarm(
struct wm8350 *wm8350)
210 if (!(rtc_ctrl & WM8350_RTC_ALMSTS))
216 static int wm8350_rtc_start_alarm(
struct wm8350 *wm8350)
231 }
while (retries-- && rtc_ctrl & WM8350_RTC_ALMSTS);
233 if (rtc_ctrl & WM8350_RTC_ALMSTS)
239 static int wm8350_rtc_alarm_irq_enable(
struct device *dev,
245 return wm8350_rtc_start_alarm(wm8350);
247 return wm8350_rtc_stop_alarm(wm8350);
257 memset(time, 0,
sizeof(time));
289 ret = wm8350_rtc_stop_alarm(wm8350);
300 ret = wm8350_rtc_start_alarm(wm8350);
307 struct wm8350 *wm8350 =
data;
318 "Failed to disable alarm: %d\n", ret);
324 static irqreturn_t wm8350_rtc_update_handler(
int irq,
void *data)
326 struct wm8350 *wm8350 =
data;
335 .read_time = wm8350_rtc_readtime,
336 .set_time = wm8350_rtc_settime,
337 .read_alarm = wm8350_rtc_readalarm,
338 .set_alarm = wm8350_rtc_setalarm,
339 .alarm_irq_enable = wm8350_rtc_alarm_irq_enable,
352 if (device_may_wakeup(&wm8350->
rtc.pdev->dev) &&
353 reg & WM8350_RTC_ALMSTS) {
354 ret = wm8350_rtc_stop_alarm(wm8350);
356 dev_err(&pdev->
dev,
"Failed to stop RTC alarm: %d\n",
369 if (wm8350->
rtc.alarm_enabled) {
370 ret = wm8350_rtc_start_alarm(wm8350);
373 "Failed to restart RTC alarm: %d\n", ret);
380 #define wm8350_rtc_suspend NULL
381 #define wm8350_rtc_resume NULL
386 struct wm8350 *wm8350 = platform_get_drvdata(pdev);
393 dev_err(&pdev->
dev,
"RTC BCD mode not supported\n");
397 dev_err(&pdev->
dev,
"RTC 12 hour mode not supported\n");
409 WM8350_RTC_TICK_ENA);
411 dev_err(&pdev->
dev,
"failed to enable RTC: %d\n", ret);
418 if (timectl & WM8350_RTC_STS) {
424 dev_err(&pdev->
dev,
"failed to start: %d\n", ret);
432 }
while (timectl & WM8350_RTC_STS && --retries);
435 dev_err(&pdev->
dev,
"failed to start: timeout\n");
444 if (IS_ERR(wm_rtc->
rtc)) {
445 ret = PTR_ERR(wm_rtc->
rtc);
446 dev_err(&pdev->
dev,
"failed to register RTC: %d\n", ret);
451 wm8350_rtc_update_handler, 0,
452 "RTC Seconds", wm8350);
456 wm8350_rtc_alarm_handler, 0,
457 "RTC Alarm", wm8350);
464 struct wm8350 *wm8350 = platform_get_drvdata(pdev);
475 static struct dev_pm_ops wm8350_rtc_pm_ops = {
481 .probe = wm8350_rtc_probe,
484 .name =
"wm8350-rtc",
485 .pm = &wm8350_rtc_pm_ops,