linux/drivers/clk/qcom/mmcc-apq8084.c
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
   3 *
   4 * This software is licensed under the terms of the GNU General Public
   5 * License version 2, as published by the Free Software Foundation, and
   6 * may be copied, distributed, and modified under those terms.
   7 *
   8 * This program is distributed in the hope that it will be useful,
   9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11 * GNU General Public License for more details.
  12 */
  13
  14#include <linux/kernel.h>
  15#include <linux/platform_device.h>
  16#include <linux/module.h>
  17#include <linux/regmap.h>
  18#include <linux/reset-controller.h>
  19
  20#include <dt-bindings/clock/qcom,mmcc-apq8084.h>
  21#include <dt-bindings/reset/qcom,mmcc-apq8084.h>
  22
  23#include "common.h"
  24#include "clk-regmap.h"
  25#include "clk-pll.h"
  26#include "clk-rcg.h"
  27#include "clk-branch.h"
  28#include "reset.h"
  29#include "gdsc.h"
  30
  31enum {
  32        P_XO,
  33        P_MMPLL0,
  34        P_EDPLINK,
  35        P_MMPLL1,
  36        P_HDMIPLL,
  37        P_GPLL0,
  38        P_EDPVCO,
  39        P_MMPLL4,
  40        P_DSI0PLL,
  41        P_DSI0PLL_BYTE,
  42        P_MMPLL2,
  43        P_MMPLL3,
  44        P_GPLL1,
  45        P_DSI1PLL,
  46        P_DSI1PLL_BYTE,
  47        P_MMSLEEP,
  48};
  49
  50static const struct parent_map mmcc_xo_mmpll0_mmpll1_gpll0_map[] = {
  51        { P_XO, 0 },
  52        { P_MMPLL0, 1 },
  53        { P_MMPLL1, 2 },
  54        { P_GPLL0, 5 }
  55};
  56
  57static const char * const mmcc_xo_mmpll0_mmpll1_gpll0[] = {
  58        "xo",
  59        "mmpll0_vote",
  60        "mmpll1_vote",
  61        "mmss_gpll0_vote",
  62};
  63
  64static const struct parent_map mmcc_xo_mmpll0_dsi_hdmi_gpll0_map[] = {
  65        { P_XO, 0 },
  66        { P_MMPLL0, 1 },
  67        { P_HDMIPLL, 4 },
  68        { P_GPLL0, 5 },
  69        { P_DSI0PLL, 2 },
  70        { P_DSI1PLL, 3 }
  71};
  72
  73static const char * const mmcc_xo_mmpll0_dsi_hdmi_gpll0[] = {
  74        "xo",
  75        "mmpll0_vote",
  76        "hdmipll",
  77        "mmss_gpll0_vote",
  78        "dsi0pll",
  79        "dsi1pll",
  80};
  81
  82static const struct parent_map mmcc_xo_mmpll0_1_2_gpll0_map[] = {
  83        { P_XO, 0 },
  84        { P_MMPLL0, 1 },
  85        { P_MMPLL1, 2 },
  86        { P_GPLL0, 5 },
  87        { P_MMPLL2, 3 }
  88};
  89
  90static const char * const mmcc_xo_mmpll0_1_2_gpll0[] = {
  91        "xo",
  92        "mmpll0_vote",
  93        "mmpll1_vote",
  94        "mmss_gpll0_vote",
  95        "mmpll2",
  96};
  97
  98static const struct parent_map mmcc_xo_mmpll0_1_3_gpll0_map[] = {
  99        { P_XO, 0 },
 100        { P_MMPLL0, 1 },
 101        { P_MMPLL1, 2 },
 102        { P_GPLL0, 5 },
 103        { P_MMPLL3, 3 }
 104};
 105
 106static const char * const mmcc_xo_mmpll0_1_3_gpll0[] = {
 107        "xo",
 108        "mmpll0_vote",
 109        "mmpll1_vote",
 110        "mmss_gpll0_vote",
 111        "mmpll3",
 112};
 113
 114static const struct parent_map mmcc_xo_dsi_hdmi_edp_map[] = {
 115        { P_XO, 0 },
 116        { P_EDPLINK, 4 },
 117        { P_HDMIPLL, 3 },
 118        { P_EDPVCO, 5 },
 119        { P_DSI0PLL, 1 },
 120        { P_DSI1PLL, 2 }
 121};
 122
 123static const char * const mmcc_xo_dsi_hdmi_edp[] = {
 124        "xo",
 125        "edp_link_clk",
 126        "hdmipll",
 127        "edp_vco_div",
 128        "dsi0pll",
 129        "dsi1pll",
 130};
 131
 132static const struct parent_map mmcc_xo_dsi_hdmi_edp_gpll0_map[] = {
 133        { P_XO, 0 },
 134        { P_EDPLINK, 4 },
 135        { P_HDMIPLL, 3 },
 136        { P_GPLL0, 5 },
 137        { P_DSI0PLL, 1 },
 138        { P_DSI1PLL, 2 }
 139};
 140
 141static const char * const mmcc_xo_dsi_hdmi_edp_gpll0[] = {
 142        "xo",
 143        "edp_link_clk",
 144        "hdmipll",
 145        "gpll0_vote",
 146        "dsi0pll",
 147        "dsi1pll",
 148};
 149
 150static const struct parent_map mmcc_xo_dsibyte_hdmi_edp_gpll0_map[] = {
 151        { P_XO, 0 },
 152        { P_EDPLINK, 4 },
 153        { P_HDMIPLL, 3 },
 154        { P_GPLL0, 5 },
 155        { P_DSI0PLL_BYTE, 1 },
 156        { P_DSI1PLL_BYTE, 2 }
 157};
 158
 159static const char * const mmcc_xo_dsibyte_hdmi_edp_gpll0[] = {
 160        "xo",
 161        "edp_link_clk",
 162        "hdmipll",
 163        "gpll0_vote",
 164        "dsi0pllbyte",
 165        "dsi1pllbyte",
 166};
 167
 168static const struct parent_map mmcc_xo_mmpll0_1_4_gpll0_map[] = {
 169        { P_XO, 0 },
 170        { P_MMPLL0, 1 },
 171        { P_MMPLL1, 2 },
 172        { P_GPLL0, 5 },
 173        { P_MMPLL4, 3 }
 174};
 175
 176static const char * const mmcc_xo_mmpll0_1_4_gpll0[] = {
 177        "xo",
 178        "mmpll0",
 179        "mmpll1",
 180        "mmpll4",
 181        "gpll0",
 182};
 183
 184static const struct parent_map mmcc_xo_mmpll0_1_4_gpll1_0_map[] = {
 185        { P_XO, 0 },
 186        { P_MMPLL0, 1 },
 187        { P_MMPLL1, 2 },
 188        { P_MMPLL4, 3 },
 189        { P_GPLL0, 5 },
 190        { P_GPLL1, 4 }
 191};
 192
 193static const char * const mmcc_xo_mmpll0_1_4_gpll1_0[] = {
 194        "xo",
 195        "mmpll0",
 196        "mmpll1",
 197        "mmpll4",
 198        "gpll1",
 199        "gpll0",
 200};
 201
 202static const struct parent_map mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map[] = {
 203        { P_XO, 0 },
 204        { P_MMPLL0, 1 },
 205        { P_MMPLL1, 2 },
 206        { P_MMPLL4, 3 },
 207        { P_GPLL0, 5 },
 208        { P_GPLL1, 4 },
 209        { P_MMSLEEP, 6 }
 210};
 211
 212static const char * const mmcc_xo_mmpll0_1_4_gpll1_0_sleep[] = {
 213        "xo",
 214        "mmpll0",
 215        "mmpll1",
 216        "mmpll4",
 217        "gpll1",
 218        "gpll0",
 219        "sleep_clk_src",
 220};
 221
 222#define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
 223
 224static struct clk_pll mmpll0 = {
 225        .l_reg = 0x0004,
 226        .m_reg = 0x0008,
 227        .n_reg = 0x000c,
 228        .config_reg = 0x0014,
 229        .mode_reg = 0x0000,
 230        .status_reg = 0x001c,
 231        .status_bit = 17,
 232        .clkr.hw.init = &(struct clk_init_data){
 233                .name = "mmpll0",
 234                .parent_names = (const char *[]){ "xo" },
 235                .num_parents = 1,
 236                .ops = &clk_pll_ops,
 237        },
 238};
 239
 240static struct clk_regmap mmpll0_vote = {
 241        .enable_reg = 0x0100,
 242        .enable_mask = BIT(0),
 243        .hw.init = &(struct clk_init_data){
 244                .name = "mmpll0_vote",
 245                .parent_names = (const char *[]){ "mmpll0" },
 246                .num_parents = 1,
 247                .ops = &clk_pll_vote_ops,
 248        },
 249};
 250
 251static struct clk_pll mmpll1 = {
 252        .l_reg = 0x0044,
 253        .m_reg = 0x0048,
 254        .n_reg = 0x004c,
 255        .config_reg = 0x0050,
 256        .mode_reg = 0x0040,
 257        .status_reg = 0x005c,
 258        .status_bit = 17,
 259        .clkr.hw.init = &(struct clk_init_data){
 260                .name = "mmpll1",
 261                .parent_names = (const char *[]){ "xo" },
 262                .num_parents = 1,
 263                .ops = &clk_pll_ops,
 264        },
 265};
 266
 267static struct clk_regmap mmpll1_vote = {
 268        .enable_reg = 0x0100,
 269        .enable_mask = BIT(1),
 270        .hw.init = &(struct clk_init_data){
 271                .name = "mmpll1_vote",
 272                .parent_names = (const char *[]){ "mmpll1" },
 273                .num_parents = 1,
 274                .ops = &clk_pll_vote_ops,
 275        },
 276};
 277
 278static struct clk_pll mmpll2 = {
 279        .l_reg = 0x4104,
 280        .m_reg = 0x4108,
 281        .n_reg = 0x410c,
 282        .config_reg = 0x4110,
 283        .mode_reg = 0x4100,
 284        .status_reg = 0x411c,
 285        .clkr.hw.init = &(struct clk_init_data){
 286                .name = "mmpll2",
 287                .parent_names = (const char *[]){ "xo" },
 288                .num_parents = 1,
 289                .ops = &clk_pll_ops,
 290        },
 291};
 292
 293static struct clk_pll mmpll3 = {
 294        .l_reg = 0x0084,
 295        .m_reg = 0x0088,
 296        .n_reg = 0x008c,
 297        .config_reg = 0x0090,
 298        .mode_reg = 0x0080,
 299        .status_reg = 0x009c,
 300        .status_bit = 17,
 301        .clkr.hw.init = &(struct clk_init_data){
 302                .name = "mmpll3",
 303                .parent_names = (const char *[]){ "xo" },
 304                .num_parents = 1,
 305                .ops = &clk_pll_ops,
 306        },
 307};
 308
 309static struct clk_pll mmpll4 = {
 310        .l_reg = 0x00a4,
 311        .m_reg = 0x00a8,
 312        .n_reg = 0x00ac,
 313        .config_reg = 0x00b0,
 314        .mode_reg = 0x0080,
 315        .status_reg = 0x00bc,
 316        .clkr.hw.init = &(struct clk_init_data){
 317                .name = "mmpll4",
 318                .parent_names = (const char *[]){ "xo" },
 319                .num_parents = 1,
 320                .ops = &clk_pll_ops,
 321        },
 322};
 323
 324static struct clk_rcg2 mmss_ahb_clk_src = {
 325        .cmd_rcgr = 0x5000,
 326        .hid_width = 5,
 327        .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
 328        .clkr.hw.init = &(struct clk_init_data){
 329                .name = "mmss_ahb_clk_src",
 330                .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
 331                .num_parents = 4,
 332                .ops = &clk_rcg2_ops,
 333        },
 334};
 335
 336static struct freq_tbl ftbl_mmss_axi_clk[] = {
 337        F(19200000, P_XO, 1, 0, 0),
 338        F(37500000, P_GPLL0, 16, 0, 0),
 339        F(50000000, P_GPLL0, 12, 0, 0),
 340        F(75000000, P_GPLL0, 8, 0, 0),
 341        F(100000000, P_GPLL0, 6, 0, 0),
 342        F(150000000, P_GPLL0, 4, 0, 0),
 343        F(333430000, P_MMPLL1, 3.5, 0, 0),
 344        F(400000000, P_MMPLL0, 2, 0, 0),
 345        F(466800000, P_MMPLL1, 2.5, 0, 0),
 346};
 347
 348static struct clk_rcg2 mmss_axi_clk_src = {
 349        .cmd_rcgr = 0x5040,
 350        .hid_width = 5,
 351        .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
 352        .freq_tbl = ftbl_mmss_axi_clk,
 353        .clkr.hw.init = &(struct clk_init_data){
 354                .name = "mmss_axi_clk_src",
 355                .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
 356                .num_parents = 4,
 357                .ops = &clk_rcg2_ops,
 358        },
 359};
 360
 361static struct freq_tbl ftbl_ocmemnoc_clk[] = {
 362        F(19200000, P_XO, 1, 0, 0),
 363        F(37500000, P_GPLL0, 16, 0, 0),
 364        F(50000000, P_GPLL0, 12, 0, 0),
 365        F(75000000, P_GPLL0, 8, 0, 0),
 366        F(109090000, P_GPLL0, 5.5, 0, 0),
 367        F(150000000, P_GPLL0, 4, 0, 0),
 368        F(228570000, P_MMPLL0, 3.5, 0, 0),
 369        F(320000000, P_MMPLL0, 2.5, 0, 0),
 370};
 371
 372static struct clk_rcg2 ocmemnoc_clk_src = {
 373        .cmd_rcgr = 0x5090,
 374        .hid_width = 5,
 375        .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
 376        .freq_tbl = ftbl_ocmemnoc_clk,
 377        .clkr.hw.init = &(struct clk_init_data){
 378                .name = "ocmemnoc_clk_src",
 379                .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
 380                .num_parents = 4,
 381                .ops = &clk_rcg2_ops,
 382        },
 383};
 384
 385static struct freq_tbl ftbl_camss_csi0_3_clk[] = {
 386        F(100000000, P_GPLL0, 6, 0, 0),
 387        F(200000000, P_MMPLL0, 4, 0, 0),
 388        { }
 389};
 390
 391static struct clk_rcg2 csi0_clk_src = {
 392        .cmd_rcgr = 0x3090,
 393        .hid_width = 5,
 394        .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
 395        .freq_tbl = ftbl_camss_csi0_3_clk,
 396        .clkr.hw.init = &(struct clk_init_data){
 397                .name = "csi0_clk_src",
 398                .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
 399                .num_parents = 5,
 400                .ops = &clk_rcg2_ops,
 401        },
 402};
 403
 404static struct clk_rcg2 csi1_clk_src = {
 405        .cmd_rcgr = 0x3100,
 406        .hid_width = 5,
 407        .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
 408        .freq_tbl = ftbl_camss_csi0_3_clk,
 409        .clkr.hw.init = &(struct clk_init_data){
 410                .name = "csi1_clk_src",
 411                .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
 412                .num_parents = 5,
 413                .ops = &clk_rcg2_ops,
 414        },
 415};
 416
 417static struct clk_rcg2 csi2_clk_src = {
 418        .cmd_rcgr = 0x3160,
 419        .hid_width = 5,
 420        .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
 421        .freq_tbl = ftbl_camss_csi0_3_clk,
 422        .clkr.hw.init = &(struct clk_init_data){
 423                .name = "csi2_clk_src",
 424                .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
 425                .num_parents = 5,
 426                .ops = &clk_rcg2_ops,
 427        },
 428};
 429
 430static struct clk_rcg2 csi3_clk_src = {
 431        .cmd_rcgr = 0x31c0,
 432        .hid_width = 5,
 433        .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
 434        .freq_tbl = ftbl_camss_csi0_3_clk,
 435        .clkr.hw.init = &(struct clk_init_data){
 436                .name = "csi3_clk_src",
 437                .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
 438                .num_parents = 5,
 439                .ops = &clk_rcg2_ops,
 440        },
 441};
 442
 443static struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
 444        F(37500000, P_GPLL0, 16, 0, 0),
 445        F(50000000, P_GPLL0, 12, 0, 0),
 446        F(60000000, P_GPLL0, 10, 0, 0),
 447        F(80000000, P_GPLL0, 7.5, 0, 0),
 448        F(100000000, P_GPLL0, 6, 0, 0),
 449        F(109090000, P_GPLL0, 5.5, 0, 0),
 450        F(133330000, P_GPLL0, 4.5, 0, 0),
 451        F(200000000, P_GPLL0, 3, 0, 0),
 452        F(228570000, P_MMPLL0, 3.5, 0, 0),
 453        F(266670000, P_MMPLL0, 3, 0, 0),
 454        F(320000000, P_MMPLL0, 2.5, 0, 0),
 455        F(465000000, P_MMPLL4, 2, 0, 0),
 456        F(600000000, P_GPLL0, 1, 0, 0),
 457        { }
 458};
 459
 460static struct clk_rcg2 vfe0_clk_src = {
 461        .cmd_rcgr = 0x3600,
 462        .hid_width = 5,
 463        .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
 464        .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
 465        .clkr.hw.init = &(struct clk_init_data){
 466                .name = "vfe0_clk_src",
 467                .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
 468                .num_parents = 5,
 469                .ops = &clk_rcg2_ops,
 470        },
 471};
 472
 473static struct clk_rcg2 vfe1_clk_src = {
 474        .cmd_rcgr = 0x3620,
 475        .hid_width = 5,
 476        .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
 477        .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
 478        .clkr.hw.init = &(struct clk_init_data){
 479                .name = "vfe1_clk_src",
 480                .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
 481                .num_parents = 5,
 482                .ops = &clk_rcg2_ops,
 483        },
 484};
 485
 486static struct freq_tbl ftbl_mdss_mdp_clk[] = {
 487        F(37500000, P_GPLL0, 16, 0, 0),
 488        F(60000000, P_GPLL0, 10, 0, 0),
 489        F(75000000, P_GPLL0, 8, 0, 0),
 490        F(85710000, P_GPLL0, 7, 0, 0),
 491        F(100000000, P_GPLL0, 6, 0, 0),
 492        F(150000000, P_GPLL0, 4, 0, 0),
 493        F(160000000, P_MMPLL0, 5, 0, 0),
 494        F(200000000, P_MMPLL0, 4, 0, 0),
 495        F(228570000, P_MMPLL0, 3.5, 0, 0),
 496        F(300000000, P_GPLL0, 2, 0, 0),
 497        F(320000000, P_MMPLL0, 2.5, 0, 0),
 498        { }
 499};
 500
 501static struct clk_rcg2 mdp_clk_src = {
 502        .cmd_rcgr = 0x2040,
 503        .hid_width = 5,
 504        .parent_map = mmcc_xo_mmpll0_dsi_hdmi_gpll0_map,
 505        .freq_tbl = ftbl_mdss_mdp_clk,
 506        .clkr.hw.init = &(struct clk_init_data){
 507                .name = "mdp_clk_src",
 508                .parent_names = mmcc_xo_mmpll0_dsi_hdmi_gpll0,
 509                .num_parents = 6,
 510                .ops = &clk_rcg2_ops,
 511        },
 512};
 513
 514static struct clk_rcg2 gfx3d_clk_src = {
 515        .cmd_rcgr = 0x4000,
 516        .hid_width = 5,
 517        .parent_map = mmcc_xo_mmpll0_1_2_gpll0_map,
 518        .clkr.hw.init = &(struct clk_init_data){
 519                .name = "gfx3d_clk_src",
 520                .parent_names = mmcc_xo_mmpll0_1_2_gpll0,
 521                .num_parents = 5,
 522                .ops = &clk_rcg2_ops,
 523        },
 524};
 525
 526static struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
 527        F(75000000, P_GPLL0, 8, 0, 0),
 528        F(133330000, P_GPLL0, 4.5, 0, 0),
 529        F(200000000, P_GPLL0, 3, 0, 0),
 530        F(228570000, P_MMPLL0, 3.5, 0, 0),
 531        F(266670000, P_MMPLL0, 3, 0, 0),
 532        F(320000000, P_MMPLL0, 2.5, 0, 0),
 533        { }
 534};
 535
 536static struct clk_rcg2 jpeg0_clk_src = {
 537        .cmd_rcgr = 0x3500,
 538        .hid_width = 5,
 539        .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
 540        .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
 541        .clkr.hw.init = &(struct clk_init_data){
 542                .name = "jpeg0_clk_src",
 543                .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
 544                .num_parents = 5,
 545                .ops = &clk_rcg2_ops,
 546        },
 547};
 548
 549static struct clk_rcg2 jpeg1_clk_src = {
 550        .cmd_rcgr = 0x3520,
 551        .hid_width = 5,
 552        .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
 553        .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
 554        .clkr.hw.init = &(struct clk_init_data){
 555                .name = "jpeg1_clk_src",
 556                .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
 557                .num_parents = 5,
 558                .ops = &clk_rcg2_ops,
 559        },
 560};
 561
 562static struct clk_rcg2 jpeg2_clk_src = {
 563        .cmd_rcgr = 0x3540,
 564        .hid_width = 5,
 565        .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
 566        .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
 567        .clkr.hw.init = &(struct clk_init_data){
 568                .name = "jpeg2_clk_src",
 569                .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
 570                .num_parents = 5,
 571                .ops = &clk_rcg2_ops,
 572        },
 573};
 574
 575static struct clk_rcg2 pclk0_clk_src = {
 576        .cmd_rcgr = 0x2000,
 577        .mnd_width = 8,
 578        .hid_width = 5,
 579        .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
 580        .clkr.hw.init = &(struct clk_init_data){
 581                .name = "pclk0_clk_src",
 582                .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
 583                .num_parents = 6,
 584                .ops = &clk_pixel_ops,
 585                .flags = CLK_SET_RATE_PARENT,
 586        },
 587};
 588
 589static struct clk_rcg2 pclk1_clk_src = {
 590        .cmd_rcgr = 0x2020,
 591        .mnd_width = 8,
 592        .hid_width = 5,
 593        .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
 594        .clkr.hw.init = &(struct clk_init_data){
 595                .name = "pclk1_clk_src",
 596                .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
 597                .num_parents = 6,
 598                .ops = &clk_pixel_ops,
 599                .flags = CLK_SET_RATE_PARENT,
 600        },
 601};
 602
 603static struct freq_tbl ftbl_venus0_vcodec0_clk[] = {
 604        F(50000000, P_GPLL0, 12, 0, 0),
 605        F(100000000, P_GPLL0, 6, 0, 0),
 606        F(133330000, P_GPLL0, 4.5, 0, 0),
 607        F(200000000, P_MMPLL0, 4, 0, 0),
 608        F(266670000, P_MMPLL0, 3, 0, 0),
 609        F(465000000, P_MMPLL3, 2, 0, 0),
 610        { }
 611};
 612
 613static struct clk_rcg2 vcodec0_clk_src = {
 614        .cmd_rcgr = 0x1000,
 615        .mnd_width = 8,
 616        .hid_width = 5,
 617        .parent_map = mmcc_xo_mmpll0_1_3_gpll0_map,
 618        .freq_tbl = ftbl_venus0_vcodec0_clk,
 619        .clkr.hw.init = &(struct clk_init_data){
 620                .name = "vcodec0_clk_src",
 621                .parent_names = mmcc_xo_mmpll0_1_3_gpll0,
 622                .num_parents = 5,
 623                .ops = &clk_rcg2_ops,
 624        },
 625};
 626
 627static struct freq_tbl ftbl_avsync_vp_clk[] = {
 628        F(150000000, P_GPLL0, 4, 0, 0),
 629        F(320000000, P_MMPLL0, 2.5, 0, 0),
 630        { }
 631};
 632
 633static struct clk_rcg2 vp_clk_src = {
 634        .cmd_rcgr = 0x2430,
 635        .hid_width = 5,
 636        .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
 637        .freq_tbl = ftbl_avsync_vp_clk,
 638        .clkr.hw.init = &(struct clk_init_data){
 639                .name = "vp_clk_src",
 640                .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
 641                .num_parents = 4,
 642                .ops = &clk_rcg2_ops,
 643        },
 644};
 645
 646static struct freq_tbl ftbl_camss_cci_cci_clk[] = {
 647        F(19200000, P_XO, 1, 0, 0),
 648        { }
 649};
 650
 651static struct clk_rcg2 cci_clk_src = {
 652        .cmd_rcgr = 0x3300,
 653        .mnd_width = 8,
 654        .hid_width = 5,
 655        .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
 656        .freq_tbl = ftbl_camss_cci_cci_clk,
 657        .clkr.hw.init = &(struct clk_init_data){
 658                .name = "cci_clk_src",
 659                .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
 660                .num_parents = 6,
 661                .ops = &clk_rcg2_ops,
 662        },
 663};
 664
 665static struct freq_tbl ftbl_camss_gp0_1_clk[] = {
 666        F(10000, P_XO, 16, 1, 120),
 667        F(24000, P_XO, 16, 1, 50),
 668        F(6000000, P_GPLL0, 10, 1, 10),
 669        F(12000000, P_GPLL0, 10, 1, 5),
 670        F(13000000, P_GPLL0, 4, 13, 150),
 671        F(24000000, P_GPLL0, 5, 1, 5),
 672        { }
 673};
 674
 675static struct clk_rcg2 camss_gp0_clk_src = {
 676        .cmd_rcgr = 0x3420,
 677        .mnd_width = 8,
 678        .hid_width = 5,
 679        .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map,
 680        .freq_tbl = ftbl_camss_gp0_1_clk,
 681        .clkr.hw.init = &(struct clk_init_data){
 682                .name = "camss_gp0_clk_src",
 683                .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0_sleep,
 684                .num_parents = 7,
 685                .ops = &clk_rcg2_ops,
 686        },
 687};
 688
 689static struct clk_rcg2 camss_gp1_clk_src = {
 690        .cmd_rcgr = 0x3450,
 691        .mnd_width = 8,
 692        .hid_width = 5,
 693        .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map,
 694        .freq_tbl = ftbl_camss_gp0_1_clk,
 695        .clkr.hw.init = &(struct clk_init_data){
 696                .name = "camss_gp1_clk_src",
 697                .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0_sleep,
 698                .num_parents = 7,
 699                .ops = &clk_rcg2_ops,
 700        },
 701};
 702
 703static struct freq_tbl ftbl_camss_mclk0_3_clk[] = {
 704        F(4800000, P_XO, 4, 0, 0),
 705        F(6000000, P_GPLL0, 10, 1, 10),
 706        F(8000000, P_GPLL0, 15, 1, 5),
 707        F(9600000, P_XO, 2, 0, 0),
 708        F(16000000, P_MMPLL0, 10, 1, 5),
 709        F(19200000, P_XO, 1, 0, 0),
 710        F(24000000, P_GPLL0, 5, 1, 5),
 711        F(32000000, P_MMPLL0, 5, 1, 5),
 712        F(48000000, P_GPLL0, 12.5, 0, 0),
 713        F(64000000, P_MMPLL0, 12.5, 0, 0),
 714        { }
 715};
 716
 717static struct clk_rcg2 mclk0_clk_src = {
 718        .cmd_rcgr = 0x3360,
 719        .mnd_width = 8,
 720        .hid_width = 5,
 721        .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
 722        .freq_tbl = ftbl_camss_mclk0_3_clk,
 723        .clkr.hw.init = &(struct clk_init_data){
 724                .name = "mclk0_clk_src",
 725                .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
 726                .num_parents = 6,
 727                .ops = &clk_rcg2_ops,
 728        },
 729};
 730
 731static struct clk_rcg2 mclk1_clk_src = {
 732        .cmd_rcgr = 0x3390,
 733        .mnd_width = 8,
 734        .hid_width = 5,
 735        .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
 736        .freq_tbl = ftbl_camss_mclk0_3_clk,
 737        .clkr.hw.init = &(struct clk_init_data){
 738                .name = "mclk1_clk_src",
 739                .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
 740                .num_parents = 6,
 741                .ops = &clk_rcg2_ops,
 742        },
 743};
 744
 745static struct clk_rcg2 mclk2_clk_src = {
 746        .cmd_rcgr = 0x33c0,
 747        .mnd_width = 8,
 748        .hid_width = 5,
 749        .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
 750        .freq_tbl = ftbl_camss_mclk0_3_clk,
 751        .clkr.hw.init = &(struct clk_init_data){
 752                .name = "mclk2_clk_src",
 753                .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
 754                .num_parents = 6,
 755                .ops = &clk_rcg2_ops,
 756        },
 757};
 758
 759static struct clk_rcg2 mclk3_clk_src = {
 760        .cmd_rcgr = 0x33f0,
 761        .mnd_width = 8,
 762        .hid_width = 5,
 763        .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
 764        .freq_tbl = ftbl_camss_mclk0_3_clk,
 765        .clkr.hw.init = &(struct clk_init_data){
 766                .name = "mclk3_clk_src",
 767                .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
 768                .num_parents = 6,
 769                .ops = &clk_rcg2_ops,
 770        },
 771};
 772
 773static struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
 774        F(100000000, P_GPLL0, 6, 0, 0),
 775        F(200000000, P_MMPLL0, 4, 0, 0),
 776        { }
 777};
 778
 779static struct clk_rcg2 csi0phytimer_clk_src = {
 780        .cmd_rcgr = 0x3000,
 781        .hid_width = 5,
 782        .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
 783        .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
 784        .clkr.hw.init = &(struct clk_init_data){
 785                .name = "csi0phytimer_clk_src",
 786                .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
 787                .num_parents = 5,
 788                .ops = &clk_rcg2_ops,
 789        },
 790};
 791
 792static struct clk_rcg2 csi1phytimer_clk_src = {
 793        .cmd_rcgr = 0x3030,
 794        .hid_width = 5,
 795        .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
 796        .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
 797        .clkr.hw.init = &(struct clk_init_data){
 798                .name = "csi1phytimer_clk_src",
 799                .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
 800                .num_parents = 5,
 801                .ops = &clk_rcg2_ops,
 802        },
 803};
 804
 805static struct clk_rcg2 csi2phytimer_clk_src = {
 806        .cmd_rcgr = 0x3060,
 807        .hid_width = 5,
 808        .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
 809        .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
 810        .clkr.hw.init = &(struct clk_init_data){
 811                .name = "csi2phytimer_clk_src",
 812                .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
 813                .num_parents = 5,
 814                .ops = &clk_rcg2_ops,
 815        },
 816};
 817
 818static struct freq_tbl ftbl_camss_vfe_cpp_clk[] = {
 819        F(133330000, P_GPLL0, 4.5, 0, 0),
 820        F(266670000, P_MMPLL0, 3, 0, 0),
 821        F(320000000, P_MMPLL0, 2.5, 0, 0),
 822        F(372000000, P_MMPLL4, 2.5, 0, 0),
 823        F(465000000, P_MMPLL4, 2, 0, 0),
 824        F(600000000, P_GPLL0, 1, 0, 0),
 825        { }
 826};
 827
 828static struct clk_rcg2 cpp_clk_src = {
 829        .cmd_rcgr = 0x3640,
 830        .hid_width = 5,
 831        .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
 832        .freq_tbl = ftbl_camss_vfe_cpp_clk,
 833        .clkr.hw.init = &(struct clk_init_data){
 834                .name = "cpp_clk_src",
 835                .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
 836                .num_parents = 5,
 837                .ops = &clk_rcg2_ops,
 838        },
 839};
 840
 841static struct clk_rcg2 byte0_clk_src = {
 842        .cmd_rcgr = 0x2120,
 843        .hid_width = 5,
 844        .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
 845        .clkr.hw.init = &(struct clk_init_data){
 846                .name = "byte0_clk_src",
 847                .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
 848                .num_parents = 6,
 849                .ops = &clk_byte2_ops,
 850                .flags = CLK_SET_RATE_PARENT,
 851        },
 852};
 853
 854static struct clk_rcg2 byte1_clk_src = {
 855        .cmd_rcgr = 0x2140,
 856        .hid_width = 5,
 857        .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
 858        .clkr.hw.init = &(struct clk_init_data){
 859                .name = "byte1_clk_src",
 860                .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
 861                .num_parents = 6,
 862                .ops = &clk_byte2_ops,
 863                .flags = CLK_SET_RATE_PARENT,
 864        },
 865};
 866
 867static struct freq_tbl ftbl_mdss_edpaux_clk[] = {
 868        F(19200000, P_XO, 1, 0, 0),
 869        { }
 870};
 871
 872static struct clk_rcg2 edpaux_clk_src = {
 873        .cmd_rcgr = 0x20e0,
 874        .hid_width = 5,
 875        .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
 876        .freq_tbl = ftbl_mdss_edpaux_clk,
 877        .clkr.hw.init = &(struct clk_init_data){
 878                .name = "edpaux_clk_src",
 879                .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
 880                .num_parents = 4,
 881                .ops = &clk_rcg2_ops,
 882        },
 883};
 884
 885static struct freq_tbl ftbl_mdss_edplink_clk[] = {
 886        F(135000000, P_EDPLINK, 2, 0, 0),
 887        F(270000000, P_EDPLINK, 11, 0, 0),
 888        { }
 889};
 890
 891static struct clk_rcg2 edplink_clk_src = {
 892        .cmd_rcgr = 0x20c0,
 893        .hid_width = 5,
 894        .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
 895        .freq_tbl = ftbl_mdss_edplink_clk,
 896        .clkr.hw.init = &(struct clk_init_data){
 897                .name = "edplink_clk_src",
 898                .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
 899                .num_parents = 6,
 900                .ops = &clk_rcg2_ops,
 901                .flags = CLK_SET_RATE_PARENT,
 902        },
 903};
 904
 905static struct freq_tbl edp_pixel_freq_tbl[] = {
 906        { .src = P_EDPVCO },
 907        { }
 908};
 909
 910static struct clk_rcg2 edppixel_clk_src = {
 911        .cmd_rcgr = 0x20a0,
 912        .mnd_width = 8,
 913        .hid_width = 5,
 914        .parent_map = mmcc_xo_dsi_hdmi_edp_map,
 915        .freq_tbl = edp_pixel_freq_tbl,
 916        .clkr.hw.init = &(struct clk_init_data){
 917                .name = "edppixel_clk_src",
 918                .parent_names = mmcc_xo_dsi_hdmi_edp,
 919                .num_parents = 6,
 920                .ops = &clk_edp_pixel_ops,
 921        },
 922};
 923
 924static struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
 925        F(19200000, P_XO, 1, 0, 0),
 926        { }
 927};
 928
 929static struct clk_rcg2 esc0_clk_src = {
 930        .cmd_rcgr = 0x2160,
 931        .hid_width = 5,
 932        .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
 933        .freq_tbl = ftbl_mdss_esc0_1_clk,
 934        .clkr.hw.init = &(struct clk_init_data){
 935                .name = "esc0_clk_src",
 936                .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
 937                .num_parents = 6,
 938                .ops = &clk_rcg2_ops,
 939        },
 940};
 941
 942static struct clk_rcg2 esc1_clk_src = {
 943        .cmd_rcgr = 0x2180,
 944        .hid_width = 5,
 945        .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
 946        .freq_tbl = ftbl_mdss_esc0_1_clk,
 947        .clkr.hw.init = &(struct clk_init_data){
 948                .name = "esc1_clk_src",
 949                .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
 950                .num_parents = 6,
 951                .ops = &clk_rcg2_ops,
 952        },
 953};
 954
 955static struct freq_tbl extpclk_freq_tbl[] = {
 956        { .src = P_HDMIPLL },
 957        { }
 958};
 959
 960static struct clk_rcg2 extpclk_clk_src = {
 961        .cmd_rcgr = 0x2060,
 962        .hid_width = 5,
 963        .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
 964        .freq_tbl = extpclk_freq_tbl,
 965        .clkr.hw.init = &(struct clk_init_data){
 966                .name = "extpclk_clk_src",
 967                .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
 968                .num_parents = 6,
 969                .ops = &clk_byte_ops,
 970                .flags = CLK_SET_RATE_PARENT,
 971        },
 972};
 973
 974static struct freq_tbl ftbl_mdss_hdmi_clk[] = {
 975        F(19200000, P_XO, 1, 0, 0),
 976        { }
 977};
 978
 979static struct clk_rcg2 hdmi_clk_src = {
 980        .cmd_rcgr = 0x2100,
 981        .hid_width = 5,
 982        .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
 983        .freq_tbl = ftbl_mdss_hdmi_clk,
 984        .clkr.hw.init = &(struct clk_init_data){
 985                .name = "hdmi_clk_src",
 986                .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
 987                .num_parents = 4,
 988                .ops = &clk_rcg2_ops,
 989        },
 990};
 991
 992static struct freq_tbl ftbl_mdss_vsync_clk[] = {
 993        F(19200000, P_XO, 1, 0, 0),
 994        { }
 995};
 996
 997static struct clk_rcg2 vsync_clk_src = {
 998        .cmd_rcgr = 0x2080,
 999        .hid_width = 5,
1000        .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1001        .freq_tbl = ftbl_mdss_vsync_clk,
1002        .clkr.hw.init = &(struct clk_init_data){
1003                .name = "vsync_clk_src",
1004                .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1005                .num_parents = 4,
1006                .ops = &clk_rcg2_ops,
1007        },
1008};
1009
1010static struct freq_tbl ftbl_mmss_rbcpr_clk[] = {
1011        F(50000000, P_GPLL0, 12, 0, 0),
1012        { }
1013};
1014
1015static struct clk_rcg2 rbcpr_clk_src = {
1016        .cmd_rcgr = 0x4060,
1017        .hid_width = 5,
1018        .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1019        .freq_tbl = ftbl_mmss_rbcpr_clk,
1020        .clkr.hw.init = &(struct clk_init_data){
1021                .name = "rbcpr_clk_src",
1022                .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1023                .num_parents = 4,
1024                .ops = &clk_rcg2_ops,
1025        },
1026};
1027
1028static struct freq_tbl ftbl_oxili_rbbmtimer_clk[] = {
1029        F(19200000, P_XO, 1, 0, 0),
1030        { }
1031};
1032
1033static struct clk_rcg2 rbbmtimer_clk_src = {
1034        .cmd_rcgr = 0x4090,
1035        .hid_width = 5,
1036        .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1037        .freq_tbl = ftbl_oxili_rbbmtimer_clk,
1038        .clkr.hw.init = &(struct clk_init_data){
1039                .name = "rbbmtimer_clk_src",
1040                .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1041                .num_parents = 4,
1042                .ops = &clk_rcg2_ops,
1043        },
1044};
1045
1046static struct freq_tbl ftbl_vpu_maple_clk[] = {
1047        F(50000000, P_GPLL0, 12, 0, 0),
1048        F(100000000, P_GPLL0, 6, 0, 0),
1049        F(133330000, P_GPLL0, 4.5, 0, 0),
1050        F(200000000, P_MMPLL0, 4, 0, 0),
1051        F(266670000, P_MMPLL0, 3, 0, 0),
1052        F(465000000, P_MMPLL3, 2, 0, 0),
1053        { }
1054};
1055
1056static struct clk_rcg2 maple_clk_src = {
1057        .cmd_rcgr = 0x1320,
1058        .hid_width = 5,
1059        .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1060        .freq_tbl = ftbl_vpu_maple_clk,
1061        .clkr.hw.init = &(struct clk_init_data){
1062                .name = "maple_clk_src",
1063                .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1064                .num_parents = 4,
1065                .ops = &clk_rcg2_ops,
1066        },
1067};
1068
1069static struct freq_tbl ftbl_vpu_vdp_clk[] = {
1070        F(50000000, P_GPLL0, 12, 0, 0),
1071        F(100000000, P_GPLL0, 6, 0, 0),
1072        F(200000000, P_MMPLL0, 4, 0, 0),
1073        F(320000000, P_MMPLL0, 2.5, 0, 0),
1074        F(400000000, P_MMPLL0, 2, 0, 0),
1075        { }
1076};
1077
1078static struct clk_rcg2 vdp_clk_src = {
1079        .cmd_rcgr = 0x1300,
1080        .hid_width = 5,
1081        .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1082        .freq_tbl = ftbl_vpu_vdp_clk,
1083        .clkr.hw.init = &(struct clk_init_data){
1084                .name = "vdp_clk_src",
1085                .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1086                .num_parents = 4,
1087                .ops = &clk_rcg2_ops,
1088        },
1089};
1090
1091static struct freq_tbl ftbl_vpu_bus_clk[] = {
1092        F(40000000, P_GPLL0, 15, 0, 0),
1093        F(80000000, P_MMPLL0, 10, 0, 0),
1094        { }
1095};
1096
1097static struct clk_rcg2 vpu_bus_clk_src = {
1098        .cmd_rcgr = 0x1340,
1099        .hid_width = 5,
1100        .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1101        .freq_tbl = ftbl_vpu_bus_clk,
1102        .clkr.hw.init = &(struct clk_init_data){
1103                .name = "vpu_bus_clk_src",
1104                .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1105                .num_parents = 4,
1106                .ops = &clk_rcg2_ops,
1107        },
1108};
1109
1110static struct clk_branch mmss_cxo_clk = {
1111        .halt_reg = 0x5104,
1112        .clkr = {
1113                .enable_reg = 0x5104,
1114                .enable_mask = BIT(0),
1115                .hw.init = &(struct clk_init_data){
1116                        .name = "mmss_cxo_clk",
1117                        .parent_names = (const char *[]){ "xo" },
1118                        .num_parents = 1,
1119                        .flags = CLK_SET_RATE_PARENT,
1120                        .ops = &clk_branch2_ops,
1121                },
1122        },
1123};
1124
1125static struct clk_branch mmss_sleepclk_clk = {
1126        .halt_reg = 0x5100,
1127        .clkr = {
1128                .enable_reg = 0x5100,
1129                .enable_mask = BIT(0),
1130                .hw.init = &(struct clk_init_data){
1131                        .name = "mmss_sleepclk_clk",
1132                        .parent_names = (const char *[]){
1133                                "sleep_clk_src",
1134                        },
1135                        .num_parents = 1,
1136                        .flags = CLK_SET_RATE_PARENT,
1137                        .ops = &clk_branch2_ops,
1138                },
1139        },
1140};
1141
1142static struct clk_branch avsync_ahb_clk = {
1143        .halt_reg = 0x2414,
1144        .clkr = {
1145                .enable_reg = 0x2414,
1146                .enable_mask = BIT(0),
1147                .hw.init = &(struct clk_init_data){
1148                        .name = "avsync_ahb_clk",
1149                        .parent_names = (const char *[]){
1150                                "mmss_ahb_clk_src",
1151                        },
1152                        .num_parents = 1,
1153                        .flags = CLK_SET_RATE_PARENT,
1154                        .ops = &clk_branch2_ops,
1155                },
1156        },
1157};
1158
1159static struct clk_branch avsync_edppixel_clk = {
1160        .halt_reg = 0x2418,
1161        .clkr = {
1162                .enable_reg = 0x2418,
1163                .enable_mask = BIT(0),
1164                .hw.init = &(struct clk_init_data){
1165                        .name = "avsync_edppixel_clk",
1166                        .parent_names = (const char *[]){
1167                                "edppixel_clk_src",
1168                        },
1169                        .num_parents = 1,
1170                        .flags = CLK_SET_RATE_PARENT,
1171                        .ops = &clk_branch2_ops,
1172                },
1173        },
1174};
1175
1176static struct clk_branch avsync_extpclk_clk = {
1177        .halt_reg = 0x2410,
1178        .clkr = {
1179                .enable_reg = 0x2410,
1180                .enable_mask = BIT(0),
1181                .hw.init = &(struct clk_init_data){
1182                        .name = "avsync_extpclk_clk",
1183                        .parent_names = (const char *[]){
1184                                "extpclk_clk_src",
1185                        },
1186                        .num_parents = 1,
1187                        .flags = CLK_SET_RATE_PARENT,
1188                        .ops = &clk_branch2_ops,
1189                },
1190        },
1191};
1192
1193static struct clk_branch avsync_pclk0_clk = {
1194        .halt_reg = 0x241c,
1195        .clkr = {
1196                .enable_reg = 0x241c,
1197                .enable_mask = BIT(0),
1198                .hw.init = &(struct clk_init_data){
1199                        .name = "avsync_pclk0_clk",
1200                        .parent_names = (const char *[]){
1201                                "pclk0_clk_src",
1202                        },
1203                        .num_parents = 1,
1204                        .flags = CLK_SET_RATE_PARENT,
1205                        .ops = &clk_branch2_ops,
1206                },
1207        },
1208};
1209
1210static struct clk_branch avsync_pclk1_clk = {
1211        .halt_reg = 0x2420,
1212        .clkr = {
1213                .enable_reg = 0x2420,
1214                .enable_mask = BIT(0),
1215                .hw.init = &(struct clk_init_data){
1216                        .name = "avsync_pclk1_clk",
1217                        .parent_names = (const char *[]){
1218                                "pclk1_clk_src",
1219                        },
1220                        .num_parents = 1,
1221                        .flags = CLK_SET_RATE_PARENT,
1222                        .ops = &clk_branch2_ops,
1223                },
1224        },
1225};
1226
1227static struct clk_branch avsync_vp_clk = {
1228        .halt_reg = 0x2404,
1229        .clkr = {
1230                .enable_reg = 0x2404,
1231                .enable_mask = BIT(0),
1232                .hw.init = &(struct clk_init_data){
1233                        .name = "avsync_vp_clk",
1234                        .parent_names = (const char *[]){
1235                                "vp_clk_src",
1236                        },
1237                        .num_parents = 1,
1238                        .flags = CLK_SET_RATE_PARENT,
1239                        .ops = &clk_branch2_ops,
1240                },
1241        },
1242};
1243
1244static struct clk_branch camss_ahb_clk = {
1245        .halt_reg = 0x348c,
1246        .clkr = {
1247                .enable_reg = 0x348c,
1248                .enable_mask = BIT(0),
1249                .hw.init = &(struct clk_init_data){
1250                        .name = "camss_ahb_clk",
1251                        .parent_names = (const char *[]){
1252                                "mmss_ahb_clk_src",
1253                        },
1254                        .num_parents = 1,
1255                        .flags = CLK_SET_RATE_PARENT,
1256                        .ops = &clk_branch2_ops,
1257                },
1258        },
1259};
1260
1261static struct clk_branch camss_cci_cci_ahb_clk = {
1262        .halt_reg = 0x3348,
1263        .clkr = {
1264                .enable_reg = 0x3348,
1265                .enable_mask = BIT(0),
1266                .hw.init = &(struct clk_init_data){
1267                        .name = "camss_cci_cci_ahb_clk",
1268                        .parent_names = (const char *[]){
1269                                "mmss_ahb_clk_src",
1270                        },
1271                        .num_parents = 1,
1272                        .ops = &clk_branch2_ops,
1273                },
1274        },
1275};
1276
1277static struct clk_branch camss_cci_cci_clk = {
1278        .halt_reg = 0x3344,
1279        .clkr = {
1280                .enable_reg = 0x3344,
1281                .enable_mask = BIT(0),
1282                .hw.init = &(struct clk_init_data){
1283                        .name = "camss_cci_cci_clk",
1284                        .parent_names = (const char *[]){
1285                                "cci_clk_src",
1286                        },
1287                        .num_parents = 1,
1288                        .flags = CLK_SET_RATE_PARENT,
1289                        .ops = &clk_branch2_ops,
1290                },
1291        },
1292};
1293
1294static struct clk_branch camss_csi0_ahb_clk = {
1295        .halt_reg = 0x30bc,
1296        .clkr = {
1297                .enable_reg = 0x30bc,
1298                .enable_mask = BIT(0),
1299                .hw.init = &(struct clk_init_data){
1300                        .name = "camss_csi0_ahb_clk",
1301                        .parent_names = (const char *[]){
1302                                "mmss_ahb_clk_src",
1303                        },
1304                        .num_parents = 1,
1305                        .ops = &clk_branch2_ops,
1306                },
1307        },
1308};
1309
1310static struct clk_branch camss_csi0_clk = {
1311        .halt_reg = 0x30b4,
1312        .clkr = {
1313                .enable_reg = 0x30b4,
1314                .enable_mask = BIT(0),
1315                .hw.init = &(struct clk_init_data){
1316                        .name = "camss_csi0_clk",
1317                        .parent_names = (const char *[]){
1318                                "csi0_clk_src",
1319                        },
1320                        .num_parents = 1,
1321                        .flags = CLK_SET_RATE_PARENT,
1322                        .ops = &clk_branch2_ops,
1323                },
1324        },
1325};
1326
1327static struct clk_branch camss_csi0phy_clk = {
1328        .halt_reg = 0x30c4,
1329        .clkr = {
1330                .enable_reg = 0x30c4,
1331                .enable_mask = BIT(0),
1332                .hw.init = &(struct clk_init_data){
1333                        .name = "camss_csi0phy_clk",
1334                        .parent_names = (const char *[]){
1335                                "csi0_clk_src",
1336                        },
1337                        .num_parents = 1,
1338                        .flags = CLK_SET_RATE_PARENT,
1339                        .ops = &clk_branch2_ops,
1340                },
1341        },
1342};
1343
1344static struct clk_branch camss_csi0pix_clk = {
1345        .halt_reg = 0x30e4,
1346        .clkr = {
1347                .enable_reg = 0x30e4,
1348                .enable_mask = BIT(0),
1349                .hw.init = &(struct clk_init_data){
1350                        .name = "camss_csi0pix_clk",
1351                        .parent_names = (const char *[]){
1352                                "csi0_clk_src",
1353                        },
1354                        .num_parents = 1,
1355                        .flags = CLK_SET_RATE_PARENT,
1356                        .ops = &clk_branch2_ops,
1357                },
1358        },
1359};
1360
1361static struct clk_branch camss_csi0rdi_clk = {
1362        .halt_reg = 0x30d4,
1363        .clkr = {
1364                .enable_reg = 0x30d4,
1365                .enable_mask = BIT(0),
1366                .hw.init = &(struct clk_init_data){
1367                        .name = "camss_csi0rdi_clk",
1368                        .parent_names = (const char *[]){
1369                                "csi0_clk_src",
1370                        },
1371                        .num_parents = 1,
1372                        .flags = CLK_SET_RATE_PARENT,
1373                        .ops = &clk_branch2_ops,
1374                },
1375        },
1376};
1377
1378static struct clk_branch camss_csi1_ahb_clk = {
1379        .halt_reg = 0x3128,
1380        .clkr = {
1381                .enable_reg = 0x3128,
1382                .enable_mask = BIT(0),
1383                .hw.init = &(struct clk_init_data){
1384                        .name = "camss_csi1_ahb_clk",
1385                        .parent_names = (const char *[]){
1386                                "mmss_ahb_clk_src",
1387                        },
1388                        .num_parents = 1,
1389                        .flags = CLK_SET_RATE_PARENT,
1390                        .ops = &clk_branch2_ops,
1391                },
1392        },
1393};
1394
1395static struct clk_branch camss_csi1_clk = {
1396        .halt_reg = 0x3124,
1397        .clkr = {
1398                .enable_reg = 0x3124,
1399                .enable_mask = BIT(0),
1400                .hw.init = &(struct clk_init_data){
1401                        .name = "camss_csi1_clk",
1402                        .parent_names = (const char *[]){
1403                                "csi1_clk_src",
1404                        },
1405                        .num_parents = 1,
1406                        .flags = CLK_SET_RATE_PARENT,
1407                        .ops = &clk_branch2_ops,
1408                },
1409        },
1410};
1411
1412static struct clk_branch camss_csi1phy_clk = {
1413        .halt_reg = 0x3134,
1414        .clkr = {
1415                .enable_reg = 0x3134,
1416                .enable_mask = BIT(0),
1417                .hw.init = &(struct clk_init_data){
1418                        .name = "camss_csi1phy_clk",
1419                        .parent_names = (const char *[]){
1420                                "csi1_clk_src",
1421                        },
1422                        .num_parents = 1,
1423                        .flags = CLK_SET_RATE_PARENT,
1424                        .ops = &clk_branch2_ops,
1425                },
1426        },
1427};
1428
1429static struct clk_branch camss_csi1pix_clk = {
1430        .halt_reg = 0x3154,
1431        .clkr = {
1432                .enable_reg = 0x3154,
1433                .enable_mask = BIT(0),
1434                .hw.init = &(struct clk_init_data){
1435                        .name = "camss_csi1pix_clk",
1436                        .parent_names = (const char *[]){
1437                                "csi1_clk_src",
1438                        },
1439                        .num_parents = 1,
1440                        .flags = CLK_SET_RATE_PARENT,
1441                        .ops = &clk_branch2_ops,
1442                },
1443        },
1444};
1445
1446static struct clk_branch camss_csi1rdi_clk = {
1447        .halt_reg = 0x3144,
1448        .clkr = {
1449                .enable_reg = 0x3144,
1450                .enable_mask = BIT(0),
1451                .hw.init = &(struct clk_init_data){
1452                        .name = "camss_csi1rdi_clk",
1453                        .parent_names = (const char *[]){
1454                                "csi1_clk_src",
1455                        },
1456                        .num_parents = 1,
1457                        .flags = CLK_SET_RATE_PARENT,
1458                        .ops = &clk_branch2_ops,
1459                },
1460        },
1461};
1462
1463static struct clk_branch camss_csi2_ahb_clk = {
1464        .halt_reg = 0x3188,
1465        .clkr = {
1466                .enable_reg = 0x3188,
1467                .enable_mask = BIT(0),
1468                .hw.init = &(struct clk_init_data){
1469                        .name = "camss_csi2_ahb_clk",
1470                        .parent_names = (const char *[]){
1471                                "mmss_ahb_clk_src",
1472                        },
1473                        .num_parents = 1,
1474                        .ops = &clk_branch2_ops,
1475                },
1476        },
1477};
1478
1479static struct clk_branch camss_csi2_clk = {
1480        .halt_reg = 0x3184,
1481        .clkr = {
1482                .enable_reg = 0x3184,
1483                .enable_mask = BIT(0),
1484                .hw.init = &(struct clk_init_data){
1485                        .name = "camss_csi2_clk",
1486                        .parent_names = (const char *[]){
1487                                "csi2_clk_src",
1488                        },
1489                        .num_parents = 1,
1490                        .flags = CLK_SET_RATE_PARENT,
1491                        .ops = &clk_branch2_ops,
1492                },
1493        },
1494};
1495
1496static struct clk_branch camss_csi2phy_clk = {
1497        .halt_reg = 0x3194,
1498        .clkr = {
1499                .enable_reg = 0x3194,
1500                .enable_mask = BIT(0),
1501                .hw.init = &(struct clk_init_data){
1502                        .name = "camss_csi2phy_clk",
1503                        .parent_names = (const char *[]){
1504                                "csi2_clk_src",
1505                        },
1506                        .num_parents = 1,
1507                        .flags = CLK_SET_RATE_PARENT,
1508                        .ops = &clk_branch2_ops,
1509                },
1510        },
1511};
1512
1513static struct clk_branch camss_csi2pix_clk = {
1514        .halt_reg = 0x31b4,
1515        .clkr = {
1516                .enable_reg = 0x31b4,
1517                .enable_mask = BIT(0),
1518                .hw.init = &(struct clk_init_data){
1519                        .name = "camss_csi2pix_clk",
1520                        .parent_names = (const char *[]){
1521                                "csi2_clk_src",
1522                        },
1523                        .num_parents = 1,
1524                        .flags = CLK_SET_RATE_PARENT,
1525                        .ops = &clk_branch2_ops,
1526                },
1527        },
1528};
1529
1530static struct clk_branch camss_csi2rdi_clk = {
1531        .halt_reg = 0x31a4,
1532        .clkr = {
1533                .enable_reg = 0x31a4,
1534                .enable_mask = BIT(0),
1535                .hw.init = &(struct clk_init_data){
1536                        .name = "camss_csi2rdi_clk",
1537                        .parent_names = (const char *[]){
1538                                "csi2_clk_src",
1539                        },
1540                        .num_parents = 1,
1541                        .flags = CLK_SET_RATE_PARENT,
1542                        .ops = &clk_branch2_ops,
1543                },
1544        },
1545};
1546
1547static struct clk_branch camss_csi3_ahb_clk = {
1548        .halt_reg = 0x31e8,
1549        .clkr = {
1550                .enable_reg = 0x31e8,
1551                .enable_mask = BIT(0),
1552                .hw.init = &(struct clk_init_data){
1553                        .name = "camss_csi3_ahb_clk",
1554                        .parent_names = (const char *[]){
1555                                "mmss_ahb_clk_src",
1556                        },
1557                        .num_parents = 1,
1558                        .ops = &clk_branch2_ops,
1559                },
1560        },
1561};
1562
1563static struct clk_branch camss_csi3_clk = {
1564        .halt_reg = 0x31e4,
1565        .clkr = {
1566                .enable_reg = 0x31e4,
1567                .enable_mask = BIT(0),
1568                .hw.init = &(struct clk_init_data){
1569                        .name = "camss_csi3_clk",
1570                        .parent_names = (const char *[]){
1571                                "csi3_clk_src",
1572                        },
1573                        .num_parents = 1,
1574                        .flags = CLK_SET_RATE_PARENT,
1575                        .ops = &clk_branch2_ops,
1576                },
1577        },
1578};
1579
1580static struct clk_branch camss_csi3phy_clk = {
1581        .halt_reg = 0x31f4,
1582        .clkr = {
1583                .enable_reg = 0x31f4,
1584                .enable_mask = BIT(0),
1585                .hw.init = &(struct clk_init_data){
1586                        .name = "camss_csi3phy_clk",
1587                        .parent_names = (const char *[]){
1588                                "csi3_clk_src",
1589                        },
1590                        .num_parents = 1,
1591                        .flags = CLK_SET_RATE_PARENT,
1592                        .ops = &clk_branch2_ops,
1593                },
1594        },
1595};
1596
1597static struct clk_branch camss_csi3pix_clk = {
1598        .halt_reg = 0x3214,
1599        .clkr = {
1600                .enable_reg = 0x3214,
1601                .enable_mask = BIT(0),
1602                .hw.init = &(struct clk_init_data){
1603                        .name = "camss_csi3pix_clk",
1604                        .parent_names = (const char *[]){
1605                                "csi3_clk_src",
1606                        },
1607                        .num_parents = 1,
1608                        .flags = CLK_SET_RATE_PARENT,
1609                        .ops = &clk_branch2_ops,
1610                },
1611        },
1612};
1613
1614static struct clk_branch camss_csi3rdi_clk = {
1615        .halt_reg = 0x3204,
1616        .clkr = {
1617                .enable_reg = 0x3204,
1618                .enable_mask = BIT(0),
1619                .hw.init = &(struct clk_init_data){
1620                        .name = "camss_csi3rdi_clk",
1621                        .parent_names = (const char *[]){
1622                                "csi3_clk_src",
1623                        },
1624                        .num_parents = 1,
1625                        .flags = CLK_SET_RATE_PARENT,
1626                        .ops = &clk_branch2_ops,
1627                },
1628        },
1629};
1630
1631static struct clk_branch camss_csi_vfe0_clk = {
1632        .halt_reg = 0x3704,
1633        .clkr = {
1634                .enable_reg = 0x3704,
1635                .enable_mask = BIT(0),
1636                .hw.init = &(struct clk_init_data){
1637                        .name = "camss_csi_vfe0_clk",
1638                        .parent_names = (const char *[]){
1639                                "vfe0_clk_src",
1640                        },
1641                        .num_parents = 1,
1642                        .flags = CLK_SET_RATE_PARENT,
1643                        .ops = &clk_branch2_ops,
1644                },
1645        },
1646};
1647
1648static struct clk_branch camss_csi_vfe1_clk = {
1649        .halt_reg = 0x3714,
1650        .clkr = {
1651                .enable_reg = 0x3714,
1652                .enable_mask = BIT(0),
1653                .hw.init = &(struct clk_init_data){
1654                        .name = "camss_csi_vfe1_clk",
1655                        .parent_names = (const char *[]){
1656                                "vfe1_clk_src",
1657                        },
1658                        .num_parents = 1,
1659                        .flags = CLK_SET_RATE_PARENT,
1660                        .ops = &clk_branch2_ops,
1661                },
1662        },
1663};
1664
1665static struct clk_branch camss_gp0_clk = {
1666        .halt_reg = 0x3444,
1667        .clkr = {
1668                .enable_reg = 0x3444,
1669                .enable_mask = BIT(0),
1670                .hw.init = &(struct clk_init_data){
1671                        .name = "camss_gp0_clk",
1672                        .parent_names = (const char *[]){
1673                                "camss_gp0_clk_src",
1674                        },
1675                        .num_parents = 1,
1676                        .flags = CLK_SET_RATE_PARENT,
1677                        .ops = &clk_branch2_ops,
1678                },
1679        },
1680};
1681
1682static struct clk_branch camss_gp1_clk = {
1683        .halt_reg = 0x3474,
1684        .clkr = {
1685                .enable_reg = 0x3474,
1686                .enable_mask = BIT(0),
1687                .hw.init = &(struct clk_init_data){
1688                        .name = "camss_gp1_clk",
1689                        .parent_names = (const char *[]){
1690                                "camss_gp1_clk_src",
1691                        },
1692                        .num_parents = 1,
1693                        .flags = CLK_SET_RATE_PARENT,
1694                        .ops = &clk_branch2_ops,
1695                },
1696        },
1697};
1698
1699static struct clk_branch camss_ispif_ahb_clk = {
1700        .halt_reg = 0x3224,
1701        .clkr = {
1702                .enable_reg = 0x3224,
1703                .enable_mask = BIT(0),
1704                .hw.init = &(struct clk_init_data){
1705                        .name = "camss_ispif_ahb_clk",
1706                        .parent_names = (const char *[]){
1707                                "mmss_ahb_clk_src",
1708                        },
1709                        .num_parents = 1,
1710                        .flags = CLK_SET_RATE_PARENT,
1711                        .ops = &clk_branch2_ops,
1712                },
1713        },
1714};
1715
1716static struct clk_branch camss_jpeg_jpeg0_clk = {
1717        .halt_reg = 0x35a8,
1718        .clkr = {
1719                .enable_reg = 0x35a8,
1720                .enable_mask = BIT(0),
1721                .hw.init = &(struct clk_init_data){
1722                        .name = "camss_jpeg_jpeg0_clk",
1723                        .parent_names = (const char *[]){
1724                                "jpeg0_clk_src",
1725                        },
1726                        .num_parents = 1,
1727                        .flags = CLK_SET_RATE_PARENT,
1728                        .ops = &clk_branch2_ops,
1729                },
1730        },
1731};
1732
1733static struct clk_branch camss_jpeg_jpeg1_clk = {
1734        .halt_reg = 0x35ac,
1735        .clkr = {
1736                .enable_reg = 0x35ac,
1737                .enable_mask = BIT(0),
1738                .hw.init = &(struct clk_init_data){
1739                        .name = "camss_jpeg_jpeg1_clk",
1740                        .parent_names = (const char *[]){
1741                                "jpeg1_clk_src",
1742                        },
1743                        .num_parents = 1,
1744                        .flags = CLK_SET_RATE_PARENT,
1745                        .ops = &clk_branch2_ops,
1746                },
1747        },
1748};
1749
1750static struct clk_branch camss_jpeg_jpeg2_clk = {
1751        .halt_reg = 0x35b0,
1752        .clkr = {
1753                .enable_reg = 0x35b0,
1754                .enable_mask = BIT(0),
1755                .hw.init = &(struct clk_init_data){
1756                        .name = "camss_jpeg_jpeg2_clk",
1757                        .parent_names = (const char *[]){
1758                                "jpeg2_clk_src",
1759                        },
1760                        .num_parents = 1,
1761                        .flags = CLK_SET_RATE_PARENT,
1762                        .ops = &clk_branch2_ops,
1763                },
1764        },
1765};
1766
1767static struct clk_branch camss_jpeg_jpeg_ahb_clk = {
1768        .halt_reg = 0x35b4,
1769        .clkr = {
1770                .enable_reg = 0x35b4,
1771                .enable_mask = BIT(0),
1772                .hw.init = &(struct clk_init_data){
1773                        .name = "camss_jpeg_jpeg_ahb_clk",
1774                        .parent_names = (const char *[]){
1775                                "mmss_ahb_clk_src",
1776                        },
1777                        .num_parents = 1,
1778                        .ops = &clk_branch2_ops,
1779                },
1780        },
1781};
1782
1783static struct clk_branch camss_jpeg_jpeg_axi_clk = {
1784        .halt_reg = 0x35b8,
1785        .clkr = {
1786                .enable_reg = 0x35b8,
1787                .enable_mask = BIT(0),
1788                .hw.init = &(struct clk_init_data){
1789                        .name = "camss_jpeg_jpeg_axi_clk",
1790                        .parent_names = (const char *[]){
1791                                "mmss_axi_clk_src",
1792                        },
1793                        .num_parents = 1,
1794                        .ops = &clk_branch2_ops,
1795                },
1796        },
1797};
1798
1799static struct clk_branch camss_mclk0_clk = {
1800        .halt_reg = 0x3384,
1801        .clkr = {
1802                .enable_reg = 0x3384,
1803                .enable_mask = BIT(0),
1804                .hw.init = &(struct clk_init_data){
1805                        .name = "camss_mclk0_clk",
1806                        .parent_names = (const char *[]){
1807                                "mclk0_clk_src",
1808                        },
1809                        .num_parents = 1,
1810                        .flags = CLK_SET_RATE_PARENT,
1811                        .ops = &clk_branch2_ops,
1812                },
1813        },
1814};
1815
1816static struct clk_branch camss_mclk1_clk = {
1817        .halt_reg = 0x33b4,
1818        .clkr = {
1819                .enable_reg = 0x33b4,
1820                .enable_mask = BIT(0),
1821                .hw.init = &(struct clk_init_data){
1822                        .name = "camss_mclk1_clk",
1823                        .parent_names = (const char *[]){
1824                                "mclk1_clk_src",
1825                        },
1826                        .num_parents = 1,
1827                        .flags = CLK_SET_RATE_PARENT,
1828                        .ops = &clk_branch2_ops,
1829                },
1830        },
1831};
1832
1833static struct clk_branch camss_mclk2_clk = {
1834        .halt_reg = 0x33e4,
1835        .clkr = {
1836                .enable_reg = 0x33e4,
1837                .enable_mask = BIT(0),
1838                .hw.init = &(struct clk_init_data){
1839                        .name = "camss_mclk2_clk",
1840                        .parent_names = (const char *[]){
1841                                "mclk2_clk_src",
1842                        },
1843                        .num_parents = 1,
1844                        .flags = CLK_SET_RATE_PARENT,
1845                        .ops = &clk_branch2_ops,
1846                },
1847        },
1848};
1849
1850static struct clk_branch camss_mclk3_clk = {
1851        .halt_reg = 0x3414,
1852        .clkr = {
1853                .enable_reg = 0x3414,
1854                .enable_mask = BIT(0),
1855                .hw.init = &(struct clk_init_data){
1856                        .name = "camss_mclk3_clk",
1857                        .parent_names = (const char *[]){
1858                                "mclk3_clk_src",
1859                        },
1860                        .num_parents = 1,
1861                        .flags = CLK_SET_RATE_PARENT,
1862                        .ops = &clk_branch2_ops,
1863                },
1864        },
1865};
1866
1867static struct clk_branch camss_micro_ahb_clk = {
1868        .halt_reg = 0x3494,
1869        .clkr = {
1870                .enable_reg = 0x3494,
1871                .enable_mask = BIT(0),
1872                .hw.init = &(struct clk_init_data){
1873                        .name = "camss_micro_ahb_clk",
1874                        .parent_names = (const char *[]){
1875                                "mmss_ahb_clk_src",
1876                        },
1877                        .num_parents = 1,
1878                        .ops = &clk_branch2_ops,
1879                },
1880        },
1881};
1882
1883static struct clk_branch camss_phy0_csi0phytimer_clk = {
1884        .halt_reg = 0x3024,
1885        .clkr = {
1886                .enable_reg = 0x3024,
1887                .enable_mask = BIT(0),
1888                .hw.init = &(struct clk_init_data){
1889                        .name = "camss_phy0_csi0phytimer_clk",
1890                        .parent_names = (const char *[]){
1891                                "csi0phytimer_clk_src",
1892                        },
1893                        .num_parents = 1,
1894                        .flags = CLK_SET_RATE_PARENT,
1895                        .ops = &clk_branch2_ops,
1896                },
1897        },
1898};
1899
1900static struct clk_branch camss_phy1_csi1phytimer_clk = {
1901        .halt_reg = 0x3054,
1902        .clkr = {
1903                .enable_reg = 0x3054,
1904                .enable_mask = BIT(0),
1905                .hw.init = &(struct clk_init_data){
1906                        .name = "camss_phy1_csi1phytimer_clk",
1907                        .parent_names = (const char *[]){
1908                                "csi1phytimer_clk_src",
1909                        },
1910                        .num_parents = 1,
1911                        .flags = CLK_SET_RATE_PARENT,
1912                        .ops = &clk_branch2_ops,
1913                },
1914        },
1915};
1916
1917static struct clk_branch camss_phy2_csi2phytimer_clk = {
1918        .halt_reg = 0x3084,
1919        .clkr = {
1920                .enable_reg = 0x3084,
1921                .enable_mask = BIT(0),
1922                .hw.init = &(struct clk_init_data){
1923                        .name = "camss_phy2_csi2phytimer_clk",
1924                        .parent_names = (const char *[]){
1925                                "csi2phytimer_clk_src",
1926                        },
1927                        .num_parents = 1,
1928                        .flags = CLK_SET_RATE_PARENT,
1929                        .ops = &clk_branch2_ops,
1930                },
1931        },
1932};
1933
1934static struct clk_branch camss_top_ahb_clk = {
1935        .halt_reg = 0x3484,
1936        .clkr = {
1937                .enable_reg = 0x3484,
1938                .enable_mask = BIT(0),
1939                .hw.init = &(struct clk_init_data){
1940                        .name = "camss_top_ahb_clk",
1941                        .parent_names = (const char *[]){
1942                                "mmss_ahb_clk_src",
1943                        },
1944                        .num_parents = 1,
1945                        .flags = CLK_SET_RATE_PARENT,
1946                        .ops = &clk_branch2_ops,
1947                },
1948        },
1949};
1950
1951static struct clk_branch camss_vfe_cpp_ahb_clk = {
1952        .halt_reg = 0x36b4,
1953        .clkr = {
1954                .enable_reg = 0x36b4,
1955                .enable_mask = BIT(0),
1956                .hw.init = &(struct clk_init_data){
1957                        .name = "camss_vfe_cpp_ahb_clk",
1958                        .parent_names = (const char *[]){
1959                                "mmss_ahb_clk_src",
1960                        },
1961                        .num_parents = 1,
1962                        .flags = CLK_SET_RATE_PARENT,
1963                        .ops = &clk_branch2_ops,
1964                },
1965        },
1966};
1967
1968static struct clk_branch camss_vfe_cpp_clk = {
1969        .halt_reg = 0x36b0,
1970        .clkr = {
1971                .enable_reg = 0x36b0,
1972                .enable_mask = BIT(0),
1973                .hw.init = &(struct clk_init_data){
1974                        .name = "camss_vfe_cpp_clk",
1975                        .parent_names = (const char *[]){
1976                                "cpp_clk_src",
1977                        },
1978                        .num_parents = 1,
1979                        .flags = CLK_SET_RATE_PARENT,
1980                        .ops = &clk_branch2_ops,
1981                },
1982        },
1983};
1984
1985static struct clk_branch camss_vfe_vfe0_clk = {
1986        .halt_reg = 0x36a8,
1987        .clkr = {
1988                .enable_reg = 0x36a8,
1989                .enable_mask = BIT(0),
1990                .hw.init = &(struct clk_init_data){
1991                        .name = "camss_vfe_vfe0_clk",
1992                        .parent_names = (const char *[]){
1993                                "vfe0_clk_src",
1994                        },
1995                        .num_parents = 1,
1996                        .flags = CLK_SET_RATE_PARENT,
1997                        .ops = &clk_branch2_ops,
1998                },
1999        },
2000};
2001
2002static struct clk_branch camss_vfe_vfe1_clk = {
2003        .halt_reg = 0x36ac,
2004        .clkr = {
2005                .enable_reg = 0x36ac,
2006                .enable_mask = BIT(0),
2007                .hw.init = &(struct clk_init_data){
2008                        .name = "camss_vfe_vfe1_clk",
2009                        .parent_names = (const char *[]){
2010                                "vfe1_clk_src",
2011                        },
2012                        .num_parents = 1,
2013                        .flags = CLK_SET_RATE_PARENT,
2014                        .ops = &clk_branch2_ops,
2015                },
2016        },
2017};
2018
2019static struct clk_branch camss_vfe_vfe_ahb_clk = {
2020        .halt_reg = 0x36b8,
2021        .clkr = {
2022                .enable_reg = 0x36b8,
2023                .enable_mask = BIT(0),
2024                .hw.init = &(struct clk_init_data){
2025                        .name = "camss_vfe_vfe_ahb_clk",
2026                        .parent_names = (const char *[]){
2027                                "mmss_ahb_clk_src",
2028                        },
2029                        .num_parents = 1,
2030                        .flags = CLK_SET_RATE_PARENT,
2031                        .ops = &clk_branch2_ops,
2032                },
2033        },
2034};
2035
2036static struct clk_branch camss_vfe_vfe_axi_clk = {
2037        .halt_reg = 0x36bc,
2038        .clkr = {
2039                .enable_reg = 0x36bc,
2040                .enable_mask = BIT(0),
2041                .hw.init = &(struct clk_init_data){
2042                        .name = "camss_vfe_vfe_axi_clk",
2043                        .parent_names = (const char *[]){
2044                                "mmss_axi_clk_src",
2045                        },
2046                        .num_parents = 1,
2047                        .flags = CLK_SET_RATE_PARENT,
2048                        .ops = &clk_branch2_ops,
2049                },
2050        },
2051};
2052
2053static struct clk_branch mdss_ahb_clk = {
2054        .halt_reg = 0x2308,
2055        .clkr = {
2056                .enable_reg = 0x2308,
2057                .enable_mask = BIT(0),
2058                .hw.init = &(struct clk_init_data){
2059                        .name = "mdss_ahb_clk",
2060                        .parent_names = (const char *[]){
2061                                "mmss_ahb_clk_src",
2062                        },
2063                        .num_parents = 1,
2064                        .flags = CLK_SET_RATE_PARENT,
2065                        .ops = &clk_branch2_ops,
2066                },
2067        },
2068};
2069
2070static struct clk_branch mdss_axi_clk = {
2071        .halt_reg = 0x2310,
2072        .clkr = {
2073                .enable_reg = 0x2310,
2074                .enable_mask = BIT(0),
2075                .hw.init = &(struct clk_init_data){
2076                        .name = "mdss_axi_clk",
2077                        .parent_names = (const char *[]){
2078                                "mmss_axi_clk_src",
2079                        },
2080                        .num_parents = 1,
2081                        .flags = CLK_SET_RATE_PARENT,
2082                        .ops = &clk_branch2_ops,
2083                },
2084        },
2085};
2086
2087static struct clk_branch mdss_byte0_clk = {
2088        .halt_reg = 0x233c,
2089        .clkr = {
2090                .enable_reg = 0x233c,
2091                .enable_mask = BIT(0),
2092                .hw.init = &(struct clk_init_data){
2093                        .name = "mdss_byte0_clk",
2094                        .parent_names = (const char *[]){
2095                                "byte0_clk_src",
2096                        },
2097                        .num_parents = 1,
2098                        .flags = CLK_SET_RATE_PARENT,
2099                        .ops = &clk_branch2_ops,
2100                },
2101        },
2102};
2103
2104static struct clk_branch mdss_byte1_clk = {
2105        .halt_reg = 0x2340,
2106        .clkr = {
2107                .enable_reg = 0x2340,
2108                .enable_mask = BIT(0),
2109                .hw.init = &(struct clk_init_data){
2110                        .name = "mdss_byte1_clk",
2111                        .parent_names = (const char *[]){
2112                                "byte1_clk_src",
2113                        },
2114                        .num_parents = 1,
2115                        .flags = CLK_SET_RATE_PARENT,
2116                        .ops = &clk_branch2_ops,
2117                },
2118        },
2119};
2120
2121static struct clk_branch mdss_edpaux_clk = {
2122        .halt_reg = 0x2334,
2123        .clkr = {
2124                .enable_reg = 0x2334,
2125                .enable_mask = BIT(0),
2126                .hw.init = &(struct clk_init_data){
2127                        .name = "mdss_edpaux_clk",
2128                        .parent_names = (const char *[]){
2129                                "edpaux_clk_src",
2130                        },
2131                        .num_parents = 1,
2132                        .flags = CLK_SET_RATE_PARENT,
2133                        .ops = &clk_branch2_ops,
2134                },
2135        },
2136};
2137
2138static struct clk_branch mdss_edplink_clk = {
2139        .halt_reg = 0x2330,
2140        .clkr = {
2141                .enable_reg = 0x2330,
2142                .enable_mask = BIT(0),
2143                .hw.init = &(struct clk_init_data){
2144                        .name = "mdss_edplink_clk",
2145                        .parent_names = (const char *[]){
2146                                "edplink_clk_src",
2147                        },
2148                        .num_parents = 1,
2149                        .flags = CLK_SET_RATE_PARENT,
2150                        .ops = &clk_branch2_ops,
2151                },
2152        },
2153};
2154
2155static struct clk_branch mdss_edppixel_clk = {
2156        .halt_reg = 0x232c,
2157        .clkr = {
2158                .enable_reg = 0x232c,
2159                .enable_mask = BIT(0),
2160                .hw.init = &(struct clk_init_data){
2161                        .name = "mdss_edppixel_clk",
2162                        .parent_names = (const char *[]){
2163                                "edppixel_clk_src",
2164                        },
2165                        .num_parents = 1,
2166                        .flags = CLK_SET_RATE_PARENT,
2167                        .ops = &clk_branch2_ops,
2168                },
2169        },
2170};
2171
2172static struct clk_branch mdss_esc0_clk = {
2173        .halt_reg = 0x2344,
2174        .clkr = {
2175                .enable_reg = 0x2344,
2176                .enable_mask = BIT(0),
2177                .hw.init = &(struct clk_init_data){
2178                        .name = "mdss_esc0_clk",
2179                        .parent_names = (const char *[]){
2180                                "esc0_clk_src",
2181                        },
2182                        .num_parents = 1,
2183                        .flags = CLK_SET_RATE_PARENT,
2184                        .ops = &clk_branch2_ops,
2185                },
2186        },
2187};
2188
2189static struct clk_branch mdss_esc1_clk = {
2190        .halt_reg = 0x2348,
2191        .clkr = {
2192                .enable_reg = 0x2348,
2193                .enable_mask = BIT(0),
2194                .hw.init = &(struct clk_init_data){
2195                        .name = "mdss_esc1_clk",
2196                        .parent_names = (const char *[]){
2197                                "esc1_clk_src",
2198                        },
2199                        .num_parents = 1,
2200                        .flags = CLK_SET_RATE_PARENT,
2201                        .ops = &clk_branch2_ops,
2202                },
2203        },
2204};
2205
2206static struct clk_branch mdss_extpclk_clk = {
2207        .halt_reg = 0x2324,
2208        .clkr = {
2209                .enable_reg = 0x2324,
2210                .enable_mask = BIT(0),
2211                .hw.init = &(struct clk_init_data){
2212                        .name = "mdss_extpclk_clk",
2213                        .parent_names = (const char *[]){
2214                                "extpclk_clk_src",
2215                        },
2216                        .num_parents = 1,
2217                        .flags = CLK_SET_RATE_PARENT,
2218                        .ops = &clk_branch2_ops,
2219                },
2220        },
2221};
2222
2223static struct clk_branch mdss_hdmi_ahb_clk = {
2224        .halt_reg = 0x230c,
2225        .clkr = {
2226                .enable_reg = 0x230c,
2227                .enable_mask = BIT(0),
2228                .hw.init = &(struct clk_init_data){
2229                        .name = "mdss_hdmi_ahb_clk",
2230                        .parent_names = (const char *[]){
2231                                "mmss_ahb_clk_src",
2232                        },
2233                        .num_parents = 1,
2234                        .flags = CLK_SET_RATE_PARENT,
2235                        .ops = &clk_branch2_ops,
2236                },
2237        },
2238};
2239
2240static struct clk_branch mdss_hdmi_clk = {
2241        .halt_reg = 0x2338,
2242        .clkr = {
2243                .enable_reg = 0x2338,
2244                .enable_mask = BIT(0),
2245                .hw.init = &(struct clk_init_data){
2246                        .name = "mdss_hdmi_clk",
2247                        .parent_names = (const char *[]){
2248                                "hdmi_clk_src",
2249                        },
2250                        .num_parents = 1,
2251                        .flags = CLK_SET_RATE_PARENT,
2252                        .ops = &clk_branch2_ops,
2253                },
2254        },
2255};
2256
2257static struct clk_branch mdss_mdp_clk = {
2258        .halt_reg = 0x231c,
2259        .clkr = {
2260                .enable_reg = 0x231c,
2261                .enable_mask = BIT(0),
2262                .hw.init = &(struct clk_init_data){
2263                        .name = "mdss_mdp_clk",
2264                        .parent_names = (const char *[]){
2265                                "mdp_clk_src",
2266                        },
2267                        .num_parents = 1,
2268                        .flags = CLK_SET_RATE_PARENT,
2269                        .ops = &clk_branch2_ops,
2270                },
2271        },
2272};
2273
2274static struct clk_branch mdss_mdp_lut_clk = {
2275        .halt_reg = 0x2320,
2276        .clkr = {
2277                .enable_reg = 0x2320,
2278                .enable_mask = BIT(0),
2279                .hw.init = &(struct clk_init_data){
2280                        .name = "mdss_mdp_lut_clk",
2281                        .parent_names = (const char *[]){
2282                                "mdp_clk_src",
2283                        },
2284                        .num_parents = 1,
2285                        .flags = CLK_SET_RATE_PARENT,
2286                        .ops = &clk_branch2_ops,
2287                },
2288        },
2289};
2290
2291static struct clk_branch mdss_pclk0_clk = {
2292        .halt_reg = 0x2314,
2293        .clkr = {
2294                .enable_reg = 0x2314,
2295                .enable_mask = BIT(0),
2296                .hw.init = &(struct clk_init_data){
2297                        .name = "mdss_pclk0_clk",
2298                        .parent_names = (const char *[]){
2299                                "pclk0_clk_src",
2300                        },
2301                        .num_parents = 1,
2302                        .flags = CLK_SET_RATE_PARENT,
2303                        .ops = &clk_branch2_ops,
2304                },
2305        },
2306};
2307
2308static struct clk_branch mdss_pclk1_clk = {
2309        .halt_reg = 0x2318,
2310        .clkr = {
2311                .enable_reg = 0x2318,
2312                .enable_mask = BIT(0),
2313                .hw.init = &(struct clk_init_data){
2314                        .name = "mdss_pclk1_clk",
2315                        .parent_names = (const char *[]){
2316                                "pclk1_clk_src",
2317                        },
2318                        .num_parents = 1,
2319                        .flags = CLK_SET_RATE_PARENT,
2320                        .ops = &clk_branch2_ops,
2321                },
2322        },
2323};
2324
2325static struct clk_branch mdss_vsync_clk = {
2326        .halt_reg = 0x2328,
2327        .clkr = {
2328                .enable_reg = 0x2328,
2329                .enable_mask = BIT(0),
2330                .hw.init = &(struct clk_init_data){
2331                        .name = "mdss_vsync_clk",
2332                        .parent_names = (const char *[]){
2333                                "vsync_clk_src",
2334                        },
2335                        .num_parents = 1,
2336                        .flags = CLK_SET_RATE_PARENT,
2337                        .ops = &clk_branch2_ops,
2338                },
2339        },
2340};
2341
2342static struct clk_branch mmss_rbcpr_ahb_clk = {
2343        .halt_reg = 0x4088,
2344        .clkr = {
2345                .enable_reg = 0x4088,
2346                .enable_mask = BIT(0),
2347                .hw.init = &(struct clk_init_data){
2348                        .name = "mmss_rbcpr_ahb_clk",
2349                        .parent_names = (const char *[]){
2350                                "mmss_ahb_clk_src",
2351                        },
2352                        .num_parents = 1,
2353                        .flags = CLK_SET_RATE_PARENT,
2354                        .ops = &clk_branch2_ops,
2355                },
2356        },
2357};
2358
2359static struct clk_branch mmss_rbcpr_clk = {
2360        .halt_reg = 0x4084,
2361        .clkr = {
2362                .enable_reg = 0x4084,
2363                .enable_mask = BIT(0),
2364                .hw.init = &(struct clk_init_data){
2365                        .name = "mmss_rbcpr_clk",
2366                        .parent_names = (const char *[]){
2367                                "rbcpr_clk_src",
2368                        },
2369                        .num_parents = 1,
2370                        .flags = CLK_SET_RATE_PARENT,
2371                        .ops = &clk_branch2_ops,
2372                },
2373        },
2374};
2375
2376static struct clk_branch mmss_spdm_ahb_clk = {
2377        .halt_reg = 0x0230,
2378        .clkr = {
2379                .enable_reg = 0x0230,
2380                .enable_mask = BIT(0),
2381                .hw.init = &(struct clk_init_data){
2382                        .name = "mmss_spdm_ahb_clk",
2383                        .parent_names = (const char *[]){
2384                                "mmss_spdm_ahb_div_clk",
2385                        },
2386                        .num_parents = 1,
2387                        .flags = CLK_SET_RATE_PARENT,
2388                        .ops = &clk_branch2_ops,
2389                },
2390        },
2391};
2392
2393static struct clk_branch mmss_spdm_axi_clk = {
2394        .halt_reg = 0x0210,
2395        .clkr = {
2396                .enable_reg = 0x0210,
2397                .enable_mask = BIT(0),
2398                .hw.init = &(struct clk_init_data){
2399                        .name = "mmss_spdm_axi_clk",
2400                        .parent_names = (const char *[]){
2401                                "mmss_spdm_axi_div_clk",
2402                        },
2403                        .num_parents = 1,
2404                        .flags = CLK_SET_RATE_PARENT,
2405                        .ops = &clk_branch2_ops,
2406                },
2407        },
2408};
2409
2410static struct clk_branch mmss_spdm_csi0_clk = {
2411        .halt_reg = 0x023c,
2412        .clkr = {
2413                .enable_reg = 0x023c,
2414                .enable_mask = BIT(0),
2415                .hw.init = &(struct clk_init_data){
2416                        .name = "mmss_spdm_csi0_clk",
2417                        .parent_names = (const char *[]){
2418                                "mmss_spdm_csi0_div_clk",
2419                        },
2420                        .num_parents = 1,
2421                        .flags = CLK_SET_RATE_PARENT,
2422                        .ops = &clk_branch2_ops,
2423                },
2424        },
2425};
2426
2427static struct clk_branch mmss_spdm_gfx3d_clk = {
2428        .halt_reg = 0x022c,
2429        .clkr = {
2430                .enable_reg = 0x022c,
2431                .enable_mask = BIT(0),
2432                .hw.init = &(struct clk_init_data){
2433                        .name = "mmss_spdm_gfx3d_clk",
2434                        .parent_names = (const char *[]){
2435                                "mmss_spdm_gfx3d_div_clk",
2436                        },
2437                        .num_parents = 1,
2438                        .flags = CLK_SET_RATE_PARENT,
2439                        .ops = &clk_branch2_ops,
2440                },
2441        },
2442};
2443
2444static struct clk_branch mmss_spdm_jpeg0_clk = {
2445        .halt_reg = 0x0204,
2446        .clkr = {
2447                .enable_reg = 0x0204,
2448                .enable_mask = BIT(0),
2449                .hw.init = &(struct clk_init_data){
2450                        .name = "mmss_spdm_jpeg0_clk",
2451                        .parent_names = (const char *[]){
2452                                "mmss_spdm_jpeg0_div_clk",
2453                        },
2454                        .num_parents = 1,
2455                        .flags = CLK_SET_RATE_PARENT,
2456                        .ops = &clk_branch2_ops,
2457                },
2458        },
2459};
2460
2461static struct clk_branch mmss_spdm_jpeg1_clk = {
2462        .halt_reg = 0x0208,
2463        .clkr = {
2464                .enable_reg = 0x0208,
2465                .enable_mask = BIT(0),
2466                .hw.init = &(struct clk_init_data){
2467                        .name = "mmss_spdm_jpeg1_clk",
2468                        .parent_names = (const char *[]){
2469                                "mmss_spdm_jpeg1_div_clk",
2470                        },
2471                        .num_parents = 1,
2472                        .flags = CLK_SET_RATE_PARENT,
2473                        .ops = &clk_branch2_ops,
2474                },
2475        },
2476};
2477
2478static struct clk_branch mmss_spdm_jpeg2_clk = {
2479        .halt_reg = 0x0224,
2480        .clkr = {
2481                .enable_reg = 0x0224,
2482                .enable_mask = BIT(0),
2483                .hw.init = &(struct clk_init_data){
2484                        .name = "mmss_spdm_jpeg2_clk",
2485                        .parent_names = (const char *[]){
2486                                "mmss_spdm_jpeg2_div_clk",
2487                        },
2488                        .num_parents = 1,
2489                        .flags = CLK_SET_RATE_PARENT,
2490                        .ops = &clk_branch2_ops,
2491                },
2492        },
2493};
2494
2495static struct clk_branch mmss_spdm_mdp_clk = {
2496        .halt_reg = 0x020c,
2497        .clkr = {
2498                .enable_reg = 0x020c,
2499                .enable_mask = BIT(0),
2500                .hw.init = &(struct clk_init_data){
2501                        .name = "mmss_spdm_mdp_clk",
2502                        .parent_names = (const char *[]){
2503                                "mmss_spdm_mdp_div_clk",
2504                        },
2505                        .num_parents = 1,
2506                        .flags = CLK_SET_RATE_PARENT,
2507                        .ops = &clk_branch2_ops,
2508                },
2509        },
2510};
2511
2512static struct clk_branch mmss_spdm_pclk0_clk = {
2513        .halt_reg = 0x0234,
2514        .clkr = {
2515                .enable_reg = 0x0234,
2516                .enable_mask = BIT(0),
2517                .hw.init = &(struct clk_init_data){
2518                        .name = "mmss_spdm_pclk0_clk",
2519                        .parent_names = (const char *[]){
2520                                "mmss_spdm_pclk0_div_clk",
2521                        },
2522                        .num_parents = 1,
2523                        .flags = CLK_SET_RATE_PARENT,
2524                        .ops = &clk_branch2_ops,
2525                },
2526        },
2527};
2528
2529static struct clk_branch mmss_spdm_pclk1_clk = {
2530        .halt_reg = 0x0228,
2531        .clkr = {
2532                .enable_reg = 0x0228,
2533                .enable_mask = BIT(0),
2534                .hw.init = &(struct clk_init_data){
2535                        .name = "mmss_spdm_pclk1_clk",
2536                        .parent_names = (const char *[]){
2537                                "mmss_spdm_pclk1_div_clk",
2538                        },
2539                        .num_parents = 1,
2540                        .flags = CLK_SET_RATE_PARENT,
2541                        .ops = &clk_branch2_ops,
2542                },
2543        },
2544};
2545
2546static struct clk_branch mmss_spdm_vcodec0_clk = {
2547        .halt_reg = 0x0214,
2548        .clkr = {
2549                .enable_reg = 0x0214,
2550                .enable_mask = BIT(0),
2551                .hw.init = &(struct clk_init_data){
2552                        .name = "mmss_spdm_vcodec0_clk",
2553                        .parent_names = (const char *[]){
2554                                "mmss_spdm_vcodec0_div_clk",
2555                        },
2556                        .num_parents = 1,
2557                        .flags = CLK_SET_RATE_PARENT,
2558                        .ops = &clk_branch2_ops,
2559                },
2560        },
2561};
2562
2563static struct clk_branch mmss_spdm_vfe0_clk = {
2564        .halt_reg = 0x0218,
2565        .clkr = {
2566                .enable_reg = 0x0218,
2567                .enable_mask = BIT(0),
2568                .hw.init = &(struct clk_init_data){
2569                        .name = "mmss_spdm_vfe0_clk",
2570                        .parent_names = (const char *[]){
2571                                "mmss_spdm_vfe0_div_clk",
2572                        },
2573                        .num_parents = 1,
2574                        .flags = CLK_SET_RATE_PARENT,
2575                        .ops = &clk_branch2_ops,
2576                },
2577        },
2578};
2579
2580static struct clk_branch mmss_spdm_vfe1_clk = {
2581        .halt_reg = 0x021c,
2582        .clkr = {
2583                .enable_reg = 0x021c,
2584                .enable_mask = BIT(0),
2585                .hw.init = &(struct clk_init_data){
2586                        .name = "mmss_spdm_vfe1_clk",
2587                        .parent_names = (const char *[]){
2588                                "mmss_spdm_vfe1_div_clk",
2589                        },
2590                        .num_parents = 1,
2591                        .flags = CLK_SET_RATE_PARENT,
2592                        .ops = &clk_branch2_ops,
2593                },
2594        },
2595};
2596
2597static struct clk_branch mmss_spdm_rm_axi_clk = {
2598        .halt_reg = 0x0304,
2599        .clkr = {
2600                .enable_reg = 0x0304,
2601                .enable_mask = BIT(0),
2602                .hw.init = &(struct clk_init_data){
2603                        .name = "mmss_spdm_rm_axi_clk",
2604                        .parent_names = (const char *[]){
2605                                "mmss_axi_clk_src",
2606                        },
2607                        .num_parents = 1,
2608                        .flags = CLK_SET_RATE_PARENT,
2609                        .ops = &clk_branch2_ops,
2610                },
2611        },
2612};
2613
2614static struct clk_branch mmss_spdm_rm_ocmemnoc_clk = {
2615        .halt_reg = 0x0308,
2616        .clkr = {
2617                .enable_reg = 0x0308,
2618                .enable_mask = BIT(0),
2619                .hw.init = &(struct clk_init_data){
2620                        .name = "mmss_spdm_rm_ocmemnoc_clk",
2621                        .parent_names = (const char *[]){
2622                                "ocmemnoc_clk_src",
2623                        },
2624                        .num_parents = 1,
2625                        .flags = CLK_SET_RATE_PARENT,
2626                        .ops = &clk_branch2_ops,
2627                },
2628        },
2629};
2630
2631
2632static struct clk_branch mmss_misc_ahb_clk = {
2633        .halt_reg = 0x502c,
2634        .clkr = {
2635                .enable_reg = 0x502c,
2636                .enable_mask = BIT(0),
2637                .hw.init = &(struct clk_init_data){
2638                        .name = "mmss_misc_ahb_clk",
2639                        .parent_names = (const char *[]){
2640                                "mmss_ahb_clk_src",
2641                        },
2642                        .num_parents = 1,
2643                        .flags = CLK_SET_RATE_PARENT,
2644                        .ops = &clk_branch2_ops,
2645                },
2646        },
2647};
2648
2649static struct clk_branch mmss_mmssnoc_ahb_clk = {
2650        .halt_reg = 0x5024,
2651        .clkr = {
2652                .enable_reg = 0x5024,
2653                .enable_mask = BIT(0),
2654                .hw.init = &(struct clk_init_data){
2655                        .name = "mmss_mmssnoc_ahb_clk",
2656                        .parent_names = (const char *[]){
2657                                "mmss_ahb_clk_src",
2658                        },
2659                        .num_parents = 1,
2660                        .ops = &clk_branch2_ops,
2661                        .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2662                },
2663        },
2664};
2665
2666static struct clk_branch mmss_mmssnoc_bto_ahb_clk = {
2667        .halt_reg = 0x5028,
2668        .clkr = {
2669                .enable_reg = 0x5028,
2670                .enable_mask = BIT(0),
2671                .hw.init = &(struct clk_init_data){
2672                        .name = "mmss_mmssnoc_bto_ahb_clk",
2673                        .parent_names = (const char *[]){
2674                                "mmss_ahb_clk_src",
2675                        },
2676                        .num_parents = 1,
2677                        .ops = &clk_branch2_ops,
2678                        .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2679                },
2680        },
2681};
2682
2683static struct clk_branch mmss_mmssnoc_axi_clk = {
2684        .halt_reg = 0x506c,
2685        .clkr = {
2686                .enable_reg = 0x506c,
2687                .enable_mask = BIT(0),
2688                .hw.init = &(struct clk_init_data){
2689                        .name = "mmss_mmssnoc_axi_clk",
2690                        .parent_names = (const char *[]){
2691                                "mmss_axi_clk_src",
2692                        },
2693                        .num_parents = 1,
2694                        .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2695                        .ops = &clk_branch2_ops,
2696                },
2697        },
2698};
2699
2700static struct clk_branch mmss_s0_axi_clk = {
2701        .halt_reg = 0x5064,
2702        .clkr = {
2703                .enable_reg = 0x5064,
2704                .enable_mask = BIT(0),
2705                .hw.init = &(struct clk_init_data){
2706                        .name = "mmss_s0_axi_clk",
2707                        .parent_names = (const char *[]){
2708                                "mmss_axi_clk_src",
2709                        },
2710                        .num_parents = 1,
2711                        .ops = &clk_branch2_ops,
2712                        .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2713                },
2714        },
2715};
2716
2717static struct clk_branch ocmemcx_ahb_clk = {
2718        .halt_reg = 0x405c,
2719        .clkr = {
2720                .enable_reg = 0x405c,
2721                .enable_mask = BIT(0),
2722                .hw.init = &(struct clk_init_data){
2723                        .name = "ocmemcx_ahb_clk",
2724                        .parent_names = (const char *[]){
2725                                "mmss_ahb_clk_src",
2726                        },
2727                        .num_parents = 1,
2728                        .flags = CLK_SET_RATE_PARENT,
2729                        .ops = &clk_branch2_ops,
2730                },
2731        },
2732};
2733
2734static struct clk_branch ocmemcx_ocmemnoc_clk = {
2735        .halt_reg = 0x4058,
2736        .clkr = {
2737                .enable_reg = 0x4058,
2738                .enable_mask = BIT(0),
2739                .hw.init = &(struct clk_init_data){
2740                        .name = "ocmemcx_ocmemnoc_clk",
2741                        .parent_names = (const char *[]){
2742                                "ocmemnoc_clk_src",
2743                        },
2744                        .num_parents = 1,
2745                        .flags = CLK_SET_RATE_PARENT,
2746                        .ops = &clk_branch2_ops,
2747                },
2748        },
2749};
2750
2751static struct clk_branch oxili_ocmemgx_clk = {
2752        .halt_reg = 0x402c,
2753        .clkr = {
2754                .enable_reg = 0x402c,
2755                .enable_mask = BIT(0),
2756                .hw.init = &(struct clk_init_data){
2757                        .name = "oxili_ocmemgx_clk",
2758                        .parent_names = (const char *[]){
2759                                "gfx3d_clk_src",
2760                        },
2761                        .num_parents = 1,
2762                        .flags = CLK_SET_RATE_PARENT,
2763                        .ops = &clk_branch2_ops,
2764                },
2765        },
2766};
2767
2768static struct clk_branch oxili_gfx3d_clk = {
2769        .halt_reg = 0x4028,
2770        .clkr = {
2771                .enable_reg = 0x4028,
2772                .enable_mask = BIT(0),
2773                .hw.init = &(struct clk_init_data){
2774                        .name = "oxili_gfx3d_clk",
2775                        .parent_names = (const char *[]){
2776                                "gfx3d_clk_src",
2777                        },
2778                        .num_parents = 1,
2779                        .flags = CLK_SET_RATE_PARENT,
2780                        .ops = &clk_branch2_ops,
2781                },
2782        },
2783};
2784
2785static struct clk_branch oxili_rbbmtimer_clk = {
2786        .halt_reg = 0x40b0,
2787        .clkr = {
2788                .enable_reg = 0x40b0,
2789                .enable_mask = BIT(0),
2790                .hw.init = &(struct clk_init_data){
2791                        .name = "oxili_rbbmtimer_clk",
2792                        .parent_names = (const char *[]){
2793                                "rbbmtimer_clk_src",
2794                        },
2795                        .num_parents = 1,
2796                        .flags = CLK_SET_RATE_PARENT,
2797                        .ops = &clk_branch2_ops,
2798                },
2799        },
2800};
2801
2802static struct clk_branch oxilicx_ahb_clk = {
2803        .halt_reg = 0x403c,
2804        .clkr = {
2805                .enable_reg = 0x403c,
2806                .enable_mask = BIT(0),
2807                .hw.init = &(struct clk_init_data){
2808                        .name = "oxilicx_ahb_clk",
2809                        .parent_names = (const char *[]){
2810                                "mmss_ahb_clk_src",
2811                        },
2812                        .num_parents = 1,
2813                        .flags = CLK_SET_RATE_PARENT,
2814                        .ops = &clk_branch2_ops,
2815                },
2816        },
2817};
2818
2819static struct clk_branch venus0_ahb_clk = {
2820        .halt_reg = 0x1030,
2821        .clkr = {
2822                .enable_reg = 0x1030,
2823                .enable_mask = BIT(0),
2824                .hw.init = &(struct clk_init_data){
2825                        .name = "venus0_ahb_clk",
2826                        .parent_names = (const char *[]){
2827                                "mmss_ahb_clk_src",
2828                        },
2829                        .num_parents = 1,
2830                        .flags = CLK_SET_RATE_PARENT,
2831                        .ops = &clk_branch2_ops,
2832                },
2833        },
2834};
2835
2836static struct clk_branch venus0_axi_clk = {
2837        .halt_reg = 0x1034,
2838        .clkr = {
2839                .enable_reg = 0x1034,
2840                .enable_mask = BIT(0),
2841                .hw.init = &(struct clk_init_data){
2842                        .name = "venus0_axi_clk",
2843                        .parent_names = (const char *[]){
2844                                "mmss_axi_clk_src",
2845                        },
2846                        .num_parents = 1,
2847                        .flags = CLK_SET_RATE_PARENT,
2848                        .ops = &clk_branch2_ops,
2849                },
2850        },
2851};
2852
2853static struct clk_branch venus0_core0_vcodec_clk = {
2854        .halt_reg = 0x1048,
2855        .clkr = {
2856                .enable_reg = 0x1048,
2857                .enable_mask = BIT(0),
2858                .hw.init = &(struct clk_init_data){
2859                        .name = "venus0_core0_vcodec_clk",
2860                        .parent_names = (const char *[]){
2861                                "vcodec0_clk_src",
2862                        },
2863                        .num_parents = 1,
2864                        .flags = CLK_SET_RATE_PARENT,
2865                        .ops = &clk_branch2_ops,
2866                },
2867        },
2868};
2869
2870static struct clk_branch venus0_core1_vcodec_clk = {
2871        .halt_reg = 0x104c,
2872        .clkr = {
2873                .enable_reg = 0x104c,
2874                .enable_mask = BIT(0),
2875                .hw.init = &(struct clk_init_data){
2876                        .name = "venus0_core1_vcodec_clk",
2877                        .parent_names = (const char *[]){
2878                                "vcodec0_clk_src",
2879                        },
2880                        .num_parents = 1,
2881                        .flags = CLK_SET_RATE_PARENT,
2882                        .ops = &clk_branch2_ops,
2883                },
2884        },
2885};
2886
2887static struct clk_branch venus0_ocmemnoc_clk = {
2888        .halt_reg = 0x1038,
2889        .clkr = {
2890                .enable_reg = 0x1038,
2891                .enable_mask = BIT(0),
2892                .hw.init = &(struct clk_init_data){
2893                        .name = "venus0_ocmemnoc_clk",
2894                        .parent_names = (const char *[]){
2895                                "ocmemnoc_clk_src",
2896                        },
2897                        .num_parents = 1,
2898                        .flags = CLK_SET_RATE_PARENT,
2899                        .ops = &clk_branch2_ops,
2900                },
2901        },
2902};
2903
2904static struct clk_branch venus0_vcodec0_clk = {
2905        .halt_reg = 0x1028,
2906        .clkr = {
2907                .enable_reg = 0x1028,
2908                .enable_mask = BIT(0),
2909                .hw.init = &(struct clk_init_data){
2910                        .name = "venus0_vcodec0_clk",
2911                        .parent_names = (const char *[]){
2912                                "vcodec0_clk_src",
2913                        },
2914                        .num_parents = 1,
2915                        .flags = CLK_SET_RATE_PARENT,
2916                        .ops = &clk_branch2_ops,
2917                },
2918        },
2919};
2920
2921static struct clk_branch vpu_ahb_clk = {
2922        .halt_reg = 0x1430,
2923        .clkr = {
2924                .enable_reg = 0x1430,
2925                .enable_mask = BIT(0),
2926                .hw.init = &(struct clk_init_data){
2927                        .name = "vpu_ahb_clk",
2928                        .parent_names = (const char *[]){
2929                                "mmss_ahb_clk_src",
2930                        },
2931                        .num_parents = 1,
2932                        .flags = CLK_SET_RATE_PARENT,
2933                        .ops = &clk_branch2_ops,
2934                },
2935        },
2936};
2937
2938static struct clk_branch vpu_axi_clk = {
2939        .halt_reg = 0x143c,
2940        .clkr = {
2941                .enable_reg = 0x143c,
2942                .enable_mask = BIT(0),
2943                .hw.init = &(struct clk_init_data){
2944                        .name = "vpu_axi_clk",
2945                        .parent_names = (const char *[]){
2946                                "mmss_axi_clk_src",
2947                        },
2948                        .num_parents = 1,
2949                        .flags = CLK_SET_RATE_PARENT,
2950                        .ops = &clk_branch2_ops,
2951                },
2952        },
2953};
2954
2955static struct clk_branch vpu_bus_clk = {
2956        .halt_reg = 0x1440,
2957        .clkr = {
2958                .enable_reg = 0x1440,
2959                .enable_mask = BIT(0),
2960                .hw.init = &(struct clk_init_data){
2961                        .name = "vpu_bus_clk",
2962                        .parent_names = (const char *[]){
2963                                "vpu_bus_clk_src",
2964                        },
2965                        .num_parents = 1,
2966                        .flags = CLK_SET_RATE_PARENT,
2967                        .ops = &clk_branch2_ops,
2968                },
2969        },
2970};
2971
2972static struct clk_branch vpu_cxo_clk = {
2973        .halt_reg = 0x1434,
2974        .clkr = {
2975                .enable_reg = 0x1434,
2976                .enable_mask = BIT(0),
2977                .hw.init = &(struct clk_init_data){
2978                        .name = "vpu_cxo_clk",
2979                        .parent_names = (const char *[]){ "xo" },
2980                        .num_parents = 1,
2981                        .flags = CLK_SET_RATE_PARENT,
2982                        .ops = &clk_branch2_ops,
2983                },
2984        },
2985};
2986
2987static struct clk_branch vpu_maple_clk = {
2988        .halt_reg = 0x142c,
2989        .clkr = {
2990                .enable_reg = 0x142c,
2991                .enable_mask = BIT(0),
2992                .hw.init = &(struct clk_init_data){
2993                        .name = "vpu_maple_clk",
2994                        .parent_names = (const char *[]){
2995                                "maple_clk_src",
2996                        },
2997                        .num_parents = 1,
2998                        .flags = CLK_SET_RATE_PARENT,
2999                        .ops = &clk_branch2_ops,
3000                },
3001        },
3002};
3003
3004static struct clk_branch vpu_sleep_clk = {
3005        .halt_reg = 0x1438,
3006        .clkr = {
3007                .enable_reg = 0x1438,
3008                .enable_mask = BIT(0),
3009                .hw.init = &(struct clk_init_data){
3010                        .name = "vpu_sleep_clk",
3011                        .parent_names = (const char *[]){
3012                                "sleep_clk_src",
3013                        },
3014                        .num_parents = 1,
3015                        .flags = CLK_SET_RATE_PARENT,
3016                        .ops = &clk_branch2_ops,
3017                },
3018        },
3019};
3020
3021static struct clk_branch vpu_vdp_clk = {
3022        .halt_reg = 0x1428,
3023        .clkr = {
3024                .enable_reg = 0x1428,
3025                .enable_mask = BIT(0),
3026                .hw.init = &(struct clk_init_data){
3027                        .name = "vpu_vdp_clk",
3028                        .parent_names = (const char *[]){
3029                                "vdp_clk_src",
3030                        },
3031                        .num_parents = 1,
3032                        .flags = CLK_SET_RATE_PARENT,
3033                        .ops = &clk_branch2_ops,
3034                },
3035        },
3036};
3037
3038static const struct pll_config mmpll1_config = {
3039        .l = 60,
3040        .m = 25,
3041        .n = 32,
3042        .vco_val = 0x0,
3043        .vco_mask = 0x3 << 20,
3044        .pre_div_val = 0x0,
3045        .pre_div_mask = 0x7 << 12,
3046        .post_div_val = 0x0,
3047        .post_div_mask = 0x3 << 8,
3048        .mn_ena_mask = BIT(24),
3049        .main_output_mask = BIT(0),
3050};
3051
3052static const struct pll_config mmpll3_config = {
3053        .l = 48,
3054        .m = 7,
3055        .n = 16,
3056        .vco_val = 0x0,
3057        .vco_mask = 0x3 << 20,
3058        .pre_div_val = 0x0,
3059        .pre_div_mask = 0x7 << 12,
3060        .post_div_val = 0x0,
3061        .post_div_mask = 0x3 << 8,
3062        .mn_ena_mask = BIT(24),
3063        .main_output_mask = BIT(0),
3064        .aux_output_mask = BIT(1),
3065};
3066
3067static struct gdsc venus0_gdsc = {
3068        .gdscr = 0x1024,
3069        .pd = {
3070                .name = "venus0",
3071        },
3072        .pwrsts = PWRSTS_OFF_ON,
3073};
3074
3075static struct gdsc venus0_core0_gdsc = {
3076        .gdscr = 0x1040,
3077        .pd = {
3078                .name = "venus0_core0",
3079        },
3080        .pwrsts = PWRSTS_OFF_ON,
3081};
3082
3083static struct gdsc venus0_core1_gdsc = {
3084        .gdscr = 0x1044,
3085        .pd = {
3086                .name = "venus0_core1",
3087        },
3088        .pwrsts = PWRSTS_OFF_ON,
3089};
3090
3091static struct gdsc mdss_gdsc = {
3092        .gdscr = 0x2304,
3093        .cxcs = (unsigned int []){ 0x231c, 0x2320 },
3094        .cxc_count = 2,
3095        .pd = {
3096                .name = "mdss",
3097        },
3098        .pwrsts = PWRSTS_OFF_ON,
3099};
3100
3101static struct gdsc camss_jpeg_gdsc = {
3102        .gdscr = 0x35a4,
3103        .pd = {
3104                .name = "camss_jpeg",
3105        },
3106        .pwrsts = PWRSTS_OFF_ON,
3107};
3108
3109static struct gdsc camss_vfe_gdsc = {
3110        .gdscr = 0x36a4,
3111        .cxcs = (unsigned int []){ 0x36a8, 0x36ac, 0x36b0 },
3112        .cxc_count = 3,
3113        .pd = {
3114                .name = "camss_vfe",
3115        },
3116        .pwrsts = PWRSTS_OFF_ON,
3117};
3118
3119static struct gdsc oxili_gdsc = {
3120        .gdscr = 0x4024,
3121        .cxcs = (unsigned int []){ 0x4028 },
3122        .cxc_count = 1,
3123        .pd = {
3124                .name = "oxili",
3125        },
3126        .pwrsts = PWRSTS_OFF_ON,
3127};
3128
3129static struct gdsc oxilicx_gdsc = {
3130        .gdscr = 0x4034,
3131        .pd = {
3132                .name = "oxilicx",
3133        },
3134        .pwrsts = PWRSTS_OFF_ON,
3135};
3136
3137static struct clk_regmap *mmcc_apq8084_clocks[] = {
3138        [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr,
3139        [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr,
3140        [MMPLL0] = &mmpll0.clkr,
3141        [MMPLL0_VOTE] = &mmpll0_vote,
3142        [MMPLL1] = &mmpll1.clkr,
3143        [MMPLL1_VOTE] = &mmpll1_vote,
3144        [MMPLL2] = &mmpll2.clkr,
3145        [MMPLL3] = &mmpll3.clkr,
3146        [MMPLL4] = &mmpll4.clkr,
3147        [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3148        [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3149        [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3150        [CSI3_CLK_SRC] = &csi3_clk_src.clkr,
3151        [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3152        [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3153        [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3154        [MDP_CLK_SRC] = &mdp_clk_src.clkr,
3155        [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3156        [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
3157        [OCMEMNOC_CLK_SRC] = &ocmemnoc_clk_src.clkr,
3158        [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
3159        [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3160        [JPEG1_CLK_SRC] = &jpeg1_clk_src.clkr,
3161        [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,
3162        [EDPPIXEL_CLK_SRC] = &edppixel_clk_src.clkr,
3163        [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
3164        [VP_CLK_SRC] = &vp_clk_src.clkr,
3165        [CCI_CLK_SRC] = &cci_clk_src.clkr,
3166        [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3167        [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3168        [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3169        [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3170        [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
3171        [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
3172        [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3173        [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3174        [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
3175        [CPP_CLK_SRC] = &cpp_clk_src.clkr,
3176        [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3177        [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
3178        [EDPAUX_CLK_SRC] = &edpaux_clk_src.clkr,
3179        [EDPLINK_CLK_SRC] = &edplink_clk_src.clkr,
3180        [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3181        [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
3182        [HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
3183        [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3184        [MMSS_RBCPR_CLK_SRC] = &rbcpr_clk_src.clkr,
3185        [RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr,
3186        [MAPLE_CLK_SRC] = &maple_clk_src.clkr,
3187        [VDP_CLK_SRC] = &vdp_clk_src.clkr,
3188        [VPU_BUS_CLK_SRC] = &vpu_bus_clk_src.clkr,
3189        [MMSS_CXO_CLK] = &mmss_cxo_clk.clkr,
3190        [MMSS_SLEEPCLK_CLK] = &mmss_sleepclk_clk.clkr,
3191        [AVSYNC_AHB_CLK] = &avsync_ahb_clk.clkr,
3192        [AVSYNC_EDPPIXEL_CLK] = &avsync_edppixel_clk.clkr,
3193        [AVSYNC_EXTPCLK_CLK] = &avsync_extpclk_clk.clkr,
3194        [AVSYNC_PCLK0_CLK] = &avsync_pclk0_clk.clkr,
3195        [AVSYNC_PCLK1_CLK] = &avsync_pclk1_clk.clkr,
3196        [AVSYNC_VP_CLK] = &avsync_vp_clk.clkr,
3197        [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr,
3198        [CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr,
3199        [CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr,
3200        [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
3201        [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
3202        [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
3203        [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
3204        [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
3205        [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
3206        [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
3207        [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
3208        [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
3209        [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
3210        [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
3211        [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
3212        [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,
3213        [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
3214        [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
3215        [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
3216        [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
3217        [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,
3218        [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
3219        [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
3220        [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
3221        [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
3222        [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
3223        [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
3224        [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
3225        [CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr,
3226        [CAMSS_JPEG_JPEG1_CLK] = &camss_jpeg_jpeg1_clk.clkr,
3227        [CAMSS_JPEG_JPEG2_CLK] = &camss_jpeg_jpeg2_clk.clkr,
3228        [CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr,
3229        [CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr,
3230        [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
3231        [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
3232        [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
3233        [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
3234        [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
3235        [CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr,
3236        [CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr,
3237        [CAMSS_PHY2_CSI2PHYTIMER_CLK] = &camss_phy2_csi2phytimer_clk.clkr,
3238        [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
3239        [CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr,
3240        [CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr,
3241        [CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr,
3242        [CAMSS_VFE_VFE1_CLK] = &camss_vfe_vfe1_clk.clkr,
3243        [CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr,
3244        [CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr,
3245        [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
3246        [MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
3247        [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
3248        [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
3249        [MDSS_EDPAUX_CLK] = &mdss_edpaux_clk.clkr,
3250        [MDSS_EDPLINK_CLK] = &mdss_edplink_clk.clkr,
3251        [MDSS_EDPPIXEL_CLK] = &mdss_edppixel_clk.clkr,
3252        [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
3253        [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
3254        [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
3255        [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,
3256        [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
3257        [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
3258        [MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr,
3259        [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
3260        [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
3261        [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
3262        [MMSS_RBCPR_AHB_CLK] = &mmss_rbcpr_ahb_clk.clkr,
3263        [MMSS_RBCPR_CLK] = &mmss_rbcpr_clk.clkr,
3264        [MMSS_SPDM_AHB_CLK] = &mmss_spdm_ahb_clk.clkr,
3265        [MMSS_SPDM_AXI_CLK] = &mmss_spdm_axi_clk.clkr,
3266        [MMSS_SPDM_CSI0_CLK] = &mmss_spdm_csi0_clk.clkr,
3267        [MMSS_SPDM_GFX3D_CLK] = &mmss_spdm_gfx3d_clk.clkr,
3268        [MMSS_SPDM_JPEG0_CLK] = &mmss_spdm_jpeg0_clk.clkr,
3269        [MMSS_SPDM_JPEG1_CLK] = &mmss_spdm_jpeg1_clk.clkr,
3270        [MMSS_SPDM_JPEG2_CLK] = &mmss_spdm_jpeg2_clk.clkr,
3271        [MMSS_SPDM_MDP_CLK] = &mmss_spdm_mdp_clk.clkr,
3272        [MMSS_SPDM_PCLK0_CLK] = &mmss_spdm_pclk0_clk.clkr,
3273        [MMSS_SPDM_PCLK1_CLK] = &mmss_spdm_pclk1_clk.clkr,
3274        [MMSS_SPDM_VCODEC0_CLK] = &mmss_spdm_vcodec0_clk.clkr,
3275        [MMSS_SPDM_VFE0_CLK] = &mmss_spdm_vfe0_clk.clkr,
3276        [MMSS_SPDM_VFE1_CLK] = &mmss_spdm_vfe1_clk.clkr,
3277        [MMSS_SPDM_RM_AXI_CLK] = &mmss_spdm_rm_axi_clk.clkr,
3278        [MMSS_SPDM_RM_OCMEMNOC_CLK] = &mmss_spdm_rm_ocmemnoc_clk.clkr,
3279        [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
3280        [MMSS_MMSSNOC_AHB_CLK] = &mmss_mmssnoc_ahb_clk.clkr,
3281        [MMSS_MMSSNOC_BTO_AHB_CLK] = &mmss_mmssnoc_bto_ahb_clk.clkr,
3282        [MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr,
3283        [MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr,
3284        [OCMEMCX_AHB_CLK] = &ocmemcx_ahb_clk.clkr,
3285        [OCMEMCX_OCMEMNOC_CLK] = &ocmemcx_ocmemnoc_clk.clkr,
3286        [OXILI_OCMEMGX_CLK] = &oxili_ocmemgx_clk.clkr,
3287        [OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr,
3288        [OXILI_RBBMTIMER_CLK] = &oxili_rbbmtimer_clk.clkr,
3289        [OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr,
3290        [VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr,
3291        [VENUS0_AXI_CLK] = &venus0_axi_clk.clkr,
3292        [VENUS0_CORE0_VCODEC_CLK] = &venus0_core0_vcodec_clk.clkr,
3293        [VENUS0_CORE1_VCODEC_CLK] = &venus0_core1_vcodec_clk.clkr,
3294        [VENUS0_OCMEMNOC_CLK] = &venus0_ocmemnoc_clk.clkr,
3295        [VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr,
3296        [VPU_AHB_CLK] = &vpu_ahb_clk.clkr,
3297        [VPU_AXI_CLK] = &vpu_axi_clk.clkr,
3298        [VPU_BUS_CLK] = &vpu_bus_clk.clkr,
3299        [VPU_CXO_CLK] = &vpu_cxo_clk.clkr,
3300        [VPU_MAPLE_CLK] = &vpu_maple_clk.clkr,
3301        [VPU_SLEEP_CLK] = &vpu_sleep_clk.clkr,
3302        [VPU_VDP_CLK] = &vpu_vdp_clk.clkr,
3303};
3304
3305static const struct qcom_reset_map mmcc_apq8084_resets[] = {
3306        [MMSS_SPDM_RESET] = { 0x0200 },
3307        [MMSS_SPDM_RM_RESET] = { 0x0300 },
3308        [VENUS0_RESET] = { 0x1020 },
3309        [VPU_RESET] = { 0x1400 },
3310        [MDSS_RESET] = { 0x2300 },
3311        [AVSYNC_RESET] = { 0x2400 },
3312        [CAMSS_PHY0_RESET] = { 0x3020 },
3313        [CAMSS_PHY1_RESET] = { 0x3050 },
3314        [CAMSS_PHY2_RESET] = { 0x3080 },
3315        [CAMSS_CSI0_RESET] = { 0x30b0 },
3316        [CAMSS_CSI0PHY_RESET] = { 0x30c0 },
3317        [CAMSS_CSI0RDI_RESET] = { 0x30d0 },
3318        [CAMSS_CSI0PIX_RESET] = { 0x30e0 },
3319        [CAMSS_CSI1_RESET] = { 0x3120 },
3320        [CAMSS_CSI1PHY_RESET] = { 0x3130 },
3321        [CAMSS_CSI1RDI_RESET] = { 0x3140 },
3322        [CAMSS_CSI1PIX_RESET] = { 0x3150 },
3323        [CAMSS_CSI2_RESET] = { 0x3180 },
3324        [CAMSS_CSI2PHY_RESET] = { 0x3190 },
3325        [CAMSS_CSI2RDI_RESET] = { 0x31a0 },
3326        [CAMSS_CSI2PIX_RESET] = { 0x31b0 },
3327        [CAMSS_CSI3_RESET] = { 0x31e0 },
3328        [CAMSS_CSI3PHY_RESET] = { 0x31f0 },
3329        [CAMSS_CSI3RDI_RESET] = { 0x3200 },
3330        [CAMSS_CSI3PIX_RESET] = { 0x3210 },
3331        [CAMSS_ISPIF_RESET] = { 0x3220 },
3332        [CAMSS_CCI_RESET] = { 0x3340 },
3333        [CAMSS_MCLK0_RESET] = { 0x3380 },
3334        [CAMSS_MCLK1_RESET] = { 0x33b0 },
3335        [CAMSS_MCLK2_RESET] = { 0x33e0 },
3336        [CAMSS_MCLK3_RESET] = { 0x3410 },
3337        [CAMSS_GP0_RESET] = { 0x3440 },
3338        [CAMSS_GP1_RESET] = { 0x3470 },
3339        [CAMSS_TOP_RESET] = { 0x3480 },
3340        [CAMSS_AHB_RESET] = { 0x3488 },
3341        [CAMSS_MICRO_RESET] = { 0x3490 },
3342        [CAMSS_JPEG_RESET] = { 0x35a0 },
3343        [CAMSS_VFE_RESET] = { 0x36a0 },
3344        [CAMSS_CSI_VFE0_RESET] = { 0x3700 },
3345        [CAMSS_CSI_VFE1_RESET] = { 0x3710 },
3346        [OXILI_RESET] = { 0x4020 },
3347        [OXILICX_RESET] = { 0x4030 },
3348        [OCMEMCX_RESET] = { 0x4050 },
3349        [MMSS_RBCRP_RESET] = { 0x4080 },
3350        [MMSSNOCAHB_RESET] = { 0x5020 },
3351        [MMSSNOCAXI_RESET] = { 0x5060 },
3352};
3353
3354static struct gdsc *mmcc_apq8084_gdscs[] = {
3355        [VENUS0_GDSC] = &venus0_gdsc,
3356        [VENUS0_CORE0_GDSC] = &venus0_core0_gdsc,
3357        [VENUS0_CORE1_GDSC] = &venus0_core1_gdsc,
3358        [MDSS_GDSC] = &mdss_gdsc,
3359        [CAMSS_JPEG_GDSC] = &camss_jpeg_gdsc,
3360        [CAMSS_VFE_GDSC] = &camss_vfe_gdsc,
3361        [OXILI_GDSC] = &oxili_gdsc,
3362        [OXILICX_GDSC] = &oxilicx_gdsc,
3363};
3364
3365static const struct regmap_config mmcc_apq8084_regmap_config = {
3366        .reg_bits       = 32,
3367        .reg_stride     = 4,
3368        .val_bits       = 32,
3369        .max_register   = 0x5104,
3370        .fast_io        = true,
3371};
3372
3373static const struct qcom_cc_desc mmcc_apq8084_desc = {
3374        .config = &mmcc_apq8084_regmap_config,
3375        .clks = mmcc_apq8084_clocks,
3376        .num_clks = ARRAY_SIZE(mmcc_apq8084_clocks),
3377        .resets = mmcc_apq8084_resets,
3378        .num_resets = ARRAY_SIZE(mmcc_apq8084_resets),
3379        .gdscs = mmcc_apq8084_gdscs,
3380        .num_gdscs = ARRAY_SIZE(mmcc_apq8084_gdscs),
3381};
3382
3383static const struct of_device_id mmcc_apq8084_match_table[] = {
3384        { .compatible = "qcom,mmcc-apq8084" },
3385        { }
3386};
3387MODULE_DEVICE_TABLE(of, mmcc_apq8084_match_table);
3388
3389static int mmcc_apq8084_probe(struct platform_device *pdev)
3390{
3391        int ret;
3392        struct regmap *regmap;
3393
3394        ret = qcom_cc_probe(pdev, &mmcc_apq8084_desc);
3395        if (ret)
3396                return ret;
3397
3398        regmap = dev_get_regmap(&pdev->dev, NULL);
3399        clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true);
3400        clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false);
3401
3402        return 0;
3403}
3404
3405static struct platform_driver mmcc_apq8084_driver = {
3406        .probe          = mmcc_apq8084_probe,
3407        .driver         = {
3408                .name   = "mmcc-apq8084",
3409                .of_match_table = mmcc_apq8084_match_table,
3410        },
3411};
3412module_platform_driver(mmcc_apq8084_driver);
3413
3414MODULE_DESCRIPTION("QCOM MMCC APQ8084 Driver");
3415MODULE_LICENSE("GPL v2");
3416MODULE_ALIAS("platform:mmcc-apq8084");
3417