1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
6 #include <linux/clk-provider.h>
7 #include <linux/kernel.h>
8 #include <linux/platform_device.h>
9 #include <linux/module.h>
10 #include <linux/regmap.h>
11 #include <linux/reset-controller.h>
13 #include <dt-bindings/clock/qcom,mmcc-apq8084.h>
14 #include <dt-bindings/reset/qcom,mmcc-apq8084.h>
17 #include "clk-regmap.h"
20 #include "clk-branch.h"
43 static struct clk_pll mmpll0 = {
51 .clkr.hw.init = &(struct clk_init_data){
53 .parent_data = (const struct clk_parent_data[]){
54 { .fw_name = "xo", .name = "xo_board" },
61 static struct clk_regmap mmpll0_vote = {
63 .enable_mask = BIT(0),
64 .hw.init = &(struct clk_init_data){
65 .name = "mmpll0_vote",
66 .parent_hws = (const struct clk_hw*[]){
70 .ops = &clk_pll_vote_ops,
74 static struct clk_pll mmpll1 = {
82 .clkr.hw.init = &(struct clk_init_data){
84 .parent_data = (const struct clk_parent_data[]){
85 { .fw_name = "xo", .name = "xo_board" },
92 static struct clk_regmap mmpll1_vote = {
94 .enable_mask = BIT(1),
95 .hw.init = &(struct clk_init_data){
96 .name = "mmpll1_vote",
97 .parent_hws = (const struct clk_hw*[]){
101 .ops = &clk_pll_vote_ops,
105 static struct clk_pll mmpll2 = {
109 .config_reg = 0x4110,
111 .status_reg = 0x411c,
112 .clkr.hw.init = &(struct clk_init_data){
114 .parent_data = (const struct clk_parent_data[]){
115 { .fw_name = "xo", .name = "xo_board" },
122 static struct clk_pll mmpll3 = {
126 .config_reg = 0x0090,
128 .status_reg = 0x009c,
130 .clkr.hw.init = &(struct clk_init_data){
132 .parent_data = (const struct clk_parent_data[]){
133 { .fw_name = "xo", .name = "xo_board" },
140 static struct clk_pll mmpll4 = {
144 .config_reg = 0x00b0,
146 .status_reg = 0x00bc,
147 .clkr.hw.init = &(struct clk_init_data){
149 .parent_data = (const struct clk_parent_data[]){
150 { .fw_name = "xo", .name = "xo_board" },
157 static const struct parent_map mmcc_xo_mmpll0_mmpll1_gpll0_map[] = {
164 static const struct clk_parent_data mmcc_xo_mmpll0_mmpll1_gpll0[] = {
165 { .fw_name = "xo", .name = "xo_board" },
166 { .hw = &mmpll0_vote.hw },
167 { .hw = &mmpll1_vote.hw },
168 { .fw_name = "mmss_gpll0_vote", .name = "mmss_gpll0_vote" },
171 static const struct parent_map mmcc_xo_mmpll0_dsi_hdmi_gpll0_map[] = {
180 static const struct clk_parent_data mmcc_xo_mmpll0_dsi_hdmi_gpll0[] = {
181 { .fw_name = "xo", .name = "xo_board" },
182 { .hw = &mmpll0_vote.hw },
183 { .fw_name = "hdmipll", .name = "hdmipll" },
184 { .fw_name = "mmss_gpll0_vote", .name = "mmss_gpll0_vote" },
185 { .fw_name = "dsi0pll", .name = "dsi0pll" },
186 { .fw_name = "dsi1pll", .name = "dsi1pll" },
189 static const struct parent_map mmcc_xo_mmpll0_1_2_gpll0_map[] = {
197 static const struct clk_parent_data mmcc_xo_mmpll0_1_2_gpll0[] = {
198 { .fw_name = "xo", .name = "xo_board" },
199 { .hw = &mmpll0_vote.hw },
200 { .hw = &mmpll1_vote.hw },
201 { .fw_name = "mmss_gpll0_vote", .name = "mmss_gpll0_vote" },
202 { .hw = &mmpll2.clkr.hw },
205 static const struct parent_map mmcc_xo_mmpll0_1_3_gpll0_map[] = {
213 static const struct clk_parent_data mmcc_xo_mmpll0_1_3_gpll0[] = {
214 { .fw_name = "xo", .name = "xo_board" },
215 { .hw = &mmpll0_vote.hw },
216 { .hw = &mmpll1_vote.hw },
217 { .fw_name = "mmss_gpll0_vote", .name = "mmss_gpll0_vote" },
218 { .hw = &mmpll3.clkr.hw },
221 static const struct parent_map mmcc_xo_dsi_hdmi_edp_map[] = {
230 static const struct clk_parent_data mmcc_xo_dsi_hdmi_edp[] = {
231 { .fw_name = "xo", .name = "xo_board" },
232 { .fw_name = "edp_link_clk", .name = "edp_link_clk" },
233 { .fw_name = "hdmipll", .name = "hdmipll" },
234 { .fw_name = "edp_vco_div", .name = "edp_vco_div" },
235 { .fw_name = "dsi0pll", .name = "dsi0pll" },
236 { .fw_name = "dsi1pll", .name = "dsi1pll" },
239 static const struct parent_map mmcc_xo_dsi_hdmi_edp_gpll0_map[] = {
248 static const struct clk_parent_data mmcc_xo_dsi_hdmi_edp_gpll0[] = {
249 { .fw_name = "xo", .name = "xo_board" },
250 { .fw_name = "edp_link_clk", .name = "edp_link_clk" },
251 { .fw_name = "hdmipll", .name = "hdmipll" },
252 { .fw_name = "gpll0_vote", .name = "gpll0_vote" },
253 { .fw_name = "dsi0pll", .name = "dsi0pll" },
254 { .fw_name = "dsi1pll", .name = "dsi1pll" },
257 static const struct parent_map mmcc_xo_dsibyte_hdmi_edp_gpll0_map[] = {
262 { P_DSI0PLL_BYTE, 1 },
263 { P_DSI1PLL_BYTE, 2 }
266 static const struct clk_parent_data mmcc_xo_dsibyte_hdmi_edp_gpll0[] = {
267 { .fw_name = "xo", .name = "xo_board" },
268 { .fw_name = "edp_link_clk", .name = "edp_link_clk" },
269 { .fw_name = "hdmipll", .name = "hdmipll" },
270 { .fw_name = "gpll0_vote", .name = "gpll0_vote" },
271 { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },
272 { .fw_name = "dsi1pllbyte", .name = "dsi1pllbyte" },
275 static const struct parent_map mmcc_xo_mmpll0_1_4_gpll0_map[] = {
283 static const struct clk_parent_data mmcc_xo_mmpll0_1_4_gpll0[] = {
284 { .fw_name = "xo", .name = "xo_board" },
285 { .hw = &mmpll0.clkr.hw },
286 { .hw = &mmpll1.clkr.hw },
287 { .hw = &mmpll4.clkr.hw },
288 { .fw_name = "gpll0", .name = "gpll0" },
291 static const struct parent_map mmcc_xo_mmpll0_1_4_gpll1_0_map[] = {
300 static const struct clk_parent_data mmcc_xo_mmpll0_1_4_gpll1_0[] = {
301 { .fw_name = "xo", .name = "xo_board" },
302 { .hw = &mmpll0.clkr.hw },
303 { .hw = &mmpll1.clkr.hw },
304 { .hw = &mmpll4.clkr.hw },
305 { .fw_name = "gpll1", .name = "gpll1" },
306 { .fw_name = "gpll0", .name = "gpll0" },
309 static const struct parent_map mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map[] = {
319 static const struct clk_parent_data mmcc_xo_mmpll0_1_4_gpll1_0_sleep[] = {
320 { .fw_name = "xo", .name = "xo_board" },
321 { .hw = &mmpll0.clkr.hw },
322 { .hw = &mmpll1.clkr.hw },
323 { .hw = &mmpll4.clkr.hw },
324 { .fw_name = "gpll1", .name = "gpll1" },
325 { .fw_name = "gpll0", .name = "gpll0" },
326 { .fw_name = "sleep_clk", .name = "sleep_clk" },
329 static struct clk_rcg2 mmss_ahb_clk_src = {
332 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
333 .clkr.hw.init = &(struct clk_init_data){
334 .name = "mmss_ahb_clk_src",
335 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
336 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
337 .ops = &clk_rcg2_ops,
341 static struct freq_tbl ftbl_mmss_axi_clk[] = {
342 F(19200000, P_XO, 1, 0, 0),
343 F(37500000, P_GPLL0, 16, 0, 0),
344 F(50000000, P_GPLL0, 12, 0, 0),
345 F(75000000, P_GPLL0, 8, 0, 0),
346 F(100000000, P_GPLL0, 6, 0, 0),
347 F(150000000, P_GPLL0, 4, 0, 0),
348 F(333430000, P_MMPLL1, 3.5, 0, 0),
349 F(400000000, P_MMPLL0, 2, 0, 0),
350 F(466800000, P_MMPLL1, 2.5, 0, 0),
353 static struct clk_rcg2 mmss_axi_clk_src = {
356 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
357 .freq_tbl = ftbl_mmss_axi_clk,
358 .clkr.hw.init = &(struct clk_init_data){
359 .name = "mmss_axi_clk_src",
360 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
361 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
362 .ops = &clk_rcg2_ops,
366 static struct freq_tbl ftbl_ocmemnoc_clk[] = {
367 F(19200000, P_XO, 1, 0, 0),
368 F(37500000, P_GPLL0, 16, 0, 0),
369 F(50000000, P_GPLL0, 12, 0, 0),
370 F(75000000, P_GPLL0, 8, 0, 0),
371 F(109090000, P_GPLL0, 5.5, 0, 0),
372 F(150000000, P_GPLL0, 4, 0, 0),
373 F(228570000, P_MMPLL0, 3.5, 0, 0),
374 F(320000000, P_MMPLL0, 2.5, 0, 0),
377 static struct clk_rcg2 ocmemnoc_clk_src = {
380 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
381 .freq_tbl = ftbl_ocmemnoc_clk,
382 .clkr.hw.init = &(struct clk_init_data){
383 .name = "ocmemnoc_clk_src",
384 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
385 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
386 .ops = &clk_rcg2_ops,
390 static struct freq_tbl ftbl_camss_csi0_3_clk[] = {
391 F(100000000, P_GPLL0, 6, 0, 0),
392 F(200000000, P_MMPLL0, 4, 0, 0),
396 static struct clk_rcg2 csi0_clk_src = {
399 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
400 .freq_tbl = ftbl_camss_csi0_3_clk,
401 .clkr.hw.init = &(struct clk_init_data){
402 .name = "csi0_clk_src",
403 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
404 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
405 .ops = &clk_rcg2_ops,
409 static struct clk_rcg2 csi1_clk_src = {
412 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
413 .freq_tbl = ftbl_camss_csi0_3_clk,
414 .clkr.hw.init = &(struct clk_init_data){
415 .name = "csi1_clk_src",
416 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
417 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
418 .ops = &clk_rcg2_ops,
422 static struct clk_rcg2 csi2_clk_src = {
425 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
426 .freq_tbl = ftbl_camss_csi0_3_clk,
427 .clkr.hw.init = &(struct clk_init_data){
428 .name = "csi2_clk_src",
429 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
430 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
431 .ops = &clk_rcg2_ops,
435 static struct clk_rcg2 csi3_clk_src = {
438 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
439 .freq_tbl = ftbl_camss_csi0_3_clk,
440 .clkr.hw.init = &(struct clk_init_data){
441 .name = "csi3_clk_src",
442 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
443 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
444 .ops = &clk_rcg2_ops,
448 static struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
449 F(37500000, P_GPLL0, 16, 0, 0),
450 F(50000000, P_GPLL0, 12, 0, 0),
451 F(60000000, P_GPLL0, 10, 0, 0),
452 F(80000000, P_GPLL0, 7.5, 0, 0),
453 F(100000000, P_GPLL0, 6, 0, 0),
454 F(109090000, P_GPLL0, 5.5, 0, 0),
455 F(133330000, P_GPLL0, 4.5, 0, 0),
456 F(200000000, P_GPLL0, 3, 0, 0),
457 F(228570000, P_MMPLL0, 3.5, 0, 0),
458 F(266670000, P_MMPLL0, 3, 0, 0),
459 F(320000000, P_MMPLL0, 2.5, 0, 0),
460 F(465000000, P_MMPLL4, 2, 0, 0),
461 F(600000000, P_GPLL0, 1, 0, 0),
465 static struct clk_rcg2 vfe0_clk_src = {
468 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
469 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
470 .clkr.hw.init = &(struct clk_init_data){
471 .name = "vfe0_clk_src",
472 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
473 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
474 .ops = &clk_rcg2_ops,
478 static struct clk_rcg2 vfe1_clk_src = {
481 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
482 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
483 .clkr.hw.init = &(struct clk_init_data){
484 .name = "vfe1_clk_src",
485 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
486 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
487 .ops = &clk_rcg2_ops,
491 static struct freq_tbl ftbl_mdss_mdp_clk[] = {
492 F(37500000, P_GPLL0, 16, 0, 0),
493 F(60000000, P_GPLL0, 10, 0, 0),
494 F(75000000, P_GPLL0, 8, 0, 0),
495 F(85710000, P_GPLL0, 7, 0, 0),
496 F(100000000, P_GPLL0, 6, 0, 0),
497 F(150000000, P_GPLL0, 4, 0, 0),
498 F(160000000, P_MMPLL0, 5, 0, 0),
499 F(200000000, P_MMPLL0, 4, 0, 0),
500 F(228570000, P_MMPLL0, 3.5, 0, 0),
501 F(300000000, P_GPLL0, 2, 0, 0),
502 F(320000000, P_MMPLL0, 2.5, 0, 0),
506 static struct clk_rcg2 mdp_clk_src = {
509 .parent_map = mmcc_xo_mmpll0_dsi_hdmi_gpll0_map,
510 .freq_tbl = ftbl_mdss_mdp_clk,
511 .clkr.hw.init = &(struct clk_init_data){
512 .name = "mdp_clk_src",
513 .parent_data = mmcc_xo_mmpll0_dsi_hdmi_gpll0,
514 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_dsi_hdmi_gpll0),
515 .ops = &clk_rcg2_ops,
519 static struct clk_rcg2 gfx3d_clk_src = {
522 .parent_map = mmcc_xo_mmpll0_1_2_gpll0_map,
523 .clkr.hw.init = &(struct clk_init_data){
524 .name = "gfx3d_clk_src",
525 .parent_data = mmcc_xo_mmpll0_1_2_gpll0,
526 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_2_gpll0),
527 .ops = &clk_rcg2_ops,
531 static struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
532 F(75000000, P_GPLL0, 8, 0, 0),
533 F(133330000, P_GPLL0, 4.5, 0, 0),
534 F(200000000, P_GPLL0, 3, 0, 0),
535 F(228570000, P_MMPLL0, 3.5, 0, 0),
536 F(266670000, P_MMPLL0, 3, 0, 0),
537 F(320000000, P_MMPLL0, 2.5, 0, 0),
541 static struct clk_rcg2 jpeg0_clk_src = {
544 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
545 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
546 .clkr.hw.init = &(struct clk_init_data){
547 .name = "jpeg0_clk_src",
548 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
549 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
550 .ops = &clk_rcg2_ops,
554 static struct clk_rcg2 jpeg1_clk_src = {
557 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
558 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
559 .clkr.hw.init = &(struct clk_init_data){
560 .name = "jpeg1_clk_src",
561 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
562 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
563 .ops = &clk_rcg2_ops,
567 static struct clk_rcg2 jpeg2_clk_src = {
570 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
571 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
572 .clkr.hw.init = &(struct clk_init_data){
573 .name = "jpeg2_clk_src",
574 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
575 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
576 .ops = &clk_rcg2_ops,
580 static struct clk_rcg2 pclk0_clk_src = {
584 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
585 .clkr.hw.init = &(struct clk_init_data){
586 .name = "pclk0_clk_src",
587 .parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,
588 .num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),
589 .ops = &clk_pixel_ops,
590 .flags = CLK_SET_RATE_PARENT,
594 static struct clk_rcg2 pclk1_clk_src = {
598 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
599 .clkr.hw.init = &(struct clk_init_data){
600 .name = "pclk1_clk_src",
601 .parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,
602 .num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),
603 .ops = &clk_pixel_ops,
604 .flags = CLK_SET_RATE_PARENT,
608 static struct freq_tbl ftbl_venus0_vcodec0_clk[] = {
609 F(50000000, P_GPLL0, 12, 0, 0),
610 F(100000000, P_GPLL0, 6, 0, 0),
611 F(133330000, P_GPLL0, 4.5, 0, 0),
612 F(200000000, P_MMPLL0, 4, 0, 0),
613 F(266670000, P_MMPLL0, 3, 0, 0),
614 F(465000000, P_MMPLL3, 2, 0, 0),
618 static struct clk_rcg2 vcodec0_clk_src = {
622 .parent_map = mmcc_xo_mmpll0_1_3_gpll0_map,
623 .freq_tbl = ftbl_venus0_vcodec0_clk,
624 .clkr.hw.init = &(struct clk_init_data){
625 .name = "vcodec0_clk_src",
626 .parent_data = mmcc_xo_mmpll0_1_3_gpll0,
627 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_3_gpll0),
628 .ops = &clk_rcg2_ops,
632 static struct freq_tbl ftbl_avsync_vp_clk[] = {
633 F(150000000, P_GPLL0, 4, 0, 0),
634 F(320000000, P_MMPLL0, 2.5, 0, 0),
638 static struct clk_rcg2 vp_clk_src = {
641 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
642 .freq_tbl = ftbl_avsync_vp_clk,
643 .clkr.hw.init = &(struct clk_init_data){
644 .name = "vp_clk_src",
645 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
646 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
647 .ops = &clk_rcg2_ops,
651 static struct freq_tbl ftbl_camss_cci_cci_clk[] = {
652 F(19200000, P_XO, 1, 0, 0),
656 static struct clk_rcg2 cci_clk_src = {
660 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
661 .freq_tbl = ftbl_camss_cci_cci_clk,
662 .clkr.hw.init = &(struct clk_init_data){
663 .name = "cci_clk_src",
664 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0,
665 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0),
666 .ops = &clk_rcg2_ops,
670 static struct freq_tbl ftbl_camss_gp0_1_clk[] = {
671 F(10000, P_XO, 16, 1, 120),
672 F(24000, P_XO, 16, 1, 50),
673 F(6000000, P_GPLL0, 10, 1, 10),
674 F(12000000, P_GPLL0, 10, 1, 5),
675 F(13000000, P_GPLL0, 4, 13, 150),
676 F(24000000, P_GPLL0, 5, 1, 5),
680 static struct clk_rcg2 camss_gp0_clk_src = {
684 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map,
685 .freq_tbl = ftbl_camss_gp0_1_clk,
686 .clkr.hw.init = &(struct clk_init_data){
687 .name = "camss_gp0_clk_src",
688 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0_sleep,
689 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0_sleep),
690 .ops = &clk_rcg2_ops,
694 static struct clk_rcg2 camss_gp1_clk_src = {
698 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map,
699 .freq_tbl = ftbl_camss_gp0_1_clk,
700 .clkr.hw.init = &(struct clk_init_data){
701 .name = "camss_gp1_clk_src",
702 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0_sleep,
703 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0_sleep),
704 .ops = &clk_rcg2_ops,
708 static struct freq_tbl ftbl_camss_mclk0_3_clk[] = {
709 F(4800000, P_XO, 4, 0, 0),
710 F(6000000, P_GPLL0, 10, 1, 10),
711 F(8000000, P_GPLL0, 15, 1, 5),
712 F(9600000, P_XO, 2, 0, 0),
713 F(16000000, P_MMPLL0, 10, 1, 5),
714 F(19200000, P_XO, 1, 0, 0),
715 F(24000000, P_GPLL0, 5, 1, 5),
716 F(32000000, P_MMPLL0, 5, 1, 5),
717 F(48000000, P_GPLL0, 12.5, 0, 0),
718 F(64000000, P_MMPLL0, 12.5, 0, 0),
722 static struct clk_rcg2 mclk0_clk_src = {
726 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
727 .freq_tbl = ftbl_camss_mclk0_3_clk,
728 .clkr.hw.init = &(struct clk_init_data){
729 .name = "mclk0_clk_src",
730 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0,
731 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0),
732 .ops = &clk_rcg2_ops,
736 static struct clk_rcg2 mclk1_clk_src = {
740 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
741 .freq_tbl = ftbl_camss_mclk0_3_clk,
742 .clkr.hw.init = &(struct clk_init_data){
743 .name = "mclk1_clk_src",
744 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0,
745 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0),
746 .ops = &clk_rcg2_ops,
750 static struct clk_rcg2 mclk2_clk_src = {
754 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
755 .freq_tbl = ftbl_camss_mclk0_3_clk,
756 .clkr.hw.init = &(struct clk_init_data){
757 .name = "mclk2_clk_src",
758 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0,
759 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0),
760 .ops = &clk_rcg2_ops,
764 static struct clk_rcg2 mclk3_clk_src = {
768 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
769 .freq_tbl = ftbl_camss_mclk0_3_clk,
770 .clkr.hw.init = &(struct clk_init_data){
771 .name = "mclk3_clk_src",
772 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0,
773 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0),
774 .ops = &clk_rcg2_ops,
778 static struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
779 F(100000000, P_GPLL0, 6, 0, 0),
780 F(200000000, P_MMPLL0, 4, 0, 0),
784 static struct clk_rcg2 csi0phytimer_clk_src = {
787 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
788 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
789 .clkr.hw.init = &(struct clk_init_data){
790 .name = "csi0phytimer_clk_src",
791 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
792 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
793 .ops = &clk_rcg2_ops,
797 static struct clk_rcg2 csi1phytimer_clk_src = {
800 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
801 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
802 .clkr.hw.init = &(struct clk_init_data){
803 .name = "csi1phytimer_clk_src",
804 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
805 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
806 .ops = &clk_rcg2_ops,
810 static struct clk_rcg2 csi2phytimer_clk_src = {
813 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
814 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
815 .clkr.hw.init = &(struct clk_init_data){
816 .name = "csi2phytimer_clk_src",
817 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
818 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
819 .ops = &clk_rcg2_ops,
823 static struct freq_tbl ftbl_camss_vfe_cpp_clk[] = {
824 F(133330000, P_GPLL0, 4.5, 0, 0),
825 F(266670000, P_MMPLL0, 3, 0, 0),
826 F(320000000, P_MMPLL0, 2.5, 0, 0),
827 F(372000000, P_MMPLL4, 2.5, 0, 0),
828 F(465000000, P_MMPLL4, 2, 0, 0),
829 F(600000000, P_GPLL0, 1, 0, 0),
833 static struct clk_rcg2 cpp_clk_src = {
836 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
837 .freq_tbl = ftbl_camss_vfe_cpp_clk,
838 .clkr.hw.init = &(struct clk_init_data){
839 .name = "cpp_clk_src",
840 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
841 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
842 .ops = &clk_rcg2_ops,
846 static struct clk_rcg2 byte0_clk_src = {
849 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
850 .clkr.hw.init = &(struct clk_init_data){
851 .name = "byte0_clk_src",
852 .parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,
853 .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),
854 .ops = &clk_byte2_ops,
855 .flags = CLK_SET_RATE_PARENT,
859 static struct clk_rcg2 byte1_clk_src = {
862 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
863 .clkr.hw.init = &(struct clk_init_data){
864 .name = "byte1_clk_src",
865 .parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,
866 .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),
867 .ops = &clk_byte2_ops,
868 .flags = CLK_SET_RATE_PARENT,
872 static struct freq_tbl ftbl_mdss_edpaux_clk[] = {
873 F(19200000, P_XO, 1, 0, 0),
877 static struct clk_rcg2 edpaux_clk_src = {
880 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
881 .freq_tbl = ftbl_mdss_edpaux_clk,
882 .clkr.hw.init = &(struct clk_init_data){
883 .name = "edpaux_clk_src",
884 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
885 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
886 .ops = &clk_rcg2_ops,
890 static struct freq_tbl ftbl_mdss_edplink_clk[] = {
891 F(135000000, P_EDPLINK, 2, 0, 0),
892 F(270000000, P_EDPLINK, 11, 0, 0),
896 static struct clk_rcg2 edplink_clk_src = {
899 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
900 .freq_tbl = ftbl_mdss_edplink_clk,
901 .clkr.hw.init = &(struct clk_init_data){
902 .name = "edplink_clk_src",
903 .parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,
904 .num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),
905 .ops = &clk_rcg2_ops,
906 .flags = CLK_SET_RATE_PARENT,
910 static struct freq_tbl edp_pixel_freq_tbl[] = {
915 static struct clk_rcg2 edppixel_clk_src = {
919 .parent_map = mmcc_xo_dsi_hdmi_edp_map,
920 .freq_tbl = edp_pixel_freq_tbl,
921 .clkr.hw.init = &(struct clk_init_data){
922 .name = "edppixel_clk_src",
923 .parent_data = mmcc_xo_dsi_hdmi_edp,
924 .num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp),
925 .ops = &clk_edp_pixel_ops,
929 static struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
930 F(19200000, P_XO, 1, 0, 0),
934 static struct clk_rcg2 esc0_clk_src = {
937 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
938 .freq_tbl = ftbl_mdss_esc0_1_clk,
939 .clkr.hw.init = &(struct clk_init_data){
940 .name = "esc0_clk_src",
941 .parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,
942 .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),
943 .ops = &clk_rcg2_ops,
947 static struct clk_rcg2 esc1_clk_src = {
950 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
951 .freq_tbl = ftbl_mdss_esc0_1_clk,
952 .clkr.hw.init = &(struct clk_init_data){
953 .name = "esc1_clk_src",
954 .parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,
955 .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),
956 .ops = &clk_rcg2_ops,
960 static struct freq_tbl extpclk_freq_tbl[] = {
961 { .src = P_HDMIPLL },
965 static struct clk_rcg2 extpclk_clk_src = {
968 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
969 .freq_tbl = extpclk_freq_tbl,
970 .clkr.hw.init = &(struct clk_init_data){
971 .name = "extpclk_clk_src",
972 .parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,
973 .num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),
974 .ops = &clk_byte_ops,
975 .flags = CLK_SET_RATE_PARENT,
979 static struct freq_tbl ftbl_mdss_hdmi_clk[] = {
980 F(19200000, P_XO, 1, 0, 0),
984 static struct clk_rcg2 hdmi_clk_src = {
987 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
988 .freq_tbl = ftbl_mdss_hdmi_clk,
989 .clkr.hw.init = &(struct clk_init_data){
990 .name = "hdmi_clk_src",
991 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
992 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
993 .ops = &clk_rcg2_ops,
997 static struct freq_tbl ftbl_mdss_vsync_clk[] = {
998 F(19200000, P_XO, 1, 0, 0),
1002 static struct clk_rcg2 vsync_clk_src = {
1005 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1006 .freq_tbl = ftbl_mdss_vsync_clk,
1007 .clkr.hw.init = &(struct clk_init_data){
1008 .name = "vsync_clk_src",
1009 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
1010 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
1011 .ops = &clk_rcg2_ops,
1015 static struct freq_tbl ftbl_mmss_rbcpr_clk[] = {
1016 F(50000000, P_GPLL0, 12, 0, 0),
1020 static struct clk_rcg2 rbcpr_clk_src = {
1023 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1024 .freq_tbl = ftbl_mmss_rbcpr_clk,
1025 .clkr.hw.init = &(struct clk_init_data){
1026 .name = "rbcpr_clk_src",
1027 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
1028 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
1029 .ops = &clk_rcg2_ops,
1033 static struct freq_tbl ftbl_oxili_rbbmtimer_clk[] = {
1034 F(19200000, P_XO, 1, 0, 0),
1038 static struct clk_rcg2 rbbmtimer_clk_src = {
1041 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1042 .freq_tbl = ftbl_oxili_rbbmtimer_clk,
1043 .clkr.hw.init = &(struct clk_init_data){
1044 .name = "rbbmtimer_clk_src",
1045 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
1046 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
1047 .ops = &clk_rcg2_ops,
1051 static struct freq_tbl ftbl_vpu_maple_clk[] = {
1052 F(50000000, P_GPLL0, 12, 0, 0),
1053 F(100000000, P_GPLL0, 6, 0, 0),
1054 F(133330000, P_GPLL0, 4.5, 0, 0),
1055 F(200000000, P_MMPLL0, 4, 0, 0),
1056 F(266670000, P_MMPLL0, 3, 0, 0),
1057 F(465000000, P_MMPLL3, 2, 0, 0),
1061 static struct clk_rcg2 maple_clk_src = {
1064 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1065 .freq_tbl = ftbl_vpu_maple_clk,
1066 .clkr.hw.init = &(struct clk_init_data){
1067 .name = "maple_clk_src",
1068 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
1069 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
1070 .ops = &clk_rcg2_ops,
1074 static struct freq_tbl ftbl_vpu_vdp_clk[] = {
1075 F(50000000, P_GPLL0, 12, 0, 0),
1076 F(100000000, P_GPLL0, 6, 0, 0),
1077 F(200000000, P_MMPLL0, 4, 0, 0),
1078 F(320000000, P_MMPLL0, 2.5, 0, 0),
1079 F(400000000, P_MMPLL0, 2, 0, 0),
1083 static struct clk_rcg2 vdp_clk_src = {
1086 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1087 .freq_tbl = ftbl_vpu_vdp_clk,
1088 .clkr.hw.init = &(struct clk_init_data){
1089 .name = "vdp_clk_src",
1090 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
1091 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
1092 .ops = &clk_rcg2_ops,
1096 static struct freq_tbl ftbl_vpu_bus_clk[] = {
1097 F(40000000, P_GPLL0, 15, 0, 0),
1098 F(80000000, P_MMPLL0, 10, 0, 0),
1102 static struct clk_rcg2 vpu_bus_clk_src = {
1105 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1106 .freq_tbl = ftbl_vpu_bus_clk,
1107 .clkr.hw.init = &(struct clk_init_data){
1108 .name = "vpu_bus_clk_src",
1109 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
1110 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
1111 .ops = &clk_rcg2_ops,
1115 static struct clk_branch mmss_cxo_clk = {
1118 .enable_reg = 0x5104,
1119 .enable_mask = BIT(0),
1120 .hw.init = &(struct clk_init_data){
1121 .name = "mmss_cxo_clk",
1122 .parent_data = (const struct clk_parent_data[]){
1123 { .fw_name = "xo", .name = "xo_board" },
1126 .flags = CLK_SET_RATE_PARENT,
1127 .ops = &clk_branch2_ops,
1132 static struct clk_branch mmss_sleepclk_clk = {
1135 .enable_reg = 0x5100,
1136 .enable_mask = BIT(0),
1137 .hw.init = &(struct clk_init_data){
1138 .name = "mmss_sleepclk_clk",
1139 .parent_data = (const struct clk_parent_data[]){
1140 { .fw_name = "sleep_clk", .name = "sleep_clk" },
1143 .flags = CLK_SET_RATE_PARENT,
1144 .ops = &clk_branch2_ops,
1149 static struct clk_branch avsync_ahb_clk = {
1152 .enable_reg = 0x2414,
1153 .enable_mask = BIT(0),
1154 .hw.init = &(struct clk_init_data){
1155 .name = "avsync_ahb_clk",
1156 .parent_hws = (const struct clk_hw*[]){
1157 &mmss_ahb_clk_src.clkr.hw
1160 .flags = CLK_SET_RATE_PARENT,
1161 .ops = &clk_branch2_ops,
1166 static struct clk_branch avsync_edppixel_clk = {
1169 .enable_reg = 0x2418,
1170 .enable_mask = BIT(0),
1171 .hw.init = &(struct clk_init_data){
1172 .name = "avsync_edppixel_clk",
1173 .parent_hws = (const struct clk_hw*[]){
1174 &edppixel_clk_src.clkr.hw
1177 .flags = CLK_SET_RATE_PARENT,
1178 .ops = &clk_branch2_ops,
1183 static struct clk_branch avsync_extpclk_clk = {
1186 .enable_reg = 0x2410,
1187 .enable_mask = BIT(0),
1188 .hw.init = &(struct clk_init_data){
1189 .name = "avsync_extpclk_clk",
1190 .parent_hws = (const struct clk_hw*[]){
1191 &extpclk_clk_src.clkr.hw
1194 .flags = CLK_SET_RATE_PARENT,
1195 .ops = &clk_branch2_ops,
1200 static struct clk_branch avsync_pclk0_clk = {
1203 .enable_reg = 0x241c,
1204 .enable_mask = BIT(0),
1205 .hw.init = &(struct clk_init_data){
1206 .name = "avsync_pclk0_clk",
1207 .parent_hws = (const struct clk_hw*[]){
1208 &pclk0_clk_src.clkr.hw
1211 .flags = CLK_SET_RATE_PARENT,
1212 .ops = &clk_branch2_ops,
1217 static struct clk_branch avsync_pclk1_clk = {
1220 .enable_reg = 0x2420,
1221 .enable_mask = BIT(0),
1222 .hw.init = &(struct clk_init_data){
1223 .name = "avsync_pclk1_clk",
1224 .parent_hws = (const struct clk_hw*[]){
1225 &pclk1_clk_src.clkr.hw
1228 .flags = CLK_SET_RATE_PARENT,
1229 .ops = &clk_branch2_ops,
1234 static struct clk_branch avsync_vp_clk = {
1237 .enable_reg = 0x2404,
1238 .enable_mask = BIT(0),
1239 .hw.init = &(struct clk_init_data){
1240 .name = "avsync_vp_clk",
1241 .parent_hws = (const struct clk_hw*[]){
1245 .flags = CLK_SET_RATE_PARENT,
1246 .ops = &clk_branch2_ops,
1251 static struct clk_branch camss_ahb_clk = {
1254 .enable_reg = 0x348c,
1255 .enable_mask = BIT(0),
1256 .hw.init = &(struct clk_init_data){
1257 .name = "camss_ahb_clk",
1258 .parent_hws = (const struct clk_hw*[]){
1259 &mmss_ahb_clk_src.clkr.hw
1262 .flags = CLK_SET_RATE_PARENT,
1263 .ops = &clk_branch2_ops,
1268 static struct clk_branch camss_cci_cci_ahb_clk = {
1271 .enable_reg = 0x3348,
1272 .enable_mask = BIT(0),
1273 .hw.init = &(struct clk_init_data){
1274 .name = "camss_cci_cci_ahb_clk",
1275 .parent_hws = (const struct clk_hw*[]){
1276 &mmss_ahb_clk_src.clkr.hw
1279 .ops = &clk_branch2_ops,
1284 static struct clk_branch camss_cci_cci_clk = {
1287 .enable_reg = 0x3344,
1288 .enable_mask = BIT(0),
1289 .hw.init = &(struct clk_init_data){
1290 .name = "camss_cci_cci_clk",
1291 .parent_hws = (const struct clk_hw*[]){
1292 &cci_clk_src.clkr.hw
1295 .flags = CLK_SET_RATE_PARENT,
1296 .ops = &clk_branch2_ops,
1301 static struct clk_branch camss_csi0_ahb_clk = {
1304 .enable_reg = 0x30bc,
1305 .enable_mask = BIT(0),
1306 .hw.init = &(struct clk_init_data){
1307 .name = "camss_csi0_ahb_clk",
1308 .parent_hws = (const struct clk_hw*[]){
1309 &mmss_ahb_clk_src.clkr.hw
1312 .ops = &clk_branch2_ops,
1317 static struct clk_branch camss_csi0_clk = {
1320 .enable_reg = 0x30b4,
1321 .enable_mask = BIT(0),
1322 .hw.init = &(struct clk_init_data){
1323 .name = "camss_csi0_clk",
1324 .parent_hws = (const struct clk_hw*[]){
1325 &csi0_clk_src.clkr.hw
1328 .flags = CLK_SET_RATE_PARENT,
1329 .ops = &clk_branch2_ops,
1334 static struct clk_branch camss_csi0phy_clk = {
1337 .enable_reg = 0x30c4,
1338 .enable_mask = BIT(0),
1339 .hw.init = &(struct clk_init_data){
1340 .name = "camss_csi0phy_clk",
1341 .parent_hws = (const struct clk_hw*[]){
1342 &csi0_clk_src.clkr.hw
1345 .flags = CLK_SET_RATE_PARENT,
1346 .ops = &clk_branch2_ops,
1351 static struct clk_branch camss_csi0pix_clk = {
1354 .enable_reg = 0x30e4,
1355 .enable_mask = BIT(0),
1356 .hw.init = &(struct clk_init_data){
1357 .name = "camss_csi0pix_clk",
1358 .parent_hws = (const struct clk_hw*[]){
1359 &csi0_clk_src.clkr.hw
1362 .flags = CLK_SET_RATE_PARENT,
1363 .ops = &clk_branch2_ops,
1368 static struct clk_branch camss_csi0rdi_clk = {
1371 .enable_reg = 0x30d4,
1372 .enable_mask = BIT(0),
1373 .hw.init = &(struct clk_init_data){
1374 .name = "camss_csi0rdi_clk",
1375 .parent_hws = (const struct clk_hw*[]){
1376 &csi0_clk_src.clkr.hw
1379 .flags = CLK_SET_RATE_PARENT,
1380 .ops = &clk_branch2_ops,
1385 static struct clk_branch camss_csi1_ahb_clk = {
1388 .enable_reg = 0x3128,
1389 .enable_mask = BIT(0),
1390 .hw.init = &(struct clk_init_data){
1391 .name = "camss_csi1_ahb_clk",
1392 .parent_hws = (const struct clk_hw*[]){
1393 &mmss_ahb_clk_src.clkr.hw
1396 .flags = CLK_SET_RATE_PARENT,
1397 .ops = &clk_branch2_ops,
1402 static struct clk_branch camss_csi1_clk = {
1405 .enable_reg = 0x3124,
1406 .enable_mask = BIT(0),
1407 .hw.init = &(struct clk_init_data){
1408 .name = "camss_csi1_clk",
1409 .parent_hws = (const struct clk_hw*[]){
1410 &csi1_clk_src.clkr.hw
1413 .flags = CLK_SET_RATE_PARENT,
1414 .ops = &clk_branch2_ops,
1419 static struct clk_branch camss_csi1phy_clk = {
1422 .enable_reg = 0x3134,
1423 .enable_mask = BIT(0),
1424 .hw.init = &(struct clk_init_data){
1425 .name = "camss_csi1phy_clk",
1426 .parent_hws = (const struct clk_hw*[]){
1427 &csi1_clk_src.clkr.hw
1430 .flags = CLK_SET_RATE_PARENT,
1431 .ops = &clk_branch2_ops,
1436 static struct clk_branch camss_csi1pix_clk = {
1439 .enable_reg = 0x3154,
1440 .enable_mask = BIT(0),
1441 .hw.init = &(struct clk_init_data){
1442 .name = "camss_csi1pix_clk",
1443 .parent_hws = (const struct clk_hw*[]){
1444 &csi1_clk_src.clkr.hw
1447 .flags = CLK_SET_RATE_PARENT,
1448 .ops = &clk_branch2_ops,
1453 static struct clk_branch camss_csi1rdi_clk = {
1456 .enable_reg = 0x3144,
1457 .enable_mask = BIT(0),
1458 .hw.init = &(struct clk_init_data){
1459 .name = "camss_csi1rdi_clk",
1460 .parent_hws = (const struct clk_hw*[]){
1461 &csi1_clk_src.clkr.hw
1464 .flags = CLK_SET_RATE_PARENT,
1465 .ops = &clk_branch2_ops,
1470 static struct clk_branch camss_csi2_ahb_clk = {
1473 .enable_reg = 0x3188,
1474 .enable_mask = BIT(0),
1475 .hw.init = &(struct clk_init_data){
1476 .name = "camss_csi2_ahb_clk",
1477 .parent_hws = (const struct clk_hw*[]){
1478 &mmss_ahb_clk_src.clkr.hw
1481 .ops = &clk_branch2_ops,
1486 static struct clk_branch camss_csi2_clk = {
1489 .enable_reg = 0x3184,
1490 .enable_mask = BIT(0),
1491 .hw.init = &(struct clk_init_data){
1492 .name = "camss_csi2_clk",
1493 .parent_hws = (const struct clk_hw*[]){
1494 &csi2_clk_src.clkr.hw
1497 .flags = CLK_SET_RATE_PARENT,
1498 .ops = &clk_branch2_ops,
1503 static struct clk_branch camss_csi2phy_clk = {
1506 .enable_reg = 0x3194,
1507 .enable_mask = BIT(0),
1508 .hw.init = &(struct clk_init_data){
1509 .name = "camss_csi2phy_clk",
1510 .parent_hws = (const struct clk_hw*[]){
1511 &csi2_clk_src.clkr.hw
1514 .flags = CLK_SET_RATE_PARENT,
1515 .ops = &clk_branch2_ops,
1520 static struct clk_branch camss_csi2pix_clk = {
1523 .enable_reg = 0x31b4,
1524 .enable_mask = BIT(0),
1525 .hw.init = &(struct clk_init_data){
1526 .name = "camss_csi2pix_clk",
1527 .parent_hws = (const struct clk_hw*[]){
1528 &csi2_clk_src.clkr.hw
1531 .flags = CLK_SET_RATE_PARENT,
1532 .ops = &clk_branch2_ops,
1537 static struct clk_branch camss_csi2rdi_clk = {
1540 .enable_reg = 0x31a4,
1541 .enable_mask = BIT(0),
1542 .hw.init = &(struct clk_init_data){
1543 .name = "camss_csi2rdi_clk",
1544 .parent_hws = (const struct clk_hw*[]){
1545 &csi2_clk_src.clkr.hw
1548 .flags = CLK_SET_RATE_PARENT,
1549 .ops = &clk_branch2_ops,
1554 static struct clk_branch camss_csi3_ahb_clk = {
1557 .enable_reg = 0x31e8,
1558 .enable_mask = BIT(0),
1559 .hw.init = &(struct clk_init_data){
1560 .name = "camss_csi3_ahb_clk",
1561 .parent_hws = (const struct clk_hw*[]){
1562 &mmss_ahb_clk_src.clkr.hw
1565 .ops = &clk_branch2_ops,
1570 static struct clk_branch camss_csi3_clk = {
1573 .enable_reg = 0x31e4,
1574 .enable_mask = BIT(0),
1575 .hw.init = &(struct clk_init_data){
1576 .name = "camss_csi3_clk",
1577 .parent_hws = (const struct clk_hw*[]){
1578 &csi3_clk_src.clkr.hw
1581 .flags = CLK_SET_RATE_PARENT,
1582 .ops = &clk_branch2_ops,
1587 static struct clk_branch camss_csi3phy_clk = {
1590 .enable_reg = 0x31f4,
1591 .enable_mask = BIT(0),
1592 .hw.init = &(struct clk_init_data){
1593 .name = "camss_csi3phy_clk",
1594 .parent_hws = (const struct clk_hw*[]){
1595 &csi3_clk_src.clkr.hw
1598 .flags = CLK_SET_RATE_PARENT,
1599 .ops = &clk_branch2_ops,
1604 static struct clk_branch camss_csi3pix_clk = {
1607 .enable_reg = 0x3214,
1608 .enable_mask = BIT(0),
1609 .hw.init = &(struct clk_init_data){
1610 .name = "camss_csi3pix_clk",
1611 .parent_hws = (const struct clk_hw*[]){
1612 &csi3_clk_src.clkr.hw
1615 .flags = CLK_SET_RATE_PARENT,
1616 .ops = &clk_branch2_ops,
1621 static struct clk_branch camss_csi3rdi_clk = {
1624 .enable_reg = 0x3204,
1625 .enable_mask = BIT(0),
1626 .hw.init = &(struct clk_init_data){
1627 .name = "camss_csi3rdi_clk",
1628 .parent_hws = (const struct clk_hw*[]){
1629 &csi3_clk_src.clkr.hw
1632 .flags = CLK_SET_RATE_PARENT,
1633 .ops = &clk_branch2_ops,
1638 static struct clk_branch camss_csi_vfe0_clk = {
1641 .enable_reg = 0x3704,
1642 .enable_mask = BIT(0),
1643 .hw.init = &(struct clk_init_data){
1644 .name = "camss_csi_vfe0_clk",
1645 .parent_hws = (const struct clk_hw*[]){
1646 &vfe0_clk_src.clkr.hw
1649 .flags = CLK_SET_RATE_PARENT,
1650 .ops = &clk_branch2_ops,
1655 static struct clk_branch camss_csi_vfe1_clk = {
1658 .enable_reg = 0x3714,
1659 .enable_mask = BIT(0),
1660 .hw.init = &(struct clk_init_data){
1661 .name = "camss_csi_vfe1_clk",
1662 .parent_hws = (const struct clk_hw*[]){
1663 &vfe1_clk_src.clkr.hw
1666 .flags = CLK_SET_RATE_PARENT,
1667 .ops = &clk_branch2_ops,
1672 static struct clk_branch camss_gp0_clk = {
1675 .enable_reg = 0x3444,
1676 .enable_mask = BIT(0),
1677 .hw.init = &(struct clk_init_data){
1678 .name = "camss_gp0_clk",
1679 .parent_hws = (const struct clk_hw*[]){
1680 &camss_gp0_clk_src.clkr.hw
1683 .flags = CLK_SET_RATE_PARENT,
1684 .ops = &clk_branch2_ops,
1689 static struct clk_branch camss_gp1_clk = {
1692 .enable_reg = 0x3474,
1693 .enable_mask = BIT(0),
1694 .hw.init = &(struct clk_init_data){
1695 .name = "camss_gp1_clk",
1696 .parent_hws = (const struct clk_hw*[]){
1697 &camss_gp1_clk_src.clkr.hw
1700 .flags = CLK_SET_RATE_PARENT,
1701 .ops = &clk_branch2_ops,
1706 static struct clk_branch camss_ispif_ahb_clk = {
1709 .enable_reg = 0x3224,
1710 .enable_mask = BIT(0),
1711 .hw.init = &(struct clk_init_data){
1712 .name = "camss_ispif_ahb_clk",
1713 .parent_hws = (const struct clk_hw*[]){
1714 &mmss_ahb_clk_src.clkr.hw
1717 .flags = CLK_SET_RATE_PARENT,
1718 .ops = &clk_branch2_ops,
1723 static struct clk_branch camss_jpeg_jpeg0_clk = {
1726 .enable_reg = 0x35a8,
1727 .enable_mask = BIT(0),
1728 .hw.init = &(struct clk_init_data){
1729 .name = "camss_jpeg_jpeg0_clk",
1730 .parent_hws = (const struct clk_hw*[]){
1731 &jpeg0_clk_src.clkr.hw
1734 .flags = CLK_SET_RATE_PARENT,
1735 .ops = &clk_branch2_ops,
1740 static struct clk_branch camss_jpeg_jpeg1_clk = {
1743 .enable_reg = 0x35ac,
1744 .enable_mask = BIT(0),
1745 .hw.init = &(struct clk_init_data){
1746 .name = "camss_jpeg_jpeg1_clk",
1747 .parent_hws = (const struct clk_hw*[]){
1748 &jpeg1_clk_src.clkr.hw
1751 .flags = CLK_SET_RATE_PARENT,
1752 .ops = &clk_branch2_ops,
1757 static struct clk_branch camss_jpeg_jpeg2_clk = {
1760 .enable_reg = 0x35b0,
1761 .enable_mask = BIT(0),
1762 .hw.init = &(struct clk_init_data){
1763 .name = "camss_jpeg_jpeg2_clk",
1764 .parent_hws = (const struct clk_hw*[]){
1765 &jpeg2_clk_src.clkr.hw
1768 .flags = CLK_SET_RATE_PARENT,
1769 .ops = &clk_branch2_ops,
1774 static struct clk_branch camss_jpeg_jpeg_ahb_clk = {
1777 .enable_reg = 0x35b4,
1778 .enable_mask = BIT(0),
1779 .hw.init = &(struct clk_init_data){
1780 .name = "camss_jpeg_jpeg_ahb_clk",
1781 .parent_hws = (const struct clk_hw*[]){
1782 &mmss_ahb_clk_src.clkr.hw
1785 .ops = &clk_branch2_ops,
1790 static struct clk_branch camss_jpeg_jpeg_axi_clk = {
1793 .enable_reg = 0x35b8,
1794 .enable_mask = BIT(0),
1795 .hw.init = &(struct clk_init_data){
1796 .name = "camss_jpeg_jpeg_axi_clk",
1797 .parent_hws = (const struct clk_hw*[]){
1798 &mmss_axi_clk_src.clkr.hw
1801 .ops = &clk_branch2_ops,
1806 static struct clk_branch camss_mclk0_clk = {
1809 .enable_reg = 0x3384,
1810 .enable_mask = BIT(0),
1811 .hw.init = &(struct clk_init_data){
1812 .name = "camss_mclk0_clk",
1813 .parent_hws = (const struct clk_hw*[]){
1814 &mclk0_clk_src.clkr.hw
1817 .flags = CLK_SET_RATE_PARENT,
1818 .ops = &clk_branch2_ops,
1823 static struct clk_branch camss_mclk1_clk = {
1826 .enable_reg = 0x33b4,
1827 .enable_mask = BIT(0),
1828 .hw.init = &(struct clk_init_data){
1829 .name = "camss_mclk1_clk",
1830 .parent_hws = (const struct clk_hw*[]){
1831 &mclk1_clk_src.clkr.hw
1834 .flags = CLK_SET_RATE_PARENT,
1835 .ops = &clk_branch2_ops,
1840 static struct clk_branch camss_mclk2_clk = {
1843 .enable_reg = 0x33e4,
1844 .enable_mask = BIT(0),
1845 .hw.init = &(struct clk_init_data){
1846 .name = "camss_mclk2_clk",
1847 .parent_hws = (const struct clk_hw*[]){
1848 &mclk2_clk_src.clkr.hw
1851 .flags = CLK_SET_RATE_PARENT,
1852 .ops = &clk_branch2_ops,
1857 static struct clk_branch camss_mclk3_clk = {
1860 .enable_reg = 0x3414,
1861 .enable_mask = BIT(0),
1862 .hw.init = &(struct clk_init_data){
1863 .name = "camss_mclk3_clk",
1864 .parent_hws = (const struct clk_hw*[]){
1865 &mclk3_clk_src.clkr.hw
1868 .flags = CLK_SET_RATE_PARENT,
1869 .ops = &clk_branch2_ops,
1874 static struct clk_branch camss_micro_ahb_clk = {
1877 .enable_reg = 0x3494,
1878 .enable_mask = BIT(0),
1879 .hw.init = &(struct clk_init_data){
1880 .name = "camss_micro_ahb_clk",
1881 .parent_hws = (const struct clk_hw*[]){
1882 &mmss_ahb_clk_src.clkr.hw
1885 .ops = &clk_branch2_ops,
1890 static struct clk_branch camss_phy0_csi0phytimer_clk = {
1893 .enable_reg = 0x3024,
1894 .enable_mask = BIT(0),
1895 .hw.init = &(struct clk_init_data){
1896 .name = "camss_phy0_csi0phytimer_clk",
1897 .parent_hws = (const struct clk_hw*[]){
1898 &csi0phytimer_clk_src.clkr.hw
1901 .flags = CLK_SET_RATE_PARENT,
1902 .ops = &clk_branch2_ops,
1907 static struct clk_branch camss_phy1_csi1phytimer_clk = {
1910 .enable_reg = 0x3054,
1911 .enable_mask = BIT(0),
1912 .hw.init = &(struct clk_init_data){
1913 .name = "camss_phy1_csi1phytimer_clk",
1914 .parent_hws = (const struct clk_hw*[]){
1915 &csi1phytimer_clk_src.clkr.hw
1918 .flags = CLK_SET_RATE_PARENT,
1919 .ops = &clk_branch2_ops,
1924 static struct clk_branch camss_phy2_csi2phytimer_clk = {
1927 .enable_reg = 0x3084,
1928 .enable_mask = BIT(0),
1929 .hw.init = &(struct clk_init_data){
1930 .name = "camss_phy2_csi2phytimer_clk",
1931 .parent_hws = (const struct clk_hw*[]){
1932 &csi2phytimer_clk_src.clkr.hw
1935 .flags = CLK_SET_RATE_PARENT,
1936 .ops = &clk_branch2_ops,
1941 static struct clk_branch camss_top_ahb_clk = {
1944 .enable_reg = 0x3484,
1945 .enable_mask = BIT(0),
1946 .hw.init = &(struct clk_init_data){
1947 .name = "camss_top_ahb_clk",
1948 .parent_hws = (const struct clk_hw*[]){
1949 &mmss_ahb_clk_src.clkr.hw
1952 .flags = CLK_SET_RATE_PARENT,
1953 .ops = &clk_branch2_ops,
1958 static struct clk_branch camss_vfe_cpp_ahb_clk = {
1961 .enable_reg = 0x36b4,
1962 .enable_mask = BIT(0),
1963 .hw.init = &(struct clk_init_data){
1964 .name = "camss_vfe_cpp_ahb_clk",
1965 .parent_hws = (const struct clk_hw*[]){
1966 &mmss_ahb_clk_src.clkr.hw
1969 .flags = CLK_SET_RATE_PARENT,
1970 .ops = &clk_branch2_ops,
1975 static struct clk_branch camss_vfe_cpp_clk = {
1978 .enable_reg = 0x36b0,
1979 .enable_mask = BIT(0),
1980 .hw.init = &(struct clk_init_data){
1981 .name = "camss_vfe_cpp_clk",
1982 .parent_hws = (const struct clk_hw*[]){
1983 &cpp_clk_src.clkr.hw
1986 .flags = CLK_SET_RATE_PARENT,
1987 .ops = &clk_branch2_ops,
1992 static struct clk_branch camss_vfe_vfe0_clk = {
1995 .enable_reg = 0x36a8,
1996 .enable_mask = BIT(0),
1997 .hw.init = &(struct clk_init_data){
1998 .name = "camss_vfe_vfe0_clk",
1999 .parent_hws = (const struct clk_hw*[]){
2000 &vfe0_clk_src.clkr.hw
2003 .flags = CLK_SET_RATE_PARENT,
2004 .ops = &clk_branch2_ops,
2009 static struct clk_branch camss_vfe_vfe1_clk = {
2012 .enable_reg = 0x36ac,
2013 .enable_mask = BIT(0),
2014 .hw.init = &(struct clk_init_data){
2015 .name = "camss_vfe_vfe1_clk",
2016 .parent_hws = (const struct clk_hw*[]){
2017 &vfe1_clk_src.clkr.hw
2020 .flags = CLK_SET_RATE_PARENT,
2021 .ops = &clk_branch2_ops,
2026 static struct clk_branch camss_vfe_vfe_ahb_clk = {
2029 .enable_reg = 0x36b8,
2030 .enable_mask = BIT(0),
2031 .hw.init = &(struct clk_init_data){
2032 .name = "camss_vfe_vfe_ahb_clk",
2033 .parent_hws = (const struct clk_hw*[]){
2034 &mmss_ahb_clk_src.clkr.hw
2037 .flags = CLK_SET_RATE_PARENT,
2038 .ops = &clk_branch2_ops,
2043 static struct clk_branch camss_vfe_vfe_axi_clk = {
2046 .enable_reg = 0x36bc,
2047 .enable_mask = BIT(0),
2048 .hw.init = &(struct clk_init_data){
2049 .name = "camss_vfe_vfe_axi_clk",
2050 .parent_hws = (const struct clk_hw*[]){
2051 &mmss_axi_clk_src.clkr.hw
2054 .flags = CLK_SET_RATE_PARENT,
2055 .ops = &clk_branch2_ops,
2060 static struct clk_branch mdss_ahb_clk = {
2063 .enable_reg = 0x2308,
2064 .enable_mask = BIT(0),
2065 .hw.init = &(struct clk_init_data){
2066 .name = "mdss_ahb_clk",
2067 .parent_hws = (const struct clk_hw*[]){
2068 &mmss_ahb_clk_src.clkr.hw
2071 .flags = CLK_SET_RATE_PARENT,
2072 .ops = &clk_branch2_ops,
2077 static struct clk_branch mdss_axi_clk = {
2080 .enable_reg = 0x2310,
2081 .enable_mask = BIT(0),
2082 .hw.init = &(struct clk_init_data){
2083 .name = "mdss_axi_clk",
2084 .parent_hws = (const struct clk_hw*[]){
2085 &mmss_axi_clk_src.clkr.hw
2088 .flags = CLK_SET_RATE_PARENT,
2089 .ops = &clk_branch2_ops,
2094 static struct clk_branch mdss_byte0_clk = {
2097 .enable_reg = 0x233c,
2098 .enable_mask = BIT(0),
2099 .hw.init = &(struct clk_init_data){
2100 .name = "mdss_byte0_clk",
2101 .parent_hws = (const struct clk_hw*[]){
2102 &byte0_clk_src.clkr.hw
2105 .flags = CLK_SET_RATE_PARENT,
2106 .ops = &clk_branch2_ops,
2111 static struct clk_branch mdss_byte1_clk = {
2114 .enable_reg = 0x2340,
2115 .enable_mask = BIT(0),
2116 .hw.init = &(struct clk_init_data){
2117 .name = "mdss_byte1_clk",
2118 .parent_hws = (const struct clk_hw*[]){
2119 &byte1_clk_src.clkr.hw
2122 .flags = CLK_SET_RATE_PARENT,
2123 .ops = &clk_branch2_ops,
2128 static struct clk_branch mdss_edpaux_clk = {
2131 .enable_reg = 0x2334,
2132 .enable_mask = BIT(0),
2133 .hw.init = &(struct clk_init_data){
2134 .name = "mdss_edpaux_clk",
2135 .parent_hws = (const struct clk_hw*[]){
2136 &edpaux_clk_src.clkr.hw
2139 .flags = CLK_SET_RATE_PARENT,
2140 .ops = &clk_branch2_ops,
2145 static struct clk_branch mdss_edplink_clk = {
2148 .enable_reg = 0x2330,
2149 .enable_mask = BIT(0),
2150 .hw.init = &(struct clk_init_data){
2151 .name = "mdss_edplink_clk",
2152 .parent_hws = (const struct clk_hw*[]){
2153 &edplink_clk_src.clkr.hw
2156 .flags = CLK_SET_RATE_PARENT,
2157 .ops = &clk_branch2_ops,
2162 static struct clk_branch mdss_edppixel_clk = {
2165 .enable_reg = 0x232c,
2166 .enable_mask = BIT(0),
2167 .hw.init = &(struct clk_init_data){
2168 .name = "mdss_edppixel_clk",
2169 .parent_hws = (const struct clk_hw*[]){
2170 &edppixel_clk_src.clkr.hw
2173 .flags = CLK_SET_RATE_PARENT,
2174 .ops = &clk_branch2_ops,
2179 static struct clk_branch mdss_esc0_clk = {
2182 .enable_reg = 0x2344,
2183 .enable_mask = BIT(0),
2184 .hw.init = &(struct clk_init_data){
2185 .name = "mdss_esc0_clk",
2186 .parent_hws = (const struct clk_hw*[]){
2187 &esc0_clk_src.clkr.hw
2190 .flags = CLK_SET_RATE_PARENT,
2191 .ops = &clk_branch2_ops,
2196 static struct clk_branch mdss_esc1_clk = {
2199 .enable_reg = 0x2348,
2200 .enable_mask = BIT(0),
2201 .hw.init = &(struct clk_init_data){
2202 .name = "mdss_esc1_clk",
2203 .parent_hws = (const struct clk_hw*[]){
2204 &esc1_clk_src.clkr.hw
2207 .flags = CLK_SET_RATE_PARENT,
2208 .ops = &clk_branch2_ops,
2213 static struct clk_branch mdss_extpclk_clk = {
2216 .enable_reg = 0x2324,
2217 .enable_mask = BIT(0),
2218 .hw.init = &(struct clk_init_data){
2219 .name = "mdss_extpclk_clk",
2220 .parent_hws = (const struct clk_hw*[]){
2221 &extpclk_clk_src.clkr.hw
2224 .flags = CLK_SET_RATE_PARENT,
2225 .ops = &clk_branch2_ops,
2230 static struct clk_branch mdss_hdmi_ahb_clk = {
2233 .enable_reg = 0x230c,
2234 .enable_mask = BIT(0),
2235 .hw.init = &(struct clk_init_data){
2236 .name = "mdss_hdmi_ahb_clk",
2237 .parent_hws = (const struct clk_hw*[]){
2238 &mmss_ahb_clk_src.clkr.hw
2241 .flags = CLK_SET_RATE_PARENT,
2242 .ops = &clk_branch2_ops,
2247 static struct clk_branch mdss_hdmi_clk = {
2250 .enable_reg = 0x2338,
2251 .enable_mask = BIT(0),
2252 .hw.init = &(struct clk_init_data){
2253 .name = "mdss_hdmi_clk",
2254 .parent_hws = (const struct clk_hw*[]){
2255 &hdmi_clk_src.clkr.hw
2258 .flags = CLK_SET_RATE_PARENT,
2259 .ops = &clk_branch2_ops,
2264 static struct clk_branch mdss_mdp_clk = {
2267 .enable_reg = 0x231c,
2268 .enable_mask = BIT(0),
2269 .hw.init = &(struct clk_init_data){
2270 .name = "mdss_mdp_clk",
2271 .parent_hws = (const struct clk_hw*[]){
2272 &mdp_clk_src.clkr.hw
2275 .flags = CLK_SET_RATE_PARENT,
2276 .ops = &clk_branch2_ops,
2281 static struct clk_branch mdss_mdp_lut_clk = {
2284 .enable_reg = 0x2320,
2285 .enable_mask = BIT(0),
2286 .hw.init = &(struct clk_init_data){
2287 .name = "mdss_mdp_lut_clk",
2288 .parent_hws = (const struct clk_hw*[]){
2289 &mdp_clk_src.clkr.hw
2292 .flags = CLK_SET_RATE_PARENT,
2293 .ops = &clk_branch2_ops,
2298 static struct clk_branch mdss_pclk0_clk = {
2301 .enable_reg = 0x2314,
2302 .enable_mask = BIT(0),
2303 .hw.init = &(struct clk_init_data){
2304 .name = "mdss_pclk0_clk",
2305 .parent_hws = (const struct clk_hw*[]){
2306 &pclk0_clk_src.clkr.hw
2309 .flags = CLK_SET_RATE_PARENT,
2310 .ops = &clk_branch2_ops,
2315 static struct clk_branch mdss_pclk1_clk = {
2318 .enable_reg = 0x2318,
2319 .enable_mask = BIT(0),
2320 .hw.init = &(struct clk_init_data){
2321 .name = "mdss_pclk1_clk",
2322 .parent_hws = (const struct clk_hw*[]){
2323 &pclk1_clk_src.clkr.hw
2326 .flags = CLK_SET_RATE_PARENT,
2327 .ops = &clk_branch2_ops,
2332 static struct clk_branch mdss_vsync_clk = {
2335 .enable_reg = 0x2328,
2336 .enable_mask = BIT(0),
2337 .hw.init = &(struct clk_init_data){
2338 .name = "mdss_vsync_clk",
2339 .parent_hws = (const struct clk_hw*[]){
2340 &vsync_clk_src.clkr.hw
2343 .flags = CLK_SET_RATE_PARENT,
2344 .ops = &clk_branch2_ops,
2349 static struct clk_branch mmss_rbcpr_ahb_clk = {
2352 .enable_reg = 0x4088,
2353 .enable_mask = BIT(0),
2354 .hw.init = &(struct clk_init_data){
2355 .name = "mmss_rbcpr_ahb_clk",
2356 .parent_hws = (const struct clk_hw*[]){
2357 &mmss_ahb_clk_src.clkr.hw
2360 .flags = CLK_SET_RATE_PARENT,
2361 .ops = &clk_branch2_ops,
2366 static struct clk_branch mmss_rbcpr_clk = {
2369 .enable_reg = 0x4084,
2370 .enable_mask = BIT(0),
2371 .hw.init = &(struct clk_init_data){
2372 .name = "mmss_rbcpr_clk",
2373 .parent_hws = (const struct clk_hw*[]){
2374 &rbcpr_clk_src.clkr.hw
2377 .flags = CLK_SET_RATE_PARENT,
2378 .ops = &clk_branch2_ops,
2383 static struct clk_branch mmss_misc_ahb_clk = {
2386 .enable_reg = 0x502c,
2387 .enable_mask = BIT(0),
2388 .hw.init = &(struct clk_init_data){
2389 .name = "mmss_misc_ahb_clk",
2390 .parent_hws = (const struct clk_hw*[]){
2391 &mmss_ahb_clk_src.clkr.hw
2394 .flags = CLK_SET_RATE_PARENT,
2395 .ops = &clk_branch2_ops,
2400 static struct clk_branch mmss_mmssnoc_ahb_clk = {
2403 .enable_reg = 0x5024,
2404 .enable_mask = BIT(0),
2405 .hw.init = &(struct clk_init_data){
2406 .name = "mmss_mmssnoc_ahb_clk",
2407 .parent_hws = (const struct clk_hw*[]){
2408 &mmss_ahb_clk_src.clkr.hw
2411 .ops = &clk_branch2_ops,
2412 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2417 static struct clk_branch mmss_mmssnoc_bto_ahb_clk = {
2420 .enable_reg = 0x5028,
2421 .enable_mask = BIT(0),
2422 .hw.init = &(struct clk_init_data){
2423 .name = "mmss_mmssnoc_bto_ahb_clk",
2424 .parent_hws = (const struct clk_hw*[]){
2425 &mmss_ahb_clk_src.clkr.hw
2428 .ops = &clk_branch2_ops,
2429 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2434 static struct clk_branch mmss_mmssnoc_axi_clk = {
2437 .enable_reg = 0x506c,
2438 .enable_mask = BIT(0),
2439 .hw.init = &(struct clk_init_data){
2440 .name = "mmss_mmssnoc_axi_clk",
2441 .parent_hws = (const struct clk_hw*[]){
2442 &mmss_axi_clk_src.clkr.hw
2445 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2446 .ops = &clk_branch2_ops,
2451 static struct clk_branch mmss_s0_axi_clk = {
2454 .enable_reg = 0x5064,
2455 .enable_mask = BIT(0),
2456 .hw.init = &(struct clk_init_data){
2457 .name = "mmss_s0_axi_clk",
2458 .parent_hws = (const struct clk_hw*[]){
2459 &mmss_axi_clk_src.clkr.hw
2462 .ops = &clk_branch2_ops,
2463 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2468 static struct clk_branch ocmemcx_ahb_clk = {
2471 .enable_reg = 0x405c,
2472 .enable_mask = BIT(0),
2473 .hw.init = &(struct clk_init_data){
2474 .name = "ocmemcx_ahb_clk",
2475 .parent_hws = (const struct clk_hw*[]){
2476 &mmss_ahb_clk_src.clkr.hw
2479 .flags = CLK_SET_RATE_PARENT,
2480 .ops = &clk_branch2_ops,
2485 static struct clk_branch ocmemcx_ocmemnoc_clk = {
2488 .enable_reg = 0x4058,
2489 .enable_mask = BIT(0),
2490 .hw.init = &(struct clk_init_data){
2491 .name = "ocmemcx_ocmemnoc_clk",
2492 .parent_hws = (const struct clk_hw*[]){
2493 &ocmemnoc_clk_src.clkr.hw
2496 .flags = CLK_SET_RATE_PARENT,
2497 .ops = &clk_branch2_ops,
2502 static struct clk_branch oxili_ocmemgx_clk = {
2505 .enable_reg = 0x402c,
2506 .enable_mask = BIT(0),
2507 .hw.init = &(struct clk_init_data){
2508 .name = "oxili_ocmemgx_clk",
2509 .parent_hws = (const struct clk_hw*[]){
2510 &gfx3d_clk_src.clkr.hw
2513 .flags = CLK_SET_RATE_PARENT,
2514 .ops = &clk_branch2_ops,
2519 static struct clk_branch oxili_gfx3d_clk = {
2522 .enable_reg = 0x4028,
2523 .enable_mask = BIT(0),
2524 .hw.init = &(struct clk_init_data){
2525 .name = "oxili_gfx3d_clk",
2526 .parent_hws = (const struct clk_hw*[]){
2527 &gfx3d_clk_src.clkr.hw
2530 .flags = CLK_SET_RATE_PARENT,
2531 .ops = &clk_branch2_ops,
2536 static struct clk_branch oxili_rbbmtimer_clk = {
2539 .enable_reg = 0x40b0,
2540 .enable_mask = BIT(0),
2541 .hw.init = &(struct clk_init_data){
2542 .name = "oxili_rbbmtimer_clk",
2543 .parent_hws = (const struct clk_hw*[]){
2544 &rbbmtimer_clk_src.clkr.hw
2547 .flags = CLK_SET_RATE_PARENT,
2548 .ops = &clk_branch2_ops,
2553 static struct clk_branch oxilicx_ahb_clk = {
2556 .enable_reg = 0x403c,
2557 .enable_mask = BIT(0),
2558 .hw.init = &(struct clk_init_data){
2559 .name = "oxilicx_ahb_clk",
2560 .parent_hws = (const struct clk_hw*[]){
2561 &mmss_ahb_clk_src.clkr.hw
2564 .flags = CLK_SET_RATE_PARENT,
2565 .ops = &clk_branch2_ops,
2570 static struct clk_branch venus0_ahb_clk = {
2573 .enable_reg = 0x1030,
2574 .enable_mask = BIT(0),
2575 .hw.init = &(struct clk_init_data){
2576 .name = "venus0_ahb_clk",
2577 .parent_hws = (const struct clk_hw*[]){
2578 &mmss_ahb_clk_src.clkr.hw
2581 .flags = CLK_SET_RATE_PARENT,
2582 .ops = &clk_branch2_ops,
2587 static struct clk_branch venus0_axi_clk = {
2590 .enable_reg = 0x1034,
2591 .enable_mask = BIT(0),
2592 .hw.init = &(struct clk_init_data){
2593 .name = "venus0_axi_clk",
2594 .parent_hws = (const struct clk_hw*[]){
2595 &mmss_axi_clk_src.clkr.hw
2598 .flags = CLK_SET_RATE_PARENT,
2599 .ops = &clk_branch2_ops,
2604 static struct clk_branch venus0_core0_vcodec_clk = {
2607 .enable_reg = 0x1048,
2608 .enable_mask = BIT(0),
2609 .hw.init = &(struct clk_init_data){
2610 .name = "venus0_core0_vcodec_clk",
2611 .parent_hws = (const struct clk_hw*[]){
2612 &vcodec0_clk_src.clkr.hw
2615 .flags = CLK_SET_RATE_PARENT,
2616 .ops = &clk_branch2_ops,
2621 static struct clk_branch venus0_core1_vcodec_clk = {
2624 .enable_reg = 0x104c,
2625 .enable_mask = BIT(0),
2626 .hw.init = &(struct clk_init_data){
2627 .name = "venus0_core1_vcodec_clk",
2628 .parent_hws = (const struct clk_hw*[]){
2629 &vcodec0_clk_src.clkr.hw
2632 .flags = CLK_SET_RATE_PARENT,
2633 .ops = &clk_branch2_ops,
2638 static struct clk_branch venus0_ocmemnoc_clk = {
2641 .enable_reg = 0x1038,
2642 .enable_mask = BIT(0),
2643 .hw.init = &(struct clk_init_data){
2644 .name = "venus0_ocmemnoc_clk",
2645 .parent_hws = (const struct clk_hw*[]){
2646 &ocmemnoc_clk_src.clkr.hw
2649 .flags = CLK_SET_RATE_PARENT,
2650 .ops = &clk_branch2_ops,
2655 static struct clk_branch venus0_vcodec0_clk = {
2658 .enable_reg = 0x1028,
2659 .enable_mask = BIT(0),
2660 .hw.init = &(struct clk_init_data){
2661 .name = "venus0_vcodec0_clk",
2662 .parent_hws = (const struct clk_hw*[]){
2663 &vcodec0_clk_src.clkr.hw
2666 .flags = CLK_SET_RATE_PARENT,
2667 .ops = &clk_branch2_ops,
2672 static struct clk_branch vpu_ahb_clk = {
2675 .enable_reg = 0x1430,
2676 .enable_mask = BIT(0),
2677 .hw.init = &(struct clk_init_data){
2678 .name = "vpu_ahb_clk",
2679 .parent_hws = (const struct clk_hw*[]){
2680 &mmss_ahb_clk_src.clkr.hw
2683 .flags = CLK_SET_RATE_PARENT,
2684 .ops = &clk_branch2_ops,
2689 static struct clk_branch vpu_axi_clk = {
2692 .enable_reg = 0x143c,
2693 .enable_mask = BIT(0),
2694 .hw.init = &(struct clk_init_data){
2695 .name = "vpu_axi_clk",
2696 .parent_hws = (const struct clk_hw*[]){
2697 &mmss_axi_clk_src.clkr.hw
2700 .flags = CLK_SET_RATE_PARENT,
2701 .ops = &clk_branch2_ops,
2706 static struct clk_branch vpu_bus_clk = {
2709 .enable_reg = 0x1440,
2710 .enable_mask = BIT(0),
2711 .hw.init = &(struct clk_init_data){
2712 .name = "vpu_bus_clk",
2713 .parent_hws = (const struct clk_hw*[]){
2714 &vpu_bus_clk_src.clkr.hw
2717 .flags = CLK_SET_RATE_PARENT,
2718 .ops = &clk_branch2_ops,
2723 static struct clk_branch vpu_cxo_clk = {
2726 .enable_reg = 0x1434,
2727 .enable_mask = BIT(0),
2728 .hw.init = &(struct clk_init_data){
2729 .name = "vpu_cxo_clk",
2730 .parent_data = (const struct clk_parent_data[]){
2731 { .fw_name = "xo", .name = "xo_board" },
2734 .flags = CLK_SET_RATE_PARENT,
2735 .ops = &clk_branch2_ops,
2740 static struct clk_branch vpu_maple_clk = {
2743 .enable_reg = 0x142c,
2744 .enable_mask = BIT(0),
2745 .hw.init = &(struct clk_init_data){
2746 .name = "vpu_maple_clk",
2747 .parent_hws = (const struct clk_hw*[]){
2748 &maple_clk_src.clkr.hw
2751 .flags = CLK_SET_RATE_PARENT,
2752 .ops = &clk_branch2_ops,
2757 static struct clk_branch vpu_sleep_clk = {
2760 .enable_reg = 0x1438,
2761 .enable_mask = BIT(0),
2762 .hw.init = &(struct clk_init_data){
2763 .name = "vpu_sleep_clk",
2764 .parent_data = (const struct clk_parent_data[]){
2765 { .fw_name = "sleep_clk", .name = "sleep_clk" },
2768 .flags = CLK_SET_RATE_PARENT,
2769 .ops = &clk_branch2_ops,
2774 static struct clk_branch vpu_vdp_clk = {
2777 .enable_reg = 0x1428,
2778 .enable_mask = BIT(0),
2779 .hw.init = &(struct clk_init_data){
2780 .name = "vpu_vdp_clk",
2781 .parent_hws = (const struct clk_hw*[]){
2782 &vdp_clk_src.clkr.hw
2785 .flags = CLK_SET_RATE_PARENT,
2786 .ops = &clk_branch2_ops,
2791 static const struct pll_config mmpll1_config = {
2796 .vco_mask = 0x3 << 20,
2798 .pre_div_mask = 0x7 << 12,
2799 .post_div_val = 0x0,
2800 .post_div_mask = 0x3 << 8,
2801 .mn_ena_mask = BIT(24),
2802 .main_output_mask = BIT(0),
2805 static const struct pll_config mmpll3_config = {
2810 .vco_mask = 0x3 << 20,
2812 .pre_div_mask = 0x7 << 12,
2813 .post_div_val = 0x0,
2814 .post_div_mask = 0x3 << 8,
2815 .mn_ena_mask = BIT(24),
2816 .main_output_mask = BIT(0),
2817 .aux_output_mask = BIT(1),
2820 static struct gdsc venus0_gdsc = {
2825 .pwrsts = PWRSTS_OFF_ON,
2828 static struct gdsc venus0_core0_gdsc = {
2831 .name = "venus0_core0",
2833 .pwrsts = PWRSTS_OFF_ON,
2836 static struct gdsc venus0_core1_gdsc = {
2839 .name = "venus0_core1",
2841 .pwrsts = PWRSTS_OFF_ON,
2844 static struct gdsc mdss_gdsc = {
2846 .cxcs = (unsigned int []){ 0x231c, 0x2320 },
2851 .pwrsts = PWRSTS_OFF_ON,
2854 static struct gdsc camss_jpeg_gdsc = {
2857 .name = "camss_jpeg",
2859 .pwrsts = PWRSTS_OFF_ON,
2862 static struct gdsc camss_vfe_gdsc = {
2864 .cxcs = (unsigned int []){ 0x36a8, 0x36ac, 0x36b0 },
2867 .name = "camss_vfe",
2869 .pwrsts = PWRSTS_OFF_ON,
2872 static struct gdsc oxili_gdsc = {
2874 .cxcs = (unsigned int []){ 0x4028 },
2879 .pwrsts = PWRSTS_OFF_ON,
2882 static struct gdsc oxilicx_gdsc = {
2887 .pwrsts = PWRSTS_OFF_ON,
2890 static struct clk_regmap *mmcc_apq8084_clocks[] = {
2891 [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr,
2892 [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr,
2893 [MMPLL0] = &mmpll0.clkr,
2894 [MMPLL0_VOTE] = &mmpll0_vote,
2895 [MMPLL1] = &mmpll1.clkr,
2896 [MMPLL1_VOTE] = &mmpll1_vote,
2897 [MMPLL2] = &mmpll2.clkr,
2898 [MMPLL3] = &mmpll3.clkr,
2899 [MMPLL4] = &mmpll4.clkr,
2900 [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
2901 [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
2902 [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
2903 [CSI3_CLK_SRC] = &csi3_clk_src.clkr,
2904 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
2905 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
2906 [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
2907 [MDP_CLK_SRC] = &mdp_clk_src.clkr,
2908 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2909 [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
2910 [OCMEMNOC_CLK_SRC] = &ocmemnoc_clk_src.clkr,
2911 [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
2912 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
2913 [JPEG1_CLK_SRC] = &jpeg1_clk_src.clkr,
2914 [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,
2915 [EDPPIXEL_CLK_SRC] = &edppixel_clk_src.clkr,
2916 [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
2917 [VP_CLK_SRC] = &vp_clk_src.clkr,
2918 [CCI_CLK_SRC] = &cci_clk_src.clkr,
2919 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
2920 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
2921 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
2922 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
2923 [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
2924 [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
2925 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
2926 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
2927 [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
2928 [CPP_CLK_SRC] = &cpp_clk_src.clkr,
2929 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2930 [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
2931 [EDPAUX_CLK_SRC] = &edpaux_clk_src.clkr,
2932 [EDPLINK_CLK_SRC] = &edplink_clk_src.clkr,
2933 [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2934 [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
2935 [HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
2936 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2937 [MMSS_RBCPR_CLK_SRC] = &rbcpr_clk_src.clkr,
2938 [RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr,
2939 [MAPLE_CLK_SRC] = &maple_clk_src.clkr,
2940 [VDP_CLK_SRC] = &vdp_clk_src.clkr,
2941 [VPU_BUS_CLK_SRC] = &vpu_bus_clk_src.clkr,
2942 [MMSS_CXO_CLK] = &mmss_cxo_clk.clkr,
2943 [MMSS_SLEEPCLK_CLK] = &mmss_sleepclk_clk.clkr,
2944 [AVSYNC_AHB_CLK] = &avsync_ahb_clk.clkr,
2945 [AVSYNC_EDPPIXEL_CLK] = &avsync_edppixel_clk.clkr,
2946 [AVSYNC_EXTPCLK_CLK] = &avsync_extpclk_clk.clkr,
2947 [AVSYNC_PCLK0_CLK] = &avsync_pclk0_clk.clkr,
2948 [AVSYNC_PCLK1_CLK] = &avsync_pclk1_clk.clkr,
2949 [AVSYNC_VP_CLK] = &avsync_vp_clk.clkr,
2950 [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr,
2951 [CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr,
2952 [CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr,
2953 [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
2954 [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
2955 [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
2956 [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
2957 [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
2958 [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
2959 [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
2960 [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
2961 [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
2962 [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
2963 [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
2964 [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
2965 [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,
2966 [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
2967 [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
2968 [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
2969 [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
2970 [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,
2971 [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
2972 [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
2973 [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
2974 [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
2975 [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
2976 [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
2977 [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
2978 [CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr,
2979 [CAMSS_JPEG_JPEG1_CLK] = &camss_jpeg_jpeg1_clk.clkr,
2980 [CAMSS_JPEG_JPEG2_CLK] = &camss_jpeg_jpeg2_clk.clkr,
2981 [CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr,
2982 [CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr,
2983 [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
2984 [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
2985 [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
2986 [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
2987 [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
2988 [CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr,
2989 [CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr,
2990 [CAMSS_PHY2_CSI2PHYTIMER_CLK] = &camss_phy2_csi2phytimer_clk.clkr,
2991 [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
2992 [CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr,
2993 [CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr,
2994 [CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr,
2995 [CAMSS_VFE_VFE1_CLK] = &camss_vfe_vfe1_clk.clkr,
2996 [CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr,
2997 [CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr,
2998 [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
2999 [MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
3000 [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
3001 [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
3002 [MDSS_EDPAUX_CLK] = &mdss_edpaux_clk.clkr,
3003 [MDSS_EDPLINK_CLK] = &mdss_edplink_clk.clkr,
3004 [MDSS_EDPPIXEL_CLK] = &mdss_edppixel_clk.clkr,
3005 [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
3006 [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
3007 [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
3008 [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,
3009 [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
3010 [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
3011 [MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr,
3012 [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
3013 [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
3014 [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
3015 [MMSS_RBCPR_AHB_CLK] = &mmss_rbcpr_ahb_clk.clkr,
3016 [MMSS_RBCPR_CLK] = &mmss_rbcpr_clk.clkr,
3017 [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
3018 [MMSS_MMSSNOC_AHB_CLK] = &mmss_mmssnoc_ahb_clk.clkr,
3019 [MMSS_MMSSNOC_BTO_AHB_CLK] = &mmss_mmssnoc_bto_ahb_clk.clkr,
3020 [MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr,
3021 [MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr,
3022 [OCMEMCX_AHB_CLK] = &ocmemcx_ahb_clk.clkr,
3023 [OCMEMCX_OCMEMNOC_CLK] = &ocmemcx_ocmemnoc_clk.clkr,
3024 [OXILI_OCMEMGX_CLK] = &oxili_ocmemgx_clk.clkr,
3025 [OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr,
3026 [OXILI_RBBMTIMER_CLK] = &oxili_rbbmtimer_clk.clkr,
3027 [OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr,
3028 [VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr,
3029 [VENUS0_AXI_CLK] = &venus0_axi_clk.clkr,
3030 [VENUS0_CORE0_VCODEC_CLK] = &venus0_core0_vcodec_clk.clkr,
3031 [VENUS0_CORE1_VCODEC_CLK] = &venus0_core1_vcodec_clk.clkr,
3032 [VENUS0_OCMEMNOC_CLK] = &venus0_ocmemnoc_clk.clkr,
3033 [VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr,
3034 [VPU_AHB_CLK] = &vpu_ahb_clk.clkr,
3035 [VPU_AXI_CLK] = &vpu_axi_clk.clkr,
3036 [VPU_BUS_CLK] = &vpu_bus_clk.clkr,
3037 [VPU_CXO_CLK] = &vpu_cxo_clk.clkr,
3038 [VPU_MAPLE_CLK] = &vpu_maple_clk.clkr,
3039 [VPU_SLEEP_CLK] = &vpu_sleep_clk.clkr,
3040 [VPU_VDP_CLK] = &vpu_vdp_clk.clkr,
3043 static const struct qcom_reset_map mmcc_apq8084_resets[] = {
3044 [MMSS_SPDM_RESET] = { 0x0200 },
3045 [MMSS_SPDM_RM_RESET] = { 0x0300 },
3046 [VENUS0_RESET] = { 0x1020 },
3047 [VPU_RESET] = { 0x1400 },
3048 [MDSS_RESET] = { 0x2300 },
3049 [AVSYNC_RESET] = { 0x2400 },
3050 [CAMSS_PHY0_RESET] = { 0x3020 },
3051 [CAMSS_PHY1_RESET] = { 0x3050 },
3052 [CAMSS_PHY2_RESET] = { 0x3080 },
3053 [CAMSS_CSI0_RESET] = { 0x30b0 },
3054 [CAMSS_CSI0PHY_RESET] = { 0x30c0 },
3055 [CAMSS_CSI0RDI_RESET] = { 0x30d0 },
3056 [CAMSS_CSI0PIX_RESET] = { 0x30e0 },
3057 [CAMSS_CSI1_RESET] = { 0x3120 },
3058 [CAMSS_CSI1PHY_RESET] = { 0x3130 },
3059 [CAMSS_CSI1RDI_RESET] = { 0x3140 },
3060 [CAMSS_CSI1PIX_RESET] = { 0x3150 },
3061 [CAMSS_CSI2_RESET] = { 0x3180 },
3062 [CAMSS_CSI2PHY_RESET] = { 0x3190 },
3063 [CAMSS_CSI2RDI_RESET] = { 0x31a0 },
3064 [CAMSS_CSI2PIX_RESET] = { 0x31b0 },
3065 [CAMSS_CSI3_RESET] = { 0x31e0 },
3066 [CAMSS_CSI3PHY_RESET] = { 0x31f0 },
3067 [CAMSS_CSI3RDI_RESET] = { 0x3200 },
3068 [CAMSS_CSI3PIX_RESET] = { 0x3210 },
3069 [CAMSS_ISPIF_RESET] = { 0x3220 },
3070 [CAMSS_CCI_RESET] = { 0x3340 },
3071 [CAMSS_MCLK0_RESET] = { 0x3380 },
3072 [CAMSS_MCLK1_RESET] = { 0x33b0 },
3073 [CAMSS_MCLK2_RESET] = { 0x33e0 },
3074 [CAMSS_MCLK3_RESET] = { 0x3410 },
3075 [CAMSS_GP0_RESET] = { 0x3440 },
3076 [CAMSS_GP1_RESET] = { 0x3470 },
3077 [CAMSS_TOP_RESET] = { 0x3480 },
3078 [CAMSS_AHB_RESET] = { 0x3488 },
3079 [CAMSS_MICRO_RESET] = { 0x3490 },
3080 [CAMSS_JPEG_RESET] = { 0x35a0 },
3081 [CAMSS_VFE_RESET] = { 0x36a0 },
3082 [CAMSS_CSI_VFE0_RESET] = { 0x3700 },
3083 [CAMSS_CSI_VFE1_RESET] = { 0x3710 },
3084 [OXILI_RESET] = { 0x4020 },
3085 [OXILICX_RESET] = { 0x4030 },
3086 [OCMEMCX_RESET] = { 0x4050 },
3087 [MMSS_RBCRP_RESET] = { 0x4080 },
3088 [MMSSNOCAHB_RESET] = { 0x5020 },
3089 [MMSSNOCAXI_RESET] = { 0x5060 },
3092 static struct gdsc *mmcc_apq8084_gdscs[] = {
3093 [VENUS0_GDSC] = &venus0_gdsc,
3094 [VENUS0_CORE0_GDSC] = &venus0_core0_gdsc,
3095 [VENUS0_CORE1_GDSC] = &venus0_core1_gdsc,
3096 [MDSS_GDSC] = &mdss_gdsc,
3097 [CAMSS_JPEG_GDSC] = &camss_jpeg_gdsc,
3098 [CAMSS_VFE_GDSC] = &camss_vfe_gdsc,
3099 [OXILI_GDSC] = &oxili_gdsc,
3100 [OXILICX_GDSC] = &oxilicx_gdsc,
3103 static const struct regmap_config mmcc_apq8084_regmap_config = {
3107 .max_register = 0x5104,
3111 static const struct qcom_cc_desc mmcc_apq8084_desc = {
3112 .config = &mmcc_apq8084_regmap_config,
3113 .clks = mmcc_apq8084_clocks,
3114 .num_clks = ARRAY_SIZE(mmcc_apq8084_clocks),
3115 .resets = mmcc_apq8084_resets,
3116 .num_resets = ARRAY_SIZE(mmcc_apq8084_resets),
3117 .gdscs = mmcc_apq8084_gdscs,
3118 .num_gdscs = ARRAY_SIZE(mmcc_apq8084_gdscs),
3121 static const struct of_device_id mmcc_apq8084_match_table[] = {
3122 { .compatible = "qcom,mmcc-apq8084" },
3125 MODULE_DEVICE_TABLE(of, mmcc_apq8084_match_table);
3127 static int mmcc_apq8084_probe(struct platform_device *pdev)
3130 struct regmap *regmap;
3132 ret = qcom_cc_probe(pdev, &mmcc_apq8084_desc);
3136 regmap = dev_get_regmap(&pdev->dev, NULL);
3137 clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true);
3138 clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false);
3143 static struct platform_driver mmcc_apq8084_driver = {
3144 .probe = mmcc_apq8084_probe,
3146 .name = "mmcc-apq8084",
3147 .of_match_table = mmcc_apq8084_match_table,
3150 module_platform_driver(mmcc_apq8084_driver);
3152 MODULE_DESCRIPTION("QCOM MMCC APQ8084 Driver");
3153 MODULE_LICENSE("GPL v2");
3154 MODULE_ALIAS("platform:mmcc-apq8084");