hostapd: add acs feature indication
[openwrt/openwrt.git] / target / linux / sunxi / patches-4.9 / 0006-clk-sunxi-ng-Implement-minimum-for-multipliers.patch
1 From 2beaa601c849e72683a2dd0fe6fd77763f19f051 Mon Sep 17 00:00:00 2001
2 From: Maxime Ripard <maxime.ripard@free-electrons.com>
3 Date: Fri, 30 Sep 2016 22:16:51 +0200
4 Subject: clk: sunxi-ng: Implement minimum for multipliers
5
6 Allow the CCU drivers to specify a multiplier for their clocks.
7
8 Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
9 Acked-by: Chen-Yu Tsai <wens@csie.org>
10 ---
11 drivers/clk/sunxi-ng/ccu_mult.c | 2 +-
12 drivers/clk/sunxi-ng/ccu_mult.h | 13 +++++++++----
13 drivers/clk/sunxi-ng/ccu_nk.c | 8 ++++----
14 drivers/clk/sunxi-ng/ccu_nkm.c | 8 ++++----
15 drivers/clk/sunxi-ng/ccu_nkmp.c | 4 ++--
16 drivers/clk/sunxi-ng/ccu_nm.c | 2 +-
17 6 files changed, 21 insertions(+), 16 deletions(-)
18
19 --- a/drivers/clk/sunxi-ng/ccu_mult.c
20 +++ b/drivers/clk/sunxi-ng/ccu_mult.c
21 @@ -105,7 +105,7 @@ static int ccu_mult_set_rate(struct clk_
22 ccu_mux_helper_adjust_parent_for_prediv(&cm->common, &cm->mux, -1,
23 &parent_rate);
24
25 - _cm.min = 1;
26 + _cm.min = cm->mult.min;
27 _cm.max = 1 << cm->mult.width;
28 ccu_mult_find_best(parent_rate, rate, &_cm);
29
30 --- a/drivers/clk/sunxi-ng/ccu_mult.h
31 +++ b/drivers/clk/sunxi-ng/ccu_mult.h
32 @@ -7,14 +7,19 @@
33 struct ccu_mult_internal {
34 u8 shift;
35 u8 width;
36 + u8 min;
37 };
38
39 -#define _SUNXI_CCU_MULT(_shift, _width) \
40 - { \
41 - .shift = _shift, \
42 - .width = _width, \
43 +#define _SUNXI_CCU_MULT_MIN(_shift, _width, _min) \
44 + { \
45 + .shift = _shift, \
46 + .width = _width, \
47 + .min = _min, \
48 }
49
50 +#define _SUNXI_CCU_MULT(_shift, _width) \
51 + _SUNXI_CCU_MULT_MIN(_shift, _width, 1)
52 +
53 struct ccu_mult {
54 u32 enable;
55
56 --- a/drivers/clk/sunxi-ng/ccu_nk.c
57 +++ b/drivers/clk/sunxi-ng/ccu_nk.c
58 @@ -97,9 +97,9 @@ static long ccu_nk_round_rate(struct clk
59 if (nk->common.features & CCU_FEATURE_FIXED_POSTDIV)
60 rate *= nk->fixed_post_div;
61
62 - _nk.min_n = 1;
63 + _nk.min_n = nk->n.min;
64 _nk.max_n = 1 << nk->n.width;
65 - _nk.min_k = 1;
66 + _nk.min_k = nk->k.min;
67 _nk.max_k = 1 << nk->k.width;
68
69 ccu_nk_find_best(*parent_rate, rate, &_nk);
70 @@ -122,9 +122,9 @@ static int ccu_nk_set_rate(struct clk_hw
71 if (nk->common.features & CCU_FEATURE_FIXED_POSTDIV)
72 rate = rate * nk->fixed_post_div;
73
74 - _nk.min_n = 1;
75 + _nk.min_n = nk->n.min;
76 _nk.max_n = 1 << nk->n.width;
77 - _nk.min_k = 1;
78 + _nk.min_k = nk->k.min;
79 _nk.max_k = 1 << nk->k.width;
80
81 ccu_nk_find_best(parent_rate, rate, &_nk);
82 --- a/drivers/clk/sunxi-ng/ccu_nkm.c
83 +++ b/drivers/clk/sunxi-ng/ccu_nkm.c
84 @@ -100,9 +100,9 @@ static unsigned long ccu_nkm_round_rate(
85 struct ccu_nkm *nkm = data;
86 struct _ccu_nkm _nkm;
87
88 - _nkm.min_n = 1;
89 + _nkm.min_n = nkm->n.min;
90 _nkm.max_n = 1 << nkm->n.width;
91 - _nkm.min_k = 1;
92 + _nkm.min_k = nkm->k.min;
93 _nkm.max_k = 1 << nkm->k.width;
94 _nkm.min_m = 1;
95 _nkm.max_m = nkm->m.max ?: 1 << nkm->m.width;
96 @@ -129,9 +129,9 @@ static int ccu_nkm_set_rate(struct clk_h
97 unsigned long flags;
98 u32 reg;
99
100 - _nkm.min_n = 1;
101 + _nkm.min_n = nkm->n.min;
102 _nkm.max_n = 1 << nkm->n.width;
103 - _nkm.min_k = 1;
104 + _nkm.min_k = nkm->k.min;
105 _nkm.max_k = 1 << nkm->k.width;
106 _nkm.min_m = 1;
107 _nkm.max_m = nkm->m.max ?: 1 << nkm->m.width;
108 --- a/drivers/clk/sunxi-ng/ccu_nkmp.c
109 +++ b/drivers/clk/sunxi-ng/ccu_nkmp.c
110 @@ -107,9 +107,9 @@ static long ccu_nkmp_round_rate(struct c
111 struct ccu_nkmp *nkmp = hw_to_ccu_nkmp(hw);
112 struct _ccu_nkmp _nkmp;
113
114 - _nkmp.min_n = 1;
115 + _nkmp.min_n = nkmp->n.min;
116 _nkmp.max_n = 1 << nkmp->n.width;
117 - _nkmp.min_k = 1;
118 + _nkmp.min_k = nkmp->k.min;
119 _nkmp.max_k = 1 << nkmp->k.width;
120 _nkmp.min_m = 1;
121 _nkmp.max_m = nkmp->m.max ?: 1 << nkmp->m.width;
122 --- a/drivers/clk/sunxi-ng/ccu_nm.c
123 +++ b/drivers/clk/sunxi-ng/ccu_nm.c
124 @@ -93,7 +93,7 @@ static long ccu_nm_round_rate(struct clk
125 struct ccu_nm *nm = hw_to_ccu_nm(hw);
126 struct _ccu_nm _nm;
127
128 - _nm.min_n = 1;
129 + _nm.min_n = nm->n.min;
130 _nm.max_n = 1 << nm->n.width;
131 _nm.min_m = 1;
132 _nm.max_m = nm->m.max ?: 1 << nm->m.width;