clk: qcom: Introduce parent_map tables
[deliverable/linux.git] / drivers / clk / qcom / mmcc-msm8974.c
1 /*
2 * Copyright (c) 2013, The Linux Foundation. All rights reserved.
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,mmcc-msm8974.h>
26 #include <dt-bindings/reset/qcom,mmcc-msm8974.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
35 enum {
36 P_XO,
37 P_MMPLL0,
38 P_EDPLINK,
39 P_MMPLL1,
40 P_HDMIPLL,
41 P_GPLL0,
42 P_EDPVCO,
43 P_GPLL1,
44 P_DSI0PLL,
45 P_DSI0PLL_BYTE,
46 P_MMPLL2,
47 P_MMPLL3,
48 P_DSI1PLL,
49 P_DSI1PLL_BYTE,
50 };
51
52 static const struct parent_map mmcc_xo_mmpll0_mmpll1_gpll0_map[] = {
53 { P_XO, 0 },
54 { P_MMPLL0, 1 },
55 { P_MMPLL1, 2 },
56 { P_GPLL0, 5 }
57 };
58
59 static const char *mmcc_xo_mmpll0_mmpll1_gpll0[] = {
60 "xo",
61 "mmpll0_vote",
62 "mmpll1_vote",
63 "mmss_gpll0_vote",
64 };
65
66 static const struct parent_map mmcc_xo_mmpll0_dsi_hdmi_gpll0_map[] = {
67 { P_XO, 0 },
68 { P_MMPLL0, 1 },
69 { P_HDMIPLL, 4 },
70 { P_GPLL0, 5 },
71 { P_DSI0PLL, 2 },
72 { P_DSI1PLL, 3 }
73 };
74
75 static const char *mmcc_xo_mmpll0_dsi_hdmi_gpll0[] = {
76 "xo",
77 "mmpll0_vote",
78 "hdmipll",
79 "mmss_gpll0_vote",
80 "dsi0pll",
81 "dsi1pll",
82 };
83
84 static const struct parent_map mmcc_xo_mmpll0_1_2_gpll0_map[] = {
85 { P_XO, 0 },
86 { P_MMPLL0, 1 },
87 { P_MMPLL1, 2 },
88 { P_GPLL0, 5 },
89 { P_MMPLL2, 3 }
90 };
91
92 static const char *mmcc_xo_mmpll0_1_2_gpll0[] = {
93 "xo",
94 "mmpll0_vote",
95 "mmpll1_vote",
96 "mmss_gpll0_vote",
97 "mmpll2",
98 };
99
100 static const struct parent_map mmcc_xo_mmpll0_1_3_gpll0_map[] = {
101 { P_XO, 0 },
102 { P_MMPLL0, 1 },
103 { P_MMPLL1, 2 },
104 { P_GPLL0, 5 },
105 { P_MMPLL3, 3 }
106 };
107
108 static const char *mmcc_xo_mmpll0_1_3_gpll0[] = {
109 "xo",
110 "mmpll0_vote",
111 "mmpll1_vote",
112 "mmss_gpll0_vote",
113 "mmpll3",
114 };
115
116 static const struct parent_map mmcc_xo_mmpll0_1_gpll1_0_map[] = {
117 { P_XO, 0 },
118 { P_MMPLL0, 1 },
119 { P_MMPLL1, 2 },
120 { P_GPLL0, 5 },
121 { P_GPLL1, 4 }
122 };
123
124 static const char *mmcc_xo_mmpll0_1_gpll1_0[] = {
125 "xo",
126 "mmpll0_vote",
127 "mmpll1_vote",
128 "mmss_gpll0_vote",
129 "gpll1_vote",
130 };
131
132 static const struct parent_map mmcc_xo_dsi_hdmi_edp_map[] = {
133 { P_XO, 0 },
134 { P_EDPLINK, 4 },
135 { P_HDMIPLL, 3 },
136 { P_EDPVCO, 5 },
137 { P_DSI0PLL, 1 },
138 { P_DSI1PLL, 2 }
139 };
140
141 static const char *mmcc_xo_dsi_hdmi_edp[] = {
142 "xo",
143 "edp_link_clk",
144 "hdmipll",
145 "edp_vco_div",
146 "dsi0pll",
147 "dsi1pll",
148 };
149
150 static const struct parent_map mmcc_xo_dsi_hdmi_edp_gpll0_map[] = {
151 { P_XO, 0 },
152 { P_EDPLINK, 4 },
153 { P_HDMIPLL, 3 },
154 { P_GPLL0, 5 },
155 { P_DSI0PLL, 1 },
156 { P_DSI1PLL, 2 }
157 };
158
159 static const char *mmcc_xo_dsi_hdmi_edp_gpll0[] = {
160 "xo",
161 "edp_link_clk",
162 "hdmipll",
163 "gpll0_vote",
164 "dsi0pll",
165 "dsi1pll",
166 };
167
168 static const struct parent_map mmcc_xo_dsibyte_hdmi_edp_gpll0_map[] = {
169 { P_XO, 0 },
170 { P_EDPLINK, 4 },
171 { P_HDMIPLL, 3 },
172 { P_GPLL0, 5 },
173 { P_DSI0PLL_BYTE, 1 },
174 { P_DSI1PLL_BYTE, 2 }
175 };
176
177 static const char *mmcc_xo_dsibyte_hdmi_edp_gpll0[] = {
178 "xo",
179 "edp_link_clk",
180 "hdmipll",
181 "gpll0_vote",
182 "dsi0pllbyte",
183 "dsi1pllbyte",
184 };
185
186 #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
187
188 static struct clk_pll mmpll0 = {
189 .l_reg = 0x0004,
190 .m_reg = 0x0008,
191 .n_reg = 0x000c,
192 .config_reg = 0x0014,
193 .mode_reg = 0x0000,
194 .status_reg = 0x001c,
195 .status_bit = 17,
196 .clkr.hw.init = &(struct clk_init_data){
197 .name = "mmpll0",
198 .parent_names = (const char *[]){ "xo" },
199 .num_parents = 1,
200 .ops = &clk_pll_ops,
201 },
202 };
203
204 static struct clk_regmap mmpll0_vote = {
205 .enable_reg = 0x0100,
206 .enable_mask = BIT(0),
207 .hw.init = &(struct clk_init_data){
208 .name = "mmpll0_vote",
209 .parent_names = (const char *[]){ "mmpll0" },
210 .num_parents = 1,
211 .ops = &clk_pll_vote_ops,
212 },
213 };
214
215 static struct clk_pll mmpll1 = {
216 .l_reg = 0x0044,
217 .m_reg = 0x0048,
218 .n_reg = 0x004c,
219 .config_reg = 0x0050,
220 .mode_reg = 0x0040,
221 .status_reg = 0x005c,
222 .status_bit = 17,
223 .clkr.hw.init = &(struct clk_init_data){
224 .name = "mmpll1",
225 .parent_names = (const char *[]){ "xo" },
226 .num_parents = 1,
227 .ops = &clk_pll_ops,
228 },
229 };
230
231 static struct clk_regmap mmpll1_vote = {
232 .enable_reg = 0x0100,
233 .enable_mask = BIT(1),
234 .hw.init = &(struct clk_init_data){
235 .name = "mmpll1_vote",
236 .parent_names = (const char *[]){ "mmpll1" },
237 .num_parents = 1,
238 .ops = &clk_pll_vote_ops,
239 },
240 };
241
242 static struct clk_pll mmpll2 = {
243 .l_reg = 0x4104,
244 .m_reg = 0x4108,
245 .n_reg = 0x410c,
246 .config_reg = 0x4110,
247 .mode_reg = 0x4100,
248 .status_reg = 0x411c,
249 .clkr.hw.init = &(struct clk_init_data){
250 .name = "mmpll2",
251 .parent_names = (const char *[]){ "xo" },
252 .num_parents = 1,
253 .ops = &clk_pll_ops,
254 },
255 };
256
257 static struct clk_pll mmpll3 = {
258 .l_reg = 0x0084,
259 .m_reg = 0x0088,
260 .n_reg = 0x008c,
261 .config_reg = 0x0090,
262 .mode_reg = 0x0080,
263 .status_reg = 0x009c,
264 .status_bit = 17,
265 .clkr.hw.init = &(struct clk_init_data){
266 .name = "mmpll3",
267 .parent_names = (const char *[]){ "xo" },
268 .num_parents = 1,
269 .ops = &clk_pll_ops,
270 },
271 };
272
273 static struct clk_rcg2 mmss_ahb_clk_src = {
274 .cmd_rcgr = 0x5000,
275 .hid_width = 5,
276 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
277 .clkr.hw.init = &(struct clk_init_data){
278 .name = "mmss_ahb_clk_src",
279 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
280 .num_parents = 4,
281 .ops = &clk_rcg2_ops,
282 },
283 };
284
285 static struct freq_tbl ftbl_mmss_axi_clk[] = {
286 F( 19200000, P_XO, 1, 0, 0),
287 F( 37500000, P_GPLL0, 16, 0, 0),
288 F( 50000000, P_GPLL0, 12, 0, 0),
289 F( 75000000, P_GPLL0, 8, 0, 0),
290 F(100000000, P_GPLL0, 6, 0, 0),
291 F(150000000, P_GPLL0, 4, 0, 0),
292 F(291750000, P_MMPLL1, 4, 0, 0),
293 F(400000000, P_MMPLL0, 2, 0, 0),
294 F(466800000, P_MMPLL1, 2.5, 0, 0),
295 };
296
297 static struct clk_rcg2 mmss_axi_clk_src = {
298 .cmd_rcgr = 0x5040,
299 .hid_width = 5,
300 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
301 .freq_tbl = ftbl_mmss_axi_clk,
302 .clkr.hw.init = &(struct clk_init_data){
303 .name = "mmss_axi_clk_src",
304 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
305 .num_parents = 4,
306 .ops = &clk_rcg2_ops,
307 },
308 };
309
310 static struct freq_tbl ftbl_ocmemnoc_clk[] = {
311 F( 19200000, P_XO, 1, 0, 0),
312 F( 37500000, P_GPLL0, 16, 0, 0),
313 F( 50000000, P_GPLL0, 12, 0, 0),
314 F( 75000000, P_GPLL0, 8, 0, 0),
315 F(100000000, P_GPLL0, 6, 0, 0),
316 F(150000000, P_GPLL0, 4, 0, 0),
317 F(291750000, P_MMPLL1, 4, 0, 0),
318 F(400000000, P_MMPLL0, 2, 0, 0),
319 };
320
321 static struct clk_rcg2 ocmemnoc_clk_src = {
322 .cmd_rcgr = 0x5090,
323 .hid_width = 5,
324 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
325 .freq_tbl = ftbl_ocmemnoc_clk,
326 .clkr.hw.init = &(struct clk_init_data){
327 .name = "ocmemnoc_clk_src",
328 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
329 .num_parents = 4,
330 .ops = &clk_rcg2_ops,
331 },
332 };
333
334 static struct freq_tbl ftbl_camss_csi0_3_clk[] = {
335 F(100000000, P_GPLL0, 6, 0, 0),
336 F(200000000, P_MMPLL0, 4, 0, 0),
337 { }
338 };
339
340 static struct clk_rcg2 csi0_clk_src = {
341 .cmd_rcgr = 0x3090,
342 .hid_width = 5,
343 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
344 .freq_tbl = ftbl_camss_csi0_3_clk,
345 .clkr.hw.init = &(struct clk_init_data){
346 .name = "csi0_clk_src",
347 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
348 .num_parents = 4,
349 .ops = &clk_rcg2_ops,
350 },
351 };
352
353 static struct clk_rcg2 csi1_clk_src = {
354 .cmd_rcgr = 0x3100,
355 .hid_width = 5,
356 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
357 .freq_tbl = ftbl_camss_csi0_3_clk,
358 .clkr.hw.init = &(struct clk_init_data){
359 .name = "csi1_clk_src",
360 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
361 .num_parents = 4,
362 .ops = &clk_rcg2_ops,
363 },
364 };
365
366 static struct clk_rcg2 csi2_clk_src = {
367 .cmd_rcgr = 0x3160,
368 .hid_width = 5,
369 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
370 .freq_tbl = ftbl_camss_csi0_3_clk,
371 .clkr.hw.init = &(struct clk_init_data){
372 .name = "csi2_clk_src",
373 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
374 .num_parents = 4,
375 .ops = &clk_rcg2_ops,
376 },
377 };
378
379 static struct clk_rcg2 csi3_clk_src = {
380 .cmd_rcgr = 0x31c0,
381 .hid_width = 5,
382 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
383 .freq_tbl = ftbl_camss_csi0_3_clk,
384 .clkr.hw.init = &(struct clk_init_data){
385 .name = "csi3_clk_src",
386 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
387 .num_parents = 4,
388 .ops = &clk_rcg2_ops,
389 },
390 };
391
392 static struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
393 F(37500000, P_GPLL0, 16, 0, 0),
394 F(50000000, P_GPLL0, 12, 0, 0),
395 F(60000000, P_GPLL0, 10, 0, 0),
396 F(80000000, P_GPLL0, 7.5, 0, 0),
397 F(100000000, P_GPLL0, 6, 0, 0),
398 F(109090000, P_GPLL0, 5.5, 0, 0),
399 F(133330000, P_GPLL0, 4.5, 0, 0),
400 F(200000000, P_GPLL0, 3, 0, 0),
401 F(228570000, P_MMPLL0, 3.5, 0, 0),
402 F(266670000, P_MMPLL0, 3, 0, 0),
403 F(320000000, P_MMPLL0, 2.5, 0, 0),
404 F(400000000, P_MMPLL0, 2, 0, 0),
405 F(465000000, P_MMPLL3, 2, 0, 0),
406 { }
407 };
408
409 static struct clk_rcg2 vfe0_clk_src = {
410 .cmd_rcgr = 0x3600,
411 .hid_width = 5,
412 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
413 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
414 .clkr.hw.init = &(struct clk_init_data){
415 .name = "vfe0_clk_src",
416 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
417 .num_parents = 4,
418 .ops = &clk_rcg2_ops,
419 },
420 };
421
422 static struct clk_rcg2 vfe1_clk_src = {
423 .cmd_rcgr = 0x3620,
424 .hid_width = 5,
425 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
426 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
427 .clkr.hw.init = &(struct clk_init_data){
428 .name = "vfe1_clk_src",
429 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
430 .num_parents = 4,
431 .ops = &clk_rcg2_ops,
432 },
433 };
434
435 static struct freq_tbl ftbl_mdss_mdp_clk[] = {
436 F(37500000, P_GPLL0, 16, 0, 0),
437 F(60000000, P_GPLL0, 10, 0, 0),
438 F(75000000, P_GPLL0, 8, 0, 0),
439 F(85710000, P_GPLL0, 7, 0, 0),
440 F(100000000, P_GPLL0, 6, 0, 0),
441 F(133330000, P_MMPLL0, 6, 0, 0),
442 F(160000000, P_MMPLL0, 5, 0, 0),
443 F(200000000, P_MMPLL0, 4, 0, 0),
444 F(228570000, P_MMPLL0, 3.5, 0, 0),
445 F(240000000, P_GPLL0, 2.5, 0, 0),
446 F(266670000, P_MMPLL0, 3, 0, 0),
447 F(320000000, P_MMPLL0, 2.5, 0, 0),
448 { }
449 };
450
451 static struct clk_rcg2 mdp_clk_src = {
452 .cmd_rcgr = 0x2040,
453 .hid_width = 5,
454 .parent_map = mmcc_xo_mmpll0_dsi_hdmi_gpll0_map,
455 .freq_tbl = ftbl_mdss_mdp_clk,
456 .clkr.hw.init = &(struct clk_init_data){
457 .name = "mdp_clk_src",
458 .parent_names = mmcc_xo_mmpll0_dsi_hdmi_gpll0,
459 .num_parents = 6,
460 .ops = &clk_rcg2_ops,
461 },
462 };
463
464 static struct clk_rcg2 gfx3d_clk_src = {
465 .cmd_rcgr = 0x4000,
466 .hid_width = 5,
467 .parent_map = mmcc_xo_mmpll0_1_2_gpll0_map,
468 .clkr.hw.init = &(struct clk_init_data){
469 .name = "gfx3d_clk_src",
470 .parent_names = mmcc_xo_mmpll0_1_2_gpll0,
471 .num_parents = 5,
472 .ops = &clk_rcg2_ops,
473 },
474 };
475
476 static struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
477 F(75000000, P_GPLL0, 8, 0, 0),
478 F(133330000, P_GPLL0, 4.5, 0, 0),
479 F(200000000, P_GPLL0, 3, 0, 0),
480 F(228570000, P_MMPLL0, 3.5, 0, 0),
481 F(266670000, P_MMPLL0, 3, 0, 0),
482 F(320000000, P_MMPLL0, 2.5, 0, 0),
483 { }
484 };
485
486 static struct clk_rcg2 jpeg0_clk_src = {
487 .cmd_rcgr = 0x3500,
488 .hid_width = 5,
489 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
490 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
491 .clkr.hw.init = &(struct clk_init_data){
492 .name = "jpeg0_clk_src",
493 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
494 .num_parents = 4,
495 .ops = &clk_rcg2_ops,
496 },
497 };
498
499 static struct clk_rcg2 jpeg1_clk_src = {
500 .cmd_rcgr = 0x3520,
501 .hid_width = 5,
502 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
503 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
504 .clkr.hw.init = &(struct clk_init_data){
505 .name = "jpeg1_clk_src",
506 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
507 .num_parents = 4,
508 .ops = &clk_rcg2_ops,
509 },
510 };
511
512 static struct clk_rcg2 jpeg2_clk_src = {
513 .cmd_rcgr = 0x3540,
514 .hid_width = 5,
515 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
516 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
517 .clkr.hw.init = &(struct clk_init_data){
518 .name = "jpeg2_clk_src",
519 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
520 .num_parents = 4,
521 .ops = &clk_rcg2_ops,
522 },
523 };
524
525 static struct freq_tbl pixel_freq_tbl[] = {
526 { .src = P_DSI0PLL },
527 { }
528 };
529
530 static struct clk_rcg2 pclk0_clk_src = {
531 .cmd_rcgr = 0x2000,
532 .mnd_width = 8,
533 .hid_width = 5,
534 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
535 .freq_tbl = pixel_freq_tbl,
536 .clkr.hw.init = &(struct clk_init_data){
537 .name = "pclk0_clk_src",
538 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
539 .num_parents = 6,
540 .ops = &clk_pixel_ops,
541 .flags = CLK_SET_RATE_PARENT,
542 },
543 };
544
545 static struct clk_rcg2 pclk1_clk_src = {
546 .cmd_rcgr = 0x2020,
547 .mnd_width = 8,
548 .hid_width = 5,
549 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
550 .freq_tbl = pixel_freq_tbl,
551 .clkr.hw.init = &(struct clk_init_data){
552 .name = "pclk1_clk_src",
553 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
554 .num_parents = 6,
555 .ops = &clk_pixel_ops,
556 .flags = CLK_SET_RATE_PARENT,
557 },
558 };
559
560 static struct freq_tbl ftbl_venus0_vcodec0_clk[] = {
561 F(50000000, P_GPLL0, 12, 0, 0),
562 F(100000000, P_GPLL0, 6, 0, 0),
563 F(133330000, P_MMPLL0, 6, 0, 0),
564 F(200000000, P_MMPLL0, 4, 0, 0),
565 F(266670000, P_MMPLL0, 3, 0, 0),
566 F(465000000, P_MMPLL3, 2, 0, 0),
567 { }
568 };
569
570 static struct clk_rcg2 vcodec0_clk_src = {
571 .cmd_rcgr = 0x1000,
572 .mnd_width = 8,
573 .hid_width = 5,
574 .parent_map = mmcc_xo_mmpll0_1_3_gpll0_map,
575 .freq_tbl = ftbl_venus0_vcodec0_clk,
576 .clkr.hw.init = &(struct clk_init_data){
577 .name = "vcodec0_clk_src",
578 .parent_names = mmcc_xo_mmpll0_1_3_gpll0,
579 .num_parents = 5,
580 .ops = &clk_rcg2_ops,
581 },
582 };
583
584 static struct freq_tbl ftbl_camss_cci_cci_clk[] = {
585 F(19200000, P_XO, 1, 0, 0),
586 { }
587 };
588
589 static struct clk_rcg2 cci_clk_src = {
590 .cmd_rcgr = 0x3300,
591 .hid_width = 5,
592 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
593 .freq_tbl = ftbl_camss_cci_cci_clk,
594 .clkr.hw.init = &(struct clk_init_data){
595 .name = "cci_clk_src",
596 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
597 .num_parents = 4,
598 .ops = &clk_rcg2_ops,
599 },
600 };
601
602 static struct freq_tbl ftbl_camss_gp0_1_clk[] = {
603 F(10000, P_XO, 16, 1, 120),
604 F(24000, P_XO, 16, 1, 50),
605 F(6000000, P_GPLL0, 10, 1, 10),
606 F(12000000, P_GPLL0, 10, 1, 5),
607 F(13000000, P_GPLL0, 4, 13, 150),
608 F(24000000, P_GPLL0, 5, 1, 5),
609 { }
610 };
611
612 static struct clk_rcg2 camss_gp0_clk_src = {
613 .cmd_rcgr = 0x3420,
614 .mnd_width = 8,
615 .hid_width = 5,
616 .parent_map = mmcc_xo_mmpll0_1_gpll1_0_map,
617 .freq_tbl = ftbl_camss_gp0_1_clk,
618 .clkr.hw.init = &(struct clk_init_data){
619 .name = "camss_gp0_clk_src",
620 .parent_names = mmcc_xo_mmpll0_1_gpll1_0,
621 .num_parents = 5,
622 .ops = &clk_rcg2_ops,
623 },
624 };
625
626 static struct clk_rcg2 camss_gp1_clk_src = {
627 .cmd_rcgr = 0x3450,
628 .mnd_width = 8,
629 .hid_width = 5,
630 .parent_map = mmcc_xo_mmpll0_1_gpll1_0_map,
631 .freq_tbl = ftbl_camss_gp0_1_clk,
632 .clkr.hw.init = &(struct clk_init_data){
633 .name = "camss_gp1_clk_src",
634 .parent_names = mmcc_xo_mmpll0_1_gpll1_0,
635 .num_parents = 5,
636 .ops = &clk_rcg2_ops,
637 },
638 };
639
640 static struct freq_tbl ftbl_camss_mclk0_3_clk[] = {
641 F(4800000, P_XO, 4, 0, 0),
642 F(6000000, P_GPLL0, 10, 1, 10),
643 F(8000000, P_GPLL0, 15, 1, 5),
644 F(9600000, P_XO, 2, 0, 0),
645 F(16000000, P_GPLL0, 12.5, 1, 3),
646 F(19200000, P_XO, 1, 0, 0),
647 F(24000000, P_GPLL0, 5, 1, 5),
648 F(32000000, P_MMPLL0, 5, 1, 5),
649 F(48000000, P_GPLL0, 12.5, 0, 0),
650 F(64000000, P_MMPLL0, 12.5, 0, 0),
651 F(66670000, P_GPLL0, 9, 0, 0),
652 { }
653 };
654
655 static struct clk_rcg2 mclk0_clk_src = {
656 .cmd_rcgr = 0x3360,
657 .hid_width = 5,
658 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
659 .freq_tbl = ftbl_camss_mclk0_3_clk,
660 .clkr.hw.init = &(struct clk_init_data){
661 .name = "mclk0_clk_src",
662 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
663 .num_parents = 4,
664 .ops = &clk_rcg2_ops,
665 },
666 };
667
668 static struct clk_rcg2 mclk1_clk_src = {
669 .cmd_rcgr = 0x3390,
670 .hid_width = 5,
671 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
672 .freq_tbl = ftbl_camss_mclk0_3_clk,
673 .clkr.hw.init = &(struct clk_init_data){
674 .name = "mclk1_clk_src",
675 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
676 .num_parents = 4,
677 .ops = &clk_rcg2_ops,
678 },
679 };
680
681 static struct clk_rcg2 mclk2_clk_src = {
682 .cmd_rcgr = 0x33c0,
683 .hid_width = 5,
684 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
685 .freq_tbl = ftbl_camss_mclk0_3_clk,
686 .clkr.hw.init = &(struct clk_init_data){
687 .name = "mclk2_clk_src",
688 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
689 .num_parents = 4,
690 .ops = &clk_rcg2_ops,
691 },
692 };
693
694 static struct clk_rcg2 mclk3_clk_src = {
695 .cmd_rcgr = 0x33f0,
696 .hid_width = 5,
697 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
698 .freq_tbl = ftbl_camss_mclk0_3_clk,
699 .clkr.hw.init = &(struct clk_init_data){
700 .name = "mclk3_clk_src",
701 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
702 .num_parents = 4,
703 .ops = &clk_rcg2_ops,
704 },
705 };
706
707 static struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
708 F(100000000, P_GPLL0, 6, 0, 0),
709 F(200000000, P_MMPLL0, 4, 0, 0),
710 { }
711 };
712
713 static struct clk_rcg2 csi0phytimer_clk_src = {
714 .cmd_rcgr = 0x3000,
715 .hid_width = 5,
716 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
717 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
718 .clkr.hw.init = &(struct clk_init_data){
719 .name = "csi0phytimer_clk_src",
720 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
721 .num_parents = 4,
722 .ops = &clk_rcg2_ops,
723 },
724 };
725
726 static struct clk_rcg2 csi1phytimer_clk_src = {
727 .cmd_rcgr = 0x3030,
728 .hid_width = 5,
729 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
730 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
731 .clkr.hw.init = &(struct clk_init_data){
732 .name = "csi1phytimer_clk_src",
733 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
734 .num_parents = 4,
735 .ops = &clk_rcg2_ops,
736 },
737 };
738
739 static struct clk_rcg2 csi2phytimer_clk_src = {
740 .cmd_rcgr = 0x3060,
741 .hid_width = 5,
742 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
743 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
744 .clkr.hw.init = &(struct clk_init_data){
745 .name = "csi2phytimer_clk_src",
746 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
747 .num_parents = 4,
748 .ops = &clk_rcg2_ops,
749 },
750 };
751
752 static struct freq_tbl ftbl_camss_vfe_cpp_clk[] = {
753 F(133330000, P_GPLL0, 4.5, 0, 0),
754 F(266670000, P_MMPLL0, 3, 0, 0),
755 F(320000000, P_MMPLL0, 2.5, 0, 0),
756 F(400000000, P_MMPLL0, 2, 0, 0),
757 F(465000000, P_MMPLL3, 2, 0, 0),
758 { }
759 };
760
761 static struct clk_rcg2 cpp_clk_src = {
762 .cmd_rcgr = 0x3640,
763 .hid_width = 5,
764 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
765 .freq_tbl = ftbl_camss_vfe_cpp_clk,
766 .clkr.hw.init = &(struct clk_init_data){
767 .name = "cpp_clk_src",
768 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
769 .num_parents = 4,
770 .ops = &clk_rcg2_ops,
771 },
772 };
773
774 static struct freq_tbl byte_freq_tbl[] = {
775 { .src = P_DSI0PLL_BYTE },
776 { }
777 };
778
779 static struct clk_rcg2 byte0_clk_src = {
780 .cmd_rcgr = 0x2120,
781 .hid_width = 5,
782 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
783 .freq_tbl = byte_freq_tbl,
784 .clkr.hw.init = &(struct clk_init_data){
785 .name = "byte0_clk_src",
786 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
787 .num_parents = 6,
788 .ops = &clk_byte_ops,
789 .flags = CLK_SET_RATE_PARENT,
790 },
791 };
792
793 static struct clk_rcg2 byte1_clk_src = {
794 .cmd_rcgr = 0x2140,
795 .hid_width = 5,
796 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
797 .freq_tbl = byte_freq_tbl,
798 .clkr.hw.init = &(struct clk_init_data){
799 .name = "byte1_clk_src",
800 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
801 .num_parents = 6,
802 .ops = &clk_byte_ops,
803 .flags = CLK_SET_RATE_PARENT,
804 },
805 };
806
807 static struct freq_tbl ftbl_mdss_edpaux_clk[] = {
808 F(19200000, P_XO, 1, 0, 0),
809 { }
810 };
811
812 static struct clk_rcg2 edpaux_clk_src = {
813 .cmd_rcgr = 0x20e0,
814 .hid_width = 5,
815 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
816 .freq_tbl = ftbl_mdss_edpaux_clk,
817 .clkr.hw.init = &(struct clk_init_data){
818 .name = "edpaux_clk_src",
819 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
820 .num_parents = 4,
821 .ops = &clk_rcg2_ops,
822 },
823 };
824
825 static struct freq_tbl ftbl_mdss_edplink_clk[] = {
826 F(135000000, P_EDPLINK, 2, 0, 0),
827 F(270000000, P_EDPLINK, 11, 0, 0),
828 { }
829 };
830
831 static struct clk_rcg2 edplink_clk_src = {
832 .cmd_rcgr = 0x20c0,
833 .hid_width = 5,
834 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
835 .freq_tbl = ftbl_mdss_edplink_clk,
836 .clkr.hw.init = &(struct clk_init_data){
837 .name = "edplink_clk_src",
838 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
839 .num_parents = 6,
840 .ops = &clk_rcg2_ops,
841 .flags = CLK_SET_RATE_PARENT,
842 },
843 };
844
845 static struct freq_tbl edp_pixel_freq_tbl[] = {
846 { .src = P_EDPVCO },
847 { }
848 };
849
850 static struct clk_rcg2 edppixel_clk_src = {
851 .cmd_rcgr = 0x20a0,
852 .mnd_width = 8,
853 .hid_width = 5,
854 .parent_map = mmcc_xo_dsi_hdmi_edp_map,
855 .freq_tbl = edp_pixel_freq_tbl,
856 .clkr.hw.init = &(struct clk_init_data){
857 .name = "edppixel_clk_src",
858 .parent_names = mmcc_xo_dsi_hdmi_edp,
859 .num_parents = 6,
860 .ops = &clk_edp_pixel_ops,
861 },
862 };
863
864 static struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
865 F(19200000, P_XO, 1, 0, 0),
866 { }
867 };
868
869 static struct clk_rcg2 esc0_clk_src = {
870 .cmd_rcgr = 0x2160,
871 .hid_width = 5,
872 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
873 .freq_tbl = ftbl_mdss_esc0_1_clk,
874 .clkr.hw.init = &(struct clk_init_data){
875 .name = "esc0_clk_src",
876 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
877 .num_parents = 6,
878 .ops = &clk_rcg2_ops,
879 },
880 };
881
882 static struct clk_rcg2 esc1_clk_src = {
883 .cmd_rcgr = 0x2180,
884 .hid_width = 5,
885 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
886 .freq_tbl = ftbl_mdss_esc0_1_clk,
887 .clkr.hw.init = &(struct clk_init_data){
888 .name = "esc1_clk_src",
889 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
890 .num_parents = 6,
891 .ops = &clk_rcg2_ops,
892 },
893 };
894
895 static struct freq_tbl extpclk_freq_tbl[] = {
896 { .src = P_HDMIPLL },
897 { }
898 };
899
900 static struct clk_rcg2 extpclk_clk_src = {
901 .cmd_rcgr = 0x2060,
902 .hid_width = 5,
903 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
904 .freq_tbl = extpclk_freq_tbl,
905 .clkr.hw.init = &(struct clk_init_data){
906 .name = "extpclk_clk_src",
907 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
908 .num_parents = 6,
909 .ops = &clk_byte_ops,
910 .flags = CLK_SET_RATE_PARENT,
911 },
912 };
913
914 static struct freq_tbl ftbl_mdss_hdmi_clk[] = {
915 F(19200000, P_XO, 1, 0, 0),
916 { }
917 };
918
919 static struct clk_rcg2 hdmi_clk_src = {
920 .cmd_rcgr = 0x2100,
921 .hid_width = 5,
922 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
923 .freq_tbl = ftbl_mdss_hdmi_clk,
924 .clkr.hw.init = &(struct clk_init_data){
925 .name = "hdmi_clk_src",
926 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
927 .num_parents = 4,
928 .ops = &clk_rcg2_ops,
929 },
930 };
931
932 static struct freq_tbl ftbl_mdss_vsync_clk[] = {
933 F(19200000, P_XO, 1, 0, 0),
934 { }
935 };
936
937 static struct clk_rcg2 vsync_clk_src = {
938 .cmd_rcgr = 0x2080,
939 .hid_width = 5,
940 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
941 .freq_tbl = ftbl_mdss_vsync_clk,
942 .clkr.hw.init = &(struct clk_init_data){
943 .name = "vsync_clk_src",
944 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
945 .num_parents = 4,
946 .ops = &clk_rcg2_ops,
947 },
948 };
949
950 static struct clk_branch camss_cci_cci_ahb_clk = {
951 .halt_reg = 0x3348,
952 .clkr = {
953 .enable_reg = 0x3348,
954 .enable_mask = BIT(0),
955 .hw.init = &(struct clk_init_data){
956 .name = "camss_cci_cci_ahb_clk",
957 .parent_names = (const char *[]){
958 "mmss_ahb_clk_src",
959 },
960 .num_parents = 1,
961 .ops = &clk_branch2_ops,
962 },
963 },
964 };
965
966 static struct clk_branch camss_cci_cci_clk = {
967 .halt_reg = 0x3344,
968 .clkr = {
969 .enable_reg = 0x3344,
970 .enable_mask = BIT(0),
971 .hw.init = &(struct clk_init_data){
972 .name = "camss_cci_cci_clk",
973 .parent_names = (const char *[]){
974 "cci_clk_src",
975 },
976 .num_parents = 1,
977 .flags = CLK_SET_RATE_PARENT,
978 .ops = &clk_branch2_ops,
979 },
980 },
981 };
982
983 static struct clk_branch camss_csi0_ahb_clk = {
984 .halt_reg = 0x30bc,
985 .clkr = {
986 .enable_reg = 0x30bc,
987 .enable_mask = BIT(0),
988 .hw.init = &(struct clk_init_data){
989 .name = "camss_csi0_ahb_clk",
990 .parent_names = (const char *[]){
991 "mmss_ahb_clk_src",
992 },
993 .num_parents = 1,
994 .ops = &clk_branch2_ops,
995 },
996 },
997 };
998
999 static struct clk_branch camss_csi0_clk = {
1000 .halt_reg = 0x30b4,
1001 .clkr = {
1002 .enable_reg = 0x30b4,
1003 .enable_mask = BIT(0),
1004 .hw.init = &(struct clk_init_data){
1005 .name = "camss_csi0_clk",
1006 .parent_names = (const char *[]){
1007 "csi0_clk_src",
1008 },
1009 .num_parents = 1,
1010 .flags = CLK_SET_RATE_PARENT,
1011 .ops = &clk_branch2_ops,
1012 },
1013 },
1014 };
1015
1016 static struct clk_branch camss_csi0phy_clk = {
1017 .halt_reg = 0x30c4,
1018 .clkr = {
1019 .enable_reg = 0x30c4,
1020 .enable_mask = BIT(0),
1021 .hw.init = &(struct clk_init_data){
1022 .name = "camss_csi0phy_clk",
1023 .parent_names = (const char *[]){
1024 "csi0_clk_src",
1025 },
1026 .num_parents = 1,
1027 .flags = CLK_SET_RATE_PARENT,
1028 .ops = &clk_branch2_ops,
1029 },
1030 },
1031 };
1032
1033 static struct clk_branch camss_csi0pix_clk = {
1034 .halt_reg = 0x30e4,
1035 .clkr = {
1036 .enable_reg = 0x30e4,
1037 .enable_mask = BIT(0),
1038 .hw.init = &(struct clk_init_data){
1039 .name = "camss_csi0pix_clk",
1040 .parent_names = (const char *[]){
1041 "csi0_clk_src",
1042 },
1043 .num_parents = 1,
1044 .flags = CLK_SET_RATE_PARENT,
1045 .ops = &clk_branch2_ops,
1046 },
1047 },
1048 };
1049
1050 static struct clk_branch camss_csi0rdi_clk = {
1051 .halt_reg = 0x30d4,
1052 .clkr = {
1053 .enable_reg = 0x30d4,
1054 .enable_mask = BIT(0),
1055 .hw.init = &(struct clk_init_data){
1056 .name = "camss_csi0rdi_clk",
1057 .parent_names = (const char *[]){
1058 "csi0_clk_src",
1059 },
1060 .num_parents = 1,
1061 .flags = CLK_SET_RATE_PARENT,
1062 .ops = &clk_branch2_ops,
1063 },
1064 },
1065 };
1066
1067 static struct clk_branch camss_csi1_ahb_clk = {
1068 .halt_reg = 0x3128,
1069 .clkr = {
1070 .enable_reg = 0x3128,
1071 .enable_mask = BIT(0),
1072 .hw.init = &(struct clk_init_data){
1073 .name = "camss_csi1_ahb_clk",
1074 .parent_names = (const char *[]){
1075 "mmss_ahb_clk_src",
1076 },
1077 .num_parents = 1,
1078 .ops = &clk_branch2_ops,
1079 },
1080 },
1081 };
1082
1083 static struct clk_branch camss_csi1_clk = {
1084 .halt_reg = 0x3124,
1085 .clkr = {
1086 .enable_reg = 0x3124,
1087 .enable_mask = BIT(0),
1088 .hw.init = &(struct clk_init_data){
1089 .name = "camss_csi1_clk",
1090 .parent_names = (const char *[]){
1091 "csi1_clk_src",
1092 },
1093 .num_parents = 1,
1094 .flags = CLK_SET_RATE_PARENT,
1095 .ops = &clk_branch2_ops,
1096 },
1097 },
1098 };
1099
1100 static struct clk_branch camss_csi1phy_clk = {
1101 .halt_reg = 0x3134,
1102 .clkr = {
1103 .enable_reg = 0x3134,
1104 .enable_mask = BIT(0),
1105 .hw.init = &(struct clk_init_data){
1106 .name = "camss_csi1phy_clk",
1107 .parent_names = (const char *[]){
1108 "csi1_clk_src",
1109 },
1110 .num_parents = 1,
1111 .flags = CLK_SET_RATE_PARENT,
1112 .ops = &clk_branch2_ops,
1113 },
1114 },
1115 };
1116
1117 static struct clk_branch camss_csi1pix_clk = {
1118 .halt_reg = 0x3154,
1119 .clkr = {
1120 .enable_reg = 0x3154,
1121 .enable_mask = BIT(0),
1122 .hw.init = &(struct clk_init_data){
1123 .name = "camss_csi1pix_clk",
1124 .parent_names = (const char *[]){
1125 "csi1_clk_src",
1126 },
1127 .num_parents = 1,
1128 .flags = CLK_SET_RATE_PARENT,
1129 .ops = &clk_branch2_ops,
1130 },
1131 },
1132 };
1133
1134 static struct clk_branch camss_csi1rdi_clk = {
1135 .halt_reg = 0x3144,
1136 .clkr = {
1137 .enable_reg = 0x3144,
1138 .enable_mask = BIT(0),
1139 .hw.init = &(struct clk_init_data){
1140 .name = "camss_csi1rdi_clk",
1141 .parent_names = (const char *[]){
1142 "csi1_clk_src",
1143 },
1144 .num_parents = 1,
1145 .flags = CLK_SET_RATE_PARENT,
1146 .ops = &clk_branch2_ops,
1147 },
1148 },
1149 };
1150
1151 static struct clk_branch camss_csi2_ahb_clk = {
1152 .halt_reg = 0x3188,
1153 .clkr = {
1154 .enable_reg = 0x3188,
1155 .enable_mask = BIT(0),
1156 .hw.init = &(struct clk_init_data){
1157 .name = "camss_csi2_ahb_clk",
1158 .parent_names = (const char *[]){
1159 "mmss_ahb_clk_src",
1160 },
1161 .num_parents = 1,
1162 .ops = &clk_branch2_ops,
1163 },
1164 },
1165 };
1166
1167 static struct clk_branch camss_csi2_clk = {
1168 .halt_reg = 0x3184,
1169 .clkr = {
1170 .enable_reg = 0x3184,
1171 .enable_mask = BIT(0),
1172 .hw.init = &(struct clk_init_data){
1173 .name = "camss_csi2_clk",
1174 .parent_names = (const char *[]){
1175 "csi2_clk_src",
1176 },
1177 .num_parents = 1,
1178 .flags = CLK_SET_RATE_PARENT,
1179 .ops = &clk_branch2_ops,
1180 },
1181 },
1182 };
1183
1184 static struct clk_branch camss_csi2phy_clk = {
1185 .halt_reg = 0x3194,
1186 .clkr = {
1187 .enable_reg = 0x3194,
1188 .enable_mask = BIT(0),
1189 .hw.init = &(struct clk_init_data){
1190 .name = "camss_csi2phy_clk",
1191 .parent_names = (const char *[]){
1192 "csi2_clk_src",
1193 },
1194 .num_parents = 1,
1195 .flags = CLK_SET_RATE_PARENT,
1196 .ops = &clk_branch2_ops,
1197 },
1198 },
1199 };
1200
1201 static struct clk_branch camss_csi2pix_clk = {
1202 .halt_reg = 0x31b4,
1203 .clkr = {
1204 .enable_reg = 0x31b4,
1205 .enable_mask = BIT(0),
1206 .hw.init = &(struct clk_init_data){
1207 .name = "camss_csi2pix_clk",
1208 .parent_names = (const char *[]){
1209 "csi2_clk_src",
1210 },
1211 .num_parents = 1,
1212 .flags = CLK_SET_RATE_PARENT,
1213 .ops = &clk_branch2_ops,
1214 },
1215 },
1216 };
1217
1218 static struct clk_branch camss_csi2rdi_clk = {
1219 .halt_reg = 0x31a4,
1220 .clkr = {
1221 .enable_reg = 0x31a4,
1222 .enable_mask = BIT(0),
1223 .hw.init = &(struct clk_init_data){
1224 .name = "camss_csi2rdi_clk",
1225 .parent_names = (const char *[]){
1226 "csi2_clk_src",
1227 },
1228 .num_parents = 1,
1229 .flags = CLK_SET_RATE_PARENT,
1230 .ops = &clk_branch2_ops,
1231 },
1232 },
1233 };
1234
1235 static struct clk_branch camss_csi3_ahb_clk = {
1236 .halt_reg = 0x31e8,
1237 .clkr = {
1238 .enable_reg = 0x31e8,
1239 .enable_mask = BIT(0),
1240 .hw.init = &(struct clk_init_data){
1241 .name = "camss_csi3_ahb_clk",
1242 .parent_names = (const char *[]){
1243 "mmss_ahb_clk_src",
1244 },
1245 .num_parents = 1,
1246 .ops = &clk_branch2_ops,
1247 },
1248 },
1249 };
1250
1251 static struct clk_branch camss_csi3_clk = {
1252 .halt_reg = 0x31e4,
1253 .clkr = {
1254 .enable_reg = 0x31e4,
1255 .enable_mask = BIT(0),
1256 .hw.init = &(struct clk_init_data){
1257 .name = "camss_csi3_clk",
1258 .parent_names = (const char *[]){
1259 "csi3_clk_src",
1260 },
1261 .num_parents = 1,
1262 .flags = CLK_SET_RATE_PARENT,
1263 .ops = &clk_branch2_ops,
1264 },
1265 },
1266 };
1267
1268 static struct clk_branch camss_csi3phy_clk = {
1269 .halt_reg = 0x31f4,
1270 .clkr = {
1271 .enable_reg = 0x31f4,
1272 .enable_mask = BIT(0),
1273 .hw.init = &(struct clk_init_data){
1274 .name = "camss_csi3phy_clk",
1275 .parent_names = (const char *[]){
1276 "csi3_clk_src",
1277 },
1278 .num_parents = 1,
1279 .flags = CLK_SET_RATE_PARENT,
1280 .ops = &clk_branch2_ops,
1281 },
1282 },
1283 };
1284
1285 static struct clk_branch camss_csi3pix_clk = {
1286 .halt_reg = 0x3214,
1287 .clkr = {
1288 .enable_reg = 0x3214,
1289 .enable_mask = BIT(0),
1290 .hw.init = &(struct clk_init_data){
1291 .name = "camss_csi3pix_clk",
1292 .parent_names = (const char *[]){
1293 "csi3_clk_src",
1294 },
1295 .num_parents = 1,
1296 .flags = CLK_SET_RATE_PARENT,
1297 .ops = &clk_branch2_ops,
1298 },
1299 },
1300 };
1301
1302 static struct clk_branch camss_csi3rdi_clk = {
1303 .halt_reg = 0x3204,
1304 .clkr = {
1305 .enable_reg = 0x3204,
1306 .enable_mask = BIT(0),
1307 .hw.init = &(struct clk_init_data){
1308 .name = "camss_csi3rdi_clk",
1309 .parent_names = (const char *[]){
1310 "csi3_clk_src",
1311 },
1312 .num_parents = 1,
1313 .flags = CLK_SET_RATE_PARENT,
1314 .ops = &clk_branch2_ops,
1315 },
1316 },
1317 };
1318
1319 static struct clk_branch camss_csi_vfe0_clk = {
1320 .halt_reg = 0x3704,
1321 .clkr = {
1322 .enable_reg = 0x3704,
1323 .enable_mask = BIT(0),
1324 .hw.init = &(struct clk_init_data){
1325 .name = "camss_csi_vfe0_clk",
1326 .parent_names = (const char *[]){
1327 "vfe0_clk_src",
1328 },
1329 .num_parents = 1,
1330 .flags = CLK_SET_RATE_PARENT,
1331 .ops = &clk_branch2_ops,
1332 },
1333 },
1334 };
1335
1336 static struct clk_branch camss_csi_vfe1_clk = {
1337 .halt_reg = 0x3714,
1338 .clkr = {
1339 .enable_reg = 0x3714,
1340 .enable_mask = BIT(0),
1341 .hw.init = &(struct clk_init_data){
1342 .name = "camss_csi_vfe1_clk",
1343 .parent_names = (const char *[]){
1344 "vfe1_clk_src",
1345 },
1346 .num_parents = 1,
1347 .flags = CLK_SET_RATE_PARENT,
1348 .ops = &clk_branch2_ops,
1349 },
1350 },
1351 };
1352
1353 static struct clk_branch camss_gp0_clk = {
1354 .halt_reg = 0x3444,
1355 .clkr = {
1356 .enable_reg = 0x3444,
1357 .enable_mask = BIT(0),
1358 .hw.init = &(struct clk_init_data){
1359 .name = "camss_gp0_clk",
1360 .parent_names = (const char *[]){
1361 "camss_gp0_clk_src",
1362 },
1363 .num_parents = 1,
1364 .flags = CLK_SET_RATE_PARENT,
1365 .ops = &clk_branch2_ops,
1366 },
1367 },
1368 };
1369
1370 static struct clk_branch camss_gp1_clk = {
1371 .halt_reg = 0x3474,
1372 .clkr = {
1373 .enable_reg = 0x3474,
1374 .enable_mask = BIT(0),
1375 .hw.init = &(struct clk_init_data){
1376 .name = "camss_gp1_clk",
1377 .parent_names = (const char *[]){
1378 "camss_gp1_clk_src",
1379 },
1380 .num_parents = 1,
1381 .flags = CLK_SET_RATE_PARENT,
1382 .ops = &clk_branch2_ops,
1383 },
1384 },
1385 };
1386
1387 static struct clk_branch camss_ispif_ahb_clk = {
1388 .halt_reg = 0x3224,
1389 .clkr = {
1390 .enable_reg = 0x3224,
1391 .enable_mask = BIT(0),
1392 .hw.init = &(struct clk_init_data){
1393 .name = "camss_ispif_ahb_clk",
1394 .parent_names = (const char *[]){
1395 "mmss_ahb_clk_src",
1396 },
1397 .num_parents = 1,
1398 .ops = &clk_branch2_ops,
1399 },
1400 },
1401 };
1402
1403 static struct clk_branch camss_jpeg_jpeg0_clk = {
1404 .halt_reg = 0x35a8,
1405 .clkr = {
1406 .enable_reg = 0x35a8,
1407 .enable_mask = BIT(0),
1408 .hw.init = &(struct clk_init_data){
1409 .name = "camss_jpeg_jpeg0_clk",
1410 .parent_names = (const char *[]){
1411 "jpeg0_clk_src",
1412 },
1413 .num_parents = 1,
1414 .flags = CLK_SET_RATE_PARENT,
1415 .ops = &clk_branch2_ops,
1416 },
1417 },
1418 };
1419
1420 static struct clk_branch camss_jpeg_jpeg1_clk = {
1421 .halt_reg = 0x35ac,
1422 .clkr = {
1423 .enable_reg = 0x35ac,
1424 .enable_mask = BIT(0),
1425 .hw.init = &(struct clk_init_data){
1426 .name = "camss_jpeg_jpeg1_clk",
1427 .parent_names = (const char *[]){
1428 "jpeg1_clk_src",
1429 },
1430 .num_parents = 1,
1431 .flags = CLK_SET_RATE_PARENT,
1432 .ops = &clk_branch2_ops,
1433 },
1434 },
1435 };
1436
1437 static struct clk_branch camss_jpeg_jpeg2_clk = {
1438 .halt_reg = 0x35b0,
1439 .clkr = {
1440 .enable_reg = 0x35b0,
1441 .enable_mask = BIT(0),
1442 .hw.init = &(struct clk_init_data){
1443 .name = "camss_jpeg_jpeg2_clk",
1444 .parent_names = (const char *[]){
1445 "jpeg2_clk_src",
1446 },
1447 .num_parents = 1,
1448 .flags = CLK_SET_RATE_PARENT,
1449 .ops = &clk_branch2_ops,
1450 },
1451 },
1452 };
1453
1454 static struct clk_branch camss_jpeg_jpeg_ahb_clk = {
1455 .halt_reg = 0x35b4,
1456 .clkr = {
1457 .enable_reg = 0x35b4,
1458 .enable_mask = BIT(0),
1459 .hw.init = &(struct clk_init_data){
1460 .name = "camss_jpeg_jpeg_ahb_clk",
1461 .parent_names = (const char *[]){
1462 "mmss_ahb_clk_src",
1463 },
1464 .num_parents = 1,
1465 .ops = &clk_branch2_ops,
1466 },
1467 },
1468 };
1469
1470 static struct clk_branch camss_jpeg_jpeg_axi_clk = {
1471 .halt_reg = 0x35b8,
1472 .clkr = {
1473 .enable_reg = 0x35b8,
1474 .enable_mask = BIT(0),
1475 .hw.init = &(struct clk_init_data){
1476 .name = "camss_jpeg_jpeg_axi_clk",
1477 .parent_names = (const char *[]){
1478 "mmss_axi_clk_src",
1479 },
1480 .num_parents = 1,
1481 .ops = &clk_branch2_ops,
1482 },
1483 },
1484 };
1485
1486 static struct clk_branch camss_jpeg_jpeg_ocmemnoc_clk = {
1487 .halt_reg = 0x35bc,
1488 .clkr = {
1489 .enable_reg = 0x35bc,
1490 .enable_mask = BIT(0),
1491 .hw.init = &(struct clk_init_data){
1492 .name = "camss_jpeg_jpeg_ocmemnoc_clk",
1493 .parent_names = (const char *[]){
1494 "ocmemnoc_clk_src",
1495 },
1496 .num_parents = 1,
1497 .flags = CLK_SET_RATE_PARENT,
1498 .ops = &clk_branch2_ops,
1499 },
1500 },
1501 };
1502
1503 static struct clk_branch camss_mclk0_clk = {
1504 .halt_reg = 0x3384,
1505 .clkr = {
1506 .enable_reg = 0x3384,
1507 .enable_mask = BIT(0),
1508 .hw.init = &(struct clk_init_data){
1509 .name = "camss_mclk0_clk",
1510 .parent_names = (const char *[]){
1511 "mclk0_clk_src",
1512 },
1513 .num_parents = 1,
1514 .flags = CLK_SET_RATE_PARENT,
1515 .ops = &clk_branch2_ops,
1516 },
1517 },
1518 };
1519
1520 static struct clk_branch camss_mclk1_clk = {
1521 .halt_reg = 0x33b4,
1522 .clkr = {
1523 .enable_reg = 0x33b4,
1524 .enable_mask = BIT(0),
1525 .hw.init = &(struct clk_init_data){
1526 .name = "camss_mclk1_clk",
1527 .parent_names = (const char *[]){
1528 "mclk1_clk_src",
1529 },
1530 .num_parents = 1,
1531 .flags = CLK_SET_RATE_PARENT,
1532 .ops = &clk_branch2_ops,
1533 },
1534 },
1535 };
1536
1537 static struct clk_branch camss_mclk2_clk = {
1538 .halt_reg = 0x33e4,
1539 .clkr = {
1540 .enable_reg = 0x33e4,
1541 .enable_mask = BIT(0),
1542 .hw.init = &(struct clk_init_data){
1543 .name = "camss_mclk2_clk",
1544 .parent_names = (const char *[]){
1545 "mclk2_clk_src",
1546 },
1547 .num_parents = 1,
1548 .flags = CLK_SET_RATE_PARENT,
1549 .ops = &clk_branch2_ops,
1550 },
1551 },
1552 };
1553
1554 static struct clk_branch camss_mclk3_clk = {
1555 .halt_reg = 0x3414,
1556 .clkr = {
1557 .enable_reg = 0x3414,
1558 .enable_mask = BIT(0),
1559 .hw.init = &(struct clk_init_data){
1560 .name = "camss_mclk3_clk",
1561 .parent_names = (const char *[]){
1562 "mclk3_clk_src",
1563 },
1564 .num_parents = 1,
1565 .flags = CLK_SET_RATE_PARENT,
1566 .ops = &clk_branch2_ops,
1567 },
1568 },
1569 };
1570
1571 static struct clk_branch camss_micro_ahb_clk = {
1572 .halt_reg = 0x3494,
1573 .clkr = {
1574 .enable_reg = 0x3494,
1575 .enable_mask = BIT(0),
1576 .hw.init = &(struct clk_init_data){
1577 .name = "camss_micro_ahb_clk",
1578 .parent_names = (const char *[]){
1579 "mmss_ahb_clk_src",
1580 },
1581 .num_parents = 1,
1582 .ops = &clk_branch2_ops,
1583 },
1584 },
1585 };
1586
1587 static struct clk_branch camss_phy0_csi0phytimer_clk = {
1588 .halt_reg = 0x3024,
1589 .clkr = {
1590 .enable_reg = 0x3024,
1591 .enable_mask = BIT(0),
1592 .hw.init = &(struct clk_init_data){
1593 .name = "camss_phy0_csi0phytimer_clk",
1594 .parent_names = (const char *[]){
1595 "csi0phytimer_clk_src",
1596 },
1597 .num_parents = 1,
1598 .flags = CLK_SET_RATE_PARENT,
1599 .ops = &clk_branch2_ops,
1600 },
1601 },
1602 };
1603
1604 static struct clk_branch camss_phy1_csi1phytimer_clk = {
1605 .halt_reg = 0x3054,
1606 .clkr = {
1607 .enable_reg = 0x3054,
1608 .enable_mask = BIT(0),
1609 .hw.init = &(struct clk_init_data){
1610 .name = "camss_phy1_csi1phytimer_clk",
1611 .parent_names = (const char *[]){
1612 "csi1phytimer_clk_src",
1613 },
1614 .num_parents = 1,
1615 .flags = CLK_SET_RATE_PARENT,
1616 .ops = &clk_branch2_ops,
1617 },
1618 },
1619 };
1620
1621 static struct clk_branch camss_phy2_csi2phytimer_clk = {
1622 .halt_reg = 0x3084,
1623 .clkr = {
1624 .enable_reg = 0x3084,
1625 .enable_mask = BIT(0),
1626 .hw.init = &(struct clk_init_data){
1627 .name = "camss_phy2_csi2phytimer_clk",
1628 .parent_names = (const char *[]){
1629 "csi2phytimer_clk_src",
1630 },
1631 .num_parents = 1,
1632 .flags = CLK_SET_RATE_PARENT,
1633 .ops = &clk_branch2_ops,
1634 },
1635 },
1636 };
1637
1638 static struct clk_branch camss_top_ahb_clk = {
1639 .halt_reg = 0x3484,
1640 .clkr = {
1641 .enable_reg = 0x3484,
1642 .enable_mask = BIT(0),
1643 .hw.init = &(struct clk_init_data){
1644 .name = "camss_top_ahb_clk",
1645 .parent_names = (const char *[]){
1646 "mmss_ahb_clk_src",
1647 },
1648 .num_parents = 1,
1649 .ops = &clk_branch2_ops,
1650 },
1651 },
1652 };
1653
1654 static struct clk_branch camss_vfe_cpp_ahb_clk = {
1655 .halt_reg = 0x36b4,
1656 .clkr = {
1657 .enable_reg = 0x36b4,
1658 .enable_mask = BIT(0),
1659 .hw.init = &(struct clk_init_data){
1660 .name = "camss_vfe_cpp_ahb_clk",
1661 .parent_names = (const char *[]){
1662 "mmss_ahb_clk_src",
1663 },
1664 .num_parents = 1,
1665 .ops = &clk_branch2_ops,
1666 },
1667 },
1668 };
1669
1670 static struct clk_branch camss_vfe_cpp_clk = {
1671 .halt_reg = 0x36b0,
1672 .clkr = {
1673 .enable_reg = 0x36b0,
1674 .enable_mask = BIT(0),
1675 .hw.init = &(struct clk_init_data){
1676 .name = "camss_vfe_cpp_clk",
1677 .parent_names = (const char *[]){
1678 "cpp_clk_src",
1679 },
1680 .num_parents = 1,
1681 .flags = CLK_SET_RATE_PARENT,
1682 .ops = &clk_branch2_ops,
1683 },
1684 },
1685 };
1686
1687 static struct clk_branch camss_vfe_vfe0_clk = {
1688 .halt_reg = 0x36a8,
1689 .clkr = {
1690 .enable_reg = 0x36a8,
1691 .enable_mask = BIT(0),
1692 .hw.init = &(struct clk_init_data){
1693 .name = "camss_vfe_vfe0_clk",
1694 .parent_names = (const char *[]){
1695 "vfe0_clk_src",
1696 },
1697 .num_parents = 1,
1698 .flags = CLK_SET_RATE_PARENT,
1699 .ops = &clk_branch2_ops,
1700 },
1701 },
1702 };
1703
1704 static struct clk_branch camss_vfe_vfe1_clk = {
1705 .halt_reg = 0x36ac,
1706 .clkr = {
1707 .enable_reg = 0x36ac,
1708 .enable_mask = BIT(0),
1709 .hw.init = &(struct clk_init_data){
1710 .name = "camss_vfe_vfe1_clk",
1711 .parent_names = (const char *[]){
1712 "vfe1_clk_src",
1713 },
1714 .num_parents = 1,
1715 .flags = CLK_SET_RATE_PARENT,
1716 .ops = &clk_branch2_ops,
1717 },
1718 },
1719 };
1720
1721 static struct clk_branch camss_vfe_vfe_ahb_clk = {
1722 .halt_reg = 0x36b8,
1723 .clkr = {
1724 .enable_reg = 0x36b8,
1725 .enable_mask = BIT(0),
1726 .hw.init = &(struct clk_init_data){
1727 .name = "camss_vfe_vfe_ahb_clk",
1728 .parent_names = (const char *[]){
1729 "mmss_ahb_clk_src",
1730 },
1731 .num_parents = 1,
1732 .ops = &clk_branch2_ops,
1733 },
1734 },
1735 };
1736
1737 static struct clk_branch camss_vfe_vfe_axi_clk = {
1738 .halt_reg = 0x36bc,
1739 .clkr = {
1740 .enable_reg = 0x36bc,
1741 .enable_mask = BIT(0),
1742 .hw.init = &(struct clk_init_data){
1743 .name = "camss_vfe_vfe_axi_clk",
1744 .parent_names = (const char *[]){
1745 "mmss_axi_clk_src",
1746 },
1747 .num_parents = 1,
1748 .ops = &clk_branch2_ops,
1749 },
1750 },
1751 };
1752
1753 static struct clk_branch camss_vfe_vfe_ocmemnoc_clk = {
1754 .halt_reg = 0x36c0,
1755 .clkr = {
1756 .enable_reg = 0x36c0,
1757 .enable_mask = BIT(0),
1758 .hw.init = &(struct clk_init_data){
1759 .name = "camss_vfe_vfe_ocmemnoc_clk",
1760 .parent_names = (const char *[]){
1761 "ocmemnoc_clk_src",
1762 },
1763 .num_parents = 1,
1764 .flags = CLK_SET_RATE_PARENT,
1765 .ops = &clk_branch2_ops,
1766 },
1767 },
1768 };
1769
1770 static struct clk_branch mdss_ahb_clk = {
1771 .halt_reg = 0x2308,
1772 .clkr = {
1773 .enable_reg = 0x2308,
1774 .enable_mask = BIT(0),
1775 .hw.init = &(struct clk_init_data){
1776 .name = "mdss_ahb_clk",
1777 .parent_names = (const char *[]){
1778 "mmss_ahb_clk_src",
1779 },
1780 .num_parents = 1,
1781 .ops = &clk_branch2_ops,
1782 },
1783 },
1784 };
1785
1786 static struct clk_branch mdss_axi_clk = {
1787 .halt_reg = 0x2310,
1788 .clkr = {
1789 .enable_reg = 0x2310,
1790 .enable_mask = BIT(0),
1791 .hw.init = &(struct clk_init_data){
1792 .name = "mdss_axi_clk",
1793 .parent_names = (const char *[]){
1794 "mmss_axi_clk_src",
1795 },
1796 .num_parents = 1,
1797 .flags = CLK_SET_RATE_PARENT,
1798 .ops = &clk_branch2_ops,
1799 },
1800 },
1801 };
1802
1803 static struct clk_branch mdss_byte0_clk = {
1804 .halt_reg = 0x233c,
1805 .clkr = {
1806 .enable_reg = 0x233c,
1807 .enable_mask = BIT(0),
1808 .hw.init = &(struct clk_init_data){
1809 .name = "mdss_byte0_clk",
1810 .parent_names = (const char *[]){
1811 "byte0_clk_src",
1812 },
1813 .num_parents = 1,
1814 .flags = CLK_SET_RATE_PARENT,
1815 .ops = &clk_branch2_ops,
1816 },
1817 },
1818 };
1819
1820 static struct clk_branch mdss_byte1_clk = {
1821 .halt_reg = 0x2340,
1822 .clkr = {
1823 .enable_reg = 0x2340,
1824 .enable_mask = BIT(0),
1825 .hw.init = &(struct clk_init_data){
1826 .name = "mdss_byte1_clk",
1827 .parent_names = (const char *[]){
1828 "byte1_clk_src",
1829 },
1830 .num_parents = 1,
1831 .flags = CLK_SET_RATE_PARENT,
1832 .ops = &clk_branch2_ops,
1833 },
1834 },
1835 };
1836
1837 static struct clk_branch mdss_edpaux_clk = {
1838 .halt_reg = 0x2334,
1839 .clkr = {
1840 .enable_reg = 0x2334,
1841 .enable_mask = BIT(0),
1842 .hw.init = &(struct clk_init_data){
1843 .name = "mdss_edpaux_clk",
1844 .parent_names = (const char *[]){
1845 "edpaux_clk_src",
1846 },
1847 .num_parents = 1,
1848 .flags = CLK_SET_RATE_PARENT,
1849 .ops = &clk_branch2_ops,
1850 },
1851 },
1852 };
1853
1854 static struct clk_branch mdss_edplink_clk = {
1855 .halt_reg = 0x2330,
1856 .clkr = {
1857 .enable_reg = 0x2330,
1858 .enable_mask = BIT(0),
1859 .hw.init = &(struct clk_init_data){
1860 .name = "mdss_edplink_clk",
1861 .parent_names = (const char *[]){
1862 "edplink_clk_src",
1863 },
1864 .num_parents = 1,
1865 .flags = CLK_SET_RATE_PARENT,
1866 .ops = &clk_branch2_ops,
1867 },
1868 },
1869 };
1870
1871 static struct clk_branch mdss_edppixel_clk = {
1872 .halt_reg = 0x232c,
1873 .clkr = {
1874 .enable_reg = 0x232c,
1875 .enable_mask = BIT(0),
1876 .hw.init = &(struct clk_init_data){
1877 .name = "mdss_edppixel_clk",
1878 .parent_names = (const char *[]){
1879 "edppixel_clk_src",
1880 },
1881 .num_parents = 1,
1882 .flags = CLK_SET_RATE_PARENT,
1883 .ops = &clk_branch2_ops,
1884 },
1885 },
1886 };
1887
1888 static struct clk_branch mdss_esc0_clk = {
1889 .halt_reg = 0x2344,
1890 .clkr = {
1891 .enable_reg = 0x2344,
1892 .enable_mask = BIT(0),
1893 .hw.init = &(struct clk_init_data){
1894 .name = "mdss_esc0_clk",
1895 .parent_names = (const char *[]){
1896 "esc0_clk_src",
1897 },
1898 .num_parents = 1,
1899 .flags = CLK_SET_RATE_PARENT,
1900 .ops = &clk_branch2_ops,
1901 },
1902 },
1903 };
1904
1905 static struct clk_branch mdss_esc1_clk = {
1906 .halt_reg = 0x2348,
1907 .clkr = {
1908 .enable_reg = 0x2348,
1909 .enable_mask = BIT(0),
1910 .hw.init = &(struct clk_init_data){
1911 .name = "mdss_esc1_clk",
1912 .parent_names = (const char *[]){
1913 "esc1_clk_src",
1914 },
1915 .num_parents = 1,
1916 .flags = CLK_SET_RATE_PARENT,
1917 .ops = &clk_branch2_ops,
1918 },
1919 },
1920 };
1921
1922 static struct clk_branch mdss_extpclk_clk = {
1923 .halt_reg = 0x2324,
1924 .clkr = {
1925 .enable_reg = 0x2324,
1926 .enable_mask = BIT(0),
1927 .hw.init = &(struct clk_init_data){
1928 .name = "mdss_extpclk_clk",
1929 .parent_names = (const char *[]){
1930 "extpclk_clk_src",
1931 },
1932 .num_parents = 1,
1933 .flags = CLK_SET_RATE_PARENT,
1934 .ops = &clk_branch2_ops,
1935 },
1936 },
1937 };
1938
1939 static struct clk_branch mdss_hdmi_ahb_clk = {
1940 .halt_reg = 0x230c,
1941 .clkr = {
1942 .enable_reg = 0x230c,
1943 .enable_mask = BIT(0),
1944 .hw.init = &(struct clk_init_data){
1945 .name = "mdss_hdmi_ahb_clk",
1946 .parent_names = (const char *[]){
1947 "mmss_ahb_clk_src",
1948 },
1949 .num_parents = 1,
1950 .ops = &clk_branch2_ops,
1951 },
1952 },
1953 };
1954
1955 static struct clk_branch mdss_hdmi_clk = {
1956 .halt_reg = 0x2338,
1957 .clkr = {
1958 .enable_reg = 0x2338,
1959 .enable_mask = BIT(0),
1960 .hw.init = &(struct clk_init_data){
1961 .name = "mdss_hdmi_clk",
1962 .parent_names = (const char *[]){
1963 "hdmi_clk_src",
1964 },
1965 .num_parents = 1,
1966 .flags = CLK_SET_RATE_PARENT,
1967 .ops = &clk_branch2_ops,
1968 },
1969 },
1970 };
1971
1972 static struct clk_branch mdss_mdp_clk = {
1973 .halt_reg = 0x231c,
1974 .clkr = {
1975 .enable_reg = 0x231c,
1976 .enable_mask = BIT(0),
1977 .hw.init = &(struct clk_init_data){
1978 .name = "mdss_mdp_clk",
1979 .parent_names = (const char *[]){
1980 "mdp_clk_src",
1981 },
1982 .num_parents = 1,
1983 .flags = CLK_SET_RATE_PARENT,
1984 .ops = &clk_branch2_ops,
1985 },
1986 },
1987 };
1988
1989 static struct clk_branch mdss_mdp_lut_clk = {
1990 .halt_reg = 0x2320,
1991 .clkr = {
1992 .enable_reg = 0x2320,
1993 .enable_mask = BIT(0),
1994 .hw.init = &(struct clk_init_data){
1995 .name = "mdss_mdp_lut_clk",
1996 .parent_names = (const char *[]){
1997 "mdp_clk_src",
1998 },
1999 .num_parents = 1,
2000 .flags = CLK_SET_RATE_PARENT,
2001 .ops = &clk_branch2_ops,
2002 },
2003 },
2004 };
2005
2006 static struct clk_branch mdss_pclk0_clk = {
2007 .halt_reg = 0x2314,
2008 .clkr = {
2009 .enable_reg = 0x2314,
2010 .enable_mask = BIT(0),
2011 .hw.init = &(struct clk_init_data){
2012 .name = "mdss_pclk0_clk",
2013 .parent_names = (const char *[]){
2014 "pclk0_clk_src",
2015 },
2016 .num_parents = 1,
2017 .flags = CLK_SET_RATE_PARENT,
2018 .ops = &clk_branch2_ops,
2019 },
2020 },
2021 };
2022
2023 static struct clk_branch mdss_pclk1_clk = {
2024 .halt_reg = 0x2318,
2025 .clkr = {
2026 .enable_reg = 0x2318,
2027 .enable_mask = BIT(0),
2028 .hw.init = &(struct clk_init_data){
2029 .name = "mdss_pclk1_clk",
2030 .parent_names = (const char *[]){
2031 "pclk1_clk_src",
2032 },
2033 .num_parents = 1,
2034 .flags = CLK_SET_RATE_PARENT,
2035 .ops = &clk_branch2_ops,
2036 },
2037 },
2038 };
2039
2040 static struct clk_branch mdss_vsync_clk = {
2041 .halt_reg = 0x2328,
2042 .clkr = {
2043 .enable_reg = 0x2328,
2044 .enable_mask = BIT(0),
2045 .hw.init = &(struct clk_init_data){
2046 .name = "mdss_vsync_clk",
2047 .parent_names = (const char *[]){
2048 "vsync_clk_src",
2049 },
2050 .num_parents = 1,
2051 .flags = CLK_SET_RATE_PARENT,
2052 .ops = &clk_branch2_ops,
2053 },
2054 },
2055 };
2056
2057 static struct clk_branch mmss_misc_ahb_clk = {
2058 .halt_reg = 0x502c,
2059 .clkr = {
2060 .enable_reg = 0x502c,
2061 .enable_mask = BIT(0),
2062 .hw.init = &(struct clk_init_data){
2063 .name = "mmss_misc_ahb_clk",
2064 .parent_names = (const char *[]){
2065 "mmss_ahb_clk_src",
2066 },
2067 .num_parents = 1,
2068 .ops = &clk_branch2_ops,
2069 },
2070 },
2071 };
2072
2073 static struct clk_branch mmss_mmssnoc_ahb_clk = {
2074 .halt_reg = 0x5024,
2075 .clkr = {
2076 .enable_reg = 0x5024,
2077 .enable_mask = BIT(0),
2078 .hw.init = &(struct clk_init_data){
2079 .name = "mmss_mmssnoc_ahb_clk",
2080 .parent_names = (const char *[]){
2081 "mmss_ahb_clk_src",
2082 },
2083 .num_parents = 1,
2084 .ops = &clk_branch2_ops,
2085 .flags = CLK_IGNORE_UNUSED,
2086 },
2087 },
2088 };
2089
2090 static struct clk_branch mmss_mmssnoc_bto_ahb_clk = {
2091 .halt_reg = 0x5028,
2092 .clkr = {
2093 .enable_reg = 0x5028,
2094 .enable_mask = BIT(0),
2095 .hw.init = &(struct clk_init_data){
2096 .name = "mmss_mmssnoc_bto_ahb_clk",
2097 .parent_names = (const char *[]){
2098 "mmss_ahb_clk_src",
2099 },
2100 .num_parents = 1,
2101 .ops = &clk_branch2_ops,
2102 .flags = CLK_IGNORE_UNUSED,
2103 },
2104 },
2105 };
2106
2107 static struct clk_branch mmss_mmssnoc_axi_clk = {
2108 .halt_reg = 0x506c,
2109 .clkr = {
2110 .enable_reg = 0x506c,
2111 .enable_mask = BIT(0),
2112 .hw.init = &(struct clk_init_data){
2113 .name = "mmss_mmssnoc_axi_clk",
2114 .parent_names = (const char *[]){
2115 "mmss_axi_clk_src",
2116 },
2117 .num_parents = 1,
2118 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2119 .ops = &clk_branch2_ops,
2120 },
2121 },
2122 };
2123
2124 static struct clk_branch mmss_s0_axi_clk = {
2125 .halt_reg = 0x5064,
2126 .clkr = {
2127 .enable_reg = 0x5064,
2128 .enable_mask = BIT(0),
2129 .hw.init = &(struct clk_init_data){
2130 .name = "mmss_s0_axi_clk",
2131 .parent_names = (const char *[]){
2132 "mmss_axi_clk_src",
2133 },
2134 .num_parents = 1,
2135 .ops = &clk_branch2_ops,
2136 .flags = CLK_IGNORE_UNUSED,
2137 },
2138 },
2139 };
2140
2141 static struct clk_branch ocmemcx_ahb_clk = {
2142 .halt_reg = 0x405c,
2143 .clkr = {
2144 .enable_reg = 0x405c,
2145 .enable_mask = BIT(0),
2146 .hw.init = &(struct clk_init_data){
2147 .name = "ocmemcx_ahb_clk",
2148 .parent_names = (const char *[]){
2149 "mmss_ahb_clk_src",
2150 },
2151 .num_parents = 1,
2152 .ops = &clk_branch2_ops,
2153 },
2154 },
2155 };
2156
2157 static struct clk_branch ocmemcx_ocmemnoc_clk = {
2158 .halt_reg = 0x4058,
2159 .clkr = {
2160 .enable_reg = 0x4058,
2161 .enable_mask = BIT(0),
2162 .hw.init = &(struct clk_init_data){
2163 .name = "ocmemcx_ocmemnoc_clk",
2164 .parent_names = (const char *[]){
2165 "ocmemnoc_clk_src",
2166 },
2167 .num_parents = 1,
2168 .flags = CLK_SET_RATE_PARENT,
2169 .ops = &clk_branch2_ops,
2170 },
2171 },
2172 };
2173
2174 static struct clk_branch oxili_ocmemgx_clk = {
2175 .halt_reg = 0x402c,
2176 .clkr = {
2177 .enable_reg = 0x402c,
2178 .enable_mask = BIT(0),
2179 .hw.init = &(struct clk_init_data){
2180 .name = "oxili_ocmemgx_clk",
2181 .parent_names = (const char *[]){
2182 "gfx3d_clk_src",
2183 },
2184 .num_parents = 1,
2185 .flags = CLK_SET_RATE_PARENT,
2186 .ops = &clk_branch2_ops,
2187 },
2188 },
2189 };
2190
2191 static struct clk_branch ocmemnoc_clk = {
2192 .halt_reg = 0x50b4,
2193 .clkr = {
2194 .enable_reg = 0x50b4,
2195 .enable_mask = BIT(0),
2196 .hw.init = &(struct clk_init_data){
2197 .name = "ocmemnoc_clk",
2198 .parent_names = (const char *[]){
2199 "ocmemnoc_clk_src",
2200 },
2201 .num_parents = 1,
2202 .flags = CLK_SET_RATE_PARENT,
2203 .ops = &clk_branch2_ops,
2204 },
2205 },
2206 };
2207
2208 static struct clk_branch oxili_gfx3d_clk = {
2209 .halt_reg = 0x4028,
2210 .clkr = {
2211 .enable_reg = 0x4028,
2212 .enable_mask = BIT(0),
2213 .hw.init = &(struct clk_init_data){
2214 .name = "oxili_gfx3d_clk",
2215 .parent_names = (const char *[]){
2216 "gfx3d_clk_src",
2217 },
2218 .num_parents = 1,
2219 .flags = CLK_SET_RATE_PARENT,
2220 .ops = &clk_branch2_ops,
2221 },
2222 },
2223 };
2224
2225 static struct clk_branch oxilicx_ahb_clk = {
2226 .halt_reg = 0x403c,
2227 .clkr = {
2228 .enable_reg = 0x403c,
2229 .enable_mask = BIT(0),
2230 .hw.init = &(struct clk_init_data){
2231 .name = "oxilicx_ahb_clk",
2232 .parent_names = (const char *[]){
2233 "mmss_ahb_clk_src",
2234 },
2235 .num_parents = 1,
2236 .ops = &clk_branch2_ops,
2237 },
2238 },
2239 };
2240
2241 static struct clk_branch oxilicx_axi_clk = {
2242 .halt_reg = 0x4038,
2243 .clkr = {
2244 .enable_reg = 0x4038,
2245 .enable_mask = BIT(0),
2246 .hw.init = &(struct clk_init_data){
2247 .name = "oxilicx_axi_clk",
2248 .parent_names = (const char *[]){
2249 "mmss_axi_clk_src",
2250 },
2251 .num_parents = 1,
2252 .ops = &clk_branch2_ops,
2253 },
2254 },
2255 };
2256
2257 static struct clk_branch venus0_ahb_clk = {
2258 .halt_reg = 0x1030,
2259 .clkr = {
2260 .enable_reg = 0x1030,
2261 .enable_mask = BIT(0),
2262 .hw.init = &(struct clk_init_data){
2263 .name = "venus0_ahb_clk",
2264 .parent_names = (const char *[]){
2265 "mmss_ahb_clk_src",
2266 },
2267 .num_parents = 1,
2268 .ops = &clk_branch2_ops,
2269 },
2270 },
2271 };
2272
2273 static struct clk_branch venus0_axi_clk = {
2274 .halt_reg = 0x1034,
2275 .clkr = {
2276 .enable_reg = 0x1034,
2277 .enable_mask = BIT(0),
2278 .hw.init = &(struct clk_init_data){
2279 .name = "venus0_axi_clk",
2280 .parent_names = (const char *[]){
2281 "mmss_axi_clk_src",
2282 },
2283 .num_parents = 1,
2284 .ops = &clk_branch2_ops,
2285 },
2286 },
2287 };
2288
2289 static struct clk_branch venus0_ocmemnoc_clk = {
2290 .halt_reg = 0x1038,
2291 .clkr = {
2292 .enable_reg = 0x1038,
2293 .enable_mask = BIT(0),
2294 .hw.init = &(struct clk_init_data){
2295 .name = "venus0_ocmemnoc_clk",
2296 .parent_names = (const char *[]){
2297 "ocmemnoc_clk_src",
2298 },
2299 .num_parents = 1,
2300 .flags = CLK_SET_RATE_PARENT,
2301 .ops = &clk_branch2_ops,
2302 },
2303 },
2304 };
2305
2306 static struct clk_branch venus0_vcodec0_clk = {
2307 .halt_reg = 0x1028,
2308 .clkr = {
2309 .enable_reg = 0x1028,
2310 .enable_mask = BIT(0),
2311 .hw.init = &(struct clk_init_data){
2312 .name = "venus0_vcodec0_clk",
2313 .parent_names = (const char *[]){
2314 "vcodec0_clk_src",
2315 },
2316 .num_parents = 1,
2317 .flags = CLK_SET_RATE_PARENT,
2318 .ops = &clk_branch2_ops,
2319 },
2320 },
2321 };
2322
2323 static const struct pll_config mmpll1_config = {
2324 .l = 60,
2325 .m = 25,
2326 .n = 32,
2327 .vco_val = 0x0,
2328 .vco_mask = 0x3 << 20,
2329 .pre_div_val = 0x0,
2330 .pre_div_mask = 0x7 << 12,
2331 .post_div_val = 0x0,
2332 .post_div_mask = 0x3 << 8,
2333 .mn_ena_mask = BIT(24),
2334 .main_output_mask = BIT(0),
2335 };
2336
2337 static struct pll_config mmpll3_config = {
2338 .l = 48,
2339 .m = 7,
2340 .n = 16,
2341 .vco_val = 0x0,
2342 .vco_mask = 0x3 << 20,
2343 .pre_div_val = 0x0,
2344 .pre_div_mask = 0x7 << 12,
2345 .post_div_val = 0x0,
2346 .post_div_mask = 0x3 << 8,
2347 .mn_ena_mask = BIT(24),
2348 .main_output_mask = BIT(0),
2349 .aux_output_mask = BIT(1),
2350 };
2351
2352 static struct clk_regmap *mmcc_msm8974_clocks[] = {
2353 [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr,
2354 [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr,
2355 [OCMEMNOC_CLK_SRC] = &ocmemnoc_clk_src.clkr,
2356 [MMPLL0] = &mmpll0.clkr,
2357 [MMPLL0_VOTE] = &mmpll0_vote,
2358 [MMPLL1] = &mmpll1.clkr,
2359 [MMPLL1_VOTE] = &mmpll1_vote,
2360 [MMPLL2] = &mmpll2.clkr,
2361 [MMPLL3] = &mmpll3.clkr,
2362 [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
2363 [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
2364 [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
2365 [CSI3_CLK_SRC] = &csi3_clk_src.clkr,
2366 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
2367 [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
2368 [MDP_CLK_SRC] = &mdp_clk_src.clkr,
2369 [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
2370 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
2371 [JPEG1_CLK_SRC] = &jpeg1_clk_src.clkr,
2372 [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,
2373 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2374 [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
2375 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
2376 [CCI_CLK_SRC] = &cci_clk_src.clkr,
2377 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
2378 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
2379 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
2380 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
2381 [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
2382 [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
2383 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
2384 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
2385 [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
2386 [CPP_CLK_SRC] = &cpp_clk_src.clkr,
2387 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2388 [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
2389 [EDPAUX_CLK_SRC] = &edpaux_clk_src.clkr,
2390 [EDPLINK_CLK_SRC] = &edplink_clk_src.clkr,
2391 [EDPPIXEL_CLK_SRC] = &edppixel_clk_src.clkr,
2392 [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2393 [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
2394 [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
2395 [HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
2396 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2397 [CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr,
2398 [CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr,
2399 [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
2400 [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
2401 [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
2402 [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
2403 [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
2404 [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
2405 [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
2406 [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
2407 [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
2408 [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
2409 [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
2410 [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
2411 [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,
2412 [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
2413 [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
2414 [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
2415 [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
2416 [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,
2417 [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
2418 [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
2419 [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
2420 [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
2421 [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
2422 [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
2423 [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
2424 [CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr,
2425 [CAMSS_JPEG_JPEG1_CLK] = &camss_jpeg_jpeg1_clk.clkr,
2426 [CAMSS_JPEG_JPEG2_CLK] = &camss_jpeg_jpeg2_clk.clkr,
2427 [CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr,
2428 [CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr,
2429 [CAMSS_JPEG_JPEG_OCMEMNOC_CLK] = &camss_jpeg_jpeg_ocmemnoc_clk.clkr,
2430 [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
2431 [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
2432 [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
2433 [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
2434 [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
2435 [CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr,
2436 [CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr,
2437 [CAMSS_PHY2_CSI2PHYTIMER_CLK] = &camss_phy2_csi2phytimer_clk.clkr,
2438 [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
2439 [CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr,
2440 [CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr,
2441 [CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr,
2442 [CAMSS_VFE_VFE1_CLK] = &camss_vfe_vfe1_clk.clkr,
2443 [CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr,
2444 [CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr,
2445 [CAMSS_VFE_VFE_OCMEMNOC_CLK] = &camss_vfe_vfe_ocmemnoc_clk.clkr,
2446 [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
2447 [MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
2448 [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
2449 [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
2450 [MDSS_EDPAUX_CLK] = &mdss_edpaux_clk.clkr,
2451 [MDSS_EDPLINK_CLK] = &mdss_edplink_clk.clkr,
2452 [MDSS_EDPPIXEL_CLK] = &mdss_edppixel_clk.clkr,
2453 [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
2454 [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
2455 [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
2456 [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,
2457 [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
2458 [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
2459 [MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr,
2460 [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
2461 [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
2462 [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
2463 [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
2464 [MMSS_MMSSNOC_AHB_CLK] = &mmss_mmssnoc_ahb_clk.clkr,
2465 [MMSS_MMSSNOC_BTO_AHB_CLK] = &mmss_mmssnoc_bto_ahb_clk.clkr,
2466 [MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr,
2467 [MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr,
2468 [OCMEMCX_AHB_CLK] = &ocmemcx_ahb_clk.clkr,
2469 [OCMEMCX_OCMEMNOC_CLK] = &ocmemcx_ocmemnoc_clk.clkr,
2470 [OXILI_OCMEMGX_CLK] = &oxili_ocmemgx_clk.clkr,
2471 [OCMEMNOC_CLK] = &ocmemnoc_clk.clkr,
2472 [OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr,
2473 [OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr,
2474 [OXILICX_AXI_CLK] = &oxilicx_axi_clk.clkr,
2475 [VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr,
2476 [VENUS0_AXI_CLK] = &venus0_axi_clk.clkr,
2477 [VENUS0_OCMEMNOC_CLK] = &venus0_ocmemnoc_clk.clkr,
2478 [VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr,
2479 };
2480
2481 static const struct qcom_reset_map mmcc_msm8974_resets[] = {
2482 [SPDM_RESET] = { 0x0200 },
2483 [SPDM_RM_RESET] = { 0x0300 },
2484 [VENUS0_RESET] = { 0x1020 },
2485 [MDSS_RESET] = { 0x2300 },
2486 [CAMSS_PHY0_RESET] = { 0x3020 },
2487 [CAMSS_PHY1_RESET] = { 0x3050 },
2488 [CAMSS_PHY2_RESET] = { 0x3080 },
2489 [CAMSS_CSI0_RESET] = { 0x30b0 },
2490 [CAMSS_CSI0PHY_RESET] = { 0x30c0 },
2491 [CAMSS_CSI0RDI_RESET] = { 0x30d0 },
2492 [CAMSS_CSI0PIX_RESET] = { 0x30e0 },
2493 [CAMSS_CSI1_RESET] = { 0x3120 },
2494 [CAMSS_CSI1PHY_RESET] = { 0x3130 },
2495 [CAMSS_CSI1RDI_RESET] = { 0x3140 },
2496 [CAMSS_CSI1PIX_RESET] = { 0x3150 },
2497 [CAMSS_CSI2_RESET] = { 0x3180 },
2498 [CAMSS_CSI2PHY_RESET] = { 0x3190 },
2499 [CAMSS_CSI2RDI_RESET] = { 0x31a0 },
2500 [CAMSS_CSI2PIX_RESET] = { 0x31b0 },
2501 [CAMSS_CSI3_RESET] = { 0x31e0 },
2502 [CAMSS_CSI3PHY_RESET] = { 0x31f0 },
2503 [CAMSS_CSI3RDI_RESET] = { 0x3200 },
2504 [CAMSS_CSI3PIX_RESET] = { 0x3210 },
2505 [CAMSS_ISPIF_RESET] = { 0x3220 },
2506 [CAMSS_CCI_RESET] = { 0x3340 },
2507 [CAMSS_MCLK0_RESET] = { 0x3380 },
2508 [CAMSS_MCLK1_RESET] = { 0x33b0 },
2509 [CAMSS_MCLK2_RESET] = { 0x33e0 },
2510 [CAMSS_MCLK3_RESET] = { 0x3410 },
2511 [CAMSS_GP0_RESET] = { 0x3440 },
2512 [CAMSS_GP1_RESET] = { 0x3470 },
2513 [CAMSS_TOP_RESET] = { 0x3480 },
2514 [CAMSS_MICRO_RESET] = { 0x3490 },
2515 [CAMSS_JPEG_RESET] = { 0x35a0 },
2516 [CAMSS_VFE_RESET] = { 0x36a0 },
2517 [CAMSS_CSI_VFE0_RESET] = { 0x3700 },
2518 [CAMSS_CSI_VFE1_RESET] = { 0x3710 },
2519 [OXILI_RESET] = { 0x4020 },
2520 [OXILICX_RESET] = { 0x4030 },
2521 [OCMEMCX_RESET] = { 0x4050 },
2522 [MMSS_RBCRP_RESET] = { 0x4080 },
2523 [MMSSNOCAHB_RESET] = { 0x5020 },
2524 [MMSSNOCAXI_RESET] = { 0x5060 },
2525 [OCMEMNOC_RESET] = { 0x50b0 },
2526 };
2527
2528 static const struct regmap_config mmcc_msm8974_regmap_config = {
2529 .reg_bits = 32,
2530 .reg_stride = 4,
2531 .val_bits = 32,
2532 .max_register = 0x5104,
2533 .fast_io = true,
2534 };
2535
2536 static const struct qcom_cc_desc mmcc_msm8974_desc = {
2537 .config = &mmcc_msm8974_regmap_config,
2538 .clks = mmcc_msm8974_clocks,
2539 .num_clks = ARRAY_SIZE(mmcc_msm8974_clocks),
2540 .resets = mmcc_msm8974_resets,
2541 .num_resets = ARRAY_SIZE(mmcc_msm8974_resets),
2542 };
2543
2544 static const struct of_device_id mmcc_msm8974_match_table[] = {
2545 { .compatible = "qcom,mmcc-msm8974" },
2546 { }
2547 };
2548 MODULE_DEVICE_TABLE(of, mmcc_msm8974_match_table);
2549
2550 static int mmcc_msm8974_probe(struct platform_device *pdev)
2551 {
2552 struct regmap *regmap;
2553
2554 regmap = qcom_cc_map(pdev, &mmcc_msm8974_desc);
2555 if (IS_ERR(regmap))
2556 return PTR_ERR(regmap);
2557
2558 clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true);
2559 clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false);
2560
2561 return qcom_cc_really_probe(pdev, &mmcc_msm8974_desc, regmap);
2562 }
2563
2564 static int mmcc_msm8974_remove(struct platform_device *pdev)
2565 {
2566 qcom_cc_remove(pdev);
2567 return 0;
2568 }
2569
2570 static struct platform_driver mmcc_msm8974_driver = {
2571 .probe = mmcc_msm8974_probe,
2572 .remove = mmcc_msm8974_remove,
2573 .driver = {
2574 .name = "mmcc-msm8974",
2575 .of_match_table = mmcc_msm8974_match_table,
2576 },
2577 };
2578 module_platform_driver(mmcc_msm8974_driver);
2579
2580 MODULE_DESCRIPTION("QCOM MMCC MSM8974 Driver");
2581 MODULE_LICENSE("GPL v2");
2582 MODULE_ALIAS("platform:mmcc-msm8974");
This page took 0.135709 seconds and 5 git commands to generate.