Lines Matching defs:rtc

27 #include <linux/rtc.h>
28 #include <linux/rtc/rtc-omap.h>
137 void (*lock)(struct omap_rtc *rtc);
138 void (*unlock)(struct omap_rtc *rtc);
142 struct rtc_device *rtc;
155 static inline u8 rtc_read(struct omap_rtc *rtc, unsigned int reg)
157 return readb(rtc->base + reg);
160 static inline u32 rtc_readl(struct omap_rtc *rtc, unsigned int reg)
162 return readl(rtc->base + reg);
165 static inline void rtc_write(struct omap_rtc *rtc, unsigned int reg, u8 val)
167 writeb(val, rtc->base + reg);
170 static inline void rtc_writel(struct omap_rtc *rtc, unsigned int reg, u32 val)
172 writel(val, rtc->base + reg);
175 static void am3352_rtc_unlock(struct omap_rtc *rtc)
177 rtc_writel(rtc, OMAP_RTC_KICK0_REG, KICK0_VALUE);
178 rtc_writel(rtc, OMAP_RTC_KICK1_REG, KICK1_VALUE);
181 static void am3352_rtc_lock(struct omap_rtc *rtc)
183 rtc_writel(rtc, OMAP_RTC_KICK0_REG, 0);
184 rtc_writel(rtc, OMAP_RTC_KICK1_REG, 0);
187 static void default_rtc_unlock(struct omap_rtc *rtc)
191 static void default_rtc_lock(struct omap_rtc *rtc)
196 * We rely on the rtc framework to handle locking (rtc->ops_lock),
200 static void rtc_wait_not_busy(struct omap_rtc *rtc)
207 status = rtc_read(rtc, OMAP_RTC_STATUS_REG);
217 struct omap_rtc *rtc = dev_id;
221 irq_data = rtc_read(rtc, OMAP_RTC_STATUS_REG);
225 rtc->type->unlock(rtc);
226 rtc_write(rtc, OMAP_RTC_STATUS_REG, OMAP_RTC_STATUS_ALARM);
227 rtc->type->lock(rtc);
235 rtc_update_irq(rtc->rtc, 1, events);
242 struct omap_rtc *rtc = dev_get_drvdata(dev);
246 rtc_wait_not_busy(rtc);
247 reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG);
248 if (rtc->type->has_irqwakeen)
249 irqwake_reg = rtc_read(rtc, OMAP_RTC_IRQWAKEEN);
258 rtc_wait_not_busy(rtc);
259 rtc->type->unlock(rtc);
260 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, reg);
261 if (rtc->type->has_irqwakeen)
262 rtc_write(rtc, OMAP_RTC_IRQWAKEEN, irqwake_reg);
263 rtc->type->lock(rtc);
292 static void omap_rtc_read_time_raw(struct omap_rtc *rtc, struct rtc_time *tm)
294 tm->tm_sec = rtc_read(rtc, OMAP_RTC_SECONDS_REG);
295 tm->tm_min = rtc_read(rtc, OMAP_RTC_MINUTES_REG);
296 tm->tm_hour = rtc_read(rtc, OMAP_RTC_HOURS_REG);
297 tm->tm_mday = rtc_read(rtc, OMAP_RTC_DAYS_REG);
298 tm->tm_mon = rtc_read(rtc, OMAP_RTC_MONTHS_REG);
299 tm->tm_year = rtc_read(rtc, OMAP_RTC_YEARS_REG);
304 struct omap_rtc *rtc = dev_get_drvdata(dev);
308 rtc_wait_not_busy(rtc);
309 omap_rtc_read_time_raw(rtc, tm);
319 struct omap_rtc *rtc = dev_get_drvdata(dev);
324 rtc_wait_not_busy(rtc);
326 rtc->type->unlock(rtc);
327 rtc_write(rtc, OMAP_RTC_YEARS_REG, tm->tm_year);
328 rtc_write(rtc, OMAP_RTC_MONTHS_REG, tm->tm_mon);
329 rtc_write(rtc, OMAP_RTC_DAYS_REG, tm->tm_mday);
330 rtc_write(rtc, OMAP_RTC_HOURS_REG, tm->tm_hour);
331 rtc_write(rtc, OMAP_RTC_MINUTES_REG, tm->tm_min);
332 rtc_write(rtc, OMAP_RTC_SECONDS_REG, tm->tm_sec);
333 rtc->type->lock(rtc);
342 struct omap_rtc *rtc = dev_get_drvdata(dev);
346 rtc_wait_not_busy(rtc);
348 alm->time.tm_sec = rtc_read(rtc, OMAP_RTC_ALARM_SECONDS_REG);
349 alm->time.tm_min = rtc_read(rtc, OMAP_RTC_ALARM_MINUTES_REG);
350 alm->time.tm_hour = rtc_read(rtc, OMAP_RTC_ALARM_HOURS_REG);
351 alm->time.tm_mday = rtc_read(rtc, OMAP_RTC_ALARM_DAYS_REG);
352 alm->time.tm_mon = rtc_read(rtc, OMAP_RTC_ALARM_MONTHS_REG);
353 alm->time.tm_year = rtc_read(rtc, OMAP_RTC_ALARM_YEARS_REG);
359 interrupts = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG);
367 struct omap_rtc *rtc = dev_get_drvdata(dev);
373 rtc_wait_not_busy(rtc);
375 rtc->type->unlock(rtc);
376 rtc_write(rtc, OMAP_RTC_ALARM_YEARS_REG, alm->time.tm_year);
377 rtc_write(rtc, OMAP_RTC_ALARM_MONTHS_REG, alm->time.tm_mon);
378 rtc_write(rtc, OMAP_RTC_ALARM_DAYS_REG, alm->time.tm_mday);
379 rtc_write(rtc, OMAP_RTC_ALARM_HOURS_REG, alm->time.tm_hour);
380 rtc_write(rtc, OMAP_RTC_ALARM_MINUTES_REG, alm->time.tm_min);
381 rtc_write(rtc, OMAP_RTC_ALARM_SECONDS_REG, alm->time.tm_sec);
383 reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG);
384 if (rtc->type->has_irqwakeen)
385 irqwake_reg = rtc_read(rtc, OMAP_RTC_IRQWAKEEN);
394 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, reg);
395 if (rtc->type->has_irqwakeen)
396 rtc_write(rtc, OMAP_RTC_IRQWAKEEN, irqwake_reg);
397 rtc->type->lock(rtc);
413 struct omap_rtc *rtc = omap_rtc_power_off_rtc;
419 rtc->type->unlock(rtc);
421 val = rtc_readl(rtc, OMAP_RTC_PMIC_REG);
422 rtc_writel(rtc, OMAP_RTC_PMIC_REG, val | OMAP_RTC_PMIC_POWER_EN_EN);
426 rtc_writel(rtc, OMAP_RTC_STATUS_REG, OMAP_RTC_STATUS_ALARM2);
429 omap_rtc_read_time_raw(rtc, &tm);
437 rtc_wait_not_busy(rtc);
439 rtc_write(rtc, OMAP_RTC_ALARM2_SECONDS_REG, tm.tm_sec);
440 rtc_write(rtc, OMAP_RTC_ALARM2_MINUTES_REG, tm.tm_min);
441 rtc_write(rtc, OMAP_RTC_ALARM2_HOURS_REG, tm.tm_hour);
442 rtc_write(rtc, OMAP_RTC_ALARM2_DAYS_REG, tm.tm_mday);
443 rtc_write(rtc, OMAP_RTC_ALARM2_MONTHS_REG, tm.tm_mon);
444 rtc_write(rtc, OMAP_RTC_ALARM2_YEARS_REG, tm.tm_year);
451 val = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG);
452 rtc_writel(rtc, OMAP_RTC_INTERRUPTS_REG,
456 if (rtc_read(rtc, OMAP_RTC_SECONDS_REG) != seconds) {
457 val = rtc_read(rtc, OMAP_RTC_STATUS_REG);
462 rtc->type->lock(rtc);
484 struct rtc_device *rtc = omap_rtc_power_off_rtc->rtc;
487 omap_rtc_power_off_program(rtc->dev.parent);
537 .name = "am3352-rtc",
540 .name = "da830-rtc",
550 .compatible = "ti,am3352-rtc",
553 .compatible = "ti,da830-rtc",
601 struct omap_rtc *rtc = pinctrl_dev_get_drvdata(pctldev);
606 val = rtc_readl(rtc, OMAP_RTC_PMIC_REG);
630 struct omap_rtc *rtc = pinctrl_dev_get_drvdata(pctldev);
636 val = rtc_readl(rtc, OMAP_RTC_PMIC_REG);
656 dev_err(&rtc->rtc->dev, "Property %u not supported\n",
662 rtc->type->unlock(rtc);
663 rtc_writel(rtc, OMAP_RTC_PMIC_REG, val);
664 rtc->type->lock(rtc);
691 struct omap_rtc *rtc = priv;
696 val[i] = rtc_readl(rtc,
705 struct omap_rtc *rtc = priv;
709 rtc->type->unlock(rtc);
711 rtc_writel(rtc,
713 rtc->type->lock(rtc);
729 struct omap_rtc *rtc;
735 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
736 if (!rtc)
741 rtc->type = of_id->data;
742 rtc->is_pmic_controller = rtc->type->has_pmic_mode &&
746 rtc->type = (void *)id_entry->driver_data;
749 rtc->irq_timer = platform_get_irq(pdev, 0);
750 if (rtc->irq_timer <= 0)
753 rtc->irq_alarm = platform_get_irq(pdev, 1);
754 if (rtc->irq_alarm <= 0)
757 rtc->clk = devm_clk_get(&pdev->dev, "ext-clk");
758 if (!IS_ERR(rtc->clk))
759 rtc->has_ext_clk = true;
761 rtc->clk = devm_clk_get(&pdev->dev, "int-clk");
763 if (!IS_ERR(rtc->clk))
764 clk_prepare_enable(rtc->clk);
766 rtc->base = devm_platform_ioremap_resource(pdev, 0);
767 if (IS_ERR(rtc->base)) {
768 clk_disable_unprepare(rtc->clk);
769 return PTR_ERR(rtc->base);
772 platform_set_drvdata(pdev, rtc);
778 rtc->type->unlock(rtc);
785 rtc_writel(rtc, OMAP_RTC_INTERRUPTS_REG, 0);
788 if (rtc->type->has_32kclk_en) {
789 reg = rtc_read(rtc, OMAP_RTC_OSC_REG);
790 rtc_writel(rtc, OMAP_RTC_OSC_REG,
795 reg = rtc_read(rtc, OMAP_RTC_STATUS_REG);
799 if (rtc->type->has_pmic_mode)
802 if (rtc->type->has_power_up_reset) {
809 rtc_write(rtc, OMAP_RTC_STATUS_REG, reg & mask);
812 reg = rtc_read(rtc, OMAP_RTC_CTRL_REG);
839 rtc_write(rtc, OMAP_RTC_CTRL_REG, new_ctrl);
845 if (rtc->has_ext_clk) {
846 reg = rtc_read(rtc, OMAP_RTC_OSC_REG);
849 rtc_writel(rtc, OMAP_RTC_OSC_REG, reg);
852 rtc->type->lock(rtc);
856 rtc->rtc = devm_rtc_allocate_device(&pdev->dev);
857 if (IS_ERR(rtc->rtc)) {
858 ret = PTR_ERR(rtc->rtc);
862 rtc->rtc->ops = &omap_rtc_ops;
863 rtc->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
864 rtc->rtc->range_max = RTC_TIMESTAMP_END_2099;
865 omap_rtc_nvmem_config.priv = rtc;
868 ret = devm_request_irq(&pdev->dev, rtc->irq_timer, rtc_irq, 0,
869 dev_name(&rtc->rtc->dev), rtc);
873 if (rtc->irq_timer != rtc->irq_alarm) {
874 ret = devm_request_irq(&pdev->dev, rtc->irq_alarm, rtc_irq, 0,
875 dev_name(&rtc->rtc->dev), rtc);
883 rtc->pctldev = pinctrl_register(&rtc_pinctrl_desc, &pdev->dev, rtc);
884 if (IS_ERR(rtc->pctldev)) {
886 ret = PTR_ERR(rtc->pctldev);
890 ret = rtc_register_device(rtc->rtc);
894 rtc_nvmem_register(rtc->rtc, &omap_rtc_nvmem_config);
896 if (rtc->is_pmic_controller) {
898 omap_rtc_power_off_rtc = rtc;
906 pinctrl_unregister(rtc->pctldev);
908 clk_disable_unprepare(rtc->clk);
910 rtc->type->lock(rtc);
919 struct omap_rtc *rtc = platform_get_drvdata(pdev);
923 omap_rtc_power_off_rtc == rtc) {
930 if (!IS_ERR(rtc->clk))
931 clk_disable_unprepare(rtc->clk);
933 rtc->type->unlock(rtc);
934 /* leave rtc running, but disable irqs */
935 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, 0);
937 if (rtc->has_ext_clk) {
938 reg = rtc_read(rtc, OMAP_RTC_OSC_REG);
940 rtc_write(rtc, OMAP_RTC_OSC_REG, reg);
943 rtc->type->lock(rtc);
950 pinctrl_unregister(rtc->pctldev);
957 struct omap_rtc *rtc = dev_get_drvdata(dev);
959 rtc->interrupts_reg = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG);
961 rtc->type->unlock(rtc);
968 enable_irq_wake(rtc->irq_alarm);
970 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, 0);
971 rtc->type->lock(rtc);
973 rtc->is_suspending = true;
980 struct omap_rtc *rtc = dev_get_drvdata(dev);
982 rtc->type->unlock(rtc);
984 disable_irq_wake(rtc->irq_alarm);
986 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, rtc->interrupts_reg);
987 rtc->type->lock(rtc);
989 rtc->is_suspending = false;
996 struct omap_rtc *rtc = dev_get_drvdata(dev);
998 if (rtc->is_suspending && !rtc->has_ext_clk)
1011 struct omap_rtc *rtc = platform_get_drvdata(pdev);
1018 rtc->type->unlock(rtc);
1019 mask = rtc_read(rtc, OMAP_RTC_INTERRUPTS_REG);
1021 rtc_write(rtc, OMAP_RTC_INTERRUPTS_REG, mask);
1022 rtc->type->lock(rtc);