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 const 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),
354 static struct clk_rcg2 mmss_axi_clk_src = {
357 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
358 .freq_tbl = ftbl_mmss_axi_clk,
359 .clkr.hw.init = &(struct clk_init_data){
360 .name = "mmss_axi_clk_src",
361 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
362 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
363 .ops = &clk_rcg2_ops,
367 static const struct freq_tbl ftbl_ocmemnoc_clk[] = {
368 F(19200000, P_XO, 1, 0, 0),
369 F(37500000, P_GPLL0, 16, 0, 0),
370 F(50000000, P_GPLL0, 12, 0, 0),
371 F(75000000, P_GPLL0, 8, 0, 0),
372 F(109090000, P_GPLL0, 5.5, 0, 0),
373 F(150000000, P_GPLL0, 4, 0, 0),
374 F(228570000, P_MMPLL0, 3.5, 0, 0),
375 F(320000000, P_MMPLL0, 2.5, 0, 0),
379 static struct clk_rcg2 ocmemnoc_clk_src = {
382 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
383 .freq_tbl = ftbl_ocmemnoc_clk,
384 .clkr.hw.init = &(struct clk_init_data){
385 .name = "ocmemnoc_clk_src",
386 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
387 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
388 .ops = &clk_rcg2_ops,
392 static const struct freq_tbl ftbl_camss_csi0_3_clk[] = {
393 F(100000000, P_GPLL0, 6, 0, 0),
394 F(200000000, P_MMPLL0, 4, 0, 0),
398 static struct clk_rcg2 csi0_clk_src = {
401 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
402 .freq_tbl = ftbl_camss_csi0_3_clk,
403 .clkr.hw.init = &(struct clk_init_data){
404 .name = "csi0_clk_src",
405 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
406 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
407 .ops = &clk_rcg2_ops,
411 static struct clk_rcg2 csi1_clk_src = {
414 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
415 .freq_tbl = ftbl_camss_csi0_3_clk,
416 .clkr.hw.init = &(struct clk_init_data){
417 .name = "csi1_clk_src",
418 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
419 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
420 .ops = &clk_rcg2_ops,
424 static struct clk_rcg2 csi2_clk_src = {
427 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
428 .freq_tbl = ftbl_camss_csi0_3_clk,
429 .clkr.hw.init = &(struct clk_init_data){
430 .name = "csi2_clk_src",
431 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
432 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
433 .ops = &clk_rcg2_ops,
437 static struct clk_rcg2 csi3_clk_src = {
440 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
441 .freq_tbl = ftbl_camss_csi0_3_clk,
442 .clkr.hw.init = &(struct clk_init_data){
443 .name = "csi3_clk_src",
444 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
445 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
446 .ops = &clk_rcg2_ops,
450 static const struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
451 F(37500000, P_GPLL0, 16, 0, 0),
452 F(50000000, P_GPLL0, 12, 0, 0),
453 F(60000000, P_GPLL0, 10, 0, 0),
454 F(80000000, P_GPLL0, 7.5, 0, 0),
455 F(100000000, P_GPLL0, 6, 0, 0),
456 F(109090000, P_GPLL0, 5.5, 0, 0),
457 F(133330000, P_GPLL0, 4.5, 0, 0),
458 F(200000000, P_GPLL0, 3, 0, 0),
459 F(228570000, P_MMPLL0, 3.5, 0, 0),
460 F(266670000, P_MMPLL0, 3, 0, 0),
461 F(320000000, P_MMPLL0, 2.5, 0, 0),
462 F(465000000, P_MMPLL4, 2, 0, 0),
463 F(600000000, P_GPLL0, 1, 0, 0),
467 static struct clk_rcg2 vfe0_clk_src = {
470 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
471 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
472 .clkr.hw.init = &(struct clk_init_data){
473 .name = "vfe0_clk_src",
474 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
475 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
476 .ops = &clk_rcg2_ops,
480 static struct clk_rcg2 vfe1_clk_src = {
483 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
484 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
485 .clkr.hw.init = &(struct clk_init_data){
486 .name = "vfe1_clk_src",
487 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
488 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
489 .ops = &clk_rcg2_ops,
493 static const struct freq_tbl ftbl_mdss_mdp_clk[] = {
494 F(37500000, P_GPLL0, 16, 0, 0),
495 F(60000000, P_GPLL0, 10, 0, 0),
496 F(75000000, P_GPLL0, 8, 0, 0),
497 F(85710000, P_GPLL0, 7, 0, 0),
498 F(100000000, P_GPLL0, 6, 0, 0),
499 F(150000000, P_GPLL0, 4, 0, 0),
500 F(160000000, P_MMPLL0, 5, 0, 0),
501 F(200000000, P_MMPLL0, 4, 0, 0),
502 F(228570000, P_MMPLL0, 3.5, 0, 0),
503 F(300000000, P_GPLL0, 2, 0, 0),
504 F(320000000, P_MMPLL0, 2.5, 0, 0),
508 static struct clk_rcg2 mdp_clk_src = {
511 .parent_map = mmcc_xo_mmpll0_dsi_hdmi_gpll0_map,
512 .freq_tbl = ftbl_mdss_mdp_clk,
513 .clkr.hw.init = &(struct clk_init_data){
514 .name = "mdp_clk_src",
515 .parent_data = mmcc_xo_mmpll0_dsi_hdmi_gpll0,
516 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_dsi_hdmi_gpll0),
517 .ops = &clk_rcg2_ops,
521 static struct clk_rcg2 gfx3d_clk_src = {
524 .parent_map = mmcc_xo_mmpll0_1_2_gpll0_map,
525 .clkr.hw.init = &(struct clk_init_data){
526 .name = "gfx3d_clk_src",
527 .parent_data = mmcc_xo_mmpll0_1_2_gpll0,
528 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_2_gpll0),
529 .ops = &clk_rcg2_ops,
533 static const struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
534 F(75000000, P_GPLL0, 8, 0, 0),
535 F(133330000, P_GPLL0, 4.5, 0, 0),
536 F(200000000, P_GPLL0, 3, 0, 0),
537 F(228570000, P_MMPLL0, 3.5, 0, 0),
538 F(266670000, P_MMPLL0, 3, 0, 0),
539 F(320000000, P_MMPLL0, 2.5, 0, 0),
543 static struct clk_rcg2 jpeg0_clk_src = {
546 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
547 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
548 .clkr.hw.init = &(struct clk_init_data){
549 .name = "jpeg0_clk_src",
550 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
551 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
552 .ops = &clk_rcg2_ops,
556 static struct clk_rcg2 jpeg1_clk_src = {
559 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
560 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
561 .clkr.hw.init = &(struct clk_init_data){
562 .name = "jpeg1_clk_src",
563 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
564 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
565 .ops = &clk_rcg2_ops,
569 static struct clk_rcg2 jpeg2_clk_src = {
572 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
573 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
574 .clkr.hw.init = &(struct clk_init_data){
575 .name = "jpeg2_clk_src",
576 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
577 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
578 .ops = &clk_rcg2_ops,
582 static struct clk_rcg2 pclk0_clk_src = {
586 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
587 .clkr.hw.init = &(struct clk_init_data){
588 .name = "pclk0_clk_src",
589 .parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,
590 .num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),
591 .ops = &clk_pixel_ops,
592 .flags = CLK_SET_RATE_PARENT,
596 static struct clk_rcg2 pclk1_clk_src = {
600 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
601 .clkr.hw.init = &(struct clk_init_data){
602 .name = "pclk1_clk_src",
603 .parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,
604 .num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),
605 .ops = &clk_pixel_ops,
606 .flags = CLK_SET_RATE_PARENT,
610 static const struct freq_tbl ftbl_venus0_vcodec0_clk[] = {
611 F(50000000, P_GPLL0, 12, 0, 0),
612 F(100000000, P_GPLL0, 6, 0, 0),
613 F(133330000, P_GPLL0, 4.5, 0, 0),
614 F(200000000, P_MMPLL0, 4, 0, 0),
615 F(266670000, P_MMPLL0, 3, 0, 0),
616 F(465000000, P_MMPLL3, 2, 0, 0),
620 static struct clk_rcg2 vcodec0_clk_src = {
624 .parent_map = mmcc_xo_mmpll0_1_3_gpll0_map,
625 .freq_tbl = ftbl_venus0_vcodec0_clk,
626 .clkr.hw.init = &(struct clk_init_data){
627 .name = "vcodec0_clk_src",
628 .parent_data = mmcc_xo_mmpll0_1_3_gpll0,
629 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_3_gpll0),
630 .ops = &clk_rcg2_ops,
634 static const struct freq_tbl ftbl_avsync_vp_clk[] = {
635 F(150000000, P_GPLL0, 4, 0, 0),
636 F(320000000, P_MMPLL0, 2.5, 0, 0),
640 static struct clk_rcg2 vp_clk_src = {
643 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
644 .freq_tbl = ftbl_avsync_vp_clk,
645 .clkr.hw.init = &(struct clk_init_data){
646 .name = "vp_clk_src",
647 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
648 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
649 .ops = &clk_rcg2_ops,
653 static const struct freq_tbl ftbl_camss_cci_cci_clk[] = {
654 F(19200000, P_XO, 1, 0, 0),
658 static struct clk_rcg2 cci_clk_src = {
662 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
663 .freq_tbl = ftbl_camss_cci_cci_clk,
664 .clkr.hw.init = &(struct clk_init_data){
665 .name = "cci_clk_src",
666 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0,
667 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0),
668 .ops = &clk_rcg2_ops,
672 static const struct freq_tbl ftbl_camss_gp0_1_clk[] = {
673 F(10000, P_XO, 16, 1, 120),
674 F(24000, P_XO, 16, 1, 50),
675 F(6000000, P_GPLL0, 10, 1, 10),
676 F(12000000, P_GPLL0, 10, 1, 5),
677 F(13000000, P_GPLL0, 4, 13, 150),
678 F(24000000, P_GPLL0, 5, 1, 5),
682 static struct clk_rcg2 camss_gp0_clk_src = {
686 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map,
687 .freq_tbl = ftbl_camss_gp0_1_clk,
688 .clkr.hw.init = &(struct clk_init_data){
689 .name = "camss_gp0_clk_src",
690 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0_sleep,
691 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0_sleep),
692 .ops = &clk_rcg2_ops,
696 static struct clk_rcg2 camss_gp1_clk_src = {
700 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map,
701 .freq_tbl = ftbl_camss_gp0_1_clk,
702 .clkr.hw.init = &(struct clk_init_data){
703 .name = "camss_gp1_clk_src",
704 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0_sleep,
705 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0_sleep),
706 .ops = &clk_rcg2_ops,
710 static const struct freq_tbl ftbl_camss_mclk0_3_clk[] = {
711 F(4800000, P_XO, 4, 0, 0),
712 F(6000000, P_GPLL0, 10, 1, 10),
713 F(8000000, P_GPLL0, 15, 1, 5),
714 F(9600000, P_XO, 2, 0, 0),
715 F(16000000, P_MMPLL0, 10, 1, 5),
716 F(19200000, P_XO, 1, 0, 0),
717 F(24000000, P_GPLL0, 5, 1, 5),
718 F(32000000, P_MMPLL0, 5, 1, 5),
719 F(48000000, P_GPLL0, 12.5, 0, 0),
720 F(64000000, P_MMPLL0, 12.5, 0, 0),
724 static struct clk_rcg2 mclk0_clk_src = {
728 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
729 .freq_tbl = ftbl_camss_mclk0_3_clk,
730 .clkr.hw.init = &(struct clk_init_data){
731 .name = "mclk0_clk_src",
732 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0,
733 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0),
734 .ops = &clk_rcg2_ops,
738 static struct clk_rcg2 mclk1_clk_src = {
742 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
743 .freq_tbl = ftbl_camss_mclk0_3_clk,
744 .clkr.hw.init = &(struct clk_init_data){
745 .name = "mclk1_clk_src",
746 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0,
747 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0),
748 .ops = &clk_rcg2_ops,
752 static struct clk_rcg2 mclk2_clk_src = {
756 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
757 .freq_tbl = ftbl_camss_mclk0_3_clk,
758 .clkr.hw.init = &(struct clk_init_data){
759 .name = "mclk2_clk_src",
760 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0,
761 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0),
762 .ops = &clk_rcg2_ops,
766 static struct clk_rcg2 mclk3_clk_src = {
770 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
771 .freq_tbl = ftbl_camss_mclk0_3_clk,
772 .clkr.hw.init = &(struct clk_init_data){
773 .name = "mclk3_clk_src",
774 .parent_data = mmcc_xo_mmpll0_1_4_gpll1_0,
775 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll1_0),
776 .ops = &clk_rcg2_ops,
780 static const struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
781 F(100000000, P_GPLL0, 6, 0, 0),
782 F(200000000, P_MMPLL0, 4, 0, 0),
786 static struct clk_rcg2 csi0phytimer_clk_src = {
789 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
790 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
791 .clkr.hw.init = &(struct clk_init_data){
792 .name = "csi0phytimer_clk_src",
793 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
794 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
795 .ops = &clk_rcg2_ops,
799 static struct clk_rcg2 csi1phytimer_clk_src = {
802 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
803 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
804 .clkr.hw.init = &(struct clk_init_data){
805 .name = "csi1phytimer_clk_src",
806 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
807 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
808 .ops = &clk_rcg2_ops,
812 static struct clk_rcg2 csi2phytimer_clk_src = {
815 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
816 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
817 .clkr.hw.init = &(struct clk_init_data){
818 .name = "csi2phytimer_clk_src",
819 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
820 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
821 .ops = &clk_rcg2_ops,
825 static const struct freq_tbl ftbl_camss_vfe_cpp_clk[] = {
826 F(133330000, P_GPLL0, 4.5, 0, 0),
827 F(266670000, P_MMPLL0, 3, 0, 0),
828 F(320000000, P_MMPLL0, 2.5, 0, 0),
829 F(372000000, P_MMPLL4, 2.5, 0, 0),
830 F(465000000, P_MMPLL4, 2, 0, 0),
831 F(600000000, P_GPLL0, 1, 0, 0),
835 static struct clk_rcg2 cpp_clk_src = {
838 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
839 .freq_tbl = ftbl_camss_vfe_cpp_clk,
840 .clkr.hw.init = &(struct clk_init_data){
841 .name = "cpp_clk_src",
842 .parent_data = mmcc_xo_mmpll0_1_4_gpll0,
843 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_1_4_gpll0),
844 .ops = &clk_rcg2_ops,
848 static struct clk_rcg2 byte0_clk_src = {
851 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
852 .clkr.hw.init = &(struct clk_init_data){
853 .name = "byte0_clk_src",
854 .parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,
855 .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),
856 .ops = &clk_byte2_ops,
857 .flags = CLK_SET_RATE_PARENT,
861 static struct clk_rcg2 byte1_clk_src = {
864 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
865 .clkr.hw.init = &(struct clk_init_data){
866 .name = "byte1_clk_src",
867 .parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,
868 .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),
869 .ops = &clk_byte2_ops,
870 .flags = CLK_SET_RATE_PARENT,
874 static const struct freq_tbl ftbl_mdss_edpaux_clk[] = {
875 F(19200000, P_XO, 1, 0, 0),
879 static struct clk_rcg2 edpaux_clk_src = {
882 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
883 .freq_tbl = ftbl_mdss_edpaux_clk,
884 .clkr.hw.init = &(struct clk_init_data){
885 .name = "edpaux_clk_src",
886 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
887 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
888 .ops = &clk_rcg2_ops,
892 static const struct freq_tbl ftbl_mdss_edplink_clk[] = {
893 F(135000000, P_EDPLINK, 2, 0, 0),
894 F(270000000, P_EDPLINK, 11, 0, 0),
898 static struct clk_rcg2 edplink_clk_src = {
901 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
902 .freq_tbl = ftbl_mdss_edplink_clk,
903 .clkr.hw.init = &(struct clk_init_data){
904 .name = "edplink_clk_src",
905 .parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,
906 .num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),
907 .ops = &clk_rcg2_ops,
908 .flags = CLK_SET_RATE_PARENT,
912 static const struct freq_tbl edp_pixel_freq_tbl[] = {
917 static struct clk_rcg2 edppixel_clk_src = {
921 .parent_map = mmcc_xo_dsi_hdmi_edp_map,
922 .freq_tbl = edp_pixel_freq_tbl,
923 .clkr.hw.init = &(struct clk_init_data){
924 .name = "edppixel_clk_src",
925 .parent_data = mmcc_xo_dsi_hdmi_edp,
926 .num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp),
927 .ops = &clk_edp_pixel_ops,
931 static const struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
932 F(19200000, P_XO, 1, 0, 0),
936 static struct clk_rcg2 esc0_clk_src = {
939 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
940 .freq_tbl = ftbl_mdss_esc0_1_clk,
941 .clkr.hw.init = &(struct clk_init_data){
942 .name = "esc0_clk_src",
943 .parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,
944 .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),
945 .ops = &clk_rcg2_ops,
949 static struct clk_rcg2 esc1_clk_src = {
952 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
953 .freq_tbl = ftbl_mdss_esc0_1_clk,
954 .clkr.hw.init = &(struct clk_init_data){
955 .name = "esc1_clk_src",
956 .parent_data = mmcc_xo_dsibyte_hdmi_edp_gpll0,
957 .num_parents = ARRAY_SIZE(mmcc_xo_dsibyte_hdmi_edp_gpll0),
958 .ops = &clk_rcg2_ops,
962 static const struct freq_tbl extpclk_freq_tbl[] = {
963 { .src = P_HDMIPLL },
967 static struct clk_rcg2 extpclk_clk_src = {
970 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
971 .freq_tbl = extpclk_freq_tbl,
972 .clkr.hw.init = &(struct clk_init_data){
973 .name = "extpclk_clk_src",
974 .parent_data = mmcc_xo_dsi_hdmi_edp_gpll0,
975 .num_parents = ARRAY_SIZE(mmcc_xo_dsi_hdmi_edp_gpll0),
976 .ops = &clk_byte_ops,
977 .flags = CLK_SET_RATE_PARENT,
981 static const struct freq_tbl ftbl_mdss_hdmi_clk[] = {
982 F(19200000, P_XO, 1, 0, 0),
986 static struct clk_rcg2 hdmi_clk_src = {
989 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
990 .freq_tbl = ftbl_mdss_hdmi_clk,
991 .clkr.hw.init = &(struct clk_init_data){
992 .name = "hdmi_clk_src",
993 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
994 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
995 .ops = &clk_rcg2_ops,
999 static const struct freq_tbl ftbl_mdss_vsync_clk[] = {
1000 F(19200000, P_XO, 1, 0, 0),
1004 static struct clk_rcg2 vsync_clk_src = {
1007 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1008 .freq_tbl = ftbl_mdss_vsync_clk,
1009 .clkr.hw.init = &(struct clk_init_data){
1010 .name = "vsync_clk_src",
1011 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
1012 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
1013 .ops = &clk_rcg2_ops,
1017 static const struct freq_tbl ftbl_mmss_rbcpr_clk[] = {
1018 F(50000000, P_GPLL0, 12, 0, 0),
1022 static struct clk_rcg2 rbcpr_clk_src = {
1025 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1026 .freq_tbl = ftbl_mmss_rbcpr_clk,
1027 .clkr.hw.init = &(struct clk_init_data){
1028 .name = "rbcpr_clk_src",
1029 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
1030 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
1031 .ops = &clk_rcg2_ops,
1035 static const struct freq_tbl ftbl_oxili_rbbmtimer_clk[] = {
1036 F(19200000, P_XO, 1, 0, 0),
1040 static struct clk_rcg2 rbbmtimer_clk_src = {
1043 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1044 .freq_tbl = ftbl_oxili_rbbmtimer_clk,
1045 .clkr.hw.init = &(struct clk_init_data){
1046 .name = "rbbmtimer_clk_src",
1047 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
1048 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
1049 .ops = &clk_rcg2_ops,
1053 static const struct freq_tbl ftbl_vpu_maple_clk[] = {
1054 F(50000000, P_GPLL0, 12, 0, 0),
1055 F(100000000, P_GPLL0, 6, 0, 0),
1056 F(133330000, P_GPLL0, 4.5, 0, 0),
1057 F(200000000, P_MMPLL0, 4, 0, 0),
1058 F(266670000, P_MMPLL0, 3, 0, 0),
1059 F(465000000, P_MMPLL3, 2, 0, 0),
1063 static struct clk_rcg2 maple_clk_src = {
1066 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1067 .freq_tbl = ftbl_vpu_maple_clk,
1068 .clkr.hw.init = &(struct clk_init_data){
1069 .name = "maple_clk_src",
1070 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
1071 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
1072 .ops = &clk_rcg2_ops,
1076 static const struct freq_tbl ftbl_vpu_vdp_clk[] = {
1077 F(50000000, P_GPLL0, 12, 0, 0),
1078 F(100000000, P_GPLL0, 6, 0, 0),
1079 F(200000000, P_MMPLL0, 4, 0, 0),
1080 F(320000000, P_MMPLL0, 2.5, 0, 0),
1081 F(400000000, P_MMPLL0, 2, 0, 0),
1085 static struct clk_rcg2 vdp_clk_src = {
1088 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1089 .freq_tbl = ftbl_vpu_vdp_clk,
1090 .clkr.hw.init = &(struct clk_init_data){
1091 .name = "vdp_clk_src",
1092 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
1093 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
1094 .ops = &clk_rcg2_ops,
1098 static const struct freq_tbl ftbl_vpu_bus_clk[] = {
1099 F(40000000, P_GPLL0, 15, 0, 0),
1100 F(80000000, P_MMPLL0, 10, 0, 0),
1104 static struct clk_rcg2 vpu_bus_clk_src = {
1107 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1108 .freq_tbl = ftbl_vpu_bus_clk,
1109 .clkr.hw.init = &(struct clk_init_data){
1110 .name = "vpu_bus_clk_src",
1111 .parent_data = mmcc_xo_mmpll0_mmpll1_gpll0,
1112 .num_parents = ARRAY_SIZE(mmcc_xo_mmpll0_mmpll1_gpll0),
1113 .ops = &clk_rcg2_ops,
1117 static struct clk_branch mmss_cxo_clk = {
1120 .enable_reg = 0x5104,
1121 .enable_mask = BIT(0),
1122 .hw.init = &(struct clk_init_data){
1123 .name = "mmss_cxo_clk",
1124 .parent_data = (const struct clk_parent_data[]){
1125 { .fw_name = "xo", .name = "xo_board" },
1128 .flags = CLK_SET_RATE_PARENT,
1129 .ops = &clk_branch2_ops,
1134 static struct clk_branch mmss_sleepclk_clk = {
1137 .enable_reg = 0x5100,
1138 .enable_mask = BIT(0),
1139 .hw.init = &(struct clk_init_data){
1140 .name = "mmss_sleepclk_clk",
1141 .parent_data = (const struct clk_parent_data[]){
1142 { .fw_name = "sleep_clk", .name = "sleep_clk" },
1145 .flags = CLK_SET_RATE_PARENT,
1146 .ops = &clk_branch2_ops,
1151 static struct clk_branch avsync_ahb_clk = {
1154 .enable_reg = 0x2414,
1155 .enable_mask = BIT(0),
1156 .hw.init = &(struct clk_init_data){
1157 .name = "avsync_ahb_clk",
1158 .parent_hws = (const struct clk_hw*[]){
1159 &mmss_ahb_clk_src.clkr.hw
1162 .flags = CLK_SET_RATE_PARENT,
1163 .ops = &clk_branch2_ops,
1168 static struct clk_branch avsync_edppixel_clk = {
1171 .enable_reg = 0x2418,
1172 .enable_mask = BIT(0),
1173 .hw.init = &(struct clk_init_data){
1174 .name = "avsync_edppixel_clk",
1175 .parent_hws = (const struct clk_hw*[]){
1176 &edppixel_clk_src.clkr.hw
1179 .flags = CLK_SET_RATE_PARENT,
1180 .ops = &clk_branch2_ops,
1185 static struct clk_branch avsync_extpclk_clk = {
1188 .enable_reg = 0x2410,
1189 .enable_mask = BIT(0),
1190 .hw.init = &(struct clk_init_data){
1191 .name = "avsync_extpclk_clk",
1192 .parent_hws = (const struct clk_hw*[]){
1193 &extpclk_clk_src.clkr.hw
1196 .flags = CLK_SET_RATE_PARENT,
1197 .ops = &clk_branch2_ops,
1202 static struct clk_branch avsync_pclk0_clk = {
1205 .enable_reg = 0x241c,
1206 .enable_mask = BIT(0),
1207 .hw.init = &(struct clk_init_data){
1208 .name = "avsync_pclk0_clk",
1209 .parent_hws = (const struct clk_hw*[]){
1210 &pclk0_clk_src.clkr.hw
1213 .flags = CLK_SET_RATE_PARENT,
1214 .ops = &clk_branch2_ops,
1219 static struct clk_branch avsync_pclk1_clk = {
1222 .enable_reg = 0x2420,
1223 .enable_mask = BIT(0),
1224 .hw.init = &(struct clk_init_data){
1225 .name = "avsync_pclk1_clk",
1226 .parent_hws = (const struct clk_hw*[]){
1227 &pclk1_clk_src.clkr.hw
1230 .flags = CLK_SET_RATE_PARENT,
1231 .ops = &clk_branch2_ops,
1236 static struct clk_branch avsync_vp_clk = {
1239 .enable_reg = 0x2404,
1240 .enable_mask = BIT(0),
1241 .hw.init = &(struct clk_init_data){
1242 .name = "avsync_vp_clk",
1243 .parent_hws = (const struct clk_hw*[]){
1247 .flags = CLK_SET_RATE_PARENT,
1248 .ops = &clk_branch2_ops,
1253 static struct clk_branch camss_ahb_clk = {
1256 .enable_reg = 0x348c,
1257 .enable_mask = BIT(0),
1258 .hw.init = &(struct clk_init_data){
1259 .name = "camss_ahb_clk",
1260 .parent_hws = (const struct clk_hw*[]){
1261 &mmss_ahb_clk_src.clkr.hw
1264 .flags = CLK_SET_RATE_PARENT,
1265 .ops = &clk_branch2_ops,
1270 static struct clk_branch camss_cci_cci_ahb_clk = {
1273 .enable_reg = 0x3348,
1274 .enable_mask = BIT(0),
1275 .hw.init = &(struct clk_init_data){
1276 .name = "camss_cci_cci_ahb_clk",
1277 .parent_hws = (const struct clk_hw*[]){
1278 &mmss_ahb_clk_src.clkr.hw
1281 .ops = &clk_branch2_ops,
1286 static struct clk_branch camss_cci_cci_clk = {
1289 .enable_reg = 0x3344,
1290 .enable_mask = BIT(0),
1291 .hw.init = &(struct clk_init_data){
1292 .name = "camss_cci_cci_clk",
1293 .parent_hws = (const struct clk_hw*[]){
1294 &cci_clk_src.clkr.hw
1297 .flags = CLK_SET_RATE_PARENT,
1298 .ops = &clk_branch2_ops,
1303 static struct clk_branch camss_csi0_ahb_clk = {
1306 .enable_reg = 0x30bc,
1307 .enable_mask = BIT(0),
1308 .hw.init = &(struct clk_init_data){
1309 .name = "camss_csi0_ahb_clk",
1310 .parent_hws = (const struct clk_hw*[]){
1311 &mmss_ahb_clk_src.clkr.hw
1314 .ops = &clk_branch2_ops,
1319 static struct clk_branch camss_csi0_clk = {
1322 .enable_reg = 0x30b4,
1323 .enable_mask = BIT(0),
1324 .hw.init = &(struct clk_init_data){
1325 .name = "camss_csi0_clk",
1326 .parent_hws = (const struct clk_hw*[]){
1327 &csi0_clk_src.clkr.hw
1330 .flags = CLK_SET_RATE_PARENT,
1331 .ops = &clk_branch2_ops,
1336 static struct clk_branch camss_csi0phy_clk = {
1339 .enable_reg = 0x30c4,
1340 .enable_mask = BIT(0),
1341 .hw.init = &(struct clk_init_data){
1342 .name = "camss_csi0phy_clk",
1343 .parent_hws = (const struct clk_hw*[]){
1344 &csi0_clk_src.clkr.hw
1347 .flags = CLK_SET_RATE_PARENT,
1348 .ops = &clk_branch2_ops,
1353 static struct clk_branch camss_csi0pix_clk = {
1356 .enable_reg = 0x30e4,
1357 .enable_mask = BIT(0),
1358 .hw.init = &(struct clk_init_data){
1359 .name = "camss_csi0pix_clk",
1360 .parent_hws = (const struct clk_hw*[]){
1361 &csi0_clk_src.clkr.hw
1364 .flags = CLK_SET_RATE_PARENT,
1365 .ops = &clk_branch2_ops,
1370 static struct clk_branch camss_csi0rdi_clk = {
1373 .enable_reg = 0x30d4,
1374 .enable_mask = BIT(0),
1375 .hw.init = &(struct clk_init_data){
1376 .name = "camss_csi0rdi_clk",
1377 .parent_hws = (const struct clk_hw*[]){
1378 &csi0_clk_src.clkr.hw
1381 .flags = CLK_SET_RATE_PARENT,
1382 .ops = &clk_branch2_ops,
1387 static struct clk_branch camss_csi1_ahb_clk = {
1390 .enable_reg = 0x3128,
1391 .enable_mask = BIT(0),
1392 .hw.init = &(struct clk_init_data){
1393 .name = "camss_csi1_ahb_clk",
1394 .parent_hws = (const struct clk_hw*[]){
1395 &mmss_ahb_clk_src.clkr.hw
1398 .flags = CLK_SET_RATE_PARENT,
1399 .ops = &clk_branch2_ops,
1404 static struct clk_branch camss_csi1_clk = {
1407 .enable_reg = 0x3124,
1408 .enable_mask = BIT(0),
1409 .hw.init = &(struct clk_init_data){
1410 .name = "camss_csi1_clk",
1411 .parent_hws = (const struct clk_hw*[]){
1412 &csi1_clk_src.clkr.hw
1415 .flags = CLK_SET_RATE_PARENT,
1416 .ops = &clk_branch2_ops,
1421 static struct clk_branch camss_csi1phy_clk = {
1424 .enable_reg = 0x3134,
1425 .enable_mask = BIT(0),
1426 .hw.init = &(struct clk_init_data){
1427 .name = "camss_csi1phy_clk",
1428 .parent_hws = (const struct clk_hw*[]){
1429 &csi1_clk_src.clkr.hw
1432 .flags = CLK_SET_RATE_PARENT,
1433 .ops = &clk_branch2_ops,
1438 static struct clk_branch camss_csi1pix_clk = {
1441 .enable_reg = 0x3154,
1442 .enable_mask = BIT(0),
1443 .hw.init = &(struct clk_init_data){
1444 .name = "camss_csi1pix_clk",
1445 .parent_hws = (const struct clk_hw*[]){
1446 &csi1_clk_src.clkr.hw
1449 .flags = CLK_SET_RATE_PARENT,
1450 .ops = &clk_branch2_ops,
1455 static struct clk_branch camss_csi1rdi_clk = {
1458 .enable_reg = 0x3144,
1459 .enable_mask = BIT(0),
1460 .hw.init = &(struct clk_init_data){
1461 .name = "camss_csi1rdi_clk",
1462 .parent_hws = (const struct clk_hw*[]){
1463 &csi1_clk_src.clkr.hw
1466 .flags = CLK_SET_RATE_PARENT,
1467 .ops = &clk_branch2_ops,
1472 static struct clk_branch camss_csi2_ahb_clk = {
1475 .enable_reg = 0x3188,
1476 .enable_mask = BIT(0),
1477 .hw.init = &(struct clk_init_data){
1478 .name = "camss_csi2_ahb_clk",
1479 .parent_hws = (const struct clk_hw*[]){
1480 &mmss_ahb_clk_src.clkr.hw
1483 .ops = &clk_branch2_ops,
1488 static struct clk_branch camss_csi2_clk = {
1491 .enable_reg = 0x3184,
1492 .enable_mask = BIT(0),
1493 .hw.init = &(struct clk_init_data){
1494 .name = "camss_csi2_clk",
1495 .parent_hws = (const struct clk_hw*[]){
1496 &csi2_clk_src.clkr.hw
1499 .flags = CLK_SET_RATE_PARENT,
1500 .ops = &clk_branch2_ops,
1505 static struct clk_branch camss_csi2phy_clk = {
1508 .enable_reg = 0x3194,
1509 .enable_mask = BIT(0),
1510 .hw.init = &(struct clk_init_data){
1511 .name = "camss_csi2phy_clk",
1512 .parent_hws = (const struct clk_hw*[]){
1513 &csi2_clk_src.clkr.hw
1516 .flags = CLK_SET_RATE_PARENT,
1517 .ops = &clk_branch2_ops,
1522 static struct clk_branch camss_csi2pix_clk = {
1525 .enable_reg = 0x31b4,
1526 .enable_mask = BIT(0),
1527 .hw.init = &(struct clk_init_data){
1528 .name = "camss_csi2pix_clk",
1529 .parent_hws = (const struct clk_hw*[]){
1530 &csi2_clk_src.clkr.hw
1533 .flags = CLK_SET_RATE_PARENT,
1534 .ops = &clk_branch2_ops,
1539 static struct clk_branch camss_csi2rdi_clk = {
1542 .enable_reg = 0x31a4,
1543 .enable_mask = BIT(0),
1544 .hw.init = &(struct clk_init_data){
1545 .name = "camss_csi2rdi_clk",
1546 .parent_hws = (const struct clk_hw*[]){
1547 &csi2_clk_src.clkr.hw
1550 .flags = CLK_SET_RATE_PARENT,
1551 .ops = &clk_branch2_ops,
1556 static struct clk_branch camss_csi3_ahb_clk = {
1559 .enable_reg = 0x31e8,
1560 .enable_mask = BIT(0),
1561 .hw.init = &(struct clk_init_data){
1562 .name = "camss_csi3_ahb_clk",
1563 .parent_hws = (const struct clk_hw*[]){
1564 &mmss_ahb_clk_src.clkr.hw
1567 .ops = &clk_branch2_ops,
1572 static struct clk_branch camss_csi3_clk = {
1575 .enable_reg = 0x31e4,
1576 .enable_mask = BIT(0),
1577 .hw.init = &(struct clk_init_data){
1578 .name = "camss_csi3_clk",
1579 .parent_hws = (const struct clk_hw*[]){
1580 &csi3_clk_src.clkr.hw
1583 .flags = CLK_SET_RATE_PARENT,
1584 .ops = &clk_branch2_ops,
1589 static struct clk_branch camss_csi3phy_clk = {
1592 .enable_reg = 0x31f4,
1593 .enable_mask = BIT(0),
1594 .hw.init = &(struct clk_init_data){
1595 .name = "camss_csi3phy_clk",
1596 .parent_hws = (const struct clk_hw*[]){
1597 &csi3_clk_src.clkr.hw
1600 .flags = CLK_SET_RATE_PARENT,
1601 .ops = &clk_branch2_ops,
1606 static struct clk_branch camss_csi3pix_clk = {
1609 .enable_reg = 0x3214,
1610 .enable_mask = BIT(0),
1611 .hw.init = &(struct clk_init_data){
1612 .name = "camss_csi3pix_clk",
1613 .parent_hws = (const struct clk_hw*[]){
1614 &csi3_clk_src.clkr.hw
1617 .flags = CLK_SET_RATE_PARENT,
1618 .ops = &clk_branch2_ops,
1623 static struct clk_branch camss_csi3rdi_clk = {
1626 .enable_reg = 0x3204,
1627 .enable_mask = BIT(0),
1628 .hw.init = &(struct clk_init_data){
1629 .name = "camss_csi3rdi_clk",
1630 .parent_hws = (const struct clk_hw*[]){
1631 &csi3_clk_src.clkr.hw
1634 .flags = CLK_SET_RATE_PARENT,
1635 .ops = &clk_branch2_ops,
1640 static struct clk_branch camss_csi_vfe0_clk = {
1643 .enable_reg = 0x3704,
1644 .enable_mask = BIT(0),
1645 .hw.init = &(struct clk_init_data){
1646 .name = "camss_csi_vfe0_clk",
1647 .parent_hws = (const struct clk_hw*[]){
1648 &vfe0_clk_src.clkr.hw
1651 .flags = CLK_SET_RATE_PARENT,
1652 .ops = &clk_branch2_ops,
1657 static struct clk_branch camss_csi_vfe1_clk = {
1660 .enable_reg = 0x3714,
1661 .enable_mask = BIT(0),
1662 .hw.init = &(struct clk_init_data){
1663 .name = "camss_csi_vfe1_clk",
1664 .parent_hws = (const struct clk_hw*[]){
1665 &vfe1_clk_src.clkr.hw
1668 .flags = CLK_SET_RATE_PARENT,
1669 .ops = &clk_branch2_ops,
1674 static struct clk_branch camss_gp0_clk = {
1677 .enable_reg = 0x3444,
1678 .enable_mask = BIT(0),
1679 .hw.init = &(struct clk_init_data){
1680 .name = "camss_gp0_clk",
1681 .parent_hws = (const struct clk_hw*[]){
1682 &camss_gp0_clk_src.clkr.hw
1685 .flags = CLK_SET_RATE_PARENT,
1686 .ops = &clk_branch2_ops,
1691 static struct clk_branch camss_gp1_clk = {
1694 .enable_reg = 0x3474,
1695 .enable_mask = BIT(0),
1696 .hw.init = &(struct clk_init_data){
1697 .name = "camss_gp1_clk",
1698 .parent_hws = (const struct clk_hw*[]){
1699 &camss_gp1_clk_src.clkr.hw
1702 .flags = CLK_SET_RATE_PARENT,
1703 .ops = &clk_branch2_ops,
1708 static struct clk_branch camss_ispif_ahb_clk = {
1711 .enable_reg = 0x3224,
1712 .enable_mask = BIT(0),
1713 .hw.init = &(struct clk_init_data){
1714 .name = "camss_ispif_ahb_clk",
1715 .parent_hws = (const struct clk_hw*[]){
1716 &mmss_ahb_clk_src.clkr.hw
1719 .flags = CLK_SET_RATE_PARENT,
1720 .ops = &clk_branch2_ops,
1725 static struct clk_branch camss_jpeg_jpeg0_clk = {
1728 .enable_reg = 0x35a8,
1729 .enable_mask = BIT(0),
1730 .hw.init = &(struct clk_init_data){
1731 .name = "camss_jpeg_jpeg0_clk",
1732 .parent_hws = (const struct clk_hw*[]){
1733 &jpeg0_clk_src.clkr.hw
1736 .flags = CLK_SET_RATE_PARENT,
1737 .ops = &clk_branch2_ops,
1742 static struct clk_branch camss_jpeg_jpeg1_clk = {
1745 .enable_reg = 0x35ac,
1746 .enable_mask = BIT(0),
1747 .hw.init = &(struct clk_init_data){
1748 .name = "camss_jpeg_jpeg1_clk",
1749 .parent_hws = (const struct clk_hw*[]){
1750 &jpeg1_clk_src.clkr.hw
1753 .flags = CLK_SET_RATE_PARENT,
1754 .ops = &clk_branch2_ops,
1759 static struct clk_branch camss_jpeg_jpeg2_clk = {
1762 .enable_reg = 0x35b0,
1763 .enable_mask = BIT(0),
1764 .hw.init = &(struct clk_init_data){
1765 .name = "camss_jpeg_jpeg2_clk",
1766 .parent_hws = (const struct clk_hw*[]){
1767 &jpeg2_clk_src.clkr.hw
1770 .flags = CLK_SET_RATE_PARENT,
1771 .ops = &clk_branch2_ops,
1776 static struct clk_branch camss_jpeg_jpeg_ahb_clk = {
1779 .enable_reg = 0x35b4,
1780 .enable_mask = BIT(0),
1781 .hw.init = &(struct clk_init_data){
1782 .name = "camss_jpeg_jpeg_ahb_clk",
1783 .parent_hws = (const struct clk_hw*[]){
1784 &mmss_ahb_clk_src.clkr.hw
1787 .ops = &clk_branch2_ops,
1792 static struct clk_branch camss_jpeg_jpeg_axi_clk = {
1795 .enable_reg = 0x35b8,
1796 .enable_mask = BIT(0),
1797 .hw.init = &(struct clk_init_data){
1798 .name = "camss_jpeg_jpeg_axi_clk",
1799 .parent_hws = (const struct clk_hw*[]){
1800 &mmss_axi_clk_src.clkr.hw
1803 .ops = &clk_branch2_ops,
1808 static struct clk_branch camss_mclk0_clk = {
1811 .enable_reg = 0x3384,
1812 .enable_mask = BIT(0),
1813 .hw.init = &(struct clk_init_data){
1814 .name = "camss_mclk0_clk",
1815 .parent_hws = (const struct clk_hw*[]){
1816 &mclk0_clk_src.clkr.hw
1819 .flags = CLK_SET_RATE_PARENT,
1820 .ops = &clk_branch2_ops,
1825 static struct clk_branch camss_mclk1_clk = {
1828 .enable_reg = 0x33b4,
1829 .enable_mask = BIT(0),
1830 .hw.init = &(struct clk_init_data){
1831 .name = "camss_mclk1_clk",
1832 .parent_hws = (const struct clk_hw*[]){
1833 &mclk1_clk_src.clkr.hw
1836 .flags = CLK_SET_RATE_PARENT,
1837 .ops = &clk_branch2_ops,
1842 static struct clk_branch camss_mclk2_clk = {
1845 .enable_reg = 0x33e4,
1846 .enable_mask = BIT(0),
1847 .hw.init = &(struct clk_init_data){
1848 .name = "camss_mclk2_clk",
1849 .parent_hws = (const struct clk_hw*[]){
1850 &mclk2_clk_src.clkr.hw
1853 .flags = CLK_SET_RATE_PARENT,
1854 .ops = &clk_branch2_ops,
1859 static struct clk_branch camss_mclk3_clk = {
1862 .enable_reg = 0x3414,
1863 .enable_mask = BIT(0),
1864 .hw.init = &(struct clk_init_data){
1865 .name = "camss_mclk3_clk",
1866 .parent_hws = (const struct clk_hw*[]){
1867 &mclk3_clk_src.clkr.hw
1870 .flags = CLK_SET_RATE_PARENT,
1871 .ops = &clk_branch2_ops,
1876 static struct clk_branch camss_micro_ahb_clk = {
1879 .enable_reg = 0x3494,
1880 .enable_mask = BIT(0),
1881 .hw.init = &(struct clk_init_data){
1882 .name = "camss_micro_ahb_clk",
1883 .parent_hws = (const struct clk_hw*[]){
1884 &mmss_ahb_clk_src.clkr.hw
1887 .ops = &clk_branch2_ops,
1892 static struct clk_branch camss_phy0_csi0phytimer_clk = {
1895 .enable_reg = 0x3024,
1896 .enable_mask = BIT(0),
1897 .hw.init = &(struct clk_init_data){
1898 .name = "camss_phy0_csi0phytimer_clk",
1899 .parent_hws = (const struct clk_hw*[]){
1900 &csi0phytimer_clk_src.clkr.hw
1903 .flags = CLK_SET_RATE_PARENT,
1904 .ops = &clk_branch2_ops,
1909 static struct clk_branch camss_phy1_csi1phytimer_clk = {
1912 .enable_reg = 0x3054,
1913 .enable_mask = BIT(0),
1914 .hw.init = &(struct clk_init_data){
1915 .name = "camss_phy1_csi1phytimer_clk",
1916 .parent_hws = (const struct clk_hw*[]){
1917 &csi1phytimer_clk_src.clkr.hw
1920 .flags = CLK_SET_RATE_PARENT,
1921 .ops = &clk_branch2_ops,
1926 static struct clk_branch camss_phy2_csi2phytimer_clk = {
1929 .enable_reg = 0x3084,
1930 .enable_mask = BIT(0),
1931 .hw.init = &(struct clk_init_data){
1932 .name = "camss_phy2_csi2phytimer_clk",
1933 .parent_hws = (const struct clk_hw*[]){
1934 &csi2phytimer_clk_src.clkr.hw
1937 .flags = CLK_SET_RATE_PARENT,
1938 .ops = &clk_branch2_ops,
1943 static struct clk_branch camss_top_ahb_clk = {
1946 .enable_reg = 0x3484,
1947 .enable_mask = BIT(0),
1948 .hw.init = &(struct clk_init_data){
1949 .name = "camss_top_ahb_clk",
1950 .parent_hws = (const struct clk_hw*[]){
1951 &mmss_ahb_clk_src.clkr.hw
1954 .flags = CLK_SET_RATE_PARENT,
1955 .ops = &clk_branch2_ops,
1960 static struct clk_branch camss_vfe_cpp_ahb_clk = {
1963 .enable_reg = 0x36b4,
1964 .enable_mask = BIT(0),
1965 .hw.init = &(struct clk_init_data){
1966 .name = "camss_vfe_cpp_ahb_clk",
1967 .parent_hws = (const struct clk_hw*[]){
1968 &mmss_ahb_clk_src.clkr.hw
1971 .flags = CLK_SET_RATE_PARENT,
1972 .ops = &clk_branch2_ops,
1977 static struct clk_branch camss_vfe_cpp_clk = {
1980 .enable_reg = 0x36b0,
1981 .enable_mask = BIT(0),
1982 .hw.init = &(struct clk_init_data){
1983 .name = "camss_vfe_cpp_clk",
1984 .parent_hws = (const struct clk_hw*[]){
1985 &cpp_clk_src.clkr.hw
1988 .flags = CLK_SET_RATE_PARENT,
1989 .ops = &clk_branch2_ops,
1994 static struct clk_branch camss_vfe_vfe0_clk = {
1997 .enable_reg = 0x36a8,
1998 .enable_mask = BIT(0),
1999 .hw.init = &(struct clk_init_data){
2000 .name = "camss_vfe_vfe0_clk",
2001 .parent_hws = (const struct clk_hw*[]){
2002 &vfe0_clk_src.clkr.hw
2005 .flags = CLK_SET_RATE_PARENT,
2006 .ops = &clk_branch2_ops,
2011 static struct clk_branch camss_vfe_vfe1_clk = {
2014 .enable_reg = 0x36ac,
2015 .enable_mask = BIT(0),
2016 .hw.init = &(struct clk_init_data){
2017 .name = "camss_vfe_vfe1_clk",
2018 .parent_hws = (const struct clk_hw*[]){
2019 &vfe1_clk_src.clkr.hw
2022 .flags = CLK_SET_RATE_PARENT,
2023 .ops = &clk_branch2_ops,
2028 static struct clk_branch camss_vfe_vfe_ahb_clk = {
2031 .enable_reg = 0x36b8,
2032 .enable_mask = BIT(0),
2033 .hw.init = &(struct clk_init_data){
2034 .name = "camss_vfe_vfe_ahb_clk",
2035 .parent_hws = (const struct clk_hw*[]){
2036 &mmss_ahb_clk_src.clkr.hw
2039 .flags = CLK_SET_RATE_PARENT,
2040 .ops = &clk_branch2_ops,
2045 static struct clk_branch camss_vfe_vfe_axi_clk = {
2048 .enable_reg = 0x36bc,
2049 .enable_mask = BIT(0),
2050 .hw.init = &(struct clk_init_data){
2051 .name = "camss_vfe_vfe_axi_clk",
2052 .parent_hws = (const struct clk_hw*[]){
2053 &mmss_axi_clk_src.clkr.hw
2056 .flags = CLK_SET_RATE_PARENT,
2057 .ops = &clk_branch2_ops,
2062 static struct clk_branch mdss_ahb_clk = {
2065 .enable_reg = 0x2308,
2066 .enable_mask = BIT(0),
2067 .hw.init = &(struct clk_init_data){
2068 .name = "mdss_ahb_clk",
2069 .parent_hws = (const struct clk_hw*[]){
2070 &mmss_ahb_clk_src.clkr.hw
2073 .flags = CLK_SET_RATE_PARENT,
2074 .ops = &clk_branch2_ops,
2079 static struct clk_branch mdss_axi_clk = {
2082 .enable_reg = 0x2310,
2083 .enable_mask = BIT(0),
2084 .hw.init = &(struct clk_init_data){
2085 .name = "mdss_axi_clk",
2086 .parent_hws = (const struct clk_hw*[]){
2087 &mmss_axi_clk_src.clkr.hw
2090 .flags = CLK_SET_RATE_PARENT,
2091 .ops = &clk_branch2_ops,
2096 static struct clk_branch mdss_byte0_clk = {
2099 .enable_reg = 0x233c,
2100 .enable_mask = BIT(0),
2101 .hw.init = &(struct clk_init_data){
2102 .name = "mdss_byte0_clk",
2103 .parent_hws = (const struct clk_hw*[]){
2104 &byte0_clk_src.clkr.hw
2107 .flags = CLK_SET_RATE_PARENT,
2108 .ops = &clk_branch2_ops,
2113 static struct clk_branch mdss_byte1_clk = {
2116 .enable_reg = 0x2340,
2117 .enable_mask = BIT(0),
2118 .hw.init = &(struct clk_init_data){
2119 .name = "mdss_byte1_clk",
2120 .parent_hws = (const struct clk_hw*[]){
2121 &byte1_clk_src.clkr.hw
2124 .flags = CLK_SET_RATE_PARENT,
2125 .ops = &clk_branch2_ops,
2130 static struct clk_branch mdss_edpaux_clk = {
2133 .enable_reg = 0x2334,
2134 .enable_mask = BIT(0),
2135 .hw.init = &(struct clk_init_data){
2136 .name = "mdss_edpaux_clk",
2137 .parent_hws = (const struct clk_hw*[]){
2138 &edpaux_clk_src.clkr.hw
2141 .flags = CLK_SET_RATE_PARENT,
2142 .ops = &clk_branch2_ops,
2147 static struct clk_branch mdss_edplink_clk = {
2150 .enable_reg = 0x2330,
2151 .enable_mask = BIT(0),
2152 .hw.init = &(struct clk_init_data){
2153 .name = "mdss_edplink_clk",
2154 .parent_hws = (const struct clk_hw*[]){
2155 &edplink_clk_src.clkr.hw
2158 .flags = CLK_SET_RATE_PARENT,
2159 .ops = &clk_branch2_ops,
2164 static struct clk_branch mdss_edppixel_clk = {
2167 .enable_reg = 0x232c,
2168 .enable_mask = BIT(0),
2169 .hw.init = &(struct clk_init_data){
2170 .name = "mdss_edppixel_clk",
2171 .parent_hws = (const struct clk_hw*[]){
2172 &edppixel_clk_src.clkr.hw
2175 .flags = CLK_SET_RATE_PARENT,
2176 .ops = &clk_branch2_ops,
2181 static struct clk_branch mdss_esc0_clk = {
2184 .enable_reg = 0x2344,
2185 .enable_mask = BIT(0),
2186 .hw.init = &(struct clk_init_data){
2187 .name = "mdss_esc0_clk",
2188 .parent_hws = (const struct clk_hw*[]){
2189 &esc0_clk_src.clkr.hw
2192 .flags = CLK_SET_RATE_PARENT,
2193 .ops = &clk_branch2_ops,
2198 static struct clk_branch mdss_esc1_clk = {
2201 .enable_reg = 0x2348,
2202 .enable_mask = BIT(0),
2203 .hw.init = &(struct clk_init_data){
2204 .name = "mdss_esc1_clk",
2205 .parent_hws = (const struct clk_hw*[]){
2206 &esc1_clk_src.clkr.hw
2209 .flags = CLK_SET_RATE_PARENT,
2210 .ops = &clk_branch2_ops,
2215 static struct clk_branch mdss_extpclk_clk = {
2218 .enable_reg = 0x2324,
2219 .enable_mask = BIT(0),
2220 .hw.init = &(struct clk_init_data){
2221 .name = "mdss_extpclk_clk",
2222 .parent_hws = (const struct clk_hw*[]){
2223 &extpclk_clk_src.clkr.hw
2226 .flags = CLK_SET_RATE_PARENT,
2227 .ops = &clk_branch2_ops,
2232 static struct clk_branch mdss_hdmi_ahb_clk = {
2235 .enable_reg = 0x230c,
2236 .enable_mask = BIT(0),
2237 .hw.init = &(struct clk_init_data){
2238 .name = "mdss_hdmi_ahb_clk",
2239 .parent_hws = (const struct clk_hw*[]){
2240 &mmss_ahb_clk_src.clkr.hw
2243 .flags = CLK_SET_RATE_PARENT,
2244 .ops = &clk_branch2_ops,
2249 static struct clk_branch mdss_hdmi_clk = {
2252 .enable_reg = 0x2338,
2253 .enable_mask = BIT(0),
2254 .hw.init = &(struct clk_init_data){
2255 .name = "mdss_hdmi_clk",
2256 .parent_hws = (const struct clk_hw*[]){
2257 &hdmi_clk_src.clkr.hw
2260 .flags = CLK_SET_RATE_PARENT,
2261 .ops = &clk_branch2_ops,
2266 static struct clk_branch mdss_mdp_clk = {
2269 .enable_reg = 0x231c,
2270 .enable_mask = BIT(0),
2271 .hw.init = &(struct clk_init_data){
2272 .name = "mdss_mdp_clk",
2273 .parent_hws = (const struct clk_hw*[]){
2274 &mdp_clk_src.clkr.hw
2277 .flags = CLK_SET_RATE_PARENT,
2278 .ops = &clk_branch2_ops,
2283 static struct clk_branch mdss_mdp_lut_clk = {
2286 .enable_reg = 0x2320,
2287 .enable_mask = BIT(0),
2288 .hw.init = &(struct clk_init_data){
2289 .name = "mdss_mdp_lut_clk",
2290 .parent_hws = (const struct clk_hw*[]){
2291 &mdp_clk_src.clkr.hw
2294 .flags = CLK_SET_RATE_PARENT,
2295 .ops = &clk_branch2_ops,
2300 static struct clk_branch mdss_pclk0_clk = {
2303 .enable_reg = 0x2314,
2304 .enable_mask = BIT(0),
2305 .hw.init = &(struct clk_init_data){
2306 .name = "mdss_pclk0_clk",
2307 .parent_hws = (const struct clk_hw*[]){
2308 &pclk0_clk_src.clkr.hw
2311 .flags = CLK_SET_RATE_PARENT,
2312 .ops = &clk_branch2_ops,
2317 static struct clk_branch mdss_pclk1_clk = {
2320 .enable_reg = 0x2318,
2321 .enable_mask = BIT(0),
2322 .hw.init = &(struct clk_init_data){
2323 .name = "mdss_pclk1_clk",
2324 .parent_hws = (const struct clk_hw*[]){
2325 &pclk1_clk_src.clkr.hw
2328 .flags = CLK_SET_RATE_PARENT,
2329 .ops = &clk_branch2_ops,
2334 static struct clk_branch mdss_vsync_clk = {
2337 .enable_reg = 0x2328,
2338 .enable_mask = BIT(0),
2339 .hw.init = &(struct clk_init_data){
2340 .name = "mdss_vsync_clk",
2341 .parent_hws = (const struct clk_hw*[]){
2342 &vsync_clk_src.clkr.hw
2345 .flags = CLK_SET_RATE_PARENT,
2346 .ops = &clk_branch2_ops,
2351 static struct clk_branch mmss_rbcpr_ahb_clk = {
2354 .enable_reg = 0x4088,
2355 .enable_mask = BIT(0),
2356 .hw.init = &(struct clk_init_data){
2357 .name = "mmss_rbcpr_ahb_clk",
2358 .parent_hws = (const struct clk_hw*[]){
2359 &mmss_ahb_clk_src.clkr.hw
2362 .flags = CLK_SET_RATE_PARENT,
2363 .ops = &clk_branch2_ops,
2368 static struct clk_branch mmss_rbcpr_clk = {
2371 .enable_reg = 0x4084,
2372 .enable_mask = BIT(0),
2373 .hw.init = &(struct clk_init_data){
2374 .name = "mmss_rbcpr_clk",
2375 .parent_hws = (const struct clk_hw*[]){
2376 &rbcpr_clk_src.clkr.hw
2379 .flags = CLK_SET_RATE_PARENT,
2380 .ops = &clk_branch2_ops,
2385 static struct clk_branch mmss_misc_ahb_clk = {
2388 .enable_reg = 0x502c,
2389 .enable_mask = BIT(0),
2390 .hw.init = &(struct clk_init_data){
2391 .name = "mmss_misc_ahb_clk",
2392 .parent_hws = (const struct clk_hw*[]){
2393 &mmss_ahb_clk_src.clkr.hw
2396 .flags = CLK_SET_RATE_PARENT,
2397 .ops = &clk_branch2_ops,
2402 static struct clk_branch mmss_mmssnoc_ahb_clk = {
2405 .enable_reg = 0x5024,
2406 .enable_mask = BIT(0),
2407 .hw.init = &(struct clk_init_data){
2408 .name = "mmss_mmssnoc_ahb_clk",
2409 .parent_hws = (const struct clk_hw*[]){
2410 &mmss_ahb_clk_src.clkr.hw
2413 .ops = &clk_branch2_ops,
2414 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2419 static struct clk_branch mmss_mmssnoc_bto_ahb_clk = {
2422 .enable_reg = 0x5028,
2423 .enable_mask = BIT(0),
2424 .hw.init = &(struct clk_init_data){
2425 .name = "mmss_mmssnoc_bto_ahb_clk",
2426 .parent_hws = (const struct clk_hw*[]){
2427 &mmss_ahb_clk_src.clkr.hw
2430 .ops = &clk_branch2_ops,
2431 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2436 static struct clk_branch mmss_mmssnoc_axi_clk = {
2439 .enable_reg = 0x506c,
2440 .enable_mask = BIT(0),
2441 .hw.init = &(struct clk_init_data){
2442 .name = "mmss_mmssnoc_axi_clk",
2443 .parent_hws = (const struct clk_hw*[]){
2444 &mmss_axi_clk_src.clkr.hw
2447 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2448 .ops = &clk_branch2_ops,
2453 static struct clk_branch mmss_s0_axi_clk = {
2456 .enable_reg = 0x5064,
2457 .enable_mask = BIT(0),
2458 .hw.init = &(struct clk_init_data){
2459 .name = "mmss_s0_axi_clk",
2460 .parent_hws = (const struct clk_hw*[]){
2461 &mmss_axi_clk_src.clkr.hw
2464 .ops = &clk_branch2_ops,
2465 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2470 static struct clk_branch ocmemcx_ahb_clk = {
2473 .enable_reg = 0x405c,
2474 .enable_mask = BIT(0),
2475 .hw.init = &(struct clk_init_data){
2476 .name = "ocmemcx_ahb_clk",
2477 .parent_hws = (const struct clk_hw*[]){
2478 &mmss_ahb_clk_src.clkr.hw
2481 .flags = CLK_SET_RATE_PARENT,
2482 .ops = &clk_branch2_ops,
2487 static struct clk_branch ocmemcx_ocmemnoc_clk = {
2490 .enable_reg = 0x4058,
2491 .enable_mask = BIT(0),
2492 .hw.init = &(struct clk_init_data){
2493 .name = "ocmemcx_ocmemnoc_clk",
2494 .parent_hws = (const struct clk_hw*[]){
2495 &ocmemnoc_clk_src.clkr.hw
2498 .flags = CLK_SET_RATE_PARENT,
2499 .ops = &clk_branch2_ops,
2504 static struct clk_branch oxili_ocmemgx_clk = {
2507 .enable_reg = 0x402c,
2508 .enable_mask = BIT(0),
2509 .hw.init = &(struct clk_init_data){
2510 .name = "oxili_ocmemgx_clk",
2511 .parent_hws = (const struct clk_hw*[]){
2512 &gfx3d_clk_src.clkr.hw
2515 .flags = CLK_SET_RATE_PARENT,
2516 .ops = &clk_branch2_ops,
2521 static struct clk_branch oxili_gfx3d_clk = {
2524 .enable_reg = 0x4028,
2525 .enable_mask = BIT(0),
2526 .hw.init = &(struct clk_init_data){
2527 .name = "oxili_gfx3d_clk",
2528 .parent_hws = (const struct clk_hw*[]){
2529 &gfx3d_clk_src.clkr.hw
2532 .flags = CLK_SET_RATE_PARENT,
2533 .ops = &clk_branch2_ops,
2538 static struct clk_branch oxili_rbbmtimer_clk = {
2541 .enable_reg = 0x40b0,
2542 .enable_mask = BIT(0),
2543 .hw.init = &(struct clk_init_data){
2544 .name = "oxili_rbbmtimer_clk",
2545 .parent_hws = (const struct clk_hw*[]){
2546 &rbbmtimer_clk_src.clkr.hw
2549 .flags = CLK_SET_RATE_PARENT,
2550 .ops = &clk_branch2_ops,
2555 static struct clk_branch oxilicx_ahb_clk = {
2558 .enable_reg = 0x403c,
2559 .enable_mask = BIT(0),
2560 .hw.init = &(struct clk_init_data){
2561 .name = "oxilicx_ahb_clk",
2562 .parent_hws = (const struct clk_hw*[]){
2563 &mmss_ahb_clk_src.clkr.hw
2566 .flags = CLK_SET_RATE_PARENT,
2567 .ops = &clk_branch2_ops,
2572 static struct clk_branch venus0_ahb_clk = {
2575 .enable_reg = 0x1030,
2576 .enable_mask = BIT(0),
2577 .hw.init = &(struct clk_init_data){
2578 .name = "venus0_ahb_clk",
2579 .parent_hws = (const struct clk_hw*[]){
2580 &mmss_ahb_clk_src.clkr.hw
2583 .flags = CLK_SET_RATE_PARENT,
2584 .ops = &clk_branch2_ops,
2589 static struct clk_branch venus0_axi_clk = {
2592 .enable_reg = 0x1034,
2593 .enable_mask = BIT(0),
2594 .hw.init = &(struct clk_init_data){
2595 .name = "venus0_axi_clk",
2596 .parent_hws = (const struct clk_hw*[]){
2597 &mmss_axi_clk_src.clkr.hw
2600 .flags = CLK_SET_RATE_PARENT,
2601 .ops = &clk_branch2_ops,
2606 static struct clk_branch venus0_core0_vcodec_clk = {
2609 .enable_reg = 0x1048,
2610 .enable_mask = BIT(0),
2611 .hw.init = &(struct clk_init_data){
2612 .name = "venus0_core0_vcodec_clk",
2613 .parent_hws = (const struct clk_hw*[]){
2614 &vcodec0_clk_src.clkr.hw
2617 .flags = CLK_SET_RATE_PARENT,
2618 .ops = &clk_branch2_ops,
2623 static struct clk_branch venus0_core1_vcodec_clk = {
2626 .enable_reg = 0x104c,
2627 .enable_mask = BIT(0),
2628 .hw.init = &(struct clk_init_data){
2629 .name = "venus0_core1_vcodec_clk",
2630 .parent_hws = (const struct clk_hw*[]){
2631 &vcodec0_clk_src.clkr.hw
2634 .flags = CLK_SET_RATE_PARENT,
2635 .ops = &clk_branch2_ops,
2640 static struct clk_branch venus0_ocmemnoc_clk = {
2643 .enable_reg = 0x1038,
2644 .enable_mask = BIT(0),
2645 .hw.init = &(struct clk_init_data){
2646 .name = "venus0_ocmemnoc_clk",
2647 .parent_hws = (const struct clk_hw*[]){
2648 &ocmemnoc_clk_src.clkr.hw
2651 .flags = CLK_SET_RATE_PARENT,
2652 .ops = &clk_branch2_ops,
2657 static struct clk_branch venus0_vcodec0_clk = {
2660 .enable_reg = 0x1028,
2661 .enable_mask = BIT(0),
2662 .hw.init = &(struct clk_init_data){
2663 .name = "venus0_vcodec0_clk",
2664 .parent_hws = (const struct clk_hw*[]){
2665 &vcodec0_clk_src.clkr.hw
2668 .flags = CLK_SET_RATE_PARENT,
2669 .ops = &clk_branch2_ops,
2674 static struct clk_branch vpu_ahb_clk = {
2677 .enable_reg = 0x1430,
2678 .enable_mask = BIT(0),
2679 .hw.init = &(struct clk_init_data){
2680 .name = "vpu_ahb_clk",
2681 .parent_hws = (const struct clk_hw*[]){
2682 &mmss_ahb_clk_src.clkr.hw
2685 .flags = CLK_SET_RATE_PARENT,
2686 .ops = &clk_branch2_ops,
2691 static struct clk_branch vpu_axi_clk = {
2694 .enable_reg = 0x143c,
2695 .enable_mask = BIT(0),
2696 .hw.init = &(struct clk_init_data){
2697 .name = "vpu_axi_clk",
2698 .parent_hws = (const struct clk_hw*[]){
2699 &mmss_axi_clk_src.clkr.hw
2702 .flags = CLK_SET_RATE_PARENT,
2703 .ops = &clk_branch2_ops,
2708 static struct clk_branch vpu_bus_clk = {
2711 .enable_reg = 0x1440,
2712 .enable_mask = BIT(0),
2713 .hw.init = &(struct clk_init_data){
2714 .name = "vpu_bus_clk",
2715 .parent_hws = (const struct clk_hw*[]){
2716 &vpu_bus_clk_src.clkr.hw
2719 .flags = CLK_SET_RATE_PARENT,
2720 .ops = &clk_branch2_ops,
2725 static struct clk_branch vpu_cxo_clk = {
2728 .enable_reg = 0x1434,
2729 .enable_mask = BIT(0),
2730 .hw.init = &(struct clk_init_data){
2731 .name = "vpu_cxo_clk",
2732 .parent_data = (const struct clk_parent_data[]){
2733 { .fw_name = "xo", .name = "xo_board" },
2736 .flags = CLK_SET_RATE_PARENT,
2737 .ops = &clk_branch2_ops,
2742 static struct clk_branch vpu_maple_clk = {
2745 .enable_reg = 0x142c,
2746 .enable_mask = BIT(0),
2747 .hw.init = &(struct clk_init_data){
2748 .name = "vpu_maple_clk",
2749 .parent_hws = (const struct clk_hw*[]){
2750 &maple_clk_src.clkr.hw
2753 .flags = CLK_SET_RATE_PARENT,
2754 .ops = &clk_branch2_ops,
2759 static struct clk_branch vpu_sleep_clk = {
2762 .enable_reg = 0x1438,
2763 .enable_mask = BIT(0),
2764 .hw.init = &(struct clk_init_data){
2765 .name = "vpu_sleep_clk",
2766 .parent_data = (const struct clk_parent_data[]){
2767 { .fw_name = "sleep_clk", .name = "sleep_clk" },
2770 .flags = CLK_SET_RATE_PARENT,
2771 .ops = &clk_branch2_ops,
2776 static struct clk_branch vpu_vdp_clk = {
2779 .enable_reg = 0x1428,
2780 .enable_mask = BIT(0),
2781 .hw.init = &(struct clk_init_data){
2782 .name = "vpu_vdp_clk",
2783 .parent_hws = (const struct clk_hw*[]){
2784 &vdp_clk_src.clkr.hw
2787 .flags = CLK_SET_RATE_PARENT,
2788 .ops = &clk_branch2_ops,
2793 static const struct pll_config mmpll1_config = {
2798 .vco_mask = 0x3 << 20,
2800 .pre_div_mask = 0x7 << 12,
2801 .post_div_val = 0x0,
2802 .post_div_mask = 0x3 << 8,
2803 .mn_ena_mask = BIT(24),
2804 .main_output_mask = BIT(0),
2807 static const struct pll_config mmpll3_config = {
2812 .vco_mask = 0x3 << 20,
2814 .pre_div_mask = 0x7 << 12,
2815 .post_div_val = 0x0,
2816 .post_div_mask = 0x3 << 8,
2817 .mn_ena_mask = BIT(24),
2818 .main_output_mask = BIT(0),
2819 .aux_output_mask = BIT(1),
2822 static struct gdsc venus0_gdsc = {
2827 .pwrsts = PWRSTS_OFF_ON,
2830 static struct gdsc venus0_core0_gdsc = {
2833 .name = "venus0_core0",
2835 .pwrsts = PWRSTS_OFF_ON,
2838 static struct gdsc venus0_core1_gdsc = {
2841 .name = "venus0_core1",
2843 .pwrsts = PWRSTS_OFF_ON,
2846 static struct gdsc mdss_gdsc = {
2848 .cxcs = (unsigned int []){ 0x231c, 0x2320 },
2853 .pwrsts = PWRSTS_OFF_ON,
2856 static struct gdsc camss_jpeg_gdsc = {
2859 .name = "camss_jpeg",
2861 .pwrsts = PWRSTS_OFF_ON,
2864 static struct gdsc camss_vfe_gdsc = {
2866 .cxcs = (unsigned int []){ 0x36a8, 0x36ac, 0x36b0 },
2869 .name = "camss_vfe",
2871 .pwrsts = PWRSTS_OFF_ON,
2874 static struct gdsc oxili_gdsc = {
2876 .cxcs = (unsigned int []){ 0x4028 },
2881 .pwrsts = PWRSTS_OFF_ON,
2884 static struct gdsc oxilicx_gdsc = {
2889 .pwrsts = PWRSTS_OFF_ON,
2892 static struct clk_regmap *mmcc_apq8084_clocks[] = {
2893 [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr,
2894 [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr,
2895 [MMPLL0] = &mmpll0.clkr,
2896 [MMPLL0_VOTE] = &mmpll0_vote,
2897 [MMPLL1] = &mmpll1.clkr,
2898 [MMPLL1_VOTE] = &mmpll1_vote,
2899 [MMPLL2] = &mmpll2.clkr,
2900 [MMPLL3] = &mmpll3.clkr,
2901 [MMPLL4] = &mmpll4.clkr,
2902 [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
2903 [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
2904 [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
2905 [CSI3_CLK_SRC] = &csi3_clk_src.clkr,
2906 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
2907 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
2908 [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
2909 [MDP_CLK_SRC] = &mdp_clk_src.clkr,
2910 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2911 [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
2912 [OCMEMNOC_CLK_SRC] = &ocmemnoc_clk_src.clkr,
2913 [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
2914 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
2915 [JPEG1_CLK_SRC] = &jpeg1_clk_src.clkr,
2916 [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,
2917 [EDPPIXEL_CLK_SRC] = &edppixel_clk_src.clkr,
2918 [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
2919 [VP_CLK_SRC] = &vp_clk_src.clkr,
2920 [CCI_CLK_SRC] = &cci_clk_src.clkr,
2921 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
2922 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
2923 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
2924 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
2925 [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
2926 [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
2927 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
2928 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
2929 [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
2930 [CPP_CLK_SRC] = &cpp_clk_src.clkr,
2931 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2932 [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
2933 [EDPAUX_CLK_SRC] = &edpaux_clk_src.clkr,
2934 [EDPLINK_CLK_SRC] = &edplink_clk_src.clkr,
2935 [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2936 [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
2937 [HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
2938 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2939 [MMSS_RBCPR_CLK_SRC] = &rbcpr_clk_src.clkr,
2940 [RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr,
2941 [MAPLE_CLK_SRC] = &maple_clk_src.clkr,
2942 [VDP_CLK_SRC] = &vdp_clk_src.clkr,
2943 [VPU_BUS_CLK_SRC] = &vpu_bus_clk_src.clkr,
2944 [MMSS_CXO_CLK] = &mmss_cxo_clk.clkr,
2945 [MMSS_SLEEPCLK_CLK] = &mmss_sleepclk_clk.clkr,
2946 [AVSYNC_AHB_CLK] = &avsync_ahb_clk.clkr,
2947 [AVSYNC_EDPPIXEL_CLK] = &avsync_edppixel_clk.clkr,
2948 [AVSYNC_EXTPCLK_CLK] = &avsync_extpclk_clk.clkr,
2949 [AVSYNC_PCLK0_CLK] = &avsync_pclk0_clk.clkr,
2950 [AVSYNC_PCLK1_CLK] = &avsync_pclk1_clk.clkr,
2951 [AVSYNC_VP_CLK] = &avsync_vp_clk.clkr,
2952 [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr,
2953 [CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr,
2954 [CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr,
2955 [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
2956 [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
2957 [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
2958 [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
2959 [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
2960 [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
2961 [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
2962 [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
2963 [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
2964 [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
2965 [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
2966 [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
2967 [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,
2968 [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
2969 [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
2970 [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
2971 [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
2972 [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,
2973 [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
2974 [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
2975 [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
2976 [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
2977 [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
2978 [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
2979 [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
2980 [CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr,
2981 [CAMSS_JPEG_JPEG1_CLK] = &camss_jpeg_jpeg1_clk.clkr,
2982 [CAMSS_JPEG_JPEG2_CLK] = &camss_jpeg_jpeg2_clk.clkr,
2983 [CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr,
2984 [CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr,
2985 [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
2986 [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
2987 [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
2988 [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
2989 [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
2990 [CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr,
2991 [CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr,
2992 [CAMSS_PHY2_CSI2PHYTIMER_CLK] = &camss_phy2_csi2phytimer_clk.clkr,
2993 [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
2994 [CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr,
2995 [CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr,
2996 [CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr,
2997 [CAMSS_VFE_VFE1_CLK] = &camss_vfe_vfe1_clk.clkr,
2998 [CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr,
2999 [CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr,
3000 [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
3001 [MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
3002 [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
3003 [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
3004 [MDSS_EDPAUX_CLK] = &mdss_edpaux_clk.clkr,
3005 [MDSS_EDPLINK_CLK] = &mdss_edplink_clk.clkr,
3006 [MDSS_EDPPIXEL_CLK] = &mdss_edppixel_clk.clkr,
3007 [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
3008 [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
3009 [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
3010 [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,
3011 [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
3012 [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
3013 [MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr,
3014 [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
3015 [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
3016 [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
3017 [MMSS_RBCPR_AHB_CLK] = &mmss_rbcpr_ahb_clk.clkr,
3018 [MMSS_RBCPR_CLK] = &mmss_rbcpr_clk.clkr,
3019 [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
3020 [MMSS_MMSSNOC_AHB_CLK] = &mmss_mmssnoc_ahb_clk.clkr,
3021 [MMSS_MMSSNOC_BTO_AHB_CLK] = &mmss_mmssnoc_bto_ahb_clk.clkr,
3022 [MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr,
3023 [MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr,
3024 [OCMEMCX_AHB_CLK] = &ocmemcx_ahb_clk.clkr,
3025 [OCMEMCX_OCMEMNOC_CLK] = &ocmemcx_ocmemnoc_clk.clkr,
3026 [OXILI_OCMEMGX_CLK] = &oxili_ocmemgx_clk.clkr,
3027 [OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr,
3028 [OXILI_RBBMTIMER_CLK] = &oxili_rbbmtimer_clk.clkr,
3029 [OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr,
3030 [VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr,
3031 [VENUS0_AXI_CLK] = &venus0_axi_clk.clkr,
3032 [VENUS0_CORE0_VCODEC_CLK] = &venus0_core0_vcodec_clk.clkr,
3033 [VENUS0_CORE1_VCODEC_CLK] = &venus0_core1_vcodec_clk.clkr,
3034 [VENUS0_OCMEMNOC_CLK] = &venus0_ocmemnoc_clk.clkr,
3035 [VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr,
3036 [VPU_AHB_CLK] = &vpu_ahb_clk.clkr,
3037 [VPU_AXI_CLK] = &vpu_axi_clk.clkr,
3038 [VPU_BUS_CLK] = &vpu_bus_clk.clkr,
3039 [VPU_CXO_CLK] = &vpu_cxo_clk.clkr,
3040 [VPU_MAPLE_CLK] = &vpu_maple_clk.clkr,
3041 [VPU_SLEEP_CLK] = &vpu_sleep_clk.clkr,
3042 [VPU_VDP_CLK] = &vpu_vdp_clk.clkr,
3045 static const struct qcom_reset_map mmcc_apq8084_resets[] = {
3046 [MMSS_SPDM_RESET] = { 0x0200 },
3047 [MMSS_SPDM_RM_RESET] = { 0x0300 },
3048 [VENUS0_RESET] = { 0x1020 },
3049 [VPU_RESET] = { 0x1400 },
3050 [MDSS_RESET] = { 0x2300 },
3051 [AVSYNC_RESET] = { 0x2400 },
3052 [CAMSS_PHY0_RESET] = { 0x3020 },
3053 [CAMSS_PHY1_RESET] = { 0x3050 },
3054 [CAMSS_PHY2_RESET] = { 0x3080 },
3055 [CAMSS_CSI0_RESET] = { 0x30b0 },
3056 [CAMSS_CSI0PHY_RESET] = { 0x30c0 },
3057 [CAMSS_CSI0RDI_RESET] = { 0x30d0 },
3058 [CAMSS_CSI0PIX_RESET] = { 0x30e0 },
3059 [CAMSS_CSI1_RESET] = { 0x3120 },
3060 [CAMSS_CSI1PHY_RESET] = { 0x3130 },
3061 [CAMSS_CSI1RDI_RESET] = { 0x3140 },
3062 [CAMSS_CSI1PIX_RESET] = { 0x3150 },
3063 [CAMSS_CSI2_RESET] = { 0x3180 },
3064 [CAMSS_CSI2PHY_RESET] = { 0x3190 },
3065 [CAMSS_CSI2RDI_RESET] = { 0x31a0 },
3066 [CAMSS_CSI2PIX_RESET] = { 0x31b0 },
3067 [CAMSS_CSI3_RESET] = { 0x31e0 },
3068 [CAMSS_CSI3PHY_RESET] = { 0x31f0 },
3069 [CAMSS_CSI3RDI_RESET] = { 0x3200 },
3070 [CAMSS_CSI3PIX_RESET] = { 0x3210 },
3071 [CAMSS_ISPIF_RESET] = { 0x3220 },
3072 [CAMSS_CCI_RESET] = { 0x3340 },
3073 [CAMSS_MCLK0_RESET] = { 0x3380 },
3074 [CAMSS_MCLK1_RESET] = { 0x33b0 },
3075 [CAMSS_MCLK2_RESET] = { 0x33e0 },
3076 [CAMSS_MCLK3_RESET] = { 0x3410 },
3077 [CAMSS_GP0_RESET] = { 0x3440 },
3078 [CAMSS_GP1_RESET] = { 0x3470 },
3079 [CAMSS_TOP_RESET] = { 0x3480 },
3080 [CAMSS_AHB_RESET] = { 0x3488 },
3081 [CAMSS_MICRO_RESET] = { 0x3490 },
3082 [CAMSS_JPEG_RESET] = { 0x35a0 },
3083 [CAMSS_VFE_RESET] = { 0x36a0 },
3084 [CAMSS_CSI_VFE0_RESET] = { 0x3700 },
3085 [CAMSS_CSI_VFE1_RESET] = { 0x3710 },
3086 [OXILI_RESET] = { 0x4020 },
3087 [OXILICX_RESET] = { 0x4030 },
3088 [OCMEMCX_RESET] = { 0x4050 },
3089 [MMSS_RBCRP_RESET] = { 0x4080 },
3090 [MMSSNOCAHB_RESET] = { 0x5020 },
3091 [MMSSNOCAXI_RESET] = { 0x5060 },
3094 static struct gdsc *mmcc_apq8084_gdscs[] = {
3095 [VENUS0_GDSC] = &venus0_gdsc,
3096 [VENUS0_CORE0_GDSC] = &venus0_core0_gdsc,
3097 [VENUS0_CORE1_GDSC] = &venus0_core1_gdsc,
3098 [MDSS_GDSC] = &mdss_gdsc,
3099 [CAMSS_JPEG_GDSC] = &camss_jpeg_gdsc,
3100 [CAMSS_VFE_GDSC] = &camss_vfe_gdsc,
3101 [OXILI_GDSC] = &oxili_gdsc,
3102 [OXILICX_GDSC] = &oxilicx_gdsc,
3105 static const struct regmap_config mmcc_apq8084_regmap_config = {
3109 .max_register = 0x5104,
3113 static const struct qcom_cc_desc mmcc_apq8084_desc = {
3114 .config = &mmcc_apq8084_regmap_config,
3115 .clks = mmcc_apq8084_clocks,
3116 .num_clks = ARRAY_SIZE(mmcc_apq8084_clocks),
3117 .resets = mmcc_apq8084_resets,
3118 .num_resets = ARRAY_SIZE(mmcc_apq8084_resets),
3119 .gdscs = mmcc_apq8084_gdscs,
3120 .num_gdscs = ARRAY_SIZE(mmcc_apq8084_gdscs),
3123 static const struct of_device_id mmcc_apq8084_match_table[] = {
3124 { .compatible = "qcom,mmcc-apq8084" },
3127 MODULE_DEVICE_TABLE(of, mmcc_apq8084_match_table);
3129 static int mmcc_apq8084_probe(struct platform_device *pdev)
3132 struct regmap *regmap;
3134 ret = qcom_cc_probe(pdev, &mmcc_apq8084_desc);
3138 regmap = dev_get_regmap(&pdev->dev, NULL);
3139 clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true);
3140 clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false);
3145 static struct platform_driver mmcc_apq8084_driver = {
3146 .probe = mmcc_apq8084_probe,
3148 .name = "mmcc-apq8084",
3149 .of_match_table = mmcc_apq8084_match_table,
3152 module_platform_driver(mmcc_apq8084_driver);
3154 MODULE_DESCRIPTION("QCOM MMCC APQ8084 Driver");
3155 MODULE_LICENSE("GPL v2");
3156 MODULE_ALIAS("platform:mmcc-apq8084");