1*9b47105fSTaniya Das // SPDX-License-Identifier: GPL-2.0-only 2*9b47105fSTaniya Das /* 3*9b47105fSTaniya Das * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved. 4*9b47105fSTaniya Das */ 5*9b47105fSTaniya Das 6*9b47105fSTaniya Das #include <linux/clk-provider.h> 7*9b47105fSTaniya Das #include <linux/module.h> 8*9b47105fSTaniya Das #include <linux/mod_devicetable.h> 9*9b47105fSTaniya Das #include <linux/of.h> 10*9b47105fSTaniya Das #include <linux/platform_device.h> 11*9b47105fSTaniya Das #include <linux/regmap.h> 12*9b47105fSTaniya Das 13*9b47105fSTaniya Das #include <dt-bindings/clock/qcom,qcs615-dispcc.h> 14*9b47105fSTaniya Das 15*9b47105fSTaniya Das #include "clk-alpha-pll.h" 16*9b47105fSTaniya Das #include "clk-branch.h" 17*9b47105fSTaniya Das #include "clk-pll.h" 18*9b47105fSTaniya Das #include "clk-rcg.h" 19*9b47105fSTaniya Das #include "clk-regmap.h" 20*9b47105fSTaniya Das #include "clk-regmap-divider.h" 21*9b47105fSTaniya Das #include "clk-regmap-mux.h" 22*9b47105fSTaniya Das #include "common.h" 23*9b47105fSTaniya Das #include "gdsc.h" 24*9b47105fSTaniya Das #include "reset.h" 25*9b47105fSTaniya Das 26*9b47105fSTaniya Das enum { 27*9b47105fSTaniya Das DT_BI_TCXO, 28*9b47105fSTaniya Das DT_GPLL0, 29*9b47105fSTaniya Das DT_DSI0_PHY_PLL_OUT_BYTECLK, 30*9b47105fSTaniya Das DT_DSI0_PHY_PLL_OUT_DSICLK, 31*9b47105fSTaniya Das DT_DSI1_PHY_PLL_OUT_DSICLK, 32*9b47105fSTaniya Das DT_DP_PHY_PLL_LINK_CLK, 33*9b47105fSTaniya Das DT_DP_PHY_PLL_VCO_DIV_CLK, 34*9b47105fSTaniya Das }; 35*9b47105fSTaniya Das 36*9b47105fSTaniya Das enum { 37*9b47105fSTaniya Das P_BI_TCXO, 38*9b47105fSTaniya Das P_DISP_CC_PLL0_OUT_MAIN, 39*9b47105fSTaniya Das P_DP_PHY_PLL_LINK_CLK, 40*9b47105fSTaniya Das P_DP_PHY_PLL_VCO_DIV_CLK, 41*9b47105fSTaniya Das P_DSI0_PHY_PLL_OUT_BYTECLK, 42*9b47105fSTaniya Das P_DSI0_PHY_PLL_OUT_DSICLK, 43*9b47105fSTaniya Das P_DSI1_PHY_PLL_OUT_DSICLK, 44*9b47105fSTaniya Das P_GPLL0_OUT_MAIN, 45*9b47105fSTaniya Das }; 46*9b47105fSTaniya Das 47*9b47105fSTaniya Das static const struct pll_vco disp_cc_pll_vco[] = { 48*9b47105fSTaniya Das { 500000000, 1000000000, 2 }, 49*9b47105fSTaniya Das }; 50*9b47105fSTaniya Das 51*9b47105fSTaniya Das /* 576MHz configuration VCO - 2 */ 52*9b47105fSTaniya Das static struct alpha_pll_config disp_cc_pll0_config = { 53*9b47105fSTaniya Das .l = 0x1e, 54*9b47105fSTaniya Das .vco_val = BIT(21), 55*9b47105fSTaniya Das .vco_mask = GENMASK(21, 20), 56*9b47105fSTaniya Das .main_output_mask = BIT(0), 57*9b47105fSTaniya Das .config_ctl_val = 0x4001055b, 58*9b47105fSTaniya Das .test_ctl_hi_val = 0x1, 59*9b47105fSTaniya Das .test_ctl_hi_mask = 0x1, 60*9b47105fSTaniya Das }; 61*9b47105fSTaniya Das 62*9b47105fSTaniya Das static struct clk_alpha_pll disp_cc_pll0 = { 63*9b47105fSTaniya Das .offset = 0x0, 64*9b47105fSTaniya Das .config = &disp_cc_pll0_config, 65*9b47105fSTaniya Das .vco_table = disp_cc_pll_vco, 66*9b47105fSTaniya Das .num_vco = ARRAY_SIZE(disp_cc_pll_vco), 67*9b47105fSTaniya Das .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 68*9b47105fSTaniya Das .clkr = { 69*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 70*9b47105fSTaniya Das .name = "disp_cc_pll0", 71*9b47105fSTaniya Das .parent_data = &(const struct clk_parent_data) { 72*9b47105fSTaniya Das .index = DT_BI_TCXO, 73*9b47105fSTaniya Das }, 74*9b47105fSTaniya Das .num_parents = 1, 75*9b47105fSTaniya Das .ops = &clk_alpha_pll_slew_ops, 76*9b47105fSTaniya Das }, 77*9b47105fSTaniya Das }, 78*9b47105fSTaniya Das }; 79*9b47105fSTaniya Das 80*9b47105fSTaniya Das static const struct parent_map disp_cc_parent_map_0[] = { 81*9b47105fSTaniya Das { P_BI_TCXO, 0 }, 82*9b47105fSTaniya Das { P_DP_PHY_PLL_LINK_CLK, 1 }, 83*9b47105fSTaniya Das { P_DP_PHY_PLL_VCO_DIV_CLK, 2 }, 84*9b47105fSTaniya Das }; 85*9b47105fSTaniya Das 86*9b47105fSTaniya Das static const struct clk_parent_data disp_cc_parent_data_0[] = { 87*9b47105fSTaniya Das { .index = DT_BI_TCXO }, 88*9b47105fSTaniya Das { .index = DT_DP_PHY_PLL_LINK_CLK }, 89*9b47105fSTaniya Das { .index = DT_DP_PHY_PLL_VCO_DIV_CLK }, 90*9b47105fSTaniya Das }; 91*9b47105fSTaniya Das 92*9b47105fSTaniya Das static const struct parent_map disp_cc_parent_map_1[] = { 93*9b47105fSTaniya Das { P_BI_TCXO, 0 }, 94*9b47105fSTaniya Das }; 95*9b47105fSTaniya Das 96*9b47105fSTaniya Das static const struct clk_parent_data disp_cc_parent_data_1[] = { 97*9b47105fSTaniya Das { .index = DT_BI_TCXO }, 98*9b47105fSTaniya Das }; 99*9b47105fSTaniya Das 100*9b47105fSTaniya Das static const struct parent_map disp_cc_parent_map_2[] = { 101*9b47105fSTaniya Das { P_BI_TCXO, 0 }, 102*9b47105fSTaniya Das { P_DSI0_PHY_PLL_OUT_BYTECLK, 1 }, 103*9b47105fSTaniya Das }; 104*9b47105fSTaniya Das 105*9b47105fSTaniya Das static const struct clk_parent_data disp_cc_parent_data_2[] = { 106*9b47105fSTaniya Das { .index = DT_BI_TCXO }, 107*9b47105fSTaniya Das { .index = DT_DSI0_PHY_PLL_OUT_BYTECLK }, 108*9b47105fSTaniya Das }; 109*9b47105fSTaniya Das 110*9b47105fSTaniya Das static const struct parent_map disp_cc_parent_map_3[] = { 111*9b47105fSTaniya Das { P_BI_TCXO, 0 }, 112*9b47105fSTaniya Das { P_DISP_CC_PLL0_OUT_MAIN, 1 }, 113*9b47105fSTaniya Das { P_GPLL0_OUT_MAIN, 4 }, 114*9b47105fSTaniya Das }; 115*9b47105fSTaniya Das 116*9b47105fSTaniya Das static const struct clk_parent_data disp_cc_parent_data_3[] = { 117*9b47105fSTaniya Das { .index = DT_BI_TCXO }, 118*9b47105fSTaniya Das { .hw = &disp_cc_pll0.clkr.hw }, 119*9b47105fSTaniya Das { .index = DT_GPLL0 }, 120*9b47105fSTaniya Das }; 121*9b47105fSTaniya Das 122*9b47105fSTaniya Das static const struct parent_map disp_cc_parent_map_4[] = { 123*9b47105fSTaniya Das { P_BI_TCXO, 0 }, 124*9b47105fSTaniya Das { P_GPLL0_OUT_MAIN, 4 }, 125*9b47105fSTaniya Das }; 126*9b47105fSTaniya Das 127*9b47105fSTaniya Das static const struct clk_parent_data disp_cc_parent_data_4[] = { 128*9b47105fSTaniya Das { .index = DT_BI_TCXO }, 129*9b47105fSTaniya Das { .index = DT_GPLL0 }, 130*9b47105fSTaniya Das }; 131*9b47105fSTaniya Das 132*9b47105fSTaniya Das static const struct parent_map disp_cc_parent_map_5[] = { 133*9b47105fSTaniya Das { P_BI_TCXO, 0 }, 134*9b47105fSTaniya Das { P_DSI0_PHY_PLL_OUT_DSICLK, 1 }, 135*9b47105fSTaniya Das { P_DSI1_PHY_PLL_OUT_DSICLK, 2 }, 136*9b47105fSTaniya Das }; 137*9b47105fSTaniya Das 138*9b47105fSTaniya Das static const struct clk_parent_data disp_cc_parent_data_5[] = { 139*9b47105fSTaniya Das { .index = DT_BI_TCXO }, 140*9b47105fSTaniya Das { .index = DT_DSI0_PHY_PLL_OUT_DSICLK }, 141*9b47105fSTaniya Das { .index = DT_DSI1_PHY_PLL_OUT_DSICLK }, 142*9b47105fSTaniya Das }; 143*9b47105fSTaniya Das 144*9b47105fSTaniya Das static const struct freq_tbl ftbl_disp_cc_mdss_ahb_clk_src[] = { 145*9b47105fSTaniya Das F(19200000, P_BI_TCXO, 1, 0, 0), 146*9b47105fSTaniya Das F(37500000, P_GPLL0_OUT_MAIN, 8, 0, 0), 147*9b47105fSTaniya Das F(75000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 148*9b47105fSTaniya Das { } 149*9b47105fSTaniya Das }; 150*9b47105fSTaniya Das 151*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_ahb_clk_src = { 152*9b47105fSTaniya Das .cmd_rcgr = 0x2170, 153*9b47105fSTaniya Das .mnd_width = 0, 154*9b47105fSTaniya Das .hid_width = 5, 155*9b47105fSTaniya Das .parent_map = disp_cc_parent_map_4, 156*9b47105fSTaniya Das .freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src, 157*9b47105fSTaniya Das .clkr.hw.init = &(const struct clk_init_data) { 158*9b47105fSTaniya Das .name = "disp_cc_mdss_ahb_clk_src", 159*9b47105fSTaniya Das .parent_data = disp_cc_parent_data_4, 160*9b47105fSTaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_4), 161*9b47105fSTaniya Das .ops = &clk_rcg2_shared_ops, 162*9b47105fSTaniya Das }, 163*9b47105fSTaniya Das }; 164*9b47105fSTaniya Das 165*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_byte0_clk_src = { 166*9b47105fSTaniya Das .cmd_rcgr = 0x20c0, 167*9b47105fSTaniya Das .mnd_width = 0, 168*9b47105fSTaniya Das .hid_width = 5, 169*9b47105fSTaniya Das .parent_map = disp_cc_parent_map_2, 170*9b47105fSTaniya Das .clkr.hw.init = &(const struct clk_init_data) { 171*9b47105fSTaniya Das .name = "disp_cc_mdss_byte0_clk_src", 172*9b47105fSTaniya Das .parent_data = disp_cc_parent_data_2, 173*9b47105fSTaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_2), 174*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 175*9b47105fSTaniya Das .ops = &clk_byte2_ops, 176*9b47105fSTaniya Das }, 177*9b47105fSTaniya Das }; 178*9b47105fSTaniya Das 179*9b47105fSTaniya Das static const struct freq_tbl ftbl_disp_cc_mdss_dp_aux1_clk_src[] = { 180*9b47105fSTaniya Das F(19200000, P_BI_TCXO, 1, 0, 0), 181*9b47105fSTaniya Das { } 182*9b47105fSTaniya Das }; 183*9b47105fSTaniya Das 184*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_dp_aux_clk_src = { 185*9b47105fSTaniya Das .cmd_rcgr = 0x2158, 186*9b47105fSTaniya Das .mnd_width = 0, 187*9b47105fSTaniya Das .hid_width = 5, 188*9b47105fSTaniya Das .parent_map = disp_cc_parent_map_1, 189*9b47105fSTaniya Das .freq_tbl = ftbl_disp_cc_mdss_dp_aux1_clk_src, 190*9b47105fSTaniya Das .clkr.hw.init = &(struct clk_init_data){ 191*9b47105fSTaniya Das .name = "disp_cc_mdss_dp_aux_clk_src", 192*9b47105fSTaniya Das .parent_data = disp_cc_parent_data_1, 193*9b47105fSTaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_1), 194*9b47105fSTaniya Das .ops = &clk_rcg2_shared_ops, 195*9b47105fSTaniya Das }, 196*9b47105fSTaniya Das }; 197*9b47105fSTaniya Das 198*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_dp_crypto_clk_src = { 199*9b47105fSTaniya Das .cmd_rcgr = 0x2110, 200*9b47105fSTaniya Das .mnd_width = 0, 201*9b47105fSTaniya Das .hid_width = 5, 202*9b47105fSTaniya Das .parent_map = disp_cc_parent_map_0, 203*9b47105fSTaniya Das .clkr.hw.init = &(const struct clk_init_data) { 204*9b47105fSTaniya Das .name = "disp_cc_mdss_dp_crypto_clk_src", 205*9b47105fSTaniya Das .parent_data = disp_cc_parent_data_0, 206*9b47105fSTaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_0), 207*9b47105fSTaniya Das .ops = &clk_byte2_ops, 208*9b47105fSTaniya Das }, 209*9b47105fSTaniya Das }; 210*9b47105fSTaniya Das 211*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_dp_link_clk_src = { 212*9b47105fSTaniya Das .cmd_rcgr = 0x20f4, 213*9b47105fSTaniya Das .mnd_width = 0, 214*9b47105fSTaniya Das .hid_width = 5, 215*9b47105fSTaniya Das .parent_map = disp_cc_parent_map_0, 216*9b47105fSTaniya Das .clkr.hw.init = &(const struct clk_init_data) { 217*9b47105fSTaniya Das .name = "disp_cc_mdss_dp_link_clk_src", 218*9b47105fSTaniya Das .parent_data = disp_cc_parent_data_0, 219*9b47105fSTaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_0), 220*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 221*9b47105fSTaniya Das .ops = &clk_byte2_ops, 222*9b47105fSTaniya Das }, 223*9b47105fSTaniya Das }; 224*9b47105fSTaniya Das 225*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_dp_pixel1_clk_src = { 226*9b47105fSTaniya Das .cmd_rcgr = 0x2140, 227*9b47105fSTaniya Das .mnd_width = 16, 228*9b47105fSTaniya Das .hid_width = 5, 229*9b47105fSTaniya Das .parent_map = disp_cc_parent_map_0, 230*9b47105fSTaniya Das .clkr.hw.init = &(const struct clk_init_data) { 231*9b47105fSTaniya Das .name = "disp_cc_mdss_dp_pixel1_clk_src", 232*9b47105fSTaniya Das .parent_data = disp_cc_parent_data_0, 233*9b47105fSTaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_0), 234*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 235*9b47105fSTaniya Das .ops = &clk_dp_ops, 236*9b47105fSTaniya Das }, 237*9b47105fSTaniya Das }; 238*9b47105fSTaniya Das 239*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_dp_pixel_clk_src = { 240*9b47105fSTaniya Das .cmd_rcgr = 0x2128, 241*9b47105fSTaniya Das .mnd_width = 16, 242*9b47105fSTaniya Das .hid_width = 5, 243*9b47105fSTaniya Das .parent_map = disp_cc_parent_map_0, 244*9b47105fSTaniya Das .clkr.hw.init = &(const struct clk_init_data) { 245*9b47105fSTaniya Das .name = "disp_cc_mdss_dp_pixel_clk_src", 246*9b47105fSTaniya Das .parent_data = disp_cc_parent_data_0, 247*9b47105fSTaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_0), 248*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 249*9b47105fSTaniya Das .ops = &clk_dp_ops, 250*9b47105fSTaniya Das }, 251*9b47105fSTaniya Das }; 252*9b47105fSTaniya Das 253*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_esc0_clk_src = { 254*9b47105fSTaniya Das .cmd_rcgr = 0x20dc, 255*9b47105fSTaniya Das .mnd_width = 0, 256*9b47105fSTaniya Das .hid_width = 5, 257*9b47105fSTaniya Das .parent_map = disp_cc_parent_map_2, 258*9b47105fSTaniya Das .freq_tbl = ftbl_disp_cc_mdss_dp_aux1_clk_src, 259*9b47105fSTaniya Das .clkr.hw.init = &(struct clk_init_data){ 260*9b47105fSTaniya Das .name = "disp_cc_mdss_esc0_clk_src", 261*9b47105fSTaniya Das .parent_data = disp_cc_parent_data_2, 262*9b47105fSTaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_2), 263*9b47105fSTaniya Das .ops = &clk_rcg2_ops, 264*9b47105fSTaniya Das }, 265*9b47105fSTaniya Das }; 266*9b47105fSTaniya Das 267*9b47105fSTaniya Das static const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src[] = { 268*9b47105fSTaniya Das F(19200000, P_BI_TCXO, 1, 0, 0), 269*9b47105fSTaniya Das F(192000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), 270*9b47105fSTaniya Das F(256000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), 271*9b47105fSTaniya Das F(307000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), 272*9b47105fSTaniya Das { } 273*9b47105fSTaniya Das }; 274*9b47105fSTaniya Das 275*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_mdp_clk_src = { 276*9b47105fSTaniya Das .cmd_rcgr = 0x2078, 277*9b47105fSTaniya Das .mnd_width = 0, 278*9b47105fSTaniya Das .hid_width = 5, 279*9b47105fSTaniya Das .parent_map = disp_cc_parent_map_3, 280*9b47105fSTaniya Das .freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src, 281*9b47105fSTaniya Das .clkr.hw.init = &(const struct clk_init_data) { 282*9b47105fSTaniya Das .name = "disp_cc_mdss_mdp_clk_src", 283*9b47105fSTaniya Das .parent_data = disp_cc_parent_data_3, 284*9b47105fSTaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_3), 285*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 286*9b47105fSTaniya Das .ops = &clk_rcg2_shared_ops, 287*9b47105fSTaniya Das }, 288*9b47105fSTaniya Das }; 289*9b47105fSTaniya Das 290*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = { 291*9b47105fSTaniya Das .cmd_rcgr = 0x2060, 292*9b47105fSTaniya Das .mnd_width = 8, 293*9b47105fSTaniya Das .hid_width = 5, 294*9b47105fSTaniya Das .parent_map = disp_cc_parent_map_5, 295*9b47105fSTaniya Das .clkr.hw.init = &(const struct clk_init_data) { 296*9b47105fSTaniya Das .name = "disp_cc_mdss_pclk0_clk_src", 297*9b47105fSTaniya Das .parent_data = disp_cc_parent_data_5, 298*9b47105fSTaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_5), 299*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 300*9b47105fSTaniya Das .ops = &clk_pixel_ops, 301*9b47105fSTaniya Das }, 302*9b47105fSTaniya Das }; 303*9b47105fSTaniya Das 304*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_rot_clk_src = { 305*9b47105fSTaniya Das .cmd_rcgr = 0x2090, 306*9b47105fSTaniya Das .mnd_width = 0, 307*9b47105fSTaniya Das .hid_width = 5, 308*9b47105fSTaniya Das .parent_map = disp_cc_parent_map_3, 309*9b47105fSTaniya Das .freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src, 310*9b47105fSTaniya Das .clkr.hw.init = &(const struct clk_init_data) { 311*9b47105fSTaniya Das .name = "disp_cc_mdss_rot_clk_src", 312*9b47105fSTaniya Das .parent_data = disp_cc_parent_data_3, 313*9b47105fSTaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_3), 314*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 315*9b47105fSTaniya Das .ops = &clk_rcg2_shared_ops, 316*9b47105fSTaniya Das }, 317*9b47105fSTaniya Das }; 318*9b47105fSTaniya Das 319*9b47105fSTaniya Das static struct clk_rcg2 disp_cc_mdss_vsync_clk_src = { 320*9b47105fSTaniya Das .cmd_rcgr = 0x20a8, 321*9b47105fSTaniya Das .mnd_width = 0, 322*9b47105fSTaniya Das .hid_width = 5, 323*9b47105fSTaniya Das .parent_map = disp_cc_parent_map_1, 324*9b47105fSTaniya Das .freq_tbl = ftbl_disp_cc_mdss_dp_aux1_clk_src, 325*9b47105fSTaniya Das .clkr.hw.init = &(struct clk_init_data){ 326*9b47105fSTaniya Das .name = "disp_cc_mdss_vsync_clk_src", 327*9b47105fSTaniya Das .parent_data = disp_cc_parent_data_1, 328*9b47105fSTaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_1), 329*9b47105fSTaniya Das .ops = &clk_rcg2_shared_ops, 330*9b47105fSTaniya Das }, 331*9b47105fSTaniya Das }; 332*9b47105fSTaniya Das 333*9b47105fSTaniya Das static struct clk_regmap_div disp_cc_mdss_byte0_div_clk_src = { 334*9b47105fSTaniya Das .reg = 0x20d8, 335*9b47105fSTaniya Das .shift = 0, 336*9b47105fSTaniya Das .width = 2, 337*9b47105fSTaniya Das .clkr.hw.init = &(const struct clk_init_data) { 338*9b47105fSTaniya Das .name = "disp_cc_mdss_byte0_div_clk_src", 339*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 340*9b47105fSTaniya Das &disp_cc_mdss_byte0_clk_src.clkr.hw, 341*9b47105fSTaniya Das }, 342*9b47105fSTaniya Das .num_parents = 1, 343*9b47105fSTaniya Das .ops = &clk_regmap_div_ro_ops, 344*9b47105fSTaniya Das }, 345*9b47105fSTaniya Das }; 346*9b47105fSTaniya Das 347*9b47105fSTaniya Das static struct clk_regmap_div disp_cc_mdss_dp_link_div_clk_src = { 348*9b47105fSTaniya Das .reg = 0x210c, 349*9b47105fSTaniya Das .shift = 0, 350*9b47105fSTaniya Das .width = 2, 351*9b47105fSTaniya Das .clkr.hw.init = &(const struct clk_init_data) { 352*9b47105fSTaniya Das .name = "disp_cc_mdss_dp_link_div_clk_src", 353*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 354*9b47105fSTaniya Das &disp_cc_mdss_dp_link_clk_src.clkr.hw, 355*9b47105fSTaniya Das }, 356*9b47105fSTaniya Das .num_parents = 1, 357*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 358*9b47105fSTaniya Das .ops = &clk_regmap_div_ro_ops, 359*9b47105fSTaniya Das }, 360*9b47105fSTaniya Das }; 361*9b47105fSTaniya Das 362*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_ahb_clk = { 363*9b47105fSTaniya Das .halt_reg = 0x2048, 364*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 365*9b47105fSTaniya Das .clkr = { 366*9b47105fSTaniya Das .enable_reg = 0x2048, 367*9b47105fSTaniya Das .enable_mask = BIT(0), 368*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 369*9b47105fSTaniya Das .name = "disp_cc_mdss_ahb_clk", 370*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 371*9b47105fSTaniya Das &disp_cc_mdss_ahb_clk_src.clkr.hw, 372*9b47105fSTaniya Das }, 373*9b47105fSTaniya Das .num_parents = 1, 374*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 375*9b47105fSTaniya Das .ops = &clk_branch2_ops, 376*9b47105fSTaniya Das }, 377*9b47105fSTaniya Das }, 378*9b47105fSTaniya Das }; 379*9b47105fSTaniya Das 380*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_byte0_clk = { 381*9b47105fSTaniya Das .halt_reg = 0x2024, 382*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 383*9b47105fSTaniya Das .clkr = { 384*9b47105fSTaniya Das .enable_reg = 0x2024, 385*9b47105fSTaniya Das .enable_mask = BIT(0), 386*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 387*9b47105fSTaniya Das .name = "disp_cc_mdss_byte0_clk", 388*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 389*9b47105fSTaniya Das &disp_cc_mdss_byte0_clk_src.clkr.hw, 390*9b47105fSTaniya Das }, 391*9b47105fSTaniya Das .num_parents = 1, 392*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 393*9b47105fSTaniya Das .ops = &clk_branch2_ops, 394*9b47105fSTaniya Das }, 395*9b47105fSTaniya Das }, 396*9b47105fSTaniya Das }; 397*9b47105fSTaniya Das 398*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_byte0_intf_clk = { 399*9b47105fSTaniya Das .halt_reg = 0x2028, 400*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 401*9b47105fSTaniya Das .clkr = { 402*9b47105fSTaniya Das .enable_reg = 0x2028, 403*9b47105fSTaniya Das .enable_mask = BIT(0), 404*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 405*9b47105fSTaniya Das .name = "disp_cc_mdss_byte0_intf_clk", 406*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 407*9b47105fSTaniya Das &disp_cc_mdss_byte0_div_clk_src.clkr.hw, 408*9b47105fSTaniya Das }, 409*9b47105fSTaniya Das .num_parents = 1, 410*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 411*9b47105fSTaniya Das .ops = &clk_branch2_ops, 412*9b47105fSTaniya Das }, 413*9b47105fSTaniya Das }, 414*9b47105fSTaniya Das }; 415*9b47105fSTaniya Das 416*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_dp_aux_clk = { 417*9b47105fSTaniya Das .halt_reg = 0x2044, 418*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 419*9b47105fSTaniya Das .clkr = { 420*9b47105fSTaniya Das .enable_reg = 0x2044, 421*9b47105fSTaniya Das .enable_mask = BIT(0), 422*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 423*9b47105fSTaniya Das .name = "disp_cc_mdss_dp_aux_clk", 424*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 425*9b47105fSTaniya Das &disp_cc_mdss_dp_aux_clk_src.clkr.hw, 426*9b47105fSTaniya Das }, 427*9b47105fSTaniya Das .num_parents = 1, 428*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 429*9b47105fSTaniya Das .ops = &clk_branch2_ops, 430*9b47105fSTaniya Das }, 431*9b47105fSTaniya Das }, 432*9b47105fSTaniya Das }; 433*9b47105fSTaniya Das 434*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_dp_crypto_clk = { 435*9b47105fSTaniya Das .halt_reg = 0x2038, 436*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 437*9b47105fSTaniya Das .clkr = { 438*9b47105fSTaniya Das .enable_reg = 0x2038, 439*9b47105fSTaniya Das .enable_mask = BIT(0), 440*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 441*9b47105fSTaniya Das .name = "disp_cc_mdss_dp_crypto_clk", 442*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 443*9b47105fSTaniya Das &disp_cc_mdss_dp_crypto_clk_src.clkr.hw, 444*9b47105fSTaniya Das }, 445*9b47105fSTaniya Das .num_parents = 1, 446*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 447*9b47105fSTaniya Das .ops = &clk_branch2_ops, 448*9b47105fSTaniya Das }, 449*9b47105fSTaniya Das }, 450*9b47105fSTaniya Das }; 451*9b47105fSTaniya Das 452*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_dp_link_clk = { 453*9b47105fSTaniya Das .halt_reg = 0x2030, 454*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 455*9b47105fSTaniya Das .clkr = { 456*9b47105fSTaniya Das .enable_reg = 0x2030, 457*9b47105fSTaniya Das .enable_mask = BIT(0), 458*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 459*9b47105fSTaniya Das .name = "disp_cc_mdss_dp_link_clk", 460*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 461*9b47105fSTaniya Das &disp_cc_mdss_dp_link_clk_src.clkr.hw, 462*9b47105fSTaniya Das }, 463*9b47105fSTaniya Das .num_parents = 1, 464*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 465*9b47105fSTaniya Das .ops = &clk_branch2_ops, 466*9b47105fSTaniya Das }, 467*9b47105fSTaniya Das }, 468*9b47105fSTaniya Das }; 469*9b47105fSTaniya Das 470*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_dp_link_intf_clk = { 471*9b47105fSTaniya Das .halt_reg = 0x2034, 472*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 473*9b47105fSTaniya Das .clkr = { 474*9b47105fSTaniya Das .enable_reg = 0x2034, 475*9b47105fSTaniya Das .enable_mask = BIT(0), 476*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 477*9b47105fSTaniya Das .name = "disp_cc_mdss_dp_link_intf_clk", 478*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 479*9b47105fSTaniya Das &disp_cc_mdss_dp_link_div_clk_src.clkr.hw, 480*9b47105fSTaniya Das }, 481*9b47105fSTaniya Das .num_parents = 1, 482*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 483*9b47105fSTaniya Das .ops = &clk_branch2_ops, 484*9b47105fSTaniya Das }, 485*9b47105fSTaniya Das }, 486*9b47105fSTaniya Das }; 487*9b47105fSTaniya Das 488*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_dp_pixel1_clk = { 489*9b47105fSTaniya Das .halt_reg = 0x2040, 490*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 491*9b47105fSTaniya Das .clkr = { 492*9b47105fSTaniya Das .enable_reg = 0x2040, 493*9b47105fSTaniya Das .enable_mask = BIT(0), 494*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 495*9b47105fSTaniya Das .name = "disp_cc_mdss_dp_pixel1_clk", 496*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 497*9b47105fSTaniya Das &disp_cc_mdss_dp_pixel1_clk_src.clkr.hw, 498*9b47105fSTaniya Das }, 499*9b47105fSTaniya Das .num_parents = 1, 500*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 501*9b47105fSTaniya Das .ops = &clk_branch2_ops, 502*9b47105fSTaniya Das }, 503*9b47105fSTaniya Das }, 504*9b47105fSTaniya Das }; 505*9b47105fSTaniya Das 506*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_dp_pixel_clk = { 507*9b47105fSTaniya Das .halt_reg = 0x203c, 508*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 509*9b47105fSTaniya Das .clkr = { 510*9b47105fSTaniya Das .enable_reg = 0x203c, 511*9b47105fSTaniya Das .enable_mask = BIT(0), 512*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 513*9b47105fSTaniya Das .name = "disp_cc_mdss_dp_pixel_clk", 514*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 515*9b47105fSTaniya Das &disp_cc_mdss_dp_pixel_clk_src.clkr.hw, 516*9b47105fSTaniya Das }, 517*9b47105fSTaniya Das .num_parents = 1, 518*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 519*9b47105fSTaniya Das .ops = &clk_branch2_ops, 520*9b47105fSTaniya Das }, 521*9b47105fSTaniya Das }, 522*9b47105fSTaniya Das }; 523*9b47105fSTaniya Das 524*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_esc0_clk = { 525*9b47105fSTaniya Das .halt_reg = 0x202c, 526*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 527*9b47105fSTaniya Das .clkr = { 528*9b47105fSTaniya Das .enable_reg = 0x202c, 529*9b47105fSTaniya Das .enable_mask = BIT(0), 530*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 531*9b47105fSTaniya Das .name = "disp_cc_mdss_esc0_clk", 532*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 533*9b47105fSTaniya Das &disp_cc_mdss_esc0_clk_src.clkr.hw, 534*9b47105fSTaniya Das }, 535*9b47105fSTaniya Das .num_parents = 1, 536*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 537*9b47105fSTaniya Das .ops = &clk_branch2_ops, 538*9b47105fSTaniya Das }, 539*9b47105fSTaniya Das }, 540*9b47105fSTaniya Das }; 541*9b47105fSTaniya Das 542*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_mdp_clk = { 543*9b47105fSTaniya Das .halt_reg = 0x2008, 544*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 545*9b47105fSTaniya Das .clkr = { 546*9b47105fSTaniya Das .enable_reg = 0x2008, 547*9b47105fSTaniya Das .enable_mask = BIT(0), 548*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 549*9b47105fSTaniya Das .name = "disp_cc_mdss_mdp_clk", 550*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 551*9b47105fSTaniya Das &disp_cc_mdss_mdp_clk_src.clkr.hw, 552*9b47105fSTaniya Das }, 553*9b47105fSTaniya Das .num_parents = 1, 554*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 555*9b47105fSTaniya Das .ops = &clk_branch2_ops, 556*9b47105fSTaniya Das }, 557*9b47105fSTaniya Das }, 558*9b47105fSTaniya Das }; 559*9b47105fSTaniya Das 560*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_mdp_lut_clk = { 561*9b47105fSTaniya Das .halt_reg = 0x2018, 562*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 563*9b47105fSTaniya Das .clkr = { 564*9b47105fSTaniya Das .enable_reg = 0x2018, 565*9b47105fSTaniya Das .enable_mask = BIT(0), 566*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 567*9b47105fSTaniya Das .name = "disp_cc_mdss_mdp_lut_clk", 568*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 569*9b47105fSTaniya Das &disp_cc_mdss_mdp_clk_src.clkr.hw, 570*9b47105fSTaniya Das }, 571*9b47105fSTaniya Das .num_parents = 1, 572*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 573*9b47105fSTaniya Das .ops = &clk_branch2_ops, 574*9b47105fSTaniya Das }, 575*9b47105fSTaniya Das }, 576*9b47105fSTaniya Das }; 577*9b47105fSTaniya Das 578*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_non_gdsc_ahb_clk = { 579*9b47105fSTaniya Das .halt_reg = 0x4004, 580*9b47105fSTaniya Das .halt_check = BRANCH_HALT_VOTED, 581*9b47105fSTaniya Das .clkr = { 582*9b47105fSTaniya Das .enable_reg = 0x4004, 583*9b47105fSTaniya Das .enable_mask = BIT(0), 584*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 585*9b47105fSTaniya Das .name = "disp_cc_mdss_non_gdsc_ahb_clk", 586*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 587*9b47105fSTaniya Das &disp_cc_mdss_ahb_clk_src.clkr.hw, 588*9b47105fSTaniya Das }, 589*9b47105fSTaniya Das .num_parents = 1, 590*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 591*9b47105fSTaniya Das .ops = &clk_branch2_ops, 592*9b47105fSTaniya Das }, 593*9b47105fSTaniya Das }, 594*9b47105fSTaniya Das }; 595*9b47105fSTaniya Das 596*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_pclk0_clk = { 597*9b47105fSTaniya Das .halt_reg = 0x2004, 598*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 599*9b47105fSTaniya Das .clkr = { 600*9b47105fSTaniya Das .enable_reg = 0x2004, 601*9b47105fSTaniya Das .enable_mask = BIT(0), 602*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 603*9b47105fSTaniya Das .name = "disp_cc_mdss_pclk0_clk", 604*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 605*9b47105fSTaniya Das &disp_cc_mdss_pclk0_clk_src.clkr.hw, 606*9b47105fSTaniya Das }, 607*9b47105fSTaniya Das .num_parents = 1, 608*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 609*9b47105fSTaniya Das .ops = &clk_branch2_ops, 610*9b47105fSTaniya Das }, 611*9b47105fSTaniya Das }, 612*9b47105fSTaniya Das }; 613*9b47105fSTaniya Das 614*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_rot_clk = { 615*9b47105fSTaniya Das .halt_reg = 0x2010, 616*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 617*9b47105fSTaniya Das .clkr = { 618*9b47105fSTaniya Das .enable_reg = 0x2010, 619*9b47105fSTaniya Das .enable_mask = BIT(0), 620*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 621*9b47105fSTaniya Das .name = "disp_cc_mdss_rot_clk", 622*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 623*9b47105fSTaniya Das &disp_cc_mdss_rot_clk_src.clkr.hw, 624*9b47105fSTaniya Das }, 625*9b47105fSTaniya Das .num_parents = 1, 626*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 627*9b47105fSTaniya Das .ops = &clk_branch2_ops, 628*9b47105fSTaniya Das }, 629*9b47105fSTaniya Das }, 630*9b47105fSTaniya Das }; 631*9b47105fSTaniya Das 632*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_rscc_ahb_clk = { 633*9b47105fSTaniya Das .halt_reg = 0x400c, 634*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 635*9b47105fSTaniya Das .clkr = { 636*9b47105fSTaniya Das .enable_reg = 0x400c, 637*9b47105fSTaniya Das .enable_mask = BIT(0), 638*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 639*9b47105fSTaniya Das .name = "disp_cc_mdss_rscc_ahb_clk", 640*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 641*9b47105fSTaniya Das &disp_cc_mdss_ahb_clk_src.clkr.hw, 642*9b47105fSTaniya Das }, 643*9b47105fSTaniya Das .num_parents = 1, 644*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 645*9b47105fSTaniya Das .ops = &clk_branch2_ops, 646*9b47105fSTaniya Das }, 647*9b47105fSTaniya Das }, 648*9b47105fSTaniya Das }; 649*9b47105fSTaniya Das 650*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_rscc_vsync_clk = { 651*9b47105fSTaniya Das .halt_reg = 0x4008, 652*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 653*9b47105fSTaniya Das .clkr = { 654*9b47105fSTaniya Das .enable_reg = 0x4008, 655*9b47105fSTaniya Das .enable_mask = BIT(0), 656*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 657*9b47105fSTaniya Das .name = "disp_cc_mdss_rscc_vsync_clk", 658*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 659*9b47105fSTaniya Das &disp_cc_mdss_vsync_clk_src.clkr.hw, 660*9b47105fSTaniya Das }, 661*9b47105fSTaniya Das .num_parents = 1, 662*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 663*9b47105fSTaniya Das .ops = &clk_branch2_ops, 664*9b47105fSTaniya Das }, 665*9b47105fSTaniya Das }, 666*9b47105fSTaniya Das }; 667*9b47105fSTaniya Das 668*9b47105fSTaniya Das static struct clk_branch disp_cc_mdss_vsync_clk = { 669*9b47105fSTaniya Das .halt_reg = 0x2020, 670*9b47105fSTaniya Das .halt_check = BRANCH_HALT, 671*9b47105fSTaniya Das .clkr = { 672*9b47105fSTaniya Das .enable_reg = 0x2020, 673*9b47105fSTaniya Das .enable_mask = BIT(0), 674*9b47105fSTaniya Das .hw.init = &(const struct clk_init_data) { 675*9b47105fSTaniya Das .name = "disp_cc_mdss_vsync_clk", 676*9b47105fSTaniya Das .parent_hws = (const struct clk_hw*[]) { 677*9b47105fSTaniya Das &disp_cc_mdss_vsync_clk_src.clkr.hw, 678*9b47105fSTaniya Das }, 679*9b47105fSTaniya Das .num_parents = 1, 680*9b47105fSTaniya Das .flags = CLK_SET_RATE_PARENT, 681*9b47105fSTaniya Das .ops = &clk_branch2_ops, 682*9b47105fSTaniya Das }, 683*9b47105fSTaniya Das }, 684*9b47105fSTaniya Das }; 685*9b47105fSTaniya Das 686*9b47105fSTaniya Das static struct gdsc mdss_core_gdsc = { 687*9b47105fSTaniya Das .gdscr = 0x3000, 688*9b47105fSTaniya Das .en_rest_wait_val = 0x2, 689*9b47105fSTaniya Das .en_few_wait_val = 0x2, 690*9b47105fSTaniya Das .clk_dis_wait_val = 0xf, 691*9b47105fSTaniya Das .pd = { 692*9b47105fSTaniya Das .name = "mdss_core_gdsc", 693*9b47105fSTaniya Das }, 694*9b47105fSTaniya Das .pwrsts = PWRSTS_OFF_ON, 695*9b47105fSTaniya Das .flags = HW_CTRL | POLL_CFG_GDSCR, 696*9b47105fSTaniya Das }; 697*9b47105fSTaniya Das 698*9b47105fSTaniya Das static struct clk_regmap *disp_cc_qcs615_clocks[] = { 699*9b47105fSTaniya Das [DISP_CC_MDSS_AHB_CLK] = &disp_cc_mdss_ahb_clk.clkr, 700*9b47105fSTaniya Das [DISP_CC_MDSS_AHB_CLK_SRC] = &disp_cc_mdss_ahb_clk_src.clkr, 701*9b47105fSTaniya Das [DISP_CC_MDSS_BYTE0_CLK] = &disp_cc_mdss_byte0_clk.clkr, 702*9b47105fSTaniya Das [DISP_CC_MDSS_BYTE0_CLK_SRC] = &disp_cc_mdss_byte0_clk_src.clkr, 703*9b47105fSTaniya Das [DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] = &disp_cc_mdss_byte0_div_clk_src.clkr, 704*9b47105fSTaniya Das [DISP_CC_MDSS_BYTE0_INTF_CLK] = &disp_cc_mdss_byte0_intf_clk.clkr, 705*9b47105fSTaniya Das [DISP_CC_MDSS_DP_AUX_CLK] = &disp_cc_mdss_dp_aux_clk.clkr, 706*9b47105fSTaniya Das [DISP_CC_MDSS_DP_AUX_CLK_SRC] = &disp_cc_mdss_dp_aux_clk_src.clkr, 707*9b47105fSTaniya Das [DISP_CC_MDSS_DP_CRYPTO_CLK] = &disp_cc_mdss_dp_crypto_clk.clkr, 708*9b47105fSTaniya Das [DISP_CC_MDSS_DP_CRYPTO_CLK_SRC] = &disp_cc_mdss_dp_crypto_clk_src.clkr, 709*9b47105fSTaniya Das [DISP_CC_MDSS_DP_LINK_CLK] = &disp_cc_mdss_dp_link_clk.clkr, 710*9b47105fSTaniya Das [DISP_CC_MDSS_DP_LINK_CLK_SRC] = &disp_cc_mdss_dp_link_clk_src.clkr, 711*9b47105fSTaniya Das [DISP_CC_MDSS_DP_LINK_DIV_CLK_SRC] = &disp_cc_mdss_dp_link_div_clk_src.clkr, 712*9b47105fSTaniya Das [DISP_CC_MDSS_DP_LINK_INTF_CLK] = &disp_cc_mdss_dp_link_intf_clk.clkr, 713*9b47105fSTaniya Das [DISP_CC_MDSS_DP_PIXEL1_CLK] = &disp_cc_mdss_dp_pixel1_clk.clkr, 714*9b47105fSTaniya Das [DISP_CC_MDSS_DP_PIXEL1_CLK_SRC] = &disp_cc_mdss_dp_pixel1_clk_src.clkr, 715*9b47105fSTaniya Das [DISP_CC_MDSS_DP_PIXEL_CLK] = &disp_cc_mdss_dp_pixel_clk.clkr, 716*9b47105fSTaniya Das [DISP_CC_MDSS_DP_PIXEL_CLK_SRC] = &disp_cc_mdss_dp_pixel_clk_src.clkr, 717*9b47105fSTaniya Das [DISP_CC_MDSS_ESC0_CLK] = &disp_cc_mdss_esc0_clk.clkr, 718*9b47105fSTaniya Das [DISP_CC_MDSS_ESC0_CLK_SRC] = &disp_cc_mdss_esc0_clk_src.clkr, 719*9b47105fSTaniya Das [DISP_CC_MDSS_MDP_CLK] = &disp_cc_mdss_mdp_clk.clkr, 720*9b47105fSTaniya Das [DISP_CC_MDSS_MDP_CLK_SRC] = &disp_cc_mdss_mdp_clk_src.clkr, 721*9b47105fSTaniya Das [DISP_CC_MDSS_MDP_LUT_CLK] = &disp_cc_mdss_mdp_lut_clk.clkr, 722*9b47105fSTaniya Das [DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &disp_cc_mdss_non_gdsc_ahb_clk.clkr, 723*9b47105fSTaniya Das [DISP_CC_MDSS_PCLK0_CLK] = &disp_cc_mdss_pclk0_clk.clkr, 724*9b47105fSTaniya Das [DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr, 725*9b47105fSTaniya Das [DISP_CC_MDSS_ROT_CLK] = &disp_cc_mdss_rot_clk.clkr, 726*9b47105fSTaniya Das [DISP_CC_MDSS_ROT_CLK_SRC] = &disp_cc_mdss_rot_clk_src.clkr, 727*9b47105fSTaniya Das [DISP_CC_MDSS_RSCC_AHB_CLK] = &disp_cc_mdss_rscc_ahb_clk.clkr, 728*9b47105fSTaniya Das [DISP_CC_MDSS_RSCC_VSYNC_CLK] = &disp_cc_mdss_rscc_vsync_clk.clkr, 729*9b47105fSTaniya Das [DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr, 730*9b47105fSTaniya Das [DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr, 731*9b47105fSTaniya Das [DISP_CC_PLL0] = &disp_cc_pll0.clkr, 732*9b47105fSTaniya Das }; 733*9b47105fSTaniya Das 734*9b47105fSTaniya Das static struct gdsc *disp_cc_qcs615_gdscs[] = { 735*9b47105fSTaniya Das [MDSS_CORE_GDSC] = &mdss_core_gdsc, 736*9b47105fSTaniya Das }; 737*9b47105fSTaniya Das 738*9b47105fSTaniya Das static struct clk_alpha_pll *disp_cc_qcs615_plls[] = { 739*9b47105fSTaniya Das &disp_cc_pll0, 740*9b47105fSTaniya Das }; 741*9b47105fSTaniya Das 742*9b47105fSTaniya Das static u32 disp_cc_qcs615_critical_cbcrs[] = { 743*9b47105fSTaniya Das 0x6054, /* DISP_CC_XO_CLK */ 744*9b47105fSTaniya Das }; 745*9b47105fSTaniya Das 746*9b47105fSTaniya Das static const struct regmap_config disp_cc_qcs615_regmap_config = { 747*9b47105fSTaniya Das .reg_bits = 32, 748*9b47105fSTaniya Das .reg_stride = 4, 749*9b47105fSTaniya Das .val_bits = 32, 750*9b47105fSTaniya Das .max_register = 0x10000, 751*9b47105fSTaniya Das .fast_io = true, 752*9b47105fSTaniya Das }; 753*9b47105fSTaniya Das 754*9b47105fSTaniya Das static struct qcom_cc_driver_data disp_cc_qcs615_driver_data = { 755*9b47105fSTaniya Das .alpha_plls = disp_cc_qcs615_plls, 756*9b47105fSTaniya Das .num_alpha_plls = ARRAY_SIZE(disp_cc_qcs615_plls), 757*9b47105fSTaniya Das .clk_cbcrs = disp_cc_qcs615_critical_cbcrs, 758*9b47105fSTaniya Das .num_clk_cbcrs = ARRAY_SIZE(disp_cc_qcs615_critical_cbcrs), 759*9b47105fSTaniya Das }; 760*9b47105fSTaniya Das 761*9b47105fSTaniya Das static const struct qcom_cc_desc disp_cc_qcs615_desc = { 762*9b47105fSTaniya Das .config = &disp_cc_qcs615_regmap_config, 763*9b47105fSTaniya Das .clks = disp_cc_qcs615_clocks, 764*9b47105fSTaniya Das .num_clks = ARRAY_SIZE(disp_cc_qcs615_clocks), 765*9b47105fSTaniya Das .gdscs = disp_cc_qcs615_gdscs, 766*9b47105fSTaniya Das .num_gdscs = ARRAY_SIZE(disp_cc_qcs615_gdscs), 767*9b47105fSTaniya Das .driver_data = &disp_cc_qcs615_driver_data, 768*9b47105fSTaniya Das }; 769*9b47105fSTaniya Das 770*9b47105fSTaniya Das static const struct of_device_id disp_cc_qcs615_match_table[] = { 771*9b47105fSTaniya Das { .compatible = "qcom,qcs615-dispcc" }, 772*9b47105fSTaniya Das { } 773*9b47105fSTaniya Das }; 774*9b47105fSTaniya Das MODULE_DEVICE_TABLE(of, disp_cc_qcs615_match_table); 775*9b47105fSTaniya Das 776*9b47105fSTaniya Das static int disp_cc_qcs615_probe(struct platform_device *pdev) 777*9b47105fSTaniya Das { 778*9b47105fSTaniya Das return qcom_cc_probe(pdev, &disp_cc_qcs615_desc); 779*9b47105fSTaniya Das } 780*9b47105fSTaniya Das 781*9b47105fSTaniya Das static struct platform_driver disp_cc_qcs615_driver = { 782*9b47105fSTaniya Das .probe = disp_cc_qcs615_probe, 783*9b47105fSTaniya Das .driver = { 784*9b47105fSTaniya Das .name = "dispcc-qcs615", 785*9b47105fSTaniya Das .of_match_table = disp_cc_qcs615_match_table, 786*9b47105fSTaniya Das }, 787*9b47105fSTaniya Das }; 788*9b47105fSTaniya Das 789*9b47105fSTaniya Das module_platform_driver(disp_cc_qcs615_driver); 790*9b47105fSTaniya Das 791*9b47105fSTaniya Das MODULE_DESCRIPTION("QTI DISPCC QCS615 Driver"); 792*9b47105fSTaniya Das MODULE_LICENSE("GPL"); 793