Lines Matching refs:rtc
136 void (*lock)(struct omap_rtc *rtc);
137 void (*unlock)(struct omap_rtc *rtc);
141 struct rtc_device *rtc; member
154 static inline u8 rtc_read(struct omap_rtc *rtc, unsigned int reg) in rtc_read() argument
156 return readb(rtc->base + reg); in rtc_read()
159 static inline u32 rtc_readl(struct omap_rtc *rtc, unsigned int reg) in rtc_readl() argument
161 return readl(rtc->base + reg); in rtc_readl()
164 static inline void rtc_write(struct omap_rtc *rtc, unsigned int reg, u8 val) in rtc_write() argument
166 writeb(val, rtc->base + reg); in rtc_write()
169 static inline void rtc_writel(struct omap_rtc *rtc, unsigned int reg, u32 val) in rtc_writel() argument
171 writel(val, rtc->base + reg); in rtc_writel()
174 static void am3352_rtc_unlock(struct omap_rtc *rtc) in am3352_rtc_unlock() argument
176 rtc_writel(rtc, OMAP_RTC_KICK0_REG, KICK0_VALUE); in am3352_rtc_unlock()
177 rtc_writel(rtc, OMAP_RTC_KICK1_REG, KICK1_VALUE); in am3352_rtc_unlock()
180 static void am3352_rtc_lock(struct omap_rtc *rtc) in am3352_rtc_lock() argument
182 rtc_writel(rtc, OMAP_RTC_KICK0_REG, 0); in am3352_rtc_lock()
183 rtc_writel(rtc, OMAP_RTC_KICK1_REG, 0); in am3352_rtc_lock()
186 static void default_rtc_unlock(struct omap_rtc *rtc) in default_rtc_unlock() argument
190 static void default_rtc_lock(struct omap_rtc *rtc) in default_rtc_lock() argument
199 static void rtc_wait_not_busy(struct omap_rtc *rtc) in rtc_wait_not_busy() argument
206 status = rtc_read(rtc, OMAP_RTC_STATUS_REG); in rtc_wait_not_busy()
216 struct omap_rtc *rtc = dev_id; in rtc_irq() local
220 irq_data = rtc_read(rtc, OMAP_RTC_STATUS_REG); in rtc_irq()
224 rtc->type->unlock(rtc); in rtc_irq()
225 rtc_write(rtc, OMAP_RTC_STATUS_REG, OMAP_RTC_STATUS_ALARM); in rtc_irq()
226 rtc->type->lock(rtc); in rtc_irq()
234 rtc_update_irq(rtc->rtc, 1, events); in rtc_irq()
241 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_alarm_irq_enable() local
245 rtc_wait_not_busy(rtc); in omap_rtc_alarm_irq_enable()
246 reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_alarm_irq_enable()
247 if (rtc->type->has_irqwakeen) in omap_rtc_alarm_irq_enable()
248 irqwake_reg = rtc_read(rtc, OMAP_RTC_IRQWAKEEN); in omap_rtc_alarm_irq_enable()
257 rtc_wait_not_busy(rtc); in omap_rtc_alarm_irq_enable()
258 rtc->type->unlock(rtc); in omap_rtc_alarm_irq_enable()
259 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, reg); in omap_rtc_alarm_irq_enable()
260 if (rtc->type->has_irqwakeen) in omap_rtc_alarm_irq_enable()
261 rtc_write(rtc, OMAP_RTC_IRQWAKEEN, irqwake_reg); in omap_rtc_alarm_irq_enable()
262 rtc->type->lock(rtc); in omap_rtc_alarm_irq_enable()
291 static void omap_rtc_read_time_raw(struct omap_rtc *rtc, struct rtc_time *tm) in omap_rtc_read_time_raw() argument
293 tm->tm_sec = rtc_read(rtc, OMAP_RTC_SECONDS_REG); in omap_rtc_read_time_raw()
294 tm->tm_min = rtc_read(rtc, OMAP_RTC_MINUTES_REG); in omap_rtc_read_time_raw()
295 tm->tm_hour = rtc_read(rtc, OMAP_RTC_HOURS_REG); in omap_rtc_read_time_raw()
296 tm->tm_mday = rtc_read(rtc, OMAP_RTC_DAYS_REG); in omap_rtc_read_time_raw()
297 tm->tm_mon = rtc_read(rtc, OMAP_RTC_MONTHS_REG); in omap_rtc_read_time_raw()
298 tm->tm_year = rtc_read(rtc, OMAP_RTC_YEARS_REG); in omap_rtc_read_time_raw()
303 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_read_time() local
307 rtc_wait_not_busy(rtc); in omap_rtc_read_time()
308 omap_rtc_read_time_raw(rtc, tm); in omap_rtc_read_time()
318 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_set_time() local
323 rtc_wait_not_busy(rtc); in omap_rtc_set_time()
325 rtc->type->unlock(rtc); in omap_rtc_set_time()
326 rtc_write(rtc, OMAP_RTC_YEARS_REG, tm->tm_year); in omap_rtc_set_time()
327 rtc_write(rtc, OMAP_RTC_MONTHS_REG, tm->tm_mon); in omap_rtc_set_time()
328 rtc_write(rtc, OMAP_RTC_DAYS_REG, tm->tm_mday); in omap_rtc_set_time()
329 rtc_write(rtc, OMAP_RTC_HOURS_REG, tm->tm_hour); in omap_rtc_set_time()
330 rtc_write(rtc, OMAP_RTC_MINUTES_REG, tm->tm_min); in omap_rtc_set_time()
331 rtc_write(rtc, OMAP_RTC_SECONDS_REG, tm->tm_sec); in omap_rtc_set_time()
332 rtc->type->lock(rtc); in omap_rtc_set_time()
341 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_read_alarm() local
345 rtc_wait_not_busy(rtc); in omap_rtc_read_alarm()
347 alm->time.tm_sec = rtc_read(rtc, OMAP_RTC_ALARM_SECONDS_REG); in omap_rtc_read_alarm()
348 alm->time.tm_min = rtc_read(rtc, OMAP_RTC_ALARM_MINUTES_REG); in omap_rtc_read_alarm()
349 alm->time.tm_hour = rtc_read(rtc, OMAP_RTC_ALARM_HOURS_REG); in omap_rtc_read_alarm()
350 alm->time.tm_mday = rtc_read(rtc, OMAP_RTC_ALARM_DAYS_REG); in omap_rtc_read_alarm()
351 alm->time.tm_mon = rtc_read(rtc, OMAP_RTC_ALARM_MONTHS_REG); in omap_rtc_read_alarm()
352 alm->time.tm_year = rtc_read(rtc, OMAP_RTC_ALARM_YEARS_REG); in omap_rtc_read_alarm()
358 interrupts = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_read_alarm()
366 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_set_alarm() local
372 rtc_wait_not_busy(rtc); in omap_rtc_set_alarm()
374 rtc->type->unlock(rtc); in omap_rtc_set_alarm()
375 rtc_write(rtc, OMAP_RTC_ALARM_YEARS_REG, alm->time.tm_year); in omap_rtc_set_alarm()
376 rtc_write(rtc, OMAP_RTC_ALARM_MONTHS_REG, alm->time.tm_mon); in omap_rtc_set_alarm()
377 rtc_write(rtc, OMAP_RTC_ALARM_DAYS_REG, alm->time.tm_mday); in omap_rtc_set_alarm()
378 rtc_write(rtc, OMAP_RTC_ALARM_HOURS_REG, alm->time.tm_hour); in omap_rtc_set_alarm()
379 rtc_write(rtc, OMAP_RTC_ALARM_MINUTES_REG, alm->time.tm_min); in omap_rtc_set_alarm()
380 rtc_write(rtc, OMAP_RTC_ALARM_SECONDS_REG, alm->time.tm_sec); in omap_rtc_set_alarm()
382 reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_set_alarm()
383 if (rtc->type->has_irqwakeen) in omap_rtc_set_alarm()
384 irqwake_reg = rtc_read(rtc, OMAP_RTC_IRQWAKEEN); in omap_rtc_set_alarm()
393 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, reg); in omap_rtc_set_alarm()
394 if (rtc->type->has_irqwakeen) in omap_rtc_set_alarm()
395 rtc_write(rtc, OMAP_RTC_IRQWAKEEN, irqwake_reg); in omap_rtc_set_alarm()
396 rtc->type->lock(rtc); in omap_rtc_set_alarm()
412 struct omap_rtc *rtc = omap_rtc_power_off_rtc; in omap_rtc_power_off_program() local
418 rtc->type->unlock(rtc); in omap_rtc_power_off_program()
420 val = rtc_readl(rtc, OMAP_RTC_PMIC_REG); in omap_rtc_power_off_program()
421 rtc_writel(rtc, OMAP_RTC_PMIC_REG, val | OMAP_RTC_PMIC_POWER_EN_EN); in omap_rtc_power_off_program()
425 rtc_writel(rtc, OMAP_RTC_STATUS_REG, OMAP_RTC_STATUS_ALARM2); in omap_rtc_power_off_program()
428 omap_rtc_read_time_raw(rtc, &tm); in omap_rtc_power_off_program()
436 rtc_wait_not_busy(rtc); in omap_rtc_power_off_program()
438 rtc_write(rtc, OMAP_RTC_ALARM2_SECONDS_REG, tm.tm_sec); in omap_rtc_power_off_program()
439 rtc_write(rtc, OMAP_RTC_ALARM2_MINUTES_REG, tm.tm_min); in omap_rtc_power_off_program()
440 rtc_write(rtc, OMAP_RTC_ALARM2_HOURS_REG, tm.tm_hour); in omap_rtc_power_off_program()
441 rtc_write(rtc, OMAP_RTC_ALARM2_DAYS_REG, tm.tm_mday); in omap_rtc_power_off_program()
442 rtc_write(rtc, OMAP_RTC_ALARM2_MONTHS_REG, tm.tm_mon); in omap_rtc_power_off_program()
443 rtc_write(rtc, OMAP_RTC_ALARM2_YEARS_REG, tm.tm_year); in omap_rtc_power_off_program()
450 val = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_power_off_program()
451 rtc_writel(rtc, OMAP_RTC_INTERRUPTS_REG, in omap_rtc_power_off_program()
455 if (rtc_read(rtc, OMAP_RTC_SECONDS_REG) != seconds) { in omap_rtc_power_off_program()
456 val = rtc_read(rtc, OMAP_RTC_STATUS_REG); in omap_rtc_power_off_program()
461 rtc->type->lock(rtc); in omap_rtc_power_off_program()
483 struct rtc_device *rtc = omap_rtc_power_off_rtc->rtc; in omap_rtc_power_off() local
486 omap_rtc_power_off_program(rtc->dev.parent); in omap_rtc_power_off()
600 struct omap_rtc *rtc = pinctrl_dev_get_drvdata(pctldev); in rtc_pinconf_get() local
605 val = rtc_readl(rtc, OMAP_RTC_PMIC_REG); in rtc_pinconf_get()
629 struct omap_rtc *rtc = pinctrl_dev_get_drvdata(pctldev); in rtc_pinconf_set() local
635 val = rtc_readl(rtc, OMAP_RTC_PMIC_REG); in rtc_pinconf_set()
655 dev_err(&rtc->rtc->dev, "Property %u not supported\n", in rtc_pinconf_set()
661 rtc->type->unlock(rtc); in rtc_pinconf_set()
662 rtc_writel(rtc, OMAP_RTC_PMIC_REG, val); in rtc_pinconf_set()
663 rtc->type->lock(rtc); in rtc_pinconf_set()
690 struct omap_rtc *rtc = priv; in omap_rtc_scratch_read() local
695 val[i] = rtc_readl(rtc, in omap_rtc_scratch_read()
704 struct omap_rtc *rtc = priv; in omap_rtc_scratch_write() local
708 rtc->type->unlock(rtc); in omap_rtc_scratch_write()
710 rtc_writel(rtc, in omap_rtc_scratch_write()
712 rtc->type->lock(rtc); in omap_rtc_scratch_write()
728 struct omap_rtc *rtc; in omap_rtc_probe() local
734 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); in omap_rtc_probe()
735 if (!rtc) in omap_rtc_probe()
740 rtc->type = of_id->data; in omap_rtc_probe()
741 rtc->is_pmic_controller = rtc->type->has_pmic_mode && in omap_rtc_probe()
745 rtc->type = (void *)id_entry->driver_data; in omap_rtc_probe()
748 rtc->irq_timer = platform_get_irq(pdev, 0); in omap_rtc_probe()
749 if (rtc->irq_timer <= 0) in omap_rtc_probe()
752 rtc->irq_alarm = platform_get_irq(pdev, 1); in omap_rtc_probe()
753 if (rtc->irq_alarm <= 0) in omap_rtc_probe()
756 rtc->clk = devm_clk_get(&pdev->dev, "ext-clk"); in omap_rtc_probe()
757 if (!IS_ERR(rtc->clk)) in omap_rtc_probe()
758 rtc->has_ext_clk = true; in omap_rtc_probe()
760 rtc->clk = devm_clk_get(&pdev->dev, "int-clk"); in omap_rtc_probe()
762 if (!IS_ERR(rtc->clk)) in omap_rtc_probe()
763 clk_prepare_enable(rtc->clk); in omap_rtc_probe()
765 rtc->base = devm_platform_ioremap_resource(pdev, 0); in omap_rtc_probe()
766 if (IS_ERR(rtc->base)) { in omap_rtc_probe()
767 clk_disable_unprepare(rtc->clk); in omap_rtc_probe()
768 return PTR_ERR(rtc->base); in omap_rtc_probe()
771 platform_set_drvdata(pdev, rtc); in omap_rtc_probe()
777 rtc->type->unlock(rtc); in omap_rtc_probe()
784 rtc_writel(rtc, OMAP_RTC_INTERRUPTS_REG, 0); in omap_rtc_probe()
787 if (rtc->type->has_32kclk_en) { in omap_rtc_probe()
788 reg = rtc_read(rtc, OMAP_RTC_OSC_REG); in omap_rtc_probe()
789 rtc_write(rtc, OMAP_RTC_OSC_REG, reg | OMAP_RTC_OSC_32KCLK_EN); in omap_rtc_probe()
793 reg = rtc_read(rtc, OMAP_RTC_STATUS_REG); in omap_rtc_probe()
797 if (rtc->type->has_pmic_mode) in omap_rtc_probe()
800 if (rtc->type->has_power_up_reset) { in omap_rtc_probe()
807 rtc_write(rtc, OMAP_RTC_STATUS_REG, reg & mask); in omap_rtc_probe()
810 reg = rtc_read(rtc, OMAP_RTC_CTRL_REG); in omap_rtc_probe()
837 rtc_write(rtc, OMAP_RTC_CTRL_REG, new_ctrl); in omap_rtc_probe()
843 if (rtc->has_ext_clk) { in omap_rtc_probe()
844 reg = rtc_read(rtc, OMAP_RTC_OSC_REG); in omap_rtc_probe()
847 rtc_write(rtc, OMAP_RTC_OSC_REG, reg); in omap_rtc_probe()
850 rtc->type->lock(rtc); in omap_rtc_probe()
854 rtc->rtc = devm_rtc_allocate_device(&pdev->dev); in omap_rtc_probe()
855 if (IS_ERR(rtc->rtc)) { in omap_rtc_probe()
856 ret = PTR_ERR(rtc->rtc); in omap_rtc_probe()
860 rtc->rtc->ops = &omap_rtc_ops; in omap_rtc_probe()
861 rtc->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; in omap_rtc_probe()
862 rtc->rtc->range_max = RTC_TIMESTAMP_END_2099; in omap_rtc_probe()
863 omap_rtc_nvmem_config.priv = rtc; in omap_rtc_probe()
866 ret = devm_request_irq(&pdev->dev, rtc->irq_timer, rtc_irq, 0, in omap_rtc_probe()
867 dev_name(&rtc->rtc->dev), rtc); in omap_rtc_probe()
871 if (rtc->irq_timer != rtc->irq_alarm) { in omap_rtc_probe()
872 ret = devm_request_irq(&pdev->dev, rtc->irq_alarm, rtc_irq, 0, in omap_rtc_probe()
873 dev_name(&rtc->rtc->dev), rtc); in omap_rtc_probe()
881 rtc->pctldev = devm_pinctrl_register(&pdev->dev, &rtc_pinctrl_desc, rtc); in omap_rtc_probe()
882 if (IS_ERR(rtc->pctldev)) { in omap_rtc_probe()
884 ret = PTR_ERR(rtc->pctldev); in omap_rtc_probe()
888 ret = devm_rtc_register_device(rtc->rtc); in omap_rtc_probe()
892 devm_rtc_nvmem_register(rtc->rtc, &omap_rtc_nvmem_config); in omap_rtc_probe()
894 if (rtc->is_pmic_controller) { in omap_rtc_probe()
896 omap_rtc_power_off_rtc = rtc; in omap_rtc_probe()
904 clk_disable_unprepare(rtc->clk); in omap_rtc_probe()
906 rtc->type->lock(rtc); in omap_rtc_probe()
915 struct omap_rtc *rtc = platform_get_drvdata(pdev); in omap_rtc_remove() local
919 omap_rtc_power_off_rtc == rtc) { in omap_rtc_remove()
926 if (!IS_ERR(rtc->clk)) in omap_rtc_remove()
927 clk_disable_unprepare(rtc->clk); in omap_rtc_remove()
929 rtc->type->unlock(rtc); in omap_rtc_remove()
931 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, 0); in omap_rtc_remove()
933 if (rtc->has_ext_clk) { in omap_rtc_remove()
934 reg = rtc_read(rtc, OMAP_RTC_OSC_REG); in omap_rtc_remove()
936 rtc_write(rtc, OMAP_RTC_OSC_REG, reg); in omap_rtc_remove()
939 rtc->type->lock(rtc); in omap_rtc_remove()
950 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_suspend() local
952 rtc->interrupts_reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_suspend()
954 rtc->type->unlock(rtc); in omap_rtc_suspend()
961 enable_irq_wake(rtc->irq_alarm); in omap_rtc_suspend()
963 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, 0); in omap_rtc_suspend()
964 rtc->type->lock(rtc); in omap_rtc_suspend()
966 rtc->is_suspending = true; in omap_rtc_suspend()
973 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_resume() local
975 rtc->type->unlock(rtc); in omap_rtc_resume()
977 disable_irq_wake(rtc->irq_alarm); in omap_rtc_resume()
979 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, rtc->interrupts_reg); in omap_rtc_resume()
980 rtc->type->lock(rtc); in omap_rtc_resume()
982 rtc->is_suspending = false; in omap_rtc_resume()
989 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_runtime_suspend() local
991 if (rtc->is_suspending && !rtc->has_ext_clk) in omap_rtc_runtime_suspend()
1004 struct omap_rtc *rtc = platform_get_drvdata(pdev); in omap_rtc_shutdown() local
1011 rtc->type->unlock(rtc); in omap_rtc_shutdown()
1012 mask = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_shutdown()
1014 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, mask); in omap_rtc_shutdown()
1015 rtc->type->lock(rtc); in omap_rtc_shutdown()