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