summaryrefslogtreecommitdiff
path: root/target/linux/sunxi/patches-4.9/0006-clk-sunxi-ng-Implement-minimum-for-multipliers.patch
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2017-07-15 22:50:41 +0200
committerHauke Mehrtens <hauke@hauke-m.de>2017-09-18 20:34:55 +0200
commit34a422794ddab738408edc7e3980ccbc14f28af4 (patch)
tree06f99aeb1acab719dea0a5743d44c2026613edbb /target/linux/sunxi/patches-4.9/0006-clk-sunxi-ng-Implement-minimum-for-multipliers.patch
parente080a7ce07ee8cd63c71e1469853a233d9bc7a4c (diff)
downloadmtk-20170518-34a422794ddab738408edc7e3980ccbc14f28af4.zip
mtk-20170518-34a422794ddab738408edc7e3980ccbc14f28af4.tar.gz
mtk-20170518-34a422794ddab738408edc7e3980ccbc14f28af4.tar.bz2
sunxi: Backport patches needed for A64
This backports multiple patches from kernel 4.10 which are adding missing support for the A64 and the pine64 board. These are the device tree files, the pinctlk and the clock driver. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Diffstat (limited to 'target/linux/sunxi/patches-4.9/0006-clk-sunxi-ng-Implement-minimum-for-multipliers.patch')
-rw-r--r--target/linux/sunxi/patches-4.9/0006-clk-sunxi-ng-Implement-minimum-for-multipliers.patch132
1 files changed, 132 insertions, 0 deletions
diff --git a/target/linux/sunxi/patches-4.9/0006-clk-sunxi-ng-Implement-minimum-for-multipliers.patch b/target/linux/sunxi/patches-4.9/0006-clk-sunxi-ng-Implement-minimum-for-multipliers.patch
new file mode 100644
index 0000000..668d596
--- /dev/null
+++ b/target/linux/sunxi/patches-4.9/0006-clk-sunxi-ng-Implement-minimum-for-multipliers.patch
@@ -0,0 +1,132 @@
+From 2beaa601c849e72683a2dd0fe6fd77763f19f051 Mon Sep 17 00:00:00 2001
+From: Maxime Ripard <maxime.ripard@free-electrons.com>
+Date: Fri, 30 Sep 2016 22:16:51 +0200
+Subject: clk: sunxi-ng: Implement minimum for multipliers
+
+Allow the CCU drivers to specify a multiplier for their clocks.
+
+Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
+Acked-by: Chen-Yu Tsai <wens@csie.org>
+---
+ drivers/clk/sunxi-ng/ccu_mult.c | 2 +-
+ drivers/clk/sunxi-ng/ccu_mult.h | 13 +++++++++----
+ drivers/clk/sunxi-ng/ccu_nk.c | 8 ++++----
+ drivers/clk/sunxi-ng/ccu_nkm.c | 8 ++++----
+ drivers/clk/sunxi-ng/ccu_nkmp.c | 4 ++--
+ drivers/clk/sunxi-ng/ccu_nm.c | 2 +-
+ 6 files changed, 21 insertions(+), 16 deletions(-)
+
+--- a/drivers/clk/sunxi-ng/ccu_mult.c
++++ b/drivers/clk/sunxi-ng/ccu_mult.c
+@@ -105,7 +105,7 @@ static int ccu_mult_set_rate(struct clk_
+ ccu_mux_helper_adjust_parent_for_prediv(&cm->common, &cm->mux, -1,
+ &parent_rate);
+
+- _cm.min = 1;
++ _cm.min = cm->mult.min;
+ _cm.max = 1 << cm->mult.width;
+ ccu_mult_find_best(parent_rate, rate, &_cm);
+
+--- a/drivers/clk/sunxi-ng/ccu_mult.h
++++ b/drivers/clk/sunxi-ng/ccu_mult.h
+@@ -7,14 +7,19 @@
+ struct ccu_mult_internal {
+ u8 shift;
+ u8 width;
++ u8 min;
+ };
+
+-#define _SUNXI_CCU_MULT(_shift, _width) \
+- { \
+- .shift = _shift, \
+- .width = _width, \
++#define _SUNXI_CCU_MULT_MIN(_shift, _width, _min) \
++ { \
++ .shift = _shift, \
++ .width = _width, \
++ .min = _min, \
+ }
+
++#define _SUNXI_CCU_MULT(_shift, _width) \
++ _SUNXI_CCU_MULT_MIN(_shift, _width, 1)
++
+ struct ccu_mult {
+ u32 enable;
+
+--- a/drivers/clk/sunxi-ng/ccu_nk.c
++++ b/drivers/clk/sunxi-ng/ccu_nk.c
+@@ -97,9 +97,9 @@ static long ccu_nk_round_rate(struct clk
+ if (nk->common.features & CCU_FEATURE_FIXED_POSTDIV)
+ rate *= nk->fixed_post_div;
+
+- _nk.min_n = 1;
++ _nk.min_n = nk->n.min;
+ _nk.max_n = 1 << nk->n.width;
+- _nk.min_k = 1;
++ _nk.min_k = nk->k.min;
+ _nk.max_k = 1 << nk->k.width;
+
+ ccu_nk_find_best(*parent_rate, rate, &_nk);
+@@ -122,9 +122,9 @@ static int ccu_nk_set_rate(struct clk_hw
+ if (nk->common.features & CCU_FEATURE_FIXED_POSTDIV)
+ rate = rate * nk->fixed_post_div;
+
+- _nk.min_n = 1;
++ _nk.min_n = nk->n.min;
+ _nk.max_n = 1 << nk->n.width;
+- _nk.min_k = 1;
++ _nk.min_k = nk->k.min;
+ _nk.max_k = 1 << nk->k.width;
+
+ ccu_nk_find_best(parent_rate, rate, &_nk);
+--- a/drivers/clk/sunxi-ng/ccu_nkm.c
++++ b/drivers/clk/sunxi-ng/ccu_nkm.c
+@@ -100,9 +100,9 @@ static unsigned long ccu_nkm_round_rate(
+ struct ccu_nkm *nkm = data;
+ struct _ccu_nkm _nkm;
+
+- _nkm.min_n = 1;
++ _nkm.min_n = nkm->n.min;
+ _nkm.max_n = 1 << nkm->n.width;
+- _nkm.min_k = 1;
++ _nkm.min_k = nkm->k.min;
+ _nkm.max_k = 1 << nkm->k.width;
+ _nkm.min_m = 1;
+ _nkm.max_m = nkm->m.max ?: 1 << nkm->m.width;
+@@ -129,9 +129,9 @@ static int ccu_nkm_set_rate(struct clk_h
+ unsigned long flags;
+ u32 reg;
+
+- _nkm.min_n = 1;
++ _nkm.min_n = nkm->n.min;
+ _nkm.max_n = 1 << nkm->n.width;
+- _nkm.min_k = 1;
++ _nkm.min_k = nkm->k.min;
+ _nkm.max_k = 1 << nkm->k.width;
+ _nkm.min_m = 1;
+ _nkm.max_m = nkm->m.max ?: 1 << nkm->m.width;
+--- a/drivers/clk/sunxi-ng/ccu_nkmp.c
++++ b/drivers/clk/sunxi-ng/ccu_nkmp.c
+@@ -107,9 +107,9 @@ static long ccu_nkmp_round_rate(struct c
+ struct ccu_nkmp *nkmp = hw_to_ccu_nkmp(hw);
+ struct _ccu_nkmp _nkmp;
+
+- _nkmp.min_n = 1;
++ _nkmp.min_n = nkmp->n.min;
+ _nkmp.max_n = 1 << nkmp->n.width;
+- _nkmp.min_k = 1;
++ _nkmp.min_k = nkmp->k.min;
+ _nkmp.max_k = 1 << nkmp->k.width;
+ _nkmp.min_m = 1;
+ _nkmp.max_m = nkmp->m.max ?: 1 << nkmp->m.width;
+--- a/drivers/clk/sunxi-ng/ccu_nm.c
++++ b/drivers/clk/sunxi-ng/ccu_nm.c
+@@ -93,7 +93,7 @@ static long ccu_nm_round_rate(struct clk
+ struct ccu_nm *nm = hw_to_ccu_nm(hw);
+ struct _ccu_nm _nm;
+
+- _nm.min_n = 1;
++ _nm.min_n = nm->n.min;
+ _nm.max_n = 1 << nm->n.width;
+ _nm.min_m = 1;
+ _nm.max_m = nm->m.max ?: 1 << nm->m.width;