Lines Matching refs:rtc
128 void (*lock)(struct omap_rtc *rtc);
129 void (*unlock)(struct omap_rtc *rtc);
133 struct rtc_device *rtc; member
142 static inline u8 rtc_read(struct omap_rtc *rtc, unsigned int reg) in rtc_read() argument
144 return readb(rtc->base + reg); in rtc_read()
147 static inline u32 rtc_readl(struct omap_rtc *rtc, unsigned int reg) in rtc_readl() argument
149 return readl(rtc->base + reg); in rtc_readl()
152 static inline void rtc_write(struct omap_rtc *rtc, unsigned int reg, u8 val) in rtc_write() argument
154 writeb(val, rtc->base + reg); in rtc_write()
157 static inline void rtc_writel(struct omap_rtc *rtc, unsigned int reg, u32 val) in rtc_writel() argument
159 writel(val, rtc->base + reg); in rtc_writel()
162 static void am3352_rtc_unlock(struct omap_rtc *rtc) in am3352_rtc_unlock() argument
164 rtc_writel(rtc, OMAP_RTC_KICK0_REG, KICK0_VALUE); in am3352_rtc_unlock()
165 rtc_writel(rtc, OMAP_RTC_KICK1_REG, KICK1_VALUE); in am3352_rtc_unlock()
168 static void am3352_rtc_lock(struct omap_rtc *rtc) in am3352_rtc_lock() argument
170 rtc_writel(rtc, OMAP_RTC_KICK0_REG, 0); in am3352_rtc_lock()
171 rtc_writel(rtc, OMAP_RTC_KICK1_REG, 0); in am3352_rtc_lock()
174 static void default_rtc_unlock(struct omap_rtc *rtc) in default_rtc_unlock() argument
178 static void default_rtc_lock(struct omap_rtc *rtc) in default_rtc_lock() argument
187 static void rtc_wait_not_busy(struct omap_rtc *rtc) in rtc_wait_not_busy() argument
194 status = rtc_read(rtc, OMAP_RTC_STATUS_REG); in rtc_wait_not_busy()
204 struct omap_rtc *rtc = dev_id; in rtc_irq() local
208 irq_data = rtc_read(rtc, OMAP_RTC_STATUS_REG); in rtc_irq()
212 rtc->type->unlock(rtc); in rtc_irq()
213 rtc_write(rtc, OMAP_RTC_STATUS_REG, OMAP_RTC_STATUS_ALARM); in rtc_irq()
214 rtc->type->lock(rtc); in rtc_irq()
222 rtc_update_irq(rtc->rtc, 1, events); in rtc_irq()
229 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_alarm_irq_enable() local
233 rtc_wait_not_busy(rtc); in omap_rtc_alarm_irq_enable()
234 reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_alarm_irq_enable()
235 if (rtc->type->has_irqwakeen) in omap_rtc_alarm_irq_enable()
236 irqwake_reg = rtc_read(rtc, OMAP_RTC_IRQWAKEEN); in omap_rtc_alarm_irq_enable()
245 rtc_wait_not_busy(rtc); in omap_rtc_alarm_irq_enable()
246 rtc->type->unlock(rtc); in omap_rtc_alarm_irq_enable()
247 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, reg); in omap_rtc_alarm_irq_enable()
248 if (rtc->type->has_irqwakeen) in omap_rtc_alarm_irq_enable()
249 rtc_write(rtc, OMAP_RTC_IRQWAKEEN, irqwake_reg); in omap_rtc_alarm_irq_enable()
250 rtc->type->lock(rtc); in omap_rtc_alarm_irq_enable()
288 static void omap_rtc_read_time_raw(struct omap_rtc *rtc, struct rtc_time *tm) in omap_rtc_read_time_raw() argument
290 tm->tm_sec = rtc_read(rtc, OMAP_RTC_SECONDS_REG); in omap_rtc_read_time_raw()
291 tm->tm_min = rtc_read(rtc, OMAP_RTC_MINUTES_REG); in omap_rtc_read_time_raw()
292 tm->tm_hour = rtc_read(rtc, OMAP_RTC_HOURS_REG); in omap_rtc_read_time_raw()
293 tm->tm_mday = rtc_read(rtc, OMAP_RTC_DAYS_REG); in omap_rtc_read_time_raw()
294 tm->tm_mon = rtc_read(rtc, OMAP_RTC_MONTHS_REG); in omap_rtc_read_time_raw()
295 tm->tm_year = rtc_read(rtc, OMAP_RTC_YEARS_REG); in omap_rtc_read_time_raw()
300 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_read_time() local
304 rtc_wait_not_busy(rtc); in omap_rtc_read_time()
305 omap_rtc_read_time_raw(rtc, tm); in omap_rtc_read_time()
315 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_set_time() local
321 rtc_wait_not_busy(rtc); in omap_rtc_set_time()
323 rtc->type->unlock(rtc); in omap_rtc_set_time()
324 rtc_write(rtc, OMAP_RTC_YEARS_REG, tm->tm_year); in omap_rtc_set_time()
325 rtc_write(rtc, OMAP_RTC_MONTHS_REG, tm->tm_mon); in omap_rtc_set_time()
326 rtc_write(rtc, OMAP_RTC_DAYS_REG, tm->tm_mday); in omap_rtc_set_time()
327 rtc_write(rtc, OMAP_RTC_HOURS_REG, tm->tm_hour); in omap_rtc_set_time()
328 rtc_write(rtc, OMAP_RTC_MINUTES_REG, tm->tm_min); in omap_rtc_set_time()
329 rtc_write(rtc, OMAP_RTC_SECONDS_REG, tm->tm_sec); in omap_rtc_set_time()
330 rtc->type->lock(rtc); in omap_rtc_set_time()
339 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_read_alarm() local
343 rtc_wait_not_busy(rtc); in omap_rtc_read_alarm()
345 alm->time.tm_sec = rtc_read(rtc, OMAP_RTC_ALARM_SECONDS_REG); in omap_rtc_read_alarm()
346 alm->time.tm_min = rtc_read(rtc, OMAP_RTC_ALARM_MINUTES_REG); in omap_rtc_read_alarm()
347 alm->time.tm_hour = rtc_read(rtc, OMAP_RTC_ALARM_HOURS_REG); in omap_rtc_read_alarm()
348 alm->time.tm_mday = rtc_read(rtc, OMAP_RTC_ALARM_DAYS_REG); in omap_rtc_read_alarm()
349 alm->time.tm_mon = rtc_read(rtc, OMAP_RTC_ALARM_MONTHS_REG); in omap_rtc_read_alarm()
350 alm->time.tm_year = rtc_read(rtc, OMAP_RTC_ALARM_YEARS_REG); in omap_rtc_read_alarm()
356 interrupts = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_read_alarm()
364 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_set_alarm() local
371 rtc_wait_not_busy(rtc); in omap_rtc_set_alarm()
373 rtc->type->unlock(rtc); in omap_rtc_set_alarm()
374 rtc_write(rtc, OMAP_RTC_ALARM_YEARS_REG, alm->time.tm_year); in omap_rtc_set_alarm()
375 rtc_write(rtc, OMAP_RTC_ALARM_MONTHS_REG, alm->time.tm_mon); in omap_rtc_set_alarm()
376 rtc_write(rtc, OMAP_RTC_ALARM_DAYS_REG, alm->time.tm_mday); in omap_rtc_set_alarm()
377 rtc_write(rtc, OMAP_RTC_ALARM_HOURS_REG, alm->time.tm_hour); in omap_rtc_set_alarm()
378 rtc_write(rtc, OMAP_RTC_ALARM_MINUTES_REG, alm->time.tm_min); in omap_rtc_set_alarm()
379 rtc_write(rtc, OMAP_RTC_ALARM_SECONDS_REG, alm->time.tm_sec); in omap_rtc_set_alarm()
381 reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_set_alarm()
382 if (rtc->type->has_irqwakeen) in omap_rtc_set_alarm()
383 irqwake_reg = rtc_read(rtc, OMAP_RTC_IRQWAKEEN); in omap_rtc_set_alarm()
392 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, reg); in omap_rtc_set_alarm()
393 if (rtc->type->has_irqwakeen) in omap_rtc_set_alarm()
394 rtc_write(rtc, OMAP_RTC_IRQWAKEEN, irqwake_reg); in omap_rtc_set_alarm()
395 rtc->type->lock(rtc); in omap_rtc_set_alarm()
420 struct omap_rtc *rtc = omap_rtc_power_off_rtc; in omap_rtc_power_off() local
425 rtc->type->unlock(rtc); in omap_rtc_power_off()
427 val = rtc_readl(rtc, OMAP_RTC_PMIC_REG); in omap_rtc_power_off()
428 rtc_writel(rtc, OMAP_RTC_PMIC_REG, val | OMAP_RTC_PMIC_POWER_EN_EN); in omap_rtc_power_off()
431 omap_rtc_read_time_raw(rtc, &tm); in omap_rtc_power_off()
437 dev_err(&rtc->rtc->dev, "power off failed\n"); in omap_rtc_power_off()
441 rtc_wait_not_busy(rtc); in omap_rtc_power_off()
443 rtc_write(rtc, OMAP_RTC_ALARM2_SECONDS_REG, tm.tm_sec); in omap_rtc_power_off()
444 rtc_write(rtc, OMAP_RTC_ALARM2_MINUTES_REG, tm.tm_min); in omap_rtc_power_off()
445 rtc_write(rtc, OMAP_RTC_ALARM2_HOURS_REG, tm.tm_hour); in omap_rtc_power_off()
446 rtc_write(rtc, OMAP_RTC_ALARM2_DAYS_REG, tm.tm_mday); in omap_rtc_power_off()
447 rtc_write(rtc, OMAP_RTC_ALARM2_MONTHS_REG, tm.tm_mon); in omap_rtc_power_off()
448 rtc_write(rtc, OMAP_RTC_ALARM2_YEARS_REG, tm.tm_year); in omap_rtc_power_off()
455 val = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_power_off()
456 rtc_writel(rtc, OMAP_RTC_INTERRUPTS_REG, in omap_rtc_power_off()
458 rtc->type->lock(rtc); in omap_rtc_power_off()
526 struct omap_rtc *rtc; in omap_rtc_probe() local
533 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); in omap_rtc_probe()
534 if (!rtc) in omap_rtc_probe()
539 rtc->type = of_id->data; in omap_rtc_probe()
540 rtc->is_pmic_controller = rtc->type->has_pmic_mode && in omap_rtc_probe()
545 rtc->type = (void *)id_entry->driver_data; in omap_rtc_probe()
548 rtc->irq_timer = platform_get_irq(pdev, 0); in omap_rtc_probe()
549 if (rtc->irq_timer <= 0) in omap_rtc_probe()
552 rtc->irq_alarm = platform_get_irq(pdev, 1); in omap_rtc_probe()
553 if (rtc->irq_alarm <= 0) in omap_rtc_probe()
557 rtc->base = devm_ioremap_resource(&pdev->dev, res); in omap_rtc_probe()
558 if (IS_ERR(rtc->base)) in omap_rtc_probe()
559 return PTR_ERR(rtc->base); in omap_rtc_probe()
561 platform_set_drvdata(pdev, rtc); in omap_rtc_probe()
567 rtc->type->unlock(rtc); in omap_rtc_probe()
574 rtc_writel(rtc, OMAP_RTC_INTERRUPTS_REG, 0); in omap_rtc_probe()
577 if (rtc->type->has_32kclk_en) { in omap_rtc_probe()
578 reg = rtc_read(rtc, OMAP_RTC_OSC_REG); in omap_rtc_probe()
579 rtc_writel(rtc, OMAP_RTC_OSC_REG, in omap_rtc_probe()
584 reg = rtc_read(rtc, OMAP_RTC_STATUS_REG); in omap_rtc_probe()
588 if (rtc->type->has_pmic_mode) in omap_rtc_probe()
591 if (rtc->type->has_power_up_reset) { in omap_rtc_probe()
598 rtc_write(rtc, OMAP_RTC_STATUS_REG, reg & mask); in omap_rtc_probe()
601 reg = rtc_read(rtc, OMAP_RTC_CTRL_REG); in omap_rtc_probe()
628 rtc_write(rtc, OMAP_RTC_CTRL_REG, new_ctrl); in omap_rtc_probe()
630 rtc->type->lock(rtc); in omap_rtc_probe()
634 rtc->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, in omap_rtc_probe()
636 if (IS_ERR(rtc->rtc)) { in omap_rtc_probe()
637 ret = PTR_ERR(rtc->rtc); in omap_rtc_probe()
642 ret = devm_request_irq(&pdev->dev, rtc->irq_timer, rtc_irq, 0, in omap_rtc_probe()
643 dev_name(&rtc->rtc->dev), rtc); in omap_rtc_probe()
647 if (rtc->irq_timer != rtc->irq_alarm) { in omap_rtc_probe()
648 ret = devm_request_irq(&pdev->dev, rtc->irq_alarm, rtc_irq, 0, in omap_rtc_probe()
649 dev_name(&rtc->rtc->dev), rtc); in omap_rtc_probe()
654 if (rtc->is_pmic_controller) { in omap_rtc_probe()
656 omap_rtc_power_off_rtc = rtc; in omap_rtc_probe()
665 rtc->type->lock(rtc); in omap_rtc_probe()
674 struct omap_rtc *rtc = platform_get_drvdata(pdev); in omap_rtc_remove() local
677 omap_rtc_power_off_rtc == rtc) { in omap_rtc_remove()
684 rtc->type->unlock(rtc); in omap_rtc_remove()
686 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, 0); in omap_rtc_remove()
688 rtc->type->lock(rtc); in omap_rtc_remove()
700 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_suspend() local
702 rtc->interrupts_reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_suspend()
704 rtc->type->unlock(rtc); in omap_rtc_suspend()
711 enable_irq_wake(rtc->irq_alarm); in omap_rtc_suspend()
713 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, 0); in omap_rtc_suspend()
714 rtc->type->lock(rtc); in omap_rtc_suspend()
724 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_resume() local
729 rtc->type->unlock(rtc); in omap_rtc_resume()
731 disable_irq_wake(rtc->irq_alarm); in omap_rtc_resume()
733 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, rtc->interrupts_reg); in omap_rtc_resume()
734 rtc->type->lock(rtc); in omap_rtc_resume()
744 struct omap_rtc *rtc = platform_get_drvdata(pdev); in omap_rtc_shutdown() local
751 rtc->type->unlock(rtc); in omap_rtc_shutdown()
752 mask = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_shutdown()
754 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, mask); in omap_rtc_shutdown()
755 rtc->type->lock(rtc); in omap_rtc_shutdown()