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