root/drivers/clk/qcom/mmcc-msm8974.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. mmcc_msm8974_probe

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

/* [<][>][^][v][top][bottom][index][help] */