Lines Matching refs:rtc
130 void (*lock)(struct omap_rtc *rtc);
131 void (*unlock)(struct omap_rtc *rtc);
135 struct rtc_device *rtc; member
146 static inline u8 rtc_read(struct omap_rtc *rtc, unsigned int reg) in rtc_read() argument
148 return readb(rtc->base + reg); in rtc_read()
151 static inline u32 rtc_readl(struct omap_rtc *rtc, unsigned int reg) in rtc_readl() argument
153 return readl(rtc->base + reg); in rtc_readl()
156 static inline void rtc_write(struct omap_rtc *rtc, unsigned int reg, u8 val) in rtc_write() argument
158 writeb(val, rtc->base + reg); in rtc_write()
161 static inline void rtc_writel(struct omap_rtc *rtc, unsigned int reg, u32 val) in rtc_writel() argument
163 writel(val, rtc->base + reg); in rtc_writel()
166 static void am3352_rtc_unlock(struct omap_rtc *rtc) in am3352_rtc_unlock() argument
168 rtc_writel(rtc, OMAP_RTC_KICK0_REG, KICK0_VALUE); in am3352_rtc_unlock()
169 rtc_writel(rtc, OMAP_RTC_KICK1_REG, KICK1_VALUE); in am3352_rtc_unlock()
172 static void am3352_rtc_lock(struct omap_rtc *rtc) in am3352_rtc_lock() argument
174 rtc_writel(rtc, OMAP_RTC_KICK0_REG, 0); in am3352_rtc_lock()
175 rtc_writel(rtc, OMAP_RTC_KICK1_REG, 0); in am3352_rtc_lock()
178 static void default_rtc_unlock(struct omap_rtc *rtc) in default_rtc_unlock() argument
182 static void default_rtc_lock(struct omap_rtc *rtc) in default_rtc_lock() argument
191 static void rtc_wait_not_busy(struct omap_rtc *rtc) in rtc_wait_not_busy() argument
198 status = rtc_read(rtc, OMAP_RTC_STATUS_REG); in rtc_wait_not_busy()
208 struct omap_rtc *rtc = dev_id; in rtc_irq() local
212 irq_data = rtc_read(rtc, OMAP_RTC_STATUS_REG); in rtc_irq()
216 rtc->type->unlock(rtc); in rtc_irq()
217 rtc_write(rtc, OMAP_RTC_STATUS_REG, OMAP_RTC_STATUS_ALARM); in rtc_irq()
218 rtc->type->lock(rtc); in rtc_irq()
226 rtc_update_irq(rtc->rtc, 1, events); in rtc_irq()
233 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_alarm_irq_enable() local
237 rtc_wait_not_busy(rtc); in omap_rtc_alarm_irq_enable()
238 reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_alarm_irq_enable()
239 if (rtc->type->has_irqwakeen) in omap_rtc_alarm_irq_enable()
240 irqwake_reg = rtc_read(rtc, OMAP_RTC_IRQWAKEEN); in omap_rtc_alarm_irq_enable()
249 rtc_wait_not_busy(rtc); in omap_rtc_alarm_irq_enable()
250 rtc->type->unlock(rtc); in omap_rtc_alarm_irq_enable()
251 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, reg); in omap_rtc_alarm_irq_enable()
252 if (rtc->type->has_irqwakeen) in omap_rtc_alarm_irq_enable()
253 rtc_write(rtc, OMAP_RTC_IRQWAKEEN, irqwake_reg); in omap_rtc_alarm_irq_enable()
254 rtc->type->lock(rtc); in omap_rtc_alarm_irq_enable()
292 static void omap_rtc_read_time_raw(struct omap_rtc *rtc, struct rtc_time *tm) in omap_rtc_read_time_raw() argument
294 tm->tm_sec = rtc_read(rtc, OMAP_RTC_SECONDS_REG); in omap_rtc_read_time_raw()
295 tm->tm_min = rtc_read(rtc, OMAP_RTC_MINUTES_REG); in omap_rtc_read_time_raw()
296 tm->tm_hour = rtc_read(rtc, OMAP_RTC_HOURS_REG); in omap_rtc_read_time_raw()
297 tm->tm_mday = rtc_read(rtc, OMAP_RTC_DAYS_REG); in omap_rtc_read_time_raw()
298 tm->tm_mon = rtc_read(rtc, OMAP_RTC_MONTHS_REG); in omap_rtc_read_time_raw()
299 tm->tm_year = rtc_read(rtc, OMAP_RTC_YEARS_REG); in omap_rtc_read_time_raw()
304 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_read_time() local
308 rtc_wait_not_busy(rtc); in omap_rtc_read_time()
309 omap_rtc_read_time_raw(rtc, tm); in omap_rtc_read_time()
319 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_set_time() local
325 rtc_wait_not_busy(rtc); in omap_rtc_set_time()
327 rtc->type->unlock(rtc); in omap_rtc_set_time()
328 rtc_write(rtc, OMAP_RTC_YEARS_REG, tm->tm_year); in omap_rtc_set_time()
329 rtc_write(rtc, OMAP_RTC_MONTHS_REG, tm->tm_mon); in omap_rtc_set_time()
330 rtc_write(rtc, OMAP_RTC_DAYS_REG, tm->tm_mday); in omap_rtc_set_time()
331 rtc_write(rtc, OMAP_RTC_HOURS_REG, tm->tm_hour); in omap_rtc_set_time()
332 rtc_write(rtc, OMAP_RTC_MINUTES_REG, tm->tm_min); in omap_rtc_set_time()
333 rtc_write(rtc, OMAP_RTC_SECONDS_REG, tm->tm_sec); in omap_rtc_set_time()
334 rtc->type->lock(rtc); in omap_rtc_set_time()
343 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_read_alarm() local
347 rtc_wait_not_busy(rtc); in omap_rtc_read_alarm()
349 alm->time.tm_sec = rtc_read(rtc, OMAP_RTC_ALARM_SECONDS_REG); in omap_rtc_read_alarm()
350 alm->time.tm_min = rtc_read(rtc, OMAP_RTC_ALARM_MINUTES_REG); in omap_rtc_read_alarm()
351 alm->time.tm_hour = rtc_read(rtc, OMAP_RTC_ALARM_HOURS_REG); in omap_rtc_read_alarm()
352 alm->time.tm_mday = rtc_read(rtc, OMAP_RTC_ALARM_DAYS_REG); in omap_rtc_read_alarm()
353 alm->time.tm_mon = rtc_read(rtc, OMAP_RTC_ALARM_MONTHS_REG); in omap_rtc_read_alarm()
354 alm->time.tm_year = rtc_read(rtc, OMAP_RTC_ALARM_YEARS_REG); in omap_rtc_read_alarm()
360 interrupts = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_read_alarm()
368 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_set_alarm() local
375 rtc_wait_not_busy(rtc); in omap_rtc_set_alarm()
377 rtc->type->unlock(rtc); in omap_rtc_set_alarm()
378 rtc_write(rtc, OMAP_RTC_ALARM_YEARS_REG, alm->time.tm_year); in omap_rtc_set_alarm()
379 rtc_write(rtc, OMAP_RTC_ALARM_MONTHS_REG, alm->time.tm_mon); in omap_rtc_set_alarm()
380 rtc_write(rtc, OMAP_RTC_ALARM_DAYS_REG, alm->time.tm_mday); in omap_rtc_set_alarm()
381 rtc_write(rtc, OMAP_RTC_ALARM_HOURS_REG, alm->time.tm_hour); in omap_rtc_set_alarm()
382 rtc_write(rtc, OMAP_RTC_ALARM_MINUTES_REG, alm->time.tm_min); in omap_rtc_set_alarm()
383 rtc_write(rtc, OMAP_RTC_ALARM_SECONDS_REG, alm->time.tm_sec); in omap_rtc_set_alarm()
385 reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_set_alarm()
386 if (rtc->type->has_irqwakeen) in omap_rtc_set_alarm()
387 irqwake_reg = rtc_read(rtc, OMAP_RTC_IRQWAKEEN); in omap_rtc_set_alarm()
396 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, reg); in omap_rtc_set_alarm()
397 if (rtc->type->has_irqwakeen) in omap_rtc_set_alarm()
398 rtc_write(rtc, OMAP_RTC_IRQWAKEEN, irqwake_reg); in omap_rtc_set_alarm()
399 rtc->type->lock(rtc); in omap_rtc_set_alarm()
424 struct omap_rtc *rtc = omap_rtc_power_off_rtc; in omap_rtc_power_off() local
429 rtc->type->unlock(rtc); in omap_rtc_power_off()
431 val = rtc_readl(rtc, OMAP_RTC_PMIC_REG); in omap_rtc_power_off()
432 rtc_writel(rtc, OMAP_RTC_PMIC_REG, val | OMAP_RTC_PMIC_POWER_EN_EN); in omap_rtc_power_off()
435 omap_rtc_read_time_raw(rtc, &tm); in omap_rtc_power_off()
441 dev_err(&rtc->rtc->dev, "power off failed\n"); in omap_rtc_power_off()
445 rtc_wait_not_busy(rtc); in omap_rtc_power_off()
447 rtc_write(rtc, OMAP_RTC_ALARM2_SECONDS_REG, tm.tm_sec); in omap_rtc_power_off()
448 rtc_write(rtc, OMAP_RTC_ALARM2_MINUTES_REG, tm.tm_min); in omap_rtc_power_off()
449 rtc_write(rtc, OMAP_RTC_ALARM2_HOURS_REG, tm.tm_hour); in omap_rtc_power_off()
450 rtc_write(rtc, OMAP_RTC_ALARM2_DAYS_REG, tm.tm_mday); in omap_rtc_power_off()
451 rtc_write(rtc, OMAP_RTC_ALARM2_MONTHS_REG, tm.tm_mon); in omap_rtc_power_off()
452 rtc_write(rtc, OMAP_RTC_ALARM2_YEARS_REG, tm.tm_year); in omap_rtc_power_off()
459 val = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_power_off()
460 rtc_writel(rtc, OMAP_RTC_INTERRUPTS_REG, in omap_rtc_power_off()
462 rtc->type->lock(rtc); in omap_rtc_power_off()
530 struct omap_rtc *rtc; in omap_rtc_probe() local
537 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); in omap_rtc_probe()
538 if (!rtc) in omap_rtc_probe()
543 rtc->type = of_id->data; in omap_rtc_probe()
544 rtc->is_pmic_controller = rtc->type->has_pmic_mode && in omap_rtc_probe()
549 rtc->type = (void *)id_entry->driver_data; in omap_rtc_probe()
552 rtc->irq_timer = platform_get_irq(pdev, 0); in omap_rtc_probe()
553 if (rtc->irq_timer <= 0) in omap_rtc_probe()
556 rtc->irq_alarm = platform_get_irq(pdev, 1); in omap_rtc_probe()
557 if (rtc->irq_alarm <= 0) in omap_rtc_probe()
560 rtc->clk = devm_clk_get(&pdev->dev, "ext-clk"); in omap_rtc_probe()
561 if (!IS_ERR(rtc->clk)) in omap_rtc_probe()
562 rtc->has_ext_clk = true; in omap_rtc_probe()
564 rtc->clk = devm_clk_get(&pdev->dev, "int-clk"); in omap_rtc_probe()
566 if (!IS_ERR(rtc->clk)) in omap_rtc_probe()
567 clk_prepare_enable(rtc->clk); in omap_rtc_probe()
570 rtc->base = devm_ioremap_resource(&pdev->dev, res); in omap_rtc_probe()
571 if (IS_ERR(rtc->base)) in omap_rtc_probe()
572 return PTR_ERR(rtc->base); in omap_rtc_probe()
574 platform_set_drvdata(pdev, rtc); in omap_rtc_probe()
580 rtc->type->unlock(rtc); in omap_rtc_probe()
587 rtc_writel(rtc, OMAP_RTC_INTERRUPTS_REG, 0); in omap_rtc_probe()
590 if (rtc->type->has_32kclk_en) { in omap_rtc_probe()
591 reg = rtc_read(rtc, OMAP_RTC_OSC_REG); in omap_rtc_probe()
592 rtc_writel(rtc, OMAP_RTC_OSC_REG, in omap_rtc_probe()
597 reg = rtc_read(rtc, OMAP_RTC_STATUS_REG); in omap_rtc_probe()
601 if (rtc->type->has_pmic_mode) in omap_rtc_probe()
604 if (rtc->type->has_power_up_reset) { in omap_rtc_probe()
611 rtc_write(rtc, OMAP_RTC_STATUS_REG, reg & mask); in omap_rtc_probe()
614 reg = rtc_read(rtc, OMAP_RTC_CTRL_REG); in omap_rtc_probe()
641 rtc_write(rtc, OMAP_RTC_CTRL_REG, new_ctrl); in omap_rtc_probe()
647 if (rtc->has_ext_clk) { in omap_rtc_probe()
648 reg = rtc_read(rtc, OMAP_RTC_OSC_REG); in omap_rtc_probe()
649 rtc_write(rtc, OMAP_RTC_OSC_REG, in omap_rtc_probe()
653 rtc->type->lock(rtc); in omap_rtc_probe()
657 rtc->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, in omap_rtc_probe()
659 if (IS_ERR(rtc->rtc)) { in omap_rtc_probe()
660 ret = PTR_ERR(rtc->rtc); in omap_rtc_probe()
665 ret = devm_request_irq(&pdev->dev, rtc->irq_timer, rtc_irq, 0, in omap_rtc_probe()
666 dev_name(&rtc->rtc->dev), rtc); in omap_rtc_probe()
670 if (rtc->irq_timer != rtc->irq_alarm) { in omap_rtc_probe()
671 ret = devm_request_irq(&pdev->dev, rtc->irq_alarm, rtc_irq, 0, in omap_rtc_probe()
672 dev_name(&rtc->rtc->dev), rtc); in omap_rtc_probe()
677 if (rtc->is_pmic_controller) { in omap_rtc_probe()
679 omap_rtc_power_off_rtc = rtc; in omap_rtc_probe()
688 rtc->type->lock(rtc); in omap_rtc_probe()
697 struct omap_rtc *rtc = platform_get_drvdata(pdev); in omap_rtc_remove() local
701 omap_rtc_power_off_rtc == rtc) { in omap_rtc_remove()
708 if (!IS_ERR(rtc->clk)) in omap_rtc_remove()
709 clk_disable_unprepare(rtc->clk); in omap_rtc_remove()
711 rtc->type->unlock(rtc); in omap_rtc_remove()
713 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, 0); in omap_rtc_remove()
715 if (rtc->has_ext_clk) { in omap_rtc_remove()
716 reg = rtc_read(rtc, OMAP_RTC_OSC_REG); in omap_rtc_remove()
718 rtc_write(rtc, OMAP_RTC_OSC_REG, reg); in omap_rtc_remove()
721 rtc->type->lock(rtc); in omap_rtc_remove()
733 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_suspend() local
735 rtc->interrupts_reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_suspend()
737 rtc->type->unlock(rtc); in omap_rtc_suspend()
744 enable_irq_wake(rtc->irq_alarm); in omap_rtc_suspend()
746 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, 0); in omap_rtc_suspend()
747 rtc->type->lock(rtc); in omap_rtc_suspend()
757 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_resume() local
762 rtc->type->unlock(rtc); in omap_rtc_resume()
764 disable_irq_wake(rtc->irq_alarm); in omap_rtc_resume()
766 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, rtc->interrupts_reg); in omap_rtc_resume()
767 rtc->type->lock(rtc); in omap_rtc_resume()
777 struct omap_rtc *rtc = platform_get_drvdata(pdev); in omap_rtc_shutdown() local
784 rtc->type->unlock(rtc); in omap_rtc_shutdown()
785 mask = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_shutdown()
787 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, mask); in omap_rtc_shutdown()
788 rtc->type->lock(rtc); in omap_rtc_shutdown()