Lines Matching refs:davinci_rtc

106 struct davinci_rtc {  struct
112 static inline void rtcif_write(struct davinci_rtc *davinci_rtc, in rtcif_write() argument
115 writel(val, davinci_rtc->base + addr); in rtcif_write()
118 static inline u32 rtcif_read(struct davinci_rtc *davinci_rtc, u32 addr) in rtcif_read() argument
120 return readl(davinci_rtc->base + addr); in rtcif_read()
123 static inline void rtcif_wait(struct davinci_rtc *davinci_rtc) in rtcif_wait() argument
125 while (rtcif_read(davinci_rtc, PRTCIF_CTLR) & PRTCIF_CTLR_BUSY) in rtcif_wait()
129 static inline void rtcss_write(struct davinci_rtc *davinci_rtc, in rtcss_write() argument
132 rtcif_wait(davinci_rtc); in rtcss_write()
134 rtcif_write(davinci_rtc, PRTCIF_CTLR_BENL_LSB | addr, PRTCIF_CTLR); in rtcss_write()
135 rtcif_write(davinci_rtc, val, PRTCIF_LDATA); in rtcss_write()
137 rtcif_wait(davinci_rtc); in rtcss_write()
140 static inline u8 rtcss_read(struct davinci_rtc *davinci_rtc, u8 addr) in rtcss_read() argument
142 rtcif_wait(davinci_rtc); in rtcss_read()
144 rtcif_write(davinci_rtc, PRTCIF_CTLR_DIR | PRTCIF_CTLR_BENL_LSB | addr, in rtcss_read()
147 rtcif_wait(davinci_rtc); in rtcss_read()
149 return rtcif_read(davinci_rtc, PRTCIF_LDATA); in rtcss_read()
152 static inline void davinci_rtcss_calendar_wait(struct davinci_rtc *davinci_rtc) in davinci_rtcss_calendar_wait() argument
154 while (rtcss_read(davinci_rtc, PRTCSS_RTC_CCTRL) & in davinci_rtcss_calendar_wait()
161 struct davinci_rtc *davinci_rtc = class_dev; in davinci_rtc_interrupt() local
168 irq_flg = rtcif_read(davinci_rtc, PRTCIF_INTFLG) & in davinci_rtc_interrupt()
171 alm_irq = rtcss_read(davinci_rtc, PRTCSS_RTC_CCTRL) & in davinci_rtc_interrupt()
174 tmr_irq = rtcss_read(davinci_rtc, PRTCSS_RTC_CTRL) & in davinci_rtc_interrupt()
180 rtc_cctrl = rtcss_read(davinci_rtc, PRTCSS_RTC_CCTRL); in davinci_rtc_interrupt()
182 rtcss_write(davinci_rtc, rtc_cctrl, PRTCSS_RTC_CCTRL); in davinci_rtc_interrupt()
185 rtc_ctrl = rtcss_read(davinci_rtc, PRTCSS_RTC_CTRL); in davinci_rtc_interrupt()
187 rtcss_write(davinci_rtc, rtc_ctrl, PRTCSS_RTC_CTRL); in davinci_rtc_interrupt()
190 rtcif_write(davinci_rtc, PRTCIF_INTFLG_RTCSS, in davinci_rtc_interrupt()
192 rtc_update_irq(davinci_rtc->rtc, 1, events); in davinci_rtc_interrupt()
203 struct davinci_rtc *davinci_rtc = dev_get_drvdata(dev); in davinci_rtc_ioctl() local
210 rtc_ctrl = rtcss_read(davinci_rtc, PRTCSS_RTC_CTRL); in davinci_rtc_ioctl()
223 rtcss_write(davinci_rtc, rtc_ctrl, PRTCSS_RTC_CTRL); in davinci_rtc_ioctl()
275 struct davinci_rtc *davinci_rtc = dev_get_drvdata(dev); in davinci_rtc_read_time() local
282 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_time()
283 tm->tm_sec = bcd2bin(rtcss_read(davinci_rtc, PRTCSS_RTC_SEC)); in davinci_rtc_read_time()
285 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_time()
286 tm->tm_min = bcd2bin(rtcss_read(davinci_rtc, PRTCSS_RTC_MIN)); in davinci_rtc_read_time()
288 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_time()
289 tm->tm_hour = bcd2bin(rtcss_read(davinci_rtc, PRTCSS_RTC_HOUR)); in davinci_rtc_read_time()
291 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_time()
292 day0 = rtcss_read(davinci_rtc, PRTCSS_RTC_DAY0); in davinci_rtc_read_time()
294 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_time()
295 day1 = rtcss_read(davinci_rtc, PRTCSS_RTC_DAY1); in davinci_rtc_read_time()
311 struct davinci_rtc *davinci_rtc = dev_get_drvdata(dev); in davinci_rtc_set_time() local
321 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_time()
322 rtcss_write(davinci_rtc, bin2bcd(tm->tm_sec), PRTCSS_RTC_SEC); in davinci_rtc_set_time()
324 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_time()
325 rtcss_write(davinci_rtc, bin2bcd(tm->tm_min), PRTCSS_RTC_MIN); in davinci_rtc_set_time()
327 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_time()
328 rtcss_write(davinci_rtc, bin2bcd(tm->tm_hour), PRTCSS_RTC_HOUR); in davinci_rtc_set_time()
330 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_time()
331 rtcss_write(davinci_rtc, days & 0xFF, PRTCSS_RTC_DAY0); in davinci_rtc_set_time()
333 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_time()
334 rtcss_write(davinci_rtc, (days & 0xFF00) >> 8, PRTCSS_RTC_DAY1); in davinci_rtc_set_time()
336 rtc_cctrl = rtcss_read(davinci_rtc, PRTCSS_RTC_CCTRL); in davinci_rtc_set_time()
338 rtcss_write(davinci_rtc, rtc_cctrl, PRTCSS_RTC_CCTRL); in davinci_rtc_set_time()
348 struct davinci_rtc *davinci_rtc = dev_get_drvdata(dev); in davinci_rtc_alarm_irq_enable() local
350 u8 rtc_cctrl = rtcss_read(davinci_rtc, PRTCSS_RTC_CCTRL); in davinci_rtc_alarm_irq_enable()
363 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_alarm_irq_enable()
364 rtcss_write(davinci_rtc, rtc_cctrl, PRTCSS_RTC_CCTRL); in davinci_rtc_alarm_irq_enable()
373 struct davinci_rtc *davinci_rtc = dev_get_drvdata(dev); in davinci_rtc_read_alarm() local
382 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_alarm()
383 alm->time.tm_min = bcd2bin(rtcss_read(davinci_rtc, PRTCSS_RTC_AMIN)); in davinci_rtc_read_alarm()
385 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_alarm()
386 alm->time.tm_hour = bcd2bin(rtcss_read(davinci_rtc, PRTCSS_RTC_AHOUR)); in davinci_rtc_read_alarm()
388 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_alarm()
389 day0 = rtcss_read(davinci_rtc, PRTCSS_RTC_ADAY0); in davinci_rtc_read_alarm()
391 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_alarm()
392 day1 = rtcss_read(davinci_rtc, PRTCSS_RTC_ADAY1); in davinci_rtc_read_alarm()
402 alm->pending = !!(rtcss_read(davinci_rtc, in davinci_rtc_read_alarm()
412 struct davinci_rtc *davinci_rtc = dev_get_drvdata(dev); in davinci_rtc_set_alarm() local
442 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_alarm()
443 rtcss_write(davinci_rtc, bin2bcd(alm->time.tm_min), PRTCSS_RTC_AMIN); in davinci_rtc_set_alarm()
445 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_alarm()
446 rtcss_write(davinci_rtc, bin2bcd(alm->time.tm_hour), PRTCSS_RTC_AHOUR); in davinci_rtc_set_alarm()
448 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_alarm()
449 rtcss_write(davinci_rtc, days & 0xFF, PRTCSS_RTC_ADAY0); in davinci_rtc_set_alarm()
451 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_alarm()
452 rtcss_write(davinci_rtc, (days & 0xFF00) >> 8, PRTCSS_RTC_ADAY1); in davinci_rtc_set_alarm()
471 struct davinci_rtc *davinci_rtc; in davinci_rtc_probe() local
475 davinci_rtc = devm_kzalloc(&pdev->dev, sizeof(struct davinci_rtc), GFP_KERNEL); in davinci_rtc_probe()
476 if (!davinci_rtc) in davinci_rtc_probe()
479 davinci_rtc->irq = platform_get_irq(pdev, 0); in davinci_rtc_probe()
480 if (davinci_rtc->irq < 0) in davinci_rtc_probe()
481 return davinci_rtc->irq; in davinci_rtc_probe()
484 davinci_rtc->base = devm_ioremap_resource(dev, res); in davinci_rtc_probe()
485 if (IS_ERR(davinci_rtc->base)) in davinci_rtc_probe()
486 return PTR_ERR(davinci_rtc->base); in davinci_rtc_probe()
488 platform_set_drvdata(pdev, davinci_rtc); in davinci_rtc_probe()
490 davinci_rtc->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, in davinci_rtc_probe()
492 if (IS_ERR(davinci_rtc->rtc)) { in davinci_rtc_probe()
495 return PTR_ERR(davinci_rtc->rtc); in davinci_rtc_probe()
498 rtcif_write(davinci_rtc, PRTCIF_INTFLG_RTCSS, PRTCIF_INTFLG); in davinci_rtc_probe()
499 rtcif_write(davinci_rtc, 0, PRTCIF_INTEN); in davinci_rtc_probe()
500 rtcss_write(davinci_rtc, 0, PRTCSS_RTC_INTC_EXTENA1); in davinci_rtc_probe()
502 rtcss_write(davinci_rtc, 0, PRTCSS_RTC_CTRL); in davinci_rtc_probe()
503 rtcss_write(davinci_rtc, 0, PRTCSS_RTC_CCTRL); in davinci_rtc_probe()
505 ret = devm_request_irq(dev, davinci_rtc->irq, davinci_rtc_interrupt, in davinci_rtc_probe()
506 0, "davinci_rtc", davinci_rtc); in davinci_rtc_probe()
513 rtcif_write(davinci_rtc, PRTCIF_INTEN_RTCSS, PRTCIF_INTEN); in davinci_rtc_probe()
514 rtcss_write(davinci_rtc, PRTCSS_RTC_INTC_EXTENA1_MASK, in davinci_rtc_probe()
517 rtcss_write(davinci_rtc, PRTCSS_RTC_CCTRL_CAEN, PRTCSS_RTC_CCTRL); in davinci_rtc_probe()
526 struct davinci_rtc *davinci_rtc = platform_get_drvdata(pdev); in davinci_rtc_remove() local
530 rtcif_write(davinci_rtc, 0, PRTCIF_INTEN); in davinci_rtc_remove()