Skip to content

Commit df43ce4

Browse files
committed
Merge tag 'clk-meson-v6.3-1' of https://github.com/BayLibre/clk-meson into clk-amlogic
Pull Amlogic clk updates from Jerome Brunet: - Use .determine_rate() instead of .round_rate() for the dualdiv, mpll, sclk-div and cpu-dyn-div amlogic clock drivers * tag 'clk-meson-v6.3-1' of https://github.com/BayLibre/clk-meson: clk: meson: clk-cpu-dyndiv: switch from .round_rate to .determine_rate clk: meson: sclk-div: switch from .round_rate to .determine_rate clk: meson: dualdiv: switch from .round_rate to .determine_rate clk: meson: mpll: Switch from .round_rate to .determine_rate
2 parents 1b929c0 + 716592f commit df43ce4

File tree

4 files changed

+36
-25
lines changed

4 files changed

+36
-25
lines changed

drivers/clk/meson/clk-cpu-dyndiv.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,13 @@ static unsigned long meson_clk_cpu_dyndiv_recalc_rate(struct clk_hw *hw,
2727
NULL, 0, data->div.width);
2828
}
2929

30-
static long meson_clk_cpu_dyndiv_round_rate(struct clk_hw *hw,
31-
unsigned long rate,
32-
unsigned long *prate)
30+
static int meson_clk_cpu_dyndiv_determine_rate(struct clk_hw *hw,
31+
struct clk_rate_request *req)
3332
{
3433
struct clk_regmap *clk = to_clk_regmap(hw);
3534
struct meson_clk_cpu_dyndiv_data *data = meson_clk_cpu_dyndiv_data(clk);
3635

37-
return divider_round_rate(hw, rate, prate, NULL, data->div.width, 0);
36+
return divider_determine_rate(hw, req, NULL, data->div.width, 0);
3837
}
3938

4039
static int meson_clk_cpu_dyndiv_set_rate(struct clk_hw *hw, unsigned long rate,
@@ -63,7 +62,7 @@ static int meson_clk_cpu_dyndiv_set_rate(struct clk_hw *hw, unsigned long rate,
6362

6463
const struct clk_ops meson_clk_cpu_dyndiv_ops = {
6564
.recalc_rate = meson_clk_cpu_dyndiv_recalc_rate,
66-
.round_rate = meson_clk_cpu_dyndiv_round_rate,
65+
.determine_rate = meson_clk_cpu_dyndiv_determine_rate,
6766
.set_rate = meson_clk_cpu_dyndiv_set_rate,
6867
};
6968
EXPORT_SYMBOL_GPL(meson_clk_cpu_dyndiv_ops);

drivers/clk/meson/clk-dualdiv.c

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,18 +86,23 @@ __dualdiv_get_setting(unsigned long rate, unsigned long parent_rate,
8686
return (struct meson_clk_dualdiv_param *)&table[best_i];
8787
}
8888

89-
static long meson_clk_dualdiv_round_rate(struct clk_hw *hw, unsigned long rate,
90-
unsigned long *parent_rate)
89+
static int meson_clk_dualdiv_determine_rate(struct clk_hw *hw,
90+
struct clk_rate_request *req)
9191
{
9292
struct clk_regmap *clk = to_clk_regmap(hw);
9393
struct meson_clk_dualdiv_data *dualdiv = meson_clk_dualdiv_data(clk);
94-
const struct meson_clk_dualdiv_param *setting =
95-
__dualdiv_get_setting(rate, *parent_rate, dualdiv);
94+
const struct meson_clk_dualdiv_param *setting;
9695

97-
if (!setting)
98-
return meson_clk_dualdiv_recalc_rate(hw, *parent_rate);
96+
setting = __dualdiv_get_setting(req->rate, req->best_parent_rate,
97+
dualdiv);
98+
if (setting)
99+
req->rate = __dualdiv_param_to_rate(req->best_parent_rate,
100+
setting);
101+
else
102+
req->rate = meson_clk_dualdiv_recalc_rate(hw,
103+
req->best_parent_rate);
99104

100-
return __dualdiv_param_to_rate(*parent_rate, setting);
105+
return 0;
101106
}
102107

103108
static int meson_clk_dualdiv_set_rate(struct clk_hw *hw, unsigned long rate,
@@ -122,7 +127,7 @@ static int meson_clk_dualdiv_set_rate(struct clk_hw *hw, unsigned long rate,
122127

123128
const struct clk_ops meson_clk_dualdiv_ops = {
124129
.recalc_rate = meson_clk_dualdiv_recalc_rate,
125-
.round_rate = meson_clk_dualdiv_round_rate,
130+
.determine_rate = meson_clk_dualdiv_determine_rate,
126131
.set_rate = meson_clk_dualdiv_set_rate,
127132
};
128133
EXPORT_SYMBOL_GPL(meson_clk_dualdiv_ops);

drivers/clk/meson/clk-mpll.c

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,22 @@ static unsigned long mpll_recalc_rate(struct clk_hw *hw,
8787
return rate < 0 ? 0 : rate;
8888
}
8989

90-
static long mpll_round_rate(struct clk_hw *hw,
91-
unsigned long rate,
92-
unsigned long *parent_rate)
90+
static int mpll_determine_rate(struct clk_hw *hw, struct clk_rate_request *req)
9391
{
9492
struct clk_regmap *clk = to_clk_regmap(hw);
9593
struct meson_clk_mpll_data *mpll = meson_clk_mpll_data(clk);
9694
unsigned int sdm, n2;
95+
long rate;
96+
97+
params_from_rate(req->rate, req->best_parent_rate, &sdm, &n2,
98+
mpll->flags);
9799

98-
params_from_rate(rate, *parent_rate, &sdm, &n2, mpll->flags);
99-
return rate_from_params(*parent_rate, sdm, n2);
100+
rate = rate_from_params(req->best_parent_rate, sdm, n2);
101+
if (rate < 0)
102+
return rate;
103+
104+
req->rate = rate;
105+
return 0;
100106
}
101107

102108
static int mpll_set_rate(struct clk_hw *hw,
@@ -157,13 +163,13 @@ static int mpll_init(struct clk_hw *hw)
157163

158164
const struct clk_ops meson_clk_mpll_ro_ops = {
159165
.recalc_rate = mpll_recalc_rate,
160-
.round_rate = mpll_round_rate,
166+
.determine_rate = mpll_determine_rate,
161167
};
162168
EXPORT_SYMBOL_GPL(meson_clk_mpll_ro_ops);
163169

164170
const struct clk_ops meson_clk_mpll_ops = {
165171
.recalc_rate = mpll_recalc_rate,
166-
.round_rate = mpll_round_rate,
172+
.determine_rate = mpll_determine_rate,
167173
.set_rate = mpll_set_rate,
168174
.init = mpll_init,
169175
};

drivers/clk/meson/sclk-div.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,16 +96,17 @@ static int sclk_div_bestdiv(struct clk_hw *hw, unsigned long rate,
9696
return bestdiv;
9797
}
9898

99-
static long sclk_div_round_rate(struct clk_hw *hw, unsigned long rate,
100-
unsigned long *prate)
99+
static int sclk_div_determine_rate(struct clk_hw *hw,
100+
struct clk_rate_request *req)
101101
{
102102
struct clk_regmap *clk = to_clk_regmap(hw);
103103
struct meson_sclk_div_data *sclk = meson_sclk_div_data(clk);
104104
int div;
105105

106-
div = sclk_div_bestdiv(hw, rate, prate, sclk);
106+
div = sclk_div_bestdiv(hw, req->rate, &req->best_parent_rate, sclk);
107+
req->rate = DIV_ROUND_UP_ULL((u64)req->best_parent_rate, div);
107108

108-
return DIV_ROUND_UP_ULL((u64)*prate, div);
109+
return 0;
109110
}
110111

111112
static void sclk_apply_ratio(struct clk_regmap *clk,
@@ -237,7 +238,7 @@ static int sclk_div_init(struct clk_hw *hw)
237238

238239
const struct clk_ops meson_sclk_div_ops = {
239240
.recalc_rate = sclk_div_recalc_rate,
240-
.round_rate = sclk_div_round_rate,
241+
.determine_rate = sclk_div_determine_rate,
241242
.set_rate = sclk_div_set_rate,
242243
.enable = sclk_div_enable,
243244
.disable = sclk_div_disable,

0 commit comments

Comments
 (0)