ipq806x: add support for RPM clock controller
[librecmc/librecmc.git] / target / linux / ipq806x / patches-4.4 / 003-mv-cxo-pxo-xo-into-DT.patch
1 From a085f877a882b465fce74188c9d8efd12bd5acd4 Mon Sep 17 00:00:00 2001
2 From: Stephen Boyd <sboyd@codeaurora.org>
3 Date: Mon, 26 Oct 2015 18:10:09 -0700
4 Subject: clk: qcom: Move cxo/pxo/xo into dt files
5
6 Put these clocks into the dt files instead of registering them
7 from C code. This provides a few benefits. It allows us to
8 specify the frequency of these clocks at the board level instead
9 of hard-coding them in the driver. It allows us to insert an RPM
10 clock in between the consumers of the crystals and the actual
11 clock. And finally, it helps us transition the GCC driver to use
12 RPM clocks when that configuration is enabled.
13
14 Cc: Georgi Djakov <georgi.djakov@linaro.org>
15 Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
16 ---
17  drivers/clk/qcom/gcc-apq8084.c | 16 +++++++---------
18  drivers/clk/qcom/gcc-ipq806x.c | 14 ++++++--------
19  drivers/clk/qcom/gcc-msm8660.c | 15 +++++++--------
20  drivers/clk/qcom/gcc-msm8960.c | 14 ++++++--------
21  drivers/clk/qcom/gcc-msm8974.c | 17 +++++++----------
22  5 files changed, 33 insertions(+), 43 deletions(-)
23
24 diff --git a/drivers/clk/qcom/gcc-apq8084.c b/drivers/clk/qcom/gcc-apq8084.c
25 index 1567c3a..070037a 100644
26 --- a/drivers/clk/qcom/gcc-apq8084.c
27 +++ b/drivers/clk/qcom/gcc-apq8084.c
28 @@ -3607,18 +3607,16 @@ MODULE_DEVICE_TABLE(of, gcc_apq8084_match_table);
29  
30  static int gcc_apq8084_probe(struct platform_device *pdev)
31  {
32 -       struct clk *clk;
33 +       int ret;
34         struct device *dev = &pdev->dev;
35  
36 -       /* Temporary until RPM clocks supported */
37 -       clk = clk_register_fixed_rate(dev, "xo", NULL, CLK_IS_ROOT, 19200000);
38 -       if (IS_ERR(clk))
39 -               return PTR_ERR(clk);
40 +       ret = qcom_cc_register_board_clk(dev, "xo_board", "xo", 19200000);
41 +       if (ret)
42 +               return ret;
43  
44 -       clk = clk_register_fixed_rate(dev, "sleep_clk_src", NULL,
45 -                                     CLK_IS_ROOT, 32768);
46 -       if (IS_ERR(clk))
47 -               return PTR_ERR(clk);
48 +       ret = qcom_cc_register_sleep_clk(dev);
49 +       if (ret)
50 +               return ret;
51  
52         return qcom_cc_probe(pdev, &gcc_apq8084_desc);
53  }
54 diff --git a/drivers/clk/qcom/gcc-ipq806x.c b/drivers/clk/qcom/gcc-ipq806x.c
55 index 16fc64c..dd5402b 100644
56 --- a/drivers/clk/qcom/gcc-ipq806x.c
57 +++ b/drivers/clk/qcom/gcc-ipq806x.c
58 @@ -3023,19 +3023,17 @@ MODULE_DEVICE_TABLE(of, gcc_ipq806x_match_table);
59  
60  static int gcc_ipq806x_probe(struct platform_device *pdev)
61  {
62 -       struct clk *clk;
63         struct device *dev = &pdev->dev;
64         struct regmap *regmap;
65         int ret;
66  
67 -       /* Temporary until RPM clocks supported */
68 -       clk = clk_register_fixed_rate(dev, "cxo", NULL, CLK_IS_ROOT, 25000000);
69 -       if (IS_ERR(clk))
70 -               return PTR_ERR(clk);
71 +       ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 25000000);
72 +       if (ret)
73 +               return ret;
74  
75 -       clk = clk_register_fixed_rate(dev, "pxo", NULL, CLK_IS_ROOT, 25000000);
76 -       if (IS_ERR(clk))
77 -               return PTR_ERR(clk);
78 +       ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 25000000);
79 +       if (ret)
80 +               return ret;
81  
82         ret = qcom_cc_probe(pdev, &gcc_ipq806x_desc);
83         if (ret)
84 diff --git a/drivers/clk/qcom/gcc-msm8660.c b/drivers/clk/qcom/gcc-msm8660.c
85 index f110bb5..ad41303 100644
86 --- a/drivers/clk/qcom/gcc-msm8660.c
87 +++ b/drivers/clk/qcom/gcc-msm8660.c
88 @@ -2720,17 +2720,16 @@ MODULE_DEVICE_TABLE(of, gcc_msm8660_match_table);
89  
90  static int gcc_msm8660_probe(struct platform_device *pdev)
91  {
92 -       struct clk *clk;
93 +       int ret;
94         struct device *dev = &pdev->dev;
95  
96 -       /* Temporary until RPM clocks supported */
97 -       clk = clk_register_fixed_rate(dev, "cxo", NULL, CLK_IS_ROOT, 19200000);
98 -       if (IS_ERR(clk))
99 -               return PTR_ERR(clk);
100 +       ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000);
101 +       if (ret)
102 +               return ret;
103  
104 -       clk = clk_register_fixed_rate(dev, "pxo", NULL, CLK_IS_ROOT, 27000000);
105 -       if (IS_ERR(clk))
106 -               return PTR_ERR(clk);
107 +       ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000);
108 +       if (ret)
109 +               return ret;
110  
111         return qcom_cc_probe(pdev, &gcc_msm8660_desc);
112  }
113 diff --git a/drivers/clk/qcom/gcc-msm8960.c b/drivers/clk/qcom/gcc-msm8960.c
114 index 66c18bc..983dd7d 100644
115 --- a/drivers/clk/qcom/gcc-msm8960.c
116 +++ b/drivers/clk/qcom/gcc-msm8960.c
117 @@ -3503,7 +3503,6 @@ MODULE_DEVICE_TABLE(of, gcc_msm8960_match_table);
118  
119  static int gcc_msm8960_probe(struct platform_device *pdev)
120  {
121 -       struct clk *clk;
122         struct device *dev = &pdev->dev;
123         const struct of_device_id *match;
124         struct platform_device *tsens;
125 @@ -3513,14 +3512,13 @@ static int gcc_msm8960_probe(struct platform_device *pdev)
126         if (!match)
127                 return -EINVAL;
128  
129 -       /* Temporary until RPM clocks supported */
130 -       clk = clk_register_fixed_rate(dev, "cxo", NULL, CLK_IS_ROOT, 19200000);
131 -       if (IS_ERR(clk))
132 -               return PTR_ERR(clk);
133 +       ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000);
134 +       if (ret)
135 +               return ret;
136  
137 -       clk = clk_register_fixed_rate(dev, "pxo", NULL, CLK_IS_ROOT, 27000000);
138 -       if (IS_ERR(clk))
139 -               return PTR_ERR(clk);
140 +       ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000);
141 +       if (ret)
142 +               return ret;
143  
144         ret = qcom_cc_probe(pdev, match->data);
145         if (ret)
146 diff --git a/drivers/clk/qcom/gcc-msm8974.c b/drivers/clk/qcom/gcc-msm8974.c
147 index 28abb8f..335952d 100644
148 --- a/drivers/clk/qcom/gcc-msm8974.c
149 +++ b/drivers/clk/qcom/gcc-msm8974.c
150 @@ -2717,7 +2717,7 @@ static void msm8974_pro_clock_override(void)
151  
152  static int gcc_msm8974_probe(struct platform_device *pdev)
153  {
154 -       struct clk *clk;
155 +       int ret;
156         struct device *dev = &pdev->dev;
157         bool pro;
158         const struct of_device_id *id;
159 @@ -2730,16 +2730,13 @@ static int gcc_msm8974_probe(struct platform_device *pdev)
160         if (pro)
161                 msm8974_pro_clock_override();
162  
163 -       /* Temporary until RPM clocks supported */
164 -       clk = clk_register_fixed_rate(dev, "xo", NULL, CLK_IS_ROOT, 19200000);
165 -       if (IS_ERR(clk))
166 -               return PTR_ERR(clk);
167 +       ret = qcom_cc_register_board_clk(dev, "xo_board", "xo", 19200000);
168 +       if (ret)
169 +               return ret;
170  
171 -       /* Should move to DT node? */
172 -       clk = clk_register_fixed_rate(dev, "sleep_clk_src", NULL,
173 -                                     CLK_IS_ROOT, 32768);
174 -       if (IS_ERR(clk))
175 -               return PTR_ERR(clk);
176 +       ret = qcom_cc_register_sleep_clk(dev);
177 +       if (ret)
178 +               return ret;
179  
180         return qcom_cc_probe(pdev, &gcc_msm8974_desc);
181  }
182 -- 
183 cgit v0.12