aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorgi Djakov <georgi.djakov@linaro.org>2015-03-18 10:08:22 -0400
committerStephen Boyd <sboyd@codeaurora.org>2015-03-23 19:09:22 -0400
commit3966fab8b6abfe0fa55418fb9455c0b05735c1b0 (patch)
tree02f4d48670b00ecf895a0c5c961a6861331241db
parenta5408ec6057e40d56b1c04608f07d21c5163ced0 (diff)
clk: qcom: Add MSM8916 Global Clock Controller support
This patch adds support for the global clock controller found on the MSM8916 based devices. It allows the various device drivers to probe and control their clocks and resets. Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org> [sboyd@codeaurora.org: Removed NULL entry from parent_maps] Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
-rw-r--r--drivers/clk/qcom/Kconfig8
-rw-r--r--drivers/clk/qcom/Makefile1
-rw-r--r--drivers/clk/qcom/gcc-msm8916.c2868
3 files changed, 2877 insertions, 0 deletions
diff --git a/drivers/clk/qcom/Kconfig b/drivers/clk/qcom/Kconfig
index 0d7ab52b7ab0..48d51512d009 100644
--- a/drivers/clk/qcom/Kconfig
+++ b/drivers/clk/qcom/Kconfig
@@ -46,6 +46,14 @@ config MSM_GCC_8660
46 Say Y if you want to use peripheral devices such as UART, SPI, 46 Say Y if you want to use peripheral devices such as UART, SPI,
47 i2c, USB, SD/eMMC, etc. 47 i2c, USB, SD/eMMC, etc.
48 48
49config MSM_GCC_8916
50 tristate "MSM8916 Global Clock Controller"
51 depends on COMMON_CLK_QCOM
52 help
53 Support for the global clock controller on msm8916 devices.
54 Say Y if you want to use devices such as UART, SPI i2c, USB,
55 SD/eMMC, display, graphics, camera etc.
56
49config MSM_GCC_8960 57config MSM_GCC_8960
50 tristate "APQ8064/MSM8960 Global Clock Controller" 58 tristate "APQ8064/MSM8960 Global Clock Controller"
51 depends on COMMON_CLK_QCOM 59 depends on COMMON_CLK_QCOM
diff --git a/drivers/clk/qcom/Makefile b/drivers/clk/qcom/Makefile
index 617826469595..50b337a24a87 100644
--- a/drivers/clk/qcom/Makefile
+++ b/drivers/clk/qcom/Makefile
@@ -15,6 +15,7 @@ obj-$(CONFIG_APQ_MMCC_8084) += mmcc-apq8084.o
15obj-$(CONFIG_IPQ_GCC_806X) += gcc-ipq806x.o 15obj-$(CONFIG_IPQ_GCC_806X) += gcc-ipq806x.o
16obj-$(CONFIG_IPQ_LCC_806X) += lcc-ipq806x.o 16obj-$(CONFIG_IPQ_LCC_806X) += lcc-ipq806x.o
17obj-$(CONFIG_MSM_GCC_8660) += gcc-msm8660.o 17obj-$(CONFIG_MSM_GCC_8660) += gcc-msm8660.o
18obj-$(CONFIG_MSM_GCC_8916) += gcc-msm8916.o
18obj-$(CONFIG_MSM_GCC_8960) += gcc-msm8960.o 19obj-$(CONFIG_MSM_GCC_8960) += gcc-msm8960.o
19obj-$(CONFIG_MSM_LCC_8960) += lcc-msm8960.o 20obj-$(CONFIG_MSM_LCC_8960) += lcc-msm8960.o
20obj-$(CONFIG_MSM_GCC_8974) += gcc-msm8974.o 21obj-$(CONFIG_MSM_GCC_8974) += gcc-msm8974.o
diff --git a/drivers/clk/qcom/gcc-msm8916.c b/drivers/clk/qcom/gcc-msm8916.c
new file mode 100644
index 000000000000..d3458474eb3a
--- /dev/null
+++ b/drivers/clk/qcom/gcc-msm8916.c
@@ -0,0 +1,2868 @@
1/*
2 * Copyright 2015 Linaro Limited
3 *
4 * This software is licensed under the terms of the GNU General Public
5 * License version 2, as published by the Free Software Foundation, and
6 * may be copied, distributed, and modified under those terms.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#include <linux/kernel.h>
15#include <linux/bitops.h>
16#include <linux/err.h>
17#include <linux/platform_device.h>
18#include <linux/module.h>
19#include <linux/of.h>
20#include <linux/of_device.h>
21#include <linux/clk-provider.h>
22#include <linux/regmap.h>
23#include <linux/reset-controller.h>
24
25#include <dt-bindings/clock/qcom,gcc-msm8916.h>
26#include <dt-bindings/reset/qcom,gcc-msm8916.h>
27
28#include "common.h"
29#include "clk-regmap.h"
30#include "clk-pll.h"
31#include "clk-rcg.h"
32#include "clk-branch.h"
33#include "reset.h"
34
35enum {
36 P_XO,
37 P_GPLL0,
38 P_GPLL0_AUX,
39 P_BIMC,
40 P_GPLL1,
41 P_GPLL1_AUX,
42 P_GPLL2,
43 P_GPLL2_AUX,
44 P_SLEEP_CLK,
45 P_DSI0_PHYPLL_BYTE,
46 P_DSI0_PHYPLL_DSI,
47};
48
49static const struct parent_map gcc_xo_gpll0_map[] = {
50 { P_XO, 0 },
51 { P_GPLL0, 1 },
52};
53
54static const char *gcc_xo_gpll0[] = {
55 "xo",
56 "gpll0_vote",
57};
58
59static const struct parent_map gcc_xo_gpll0_bimc_map[] = {
60 { P_XO, 0 },
61 { P_GPLL0, 1 },
62 { P_BIMC, 2 },
63};
64
65static const char *gcc_xo_gpll0_bimc[] = {
66 "xo",
67 "gpll0_vote",
68 "bimc_pll_vote",
69};
70
71static const struct parent_map gcc_xo_gpll0a_gpll1_gpll2a_map[] = {
72 { P_XO, 0 },
73 { P_GPLL0_AUX, 3 },
74 { P_GPLL2_AUX, 2 },
75 { P_GPLL1, 1 },
76};
77
78static const char *gcc_xo_gpll0a_gpll1_gpll2a[] = {
79 "xo",
80 "gpll0_vote",
81 "gpll1_vote",
82 "gpll2_vote",
83};
84
85static const struct parent_map gcc_xo_gpll0_gpll2_map[] = {
86 { P_XO, 0 },
87 { P_GPLL0, 1 },
88 { P_GPLL2, 2 },
89};
90
91static const char *gcc_xo_gpll0_gpll2[] = {
92 "xo",
93 "gpll0_vote",
94 "gpll2_vote",
95};
96
97static const struct parent_map gcc_xo_gpll0a_map[] = {
98 { P_XO, 0 },
99 { P_GPLL0_AUX, 2 },
100};
101
102static const char *gcc_xo_gpll0a[] = {
103 "xo",
104 "gpll0_vote",
105};
106
107static const struct parent_map gcc_xo_gpll0_gpll1a_sleep_map[] = {
108 { P_XO, 0 },
109 { P_GPLL0, 1 },
110 { P_GPLL1_AUX, 2 },
111 { P_SLEEP_CLK, 6 },
112};
113
114static const char *gcc_xo_gpll0_gpll1a_sleep[] = {
115 "xo",
116 "gpll0_vote",
117 "gpll1_vote",
118 "sleep_clk",
119};
120
121static const struct parent_map gcc_xo_gpll0_gpll1a_map[] = {
122 { P_XO, 0 },
123 { P_GPLL0, 1 },
124 { P_GPLL1_AUX, 2 },
125};
126
127static const char *gcc_xo_gpll0_gpll1a[] = {
128 "xo",
129 "gpll0_vote",
130 "gpll1_vote",
131};
132
133static const struct parent_map gcc_xo_dsibyte_map[] = {
134 { P_XO, 0, },
135 { P_DSI0_PHYPLL_BYTE, 2 },
136};
137
138static const char *gcc_xo_dsibyte[] = {
139 "xo",
140 "dsi0pllbyte",
141};
142
143static const struct parent_map gcc_xo_gpll0a_dsibyte_map[] = {
144 { P_XO, 0 },
145 { P_GPLL0_AUX, 2 },
146 { P_DSI0_PHYPLL_BYTE, 1 },
147};
148
149static const char *gcc_xo_gpll0a_dsibyte[] = {
150 "xo",
151 "gpll0_vote",
152 "dsi0pllbyte",
153};
154
155static const struct parent_map gcc_xo_gpll0_dsiphy_map[] = {
156 { P_XO, 0 },
157 { P_GPLL0, 1 },
158 { P_DSI0_PHYPLL_DSI, 2 },
159};
160
161static const char *gcc_xo_gpll0_dsiphy[] = {
162 "xo",
163 "gpll0_vote",
164 "dsi0pll",
165};
166
167static const struct parent_map gcc_xo_gpll0a_dsiphy_map[] = {
168 { P_XO, 0 },
169 { P_GPLL0_AUX, 2 },
170 { P_DSI0_PHYPLL_DSI, 1 },
171};
172
173static const char *gcc_xo_gpll0a_dsiphy[] = {
174 "xo",
175 "gpll0_vote",
176 "dsi0pll",
177};
178
179static const struct parent_map gcc_xo_gpll0a_gpll1_gpll2_map[] = {
180 { P_XO, 0 },
181 { P_GPLL0_AUX, 1 },
182 { P_GPLL1, 3 },
183 { P_GPLL2, 2 },
184};
185
186static const char *gcc_xo_gpll0a_gpll1_gpll2[] = {
187 "xo",
188 "gpll0_vote",
189 "gpll1_vote",
190 "gpll2_vote",
191};
192
193#define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
194
195static struct clk_pll gpll0 = {
196 .l_reg = 0x21004,
197 .m_reg = 0x21008,
198 .n_reg = 0x2100c,
199 .config_reg = 0x21014,
200 .mode_reg = 0x21000,
201 .status_reg = 0x2101c,
202 .status_bit = 17,
203 .clkr.hw.init = &(struct clk_init_data){
204 .name = "gpll0",
205 .parent_names = (const char *[]){ "xo" },
206 .num_parents = 1,
207 .ops = &clk_pll_ops,
208 },
209};
210
211static struct clk_regmap gpll0_vote = {
212 .enable_reg = 0x45000,
213 .enable_mask = BIT(0),
214 .hw.init = &(struct clk_init_data){
215 .name = "gpll0_vote",
216 .parent_names = (const char *[]){ "gpll0" },
217 .num_parents = 1,
218 .ops = &clk_pll_vote_ops,
219 },
220};
221
222static struct clk_pll gpll1 = {
223 .l_reg = 0x20004,
224 .m_reg = 0x20008,
225 .n_reg = 0x2000c,
226 .config_reg = 0x20014,
227 .mode_reg = 0x20000,
228 .status_reg = 0x2001c,
229 .status_bit = 17,
230 .clkr.hw.init = &(struct clk_init_data){
231 .name = "gpll1",
232 .parent_names = (const char *[]){ "xo" },
233 .num_parents = 1,
234 .ops = &clk_pll_ops,
235 },
236};
237
238static struct clk_regmap gpll1_vote = {
239 .enable_reg = 0x45000,
240 .enable_mask = BIT(1),
241 .hw.init = &(struct clk_init_data){
242 .name = "gpll1_vote",
243 .parent_names = (const char *[]){ "gpll1" },
244 .num_parents = 1,
245 .ops = &clk_pll_vote_ops,
246 },
247};
248
249static struct clk_pll gpll2 = {
250 .l_reg = 0x4a004,
251 .m_reg = 0x4a008,
252 .n_reg = 0x4a00c,
253 .config_reg = 0x4a014,
254 .mode_reg = 0x4a000,
255 .status_reg = 0x4a01c,
256 .status_bit = 17,
257 .clkr.hw.init = &(struct clk_init_data){
258 .name = "gpll2",
259 .parent_names = (const char *[]){ "xo" },
260 .num_parents = 1,
261 .ops = &clk_pll_ops,
262 },
263};
264
265static struct clk_regmap gpll2_vote = {
266 .enable_reg = 0x45000,
267 .enable_mask = BIT(2),
268 .hw.init = &(struct clk_init_data){
269 .name = "gpll2_vote",
270 .parent_names = (const char *[]){ "gpll2" },
271 .num_parents = 1,
272 .ops = &clk_pll_vote_ops,
273 },
274};
275
276static struct clk_pll bimc_pll = {
277 .l_reg = 0x23004,
278 .m_reg = 0x23008,
279 .n_reg = 0x2300c,
280 .config_reg = 0x23014,
281 .mode_reg = 0x23000,
282 .status_reg = 0x2301c,
283 .status_bit = 17,
284 .clkr.hw.init = &(struct clk_init_data){
285 .name = "bimc_pll",
286 .parent_names = (const char *[]){ "xo" },
287 .num_parents = 1,
288 .ops = &clk_pll_ops,
289 },
290};
291
292static struct clk_regmap bimc_pll_vote = {
293 .enable_reg = 0x45000,
294 .enable_mask = BIT(3),
295 .hw.init = &(struct clk_init_data){
296 .name = "bimc_pll_vote",
297 .parent_names = (const char *[]){ "bimc_pll" },
298 .num_parents = 1,
299 .ops = &clk_pll_vote_ops,
300 },
301};
302
303static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
304 .cmd_rcgr = 0x27000,
305 .hid_width = 5,
306 .parent_map = gcc_xo_gpll0_bimc_map,
307 .clkr.hw.init = &(struct clk_init_data){
308 .name = "pcnoc_bfdcd_clk_src",
309 .parent_names = gcc_xo_gpll0_bimc,
310 .num_parents = 3,
311 .ops = &clk_rcg2_ops,
312 },
313};
314
315static struct clk_rcg2 system_noc_bfdcd_clk_src = {
316 .cmd_rcgr = 0x26004,
317 .hid_width = 5,
318 .parent_map = gcc_xo_gpll0_bimc_map,
319 .clkr.hw.init = &(struct clk_init_data){
320 .name = "system_noc_bfdcd_clk_src",
321 .parent_names = gcc_xo_gpll0_bimc,
322 .num_parents = 3,
323 .ops = &clk_rcg2_ops,
324 },
325};
326
327static const struct freq_tbl ftbl_gcc_camss_ahb_clk[] = {
328 F(40000000, P_GPLL0, 10, 1, 2),
329 F(80000000, P_GPLL0, 10, 0, 0),
330 { }
331};
332
333static struct clk_rcg2 camss_ahb_clk_src = {
334 .cmd_rcgr = 0x5a000,
335 .mnd_width = 8,
336 .hid_width = 5,
337 .parent_map = gcc_xo_gpll0_map,
338 .freq_tbl = ftbl_gcc_camss_ahb_clk,
339 .clkr.hw.init = &(struct clk_init_data){
340 .name = "camss_ahb_clk_src",
341 .parent_names = gcc_xo_gpll0,
342 .num_parents = 2,
343 .ops = &clk_rcg2_ops,
344 },
345};
346
347static const struct freq_tbl ftbl_apss_ahb_clk[] = {
348 F(19200000, P_XO, 1, 0, 0),
349 F(50000000, P_GPLL0, 16, 0, 0),
350 F(100000000, P_GPLL0, 8, 0, 0),
351 F(133330000, P_GPLL0, 6, 0, 0),
352 { }
353};
354
355static struct clk_rcg2 apss_ahb_clk_src = {
356 .cmd_rcgr = 0x46000,
357 .hid_width = 5,
358 .parent_map = gcc_xo_gpll0_map,
359 .freq_tbl = ftbl_apss_ahb_clk,
360 .clkr.hw.init = &(struct clk_init_data){
361 .name = "apss_ahb_clk_src",
362 .parent_names = gcc_xo_gpll0,
363 .num_parents = 2,
364 .ops = &clk_rcg2_ops,
365 },
366};
367
368static const struct freq_tbl ftbl_gcc_camss_csi0_1_clk[] = {
369 F(100000000, P_GPLL0, 8, 0, 0),
370 F(200000000, P_GPLL0, 4, 0, 0),
371 { }
372};
373
374static struct clk_rcg2 csi0_clk_src = {
375 .cmd_rcgr = 0x4e020,
376 .hid_width = 5,
377 .parent_map = gcc_xo_gpll0_map,
378 .freq_tbl = ftbl_gcc_camss_csi0_1_clk,
379 .clkr.hw.init = &(struct clk_init_data){
380 .name = "csi0_clk_src",
381 .parent_names = gcc_xo_gpll0,
382 .num_parents = 2,
383 .ops = &clk_rcg2_ops,
384 },
385};
386
387static struct clk_rcg2 csi1_clk_src = {
388 .cmd_rcgr = 0x4f020,
389 .hid_width = 5,
390 .parent_map = gcc_xo_gpll0_map,
391 .freq_tbl = ftbl_gcc_camss_csi0_1_clk,
392 .clkr.hw.init = &(struct clk_init_data){
393 .name = "csi1_clk_src",
394 .parent_names = gcc_xo_gpll0,
395 .num_parents = 2,
396 .ops = &clk_rcg2_ops,
397 },
398};
399
400static const struct freq_tbl ftbl_gcc_oxili_gfx3d_clk[] = {
401 F(19200000, P_XO, 1, 0, 0),
402 F(50000000, P_GPLL0_AUX, 16, 0, 0),
403 F(80000000, P_GPLL0_AUX, 10, 0, 0),
404 F(100000000, P_GPLL0_AUX, 8, 0, 0),
405 F(160000000, P_GPLL0_AUX, 5, 0, 0),
406 F(177780000, P_GPLL0_AUX, 4.5, 0, 0),
407 F(200000000, P_GPLL0_AUX, 4, 0, 0),
408 F(266670000, P_GPLL0_AUX, 3, 0, 0),
409 F(294912000, P_GPLL1, 3, 0, 0),
410 F(310000000, P_GPLL2, 3, 0, 0),
411 F(400000000, P_GPLL0_AUX, 2, 0, 0),
412 { }
413};
414
415static struct clk_rcg2 gfx3d_clk_src = {
416 .cmd_rcgr = 0x59000,
417 .hid_width = 5,
418 .parent_map = gcc_xo_gpll0a_gpll1_gpll2a_map,
419 .freq_tbl = ftbl_gcc_oxili_gfx3d_clk,
420 .clkr.hw.init = &(struct clk_init_data){
421 .name = "gfx3d_clk_src",
422 .parent_names = gcc_xo_gpll0a_gpll1_gpll2a,
423 .num_parents = 4,
424 .ops = &clk_rcg2_ops,
425 },
426};
427
428static const struct freq_tbl ftbl_gcc_camss_vfe0_clk[] = {
429 F(50000000, P_GPLL0, 16, 0, 0),
430 F(80000000, P_GPLL0, 10, 0, 0),
431 F(100000000, P_GPLL0, 8, 0, 0),
432 F(160000000, P_GPLL0, 5, 0, 0),
433 F(177780000, P_GPLL0, 4.5, 0, 0),
434 F(200000000, P_GPLL0, 4, 0, 0),
435 F(266670000, P_GPLL0, 3, 0, 0),
436 F(320000000, P_GPLL0, 2.5, 0, 0),
437 F(400000000, P_GPLL0, 2, 0, 0),
438 F(465000000, P_GPLL2, 2, 0, 0),
439 { }
440};
441
442static struct clk_rcg2 vfe0_clk_src = {
443 .cmd_rcgr = 0x58000,
444 .hid_width = 5,
445 .parent_map = gcc_xo_gpll0_gpll2_map,
446 .freq_tbl = ftbl_gcc_camss_vfe0_clk,
447 .clkr.hw.init = &(struct clk_init_data){
448 .name = "vfe0_clk_src",
449 .parent_names = gcc_xo_gpll0_gpll2,
450 .num_parents = 3,
451 .ops = &clk_rcg2_ops,
452 },
453};
454
455static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_i2c_apps_clk[] = {
456 F(19200000, P_XO, 1, 0, 0),
457 F(50000000, P_GPLL0, 16, 0, 0),
458 { }
459};
460
461static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
462 .cmd_rcgr = 0x0200c,
463 .hid_width = 5,
464 .parent_map = gcc_xo_gpll0_map,
465 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
466 .clkr.hw.init = &(struct clk_init_data){
467 .name = "blsp1_qup1_i2c_apps_clk_src",
468 .parent_names = gcc_xo_gpll0,
469 .num_parents = 2,
470 .ops = &clk_rcg2_ops,
471 },
472};
473
474static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_spi_apps_clk[] = {
475 F(960000, P_XO, 10, 1, 2),
476 F(4800000, P_XO, 4, 0, 0),
477 F(9600000, P_XO, 2, 0, 0),
478 F(16000000, P_GPLL0, 10, 1, 5),
479 F(19200000, P_XO, 1, 0, 0),
480 F(25000000, P_GPLL0, 16, 1, 2),
481 F(50000000, P_GPLL0, 16, 0, 0),
482 { }
483};
484
485static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
486 .cmd_rcgr = 0x02024,
487 .mnd_width = 8,
488 .hid_width = 5,
489 .parent_map = gcc_xo_gpll0_map,
490 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
491 .clkr.hw.init = &(struct clk_init_data){
492 .name = "blsp1_qup1_spi_apps_clk_src",
493 .parent_names = gcc_xo_gpll0,
494 .num_parents = 2,
495 .ops = &clk_rcg2_ops,
496 },
497};
498
499static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
500 .cmd_rcgr = 0x03000,
501 .hid_width = 5,
502 .parent_map = gcc_xo_gpll0_map,
503 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
504 .clkr.hw.init = &(struct clk_init_data){
505 .name = "blsp1_qup2_i2c_apps_clk_src",
506 .parent_names = gcc_xo_gpll0,
507 .num_parents = 2,
508 .ops = &clk_rcg2_ops,
509 },
510};
511
512static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
513 .cmd_rcgr = 0x03014,
514 .mnd_width = 8,
515 .hid_width = 5,
516 .parent_map = gcc_xo_gpll0_map,
517 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
518 .clkr.hw.init = &(struct clk_init_data){
519 .name = "blsp1_qup2_spi_apps_clk_src",
520 .parent_names = gcc_xo_gpll0,
521 .num_parents = 2,
522 .ops = &clk_rcg2_ops,
523 },
524};
525
526static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
527 .cmd_rcgr = 0x04000,
528 .hid_width = 5,
529 .parent_map = gcc_xo_gpll0_map,
530 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
531 .clkr.hw.init = &(struct clk_init_data){
532 .name = "blsp1_qup3_i2c_apps_clk_src",
533 .parent_names = gcc_xo_gpll0,
534 .num_parents = 2,
535 .ops = &clk_rcg2_ops,
536 },
537};
538
539static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
540 .cmd_rcgr = 0x04024,
541 .mnd_width = 8,
542 .hid_width = 5,
543 .parent_map = gcc_xo_gpll0_map,
544 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
545 .clkr.hw.init = &(struct clk_init_data){
546 .name = "blsp1_qup3_spi_apps_clk_src",
547 .parent_names = gcc_xo_gpll0,
548 .num_parents = 2,
549 .ops = &clk_rcg2_ops,
550 },
551};
552
553static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
554 .cmd_rcgr = 0x05000,
555 .hid_width = 5,
556 .parent_map = gcc_xo_gpll0_map,
557 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
558 .clkr.hw.init = &(struct clk_init_data){
559 .name = "blsp1_qup4_i2c_apps_clk_src",
560 .parent_names = gcc_xo_gpll0,
561 .num_parents = 2,
562 .ops = &clk_rcg2_ops,
563 },
564};
565
566static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
567 .cmd_rcgr = 0x05024,
568 .mnd_width = 8,
569 .hid_width = 5,
570 .parent_map = gcc_xo_gpll0_map,
571 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
572 .clkr.hw.init = &(struct clk_init_data){
573 .name = "blsp1_qup4_spi_apps_clk_src",
574 .parent_names = gcc_xo_gpll0,
575 .num_parents = 2,
576 .ops = &clk_rcg2_ops,
577 },
578};
579
580static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
581 .cmd_rcgr = 0x06000,
582 .hid_width = 5,
583 .parent_map = gcc_xo_gpll0_map,
584 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
585 .clkr.hw.init = &(struct clk_init_data){
586 .name = "blsp1_qup5_i2c_apps_clk_src",
587 .parent_names = gcc_xo_gpll0,
588 .num_parents = 2,
589 .ops = &clk_rcg2_ops,
590 },
591};
592
593static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
594 .cmd_rcgr = 0x06024,
595 .mnd_width = 8,
596 .hid_width = 5,
597 .parent_map = gcc_xo_gpll0_map,
598 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
599 .clkr.hw.init = &(struct clk_init_data){
600 .name = "blsp1_qup5_spi_apps_clk_src",
601 .parent_names = gcc_xo_gpll0,
602 .num_parents = 2,
603 .ops = &clk_rcg2_ops,
604 },
605};
606
607static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
608 .cmd_rcgr = 0x07000,
609 .hid_width = 5,
610 .parent_map = gcc_xo_gpll0_map,
611 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
612 .clkr.hw.init = &(struct clk_init_data){
613 .name = "blsp1_qup6_i2c_apps_clk_src",
614 .parent_names = gcc_xo_gpll0,
615 .num_parents = 2,
616 .ops = &clk_rcg2_ops,
617 },
618};
619
620static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
621 .cmd_rcgr = 0x07024,
622 .mnd_width = 8,
623 .hid_width = 5,
624 .parent_map = gcc_xo_gpll0_map,
625 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
626 .clkr.hw.init = &(struct clk_init_data){
627 .name = "blsp1_qup6_spi_apps_clk_src",
628 .parent_names = gcc_xo_gpll0,
629 .num_parents = 2,
630 .ops = &clk_rcg2_ops,
631 },
632};
633
634static const struct freq_tbl ftbl_gcc_blsp1_uart1_6_apps_clk[] = {
635 F(3686400, P_GPLL0, 1, 72, 15625),
636 F(7372800, P_GPLL0, 1, 144, 15625),
637 F(14745600, P_GPLL0, 1, 288, 15625),
638 F(16000000, P_GPLL0, 10, 1, 5),
639 F(19200000, P_XO, 1, 0, 0),
640 F(24000000, P_GPLL0, 1, 3, 100),
641 F(25000000, P_GPLL0, 16, 1, 2),
642 F(32000000, P_GPLL0, 1, 1, 25),
643 F(40000000, P_GPLL0, 1, 1, 20),
644 F(46400000, P_GPLL0, 1, 29, 500),
645 F(48000000, P_GPLL0, 1, 3, 50),
646 F(51200000, P_GPLL0, 1, 8, 125),
647 F(56000000, P_GPLL0, 1, 7, 100),
648 F(58982400, P_GPLL0, 1, 1152, 15625),
649 F(60000000, P_GPLL0, 1, 3, 40),
650 { }
651};
652
653static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
654 .cmd_rcgr = 0x02044,
655 .mnd_width = 16,
656 .hid_width = 5,
657 .parent_map = gcc_xo_gpll0_map,
658 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
659 .clkr.hw.init = &(struct clk_init_data){
660 .name = "blsp1_uart1_apps_clk_src",
661 .parent_names = gcc_xo_gpll0,
662 .num_parents = 2,
663 .ops = &clk_rcg2_ops,
664 },
665};
666
667static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
668 .cmd_rcgr = 0x03034,
669 .mnd_width = 16,
670 .hid_width = 5,
671 .parent_map = gcc_xo_gpll0_map,
672 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
673 .clkr.hw.init = &(struct clk_init_data){
674 .name = "blsp1_uart2_apps_clk_src",
675 .parent_names = gcc_xo_gpll0,
676 .num_parents = 2,
677 .ops = &clk_rcg2_ops,
678 },
679};
680
681static const struct freq_tbl ftbl_gcc_camss_cci_clk[] = {
682 F(19200000, P_XO, 1, 0, 0),
683 { }
684};
685
686static struct clk_rcg2 cci_clk_src = {
687 .cmd_rcgr = 0x51000,
688 .mnd_width = 8,
689 .hid_width = 5,
690 .parent_map = gcc_xo_gpll0a_map,
691 .freq_tbl = ftbl_gcc_camss_cci_clk,
692 .clkr.hw.init = &(struct clk_init_data){
693 .name = "cci_clk_src",
694 .parent_names = gcc_xo_gpll0a,
695 .num_parents = 2,
696 .ops = &clk_rcg2_ops,
697 },
698};
699
700static const struct freq_tbl ftbl_gcc_camss_gp0_1_clk[] = {
701 F(100000000, P_GPLL0, 8, 0, 0),
702 F(200000000, P_GPLL0, 4, 0, 0),
703 { }
704};
705
706static struct clk_rcg2 camss_gp0_clk_src = {
707 .cmd_rcgr = 0x54000,
708 .mnd_width = 8,
709 .hid_width = 5,
710 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
711 .freq_tbl = ftbl_gcc_camss_gp0_1_clk,
712 .clkr.hw.init = &(struct clk_init_data){
713 .name = "camss_gp0_clk_src",
714 .parent_names = gcc_xo_gpll0_gpll1a_sleep,
715 .num_parents = 4,
716 .ops = &clk_rcg2_ops,
717 },
718};
719
720static struct clk_rcg2 camss_gp1_clk_src = {
721 .cmd_rcgr = 0x55000,
722 .mnd_width = 8,
723 .hid_width = 5,
724 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
725 .freq_tbl = ftbl_gcc_camss_gp0_1_clk,
726 .clkr.hw.init = &(struct clk_init_data){
727 .name = "camss_gp1_clk_src",
728 .parent_names = gcc_xo_gpll0_gpll1a_sleep,
729 .num_parents = 4,
730 .ops = &clk_rcg2_ops,
731 },
732};
733
734static const struct freq_tbl ftbl_gcc_camss_jpeg0_clk[] = {
735 F(133330000, P_GPLL0, 6, 0, 0),
736 F(266670000, P_GPLL0, 3, 0, 0),
737 F(320000000, P_GPLL0, 2.5, 0, 0),
738 { }
739};
740
741static struct clk_rcg2 jpeg0_clk_src = {
742 .cmd_rcgr = 0x57000,
743 .hid_width = 5,
744 .parent_map = gcc_xo_gpll0_map,
745 .freq_tbl = ftbl_gcc_camss_jpeg0_clk,
746 .clkr.hw.init = &(struct clk_init_data){
747 .name = "jpeg0_clk_src",
748 .parent_names = gcc_xo_gpll0,
749 .num_parents = 2,
750 .ops = &clk_rcg2_ops,
751 },
752};
753
754static const struct freq_tbl ftbl_gcc_camss_mclk0_1_clk[] = {
755 F(9600000, P_XO, 2, 0, 0),
756 F(23880000, P_GPLL0, 1, 2, 67),
757 F(66670000, P_GPLL0, 12, 0, 0),
758 { }
759};
760
761static struct clk_rcg2 mclk0_clk_src = {
762 .cmd_rcgr = 0x52000,
763 .mnd_width = 8,
764 .hid_width = 5,
765 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
766 .freq_tbl = ftbl_gcc_camss_mclk0_1_clk,
767 .clkr.hw.init = &(struct clk_init_data){
768 .name = "mclk0_clk_src",
769 .parent_names = gcc_xo_gpll0_gpll1a_sleep,
770 .num_parents = 4,
771 .ops = &clk_rcg2_ops,
772 },
773};
774
775static struct clk_rcg2 mclk1_clk_src = {
776 .cmd_rcgr = 0x53000,
777 .mnd_width = 8,
778 .hid_width = 5,
779 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
780 .freq_tbl = ftbl_gcc_camss_mclk0_1_clk,
781 .clkr.hw.init = &(struct clk_init_data){
782 .name = "mclk1_clk_src",
783 .parent_names = gcc_xo_gpll0_gpll1a_sleep,
784 .num_parents = 4,
785 .ops = &clk_rcg2_ops,
786 },
787};
788
789static const struct freq_tbl ftbl_gcc_camss_csi0_1phytimer_clk[] = {
790 F(100000000, P_GPLL0, 8, 0, 0),
791 F(200000000, P_GPLL0, 4, 0, 0),
792 { }
793};
794
795static struct clk_rcg2 csi0phytimer_clk_src = {
796 .cmd_rcgr = 0x4e000,
797 .hid_width = 5,
798 .parent_map = gcc_xo_gpll0_gpll1a_map,
799 .freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk,
800 .clkr.hw.init = &(struct clk_init_data){
801 .name = "csi0phytimer_clk_src",
802 .parent_names = gcc_xo_gpll0_gpll1a,
803 .num_parents = 3,
804 .ops = &clk_rcg2_ops,
805 },
806};
807
808static struct clk_rcg2 csi1phytimer_clk_src = {
809 .cmd_rcgr = 0x4f000,
810 .hid_width = 5,
811 .parent_map = gcc_xo_gpll0_gpll1a_map,
812 .freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk,
813 .clkr.hw.init = &(struct clk_init_data){
814 .name = "csi1phytimer_clk_src",
815 .parent_names = gcc_xo_gpll0_gpll1a,
816 .num_parents = 3,
817 .ops = &clk_rcg2_ops,
818 },
819};
820
821static const struct freq_tbl ftbl_gcc_camss_cpp_clk[] = {
822 F(160000000, P_GPLL0, 5, 0, 0),
823 F(320000000, P_GPLL0, 2.5, 0, 0),
824 F(465000000, P_GPLL2, 2, 0, 0),
825 { }
826};
827
828static struct clk_rcg2 cpp_clk_src = {
829 .cmd_rcgr = 0x58018,
830 .hid_width = 5,
831 .parent_map = gcc_xo_gpll0_gpll2_map,
832 .freq_tbl = ftbl_gcc_camss_cpp_clk,
833 .clkr.hw.init = &(struct clk_init_data){
834 .name = "cpp_clk_src",
835 .parent_names = gcc_xo_gpll0_gpll2,
836 .num_parents = 3,
837 .ops = &clk_rcg2_ops,
838 },
839};
840
841static const struct freq_tbl ftbl_gcc_crypto_clk[] = {
842 F(50000000, P_GPLL0, 16, 0, 0),
843 F(80000000, P_GPLL0, 10, 0, 0),
844 F(100000000, P_GPLL0, 8, 0, 0),
845 F(160000000, P_GPLL0, 5, 0, 0),
846 { }
847};
848
849static struct clk_rcg2 crypto_clk_src = {
850 .cmd_rcgr = 0x16004,
851 .hid_width = 5,
852 .parent_map = gcc_xo_gpll0_map,
853 .freq_tbl = ftbl_gcc_crypto_clk,
854 .clkr.hw.init = &(struct clk_init_data){
855 .name = "crypto_clk_src",
856 .parent_names = gcc_xo_gpll0,
857 .num_parents = 2,
858 .ops = &clk_rcg2_ops,
859 },
860};
861
862static const struct freq_tbl ftbl_gcc_gp1_3_clk[] = {
863 F(19200000, P_XO, 1, 0, 0),
864 { }
865};
866
867static struct clk_rcg2 gp1_clk_src = {
868 .cmd_rcgr = 0x08004,
869 .mnd_width = 8,
870 .hid_width = 5,
871 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
872 .freq_tbl = ftbl_gcc_gp1_3_clk,
873 .clkr.hw.init = &(struct clk_init_data){
874 .name = "gp1_clk_src",
875 .parent_names = gcc_xo_gpll0_gpll1a_sleep,
876 .num_parents = 3,
877 .ops = &clk_rcg2_ops,
878 },
879};
880
881static struct clk_rcg2 gp2_clk_src = {
882 .cmd_rcgr = 0x09004,
883 .mnd_width = 8,
884 .hid_width = 5,
885 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
886 .freq_tbl = ftbl_gcc_gp1_3_clk,
887 .clkr.hw.init = &(struct clk_init_data){
888 .name = "gp2_clk_src",
889 .parent_names = gcc_xo_gpll0_gpll1a_sleep,
890 .num_parents = 3,
891 .ops = &clk_rcg2_ops,
892 },
893};
894
895static struct clk_rcg2 gp3_clk_src = {
896 .cmd_rcgr = 0x0a004,
897 .mnd_width = 8,
898 .hid_width = 5,
899 .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
900 .freq_tbl = ftbl_gcc_gp1_3_clk,
901 .clkr.hw.init = &(struct clk_init_data){
902 .name = "gp3_clk_src",
903 .parent_names = gcc_xo_gpll0_gpll1a_sleep,
904 .num_parents = 3,
905 .ops = &clk_rcg2_ops,
906 },
907};
908
909static struct freq_tbl ftbl_gcc_mdss_byte0_clk[] = {
910 { .src = P_DSI0_PHYPLL_BYTE },
911 { }
912};
913
914static struct clk_rcg2 byte0_clk_src = {
915 .cmd_rcgr = 0x4d044,
916 .hid_width = 5,
917 .parent_map = gcc_xo_gpll0a_dsibyte_map,
918 .freq_tbl = ftbl_gcc_mdss_byte0_clk,
919 .clkr.hw.init = &(struct clk_init_data){
920 .name = "byte0_clk_src",
921 .parent_names = gcc_xo_gpll0a_dsibyte,
922 .num_parents = 3,
923 .ops = &clk_byte_ops,
924 .flags = CLK_SET_RATE_PARENT,
925 },
926};
927
928static const struct freq_tbl ftbl_gcc_mdss_esc0_clk[] = {
929 F(19200000, P_XO, 1, 0, 0),
930 { }
931};
932
933static struct clk_rcg2 esc0_clk_src = {
934 .cmd_rcgr = 0x4d05c,
935 .hid_width = 5,
936 .parent_map = gcc_xo_dsibyte_map,
937 .freq_tbl = ftbl_gcc_mdss_esc0_clk,
938 .clkr.hw.init = &(struct clk_init_data){
939 .name = "esc0_clk_src",
940 .parent_names = gcc_xo_dsibyte,
941 .num_parents = 2,
942 .ops = &clk_rcg2_ops,
943 },
944};
945
946static const struct freq_tbl ftbl_gcc_mdss_mdp_clk[] = {
947 F(50000000, P_GPLL0, 16, 0, 0),
948 F(80000000, P_GPLL0, 10, 0, 0),
949 F(100000000, P_GPLL0, 8, 0, 0),
950 F(160000000, P_GPLL0, 5, 0, 0),
951 F(177780000, P_GPLL0, 4.5, 0, 0),
952 F(200000000, P_GPLL0, 4, 0, 0),
953 F(266670000, P_GPLL0, 3, 0, 0),
954 F(320000000, P_GPLL0, 2.5, 0, 0),
955 { }
956};
957
958static struct clk_rcg2 mdp_clk_src = {
959 .cmd_rcgr = 0x4d014,
960 .hid_width = 5,
961 .parent_map = gcc_xo_gpll0_dsiphy_map,
962 .freq_tbl = ftbl_gcc_mdss_mdp_clk,
963 .clkr.hw.init = &(struct clk_init_data){
964 .name = "mdp_clk_src",
965 .parent_names = gcc_xo_gpll0_dsiphy,
966 .num_parents = 3,
967 .ops = &clk_rcg2_ops,
968 },
969};
970
971static struct freq_tbl ftbl_gcc_mdss_pclk[] = {
972 { .src = P_DSI0_PHYPLL_DSI },
973 { }
974};
975
976static struct clk_rcg2 pclk0_clk_src = {
977 .cmd_rcgr = 0x4d000,
978 .mnd_width = 8,
979 .hid_width = 5,
980 .parent_map = gcc_xo_gpll0a_dsiphy_map,
981 .freq_tbl = ftbl_gcc_mdss_pclk,
982 .clkr.hw.init = &(struct clk_init_data){
983 .name = "pclk0_clk_src",
984 .parent_names = gcc_xo_gpll0a_dsiphy,
985 .num_parents = 3,
986 .ops = &clk_pixel_ops,
987 .flags = CLK_SET_RATE_PARENT,
988 },
989};
990
991static const struct freq_tbl ftbl_gcc_mdss_vsync_clk[] = {
992 F(19200000, P_XO, 1, 0, 0),
993 { }
994};
995
996static struct clk_rcg2 vsync_clk_src = {
997 .cmd_rcgr = 0x4d02c,
998 .hid_width = 5,
999 .parent_map = gcc_xo_gpll0a_map,
1000 .freq_tbl = ftbl_gcc_mdss_vsync_clk,
1001 .clkr.hw.init = &(struct clk_init_data){
1002 .name = "vsync_clk_src",
1003 .parent_names = gcc_xo_gpll0a,
1004 .num_parents = 2,
1005 .ops = &clk_rcg2_ops,
1006 },
1007};
1008
1009static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {
1010 F(64000000, P_GPLL0, 12.5, 0, 0),
1011 { }
1012};
1013
1014static struct clk_rcg2 pdm2_clk_src = {
1015 .cmd_rcgr = 0x44010,
1016 .hid_width = 5,
1017 .parent_map = gcc_xo_gpll0_map,
1018 .freq_tbl = ftbl_gcc_pdm2_clk,
1019 .clkr.hw.init = &(struct clk_init_data){
1020 .name = "pdm2_clk_src",
1021 .parent_names = gcc_xo_gpll0,
1022 .num_parents = 2,
1023 .ops = &clk_rcg2_ops,
1024 },
1025};
1026
1027static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk[] = {
1028 F(144000, P_XO, 16, 3, 25),
1029 F(400000, P_XO, 12, 1, 4),
1030 F(20000000, P_GPLL0, 10, 1, 4),
1031 F(25000000, P_GPLL0, 16, 1, 2),
1032 F(50000000, P_GPLL0, 16, 0, 0),
1033 F(100000000, P_GPLL0, 8, 0, 0),
1034 F(177770000, P_GPLL0, 4.5, 0, 0),
1035 { }
1036};
1037
1038static struct clk_rcg2 sdcc1_apps_clk_src = {
1039 .cmd_rcgr = 0x42004,
1040 .mnd_width = 8,
1041 .hid_width = 5,
1042 .parent_map = gcc_xo_gpll0_map,
1043 .freq_tbl = ftbl_gcc_sdcc1_apps_clk,
1044 .clkr.hw.init = &(struct clk_init_data){
1045 .name = "sdcc1_apps_clk_src",
1046 .parent_names = gcc_xo_gpll0,
1047 .num_parents = 2,
1048 .ops = &clk_rcg2_ops,
1049 },
1050};
1051
1052static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk[] = {
1053 F(144000, P_XO, 16, 3, 25),
1054 F(400000, P_XO, 12, 1, 4),
1055 F(20000000, P_GPLL0, 10, 1, 4),
1056 F(25000000, P_GPLL0, 16, 1, 2),
1057 F(50000000, P_GPLL0, 16, 0, 0),
1058 F(100000000, P_GPLL0, 8, 0, 0),
1059 F(200000000, P_GPLL0, 4, 0, 0),
1060 { }
1061};
1062
1063static struct clk_rcg2 sdcc2_apps_clk_src = {
1064 .cmd_rcgr = 0x43004,
1065 .mnd_width = 8,
1066 .hid_width = 5,
1067 .parent_map = gcc_xo_gpll0_map,
1068 .freq_tbl = ftbl_gcc_sdcc2_apps_clk,
1069 .clkr.hw.init = &(struct clk_init_data){
1070 .name = "sdcc2_apps_clk_src",
1071 .parent_names = gcc_xo_gpll0,
1072 .num_parents = 2,
1073 .ops = &clk_rcg2_ops,
1074 },
1075};
1076
1077static const struct freq_tbl ftbl_gcc_apss_tcu_clk[] = {
1078 F(155000000, P_GPLL2, 6, 0, 0),
1079 F(310000000, P_GPLL2, 3, 0, 0),
1080 F(400000000, P_GPLL0, 2, 0, 0),
1081 { }
1082};
1083
1084static struct clk_rcg2 apss_tcu_clk_src = {
1085 .cmd_rcgr = 0x1207c,
1086 .hid_width = 5,
1087 .parent_map = gcc_xo_gpll0a_gpll1_gpll2_map,
1088 .freq_tbl = ftbl_gcc_apss_tcu_clk,
1089 .clkr.hw.init = &(struct clk_init_data){
1090 .name = "apss_tcu_clk_src",
1091 .parent_names = gcc_xo_gpll0a_gpll1_gpll2,
1092 .num_parents = 4,
1093 .ops = &clk_rcg2_ops,
1094 },
1095};
1096
1097static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
1098 F(80000000, P_GPLL0, 10, 0, 0),
1099 { }
1100};
1101
1102static struct clk_rcg2 usb_hs_system_clk_src = {
1103 .cmd_rcgr = 0x41010,
1104 .hid_width = 5,
1105 .parent_map = gcc_xo_gpll0_map,
1106 .freq_tbl = ftbl_gcc_usb_hs_system_clk,
1107 .clkr.hw.init = &(struct clk_init_data){
1108 .name = "usb_hs_system_clk_src",
1109 .parent_names = gcc_xo_gpll0,
1110 .num_parents = 2,
1111 .ops = &clk_rcg2_ops,
1112 },
1113};
1114
1115static const struct freq_tbl ftbl_gcc_venus0_vcodec0_clk[] = {
1116 F(100000000, P_GPLL0, 8, 0, 0),
1117 F(160000000, P_GPLL0, 5, 0, 0),
1118 F(228570000, P_GPLL0, 5, 0, 0),
1119 { }
1120};
1121
1122static struct clk_rcg2 vcodec0_clk_src = {
1123 .cmd_rcgr = 0x4C000,
1124 .mnd_width = 8,
1125 .hid_width = 5,
1126 .parent_map = gcc_xo_gpll0_map,
1127 .freq_tbl = ftbl_gcc_venus0_vcodec0_clk,
1128 .clkr.hw.init = &(struct clk_init_data){
1129 .name = "vcodec0_clk_src",
1130 .parent_names = gcc_xo_gpll0,
1131 .num_parents = 2,
1132 .ops = &clk_rcg2_ops,
1133 },
1134};
1135
1136static struct clk_branch gcc_blsp1_ahb_clk = {
1137 .halt_reg = 0x01008,
1138 .halt_check = BRANCH_HALT_VOTED,
1139 .clkr = {
1140 .enable_reg = 0x45004,
1141 .enable_mask = BIT(10),
1142 .hw.init = &(struct clk_init_data){
1143 .name = "gcc_blsp1_ahb_clk",
1144 .parent_names = (const char *[]){
1145 "pcnoc_bfdcd_clk_src",
1146 },
1147 .num_parents = 1,
1148 .ops = &clk_branch2_ops,
1149 },
1150 },
1151};
1152
1153static struct clk_branch gcc_blsp1_sleep_clk = {
1154 .halt_reg = 0x01004,
1155 .clkr = {
1156 .enable_reg = 0x01004,
1157 .enable_mask = BIT(0),
1158 .hw.init = &(struct clk_init_data){
1159 .name = "gcc_blsp1_sleep_clk",
1160 .parent_names = (const char *[]){
1161 "sleep_clk_src",
1162 },
1163 .num_parents = 1,
1164 .flags = CLK_SET_RATE_PARENT,
1165 .ops = &clk_branch2_ops,
1166 },
1167 },
1168};
1169
1170static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1171 .halt_reg = 0x02008,
1172 .clkr = {
1173 .enable_reg = 0x02008,
1174 .enable_mask = BIT(0),
1175 .hw.init = &(struct clk_init_data){
1176 .name = "gcc_blsp1_qup1_i2c_apps_clk",
1177 .parent_names = (const char *[]){
1178 "blsp1_qup1_i2c_apps_clk_src",
1179 },
1180 .num_parents = 1,
1181 .flags = CLK_SET_RATE_PARENT,
1182 .ops = &clk_branch2_ops,
1183 },
1184 },
1185};
1186
1187static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1188 .halt_reg = 0x02004,
1189 .clkr = {
1190 .enable_reg = 0x02004,
1191 .enable_mask = BIT(0),
1192 .hw.init = &(struct clk_init_data){
1193 .name = "gcc_blsp1_qup1_spi_apps_clk",
1194 .parent_names = (const char *[]){
1195 "blsp1_qup1_spi_apps_clk_src",
1196 },
1197 .num_parents = 1,
1198 .flags = CLK_SET_RATE_PARENT,
1199 .ops = &clk_branch2_ops,
1200 },
1201 },
1202};
1203
1204static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1205 .halt_reg = 0x03010,
1206 .clkr = {
1207 .enable_reg = 0x03010,
1208 .enable_mask = BIT(0),
1209 .hw.init = &(struct clk_init_data){
1210 .name = "gcc_blsp1_qup2_i2c_apps_clk",
1211 .parent_names = (const char *[]){
1212 "blsp1_qup2_i2c_apps_clk_src",
1213 },
1214 .num_parents = 1,
1215 .flags = CLK_SET_RATE_PARENT,
1216 .ops = &clk_branch2_ops,
1217 },
1218 },
1219};
1220
1221static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1222 .halt_reg = 0x0300c,
1223 .clkr = {
1224 .enable_reg = 0x0300c,
1225 .enable_mask = BIT(0),
1226 .hw.init = &(struct clk_init_data){
1227 .name = "gcc_blsp1_qup2_spi_apps_clk",
1228 .parent_names = (const char *[]){
1229 "blsp1_qup2_spi_apps_clk_src",
1230 },
1231 .num_parents = 1,
1232 .flags = CLK_SET_RATE_PARENT,
1233 .ops = &clk_branch2_ops,
1234 },
1235 },
1236};
1237
1238static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1239 .halt_reg = 0x04020,
1240 .clkr = {
1241 .enable_reg = 0x04020,
1242 .enable_mask = BIT(0),
1243 .hw.init = &(struct clk_init_data){
1244 .name = "gcc_blsp1_qup3_i2c_apps_clk",
1245 .parent_names = (const char *[]){
1246 "blsp1_qup3_i2c_apps_clk_src",
1247 },
1248 .num_parents = 1,
1249 .flags = CLK_SET_RATE_PARENT,
1250 .ops = &clk_branch2_ops,
1251 },
1252 },
1253};
1254
1255static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1256 .halt_reg = 0x0401c,
1257 .clkr = {
1258 .enable_reg = 0x0401c,
1259 .enable_mask = BIT(0),
1260 .hw.init = &(struct clk_init_data){
1261 .name = "gcc_blsp1_qup3_spi_apps_clk",
1262 .parent_names = (const char *[]){
1263 "blsp1_qup3_spi_apps_clk_src",
1264 },
1265 .num_parents = 1,
1266 .flags = CLK_SET_RATE_PARENT,
1267 .ops = &clk_branch2_ops,
1268 },
1269 },
1270};
1271
1272static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1273 .halt_reg = 0x05020,
1274 .clkr = {
1275 .enable_reg = 0x05020,
1276 .enable_mask = BIT(0),
1277 .hw.init = &(struct clk_init_data){
1278 .name = "gcc_blsp1_qup4_i2c_apps_clk",
1279 .parent_names = (const char *[]){
1280 "blsp1_qup4_i2c_apps_clk_src",
1281 },
1282 .num_parents = 1,
1283 .flags = CLK_SET_RATE_PARENT,
1284 .ops = &clk_branch2_ops,
1285 },
1286 },
1287};
1288
1289static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1290 .halt_reg = 0x0501c,
1291 .clkr = {
1292 .enable_reg = 0x0501c,
1293 .enable_mask = BIT(0),
1294 .hw.init = &(struct clk_init_data){
1295 .name = "gcc_blsp1_qup4_spi_apps_clk",
1296 .parent_names = (const char *[]){
1297 "blsp1_qup4_spi_apps_clk_src",
1298 },
1299 .num_parents = 1,
1300 .flags = CLK_SET_RATE_PARENT,
1301 .ops = &clk_branch2_ops,
1302 },
1303 },
1304};
1305
1306static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1307 .halt_reg = 0x06020,
1308 .clkr = {
1309 .enable_reg = 0x06020,
1310 .enable_mask = BIT(0),
1311 .hw.init = &(struct clk_init_data){
1312 .name = "gcc_blsp1_qup5_i2c_apps_clk",
1313 .parent_names = (const char *[]){
1314 "blsp1_qup5_i2c_apps_clk_src",
1315 },
1316 .num_parents = 1,
1317 .flags = CLK_SET_RATE_PARENT,
1318 .ops = &clk_branch2_ops,
1319 },
1320 },
1321};
1322
1323static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1324 .halt_reg = 0x0601c,
1325 .clkr = {
1326 .enable_reg = 0x0601c,
1327 .enable_mask = BIT(0),
1328 .hw.init = &(struct clk_init_data){
1329 .name = "gcc_blsp1_qup5_spi_apps_clk",
1330 .parent_names = (const char *[]){
1331 "blsp1_qup5_spi_apps_clk_src",
1332 },
1333 .num_parents = 1,
1334 .flags = CLK_SET_RATE_PARENT,
1335 .ops = &clk_branch2_ops,
1336 },
1337 },
1338};
1339
1340static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1341 .halt_reg = 0x07020,
1342 .clkr = {
1343 .enable_reg = 0x07020,
1344 .enable_mask = BIT(0),
1345 .hw.init = &(struct clk_init_data){
1346 .name = "gcc_blsp1_qup6_i2c_apps_clk",
1347 .parent_names = (const char *[]){
1348 "blsp1_qup6_i2c_apps_clk_src",
1349 },
1350 .num_parents = 1,
1351 .flags = CLK_SET_RATE_PARENT,
1352 .ops = &clk_branch2_ops,
1353 },
1354 },
1355};
1356
1357static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1358 .halt_reg = 0x0701c,
1359 .clkr = {
1360 .enable_reg = 0x0701c,
1361 .enable_mask = BIT(0),
1362 .hw.init = &(struct clk_init_data){
1363 .name = "gcc_blsp1_qup6_spi_apps_clk",
1364 .parent_names = (const char *[]){
1365 "blsp1_qup6_spi_apps_clk_src",
1366 },
1367 .num_parents = 1,
1368 .flags = CLK_SET_RATE_PARENT,
1369 .ops = &clk_branch2_ops,
1370 },
1371 },
1372};
1373
1374static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1375 .halt_reg = 0x0203c,
1376 .clkr = {
1377 .enable_reg = 0x0203c,
1378 .enable_mask = BIT(0),
1379 .hw.init = &(struct clk_init_data){
1380 .name = "gcc_blsp1_uart1_apps_clk",
1381 .parent_names = (const char *[]){
1382 "blsp1_uart1_apps_clk_src",
1383 },
1384 .num_parents = 1,
1385 .flags = CLK_SET_RATE_PARENT,
1386 .ops = &clk_branch2_ops,
1387 },
1388 },
1389};
1390
1391static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1392 .halt_reg = 0x0302c,
1393 .clkr = {
1394 .enable_reg = 0x0302c,
1395 .enable_mask = BIT(0),
1396 .hw.init = &(struct clk_init_data){
1397 .name = "gcc_blsp1_uart2_apps_clk",
1398 .parent_names = (const char *[]){
1399 "blsp1_uart2_apps_clk_src",
1400 },
1401 .num_parents = 1,
1402 .flags = CLK_SET_RATE_PARENT,
1403 .ops = &clk_branch2_ops,
1404 },
1405 },
1406};
1407
1408static struct clk_branch gcc_boot_rom_ahb_clk = {
1409 .halt_reg = 0x1300c,
1410 .halt_check = BRANCH_HALT_VOTED,
1411 .clkr = {
1412 .enable_reg = 0x45004,
1413 .enable_mask = BIT(7),
1414 .hw.init = &(struct clk_init_data){
1415 .name = "gcc_boot_rom_ahb_clk",
1416 .parent_names = (const char *[]){
1417 "pcnoc_bfdcd_clk_src",
1418 },
1419 .num_parents = 1,
1420 .ops = &clk_branch2_ops,
1421 },
1422 },
1423};
1424
1425static struct clk_branch gcc_camss_cci_ahb_clk = {
1426 .halt_reg = 0x5101c,
1427 .clkr = {
1428 .enable_reg = 0x5101c,
1429 .enable_mask = BIT(0),
1430 .hw.init = &(struct clk_init_data){
1431 .name = "gcc_camss_cci_ahb_clk",
1432 .parent_names = (const char *[]){
1433 "camss_ahb_clk_src",
1434 },
1435 .num_parents = 1,
1436 .flags = CLK_SET_RATE_PARENT,
1437 .ops = &clk_branch2_ops,
1438 },
1439 },
1440};
1441
1442static struct clk_branch gcc_camss_cci_clk = {
1443 .halt_reg = 0x51018,
1444 .clkr = {
1445 .enable_reg = 0x51018,
1446 .enable_mask = BIT(0),
1447 .hw.init = &(struct clk_init_data){
1448 .name = "gcc_camss_cci_clk",
1449 .parent_names = (const char *[]){
1450 "cci_clk_src",
1451 },
1452 .num_parents = 1,
1453 .flags = CLK_SET_RATE_PARENT,
1454 .ops = &clk_branch2_ops,
1455 },
1456 },
1457};
1458
1459static struct clk_branch gcc_camss_csi0_ahb_clk = {
1460 .halt_reg = 0x4e040,
1461 .clkr = {
1462 .enable_reg = 0x4e040,
1463 .enable_mask = BIT(0),
1464 .hw.init = &(struct clk_init_data){
1465 .name = "gcc_camss_csi0_ahb_clk",
1466 .parent_names = (const char *[]){
1467 "camss_ahb_clk_src",
1468 },
1469 .num_parents = 1,
1470 .flags = CLK_SET_RATE_PARENT,
1471 .ops = &clk_branch2_ops,
1472 },
1473 },
1474};
1475
1476static struct clk_branch gcc_camss_csi0_clk = {
1477 .halt_reg = 0x4e03c,
1478 .clkr = {
1479 .enable_reg = 0x4e03c,
1480 .enable_mask = BIT(0),
1481 .hw.init = &(struct clk_init_data){
1482 .name = "gcc_camss_csi0_clk",
1483 .parent_names = (const char *[]){
1484 "csi0_clk_src",
1485 },
1486 .num_parents = 1,
1487 .flags = CLK_SET_RATE_PARENT,
1488 .ops = &clk_branch2_ops,
1489 },
1490 },
1491};
1492
1493static struct clk_branch gcc_camss_csi0phy_clk = {
1494 .halt_reg = 0x4e048,
1495 .clkr = {
1496 .enable_reg = 0x4e048,
1497 .enable_mask = BIT(0),
1498 .hw.init = &(struct clk_init_data){
1499 .name = "gcc_camss_csi0phy_clk",
1500 .parent_names = (const char *[]){
1501 "csi0_clk_src",
1502 },
1503 .num_parents = 1,
1504 .flags = CLK_SET_RATE_PARENT,
1505 .ops = &clk_branch2_ops,
1506 },
1507 },
1508};
1509
1510static struct clk_branch gcc_camss_csi0pix_clk = {
1511 .halt_reg = 0x4e058,
1512 .clkr = {
1513 .enable_reg = 0x4e058,
1514 .enable_mask = BIT(0),
1515 .hw.init = &(struct clk_init_data){
1516 .name = "gcc_camss_csi0pix_clk",
1517 .parent_names = (const char *[]){
1518 "csi0_clk_src",
1519 },
1520 .num_parents = 1,
1521 .flags = CLK_SET_RATE_PARENT,
1522 .ops = &clk_branch2_ops,
1523 },
1524 },
1525};
1526
1527static struct clk_branch gcc_camss_csi0rdi_clk = {
1528 .halt_reg = 0x4e050,
1529 .clkr = {
1530 .enable_reg = 0x4e050,
1531 .enable_mask = BIT(0),
1532 .hw.init = &(struct clk_init_data){
1533 .name = "gcc_camss_csi0rdi_clk",
1534 .parent_names = (const char *[]){
1535 "csi0_clk_src",
1536 },
1537 .num_parents = 1,
1538 .flags = CLK_SET_RATE_PARENT,
1539 .ops = &clk_branch2_ops,
1540 },
1541 },
1542};
1543
1544static struct clk_branch gcc_camss_csi1_ahb_clk = {
1545 .halt_reg = 0x4f040,
1546 .clkr = {
1547 .enable_reg = 0x4f040,
1548 .enable_mask = BIT(0),
1549 .hw.init = &(struct clk_init_data){
1550 .name = "gcc_camss_csi1_ahb_clk",
1551 .parent_names = (const char *[]){
1552 "camss_ahb_clk_src",
1553 },
1554 .num_parents = 1,
1555 .flags = CLK_SET_RATE_PARENT,
1556 .ops = &clk_branch2_ops,
1557 },
1558 },
1559};
1560
1561static struct clk_branch gcc_camss_csi1_clk = {
1562 .halt_reg = 0x4f03c,
1563 .clkr = {
1564 .enable_reg = 0x4f03c,
1565 .enable_mask = BIT(0),
1566 .hw.init = &(struct clk_init_data){
1567 .name = "gcc_camss_csi1_clk",
1568 .parent_names = (const char *[]){
1569 "csi1_clk_src",
1570 },
1571 .num_parents = 1,
1572 .flags = CLK_SET_RATE_PARENT,
1573 .ops = &clk_branch2_ops,
1574 },
1575 },
1576};
1577
1578static struct clk_branch gcc_camss_csi1phy_clk = {
1579 .halt_reg = 0x4f048,
1580 .clkr = {
1581 .enable_reg = 0x4f048,
1582 .enable_mask = BIT(0),
1583 .hw.init = &(struct clk_init_data){
1584 .name = "gcc_camss_csi1phy_clk",
1585 .parent_names = (const char *[]){
1586 "csi1_clk_src",
1587 },
1588 .num_parents = 1,
1589 .flags = CLK_SET_RATE_PARENT,
1590 .ops = &clk_branch2_ops,
1591 },
1592 },
1593};
1594
1595static struct clk_branch gcc_camss_csi1pix_clk = {
1596 .halt_reg = 0x4f058,
1597 .clkr = {
1598 .enable_reg = 0x4f058,
1599 .enable_mask = BIT(0),
1600 .hw.init = &(struct clk_init_data){
1601 .name = "gcc_camss_csi1pix_clk",
1602 .parent_names = (const char *[]){
1603 "csi1_clk_src",
1604 },
1605 .num_parents = 1,
1606 .flags = CLK_SET_RATE_PARENT,
1607 .ops = &clk_branch2_ops,
1608 },
1609 },
1610};
1611
1612static struct clk_branch gcc_camss_csi1rdi_clk = {
1613 .halt_reg = 0x4f050,
1614 .clkr = {
1615 .enable_reg = 0x4f050,
1616 .enable_mask = BIT(0),
1617 .hw.init = &(struct clk_init_data){
1618 .name = "gcc_camss_csi1rdi_clk",
1619 .parent_names = (const char *[]){
1620 "csi1_clk_src",
1621 },
1622 .num_parents = 1,
1623 .flags = CLK_SET_RATE_PARENT,
1624 .ops = &clk_branch2_ops,
1625 },
1626 },
1627};
1628
1629static struct clk_branch gcc_camss_csi_vfe0_clk = {
1630 .halt_reg = 0x58050,
1631 .clkr = {
1632 .enable_reg = 0x58050,
1633 .enable_mask = BIT(0),
1634 .hw.init = &(struct clk_init_data){
1635 .name = "gcc_camss_csi_vfe0_clk",
1636 .parent_names = (const char *[]){
1637 "vfe0_clk_src",
1638 },
1639 .num_parents = 1,
1640 .flags = CLK_SET_RATE_PARENT,
1641 .ops = &clk_branch2_ops,
1642 },
1643 },
1644};
1645
1646static struct clk_branch gcc_camss_gp0_clk = {
1647 .halt_reg = 0x54018,
1648 .clkr = {
1649 .enable_reg = 0x54018,
1650 .enable_mask = BIT(0),
1651 .hw.init = &(struct clk_init_data){
1652 .name = "gcc_camss_gp0_clk",
1653 .parent_names = (const char *[]){
1654 "camss_gp0_clk_src",
1655 },
1656 .num_parents = 1,
1657 .flags = CLK_SET_RATE_PARENT,
1658 .ops = &clk_branch2_ops,
1659 },
1660 },
1661};
1662
1663static struct clk_branch gcc_camss_gp1_clk = {
1664 .halt_reg = 0x55018,
1665 .clkr = {
1666 .enable_reg = 0x55018,
1667 .enable_mask = BIT(0),
1668 .hw.init = &(struct clk_init_data){
1669 .name = "gcc_camss_gp1_clk",
1670 .parent_names = (const char *[]){
1671 "camss_gp1_clk_src",
1672 },
1673 .num_parents = 1,
1674 .flags = CLK_SET_RATE_PARENT,
1675 .ops = &clk_branch2_ops,
1676 },
1677 },
1678};
1679
1680static struct clk_branch gcc_camss_ispif_ahb_clk = {
1681 .halt_reg = 0x50004,
1682 .clkr = {
1683 .enable_reg = 0x50004,
1684 .enable_mask = BIT(0),
1685 .hw.init = &(struct clk_init_data){
1686 .name = "gcc_camss_ispif_ahb_clk",
1687 .parent_names = (const char *[]){
1688 "camss_ahb_clk_src",
1689 },
1690 .num_parents = 1,
1691 .flags = CLK_SET_RATE_PARENT,
1692 .ops = &clk_branch2_ops,
1693 },
1694 },
1695};
1696
1697static struct clk_branch gcc_camss_jpeg0_clk = {
1698 .halt_reg = 0x57020,
1699 .clkr = {
1700 .enable_reg = 0x57020,
1701 .enable_mask = BIT(0),
1702 .hw.init = &(struct clk_init_data){
1703 .name = "gcc_camss_jpeg0_clk",
1704 .parent_names = (const char *[]){
1705 "jpeg0_clk_src",
1706 },
1707 .num_parents = 1,
1708 .flags = CLK_SET_RATE_PARENT,
1709 .ops = &clk_branch2_ops,
1710 },
1711 },
1712};
1713
1714static struct clk_branch gcc_camss_jpeg_ahb_clk = {
1715 .halt_reg = 0x57024,
1716 .clkr = {
1717 .enable_reg = 0x57024,
1718 .enable_mask = BIT(0),
1719 .hw.init = &(struct clk_init_data){
1720 .name = "gcc_camss_jpeg_ahb_clk",
1721 .parent_names = (const char *[]){
1722 "camss_ahb_clk_src",
1723 },
1724 .num_parents = 1,
1725 .flags = CLK_SET_RATE_PARENT,
1726 .ops = &clk_branch2_ops,
1727 },
1728 },
1729};
1730
1731static struct clk_branch gcc_camss_jpeg_axi_clk = {
1732 .halt_reg = 0x57028,
1733 .clkr = {
1734 .enable_reg = 0x57028,
1735 .enable_mask = BIT(0),
1736 .hw.init = &(struct clk_init_data){
1737 .name = "gcc_camss_jpeg_axi_clk",
1738 .parent_names = (const char *[]){
1739 "system_noc_bfdcd_clk_src",
1740 },
1741 .num_parents = 1,
1742 .flags = CLK_SET_RATE_PARENT,
1743 .ops = &clk_branch2_ops,
1744 },
1745 },
1746};
1747
1748static struct clk_branch gcc_camss_mclk0_clk = {
1749 .halt_reg = 0x52018,
1750 .clkr = {
1751 .enable_reg = 0x52018,
1752 .enable_mask = BIT(0),
1753 .hw.init = &(struct clk_init_data){
1754 .name = "gcc_camss_mclk0_clk",
1755 .parent_names = (const char *[]){
1756 "mclk0_clk_src",
1757 },
1758 .num_parents = 1,
1759 .flags = CLK_SET_RATE_PARENT,
1760 .ops = &clk_branch2_ops,
1761 },
1762 },
1763};
1764
1765static struct clk_branch gcc_camss_mclk1_clk = {
1766 .halt_reg = 0x53018,
1767 .clkr = {
1768 .enable_reg = 0x53018,
1769 .enable_mask = BIT(0),
1770 .hw.init = &(struct clk_init_data){
1771 .name = "gcc_camss_mclk1_clk",
1772 .parent_names = (const char *[]){
1773 "mclk1_clk_src",
1774 },
1775 .num_parents = 1,
1776 .flags = CLK_SET_RATE_PARENT,
1777 .ops = &clk_branch2_ops,
1778 },
1779 },
1780};
1781
1782static struct clk_branch gcc_camss_micro_ahb_clk = {
1783 .halt_reg = 0x5600c,
1784 .clkr = {
1785 .enable_reg = 0x5600c,
1786 .enable_mask = BIT(0),
1787 .hw.init = &(struct clk_init_data){
1788 .name = "gcc_camss_micro_ahb_clk",
1789 .parent_names = (const char *[]){
1790 "camss_ahb_clk_src",
1791 },
1792 .num_parents = 1,
1793 .flags = CLK_SET_RATE_PARENT,
1794 .ops = &clk_branch2_ops,
1795 },
1796 },
1797};
1798
1799static struct clk_branch gcc_camss_csi0phytimer_clk = {
1800 .halt_reg = 0x4e01c,
1801 .clkr = {
1802 .enable_reg = 0x4e01c,
1803 .enable_mask = BIT(0),
1804 .hw.init = &(struct clk_init_data){
1805 .name = "gcc_camss_csi0phytimer_clk",
1806 .parent_names = (const char *[]){
1807 "csi0phytimer_clk_src",
1808 },
1809 .num_parents = 1,
1810 .flags = CLK_SET_RATE_PARENT,
1811 .ops = &clk_branch2_ops,
1812 },
1813 },
1814};
1815
1816static struct clk_branch gcc_camss_csi1phytimer_clk = {
1817 .halt_reg = 0x4f01c,
1818 .clkr = {
1819 .enable_reg = 0x4f01c,
1820 .enable_mask = BIT(0),
1821 .hw.init = &(struct clk_init_data){
1822 .name = "gcc_camss_csi1phytimer_clk",
1823 .parent_names = (const char *[]){
1824 "csi1phytimer_clk_src",
1825 },
1826 .num_parents = 1,
1827 .flags = CLK_SET_RATE_PARENT,
1828 .ops = &clk_branch2_ops,
1829 },
1830 },
1831};
1832
1833static struct clk_branch gcc_camss_ahb_clk = {
1834 .halt_reg = 0x5a014,
1835 .clkr = {
1836 .enable_reg = 0x5a014,
1837 .enable_mask = BIT(0),
1838 .hw.init = &(struct clk_init_data){
1839 .name = "gcc_camss_ahb_clk",
1840 .parent_names = (const char *[]){
1841 "camss_ahb_clk_src",
1842 },
1843 .num_parents = 1,
1844 .flags = CLK_SET_RATE_PARENT,
1845 .ops = &clk_branch2_ops,
1846 },
1847 },
1848};
1849
1850static struct clk_branch gcc_camss_top_ahb_clk = {
1851 .halt_reg = 0x56004,
1852 .clkr = {
1853 .enable_reg = 0x56004,
1854 .enable_mask = BIT(0),
1855 .hw.init = &(struct clk_init_data){
1856 .name = "gcc_camss_top_ahb_clk",
1857 .parent_names = (const char *[]){
1858 "pcnoc_bfdcd_clk_src",
1859 },
1860 .num_parents = 1,
1861 .flags = CLK_SET_RATE_PARENT,
1862 .ops = &clk_branch2_ops,
1863 },
1864 },
1865};
1866
1867static struct clk_branch gcc_camss_cpp_ahb_clk = {
1868 .halt_reg = 0x58040,
1869 .clkr = {
1870 .enable_reg = 0x58040,
1871 .enable_mask = BIT(0),
1872 .hw.init = &(struct clk_init_data){
1873 .name = "gcc_camss_cpp_ahb_clk",
1874 .parent_names = (const char *[]){
1875 "camss_ahb_clk_src",
1876 },
1877 .num_parents = 1,
1878 .flags = CLK_SET_RATE_PARENT,
1879 .ops = &clk_branch2_ops,
1880 },
1881 },
1882};
1883
1884static struct clk_branch gcc_camss_cpp_clk = {
1885 .halt_reg = 0x5803c,
1886 .clkr = {
1887 .enable_reg = 0x5803c,
1888 .enable_mask = BIT(0),
1889 .hw.init = &(struct clk_init_data){
1890 .name = "gcc_camss_cpp_clk",
1891 .parent_names = (const char *[]){
1892 "cpp_clk_src",
1893 },
1894 .num_parents = 1,
1895 .flags = CLK_SET_RATE_PARENT,
1896 .ops = &clk_branch2_ops,
1897 },
1898 },
1899};
1900
1901static struct clk_branch gcc_camss_vfe0_clk = {
1902 .halt_reg = 0x58038,
1903 .clkr = {
1904 .enable_reg = 0x58038,
1905 .enable_mask = BIT(0),
1906 .hw.init = &(struct clk_init_data){
1907 .name = "gcc_camss_vfe0_clk",
1908 .parent_names = (const char *[]){
1909 "vfe0_clk_src",
1910 },
1911 .num_parents = 1,
1912 .flags = CLK_SET_RATE_PARENT,
1913 .ops = &clk_branch2_ops,
1914 },
1915 },
1916};
1917
1918static struct clk_branch gcc_camss_vfe_ahb_clk = {
1919 .halt_reg = 0x58044,
1920 .clkr = {
1921 .enable_reg = 0x58044,
1922 .enable_mask = BIT(0),
1923 .hw.init = &(struct clk_init_data){
1924 .name = "gcc_camss_vfe_ahb_clk",
1925 .parent_names = (const char *[]){
1926 "camss_ahb_clk_src",
1927 },
1928 .num_parents = 1,
1929 .flags = CLK_SET_RATE_PARENT,
1930 .ops = &clk_branch2_ops,
1931 },
1932 },
1933};
1934
1935static struct clk_branch gcc_camss_vfe_axi_clk = {
1936 .halt_reg = 0x58048,
1937 .clkr = {
1938 .enable_reg = 0x58048,
1939 .enable_mask = BIT(0),
1940 .hw.init = &(struct clk_init_data){
1941 .name = "gcc_camss_vfe_axi_clk",
1942 .parent_names = (const char *[]){
1943 "system_noc_bfdcd_clk_src",
1944 },
1945 .num_parents = 1,
1946 .flags = CLK_SET_RATE_PARENT,
1947 .ops = &clk_branch2_ops,
1948 },
1949 },
1950};
1951
1952static struct clk_branch gcc_crypto_ahb_clk = {
1953 .halt_reg = 0x16024,
1954 .halt_check = BRANCH_HALT_VOTED,
1955 .clkr = {
1956 .enable_reg = 0x45004,
1957 .enable_mask = BIT(0),
1958 .hw.init = &(struct clk_init_data){
1959 .name = "gcc_crypto_ahb_clk",
1960 .parent_names = (const char *[]){
1961 "pcnoc_bfdcd_clk_src",
1962 },
1963 .num_parents = 1,
1964 .ops = &clk_branch2_ops,
1965 },
1966 },
1967};
1968
1969static struct clk_branch gcc_crypto_axi_clk = {
1970 .halt_reg = 0x16020,
1971 .halt_check = BRANCH_HALT_VOTED,
1972 .clkr = {
1973 .enable_reg = 0x45004,
1974 .enable_mask = BIT(1),
1975 .hw.init = &(struct clk_init_data){
1976 .name = "gcc_crypto_axi_clk",
1977 .parent_names = (const char *[]){
1978 "pcnoc_bfdcd_clk_src",
1979 },
1980 .num_parents = 1,
1981 .flags = CLK_SET_RATE_PARENT,
1982 .ops = &clk_branch2_ops,
1983 },
1984 },
1985};
1986
1987static struct clk_branch gcc_crypto_clk = {
1988 .halt_reg = 0x1601c,
1989 .halt_check = BRANCH_HALT_VOTED,
1990 .clkr = {
1991 .enable_reg = 0x45004,
1992 .enable_mask = BIT(2),
1993 .hw.init = &(struct clk_init_data){
1994 .name = "gcc_crypto_clk",
1995 .parent_names = (const char *[]){
1996 "crypto_clk_src",
1997 },
1998 .num_parents = 1,
1999 .ops = &clk_branch2_ops,
2000 },
2001 },
2002};
2003
2004static struct clk_branch gcc_oxili_gmem_clk = {
2005 .halt_reg = 0x59024,
2006 .clkr = {
2007 .enable_reg = 0x59024,
2008 .enable_mask = BIT(0),
2009 .hw.init = &(struct clk_init_data){
2010 .name = "gcc_oxili_gmem_clk",
2011 .parent_names = (const char *[]){
2012 "gfx3d_clk_src",
2013 },
2014 .num_parents = 1,
2015 .flags = CLK_SET_RATE_PARENT,
2016 .ops = &clk_branch2_ops,
2017 },
2018 },
2019};
2020
2021static struct clk_branch gcc_gp1_clk = {
2022 .halt_reg = 0x08000,
2023 .clkr = {
2024 .enable_reg = 0x08000,
2025 .enable_mask = BIT(0),
2026 .hw.init = &(struct clk_init_data){
2027 .name = "gcc_gp1_clk",
2028 .parent_names = (const char *[]){
2029 "gp1_clk_src",
2030 },
2031 .num_parents = 1,
2032 .flags = CLK_SET_RATE_PARENT,
2033 .ops = &clk_branch2_ops,
2034 },
2035 },
2036};
2037
2038static struct clk_branch gcc_gp2_clk = {
2039 .halt_reg = 0x09000,
2040 .clkr = {
2041 .enable_reg = 0x09000,
2042 .enable_mask = BIT(0),
2043 .hw.init = &(struct clk_init_data){
2044 .name = "gcc_gp2_clk",
2045 .parent_names = (const char *[]){
2046 "gp2_clk_src",
2047 },
2048 .num_parents = 1,
2049 .flags = CLK_SET_RATE_PARENT,
2050 .ops = &clk_branch2_ops,
2051 },
2052 },
2053};
2054
2055static struct clk_branch gcc_gp3_clk = {
2056 .halt_reg = 0x0a000,
2057 .clkr = {
2058 .enable_reg = 0x0a000,
2059 .enable_mask = BIT(0),
2060 .hw.init = &(struct clk_init_data){
2061 .name = "gcc_gp3_clk",
2062 .parent_names = (const char *[]){
2063 "gp3_clk_src",
2064 },
2065 .num_parents = 1,
2066 .flags = CLK_SET_RATE_PARENT,
2067 .ops = &clk_branch2_ops,
2068 },
2069 },
2070};
2071
2072static struct clk_branch gcc_mdss_ahb_clk = {
2073 .halt_reg = 0x4d07c,
2074 .clkr = {
2075 .enable_reg = 0x4d07c,
2076 .enable_mask = BIT(0),
2077 .hw.init = &(struct clk_init_data){
2078 .name = "gcc_mdss_ahb_clk",
2079 .parent_names = (const char *[]){
2080 "pcnoc_bfdcd_clk_src",
2081 },
2082 .num_parents = 1,
2083 .flags = CLK_SET_RATE_PARENT,
2084 .ops = &clk_branch2_ops,
2085 },
2086 },
2087};
2088
2089static struct clk_branch gcc_mdss_axi_clk = {
2090 .halt_reg = 0x4d080,
2091 .clkr = {
2092 .enable_reg = 0x4d080,
2093 .enable_mask = BIT(0),
2094 .hw.init = &(struct clk_init_data){
2095 .name = "gcc_mdss_axi_clk",
2096 .parent_names = (const char *[]){
2097 "system_noc_bfdcd_clk_src",
2098 },
2099 .num_parents = 1,
2100 .flags = CLK_SET_RATE_PARENT,
2101 .ops = &clk_branch2_ops,
2102 },
2103 },
2104};
2105
2106static struct clk_branch gcc_mdss_byte0_clk = {
2107 .halt_reg = 0x4d094,
2108 .clkr = {
2109 .enable_reg = 0x4d094,
2110 .enable_mask = BIT(0),
2111 .hw.init = &(struct clk_init_data){
2112 .name = "gcc_mdss_byte0_clk",
2113 .parent_names = (const char *[]){
2114 "byte0_clk_src",
2115 },
2116 .num_parents = 1,
2117 .flags = CLK_SET_RATE_PARENT,
2118 .ops = &clk_branch2_ops,
2119 },
2120 },
2121};
2122
2123static struct clk_branch gcc_mdss_esc0_clk = {
2124 .halt_reg = 0x4d098,
2125 .clkr = {
2126 .enable_reg = 0x4d098,
2127 .enable_mask = BIT(0),
2128 .hw.init = &(struct clk_init_data){
2129 .name = "gcc_mdss_esc0_clk",
2130 .parent_names = (const char *[]){
2131 "esc0_clk_src",
2132 },
2133 .num_parents = 1,
2134 .flags = CLK_SET_RATE_PARENT,
2135 .ops = &clk_branch2_ops,
2136 },
2137 },
2138};
2139
2140static struct clk_branch gcc_mdss_mdp_clk = {
2141 .halt_reg = 0x4D088,
2142 .clkr = {
2143 .enable_reg = 0x4D088,
2144 .enable_mask = BIT(0),
2145 .hw.init = &(struct clk_init_data){
2146 .name = "gcc_mdss_mdp_clk",
2147 .parent_names = (const char *[]){
2148 "mdp_clk_src",
2149 },
2150 .num_parents = 1,
2151 .flags = CLK_SET_RATE_PARENT,
2152 .ops = &clk_branch2_ops,
2153 },
2154 },
2155};
2156
2157static struct clk_branch gcc_mdss_pclk0_clk = {
2158 .halt_reg = 0x4d084,
2159 .clkr = {
2160 .enable_reg = 0x4d084,
2161 .enable_mask = BIT(0),
2162 .hw.init = &(struct clk_init_data){
2163 .name = "gcc_mdss_pclk0_clk",
2164 .parent_names = (const char *[]){
2165 "pclk0_clk_src",
2166 },
2167 .num_parents = 1,
2168 .flags = CLK_SET_RATE_PARENT,
2169 .ops = &clk_branch2_ops,
2170 },
2171 },
2172};
2173
2174static struct clk_branch gcc_mdss_vsync_clk = {
2175 .halt_reg = 0x4d090,
2176 .clkr = {
2177 .enable_reg = 0x4d090,
2178 .enable_mask = BIT(0),
2179 .hw.init = &(struct clk_init_data){
2180 .name = "gcc_mdss_vsync_clk",
2181 .parent_names = (const char *[]){
2182 "vsync_clk_src",
2183 },
2184 .num_parents = 1,
2185 .flags = CLK_SET_RATE_PARENT,
2186 .ops = &clk_branch2_ops,
2187 },
2188 },
2189};
2190
2191static struct clk_branch gcc_mss_cfg_ahb_clk = {
2192 .halt_reg = 0x49000,
2193 .clkr = {
2194 .enable_reg = 0x49000,
2195 .enable_mask = BIT(0),
2196 .hw.init = &(struct clk_init_data){
2197 .name = "gcc_mss_cfg_ahb_clk",
2198 .parent_names = (const char *[]){
2199 "pcnoc_bfdcd_clk_src",
2200 },
2201 .num_parents = 1,
2202 .flags = CLK_SET_RATE_PARENT,
2203 .ops = &clk_branch2_ops,
2204 },
2205 },
2206};
2207
2208static struct clk_branch gcc_oxili_ahb_clk = {
2209 .halt_reg = 0x59028,
2210 .clkr = {
2211 .enable_reg = 0x59028,
2212 .enable_mask = BIT(0),
2213 .hw.init = &(struct clk_init_data){
2214 .name = "gcc_oxili_ahb_clk",
2215 .parent_names = (const char *[]){
2216 "pcnoc_bfdcd_clk_src",
2217 },
2218 .num_parents = 1,
2219 .flags = CLK_SET_RATE_PARENT,
2220 .ops = &clk_branch2_ops,
2221 },
2222 },
2223};
2224
2225static struct clk_branch gcc_oxili_gfx3d_clk = {
2226 .halt_reg = 0x59020,
2227 .clkr = {
2228 .enable_reg = 0x59020,
2229 .enable_mask = BIT(0),
2230 .hw.init = &(struct clk_init_data){
2231 .name = "gcc_oxili_gfx3d_clk",
2232 .parent_names = (const char *[]){
2233 "gfx3d_clk_src",
2234 },
2235 .num_parents = 1,
2236 .flags = CLK_SET_RATE_PARENT,
2237 .ops = &clk_branch2_ops,
2238 },
2239 },
2240};
2241
2242static struct clk_branch gcc_pdm2_clk = {
2243 .halt_reg = 0x4400c,
2244 .clkr = {
2245 .enable_reg = 0x4400c,
2246 .enable_mask = BIT(0),
2247 .hw.init = &(struct clk_init_data){
2248 .name = "gcc_pdm2_clk",
2249 .parent_names = (const char *[]){
2250 "pdm2_clk_src",
2251 },
2252 .num_parents = 1,
2253 .flags = CLK_SET_RATE_PARENT,
2254 .ops = &clk_branch2_ops,
2255 },
2256 },
2257};
2258
2259static struct clk_branch gcc_pdm_ahb_clk = {
2260 .halt_reg = 0x44004,
2261 .clkr = {
2262 .enable_reg = 0x44004,
2263 .enable_mask = BIT(0),
2264 .hw.init = &(struct clk_init_data){
2265 .name = "gcc_pdm_ahb_clk",
2266 .parent_names = (const char *[]){
2267 "pcnoc_bfdcd_clk_src",
2268 },
2269 .num_parents = 1,
2270 .flags = CLK_SET_RATE_PARENT,
2271 .ops = &clk_branch2_ops,
2272 },
2273 },
2274};
2275
2276static struct clk_branch gcc_prng_ahb_clk = {
2277 .halt_reg = 0x13004,
2278 .halt_check = BRANCH_HALT_VOTED,
2279 .clkr = {
2280 .enable_reg = 0x45004,
2281 .enable_mask = BIT(0),
2282 .hw.init = &(struct clk_init_data){
2283 .name = "gcc_prng_ahb_clk",
2284 .parent_names = (const char *[]){
2285 "pcnoc_bfdcd_clk_src",
2286 },
2287 .num_parents = 1,
2288 .ops = &clk_branch2_ops,
2289 },
2290 },
2291};
2292
2293static struct clk_branch gcc_sdcc1_ahb_clk = {
2294 .halt_reg = 0x4201c,
2295 .clkr = {
2296 .enable_reg = 0x4201c,
2297 .enable_mask = BIT(0),
2298 .hw.init = &(struct clk_init_data){
2299 .name = "gcc_sdcc1_ahb_clk",
2300 .parent_names = (const char *[]){
2301 "pcnoc_bfdcd_clk_src",
2302 },
2303 .num_parents = 1,
2304 .flags = CLK_SET_RATE_PARENT,
2305 .ops = &clk_branch2_ops,
2306 },
2307 },
2308};
2309
2310static struct clk_branch gcc_sdcc1_apps_clk = {
2311 .halt_reg = 0x42018,
2312 .clkr = {
2313 .enable_reg = 0x42018,
2314 .enable_mask = BIT(0),
2315 .hw.init = &(struct clk_init_data){
2316 .name = "gcc_sdcc1_apps_clk",
2317 .parent_names = (const char *[]){
2318 "sdcc1_apps_clk_src",
2319 },
2320 .num_parents = 1,
2321 .flags = CLK_SET_RATE_PARENT,
2322 .ops = &clk_branch2_ops,
2323 },
2324 },
2325};
2326
2327static struct clk_branch gcc_sdcc2_ahb_clk = {
2328 .halt_reg = 0x4301c,
2329 .clkr = {
2330 .enable_reg = 0x4301c,
2331 .enable_mask = BIT(0),
2332 .hw.init = &(struct clk_init_data){
2333 .name = "gcc_sdcc2_ahb_clk",
2334 .parent_names = (const char *[]){
2335 "pcnoc_bfdcd_clk_src",
2336 },
2337 .num_parents = 1,
2338 .flags = CLK_SET_RATE_PARENT,
2339 .ops = &clk_branch2_ops,
2340 },
2341 },
2342};
2343
2344static struct clk_branch gcc_sdcc2_apps_clk = {
2345 .halt_reg = 0x43018,
2346 .clkr = {
2347 .enable_reg = 0x43018,
2348 .enable_mask = BIT(0),
2349 .hw.init = &(struct clk_init_data){
2350 .name = "gcc_sdcc2_apps_clk",
2351 .parent_names = (const char *[]){
2352 "sdcc2_apps_clk_src",
2353 },
2354 .num_parents = 1,
2355 .flags = CLK_SET_RATE_PARENT,
2356 .ops = &clk_branch2_ops,
2357 },
2358 },
2359};
2360
2361static struct clk_branch gcc_gtcu_ahb_clk = {
2362 .halt_reg = 0x12044,
2363 .clkr = {
2364 .enable_reg = 0x4500c,
2365 .enable_mask = BIT(13),
2366 .hw.init = &(struct clk_init_data){
2367 .name = "gcc_gtcu_ahb_clk",
2368 .parent_names = (const char *[]){
2369 "pcnoc_bfdcd_clk_src",
2370 },
2371 .num_parents = 1,
2372 .flags = CLK_SET_RATE_PARENT,
2373 .ops = &clk_branch2_ops,
2374 },
2375 },
2376};
2377
2378static struct clk_branch gcc_jpeg_tbu_clk = {
2379 .halt_reg = 0x12034,
2380 .clkr = {
2381 .enable_reg = 0x4500c,
2382 .enable_mask = BIT(10),
2383 .hw.init = &(struct clk_init_data){
2384 .name = "gcc_jpeg_tbu_clk",
2385 .parent_names = (const char *[]){
2386 "system_noc_bfdcd_clk_src",
2387 },
2388 .num_parents = 1,
2389 .flags = CLK_SET_RATE_PARENT,
2390 .ops = &clk_branch2_ops,
2391 },
2392 },
2393};
2394
2395static struct clk_branch gcc_mdp_tbu_clk = {
2396 .halt_reg = 0x1201c,
2397 .clkr = {
2398 .enable_reg = 0x4500c,
2399 .enable_mask = BIT(4),
2400 .hw.init = &(struct clk_init_data){
2401 .name = "gcc_mdp_tbu_clk",
2402 .parent_names = (const char *[]){
2403 "system_noc_bfdcd_clk_src",
2404 },
2405 .num_parents = 1,
2406 .flags = CLK_SET_RATE_PARENT,
2407 .ops = &clk_branch2_ops,
2408 },
2409 },
2410};
2411
2412static struct clk_branch gcc_smmu_cfg_clk = {
2413 .halt_reg = 0x12038,
2414 .clkr = {
2415 .enable_reg = 0x4500c,
2416 .enable_mask = BIT(12),
2417 .hw.init = &(struct clk_init_data){
2418 .name = "gcc_smmu_cfg_clk",
2419 .parent_names = (const char *[]){
2420 "pcnoc_bfdcd_clk_src",
2421 },
2422 .num_parents = 1,
2423 .flags = CLK_SET_RATE_PARENT,
2424 .ops = &clk_branch2_ops,
2425 },
2426 },
2427};
2428
2429static struct clk_branch gcc_venus_tbu_clk = {
2430 .halt_reg = 0x12014,
2431 .clkr = {
2432 .enable_reg = 0x4500c,
2433 .enable_mask = BIT(5),
2434 .hw.init = &(struct clk_init_data){
2435 .name = "gcc_venus_tbu_clk",
2436 .parent_names = (const char *[]){
2437 "system_noc_bfdcd_clk_src",
2438 },
2439 .num_parents = 1,
2440 .flags = CLK_SET_RATE_PARENT,
2441 .ops = &clk_branch2_ops,
2442 },
2443 },
2444};
2445
2446static struct clk_branch gcc_vfe_tbu_clk = {
2447 .halt_reg = 0x1203c,
2448 .clkr = {
2449 .enable_reg = 0x4500c,
2450 .enable_mask = BIT(9),
2451 .hw.init = &(struct clk_init_data){
2452 .name = "gcc_vfe_tbu_clk",
2453 .parent_names = (const char *[]){
2454 "system_noc_bfdcd_clk_src",
2455 },
2456 .num_parents = 1,
2457 .flags = CLK_SET_RATE_PARENT,
2458 .ops = &clk_branch2_ops,
2459 },
2460 },
2461};
2462
2463static struct clk_branch gcc_usb2a_phy_sleep_clk = {
2464 .halt_reg = 0x4102c,
2465 .clkr = {
2466 .enable_reg = 0x4102c,
2467 .enable_mask = BIT(0),
2468 .hw.init = &(struct clk_init_data){
2469 .name = "gcc_usb2a_phy_sleep_clk",
2470 .parent_names = (const char *[]){
2471 "sleep_clk_src",
2472 },
2473 .num_parents = 1,
2474 .flags = CLK_SET_RATE_PARENT,
2475 .ops = &clk_branch2_ops,
2476 },
2477 },
2478};
2479
2480static struct clk_branch gcc_usb_hs_ahb_clk = {
2481 .halt_reg = 0x41008,
2482 .clkr = {
2483 .enable_reg = 0x41008,
2484 .enable_mask = BIT(0),
2485 .hw.init = &(struct clk_init_data){
2486 .name = "gcc_usb_hs_ahb_clk",
2487 .parent_names = (const char *[]){
2488 "pcnoc_bfdcd_clk_src",
2489 },
2490 .num_parents = 1,
2491 .flags = CLK_SET_RATE_PARENT,
2492 .ops = &clk_branch2_ops,
2493 },
2494 },
2495};
2496
2497static struct clk_branch gcc_usb_hs_system_clk = {
2498 .halt_reg = 0x41004,
2499 .clkr = {
2500 .enable_reg = 0x41004,
2501 .enable_mask = BIT(0),
2502 .hw.init = &(struct clk_init_data){
2503 .name = "gcc_usb_hs_system_clk",
2504 .parent_names = (const char *[]){
2505 "usb_hs_system_clk_src",
2506 },
2507 .num_parents = 1,
2508 .flags = CLK_SET_RATE_PARENT,
2509 .ops = &clk_branch2_ops,
2510 },
2511 },
2512};
2513
2514static struct clk_branch gcc_venus0_ahb_clk = {
2515 .halt_reg = 0x4c020,
2516 .clkr = {
2517 .enable_reg = 0x4c020,
2518 .enable_mask = BIT(0),
2519 .hw.init = &(struct clk_init_data){
2520 .name = "gcc_venus0_ahb_clk",
2521 .parent_names = (const char *[]){
2522 "pcnoc_bfdcd_clk_src",
2523 },
2524 .num_parents = 1,
2525 .flags = CLK_SET_RATE_PARENT,
2526 .ops = &clk_branch2_ops,
2527 },
2528 },
2529};
2530
2531static struct clk_branch gcc_venus0_axi_clk = {
2532 .halt_reg = 0x4c024,
2533 .clkr = {
2534 .enable_reg = 0x4c024,
2535 .enable_mask = BIT(0),
2536 .hw.init = &(struct clk_init_data){
2537 .name = "gcc_venus0_axi_clk",
2538 .parent_names = (const char *[]){
2539 "system_noc_bfdcd_clk_src",
2540 },
2541 .num_parents = 1,
2542 .flags = CLK_SET_RATE_PARENT,
2543 .ops = &clk_branch2_ops,
2544 },
2545 },
2546};
2547
2548static struct clk_branch gcc_venus0_vcodec0_clk = {
2549 .halt_reg = 0x4c01c,
2550 .clkr = {
2551 .enable_reg = 0x4c01c,
2552 .enable_mask = BIT(0),
2553 .hw.init = &(struct clk_init_data){
2554 .name = "gcc_venus0_vcodec0_clk",
2555 .parent_names = (const char *[]){
2556 "vcodec0_clk_src",
2557 },
2558 .num_parents = 1,
2559 .flags = CLK_SET_RATE_PARENT,
2560 .ops = &clk_branch2_ops,
2561 },
2562 },
2563};
2564
2565static struct clk_regmap *gcc_msm8916_clocks[] = {
2566 [GPLL0] = &gpll0.clkr,
2567 [GPLL0_VOTE] = &gpll0_vote,
2568 [BIMC_PLL] = &bimc_pll.clkr,
2569 [BIMC_PLL_VOTE] = &bimc_pll_vote,
2570 [GPLL1] = &gpll1.clkr,
2571 [GPLL1_VOTE] = &gpll1_vote,
2572 [GPLL2] = &gpll2.clkr,
2573 [GPLL2_VOTE] = &gpll2_vote,
2574 [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
2575 [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
2576 [CAMSS_AHB_CLK_SRC] = &camss_ahb_clk_src.clkr,
2577 [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
2578 [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
2579 [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
2580 [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
2581 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
2582 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2583 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2584 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2585 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2586 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2587 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2588 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2589 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2590 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2591 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2592 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2593 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2594 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2595 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2596 [CCI_CLK_SRC] = &cci_clk_src.clkr,
2597 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
2598 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
2599 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
2600 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
2601 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
2602 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
2603 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
2604 [CPP_CLK_SRC] = &cpp_clk_src.clkr,
2605 [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
2606 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
2607 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
2608 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
2609 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2610 [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2611 [MDP_CLK_SRC] = &mdp_clk_src.clkr,
2612 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2613 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2614 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2615 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2616 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2617 [APSS_TCU_CLK_SRC] = &apss_tcu_clk_src.clkr,
2618 [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2619 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
2620 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2621 [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
2622 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2623 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2624 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2625 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2626 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2627 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2628 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2629 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2630 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2631 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2632 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2633 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2634 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2635 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2636 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2637 [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
2638 [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
2639 [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
2640 [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
2641 [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
2642 [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
2643 [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
2644 [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
2645 [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
2646 [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
2647 [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
2648 [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
2649 [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
2650 [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
2651 [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
2652 [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
2653 [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
2654 [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
2655 [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
2656 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
2657 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
2658 [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
2659 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
2660 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
2661 [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
2662 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
2663 [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
2664 [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
2665 [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
2666 [GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr,
2667 [GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr,
2668 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
2669 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
2670 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
2671 [GCC_OXILI_GMEM_CLK] = &gcc_oxili_gmem_clk.clkr,
2672 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2673 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2674 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2675 [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
2676 [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
2677 [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
2678 [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
2679 [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
2680 [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
2681 [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
2682 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
2683 [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
2684 [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
2685 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2686 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2687 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2688 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2689 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2690 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2691 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2692 [GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
2693 [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
2694 [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
2695 [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
2696 [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
2697 [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
2698 [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
2699 [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
2700 [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2701 [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
2702 [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
2703 [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
2704};
2705
2706static const struct qcom_reset_map gcc_msm8916_resets[] = {
2707 [GCC_BLSP1_BCR] = { 0x01000 },
2708 [GCC_BLSP1_QUP1_BCR] = { 0x02000 },
2709 [GCC_BLSP1_UART1_BCR] = { 0x02038 },
2710 [GCC_BLSP1_QUP2_BCR] = { 0x03008 },
2711 [GCC_BLSP1_UART2_BCR] = { 0x03028 },
2712 [GCC_BLSP1_QUP3_BCR] = { 0x04018 },
2713 [GCC_BLSP1_QUP4_BCR] = { 0x05018 },
2714 [GCC_BLSP1_QUP5_BCR] = { 0x06018 },
2715 [GCC_BLSP1_QUP6_BCR] = { 0x07018 },
2716 [GCC_IMEM_BCR] = { 0x0e000 },
2717 [GCC_SMMU_BCR] = { 0x12000 },
2718 [GCC_APSS_TCU_BCR] = { 0x12050 },
2719 [GCC_SMMU_XPU_BCR] = { 0x12054 },
2720 [GCC_PCNOC_TBU_BCR] = { 0x12058 },
2721 [GCC_PRNG_BCR] = { 0x13000 },
2722 [GCC_BOOT_ROM_BCR] = { 0x13008 },
2723 [GCC_CRYPTO_BCR] = { 0x16000 },
2724 [GCC_SEC_CTRL_BCR] = { 0x1a000 },
2725 [GCC_AUDIO_CORE_BCR] = { 0x1c008 },
2726 [GCC_ULT_AUDIO_BCR] = { 0x1c0b4 },
2727 [GCC_DEHR_BCR] = { 0x1f000 },
2728 [GCC_SYSTEM_NOC_BCR] = { 0x26000 },
2729 [GCC_PCNOC_BCR] = { 0x27018 },
2730 [GCC_TCSR_BCR] = { 0x28000 },
2731 [GCC_QDSS_BCR] = { 0x29000 },
2732 [GCC_DCD_BCR] = { 0x2a000 },
2733 [GCC_MSG_RAM_BCR] = { 0x2b000 },
2734 [GCC_MPM_BCR] = { 0x2c000 },
2735 [GCC_SPMI_BCR] = { 0x2e000 },
2736 [GCC_SPDM_BCR] = { 0x2f000 },
2737 [GCC_MM_SPDM_BCR] = { 0x2f024 },
2738 [GCC_BIMC_BCR] = { 0x31000 },
2739 [GCC_RBCPR_BCR] = { 0x33000 },
2740 [GCC_TLMM_BCR] = { 0x34000 },
2741 [GCC_USB_HS_BCR] = { 0x41000 },
2742 [GCC_USB2A_PHY_BCR] = { 0x41028 },
2743 [GCC_SDCC1_BCR] = { 0x42000 },
2744 [GCC_SDCC2_BCR] = { 0x43000 },
2745 [GCC_PDM_BCR] = { 0x44000 },
2746 [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000 },
2747 [GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000 },
2748 [GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008 },
2749 [GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010 },
2750 [GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018 },
2751 [GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020 },
2752 [GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028 },
2753 [GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030 },
2754 [GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038 },
2755 [GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040 },
2756 [GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048 },
2757 [GCC_MMSS_BCR] = { 0x4b000 },
2758 [GCC_VENUS0_BCR] = { 0x4c014 },
2759 [GCC_MDSS_BCR] = { 0x4d074 },
2760 [GCC_CAMSS_PHY0_BCR] = { 0x4e018 },
2761 [GCC_CAMSS_CSI0_BCR] = { 0x4e038 },
2762 [GCC_CAMSS_CSI0PHY_BCR] = { 0x4e044 },
2763 [GCC_CAMSS_CSI0RDI_BCR] = { 0x4e04c },
2764 [GCC_CAMSS_CSI0PIX_BCR] = { 0x4e054 },
2765 [GCC_CAMSS_PHY1_BCR] = { 0x4f018 },
2766 [GCC_CAMSS_CSI1_BCR] = { 0x4f038 },
2767 [GCC_CAMSS_CSI1PHY_BCR] = { 0x4f044 },
2768 [GCC_CAMSS_CSI1RDI_BCR] = { 0x4f04c },
2769 [GCC_CAMSS_CSI1PIX_BCR] = { 0x4f054 },
2770 [GCC_CAMSS_ISPIF_BCR] = { 0x50000 },
2771 [GCC_CAMSS_CCI_BCR] = { 0x51014 },
2772 [GCC_CAMSS_MCLK0_BCR] = { 0x52014 },
2773 [GCC_CAMSS_MCLK1_BCR] = { 0x53014 },
2774 [GCC_CAMSS_GP0_BCR] = { 0x54014 },
2775 [GCC_CAMSS_GP1_BCR] = { 0x55014 },
2776 [GCC_CAMSS_TOP_BCR] = { 0x56000 },
2777 [GCC_CAMSS_MICRO_BCR] = { 0x56008 },
2778 [GCC_CAMSS_JPEG_BCR] = { 0x57018 },
2779 [GCC_CAMSS_VFE_BCR] = { 0x58030 },
2780 [GCC_CAMSS_CSI_VFE0_BCR] = { 0x5804c },
2781 [GCC_OXILI_BCR] = { 0x59018 },
2782 [GCC_GMEM_BCR] = { 0x5902c },
2783 [GCC_CAMSS_AHB_BCR] = { 0x5a018 },
2784 [GCC_MDP_TBU_BCR] = { 0x62000 },
2785 [GCC_GFX_TBU_BCR] = { 0x63000 },
2786 [GCC_GFX_TCU_BCR] = { 0x64000 },
2787 [GCC_MSS_TBU_AXI_BCR] = { 0x65000 },
2788 [GCC_MSS_TBU_GSS_AXI_BCR] = { 0x66000 },
2789 [GCC_MSS_TBU_Q6_AXI_BCR] = { 0x67000 },
2790 [GCC_GTCU_AHB_BCR] = { 0x68000 },
2791 [GCC_SMMU_CFG_BCR] = { 0x69000 },
2792 [GCC_VFE_TBU_BCR] = { 0x6a000 },
2793 [GCC_VENUS_TBU_BCR] = { 0x6b000 },
2794 [GCC_JPEG_TBU_BCR] = { 0x6c000 },
2795 [GCC_PRONTO_TBU_BCR] = { 0x6d000 },
2796 [GCC_SMMU_CATS_BCR] = { 0x7c000 },
2797};
2798
2799static const struct regmap_config gcc_msm8916_regmap_config = {
2800 .reg_bits = 32,
2801 .reg_stride = 4,
2802 .val_bits = 32,
2803 .max_register = 0x80000,
2804 .fast_io = true,
2805};
2806
2807static const struct qcom_cc_desc gcc_msm8916_desc = {
2808 .config = &gcc_msm8916_regmap_config,
2809 .clks = gcc_msm8916_clocks,
2810 .num_clks = ARRAY_SIZE(gcc_msm8916_clocks),
2811 .resets = gcc_msm8916_resets,
2812 .num_resets = ARRAY_SIZE(gcc_msm8916_resets),
2813};
2814
2815static const struct of_device_id gcc_msm8916_match_table[] = {
2816 { .compatible = "qcom,gcc-msm8916" },
2817 { }
2818};
2819MODULE_DEVICE_TABLE(of, gcc_msm8916_match_table);
2820
2821static int gcc_msm8916_probe(struct platform_device *pdev)
2822{
2823 struct clk *clk;
2824 struct device *dev = &pdev->dev;
2825
2826 /* Temporary until RPM clocks supported */
2827 clk = clk_register_fixed_rate(dev, "xo", NULL, CLK_IS_ROOT, 19200000);
2828 if (IS_ERR(clk))
2829 return PTR_ERR(clk);
2830
2831 clk = clk_register_fixed_rate(dev, "sleep_clk_src", NULL,
2832 CLK_IS_ROOT, 32768);
2833 if (IS_ERR(clk))
2834 return PTR_ERR(clk);
2835
2836 return qcom_cc_probe(pdev, &gcc_msm8916_desc);
2837}
2838
2839static int gcc_msm8916_remove(struct platform_device *pdev)
2840{
2841 qcom_cc_remove(pdev);
2842 return 0;
2843}
2844
2845static struct platform_driver gcc_msm8916_driver = {
2846 .probe = gcc_msm8916_probe,
2847 .remove = gcc_msm8916_remove,
2848 .driver = {
2849 .name = "gcc-msm8916",
2850 .of_match_table = gcc_msm8916_match_table,
2851 },
2852};
2853
2854static int __init gcc_msm8916_init(void)
2855{
2856 return platform_driver_register(&gcc_msm8916_driver);
2857}
2858core_initcall(gcc_msm8916_init);
2859
2860static void __exit gcc_msm8916_exit(void)
2861{
2862 platform_driver_unregister(&gcc_msm8916_driver);
2863}
2864module_exit(gcc_msm8916_exit);
2865
2866MODULE_DESCRIPTION("Qualcomm GCC MSM8916 Driver");
2867MODULE_LICENSE("GPL v2");
2868MODULE_ALIAS("platform:gcc-msm8916");