[PATCH 4/6] rtc: sun6i: Force the mux to the external oscillator
Maxime Ripard
maxime.ripard at free-electrons.com
Fri Jan 20 07:56:41 PST 2017
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 at free-electrons.com>
---
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
More information about the linux-arm-kernel
mailing list