097-3-clk-qcom-krait-add-missing-enable-disable.patch 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. From f8fdbecdaca97f0f2eebd77256e2eca4a8da6c39 Mon Sep 17 00:00:00 2001
  2. From: Ansuel Smith <[email protected]>
  3. Date: Sun, 7 Feb 2021 17:08:16 +0100
  4. Subject: [PATCH 3/4] clk: qcom: krait: add missing enable disable
  5. Add missing enable disable mux function. Add extra check to
  6. div2_round_rate.
  7. Signed-off-by: Ansuel Smith <[email protected]>
  8. ---
  9. drivers/clk/qcom/clk-krait.c | 27 +++++++++++++++++++++++++--
  10. 1 file changed, 25 insertions(+), 2 deletions(-)
  11. --- a/drivers/clk/qcom/clk-krait.c
  12. +++ b/drivers/clk/qcom/clk-krait.c
  13. @@ -73,7 +73,25 @@ static u8 krait_mux_get_parent(struct cl
  14. return clk_mux_val_to_index(hw, mux->parent_map, 0, sel);
  15. }
  16. +static int krait_mux_enable(struct clk_hw *hw)
  17. +{
  18. + struct krait_mux_clk *mux = to_krait_mux_clk(hw);
  19. +
  20. + __krait_mux_set_sel(mux, mux->en_mask);
  21. +
  22. + return 0;
  23. +}
  24. +
  25. +static void krait_mux_disable(struct clk_hw *hw)
  26. +{
  27. + struct krait_mux_clk *mux = to_krait_mux_clk(hw);
  28. +
  29. + __krait_mux_set_sel(mux, mux->safe_sel);
  30. +}
  31. +
  32. const struct clk_ops krait_mux_clk_ops = {
  33. + .enable = krait_mux_enable,
  34. + .disable = krait_mux_disable,
  35. .set_parent = krait_mux_set_parent,
  36. .get_parent = krait_mux_get_parent,
  37. .determine_rate = __clk_mux_determine_rate_closest,
  38. @@ -84,8 +102,13 @@ EXPORT_SYMBOL_GPL(krait_mux_clk_ops);
  39. static long krait_div2_round_rate(struct clk_hw *hw, unsigned long rate,
  40. unsigned long *parent_rate)
  41. {
  42. - *parent_rate = clk_hw_round_rate(clk_hw_get_parent(hw), rate * 2);
  43. - return DIV_ROUND_UP(*parent_rate, 2);
  44. + struct clk_hw *hw_parent = clk_hw_get_parent(hw);
  45. +
  46. + if (hw_parent) {
  47. + *parent_rate = clk_hw_round_rate(hw_parent, rate * 2);
  48. + return DIV_ROUND_UP(*parent_rate, 2);
  49. + } else
  50. + return -1;
  51. }
  52. static int krait_div2_set_rate(struct clk_hw *hw, unsigned long rate,