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