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()
268 struct davinci_rtc *davinci_rtc = dev_get_drvdata(dev); in davinci_rtc_read_time() local
275 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_time()
276 tm->tm_sec = bcd2bin(rtcss_read(davinci_rtc, PRTCSS_RTC_SEC)); in davinci_rtc_read_time()
278 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_time()
279 tm->tm_min = bcd2bin(rtcss_read(davinci_rtc, PRTCSS_RTC_MIN)); in davinci_rtc_read_time()
281 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_time()
282 tm->tm_hour = bcd2bin(rtcss_read(davinci_rtc, PRTCSS_RTC_HOUR)); in davinci_rtc_read_time()
284 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_time()
285 day0 = rtcss_read(davinci_rtc, PRTCSS_RTC_DAY0); in davinci_rtc_read_time()
287 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_time()
288 day1 = rtcss_read(davinci_rtc, PRTCSS_RTC_DAY1); in davinci_rtc_read_time()
303 struct davinci_rtc *davinci_rtc = dev_get_drvdata(dev); in davinci_rtc_set_time() local
312 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_time()
313 rtcss_write(davinci_rtc, bin2bcd(tm->tm_sec), PRTCSS_RTC_SEC); in davinci_rtc_set_time()
315 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_time()
316 rtcss_write(davinci_rtc, bin2bcd(tm->tm_min), PRTCSS_RTC_MIN); in davinci_rtc_set_time()
318 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_time()
319 rtcss_write(davinci_rtc, bin2bcd(tm->tm_hour), PRTCSS_RTC_HOUR); in davinci_rtc_set_time()
321 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_time()
322 rtcss_write(davinci_rtc, days & 0xFF, PRTCSS_RTC_DAY0); in davinci_rtc_set_time()
324 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_time()
325 rtcss_write(davinci_rtc, (days & 0xFF00) >> 8, PRTCSS_RTC_DAY1); in davinci_rtc_set_time()
327 rtc_cctrl = rtcss_read(davinci_rtc, PRTCSS_RTC_CCTRL); in davinci_rtc_set_time()
329 rtcss_write(davinci_rtc, rtc_cctrl, PRTCSS_RTC_CCTRL); in davinci_rtc_set_time()
339 struct davinci_rtc *davinci_rtc = dev_get_drvdata(dev); in davinci_rtc_alarm_irq_enable() local
341 u8 rtc_cctrl = rtcss_read(davinci_rtc, PRTCSS_RTC_CCTRL); in davinci_rtc_alarm_irq_enable()
354 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_alarm_irq_enable()
355 rtcss_write(davinci_rtc, rtc_cctrl, PRTCSS_RTC_CCTRL); in davinci_rtc_alarm_irq_enable()
364 struct davinci_rtc *davinci_rtc = dev_get_drvdata(dev); in davinci_rtc_read_alarm() local
373 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_alarm()
374 alm->time.tm_min = bcd2bin(rtcss_read(davinci_rtc, PRTCSS_RTC_AMIN)); in davinci_rtc_read_alarm()
376 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_alarm()
377 alm->time.tm_hour = bcd2bin(rtcss_read(davinci_rtc, PRTCSS_RTC_AHOUR)); in davinci_rtc_read_alarm()
379 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_alarm()
380 day0 = rtcss_read(davinci_rtc, PRTCSS_RTC_ADAY0); in davinci_rtc_read_alarm()
382 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_read_alarm()
383 day1 = rtcss_read(davinci_rtc, PRTCSS_RTC_ADAY1); in davinci_rtc_read_alarm()
392 alm->pending = !!(rtcss_read(davinci_rtc, in davinci_rtc_read_alarm()
402 struct davinci_rtc *davinci_rtc = dev_get_drvdata(dev); in davinci_rtc_set_alarm() local
410 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_alarm()
411 rtcss_write(davinci_rtc, bin2bcd(alm->time.tm_min), PRTCSS_RTC_AMIN); in davinci_rtc_set_alarm()
413 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_alarm()
414 rtcss_write(davinci_rtc, bin2bcd(alm->time.tm_hour), PRTCSS_RTC_AHOUR); in davinci_rtc_set_alarm()
416 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_alarm()
417 rtcss_write(davinci_rtc, days & 0xFF, PRTCSS_RTC_ADAY0); in davinci_rtc_set_alarm()
419 davinci_rtcss_calendar_wait(davinci_rtc); in davinci_rtc_set_alarm()
420 rtcss_write(davinci_rtc, (days & 0xFF00) >> 8, PRTCSS_RTC_ADAY1); in davinci_rtc_set_alarm()
439 struct davinci_rtc *davinci_rtc; in davinci_rtc_probe() local
442 davinci_rtc = devm_kzalloc(&pdev->dev, sizeof(struct davinci_rtc), GFP_KERNEL); in davinci_rtc_probe()
443 if (!davinci_rtc) in davinci_rtc_probe()
446 davinci_rtc->irq = platform_get_irq(pdev, 0); in davinci_rtc_probe()
447 if (davinci_rtc->irq < 0) in davinci_rtc_probe()
448 return davinci_rtc->irq; in davinci_rtc_probe()
450 davinci_rtc->base = devm_platform_ioremap_resource(pdev, 0); in davinci_rtc_probe()
451 if (IS_ERR(davinci_rtc->base)) in davinci_rtc_probe()
452 return PTR_ERR(davinci_rtc->base); in davinci_rtc_probe()
454 platform_set_drvdata(pdev, davinci_rtc); in davinci_rtc_probe()
456 davinci_rtc->rtc = devm_rtc_allocate_device(&pdev->dev); in davinci_rtc_probe()
457 if (IS_ERR(davinci_rtc->rtc)) in davinci_rtc_probe()
458 return PTR_ERR(davinci_rtc->rtc); in davinci_rtc_probe()
460 davinci_rtc->rtc->ops = &davinci_rtc_ops; in davinci_rtc_probe()
461 davinci_rtc->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; in davinci_rtc_probe()
462 davinci_rtc->rtc->range_max = RTC_TIMESTAMP_BEGIN_2000 + (1 << 16) * 86400ULL - 1; in davinci_rtc_probe()
464 rtcif_write(davinci_rtc, PRTCIF_INTFLG_RTCSS, PRTCIF_INTFLG); in davinci_rtc_probe()
465 rtcif_write(davinci_rtc, 0, PRTCIF_INTEN); in davinci_rtc_probe()
466 rtcss_write(davinci_rtc, 0, PRTCSS_RTC_INTC_EXTENA1); in davinci_rtc_probe()
468 rtcss_write(davinci_rtc, 0, PRTCSS_RTC_CTRL); in davinci_rtc_probe()
469 rtcss_write(davinci_rtc, 0, PRTCSS_RTC_CCTRL); in davinci_rtc_probe()
471 ret = devm_request_irq(dev, davinci_rtc->irq, davinci_rtc_interrupt, in davinci_rtc_probe()
472 0, "davinci_rtc", davinci_rtc); in davinci_rtc_probe()
479 rtcif_write(davinci_rtc, PRTCIF_INTEN_RTCSS, PRTCIF_INTEN); in davinci_rtc_probe()
480 rtcss_write(davinci_rtc, PRTCSS_RTC_INTC_EXTENA1_MASK, in davinci_rtc_probe()
483 rtcss_write(davinci_rtc, PRTCSS_RTC_CCTRL_CAEN, PRTCSS_RTC_CCTRL); in davinci_rtc_probe()
487 return rtc_register_device(davinci_rtc->rtc); in davinci_rtc_probe()
492 struct davinci_rtc *davinci_rtc = platform_get_drvdata(pdev); in davinci_rtc_remove() local
496 rtcif_write(davinci_rtc, 0, PRTCIF_INTEN); in davinci_rtc_remove()