/* * NOTE: After the following write, the RTC_CCVR is only reflected * after the update cycle of 1 seconds.
*/
writel((u32)rtc_tm_to_time64(tm), pdata->csr_base + RTC_CLR);
readl(pdata->csr_base + RTC_CLR); /* Force a barrier */
pdata->csr_base = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(pdata->csr_base)) return PTR_ERR(pdata->csr_base);
pdata->rtc = devm_rtc_allocate_device(&pdev->dev); if (IS_ERR(pdata->rtc)) return PTR_ERR(pdata->rtc);
irq = platform_get_irq(pdev, 0); if (irq < 0) return irq;
ret = devm_request_irq(&pdev->dev, irq, xgene_rtc_interrupt, 0,
dev_name(&pdev->dev), pdata); if (ret) {
dev_err(&pdev->dev, "Could not request IRQ\n"); return ret;
}
pdata->clk = devm_clk_get(&pdev->dev, NULL); if (IS_ERR(pdata->clk)) {
dev_err(&pdev->dev, "Couldn't get the clock for RTC\n"); return -ENODEV;
}
ret = clk_prepare_enable(pdata->clk); if (ret) return ret;
/* Turn on the clock and the crystal */
writel(RTC_CCR_EN, pdata->csr_base + RTC_CCR);
ret = device_init_wakeup(&pdev->dev, true); if (ret) {
clk_disable_unprepare(pdata->clk); return ret;
}
/* * If this RTC alarm will be used for waking the system up, * don't disable it of course. Else we just disable the alarm * and await suspension.
*/ if (device_may_wakeup(&pdev->dev)) { if (!enable_irq_wake(irq))
pdata->irq_wake = 1;
} else {
pdata->irq_enabled = xgene_rtc_alarm_irq_enabled(dev);
xgene_rtc_alarm_irq_enable(dev, 0);
clk_disable_unprepare(pdata->clk);
} return 0;
}
staticint __maybe_unused xgene_rtc_resume(struct device *dev)
{ struct platform_device *pdev = to_platform_device(dev); struct xgene_rtc_dev *pdata = platform_get_drvdata(pdev); int irq; int rc;
irq = platform_get_irq(pdev, 0);
if (device_may_wakeup(&pdev->dev)) { if (pdata->irq_wake) {
disable_irq_wake(irq);
pdata->irq_wake = 0;
}
} else {
rc = clk_prepare_enable(pdata->clk); if (rc) {
dev_err(dev, "Unable to enable clock error %d\n", rc); return rc;
}
xgene_rtc_alarm_irq_enable(dev, pdata->irq_enabled);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.