Module Name: src
Committed By: jmcneill
Date: Tue May 8 22:05:25 UTC 2018
Modified Files:
src/sys/arch/arm/sunxi: sunxi_ccu.h sunxi_ccu_fixed_factor.c
Log Message:
Pass set_rate calls on fixed factor clocks through to the parent clock
(adjusting accordingly)
To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/arm/sunxi/sunxi_ccu.h
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/sunxi/sunxi_ccu_fixed_factor.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/sunxi/sunxi_ccu.h
diff -u src/sys/arch/arm/sunxi/sunxi_ccu.h:1.17 src/sys/arch/arm/sunxi/sunxi_ccu.h:1.18
--- src/sys/arch/arm/sunxi/sunxi_ccu.h:1.17 Sun Apr 1 21:19:17 2018
+++ src/sys/arch/arm/sunxi/sunxi_ccu.h Tue May 8 22:05:25 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: sunxi_ccu.h,v 1.17 2018/04/01 21:19:17 bouyer Exp $ */
+/* $NetBSD: sunxi_ccu.h,v 1.18 2018/05/08 22:05:25 jmcneill Exp $ */
/*-
* Copyright (c) 2017 Jared McNeill <[email protected]>
@@ -341,6 +341,8 @@ struct sunxi_ccu_fixed_factor {
u_int sunxi_ccu_fixed_factor_get_rate(struct sunxi_ccu_softc *,
struct sunxi_ccu_clk *);
+int sunxi_ccu_fixed_factor_set_rate(struct sunxi_ccu_softc *,
+ struct sunxi_ccu_clk *, u_int);
const char *sunxi_ccu_fixed_factor_get_parent(struct sunxi_ccu_softc *,
struct sunxi_ccu_clk *);
@@ -353,6 +355,7 @@ const char *sunxi_ccu_fixed_factor_get_p
.u.fixed_factor.mult = (_mult), \
.get_rate = sunxi_ccu_fixed_factor_get_rate, \
.get_parent = sunxi_ccu_fixed_factor_get_parent, \
+ .set_rate = sunxi_ccu_fixed_factor_set_rate, \
}
struct sunxi_ccu_fractional {
Index: src/sys/arch/arm/sunxi/sunxi_ccu_fixed_factor.c
diff -u src/sys/arch/arm/sunxi/sunxi_ccu_fixed_factor.c:1.1 src/sys/arch/arm/sunxi/sunxi_ccu_fixed_factor.c:1.2
--- src/sys/arch/arm/sunxi/sunxi_ccu_fixed_factor.c:1.1 Sat Sep 30 12:48:58 2017
+++ src/sys/arch/arm/sunxi/sunxi_ccu_fixed_factor.c Tue May 8 22:05:25 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: sunxi_ccu_fixed_factor.c,v 1.1 2017/09/30 12:48:58 jmcneill Exp $ */
+/* $NetBSD: sunxi_ccu_fixed_factor.c,v 1.2 2018/05/08 22:05:25 jmcneill Exp $ */
/*-
* Copyright (c) 2017 Jared McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sunxi_ccu_fixed_factor.c,v 1.1 2017/09/30 12:48:58 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sunxi_ccu_fixed_factor.c,v 1.2 2018/05/08 22:05:25 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -64,6 +64,33 @@ sunxi_ccu_fixed_factor_get_rate(struct s
return (u_int)(((uint64_t)p_rate * fixed_factor->mult) / fixed_factor->div);
}
+static int
+sunxi_ccu_fixed_factor_set_parent_rate(struct clk *clkp, u_int rate)
+{
+ struct clk *clkp_parent;
+
+ clkp_parent = clk_get_parent(clkp);
+ if (clkp_parent == NULL)
+ return ENXIO;
+
+ return clk_set_rate(clkp_parent, rate);
+}
+
+int
+sunxi_ccu_fixed_factor_set_rate(struct sunxi_ccu_softc *sc,
+ struct sunxi_ccu_clk *clk, u_int rate)
+{
+ struct sunxi_ccu_fixed_factor *fixed_factor = &clk->u.fixed_factor;
+ struct clk *clkp = &clk->base;
+
+ KASSERT(clk->type == SUNXI_CCU_FIXED_FACTOR);
+
+ rate *= fixed_factor->div;
+ rate /= fixed_factor->mult;
+
+ return sunxi_ccu_fixed_factor_set_parent_rate(clkp, rate);
+}
+
const char *
sunxi_ccu_fixed_factor_get_parent(struct sunxi_ccu_softc *sc,
struct sunxi_ccu_clk *clk)