Lines Matching refs:rtc

137 	void (*lock)(struct omap_rtc *rtc);
138 void (*unlock)(struct omap_rtc *rtc);
142 struct rtc_device *rtc; member
155 static inline u8 rtc_read(struct omap_rtc *rtc, unsigned int reg) in rtc_read() argument
157 return readb(rtc->base + reg); in rtc_read()
160 static inline u32 rtc_readl(struct omap_rtc *rtc, unsigned int reg) in rtc_readl() argument
162 return readl(rtc->base + reg); in rtc_readl()
165 static inline void rtc_write(struct omap_rtc *rtc, unsigned int reg, u8 val) in rtc_write() argument
167 writeb(val, rtc->base + reg); in rtc_write()
170 static inline void rtc_writel(struct omap_rtc *rtc, unsigned int reg, u32 val) in rtc_writel() argument
172 writel(val, rtc->base + reg); in rtc_writel()
175 static void am3352_rtc_unlock(struct omap_rtc *rtc) in am3352_rtc_unlock() argument
177 rtc_writel(rtc, OMAP_RTC_KICK0_REG, KICK0_VALUE); in am3352_rtc_unlock()
178 rtc_writel(rtc, OMAP_RTC_KICK1_REG, KICK1_VALUE); in am3352_rtc_unlock()
181 static void am3352_rtc_lock(struct omap_rtc *rtc) in am3352_rtc_lock() argument
183 rtc_writel(rtc, OMAP_RTC_KICK0_REG, 0); in am3352_rtc_lock()
184 rtc_writel(rtc, OMAP_RTC_KICK1_REG, 0); in am3352_rtc_lock()
187 static void default_rtc_unlock(struct omap_rtc *rtc) in default_rtc_unlock() argument
191 static void default_rtc_lock(struct omap_rtc *rtc) in default_rtc_lock() argument
200 static void rtc_wait_not_busy(struct omap_rtc *rtc) in rtc_wait_not_busy() argument
207 status = rtc_read(rtc, OMAP_RTC_STATUS_REG); in rtc_wait_not_busy()
217 struct omap_rtc *rtc = dev_id; in rtc_irq() local
221 irq_data = rtc_read(rtc, OMAP_RTC_STATUS_REG); in rtc_irq()
225 rtc->type->unlock(rtc); in rtc_irq()
226 rtc_write(rtc, OMAP_RTC_STATUS_REG, OMAP_RTC_STATUS_ALARM); in rtc_irq()
227 rtc->type->lock(rtc); in rtc_irq()
235 rtc_update_irq(rtc->rtc, 1, events); in rtc_irq()
242 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_alarm_irq_enable() local
246 rtc_wait_not_busy(rtc); in omap_rtc_alarm_irq_enable()
247 reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_alarm_irq_enable()
248 if (rtc->type->has_irqwakeen) in omap_rtc_alarm_irq_enable()
249 irqwake_reg = rtc_read(rtc, OMAP_RTC_IRQWAKEEN); in omap_rtc_alarm_irq_enable()
258 rtc_wait_not_busy(rtc); in omap_rtc_alarm_irq_enable()
259 rtc->type->unlock(rtc); in omap_rtc_alarm_irq_enable()
260 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, reg); in omap_rtc_alarm_irq_enable()
261 if (rtc->type->has_irqwakeen) in omap_rtc_alarm_irq_enable()
262 rtc_write(rtc, OMAP_RTC_IRQWAKEEN, irqwake_reg); in omap_rtc_alarm_irq_enable()
263 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
324 rtc_wait_not_busy(rtc); in omap_rtc_set_time()
326 rtc->type->unlock(rtc); in omap_rtc_set_time()
327 rtc_write(rtc, OMAP_RTC_YEARS_REG, tm->tm_year); in omap_rtc_set_time()
328 rtc_write(rtc, OMAP_RTC_MONTHS_REG, tm->tm_mon); in omap_rtc_set_time()
329 rtc_write(rtc, OMAP_RTC_DAYS_REG, tm->tm_mday); in omap_rtc_set_time()
330 rtc_write(rtc, OMAP_RTC_HOURS_REG, tm->tm_hour); in omap_rtc_set_time()
331 rtc_write(rtc, OMAP_RTC_MINUTES_REG, tm->tm_min); in omap_rtc_set_time()
332 rtc_write(rtc, OMAP_RTC_SECONDS_REG, tm->tm_sec); in omap_rtc_set_time()
333 rtc->type->lock(rtc); in omap_rtc_set_time()
342 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_read_alarm() local
346 rtc_wait_not_busy(rtc); in omap_rtc_read_alarm()
348 alm->time.tm_sec = rtc_read(rtc, OMAP_RTC_ALARM_SECONDS_REG); in omap_rtc_read_alarm()
349 alm->time.tm_min = rtc_read(rtc, OMAP_RTC_ALARM_MINUTES_REG); in omap_rtc_read_alarm()
350 alm->time.tm_hour = rtc_read(rtc, OMAP_RTC_ALARM_HOURS_REG); in omap_rtc_read_alarm()
351 alm->time.tm_mday = rtc_read(rtc, OMAP_RTC_ALARM_DAYS_REG); in omap_rtc_read_alarm()
352 alm->time.tm_mon = rtc_read(rtc, OMAP_RTC_ALARM_MONTHS_REG); in omap_rtc_read_alarm()
353 alm->time.tm_year = rtc_read(rtc, OMAP_RTC_ALARM_YEARS_REG); in omap_rtc_read_alarm()
359 interrupts = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_read_alarm()
367 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_set_alarm() local
373 rtc_wait_not_busy(rtc); in omap_rtc_set_alarm()
375 rtc->type->unlock(rtc); in omap_rtc_set_alarm()
376 rtc_write(rtc, OMAP_RTC_ALARM_YEARS_REG, alm->time.tm_year); in omap_rtc_set_alarm()
377 rtc_write(rtc, OMAP_RTC_ALARM_MONTHS_REG, alm->time.tm_mon); in omap_rtc_set_alarm()
378 rtc_write(rtc, OMAP_RTC_ALARM_DAYS_REG, alm->time.tm_mday); in omap_rtc_set_alarm()
379 rtc_write(rtc, OMAP_RTC_ALARM_HOURS_REG, alm->time.tm_hour); in omap_rtc_set_alarm()
380 rtc_write(rtc, OMAP_RTC_ALARM_MINUTES_REG, alm->time.tm_min); in omap_rtc_set_alarm()
381 rtc_write(rtc, OMAP_RTC_ALARM_SECONDS_REG, alm->time.tm_sec); in omap_rtc_set_alarm()
383 reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_set_alarm()
384 if (rtc->type->has_irqwakeen) in omap_rtc_set_alarm()
385 irqwake_reg = rtc_read(rtc, OMAP_RTC_IRQWAKEEN); in omap_rtc_set_alarm()
394 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, reg); in omap_rtc_set_alarm()
395 if (rtc->type->has_irqwakeen) in omap_rtc_set_alarm()
396 rtc_write(rtc, OMAP_RTC_IRQWAKEEN, irqwake_reg); in omap_rtc_set_alarm()
397 rtc->type->lock(rtc); in omap_rtc_set_alarm()
413 struct omap_rtc *rtc = omap_rtc_power_off_rtc; in omap_rtc_power_off_program() local
419 rtc->type->unlock(rtc); in omap_rtc_power_off_program()
421 val = rtc_readl(rtc, OMAP_RTC_PMIC_REG); in omap_rtc_power_off_program()
422 rtc_writel(rtc, OMAP_RTC_PMIC_REG, val | OMAP_RTC_PMIC_POWER_EN_EN); in omap_rtc_power_off_program()
426 rtc_writel(rtc, OMAP_RTC_STATUS_REG, OMAP_RTC_STATUS_ALARM2); in omap_rtc_power_off_program()
429 omap_rtc_read_time_raw(rtc, &tm); in omap_rtc_power_off_program()
437 rtc_wait_not_busy(rtc); in omap_rtc_power_off_program()
439 rtc_write(rtc, OMAP_RTC_ALARM2_SECONDS_REG, tm.tm_sec); in omap_rtc_power_off_program()
440 rtc_write(rtc, OMAP_RTC_ALARM2_MINUTES_REG, tm.tm_min); in omap_rtc_power_off_program()
441 rtc_write(rtc, OMAP_RTC_ALARM2_HOURS_REG, tm.tm_hour); in omap_rtc_power_off_program()
442 rtc_write(rtc, OMAP_RTC_ALARM2_DAYS_REG, tm.tm_mday); in omap_rtc_power_off_program()
443 rtc_write(rtc, OMAP_RTC_ALARM2_MONTHS_REG, tm.tm_mon); in omap_rtc_power_off_program()
444 rtc_write(rtc, OMAP_RTC_ALARM2_YEARS_REG, tm.tm_year); in omap_rtc_power_off_program()
451 val = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_power_off_program()
452 rtc_writel(rtc, OMAP_RTC_INTERRUPTS_REG, in omap_rtc_power_off_program()
456 if (rtc_read(rtc, OMAP_RTC_SECONDS_REG) != seconds) { in omap_rtc_power_off_program()
457 val = rtc_read(rtc, OMAP_RTC_STATUS_REG); in omap_rtc_power_off_program()
462 rtc->type->lock(rtc); in omap_rtc_power_off_program()
484 struct rtc_device *rtc = omap_rtc_power_off_rtc->rtc; in omap_rtc_power_off() local
487 omap_rtc_power_off_program(rtc->dev.parent); in omap_rtc_power_off()
601 struct omap_rtc *rtc = pinctrl_dev_get_drvdata(pctldev); in rtc_pinconf_get() local
606 val = rtc_readl(rtc, OMAP_RTC_PMIC_REG); in rtc_pinconf_get()
630 struct omap_rtc *rtc = pinctrl_dev_get_drvdata(pctldev); in rtc_pinconf_set() local
636 val = rtc_readl(rtc, OMAP_RTC_PMIC_REG); in rtc_pinconf_set()
656 dev_err(&rtc->rtc->dev, "Property %u not supported\n", in rtc_pinconf_set()
662 rtc->type->unlock(rtc); in rtc_pinconf_set()
663 rtc_writel(rtc, OMAP_RTC_PMIC_REG, val); in rtc_pinconf_set()
664 rtc->type->lock(rtc); in rtc_pinconf_set()
691 struct omap_rtc *rtc = priv; in omap_rtc_scratch_read() local
696 val[i] = rtc_readl(rtc, in omap_rtc_scratch_read()
705 struct omap_rtc *rtc = priv; in omap_rtc_scratch_write() local
709 rtc->type->unlock(rtc); in omap_rtc_scratch_write()
711 rtc_writel(rtc, in omap_rtc_scratch_write()
713 rtc->type->lock(rtc); in omap_rtc_scratch_write()
729 struct omap_rtc *rtc; in omap_rtc_probe() local
736 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); in omap_rtc_probe()
737 if (!rtc) in omap_rtc_probe()
742 rtc->type = of_id->data; in omap_rtc_probe()
743 rtc->is_pmic_controller = rtc->type->has_pmic_mode && in omap_rtc_probe()
747 rtc->type = (void *)id_entry->driver_data; in omap_rtc_probe()
750 rtc->irq_timer = platform_get_irq(pdev, 0); in omap_rtc_probe()
751 if (rtc->irq_timer <= 0) in omap_rtc_probe()
754 rtc->irq_alarm = platform_get_irq(pdev, 1); in omap_rtc_probe()
755 if (rtc->irq_alarm <= 0) in omap_rtc_probe()
758 rtc->clk = devm_clk_get(&pdev->dev, "ext-clk"); in omap_rtc_probe()
759 if (!IS_ERR(rtc->clk)) in omap_rtc_probe()
760 rtc->has_ext_clk = true; in omap_rtc_probe()
762 rtc->clk = devm_clk_get(&pdev->dev, "int-clk"); in omap_rtc_probe()
764 if (!IS_ERR(rtc->clk)) in omap_rtc_probe()
765 clk_prepare_enable(rtc->clk); in omap_rtc_probe()
768 rtc->base = devm_ioremap_resource(&pdev->dev, res); in omap_rtc_probe()
769 if (IS_ERR(rtc->base)) { in omap_rtc_probe()
770 clk_disable_unprepare(rtc->clk); in omap_rtc_probe()
771 return PTR_ERR(rtc->base); in omap_rtc_probe()
774 platform_set_drvdata(pdev, rtc); in omap_rtc_probe()
780 rtc->type->unlock(rtc); in omap_rtc_probe()
787 rtc_writel(rtc, OMAP_RTC_INTERRUPTS_REG, 0); in omap_rtc_probe()
790 if (rtc->type->has_32kclk_en) { in omap_rtc_probe()
791 reg = rtc_read(rtc, OMAP_RTC_OSC_REG); in omap_rtc_probe()
792 rtc_writel(rtc, OMAP_RTC_OSC_REG, in omap_rtc_probe()
797 reg = rtc_read(rtc, OMAP_RTC_STATUS_REG); in omap_rtc_probe()
801 if (rtc->type->has_pmic_mode) in omap_rtc_probe()
804 if (rtc->type->has_power_up_reset) { in omap_rtc_probe()
811 rtc_write(rtc, OMAP_RTC_STATUS_REG, reg & mask); in omap_rtc_probe()
814 reg = rtc_read(rtc, OMAP_RTC_CTRL_REG); in omap_rtc_probe()
841 rtc_write(rtc, OMAP_RTC_CTRL_REG, new_ctrl); in omap_rtc_probe()
847 if (rtc->has_ext_clk) { in omap_rtc_probe()
848 reg = rtc_read(rtc, OMAP_RTC_OSC_REG); in omap_rtc_probe()
851 rtc_writel(rtc, OMAP_RTC_OSC_REG, reg); in omap_rtc_probe()
854 rtc->type->lock(rtc); in omap_rtc_probe()
858 rtc->rtc = devm_rtc_allocate_device(&pdev->dev); in omap_rtc_probe()
859 if (IS_ERR(rtc->rtc)) { in omap_rtc_probe()
860 ret = PTR_ERR(rtc->rtc); in omap_rtc_probe()
864 rtc->rtc->ops = &omap_rtc_ops; in omap_rtc_probe()
865 rtc->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; in omap_rtc_probe()
866 rtc->rtc->range_max = RTC_TIMESTAMP_END_2099; in omap_rtc_probe()
867 omap_rtc_nvmem_config.priv = rtc; in omap_rtc_probe()
870 ret = devm_request_irq(&pdev->dev, rtc->irq_timer, rtc_irq, 0, in omap_rtc_probe()
871 dev_name(&rtc->rtc->dev), rtc); in omap_rtc_probe()
875 if (rtc->irq_timer != rtc->irq_alarm) { in omap_rtc_probe()
876 ret = devm_request_irq(&pdev->dev, rtc->irq_alarm, rtc_irq, 0, in omap_rtc_probe()
877 dev_name(&rtc->rtc->dev), rtc); in omap_rtc_probe()
885 rtc->pctldev = pinctrl_register(&rtc_pinctrl_desc, &pdev->dev, rtc); in omap_rtc_probe()
886 if (IS_ERR(rtc->pctldev)) { in omap_rtc_probe()
888 ret = PTR_ERR(rtc->pctldev); in omap_rtc_probe()
892 ret = rtc_register_device(rtc->rtc); in omap_rtc_probe()
896 rtc_nvmem_register(rtc->rtc, &omap_rtc_nvmem_config); in omap_rtc_probe()
898 if (rtc->is_pmic_controller) { in omap_rtc_probe()
900 omap_rtc_power_off_rtc = rtc; in omap_rtc_probe()
908 pinctrl_unregister(rtc->pctldev); in omap_rtc_probe()
910 clk_disable_unprepare(rtc->clk); in omap_rtc_probe()
912 rtc->type->lock(rtc); in omap_rtc_probe()
921 struct omap_rtc *rtc = platform_get_drvdata(pdev); in omap_rtc_remove() local
925 omap_rtc_power_off_rtc == rtc) { in omap_rtc_remove()
932 if (!IS_ERR(rtc->clk)) in omap_rtc_remove()
933 clk_disable_unprepare(rtc->clk); in omap_rtc_remove()
935 rtc->type->unlock(rtc); in omap_rtc_remove()
937 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, 0); in omap_rtc_remove()
939 if (rtc->has_ext_clk) { in omap_rtc_remove()
940 reg = rtc_read(rtc, OMAP_RTC_OSC_REG); in omap_rtc_remove()
942 rtc_write(rtc, OMAP_RTC_OSC_REG, reg); in omap_rtc_remove()
945 rtc->type->lock(rtc); in omap_rtc_remove()
952 pinctrl_unregister(rtc->pctldev); in omap_rtc_remove()
959 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_suspend() local
961 rtc->interrupts_reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_suspend()
963 rtc->type->unlock(rtc); in omap_rtc_suspend()
970 enable_irq_wake(rtc->irq_alarm); in omap_rtc_suspend()
972 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, 0); in omap_rtc_suspend()
973 rtc->type->lock(rtc); in omap_rtc_suspend()
975 rtc->is_suspending = true; in omap_rtc_suspend()
982 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_resume() local
984 rtc->type->unlock(rtc); in omap_rtc_resume()
986 disable_irq_wake(rtc->irq_alarm); in omap_rtc_resume()
988 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, rtc->interrupts_reg); in omap_rtc_resume()
989 rtc->type->lock(rtc); in omap_rtc_resume()
991 rtc->is_suspending = false; in omap_rtc_resume()
998 struct omap_rtc *rtc = dev_get_drvdata(dev); in omap_rtc_runtime_suspend() local
1000 if (rtc->is_suspending && !rtc->has_ext_clk) in omap_rtc_runtime_suspend()
1013 struct omap_rtc *rtc = platform_get_drvdata(pdev); in omap_rtc_shutdown() local
1020 rtc->type->unlock(rtc); in omap_rtc_shutdown()
1021 mask = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG); in omap_rtc_shutdown()
1023 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, mask); in omap_rtc_shutdown()
1024 rtc->type->lock(rtc); in omap_rtc_shutdown()