cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

camcc-sdm845.c (46011B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Copyright (c) 2018, The Linux Foundation. All rights reserved.
      4 */
      5
      6#include <linux/clk-provider.h>
      7#include <linux/module.h>
      8#include <linux/platform_device.h>
      9#include <linux/regmap.h>
     10
     11#include <dt-bindings/clock/qcom,camcc-sdm845.h>
     12
     13#include "common.h"
     14#include "clk-alpha-pll.h"
     15#include "clk-branch.h"
     16#include "clk-rcg.h"
     17#include "clk-regmap.h"
     18#include "gdsc.h"
     19
     20enum {
     21	P_BI_TCXO,
     22	P_CAM_CC_PLL0_OUT_EVEN,
     23	P_CAM_CC_PLL1_OUT_EVEN,
     24	P_CAM_CC_PLL2_OUT_EVEN,
     25	P_CAM_CC_PLL3_OUT_EVEN,
     26};
     27
     28static struct clk_alpha_pll cam_cc_pll0 = {
     29	.offset = 0x0,
     30	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
     31	.clkr = {
     32		.hw.init = &(struct clk_init_data){
     33			.name = "cam_cc_pll0",
     34			.parent_data = &(const struct clk_parent_data){
     35				.fw_name = "bi_tcxo", .name = "bi_tcxo",
     36			},
     37			.num_parents = 1,
     38			.ops = &clk_alpha_pll_fabia_ops,
     39		},
     40	},
     41};
     42
     43static const struct clk_div_table post_div_table_fabia_even[] = {
     44	{ 0x0, 1 },
     45	{ 0x1, 2 },
     46	{ }
     47};
     48
     49static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
     50	.offset = 0x0,
     51	.post_div_shift = 8,
     52	.post_div_table = post_div_table_fabia_even,
     53	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
     54	.width = 4,
     55	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
     56	.clkr.hw.init = &(struct clk_init_data){
     57		.name = "cam_cc_pll0_out_even",
     58		.parent_hws = (const struct clk_hw*[]){
     59			&cam_cc_pll0.clkr.hw,
     60		},
     61		.num_parents = 1,
     62		.ops = &clk_alpha_pll_postdiv_fabia_ops,
     63	},
     64};
     65
     66static struct clk_alpha_pll cam_cc_pll1 = {
     67	.offset = 0x1000,
     68	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
     69	.clkr = {
     70		.hw.init = &(struct clk_init_data){
     71			.name = "cam_cc_pll1",
     72			.parent_data = &(const struct clk_parent_data){
     73				.fw_name = "bi_tcxo", .name = "bi_tcxo",
     74			},
     75			.num_parents = 1,
     76			.ops = &clk_alpha_pll_fabia_ops,
     77		},
     78	},
     79};
     80
     81static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
     82	.offset = 0x1000,
     83	.post_div_shift = 8,
     84	.post_div_table = post_div_table_fabia_even,
     85	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
     86	.width = 4,
     87	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
     88	.clkr.hw.init = &(struct clk_init_data){
     89		.name = "cam_cc_pll1_out_even",
     90		.parent_hws = (const struct clk_hw*[]){
     91			&cam_cc_pll1.clkr.hw,
     92		},
     93		.num_parents = 1,
     94		.ops = &clk_alpha_pll_postdiv_fabia_ops,
     95	},
     96};
     97
     98static struct clk_alpha_pll cam_cc_pll2 = {
     99	.offset = 0x2000,
    100	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
    101	.clkr = {
    102		.hw.init = &(struct clk_init_data){
    103			.name = "cam_cc_pll2",
    104			.parent_data = &(const struct clk_parent_data){
    105				.fw_name = "bi_tcxo", .name = "bi_tcxo",
    106			},
    107			.num_parents = 1,
    108			.ops = &clk_alpha_pll_fabia_ops,
    109		},
    110	},
    111};
    112
    113static struct clk_alpha_pll_postdiv cam_cc_pll2_out_even = {
    114	.offset = 0x2000,
    115	.post_div_shift = 8,
    116	.post_div_table = post_div_table_fabia_even,
    117	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
    118	.width = 4,
    119	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
    120	.clkr.hw.init = &(struct clk_init_data){
    121		.name = "cam_cc_pll2_out_even",
    122		.parent_hws = (const struct clk_hw*[]){
    123			&cam_cc_pll2.clkr.hw,
    124		},
    125		.num_parents = 1,
    126		.ops = &clk_alpha_pll_postdiv_fabia_ops,
    127	},
    128};
    129
    130static struct clk_alpha_pll cam_cc_pll3 = {
    131	.offset = 0x3000,
    132	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
    133	.clkr = {
    134		.hw.init = &(struct clk_init_data){
    135			.name = "cam_cc_pll3",
    136			.parent_data = &(const struct clk_parent_data){
    137				.fw_name = "bi_tcxo", .name = "bi_tcxo",
    138			},
    139			.num_parents = 1,
    140			.ops = &clk_alpha_pll_fabia_ops,
    141		},
    142	},
    143};
    144
    145static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
    146	.offset = 0x3000,
    147	.post_div_shift = 8,
    148	.post_div_table = post_div_table_fabia_even,
    149	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
    150	.width = 4,
    151	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
    152	.clkr.hw.init = &(struct clk_init_data){
    153		.name = "cam_cc_pll3_out_even",
    154		.parent_hws = (const struct clk_hw*[]){
    155			&cam_cc_pll3.clkr.hw,
    156		},
    157		.num_parents = 1,
    158		.ops = &clk_alpha_pll_postdiv_fabia_ops,
    159	},
    160};
    161
    162static const struct parent_map cam_cc_parent_map_0[] = {
    163	{ P_BI_TCXO, 0 },
    164	{ P_CAM_CC_PLL2_OUT_EVEN, 1 },
    165	{ P_CAM_CC_PLL1_OUT_EVEN, 2 },
    166	{ P_CAM_CC_PLL3_OUT_EVEN, 5 },
    167	{ P_CAM_CC_PLL0_OUT_EVEN, 6 },
    168};
    169
    170static const struct clk_parent_data cam_cc_parent_data_0[] = {
    171	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
    172	{ .hw = &cam_cc_pll2_out_even.clkr.hw },
    173	{ .hw = &cam_cc_pll1_out_even.clkr.hw },
    174	{ .hw = &cam_cc_pll3_out_even.clkr.hw },
    175	{ .hw = &cam_cc_pll0_out_even.clkr.hw },
    176};
    177
    178static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
    179	F(19200000, P_BI_TCXO, 1, 0, 0),
    180	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
    181	F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
    182	F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
    183	F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
    184	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
    185	{ }
    186};
    187
    188/*
    189 * As per HW design, some of the CAMCC RCGs needs to
    190 * move to XO clock during their clock disable so using
    191 * clk_rcg2_shared_ops for such RCGs. This is required
    192 * to power down the camera memories gracefully.
    193 * Also, use CLK_SET_RATE_PARENT flag for the RCGs which
    194 * have CAM_CC_PLL2_OUT_EVEN PLL as parent in frequency
    195 * table and requires reconfiguration of the PLL frequency.
    196 */
    197static struct clk_rcg2 cam_cc_bps_clk_src = {
    198	.cmd_rcgr = 0x600c,
    199	.mnd_width = 0,
    200	.hid_width = 5,
    201	.parent_map = cam_cc_parent_map_0,
    202	.freq_tbl = ftbl_cam_cc_bps_clk_src,
    203	.clkr.hw.init = &(struct clk_init_data){
    204		.name = "cam_cc_bps_clk_src",
    205		.parent_data = cam_cc_parent_data_0,
    206		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    207		.flags = CLK_SET_RATE_PARENT,
    208		.ops = &clk_rcg2_shared_ops,
    209	},
    210};
    211
    212static const struct freq_tbl ftbl_cam_cc_cci_clk_src[] = {
    213	F(19200000, P_BI_TCXO, 1, 0, 0),
    214	F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
    215	F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
    216	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
    217	{ }
    218};
    219
    220static struct clk_rcg2 cam_cc_cci_clk_src = {
    221	.cmd_rcgr = 0xb0d8,
    222	.mnd_width = 8,
    223	.hid_width = 5,
    224	.parent_map = cam_cc_parent_map_0,
    225	.freq_tbl = ftbl_cam_cc_cci_clk_src,
    226	.clkr.hw.init = &(struct clk_init_data){
    227		.name = "cam_cc_cci_clk_src",
    228		.parent_data = cam_cc_parent_data_0,
    229		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    230		.ops = &clk_rcg2_ops,
    231	},
    232};
    233
    234static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
    235	F(19200000, P_BI_TCXO, 1, 0, 0),
    236	F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
    237	{ }
    238};
    239
    240static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
    241	.cmd_rcgr = 0x9060,
    242	.mnd_width = 0,
    243	.hid_width = 5,
    244	.parent_map = cam_cc_parent_map_0,
    245	.freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
    246	.clkr.hw.init = &(struct clk_init_data){
    247		.name = "cam_cc_cphy_rx_clk_src",
    248		.parent_data = cam_cc_parent_data_0,
    249		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    250		.ops = &clk_rcg2_ops,
    251	},
    252};
    253
    254static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
    255	F(19200000, P_BI_TCXO, 1, 0, 0),
    256	F(240000000, P_CAM_CC_PLL2_OUT_EVEN, 2, 0, 0),
    257	F(269333333, P_CAM_CC_PLL1_OUT_EVEN, 3, 0, 0),
    258	{ }
    259};
    260
    261static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
    262	.cmd_rcgr = 0x5004,
    263	.mnd_width = 0,
    264	.hid_width = 5,
    265	.parent_map = cam_cc_parent_map_0,
    266	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
    267	.clkr.hw.init = &(struct clk_init_data){
    268		.name = "cam_cc_csi0phytimer_clk_src",
    269		.parent_data = cam_cc_parent_data_0,
    270		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    271		.flags = CLK_SET_RATE_PARENT,
    272		.ops = &clk_rcg2_ops,
    273	},
    274};
    275
    276static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
    277	.cmd_rcgr = 0x5028,
    278	.mnd_width = 0,
    279	.hid_width = 5,
    280	.parent_map = cam_cc_parent_map_0,
    281	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
    282	.clkr.hw.init = &(struct clk_init_data){
    283		.name = "cam_cc_csi1phytimer_clk_src",
    284		.parent_data = cam_cc_parent_data_0,
    285		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    286		.flags = CLK_SET_RATE_PARENT,
    287		.ops = &clk_rcg2_ops,
    288	},
    289};
    290
    291static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
    292	.cmd_rcgr = 0x504c,
    293	.mnd_width = 0,
    294	.hid_width = 5,
    295	.parent_map = cam_cc_parent_map_0,
    296	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
    297	.clkr.hw.init = &(struct clk_init_data){
    298		.name = "cam_cc_csi2phytimer_clk_src",
    299		.parent_data = cam_cc_parent_data_0,
    300		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    301		.flags = CLK_SET_RATE_PARENT,
    302		.ops = &clk_rcg2_ops,
    303	},
    304};
    305
    306static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
    307	.cmd_rcgr = 0x5070,
    308	.mnd_width = 0,
    309	.hid_width = 5,
    310	.parent_map = cam_cc_parent_map_0,
    311	.freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
    312	.clkr.hw.init = &(struct clk_init_data){
    313		.name = "cam_cc_csi3phytimer_clk_src",
    314		.parent_data = cam_cc_parent_data_0,
    315		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    316		.flags = CLK_SET_RATE_PARENT,
    317		.ops = &clk_rcg2_ops,
    318	},
    319};
    320
    321static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
    322	F(19200000, P_BI_TCXO, 1, 0, 0),
    323	F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
    324	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
    325	F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
    326	F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
    327	F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
    328	{ }
    329};
    330
    331static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
    332	.cmd_rcgr = 0x6038,
    333	.mnd_width = 0,
    334	.hid_width = 5,
    335	.parent_map = cam_cc_parent_map_0,
    336	.freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
    337	.clkr.hw.init = &(struct clk_init_data){
    338		.name = "cam_cc_fast_ahb_clk_src",
    339		.parent_data = cam_cc_parent_data_0,
    340		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    341		.ops = &clk_rcg2_ops,
    342	},
    343};
    344
    345static const struct freq_tbl ftbl_cam_cc_fd_core_clk_src[] = {
    346	F(19200000, P_BI_TCXO, 1, 0, 0),
    347	F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
    348	F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
    349	F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
    350	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
    351	{ }
    352};
    353
    354static struct clk_rcg2 cam_cc_fd_core_clk_src = {
    355	.cmd_rcgr = 0xb0b0,
    356	.mnd_width = 0,
    357	.hid_width = 5,
    358	.parent_map = cam_cc_parent_map_0,
    359	.freq_tbl = ftbl_cam_cc_fd_core_clk_src,
    360	.clkr.hw.init = &(struct clk_init_data){
    361		.name = "cam_cc_fd_core_clk_src",
    362		.parent_data = cam_cc_parent_data_0,
    363		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    364		.ops = &clk_rcg2_shared_ops,
    365	},
    366};
    367
    368static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
    369	F(19200000, P_BI_TCXO, 1, 0, 0),
    370	F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
    371	F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
    372	F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
    373	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
    374	{ }
    375};
    376
    377static struct clk_rcg2 cam_cc_icp_clk_src = {
    378	.cmd_rcgr = 0xb088,
    379	.mnd_width = 0,
    380	.hid_width = 5,
    381	.parent_map = cam_cc_parent_map_0,
    382	.freq_tbl = ftbl_cam_cc_icp_clk_src,
    383	.clkr.hw.init = &(struct clk_init_data){
    384		.name = "cam_cc_icp_clk_src",
    385		.parent_data = cam_cc_parent_data_0,
    386		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    387		.ops = &clk_rcg2_shared_ops,
    388	},
    389};
    390
    391static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
    392	F(19200000, P_BI_TCXO, 1, 0, 0),
    393	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
    394	F(320000000, P_CAM_CC_PLL2_OUT_EVEN, 1.5, 0, 0),
    395	F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
    396	F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
    397	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
    398	{ }
    399};
    400
    401static struct clk_rcg2 cam_cc_ife_0_clk_src = {
    402	.cmd_rcgr = 0x900c,
    403	.mnd_width = 0,
    404	.hid_width = 5,
    405	.parent_map = cam_cc_parent_map_0,
    406	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
    407	.clkr.hw.init = &(struct clk_init_data){
    408		.name = "cam_cc_ife_0_clk_src",
    409		.parent_data = cam_cc_parent_data_0,
    410		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    411		.flags = CLK_SET_RATE_PARENT,
    412		.ops = &clk_rcg2_shared_ops,
    413	},
    414};
    415
    416static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = {
    417	F(19200000, P_BI_TCXO, 1, 0, 0),
    418	F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
    419	F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
    420	F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
    421	{ }
    422};
    423
    424static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = {
    425	.cmd_rcgr = 0x9038,
    426	.mnd_width = 0,
    427	.hid_width = 5,
    428	.parent_map = cam_cc_parent_map_0,
    429	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
    430	.clkr.hw.init = &(struct clk_init_data){
    431		.name = "cam_cc_ife_0_csid_clk_src",
    432		.parent_data = cam_cc_parent_data_0,
    433		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    434		.ops = &clk_rcg2_shared_ops,
    435	},
    436};
    437
    438static struct clk_rcg2 cam_cc_ife_1_clk_src = {
    439	.cmd_rcgr = 0xa00c,
    440	.mnd_width = 0,
    441	.hid_width = 5,
    442	.parent_map = cam_cc_parent_map_0,
    443	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
    444	.clkr.hw.init = &(struct clk_init_data){
    445		.name = "cam_cc_ife_1_clk_src",
    446		.parent_data = cam_cc_parent_data_0,
    447		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    448		.flags = CLK_SET_RATE_PARENT,
    449		.ops = &clk_rcg2_shared_ops,
    450	},
    451};
    452
    453static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = {
    454	.cmd_rcgr = 0xa030,
    455	.mnd_width = 0,
    456	.hid_width = 5,
    457	.parent_map = cam_cc_parent_map_0,
    458	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
    459	.clkr.hw.init = &(struct clk_init_data){
    460		.name = "cam_cc_ife_1_csid_clk_src",
    461		.parent_data = cam_cc_parent_data_0,
    462		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    463		.ops = &clk_rcg2_shared_ops,
    464	},
    465};
    466
    467static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
    468	.cmd_rcgr = 0xb004,
    469	.mnd_width = 0,
    470	.hid_width = 5,
    471	.parent_map = cam_cc_parent_map_0,
    472	.freq_tbl = ftbl_cam_cc_ife_0_clk_src,
    473	.clkr.hw.init = &(struct clk_init_data){
    474		.name = "cam_cc_ife_lite_clk_src",
    475		.parent_data = cam_cc_parent_data_0,
    476		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    477		.flags = CLK_SET_RATE_PARENT,
    478		.ops = &clk_rcg2_shared_ops,
    479	},
    480};
    481
    482static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
    483	.cmd_rcgr = 0xb024,
    484	.mnd_width = 0,
    485	.hid_width = 5,
    486	.parent_map = cam_cc_parent_map_0,
    487	.freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
    488	.clkr.hw.init = &(struct clk_init_data){
    489		.name = "cam_cc_ife_lite_csid_clk_src",
    490		.parent_data = cam_cc_parent_data_0,
    491		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    492		.ops = &clk_rcg2_shared_ops,
    493	},
    494};
    495
    496static const struct freq_tbl ftbl_cam_cc_ipe_0_clk_src[] = {
    497	F(19200000, P_BI_TCXO, 1, 0, 0),
    498	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
    499	F(240000000, P_CAM_CC_PLL0_OUT_EVEN, 2.5, 0, 0),
    500	F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
    501	F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
    502	F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
    503	F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
    504	{ }
    505};
    506
    507static struct clk_rcg2 cam_cc_ipe_0_clk_src = {
    508	.cmd_rcgr = 0x700c,
    509	.mnd_width = 0,
    510	.hid_width = 5,
    511	.parent_map = cam_cc_parent_map_0,
    512	.freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
    513	.clkr.hw.init = &(struct clk_init_data){
    514		.name = "cam_cc_ipe_0_clk_src",
    515		.parent_data = cam_cc_parent_data_0,
    516		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    517		.flags = CLK_SET_RATE_PARENT,
    518		.ops = &clk_rcg2_shared_ops,
    519	},
    520};
    521
    522static struct clk_rcg2 cam_cc_ipe_1_clk_src = {
    523	.cmd_rcgr = 0x800c,
    524	.mnd_width = 0,
    525	.hid_width = 5,
    526	.parent_map = cam_cc_parent_map_0,
    527	.freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
    528	.clkr.hw.init = &(struct clk_init_data){
    529		.name = "cam_cc_ipe_1_clk_src",
    530		.parent_data = cam_cc_parent_data_0,
    531		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    532		.flags = CLK_SET_RATE_PARENT,
    533		.ops = &clk_rcg2_shared_ops,
    534	},
    535};
    536
    537static struct clk_rcg2 cam_cc_jpeg_clk_src = {
    538	.cmd_rcgr = 0xb04c,
    539	.mnd_width = 0,
    540	.hid_width = 5,
    541	.parent_map = cam_cc_parent_map_0,
    542	.freq_tbl = ftbl_cam_cc_bps_clk_src,
    543	.clkr.hw.init = &(struct clk_init_data){
    544		.name = "cam_cc_jpeg_clk_src",
    545		.parent_data = cam_cc_parent_data_0,
    546		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    547		.flags = CLK_SET_RATE_PARENT,
    548		.ops = &clk_rcg2_shared_ops,
    549	},
    550};
    551
    552static const struct freq_tbl ftbl_cam_cc_lrme_clk_src[] = {
    553	F(19200000, P_BI_TCXO, 1, 0, 0),
    554	F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
    555	F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
    556	F(269333333, P_CAM_CC_PLL1_OUT_EVEN, 3, 0, 0),
    557	F(320000000, P_CAM_CC_PLL2_OUT_EVEN, 1.5, 0, 0),
    558	F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
    559	{ }
    560};
    561
    562static struct clk_rcg2 cam_cc_lrme_clk_src = {
    563	.cmd_rcgr = 0xb0f8,
    564	.mnd_width = 0,
    565	.hid_width = 5,
    566	.parent_map = cam_cc_parent_map_0,
    567	.freq_tbl = ftbl_cam_cc_lrme_clk_src,
    568	.clkr.hw.init = &(struct clk_init_data){
    569		.name = "cam_cc_lrme_clk_src",
    570		.parent_data = cam_cc_parent_data_0,
    571		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    572		.flags = CLK_SET_RATE_PARENT,
    573		.ops = &clk_rcg2_shared_ops,
    574	},
    575};
    576
    577static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
    578	F(19200000, P_BI_TCXO, 1, 0, 0),
    579	F(24000000, P_CAM_CC_PLL2_OUT_EVEN, 10, 1, 2),
    580	F(33333333, P_CAM_CC_PLL0_OUT_EVEN, 2, 1, 9),
    581	F(34285714, P_CAM_CC_PLL2_OUT_EVEN, 14, 0, 0),
    582	{ }
    583};
    584
    585static struct clk_rcg2 cam_cc_mclk0_clk_src = {
    586	.cmd_rcgr = 0x4004,
    587	.mnd_width = 8,
    588	.hid_width = 5,
    589	.parent_map = cam_cc_parent_map_0,
    590	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
    591	.clkr.hw.init = &(struct clk_init_data){
    592		.name = "cam_cc_mclk0_clk_src",
    593		.parent_data = cam_cc_parent_data_0,
    594		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    595		.flags = CLK_SET_RATE_PARENT,
    596		.ops = &clk_rcg2_ops,
    597	},
    598};
    599
    600static struct clk_rcg2 cam_cc_mclk1_clk_src = {
    601	.cmd_rcgr = 0x4024,
    602	.mnd_width = 8,
    603	.hid_width = 5,
    604	.parent_map = cam_cc_parent_map_0,
    605	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
    606	.clkr.hw.init = &(struct clk_init_data){
    607		.name = "cam_cc_mclk1_clk_src",
    608		.parent_data = cam_cc_parent_data_0,
    609		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    610		.flags = CLK_SET_RATE_PARENT,
    611		.ops = &clk_rcg2_ops,
    612	},
    613};
    614
    615static struct clk_rcg2 cam_cc_mclk2_clk_src = {
    616	.cmd_rcgr = 0x4044,
    617	.mnd_width = 8,
    618	.hid_width = 5,
    619	.parent_map = cam_cc_parent_map_0,
    620	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
    621	.clkr.hw.init = &(struct clk_init_data){
    622		.name = "cam_cc_mclk2_clk_src",
    623		.parent_data = cam_cc_parent_data_0,
    624		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    625		.flags = CLK_SET_RATE_PARENT,
    626		.ops = &clk_rcg2_ops,
    627	},
    628};
    629
    630static struct clk_rcg2 cam_cc_mclk3_clk_src = {
    631	.cmd_rcgr = 0x4064,
    632	.mnd_width = 8,
    633	.hid_width = 5,
    634	.parent_map = cam_cc_parent_map_0,
    635	.freq_tbl = ftbl_cam_cc_mclk0_clk_src,
    636	.clkr.hw.init = &(struct clk_init_data){
    637		.name = "cam_cc_mclk3_clk_src",
    638		.parent_data = cam_cc_parent_data_0,
    639		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    640		.flags = CLK_SET_RATE_PARENT,
    641		.ops = &clk_rcg2_ops,
    642	},
    643};
    644
    645static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
    646	F(19200000, P_BI_TCXO, 1, 0, 0),
    647	F(60000000, P_CAM_CC_PLL0_OUT_EVEN, 10, 0, 0),
    648	F(66666667, P_CAM_CC_PLL0_OUT_EVEN, 9, 0, 0),
    649	F(73846154, P_CAM_CC_PLL2_OUT_EVEN, 6.5, 0, 0),
    650	F(80000000, P_CAM_CC_PLL2_OUT_EVEN, 6, 0, 0),
    651	{ }
    652};
    653
    654static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
    655	.cmd_rcgr = 0x6054,
    656	.mnd_width = 0,
    657	.hid_width = 5,
    658	.parent_map = cam_cc_parent_map_0,
    659	.freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
    660	.clkr.hw.init = &(struct clk_init_data){
    661		.name = "cam_cc_slow_ahb_clk_src",
    662		.parent_data = cam_cc_parent_data_0,
    663		.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
    664		.flags = CLK_SET_RATE_PARENT,
    665		.ops = &clk_rcg2_ops,
    666	},
    667};
    668
    669static struct clk_branch cam_cc_bps_ahb_clk = {
    670	.halt_reg = 0x606c,
    671	.halt_check = BRANCH_HALT,
    672	.clkr = {
    673		.enable_reg = 0x606c,
    674		.enable_mask = BIT(0),
    675		.hw.init = &(struct clk_init_data){
    676			.name = "cam_cc_bps_ahb_clk",
    677			.parent_hws = (const struct clk_hw*[]){
    678				&cam_cc_slow_ahb_clk_src.clkr.hw,
    679			},
    680			.num_parents = 1,
    681			.flags = CLK_SET_RATE_PARENT,
    682			.ops = &clk_branch2_ops,
    683		},
    684	},
    685};
    686
    687static struct clk_branch cam_cc_bps_areg_clk = {
    688	.halt_reg = 0x6050,
    689	.halt_check = BRANCH_HALT,
    690	.clkr = {
    691		.enable_reg = 0x6050,
    692		.enable_mask = BIT(0),
    693		.hw.init = &(struct clk_init_data){
    694			.name = "cam_cc_bps_areg_clk",
    695			.parent_hws = (const struct clk_hw*[]){
    696				&cam_cc_fast_ahb_clk_src.clkr.hw,
    697			},
    698			.num_parents = 1,
    699			.flags = CLK_SET_RATE_PARENT,
    700			.ops = &clk_branch2_ops,
    701		},
    702	},
    703};
    704
    705static struct clk_branch cam_cc_bps_axi_clk = {
    706	.halt_reg = 0x6034,
    707	.halt_check = BRANCH_HALT,
    708	.clkr = {
    709		.enable_reg = 0x6034,
    710		.enable_mask = BIT(0),
    711		.hw.init = &(struct clk_init_data){
    712			.name = "cam_cc_bps_axi_clk",
    713			.ops = &clk_branch2_ops,
    714		},
    715	},
    716};
    717
    718static struct clk_branch cam_cc_bps_clk = {
    719	.halt_reg = 0x6024,
    720	.halt_check = BRANCH_HALT,
    721	.clkr = {
    722		.enable_reg = 0x6024,
    723		.enable_mask = BIT(0),
    724		.hw.init = &(struct clk_init_data){
    725			.name = "cam_cc_bps_clk",
    726			.parent_hws = (const struct clk_hw*[]){
    727				&cam_cc_bps_clk_src.clkr.hw,
    728			},
    729			.num_parents = 1,
    730			.flags = CLK_SET_RATE_PARENT,
    731			.ops = &clk_branch2_ops,
    732		},
    733	},
    734};
    735
    736static struct clk_branch cam_cc_camnoc_atb_clk = {
    737	.halt_reg = 0xb12c,
    738	.halt_check = BRANCH_HALT,
    739	.clkr = {
    740		.enable_reg = 0xb12c,
    741		.enable_mask = BIT(0),
    742		.hw.init = &(struct clk_init_data){
    743			.name = "cam_cc_camnoc_atb_clk",
    744			.ops = &clk_branch2_ops,
    745		},
    746	},
    747};
    748
    749static struct clk_branch cam_cc_camnoc_axi_clk = {
    750	.halt_reg = 0xb124,
    751	.halt_check = BRANCH_HALT,
    752	.clkr = {
    753		.enable_reg = 0xb124,
    754		.enable_mask = BIT(0),
    755		.hw.init = &(struct clk_init_data){
    756			.name = "cam_cc_camnoc_axi_clk",
    757			.ops = &clk_branch2_ops,
    758		},
    759	},
    760};
    761
    762static struct clk_branch cam_cc_cci_clk = {
    763	.halt_reg = 0xb0f0,
    764	.halt_check = BRANCH_HALT,
    765	.clkr = {
    766		.enable_reg = 0xb0f0,
    767		.enable_mask = BIT(0),
    768		.hw.init = &(struct clk_init_data){
    769			.name = "cam_cc_cci_clk",
    770			.parent_hws = (const struct clk_hw*[]){
    771				&cam_cc_cci_clk_src.clkr.hw,
    772			},
    773			.num_parents = 1,
    774			.flags = CLK_SET_RATE_PARENT,
    775			.ops = &clk_branch2_ops,
    776		},
    777	},
    778};
    779
    780static struct clk_branch cam_cc_cpas_ahb_clk = {
    781	.halt_reg = 0xb11c,
    782	.halt_check = BRANCH_HALT,
    783	.clkr = {
    784		.enable_reg = 0xb11c,
    785		.enable_mask = BIT(0),
    786		.hw.init = &(struct clk_init_data){
    787			.name = "cam_cc_cpas_ahb_clk",
    788			.parent_hws = (const struct clk_hw*[]){
    789				&cam_cc_slow_ahb_clk_src.clkr.hw,
    790			},
    791			.num_parents = 1,
    792			.flags = CLK_SET_RATE_PARENT,
    793			.ops = &clk_branch2_ops,
    794		},
    795	},
    796};
    797
    798static struct clk_branch cam_cc_csi0phytimer_clk = {
    799	.halt_reg = 0x501c,
    800	.halt_check = BRANCH_HALT,
    801	.clkr = {
    802		.enable_reg = 0x501c,
    803		.enable_mask = BIT(0),
    804		.hw.init = &(struct clk_init_data){
    805			.name = "cam_cc_csi0phytimer_clk",
    806			.parent_hws = (const struct clk_hw*[]){
    807				&cam_cc_csi0phytimer_clk_src.clkr.hw,
    808			},
    809			.num_parents = 1,
    810			.flags = CLK_SET_RATE_PARENT,
    811			.ops = &clk_branch2_ops,
    812		},
    813	},
    814};
    815
    816static struct clk_branch cam_cc_csi1phytimer_clk = {
    817	.halt_reg = 0x5040,
    818	.halt_check = BRANCH_HALT,
    819	.clkr = {
    820		.enable_reg = 0x5040,
    821		.enable_mask = BIT(0),
    822		.hw.init = &(struct clk_init_data){
    823			.name = "cam_cc_csi1phytimer_clk",
    824			.parent_hws = (const struct clk_hw*[]){
    825				&cam_cc_csi1phytimer_clk_src.clkr.hw,
    826			},
    827			.num_parents = 1,
    828			.flags = CLK_SET_RATE_PARENT,
    829			.ops = &clk_branch2_ops,
    830		},
    831	},
    832};
    833
    834static struct clk_branch cam_cc_csi2phytimer_clk = {
    835	.halt_reg = 0x5064,
    836	.halt_check = BRANCH_HALT,
    837	.clkr = {
    838		.enable_reg = 0x5064,
    839		.enable_mask = BIT(0),
    840		.hw.init = &(struct clk_init_data){
    841			.name = "cam_cc_csi2phytimer_clk",
    842			.parent_hws = (const struct clk_hw*[]){
    843				&cam_cc_csi2phytimer_clk_src.clkr.hw,
    844			},
    845			.num_parents = 1,
    846			.flags = CLK_SET_RATE_PARENT,
    847			.ops = &clk_branch2_ops,
    848		},
    849	},
    850};
    851
    852static struct clk_branch cam_cc_csi3phytimer_clk = {
    853	.halt_reg = 0x5088,
    854	.halt_check = BRANCH_HALT,
    855	.clkr = {
    856		.enable_reg = 0x5088,
    857		.enable_mask = BIT(0),
    858		.hw.init = &(struct clk_init_data){
    859			.name = "cam_cc_csi3phytimer_clk",
    860			.parent_hws = (const struct clk_hw*[]){
    861				&cam_cc_csi3phytimer_clk_src.clkr.hw,
    862			},
    863			.num_parents = 1,
    864			.flags = CLK_SET_RATE_PARENT,
    865			.ops = &clk_branch2_ops,
    866		},
    867	},
    868};
    869
    870static struct clk_branch cam_cc_csiphy0_clk = {
    871	.halt_reg = 0x5020,
    872	.halt_check = BRANCH_HALT,
    873	.clkr = {
    874		.enable_reg = 0x5020,
    875		.enable_mask = BIT(0),
    876		.hw.init = &(struct clk_init_data){
    877			.name = "cam_cc_csiphy0_clk",
    878			.parent_hws = (const struct clk_hw*[]){
    879				&cam_cc_cphy_rx_clk_src.clkr.hw,
    880			},
    881			.num_parents = 1,
    882			.flags = CLK_SET_RATE_PARENT,
    883			.ops = &clk_branch2_ops,
    884		},
    885	},
    886};
    887
    888static struct clk_branch cam_cc_csiphy1_clk = {
    889	.halt_reg = 0x5044,
    890	.halt_check = BRANCH_HALT,
    891	.clkr = {
    892		.enable_reg = 0x5044,
    893		.enable_mask = BIT(0),
    894		.hw.init = &(struct clk_init_data){
    895			.name = "cam_cc_csiphy1_clk",
    896			.parent_hws = (const struct clk_hw*[]){
    897				&cam_cc_cphy_rx_clk_src.clkr.hw,
    898			},
    899			.num_parents = 1,
    900			.flags = CLK_SET_RATE_PARENT,
    901			.ops = &clk_branch2_ops,
    902		},
    903	},
    904};
    905
    906static struct clk_branch cam_cc_csiphy2_clk = {
    907	.halt_reg = 0x5068,
    908	.halt_check = BRANCH_HALT,
    909	.clkr = {
    910		.enable_reg = 0x5068,
    911		.enable_mask = BIT(0),
    912		.hw.init = &(struct clk_init_data){
    913			.name = "cam_cc_csiphy2_clk",
    914			.parent_hws = (const struct clk_hw*[]){
    915				&cam_cc_cphy_rx_clk_src.clkr.hw,
    916			},
    917			.num_parents = 1,
    918			.flags = CLK_SET_RATE_PARENT,
    919			.ops = &clk_branch2_ops,
    920		},
    921	},
    922};
    923
    924static struct clk_branch cam_cc_csiphy3_clk = {
    925	.halt_reg = 0x508c,
    926	.halt_check = BRANCH_HALT,
    927	.clkr = {
    928		.enable_reg = 0x508c,
    929		.enable_mask = BIT(0),
    930		.hw.init = &(struct clk_init_data){
    931			.name = "cam_cc_csiphy3_clk",
    932			.parent_hws = (const struct clk_hw*[]){
    933				&cam_cc_cphy_rx_clk_src.clkr.hw,
    934			},
    935			.num_parents = 1,
    936			.flags = CLK_SET_RATE_PARENT,
    937			.ops = &clk_branch2_ops,
    938		},
    939	},
    940};
    941
    942static struct clk_branch cam_cc_fd_core_clk = {
    943	.halt_reg = 0xb0c8,
    944	.halt_check = BRANCH_HALT,
    945	.clkr = {
    946		.enable_reg = 0xb0c8,
    947		.enable_mask = BIT(0),
    948		.hw.init = &(struct clk_init_data){
    949			.name = "cam_cc_fd_core_clk",
    950			.parent_hws = (const struct clk_hw*[]){
    951				&cam_cc_fd_core_clk_src.clkr.hw,
    952			},
    953			.num_parents = 1,
    954			.flags = CLK_SET_RATE_PARENT,
    955			.ops = &clk_branch2_ops,
    956		},
    957	},
    958};
    959
    960static struct clk_branch cam_cc_fd_core_uar_clk = {
    961	.halt_reg = 0xb0d0,
    962	.halt_check = BRANCH_HALT,
    963	.clkr = {
    964		.enable_reg = 0xb0d0,
    965		.enable_mask = BIT(0),
    966		.hw.init = &(struct clk_init_data){
    967			.name = "cam_cc_fd_core_uar_clk",
    968			.parent_hws = (const struct clk_hw*[]){
    969				&cam_cc_fd_core_clk_src.clkr.hw,
    970			},
    971			.num_parents = 1,
    972			.ops = &clk_branch2_ops,
    973		},
    974	},
    975};
    976
    977static struct clk_branch cam_cc_icp_apb_clk = {
    978	.halt_reg = 0xb084,
    979	.halt_check = BRANCH_HALT,
    980	.clkr = {
    981		.enable_reg = 0xb084,
    982		.enable_mask = BIT(0),
    983		.hw.init = &(struct clk_init_data){
    984			.name = "cam_cc_icp_apb_clk",
    985			.ops = &clk_branch2_ops,
    986		},
    987	},
    988};
    989
    990static struct clk_branch cam_cc_icp_atb_clk = {
    991	.halt_reg = 0xb078,
    992	.halt_check = BRANCH_HALT,
    993	.clkr = {
    994		.enable_reg = 0xb078,
    995		.enable_mask = BIT(0),
    996		.hw.init = &(struct clk_init_data){
    997			.name = "cam_cc_icp_atb_clk",
    998			.ops = &clk_branch2_ops,
    999		},
   1000	},
   1001};
   1002
   1003static struct clk_branch cam_cc_icp_clk = {
   1004	.halt_reg = 0xb0a0,
   1005	.halt_check = BRANCH_HALT,
   1006	.clkr = {
   1007		.enable_reg = 0xb0a0,
   1008		.enable_mask = BIT(0),
   1009		.hw.init = &(struct clk_init_data){
   1010			.name = "cam_cc_icp_clk",
   1011			.parent_hws = (const struct clk_hw*[]){
   1012				&cam_cc_icp_clk_src.clkr.hw,
   1013			},
   1014			.num_parents = 1,
   1015			.flags = CLK_SET_RATE_PARENT,
   1016			.ops = &clk_branch2_ops,
   1017		},
   1018	},
   1019};
   1020
   1021static struct clk_branch cam_cc_icp_cti_clk = {
   1022	.halt_reg = 0xb07c,
   1023	.halt_check = BRANCH_HALT,
   1024	.clkr = {
   1025		.enable_reg = 0xb07c,
   1026		.enable_mask = BIT(0),
   1027		.hw.init = &(struct clk_init_data){
   1028			.name = "cam_cc_icp_cti_clk",
   1029			.ops = &clk_branch2_ops,
   1030		},
   1031	},
   1032};
   1033
   1034static struct clk_branch cam_cc_icp_ts_clk = {
   1035	.halt_reg = 0xb080,
   1036	.halt_check = BRANCH_HALT,
   1037	.clkr = {
   1038		.enable_reg = 0xb080,
   1039		.enable_mask = BIT(0),
   1040		.hw.init = &(struct clk_init_data){
   1041			.name = "cam_cc_icp_ts_clk",
   1042			.ops = &clk_branch2_ops,
   1043		},
   1044	},
   1045};
   1046
   1047static struct clk_branch cam_cc_ife_0_axi_clk = {
   1048	.halt_reg = 0x907c,
   1049	.halt_check = BRANCH_HALT,
   1050	.clkr = {
   1051		.enable_reg = 0x907c,
   1052		.enable_mask = BIT(0),
   1053		.hw.init = &(struct clk_init_data){
   1054			.name = "cam_cc_ife_0_axi_clk",
   1055			.ops = &clk_branch2_ops,
   1056		},
   1057	},
   1058};
   1059
   1060static struct clk_branch cam_cc_ife_0_clk = {
   1061	.halt_reg = 0x9024,
   1062	.halt_check = BRANCH_HALT,
   1063	.clkr = {
   1064		.enable_reg = 0x9024,
   1065		.enable_mask = BIT(0),
   1066		.hw.init = &(struct clk_init_data){
   1067			.name = "cam_cc_ife_0_clk",
   1068			.parent_hws = (const struct clk_hw*[]){
   1069				&cam_cc_ife_0_clk_src.clkr.hw,
   1070			},
   1071			.num_parents = 1,
   1072			.flags = CLK_SET_RATE_PARENT,
   1073			.ops = &clk_branch2_ops,
   1074		},
   1075	},
   1076};
   1077
   1078static struct clk_branch cam_cc_ife_0_cphy_rx_clk = {
   1079	.halt_reg = 0x9078,
   1080	.halt_check = BRANCH_HALT,
   1081	.clkr = {
   1082		.enable_reg = 0x9078,
   1083		.enable_mask = BIT(0),
   1084		.hw.init = &(struct clk_init_data){
   1085			.name = "cam_cc_ife_0_cphy_rx_clk",
   1086			.parent_hws = (const struct clk_hw*[]){
   1087				&cam_cc_cphy_rx_clk_src.clkr.hw,
   1088			},
   1089			.num_parents = 1,
   1090			.flags = CLK_SET_RATE_PARENT,
   1091			.ops = &clk_branch2_ops,
   1092		},
   1093	},
   1094};
   1095
   1096static struct clk_branch cam_cc_ife_0_csid_clk = {
   1097	.halt_reg = 0x9050,
   1098	.halt_check = BRANCH_HALT,
   1099	.clkr = {
   1100		.enable_reg = 0x9050,
   1101		.enable_mask = BIT(0),
   1102		.hw.init = &(struct clk_init_data){
   1103			.name = "cam_cc_ife_0_csid_clk",
   1104			.parent_hws = (const struct clk_hw*[]){
   1105				&cam_cc_ife_0_csid_clk_src.clkr.hw,
   1106			},
   1107			.num_parents = 1,
   1108			.flags = CLK_SET_RATE_PARENT,
   1109			.ops = &clk_branch2_ops,
   1110		},
   1111	},
   1112};
   1113
   1114static struct clk_branch cam_cc_ife_0_dsp_clk = {
   1115	.halt_reg = 0x9034,
   1116	.halt_check = BRANCH_HALT,
   1117	.clkr = {
   1118		.enable_reg = 0x9034,
   1119		.enable_mask = BIT(0),
   1120		.hw.init = &(struct clk_init_data){
   1121			.name = "cam_cc_ife_0_dsp_clk",
   1122			.parent_hws = (const struct clk_hw*[]){
   1123				&cam_cc_ife_0_clk_src.clkr.hw,
   1124			},
   1125			.num_parents = 1,
   1126			.ops = &clk_branch2_ops,
   1127		},
   1128	},
   1129};
   1130
   1131static struct clk_branch cam_cc_ife_1_axi_clk = {
   1132	.halt_reg = 0xa054,
   1133	.halt_check = BRANCH_HALT,
   1134	.clkr = {
   1135		.enable_reg = 0xa054,
   1136		.enable_mask = BIT(0),
   1137		.hw.init = &(struct clk_init_data){
   1138			.name = "cam_cc_ife_1_axi_clk",
   1139			.ops = &clk_branch2_ops,
   1140		},
   1141	},
   1142};
   1143
   1144static struct clk_branch cam_cc_ife_1_clk = {
   1145	.halt_reg = 0xa024,
   1146	.halt_check = BRANCH_HALT,
   1147	.clkr = {
   1148		.enable_reg = 0xa024,
   1149		.enable_mask = BIT(0),
   1150		.hw.init = &(struct clk_init_data){
   1151			.name = "cam_cc_ife_1_clk",
   1152			.parent_hws = (const struct clk_hw*[]){
   1153				&cam_cc_ife_1_clk_src.clkr.hw,
   1154			},
   1155			.num_parents = 1,
   1156			.flags = CLK_SET_RATE_PARENT,
   1157			.ops = &clk_branch2_ops,
   1158		},
   1159	},
   1160};
   1161
   1162static struct clk_branch cam_cc_ife_1_cphy_rx_clk = {
   1163	.halt_reg = 0xa050,
   1164	.halt_check = BRANCH_HALT,
   1165	.clkr = {
   1166		.enable_reg = 0xa050,
   1167		.enable_mask = BIT(0),
   1168		.hw.init = &(struct clk_init_data){
   1169			.name = "cam_cc_ife_1_cphy_rx_clk",
   1170			.parent_hws = (const struct clk_hw*[]){
   1171				&cam_cc_cphy_rx_clk_src.clkr.hw,
   1172			},
   1173			.num_parents = 1,
   1174			.flags = CLK_SET_RATE_PARENT,
   1175			.ops = &clk_branch2_ops,
   1176		},
   1177	},
   1178};
   1179
   1180static struct clk_branch cam_cc_ife_1_csid_clk = {
   1181	.halt_reg = 0xa048,
   1182	.halt_check = BRANCH_HALT,
   1183	.clkr = {
   1184		.enable_reg = 0xa048,
   1185		.enable_mask = BIT(0),
   1186		.hw.init = &(struct clk_init_data){
   1187			.name = "cam_cc_ife_1_csid_clk",
   1188			.parent_hws = (const struct clk_hw*[]){
   1189				&cam_cc_ife_1_csid_clk_src.clkr.hw,
   1190			},
   1191			.num_parents = 1,
   1192			.flags = CLK_SET_RATE_PARENT,
   1193			.ops = &clk_branch2_ops,
   1194		},
   1195	},
   1196};
   1197
   1198static struct clk_branch cam_cc_ife_1_dsp_clk = {
   1199	.halt_reg = 0xa02c,
   1200	.halt_check = BRANCH_HALT,
   1201	.clkr = {
   1202		.enable_reg = 0xa02c,
   1203		.enable_mask = BIT(0),
   1204		.hw.init = &(struct clk_init_data){
   1205			.name = "cam_cc_ife_1_dsp_clk",
   1206			.parent_hws = (const struct clk_hw*[]){
   1207				&cam_cc_ife_1_clk_src.clkr.hw,
   1208			},
   1209			.num_parents = 1,
   1210			.ops = &clk_branch2_ops,
   1211		},
   1212	},
   1213};
   1214
   1215static struct clk_branch cam_cc_ife_lite_clk = {
   1216	.halt_reg = 0xb01c,
   1217	.halt_check = BRANCH_HALT,
   1218	.clkr = {
   1219		.enable_reg = 0xb01c,
   1220		.enable_mask = BIT(0),
   1221		.hw.init = &(struct clk_init_data){
   1222			.name = "cam_cc_ife_lite_clk",
   1223			.parent_hws = (const struct clk_hw*[]){
   1224				&cam_cc_ife_lite_clk_src.clkr.hw,
   1225			},
   1226			.num_parents = 1,
   1227			.flags = CLK_SET_RATE_PARENT,
   1228			.ops = &clk_branch2_ops,
   1229		},
   1230	},
   1231};
   1232
   1233static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = {
   1234	.halt_reg = 0xb044,
   1235	.halt_check = BRANCH_HALT,
   1236	.clkr = {
   1237		.enable_reg = 0xb044,
   1238		.enable_mask = BIT(0),
   1239		.hw.init = &(struct clk_init_data){
   1240			.name = "cam_cc_ife_lite_cphy_rx_clk",
   1241			.parent_hws = (const struct clk_hw*[]){
   1242				&cam_cc_cphy_rx_clk_src.clkr.hw,
   1243			},
   1244			.num_parents = 1,
   1245			.flags = CLK_SET_RATE_PARENT,
   1246			.ops = &clk_branch2_ops,
   1247		},
   1248	},
   1249};
   1250
   1251static struct clk_branch cam_cc_ife_lite_csid_clk = {
   1252	.halt_reg = 0xb03c,
   1253	.halt_check = BRANCH_HALT,
   1254	.clkr = {
   1255		.enable_reg = 0xb03c,
   1256		.enable_mask = BIT(0),
   1257		.hw.init = &(struct clk_init_data){
   1258			.name = "cam_cc_ife_lite_csid_clk",
   1259			.parent_hws = (const struct clk_hw*[]){
   1260				&cam_cc_ife_lite_csid_clk_src.clkr.hw,
   1261			},
   1262			.num_parents = 1,
   1263			.flags = CLK_SET_RATE_PARENT,
   1264			.ops = &clk_branch2_ops,
   1265		},
   1266	},
   1267};
   1268
   1269static struct clk_branch cam_cc_ipe_0_ahb_clk = {
   1270	.halt_reg = 0x703c,
   1271	.halt_check = BRANCH_HALT,
   1272	.clkr = {
   1273		.enable_reg = 0x703c,
   1274		.enable_mask = BIT(0),
   1275		.hw.init = &(struct clk_init_data){
   1276			.name = "cam_cc_ipe_0_ahb_clk",
   1277			.parent_hws = (const struct clk_hw*[]){
   1278				&cam_cc_slow_ahb_clk_src.clkr.hw,
   1279			},
   1280			.num_parents = 1,
   1281			.flags = CLK_SET_RATE_PARENT,
   1282			.ops = &clk_branch2_ops,
   1283		},
   1284	},
   1285};
   1286
   1287static struct clk_branch cam_cc_ipe_0_areg_clk = {
   1288	.halt_reg = 0x7038,
   1289	.halt_check = BRANCH_HALT,
   1290	.clkr = {
   1291		.enable_reg = 0x7038,
   1292		.enable_mask = BIT(0),
   1293		.hw.init = &(struct clk_init_data){
   1294			.name = "cam_cc_ipe_0_areg_clk",
   1295			.parent_hws = (const struct clk_hw*[]){
   1296				&cam_cc_fast_ahb_clk_src.clkr.hw,
   1297			},
   1298			.num_parents = 1,
   1299			.flags = CLK_SET_RATE_PARENT,
   1300			.ops = &clk_branch2_ops,
   1301		},
   1302	},
   1303};
   1304
   1305static struct clk_branch cam_cc_ipe_0_axi_clk = {
   1306	.halt_reg = 0x7034,
   1307	.halt_check = BRANCH_HALT,
   1308	.clkr = {
   1309		.enable_reg = 0x7034,
   1310		.enable_mask = BIT(0),
   1311		.hw.init = &(struct clk_init_data){
   1312			.name = "cam_cc_ipe_0_axi_clk",
   1313			.ops = &clk_branch2_ops,
   1314		},
   1315	},
   1316};
   1317
   1318static struct clk_branch cam_cc_ipe_0_clk = {
   1319	.halt_reg = 0x7024,
   1320	.halt_check = BRANCH_HALT,
   1321	.clkr = {
   1322		.enable_reg = 0x7024,
   1323		.enable_mask = BIT(0),
   1324		.hw.init = &(struct clk_init_data){
   1325			.name = "cam_cc_ipe_0_clk",
   1326			.parent_hws = (const struct clk_hw*[]){
   1327				&cam_cc_ipe_0_clk_src.clkr.hw,
   1328			},
   1329			.num_parents = 1,
   1330			.flags = CLK_SET_RATE_PARENT,
   1331			.ops = &clk_branch2_ops,
   1332		},
   1333	},
   1334};
   1335
   1336static struct clk_branch cam_cc_ipe_1_ahb_clk = {
   1337	.halt_reg = 0x803c,
   1338	.halt_check = BRANCH_HALT,
   1339	.clkr = {
   1340		.enable_reg = 0x803c,
   1341		.enable_mask = BIT(0),
   1342		.hw.init = &(struct clk_init_data){
   1343			.name = "cam_cc_ipe_1_ahb_clk",
   1344			.parent_hws = (const struct clk_hw*[]){
   1345				&cam_cc_slow_ahb_clk_src.clkr.hw,
   1346			},
   1347			.num_parents = 1,
   1348			.flags = CLK_SET_RATE_PARENT,
   1349			.ops = &clk_branch2_ops,
   1350		},
   1351	},
   1352};
   1353
   1354static struct clk_branch cam_cc_ipe_1_areg_clk = {
   1355	.halt_reg = 0x8038,
   1356	.halt_check = BRANCH_HALT,
   1357	.clkr = {
   1358		.enable_reg = 0x8038,
   1359		.enable_mask = BIT(0),
   1360		.hw.init = &(struct clk_init_data){
   1361			.name = "cam_cc_ipe_1_areg_clk",
   1362			.parent_hws = (const struct clk_hw*[]){
   1363				&cam_cc_fast_ahb_clk_src.clkr.hw,
   1364			},
   1365			.num_parents = 1,
   1366			.flags = CLK_SET_RATE_PARENT,
   1367			.ops = &clk_branch2_ops,
   1368		},
   1369	},
   1370};
   1371
   1372static struct clk_branch cam_cc_ipe_1_axi_clk = {
   1373	.halt_reg = 0x8034,
   1374	.halt_check = BRANCH_HALT,
   1375	.clkr = {
   1376		.enable_reg = 0x8034,
   1377		.enable_mask = BIT(0),
   1378		.hw.init = &(struct clk_init_data){
   1379			.name = "cam_cc_ipe_1_axi_clk",
   1380			.ops = &clk_branch2_ops,
   1381		},
   1382	},
   1383};
   1384
   1385static struct clk_branch cam_cc_ipe_1_clk = {
   1386	.halt_reg = 0x8024,
   1387	.halt_check = BRANCH_HALT,
   1388	.clkr = {
   1389		.enable_reg = 0x8024,
   1390		.enable_mask = BIT(0),
   1391		.hw.init = &(struct clk_init_data){
   1392			.name = "cam_cc_ipe_1_clk",
   1393			.parent_hws = (const struct clk_hw*[]){
   1394				&cam_cc_ipe_1_clk_src.clkr.hw,
   1395			},
   1396			.num_parents = 1,
   1397			.flags = CLK_SET_RATE_PARENT,
   1398			.ops = &clk_branch2_ops,
   1399		},
   1400	},
   1401};
   1402
   1403static struct clk_branch cam_cc_jpeg_clk = {
   1404	.halt_reg = 0xb064,
   1405	.halt_check = BRANCH_HALT,
   1406	.clkr = {
   1407		.enable_reg = 0xb064,
   1408		.enable_mask = BIT(0),
   1409		.hw.init = &(struct clk_init_data){
   1410			.name = "cam_cc_jpeg_clk",
   1411			.parent_hws = (const struct clk_hw*[]){
   1412				&cam_cc_jpeg_clk_src.clkr.hw,
   1413			},
   1414			.num_parents = 1,
   1415			.flags = CLK_SET_RATE_PARENT,
   1416			.ops = &clk_branch2_ops,
   1417		},
   1418	},
   1419};
   1420
   1421static struct clk_branch cam_cc_lrme_clk = {
   1422	.halt_reg = 0xb110,
   1423	.halt_check = BRANCH_HALT,
   1424	.clkr = {
   1425		.enable_reg = 0xb110,
   1426		.enable_mask = BIT(0),
   1427		.hw.init = &(struct clk_init_data){
   1428			.name = "cam_cc_lrme_clk",
   1429			.parent_hws = (const struct clk_hw*[]){
   1430				&cam_cc_lrme_clk_src.clkr.hw,
   1431			},
   1432			.num_parents = 1,
   1433			.flags = CLK_SET_RATE_PARENT,
   1434			.ops = &clk_branch2_ops,
   1435		},
   1436	},
   1437};
   1438
   1439static struct clk_branch cam_cc_mclk0_clk = {
   1440	.halt_reg = 0x401c,
   1441	.halt_check = BRANCH_HALT,
   1442	.clkr = {
   1443		.enable_reg = 0x401c,
   1444		.enable_mask = BIT(0),
   1445		.hw.init = &(struct clk_init_data){
   1446			.name = "cam_cc_mclk0_clk",
   1447			.parent_hws = (const struct clk_hw*[]){
   1448				&cam_cc_mclk0_clk_src.clkr.hw,
   1449			},
   1450			.num_parents = 1,
   1451			.flags = CLK_SET_RATE_PARENT,
   1452			.ops = &clk_branch2_ops,
   1453		},
   1454	},
   1455};
   1456
   1457static struct clk_branch cam_cc_mclk1_clk = {
   1458	.halt_reg = 0x403c,
   1459	.halt_check = BRANCH_HALT,
   1460	.clkr = {
   1461		.enable_reg = 0x403c,
   1462		.enable_mask = BIT(0),
   1463		.hw.init = &(struct clk_init_data){
   1464			.name = "cam_cc_mclk1_clk",
   1465			.parent_hws = (const struct clk_hw*[]){
   1466				&cam_cc_mclk1_clk_src.clkr.hw,
   1467			},
   1468			.num_parents = 1,
   1469			.flags = CLK_SET_RATE_PARENT,
   1470			.ops = &clk_branch2_ops,
   1471		},
   1472	},
   1473};
   1474
   1475static struct clk_branch cam_cc_mclk2_clk = {
   1476	.halt_reg = 0x405c,
   1477	.halt_check = BRANCH_HALT,
   1478	.clkr = {
   1479		.enable_reg = 0x405c,
   1480		.enable_mask = BIT(0),
   1481		.hw.init = &(struct clk_init_data){
   1482			.name = "cam_cc_mclk2_clk",
   1483			.parent_hws = (const struct clk_hw*[]){
   1484				&cam_cc_mclk2_clk_src.clkr.hw,
   1485			},
   1486			.num_parents = 1,
   1487			.flags = CLK_SET_RATE_PARENT,
   1488			.ops = &clk_branch2_ops,
   1489		},
   1490	},
   1491};
   1492
   1493static struct clk_branch cam_cc_mclk3_clk = {
   1494	.halt_reg = 0x407c,
   1495	.halt_check = BRANCH_HALT,
   1496	.clkr = {
   1497		.enable_reg = 0x407c,
   1498		.enable_mask = BIT(0),
   1499		.hw.init = &(struct clk_init_data){
   1500			.name = "cam_cc_mclk3_clk",
   1501			.parent_hws = (const struct clk_hw*[]){
   1502				&cam_cc_mclk3_clk_src.clkr.hw,
   1503			},
   1504			.num_parents = 1,
   1505			.flags = CLK_SET_RATE_PARENT,
   1506			.ops = &clk_branch2_ops,
   1507		},
   1508	},
   1509};
   1510
   1511static struct clk_branch cam_cc_soc_ahb_clk = {
   1512	.halt_reg = 0xb13c,
   1513	.halt_check = BRANCH_HALT,
   1514	.clkr = {
   1515		.enable_reg = 0xb13c,
   1516		.enable_mask = BIT(0),
   1517		.hw.init = &(struct clk_init_data){
   1518			.name = "cam_cc_soc_ahb_clk",
   1519			.ops = &clk_branch2_ops,
   1520		},
   1521	},
   1522};
   1523
   1524static struct clk_branch cam_cc_sys_tmr_clk = {
   1525	.halt_reg = 0xb0a8,
   1526	.halt_check = BRANCH_HALT,
   1527	.clkr = {
   1528		.enable_reg = 0xb0a8,
   1529		.enable_mask = BIT(0),
   1530		.hw.init = &(struct clk_init_data){
   1531			.name = "cam_cc_sys_tmr_clk",
   1532			.ops = &clk_branch2_ops,
   1533		},
   1534	},
   1535};
   1536
   1537static struct gdsc bps_gdsc = {
   1538	.gdscr = 0x6004,
   1539	.pd = {
   1540		.name = "bps_gdsc",
   1541	},
   1542	.flags = HW_CTRL | POLL_CFG_GDSCR,
   1543	.pwrsts = PWRSTS_OFF_ON,
   1544};
   1545
   1546static struct gdsc ipe_0_gdsc = {
   1547	.gdscr = 0x7004,
   1548	.pd = {
   1549		.name = "ipe_0_gdsc",
   1550	},
   1551	.flags = HW_CTRL | POLL_CFG_GDSCR,
   1552	.pwrsts = PWRSTS_OFF_ON,
   1553};
   1554
   1555static struct gdsc ipe_1_gdsc = {
   1556	.gdscr = 0x8004,
   1557	.pd = {
   1558		.name = "ipe_1_gdsc",
   1559	},
   1560	.flags = HW_CTRL | POLL_CFG_GDSCR,
   1561	.pwrsts = PWRSTS_OFF_ON,
   1562};
   1563
   1564static struct gdsc ife_0_gdsc = {
   1565	.gdscr = 0x9004,
   1566	.pd = {
   1567		.name = "ife_0_gdsc",
   1568	},
   1569	.flags = POLL_CFG_GDSCR,
   1570	.pwrsts = PWRSTS_OFF_ON,
   1571};
   1572
   1573static struct gdsc ife_1_gdsc = {
   1574	.gdscr = 0xa004,
   1575	.pd = {
   1576		.name = "ife_1_gdsc",
   1577	},
   1578	.flags = POLL_CFG_GDSCR,
   1579	.pwrsts = PWRSTS_OFF_ON,
   1580};
   1581
   1582static struct gdsc titan_top_gdsc = {
   1583	.gdscr = 0xb134,
   1584	.pd = {
   1585		.name = "titan_top_gdsc",
   1586	},
   1587	.flags = POLL_CFG_GDSCR,
   1588	.pwrsts = PWRSTS_OFF_ON,
   1589};
   1590
   1591static struct clk_regmap *cam_cc_sdm845_clocks[] = {
   1592	[CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
   1593	[CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr,
   1594	[CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr,
   1595	[CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
   1596	[CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
   1597	[CAM_CC_CAMNOC_ATB_CLK] = &cam_cc_camnoc_atb_clk.clkr,
   1598	[CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
   1599	[CAM_CC_CCI_CLK] = &cam_cc_cci_clk.clkr,
   1600	[CAM_CC_CCI_CLK_SRC] = &cam_cc_cci_clk_src.clkr,
   1601	[CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
   1602	[CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
   1603	[CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
   1604	[CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
   1605	[CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
   1606	[CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
   1607	[CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
   1608	[CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
   1609	[CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
   1610	[CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
   1611	[CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
   1612	[CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
   1613	[CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
   1614	[CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
   1615	[CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
   1616	[CAM_CC_FD_CORE_CLK] = &cam_cc_fd_core_clk.clkr,
   1617	[CAM_CC_FD_CORE_CLK_SRC] = &cam_cc_fd_core_clk_src.clkr,
   1618	[CAM_CC_FD_CORE_UAR_CLK] = &cam_cc_fd_core_uar_clk.clkr,
   1619	[CAM_CC_ICP_APB_CLK] = &cam_cc_icp_apb_clk.clkr,
   1620	[CAM_CC_ICP_ATB_CLK] = &cam_cc_icp_atb_clk.clkr,
   1621	[CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
   1622	[CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
   1623	[CAM_CC_ICP_CTI_CLK] = &cam_cc_icp_cti_clk.clkr,
   1624	[CAM_CC_ICP_TS_CLK] = &cam_cc_icp_ts_clk.clkr,
   1625	[CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr,
   1626	[CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
   1627	[CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
   1628	[CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr,
   1629	[CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr,
   1630	[CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr,
   1631	[CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
   1632	[CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr,
   1633	[CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
   1634	[CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
   1635	[CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr,
   1636	[CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr,
   1637	[CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr,
   1638	[CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
   1639	[CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
   1640	[CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
   1641	[CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
   1642	[CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
   1643	[CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
   1644	[CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr,
   1645	[CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr,
   1646	[CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr,
   1647	[CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr,
   1648	[CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr,
   1649	[CAM_CC_IPE_1_AHB_CLK] = &cam_cc_ipe_1_ahb_clk.clkr,
   1650	[CAM_CC_IPE_1_AREG_CLK] = &cam_cc_ipe_1_areg_clk.clkr,
   1651	[CAM_CC_IPE_1_AXI_CLK] = &cam_cc_ipe_1_axi_clk.clkr,
   1652	[CAM_CC_IPE_1_CLK] = &cam_cc_ipe_1_clk.clkr,
   1653	[CAM_CC_IPE_1_CLK_SRC] = &cam_cc_ipe_1_clk_src.clkr,
   1654	[CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
   1655	[CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
   1656	[CAM_CC_LRME_CLK] = &cam_cc_lrme_clk.clkr,
   1657	[CAM_CC_LRME_CLK_SRC] = &cam_cc_lrme_clk_src.clkr,
   1658	[CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
   1659	[CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
   1660	[CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
   1661	[CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
   1662	[CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
   1663	[CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
   1664	[CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
   1665	[CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
   1666	[CAM_CC_PLL0] = &cam_cc_pll0.clkr,
   1667	[CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
   1668	[CAM_CC_PLL1] = &cam_cc_pll1.clkr,
   1669	[CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
   1670	[CAM_CC_PLL2] = &cam_cc_pll2.clkr,
   1671	[CAM_CC_PLL2_OUT_EVEN] = &cam_cc_pll2_out_even.clkr,
   1672	[CAM_CC_PLL3] = &cam_cc_pll3.clkr,
   1673	[CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
   1674	[CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
   1675	[CAM_CC_SOC_AHB_CLK] = &cam_cc_soc_ahb_clk.clkr,
   1676	[CAM_CC_SYS_TMR_CLK] = &cam_cc_sys_tmr_clk.clkr,
   1677};
   1678
   1679static struct gdsc *cam_cc_sdm845_gdscs[] = {
   1680	[BPS_GDSC] = &bps_gdsc,
   1681	[IPE_0_GDSC] = &ipe_0_gdsc,
   1682	[IPE_1_GDSC] = &ipe_1_gdsc,
   1683	[IFE_0_GDSC] = &ife_0_gdsc,
   1684	[IFE_1_GDSC] = &ife_1_gdsc,
   1685	[TITAN_TOP_GDSC] = &titan_top_gdsc,
   1686};
   1687
   1688static const struct regmap_config cam_cc_sdm845_regmap_config = {
   1689	.reg_bits	= 32,
   1690	.reg_stride	= 4,
   1691	.val_bits	= 32,
   1692	.max_register	= 0xd004,
   1693	.fast_io	= true,
   1694};
   1695
   1696static const struct qcom_cc_desc cam_cc_sdm845_desc = {
   1697	.config = &cam_cc_sdm845_regmap_config,
   1698	.clks = cam_cc_sdm845_clocks,
   1699	.num_clks = ARRAY_SIZE(cam_cc_sdm845_clocks),
   1700	.gdscs = cam_cc_sdm845_gdscs,
   1701	.num_gdscs = ARRAY_SIZE(cam_cc_sdm845_gdscs),
   1702};
   1703
   1704static const struct of_device_id cam_cc_sdm845_match_table[] = {
   1705	{ .compatible = "qcom,sdm845-camcc" },
   1706	{ }
   1707};
   1708MODULE_DEVICE_TABLE(of, cam_cc_sdm845_match_table);
   1709
   1710static int cam_cc_sdm845_probe(struct platform_device *pdev)
   1711{
   1712	struct regmap *regmap;
   1713	struct alpha_pll_config cam_cc_pll_config = { };
   1714
   1715	regmap = qcom_cc_map(pdev, &cam_cc_sdm845_desc);
   1716	if (IS_ERR(regmap))
   1717		return PTR_ERR(regmap);
   1718
   1719	cam_cc_pll_config.l = 0x1f;
   1720	cam_cc_pll_config.alpha = 0x4000;
   1721	clk_fabia_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll_config);
   1722
   1723	cam_cc_pll_config.l = 0x2a;
   1724	cam_cc_pll_config.alpha = 0x1556;
   1725	clk_fabia_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll_config);
   1726
   1727	cam_cc_pll_config.l = 0x32;
   1728	cam_cc_pll_config.alpha = 0x0;
   1729	clk_fabia_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll_config);
   1730
   1731	cam_cc_pll_config.l = 0x14;
   1732	clk_fabia_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll_config);
   1733
   1734	return qcom_cc_really_probe(pdev, &cam_cc_sdm845_desc, regmap);
   1735}
   1736
   1737static struct platform_driver cam_cc_sdm845_driver = {
   1738	.probe	= cam_cc_sdm845_probe,
   1739	.driver	= {
   1740		.name = "sdm845-camcc",
   1741		.of_match_table = cam_cc_sdm845_match_table,
   1742	},
   1743};
   1744
   1745static int __init cam_cc_sdm845_init(void)
   1746{
   1747	return platform_driver_register(&cam_cc_sdm845_driver);
   1748}
   1749subsys_initcall(cam_cc_sdm845_init);
   1750
   1751static void __exit cam_cc_sdm845_exit(void)
   1752{
   1753	platform_driver_unregister(&cam_cc_sdm845_driver);
   1754}
   1755module_exit(cam_cc_sdm845_exit);
   1756
   1757MODULE_DESCRIPTION("QTI CAM_CC SDM845 Driver");
   1758MODULE_LICENSE("GPL v2");