aboutsummaryrefslogtreecommitdiff
path: root/sys/arm
diff options
context:
space:
mode:
authorEmmanuel Vadot <manu@FreeBSD.org>2019-05-11 15:02:20 +0000
committerEmmanuel Vadot <manu@FreeBSD.org>2019-05-11 15:02:20 +0000
commit45f64a5956c3dc84a74e68aef34a497f7365c31c (patch)
tree8c722b7594341f8e14e6666524bc15e8f4b3187b /sys/arm
parent7fa22f746b9033820217dc1050a3794f2bf6239e (diff)
downloadsrc-45f64a5956c3dc84a74e68aef34a497f7365c31c.tar.gz
src-45f64a5956c3dc84a74e68aef34a497f7365c31c.zip
allwinner: clk: prediv_mux: Init the current parent
Do not init the first parent but read the clock register to find it's current parent and init this one.
Notes
Notes: svn path=/head/; revision=347489
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/allwinner/clkng/aw_clk_prediv_mux.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/sys/arm/allwinner/clkng/aw_clk_prediv_mux.c b/sys/arm/allwinner/clkng/aw_clk_prediv_mux.c
index 0a4257ace841..a5dfa4c3a836 100644
--- a/sys/arm/allwinner/clkng/aw_clk_prediv_mux.c
+++ b/sys/arm/allwinner/clkng/aw_clk_prediv_mux.c
@@ -75,7 +75,19 @@ struct aw_clk_prediv_mux_sc {
static int
aw_clk_prediv_mux_init(struct clknode *clk, device_t dev)
{
- clknode_init_parent_idx(clk, 0);
+ struct aw_clk_prediv_mux_sc *sc;
+ uint32_t val;
+
+ sc = clknode_get_softc(clk);
+
+ DEVICE_LOCK(clk);
+ READ4(clk, sc->offset, &val);
+ DEVICE_UNLOCK(clk);
+
+ /* Init the current parent */
+ val = (val & sc->mux_mask) >> sc->mux_shift;
+ clknode_init_parent_idx(clk, val);
+
return (0);
}