1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2013, The Linux Foundation. All rights reserved.
6 #include <linux/kernel.h>
7 #include <linux/bitops.h>
9 #include <linux/platform_device.h>
10 #include <linux/module.h>
12 #include <linux/of_device.h>
13 #include <linux/clk-provider.h>
14 #include <linux/regmap.h>
15 #include <linux/reset-controller.h>
17 #include <dt-bindings/clock/qcom,mmcc-msm8974.h>
18 #include <dt-bindings/reset/qcom,mmcc-msm8974.h>
21 #include "clk-regmap.h"
24 #include "clk-branch.h"
45 static const struct parent_map mmcc_xo_mmpll0_mmpll1_gpll0_map[] = {
52 static const char * const mmcc_xo_mmpll0_mmpll1_gpll0[] = {
59 static const struct parent_map mmcc_xo_mmpll0_dsi_hdmi_gpll0_map[] = {
68 static const char * const mmcc_xo_mmpll0_dsi_hdmi_gpll0[] = {
77 static const struct parent_map mmcc_xo_mmpll0_1_3_gpll0_map[] = {
85 static const char * const mmcc_xo_mmpll0_1_3_gpll0[] = {
93 static const struct parent_map mmcc_xo_mmpll0_1_gpll1_0_map[] = {
101 static const char * const mmcc_xo_mmpll0_1_gpll1_0[] = {
109 static const struct parent_map mmcc_xo_dsi_hdmi_edp_map[] = {
118 static const char * const mmcc_xo_dsi_hdmi_edp[] = {
127 static const struct parent_map mmcc_xo_dsi_hdmi_edp_gpll0_map[] = {
136 static const char * const mmcc_xo_dsi_hdmi_edp_gpll0[] = {
145 static const struct parent_map mmcc_xo_dsibyte_hdmi_edp_gpll0_map[] = {
150 { P_DSI0PLL_BYTE, 1 },
151 { P_DSI1PLL_BYTE, 2 }
154 static const char * const mmcc_xo_dsibyte_hdmi_edp_gpll0[] = {
163 static struct clk_pll mmpll0 = {
167 .config_reg = 0x0014,
169 .status_reg = 0x001c,
171 .clkr.hw.init = &(struct clk_init_data){
173 .parent_names = (const char *[]){ "xo" },
179 static struct clk_regmap mmpll0_vote = {
180 .enable_reg = 0x0100,
181 .enable_mask = BIT(0),
182 .hw.init = &(struct clk_init_data){
183 .name = "mmpll0_vote",
184 .parent_names = (const char *[]){ "mmpll0" },
186 .ops = &clk_pll_vote_ops,
190 static struct clk_pll mmpll1 = {
194 .config_reg = 0x0050,
196 .status_reg = 0x005c,
198 .clkr.hw.init = &(struct clk_init_data){
200 .parent_names = (const char *[]){ "xo" },
206 static struct clk_regmap mmpll1_vote = {
207 .enable_reg = 0x0100,
208 .enable_mask = BIT(1),
209 .hw.init = &(struct clk_init_data){
210 .name = "mmpll1_vote",
211 .parent_names = (const char *[]){ "mmpll1" },
213 .ops = &clk_pll_vote_ops,
217 static struct clk_pll mmpll2 = {
221 .config_reg = 0x4110,
223 .status_reg = 0x411c,
224 .clkr.hw.init = &(struct clk_init_data){
226 .parent_names = (const char *[]){ "xo" },
232 static struct clk_pll mmpll3 = {
236 .config_reg = 0x0090,
238 .status_reg = 0x009c,
240 .clkr.hw.init = &(struct clk_init_data){
242 .parent_names = (const char *[]){ "xo" },
248 static struct clk_rcg2 mmss_ahb_clk_src = {
251 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
252 .clkr.hw.init = &(struct clk_init_data){
253 .name = "mmss_ahb_clk_src",
254 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
256 .ops = &clk_rcg2_ops,
260 static struct freq_tbl ftbl_mmss_axi_clk_msm8226[] = {
261 F(19200000, P_XO, 1, 0, 0),
262 F(37500000, P_GPLL0, 16, 0, 0),
263 F(50000000, P_GPLL0, 12, 0, 0),
264 F(75000000, P_GPLL0, 8, 0, 0),
265 F(100000000, P_GPLL0, 6, 0, 0),
266 F(150000000, P_GPLL0, 4, 0, 0),
267 F(200000000, P_MMPLL0, 4, 0, 0),
268 F(266666666, P_MMPLL0, 3, 0, 0),
272 static struct freq_tbl ftbl_mmss_axi_clk[] = {
273 F( 19200000, P_XO, 1, 0, 0),
274 F( 37500000, P_GPLL0, 16, 0, 0),
275 F( 50000000, P_GPLL0, 12, 0, 0),
276 F( 75000000, P_GPLL0, 8, 0, 0),
277 F(100000000, P_GPLL0, 6, 0, 0),
278 F(150000000, P_GPLL0, 4, 0, 0),
279 F(291750000, P_MMPLL1, 4, 0, 0),
280 F(400000000, P_MMPLL0, 2, 0, 0),
281 F(466800000, P_MMPLL1, 2.5, 0, 0),
284 static struct clk_rcg2 mmss_axi_clk_src = {
287 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
288 .freq_tbl = ftbl_mmss_axi_clk,
289 .clkr.hw.init = &(struct clk_init_data){
290 .name = "mmss_axi_clk_src",
291 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
293 .ops = &clk_rcg2_ops,
297 static struct freq_tbl ftbl_ocmemnoc_clk[] = {
298 F( 19200000, P_XO, 1, 0, 0),
299 F( 37500000, P_GPLL0, 16, 0, 0),
300 F( 50000000, P_GPLL0, 12, 0, 0),
301 F( 75000000, P_GPLL0, 8, 0, 0),
302 F(100000000, P_GPLL0, 6, 0, 0),
303 F(150000000, P_GPLL0, 4, 0, 0),
304 F(291750000, P_MMPLL1, 4, 0, 0),
305 F(400000000, P_MMPLL0, 2, 0, 0),
308 static struct clk_rcg2 ocmemnoc_clk_src = {
311 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
312 .freq_tbl = ftbl_ocmemnoc_clk,
313 .clkr.hw.init = &(struct clk_init_data){
314 .name = "ocmemnoc_clk_src",
315 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
317 .ops = &clk_rcg2_ops,
321 static struct freq_tbl ftbl_camss_csi0_3_clk[] = {
322 F(100000000, P_GPLL0, 6, 0, 0),
323 F(200000000, P_MMPLL0, 4, 0, 0),
327 static struct clk_rcg2 csi0_clk_src = {
330 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
331 .freq_tbl = ftbl_camss_csi0_3_clk,
332 .clkr.hw.init = &(struct clk_init_data){
333 .name = "csi0_clk_src",
334 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
336 .ops = &clk_rcg2_ops,
340 static struct clk_rcg2 csi1_clk_src = {
343 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
344 .freq_tbl = ftbl_camss_csi0_3_clk,
345 .clkr.hw.init = &(struct clk_init_data){
346 .name = "csi1_clk_src",
347 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
349 .ops = &clk_rcg2_ops,
353 static struct clk_rcg2 csi2_clk_src = {
356 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
357 .freq_tbl = ftbl_camss_csi0_3_clk,
358 .clkr.hw.init = &(struct clk_init_data){
359 .name = "csi2_clk_src",
360 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
362 .ops = &clk_rcg2_ops,
366 static struct clk_rcg2 csi3_clk_src = {
369 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
370 .freq_tbl = ftbl_camss_csi0_3_clk,
371 .clkr.hw.init = &(struct clk_init_data){
372 .name = "csi3_clk_src",
373 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
375 .ops = &clk_rcg2_ops,
379 static struct freq_tbl ftbl_camss_vfe_vfe0_clk_msm8226[] = {
380 F(37500000, P_GPLL0, 16, 0, 0),
381 F(50000000, P_GPLL0, 12, 0, 0),
382 F(60000000, P_GPLL0, 10, 0, 0),
383 F(80000000, P_GPLL0, 7.5, 0, 0),
384 F(100000000, P_GPLL0, 6, 0, 0),
385 F(109090000, P_GPLL0, 5.5, 0, 0),
386 F(133330000, P_GPLL0, 4.5, 0, 0),
387 F(150000000, P_GPLL0, 4, 0, 0),
388 F(200000000, P_GPLL0, 3, 0, 0),
389 F(228570000, P_MMPLL0, 3.5, 0, 0),
390 F(266670000, P_MMPLL0, 3, 0, 0),
391 F(320000000, P_MMPLL0, 2.5, 0, 0),
392 F(400000000, P_MMPLL0, 2, 0, 0),
396 static struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
397 F(37500000, P_GPLL0, 16, 0, 0),
398 F(50000000, P_GPLL0, 12, 0, 0),
399 F(60000000, P_GPLL0, 10, 0, 0),
400 F(80000000, P_GPLL0, 7.5, 0, 0),
401 F(100000000, P_GPLL0, 6, 0, 0),
402 F(109090000, P_GPLL0, 5.5, 0, 0),
403 F(133330000, P_GPLL0, 4.5, 0, 0),
404 F(200000000, P_GPLL0, 3, 0, 0),
405 F(228570000, P_MMPLL0, 3.5, 0, 0),
406 F(266670000, P_MMPLL0, 3, 0, 0),
407 F(320000000, P_MMPLL0, 2.5, 0, 0),
408 F(400000000, P_MMPLL0, 2, 0, 0),
409 F(465000000, P_MMPLL3, 2, 0, 0),
413 static struct clk_rcg2 vfe0_clk_src = {
416 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
417 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
418 .clkr.hw.init = &(struct clk_init_data){
419 .name = "vfe0_clk_src",
420 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
422 .ops = &clk_rcg2_ops,
426 static struct clk_rcg2 vfe1_clk_src = {
429 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
430 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
431 .clkr.hw.init = &(struct clk_init_data){
432 .name = "vfe1_clk_src",
433 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
435 .ops = &clk_rcg2_ops,
439 static struct freq_tbl ftbl_mdss_mdp_clk_msm8226[] = {
440 F(37500000, P_GPLL0, 16, 0, 0),
441 F(60000000, P_GPLL0, 10, 0, 0),
442 F(75000000, P_GPLL0, 8, 0, 0),
443 F(92310000, P_GPLL0, 6.5, 0, 0),
444 F(100000000, P_GPLL0, 6, 0, 0),
445 F(133330000, P_MMPLL0, 6, 0, 0),
446 F(177780000, P_MMPLL0, 4.5, 0, 0),
447 F(200000000, P_MMPLL0, 4, 0, 0),
451 static struct freq_tbl ftbl_mdss_mdp_clk[] = {
452 F(37500000, P_GPLL0, 16, 0, 0),
453 F(60000000, P_GPLL0, 10, 0, 0),
454 F(75000000, P_GPLL0, 8, 0, 0),
455 F(85710000, P_GPLL0, 7, 0, 0),
456 F(100000000, P_GPLL0, 6, 0, 0),
457 F(133330000, P_MMPLL0, 6, 0, 0),
458 F(160000000, P_MMPLL0, 5, 0, 0),
459 F(200000000, P_MMPLL0, 4, 0, 0),
460 F(228570000, P_MMPLL0, 3.5, 0, 0),
461 F(240000000, P_GPLL0, 2.5, 0, 0),
462 F(266670000, P_MMPLL0, 3, 0, 0),
463 F(320000000, P_MMPLL0, 2.5, 0, 0),
467 static struct clk_rcg2 mdp_clk_src = {
470 .parent_map = mmcc_xo_mmpll0_dsi_hdmi_gpll0_map,
471 .freq_tbl = ftbl_mdss_mdp_clk,
472 .clkr.hw.init = &(struct clk_init_data){
473 .name = "mdp_clk_src",
474 .parent_names = mmcc_xo_mmpll0_dsi_hdmi_gpll0,
476 .ops = &clk_rcg2_ops,
480 static struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
481 F(75000000, P_GPLL0, 8, 0, 0),
482 F(133330000, P_GPLL0, 4.5, 0, 0),
483 F(200000000, P_GPLL0, 3, 0, 0),
484 F(228570000, P_MMPLL0, 3.5, 0, 0),
485 F(266670000, P_MMPLL0, 3, 0, 0),
486 F(320000000, P_MMPLL0, 2.5, 0, 0),
490 static struct clk_rcg2 jpeg0_clk_src = {
493 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
494 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
495 .clkr.hw.init = &(struct clk_init_data){
496 .name = "jpeg0_clk_src",
497 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
499 .ops = &clk_rcg2_ops,
503 static struct clk_rcg2 jpeg1_clk_src = {
506 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
507 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
508 .clkr.hw.init = &(struct clk_init_data){
509 .name = "jpeg1_clk_src",
510 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
512 .ops = &clk_rcg2_ops,
516 static struct clk_rcg2 jpeg2_clk_src = {
519 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
520 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
521 .clkr.hw.init = &(struct clk_init_data){
522 .name = "jpeg2_clk_src",
523 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
525 .ops = &clk_rcg2_ops,
529 static struct clk_rcg2 pclk0_clk_src = {
533 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
534 .clkr.hw.init = &(struct clk_init_data){
535 .name = "pclk0_clk_src",
536 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
538 .ops = &clk_pixel_ops,
539 .flags = CLK_SET_RATE_PARENT,
543 static struct clk_rcg2 pclk1_clk_src = {
547 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
548 .clkr.hw.init = &(struct clk_init_data){
549 .name = "pclk1_clk_src",
550 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
552 .ops = &clk_pixel_ops,
553 .flags = CLK_SET_RATE_PARENT,
557 static struct freq_tbl ftbl_venus0_vcodec0_clk_msm8226[] = {
558 F(66700000, P_GPLL0, 9, 0, 0),
559 F(100000000, P_GPLL0, 6, 0, 0),
560 F(133330000, P_MMPLL0, 6, 0, 0),
561 F(160000000, P_MMPLL0, 5, 0, 0),
565 static struct freq_tbl ftbl_venus0_vcodec0_clk[] = {
566 F(50000000, P_GPLL0, 12, 0, 0),
567 F(100000000, P_GPLL0, 6, 0, 0),
568 F(133330000, P_MMPLL0, 6, 0, 0),
569 F(200000000, P_MMPLL0, 4, 0, 0),
570 F(266670000, P_MMPLL0, 3, 0, 0),
571 F(465000000, P_MMPLL3, 2, 0, 0),
575 static struct clk_rcg2 vcodec0_clk_src = {
579 .parent_map = mmcc_xo_mmpll0_1_3_gpll0_map,
580 .freq_tbl = ftbl_venus0_vcodec0_clk,
581 .clkr.hw.init = &(struct clk_init_data){
582 .name = "vcodec0_clk_src",
583 .parent_names = mmcc_xo_mmpll0_1_3_gpll0,
585 .ops = &clk_rcg2_ops,
589 static struct freq_tbl ftbl_camss_cci_cci_clk[] = {
590 F(19200000, P_XO, 1, 0, 0),
594 static struct clk_rcg2 cci_clk_src = {
597 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
598 .freq_tbl = ftbl_camss_cci_cci_clk,
599 .clkr.hw.init = &(struct clk_init_data){
600 .name = "cci_clk_src",
601 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
603 .ops = &clk_rcg2_ops,
607 static struct freq_tbl ftbl_camss_gp0_1_clk[] = {
608 F(10000, P_XO, 16, 1, 120),
609 F(24000, P_XO, 16, 1, 50),
610 F(6000000, P_GPLL0, 10, 1, 10),
611 F(12000000, P_GPLL0, 10, 1, 5),
612 F(13000000, P_GPLL0, 4, 13, 150),
613 F(24000000, P_GPLL0, 5, 1, 5),
617 static struct clk_rcg2 camss_gp0_clk_src = {
621 .parent_map = mmcc_xo_mmpll0_1_gpll1_0_map,
622 .freq_tbl = ftbl_camss_gp0_1_clk,
623 .clkr.hw.init = &(struct clk_init_data){
624 .name = "camss_gp0_clk_src",
625 .parent_names = mmcc_xo_mmpll0_1_gpll1_0,
627 .ops = &clk_rcg2_ops,
631 static struct clk_rcg2 camss_gp1_clk_src = {
635 .parent_map = mmcc_xo_mmpll0_1_gpll1_0_map,
636 .freq_tbl = ftbl_camss_gp0_1_clk,
637 .clkr.hw.init = &(struct clk_init_data){
638 .name = "camss_gp1_clk_src",
639 .parent_names = mmcc_xo_mmpll0_1_gpll1_0,
641 .ops = &clk_rcg2_ops,
645 static struct freq_tbl ftbl_camss_mclk0_3_clk_msm8226[] = {
646 F(19200000, P_XO, 1, 0, 0),
647 F(24000000, P_GPLL0, 5, 1, 5),
648 F(66670000, P_GPLL0, 9, 0, 0),
652 static struct freq_tbl ftbl_camss_mclk0_3_clk[] = {
653 F(4800000, P_XO, 4, 0, 0),
654 F(6000000, P_GPLL0, 10, 1, 10),
655 F(8000000, P_GPLL0, 15, 1, 5),
656 F(9600000, P_XO, 2, 0, 0),
657 F(16000000, P_GPLL0, 12.5, 1, 3),
658 F(19200000, P_XO, 1, 0, 0),
659 F(24000000, P_GPLL0, 5, 1, 5),
660 F(32000000, P_MMPLL0, 5, 1, 5),
661 F(48000000, P_GPLL0, 12.5, 0, 0),
662 F(64000000, P_MMPLL0, 12.5, 0, 0),
663 F(66670000, P_GPLL0, 9, 0, 0),
667 static struct clk_rcg2 mclk0_clk_src = {
670 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
671 .freq_tbl = ftbl_camss_mclk0_3_clk,
672 .clkr.hw.init = &(struct clk_init_data){
673 .name = "mclk0_clk_src",
674 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
676 .ops = &clk_rcg2_ops,
680 static struct clk_rcg2 mclk1_clk_src = {
683 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
684 .freq_tbl = ftbl_camss_mclk0_3_clk,
685 .clkr.hw.init = &(struct clk_init_data){
686 .name = "mclk1_clk_src",
687 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
689 .ops = &clk_rcg2_ops,
693 static struct clk_rcg2 mclk2_clk_src = {
696 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
697 .freq_tbl = ftbl_camss_mclk0_3_clk,
698 .clkr.hw.init = &(struct clk_init_data){
699 .name = "mclk2_clk_src",
700 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
702 .ops = &clk_rcg2_ops,
706 static struct clk_rcg2 mclk3_clk_src = {
709 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
710 .freq_tbl = ftbl_camss_mclk0_3_clk,
711 .clkr.hw.init = &(struct clk_init_data){
712 .name = "mclk3_clk_src",
713 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
715 .ops = &clk_rcg2_ops,
719 static struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
720 F(100000000, P_GPLL0, 6, 0, 0),
721 F(200000000, P_MMPLL0, 4, 0, 0),
725 static struct clk_rcg2 csi0phytimer_clk_src = {
728 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
729 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
730 .clkr.hw.init = &(struct clk_init_data){
731 .name = "csi0phytimer_clk_src",
732 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
734 .ops = &clk_rcg2_ops,
738 static struct clk_rcg2 csi1phytimer_clk_src = {
741 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
742 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
743 .clkr.hw.init = &(struct clk_init_data){
744 .name = "csi1phytimer_clk_src",
745 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
747 .ops = &clk_rcg2_ops,
751 static struct clk_rcg2 csi2phytimer_clk_src = {
754 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
755 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
756 .clkr.hw.init = &(struct clk_init_data){
757 .name = "csi2phytimer_clk_src",
758 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
760 .ops = &clk_rcg2_ops,
764 static struct freq_tbl ftbl_camss_vfe_cpp_clk_msm8226[] = {
765 F(133330000, P_GPLL0, 4.5, 0, 0),
766 F(150000000, P_GPLL0, 4, 0, 0),
767 F(266670000, P_MMPLL0, 3, 0, 0),
768 F(320000000, P_MMPLL0, 2.5, 0, 0),
769 F(400000000, P_MMPLL0, 2, 0, 0),
773 static struct freq_tbl ftbl_camss_vfe_cpp_clk[] = {
774 F(133330000, P_GPLL0, 4.5, 0, 0),
775 F(266670000, P_MMPLL0, 3, 0, 0),
776 F(320000000, P_MMPLL0, 2.5, 0, 0),
777 F(400000000, P_MMPLL0, 2, 0, 0),
778 F(465000000, P_MMPLL3, 2, 0, 0),
782 static struct clk_rcg2 cpp_clk_src = {
785 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
786 .freq_tbl = ftbl_camss_vfe_cpp_clk,
787 .clkr.hw.init = &(struct clk_init_data){
788 .name = "cpp_clk_src",
789 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
791 .ops = &clk_rcg2_ops,
795 static struct freq_tbl byte_freq_tbl[] = {
796 { .src = P_DSI0PLL_BYTE },
800 static struct clk_rcg2 byte0_clk_src = {
803 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
804 .freq_tbl = byte_freq_tbl,
805 .clkr.hw.init = &(struct clk_init_data){
806 .name = "byte0_clk_src",
807 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
809 .ops = &clk_byte2_ops,
810 .flags = CLK_SET_RATE_PARENT,
814 static struct clk_rcg2 byte1_clk_src = {
817 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
818 .freq_tbl = byte_freq_tbl,
819 .clkr.hw.init = &(struct clk_init_data){
820 .name = "byte1_clk_src",
821 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
823 .ops = &clk_byte2_ops,
824 .flags = CLK_SET_RATE_PARENT,
828 static struct freq_tbl ftbl_mdss_edpaux_clk[] = {
829 F(19200000, P_XO, 1, 0, 0),
833 static struct clk_rcg2 edpaux_clk_src = {
836 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
837 .freq_tbl = ftbl_mdss_edpaux_clk,
838 .clkr.hw.init = &(struct clk_init_data){
839 .name = "edpaux_clk_src",
840 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
842 .ops = &clk_rcg2_ops,
846 static struct freq_tbl ftbl_mdss_edplink_clk[] = {
847 F(135000000, P_EDPLINK, 2, 0, 0),
848 F(270000000, P_EDPLINK, 11, 0, 0),
852 static struct clk_rcg2 edplink_clk_src = {
855 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
856 .freq_tbl = ftbl_mdss_edplink_clk,
857 .clkr.hw.init = &(struct clk_init_data){
858 .name = "edplink_clk_src",
859 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
861 .ops = &clk_rcg2_ops,
862 .flags = CLK_SET_RATE_PARENT,
866 static struct freq_tbl edp_pixel_freq_tbl[] = {
871 static struct clk_rcg2 edppixel_clk_src = {
875 .parent_map = mmcc_xo_dsi_hdmi_edp_map,
876 .freq_tbl = edp_pixel_freq_tbl,
877 .clkr.hw.init = &(struct clk_init_data){
878 .name = "edppixel_clk_src",
879 .parent_names = mmcc_xo_dsi_hdmi_edp,
881 .ops = &clk_edp_pixel_ops,
885 static struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
886 F(19200000, P_XO, 1, 0, 0),
890 static struct clk_rcg2 esc0_clk_src = {
893 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
894 .freq_tbl = ftbl_mdss_esc0_1_clk,
895 .clkr.hw.init = &(struct clk_init_data){
896 .name = "esc0_clk_src",
897 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
899 .ops = &clk_rcg2_ops,
903 static struct clk_rcg2 esc1_clk_src = {
906 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
907 .freq_tbl = ftbl_mdss_esc0_1_clk,
908 .clkr.hw.init = &(struct clk_init_data){
909 .name = "esc1_clk_src",
910 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
912 .ops = &clk_rcg2_ops,
916 static struct freq_tbl extpclk_freq_tbl[] = {
917 { .src = P_HDMIPLL },
921 static struct clk_rcg2 extpclk_clk_src = {
924 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
925 .freq_tbl = extpclk_freq_tbl,
926 .clkr.hw.init = &(struct clk_init_data){
927 .name = "extpclk_clk_src",
928 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
930 .ops = &clk_byte_ops,
931 .flags = CLK_SET_RATE_PARENT,
935 static struct freq_tbl ftbl_mdss_hdmi_clk[] = {
936 F(19200000, P_XO, 1, 0, 0),
940 static struct clk_rcg2 hdmi_clk_src = {
943 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
944 .freq_tbl = ftbl_mdss_hdmi_clk,
945 .clkr.hw.init = &(struct clk_init_data){
946 .name = "hdmi_clk_src",
947 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
949 .ops = &clk_rcg2_ops,
953 static struct freq_tbl ftbl_mdss_vsync_clk[] = {
954 F(19200000, P_XO, 1, 0, 0),
958 static struct clk_rcg2 vsync_clk_src = {
961 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
962 .freq_tbl = ftbl_mdss_vsync_clk,
963 .clkr.hw.init = &(struct clk_init_data){
964 .name = "vsync_clk_src",
965 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
967 .ops = &clk_rcg2_ops,
971 static struct clk_branch camss_cci_cci_ahb_clk = {
974 .enable_reg = 0x3348,
975 .enable_mask = BIT(0),
976 .hw.init = &(struct clk_init_data){
977 .name = "camss_cci_cci_ahb_clk",
978 .parent_names = (const char *[]){
982 .ops = &clk_branch2_ops,
987 static struct clk_branch camss_cci_cci_clk = {
990 .enable_reg = 0x3344,
991 .enable_mask = BIT(0),
992 .hw.init = &(struct clk_init_data){
993 .name = "camss_cci_cci_clk",
994 .parent_names = (const char *[]){
998 .flags = CLK_SET_RATE_PARENT,
999 .ops = &clk_branch2_ops,
1004 static struct clk_branch camss_csi0_ahb_clk = {
1007 .enable_reg = 0x30bc,
1008 .enable_mask = BIT(0),
1009 .hw.init = &(struct clk_init_data){
1010 .name = "camss_csi0_ahb_clk",
1011 .parent_names = (const char *[]){
1015 .ops = &clk_branch2_ops,
1020 static struct clk_branch camss_csi0_clk = {
1023 .enable_reg = 0x30b4,
1024 .enable_mask = BIT(0),
1025 .hw.init = &(struct clk_init_data){
1026 .name = "camss_csi0_clk",
1027 .parent_names = (const char *[]){
1031 .flags = CLK_SET_RATE_PARENT,
1032 .ops = &clk_branch2_ops,
1037 static struct clk_branch camss_csi0phy_clk = {
1040 .enable_reg = 0x30c4,
1041 .enable_mask = BIT(0),
1042 .hw.init = &(struct clk_init_data){
1043 .name = "camss_csi0phy_clk",
1044 .parent_names = (const char *[]){
1048 .flags = CLK_SET_RATE_PARENT,
1049 .ops = &clk_branch2_ops,
1054 static struct clk_branch camss_csi0pix_clk = {
1057 .enable_reg = 0x30e4,
1058 .enable_mask = BIT(0),
1059 .hw.init = &(struct clk_init_data){
1060 .name = "camss_csi0pix_clk",
1061 .parent_names = (const char *[]){
1065 .flags = CLK_SET_RATE_PARENT,
1066 .ops = &clk_branch2_ops,
1071 static struct clk_branch camss_csi0rdi_clk = {
1074 .enable_reg = 0x30d4,
1075 .enable_mask = BIT(0),
1076 .hw.init = &(struct clk_init_data){
1077 .name = "camss_csi0rdi_clk",
1078 .parent_names = (const char *[]){
1082 .flags = CLK_SET_RATE_PARENT,
1083 .ops = &clk_branch2_ops,
1088 static struct clk_branch camss_csi1_ahb_clk = {
1091 .enable_reg = 0x3128,
1092 .enable_mask = BIT(0),
1093 .hw.init = &(struct clk_init_data){
1094 .name = "camss_csi1_ahb_clk",
1095 .parent_names = (const char *[]){
1099 .ops = &clk_branch2_ops,
1104 static struct clk_branch camss_csi1_clk = {
1107 .enable_reg = 0x3124,
1108 .enable_mask = BIT(0),
1109 .hw.init = &(struct clk_init_data){
1110 .name = "camss_csi1_clk",
1111 .parent_names = (const char *[]){
1115 .flags = CLK_SET_RATE_PARENT,
1116 .ops = &clk_branch2_ops,
1121 static struct clk_branch camss_csi1phy_clk = {
1124 .enable_reg = 0x3134,
1125 .enable_mask = BIT(0),
1126 .hw.init = &(struct clk_init_data){
1127 .name = "camss_csi1phy_clk",
1128 .parent_names = (const char *[]){
1132 .flags = CLK_SET_RATE_PARENT,
1133 .ops = &clk_branch2_ops,
1138 static struct clk_branch camss_csi1pix_clk = {
1141 .enable_reg = 0x3154,
1142 .enable_mask = BIT(0),
1143 .hw.init = &(struct clk_init_data){
1144 .name = "camss_csi1pix_clk",
1145 .parent_names = (const char *[]){
1149 .flags = CLK_SET_RATE_PARENT,
1150 .ops = &clk_branch2_ops,
1155 static struct clk_branch camss_csi1rdi_clk = {
1158 .enable_reg = 0x3144,
1159 .enable_mask = BIT(0),
1160 .hw.init = &(struct clk_init_data){
1161 .name = "camss_csi1rdi_clk",
1162 .parent_names = (const char *[]){
1166 .flags = CLK_SET_RATE_PARENT,
1167 .ops = &clk_branch2_ops,
1172 static struct clk_branch camss_csi2_ahb_clk = {
1175 .enable_reg = 0x3188,
1176 .enable_mask = BIT(0),
1177 .hw.init = &(struct clk_init_data){
1178 .name = "camss_csi2_ahb_clk",
1179 .parent_names = (const char *[]){
1183 .ops = &clk_branch2_ops,
1188 static struct clk_branch camss_csi2_clk = {
1191 .enable_reg = 0x3184,
1192 .enable_mask = BIT(0),
1193 .hw.init = &(struct clk_init_data){
1194 .name = "camss_csi2_clk",
1195 .parent_names = (const char *[]){
1199 .flags = CLK_SET_RATE_PARENT,
1200 .ops = &clk_branch2_ops,
1205 static struct clk_branch camss_csi2phy_clk = {
1208 .enable_reg = 0x3194,
1209 .enable_mask = BIT(0),
1210 .hw.init = &(struct clk_init_data){
1211 .name = "camss_csi2phy_clk",
1212 .parent_names = (const char *[]){
1216 .flags = CLK_SET_RATE_PARENT,
1217 .ops = &clk_branch2_ops,
1222 static struct clk_branch camss_csi2pix_clk = {
1225 .enable_reg = 0x31b4,
1226 .enable_mask = BIT(0),
1227 .hw.init = &(struct clk_init_data){
1228 .name = "camss_csi2pix_clk",
1229 .parent_names = (const char *[]){
1233 .flags = CLK_SET_RATE_PARENT,
1234 .ops = &clk_branch2_ops,
1239 static struct clk_branch camss_csi2rdi_clk = {
1242 .enable_reg = 0x31a4,
1243 .enable_mask = BIT(0),
1244 .hw.init = &(struct clk_init_data){
1245 .name = "camss_csi2rdi_clk",
1246 .parent_names = (const char *[]){
1250 .flags = CLK_SET_RATE_PARENT,
1251 .ops = &clk_branch2_ops,
1256 static struct clk_branch camss_csi3_ahb_clk = {
1259 .enable_reg = 0x31e8,
1260 .enable_mask = BIT(0),
1261 .hw.init = &(struct clk_init_data){
1262 .name = "camss_csi3_ahb_clk",
1263 .parent_names = (const char *[]){
1267 .ops = &clk_branch2_ops,
1272 static struct clk_branch camss_csi3_clk = {
1275 .enable_reg = 0x31e4,
1276 .enable_mask = BIT(0),
1277 .hw.init = &(struct clk_init_data){
1278 .name = "camss_csi3_clk",
1279 .parent_names = (const char *[]){
1283 .flags = CLK_SET_RATE_PARENT,
1284 .ops = &clk_branch2_ops,
1289 static struct clk_branch camss_csi3phy_clk = {
1292 .enable_reg = 0x31f4,
1293 .enable_mask = BIT(0),
1294 .hw.init = &(struct clk_init_data){
1295 .name = "camss_csi3phy_clk",
1296 .parent_names = (const char *[]){
1300 .flags = CLK_SET_RATE_PARENT,
1301 .ops = &clk_branch2_ops,
1306 static struct clk_branch camss_csi3pix_clk = {
1309 .enable_reg = 0x3214,
1310 .enable_mask = BIT(0),
1311 .hw.init = &(struct clk_init_data){
1312 .name = "camss_csi3pix_clk",
1313 .parent_names = (const char *[]){
1317 .flags = CLK_SET_RATE_PARENT,
1318 .ops = &clk_branch2_ops,
1323 static struct clk_branch camss_csi3rdi_clk = {
1326 .enable_reg = 0x3204,
1327 .enable_mask = BIT(0),
1328 .hw.init = &(struct clk_init_data){
1329 .name = "camss_csi3rdi_clk",
1330 .parent_names = (const char *[]){
1334 .flags = CLK_SET_RATE_PARENT,
1335 .ops = &clk_branch2_ops,
1340 static struct clk_branch camss_csi_vfe0_clk = {
1343 .enable_reg = 0x3704,
1344 .enable_mask = BIT(0),
1345 .hw.init = &(struct clk_init_data){
1346 .name = "camss_csi_vfe0_clk",
1347 .parent_names = (const char *[]){
1351 .flags = CLK_SET_RATE_PARENT,
1352 .ops = &clk_branch2_ops,
1357 static struct clk_branch camss_csi_vfe1_clk = {
1360 .enable_reg = 0x3714,
1361 .enable_mask = BIT(0),
1362 .hw.init = &(struct clk_init_data){
1363 .name = "camss_csi_vfe1_clk",
1364 .parent_names = (const char *[]){
1368 .flags = CLK_SET_RATE_PARENT,
1369 .ops = &clk_branch2_ops,
1374 static struct clk_branch camss_gp0_clk = {
1377 .enable_reg = 0x3444,
1378 .enable_mask = BIT(0),
1379 .hw.init = &(struct clk_init_data){
1380 .name = "camss_gp0_clk",
1381 .parent_names = (const char *[]){
1382 "camss_gp0_clk_src",
1385 .flags = CLK_SET_RATE_PARENT,
1386 .ops = &clk_branch2_ops,
1391 static struct clk_branch camss_gp1_clk = {
1394 .enable_reg = 0x3474,
1395 .enable_mask = BIT(0),
1396 .hw.init = &(struct clk_init_data){
1397 .name = "camss_gp1_clk",
1398 .parent_names = (const char *[]){
1399 "camss_gp1_clk_src",
1402 .flags = CLK_SET_RATE_PARENT,
1403 .ops = &clk_branch2_ops,
1408 static struct clk_branch camss_ispif_ahb_clk = {
1411 .enable_reg = 0x3224,
1412 .enable_mask = BIT(0),
1413 .hw.init = &(struct clk_init_data){
1414 .name = "camss_ispif_ahb_clk",
1415 .parent_names = (const char *[]){
1419 .ops = &clk_branch2_ops,
1424 static struct clk_branch camss_jpeg_jpeg0_clk = {
1427 .enable_reg = 0x35a8,
1428 .enable_mask = BIT(0),
1429 .hw.init = &(struct clk_init_data){
1430 .name = "camss_jpeg_jpeg0_clk",
1431 .parent_names = (const char *[]){
1435 .flags = CLK_SET_RATE_PARENT,
1436 .ops = &clk_branch2_ops,
1441 static struct clk_branch camss_jpeg_jpeg1_clk = {
1444 .enable_reg = 0x35ac,
1445 .enable_mask = BIT(0),
1446 .hw.init = &(struct clk_init_data){
1447 .name = "camss_jpeg_jpeg1_clk",
1448 .parent_names = (const char *[]){
1452 .flags = CLK_SET_RATE_PARENT,
1453 .ops = &clk_branch2_ops,
1458 static struct clk_branch camss_jpeg_jpeg2_clk = {
1461 .enable_reg = 0x35b0,
1462 .enable_mask = BIT(0),
1463 .hw.init = &(struct clk_init_data){
1464 .name = "camss_jpeg_jpeg2_clk",
1465 .parent_names = (const char *[]){
1469 .flags = CLK_SET_RATE_PARENT,
1470 .ops = &clk_branch2_ops,
1475 static struct clk_branch camss_jpeg_jpeg_ahb_clk = {
1478 .enable_reg = 0x35b4,
1479 .enable_mask = BIT(0),
1480 .hw.init = &(struct clk_init_data){
1481 .name = "camss_jpeg_jpeg_ahb_clk",
1482 .parent_names = (const char *[]){
1486 .ops = &clk_branch2_ops,
1491 static struct clk_branch camss_jpeg_jpeg_axi_clk = {
1494 .enable_reg = 0x35b8,
1495 .enable_mask = BIT(0),
1496 .hw.init = &(struct clk_init_data){
1497 .name = "camss_jpeg_jpeg_axi_clk",
1498 .parent_names = (const char *[]){
1502 .ops = &clk_branch2_ops,
1507 static struct clk_branch camss_jpeg_jpeg_ocmemnoc_clk = {
1510 .enable_reg = 0x35bc,
1511 .enable_mask = BIT(0),
1512 .hw.init = &(struct clk_init_data){
1513 .name = "camss_jpeg_jpeg_ocmemnoc_clk",
1514 .parent_names = (const char *[]){
1518 .flags = CLK_SET_RATE_PARENT,
1519 .ops = &clk_branch2_ops,
1524 static struct clk_branch camss_mclk0_clk = {
1527 .enable_reg = 0x3384,
1528 .enable_mask = BIT(0),
1529 .hw.init = &(struct clk_init_data){
1530 .name = "camss_mclk0_clk",
1531 .parent_names = (const char *[]){
1535 .flags = CLK_SET_RATE_PARENT,
1536 .ops = &clk_branch2_ops,
1541 static struct clk_branch camss_mclk1_clk = {
1544 .enable_reg = 0x33b4,
1545 .enable_mask = BIT(0),
1546 .hw.init = &(struct clk_init_data){
1547 .name = "camss_mclk1_clk",
1548 .parent_names = (const char *[]){
1552 .flags = CLK_SET_RATE_PARENT,
1553 .ops = &clk_branch2_ops,
1558 static struct clk_branch camss_mclk2_clk = {
1561 .enable_reg = 0x33e4,
1562 .enable_mask = BIT(0),
1563 .hw.init = &(struct clk_init_data){
1564 .name = "camss_mclk2_clk",
1565 .parent_names = (const char *[]){
1569 .flags = CLK_SET_RATE_PARENT,
1570 .ops = &clk_branch2_ops,
1575 static struct clk_branch camss_mclk3_clk = {
1578 .enable_reg = 0x3414,
1579 .enable_mask = BIT(0),
1580 .hw.init = &(struct clk_init_data){
1581 .name = "camss_mclk3_clk",
1582 .parent_names = (const char *[]){
1586 .flags = CLK_SET_RATE_PARENT,
1587 .ops = &clk_branch2_ops,
1592 static struct clk_branch camss_micro_ahb_clk = {
1595 .enable_reg = 0x3494,
1596 .enable_mask = BIT(0),
1597 .hw.init = &(struct clk_init_data){
1598 .name = "camss_micro_ahb_clk",
1599 .parent_names = (const char *[]){
1603 .ops = &clk_branch2_ops,
1608 static struct clk_branch camss_phy0_csi0phytimer_clk = {
1611 .enable_reg = 0x3024,
1612 .enable_mask = BIT(0),
1613 .hw.init = &(struct clk_init_data){
1614 .name = "camss_phy0_csi0phytimer_clk",
1615 .parent_names = (const char *[]){
1616 "csi0phytimer_clk_src",
1619 .flags = CLK_SET_RATE_PARENT,
1620 .ops = &clk_branch2_ops,
1625 static struct clk_branch camss_phy1_csi1phytimer_clk = {
1628 .enable_reg = 0x3054,
1629 .enable_mask = BIT(0),
1630 .hw.init = &(struct clk_init_data){
1631 .name = "camss_phy1_csi1phytimer_clk",
1632 .parent_names = (const char *[]){
1633 "csi1phytimer_clk_src",
1636 .flags = CLK_SET_RATE_PARENT,
1637 .ops = &clk_branch2_ops,
1642 static struct clk_branch camss_phy2_csi2phytimer_clk = {
1645 .enable_reg = 0x3084,
1646 .enable_mask = BIT(0),
1647 .hw.init = &(struct clk_init_data){
1648 .name = "camss_phy2_csi2phytimer_clk",
1649 .parent_names = (const char *[]){
1650 "csi2phytimer_clk_src",
1653 .flags = CLK_SET_RATE_PARENT,
1654 .ops = &clk_branch2_ops,
1659 static struct clk_branch camss_top_ahb_clk = {
1662 .enable_reg = 0x3484,
1663 .enable_mask = BIT(0),
1664 .hw.init = &(struct clk_init_data){
1665 .name = "camss_top_ahb_clk",
1666 .parent_names = (const char *[]){
1670 .ops = &clk_branch2_ops,
1675 static struct clk_branch camss_vfe_cpp_ahb_clk = {
1678 .enable_reg = 0x36b4,
1679 .enable_mask = BIT(0),
1680 .hw.init = &(struct clk_init_data){
1681 .name = "camss_vfe_cpp_ahb_clk",
1682 .parent_names = (const char *[]){
1686 .ops = &clk_branch2_ops,
1691 static struct clk_branch camss_vfe_cpp_clk = {
1694 .enable_reg = 0x36b0,
1695 .enable_mask = BIT(0),
1696 .hw.init = &(struct clk_init_data){
1697 .name = "camss_vfe_cpp_clk",
1698 .parent_names = (const char *[]){
1702 .flags = CLK_SET_RATE_PARENT,
1703 .ops = &clk_branch2_ops,
1708 static struct clk_branch camss_vfe_vfe0_clk = {
1711 .enable_reg = 0x36a8,
1712 .enable_mask = BIT(0),
1713 .hw.init = &(struct clk_init_data){
1714 .name = "camss_vfe_vfe0_clk",
1715 .parent_names = (const char *[]){
1719 .flags = CLK_SET_RATE_PARENT,
1720 .ops = &clk_branch2_ops,
1725 static struct clk_branch camss_vfe_vfe1_clk = {
1728 .enable_reg = 0x36ac,
1729 .enable_mask = BIT(0),
1730 .hw.init = &(struct clk_init_data){
1731 .name = "camss_vfe_vfe1_clk",
1732 .parent_names = (const char *[]){
1736 .flags = CLK_SET_RATE_PARENT,
1737 .ops = &clk_branch2_ops,
1742 static struct clk_branch camss_vfe_vfe_ahb_clk = {
1745 .enable_reg = 0x36b8,
1746 .enable_mask = BIT(0),
1747 .hw.init = &(struct clk_init_data){
1748 .name = "camss_vfe_vfe_ahb_clk",
1749 .parent_names = (const char *[]){
1753 .ops = &clk_branch2_ops,
1758 static struct clk_branch camss_vfe_vfe_axi_clk = {
1761 .enable_reg = 0x36bc,
1762 .enable_mask = BIT(0),
1763 .hw.init = &(struct clk_init_data){
1764 .name = "camss_vfe_vfe_axi_clk",
1765 .parent_names = (const char *[]){
1769 .ops = &clk_branch2_ops,
1774 static struct clk_branch camss_vfe_vfe_ocmemnoc_clk = {
1777 .enable_reg = 0x36c0,
1778 .enable_mask = BIT(0),
1779 .hw.init = &(struct clk_init_data){
1780 .name = "camss_vfe_vfe_ocmemnoc_clk",
1781 .parent_names = (const char *[]){
1785 .flags = CLK_SET_RATE_PARENT,
1786 .ops = &clk_branch2_ops,
1791 static struct clk_branch mdss_ahb_clk = {
1794 .enable_reg = 0x2308,
1795 .enable_mask = BIT(0),
1796 .hw.init = &(struct clk_init_data){
1797 .name = "mdss_ahb_clk",
1798 .parent_names = (const char *[]){
1802 .ops = &clk_branch2_ops,
1807 static struct clk_branch mdss_axi_clk = {
1810 .enable_reg = 0x2310,
1811 .enable_mask = BIT(0),
1812 .hw.init = &(struct clk_init_data){
1813 .name = "mdss_axi_clk",
1814 .parent_names = (const char *[]){
1818 .flags = CLK_SET_RATE_PARENT,
1819 .ops = &clk_branch2_ops,
1824 static struct clk_branch mdss_byte0_clk = {
1827 .enable_reg = 0x233c,
1828 .enable_mask = BIT(0),
1829 .hw.init = &(struct clk_init_data){
1830 .name = "mdss_byte0_clk",
1831 .parent_names = (const char *[]){
1835 .flags = CLK_SET_RATE_PARENT,
1836 .ops = &clk_branch2_ops,
1841 static struct clk_branch mdss_byte1_clk = {
1844 .enable_reg = 0x2340,
1845 .enable_mask = BIT(0),
1846 .hw.init = &(struct clk_init_data){
1847 .name = "mdss_byte1_clk",
1848 .parent_names = (const char *[]){
1852 .flags = CLK_SET_RATE_PARENT,
1853 .ops = &clk_branch2_ops,
1858 static struct clk_branch mdss_edpaux_clk = {
1861 .enable_reg = 0x2334,
1862 .enable_mask = BIT(0),
1863 .hw.init = &(struct clk_init_data){
1864 .name = "mdss_edpaux_clk",
1865 .parent_names = (const char *[]){
1869 .flags = CLK_SET_RATE_PARENT,
1870 .ops = &clk_branch2_ops,
1875 static struct clk_branch mdss_edplink_clk = {
1878 .enable_reg = 0x2330,
1879 .enable_mask = BIT(0),
1880 .hw.init = &(struct clk_init_data){
1881 .name = "mdss_edplink_clk",
1882 .parent_names = (const char *[]){
1886 .flags = CLK_SET_RATE_PARENT,
1887 .ops = &clk_branch2_ops,
1892 static struct clk_branch mdss_edppixel_clk = {
1895 .enable_reg = 0x232c,
1896 .enable_mask = BIT(0),
1897 .hw.init = &(struct clk_init_data){
1898 .name = "mdss_edppixel_clk",
1899 .parent_names = (const char *[]){
1903 .flags = CLK_SET_RATE_PARENT,
1904 .ops = &clk_branch2_ops,
1909 static struct clk_branch mdss_esc0_clk = {
1912 .enable_reg = 0x2344,
1913 .enable_mask = BIT(0),
1914 .hw.init = &(struct clk_init_data){
1915 .name = "mdss_esc0_clk",
1916 .parent_names = (const char *[]){
1920 .flags = CLK_SET_RATE_PARENT,
1921 .ops = &clk_branch2_ops,
1926 static struct clk_branch mdss_esc1_clk = {
1929 .enable_reg = 0x2348,
1930 .enable_mask = BIT(0),
1931 .hw.init = &(struct clk_init_data){
1932 .name = "mdss_esc1_clk",
1933 .parent_names = (const char *[]){
1937 .flags = CLK_SET_RATE_PARENT,
1938 .ops = &clk_branch2_ops,
1943 static struct clk_branch mdss_extpclk_clk = {
1946 .enable_reg = 0x2324,
1947 .enable_mask = BIT(0),
1948 .hw.init = &(struct clk_init_data){
1949 .name = "mdss_extpclk_clk",
1950 .parent_names = (const char *[]){
1954 .flags = CLK_SET_RATE_PARENT,
1955 .ops = &clk_branch2_ops,
1960 static struct clk_branch mdss_hdmi_ahb_clk = {
1963 .enable_reg = 0x230c,
1964 .enable_mask = BIT(0),
1965 .hw.init = &(struct clk_init_data){
1966 .name = "mdss_hdmi_ahb_clk",
1967 .parent_names = (const char *[]){
1971 .ops = &clk_branch2_ops,
1976 static struct clk_branch mdss_hdmi_clk = {
1979 .enable_reg = 0x2338,
1980 .enable_mask = BIT(0),
1981 .hw.init = &(struct clk_init_data){
1982 .name = "mdss_hdmi_clk",
1983 .parent_names = (const char *[]){
1987 .flags = CLK_SET_RATE_PARENT,
1988 .ops = &clk_branch2_ops,
1993 static struct clk_branch mdss_mdp_clk = {
1996 .enable_reg = 0x231c,
1997 .enable_mask = BIT(0),
1998 .hw.init = &(struct clk_init_data){
1999 .name = "mdss_mdp_clk",
2000 .parent_names = (const char *[]){
2004 .flags = CLK_SET_RATE_PARENT,
2005 .ops = &clk_branch2_ops,
2010 static struct clk_branch mdss_mdp_lut_clk = {
2013 .enable_reg = 0x2320,
2014 .enable_mask = BIT(0),
2015 .hw.init = &(struct clk_init_data){
2016 .name = "mdss_mdp_lut_clk",
2017 .parent_names = (const char *[]){
2021 .flags = CLK_SET_RATE_PARENT,
2022 .ops = &clk_branch2_ops,
2027 static struct clk_branch mdss_pclk0_clk = {
2030 .enable_reg = 0x2314,
2031 .enable_mask = BIT(0),
2032 .hw.init = &(struct clk_init_data){
2033 .name = "mdss_pclk0_clk",
2034 .parent_names = (const char *[]){
2038 .flags = CLK_SET_RATE_PARENT,
2039 .ops = &clk_branch2_ops,
2044 static struct clk_branch mdss_pclk1_clk = {
2047 .enable_reg = 0x2318,
2048 .enable_mask = BIT(0),
2049 .hw.init = &(struct clk_init_data){
2050 .name = "mdss_pclk1_clk",
2051 .parent_names = (const char *[]){
2055 .flags = CLK_SET_RATE_PARENT,
2056 .ops = &clk_branch2_ops,
2061 static struct clk_branch mdss_vsync_clk = {
2064 .enable_reg = 0x2328,
2065 .enable_mask = BIT(0),
2066 .hw.init = &(struct clk_init_data){
2067 .name = "mdss_vsync_clk",
2068 .parent_names = (const char *[]){
2072 .flags = CLK_SET_RATE_PARENT,
2073 .ops = &clk_branch2_ops,
2078 static struct clk_branch mmss_misc_ahb_clk = {
2081 .enable_reg = 0x502c,
2082 .enable_mask = BIT(0),
2083 .hw.init = &(struct clk_init_data){
2084 .name = "mmss_misc_ahb_clk",
2085 .parent_names = (const char *[]){
2089 .ops = &clk_branch2_ops,
2094 static struct clk_branch mmss_mmssnoc_ahb_clk = {
2097 .enable_reg = 0x5024,
2098 .enable_mask = BIT(0),
2099 .hw.init = &(struct clk_init_data){
2100 .name = "mmss_mmssnoc_ahb_clk",
2101 .parent_names = (const char *[]){
2105 .ops = &clk_branch2_ops,
2106 .flags = CLK_IGNORE_UNUSED,
2111 static struct clk_branch mmss_mmssnoc_bto_ahb_clk = {
2114 .enable_reg = 0x5028,
2115 .enable_mask = BIT(0),
2116 .hw.init = &(struct clk_init_data){
2117 .name = "mmss_mmssnoc_bto_ahb_clk",
2118 .parent_names = (const char *[]){
2122 .ops = &clk_branch2_ops,
2123 .flags = CLK_IGNORE_UNUSED,
2128 static struct clk_branch mmss_mmssnoc_axi_clk = {
2131 .enable_reg = 0x506c,
2132 .enable_mask = BIT(0),
2133 .hw.init = &(struct clk_init_data){
2134 .name = "mmss_mmssnoc_axi_clk",
2135 .parent_names = (const char *[]){
2139 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2140 .ops = &clk_branch2_ops,
2145 static struct clk_branch mmss_s0_axi_clk = {
2148 .enable_reg = 0x5064,
2149 .enable_mask = BIT(0),
2150 .hw.init = &(struct clk_init_data){
2151 .name = "mmss_s0_axi_clk",
2152 .parent_names = (const char *[]){
2156 .ops = &clk_branch2_ops,
2157 .flags = CLK_IGNORE_UNUSED,
2162 static struct clk_branch ocmemcx_ahb_clk = {
2165 .enable_reg = 0x405c,
2166 .enable_mask = BIT(0),
2167 .hw.init = &(struct clk_init_data){
2168 .name = "ocmemcx_ahb_clk",
2169 .parent_names = (const char *[]){
2173 .ops = &clk_branch2_ops,
2178 static struct clk_branch ocmemcx_ocmemnoc_clk = {
2181 .enable_reg = 0x4058,
2182 .enable_mask = BIT(0),
2183 .hw.init = &(struct clk_init_data){
2184 .name = "ocmemcx_ocmemnoc_clk",
2185 .parent_names = (const char *[]){
2189 .flags = CLK_SET_RATE_PARENT,
2190 .ops = &clk_branch2_ops,
2195 static struct clk_branch oxili_ocmemgx_clk = {
2198 .enable_reg = 0x402c,
2199 .enable_mask = BIT(0),
2200 .hw.init = &(struct clk_init_data){
2201 .name = "oxili_ocmemgx_clk",
2202 .parent_names = (const char *[]){
2206 .flags = CLK_SET_RATE_PARENT,
2207 .ops = &clk_branch2_ops,
2212 static struct clk_branch ocmemnoc_clk = {
2215 .enable_reg = 0x50b4,
2216 .enable_mask = BIT(0),
2217 .hw.init = &(struct clk_init_data){
2218 .name = "ocmemnoc_clk",
2219 .parent_names = (const char *[]){
2223 .flags = CLK_SET_RATE_PARENT,
2224 .ops = &clk_branch2_ops,
2229 static struct clk_branch oxili_gfx3d_clk = {
2232 .enable_reg = 0x4028,
2233 .enable_mask = BIT(0),
2234 .hw.init = &(struct clk_init_data){
2235 .name = "oxili_gfx3d_clk",
2236 .parent_names = (const char *[]){
2240 .flags = CLK_SET_RATE_PARENT,
2241 .ops = &clk_branch2_ops,
2246 static struct clk_branch oxilicx_ahb_clk = {
2249 .enable_reg = 0x403c,
2250 .enable_mask = BIT(0),
2251 .hw.init = &(struct clk_init_data){
2252 .name = "oxilicx_ahb_clk",
2253 .parent_names = (const char *[]){
2257 .ops = &clk_branch2_ops,
2262 static struct clk_branch oxilicx_axi_clk = {
2265 .enable_reg = 0x4038,
2266 .enable_mask = BIT(0),
2267 .hw.init = &(struct clk_init_data){
2268 .name = "oxilicx_axi_clk",
2269 .parent_names = (const char *[]){
2273 .ops = &clk_branch2_ops,
2278 static struct clk_branch venus0_ahb_clk = {
2281 .enable_reg = 0x1030,
2282 .enable_mask = BIT(0),
2283 .hw.init = &(struct clk_init_data){
2284 .name = "venus0_ahb_clk",
2285 .parent_names = (const char *[]){
2289 .ops = &clk_branch2_ops,
2294 static struct clk_branch venus0_axi_clk = {
2297 .enable_reg = 0x1034,
2298 .enable_mask = BIT(0),
2299 .hw.init = &(struct clk_init_data){
2300 .name = "venus0_axi_clk",
2301 .parent_names = (const char *[]){
2305 .ops = &clk_branch2_ops,
2310 static struct clk_branch venus0_ocmemnoc_clk = {
2313 .enable_reg = 0x1038,
2314 .enable_mask = BIT(0),
2315 .hw.init = &(struct clk_init_data){
2316 .name = "venus0_ocmemnoc_clk",
2317 .parent_names = (const char *[]){
2321 .flags = CLK_SET_RATE_PARENT,
2322 .ops = &clk_branch2_ops,
2327 static struct clk_branch venus0_vcodec0_clk = {
2330 .enable_reg = 0x1028,
2331 .enable_mask = BIT(0),
2332 .hw.init = &(struct clk_init_data){
2333 .name = "venus0_vcodec0_clk",
2334 .parent_names = (const char *[]){
2338 .flags = CLK_SET_RATE_PARENT,
2339 .ops = &clk_branch2_ops,
2344 static const struct pll_config mmpll1_config = {
2349 .vco_mask = 0x3 << 20,
2351 .pre_div_mask = 0x7 << 12,
2352 .post_div_val = 0x0,
2353 .post_div_mask = 0x3 << 8,
2354 .mn_ena_mask = BIT(24),
2355 .main_output_mask = BIT(0),
2358 static struct pll_config mmpll3_config = {
2363 .vco_mask = 0x3 << 20,
2365 .pre_div_mask = 0x7 << 12,
2366 .post_div_val = 0x0,
2367 .post_div_mask = 0x3 << 8,
2368 .mn_ena_mask = BIT(24),
2369 .main_output_mask = BIT(0),
2370 .aux_output_mask = BIT(1),
2373 static struct gdsc venus0_gdsc = {
2375 .cxcs = (unsigned int []){ 0x1028 },
2377 .resets = (unsigned int []){ VENUS0_RESET },
2382 .pwrsts = PWRSTS_ON,
2385 static struct gdsc mdss_gdsc = {
2387 .cxcs = (unsigned int []){ 0x231c, 0x2320 },
2392 .pwrsts = PWRSTS_RET_ON,
2395 static struct gdsc camss_jpeg_gdsc = {
2397 .cxcs = (unsigned int []){ 0x35a8, 0x35ac, 0x35b0 },
2400 .name = "camss_jpeg",
2402 .pwrsts = PWRSTS_OFF_ON,
2405 static struct gdsc camss_vfe_gdsc = {
2407 .cxcs = (unsigned int []){ 0x36a8, 0x36ac, 0x3704, 0x3714, 0x36b0 },
2410 .name = "camss_vfe",
2412 .pwrsts = PWRSTS_OFF_ON,
2415 static struct gdsc oxili_gdsc = {
2417 .cxcs = (unsigned int []){ 0x4028 },
2422 .pwrsts = PWRSTS_OFF_ON,
2425 static struct gdsc oxilicx_gdsc = {
2430 .parent = &oxili_gdsc.pd,
2431 .pwrsts = PWRSTS_OFF_ON,
2434 static struct clk_regmap *mmcc_msm8226_clocks[] = {
2435 [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr,
2436 [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr,
2437 [MMPLL0] = &mmpll0.clkr,
2438 [MMPLL0_VOTE] = &mmpll0_vote,
2439 [MMPLL1] = &mmpll1.clkr,
2440 [MMPLL1_VOTE] = &mmpll1_vote,
2441 [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
2442 [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
2443 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
2444 [MDP_CLK_SRC] = &mdp_clk_src.clkr,
2445 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
2446 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2447 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
2448 [CCI_CLK_SRC] = &cci_clk_src.clkr,
2449 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
2450 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
2451 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
2452 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
2453 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
2454 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
2455 [CPP_CLK_SRC] = &cpp_clk_src.clkr,
2456 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2457 [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2458 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2459 [CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr,
2460 [CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr,
2461 [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
2462 [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
2463 [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
2464 [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
2465 [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
2466 [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
2467 [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
2468 [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
2469 [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
2470 [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
2471 [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
2472 [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
2473 [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
2474 [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
2475 [CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr,
2476 [CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr,
2477 [CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr,
2478 [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
2479 [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
2480 [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
2481 [CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr,
2482 [CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr,
2483 [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
2484 [CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr,
2485 [CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr,
2486 [CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr,
2487 [CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr,
2488 [CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr,
2489 [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
2490 [MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
2491 [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
2492 [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
2493 [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
2494 [MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr,
2495 [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
2496 [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
2497 [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
2498 [MMSS_MMSSNOC_AHB_CLK] = &mmss_mmssnoc_ahb_clk.clkr,
2499 [MMSS_MMSSNOC_BTO_AHB_CLK] = &mmss_mmssnoc_bto_ahb_clk.clkr,
2500 [MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr,
2501 [MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr,
2502 [OCMEMCX_AHB_CLK] = &ocmemcx_ahb_clk.clkr,
2503 [OXILI_OCMEMGX_CLK] = &oxili_ocmemgx_clk.clkr,
2504 [OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr,
2505 [OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr,
2506 [OXILICX_AXI_CLK] = &oxilicx_axi_clk.clkr,
2507 [VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr,
2508 [VENUS0_AXI_CLK] = &venus0_axi_clk.clkr,
2509 [VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr,
2512 static const struct qcom_reset_map mmcc_msm8226_resets[] = {
2513 [SPDM_RESET] = { 0x0200 },
2514 [SPDM_RM_RESET] = { 0x0300 },
2515 [VENUS0_RESET] = { 0x1020 },
2516 [MDSS_RESET] = { 0x2300 },
2519 static struct gdsc *mmcc_msm8226_gdscs[] = {
2520 [VENUS0_GDSC] = &venus0_gdsc,
2521 [MDSS_GDSC] = &mdss_gdsc,
2522 [CAMSS_JPEG_GDSC] = &camss_jpeg_gdsc,
2523 [CAMSS_VFE_GDSC] = &camss_vfe_gdsc,
2526 static const struct regmap_config mmcc_msm8226_regmap_config = {
2530 .max_register = 0x5104,
2534 static const struct qcom_cc_desc mmcc_msm8226_desc = {
2535 .config = &mmcc_msm8226_regmap_config,
2536 .clks = mmcc_msm8226_clocks,
2537 .num_clks = ARRAY_SIZE(mmcc_msm8226_clocks),
2538 .resets = mmcc_msm8226_resets,
2539 .num_resets = ARRAY_SIZE(mmcc_msm8226_resets),
2540 .gdscs = mmcc_msm8226_gdscs,
2541 .num_gdscs = ARRAY_SIZE(mmcc_msm8226_gdscs),
2544 static struct clk_regmap *mmcc_msm8974_clocks[] = {
2545 [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr,
2546 [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr,
2547 [OCMEMNOC_CLK_SRC] = &ocmemnoc_clk_src.clkr,
2548 [MMPLL0] = &mmpll0.clkr,
2549 [MMPLL0_VOTE] = &mmpll0_vote,
2550 [MMPLL1] = &mmpll1.clkr,
2551 [MMPLL1_VOTE] = &mmpll1_vote,
2552 [MMPLL2] = &mmpll2.clkr,
2553 [MMPLL3] = &mmpll3.clkr,
2554 [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
2555 [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
2556 [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
2557 [CSI3_CLK_SRC] = &csi3_clk_src.clkr,
2558 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
2559 [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
2560 [MDP_CLK_SRC] = &mdp_clk_src.clkr,
2561 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
2562 [JPEG1_CLK_SRC] = &jpeg1_clk_src.clkr,
2563 [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,
2564 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2565 [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
2566 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
2567 [CCI_CLK_SRC] = &cci_clk_src.clkr,
2568 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
2569 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
2570 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
2571 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
2572 [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
2573 [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
2574 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
2575 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
2576 [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
2577 [CPP_CLK_SRC] = &cpp_clk_src.clkr,
2578 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2579 [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
2580 [EDPAUX_CLK_SRC] = &edpaux_clk_src.clkr,
2581 [EDPLINK_CLK_SRC] = &edplink_clk_src.clkr,
2582 [EDPPIXEL_CLK_SRC] = &edppixel_clk_src.clkr,
2583 [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2584 [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
2585 [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
2586 [HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
2587 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2588 [CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr,
2589 [CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr,
2590 [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
2591 [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
2592 [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
2593 [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
2594 [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
2595 [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
2596 [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
2597 [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
2598 [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
2599 [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
2600 [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
2601 [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
2602 [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,
2603 [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
2604 [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
2605 [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
2606 [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
2607 [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,
2608 [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
2609 [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
2610 [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
2611 [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
2612 [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
2613 [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
2614 [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
2615 [CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr,
2616 [CAMSS_JPEG_JPEG1_CLK] = &camss_jpeg_jpeg1_clk.clkr,
2617 [CAMSS_JPEG_JPEG2_CLK] = &camss_jpeg_jpeg2_clk.clkr,
2618 [CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr,
2619 [CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr,
2620 [CAMSS_JPEG_JPEG_OCMEMNOC_CLK] = &camss_jpeg_jpeg_ocmemnoc_clk.clkr,
2621 [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
2622 [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
2623 [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
2624 [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
2625 [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
2626 [CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr,
2627 [CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr,
2628 [CAMSS_PHY2_CSI2PHYTIMER_CLK] = &camss_phy2_csi2phytimer_clk.clkr,
2629 [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
2630 [CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr,
2631 [CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr,
2632 [CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr,
2633 [CAMSS_VFE_VFE1_CLK] = &camss_vfe_vfe1_clk.clkr,
2634 [CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr,
2635 [CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr,
2636 [CAMSS_VFE_VFE_OCMEMNOC_CLK] = &camss_vfe_vfe_ocmemnoc_clk.clkr,
2637 [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
2638 [MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
2639 [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
2640 [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
2641 [MDSS_EDPAUX_CLK] = &mdss_edpaux_clk.clkr,
2642 [MDSS_EDPLINK_CLK] = &mdss_edplink_clk.clkr,
2643 [MDSS_EDPPIXEL_CLK] = &mdss_edppixel_clk.clkr,
2644 [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
2645 [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
2646 [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
2647 [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,
2648 [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
2649 [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
2650 [MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr,
2651 [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
2652 [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
2653 [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
2654 [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
2655 [MMSS_MMSSNOC_AHB_CLK] = &mmss_mmssnoc_ahb_clk.clkr,
2656 [MMSS_MMSSNOC_BTO_AHB_CLK] = &mmss_mmssnoc_bto_ahb_clk.clkr,
2657 [MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr,
2658 [MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr,
2659 [OCMEMCX_AHB_CLK] = &ocmemcx_ahb_clk.clkr,
2660 [OCMEMCX_OCMEMNOC_CLK] = &ocmemcx_ocmemnoc_clk.clkr,
2661 [OXILI_OCMEMGX_CLK] = &oxili_ocmemgx_clk.clkr,
2662 [OCMEMNOC_CLK] = &ocmemnoc_clk.clkr,
2663 [OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr,
2664 [OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr,
2665 [OXILICX_AXI_CLK] = &oxilicx_axi_clk.clkr,
2666 [VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr,
2667 [VENUS0_AXI_CLK] = &venus0_axi_clk.clkr,
2668 [VENUS0_OCMEMNOC_CLK] = &venus0_ocmemnoc_clk.clkr,
2669 [VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr,
2672 static const struct qcom_reset_map mmcc_msm8974_resets[] = {
2673 [SPDM_RESET] = { 0x0200 },
2674 [SPDM_RM_RESET] = { 0x0300 },
2675 [VENUS0_RESET] = { 0x1020 },
2676 [MDSS_RESET] = { 0x2300 },
2677 [CAMSS_PHY0_RESET] = { 0x3020 },
2678 [CAMSS_PHY1_RESET] = { 0x3050 },
2679 [CAMSS_PHY2_RESET] = { 0x3080 },
2680 [CAMSS_CSI0_RESET] = { 0x30b0 },
2681 [CAMSS_CSI0PHY_RESET] = { 0x30c0 },
2682 [CAMSS_CSI0RDI_RESET] = { 0x30d0 },
2683 [CAMSS_CSI0PIX_RESET] = { 0x30e0 },
2684 [CAMSS_CSI1_RESET] = { 0x3120 },
2685 [CAMSS_CSI1PHY_RESET] = { 0x3130 },
2686 [CAMSS_CSI1RDI_RESET] = { 0x3140 },
2687 [CAMSS_CSI1PIX_RESET] = { 0x3150 },
2688 [CAMSS_CSI2_RESET] = { 0x3180 },
2689 [CAMSS_CSI2PHY_RESET] = { 0x3190 },
2690 [CAMSS_CSI2RDI_RESET] = { 0x31a0 },
2691 [CAMSS_CSI2PIX_RESET] = { 0x31b0 },
2692 [CAMSS_CSI3_RESET] = { 0x31e0 },
2693 [CAMSS_CSI3PHY_RESET] = { 0x31f0 },
2694 [CAMSS_CSI3RDI_RESET] = { 0x3200 },
2695 [CAMSS_CSI3PIX_RESET] = { 0x3210 },
2696 [CAMSS_ISPIF_RESET] = { 0x3220 },
2697 [CAMSS_CCI_RESET] = { 0x3340 },
2698 [CAMSS_MCLK0_RESET] = { 0x3380 },
2699 [CAMSS_MCLK1_RESET] = { 0x33b0 },
2700 [CAMSS_MCLK2_RESET] = { 0x33e0 },
2701 [CAMSS_MCLK3_RESET] = { 0x3410 },
2702 [CAMSS_GP0_RESET] = { 0x3440 },
2703 [CAMSS_GP1_RESET] = { 0x3470 },
2704 [CAMSS_TOP_RESET] = { 0x3480 },
2705 [CAMSS_MICRO_RESET] = { 0x3490 },
2706 [CAMSS_JPEG_RESET] = { 0x35a0 },
2707 [CAMSS_VFE_RESET] = { 0x36a0 },
2708 [CAMSS_CSI_VFE0_RESET] = { 0x3700 },
2709 [CAMSS_CSI_VFE1_RESET] = { 0x3710 },
2710 [OXILI_RESET] = { 0x4020 },
2711 [OXILICX_RESET] = { 0x4030 },
2712 [OCMEMCX_RESET] = { 0x4050 },
2713 [MMSS_RBCRP_RESET] = { 0x4080 },
2714 [MMSSNOCAHB_RESET] = { 0x5020 },
2715 [MMSSNOCAXI_RESET] = { 0x5060 },
2716 [OCMEMNOC_RESET] = { 0x50b0 },
2719 static struct gdsc *mmcc_msm8974_gdscs[] = {
2720 [VENUS0_GDSC] = &venus0_gdsc,
2721 [MDSS_GDSC] = &mdss_gdsc,
2722 [CAMSS_JPEG_GDSC] = &camss_jpeg_gdsc,
2723 [CAMSS_VFE_GDSC] = &camss_vfe_gdsc,
2724 [OXILI_GDSC] = &oxili_gdsc,
2725 [OXILICX_GDSC] = &oxilicx_gdsc,
2728 static const struct regmap_config mmcc_msm8974_regmap_config = {
2732 .max_register = 0x5104,
2736 static const struct qcom_cc_desc mmcc_msm8974_desc = {
2737 .config = &mmcc_msm8974_regmap_config,
2738 .clks = mmcc_msm8974_clocks,
2739 .num_clks = ARRAY_SIZE(mmcc_msm8974_clocks),
2740 .resets = mmcc_msm8974_resets,
2741 .num_resets = ARRAY_SIZE(mmcc_msm8974_resets),
2742 .gdscs = mmcc_msm8974_gdscs,
2743 .num_gdscs = ARRAY_SIZE(mmcc_msm8974_gdscs),
2746 static const struct of_device_id mmcc_msm8974_match_table[] = {
2747 { .compatible = "qcom,mmcc-msm8226", .data = &mmcc_msm8226_desc },
2748 { .compatible = "qcom,mmcc-msm8974", .data = &mmcc_msm8974_desc },
2751 MODULE_DEVICE_TABLE(of, mmcc_msm8974_match_table);
2753 static void msm8226_clock_override(void)
2755 mmss_axi_clk_src.freq_tbl = ftbl_mmss_axi_clk_msm8226;
2756 vfe0_clk_src.freq_tbl = ftbl_camss_vfe_vfe0_clk_msm8226;
2757 mdp_clk_src.freq_tbl = ftbl_mdss_mdp_clk_msm8226;
2758 vcodec0_clk_src.freq_tbl = ftbl_venus0_vcodec0_clk_msm8226;
2759 mclk0_clk_src.freq_tbl = ftbl_camss_mclk0_3_clk_msm8226;
2760 mclk1_clk_src.freq_tbl = ftbl_camss_mclk0_3_clk_msm8226;
2761 cpp_clk_src.freq_tbl = ftbl_camss_vfe_cpp_clk_msm8226;
2764 static int mmcc_msm8974_probe(struct platform_device *pdev)
2766 struct regmap *regmap;
2767 const struct qcom_cc_desc *desc;
2769 desc = of_device_get_match_data(&pdev->dev);
2773 regmap = qcom_cc_map(pdev, desc);
2775 return PTR_ERR(regmap);
2777 if (desc == &mmcc_msm8974_desc) {
2778 clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true);
2779 clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false);
2781 msm8226_clock_override();
2784 return qcom_cc_really_probe(pdev, desc, regmap);
2787 static struct platform_driver mmcc_msm8974_driver = {
2788 .probe = mmcc_msm8974_probe,
2790 .name = "mmcc-msm8974",
2791 .of_match_table = mmcc_msm8974_match_table,
2794 module_platform_driver(mmcc_msm8974_driver);
2796 MODULE_DESCRIPTION("QCOM MMCC MSM8974 Driver");
2797 MODULE_LICENSE("GPL v2");
2798 MODULE_ALIAS("platform:mmcc-msm8974");