777c54c83ad735aeca89a19f18e00ce5723375f4
[openwrt/staging/hauke.git] / target / linux / ipq806x / patches-5.10 / 097-3-clk-qcom-krait-add-missing-enable-disable.patch
1 From f8fdbecdaca97f0f2eebd77256e2eca4a8da6c39 Mon Sep 17 00:00:00 2001
2 From: Ansuel Smith <ansuelsmth@gmail.com>
3 Date: Sun, 7 Feb 2021 17:08:16 +0100
4 Subject: [PATCH 3/4] clk: qcom: krait: add missing enable disable
5
6 Add missing enable disable mux function. Add extra check to
7 div2_round_rate.
8
9 Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
10 ---
11 drivers/clk/qcom/clk-krait.c | 27 +++++++++++++++++++++++++--
12 1 file changed, 25 insertions(+), 2 deletions(-)
13
14 diff --git a/drivers/clk/qcom/clk-krait.c b/drivers/clk/qcom/clk-krait.c
15 index 59f1af415b58..ba796b621669 100644
16 --- a/drivers/clk/qcom/clk-krait.c
17 +++ b/drivers/clk/qcom/clk-krait.c
18 @@ -68,7 +68,25 @@ static u8 krait_mux_get_parent(struct clk_hw *hw)
19 return clk_mux_val_to_index(hw, mux->parent_map, 0, sel);
20 }
21
22 +static int krait_mux_enable(struct clk_hw *hw)
23 +{
24 + struct krait_mux_clk *mux = to_krait_mux_clk(hw);
25 +
26 + __krait_mux_set_sel(mux, mux->en_mask);
27 +
28 + return 0;
29 +}
30 +
31 +static void krait_mux_disable(struct clk_hw *hw)
32 +{
33 + struct krait_mux_clk *mux = to_krait_mux_clk(hw);
34 +
35 + __krait_mux_set_sel(mux, mux->safe_sel);
36 +}
37 +
38 const struct clk_ops krait_mux_clk_ops = {
39 + .enable = krait_mux_enable,
40 + .disable = krait_mux_disable,
41 .set_parent = krait_mux_set_parent,
42 .get_parent = krait_mux_get_parent,
43 .determine_rate = __clk_mux_determine_rate_closest,
44 @@ -79,8 +97,13 @@ EXPORT_SYMBOL_GPL(krait_mux_clk_ops);
45 static long krait_div2_round_rate(struct clk_hw *hw, unsigned long rate,
46 unsigned long *parent_rate)
47 {
48 - *parent_rate = clk_hw_round_rate(clk_hw_get_parent(hw), rate * 2);
49 - return DIV_ROUND_UP(*parent_rate, 2);
50 + struct clk_hw *hw_parent = clk_hw_get_parent(hw);
51 +
52 + if (hw_parent) {
53 + *parent_rate = clk_hw_round_rate(hw_parent, rate * 2);
54 + return DIV_ROUND_UP(*parent_rate, 2);
55 + } else
56 + return -1;
57 }
58
59 static int krait_div2_set_rate(struct clk_hw *hw, unsigned long rate,
60 --
61 2.29.2
62