rtc: at91sam9: get sclk rate after enabling it
authorAlexandre Belloni <alexandre.belloni@free-electrons.com>
Tue, 28 Jul 2015 19:51:10 +0000 (21:51 +0200)
committerAlexandre Belloni <alexandre.belloni@free-electrons.com>
Sat, 5 Sep 2015 11:19:09 +0000 (13:19 +0200)
See help for clk_get_rate(): "obtain the current clock rate (in Hz) for a
clock source. This is only valid once the clock source has been enabled."

It currently returns the correct value but that may not stay that way.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
drivers/rtc/rtc-at91sam9.c

index 23f721d049b265bd3dbb3cd184832f86ebfa5948..f9e85ace5e71db8dc283303f7fa561d21217f084 100644 (file)
@@ -425,18 +425,19 @@ static int at91_rtc_probe(struct platform_device *pdev)
        if (IS_ERR(rtc->sclk))
                return PTR_ERR(rtc->sclk);
 
-       sclk_rate = clk_get_rate(rtc->sclk);
-       if (!sclk_rate || sclk_rate > AT91_RTT_RTPRES) {
-               dev_err(&pdev->dev, "Invalid slow clock rate\n");
-               return -EINVAL;
-       }
-
        ret = clk_prepare_enable(rtc->sclk);
        if (ret) {
                dev_err(&pdev->dev, "Could not enable slow clock\n");
                return ret;
        }
 
+       sclk_rate = clk_get_rate(rtc->sclk);
+       if (!sclk_rate || sclk_rate > AT91_RTT_RTPRES) {
+               dev_err(&pdev->dev, "Invalid slow clock rate\n");
+               ret = -EINVAL;
+               goto err_clk;
+       }
+
        mr = rtt_readl(rtc, MR);
 
        /* unless RTT is counting at 1 Hz, re-initialize it */