18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (c) 2019, The Linux Foundation. All rights reserved. 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#include <linux/clk-provider.h> 78c2ecf20Sopenharmony_ci#include <linux/module.h> 88c2ecf20Sopenharmony_ci#include <linux/platform_device.h> 98c2ecf20Sopenharmony_ci#include <linux/regmap.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#include <dt-bindings/clock/qcom,dispcc-sc7180.h> 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#include "clk-alpha-pll.h" 148c2ecf20Sopenharmony_ci#include "clk-branch.h" 158c2ecf20Sopenharmony_ci#include "clk-rcg.h" 168c2ecf20Sopenharmony_ci#include "clk-regmap-divider.h" 178c2ecf20Sopenharmony_ci#include "common.h" 188c2ecf20Sopenharmony_ci#include "gdsc.h" 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_cienum { 218c2ecf20Sopenharmony_ci P_BI_TCXO, 228c2ecf20Sopenharmony_ci P_CHIP_SLEEP_CLK, 238c2ecf20Sopenharmony_ci P_CORE_BI_PLL_TEST_SE, 248c2ecf20Sopenharmony_ci P_DISP_CC_PLL0_OUT_EVEN, 258c2ecf20Sopenharmony_ci P_DISP_CC_PLL0_OUT_MAIN, 268c2ecf20Sopenharmony_ci P_DP_PHY_PLL_LINK_CLK, 278c2ecf20Sopenharmony_ci P_DP_PHY_PLL_VCO_DIV_CLK, 288c2ecf20Sopenharmony_ci P_DSI0_PHY_PLL_OUT_BYTECLK, 298c2ecf20Sopenharmony_ci P_DSI0_PHY_PLL_OUT_DSICLK, 308c2ecf20Sopenharmony_ci P_GPLL0_OUT_MAIN, 318c2ecf20Sopenharmony_ci}; 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_cistatic const struct pll_vco fabia_vco[] = { 348c2ecf20Sopenharmony_ci { 249600000, 2000000000, 0 }, 358c2ecf20Sopenharmony_ci}; 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_cistatic struct clk_alpha_pll disp_cc_pll0 = { 388c2ecf20Sopenharmony_ci .offset = 0x0, 398c2ecf20Sopenharmony_ci .vco_table = fabia_vco, 408c2ecf20Sopenharmony_ci .num_vco = ARRAY_SIZE(fabia_vco), 418c2ecf20Sopenharmony_ci .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 428c2ecf20Sopenharmony_ci .clkr = { 438c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 448c2ecf20Sopenharmony_ci .name = "disp_cc_pll0", 458c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 468c2ecf20Sopenharmony_ci .fw_name = "bi_tcxo", 478c2ecf20Sopenharmony_ci }, 488c2ecf20Sopenharmony_ci .num_parents = 1, 498c2ecf20Sopenharmony_ci .ops = &clk_alpha_pll_fabia_ops, 508c2ecf20Sopenharmony_ci }, 518c2ecf20Sopenharmony_ci }, 528c2ecf20Sopenharmony_ci}; 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_cistatic const struct clk_div_table post_div_table_disp_cc_pll0_out_even[] = { 558c2ecf20Sopenharmony_ci { 0x0, 1 }, 568c2ecf20Sopenharmony_ci { } 578c2ecf20Sopenharmony_ci}; 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_cistatic struct clk_alpha_pll_postdiv disp_cc_pll0_out_even = { 608c2ecf20Sopenharmony_ci .offset = 0x0, 618c2ecf20Sopenharmony_ci .post_div_shift = 8, 628c2ecf20Sopenharmony_ci .post_div_table = post_div_table_disp_cc_pll0_out_even, 638c2ecf20Sopenharmony_ci .num_post_div = ARRAY_SIZE(post_div_table_disp_cc_pll0_out_even), 648c2ecf20Sopenharmony_ci .width = 4, 658c2ecf20Sopenharmony_ci .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 668c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 678c2ecf20Sopenharmony_ci .name = "disp_cc_pll0_out_even", 688c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 698c2ecf20Sopenharmony_ci .hw = &disp_cc_pll0.clkr.hw, 708c2ecf20Sopenharmony_ci }, 718c2ecf20Sopenharmony_ci .num_parents = 1, 728c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 738c2ecf20Sopenharmony_ci .ops = &clk_alpha_pll_postdiv_fabia_ops, 748c2ecf20Sopenharmony_ci }, 758c2ecf20Sopenharmony_ci}; 768c2ecf20Sopenharmony_ci 778c2ecf20Sopenharmony_cistatic const struct parent_map disp_cc_parent_map_0[] = { 788c2ecf20Sopenharmony_ci { P_BI_TCXO, 0 }, 798c2ecf20Sopenharmony_ci}; 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_cistatic const struct clk_parent_data disp_cc_parent_data_0[] = { 828c2ecf20Sopenharmony_ci { .fw_name = "bi_tcxo" }, 838c2ecf20Sopenharmony_ci}; 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_cistatic const struct parent_map disp_cc_parent_map_1[] = { 868c2ecf20Sopenharmony_ci { P_BI_TCXO, 0 }, 878c2ecf20Sopenharmony_ci { P_DP_PHY_PLL_LINK_CLK, 1 }, 888c2ecf20Sopenharmony_ci { P_DP_PHY_PLL_VCO_DIV_CLK, 2 }, 898c2ecf20Sopenharmony_ci}; 908c2ecf20Sopenharmony_ci 918c2ecf20Sopenharmony_cistatic const struct clk_parent_data disp_cc_parent_data_1[] = { 928c2ecf20Sopenharmony_ci { .fw_name = "bi_tcxo" }, 938c2ecf20Sopenharmony_ci { .fw_name = "dp_phy_pll_link_clk" }, 948c2ecf20Sopenharmony_ci { .fw_name = "dp_phy_pll_vco_div_clk" }, 958c2ecf20Sopenharmony_ci}; 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_cistatic const struct parent_map disp_cc_parent_map_2[] = { 988c2ecf20Sopenharmony_ci { P_BI_TCXO, 0 }, 998c2ecf20Sopenharmony_ci { P_DSI0_PHY_PLL_OUT_BYTECLK, 1 }, 1008c2ecf20Sopenharmony_ci}; 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_cistatic const struct clk_parent_data disp_cc_parent_data_2[] = { 1038c2ecf20Sopenharmony_ci { .fw_name = "bi_tcxo" }, 1048c2ecf20Sopenharmony_ci { .fw_name = "dsi0_phy_pll_out_byteclk" }, 1058c2ecf20Sopenharmony_ci}; 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_cistatic const struct parent_map disp_cc_parent_map_3[] = { 1088c2ecf20Sopenharmony_ci { P_BI_TCXO, 0 }, 1098c2ecf20Sopenharmony_ci { P_DISP_CC_PLL0_OUT_MAIN, 1 }, 1108c2ecf20Sopenharmony_ci { P_GPLL0_OUT_MAIN, 4 }, 1118c2ecf20Sopenharmony_ci { P_DISP_CC_PLL0_OUT_EVEN, 5 }, 1128c2ecf20Sopenharmony_ci}; 1138c2ecf20Sopenharmony_ci 1148c2ecf20Sopenharmony_cistatic const struct clk_parent_data disp_cc_parent_data_3[] = { 1158c2ecf20Sopenharmony_ci { .fw_name = "bi_tcxo" }, 1168c2ecf20Sopenharmony_ci { .hw = &disp_cc_pll0.clkr.hw }, 1178c2ecf20Sopenharmony_ci { .fw_name = "gcc_disp_gpll0_clk_src" }, 1188c2ecf20Sopenharmony_ci { .hw = &disp_cc_pll0_out_even.clkr.hw }, 1198c2ecf20Sopenharmony_ci}; 1208c2ecf20Sopenharmony_ci 1218c2ecf20Sopenharmony_cistatic const struct parent_map disp_cc_parent_map_4[] = { 1228c2ecf20Sopenharmony_ci { P_BI_TCXO, 0 }, 1238c2ecf20Sopenharmony_ci { P_GPLL0_OUT_MAIN, 4 }, 1248c2ecf20Sopenharmony_ci}; 1258c2ecf20Sopenharmony_ci 1268c2ecf20Sopenharmony_cistatic const struct clk_parent_data disp_cc_parent_data_4[] = { 1278c2ecf20Sopenharmony_ci { .fw_name = "bi_tcxo" }, 1288c2ecf20Sopenharmony_ci { .fw_name = "gcc_disp_gpll0_clk_src" }, 1298c2ecf20Sopenharmony_ci}; 1308c2ecf20Sopenharmony_ci 1318c2ecf20Sopenharmony_cistatic const struct parent_map disp_cc_parent_map_5[] = { 1328c2ecf20Sopenharmony_ci { P_BI_TCXO, 0 }, 1338c2ecf20Sopenharmony_ci { P_DSI0_PHY_PLL_OUT_DSICLK, 1 }, 1348c2ecf20Sopenharmony_ci}; 1358c2ecf20Sopenharmony_ci 1368c2ecf20Sopenharmony_cistatic const struct clk_parent_data disp_cc_parent_data_5[] = { 1378c2ecf20Sopenharmony_ci { .fw_name = "bi_tcxo" }, 1388c2ecf20Sopenharmony_ci { .fw_name = "dsi0_phy_pll_out_dsiclk" }, 1398c2ecf20Sopenharmony_ci}; 1408c2ecf20Sopenharmony_ci 1418c2ecf20Sopenharmony_cistatic const struct freq_tbl ftbl_disp_cc_mdss_ahb_clk_src[] = { 1428c2ecf20Sopenharmony_ci F(19200000, P_BI_TCXO, 1, 0, 0), 1438c2ecf20Sopenharmony_ci F(37500000, P_GPLL0_OUT_MAIN, 16, 0, 0), 1448c2ecf20Sopenharmony_ci F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 1458c2ecf20Sopenharmony_ci { } 1468c2ecf20Sopenharmony_ci}; 1478c2ecf20Sopenharmony_ci 1488c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_ahb_clk_src = { 1498c2ecf20Sopenharmony_ci .cmd_rcgr = 0x22bc, 1508c2ecf20Sopenharmony_ci .mnd_width = 0, 1518c2ecf20Sopenharmony_ci .hid_width = 5, 1528c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_4, 1538c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src, 1548c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 1558c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_ahb_clk_src", 1568c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_4, 1578c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_4), 1588c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 1598c2ecf20Sopenharmony_ci .ops = &clk_rcg2_shared_ops, 1608c2ecf20Sopenharmony_ci }, 1618c2ecf20Sopenharmony_ci}; 1628c2ecf20Sopenharmony_ci 1638c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_byte0_clk_src = { 1648c2ecf20Sopenharmony_ci .cmd_rcgr = 0x2110, 1658c2ecf20Sopenharmony_ci .mnd_width = 0, 1668c2ecf20Sopenharmony_ci .hid_width = 5, 1678c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_2, 1688c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 1698c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_byte0_clk_src", 1708c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_2, 1718c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_2), 1728c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 1738c2ecf20Sopenharmony_ci .ops = &clk_byte2_ops, 1748c2ecf20Sopenharmony_ci }, 1758c2ecf20Sopenharmony_ci}; 1768c2ecf20Sopenharmony_ci 1778c2ecf20Sopenharmony_cistatic const struct freq_tbl ftbl_disp_cc_mdss_dp_aux_clk_src[] = { 1788c2ecf20Sopenharmony_ci F(19200000, P_BI_TCXO, 1, 0, 0), 1798c2ecf20Sopenharmony_ci { } 1808c2ecf20Sopenharmony_ci}; 1818c2ecf20Sopenharmony_ci 1828c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_dp_aux_clk_src = { 1838c2ecf20Sopenharmony_ci .cmd_rcgr = 0x21dc, 1848c2ecf20Sopenharmony_ci .mnd_width = 0, 1858c2ecf20Sopenharmony_ci .hid_width = 5, 1868c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_0, 1878c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src, 1888c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 1898c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_aux_clk_src", 1908c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_0, 1918c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_0), 1928c2ecf20Sopenharmony_ci .ops = &clk_rcg2_ops, 1938c2ecf20Sopenharmony_ci }, 1948c2ecf20Sopenharmony_ci}; 1958c2ecf20Sopenharmony_ci 1968c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_dp_crypto_clk_src = { 1978c2ecf20Sopenharmony_ci .cmd_rcgr = 0x2194, 1988c2ecf20Sopenharmony_ci .mnd_width = 0, 1998c2ecf20Sopenharmony_ci .hid_width = 5, 2008c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_1, 2018c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 2028c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_crypto_clk_src", 2038c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_1, 2048c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_1), 2058c2ecf20Sopenharmony_ci .ops = &clk_byte2_ops, 2068c2ecf20Sopenharmony_ci }, 2078c2ecf20Sopenharmony_ci}; 2088c2ecf20Sopenharmony_ci 2098c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_dp_link_clk_src = { 2108c2ecf20Sopenharmony_ci .cmd_rcgr = 0x2178, 2118c2ecf20Sopenharmony_ci .mnd_width = 0, 2128c2ecf20Sopenharmony_ci .hid_width = 5, 2138c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_1, 2148c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 2158c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_link_clk_src", 2168c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_1, 2178c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_1), 2188c2ecf20Sopenharmony_ci .ops = &clk_byte2_ops, 2198c2ecf20Sopenharmony_ci }, 2208c2ecf20Sopenharmony_ci}; 2218c2ecf20Sopenharmony_ci 2228c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_dp_pixel_clk_src = { 2238c2ecf20Sopenharmony_ci .cmd_rcgr = 0x21ac, 2248c2ecf20Sopenharmony_ci .mnd_width = 16, 2258c2ecf20Sopenharmony_ci .hid_width = 5, 2268c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_1, 2278c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 2288c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_pixel_clk_src", 2298c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_1, 2308c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_1), 2318c2ecf20Sopenharmony_ci .ops = &clk_dp_ops, 2328c2ecf20Sopenharmony_ci }, 2338c2ecf20Sopenharmony_ci}; 2348c2ecf20Sopenharmony_ci 2358c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_esc0_clk_src = { 2368c2ecf20Sopenharmony_ci .cmd_rcgr = 0x2148, 2378c2ecf20Sopenharmony_ci .mnd_width = 0, 2388c2ecf20Sopenharmony_ci .hid_width = 5, 2398c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_2, 2408c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src, 2418c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 2428c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_esc0_clk_src", 2438c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_2, 2448c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_2), 2458c2ecf20Sopenharmony_ci .ops = &clk_rcg2_ops, 2468c2ecf20Sopenharmony_ci }, 2478c2ecf20Sopenharmony_ci}; 2488c2ecf20Sopenharmony_ci 2498c2ecf20Sopenharmony_cistatic const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src[] = { 2508c2ecf20Sopenharmony_ci F(19200000, P_BI_TCXO, 1, 0, 0), 2518c2ecf20Sopenharmony_ci F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), 2528c2ecf20Sopenharmony_ci F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 2538c2ecf20Sopenharmony_ci F(345000000, P_DISP_CC_PLL0_OUT_MAIN, 4, 0, 0), 2548c2ecf20Sopenharmony_ci F(460000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), 2558c2ecf20Sopenharmony_ci { } 2568c2ecf20Sopenharmony_ci}; 2578c2ecf20Sopenharmony_ci 2588c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_mdp_clk_src = { 2598c2ecf20Sopenharmony_ci .cmd_rcgr = 0x20c8, 2608c2ecf20Sopenharmony_ci .mnd_width = 0, 2618c2ecf20Sopenharmony_ci .hid_width = 5, 2628c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_3, 2638c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src, 2648c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 2658c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_mdp_clk_src", 2668c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_3, 2678c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_3), 2688c2ecf20Sopenharmony_ci .ops = &clk_rcg2_shared_ops, 2698c2ecf20Sopenharmony_ci }, 2708c2ecf20Sopenharmony_ci}; 2718c2ecf20Sopenharmony_ci 2728c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = { 2738c2ecf20Sopenharmony_ci .cmd_rcgr = 0x2098, 2748c2ecf20Sopenharmony_ci .mnd_width = 8, 2758c2ecf20Sopenharmony_ci .hid_width = 5, 2768c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_5, 2778c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 2788c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_pclk0_clk_src", 2798c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_5, 2808c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_5), 2818c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 2828c2ecf20Sopenharmony_ci .ops = &clk_pixel_ops, 2838c2ecf20Sopenharmony_ci }, 2848c2ecf20Sopenharmony_ci}; 2858c2ecf20Sopenharmony_ci 2868c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_rot_clk_src = { 2878c2ecf20Sopenharmony_ci .cmd_rcgr = 0x20e0, 2888c2ecf20Sopenharmony_ci .mnd_width = 0, 2898c2ecf20Sopenharmony_ci .hid_width = 5, 2908c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_3, 2918c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src, 2928c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 2938c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_rot_clk_src", 2948c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_3, 2958c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_3), 2968c2ecf20Sopenharmony_ci .ops = &clk_rcg2_shared_ops, 2978c2ecf20Sopenharmony_ci }, 2988c2ecf20Sopenharmony_ci}; 2998c2ecf20Sopenharmony_ci 3008c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_vsync_clk_src = { 3018c2ecf20Sopenharmony_ci .cmd_rcgr = 0x20f8, 3028c2ecf20Sopenharmony_ci .mnd_width = 0, 3038c2ecf20Sopenharmony_ci .hid_width = 5, 3048c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_0, 3058c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src, 3068c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 3078c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_vsync_clk_src", 3088c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_0, 3098c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_0), 3108c2ecf20Sopenharmony_ci .ops = &clk_rcg2_shared_ops, 3118c2ecf20Sopenharmony_ci }, 3128c2ecf20Sopenharmony_ci}; 3138c2ecf20Sopenharmony_ci 3148c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_ahb_clk = { 3158c2ecf20Sopenharmony_ci .halt_reg = 0x2080, 3168c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 3178c2ecf20Sopenharmony_ci .clkr = { 3188c2ecf20Sopenharmony_ci .enable_reg = 0x2080, 3198c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 3208c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 3218c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_ahb_clk", 3228c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 3238c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_ahb_clk_src.clkr.hw, 3248c2ecf20Sopenharmony_ci }, 3258c2ecf20Sopenharmony_ci .num_parents = 1, 3268c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 3278c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 3288c2ecf20Sopenharmony_ci }, 3298c2ecf20Sopenharmony_ci }, 3308c2ecf20Sopenharmony_ci}; 3318c2ecf20Sopenharmony_ci 3328c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_byte0_clk = { 3338c2ecf20Sopenharmony_ci .halt_reg = 0x2028, 3348c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 3358c2ecf20Sopenharmony_ci .clkr = { 3368c2ecf20Sopenharmony_ci .enable_reg = 0x2028, 3378c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 3388c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 3398c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_byte0_clk", 3408c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 3418c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_byte0_clk_src.clkr.hw, 3428c2ecf20Sopenharmony_ci }, 3438c2ecf20Sopenharmony_ci .num_parents = 1, 3448c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 3458c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 3468c2ecf20Sopenharmony_ci }, 3478c2ecf20Sopenharmony_ci }, 3488c2ecf20Sopenharmony_ci}; 3498c2ecf20Sopenharmony_ci 3508c2ecf20Sopenharmony_cistatic struct clk_regmap_div disp_cc_mdss_byte0_div_clk_src = { 3518c2ecf20Sopenharmony_ci .reg = 0x2128, 3528c2ecf20Sopenharmony_ci .shift = 0, 3538c2ecf20Sopenharmony_ci .width = 2, 3548c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data) { 3558c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_byte0_div_clk_src", 3568c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 3578c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_byte0_clk_src.clkr.hw 3588c2ecf20Sopenharmony_ci }, 3598c2ecf20Sopenharmony_ci .num_parents = 1, 3608c2ecf20Sopenharmony_ci .ops = &clk_regmap_div_ops, 3618c2ecf20Sopenharmony_ci }, 3628c2ecf20Sopenharmony_ci}; 3638c2ecf20Sopenharmony_ci 3648c2ecf20Sopenharmony_cistatic struct clk_regmap_div disp_cc_mdss_dp_link_div_clk_src = { 3658c2ecf20Sopenharmony_ci .reg = 0x2190, 3668c2ecf20Sopenharmony_ci .shift = 0, 3678c2ecf20Sopenharmony_ci .width = 2, 3688c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data) { 3698c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_link_div_clk_src", 3708c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 3718c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_link_clk_src.clkr.hw 3728c2ecf20Sopenharmony_ci }, 3738c2ecf20Sopenharmony_ci .num_parents = 1, 3748c2ecf20Sopenharmony_ci .ops = &clk_regmap_div_ops, 3758c2ecf20Sopenharmony_ci }, 3768c2ecf20Sopenharmony_ci}; 3778c2ecf20Sopenharmony_ci 3788c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_byte0_intf_clk = { 3798c2ecf20Sopenharmony_ci .halt_reg = 0x202c, 3808c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 3818c2ecf20Sopenharmony_ci .clkr = { 3828c2ecf20Sopenharmony_ci .enable_reg = 0x202c, 3838c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 3848c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 3858c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_byte0_intf_clk", 3868c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 3878c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_byte0_div_clk_src.clkr.hw, 3888c2ecf20Sopenharmony_ci }, 3898c2ecf20Sopenharmony_ci .num_parents = 1, 3908c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 3918c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 3928c2ecf20Sopenharmony_ci }, 3938c2ecf20Sopenharmony_ci }, 3948c2ecf20Sopenharmony_ci}; 3958c2ecf20Sopenharmony_ci 3968c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_dp_aux_clk = { 3978c2ecf20Sopenharmony_ci .halt_reg = 0x2054, 3988c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 3998c2ecf20Sopenharmony_ci .clkr = { 4008c2ecf20Sopenharmony_ci .enable_reg = 0x2054, 4018c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 4028c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 4038c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_aux_clk", 4048c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 4058c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_aux_clk_src.clkr.hw, 4068c2ecf20Sopenharmony_ci }, 4078c2ecf20Sopenharmony_ci .num_parents = 1, 4088c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 4098c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 4108c2ecf20Sopenharmony_ci }, 4118c2ecf20Sopenharmony_ci }, 4128c2ecf20Sopenharmony_ci}; 4138c2ecf20Sopenharmony_ci 4148c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_dp_crypto_clk = { 4158c2ecf20Sopenharmony_ci .halt_reg = 0x2048, 4168c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 4178c2ecf20Sopenharmony_ci .clkr = { 4188c2ecf20Sopenharmony_ci .enable_reg = 0x2048, 4198c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 4208c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 4218c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_crypto_clk", 4228c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 4238c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_crypto_clk_src.clkr.hw, 4248c2ecf20Sopenharmony_ci }, 4258c2ecf20Sopenharmony_ci .num_parents = 1, 4268c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 4278c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 4288c2ecf20Sopenharmony_ci }, 4298c2ecf20Sopenharmony_ci }, 4308c2ecf20Sopenharmony_ci}; 4318c2ecf20Sopenharmony_ci 4328c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_dp_link_clk = { 4338c2ecf20Sopenharmony_ci .halt_reg = 0x2040, 4348c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 4358c2ecf20Sopenharmony_ci .clkr = { 4368c2ecf20Sopenharmony_ci .enable_reg = 0x2040, 4378c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 4388c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 4398c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_link_clk", 4408c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 4418c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_link_clk_src.clkr.hw, 4428c2ecf20Sopenharmony_ci }, 4438c2ecf20Sopenharmony_ci .num_parents = 1, 4448c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 4458c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 4468c2ecf20Sopenharmony_ci }, 4478c2ecf20Sopenharmony_ci }, 4488c2ecf20Sopenharmony_ci}; 4498c2ecf20Sopenharmony_ci 4508c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_dp_link_intf_clk = { 4518c2ecf20Sopenharmony_ci .halt_reg = 0x2044, 4528c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 4538c2ecf20Sopenharmony_ci .clkr = { 4548c2ecf20Sopenharmony_ci .enable_reg = 0x2044, 4558c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 4568c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 4578c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_link_intf_clk", 4588c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 4598c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_link_div_clk_src.clkr.hw, 4608c2ecf20Sopenharmony_ci }, 4618c2ecf20Sopenharmony_ci .num_parents = 1, 4628c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 4638c2ecf20Sopenharmony_ci }, 4648c2ecf20Sopenharmony_ci }, 4658c2ecf20Sopenharmony_ci}; 4668c2ecf20Sopenharmony_ci 4678c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_dp_pixel_clk = { 4688c2ecf20Sopenharmony_ci .halt_reg = 0x204c, 4698c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 4708c2ecf20Sopenharmony_ci .clkr = { 4718c2ecf20Sopenharmony_ci .enable_reg = 0x204c, 4728c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 4738c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 4748c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_pixel_clk", 4758c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 4768c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_pixel_clk_src.clkr.hw, 4778c2ecf20Sopenharmony_ci }, 4788c2ecf20Sopenharmony_ci .num_parents = 1, 4798c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 4808c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 4818c2ecf20Sopenharmony_ci }, 4828c2ecf20Sopenharmony_ci }, 4838c2ecf20Sopenharmony_ci}; 4848c2ecf20Sopenharmony_ci 4858c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_esc0_clk = { 4868c2ecf20Sopenharmony_ci .halt_reg = 0x2038, 4878c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 4888c2ecf20Sopenharmony_ci .clkr = { 4898c2ecf20Sopenharmony_ci .enable_reg = 0x2038, 4908c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 4918c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 4928c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_esc0_clk", 4938c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 4948c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_esc0_clk_src.clkr.hw, 4958c2ecf20Sopenharmony_ci }, 4968c2ecf20Sopenharmony_ci .num_parents = 1, 4978c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 4988c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 4998c2ecf20Sopenharmony_ci }, 5008c2ecf20Sopenharmony_ci }, 5018c2ecf20Sopenharmony_ci}; 5028c2ecf20Sopenharmony_ci 5038c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_mdp_clk = { 5048c2ecf20Sopenharmony_ci .halt_reg = 0x200c, 5058c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 5068c2ecf20Sopenharmony_ci .clkr = { 5078c2ecf20Sopenharmony_ci .enable_reg = 0x200c, 5088c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 5098c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 5108c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_mdp_clk", 5118c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 5128c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_mdp_clk_src.clkr.hw, 5138c2ecf20Sopenharmony_ci }, 5148c2ecf20Sopenharmony_ci .num_parents = 1, 5158c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 5168c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 5178c2ecf20Sopenharmony_ci }, 5188c2ecf20Sopenharmony_ci }, 5198c2ecf20Sopenharmony_ci}; 5208c2ecf20Sopenharmony_ci 5218c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_mdp_lut_clk = { 5228c2ecf20Sopenharmony_ci .halt_reg = 0x201c, 5238c2ecf20Sopenharmony_ci .halt_check = BRANCH_VOTED, 5248c2ecf20Sopenharmony_ci .clkr = { 5258c2ecf20Sopenharmony_ci .enable_reg = 0x201c, 5268c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 5278c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 5288c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_mdp_lut_clk", 5298c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 5308c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_mdp_clk_src.clkr.hw, 5318c2ecf20Sopenharmony_ci }, 5328c2ecf20Sopenharmony_ci .num_parents = 1, 5338c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 5348c2ecf20Sopenharmony_ci }, 5358c2ecf20Sopenharmony_ci }, 5368c2ecf20Sopenharmony_ci}; 5378c2ecf20Sopenharmony_ci 5388c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_non_gdsc_ahb_clk = { 5398c2ecf20Sopenharmony_ci .halt_reg = 0x4004, 5408c2ecf20Sopenharmony_ci .halt_check = BRANCH_VOTED, 5418c2ecf20Sopenharmony_ci .clkr = { 5428c2ecf20Sopenharmony_ci .enable_reg = 0x4004, 5438c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 5448c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 5458c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_non_gdsc_ahb_clk", 5468c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 5478c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_ahb_clk_src.clkr.hw, 5488c2ecf20Sopenharmony_ci }, 5498c2ecf20Sopenharmony_ci .num_parents = 1, 5508c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 5518c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 5528c2ecf20Sopenharmony_ci }, 5538c2ecf20Sopenharmony_ci }, 5548c2ecf20Sopenharmony_ci}; 5558c2ecf20Sopenharmony_ci 5568c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_pclk0_clk = { 5578c2ecf20Sopenharmony_ci .halt_reg = 0x2004, 5588c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 5598c2ecf20Sopenharmony_ci .clkr = { 5608c2ecf20Sopenharmony_ci .enable_reg = 0x2004, 5618c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 5628c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 5638c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_pclk0_clk", 5648c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 5658c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_pclk0_clk_src.clkr.hw, 5668c2ecf20Sopenharmony_ci }, 5678c2ecf20Sopenharmony_ci .num_parents = 1, 5688c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 5698c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 5708c2ecf20Sopenharmony_ci }, 5718c2ecf20Sopenharmony_ci }, 5728c2ecf20Sopenharmony_ci}; 5738c2ecf20Sopenharmony_ci 5748c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_rot_clk = { 5758c2ecf20Sopenharmony_ci .halt_reg = 0x2014, 5768c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 5778c2ecf20Sopenharmony_ci .clkr = { 5788c2ecf20Sopenharmony_ci .enable_reg = 0x2014, 5798c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 5808c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 5818c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_rot_clk", 5828c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 5838c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_rot_clk_src.clkr.hw, 5848c2ecf20Sopenharmony_ci }, 5858c2ecf20Sopenharmony_ci .num_parents = 1, 5868c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 5878c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 5888c2ecf20Sopenharmony_ci }, 5898c2ecf20Sopenharmony_ci }, 5908c2ecf20Sopenharmony_ci}; 5918c2ecf20Sopenharmony_ci 5928c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_rscc_vsync_clk = { 5938c2ecf20Sopenharmony_ci .halt_reg = 0x4008, 5948c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 5958c2ecf20Sopenharmony_ci .clkr = { 5968c2ecf20Sopenharmony_ci .enable_reg = 0x4008, 5978c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 5988c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 5998c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_rscc_vsync_clk", 6008c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 6018c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_vsync_clk_src.clkr.hw, 6028c2ecf20Sopenharmony_ci }, 6038c2ecf20Sopenharmony_ci .num_parents = 1, 6048c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 6058c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 6068c2ecf20Sopenharmony_ci }, 6078c2ecf20Sopenharmony_ci }, 6088c2ecf20Sopenharmony_ci}; 6098c2ecf20Sopenharmony_ci 6108c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_vsync_clk = { 6118c2ecf20Sopenharmony_ci .halt_reg = 0x2024, 6128c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 6138c2ecf20Sopenharmony_ci .clkr = { 6148c2ecf20Sopenharmony_ci .enable_reg = 0x2024, 6158c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 6168c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 6178c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_vsync_clk", 6188c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 6198c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_vsync_clk_src.clkr.hw, 6208c2ecf20Sopenharmony_ci }, 6218c2ecf20Sopenharmony_ci .num_parents = 1, 6228c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 6238c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 6248c2ecf20Sopenharmony_ci }, 6258c2ecf20Sopenharmony_ci }, 6268c2ecf20Sopenharmony_ci}; 6278c2ecf20Sopenharmony_ci 6288c2ecf20Sopenharmony_cistatic struct gdsc mdss_gdsc = { 6298c2ecf20Sopenharmony_ci .gdscr = 0x3000, 6308c2ecf20Sopenharmony_ci .pd = { 6318c2ecf20Sopenharmony_ci .name = "mdss_gdsc", 6328c2ecf20Sopenharmony_ci }, 6338c2ecf20Sopenharmony_ci .pwrsts = PWRSTS_OFF_ON, 6348c2ecf20Sopenharmony_ci .flags = HW_CTRL, 6358c2ecf20Sopenharmony_ci}; 6368c2ecf20Sopenharmony_ci 6378c2ecf20Sopenharmony_cistatic struct gdsc *disp_cc_sc7180_gdscs[] = { 6388c2ecf20Sopenharmony_ci [MDSS_GDSC] = &mdss_gdsc, 6398c2ecf20Sopenharmony_ci}; 6408c2ecf20Sopenharmony_ci 6418c2ecf20Sopenharmony_cistatic struct clk_regmap *disp_cc_sc7180_clocks[] = { 6428c2ecf20Sopenharmony_ci [DISP_CC_MDSS_AHB_CLK] = &disp_cc_mdss_ahb_clk.clkr, 6438c2ecf20Sopenharmony_ci [DISP_CC_MDSS_AHB_CLK_SRC] = &disp_cc_mdss_ahb_clk_src.clkr, 6448c2ecf20Sopenharmony_ci [DISP_CC_MDSS_BYTE0_CLK] = &disp_cc_mdss_byte0_clk.clkr, 6458c2ecf20Sopenharmony_ci [DISP_CC_MDSS_BYTE0_CLK_SRC] = &disp_cc_mdss_byte0_clk_src.clkr, 6468c2ecf20Sopenharmony_ci [DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] = &disp_cc_mdss_byte0_div_clk_src.clkr, 6478c2ecf20Sopenharmony_ci [DISP_CC_MDSS_BYTE0_INTF_CLK] = &disp_cc_mdss_byte0_intf_clk.clkr, 6488c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_AUX_CLK] = &disp_cc_mdss_dp_aux_clk.clkr, 6498c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_AUX_CLK_SRC] = &disp_cc_mdss_dp_aux_clk_src.clkr, 6508c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_CRYPTO_CLK] = &disp_cc_mdss_dp_crypto_clk.clkr, 6518c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_CRYPTO_CLK_SRC] = &disp_cc_mdss_dp_crypto_clk_src.clkr, 6528c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_LINK_CLK] = &disp_cc_mdss_dp_link_clk.clkr, 6538c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_LINK_CLK_SRC] = &disp_cc_mdss_dp_link_clk_src.clkr, 6548c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_LINK_DIV_CLK_SRC] = 6558c2ecf20Sopenharmony_ci &disp_cc_mdss_dp_link_div_clk_src.clkr, 6568c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_LINK_INTF_CLK] = &disp_cc_mdss_dp_link_intf_clk.clkr, 6578c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_PIXEL_CLK] = &disp_cc_mdss_dp_pixel_clk.clkr, 6588c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_PIXEL_CLK_SRC] = &disp_cc_mdss_dp_pixel_clk_src.clkr, 6598c2ecf20Sopenharmony_ci [DISP_CC_MDSS_ESC0_CLK] = &disp_cc_mdss_esc0_clk.clkr, 6608c2ecf20Sopenharmony_ci [DISP_CC_MDSS_ESC0_CLK_SRC] = &disp_cc_mdss_esc0_clk_src.clkr, 6618c2ecf20Sopenharmony_ci [DISP_CC_MDSS_MDP_CLK] = &disp_cc_mdss_mdp_clk.clkr, 6628c2ecf20Sopenharmony_ci [DISP_CC_MDSS_MDP_CLK_SRC] = &disp_cc_mdss_mdp_clk_src.clkr, 6638c2ecf20Sopenharmony_ci [DISP_CC_MDSS_MDP_LUT_CLK] = &disp_cc_mdss_mdp_lut_clk.clkr, 6648c2ecf20Sopenharmony_ci [DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &disp_cc_mdss_non_gdsc_ahb_clk.clkr, 6658c2ecf20Sopenharmony_ci [DISP_CC_MDSS_PCLK0_CLK] = &disp_cc_mdss_pclk0_clk.clkr, 6668c2ecf20Sopenharmony_ci [DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr, 6678c2ecf20Sopenharmony_ci [DISP_CC_MDSS_ROT_CLK] = &disp_cc_mdss_rot_clk.clkr, 6688c2ecf20Sopenharmony_ci [DISP_CC_MDSS_ROT_CLK_SRC] = &disp_cc_mdss_rot_clk_src.clkr, 6698c2ecf20Sopenharmony_ci [DISP_CC_MDSS_RSCC_VSYNC_CLK] = &disp_cc_mdss_rscc_vsync_clk.clkr, 6708c2ecf20Sopenharmony_ci [DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr, 6718c2ecf20Sopenharmony_ci [DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr, 6728c2ecf20Sopenharmony_ci [DISP_CC_PLL0] = &disp_cc_pll0.clkr, 6738c2ecf20Sopenharmony_ci [DISP_CC_PLL0_OUT_EVEN] = &disp_cc_pll0_out_even.clkr, 6748c2ecf20Sopenharmony_ci}; 6758c2ecf20Sopenharmony_ci 6768c2ecf20Sopenharmony_cistatic const struct regmap_config disp_cc_sc7180_regmap_config = { 6778c2ecf20Sopenharmony_ci .reg_bits = 32, 6788c2ecf20Sopenharmony_ci .reg_stride = 4, 6798c2ecf20Sopenharmony_ci .val_bits = 32, 6808c2ecf20Sopenharmony_ci .max_register = 0x10000, 6818c2ecf20Sopenharmony_ci .fast_io = true, 6828c2ecf20Sopenharmony_ci}; 6838c2ecf20Sopenharmony_ci 6848c2ecf20Sopenharmony_cistatic const struct qcom_cc_desc disp_cc_sc7180_desc = { 6858c2ecf20Sopenharmony_ci .config = &disp_cc_sc7180_regmap_config, 6868c2ecf20Sopenharmony_ci .clks = disp_cc_sc7180_clocks, 6878c2ecf20Sopenharmony_ci .num_clks = ARRAY_SIZE(disp_cc_sc7180_clocks), 6888c2ecf20Sopenharmony_ci .gdscs = disp_cc_sc7180_gdscs, 6898c2ecf20Sopenharmony_ci .num_gdscs = ARRAY_SIZE(disp_cc_sc7180_gdscs), 6908c2ecf20Sopenharmony_ci}; 6918c2ecf20Sopenharmony_ci 6928c2ecf20Sopenharmony_cistatic const struct of_device_id disp_cc_sc7180_match_table[] = { 6938c2ecf20Sopenharmony_ci { .compatible = "qcom,sc7180-dispcc" }, 6948c2ecf20Sopenharmony_ci { } 6958c2ecf20Sopenharmony_ci}; 6968c2ecf20Sopenharmony_ciMODULE_DEVICE_TABLE(of, disp_cc_sc7180_match_table); 6978c2ecf20Sopenharmony_ci 6988c2ecf20Sopenharmony_cistatic int disp_cc_sc7180_probe(struct platform_device *pdev) 6998c2ecf20Sopenharmony_ci{ 7008c2ecf20Sopenharmony_ci struct regmap *regmap; 7018c2ecf20Sopenharmony_ci struct alpha_pll_config disp_cc_pll_config = {}; 7028c2ecf20Sopenharmony_ci 7038c2ecf20Sopenharmony_ci regmap = qcom_cc_map(pdev, &disp_cc_sc7180_desc); 7048c2ecf20Sopenharmony_ci if (IS_ERR(regmap)) 7058c2ecf20Sopenharmony_ci return PTR_ERR(regmap); 7068c2ecf20Sopenharmony_ci 7078c2ecf20Sopenharmony_ci /* 1380MHz configuration */ 7088c2ecf20Sopenharmony_ci disp_cc_pll_config.l = 0x47; 7098c2ecf20Sopenharmony_ci disp_cc_pll_config.alpha = 0xe000; 7108c2ecf20Sopenharmony_ci disp_cc_pll_config.user_ctl_val = 0x00000001; 7118c2ecf20Sopenharmony_ci disp_cc_pll_config.user_ctl_hi_val = 0x00004805; 7128c2ecf20Sopenharmony_ci 7138c2ecf20Sopenharmony_ci clk_fabia_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll_config); 7148c2ecf20Sopenharmony_ci 7158c2ecf20Sopenharmony_ci return qcom_cc_really_probe(pdev, &disp_cc_sc7180_desc, regmap); 7168c2ecf20Sopenharmony_ci} 7178c2ecf20Sopenharmony_ci 7188c2ecf20Sopenharmony_cistatic struct platform_driver disp_cc_sc7180_driver = { 7198c2ecf20Sopenharmony_ci .probe = disp_cc_sc7180_probe, 7208c2ecf20Sopenharmony_ci .driver = { 7218c2ecf20Sopenharmony_ci .name = "sc7180-dispcc", 7228c2ecf20Sopenharmony_ci .of_match_table = disp_cc_sc7180_match_table, 7238c2ecf20Sopenharmony_ci }, 7248c2ecf20Sopenharmony_ci}; 7258c2ecf20Sopenharmony_ci 7268c2ecf20Sopenharmony_cistatic int __init disp_cc_sc7180_init(void) 7278c2ecf20Sopenharmony_ci{ 7288c2ecf20Sopenharmony_ci return platform_driver_register(&disp_cc_sc7180_driver); 7298c2ecf20Sopenharmony_ci} 7308c2ecf20Sopenharmony_cisubsys_initcall(disp_cc_sc7180_init); 7318c2ecf20Sopenharmony_ci 7328c2ecf20Sopenharmony_cistatic void __exit disp_cc_sc7180_exit(void) 7338c2ecf20Sopenharmony_ci{ 7348c2ecf20Sopenharmony_ci platform_driver_unregister(&disp_cc_sc7180_driver); 7358c2ecf20Sopenharmony_ci} 7368c2ecf20Sopenharmony_cimodule_exit(disp_cc_sc7180_exit); 7378c2ecf20Sopenharmony_ci 7388c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("QTI DISP_CC SC7180 Driver"); 7398c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL v2"); 740