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