Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright (c) 2013, The Linux Foundation. All rights reserved.
0004  */
0005 
0006 #include <linux/kernel.h>
0007 #include <linux/bitops.h>
0008 #include <linux/err.h>
0009 #include <linux/platform_device.h>
0010 #include <linux/module.h>
0011 #include <linux/of.h>
0012 #include <linux/of_device.h>
0013 #include <linux/clk-provider.h>
0014 #include <linux/regmap.h>
0015 #include <linux/reset-controller.h>
0016 
0017 #include <dt-bindings/clock/qcom,mmcc-msm8974.h>
0018 #include <dt-bindings/reset/qcom,mmcc-msm8974.h>
0019 
0020 #include "common.h"
0021 #include "clk-regmap.h"
0022 #include "clk-pll.h"
0023 #include "clk-rcg.h"
0024 #include "clk-branch.h"
0025 #include "reset.h"
0026 #include "gdsc.h"
0027 
0028 enum {
0029     P_XO,
0030     P_MMPLL0,
0031     P_EDPLINK,
0032     P_MMPLL1,
0033     P_HDMIPLL,
0034     P_GPLL0,
0035     P_EDPVCO,
0036     P_GPLL1,
0037     P_DSI0PLL,
0038     P_DSI0PLL_BYTE,
0039     P_MMPLL2,
0040     P_MMPLL3,
0041     P_DSI1PLL,
0042     P_DSI1PLL_BYTE,
0043 };
0044 
0045 static const struct parent_map mmcc_xo_mmpll0_mmpll1_gpll0_map[] = {
0046     { P_XO, 0 },
0047     { P_MMPLL0, 1 },
0048     { P_MMPLL1, 2 },
0049     { P_GPLL0, 5 }
0050 };
0051 
0052 static const char * const mmcc_xo_mmpll0_mmpll1_gpll0[] = {
0053     "xo",
0054     "mmpll0_vote",
0055     "mmpll1_vote",
0056     "mmss_gpll0_vote",
0057 };
0058 
0059 static const struct parent_map mmcc_xo_mmpll0_dsi_hdmi_gpll0_map[] = {
0060     { P_XO, 0 },
0061     { P_MMPLL0, 1 },
0062     { P_HDMIPLL, 4 },
0063     { P_GPLL0, 5 },
0064     { P_DSI0PLL, 2 },
0065     { P_DSI1PLL, 3 }
0066 };
0067 
0068 static const char * const mmcc_xo_mmpll0_dsi_hdmi_gpll0[] = {
0069     "xo",
0070     "mmpll0_vote",
0071     "hdmipll",
0072     "mmss_gpll0_vote",
0073     "dsi0pll",
0074     "dsi1pll",
0075 };
0076 
0077 static const struct parent_map mmcc_xo_mmpll0_1_3_gpll0_map[] = {
0078     { P_XO, 0 },
0079     { P_MMPLL0, 1 },
0080     { P_MMPLL1, 2 },
0081     { P_GPLL0, 5 },
0082     { P_MMPLL3, 3 }
0083 };
0084 
0085 static const char * const mmcc_xo_mmpll0_1_3_gpll0[] = {
0086     "xo",
0087     "mmpll0_vote",
0088     "mmpll1_vote",
0089     "mmss_gpll0_vote",
0090     "mmpll3",
0091 };
0092 
0093 static const struct parent_map mmcc_xo_mmpll0_1_gpll1_0_map[] = {
0094     { P_XO, 0 },
0095     { P_MMPLL0, 1 },
0096     { P_MMPLL1, 2 },
0097     { P_GPLL0, 5 },
0098     { P_GPLL1, 4 }
0099 };
0100 
0101 static const char * const mmcc_xo_mmpll0_1_gpll1_0[] = {
0102     "xo",
0103     "mmpll0_vote",
0104     "mmpll1_vote",
0105     "mmss_gpll0_vote",
0106     "gpll1_vote",
0107 };
0108 
0109 static const struct parent_map mmcc_xo_dsi_hdmi_edp_map[] = {
0110     { P_XO, 0 },
0111     { P_EDPLINK, 4 },
0112     { P_HDMIPLL, 3 },
0113     { P_EDPVCO, 5 },
0114     { P_DSI0PLL, 1 },
0115     { P_DSI1PLL, 2 }
0116 };
0117 
0118 static const char * const mmcc_xo_dsi_hdmi_edp[] = {
0119     "xo",
0120     "edp_link_clk",
0121     "hdmipll",
0122     "edp_vco_div",
0123     "dsi0pll",
0124     "dsi1pll",
0125 };
0126 
0127 static const struct parent_map mmcc_xo_dsi_hdmi_edp_gpll0_map[] = {
0128     { P_XO, 0 },
0129     { P_EDPLINK, 4 },
0130     { P_HDMIPLL, 3 },
0131     { P_GPLL0, 5 },
0132     { P_DSI0PLL, 1 },
0133     { P_DSI1PLL, 2 }
0134 };
0135 
0136 static const char * const mmcc_xo_dsi_hdmi_edp_gpll0[] = {
0137     "xo",
0138     "edp_link_clk",
0139     "hdmipll",
0140     "gpll0_vote",
0141     "dsi0pll",
0142     "dsi1pll",
0143 };
0144 
0145 static const struct parent_map mmcc_xo_dsibyte_hdmi_edp_gpll0_map[] = {
0146     { P_XO, 0 },
0147     { P_EDPLINK, 4 },
0148     { P_HDMIPLL, 3 },
0149     { P_GPLL0, 5 },
0150     { P_DSI0PLL_BYTE, 1 },
0151     { P_DSI1PLL_BYTE, 2 }
0152 };
0153 
0154 static const char * const mmcc_xo_dsibyte_hdmi_edp_gpll0[] = {
0155     "xo",
0156     "edp_link_clk",
0157     "hdmipll",
0158     "gpll0_vote",
0159     "dsi0pllbyte",
0160     "dsi1pllbyte",
0161 };
0162 
0163 static struct clk_pll mmpll0 = {
0164     .l_reg = 0x0004,
0165     .m_reg = 0x0008,
0166     .n_reg = 0x000c,
0167     .config_reg = 0x0014,
0168     .mode_reg = 0x0000,
0169     .status_reg = 0x001c,
0170     .status_bit = 17,
0171         .clkr.hw.init = &(struct clk_init_data){
0172                 .name = "mmpll0",
0173                 .parent_names = (const char *[]){ "xo" },
0174                 .num_parents = 1,
0175                 .ops = &clk_pll_ops,
0176         },
0177 };
0178 
0179 static struct clk_regmap mmpll0_vote = {
0180     .enable_reg = 0x0100,
0181     .enable_mask = BIT(0),
0182     .hw.init = &(struct clk_init_data){
0183         .name = "mmpll0_vote",
0184         .parent_names = (const char *[]){ "mmpll0" },
0185         .num_parents = 1,
0186         .ops = &clk_pll_vote_ops,
0187     },
0188 };
0189 
0190 static struct clk_pll mmpll1 = {
0191     .l_reg = 0x0044,
0192     .m_reg = 0x0048,
0193     .n_reg = 0x004c,
0194     .config_reg = 0x0050,
0195     .mode_reg = 0x0040,
0196     .status_reg = 0x005c,
0197     .status_bit = 17,
0198         .clkr.hw.init = &(struct clk_init_data){
0199                 .name = "mmpll1",
0200                 .parent_names = (const char *[]){ "xo" },
0201                 .num_parents = 1,
0202                 .ops = &clk_pll_ops,
0203         },
0204 };
0205 
0206 static struct clk_regmap mmpll1_vote = {
0207     .enable_reg = 0x0100,
0208     .enable_mask = BIT(1),
0209     .hw.init = &(struct clk_init_data){
0210         .name = "mmpll1_vote",
0211         .parent_names = (const char *[]){ "mmpll1" },
0212         .num_parents = 1,
0213         .ops = &clk_pll_vote_ops,
0214     },
0215 };
0216 
0217 static struct clk_pll mmpll2 = {
0218     .l_reg = 0x4104,
0219     .m_reg = 0x4108,
0220     .n_reg = 0x410c,
0221     .config_reg = 0x4110,
0222     .mode_reg = 0x4100,
0223     .status_reg = 0x411c,
0224         .clkr.hw.init = &(struct clk_init_data){
0225                 .name = "mmpll2",
0226                 .parent_names = (const char *[]){ "xo" },
0227                 .num_parents = 1,
0228                 .ops = &clk_pll_ops,
0229         },
0230 };
0231 
0232 static struct clk_pll mmpll3 = {
0233     .l_reg = 0x0084,
0234     .m_reg = 0x0088,
0235     .n_reg = 0x008c,
0236     .config_reg = 0x0090,
0237     .mode_reg = 0x0080,
0238     .status_reg = 0x009c,
0239     .status_bit = 17,
0240         .clkr.hw.init = &(struct clk_init_data){
0241                 .name = "mmpll3",
0242                 .parent_names = (const char *[]){ "xo" },
0243                 .num_parents = 1,
0244                 .ops = &clk_pll_ops,
0245         },
0246 };
0247 
0248 static struct clk_rcg2 mmss_ahb_clk_src = {
0249     .cmd_rcgr = 0x5000,
0250     .hid_width = 5,
0251     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0252     .clkr.hw.init = &(struct clk_init_data){
0253         .name = "mmss_ahb_clk_src",
0254         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0255         .num_parents = 4,
0256         .ops = &clk_rcg2_ops,
0257     },
0258 };
0259 
0260 static struct freq_tbl ftbl_mmss_axi_clk_msm8226[] = {
0261     F(19200000, P_XO, 1, 0, 0),
0262     F(37500000, P_GPLL0, 16, 0, 0),
0263     F(50000000, P_GPLL0, 12, 0, 0),
0264     F(75000000, P_GPLL0, 8, 0, 0),
0265     F(100000000, P_GPLL0, 6, 0, 0),
0266     F(150000000, P_GPLL0, 4, 0, 0),
0267     F(200000000, P_MMPLL0, 4, 0, 0),
0268     F(266666666, P_MMPLL0, 3, 0, 0),
0269     { }
0270 };
0271 
0272 static struct freq_tbl ftbl_mmss_axi_clk[] = {
0273     F( 19200000, P_XO, 1, 0, 0),
0274     F( 37500000, P_GPLL0, 16, 0, 0),
0275     F( 50000000, P_GPLL0, 12, 0, 0),
0276     F( 75000000, P_GPLL0, 8, 0, 0),
0277     F(100000000, P_GPLL0, 6, 0, 0),
0278     F(150000000, P_GPLL0, 4, 0, 0),
0279     F(291750000, P_MMPLL1, 4, 0, 0),
0280     F(400000000, P_MMPLL0, 2, 0, 0),
0281     F(466800000, P_MMPLL1, 2.5, 0, 0),
0282 };
0283 
0284 static struct clk_rcg2 mmss_axi_clk_src = {
0285     .cmd_rcgr = 0x5040,
0286     .hid_width = 5,
0287     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0288     .freq_tbl = ftbl_mmss_axi_clk,
0289     .clkr.hw.init = &(struct clk_init_data){
0290         .name = "mmss_axi_clk_src",
0291         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0292         .num_parents = 4,
0293         .ops = &clk_rcg2_ops,
0294     },
0295 };
0296 
0297 static struct freq_tbl ftbl_ocmemnoc_clk[] = {
0298     F( 19200000, P_XO, 1, 0, 0),
0299     F( 37500000, P_GPLL0, 16, 0, 0),
0300     F( 50000000, P_GPLL0, 12, 0, 0),
0301     F( 75000000, P_GPLL0, 8, 0, 0),
0302     F(100000000, P_GPLL0, 6, 0, 0),
0303     F(150000000, P_GPLL0, 4, 0, 0),
0304     F(291750000, P_MMPLL1, 4, 0, 0),
0305     F(400000000, P_MMPLL0, 2, 0, 0),
0306 };
0307 
0308 static struct clk_rcg2 ocmemnoc_clk_src = {
0309     .cmd_rcgr = 0x5090,
0310     .hid_width = 5,
0311     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0312     .freq_tbl = ftbl_ocmemnoc_clk,
0313     .clkr.hw.init = &(struct clk_init_data){
0314         .name = "ocmemnoc_clk_src",
0315         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0316         .num_parents = 4,
0317         .ops = &clk_rcg2_ops,
0318     },
0319 };
0320 
0321 static struct freq_tbl ftbl_camss_csi0_3_clk[] = {
0322     F(100000000, P_GPLL0, 6, 0, 0),
0323     F(200000000, P_MMPLL0, 4, 0, 0),
0324     { }
0325 };
0326 
0327 static struct clk_rcg2 csi0_clk_src = {
0328     .cmd_rcgr = 0x3090,
0329     .hid_width = 5,
0330     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0331     .freq_tbl = ftbl_camss_csi0_3_clk,
0332     .clkr.hw.init = &(struct clk_init_data){
0333         .name = "csi0_clk_src",
0334         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0335         .num_parents = 4,
0336         .ops = &clk_rcg2_ops,
0337     },
0338 };
0339 
0340 static struct clk_rcg2 csi1_clk_src = {
0341     .cmd_rcgr = 0x3100,
0342     .hid_width = 5,
0343     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0344     .freq_tbl = ftbl_camss_csi0_3_clk,
0345     .clkr.hw.init = &(struct clk_init_data){
0346         .name = "csi1_clk_src",
0347         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0348         .num_parents = 4,
0349         .ops = &clk_rcg2_ops,
0350     },
0351 };
0352 
0353 static struct clk_rcg2 csi2_clk_src = {
0354     .cmd_rcgr = 0x3160,
0355     .hid_width = 5,
0356     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0357     .freq_tbl = ftbl_camss_csi0_3_clk,
0358     .clkr.hw.init = &(struct clk_init_data){
0359         .name = "csi2_clk_src",
0360         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0361         .num_parents = 4,
0362         .ops = &clk_rcg2_ops,
0363     },
0364 };
0365 
0366 static struct clk_rcg2 csi3_clk_src = {
0367     .cmd_rcgr = 0x31c0,
0368     .hid_width = 5,
0369     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0370     .freq_tbl = ftbl_camss_csi0_3_clk,
0371     .clkr.hw.init = &(struct clk_init_data){
0372         .name = "csi3_clk_src",
0373         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0374         .num_parents = 4,
0375         .ops = &clk_rcg2_ops,
0376     },
0377 };
0378 
0379 static struct freq_tbl ftbl_camss_vfe_vfe0_clk_msm8226[] = {
0380     F(37500000, P_GPLL0, 16, 0, 0),
0381     F(50000000, P_GPLL0, 12, 0, 0),
0382     F(60000000, P_GPLL0, 10, 0, 0),
0383     F(80000000, P_GPLL0, 7.5, 0, 0),
0384     F(100000000, P_GPLL0, 6, 0, 0),
0385     F(109090000, P_GPLL0, 5.5, 0, 0),
0386     F(133330000, P_GPLL0, 4.5, 0, 0),
0387     F(150000000, P_GPLL0, 4, 0, 0),
0388     F(200000000, P_GPLL0, 3, 0, 0),
0389     F(228570000, P_MMPLL0, 3.5, 0, 0),
0390     F(266670000, P_MMPLL0, 3, 0, 0),
0391     F(320000000, P_MMPLL0, 2.5, 0, 0),
0392     F(400000000, P_MMPLL0, 2, 0, 0),
0393     { }
0394 };
0395 
0396 static struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
0397     F(37500000, P_GPLL0, 16, 0, 0),
0398     F(50000000, P_GPLL0, 12, 0, 0),
0399     F(60000000, P_GPLL0, 10, 0, 0),
0400     F(80000000, P_GPLL0, 7.5, 0, 0),
0401     F(100000000, P_GPLL0, 6, 0, 0),
0402     F(109090000, P_GPLL0, 5.5, 0, 0),
0403     F(133330000, P_GPLL0, 4.5, 0, 0),
0404     F(200000000, P_GPLL0, 3, 0, 0),
0405     F(228570000, P_MMPLL0, 3.5, 0, 0),
0406     F(266670000, P_MMPLL0, 3, 0, 0),
0407     F(320000000, P_MMPLL0, 2.5, 0, 0),
0408     F(400000000, P_MMPLL0, 2, 0, 0),
0409     F(465000000, P_MMPLL3, 2, 0, 0),
0410     { }
0411 };
0412 
0413 static struct clk_rcg2 vfe0_clk_src = {
0414     .cmd_rcgr = 0x3600,
0415     .hid_width = 5,
0416     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0417     .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
0418     .clkr.hw.init = &(struct clk_init_data){
0419         .name = "vfe0_clk_src",
0420         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0421         .num_parents = 4,
0422         .ops = &clk_rcg2_ops,
0423     },
0424 };
0425 
0426 static struct clk_rcg2 vfe1_clk_src = {
0427     .cmd_rcgr = 0x3620,
0428     .hid_width = 5,
0429     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0430     .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
0431     .clkr.hw.init = &(struct clk_init_data){
0432         .name = "vfe1_clk_src",
0433         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0434         .num_parents = 4,
0435         .ops = &clk_rcg2_ops,
0436     },
0437 };
0438 
0439 static struct freq_tbl ftbl_mdss_mdp_clk_msm8226[] = {
0440     F(37500000, P_GPLL0, 16, 0, 0),
0441     F(60000000, P_GPLL0, 10, 0, 0),
0442     F(75000000, P_GPLL0, 8, 0, 0),
0443     F(92310000, P_GPLL0, 6.5, 0, 0),
0444     F(100000000, P_GPLL0, 6, 0, 0),
0445     F(133330000, P_MMPLL0, 6, 0, 0),
0446     F(177780000, P_MMPLL0, 4.5, 0, 0),
0447     F(200000000, P_MMPLL0, 4, 0, 0),
0448     { }
0449 };
0450 
0451 static struct freq_tbl ftbl_mdss_mdp_clk[] = {
0452     F(37500000, P_GPLL0, 16, 0, 0),
0453     F(60000000, P_GPLL0, 10, 0, 0),
0454     F(75000000, P_GPLL0, 8, 0, 0),
0455     F(85710000, P_GPLL0, 7, 0, 0),
0456     F(100000000, P_GPLL0, 6, 0, 0),
0457     F(133330000, P_MMPLL0, 6, 0, 0),
0458     F(160000000, P_MMPLL0, 5, 0, 0),
0459     F(200000000, P_MMPLL0, 4, 0, 0),
0460     F(228570000, P_MMPLL0, 3.5, 0, 0),
0461     F(240000000, P_GPLL0, 2.5, 0, 0),
0462     F(266670000, P_MMPLL0, 3, 0, 0),
0463     F(320000000, P_MMPLL0, 2.5, 0, 0),
0464     { }
0465 };
0466 
0467 static struct clk_rcg2 mdp_clk_src = {
0468     .cmd_rcgr = 0x2040,
0469     .hid_width = 5,
0470     .parent_map = mmcc_xo_mmpll0_dsi_hdmi_gpll0_map,
0471     .freq_tbl = ftbl_mdss_mdp_clk,
0472     .clkr.hw.init = &(struct clk_init_data){
0473         .name = "mdp_clk_src",
0474         .parent_names = mmcc_xo_mmpll0_dsi_hdmi_gpll0,
0475         .num_parents = 6,
0476         .ops = &clk_rcg2_ops,
0477     },
0478 };
0479 
0480 static struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
0481     F(75000000, P_GPLL0, 8, 0, 0),
0482     F(133330000, P_GPLL0, 4.5, 0, 0),
0483     F(200000000, P_GPLL0, 3, 0, 0),
0484     F(228570000, P_MMPLL0, 3.5, 0, 0),
0485     F(266670000, P_MMPLL0, 3, 0, 0),
0486     F(320000000, P_MMPLL0, 2.5, 0, 0),
0487     { }
0488 };
0489 
0490 static struct clk_rcg2 jpeg0_clk_src = {
0491     .cmd_rcgr = 0x3500,
0492     .hid_width = 5,
0493     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0494     .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
0495     .clkr.hw.init = &(struct clk_init_data){
0496         .name = "jpeg0_clk_src",
0497         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0498         .num_parents = 4,
0499         .ops = &clk_rcg2_ops,
0500     },
0501 };
0502 
0503 static struct clk_rcg2 jpeg1_clk_src = {
0504     .cmd_rcgr = 0x3520,
0505     .hid_width = 5,
0506     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0507     .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
0508     .clkr.hw.init = &(struct clk_init_data){
0509         .name = "jpeg1_clk_src",
0510         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0511         .num_parents = 4,
0512         .ops = &clk_rcg2_ops,
0513     },
0514 };
0515 
0516 static struct clk_rcg2 jpeg2_clk_src = {
0517     .cmd_rcgr = 0x3540,
0518     .hid_width = 5,
0519     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0520     .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
0521     .clkr.hw.init = &(struct clk_init_data){
0522         .name = "jpeg2_clk_src",
0523         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0524         .num_parents = 4,
0525         .ops = &clk_rcg2_ops,
0526     },
0527 };
0528 
0529 static struct clk_rcg2 pclk0_clk_src = {
0530     .cmd_rcgr = 0x2000,
0531     .mnd_width = 8,
0532     .hid_width = 5,
0533     .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
0534     .clkr.hw.init = &(struct clk_init_data){
0535         .name = "pclk0_clk_src",
0536         .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
0537         .num_parents = 6,
0538         .ops = &clk_pixel_ops,
0539         .flags = CLK_SET_RATE_PARENT,
0540     },
0541 };
0542 
0543 static struct clk_rcg2 pclk1_clk_src = {
0544     .cmd_rcgr = 0x2020,
0545     .mnd_width = 8,
0546     .hid_width = 5,
0547     .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
0548     .clkr.hw.init = &(struct clk_init_data){
0549         .name = "pclk1_clk_src",
0550         .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
0551         .num_parents = 6,
0552         .ops = &clk_pixel_ops,
0553         .flags = CLK_SET_RATE_PARENT,
0554     },
0555 };
0556 
0557 static struct freq_tbl ftbl_venus0_vcodec0_clk_msm8226[] = {
0558     F(66700000, P_GPLL0, 9, 0, 0),
0559     F(100000000, P_GPLL0, 6, 0, 0),
0560     F(133330000, P_MMPLL0, 6, 0, 0),
0561     F(160000000, P_MMPLL0, 5, 0, 0),
0562     { }
0563 };
0564 
0565 static struct freq_tbl ftbl_venus0_vcodec0_clk[] = {
0566     F(50000000, P_GPLL0, 12, 0, 0),
0567     F(100000000, P_GPLL0, 6, 0, 0),
0568     F(133330000, P_MMPLL0, 6, 0, 0),
0569     F(200000000, P_MMPLL0, 4, 0, 0),
0570     F(266670000, P_MMPLL0, 3, 0, 0),
0571     F(465000000, P_MMPLL3, 2, 0, 0),
0572     { }
0573 };
0574 
0575 static struct clk_rcg2 vcodec0_clk_src = {
0576     .cmd_rcgr = 0x1000,
0577     .mnd_width = 8,
0578     .hid_width = 5,
0579     .parent_map = mmcc_xo_mmpll0_1_3_gpll0_map,
0580     .freq_tbl = ftbl_venus0_vcodec0_clk,
0581     .clkr.hw.init = &(struct clk_init_data){
0582         .name = "vcodec0_clk_src",
0583         .parent_names = mmcc_xo_mmpll0_1_3_gpll0,
0584         .num_parents = 5,
0585         .ops = &clk_rcg2_ops,
0586     },
0587 };
0588 
0589 static struct freq_tbl ftbl_camss_cci_cci_clk[] = {
0590     F(19200000, P_XO, 1, 0, 0),
0591     { }
0592 };
0593 
0594 static struct clk_rcg2 cci_clk_src = {
0595     .cmd_rcgr = 0x3300,
0596     .hid_width = 5,
0597     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0598     .freq_tbl = ftbl_camss_cci_cci_clk,
0599     .clkr.hw.init = &(struct clk_init_data){
0600         .name = "cci_clk_src",
0601         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0602         .num_parents = 4,
0603         .ops = &clk_rcg2_ops,
0604     },
0605 };
0606 
0607 static struct freq_tbl ftbl_camss_gp0_1_clk[] = {
0608     F(10000, P_XO, 16, 1, 120),
0609     F(24000, P_XO, 16, 1, 50),
0610     F(6000000, P_GPLL0, 10, 1, 10),
0611     F(12000000, P_GPLL0, 10, 1, 5),
0612     F(13000000, P_GPLL0, 4, 13, 150),
0613     F(24000000, P_GPLL0, 5, 1, 5),
0614     { }
0615 };
0616 
0617 static struct clk_rcg2 camss_gp0_clk_src = {
0618     .cmd_rcgr = 0x3420,
0619     .mnd_width = 8,
0620     .hid_width = 5,
0621     .parent_map = mmcc_xo_mmpll0_1_gpll1_0_map,
0622     .freq_tbl = ftbl_camss_gp0_1_clk,
0623     .clkr.hw.init = &(struct clk_init_data){
0624         .name = "camss_gp0_clk_src",
0625         .parent_names = mmcc_xo_mmpll0_1_gpll1_0,
0626         .num_parents = 5,
0627         .ops = &clk_rcg2_ops,
0628     },
0629 };
0630 
0631 static struct clk_rcg2 camss_gp1_clk_src = {
0632     .cmd_rcgr = 0x3450,
0633     .mnd_width = 8,
0634     .hid_width = 5,
0635     .parent_map = mmcc_xo_mmpll0_1_gpll1_0_map,
0636     .freq_tbl = ftbl_camss_gp0_1_clk,
0637     .clkr.hw.init = &(struct clk_init_data){
0638         .name = "camss_gp1_clk_src",
0639         .parent_names = mmcc_xo_mmpll0_1_gpll1_0,
0640         .num_parents = 5,
0641         .ops = &clk_rcg2_ops,
0642     },
0643 };
0644 
0645 static struct freq_tbl ftbl_camss_mclk0_3_clk_msm8226[] = {
0646     F(19200000, P_XO, 1, 0, 0),
0647     F(24000000, P_GPLL0, 5, 1, 5),
0648     F(66670000, P_GPLL0, 9, 0, 0),
0649     { }
0650 };
0651 
0652 static struct freq_tbl ftbl_camss_mclk0_3_clk[] = {
0653     F(4800000, P_XO, 4, 0, 0),
0654     F(6000000, P_GPLL0, 10, 1, 10),
0655     F(8000000, P_GPLL0, 15, 1, 5),
0656     F(9600000, P_XO, 2, 0, 0),
0657     F(16000000, P_GPLL0, 12.5, 1, 3),
0658     F(19200000, P_XO, 1, 0, 0),
0659     F(24000000, P_GPLL0, 5, 1, 5),
0660     F(32000000, P_MMPLL0, 5, 1, 5),
0661     F(48000000, P_GPLL0, 12.5, 0, 0),
0662     F(64000000, P_MMPLL0, 12.5, 0, 0),
0663     F(66670000, P_GPLL0, 9, 0, 0),
0664     { }
0665 };
0666 
0667 static struct clk_rcg2 mclk0_clk_src = {
0668     .cmd_rcgr = 0x3360,
0669     .hid_width = 5,
0670     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0671     .freq_tbl = ftbl_camss_mclk0_3_clk,
0672     .clkr.hw.init = &(struct clk_init_data){
0673         .name = "mclk0_clk_src",
0674         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0675         .num_parents = 4,
0676         .ops = &clk_rcg2_ops,
0677     },
0678 };
0679 
0680 static struct clk_rcg2 mclk1_clk_src = {
0681     .cmd_rcgr = 0x3390,
0682     .hid_width = 5,
0683     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0684     .freq_tbl = ftbl_camss_mclk0_3_clk,
0685     .clkr.hw.init = &(struct clk_init_data){
0686         .name = "mclk1_clk_src",
0687         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0688         .num_parents = 4,
0689         .ops = &clk_rcg2_ops,
0690     },
0691 };
0692 
0693 static struct clk_rcg2 mclk2_clk_src = {
0694     .cmd_rcgr = 0x33c0,
0695     .hid_width = 5,
0696     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0697     .freq_tbl = ftbl_camss_mclk0_3_clk,
0698     .clkr.hw.init = &(struct clk_init_data){
0699         .name = "mclk2_clk_src",
0700         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0701         .num_parents = 4,
0702         .ops = &clk_rcg2_ops,
0703     },
0704 };
0705 
0706 static struct clk_rcg2 mclk3_clk_src = {
0707     .cmd_rcgr = 0x33f0,
0708     .hid_width = 5,
0709     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0710     .freq_tbl = ftbl_camss_mclk0_3_clk,
0711     .clkr.hw.init = &(struct clk_init_data){
0712         .name = "mclk3_clk_src",
0713         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0714         .num_parents = 4,
0715         .ops = &clk_rcg2_ops,
0716     },
0717 };
0718 
0719 static struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
0720     F(100000000, P_GPLL0, 6, 0, 0),
0721     F(200000000, P_MMPLL0, 4, 0, 0),
0722     { }
0723 };
0724 
0725 static struct clk_rcg2 csi0phytimer_clk_src = {
0726     .cmd_rcgr = 0x3000,
0727     .hid_width = 5,
0728     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0729     .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
0730     .clkr.hw.init = &(struct clk_init_data){
0731         .name = "csi0phytimer_clk_src",
0732         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0733         .num_parents = 4,
0734         .ops = &clk_rcg2_ops,
0735     },
0736 };
0737 
0738 static struct clk_rcg2 csi1phytimer_clk_src = {
0739     .cmd_rcgr = 0x3030,
0740     .hid_width = 5,
0741     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0742     .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
0743     .clkr.hw.init = &(struct clk_init_data){
0744         .name = "csi1phytimer_clk_src",
0745         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0746         .num_parents = 4,
0747         .ops = &clk_rcg2_ops,
0748     },
0749 };
0750 
0751 static struct clk_rcg2 csi2phytimer_clk_src = {
0752     .cmd_rcgr = 0x3060,
0753     .hid_width = 5,
0754     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0755     .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
0756     .clkr.hw.init = &(struct clk_init_data){
0757         .name = "csi2phytimer_clk_src",
0758         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0759         .num_parents = 4,
0760         .ops = &clk_rcg2_ops,
0761     },
0762 };
0763 
0764 static struct freq_tbl ftbl_camss_vfe_cpp_clk_msm8226[] = {
0765     F(133330000, P_GPLL0, 4.5, 0, 0),
0766     F(150000000, P_GPLL0, 4, 0, 0),
0767     F(266670000, P_MMPLL0, 3, 0, 0),
0768     F(320000000, P_MMPLL0, 2.5, 0, 0),
0769     F(400000000, P_MMPLL0, 2, 0, 0),
0770     { }
0771 };
0772 
0773 static struct freq_tbl ftbl_camss_vfe_cpp_clk[] = {
0774     F(133330000, P_GPLL0, 4.5, 0, 0),
0775     F(266670000, P_MMPLL0, 3, 0, 0),
0776     F(320000000, P_MMPLL0, 2.5, 0, 0),
0777     F(400000000, P_MMPLL0, 2, 0, 0),
0778     F(465000000, P_MMPLL3, 2, 0, 0),
0779     { }
0780 };
0781 
0782 static struct clk_rcg2 cpp_clk_src = {
0783     .cmd_rcgr = 0x3640,
0784     .hid_width = 5,
0785     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0786     .freq_tbl = ftbl_camss_vfe_cpp_clk,
0787     .clkr.hw.init = &(struct clk_init_data){
0788         .name = "cpp_clk_src",
0789         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0790         .num_parents = 4,
0791         .ops = &clk_rcg2_ops,
0792     },
0793 };
0794 
0795 static struct freq_tbl byte_freq_tbl[] = {
0796     { .src = P_DSI0PLL_BYTE },
0797     { }
0798 };
0799 
0800 static struct clk_rcg2 byte0_clk_src = {
0801     .cmd_rcgr = 0x2120,
0802     .hid_width = 5,
0803     .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
0804     .freq_tbl = byte_freq_tbl,
0805     .clkr.hw.init = &(struct clk_init_data){
0806         .name = "byte0_clk_src",
0807         .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
0808         .num_parents = 6,
0809         .ops = &clk_byte2_ops,
0810         .flags = CLK_SET_RATE_PARENT,
0811     },
0812 };
0813 
0814 static struct clk_rcg2 byte1_clk_src = {
0815     .cmd_rcgr = 0x2140,
0816     .hid_width = 5,
0817     .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
0818     .freq_tbl = byte_freq_tbl,
0819     .clkr.hw.init = &(struct clk_init_data){
0820         .name = "byte1_clk_src",
0821         .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
0822         .num_parents = 6,
0823         .ops = &clk_byte2_ops,
0824         .flags = CLK_SET_RATE_PARENT,
0825     },
0826 };
0827 
0828 static struct freq_tbl ftbl_mdss_edpaux_clk[] = {
0829     F(19200000, P_XO, 1, 0, 0),
0830     { }
0831 };
0832 
0833 static struct clk_rcg2 edpaux_clk_src = {
0834     .cmd_rcgr = 0x20e0,
0835     .hid_width = 5,
0836     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0837     .freq_tbl = ftbl_mdss_edpaux_clk,
0838     .clkr.hw.init = &(struct clk_init_data){
0839         .name = "edpaux_clk_src",
0840         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0841         .num_parents = 4,
0842         .ops = &clk_rcg2_ops,
0843     },
0844 };
0845 
0846 static struct freq_tbl ftbl_mdss_edplink_clk[] = {
0847     F(135000000, P_EDPLINK, 2, 0, 0),
0848     F(270000000, P_EDPLINK, 11, 0, 0),
0849     { }
0850 };
0851 
0852 static struct clk_rcg2 edplink_clk_src = {
0853     .cmd_rcgr = 0x20c0,
0854     .hid_width = 5,
0855     .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
0856     .freq_tbl = ftbl_mdss_edplink_clk,
0857     .clkr.hw.init = &(struct clk_init_data){
0858         .name = "edplink_clk_src",
0859         .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
0860         .num_parents = 6,
0861         .ops = &clk_rcg2_ops,
0862         .flags = CLK_SET_RATE_PARENT,
0863     },
0864 };
0865 
0866 static struct freq_tbl edp_pixel_freq_tbl[] = {
0867     { .src = P_EDPVCO },
0868     { }
0869 };
0870 
0871 static struct clk_rcg2 edppixel_clk_src = {
0872     .cmd_rcgr = 0x20a0,
0873     .mnd_width = 8,
0874     .hid_width = 5,
0875     .parent_map = mmcc_xo_dsi_hdmi_edp_map,
0876     .freq_tbl = edp_pixel_freq_tbl,
0877     .clkr.hw.init = &(struct clk_init_data){
0878         .name = "edppixel_clk_src",
0879         .parent_names = mmcc_xo_dsi_hdmi_edp,
0880         .num_parents = 6,
0881         .ops = &clk_edp_pixel_ops,
0882     },
0883 };
0884 
0885 static struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
0886     F(19200000, P_XO, 1, 0, 0),
0887     { }
0888 };
0889 
0890 static struct clk_rcg2 esc0_clk_src = {
0891     .cmd_rcgr = 0x2160,
0892     .hid_width = 5,
0893     .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
0894     .freq_tbl = ftbl_mdss_esc0_1_clk,
0895     .clkr.hw.init = &(struct clk_init_data){
0896         .name = "esc0_clk_src",
0897         .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
0898         .num_parents = 6,
0899         .ops = &clk_rcg2_ops,
0900     },
0901 };
0902 
0903 static struct clk_rcg2 esc1_clk_src = {
0904     .cmd_rcgr = 0x2180,
0905     .hid_width = 5,
0906     .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
0907     .freq_tbl = ftbl_mdss_esc0_1_clk,
0908     .clkr.hw.init = &(struct clk_init_data){
0909         .name = "esc1_clk_src",
0910         .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
0911         .num_parents = 6,
0912         .ops = &clk_rcg2_ops,
0913     },
0914 };
0915 
0916 static struct freq_tbl extpclk_freq_tbl[] = {
0917     { .src = P_HDMIPLL },
0918     { }
0919 };
0920 
0921 static struct clk_rcg2 extpclk_clk_src = {
0922     .cmd_rcgr = 0x2060,
0923     .hid_width = 5,
0924     .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
0925     .freq_tbl = extpclk_freq_tbl,
0926     .clkr.hw.init = &(struct clk_init_data){
0927         .name = "extpclk_clk_src",
0928         .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
0929         .num_parents = 6,
0930         .ops = &clk_byte_ops,
0931         .flags = CLK_SET_RATE_PARENT,
0932     },
0933 };
0934 
0935 static struct freq_tbl ftbl_mdss_hdmi_clk[] = {
0936     F(19200000, P_XO, 1, 0, 0),
0937     { }
0938 };
0939 
0940 static struct clk_rcg2 hdmi_clk_src = {
0941     .cmd_rcgr = 0x2100,
0942     .hid_width = 5,
0943     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0944     .freq_tbl = ftbl_mdss_hdmi_clk,
0945     .clkr.hw.init = &(struct clk_init_data){
0946         .name = "hdmi_clk_src",
0947         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0948         .num_parents = 4,
0949         .ops = &clk_rcg2_ops,
0950     },
0951 };
0952 
0953 static struct freq_tbl ftbl_mdss_vsync_clk[] = {
0954     F(19200000, P_XO, 1, 0, 0),
0955     { }
0956 };
0957 
0958 static struct clk_rcg2 vsync_clk_src = {
0959     .cmd_rcgr = 0x2080,
0960     .hid_width = 5,
0961     .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
0962     .freq_tbl = ftbl_mdss_vsync_clk,
0963     .clkr.hw.init = &(struct clk_init_data){
0964         .name = "vsync_clk_src",
0965         .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
0966         .num_parents = 4,
0967         .ops = &clk_rcg2_ops,
0968     },
0969 };
0970 
0971 static struct clk_branch camss_cci_cci_ahb_clk = {
0972     .halt_reg = 0x3348,
0973     .clkr = {
0974         .enable_reg = 0x3348,
0975         .enable_mask = BIT(0),
0976         .hw.init = &(struct clk_init_data){
0977             .name = "camss_cci_cci_ahb_clk",
0978             .parent_names = (const char *[]){
0979                 "mmss_ahb_clk_src",
0980             },
0981             .num_parents = 1,
0982             .ops = &clk_branch2_ops,
0983         },
0984     },
0985 };
0986 
0987 static struct clk_branch camss_cci_cci_clk = {
0988     .halt_reg = 0x3344,
0989     .clkr = {
0990         .enable_reg = 0x3344,
0991         .enable_mask = BIT(0),
0992         .hw.init = &(struct clk_init_data){
0993             .name = "camss_cci_cci_clk",
0994             .parent_names = (const char *[]){
0995                 "cci_clk_src",
0996             },
0997             .num_parents = 1,
0998             .flags = CLK_SET_RATE_PARENT,
0999             .ops = &clk_branch2_ops,
1000         },
1001     },
1002 };
1003 
1004 static struct clk_branch camss_csi0_ahb_clk = {
1005     .halt_reg = 0x30bc,
1006     .clkr = {
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 *[]){
1012                 "mmss_ahb_clk_src",
1013             },
1014             .num_parents = 1,
1015             .ops = &clk_branch2_ops,
1016         },
1017     },
1018 };
1019 
1020 static struct clk_branch camss_csi0_clk = {
1021     .halt_reg = 0x30b4,
1022     .clkr = {
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 *[]){
1028                 "csi0_clk_src",
1029             },
1030             .num_parents = 1,
1031             .flags = CLK_SET_RATE_PARENT,
1032             .ops = &clk_branch2_ops,
1033         },
1034     },
1035 };
1036 
1037 static struct clk_branch camss_csi0phy_clk = {
1038     .halt_reg = 0x30c4,
1039     .clkr = {
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 *[]){
1045                 "csi0_clk_src",
1046             },
1047             .num_parents = 1,
1048             .flags = CLK_SET_RATE_PARENT,
1049             .ops = &clk_branch2_ops,
1050         },
1051     },
1052 };
1053 
1054 static struct clk_branch camss_csi0pix_clk = {
1055     .halt_reg = 0x30e4,
1056     .clkr = {
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 *[]){
1062                 "csi0_clk_src",
1063             },
1064             .num_parents = 1,
1065             .flags = CLK_SET_RATE_PARENT,
1066             .ops = &clk_branch2_ops,
1067         },
1068     },
1069 };
1070 
1071 static struct clk_branch camss_csi0rdi_clk = {
1072     .halt_reg = 0x30d4,
1073     .clkr = {
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 *[]){
1079                 "csi0_clk_src",
1080             },
1081             .num_parents = 1,
1082             .flags = CLK_SET_RATE_PARENT,
1083             .ops = &clk_branch2_ops,
1084         },
1085     },
1086 };
1087 
1088 static struct clk_branch camss_csi1_ahb_clk = {
1089     .halt_reg = 0x3128,
1090     .clkr = {
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 *[]){
1096                 "mmss_ahb_clk_src",
1097             },
1098             .num_parents = 1,
1099             .ops = &clk_branch2_ops,
1100         },
1101     },
1102 };
1103 
1104 static struct clk_branch camss_csi1_clk = {
1105     .halt_reg = 0x3124,
1106     .clkr = {
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 *[]){
1112                 "csi1_clk_src",
1113             },
1114             .num_parents = 1,
1115             .flags = CLK_SET_RATE_PARENT,
1116             .ops = &clk_branch2_ops,
1117         },
1118     },
1119 };
1120 
1121 static struct clk_branch camss_csi1phy_clk = {
1122     .halt_reg = 0x3134,
1123     .clkr = {
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 *[]){
1129                 "csi1_clk_src",
1130             },
1131             .num_parents = 1,
1132             .flags = CLK_SET_RATE_PARENT,
1133             .ops = &clk_branch2_ops,
1134         },
1135     },
1136 };
1137 
1138 static struct clk_branch camss_csi1pix_clk = {
1139     .halt_reg = 0x3154,
1140     .clkr = {
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 *[]){
1146                 "csi1_clk_src",
1147             },
1148             .num_parents = 1,
1149             .flags = CLK_SET_RATE_PARENT,
1150             .ops = &clk_branch2_ops,
1151         },
1152     },
1153 };
1154 
1155 static struct clk_branch camss_csi1rdi_clk = {
1156     .halt_reg = 0x3144,
1157     .clkr = {
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 *[]){
1163                 "csi1_clk_src",
1164             },
1165             .num_parents = 1,
1166             .flags = CLK_SET_RATE_PARENT,
1167             .ops = &clk_branch2_ops,
1168         },
1169     },
1170 };
1171 
1172 static struct clk_branch camss_csi2_ahb_clk = {
1173     .halt_reg = 0x3188,
1174     .clkr = {
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 *[]){
1180                 "mmss_ahb_clk_src",
1181             },
1182             .num_parents = 1,
1183             .ops = &clk_branch2_ops,
1184         },
1185     },
1186 };
1187 
1188 static struct clk_branch camss_csi2_clk = {
1189     .halt_reg = 0x3184,
1190     .clkr = {
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 *[]){
1196                 "csi2_clk_src",
1197             },
1198             .num_parents = 1,
1199             .flags = CLK_SET_RATE_PARENT,
1200             .ops = &clk_branch2_ops,
1201         },
1202     },
1203 };
1204 
1205 static struct clk_branch camss_csi2phy_clk = {
1206     .halt_reg = 0x3194,
1207     .clkr = {
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 *[]){
1213                 "csi2_clk_src",
1214             },
1215             .num_parents = 1,
1216             .flags = CLK_SET_RATE_PARENT,
1217             .ops = &clk_branch2_ops,
1218         },
1219     },
1220 };
1221 
1222 static struct clk_branch camss_csi2pix_clk = {
1223     .halt_reg = 0x31b4,
1224     .clkr = {
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 *[]){
1230                 "csi2_clk_src",
1231             },
1232             .num_parents = 1,
1233             .flags = CLK_SET_RATE_PARENT,
1234             .ops = &clk_branch2_ops,
1235         },
1236     },
1237 };
1238 
1239 static struct clk_branch camss_csi2rdi_clk = {
1240     .halt_reg = 0x31a4,
1241     .clkr = {
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 *[]){
1247                 "csi2_clk_src",
1248             },
1249             .num_parents = 1,
1250             .flags = CLK_SET_RATE_PARENT,
1251             .ops = &clk_branch2_ops,
1252         },
1253     },
1254 };
1255 
1256 static struct clk_branch camss_csi3_ahb_clk = {
1257     .halt_reg = 0x31e8,
1258     .clkr = {
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 *[]){
1264                 "mmss_ahb_clk_src",
1265             },
1266             .num_parents = 1,
1267             .ops = &clk_branch2_ops,
1268         },
1269     },
1270 };
1271 
1272 static struct clk_branch camss_csi3_clk = {
1273     .halt_reg = 0x31e4,
1274     .clkr = {
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 *[]){
1280                 "csi3_clk_src",
1281             },
1282             .num_parents = 1,
1283             .flags = CLK_SET_RATE_PARENT,
1284             .ops = &clk_branch2_ops,
1285         },
1286     },
1287 };
1288 
1289 static struct clk_branch camss_csi3phy_clk = {
1290     .halt_reg = 0x31f4,
1291     .clkr = {
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 *[]){
1297                 "csi3_clk_src",
1298             },
1299             .num_parents = 1,
1300             .flags = CLK_SET_RATE_PARENT,
1301             .ops = &clk_branch2_ops,
1302         },
1303     },
1304 };
1305 
1306 static struct clk_branch camss_csi3pix_clk = {
1307     .halt_reg = 0x3214,
1308     .clkr = {
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 *[]){
1314                 "csi3_clk_src",
1315             },
1316             .num_parents = 1,
1317             .flags = CLK_SET_RATE_PARENT,
1318             .ops = &clk_branch2_ops,
1319         },
1320     },
1321 };
1322 
1323 static struct clk_branch camss_csi3rdi_clk = {
1324     .halt_reg = 0x3204,
1325     .clkr = {
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 *[]){
1331                 "csi3_clk_src",
1332             },
1333             .num_parents = 1,
1334             .flags = CLK_SET_RATE_PARENT,
1335             .ops = &clk_branch2_ops,
1336         },
1337     },
1338 };
1339 
1340 static struct clk_branch camss_csi_vfe0_clk = {
1341     .halt_reg = 0x3704,
1342     .clkr = {
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 *[]){
1348                 "vfe0_clk_src",
1349             },
1350             .num_parents = 1,
1351             .flags = CLK_SET_RATE_PARENT,
1352             .ops = &clk_branch2_ops,
1353         },
1354     },
1355 };
1356 
1357 static struct clk_branch camss_csi_vfe1_clk = {
1358     .halt_reg = 0x3714,
1359     .clkr = {
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 *[]){
1365                 "vfe1_clk_src",
1366             },
1367             .num_parents = 1,
1368             .flags = CLK_SET_RATE_PARENT,
1369             .ops = &clk_branch2_ops,
1370         },
1371     },
1372 };
1373 
1374 static struct clk_branch camss_gp0_clk = {
1375     .halt_reg = 0x3444,
1376     .clkr = {
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",
1383             },
1384             .num_parents = 1,
1385             .flags = CLK_SET_RATE_PARENT,
1386             .ops = &clk_branch2_ops,
1387         },
1388     },
1389 };
1390 
1391 static struct clk_branch camss_gp1_clk = {
1392     .halt_reg = 0x3474,
1393     .clkr = {
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",
1400             },
1401             .num_parents = 1,
1402             .flags = CLK_SET_RATE_PARENT,
1403             .ops = &clk_branch2_ops,
1404         },
1405     },
1406 };
1407 
1408 static struct clk_branch camss_ispif_ahb_clk = {
1409     .halt_reg = 0x3224,
1410     .clkr = {
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 *[]){
1416                 "mmss_ahb_clk_src",
1417             },
1418             .num_parents = 1,
1419             .ops = &clk_branch2_ops,
1420         },
1421     },
1422 };
1423 
1424 static struct clk_branch camss_jpeg_jpeg0_clk = {
1425     .halt_reg = 0x35a8,
1426     .clkr = {
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 *[]){
1432                 "jpeg0_clk_src",
1433             },
1434             .num_parents = 1,
1435             .flags = CLK_SET_RATE_PARENT,
1436             .ops = &clk_branch2_ops,
1437         },
1438     },
1439 };
1440 
1441 static struct clk_branch camss_jpeg_jpeg1_clk = {
1442     .halt_reg = 0x35ac,
1443     .clkr = {
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 *[]){
1449                 "jpeg1_clk_src",
1450             },
1451             .num_parents = 1,
1452             .flags = CLK_SET_RATE_PARENT,
1453             .ops = &clk_branch2_ops,
1454         },
1455     },
1456 };
1457 
1458 static struct clk_branch camss_jpeg_jpeg2_clk = {
1459     .halt_reg = 0x35b0,
1460     .clkr = {
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 *[]){
1466                 "jpeg2_clk_src",
1467             },
1468             .num_parents = 1,
1469             .flags = CLK_SET_RATE_PARENT,
1470             .ops = &clk_branch2_ops,
1471         },
1472     },
1473 };
1474 
1475 static struct clk_branch camss_jpeg_jpeg_ahb_clk = {
1476     .halt_reg = 0x35b4,
1477     .clkr = {
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 *[]){
1483                 "mmss_ahb_clk_src",
1484             },
1485             .num_parents = 1,
1486             .ops = &clk_branch2_ops,
1487         },
1488     },
1489 };
1490 
1491 static struct clk_branch camss_jpeg_jpeg_axi_clk = {
1492     .halt_reg = 0x35b8,
1493     .clkr = {
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 *[]){
1499                 "mmss_axi_clk_src",
1500             },
1501             .num_parents = 1,
1502             .ops = &clk_branch2_ops,
1503         },
1504     },
1505 };
1506 
1507 static struct clk_branch camss_jpeg_jpeg_ocmemnoc_clk = {
1508     .halt_reg = 0x35bc,
1509     .clkr = {
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 *[]){
1515                 "ocmemnoc_clk_src",
1516             },
1517             .num_parents = 1,
1518             .flags = CLK_SET_RATE_PARENT,
1519             .ops = &clk_branch2_ops,
1520         },
1521     },
1522 };
1523 
1524 static struct clk_branch camss_mclk0_clk = {
1525     .halt_reg = 0x3384,
1526     .clkr = {
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 *[]){
1532                 "mclk0_clk_src",
1533             },
1534             .num_parents = 1,
1535             .flags = CLK_SET_RATE_PARENT,
1536             .ops = &clk_branch2_ops,
1537         },
1538     },
1539 };
1540 
1541 static struct clk_branch camss_mclk1_clk = {
1542     .halt_reg = 0x33b4,
1543     .clkr = {
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 *[]){
1549                 "mclk1_clk_src",
1550             },
1551             .num_parents = 1,
1552             .flags = CLK_SET_RATE_PARENT,
1553             .ops = &clk_branch2_ops,
1554         },
1555     },
1556 };
1557 
1558 static struct clk_branch camss_mclk2_clk = {
1559     .halt_reg = 0x33e4,
1560     .clkr = {
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 *[]){
1566                 "mclk2_clk_src",
1567             },
1568             .num_parents = 1,
1569             .flags = CLK_SET_RATE_PARENT,
1570             .ops = &clk_branch2_ops,
1571         },
1572     },
1573 };
1574 
1575 static struct clk_branch camss_mclk3_clk = {
1576     .halt_reg = 0x3414,
1577     .clkr = {
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 *[]){
1583                 "mclk3_clk_src",
1584             },
1585             .num_parents = 1,
1586             .flags = CLK_SET_RATE_PARENT,
1587             .ops = &clk_branch2_ops,
1588         },
1589     },
1590 };
1591 
1592 static struct clk_branch camss_micro_ahb_clk = {
1593     .halt_reg = 0x3494,
1594     .clkr = {
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 *[]){
1600                 "mmss_ahb_clk_src",
1601             },
1602             .num_parents = 1,
1603             .ops = &clk_branch2_ops,
1604         },
1605     },
1606 };
1607 
1608 static struct clk_branch camss_phy0_csi0phytimer_clk = {
1609     .halt_reg = 0x3024,
1610     .clkr = {
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",
1617             },
1618             .num_parents = 1,
1619             .flags = CLK_SET_RATE_PARENT,
1620             .ops = &clk_branch2_ops,
1621         },
1622     },
1623 };
1624 
1625 static struct clk_branch camss_phy1_csi1phytimer_clk = {
1626     .halt_reg = 0x3054,
1627     .clkr = {
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",
1634             },
1635             .num_parents = 1,
1636             .flags = CLK_SET_RATE_PARENT,
1637             .ops = &clk_branch2_ops,
1638         },
1639     },
1640 };
1641 
1642 static struct clk_branch camss_phy2_csi2phytimer_clk = {
1643     .halt_reg = 0x3084,
1644     .clkr = {
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",
1651             },
1652             .num_parents = 1,
1653             .flags = CLK_SET_RATE_PARENT,
1654             .ops = &clk_branch2_ops,
1655         },
1656     },
1657 };
1658 
1659 static struct clk_branch camss_top_ahb_clk = {
1660     .halt_reg = 0x3484,
1661     .clkr = {
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 *[]){
1667                 "mmss_ahb_clk_src",
1668             },
1669             .num_parents = 1,
1670             .ops = &clk_branch2_ops,
1671         },
1672     },
1673 };
1674 
1675 static struct clk_branch camss_vfe_cpp_ahb_clk = {
1676     .halt_reg = 0x36b4,
1677     .clkr = {
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 *[]){
1683                 "mmss_ahb_clk_src",
1684             },
1685             .num_parents = 1,
1686             .ops = &clk_branch2_ops,
1687         },
1688     },
1689 };
1690 
1691 static struct clk_branch camss_vfe_cpp_clk = {
1692     .halt_reg = 0x36b0,
1693     .clkr = {
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 *[]){
1699                 "cpp_clk_src",
1700             },
1701             .num_parents = 1,
1702             .flags = CLK_SET_RATE_PARENT,
1703             .ops = &clk_branch2_ops,
1704         },
1705     },
1706 };
1707 
1708 static struct clk_branch camss_vfe_vfe0_clk = {
1709     .halt_reg = 0x36a8,
1710     .clkr = {
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 *[]){
1716                 "vfe0_clk_src",
1717             },
1718             .num_parents = 1,
1719             .flags = CLK_SET_RATE_PARENT,
1720             .ops = &clk_branch2_ops,
1721         },
1722     },
1723 };
1724 
1725 static struct clk_branch camss_vfe_vfe1_clk = {
1726     .halt_reg = 0x36ac,
1727     .clkr = {
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 *[]){
1733                 "vfe1_clk_src",
1734             },
1735             .num_parents = 1,
1736             .flags = CLK_SET_RATE_PARENT,
1737             .ops = &clk_branch2_ops,
1738         },
1739     },
1740 };
1741 
1742 static struct clk_branch camss_vfe_vfe_ahb_clk = {
1743     .halt_reg = 0x36b8,
1744     .clkr = {
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 *[]){
1750                 "mmss_ahb_clk_src",
1751             },
1752             .num_parents = 1,
1753             .ops = &clk_branch2_ops,
1754         },
1755     },
1756 };
1757 
1758 static struct clk_branch camss_vfe_vfe_axi_clk = {
1759     .halt_reg = 0x36bc,
1760     .clkr = {
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 *[]){
1766                 "mmss_axi_clk_src",
1767             },
1768             .num_parents = 1,
1769             .ops = &clk_branch2_ops,
1770         },
1771     },
1772 };
1773 
1774 static struct clk_branch camss_vfe_vfe_ocmemnoc_clk = {
1775     .halt_reg = 0x36c0,
1776     .clkr = {
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 *[]){
1782                 "ocmemnoc_clk_src",
1783             },
1784             .num_parents = 1,
1785             .flags = CLK_SET_RATE_PARENT,
1786             .ops = &clk_branch2_ops,
1787         },
1788     },
1789 };
1790 
1791 static struct clk_branch mdss_ahb_clk = {
1792     .halt_reg = 0x2308,
1793     .clkr = {
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 *[]){
1799                 "mmss_ahb_clk_src",
1800             },
1801             .num_parents = 1,
1802             .ops = &clk_branch2_ops,
1803         },
1804     },
1805 };
1806 
1807 static struct clk_branch mdss_axi_clk = {
1808     .halt_reg = 0x2310,
1809     .clkr = {
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 *[]){
1815                 "mmss_axi_clk_src",
1816             },
1817             .num_parents = 1,
1818             .flags = CLK_SET_RATE_PARENT,
1819             .ops = &clk_branch2_ops,
1820         },
1821     },
1822 };
1823 
1824 static struct clk_branch mdss_byte0_clk = {
1825     .halt_reg = 0x233c,
1826     .clkr = {
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 *[]){
1832                 "byte0_clk_src",
1833             },
1834             .num_parents = 1,
1835             .flags = CLK_SET_RATE_PARENT,
1836             .ops = &clk_branch2_ops,
1837         },
1838     },
1839 };
1840 
1841 static struct clk_branch mdss_byte1_clk = {
1842     .halt_reg = 0x2340,
1843     .clkr = {
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 *[]){
1849                 "byte1_clk_src",
1850             },
1851             .num_parents = 1,
1852             .flags = CLK_SET_RATE_PARENT,
1853             .ops = &clk_branch2_ops,
1854         },
1855     },
1856 };
1857 
1858 static struct clk_branch mdss_edpaux_clk = {
1859     .halt_reg = 0x2334,
1860     .clkr = {
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 *[]){
1866                 "edpaux_clk_src",
1867             },
1868             .num_parents = 1,
1869             .flags = CLK_SET_RATE_PARENT,
1870             .ops = &clk_branch2_ops,
1871         },
1872     },
1873 };
1874 
1875 static struct clk_branch mdss_edplink_clk = {
1876     .halt_reg = 0x2330,
1877     .clkr = {
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 *[]){
1883                 "edplink_clk_src",
1884             },
1885             .num_parents = 1,
1886             .flags = CLK_SET_RATE_PARENT,
1887             .ops = &clk_branch2_ops,
1888         },
1889     },
1890 };
1891 
1892 static struct clk_branch mdss_edppixel_clk = {
1893     .halt_reg = 0x232c,
1894     .clkr = {
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 *[]){
1900                 "edppixel_clk_src",
1901             },
1902             .num_parents = 1,
1903             .flags = CLK_SET_RATE_PARENT,
1904             .ops = &clk_branch2_ops,
1905         },
1906     },
1907 };
1908 
1909 static struct clk_branch mdss_esc0_clk = {
1910     .halt_reg = 0x2344,
1911     .clkr = {
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 *[]){
1917                 "esc0_clk_src",
1918             },
1919             .num_parents = 1,
1920             .flags = CLK_SET_RATE_PARENT,
1921             .ops = &clk_branch2_ops,
1922         },
1923     },
1924 };
1925 
1926 static struct clk_branch mdss_esc1_clk = {
1927     .halt_reg = 0x2348,
1928     .clkr = {
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 *[]){
1934                 "esc1_clk_src",
1935             },
1936             .num_parents = 1,
1937             .flags = CLK_SET_RATE_PARENT,
1938             .ops = &clk_branch2_ops,
1939         },
1940     },
1941 };
1942 
1943 static struct clk_branch mdss_extpclk_clk = {
1944     .halt_reg = 0x2324,
1945     .clkr = {
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 *[]){
1951                 "extpclk_clk_src",
1952             },
1953             .num_parents = 1,
1954             .flags = CLK_SET_RATE_PARENT,
1955             .ops = &clk_branch2_ops,
1956         },
1957     },
1958 };
1959 
1960 static struct clk_branch mdss_hdmi_ahb_clk = {
1961     .halt_reg = 0x230c,
1962     .clkr = {
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 *[]){
1968                 "mmss_ahb_clk_src",
1969             },
1970             .num_parents = 1,
1971             .ops = &clk_branch2_ops,
1972         },
1973     },
1974 };
1975 
1976 static struct clk_branch mdss_hdmi_clk = {
1977     .halt_reg = 0x2338,
1978     .clkr = {
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 *[]){
1984                 "hdmi_clk_src",
1985             },
1986             .num_parents = 1,
1987             .flags = CLK_SET_RATE_PARENT,
1988             .ops = &clk_branch2_ops,
1989         },
1990     },
1991 };
1992 
1993 static struct clk_branch mdss_mdp_clk = {
1994     .halt_reg = 0x231c,
1995     .clkr = {
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 *[]){
2001                 "mdp_clk_src",
2002             },
2003             .num_parents = 1,
2004             .flags = CLK_SET_RATE_PARENT,
2005             .ops = &clk_branch2_ops,
2006         },
2007     },
2008 };
2009 
2010 static struct clk_branch mdss_mdp_lut_clk = {
2011     .halt_reg = 0x2320,
2012     .clkr = {
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 *[]){
2018                 "mdp_clk_src",
2019             },
2020             .num_parents = 1,
2021             .flags = CLK_SET_RATE_PARENT,
2022             .ops = &clk_branch2_ops,
2023         },
2024     },
2025 };
2026 
2027 static struct clk_branch mdss_pclk0_clk = {
2028     .halt_reg = 0x2314,
2029     .clkr = {
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 *[]){
2035                 "pclk0_clk_src",
2036             },
2037             .num_parents = 1,
2038             .flags = CLK_SET_RATE_PARENT,
2039             .ops = &clk_branch2_ops,
2040         },
2041     },
2042 };
2043 
2044 static struct clk_branch mdss_pclk1_clk = {
2045     .halt_reg = 0x2318,
2046     .clkr = {
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 *[]){
2052                 "pclk1_clk_src",
2053             },
2054             .num_parents = 1,
2055             .flags = CLK_SET_RATE_PARENT,
2056             .ops = &clk_branch2_ops,
2057         },
2058     },
2059 };
2060 
2061 static struct clk_branch mdss_vsync_clk = {
2062     .halt_reg = 0x2328,
2063     .clkr = {
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 *[]){
2069                 "vsync_clk_src",
2070             },
2071             .num_parents = 1,
2072             .flags = CLK_SET_RATE_PARENT,
2073             .ops = &clk_branch2_ops,
2074         },
2075     },
2076 };
2077 
2078 static struct clk_branch mmss_misc_ahb_clk = {
2079     .halt_reg = 0x502c,
2080     .clkr = {
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 *[]){
2086                 "mmss_ahb_clk_src",
2087             },
2088             .num_parents = 1,
2089             .ops = &clk_branch2_ops,
2090         },
2091     },
2092 };
2093 
2094 static struct clk_branch mmss_mmssnoc_ahb_clk = {
2095     .halt_reg = 0x5024,
2096     .clkr = {
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 *[]){
2102                 "mmss_ahb_clk_src",
2103             },
2104             .num_parents = 1,
2105             .ops = &clk_branch2_ops,
2106             .flags = CLK_IGNORE_UNUSED,
2107         },
2108     },
2109 };
2110 
2111 static struct clk_branch mmss_mmssnoc_bto_ahb_clk = {
2112     .halt_reg = 0x5028,
2113     .clkr = {
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 *[]){
2119                 "mmss_ahb_clk_src",
2120             },
2121             .num_parents = 1,
2122             .ops = &clk_branch2_ops,
2123             .flags = CLK_IGNORE_UNUSED,
2124         },
2125     },
2126 };
2127 
2128 static struct clk_branch mmss_mmssnoc_axi_clk = {
2129     .halt_reg = 0x506c,
2130     .clkr = {
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 *[]){
2136                 "mmss_axi_clk_src",
2137             },
2138             .num_parents = 1,
2139             .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2140             .ops = &clk_branch2_ops,
2141         },
2142     },
2143 };
2144 
2145 static struct clk_branch mmss_s0_axi_clk = {
2146     .halt_reg = 0x5064,
2147     .clkr = {
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 *[]){
2153                 "mmss_axi_clk_src",
2154             },
2155             .num_parents = 1,
2156             .ops = &clk_branch2_ops,
2157             .flags = CLK_IGNORE_UNUSED,
2158         },
2159     },
2160 };
2161 
2162 static struct clk_branch ocmemcx_ahb_clk = {
2163     .halt_reg = 0x405c,
2164     .clkr = {
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 *[]){
2170                 "mmss_ahb_clk_src",
2171             },
2172             .num_parents = 1,
2173             .ops = &clk_branch2_ops,
2174         },
2175     },
2176 };
2177 
2178 static struct clk_branch ocmemcx_ocmemnoc_clk = {
2179     .halt_reg = 0x4058,
2180     .clkr = {
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 *[]){
2186                 "ocmemnoc_clk_src",
2187             },
2188             .num_parents = 1,
2189             .flags = CLK_SET_RATE_PARENT,
2190             .ops = &clk_branch2_ops,
2191         },
2192     },
2193 };
2194 
2195 static struct clk_branch oxili_ocmemgx_clk = {
2196     .halt_reg = 0x402c,
2197     .clkr = {
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 *[]){
2203                 "gfx3d_clk_src",
2204             },
2205             .num_parents = 1,
2206             .flags = CLK_SET_RATE_PARENT,
2207             .ops = &clk_branch2_ops,
2208         },
2209     },
2210 };
2211 
2212 static struct clk_branch ocmemnoc_clk = {
2213     .halt_reg = 0x50b4,
2214     .clkr = {
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 *[]){
2220                 "ocmemnoc_clk_src",
2221             },
2222             .num_parents = 1,
2223             .flags = CLK_SET_RATE_PARENT,
2224             .ops = &clk_branch2_ops,
2225         },
2226     },
2227 };
2228 
2229 static struct clk_branch oxili_gfx3d_clk = {
2230     .halt_reg = 0x4028,
2231     .clkr = {
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 *[]){
2237                 "gfx3d_clk_src",
2238             },
2239             .num_parents = 1,
2240             .flags = CLK_SET_RATE_PARENT,
2241             .ops = &clk_branch2_ops,
2242         },
2243     },
2244 };
2245 
2246 static struct clk_branch oxilicx_ahb_clk = {
2247     .halt_reg = 0x403c,
2248     .clkr = {
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 *[]){
2254                 "mmss_ahb_clk_src",
2255             },
2256             .num_parents = 1,
2257             .ops = &clk_branch2_ops,
2258         },
2259     },
2260 };
2261 
2262 static struct clk_branch oxilicx_axi_clk = {
2263     .halt_reg = 0x4038,
2264     .clkr = {
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 *[]){
2270                 "mmss_axi_clk_src",
2271             },
2272             .num_parents = 1,
2273             .ops = &clk_branch2_ops,
2274         },
2275     },
2276 };
2277 
2278 static struct clk_branch venus0_ahb_clk = {
2279     .halt_reg = 0x1030,
2280     .clkr = {
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 *[]){
2286                 "mmss_ahb_clk_src",
2287             },
2288             .num_parents = 1,
2289             .ops = &clk_branch2_ops,
2290         },
2291     },
2292 };
2293 
2294 static struct clk_branch venus0_axi_clk = {
2295     .halt_reg = 0x1034,
2296     .clkr = {
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 *[]){
2302                 "mmss_axi_clk_src",
2303             },
2304             .num_parents = 1,
2305             .ops = &clk_branch2_ops,
2306         },
2307     },
2308 };
2309 
2310 static struct clk_branch venus0_ocmemnoc_clk = {
2311     .halt_reg = 0x1038,
2312     .clkr = {
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 *[]){
2318                 "ocmemnoc_clk_src",
2319             },
2320             .num_parents = 1,
2321             .flags = CLK_SET_RATE_PARENT,
2322             .ops = &clk_branch2_ops,
2323         },
2324     },
2325 };
2326 
2327 static struct clk_branch venus0_vcodec0_clk = {
2328     .halt_reg = 0x1028,
2329     .clkr = {
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 *[]){
2335                 "vcodec0_clk_src",
2336             },
2337             .num_parents = 1,
2338             .flags = CLK_SET_RATE_PARENT,
2339             .ops = &clk_branch2_ops,
2340         },
2341     },
2342 };
2343 
2344 static const struct pll_config mmpll1_config = {
2345     .l = 60,
2346     .m = 25,
2347     .n = 32,
2348     .vco_val = 0x0,
2349     .vco_mask = 0x3 << 20,
2350     .pre_div_val = 0x0,
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),
2356 };
2357 
2358 static struct pll_config mmpll3_config = {
2359     .l = 48,
2360     .m = 7,
2361     .n = 16,
2362     .vco_val = 0x0,
2363     .vco_mask = 0x3 << 20,
2364     .pre_div_val = 0x0,
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),
2371 };
2372 
2373 static struct gdsc venus0_gdsc = {
2374     .gdscr = 0x1024,
2375     .cxcs = (unsigned int []){ 0x1028 },
2376     .cxc_count = 1,
2377     .resets = (unsigned int []){ VENUS0_RESET },
2378     .reset_count = 1,
2379     .pd = {
2380         .name = "venus0",
2381     },
2382     .pwrsts = PWRSTS_ON,
2383 };
2384 
2385 static struct gdsc mdss_gdsc = {
2386     .gdscr = 0x2304,
2387     .cxcs = (unsigned int []){ 0x231c, 0x2320 },
2388     .cxc_count = 2,
2389     .pd = {
2390         .name = "mdss",
2391     },
2392     .pwrsts = PWRSTS_RET_ON,
2393 };
2394 
2395 static struct gdsc camss_jpeg_gdsc = {
2396     .gdscr = 0x35a4,
2397     .cxcs = (unsigned int []){ 0x35a8, 0x35ac, 0x35b0 },
2398     .cxc_count = 3,
2399     .pd = {
2400         .name = "camss_jpeg",
2401     },
2402     .pwrsts = PWRSTS_OFF_ON,
2403 };
2404 
2405 static struct gdsc camss_vfe_gdsc = {
2406     .gdscr = 0x36a4,
2407     .cxcs = (unsigned int []){ 0x36a8, 0x36ac, 0x3704, 0x3714, 0x36b0 },
2408     .cxc_count = 5,
2409     .pd = {
2410         .name = "camss_vfe",
2411     },
2412     .pwrsts = PWRSTS_OFF_ON,
2413 };
2414 
2415 static struct gdsc oxili_gdsc = {
2416     .gdscr = 0x4024,
2417     .cxcs = (unsigned int []){ 0x4028 },
2418     .cxc_count = 1,
2419     .pd = {
2420         .name = "oxili",
2421     },
2422     .pwrsts = PWRSTS_OFF_ON,
2423 };
2424 
2425 static struct gdsc oxilicx_gdsc = {
2426     .gdscr = 0x4034,
2427     .pd = {
2428         .name = "oxilicx",
2429     },
2430     .parent = &oxili_gdsc.pd,
2431     .pwrsts = PWRSTS_OFF_ON,
2432 };
2433 
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,
2510 };
2511 
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 },
2517 };
2518 
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,
2524 };
2525 
2526 static const struct regmap_config mmcc_msm8226_regmap_config = {
2527     .reg_bits   = 32,
2528     .reg_stride = 4,
2529     .val_bits   = 32,
2530     .max_register   = 0x5104,
2531     .fast_io    = true,
2532 };
2533 
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),
2542 };
2543 
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,
2670 };
2671 
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 },
2717 };
2718 
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,
2726 };
2727 
2728 static const struct regmap_config mmcc_msm8974_regmap_config = {
2729     .reg_bits   = 32,
2730     .reg_stride = 4,
2731     .val_bits   = 32,
2732     .max_register   = 0x5104,
2733     .fast_io    = true,
2734 };
2735 
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),
2744 };
2745 
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 },
2749     { }
2750 };
2751 MODULE_DEVICE_TABLE(of, mmcc_msm8974_match_table);
2752 
2753 static void msm8226_clock_override(void)
2754 {
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;
2762 }
2763 
2764 static int mmcc_msm8974_probe(struct platform_device *pdev)
2765 {
2766     struct regmap *regmap;
2767     const struct qcom_cc_desc *desc;
2768 
2769     desc = of_device_get_match_data(&pdev->dev);
2770     if (!desc)
2771         return -EINVAL;
2772 
2773     regmap = qcom_cc_map(pdev, desc);
2774     if (IS_ERR(regmap))
2775         return PTR_ERR(regmap);
2776 
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);
2780     } else {
2781         msm8226_clock_override();
2782     }
2783 
2784     return qcom_cc_really_probe(pdev, desc, regmap);
2785 }
2786 
2787 static struct platform_driver mmcc_msm8974_driver = {
2788     .probe      = mmcc_msm8974_probe,
2789     .driver     = {
2790         .name   = "mmcc-msm8974",
2791         .of_match_table = mmcc_msm8974_match_table,
2792     },
2793 };
2794 module_platform_driver(mmcc_msm8974_driver);
2795 
2796 MODULE_DESCRIPTION("QCOM MMCC MSM8974 Driver");
2797 MODULE_LICENSE("GPL v2");
2798 MODULE_ALIAS("platform:mmcc-msm8974");