Lines Matching refs:rtc

141 	void (*lock)(struct omap_rtc *rtc);
142 void (*unlock)(struct omap_rtc *rtc);
146 struct rtc_device *rtc; member
159 static inline u8 rtc_read(struct omap_rtc *rtc, unsigned int reg) in rtc_read() argument
161 return readb(rtc->base + reg); in rtc_read()
164 static inline u32 rtc_readl(struct omap_rtc *rtc, unsigned int reg) in rtc_readl() argument
166 return readl(rtc->base + reg); in rtc_readl()
169 static inline void rtc_write(struct omap_rtc *rtc, unsigned int reg, u8 val) in rtc_write() argument
171 writeb(val, rtc->base + reg); in rtc_write()
174 static inline void rtc_writel(struct omap_rtc *rtc, unsigned int reg, u32 val) in rtc_writel() argument
176 writel(val, rtc->base + reg); in rtc_writel()
179 static void am3352_rtc_unlock(struct omap_rtc *rtc) in am3352_rtc_unlock() argument
181 rtc_writel(rtc, OMAP_RTC_KICK0_REG, KICK0_VALUE); in am3352_rtc_unlock()
182 rtc_writel(rtc, OMAP_RTC_KICK1_REG, KICK1_VALUE); in am3352_rtc_unlock()
185 static void am3352_rtc_lock(struct omap_rtc *rtc) in am3352_rtc_lock() argument
187 rtc_writel(rtc, OMAP_RTC_KICK0_REG, 0); in am3352_rtc_lock()
188 rtc_writel(rtc, OMAP_RTC_KICK1_REG, 0); in am3352_rtc_lock()
191 static void default_rtc_unlock(struct omap_rtc *rtc) in default_rtc_unlock() argument
195 static void default_rtc_lock(struct omap_rtc *rtc) in default_rtc_lock() argument
204 static void rtc_wait_not_busy(struct omap_rtc *rtc) in rtc_wait_not_busy() argument
211 status = rtc_read(rtc, OMAP_RTC_STATUS_REG); in rtc_wait_not_busy()
221 struct omap_rtc *rtc = dev_id; in rtc_irq() local
225 irq_data = rtc_read(rtc, OMAP_RTC_STATUS_REG); in rtc_irq()
229 rtc->type->unlock(rtc); in rtc_irq()
230 rtc_write(rtc, OMAP_RTC_STATUS_REG, OMAP_RTC_STATUS_ALARM); in rtc_irq()
231 rtc->type->lock(rtc); in rtc_irq()
239 rtc_update_irq(rtc->rtc, 1, events); in rtc_irq()
246 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_alarm_irq_enable() local
250 rtc_wait_not_busy(rtc); in omap_rtc_alarm_irq_enable()
251 reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_alarm_irq_enable()
252 if (rtc->type->has_irqwakeen) in omap_rtc_alarm_irq_enable()
253 irqwake_reg = rtc_read(rtc, OMAP_RTC_IRQWAKEEN); in omap_rtc_alarm_irq_enable()
262 rtc_wait_not_busy(rtc); in omap_rtc_alarm_irq_enable()
263 rtc->type->unlock(rtc); in omap_rtc_alarm_irq_enable()
264 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, reg); in omap_rtc_alarm_irq_enable()
265 if (rtc->type->has_irqwakeen) in omap_rtc_alarm_irq_enable()
266 rtc_write(rtc, OMAP_RTC_IRQWAKEEN, irqwake_reg); in omap_rtc_alarm_irq_enable()
267 rtc->type->lock(rtc); in omap_rtc_alarm_irq_enable()
302 static void omap_rtc_read_time_raw(struct omap_rtc *rtc, struct rtc_time *tm) in omap_rtc_read_time_raw() argument
304 tm->tm_sec = rtc_read(rtc, OMAP_RTC_SECONDS_REG); in omap_rtc_read_time_raw()
305 tm->tm_min = rtc_read(rtc, OMAP_RTC_MINUTES_REG); in omap_rtc_read_time_raw()
306 tm->tm_hour = rtc_read(rtc, OMAP_RTC_HOURS_REG); in omap_rtc_read_time_raw()
307 tm->tm_mday = rtc_read(rtc, OMAP_RTC_DAYS_REG); in omap_rtc_read_time_raw()
308 tm->tm_mon = rtc_read(rtc, OMAP_RTC_MONTHS_REG); in omap_rtc_read_time_raw()
309 tm->tm_year = rtc_read(rtc, OMAP_RTC_YEARS_REG); in omap_rtc_read_time_raw()
314 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_read_time() local
318 rtc_wait_not_busy(rtc); in omap_rtc_read_time()
319 omap_rtc_read_time_raw(rtc, tm); in omap_rtc_read_time()
329 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_set_time() local
335 rtc_wait_not_busy(rtc); in omap_rtc_set_time()
337 rtc->type->unlock(rtc); in omap_rtc_set_time()
338 rtc_write(rtc, OMAP_RTC_YEARS_REG, tm->tm_year); in omap_rtc_set_time()
339 rtc_write(rtc, OMAP_RTC_MONTHS_REG, tm->tm_mon); in omap_rtc_set_time()
340 rtc_write(rtc, OMAP_RTC_DAYS_REG, tm->tm_mday); in omap_rtc_set_time()
341 rtc_write(rtc, OMAP_RTC_HOURS_REG, tm->tm_hour); in omap_rtc_set_time()
342 rtc_write(rtc, OMAP_RTC_MINUTES_REG, tm->tm_min); in omap_rtc_set_time()
343 rtc_write(rtc, OMAP_RTC_SECONDS_REG, tm->tm_sec); in omap_rtc_set_time()
344 rtc->type->lock(rtc); in omap_rtc_set_time()
353 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_read_alarm() local
357 rtc_wait_not_busy(rtc); in omap_rtc_read_alarm()
359 alm->time.tm_sec = rtc_read(rtc, OMAP_RTC_ALARM_SECONDS_REG); in omap_rtc_read_alarm()
360 alm->time.tm_min = rtc_read(rtc, OMAP_RTC_ALARM_MINUTES_REG); in omap_rtc_read_alarm()
361 alm->time.tm_hour = rtc_read(rtc, OMAP_RTC_ALARM_HOURS_REG); in omap_rtc_read_alarm()
362 alm->time.tm_mday = rtc_read(rtc, OMAP_RTC_ALARM_DAYS_REG); in omap_rtc_read_alarm()
363 alm->time.tm_mon = rtc_read(rtc, OMAP_RTC_ALARM_MONTHS_REG); in omap_rtc_read_alarm()
364 alm->time.tm_year = rtc_read(rtc, OMAP_RTC_ALARM_YEARS_REG); in omap_rtc_read_alarm()
370 interrupts = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_read_alarm()
378 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_set_alarm() local
385 rtc_wait_not_busy(rtc); in omap_rtc_set_alarm()
387 rtc->type->unlock(rtc); in omap_rtc_set_alarm()
388 rtc_write(rtc, OMAP_RTC_ALARM_YEARS_REG, alm->time.tm_year); in omap_rtc_set_alarm()
389 rtc_write(rtc, OMAP_RTC_ALARM_MONTHS_REG, alm->time.tm_mon); in omap_rtc_set_alarm()
390 rtc_write(rtc, OMAP_RTC_ALARM_DAYS_REG, alm->time.tm_mday); in omap_rtc_set_alarm()
391 rtc_write(rtc, OMAP_RTC_ALARM_HOURS_REG, alm->time.tm_hour); in omap_rtc_set_alarm()
392 rtc_write(rtc, OMAP_RTC_ALARM_MINUTES_REG, alm->time.tm_min); in omap_rtc_set_alarm()
393 rtc_write(rtc, OMAP_RTC_ALARM_SECONDS_REG, alm->time.tm_sec); in omap_rtc_set_alarm()
395 reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_set_alarm()
396 if (rtc->type->has_irqwakeen) in omap_rtc_set_alarm()
397 irqwake_reg = rtc_read(rtc, OMAP_RTC_IRQWAKEEN); in omap_rtc_set_alarm()
406 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, reg); in omap_rtc_set_alarm()
407 if (rtc->type->has_irqwakeen) in omap_rtc_set_alarm()
408 rtc_write(rtc, OMAP_RTC_IRQWAKEEN, irqwake_reg); in omap_rtc_set_alarm()
409 rtc->type->lock(rtc); in omap_rtc_set_alarm()
434 struct omap_rtc *rtc = omap_rtc_power_off_rtc; in omap_rtc_power_off() local
439 rtc->type->unlock(rtc); in omap_rtc_power_off()
441 val = rtc_readl(rtc, OMAP_RTC_PMIC_REG); in omap_rtc_power_off()
442 rtc_writel(rtc, OMAP_RTC_PMIC_REG, val | OMAP_RTC_PMIC_POWER_EN_EN); in omap_rtc_power_off()
445 omap_rtc_read_time_raw(rtc, &tm); in omap_rtc_power_off()
451 dev_err(&rtc->rtc->dev, "power off failed\n"); in omap_rtc_power_off()
452 rtc->type->lock(rtc); in omap_rtc_power_off()
456 rtc_wait_not_busy(rtc); in omap_rtc_power_off()
458 rtc_write(rtc, OMAP_RTC_ALARM2_SECONDS_REG, tm.tm_sec); in omap_rtc_power_off()
459 rtc_write(rtc, OMAP_RTC_ALARM2_MINUTES_REG, tm.tm_min); in omap_rtc_power_off()
460 rtc_write(rtc, OMAP_RTC_ALARM2_HOURS_REG, tm.tm_hour); in omap_rtc_power_off()
461 rtc_write(rtc, OMAP_RTC_ALARM2_DAYS_REG, tm.tm_mday); in omap_rtc_power_off()
462 rtc_write(rtc, OMAP_RTC_ALARM2_MONTHS_REG, tm.tm_mon); in omap_rtc_power_off()
463 rtc_write(rtc, OMAP_RTC_ALARM2_YEARS_REG, tm.tm_year); in omap_rtc_power_off()
470 val = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_power_off()
471 rtc_writel(rtc, OMAP_RTC_INTERRUPTS_REG, in omap_rtc_power_off()
473 rtc->type->lock(rtc); in omap_rtc_power_off()
581 struct omap_rtc *rtc = pinctrl_dev_get_drvdata(pctldev); in rtc_pinconf_get() local
586 val = rtc_readl(rtc, OMAP_RTC_PMIC_REG); in rtc_pinconf_get()
610 struct omap_rtc *rtc = pinctrl_dev_get_drvdata(pctldev); in rtc_pinconf_set() local
616 val = rtc_readl(rtc, OMAP_RTC_PMIC_REG); in rtc_pinconf_set()
636 dev_err(&rtc->rtc->dev, "Property %u not supported\n", in rtc_pinconf_set()
642 rtc->type->unlock(rtc); in rtc_pinconf_set()
643 rtc_writel(rtc, OMAP_RTC_PMIC_REG, val); in rtc_pinconf_set()
644 rtc->type->lock(rtc); in rtc_pinconf_set()
671 struct omap_rtc *rtc = priv; in omap_rtc_scratch_read() local
676 val[i] = rtc_readl(rtc, in omap_rtc_scratch_read()
685 struct omap_rtc *rtc = priv; in omap_rtc_scratch_write() local
689 rtc->type->unlock(rtc); in omap_rtc_scratch_write()
691 rtc_writel(rtc, in omap_rtc_scratch_write()
693 rtc->type->lock(rtc); in omap_rtc_scratch_write()
709 struct omap_rtc *rtc; in omap_rtc_probe() local
716 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); in omap_rtc_probe()
717 if (!rtc) in omap_rtc_probe()
722 rtc->type = of_id->data; in omap_rtc_probe()
723 rtc->is_pmic_controller = rtc->type->has_pmic_mode && in omap_rtc_probe()
728 rtc->type = (void *)id_entry->driver_data; in omap_rtc_probe()
731 rtc->irq_timer = platform_get_irq(pdev, 0); in omap_rtc_probe()
732 if (rtc->irq_timer <= 0) in omap_rtc_probe()
735 rtc->irq_alarm = platform_get_irq(pdev, 1); in omap_rtc_probe()
736 if (rtc->irq_alarm <= 0) in omap_rtc_probe()
739 rtc->clk = devm_clk_get(&pdev->dev, "ext-clk"); in omap_rtc_probe()
740 if (!IS_ERR(rtc->clk)) in omap_rtc_probe()
741 rtc->has_ext_clk = true; in omap_rtc_probe()
743 rtc->clk = devm_clk_get(&pdev->dev, "int-clk"); in omap_rtc_probe()
745 if (!IS_ERR(rtc->clk)) in omap_rtc_probe()
746 clk_prepare_enable(rtc->clk); in omap_rtc_probe()
749 rtc->base = devm_ioremap_resource(&pdev->dev, res); in omap_rtc_probe()
750 if (IS_ERR(rtc->base)) { in omap_rtc_probe()
751 clk_disable_unprepare(rtc->clk); in omap_rtc_probe()
752 return PTR_ERR(rtc->base); in omap_rtc_probe()
755 platform_set_drvdata(pdev, rtc); in omap_rtc_probe()
761 rtc->type->unlock(rtc); in omap_rtc_probe()
768 rtc_writel(rtc, OMAP_RTC_INTERRUPTS_REG, 0); in omap_rtc_probe()
771 if (rtc->type->has_32kclk_en) { in omap_rtc_probe()
772 reg = rtc_read(rtc, OMAP_RTC_OSC_REG); in omap_rtc_probe()
773 rtc_writel(rtc, OMAP_RTC_OSC_REG, in omap_rtc_probe()
778 reg = rtc_read(rtc, OMAP_RTC_STATUS_REG); in omap_rtc_probe()
782 if (rtc->type->has_pmic_mode) in omap_rtc_probe()
785 if (rtc->type->has_power_up_reset) { in omap_rtc_probe()
792 rtc_write(rtc, OMAP_RTC_STATUS_REG, reg & mask); in omap_rtc_probe()
795 reg = rtc_read(rtc, OMAP_RTC_CTRL_REG); in omap_rtc_probe()
822 rtc_write(rtc, OMAP_RTC_CTRL_REG, new_ctrl); in omap_rtc_probe()
828 if (rtc->has_ext_clk) { in omap_rtc_probe()
829 reg = rtc_read(rtc, OMAP_RTC_OSC_REG); in omap_rtc_probe()
832 rtc_writel(rtc, OMAP_RTC_OSC_REG, reg); in omap_rtc_probe()
835 rtc->type->lock(rtc); in omap_rtc_probe()
839 rtc->rtc = devm_rtc_allocate_device(&pdev->dev); in omap_rtc_probe()
840 if (IS_ERR(rtc->rtc)) { in omap_rtc_probe()
841 ret = PTR_ERR(rtc->rtc); in omap_rtc_probe()
845 rtc->rtc->ops = &omap_rtc_ops; in omap_rtc_probe()
846 omap_rtc_nvmem_config.priv = rtc; in omap_rtc_probe()
849 ret = devm_request_irq(&pdev->dev, rtc->irq_timer, rtc_irq, 0, in omap_rtc_probe()
850 dev_name(&rtc->rtc->dev), rtc); in omap_rtc_probe()
854 if (rtc->irq_timer != rtc->irq_alarm) { in omap_rtc_probe()
855 ret = devm_request_irq(&pdev->dev, rtc->irq_alarm, rtc_irq, 0, in omap_rtc_probe()
856 dev_name(&rtc->rtc->dev), rtc); in omap_rtc_probe()
864 rtc->pctldev = pinctrl_register(&rtc_pinctrl_desc, &pdev->dev, rtc); in omap_rtc_probe()
865 if (IS_ERR(rtc->pctldev)) { in omap_rtc_probe()
867 ret = PTR_ERR(rtc->pctldev); in omap_rtc_probe()
871 ret = rtc_register_device(rtc->rtc); in omap_rtc_probe()
875 rtc_nvmem_register(rtc->rtc, &omap_rtc_nvmem_config); in omap_rtc_probe()
877 if (rtc->is_pmic_controller) { in omap_rtc_probe()
879 omap_rtc_power_off_rtc = rtc; in omap_rtc_probe()
887 pinctrl_unregister(rtc->pctldev); in omap_rtc_probe()
889 clk_disable_unprepare(rtc->clk); in omap_rtc_probe()
891 rtc->type->lock(rtc); in omap_rtc_probe()
900 struct omap_rtc *rtc = platform_get_drvdata(pdev); in omap_rtc_remove() local
904 omap_rtc_power_off_rtc == rtc) { in omap_rtc_remove()
911 if (!IS_ERR(rtc->clk)) in omap_rtc_remove()
912 clk_disable_unprepare(rtc->clk); in omap_rtc_remove()
914 rtc->type->unlock(rtc); in omap_rtc_remove()
916 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, 0); in omap_rtc_remove()
918 if (rtc->has_ext_clk) { in omap_rtc_remove()
919 reg = rtc_read(rtc, OMAP_RTC_OSC_REG); in omap_rtc_remove()
921 rtc_write(rtc, OMAP_RTC_OSC_REG, reg); in omap_rtc_remove()
924 rtc->type->lock(rtc); in omap_rtc_remove()
931 pinctrl_unregister(rtc->pctldev); in omap_rtc_remove()
938 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_suspend() local
940 rtc->interrupts_reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_suspend()
942 rtc->type->unlock(rtc); in omap_rtc_suspend()
949 enable_irq_wake(rtc->irq_alarm); in omap_rtc_suspend()
951 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, 0); in omap_rtc_suspend()
952 rtc->type->lock(rtc); in omap_rtc_suspend()
954 rtc->is_suspending = true; in omap_rtc_suspend()
961 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_resume() local
963 rtc->type->unlock(rtc); in omap_rtc_resume()
965 disable_irq_wake(rtc->irq_alarm); in omap_rtc_resume()
967 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, rtc->interrupts_reg); in omap_rtc_resume()
968 rtc->type->lock(rtc); in omap_rtc_resume()
970 rtc->is_suspending = false; in omap_rtc_resume()
977 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_runtime_suspend() local
979 if (rtc->is_suspending && !rtc->has_ext_clk) in omap_rtc_runtime_suspend()
992 struct omap_rtc *rtc = platform_get_drvdata(pdev); in omap_rtc_shutdown() local
999 rtc->type->unlock(rtc); in omap_rtc_shutdown()
1000 mask = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_shutdown()
1002 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, mask); in omap_rtc_shutdown()
1003 rtc->type->lock(rtc); in omap_rtc_shutdown()