Lines Matching defs:rtc

14 #include <linux/rtc.h>
104 struct rtc_device *rtc;
126 static int sprd_rtc_clear_alarm_ints(struct sprd_rtc *rtc)
128 return regmap_write(rtc->regmap, rtc->base + SPRD_RTC_INT_CLR,
132 static int sprd_rtc_lock_alarm(struct sprd_rtc *rtc, bool lock)
137 ret = regmap_read(rtc->regmap, rtc->base + SPRD_RTC_SPG_VALUE, &val);
147 ret = regmap_write(rtc->regmap, rtc->base + SPRD_RTC_SPG_UPD, val);
152 ret = regmap_read_poll_timeout(rtc->regmap,
153 rtc->base + SPRD_RTC_INT_RAW_STS, val,
158 dev_err(rtc->dev, "failed to update SPG value:%d\n", ret);
162 return regmap_write(rtc->regmap, rtc->base + SPRD_RTC_INT_CLR,
166 static int sprd_rtc_get_secs(struct sprd_rtc *rtc, enum sprd_rtc_reg_types type,
196 ret = regmap_read(rtc->regmap, rtc->base + sec_reg, &val);
202 ret = regmap_read(rtc->regmap, rtc->base + min_reg, &val);
208 ret = regmap_read(rtc->regmap, rtc->base + hour_reg, &val);
214 ret = regmap_read(rtc->regmap, rtc->base + day_reg, &val);
223 static int sprd_rtc_set_secs(struct sprd_rtc *rtc, enum sprd_rtc_reg_types type,
263 ret = regmap_write(rtc->regmap, rtc->base + sec_reg, sec);
267 ret = regmap_write(rtc->regmap, rtc->base + min_reg, min);
271 ret = regmap_write(rtc->regmap, rtc->base + hour_reg, hour);
275 ret = regmap_write(rtc->regmap, rtc->base + day_reg, day);
288 ret = regmap_read_poll_timeout(rtc->regmap,
289 rtc->base + SPRD_RTC_INT_RAW_STS, val,
294 dev_err(rtc->dev, "set time/alarm values timeout\n");
298 return regmap_write(rtc->regmap, rtc->base + SPRD_RTC_INT_CLR,
304 struct sprd_rtc *rtc = dev_get_drvdata(dev);
309 ret = sprd_rtc_get_secs(rtc, SPRD_RTC_AUX_ALARM, &secs);
315 ret = regmap_read(rtc->regmap, rtc->base + SPRD_RTC_INT_EN, &val);
321 ret = regmap_read(rtc->regmap, rtc->base + SPRD_RTC_INT_RAW_STS, &val);
331 struct sprd_rtc *rtc = dev_get_drvdata(dev);
336 ret = regmap_write(rtc->regmap, rtc->base + SPRD_RTC_INT_CLR,
341 ret = sprd_rtc_set_secs(rtc, SPRD_RTC_AUX_ALARM, secs);
346 ret = regmap_update_bits(rtc->regmap,
347 rtc->base + SPRD_RTC_INT_EN,
351 ret = regmap_update_bits(rtc->regmap,
352 rtc->base + SPRD_RTC_INT_EN,
361 struct sprd_rtc *rtc = dev_get_drvdata(dev);
365 if (!rtc->valid) {
370 ret = sprd_rtc_get_secs(rtc, SPRD_RTC_TIME, &secs);
380 struct sprd_rtc *rtc = dev_get_drvdata(dev);
384 ret = sprd_rtc_set_secs(rtc, SPRD_RTC_TIME, secs);
388 if (!rtc->valid) {
390 ret = regmap_write(rtc->regmap, rtc->base + SPRD_RTC_PWR_CTRL,
399 ret = regmap_write(rtc->regmap, rtc->base + SPRD_RTC_PWR_CTRL,
404 rtc->valid = true;
412 struct sprd_rtc *rtc = dev_get_drvdata(dev);
425 if (rtc->rtc && rtc->rtc->registered && rtc->rtc->aie_timer.enabled == 0)
428 ret = sprd_rtc_get_secs(rtc, SPRD_RTC_ALARM, &secs);
434 ret = regmap_read(rtc->regmap, rtc->base + SPRD_RTC_INT_EN, &val);
440 ret = regmap_read(rtc->regmap, rtc->base + SPRD_RTC_INT_RAW_STS, &val);
450 struct sprd_rtc *rtc = dev_get_drvdata(dev);
453 rtc_ktime_to_tm(rtc->rtc->aie_timer.node.expires);
469 if (!rtc->rtc->aie_timer.enabled || rtc_tm_sub(&aie_time, &alrm->time))
473 ret = regmap_write(rtc->regmap, rtc->base + SPRD_RTC_INT_CLR,
478 ret = sprd_rtc_set_secs(rtc, SPRD_RTC_ALARM, secs);
483 ret = regmap_update_bits(rtc->regmap,
484 rtc->base + SPRD_RTC_INT_EN,
491 ret = sprd_rtc_lock_alarm(rtc, false);
493 regmap_update_bits(rtc->regmap,
494 rtc->base + SPRD_RTC_INT_EN,
501 ret = sprd_rtc_lock_alarm(rtc, true);
509 struct sprd_rtc *rtc = dev_get_drvdata(dev);
513 ret = regmap_update_bits(rtc->regmap,
514 rtc->base + SPRD_RTC_INT_EN,
520 ret = sprd_rtc_lock_alarm(rtc, false);
522 regmap_update_bits(rtc->regmap, rtc->base + SPRD_RTC_INT_EN,
525 ret = sprd_rtc_lock_alarm(rtc, true);
541 struct sprd_rtc *rtc = dev_id;
544 ret = sprd_rtc_clear_alarm_ints(rtc);
548 rtc_update_irq(rtc->rtc, 1, RTC_AF | RTC_IRQF);
552 static int sprd_rtc_check_power_down(struct sprd_rtc *rtc)
557 ret = regmap_read(rtc->regmap, rtc->base + SPRD_RTC_PWR_STS, &val);
566 rtc->valid = val == SPRD_RTC_POWER_RESET_VALUE ? false : true;
570 static int sprd_rtc_check_alarm_int(struct sprd_rtc *rtc)
575 ret = regmap_read(rtc->regmap, rtc->base + SPRD_RTC_SPG_VALUE, &val);
592 return regmap_update_bits(rtc->regmap, rtc->base + SPRD_RTC_INT_EN,
599 struct sprd_rtc *rtc;
602 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
603 if (!rtc)
606 rtc->regmap = dev_get_regmap(pdev->dev.parent, NULL);
607 if (!rtc->regmap)
610 ret = of_property_read_u32(node, "reg", &rtc->base);
616 rtc->irq = platform_get_irq(pdev, 0);
617 if (rtc->irq < 0)
618 return rtc->irq;
620 rtc->rtc = devm_rtc_allocate_device(&pdev->dev);
621 if (IS_ERR(rtc->rtc))
622 return PTR_ERR(rtc->rtc);
624 rtc->dev = &pdev->dev;
625 platform_set_drvdata(pdev, rtc);
628 ret = sprd_rtc_check_alarm_int(rtc);
635 ret = sprd_rtc_check_power_down(rtc);
641 ret = devm_request_threaded_irq(&pdev->dev, rtc->irq, NULL,
644 pdev->name, rtc);
652 rtc->rtc->ops = &sprd_rtc_ops;
653 rtc->rtc->range_min = 0;
654 rtc->rtc->range_max = 5662310399LL;
655 ret = rtc_register_device(rtc->rtc);
665 { .compatible = "sprd,sc2731-rtc", },
672 .name = "sprd-rtc",