The internal oscillator is way too inaccurate to do something useful with it. Switch to the external oscillator if it is available. Signed-off-by: Maxime Ripard <maxime.ripard@xxxxxxxxxxxxxxxxxx> --- drivers/rtc/rtc-sun6i.c | 12 ++++++++++++ 1 file changed, 12 insertions(+), 0 deletions(-) diff --git a/drivers/rtc/rtc-sun6i.c b/drivers/rtc/rtc-sun6i.c index edd5627da10f..1695fae24cd5 100644 --- a/drivers/rtc/rtc-sun6i.c +++ b/drivers/rtc/rtc-sun6i.c @@ -493,6 +493,7 @@ static const struct rtc_class_ops sun6i_rtc_ops = { static int sun6i_rtc_probe(struct platform_device *pdev) { struct sun6i_rtc_dev *chip = sun6i_rtc; + struct clk *parent; int ret; if (!chip) @@ -540,6 +541,17 @@ static int sun6i_rtc_probe(struct platform_device *pdev) /* disable alarm wakeup */ writel(0, chip->base + SUN6I_ALARM_CONFIG); + parent = clk_get(&pdev->dev, NULL); + if (!IS_ERR(parent)) { + ret = clk_set_parent(chip->losc, parent); + clk_put(parent); + + if (ret) { + dev_err(&pdev->dev, + "Failed to reparent the RTC to the external oscillator\n"); + return ret; + } + } clk_prepare_enable(chip->losc); chip->rtc = rtc_device_register("rtc-sun6i", &pdev->dev, -- git-series 0.8.11 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html