1*80f5451dSKonrad Dybcio // SPDX-License-Identifier: GPL-2.0-only 2*80f5451dSKonrad Dybcio /* 3*80f5451dSKonrad Dybcio * Copyright (c) 2022, The Linux Foundation. All rights reserved. 4*80f5451dSKonrad Dybcio * Copyright (c) 2022, Linaro Limited 5*80f5451dSKonrad Dybcio */ 6*80f5451dSKonrad Dybcio 7*80f5451dSKonrad Dybcio #include <linux/clk-provider.h> 8*80f5451dSKonrad Dybcio #include <linux/module.h> 9*80f5451dSKonrad Dybcio #include <linux/platform_device.h> 10*80f5451dSKonrad Dybcio #include <linux/regmap.h> 11*80f5451dSKonrad Dybcio 12*80f5451dSKonrad Dybcio #include <dt-bindings/clock/qcom,sm6350-camcc.h> 13*80f5451dSKonrad Dybcio 14*80f5451dSKonrad Dybcio #include "clk-alpha-pll.h" 15*80f5451dSKonrad Dybcio #include "clk-branch.h" 16*80f5451dSKonrad Dybcio #include "clk-rcg.h" 17*80f5451dSKonrad Dybcio #include "common.h" 18*80f5451dSKonrad Dybcio #include "gdsc.h" 19*80f5451dSKonrad Dybcio 20*80f5451dSKonrad Dybcio enum { 21*80f5451dSKonrad Dybcio DT_BI_TCXO, 22*80f5451dSKonrad Dybcio }; 23*80f5451dSKonrad Dybcio 24*80f5451dSKonrad Dybcio enum { 25*80f5451dSKonrad Dybcio P_BI_TCXO, 26*80f5451dSKonrad Dybcio P_CAMCC_PLL0_OUT_EVEN, 27*80f5451dSKonrad Dybcio P_CAMCC_PLL0_OUT_MAIN, 28*80f5451dSKonrad Dybcio P_CAMCC_PLL1_OUT_EVEN, 29*80f5451dSKonrad Dybcio P_CAMCC_PLL1_OUT_MAIN, 30*80f5451dSKonrad Dybcio P_CAMCC_PLL2_OUT_EARLY, 31*80f5451dSKonrad Dybcio P_CAMCC_PLL2_OUT_MAIN, 32*80f5451dSKonrad Dybcio P_CAMCC_PLL3_OUT_MAIN, 33*80f5451dSKonrad Dybcio }; 34*80f5451dSKonrad Dybcio 35*80f5451dSKonrad Dybcio static struct pll_vco fabia_vco[] = { 36*80f5451dSKonrad Dybcio { 249600000, 2000000000, 0 }, 37*80f5451dSKonrad Dybcio }; 38*80f5451dSKonrad Dybcio 39*80f5451dSKonrad Dybcio /* 600MHz configuration */ 40*80f5451dSKonrad Dybcio static const struct alpha_pll_config camcc_pll0_config = { 41*80f5451dSKonrad Dybcio .l = 0x1f, 42*80f5451dSKonrad Dybcio .alpha = 0x4000, 43*80f5451dSKonrad Dybcio .config_ctl_val = 0x20485699, 44*80f5451dSKonrad Dybcio .config_ctl_hi_val = 0x00002067, 45*80f5451dSKonrad Dybcio .test_ctl_val = 0x40000000, 46*80f5451dSKonrad Dybcio .test_ctl_hi_val = 0x00000002, 47*80f5451dSKonrad Dybcio .user_ctl_val = 0x00000101, 48*80f5451dSKonrad Dybcio .user_ctl_hi_val = 0x00004805, 49*80f5451dSKonrad Dybcio }; 50*80f5451dSKonrad Dybcio 51*80f5451dSKonrad Dybcio static struct clk_alpha_pll camcc_pll0 = { 52*80f5451dSKonrad Dybcio .offset = 0x0, 53*80f5451dSKonrad Dybcio .vco_table = fabia_vco, 54*80f5451dSKonrad Dybcio .num_vco = ARRAY_SIZE(fabia_vco), 55*80f5451dSKonrad Dybcio .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 56*80f5451dSKonrad Dybcio .clkr = { 57*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 58*80f5451dSKonrad Dybcio .name = "camcc_pll0", 59*80f5451dSKonrad Dybcio .parent_data = &(const struct clk_parent_data){ 60*80f5451dSKonrad Dybcio .index = DT_BI_TCXO, 61*80f5451dSKonrad Dybcio }, 62*80f5451dSKonrad Dybcio .num_parents = 1, 63*80f5451dSKonrad Dybcio .ops = &clk_alpha_pll_fabia_ops, 64*80f5451dSKonrad Dybcio }, 65*80f5451dSKonrad Dybcio }, 66*80f5451dSKonrad Dybcio }; 67*80f5451dSKonrad Dybcio 68*80f5451dSKonrad Dybcio static const struct clk_div_table post_div_table_camcc_pll0_out_even[] = { 69*80f5451dSKonrad Dybcio { 0x1, 2 }, 70*80f5451dSKonrad Dybcio { } 71*80f5451dSKonrad Dybcio }; 72*80f5451dSKonrad Dybcio 73*80f5451dSKonrad Dybcio static struct clk_alpha_pll_postdiv camcc_pll0_out_even = { 74*80f5451dSKonrad Dybcio .offset = 0x0, 75*80f5451dSKonrad Dybcio .post_div_shift = 8, 76*80f5451dSKonrad Dybcio .post_div_table = post_div_table_camcc_pll0_out_even, 77*80f5451dSKonrad Dybcio .num_post_div = ARRAY_SIZE(post_div_table_camcc_pll0_out_even), 78*80f5451dSKonrad Dybcio .width = 4, 79*80f5451dSKonrad Dybcio .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 80*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 81*80f5451dSKonrad Dybcio .name = "camcc_pll0_out_even", 82*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 83*80f5451dSKonrad Dybcio &camcc_pll0.clkr.hw, 84*80f5451dSKonrad Dybcio }, 85*80f5451dSKonrad Dybcio .num_parents = 1, 86*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 87*80f5451dSKonrad Dybcio .ops = &clk_alpha_pll_postdiv_fabia_ops, 88*80f5451dSKonrad Dybcio }, 89*80f5451dSKonrad Dybcio }; 90*80f5451dSKonrad Dybcio 91*80f5451dSKonrad Dybcio /* 808MHz configuration */ 92*80f5451dSKonrad Dybcio static const struct alpha_pll_config camcc_pll1_config = { 93*80f5451dSKonrad Dybcio .l = 0x2a, 94*80f5451dSKonrad Dybcio .alpha = 0x1555, 95*80f5451dSKonrad Dybcio .config_ctl_val = 0x20485699, 96*80f5451dSKonrad Dybcio .config_ctl_hi_val = 0x00002067, 97*80f5451dSKonrad Dybcio .test_ctl_val = 0x40000000, 98*80f5451dSKonrad Dybcio .test_ctl_hi_val = 0x00000000, 99*80f5451dSKonrad Dybcio .user_ctl_val = 0x00000101, 100*80f5451dSKonrad Dybcio .user_ctl_hi_val = 0x00004805, 101*80f5451dSKonrad Dybcio }; 102*80f5451dSKonrad Dybcio 103*80f5451dSKonrad Dybcio static struct clk_alpha_pll camcc_pll1 = { 104*80f5451dSKonrad Dybcio .offset = 0x1000, 105*80f5451dSKonrad Dybcio .vco_table = fabia_vco, 106*80f5451dSKonrad Dybcio .num_vco = ARRAY_SIZE(fabia_vco), 107*80f5451dSKonrad Dybcio .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 108*80f5451dSKonrad Dybcio .clkr = { 109*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 110*80f5451dSKonrad Dybcio .name = "camcc_pll1", 111*80f5451dSKonrad Dybcio .parent_data = &(const struct clk_parent_data){ 112*80f5451dSKonrad Dybcio .index = DT_BI_TCXO, 113*80f5451dSKonrad Dybcio }, 114*80f5451dSKonrad Dybcio .num_parents = 1, 115*80f5451dSKonrad Dybcio .ops = &clk_alpha_pll_fabia_ops, 116*80f5451dSKonrad Dybcio }, 117*80f5451dSKonrad Dybcio }, 118*80f5451dSKonrad Dybcio }; 119*80f5451dSKonrad Dybcio 120*80f5451dSKonrad Dybcio static const struct clk_div_table post_div_table_camcc_pll1_out_even[] = { 121*80f5451dSKonrad Dybcio { 0x1, 2 }, 122*80f5451dSKonrad Dybcio { } 123*80f5451dSKonrad Dybcio }; 124*80f5451dSKonrad Dybcio 125*80f5451dSKonrad Dybcio static struct clk_alpha_pll_postdiv camcc_pll1_out_even = { 126*80f5451dSKonrad Dybcio .offset = 0x1000, 127*80f5451dSKonrad Dybcio .post_div_shift = 8, 128*80f5451dSKonrad Dybcio .post_div_table = post_div_table_camcc_pll1_out_even, 129*80f5451dSKonrad Dybcio .num_post_div = ARRAY_SIZE(post_div_table_camcc_pll1_out_even), 130*80f5451dSKonrad Dybcio .width = 4, 131*80f5451dSKonrad Dybcio .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 132*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 133*80f5451dSKonrad Dybcio .name = "camcc_pll1_out_even", 134*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 135*80f5451dSKonrad Dybcio &camcc_pll1.clkr.hw, 136*80f5451dSKonrad Dybcio }, 137*80f5451dSKonrad Dybcio .num_parents = 1, 138*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 139*80f5451dSKonrad Dybcio .ops = &clk_alpha_pll_postdiv_fabia_ops, 140*80f5451dSKonrad Dybcio }, 141*80f5451dSKonrad Dybcio }; 142*80f5451dSKonrad Dybcio 143*80f5451dSKonrad Dybcio /* 1920MHz configuration */ 144*80f5451dSKonrad Dybcio static const struct alpha_pll_config camcc_pll2_config = { 145*80f5451dSKonrad Dybcio .l = 0x64, 146*80f5451dSKonrad Dybcio .alpha = 0x0, 147*80f5451dSKonrad Dybcio .post_div_val = 0x3 << 8, 148*80f5451dSKonrad Dybcio .post_div_mask = 0x3 << 8, 149*80f5451dSKonrad Dybcio .aux_output_mask = BIT(1), 150*80f5451dSKonrad Dybcio .main_output_mask = BIT(0), 151*80f5451dSKonrad Dybcio .early_output_mask = BIT(3), 152*80f5451dSKonrad Dybcio .config_ctl_val = 0x20000800, 153*80f5451dSKonrad Dybcio .config_ctl_hi_val = 0x400003d2, 154*80f5451dSKonrad Dybcio .test_ctl_val = 0x04000400, 155*80f5451dSKonrad Dybcio .test_ctl_hi_val = 0x00004000, 156*80f5451dSKonrad Dybcio }; 157*80f5451dSKonrad Dybcio 158*80f5451dSKonrad Dybcio static struct clk_alpha_pll camcc_pll2 = { 159*80f5451dSKonrad Dybcio .offset = 0x2000, 160*80f5451dSKonrad Dybcio .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_AGERA], 161*80f5451dSKonrad Dybcio .clkr = { 162*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 163*80f5451dSKonrad Dybcio .name = "camcc_pll2", 164*80f5451dSKonrad Dybcio .parent_data = &(const struct clk_parent_data){ 165*80f5451dSKonrad Dybcio .index = DT_BI_TCXO, 166*80f5451dSKonrad Dybcio }, 167*80f5451dSKonrad Dybcio .num_parents = 1, 168*80f5451dSKonrad Dybcio .ops = &clk_alpha_pll_agera_ops, 169*80f5451dSKonrad Dybcio }, 170*80f5451dSKonrad Dybcio }, 171*80f5451dSKonrad Dybcio }; 172*80f5451dSKonrad Dybcio 173*80f5451dSKonrad Dybcio static struct clk_fixed_factor camcc_pll2_out_early = { 174*80f5451dSKonrad Dybcio .mult = 1, 175*80f5451dSKonrad Dybcio .div = 2, 176*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 177*80f5451dSKonrad Dybcio .name = "camcc_pll2_out_early", 178*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 179*80f5451dSKonrad Dybcio &camcc_pll2.clkr.hw, 180*80f5451dSKonrad Dybcio }, 181*80f5451dSKonrad Dybcio .num_parents = 1, 182*80f5451dSKonrad Dybcio .ops = &clk_fixed_factor_ops, 183*80f5451dSKonrad Dybcio }, 184*80f5451dSKonrad Dybcio }; 185*80f5451dSKonrad Dybcio 186*80f5451dSKonrad Dybcio static const struct clk_div_table post_div_table_camcc_pll2_out_main[] = { 187*80f5451dSKonrad Dybcio { 0x1, 2 }, 188*80f5451dSKonrad Dybcio { } 189*80f5451dSKonrad Dybcio }; 190*80f5451dSKonrad Dybcio 191*80f5451dSKonrad Dybcio static struct clk_alpha_pll_postdiv camcc_pll2_out_main = { 192*80f5451dSKonrad Dybcio .offset = 0x2000, 193*80f5451dSKonrad Dybcio .post_div_shift = 8, 194*80f5451dSKonrad Dybcio .post_div_table = post_div_table_camcc_pll2_out_main, 195*80f5451dSKonrad Dybcio .num_post_div = ARRAY_SIZE(post_div_table_camcc_pll2_out_main), 196*80f5451dSKonrad Dybcio .width = 2, 197*80f5451dSKonrad Dybcio .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_AGERA], 198*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 199*80f5451dSKonrad Dybcio .name = "camcc_pll2_out_main", 200*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 201*80f5451dSKonrad Dybcio &camcc_pll2.clkr.hw, 202*80f5451dSKonrad Dybcio }, 203*80f5451dSKonrad Dybcio .num_parents = 1, 204*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 205*80f5451dSKonrad Dybcio .ops = &clk_alpha_pll_postdiv_ops, 206*80f5451dSKonrad Dybcio }, 207*80f5451dSKonrad Dybcio }; 208*80f5451dSKonrad Dybcio 209*80f5451dSKonrad Dybcio /* 384MHz configuration */ 210*80f5451dSKonrad Dybcio static const struct alpha_pll_config camcc_pll3_config = { 211*80f5451dSKonrad Dybcio .l = 0x14, 212*80f5451dSKonrad Dybcio .alpha = 0x0, 213*80f5451dSKonrad Dybcio .config_ctl_val = 0x20485699, 214*80f5451dSKonrad Dybcio .config_ctl_hi_val = 0x00002067, 215*80f5451dSKonrad Dybcio .test_ctl_val = 0x40000000, 216*80f5451dSKonrad Dybcio .test_ctl_hi_val = 0x00000002, 217*80f5451dSKonrad Dybcio .user_ctl_val = 0x00000001, 218*80f5451dSKonrad Dybcio .user_ctl_hi_val = 0x00014805, 219*80f5451dSKonrad Dybcio }; 220*80f5451dSKonrad Dybcio 221*80f5451dSKonrad Dybcio static struct clk_alpha_pll camcc_pll3 = { 222*80f5451dSKonrad Dybcio .offset = 0x3000, 223*80f5451dSKonrad Dybcio .vco_table = fabia_vco, 224*80f5451dSKonrad Dybcio .num_vco = ARRAY_SIZE(fabia_vco), 225*80f5451dSKonrad Dybcio .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 226*80f5451dSKonrad Dybcio .clkr = { 227*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 228*80f5451dSKonrad Dybcio .name = "camcc_pll3", 229*80f5451dSKonrad Dybcio .parent_data = &(const struct clk_parent_data){ 230*80f5451dSKonrad Dybcio .index = DT_BI_TCXO, 231*80f5451dSKonrad Dybcio }, 232*80f5451dSKonrad Dybcio .num_parents = 1, 233*80f5451dSKonrad Dybcio .ops = &clk_alpha_pll_fabia_ops, 234*80f5451dSKonrad Dybcio }, 235*80f5451dSKonrad Dybcio }, 236*80f5451dSKonrad Dybcio }; 237*80f5451dSKonrad Dybcio 238*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_0[] = { 239*80f5451dSKonrad Dybcio { P_BI_TCXO, 0 }, 240*80f5451dSKonrad Dybcio { P_CAMCC_PLL0_OUT_EVEN, 6 }, 241*80f5451dSKonrad Dybcio }; 242*80f5451dSKonrad Dybcio 243*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_0[] = { 244*80f5451dSKonrad Dybcio { .fw_name = "bi_tcxo" }, 245*80f5451dSKonrad Dybcio { .hw = &camcc_pll0_out_even.clkr.hw }, 246*80f5451dSKonrad Dybcio }; 247*80f5451dSKonrad Dybcio 248*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_1[] = { 249*80f5451dSKonrad Dybcio { P_BI_TCXO, 0 }, 250*80f5451dSKonrad Dybcio { P_CAMCC_PLL0_OUT_MAIN, 1 }, 251*80f5451dSKonrad Dybcio { P_CAMCC_PLL1_OUT_EVEN, 3 }, 252*80f5451dSKonrad Dybcio { P_CAMCC_PLL2_OUT_MAIN, 4 }, 253*80f5451dSKonrad Dybcio }; 254*80f5451dSKonrad Dybcio 255*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_1[] = { 256*80f5451dSKonrad Dybcio { .fw_name = "bi_tcxo" }, 257*80f5451dSKonrad Dybcio { .hw = &camcc_pll0.clkr.hw }, 258*80f5451dSKonrad Dybcio { .hw = &camcc_pll1_out_even.clkr.hw }, 259*80f5451dSKonrad Dybcio { .hw = &camcc_pll2_out_main.clkr.hw }, 260*80f5451dSKonrad Dybcio }; 261*80f5451dSKonrad Dybcio 262*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_2[] = { 263*80f5451dSKonrad Dybcio { P_BI_TCXO, 0 }, 264*80f5451dSKonrad Dybcio { P_CAMCC_PLL0_OUT_MAIN, 1 }, 265*80f5451dSKonrad Dybcio { P_CAMCC_PLL3_OUT_MAIN, 5 }, 266*80f5451dSKonrad Dybcio }; 267*80f5451dSKonrad Dybcio 268*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_2[] = { 269*80f5451dSKonrad Dybcio { .fw_name = "bi_tcxo" }, 270*80f5451dSKonrad Dybcio { .hw = &camcc_pll0.clkr.hw }, 271*80f5451dSKonrad Dybcio { .hw = &camcc_pll3.clkr.hw }, 272*80f5451dSKonrad Dybcio }; 273*80f5451dSKonrad Dybcio 274*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_3[] = { 275*80f5451dSKonrad Dybcio { P_BI_TCXO, 0 }, 276*80f5451dSKonrad Dybcio { P_CAMCC_PLL2_OUT_EARLY, 3 }, 277*80f5451dSKonrad Dybcio }; 278*80f5451dSKonrad Dybcio 279*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_3[] = { 280*80f5451dSKonrad Dybcio { .fw_name = "bi_tcxo" }, 281*80f5451dSKonrad Dybcio { .hw = &camcc_pll2_out_early.hw }, 282*80f5451dSKonrad Dybcio }; 283*80f5451dSKonrad Dybcio 284*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_4[] = { 285*80f5451dSKonrad Dybcio { P_BI_TCXO, 0 }, 286*80f5451dSKonrad Dybcio { P_CAMCC_PLL0_OUT_MAIN, 1 }, 287*80f5451dSKonrad Dybcio { P_CAMCC_PLL1_OUT_EVEN, 3 }, 288*80f5451dSKonrad Dybcio }; 289*80f5451dSKonrad Dybcio 290*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_4[] = { 291*80f5451dSKonrad Dybcio { .fw_name = "bi_tcxo" }, 292*80f5451dSKonrad Dybcio { .hw = &camcc_pll0.clkr.hw }, 293*80f5451dSKonrad Dybcio { .hw = &camcc_pll1_out_even.clkr.hw }, 294*80f5451dSKonrad Dybcio }; 295*80f5451dSKonrad Dybcio 296*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_5[] = { 297*80f5451dSKonrad Dybcio { P_BI_TCXO, 0 }, 298*80f5451dSKonrad Dybcio { P_CAMCC_PLL0_OUT_MAIN, 1 }, 299*80f5451dSKonrad Dybcio { P_CAMCC_PLL1_OUT_EVEN, 3 }, 300*80f5451dSKonrad Dybcio { P_CAMCC_PLL3_OUT_MAIN, 5 }, 301*80f5451dSKonrad Dybcio }; 302*80f5451dSKonrad Dybcio 303*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_5[] = { 304*80f5451dSKonrad Dybcio { .fw_name = "bi_tcxo" }, 305*80f5451dSKonrad Dybcio { .hw = &camcc_pll0.clkr.hw }, 306*80f5451dSKonrad Dybcio { .hw = &camcc_pll1_out_even.clkr.hw }, 307*80f5451dSKonrad Dybcio { .hw = &camcc_pll3.clkr.hw }, 308*80f5451dSKonrad Dybcio }; 309*80f5451dSKonrad Dybcio 310*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_6[] = { 311*80f5451dSKonrad Dybcio { P_BI_TCXO, 0 }, 312*80f5451dSKonrad Dybcio { P_CAMCC_PLL0_OUT_MAIN, 1 }, 313*80f5451dSKonrad Dybcio { P_CAMCC_PLL2_OUT_MAIN, 4 }, 314*80f5451dSKonrad Dybcio }; 315*80f5451dSKonrad Dybcio 316*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_6[] = { 317*80f5451dSKonrad Dybcio { .fw_name = "bi_tcxo" }, 318*80f5451dSKonrad Dybcio { .hw = &camcc_pll0.clkr.hw }, 319*80f5451dSKonrad Dybcio { .hw = &camcc_pll2_out_main.clkr.hw }, 320*80f5451dSKonrad Dybcio }; 321*80f5451dSKonrad Dybcio 322*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_7[] = { 323*80f5451dSKonrad Dybcio { P_BI_TCXO, 0 }, 324*80f5451dSKonrad Dybcio { P_CAMCC_PLL0_OUT_MAIN, 1 }, 325*80f5451dSKonrad Dybcio { P_CAMCC_PLL1_OUT_MAIN, 2 }, 326*80f5451dSKonrad Dybcio { P_CAMCC_PLL2_OUT_MAIN, 4 }, 327*80f5451dSKonrad Dybcio }; 328*80f5451dSKonrad Dybcio 329*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_7[] = { 330*80f5451dSKonrad Dybcio { .fw_name = "bi_tcxo" }, 331*80f5451dSKonrad Dybcio { .hw = &camcc_pll0.clkr.hw }, 332*80f5451dSKonrad Dybcio { .hw = &camcc_pll1.clkr.hw }, 333*80f5451dSKonrad Dybcio { .hw = &camcc_pll2_out_main.clkr.hw }, 334*80f5451dSKonrad Dybcio }; 335*80f5451dSKonrad Dybcio 336*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_8[] = { 337*80f5451dSKonrad Dybcio { P_BI_TCXO, 0 }, 338*80f5451dSKonrad Dybcio { P_CAMCC_PLL0_OUT_MAIN, 1 }, 339*80f5451dSKonrad Dybcio { P_CAMCC_PLL1_OUT_MAIN, 2 }, 340*80f5451dSKonrad Dybcio }; 341*80f5451dSKonrad Dybcio 342*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_8[] = { 343*80f5451dSKonrad Dybcio { .fw_name = "bi_tcxo" }, 344*80f5451dSKonrad Dybcio { .hw = &camcc_pll0.clkr.hw }, 345*80f5451dSKonrad Dybcio { .hw = &camcc_pll1.clkr.hw }, 346*80f5451dSKonrad Dybcio }; 347*80f5451dSKonrad Dybcio 348*80f5451dSKonrad Dybcio static const struct parent_map camcc_parent_map_9[] = { 349*80f5451dSKonrad Dybcio { P_BI_TCXO, 0 }, 350*80f5451dSKonrad Dybcio { P_CAMCC_PLL2_OUT_MAIN, 4 }, 351*80f5451dSKonrad Dybcio }; 352*80f5451dSKonrad Dybcio 353*80f5451dSKonrad Dybcio static const struct clk_parent_data camcc_parent_data_9[] = { 354*80f5451dSKonrad Dybcio { .fw_name = "bi_tcxo" }, 355*80f5451dSKonrad Dybcio { .hw = &camcc_pll2_out_main.clkr.hw }, 356*80f5451dSKonrad Dybcio }; 357*80f5451dSKonrad Dybcio 358*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_bps_clk_src[] = { 359*80f5451dSKonrad Dybcio F(200000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0), 360*80f5451dSKonrad Dybcio F(320000000, P_CAMCC_PLL2_OUT_MAIN, 1.5, 0, 0), 361*80f5451dSKonrad Dybcio F(404000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0), 362*80f5451dSKonrad Dybcio F(480000000, P_CAMCC_PLL2_OUT_MAIN, 1, 0, 0), 363*80f5451dSKonrad Dybcio F(600000000, P_CAMCC_PLL0_OUT_MAIN, 1, 0, 0), 364*80f5451dSKonrad Dybcio { } 365*80f5451dSKonrad Dybcio }; 366*80f5451dSKonrad Dybcio 367*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_bps_clk_src = { 368*80f5451dSKonrad Dybcio .cmd_rcgr = 0x6010, 369*80f5451dSKonrad Dybcio .mnd_width = 0, 370*80f5451dSKonrad Dybcio .hid_width = 5, 371*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_1, 372*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_bps_clk_src, 373*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 374*80f5451dSKonrad Dybcio .name = "camcc_bps_clk_src", 375*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_1, 376*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_1), 377*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 378*80f5451dSKonrad Dybcio }, 379*80f5451dSKonrad Dybcio }; 380*80f5451dSKonrad Dybcio 381*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_cci_0_clk_src[] = { 382*80f5451dSKonrad Dybcio F(37500000, P_CAMCC_PLL0_OUT_EVEN, 8, 0, 0), 383*80f5451dSKonrad Dybcio F(50000000, P_CAMCC_PLL0_OUT_EVEN, 6, 0, 0), 384*80f5451dSKonrad Dybcio F(100000000, P_CAMCC_PLL0_OUT_EVEN, 3, 0, 0), 385*80f5451dSKonrad Dybcio { } 386*80f5451dSKonrad Dybcio }; 387*80f5451dSKonrad Dybcio 388*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_cci_0_clk_src = { 389*80f5451dSKonrad Dybcio .cmd_rcgr = 0xf004, 390*80f5451dSKonrad Dybcio .mnd_width = 8, 391*80f5451dSKonrad Dybcio .hid_width = 5, 392*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_0, 393*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_cci_0_clk_src, 394*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 395*80f5451dSKonrad Dybcio .name = "camcc_cci_0_clk_src", 396*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_0, 397*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_0), 398*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 399*80f5451dSKonrad Dybcio }, 400*80f5451dSKonrad Dybcio }; 401*80f5451dSKonrad Dybcio 402*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_cci_1_clk_src = { 403*80f5451dSKonrad Dybcio .cmd_rcgr = 0x10004, 404*80f5451dSKonrad Dybcio .mnd_width = 8, 405*80f5451dSKonrad Dybcio .hid_width = 5, 406*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_0, 407*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_cci_0_clk_src, 408*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 409*80f5451dSKonrad Dybcio .name = "camcc_cci_1_clk_src", 410*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_0, 411*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_0), 412*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 413*80f5451dSKonrad Dybcio }, 414*80f5451dSKonrad Dybcio }; 415*80f5451dSKonrad Dybcio 416*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_cphy_rx_clk_src[] = { 417*80f5451dSKonrad Dybcio F(150000000, P_CAMCC_PLL0_OUT_MAIN, 4, 0, 0), 418*80f5451dSKonrad Dybcio F(300000000, P_CAMCC_PLL0_OUT_MAIN, 2, 0, 0), 419*80f5451dSKonrad Dybcio F(384000000, P_CAMCC_PLL3_OUT_MAIN, 1, 0, 0), 420*80f5451dSKonrad Dybcio F(400000000, P_CAMCC_PLL0_OUT_MAIN, 1.5, 0, 0), 421*80f5451dSKonrad Dybcio { } 422*80f5451dSKonrad Dybcio }; 423*80f5451dSKonrad Dybcio 424*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_cphy_rx_clk_src = { 425*80f5451dSKonrad Dybcio .cmd_rcgr = 0x9064, 426*80f5451dSKonrad Dybcio .mnd_width = 0, 427*80f5451dSKonrad Dybcio .hid_width = 5, 428*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_2, 429*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_cphy_rx_clk_src, 430*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 431*80f5451dSKonrad Dybcio .name = "camcc_cphy_rx_clk_src", 432*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_2, 433*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_2), 434*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 435*80f5451dSKonrad Dybcio }, 436*80f5451dSKonrad Dybcio }; 437*80f5451dSKonrad Dybcio 438*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_csi0phytimer_clk_src[] = { 439*80f5451dSKonrad Dybcio F(300000000, P_CAMCC_PLL0_OUT_EVEN, 1, 0, 0), 440*80f5451dSKonrad Dybcio { } 441*80f5451dSKonrad Dybcio }; 442*80f5451dSKonrad Dybcio 443*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_csi0phytimer_clk_src = { 444*80f5451dSKonrad Dybcio .cmd_rcgr = 0x5004, 445*80f5451dSKonrad Dybcio .mnd_width = 0, 446*80f5451dSKonrad Dybcio .hid_width = 5, 447*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_0, 448*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_csi0phytimer_clk_src, 449*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 450*80f5451dSKonrad Dybcio .name = "camcc_csi0phytimer_clk_src", 451*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_0, 452*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_0), 453*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 454*80f5451dSKonrad Dybcio }, 455*80f5451dSKonrad Dybcio }; 456*80f5451dSKonrad Dybcio 457*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_csi1phytimer_clk_src = { 458*80f5451dSKonrad Dybcio .cmd_rcgr = 0x5028, 459*80f5451dSKonrad Dybcio .mnd_width = 0, 460*80f5451dSKonrad Dybcio .hid_width = 5, 461*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_0, 462*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_csi0phytimer_clk_src, 463*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 464*80f5451dSKonrad Dybcio .name = "camcc_csi1phytimer_clk_src", 465*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_0, 466*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_0), 467*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 468*80f5451dSKonrad Dybcio }, 469*80f5451dSKonrad Dybcio }; 470*80f5451dSKonrad Dybcio 471*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_csi2phytimer_clk_src = { 472*80f5451dSKonrad Dybcio .cmd_rcgr = 0x504c, 473*80f5451dSKonrad Dybcio .mnd_width = 0, 474*80f5451dSKonrad Dybcio .hid_width = 5, 475*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_0, 476*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_csi0phytimer_clk_src, 477*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 478*80f5451dSKonrad Dybcio .name = "camcc_csi2phytimer_clk_src", 479*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_0, 480*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_0), 481*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 482*80f5451dSKonrad Dybcio }, 483*80f5451dSKonrad Dybcio }; 484*80f5451dSKonrad Dybcio 485*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_csi3phytimer_clk_src = { 486*80f5451dSKonrad Dybcio .cmd_rcgr = 0x5070, 487*80f5451dSKonrad Dybcio .mnd_width = 0, 488*80f5451dSKonrad Dybcio .hid_width = 5, 489*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_0, 490*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_csi0phytimer_clk_src, 491*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 492*80f5451dSKonrad Dybcio .name = "camcc_csi3phytimer_clk_src", 493*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_0, 494*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_0), 495*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 496*80f5451dSKonrad Dybcio }, 497*80f5451dSKonrad Dybcio }; 498*80f5451dSKonrad Dybcio 499*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_fast_ahb_clk_src[] = { 500*80f5451dSKonrad Dybcio F(100000000, P_CAMCC_PLL0_OUT_MAIN, 6, 0, 0), 501*80f5451dSKonrad Dybcio F(200000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0), 502*80f5451dSKonrad Dybcio F(300000000, P_CAMCC_PLL0_OUT_MAIN, 2, 0, 0), 503*80f5451dSKonrad Dybcio F(404000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0), 504*80f5451dSKonrad Dybcio { } 505*80f5451dSKonrad Dybcio }; 506*80f5451dSKonrad Dybcio 507*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_fast_ahb_clk_src = { 508*80f5451dSKonrad Dybcio .cmd_rcgr = 0x603c, 509*80f5451dSKonrad Dybcio .mnd_width = 0, 510*80f5451dSKonrad Dybcio .hid_width = 5, 511*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_4, 512*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_fast_ahb_clk_src, 513*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 514*80f5451dSKonrad Dybcio .name = "camcc_fast_ahb_clk_src", 515*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_4, 516*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_4), 517*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 518*80f5451dSKonrad Dybcio }, 519*80f5451dSKonrad Dybcio }; 520*80f5451dSKonrad Dybcio 521*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_icp_clk_src[] = { 522*80f5451dSKonrad Dybcio F(240000000, P_CAMCC_PLL0_OUT_MAIN, 2.5, 0, 0), 523*80f5451dSKonrad Dybcio F(384000000, P_CAMCC_PLL3_OUT_MAIN, 1, 0, 0), 524*80f5451dSKonrad Dybcio F(404000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0), 525*80f5451dSKonrad Dybcio F(600000000, P_CAMCC_PLL0_OUT_MAIN, 1, 0, 0), 526*80f5451dSKonrad Dybcio { } 527*80f5451dSKonrad Dybcio }; 528*80f5451dSKonrad Dybcio 529*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_icp_clk_src = { 530*80f5451dSKonrad Dybcio .cmd_rcgr = 0xe014, 531*80f5451dSKonrad Dybcio .mnd_width = 0, 532*80f5451dSKonrad Dybcio .hid_width = 5, 533*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_5, 534*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_icp_clk_src, 535*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 536*80f5451dSKonrad Dybcio .name = "camcc_icp_clk_src", 537*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_5, 538*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_5), 539*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 540*80f5451dSKonrad Dybcio }, 541*80f5451dSKonrad Dybcio }; 542*80f5451dSKonrad Dybcio 543*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_ife_0_clk_src[] = { 544*80f5451dSKonrad Dybcio F(240000000, P_CAMCC_PLL0_OUT_MAIN, 2.5, 0, 0), 545*80f5451dSKonrad Dybcio F(320000000, P_CAMCC_PLL2_OUT_MAIN, 1.5, 0, 0), 546*80f5451dSKonrad Dybcio F(404000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0), 547*80f5451dSKonrad Dybcio F(480000000, P_CAMCC_PLL2_OUT_MAIN, 1, 0, 0), 548*80f5451dSKonrad Dybcio F(600000000, P_CAMCC_PLL0_OUT_MAIN, 1, 0, 0), 549*80f5451dSKonrad Dybcio { } 550*80f5451dSKonrad Dybcio }; 551*80f5451dSKonrad Dybcio 552*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_0_clk_src = { 553*80f5451dSKonrad Dybcio .cmd_rcgr = 0x9010, 554*80f5451dSKonrad Dybcio .mnd_width = 0, 555*80f5451dSKonrad Dybcio .hid_width = 5, 556*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_1, 557*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_ife_0_clk_src, 558*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 559*80f5451dSKonrad Dybcio .name = "camcc_ife_0_clk_src", 560*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_1, 561*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_1), 562*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 563*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 564*80f5451dSKonrad Dybcio }, 565*80f5451dSKonrad Dybcio }; 566*80f5451dSKonrad Dybcio 567*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_0_csid_clk_src = { 568*80f5451dSKonrad Dybcio .cmd_rcgr = 0x903c, 569*80f5451dSKonrad Dybcio .mnd_width = 0, 570*80f5451dSKonrad Dybcio .hid_width = 5, 571*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_2, 572*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_cphy_rx_clk_src, 573*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 574*80f5451dSKonrad Dybcio .name = "camcc_ife_0_csid_clk_src", 575*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_2, 576*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_2), 577*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 578*80f5451dSKonrad Dybcio }, 579*80f5451dSKonrad Dybcio }; 580*80f5451dSKonrad Dybcio 581*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_1_clk_src = { 582*80f5451dSKonrad Dybcio .cmd_rcgr = 0xa010, 583*80f5451dSKonrad Dybcio .mnd_width = 0, 584*80f5451dSKonrad Dybcio .hid_width = 5, 585*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_1, 586*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_ife_0_clk_src, 587*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 588*80f5451dSKonrad Dybcio .name = "camcc_ife_1_clk_src", 589*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_1, 590*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_1), 591*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 592*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 593*80f5451dSKonrad Dybcio }, 594*80f5451dSKonrad Dybcio }; 595*80f5451dSKonrad Dybcio 596*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_1_csid_clk_src = { 597*80f5451dSKonrad Dybcio .cmd_rcgr = 0xa034, 598*80f5451dSKonrad Dybcio .mnd_width = 0, 599*80f5451dSKonrad Dybcio .hid_width = 5, 600*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_2, 601*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_cphy_rx_clk_src, 602*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 603*80f5451dSKonrad Dybcio .name = "camcc_ife_1_csid_clk_src", 604*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_2, 605*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_2), 606*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 607*80f5451dSKonrad Dybcio }, 608*80f5451dSKonrad Dybcio }; 609*80f5451dSKonrad Dybcio 610*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_2_clk_src = { 611*80f5451dSKonrad Dybcio .cmd_rcgr = 0xb00c, 612*80f5451dSKonrad Dybcio .mnd_width = 0, 613*80f5451dSKonrad Dybcio .hid_width = 5, 614*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_1, 615*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_ife_0_clk_src, 616*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 617*80f5451dSKonrad Dybcio .name = "camcc_ife_2_clk_src", 618*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_1, 619*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_1), 620*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 621*80f5451dSKonrad Dybcio }, 622*80f5451dSKonrad Dybcio }; 623*80f5451dSKonrad Dybcio 624*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_2_csid_clk_src = { 625*80f5451dSKonrad Dybcio .cmd_rcgr = 0xb030, 626*80f5451dSKonrad Dybcio .mnd_width = 0, 627*80f5451dSKonrad Dybcio .hid_width = 5, 628*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_2, 629*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_cphy_rx_clk_src, 630*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 631*80f5451dSKonrad Dybcio .name = "camcc_ife_2_csid_clk_src", 632*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_2, 633*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_2), 634*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 635*80f5451dSKonrad Dybcio }, 636*80f5451dSKonrad Dybcio }; 637*80f5451dSKonrad Dybcio 638*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_ife_lite_clk_src[] = { 639*80f5451dSKonrad Dybcio F(320000000, P_CAMCC_PLL2_OUT_MAIN, 1.5, 0, 0), 640*80f5451dSKonrad Dybcio F(400000000, P_CAMCC_PLL0_OUT_MAIN, 1.5, 0, 0), 641*80f5451dSKonrad Dybcio F(480000000, P_CAMCC_PLL2_OUT_MAIN, 1, 0, 0), 642*80f5451dSKonrad Dybcio F(600000000, P_CAMCC_PLL0_OUT_MAIN, 1, 0, 0), 643*80f5451dSKonrad Dybcio { } 644*80f5451dSKonrad Dybcio }; 645*80f5451dSKonrad Dybcio 646*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_lite_clk_src = { 647*80f5451dSKonrad Dybcio .cmd_rcgr = 0xc004, 648*80f5451dSKonrad Dybcio .mnd_width = 0, 649*80f5451dSKonrad Dybcio .hid_width = 5, 650*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_6, 651*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_ife_lite_clk_src, 652*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 653*80f5451dSKonrad Dybcio .name = "camcc_ife_lite_clk_src", 654*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_6, 655*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_6), 656*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 657*80f5451dSKonrad Dybcio }, 658*80f5451dSKonrad Dybcio }; 659*80f5451dSKonrad Dybcio 660*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ife_lite_csid_clk_src = { 661*80f5451dSKonrad Dybcio .cmd_rcgr = 0xc024, 662*80f5451dSKonrad Dybcio .mnd_width = 0, 663*80f5451dSKonrad Dybcio .hid_width = 5, 664*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_2, 665*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_cphy_rx_clk_src, 666*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 667*80f5451dSKonrad Dybcio .name = "camcc_ife_lite_csid_clk_src", 668*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_2, 669*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_2), 670*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 671*80f5451dSKonrad Dybcio }, 672*80f5451dSKonrad Dybcio }; 673*80f5451dSKonrad Dybcio 674*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_ipe_0_clk_src[] = { 675*80f5451dSKonrad Dybcio F(240000000, P_CAMCC_PLL2_OUT_MAIN, 2, 0, 0), 676*80f5451dSKonrad Dybcio F(320000000, P_CAMCC_PLL2_OUT_MAIN, 1.5, 0, 0), 677*80f5451dSKonrad Dybcio F(404000000, P_CAMCC_PLL1_OUT_MAIN, 2, 0, 0), 678*80f5451dSKonrad Dybcio F(538666667, P_CAMCC_PLL1_OUT_MAIN, 1.5, 0, 0), 679*80f5451dSKonrad Dybcio F(600000000, P_CAMCC_PLL0_OUT_MAIN, 1, 0, 0), 680*80f5451dSKonrad Dybcio { } 681*80f5451dSKonrad Dybcio }; 682*80f5451dSKonrad Dybcio 683*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_ipe_0_clk_src = { 684*80f5451dSKonrad Dybcio .cmd_rcgr = 0x7010, 685*80f5451dSKonrad Dybcio .mnd_width = 0, 686*80f5451dSKonrad Dybcio .hid_width = 5, 687*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_7, 688*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_ipe_0_clk_src, 689*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 690*80f5451dSKonrad Dybcio .name = "camcc_ipe_0_clk_src", 691*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_7, 692*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_7), 693*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 694*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 695*80f5451dSKonrad Dybcio }, 696*80f5451dSKonrad Dybcio }; 697*80f5451dSKonrad Dybcio 698*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_jpeg_clk_src[] = { 699*80f5451dSKonrad Dybcio F(66666667, P_CAMCC_PLL0_OUT_MAIN, 9, 0, 0), 700*80f5451dSKonrad Dybcio F(133333333, P_CAMCC_PLL0_OUT_MAIN, 4.5, 0, 0), 701*80f5451dSKonrad Dybcio F(200000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0), 702*80f5451dSKonrad Dybcio F(404000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0), 703*80f5451dSKonrad Dybcio F(480000000, P_CAMCC_PLL2_OUT_MAIN, 1, 0, 0), 704*80f5451dSKonrad Dybcio F(600000000, P_CAMCC_PLL0_OUT_MAIN, 1, 0, 0), 705*80f5451dSKonrad Dybcio { } 706*80f5451dSKonrad Dybcio }; 707*80f5451dSKonrad Dybcio 708*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_jpeg_clk_src = { 709*80f5451dSKonrad Dybcio .cmd_rcgr = 0xd004, 710*80f5451dSKonrad Dybcio .mnd_width = 0, 711*80f5451dSKonrad Dybcio .hid_width = 5, 712*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_1, 713*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_jpeg_clk_src, 714*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 715*80f5451dSKonrad Dybcio .name = "camcc_jpeg_clk_src", 716*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_1, 717*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_1), 718*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 719*80f5451dSKonrad Dybcio }, 720*80f5451dSKonrad Dybcio }; 721*80f5451dSKonrad Dybcio 722*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_lrme_clk_src[] = { 723*80f5451dSKonrad Dybcio F(200000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0), 724*80f5451dSKonrad Dybcio F(269333333, P_CAMCC_PLL1_OUT_MAIN, 3, 0, 0), 725*80f5451dSKonrad Dybcio F(323200000, P_CAMCC_PLL1_OUT_MAIN, 2.5, 0, 0), 726*80f5451dSKonrad Dybcio F(404000000, P_CAMCC_PLL1_OUT_MAIN, 2, 0, 0), 727*80f5451dSKonrad Dybcio { } 728*80f5451dSKonrad Dybcio }; 729*80f5451dSKonrad Dybcio 730*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_lrme_clk_src = { 731*80f5451dSKonrad Dybcio .cmd_rcgr = 0x11004, 732*80f5451dSKonrad Dybcio .mnd_width = 0, 733*80f5451dSKonrad Dybcio .hid_width = 5, 734*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_8, 735*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_lrme_clk_src, 736*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 737*80f5451dSKonrad Dybcio .name = "camcc_lrme_clk_src", 738*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_8, 739*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_8), 740*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 741*80f5451dSKonrad Dybcio }, 742*80f5451dSKonrad Dybcio }; 743*80f5451dSKonrad Dybcio 744*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_mclk0_clk_src[] = { 745*80f5451dSKonrad Dybcio F(19200000, P_CAMCC_PLL2_OUT_EARLY, 1, 1, 50), 746*80f5451dSKonrad Dybcio F(24000000, P_CAMCC_PLL2_OUT_EARLY, 10, 1, 4), 747*80f5451dSKonrad Dybcio F(64000000, P_CAMCC_PLL2_OUT_EARLY, 15, 0, 0), 748*80f5451dSKonrad Dybcio { } 749*80f5451dSKonrad Dybcio }; 750*80f5451dSKonrad Dybcio 751*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_mclk0_clk_src = { 752*80f5451dSKonrad Dybcio .cmd_rcgr = 0x4004, 753*80f5451dSKonrad Dybcio .mnd_width = 8, 754*80f5451dSKonrad Dybcio .hid_width = 5, 755*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_3, 756*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_mclk0_clk_src, 757*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 758*80f5451dSKonrad Dybcio .name = "camcc_mclk0_clk_src", 759*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_3, 760*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_3), 761*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 762*80f5451dSKonrad Dybcio }, 763*80f5451dSKonrad Dybcio }; 764*80f5451dSKonrad Dybcio 765*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_mclk1_clk_src = { 766*80f5451dSKonrad Dybcio .cmd_rcgr = 0x4024, 767*80f5451dSKonrad Dybcio .mnd_width = 8, 768*80f5451dSKonrad Dybcio .hid_width = 5, 769*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_3, 770*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_mclk0_clk_src, 771*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 772*80f5451dSKonrad Dybcio .name = "camcc_mclk1_clk_src", 773*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_3, 774*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_3), 775*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 776*80f5451dSKonrad Dybcio }, 777*80f5451dSKonrad Dybcio }; 778*80f5451dSKonrad Dybcio 779*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_mclk2_clk_src = { 780*80f5451dSKonrad Dybcio .cmd_rcgr = 0x4044, 781*80f5451dSKonrad Dybcio .mnd_width = 8, 782*80f5451dSKonrad Dybcio .hid_width = 5, 783*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_3, 784*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_mclk0_clk_src, 785*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 786*80f5451dSKonrad Dybcio .name = "camcc_mclk2_clk_src", 787*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_3, 788*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_3), 789*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 790*80f5451dSKonrad Dybcio }, 791*80f5451dSKonrad Dybcio }; 792*80f5451dSKonrad Dybcio 793*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_mclk3_clk_src = { 794*80f5451dSKonrad Dybcio .cmd_rcgr = 0x4064, 795*80f5451dSKonrad Dybcio .mnd_width = 8, 796*80f5451dSKonrad Dybcio .hid_width = 5, 797*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_3, 798*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_mclk0_clk_src, 799*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 800*80f5451dSKonrad Dybcio .name = "camcc_mclk3_clk_src", 801*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_3, 802*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_3), 803*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 804*80f5451dSKonrad Dybcio }, 805*80f5451dSKonrad Dybcio }; 806*80f5451dSKonrad Dybcio 807*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_mclk4_clk_src = { 808*80f5451dSKonrad Dybcio .cmd_rcgr = 0x4084, 809*80f5451dSKonrad Dybcio .mnd_width = 8, 810*80f5451dSKonrad Dybcio .hid_width = 5, 811*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_3, 812*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_mclk0_clk_src, 813*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 814*80f5451dSKonrad Dybcio .name = "camcc_mclk4_clk_src", 815*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_3, 816*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_3), 817*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 818*80f5451dSKonrad Dybcio }, 819*80f5451dSKonrad Dybcio }; 820*80f5451dSKonrad Dybcio 821*80f5451dSKonrad Dybcio static const struct freq_tbl ftbl_camcc_slow_ahb_clk_src[] = { 822*80f5451dSKonrad Dybcio F(80000000, P_CAMCC_PLL2_OUT_MAIN, 6, 0, 0), 823*80f5451dSKonrad Dybcio { } 824*80f5451dSKonrad Dybcio }; 825*80f5451dSKonrad Dybcio 826*80f5451dSKonrad Dybcio static struct clk_rcg2 camcc_slow_ahb_clk_src = { 827*80f5451dSKonrad Dybcio .cmd_rcgr = 0x6058, 828*80f5451dSKonrad Dybcio .mnd_width = 0, 829*80f5451dSKonrad Dybcio .hid_width = 5, 830*80f5451dSKonrad Dybcio .parent_map = camcc_parent_map_9, 831*80f5451dSKonrad Dybcio .freq_tbl = ftbl_camcc_slow_ahb_clk_src, 832*80f5451dSKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){ 833*80f5451dSKonrad Dybcio .name = "camcc_slow_ahb_clk_src", 834*80f5451dSKonrad Dybcio .parent_data = camcc_parent_data_9, 835*80f5451dSKonrad Dybcio .num_parents = ARRAY_SIZE(camcc_parent_data_9), 836*80f5451dSKonrad Dybcio .ops = &clk_rcg2_ops, 837*80f5451dSKonrad Dybcio }, 838*80f5451dSKonrad Dybcio }; 839*80f5451dSKonrad Dybcio 840*80f5451dSKonrad Dybcio static struct clk_branch camcc_bps_ahb_clk = { 841*80f5451dSKonrad Dybcio .halt_reg = 0x6070, 842*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 843*80f5451dSKonrad Dybcio .clkr = { 844*80f5451dSKonrad Dybcio .enable_reg = 0x6070, 845*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 846*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 847*80f5451dSKonrad Dybcio .name = "camcc_bps_ahb_clk", 848*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 849*80f5451dSKonrad Dybcio &camcc_slow_ahb_clk_src.clkr.hw 850*80f5451dSKonrad Dybcio }, 851*80f5451dSKonrad Dybcio .num_parents = 1, 852*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 853*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 854*80f5451dSKonrad Dybcio }, 855*80f5451dSKonrad Dybcio }, 856*80f5451dSKonrad Dybcio }; 857*80f5451dSKonrad Dybcio 858*80f5451dSKonrad Dybcio static struct clk_branch camcc_bps_areg_clk = { 859*80f5451dSKonrad Dybcio .halt_reg = 0x6054, 860*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 861*80f5451dSKonrad Dybcio .clkr = { 862*80f5451dSKonrad Dybcio .enable_reg = 0x6054, 863*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 864*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 865*80f5451dSKonrad Dybcio .name = "camcc_bps_areg_clk", 866*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 867*80f5451dSKonrad Dybcio &camcc_fast_ahb_clk_src.clkr.hw 868*80f5451dSKonrad Dybcio }, 869*80f5451dSKonrad Dybcio .num_parents = 1, 870*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 871*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 872*80f5451dSKonrad Dybcio }, 873*80f5451dSKonrad Dybcio }, 874*80f5451dSKonrad Dybcio }; 875*80f5451dSKonrad Dybcio 876*80f5451dSKonrad Dybcio static struct clk_branch camcc_bps_axi_clk = { 877*80f5451dSKonrad Dybcio .halt_reg = 0x6038, 878*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 879*80f5451dSKonrad Dybcio .clkr = { 880*80f5451dSKonrad Dybcio .enable_reg = 0x6038, 881*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 882*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 883*80f5451dSKonrad Dybcio .name = "camcc_bps_axi_clk", 884*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 885*80f5451dSKonrad Dybcio }, 886*80f5451dSKonrad Dybcio }, 887*80f5451dSKonrad Dybcio }; 888*80f5451dSKonrad Dybcio 889*80f5451dSKonrad Dybcio static struct clk_branch camcc_bps_clk = { 890*80f5451dSKonrad Dybcio .halt_reg = 0x6028, 891*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 892*80f5451dSKonrad Dybcio .clkr = { 893*80f5451dSKonrad Dybcio .enable_reg = 0x6028, 894*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 895*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 896*80f5451dSKonrad Dybcio .name = "camcc_bps_clk", 897*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 898*80f5451dSKonrad Dybcio &camcc_bps_clk_src.clkr.hw 899*80f5451dSKonrad Dybcio }, 900*80f5451dSKonrad Dybcio .num_parents = 1, 901*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 902*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 903*80f5451dSKonrad Dybcio }, 904*80f5451dSKonrad Dybcio }, 905*80f5451dSKonrad Dybcio }; 906*80f5451dSKonrad Dybcio 907*80f5451dSKonrad Dybcio static struct clk_branch camcc_camnoc_axi_clk = { 908*80f5451dSKonrad Dybcio .halt_reg = 0x13004, 909*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 910*80f5451dSKonrad Dybcio .clkr = { 911*80f5451dSKonrad Dybcio .enable_reg = 0x13004, 912*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 913*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 914*80f5451dSKonrad Dybcio .name = "camcc_camnoc_axi_clk", 915*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 916*80f5451dSKonrad Dybcio }, 917*80f5451dSKonrad Dybcio }, 918*80f5451dSKonrad Dybcio }; 919*80f5451dSKonrad Dybcio 920*80f5451dSKonrad Dybcio static struct clk_branch camcc_cci_0_clk = { 921*80f5451dSKonrad Dybcio .halt_reg = 0xf01c, 922*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 923*80f5451dSKonrad Dybcio .clkr = { 924*80f5451dSKonrad Dybcio .enable_reg = 0xf01c, 925*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 926*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 927*80f5451dSKonrad Dybcio .name = "camcc_cci_0_clk", 928*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 929*80f5451dSKonrad Dybcio &camcc_cci_0_clk_src.clkr.hw 930*80f5451dSKonrad Dybcio }, 931*80f5451dSKonrad Dybcio .num_parents = 1, 932*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 933*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 934*80f5451dSKonrad Dybcio }, 935*80f5451dSKonrad Dybcio }, 936*80f5451dSKonrad Dybcio }; 937*80f5451dSKonrad Dybcio 938*80f5451dSKonrad Dybcio static struct clk_branch camcc_cci_1_clk = { 939*80f5451dSKonrad Dybcio .halt_reg = 0x1001c, 940*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 941*80f5451dSKonrad Dybcio .clkr = { 942*80f5451dSKonrad Dybcio .enable_reg = 0x1001c, 943*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 944*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 945*80f5451dSKonrad Dybcio .name = "camcc_cci_1_clk", 946*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 947*80f5451dSKonrad Dybcio &camcc_cci_1_clk_src.clkr.hw 948*80f5451dSKonrad Dybcio }, 949*80f5451dSKonrad Dybcio .num_parents = 1, 950*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 951*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 952*80f5451dSKonrad Dybcio }, 953*80f5451dSKonrad Dybcio }, 954*80f5451dSKonrad Dybcio }; 955*80f5451dSKonrad Dybcio 956*80f5451dSKonrad Dybcio static struct clk_branch camcc_core_ahb_clk = { 957*80f5451dSKonrad Dybcio .halt_reg = 0x14010, 958*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT_VOTED, 959*80f5451dSKonrad Dybcio .clkr = { 960*80f5451dSKonrad Dybcio .enable_reg = 0x14010, 961*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 962*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 963*80f5451dSKonrad Dybcio .name = "camcc_core_ahb_clk", 964*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 965*80f5451dSKonrad Dybcio &camcc_slow_ahb_clk_src.clkr.hw 966*80f5451dSKonrad Dybcio }, 967*80f5451dSKonrad Dybcio .num_parents = 1, 968*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 969*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 970*80f5451dSKonrad Dybcio }, 971*80f5451dSKonrad Dybcio }, 972*80f5451dSKonrad Dybcio }; 973*80f5451dSKonrad Dybcio 974*80f5451dSKonrad Dybcio static struct clk_branch camcc_cpas_ahb_clk = { 975*80f5451dSKonrad Dybcio .halt_reg = 0x12004, 976*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 977*80f5451dSKonrad Dybcio .clkr = { 978*80f5451dSKonrad Dybcio .enable_reg = 0x12004, 979*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 980*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 981*80f5451dSKonrad Dybcio .name = "camcc_cpas_ahb_clk", 982*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 983*80f5451dSKonrad Dybcio &camcc_slow_ahb_clk_src.clkr.hw 984*80f5451dSKonrad Dybcio }, 985*80f5451dSKonrad Dybcio .num_parents = 1, 986*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 987*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 988*80f5451dSKonrad Dybcio }, 989*80f5451dSKonrad Dybcio }, 990*80f5451dSKonrad Dybcio }; 991*80f5451dSKonrad Dybcio 992*80f5451dSKonrad Dybcio static struct clk_branch camcc_csi0phytimer_clk = { 993*80f5451dSKonrad Dybcio .halt_reg = 0x501c, 994*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 995*80f5451dSKonrad Dybcio .clkr = { 996*80f5451dSKonrad Dybcio .enable_reg = 0x501c, 997*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 998*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 999*80f5451dSKonrad Dybcio .name = "camcc_csi0phytimer_clk", 1000*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1001*80f5451dSKonrad Dybcio &camcc_csi0phytimer_clk_src.clkr.hw 1002*80f5451dSKonrad Dybcio }, 1003*80f5451dSKonrad Dybcio .num_parents = 1, 1004*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1005*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1006*80f5451dSKonrad Dybcio }, 1007*80f5451dSKonrad Dybcio }, 1008*80f5451dSKonrad Dybcio }; 1009*80f5451dSKonrad Dybcio 1010*80f5451dSKonrad Dybcio static struct clk_branch camcc_csi1phytimer_clk = { 1011*80f5451dSKonrad Dybcio .halt_reg = 0x5040, 1012*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1013*80f5451dSKonrad Dybcio .clkr = { 1014*80f5451dSKonrad Dybcio .enable_reg = 0x5040, 1015*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1016*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1017*80f5451dSKonrad Dybcio .name = "camcc_csi1phytimer_clk", 1018*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1019*80f5451dSKonrad Dybcio &camcc_csi1phytimer_clk_src.clkr.hw 1020*80f5451dSKonrad Dybcio }, 1021*80f5451dSKonrad Dybcio .num_parents = 1, 1022*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1023*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1024*80f5451dSKonrad Dybcio }, 1025*80f5451dSKonrad Dybcio }, 1026*80f5451dSKonrad Dybcio }; 1027*80f5451dSKonrad Dybcio 1028*80f5451dSKonrad Dybcio static struct clk_branch camcc_csi2phytimer_clk = { 1029*80f5451dSKonrad Dybcio .halt_reg = 0x5064, 1030*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1031*80f5451dSKonrad Dybcio .clkr = { 1032*80f5451dSKonrad Dybcio .enable_reg = 0x5064, 1033*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1034*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1035*80f5451dSKonrad Dybcio .name = "camcc_csi2phytimer_clk", 1036*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1037*80f5451dSKonrad Dybcio &camcc_csi2phytimer_clk_src.clkr.hw 1038*80f5451dSKonrad Dybcio }, 1039*80f5451dSKonrad Dybcio .num_parents = 1, 1040*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1041*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1042*80f5451dSKonrad Dybcio }, 1043*80f5451dSKonrad Dybcio }, 1044*80f5451dSKonrad Dybcio }; 1045*80f5451dSKonrad Dybcio 1046*80f5451dSKonrad Dybcio static struct clk_branch camcc_csi3phytimer_clk = { 1047*80f5451dSKonrad Dybcio .halt_reg = 0x5088, 1048*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1049*80f5451dSKonrad Dybcio .clkr = { 1050*80f5451dSKonrad Dybcio .enable_reg = 0x5088, 1051*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1052*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1053*80f5451dSKonrad Dybcio .name = "camcc_csi3phytimer_clk", 1054*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1055*80f5451dSKonrad Dybcio &camcc_csi3phytimer_clk_src.clkr.hw 1056*80f5451dSKonrad Dybcio }, 1057*80f5451dSKonrad Dybcio .num_parents = 1, 1058*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1059*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1060*80f5451dSKonrad Dybcio }, 1061*80f5451dSKonrad Dybcio }, 1062*80f5451dSKonrad Dybcio }; 1063*80f5451dSKonrad Dybcio 1064*80f5451dSKonrad Dybcio static struct clk_branch camcc_csiphy0_clk = { 1065*80f5451dSKonrad Dybcio .halt_reg = 0x5020, 1066*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1067*80f5451dSKonrad Dybcio .clkr = { 1068*80f5451dSKonrad Dybcio .enable_reg = 0x5020, 1069*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1070*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1071*80f5451dSKonrad Dybcio .name = "camcc_csiphy0_clk", 1072*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1073*80f5451dSKonrad Dybcio &camcc_cphy_rx_clk_src.clkr.hw 1074*80f5451dSKonrad Dybcio }, 1075*80f5451dSKonrad Dybcio .num_parents = 1, 1076*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1077*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1078*80f5451dSKonrad Dybcio }, 1079*80f5451dSKonrad Dybcio }, 1080*80f5451dSKonrad Dybcio }; 1081*80f5451dSKonrad Dybcio 1082*80f5451dSKonrad Dybcio static struct clk_branch camcc_csiphy1_clk = { 1083*80f5451dSKonrad Dybcio .halt_reg = 0x5044, 1084*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1085*80f5451dSKonrad Dybcio .clkr = { 1086*80f5451dSKonrad Dybcio .enable_reg = 0x5044, 1087*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1088*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1089*80f5451dSKonrad Dybcio .name = "camcc_csiphy1_clk", 1090*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1091*80f5451dSKonrad Dybcio &camcc_cphy_rx_clk_src.clkr.hw 1092*80f5451dSKonrad Dybcio }, 1093*80f5451dSKonrad Dybcio .num_parents = 1, 1094*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1095*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1096*80f5451dSKonrad Dybcio }, 1097*80f5451dSKonrad Dybcio }, 1098*80f5451dSKonrad Dybcio }; 1099*80f5451dSKonrad Dybcio 1100*80f5451dSKonrad Dybcio static struct clk_branch camcc_csiphy2_clk = { 1101*80f5451dSKonrad Dybcio .halt_reg = 0x5068, 1102*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1103*80f5451dSKonrad Dybcio .clkr = { 1104*80f5451dSKonrad Dybcio .enable_reg = 0x5068, 1105*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1106*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1107*80f5451dSKonrad Dybcio .name = "camcc_csiphy2_clk", 1108*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1109*80f5451dSKonrad Dybcio &camcc_cphy_rx_clk_src.clkr.hw 1110*80f5451dSKonrad Dybcio }, 1111*80f5451dSKonrad Dybcio .num_parents = 1, 1112*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1113*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1114*80f5451dSKonrad Dybcio }, 1115*80f5451dSKonrad Dybcio }, 1116*80f5451dSKonrad Dybcio }; 1117*80f5451dSKonrad Dybcio 1118*80f5451dSKonrad Dybcio static struct clk_branch camcc_csiphy3_clk = { 1119*80f5451dSKonrad Dybcio .halt_reg = 0x508c, 1120*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1121*80f5451dSKonrad Dybcio .clkr = { 1122*80f5451dSKonrad Dybcio .enable_reg = 0x508c, 1123*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1124*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1125*80f5451dSKonrad Dybcio .name = "camcc_csiphy3_clk", 1126*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1127*80f5451dSKonrad Dybcio &camcc_cphy_rx_clk_src.clkr.hw 1128*80f5451dSKonrad Dybcio }, 1129*80f5451dSKonrad Dybcio .num_parents = 1, 1130*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1131*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1132*80f5451dSKonrad Dybcio }, 1133*80f5451dSKonrad Dybcio }, 1134*80f5451dSKonrad Dybcio }; 1135*80f5451dSKonrad Dybcio 1136*80f5451dSKonrad Dybcio static struct clk_branch camcc_icp_clk = { 1137*80f5451dSKonrad Dybcio .halt_reg = 0xe02c, 1138*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1139*80f5451dSKonrad Dybcio .clkr = { 1140*80f5451dSKonrad Dybcio .enable_reg = 0xe02c, 1141*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1142*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1143*80f5451dSKonrad Dybcio .name = "camcc_icp_clk", 1144*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1145*80f5451dSKonrad Dybcio &camcc_icp_clk_src.clkr.hw 1146*80f5451dSKonrad Dybcio }, 1147*80f5451dSKonrad Dybcio .num_parents = 1, 1148*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1149*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1150*80f5451dSKonrad Dybcio }, 1151*80f5451dSKonrad Dybcio }, 1152*80f5451dSKonrad Dybcio }; 1153*80f5451dSKonrad Dybcio 1154*80f5451dSKonrad Dybcio static struct clk_branch camcc_icp_ts_clk = { 1155*80f5451dSKonrad Dybcio .halt_reg = 0xe00c, 1156*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1157*80f5451dSKonrad Dybcio .clkr = { 1158*80f5451dSKonrad Dybcio .enable_reg = 0xe00c, 1159*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1160*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1161*80f5451dSKonrad Dybcio .name = "camcc_icp_ts_clk", 1162*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1163*80f5451dSKonrad Dybcio }, 1164*80f5451dSKonrad Dybcio }, 1165*80f5451dSKonrad Dybcio }; 1166*80f5451dSKonrad Dybcio 1167*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_0_axi_clk = { 1168*80f5451dSKonrad Dybcio .halt_reg = 0x9080, 1169*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1170*80f5451dSKonrad Dybcio .clkr = { 1171*80f5451dSKonrad Dybcio .enable_reg = 0x9080, 1172*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1173*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1174*80f5451dSKonrad Dybcio .name = "camcc_ife_0_axi_clk", 1175*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1176*80f5451dSKonrad Dybcio }, 1177*80f5451dSKonrad Dybcio }, 1178*80f5451dSKonrad Dybcio }; 1179*80f5451dSKonrad Dybcio 1180*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_0_clk = { 1181*80f5451dSKonrad Dybcio .halt_reg = 0x9028, 1182*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1183*80f5451dSKonrad Dybcio .clkr = { 1184*80f5451dSKonrad Dybcio .enable_reg = 0x9028, 1185*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1186*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1187*80f5451dSKonrad Dybcio .name = "camcc_ife_0_clk", 1188*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1189*80f5451dSKonrad Dybcio &camcc_ife_0_clk_src.clkr.hw 1190*80f5451dSKonrad Dybcio }, 1191*80f5451dSKonrad Dybcio .num_parents = 1, 1192*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1193*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1194*80f5451dSKonrad Dybcio }, 1195*80f5451dSKonrad Dybcio }, 1196*80f5451dSKonrad Dybcio }; 1197*80f5451dSKonrad Dybcio 1198*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_0_cphy_rx_clk = { 1199*80f5451dSKonrad Dybcio .halt_reg = 0x907c, 1200*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1201*80f5451dSKonrad Dybcio .clkr = { 1202*80f5451dSKonrad Dybcio .enable_reg = 0x907c, 1203*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1204*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1205*80f5451dSKonrad Dybcio .name = "camcc_ife_0_cphy_rx_clk", 1206*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1207*80f5451dSKonrad Dybcio &camcc_cphy_rx_clk_src.clkr.hw 1208*80f5451dSKonrad Dybcio }, 1209*80f5451dSKonrad Dybcio .num_parents = 1, 1210*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1211*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1212*80f5451dSKonrad Dybcio }, 1213*80f5451dSKonrad Dybcio }, 1214*80f5451dSKonrad Dybcio }; 1215*80f5451dSKonrad Dybcio 1216*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_0_csid_clk = { 1217*80f5451dSKonrad Dybcio .halt_reg = 0x9054, 1218*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1219*80f5451dSKonrad Dybcio .clkr = { 1220*80f5451dSKonrad Dybcio .enable_reg = 0x9054, 1221*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1222*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1223*80f5451dSKonrad Dybcio .name = "camcc_ife_0_csid_clk", 1224*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1225*80f5451dSKonrad Dybcio &camcc_ife_0_csid_clk_src.clkr.hw 1226*80f5451dSKonrad Dybcio }, 1227*80f5451dSKonrad Dybcio .num_parents = 1, 1228*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1229*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1230*80f5451dSKonrad Dybcio }, 1231*80f5451dSKonrad Dybcio }, 1232*80f5451dSKonrad Dybcio }; 1233*80f5451dSKonrad Dybcio 1234*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_0_dsp_clk = { 1235*80f5451dSKonrad Dybcio .halt_reg = 0x9038, 1236*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1237*80f5451dSKonrad Dybcio .clkr = { 1238*80f5451dSKonrad Dybcio .enable_reg = 0x9038, 1239*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1240*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1241*80f5451dSKonrad Dybcio .name = "camcc_ife_0_dsp_clk", 1242*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1243*80f5451dSKonrad Dybcio &camcc_ife_0_clk_src.clkr.hw 1244*80f5451dSKonrad Dybcio }, 1245*80f5451dSKonrad Dybcio .num_parents = 1, 1246*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1247*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1248*80f5451dSKonrad Dybcio }, 1249*80f5451dSKonrad Dybcio }, 1250*80f5451dSKonrad Dybcio }; 1251*80f5451dSKonrad Dybcio 1252*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_1_axi_clk = { 1253*80f5451dSKonrad Dybcio .halt_reg = 0xa058, 1254*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1255*80f5451dSKonrad Dybcio .clkr = { 1256*80f5451dSKonrad Dybcio .enable_reg = 0xa058, 1257*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1258*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1259*80f5451dSKonrad Dybcio .name = "camcc_ife_1_axi_clk", 1260*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1261*80f5451dSKonrad Dybcio }, 1262*80f5451dSKonrad Dybcio }, 1263*80f5451dSKonrad Dybcio }; 1264*80f5451dSKonrad Dybcio 1265*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_1_clk = { 1266*80f5451dSKonrad Dybcio .halt_reg = 0xa028, 1267*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1268*80f5451dSKonrad Dybcio .clkr = { 1269*80f5451dSKonrad Dybcio .enable_reg = 0xa028, 1270*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1271*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1272*80f5451dSKonrad Dybcio .name = "camcc_ife_1_clk", 1273*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1274*80f5451dSKonrad Dybcio &camcc_ife_1_clk_src.clkr.hw 1275*80f5451dSKonrad Dybcio }, 1276*80f5451dSKonrad Dybcio .num_parents = 1, 1277*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1278*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1279*80f5451dSKonrad Dybcio }, 1280*80f5451dSKonrad Dybcio }, 1281*80f5451dSKonrad Dybcio }; 1282*80f5451dSKonrad Dybcio 1283*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_1_cphy_rx_clk = { 1284*80f5451dSKonrad Dybcio .halt_reg = 0xa054, 1285*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1286*80f5451dSKonrad Dybcio .clkr = { 1287*80f5451dSKonrad Dybcio .enable_reg = 0xa054, 1288*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1289*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1290*80f5451dSKonrad Dybcio .name = "camcc_ife_1_cphy_rx_clk", 1291*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1292*80f5451dSKonrad Dybcio &camcc_cphy_rx_clk_src.clkr.hw 1293*80f5451dSKonrad Dybcio }, 1294*80f5451dSKonrad Dybcio .num_parents = 1, 1295*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1296*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1297*80f5451dSKonrad Dybcio }, 1298*80f5451dSKonrad Dybcio }, 1299*80f5451dSKonrad Dybcio }; 1300*80f5451dSKonrad Dybcio 1301*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_1_csid_clk = { 1302*80f5451dSKonrad Dybcio .halt_reg = 0xa04c, 1303*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1304*80f5451dSKonrad Dybcio .clkr = { 1305*80f5451dSKonrad Dybcio .enable_reg = 0xa04c, 1306*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1307*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1308*80f5451dSKonrad Dybcio .name = "camcc_ife_1_csid_clk", 1309*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1310*80f5451dSKonrad Dybcio &camcc_ife_1_csid_clk_src.clkr.hw 1311*80f5451dSKonrad Dybcio }, 1312*80f5451dSKonrad Dybcio .num_parents = 1, 1313*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1314*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1315*80f5451dSKonrad Dybcio }, 1316*80f5451dSKonrad Dybcio }, 1317*80f5451dSKonrad Dybcio }; 1318*80f5451dSKonrad Dybcio 1319*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_1_dsp_clk = { 1320*80f5451dSKonrad Dybcio .halt_reg = 0xa030, 1321*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1322*80f5451dSKonrad Dybcio .clkr = { 1323*80f5451dSKonrad Dybcio .enable_reg = 0xa030, 1324*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1325*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1326*80f5451dSKonrad Dybcio .name = "camcc_ife_1_dsp_clk", 1327*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1328*80f5451dSKonrad Dybcio &camcc_ife_1_clk_src.clkr.hw 1329*80f5451dSKonrad Dybcio }, 1330*80f5451dSKonrad Dybcio .num_parents = 1, 1331*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1332*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1333*80f5451dSKonrad Dybcio }, 1334*80f5451dSKonrad Dybcio }, 1335*80f5451dSKonrad Dybcio }; 1336*80f5451dSKonrad Dybcio 1337*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_2_axi_clk = { 1338*80f5451dSKonrad Dybcio .halt_reg = 0xb054, 1339*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1340*80f5451dSKonrad Dybcio .clkr = { 1341*80f5451dSKonrad Dybcio .enable_reg = 0xb054, 1342*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1343*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1344*80f5451dSKonrad Dybcio .name = "camcc_ife_2_axi_clk", 1345*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1346*80f5451dSKonrad Dybcio }, 1347*80f5451dSKonrad Dybcio }, 1348*80f5451dSKonrad Dybcio }; 1349*80f5451dSKonrad Dybcio 1350*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_2_clk = { 1351*80f5451dSKonrad Dybcio .halt_reg = 0xb024, 1352*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1353*80f5451dSKonrad Dybcio .clkr = { 1354*80f5451dSKonrad Dybcio .enable_reg = 0xb024, 1355*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1356*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1357*80f5451dSKonrad Dybcio .name = "camcc_ife_2_clk", 1358*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1359*80f5451dSKonrad Dybcio &camcc_ife_2_clk_src.clkr.hw 1360*80f5451dSKonrad Dybcio }, 1361*80f5451dSKonrad Dybcio .num_parents = 1, 1362*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1363*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1364*80f5451dSKonrad Dybcio }, 1365*80f5451dSKonrad Dybcio }, 1366*80f5451dSKonrad Dybcio }; 1367*80f5451dSKonrad Dybcio 1368*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_2_cphy_rx_clk = { 1369*80f5451dSKonrad Dybcio .halt_reg = 0xb050, 1370*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1371*80f5451dSKonrad Dybcio .clkr = { 1372*80f5451dSKonrad Dybcio .enable_reg = 0xb050, 1373*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1374*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1375*80f5451dSKonrad Dybcio .name = "camcc_ife_2_cphy_rx_clk", 1376*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1377*80f5451dSKonrad Dybcio &camcc_cphy_rx_clk_src.clkr.hw 1378*80f5451dSKonrad Dybcio }, 1379*80f5451dSKonrad Dybcio .num_parents = 1, 1380*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1381*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1382*80f5451dSKonrad Dybcio }, 1383*80f5451dSKonrad Dybcio }, 1384*80f5451dSKonrad Dybcio }; 1385*80f5451dSKonrad Dybcio 1386*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_2_csid_clk = { 1387*80f5451dSKonrad Dybcio .halt_reg = 0xb048, 1388*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1389*80f5451dSKonrad Dybcio .clkr = { 1390*80f5451dSKonrad Dybcio .enable_reg = 0xb048, 1391*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1392*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1393*80f5451dSKonrad Dybcio .name = "camcc_ife_2_csid_clk", 1394*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1395*80f5451dSKonrad Dybcio &camcc_ife_2_csid_clk_src.clkr.hw 1396*80f5451dSKonrad Dybcio }, 1397*80f5451dSKonrad Dybcio .num_parents = 1, 1398*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1399*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1400*80f5451dSKonrad Dybcio }, 1401*80f5451dSKonrad Dybcio }, 1402*80f5451dSKonrad Dybcio }; 1403*80f5451dSKonrad Dybcio 1404*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_2_dsp_clk = { 1405*80f5451dSKonrad Dybcio .halt_reg = 0xb02c, 1406*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1407*80f5451dSKonrad Dybcio .clkr = { 1408*80f5451dSKonrad Dybcio .enable_reg = 0xb02c, 1409*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1410*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1411*80f5451dSKonrad Dybcio .name = "camcc_ife_2_dsp_clk", 1412*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1413*80f5451dSKonrad Dybcio &camcc_ife_2_clk_src.clkr.hw 1414*80f5451dSKonrad Dybcio }, 1415*80f5451dSKonrad Dybcio .num_parents = 1, 1416*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1417*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1418*80f5451dSKonrad Dybcio }, 1419*80f5451dSKonrad Dybcio }, 1420*80f5451dSKonrad Dybcio }; 1421*80f5451dSKonrad Dybcio 1422*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_lite_clk = { 1423*80f5451dSKonrad Dybcio .halt_reg = 0xc01c, 1424*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1425*80f5451dSKonrad Dybcio .clkr = { 1426*80f5451dSKonrad Dybcio .enable_reg = 0xc01c, 1427*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1428*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1429*80f5451dSKonrad Dybcio .name = "camcc_ife_lite_clk", 1430*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1431*80f5451dSKonrad Dybcio &camcc_ife_lite_clk_src.clkr.hw 1432*80f5451dSKonrad Dybcio }, 1433*80f5451dSKonrad Dybcio .num_parents = 1, 1434*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1435*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1436*80f5451dSKonrad Dybcio }, 1437*80f5451dSKonrad Dybcio }, 1438*80f5451dSKonrad Dybcio }; 1439*80f5451dSKonrad Dybcio 1440*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_lite_cphy_rx_clk = { 1441*80f5451dSKonrad Dybcio .halt_reg = 0xc044, 1442*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1443*80f5451dSKonrad Dybcio .clkr = { 1444*80f5451dSKonrad Dybcio .enable_reg = 0xc044, 1445*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1446*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1447*80f5451dSKonrad Dybcio .name = "camcc_ife_lite_cphy_rx_clk", 1448*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1449*80f5451dSKonrad Dybcio &camcc_cphy_rx_clk_src.clkr.hw 1450*80f5451dSKonrad Dybcio }, 1451*80f5451dSKonrad Dybcio .num_parents = 1, 1452*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1453*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1454*80f5451dSKonrad Dybcio }, 1455*80f5451dSKonrad Dybcio }, 1456*80f5451dSKonrad Dybcio }; 1457*80f5451dSKonrad Dybcio 1458*80f5451dSKonrad Dybcio static struct clk_branch camcc_ife_lite_csid_clk = { 1459*80f5451dSKonrad Dybcio .halt_reg = 0xc03c, 1460*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1461*80f5451dSKonrad Dybcio .clkr = { 1462*80f5451dSKonrad Dybcio .enable_reg = 0xc03c, 1463*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1464*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1465*80f5451dSKonrad Dybcio .name = "camcc_ife_lite_csid_clk", 1466*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1467*80f5451dSKonrad Dybcio &camcc_ife_lite_csid_clk_src.clkr.hw 1468*80f5451dSKonrad Dybcio }, 1469*80f5451dSKonrad Dybcio .num_parents = 1, 1470*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1471*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1472*80f5451dSKonrad Dybcio }, 1473*80f5451dSKonrad Dybcio }, 1474*80f5451dSKonrad Dybcio }; 1475*80f5451dSKonrad Dybcio 1476*80f5451dSKonrad Dybcio static struct clk_branch camcc_ipe_0_ahb_clk = { 1477*80f5451dSKonrad Dybcio .halt_reg = 0x7040, 1478*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1479*80f5451dSKonrad Dybcio .clkr = { 1480*80f5451dSKonrad Dybcio .enable_reg = 0x7040, 1481*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1482*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1483*80f5451dSKonrad Dybcio .name = "camcc_ipe_0_ahb_clk", 1484*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1485*80f5451dSKonrad Dybcio &camcc_slow_ahb_clk_src.clkr.hw 1486*80f5451dSKonrad Dybcio }, 1487*80f5451dSKonrad Dybcio .num_parents = 1, 1488*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1489*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1490*80f5451dSKonrad Dybcio }, 1491*80f5451dSKonrad Dybcio }, 1492*80f5451dSKonrad Dybcio }; 1493*80f5451dSKonrad Dybcio 1494*80f5451dSKonrad Dybcio static struct clk_branch camcc_ipe_0_areg_clk = { 1495*80f5451dSKonrad Dybcio .halt_reg = 0x703c, 1496*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1497*80f5451dSKonrad Dybcio .clkr = { 1498*80f5451dSKonrad Dybcio .enable_reg = 0x703c, 1499*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1500*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1501*80f5451dSKonrad Dybcio .name = "camcc_ipe_0_areg_clk", 1502*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1503*80f5451dSKonrad Dybcio &camcc_fast_ahb_clk_src.clkr.hw 1504*80f5451dSKonrad Dybcio }, 1505*80f5451dSKonrad Dybcio .num_parents = 1, 1506*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1507*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1508*80f5451dSKonrad Dybcio }, 1509*80f5451dSKonrad Dybcio }, 1510*80f5451dSKonrad Dybcio }; 1511*80f5451dSKonrad Dybcio 1512*80f5451dSKonrad Dybcio static struct clk_branch camcc_ipe_0_axi_clk = { 1513*80f5451dSKonrad Dybcio .halt_reg = 0x7038, 1514*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1515*80f5451dSKonrad Dybcio .clkr = { 1516*80f5451dSKonrad Dybcio .enable_reg = 0x7038, 1517*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1518*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1519*80f5451dSKonrad Dybcio .name = "camcc_ipe_0_axi_clk", 1520*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1521*80f5451dSKonrad Dybcio }, 1522*80f5451dSKonrad Dybcio }, 1523*80f5451dSKonrad Dybcio }; 1524*80f5451dSKonrad Dybcio 1525*80f5451dSKonrad Dybcio static struct clk_branch camcc_ipe_0_clk = { 1526*80f5451dSKonrad Dybcio .halt_reg = 0x7028, 1527*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1528*80f5451dSKonrad Dybcio .clkr = { 1529*80f5451dSKonrad Dybcio .enable_reg = 0x7028, 1530*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1531*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1532*80f5451dSKonrad Dybcio .name = "camcc_ipe_0_clk", 1533*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1534*80f5451dSKonrad Dybcio &camcc_ipe_0_clk_src.clkr.hw 1535*80f5451dSKonrad Dybcio }, 1536*80f5451dSKonrad Dybcio .num_parents = 1, 1537*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1538*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1539*80f5451dSKonrad Dybcio }, 1540*80f5451dSKonrad Dybcio }, 1541*80f5451dSKonrad Dybcio }; 1542*80f5451dSKonrad Dybcio 1543*80f5451dSKonrad Dybcio static struct clk_branch camcc_jpeg_clk = { 1544*80f5451dSKonrad Dybcio .halt_reg = 0xd01c, 1545*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1546*80f5451dSKonrad Dybcio .clkr = { 1547*80f5451dSKonrad Dybcio .enable_reg = 0xd01c, 1548*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1549*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1550*80f5451dSKonrad Dybcio .name = "camcc_jpeg_clk", 1551*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1552*80f5451dSKonrad Dybcio &camcc_jpeg_clk_src.clkr.hw 1553*80f5451dSKonrad Dybcio }, 1554*80f5451dSKonrad Dybcio .num_parents = 1, 1555*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1556*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1557*80f5451dSKonrad Dybcio }, 1558*80f5451dSKonrad Dybcio }, 1559*80f5451dSKonrad Dybcio }; 1560*80f5451dSKonrad Dybcio 1561*80f5451dSKonrad Dybcio static struct clk_branch camcc_lrme_clk = { 1562*80f5451dSKonrad Dybcio .halt_reg = 0x1101c, 1563*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1564*80f5451dSKonrad Dybcio .clkr = { 1565*80f5451dSKonrad Dybcio .enable_reg = 0x1101c, 1566*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1567*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1568*80f5451dSKonrad Dybcio .name = "camcc_lrme_clk", 1569*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1570*80f5451dSKonrad Dybcio &camcc_lrme_clk_src.clkr.hw 1571*80f5451dSKonrad Dybcio }, 1572*80f5451dSKonrad Dybcio .num_parents = 1, 1573*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1574*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1575*80f5451dSKonrad Dybcio }, 1576*80f5451dSKonrad Dybcio }, 1577*80f5451dSKonrad Dybcio }; 1578*80f5451dSKonrad Dybcio 1579*80f5451dSKonrad Dybcio static struct clk_branch camcc_mclk0_clk = { 1580*80f5451dSKonrad Dybcio .halt_reg = 0x401c, 1581*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1582*80f5451dSKonrad Dybcio .clkr = { 1583*80f5451dSKonrad Dybcio .enable_reg = 0x401c, 1584*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1585*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1586*80f5451dSKonrad Dybcio .name = "camcc_mclk0_clk", 1587*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1588*80f5451dSKonrad Dybcio &camcc_mclk0_clk_src.clkr.hw 1589*80f5451dSKonrad Dybcio }, 1590*80f5451dSKonrad Dybcio .num_parents = 1, 1591*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1592*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1593*80f5451dSKonrad Dybcio }, 1594*80f5451dSKonrad Dybcio }, 1595*80f5451dSKonrad Dybcio }; 1596*80f5451dSKonrad Dybcio 1597*80f5451dSKonrad Dybcio static struct clk_branch camcc_mclk1_clk = { 1598*80f5451dSKonrad Dybcio .halt_reg = 0x403c, 1599*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1600*80f5451dSKonrad Dybcio .clkr = { 1601*80f5451dSKonrad Dybcio .enable_reg = 0x403c, 1602*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1603*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1604*80f5451dSKonrad Dybcio .name = "camcc_mclk1_clk", 1605*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1606*80f5451dSKonrad Dybcio &camcc_mclk1_clk_src.clkr.hw 1607*80f5451dSKonrad Dybcio }, 1608*80f5451dSKonrad Dybcio .num_parents = 1, 1609*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1610*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1611*80f5451dSKonrad Dybcio }, 1612*80f5451dSKonrad Dybcio }, 1613*80f5451dSKonrad Dybcio }; 1614*80f5451dSKonrad Dybcio 1615*80f5451dSKonrad Dybcio static struct clk_branch camcc_mclk2_clk = { 1616*80f5451dSKonrad Dybcio .halt_reg = 0x405c, 1617*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1618*80f5451dSKonrad Dybcio .clkr = { 1619*80f5451dSKonrad Dybcio .enable_reg = 0x405c, 1620*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1621*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1622*80f5451dSKonrad Dybcio .name = "camcc_mclk2_clk", 1623*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1624*80f5451dSKonrad Dybcio &camcc_mclk2_clk_src.clkr.hw 1625*80f5451dSKonrad Dybcio }, 1626*80f5451dSKonrad Dybcio .num_parents = 1, 1627*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1628*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1629*80f5451dSKonrad Dybcio }, 1630*80f5451dSKonrad Dybcio }, 1631*80f5451dSKonrad Dybcio }; 1632*80f5451dSKonrad Dybcio 1633*80f5451dSKonrad Dybcio static struct clk_branch camcc_mclk3_clk = { 1634*80f5451dSKonrad Dybcio .halt_reg = 0x407c, 1635*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1636*80f5451dSKonrad Dybcio .clkr = { 1637*80f5451dSKonrad Dybcio .enable_reg = 0x407c, 1638*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1639*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1640*80f5451dSKonrad Dybcio .name = "camcc_mclk3_clk", 1641*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1642*80f5451dSKonrad Dybcio &camcc_mclk3_clk_src.clkr.hw 1643*80f5451dSKonrad Dybcio }, 1644*80f5451dSKonrad Dybcio .num_parents = 1, 1645*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1646*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1647*80f5451dSKonrad Dybcio }, 1648*80f5451dSKonrad Dybcio }, 1649*80f5451dSKonrad Dybcio }; 1650*80f5451dSKonrad Dybcio 1651*80f5451dSKonrad Dybcio static struct clk_branch camcc_mclk4_clk = { 1652*80f5451dSKonrad Dybcio .halt_reg = 0x409c, 1653*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1654*80f5451dSKonrad Dybcio .clkr = { 1655*80f5451dSKonrad Dybcio .enable_reg = 0x409c, 1656*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1657*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1658*80f5451dSKonrad Dybcio .name = "camcc_mclk4_clk", 1659*80f5451dSKonrad Dybcio .parent_hws = (const struct clk_hw*[]){ 1660*80f5451dSKonrad Dybcio &camcc_mclk4_clk_src.clkr.hw 1661*80f5451dSKonrad Dybcio }, 1662*80f5451dSKonrad Dybcio .num_parents = 1, 1663*80f5451dSKonrad Dybcio .flags = CLK_SET_RATE_PARENT, 1664*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1665*80f5451dSKonrad Dybcio }, 1666*80f5451dSKonrad Dybcio }, 1667*80f5451dSKonrad Dybcio }; 1668*80f5451dSKonrad Dybcio 1669*80f5451dSKonrad Dybcio static struct clk_branch camcc_soc_ahb_clk = { 1670*80f5451dSKonrad Dybcio .halt_reg = 0x1400c, 1671*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1672*80f5451dSKonrad Dybcio .clkr = { 1673*80f5451dSKonrad Dybcio .enable_reg = 0x1400c, 1674*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1675*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1676*80f5451dSKonrad Dybcio .name = "camcc_soc_ahb_clk", 1677*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1678*80f5451dSKonrad Dybcio }, 1679*80f5451dSKonrad Dybcio }, 1680*80f5451dSKonrad Dybcio }; 1681*80f5451dSKonrad Dybcio 1682*80f5451dSKonrad Dybcio static struct clk_branch camcc_sys_tmr_clk = { 1683*80f5451dSKonrad Dybcio .halt_reg = 0xe034, 1684*80f5451dSKonrad Dybcio .halt_check = BRANCH_HALT, 1685*80f5451dSKonrad Dybcio .clkr = { 1686*80f5451dSKonrad Dybcio .enable_reg = 0xe034, 1687*80f5451dSKonrad Dybcio .enable_mask = BIT(0), 1688*80f5451dSKonrad Dybcio .hw.init = &(struct clk_init_data){ 1689*80f5451dSKonrad Dybcio .name = "camcc_sys_tmr_clk", 1690*80f5451dSKonrad Dybcio .ops = &clk_branch2_ops, 1691*80f5451dSKonrad Dybcio }, 1692*80f5451dSKonrad Dybcio }, 1693*80f5451dSKonrad Dybcio }; 1694*80f5451dSKonrad Dybcio 1695*80f5451dSKonrad Dybcio static struct gdsc bps_gdsc = { 1696*80f5451dSKonrad Dybcio .gdscr = 0x6004, 1697*80f5451dSKonrad Dybcio .pd = { 1698*80f5451dSKonrad Dybcio .name = "bps_gdsc", 1699*80f5451dSKonrad Dybcio }, 1700*80f5451dSKonrad Dybcio .pwrsts = PWRSTS_OFF_ON, 1701*80f5451dSKonrad Dybcio .flags = VOTABLE, 1702*80f5451dSKonrad Dybcio }; 1703*80f5451dSKonrad Dybcio 1704*80f5451dSKonrad Dybcio static struct gdsc ipe_0_gdsc = { 1705*80f5451dSKonrad Dybcio .gdscr = 0x7004, 1706*80f5451dSKonrad Dybcio .pd = { 1707*80f5451dSKonrad Dybcio .name = "ipe_0_gdsc", 1708*80f5451dSKonrad Dybcio }, 1709*80f5451dSKonrad Dybcio .pwrsts = PWRSTS_OFF_ON, 1710*80f5451dSKonrad Dybcio .flags = VOTABLE, 1711*80f5451dSKonrad Dybcio }; 1712*80f5451dSKonrad Dybcio 1713*80f5451dSKonrad Dybcio static struct gdsc ife_0_gdsc = { 1714*80f5451dSKonrad Dybcio .gdscr = 0x9004, 1715*80f5451dSKonrad Dybcio .pd = { 1716*80f5451dSKonrad Dybcio .name = "ife_0_gdsc", 1717*80f5451dSKonrad Dybcio }, 1718*80f5451dSKonrad Dybcio .pwrsts = PWRSTS_OFF_ON, 1719*80f5451dSKonrad Dybcio }; 1720*80f5451dSKonrad Dybcio 1721*80f5451dSKonrad Dybcio static struct gdsc ife_1_gdsc = { 1722*80f5451dSKonrad Dybcio .gdscr = 0xa004, 1723*80f5451dSKonrad Dybcio .pd = { 1724*80f5451dSKonrad Dybcio .name = "ife_1_gdsc", 1725*80f5451dSKonrad Dybcio }, 1726*80f5451dSKonrad Dybcio .pwrsts = PWRSTS_OFF_ON, 1727*80f5451dSKonrad Dybcio }; 1728*80f5451dSKonrad Dybcio 1729*80f5451dSKonrad Dybcio static struct gdsc ife_2_gdsc = { 1730*80f5451dSKonrad Dybcio .gdscr = 0xb004, 1731*80f5451dSKonrad Dybcio .pd = { 1732*80f5451dSKonrad Dybcio .name = "ife_2_gdsc", 1733*80f5451dSKonrad Dybcio }, 1734*80f5451dSKonrad Dybcio .pwrsts = PWRSTS_OFF_ON, 1735*80f5451dSKonrad Dybcio }; 1736*80f5451dSKonrad Dybcio 1737*80f5451dSKonrad Dybcio static struct gdsc titan_top_gdsc = { 1738*80f5451dSKonrad Dybcio .gdscr = 0x14004, 1739*80f5451dSKonrad Dybcio .pd = { 1740*80f5451dSKonrad Dybcio .name = "titan_top_gdsc", 1741*80f5451dSKonrad Dybcio }, 1742*80f5451dSKonrad Dybcio .pwrsts = PWRSTS_OFF_ON, 1743*80f5451dSKonrad Dybcio }; 1744*80f5451dSKonrad Dybcio 1745*80f5451dSKonrad Dybcio struct clk_hw *camcc_sm6350_hws[] = { 1746*80f5451dSKonrad Dybcio [CAMCC_PLL2_OUT_EARLY] = &camcc_pll2_out_early.hw, 1747*80f5451dSKonrad Dybcio }; 1748*80f5451dSKonrad Dybcio 1749*80f5451dSKonrad Dybcio static struct clk_regmap *camcc_sm6350_clocks[] = { 1750*80f5451dSKonrad Dybcio [CAMCC_BPS_AHB_CLK] = &camcc_bps_ahb_clk.clkr, 1751*80f5451dSKonrad Dybcio [CAMCC_BPS_AREG_CLK] = &camcc_bps_areg_clk.clkr, 1752*80f5451dSKonrad Dybcio [CAMCC_BPS_AXI_CLK] = &camcc_bps_axi_clk.clkr, 1753*80f5451dSKonrad Dybcio [CAMCC_BPS_CLK] = &camcc_bps_clk.clkr, 1754*80f5451dSKonrad Dybcio [CAMCC_BPS_CLK_SRC] = &camcc_bps_clk_src.clkr, 1755*80f5451dSKonrad Dybcio [CAMCC_CAMNOC_AXI_CLK] = &camcc_camnoc_axi_clk.clkr, 1756*80f5451dSKonrad Dybcio [CAMCC_CCI_0_CLK] = &camcc_cci_0_clk.clkr, 1757*80f5451dSKonrad Dybcio [CAMCC_CCI_0_CLK_SRC] = &camcc_cci_0_clk_src.clkr, 1758*80f5451dSKonrad Dybcio [CAMCC_CCI_1_CLK] = &camcc_cci_1_clk.clkr, 1759*80f5451dSKonrad Dybcio [CAMCC_CCI_1_CLK_SRC] = &camcc_cci_1_clk_src.clkr, 1760*80f5451dSKonrad Dybcio [CAMCC_CORE_AHB_CLK] = &camcc_core_ahb_clk.clkr, 1761*80f5451dSKonrad Dybcio [CAMCC_CPAS_AHB_CLK] = &camcc_cpas_ahb_clk.clkr, 1762*80f5451dSKonrad Dybcio [CAMCC_CPHY_RX_CLK_SRC] = &camcc_cphy_rx_clk_src.clkr, 1763*80f5451dSKonrad Dybcio [CAMCC_CSI0PHYTIMER_CLK] = &camcc_csi0phytimer_clk.clkr, 1764*80f5451dSKonrad Dybcio [CAMCC_CSI0PHYTIMER_CLK_SRC] = &camcc_csi0phytimer_clk_src.clkr, 1765*80f5451dSKonrad Dybcio [CAMCC_CSI1PHYTIMER_CLK] = &camcc_csi1phytimer_clk.clkr, 1766*80f5451dSKonrad Dybcio [CAMCC_CSI1PHYTIMER_CLK_SRC] = &camcc_csi1phytimer_clk_src.clkr, 1767*80f5451dSKonrad Dybcio [CAMCC_CSI2PHYTIMER_CLK] = &camcc_csi2phytimer_clk.clkr, 1768*80f5451dSKonrad Dybcio [CAMCC_CSI2PHYTIMER_CLK_SRC] = &camcc_csi2phytimer_clk_src.clkr, 1769*80f5451dSKonrad Dybcio [CAMCC_CSI3PHYTIMER_CLK] = &camcc_csi3phytimer_clk.clkr, 1770*80f5451dSKonrad Dybcio [CAMCC_CSI3PHYTIMER_CLK_SRC] = &camcc_csi3phytimer_clk_src.clkr, 1771*80f5451dSKonrad Dybcio [CAMCC_CSIPHY0_CLK] = &camcc_csiphy0_clk.clkr, 1772*80f5451dSKonrad Dybcio [CAMCC_CSIPHY1_CLK] = &camcc_csiphy1_clk.clkr, 1773*80f5451dSKonrad Dybcio [CAMCC_CSIPHY2_CLK] = &camcc_csiphy2_clk.clkr, 1774*80f5451dSKonrad Dybcio [CAMCC_CSIPHY3_CLK] = &camcc_csiphy3_clk.clkr, 1775*80f5451dSKonrad Dybcio [CAMCC_FAST_AHB_CLK_SRC] = &camcc_fast_ahb_clk_src.clkr, 1776*80f5451dSKonrad Dybcio [CAMCC_ICP_CLK] = &camcc_icp_clk.clkr, 1777*80f5451dSKonrad Dybcio [CAMCC_ICP_CLK_SRC] = &camcc_icp_clk_src.clkr, 1778*80f5451dSKonrad Dybcio [CAMCC_ICP_TS_CLK] = &camcc_icp_ts_clk.clkr, 1779*80f5451dSKonrad Dybcio [CAMCC_IFE_0_AXI_CLK] = &camcc_ife_0_axi_clk.clkr, 1780*80f5451dSKonrad Dybcio [CAMCC_IFE_0_CLK] = &camcc_ife_0_clk.clkr, 1781*80f5451dSKonrad Dybcio [CAMCC_IFE_0_CLK_SRC] = &camcc_ife_0_clk_src.clkr, 1782*80f5451dSKonrad Dybcio [CAMCC_IFE_0_CPHY_RX_CLK] = &camcc_ife_0_cphy_rx_clk.clkr, 1783*80f5451dSKonrad Dybcio [CAMCC_IFE_0_CSID_CLK] = &camcc_ife_0_csid_clk.clkr, 1784*80f5451dSKonrad Dybcio [CAMCC_IFE_0_CSID_CLK_SRC] = &camcc_ife_0_csid_clk_src.clkr, 1785*80f5451dSKonrad Dybcio [CAMCC_IFE_0_DSP_CLK] = &camcc_ife_0_dsp_clk.clkr, 1786*80f5451dSKonrad Dybcio [CAMCC_IFE_1_AXI_CLK] = &camcc_ife_1_axi_clk.clkr, 1787*80f5451dSKonrad Dybcio [CAMCC_IFE_1_CLK] = &camcc_ife_1_clk.clkr, 1788*80f5451dSKonrad Dybcio [CAMCC_IFE_1_CLK_SRC] = &camcc_ife_1_clk_src.clkr, 1789*80f5451dSKonrad Dybcio [CAMCC_IFE_1_CPHY_RX_CLK] = &camcc_ife_1_cphy_rx_clk.clkr, 1790*80f5451dSKonrad Dybcio [CAMCC_IFE_1_CSID_CLK] = &camcc_ife_1_csid_clk.clkr, 1791*80f5451dSKonrad Dybcio [CAMCC_IFE_1_CSID_CLK_SRC] = &camcc_ife_1_csid_clk_src.clkr, 1792*80f5451dSKonrad Dybcio [CAMCC_IFE_1_DSP_CLK] = &camcc_ife_1_dsp_clk.clkr, 1793*80f5451dSKonrad Dybcio [CAMCC_IFE_2_AXI_CLK] = &camcc_ife_2_axi_clk.clkr, 1794*80f5451dSKonrad Dybcio [CAMCC_IFE_2_CLK] = &camcc_ife_2_clk.clkr, 1795*80f5451dSKonrad Dybcio [CAMCC_IFE_2_CLK_SRC] = &camcc_ife_2_clk_src.clkr, 1796*80f5451dSKonrad Dybcio [CAMCC_IFE_2_CPHY_RX_CLK] = &camcc_ife_2_cphy_rx_clk.clkr, 1797*80f5451dSKonrad Dybcio [CAMCC_IFE_2_CSID_CLK] = &camcc_ife_2_csid_clk.clkr, 1798*80f5451dSKonrad Dybcio [CAMCC_IFE_2_CSID_CLK_SRC] = &camcc_ife_2_csid_clk_src.clkr, 1799*80f5451dSKonrad Dybcio [CAMCC_IFE_2_DSP_CLK] = &camcc_ife_2_dsp_clk.clkr, 1800*80f5451dSKonrad Dybcio [CAMCC_IFE_LITE_CLK] = &camcc_ife_lite_clk.clkr, 1801*80f5451dSKonrad Dybcio [CAMCC_IFE_LITE_CLK_SRC] = &camcc_ife_lite_clk_src.clkr, 1802*80f5451dSKonrad Dybcio [CAMCC_IFE_LITE_CPHY_RX_CLK] = &camcc_ife_lite_cphy_rx_clk.clkr, 1803*80f5451dSKonrad Dybcio [CAMCC_IFE_LITE_CSID_CLK] = &camcc_ife_lite_csid_clk.clkr, 1804*80f5451dSKonrad Dybcio [CAMCC_IFE_LITE_CSID_CLK_SRC] = &camcc_ife_lite_csid_clk_src.clkr, 1805*80f5451dSKonrad Dybcio [CAMCC_IPE_0_AHB_CLK] = &camcc_ipe_0_ahb_clk.clkr, 1806*80f5451dSKonrad Dybcio [CAMCC_IPE_0_AREG_CLK] = &camcc_ipe_0_areg_clk.clkr, 1807*80f5451dSKonrad Dybcio [CAMCC_IPE_0_AXI_CLK] = &camcc_ipe_0_axi_clk.clkr, 1808*80f5451dSKonrad Dybcio [CAMCC_IPE_0_CLK] = &camcc_ipe_0_clk.clkr, 1809*80f5451dSKonrad Dybcio [CAMCC_IPE_0_CLK_SRC] = &camcc_ipe_0_clk_src.clkr, 1810*80f5451dSKonrad Dybcio [CAMCC_JPEG_CLK] = &camcc_jpeg_clk.clkr, 1811*80f5451dSKonrad Dybcio [CAMCC_JPEG_CLK_SRC] = &camcc_jpeg_clk_src.clkr, 1812*80f5451dSKonrad Dybcio [CAMCC_LRME_CLK] = &camcc_lrme_clk.clkr, 1813*80f5451dSKonrad Dybcio [CAMCC_LRME_CLK_SRC] = &camcc_lrme_clk_src.clkr, 1814*80f5451dSKonrad Dybcio [CAMCC_MCLK0_CLK] = &camcc_mclk0_clk.clkr, 1815*80f5451dSKonrad Dybcio [CAMCC_MCLK0_CLK_SRC] = &camcc_mclk0_clk_src.clkr, 1816*80f5451dSKonrad Dybcio [CAMCC_MCLK1_CLK] = &camcc_mclk1_clk.clkr, 1817*80f5451dSKonrad Dybcio [CAMCC_MCLK1_CLK_SRC] = &camcc_mclk1_clk_src.clkr, 1818*80f5451dSKonrad Dybcio [CAMCC_MCLK2_CLK] = &camcc_mclk2_clk.clkr, 1819*80f5451dSKonrad Dybcio [CAMCC_MCLK2_CLK_SRC] = &camcc_mclk2_clk_src.clkr, 1820*80f5451dSKonrad Dybcio [CAMCC_MCLK3_CLK] = &camcc_mclk3_clk.clkr, 1821*80f5451dSKonrad Dybcio [CAMCC_MCLK3_CLK_SRC] = &camcc_mclk3_clk_src.clkr, 1822*80f5451dSKonrad Dybcio [CAMCC_MCLK4_CLK] = &camcc_mclk4_clk.clkr, 1823*80f5451dSKonrad Dybcio [CAMCC_MCLK4_CLK_SRC] = &camcc_mclk4_clk_src.clkr, 1824*80f5451dSKonrad Dybcio [CAMCC_PLL0] = &camcc_pll0.clkr, 1825*80f5451dSKonrad Dybcio [CAMCC_PLL0_OUT_EVEN] = &camcc_pll0_out_even.clkr, 1826*80f5451dSKonrad Dybcio [CAMCC_PLL1] = &camcc_pll1.clkr, 1827*80f5451dSKonrad Dybcio [CAMCC_PLL1_OUT_EVEN] = &camcc_pll1_out_even.clkr, 1828*80f5451dSKonrad Dybcio [CAMCC_PLL2] = &camcc_pll2.clkr, 1829*80f5451dSKonrad Dybcio [CAMCC_PLL2_OUT_MAIN] = &camcc_pll2_out_main.clkr, 1830*80f5451dSKonrad Dybcio [CAMCC_PLL3] = &camcc_pll3.clkr, 1831*80f5451dSKonrad Dybcio [CAMCC_SLOW_AHB_CLK_SRC] = &camcc_slow_ahb_clk_src.clkr, 1832*80f5451dSKonrad Dybcio [CAMCC_SOC_AHB_CLK] = &camcc_soc_ahb_clk.clkr, 1833*80f5451dSKonrad Dybcio [CAMCC_SYS_TMR_CLK] = &camcc_sys_tmr_clk.clkr, 1834*80f5451dSKonrad Dybcio }; 1835*80f5451dSKonrad Dybcio 1836*80f5451dSKonrad Dybcio static struct gdsc *camcc_sm6350_gdscs[] = { 1837*80f5451dSKonrad Dybcio [BPS_GDSC] = &bps_gdsc, 1838*80f5451dSKonrad Dybcio [IPE_0_GDSC] = &ipe_0_gdsc, 1839*80f5451dSKonrad Dybcio [IFE_0_GDSC] = &ife_0_gdsc, 1840*80f5451dSKonrad Dybcio [IFE_1_GDSC] = &ife_1_gdsc, 1841*80f5451dSKonrad Dybcio [IFE_2_GDSC] = &ife_2_gdsc, 1842*80f5451dSKonrad Dybcio [TITAN_TOP_GDSC] = &titan_top_gdsc, 1843*80f5451dSKonrad Dybcio }; 1844*80f5451dSKonrad Dybcio 1845*80f5451dSKonrad Dybcio static const struct regmap_config camcc_sm6350_regmap_config = { 1846*80f5451dSKonrad Dybcio .reg_bits = 32, 1847*80f5451dSKonrad Dybcio .reg_stride = 4, 1848*80f5451dSKonrad Dybcio .val_bits = 32, 1849*80f5451dSKonrad Dybcio .max_register = 0x16000, 1850*80f5451dSKonrad Dybcio .fast_io = true, 1851*80f5451dSKonrad Dybcio }; 1852*80f5451dSKonrad Dybcio 1853*80f5451dSKonrad Dybcio static const struct qcom_cc_desc camcc_sm6350_desc = { 1854*80f5451dSKonrad Dybcio .config = &camcc_sm6350_regmap_config, 1855*80f5451dSKonrad Dybcio .clk_hws = camcc_sm6350_hws, 1856*80f5451dSKonrad Dybcio .num_clk_hws = ARRAY_SIZE(camcc_sm6350_hws), 1857*80f5451dSKonrad Dybcio .clks = camcc_sm6350_clocks, 1858*80f5451dSKonrad Dybcio .num_clks = ARRAY_SIZE(camcc_sm6350_clocks), 1859*80f5451dSKonrad Dybcio .gdscs = camcc_sm6350_gdscs, 1860*80f5451dSKonrad Dybcio .num_gdscs = ARRAY_SIZE(camcc_sm6350_gdscs), 1861*80f5451dSKonrad Dybcio }; 1862*80f5451dSKonrad Dybcio 1863*80f5451dSKonrad Dybcio static const struct of_device_id camcc_sm6350_match_table[] = { 1864*80f5451dSKonrad Dybcio { .compatible = "qcom,sm6350-camcc" }, 1865*80f5451dSKonrad Dybcio { } 1866*80f5451dSKonrad Dybcio }; 1867*80f5451dSKonrad Dybcio MODULE_DEVICE_TABLE(of, camcc_sm6350_match_table); 1868*80f5451dSKonrad Dybcio 1869*80f5451dSKonrad Dybcio static int camcc_sm6350_probe(struct platform_device *pdev) 1870*80f5451dSKonrad Dybcio { 1871*80f5451dSKonrad Dybcio struct regmap *regmap; 1872*80f5451dSKonrad Dybcio 1873*80f5451dSKonrad Dybcio regmap = qcom_cc_map(pdev, &camcc_sm6350_desc); 1874*80f5451dSKonrad Dybcio if (IS_ERR(regmap)) 1875*80f5451dSKonrad Dybcio return PTR_ERR(regmap); 1876*80f5451dSKonrad Dybcio 1877*80f5451dSKonrad Dybcio clk_fabia_pll_configure(&camcc_pll0, regmap, &camcc_pll0_config); 1878*80f5451dSKonrad Dybcio clk_fabia_pll_configure(&camcc_pll1, regmap, &camcc_pll1_config); 1879*80f5451dSKonrad Dybcio clk_agera_pll_configure(&camcc_pll2, regmap, &camcc_pll2_config); 1880*80f5451dSKonrad Dybcio clk_fabia_pll_configure(&camcc_pll3, regmap, &camcc_pll3_config); 1881*80f5451dSKonrad Dybcio 1882*80f5451dSKonrad Dybcio return qcom_cc_really_probe(pdev, &camcc_sm6350_desc, regmap); 1883*80f5451dSKonrad Dybcio } 1884*80f5451dSKonrad Dybcio 1885*80f5451dSKonrad Dybcio static struct platform_driver camcc_sm6350_driver = { 1886*80f5451dSKonrad Dybcio .probe = camcc_sm6350_probe, 1887*80f5451dSKonrad Dybcio .driver = { 1888*80f5451dSKonrad Dybcio .name = "sm6350-camcc", 1889*80f5451dSKonrad Dybcio .of_match_table = camcc_sm6350_match_table, 1890*80f5451dSKonrad Dybcio }, 1891*80f5451dSKonrad Dybcio }; 1892*80f5451dSKonrad Dybcio 1893*80f5451dSKonrad Dybcio static int __init camcc_sm6350_init(void) 1894*80f5451dSKonrad Dybcio { 1895*80f5451dSKonrad Dybcio return platform_driver_register(&camcc_sm6350_driver); 1896*80f5451dSKonrad Dybcio } 1897*80f5451dSKonrad Dybcio subsys_initcall(camcc_sm6350_init); 1898*80f5451dSKonrad Dybcio 1899*80f5451dSKonrad Dybcio static void __exit camcc_sm6350_exit(void) 1900*80f5451dSKonrad Dybcio { 1901*80f5451dSKonrad Dybcio platform_driver_unregister(&camcc_sm6350_driver); 1902*80f5451dSKonrad Dybcio } 1903*80f5451dSKonrad Dybcio module_exit(camcc_sm6350_exit); 1904*80f5451dSKonrad Dybcio 1905*80f5451dSKonrad Dybcio MODULE_DESCRIPTION("QTI CAMCC SM6350 Driver"); 1906*80f5451dSKonrad Dybcio MODULE_LICENSE("GPL"); 1907