Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* OMAP_RTC_OSC_REG bit fields: */
- #define OMAP_RTC_OSC_32KCLK_EN BIT(6)
- #define OMAP_RTC_OSC_SEL_32KCLK_SRC BIT(3)
- #define OMAP_RTC_OSC_OSC32K_GZ_DISABLE BIT(4)
- static int omap_rtc_probe(struct platform_device *pdev)
- {
- ...
- rtc->clk = devm_clk_get(&pdev->dev, "ext-clk");
- if (!IS_ERR(rtc->clk))
- rtc->has_ext_clk = true;
- else
- rtc->clk = devm_clk_get(&pdev->dev, "int-clk");
- if (!IS_ERR(rtc->clk))
- clk_prepare_enable(rtc->clk);
- ...
- /* enable RTC functional clock */
- if (rtc->type->has_32kclk_en) {
- reg = rtc_read(rtc, OMAP_RTC_OSC_REG);
- rtc_writel(rtc, OMAP_RTC_OSC_REG, reg | OMAP_RTC_OSC_32KCLK_EN);
- }
- ...
- /* If we have the external clock then switch to it so we can keep ticking across suspend. */
- if (rtc->has_ext_clk) {
- reg = rtc_read(rtc, OMAP_RTC_OSC_REG);
- reg &= ~OMAP_RTC_OSC_OSC32K_GZ_DISABLE;
- reg |= OMAP_RTC_OSC_32KCLK_EN | OMAP_RTC_OSC_SEL_32KCLK_SRC;
- rtc_writel(rtc, OMAP_RTC_OSC_REG, reg);
- }
- ...
- }
- static int omap_rtc_remove(struct platform_device *pdev)
- {
- ...
- if (!IS_ERR(rtc->clk))
- clk_disable_unprepare(rtc->clk);
- ...
- if (rtc->has_ext_clk) {
- reg = rtc_read(rtc, OMAP_RTC_OSC_REG);
- reg &= ~OMAP_RTC_OSC_SEL_32KCLK_SRC;
- rtc_write(rtc, OMAP_RTC_OSC_REG, reg);
- }
- ...
- }
- static int __maybe_unused omap_rtc_runtime_suspend(struct device *dev)
- {
- ...
- if (rtc->is_suspending && !rtc->has_ext_clk)
- return -EBUSY;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement