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