18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (c) 2018-2020, 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#include <linux/reset-controller.h> 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <dt-bindings/clock/qcom,dispcc-sm8250.h> 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#include "clk-alpha-pll.h" 158c2ecf20Sopenharmony_ci#include "clk-branch.h" 168c2ecf20Sopenharmony_ci#include "clk-rcg.h" 178c2ecf20Sopenharmony_ci#include "clk-regmap-divider.h" 188c2ecf20Sopenharmony_ci#include "common.h" 198c2ecf20Sopenharmony_ci#include "gdsc.h" 208c2ecf20Sopenharmony_ci#include "reset.h" 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cienum { 238c2ecf20Sopenharmony_ci P_BI_TCXO, 248c2ecf20Sopenharmony_ci P_CHIP_SLEEP_CLK, 258c2ecf20Sopenharmony_ci P_CORE_BI_PLL_TEST_SE, 268c2ecf20Sopenharmony_ci P_DISP_CC_PLL0_OUT_MAIN, 278c2ecf20Sopenharmony_ci P_DISP_CC_PLL1_OUT_EVEN, 288c2ecf20Sopenharmony_ci P_DISP_CC_PLL1_OUT_MAIN, 298c2ecf20Sopenharmony_ci P_DP_PHY_PLL_LINK_CLK, 308c2ecf20Sopenharmony_ci P_DP_PHY_PLL_VCO_DIV_CLK, 318c2ecf20Sopenharmony_ci P_DPTX1_PHY_PLL_LINK_CLK, 328c2ecf20Sopenharmony_ci P_DPTX1_PHY_PLL_VCO_DIV_CLK, 338c2ecf20Sopenharmony_ci P_DPTX2_PHY_PLL_LINK_CLK, 348c2ecf20Sopenharmony_ci P_DPTX2_PHY_PLL_VCO_DIV_CLK, 358c2ecf20Sopenharmony_ci P_DSI0_PHY_PLL_OUT_BYTECLK, 368c2ecf20Sopenharmony_ci P_DSI0_PHY_PLL_OUT_DSICLK, 378c2ecf20Sopenharmony_ci P_DSI1_PHY_PLL_OUT_BYTECLK, 388c2ecf20Sopenharmony_ci P_DSI1_PHY_PLL_OUT_DSICLK, 398c2ecf20Sopenharmony_ci P_EDP_PHY_PLL_LINK_CLK, 408c2ecf20Sopenharmony_ci P_EDP_PHY_PLL_VCO_DIV_CLK, 418c2ecf20Sopenharmony_ci}; 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_cistatic struct pll_vco vco_table[] = { 448c2ecf20Sopenharmony_ci { 249600000, 2000000000, 0 }, 458c2ecf20Sopenharmony_ci}; 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_cistatic struct alpha_pll_config disp_cc_pll0_config = { 488c2ecf20Sopenharmony_ci .l = 0x47, 498c2ecf20Sopenharmony_ci .alpha = 0xE000, 508c2ecf20Sopenharmony_ci .config_ctl_val = 0x20485699, 518c2ecf20Sopenharmony_ci .config_ctl_hi_val = 0x00002261, 528c2ecf20Sopenharmony_ci .config_ctl_hi1_val = 0x329A699C, 538c2ecf20Sopenharmony_ci .user_ctl_val = 0x00000000, 548c2ecf20Sopenharmony_ci .user_ctl_hi_val = 0x00000805, 558c2ecf20Sopenharmony_ci .user_ctl_hi1_val = 0x00000000, 568c2ecf20Sopenharmony_ci}; 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_cistatic struct clk_init_data disp_cc_pll0_init = { 598c2ecf20Sopenharmony_ci .name = "disp_cc_pll0", 608c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 618c2ecf20Sopenharmony_ci .fw_name = "bi_tcxo", 628c2ecf20Sopenharmony_ci }, 638c2ecf20Sopenharmony_ci .num_parents = 1, 648c2ecf20Sopenharmony_ci .ops = &clk_alpha_pll_lucid_ops, 658c2ecf20Sopenharmony_ci}; 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_cistatic struct clk_alpha_pll disp_cc_pll0 = { 688c2ecf20Sopenharmony_ci .offset = 0x0, 698c2ecf20Sopenharmony_ci .vco_table = vco_table, 708c2ecf20Sopenharmony_ci .num_vco = ARRAY_SIZE(vco_table), 718c2ecf20Sopenharmony_ci .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 728c2ecf20Sopenharmony_ci .clkr.hw.init = &disp_cc_pll0_init 738c2ecf20Sopenharmony_ci}; 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_cistatic struct alpha_pll_config disp_cc_pll1_config = { 768c2ecf20Sopenharmony_ci .l = 0x1F, 778c2ecf20Sopenharmony_ci .alpha = 0x4000, 788c2ecf20Sopenharmony_ci .config_ctl_val = 0x20485699, 798c2ecf20Sopenharmony_ci .config_ctl_hi_val = 0x00002261, 808c2ecf20Sopenharmony_ci .config_ctl_hi1_val = 0x329A699C, 818c2ecf20Sopenharmony_ci .user_ctl_val = 0x00000000, 828c2ecf20Sopenharmony_ci .user_ctl_hi_val = 0x00000805, 838c2ecf20Sopenharmony_ci .user_ctl_hi1_val = 0x00000000, 848c2ecf20Sopenharmony_ci}; 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_cistatic struct clk_init_data disp_cc_pll1_init = { 878c2ecf20Sopenharmony_ci .name = "disp_cc_pll1", 888c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 898c2ecf20Sopenharmony_ci .fw_name = "bi_tcxo", 908c2ecf20Sopenharmony_ci }, 918c2ecf20Sopenharmony_ci .num_parents = 1, 928c2ecf20Sopenharmony_ci .ops = &clk_alpha_pll_lucid_ops, 938c2ecf20Sopenharmony_ci}; 948c2ecf20Sopenharmony_ci 958c2ecf20Sopenharmony_cistatic struct clk_alpha_pll disp_cc_pll1 = { 968c2ecf20Sopenharmony_ci .offset = 0x1000, 978c2ecf20Sopenharmony_ci .vco_table = vco_table, 988c2ecf20Sopenharmony_ci .num_vco = ARRAY_SIZE(vco_table), 998c2ecf20Sopenharmony_ci .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID], 1008c2ecf20Sopenharmony_ci .clkr.hw.init = &disp_cc_pll1_init 1018c2ecf20Sopenharmony_ci}; 1028c2ecf20Sopenharmony_ci 1038c2ecf20Sopenharmony_cistatic const struct parent_map disp_cc_parent_map_0[] = { 1048c2ecf20Sopenharmony_ci { P_BI_TCXO, 0 }, 1058c2ecf20Sopenharmony_ci { P_DP_PHY_PLL_LINK_CLK, 1 }, 1068c2ecf20Sopenharmony_ci { P_DP_PHY_PLL_VCO_DIV_CLK, 2 }, 1078c2ecf20Sopenharmony_ci}; 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_cistatic const struct clk_parent_data disp_cc_parent_data_0[] = { 1108c2ecf20Sopenharmony_ci { .fw_name = "bi_tcxo" }, 1118c2ecf20Sopenharmony_ci { .fw_name = "dp_phy_pll_link_clk" }, 1128c2ecf20Sopenharmony_ci { .fw_name = "dp_phy_pll_vco_div_clk" }, 1138c2ecf20Sopenharmony_ci}; 1148c2ecf20Sopenharmony_ci 1158c2ecf20Sopenharmony_cistatic const struct parent_map disp_cc_parent_map_1[] = { 1168c2ecf20Sopenharmony_ci { P_BI_TCXO, 0 }, 1178c2ecf20Sopenharmony_ci}; 1188c2ecf20Sopenharmony_ci 1198c2ecf20Sopenharmony_cistatic const struct clk_parent_data disp_cc_parent_data_1[] = { 1208c2ecf20Sopenharmony_ci { .fw_name = "bi_tcxo" }, 1218c2ecf20Sopenharmony_ci}; 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_cistatic const struct parent_map disp_cc_parent_map_2[] = { 1248c2ecf20Sopenharmony_ci { P_BI_TCXO, 0 }, 1258c2ecf20Sopenharmony_ci { P_DSI0_PHY_PLL_OUT_BYTECLK, 1 }, 1268c2ecf20Sopenharmony_ci { P_DSI1_PHY_PLL_OUT_BYTECLK, 2 }, 1278c2ecf20Sopenharmony_ci}; 1288c2ecf20Sopenharmony_ci 1298c2ecf20Sopenharmony_cistatic const struct clk_parent_data disp_cc_parent_data_2[] = { 1308c2ecf20Sopenharmony_ci { .fw_name = "bi_tcxo" }, 1318c2ecf20Sopenharmony_ci { .fw_name = "dsi0_phy_pll_out_byteclk" }, 1328c2ecf20Sopenharmony_ci { .fw_name = "dsi1_phy_pll_out_byteclk" }, 1338c2ecf20Sopenharmony_ci}; 1348c2ecf20Sopenharmony_ci 1358c2ecf20Sopenharmony_cistatic const struct parent_map disp_cc_parent_map_3[] = { 1368c2ecf20Sopenharmony_ci { P_BI_TCXO, 0 }, 1378c2ecf20Sopenharmony_ci { P_DISP_CC_PLL1_OUT_MAIN, 4 }, 1388c2ecf20Sopenharmony_ci}; 1398c2ecf20Sopenharmony_ci 1408c2ecf20Sopenharmony_cistatic const struct clk_parent_data disp_cc_parent_data_3[] = { 1418c2ecf20Sopenharmony_ci { .fw_name = "bi_tcxo" }, 1428c2ecf20Sopenharmony_ci { .hw = &disp_cc_pll1.clkr.hw }, 1438c2ecf20Sopenharmony_ci}; 1448c2ecf20Sopenharmony_ci 1458c2ecf20Sopenharmony_cistatic const struct parent_map disp_cc_parent_map_5[] = { 1468c2ecf20Sopenharmony_ci { P_BI_TCXO, 0 }, 1478c2ecf20Sopenharmony_ci { P_DISP_CC_PLL0_OUT_MAIN, 1 }, 1488c2ecf20Sopenharmony_ci { P_DISP_CC_PLL1_OUT_MAIN, 4 }, 1498c2ecf20Sopenharmony_ci}; 1508c2ecf20Sopenharmony_ci 1518c2ecf20Sopenharmony_cistatic const struct clk_parent_data disp_cc_parent_data_5[] = { 1528c2ecf20Sopenharmony_ci { .fw_name = "bi_tcxo" }, 1538c2ecf20Sopenharmony_ci { .hw = &disp_cc_pll0.clkr.hw }, 1548c2ecf20Sopenharmony_ci { .hw = &disp_cc_pll1.clkr.hw }, 1558c2ecf20Sopenharmony_ci}; 1568c2ecf20Sopenharmony_ci 1578c2ecf20Sopenharmony_cistatic const struct parent_map disp_cc_parent_map_6[] = { 1588c2ecf20Sopenharmony_ci { P_BI_TCXO, 0 }, 1598c2ecf20Sopenharmony_ci { P_DSI0_PHY_PLL_OUT_DSICLK, 1 }, 1608c2ecf20Sopenharmony_ci { P_DSI1_PHY_PLL_OUT_DSICLK, 2 }, 1618c2ecf20Sopenharmony_ci}; 1628c2ecf20Sopenharmony_ci 1638c2ecf20Sopenharmony_cistatic const struct clk_parent_data disp_cc_parent_data_6[] = { 1648c2ecf20Sopenharmony_ci { .fw_name = "bi_tcxo" }, 1658c2ecf20Sopenharmony_ci { .fw_name = "dsi0_phy_pll_out_dsiclk" }, 1668c2ecf20Sopenharmony_ci { .fw_name = "dsi1_phy_pll_out_dsiclk" }, 1678c2ecf20Sopenharmony_ci}; 1688c2ecf20Sopenharmony_ci 1698c2ecf20Sopenharmony_cistatic const struct freq_tbl ftbl_disp_cc_mdss_ahb_clk_src[] = { 1708c2ecf20Sopenharmony_ci F(19200000, P_BI_TCXO, 1, 0, 0), 1718c2ecf20Sopenharmony_ci F(37500000, P_DISP_CC_PLL1_OUT_MAIN, 16, 0, 0), 1728c2ecf20Sopenharmony_ci F(75000000, P_DISP_CC_PLL1_OUT_MAIN, 8, 0, 0), 1738c2ecf20Sopenharmony_ci { } 1748c2ecf20Sopenharmony_ci}; 1758c2ecf20Sopenharmony_ci 1768c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_ahb_clk_src = { 1778c2ecf20Sopenharmony_ci .cmd_rcgr = 0x22bc, 1788c2ecf20Sopenharmony_ci .mnd_width = 0, 1798c2ecf20Sopenharmony_ci .hid_width = 5, 1808c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_3, 1818c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src, 1828c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 1838c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_ahb_clk_src", 1848c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_3, 1858c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_3), 1868c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 1878c2ecf20Sopenharmony_ci .ops = &clk_rcg2_shared_ops, 1888c2ecf20Sopenharmony_ci }, 1898c2ecf20Sopenharmony_ci}; 1908c2ecf20Sopenharmony_ci 1918c2ecf20Sopenharmony_cistatic const struct freq_tbl ftbl_disp_cc_mdss_byte0_clk_src[] = { 1928c2ecf20Sopenharmony_ci F(19200000, P_BI_TCXO, 1, 0, 0), 1938c2ecf20Sopenharmony_ci { } 1948c2ecf20Sopenharmony_ci}; 1958c2ecf20Sopenharmony_ci 1968c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_byte0_clk_src = { 1978c2ecf20Sopenharmony_ci .cmd_rcgr = 0x2110, 1988c2ecf20Sopenharmony_ci .mnd_width = 0, 1998c2ecf20Sopenharmony_ci .hid_width = 5, 2008c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_2, 2018c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 2028c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_byte0_clk_src", 2038c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_2, 2048c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_2), 2058c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 2068c2ecf20Sopenharmony_ci .ops = &clk_byte2_ops, 2078c2ecf20Sopenharmony_ci }, 2088c2ecf20Sopenharmony_ci}; 2098c2ecf20Sopenharmony_ci 2108c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_byte1_clk_src = { 2118c2ecf20Sopenharmony_ci .cmd_rcgr = 0x212c, 2128c2ecf20Sopenharmony_ci .mnd_width = 0, 2138c2ecf20Sopenharmony_ci .hid_width = 5, 2148c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_2, 2158c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 2168c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_byte1_clk_src", 2178c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_2, 2188c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_2), 2198c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 2208c2ecf20Sopenharmony_ci .ops = &clk_byte2_ops, 2218c2ecf20Sopenharmony_ci }, 2228c2ecf20Sopenharmony_ci}; 2238c2ecf20Sopenharmony_ci 2248c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_dp_aux1_clk_src = { 2258c2ecf20Sopenharmony_ci .cmd_rcgr = 0x2240, 2268c2ecf20Sopenharmony_ci .mnd_width = 0, 2278c2ecf20Sopenharmony_ci .hid_width = 5, 2288c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_1, 2298c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, 2308c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 2318c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_aux1_clk_src", 2328c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_1, 2338c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_1), 2348c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 2358c2ecf20Sopenharmony_ci .ops = &clk_rcg2_ops, 2368c2ecf20Sopenharmony_ci }, 2378c2ecf20Sopenharmony_ci}; 2388c2ecf20Sopenharmony_ci 2398c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_dp_aux_clk_src = { 2408c2ecf20Sopenharmony_ci .cmd_rcgr = 0x21dc, 2418c2ecf20Sopenharmony_ci .mnd_width = 0, 2428c2ecf20Sopenharmony_ci .hid_width = 5, 2438c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_1, 2448c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, 2458c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 2468c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_aux_clk_src", 2478c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_1, 2488c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_1), 2498c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 2508c2ecf20Sopenharmony_ci .ops = &clk_rcg2_ops, 2518c2ecf20Sopenharmony_ci }, 2528c2ecf20Sopenharmony_ci}; 2538c2ecf20Sopenharmony_ci 2548c2ecf20Sopenharmony_cistatic const struct freq_tbl ftbl_disp_cc_mdss_dp_link1_clk_src[] = { 2558c2ecf20Sopenharmony_ci F(162000000, P_DP_PHY_PLL_LINK_CLK, 1, 0, 0), 2568c2ecf20Sopenharmony_ci F(270000000, P_DP_PHY_PLL_LINK_CLK, 1, 0, 0), 2578c2ecf20Sopenharmony_ci F(540000000, P_DP_PHY_PLL_LINK_CLK, 1, 0, 0), 2588c2ecf20Sopenharmony_ci F(810000000, P_DP_PHY_PLL_LINK_CLK, 1, 0, 0), 2598c2ecf20Sopenharmony_ci { } 2608c2ecf20Sopenharmony_ci}; 2618c2ecf20Sopenharmony_ci 2628c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_dp_link1_clk_src = { 2638c2ecf20Sopenharmony_ci .cmd_rcgr = 0x220c, 2648c2ecf20Sopenharmony_ci .mnd_width = 0, 2658c2ecf20Sopenharmony_ci .hid_width = 5, 2668c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_0, 2678c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_dp_link1_clk_src, 2688c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 2698c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_link1_clk_src", 2708c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_0, 2718c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_0), 2728c2ecf20Sopenharmony_ci .ops = &clk_rcg2_ops, 2738c2ecf20Sopenharmony_ci }, 2748c2ecf20Sopenharmony_ci}; 2758c2ecf20Sopenharmony_ci 2768c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_dp_link_clk_src = { 2778c2ecf20Sopenharmony_ci .cmd_rcgr = 0x2178, 2788c2ecf20Sopenharmony_ci .mnd_width = 0, 2798c2ecf20Sopenharmony_ci .hid_width = 5, 2808c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_0, 2818c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_dp_link1_clk_src, 2828c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 2838c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_link_clk_src", 2848c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_0, 2858c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_0), 2868c2ecf20Sopenharmony_ci .ops = &clk_rcg2_ops, 2878c2ecf20Sopenharmony_ci }, 2888c2ecf20Sopenharmony_ci}; 2898c2ecf20Sopenharmony_ci 2908c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_dp_pixel1_clk_src = { 2918c2ecf20Sopenharmony_ci .cmd_rcgr = 0x21c4, 2928c2ecf20Sopenharmony_ci .mnd_width = 16, 2938c2ecf20Sopenharmony_ci .hid_width = 5, 2948c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_0, 2958c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 2968c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_pixel1_clk_src", 2978c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_0, 2988c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_0), 2998c2ecf20Sopenharmony_ci .ops = &clk_dp_ops, 3008c2ecf20Sopenharmony_ci }, 3018c2ecf20Sopenharmony_ci}; 3028c2ecf20Sopenharmony_ci 3038c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_dp_pixel2_clk_src = { 3048c2ecf20Sopenharmony_ci .cmd_rcgr = 0x21f4, 3058c2ecf20Sopenharmony_ci .mnd_width = 16, 3068c2ecf20Sopenharmony_ci .hid_width = 5, 3078c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_0, 3088c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 3098c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_pixel2_clk_src", 3108c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_0, 3118c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_0), 3128c2ecf20Sopenharmony_ci .ops = &clk_dp_ops, 3138c2ecf20Sopenharmony_ci }, 3148c2ecf20Sopenharmony_ci}; 3158c2ecf20Sopenharmony_ci 3168c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_dp_pixel_clk_src = { 3178c2ecf20Sopenharmony_ci .cmd_rcgr = 0x21ac, 3188c2ecf20Sopenharmony_ci .mnd_width = 16, 3198c2ecf20Sopenharmony_ci .hid_width = 5, 3208c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_0, 3218c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 3228c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_pixel_clk_src", 3238c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_0, 3248c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_0), 3258c2ecf20Sopenharmony_ci .ops = &clk_dp_ops, 3268c2ecf20Sopenharmony_ci }, 3278c2ecf20Sopenharmony_ci}; 3288c2ecf20Sopenharmony_ci 3298c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_esc0_clk_src = { 3308c2ecf20Sopenharmony_ci .cmd_rcgr = 0x2148, 3318c2ecf20Sopenharmony_ci .mnd_width = 0, 3328c2ecf20Sopenharmony_ci .hid_width = 5, 3338c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_2, 3348c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, 3358c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 3368c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_esc0_clk_src", 3378c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_2, 3388c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_2), 3398c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 3408c2ecf20Sopenharmony_ci .ops = &clk_rcg2_ops, 3418c2ecf20Sopenharmony_ci }, 3428c2ecf20Sopenharmony_ci}; 3438c2ecf20Sopenharmony_ci 3448c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_esc1_clk_src = { 3458c2ecf20Sopenharmony_ci .cmd_rcgr = 0x2160, 3468c2ecf20Sopenharmony_ci .mnd_width = 0, 3478c2ecf20Sopenharmony_ci .hid_width = 5, 3488c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_2, 3498c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, 3508c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 3518c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_esc1_clk_src", 3528c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_2, 3538c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_2), 3548c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 3558c2ecf20Sopenharmony_ci .ops = &clk_rcg2_ops, 3568c2ecf20Sopenharmony_ci }, 3578c2ecf20Sopenharmony_ci}; 3588c2ecf20Sopenharmony_ci 3598c2ecf20Sopenharmony_cistatic const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src[] = { 3608c2ecf20Sopenharmony_ci F(19200000, P_BI_TCXO, 1, 0, 0), 3618c2ecf20Sopenharmony_ci F(85714286, P_DISP_CC_PLL1_OUT_MAIN, 7, 0, 0), 3628c2ecf20Sopenharmony_ci F(100000000, P_DISP_CC_PLL1_OUT_MAIN, 6, 0, 0), 3638c2ecf20Sopenharmony_ci F(150000000, P_DISP_CC_PLL1_OUT_MAIN, 4, 0, 0), 3648c2ecf20Sopenharmony_ci F(200000000, P_DISP_CC_PLL1_OUT_MAIN, 3, 0, 0), 3658c2ecf20Sopenharmony_ci F(300000000, P_DISP_CC_PLL1_OUT_MAIN, 2, 0, 0), 3668c2ecf20Sopenharmony_ci F(345000000, P_DISP_CC_PLL0_OUT_MAIN, 4, 0, 0), 3678c2ecf20Sopenharmony_ci F(460000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), 3688c2ecf20Sopenharmony_ci { } 3698c2ecf20Sopenharmony_ci}; 3708c2ecf20Sopenharmony_ci 3718c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_mdp_clk_src = { 3728c2ecf20Sopenharmony_ci .cmd_rcgr = 0x20c8, 3738c2ecf20Sopenharmony_ci .mnd_width = 0, 3748c2ecf20Sopenharmony_ci .hid_width = 5, 3758c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_5, 3768c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src, 3778c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 3788c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_mdp_clk_src", 3798c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_5, 3808c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_5), 3818c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 3828c2ecf20Sopenharmony_ci .ops = &clk_rcg2_shared_ops, 3838c2ecf20Sopenharmony_ci }, 3848c2ecf20Sopenharmony_ci}; 3858c2ecf20Sopenharmony_ci 3868c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = { 3878c2ecf20Sopenharmony_ci .cmd_rcgr = 0x2098, 3888c2ecf20Sopenharmony_ci .mnd_width = 8, 3898c2ecf20Sopenharmony_ci .hid_width = 5, 3908c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_6, 3918c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 3928c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_pclk0_clk_src", 3938c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_6, 3948c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_6), 3958c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 3968c2ecf20Sopenharmony_ci .ops = &clk_pixel_ops, 3978c2ecf20Sopenharmony_ci }, 3988c2ecf20Sopenharmony_ci}; 3998c2ecf20Sopenharmony_ci 4008c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_pclk1_clk_src = { 4018c2ecf20Sopenharmony_ci .cmd_rcgr = 0x20b0, 4028c2ecf20Sopenharmony_ci .mnd_width = 8, 4038c2ecf20Sopenharmony_ci .hid_width = 5, 4048c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_6, 4058c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 4068c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_pclk1_clk_src", 4078c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_6, 4088c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_6), 4098c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 4108c2ecf20Sopenharmony_ci .ops = &clk_pixel_ops, 4118c2ecf20Sopenharmony_ci }, 4128c2ecf20Sopenharmony_ci}; 4138c2ecf20Sopenharmony_ci 4148c2ecf20Sopenharmony_cistatic const struct freq_tbl ftbl_disp_cc_mdss_rot_clk_src[] = { 4158c2ecf20Sopenharmony_ci F(19200000, P_BI_TCXO, 1, 0, 0), 4168c2ecf20Sopenharmony_ci F(200000000, P_DISP_CC_PLL1_OUT_MAIN, 3, 0, 0), 4178c2ecf20Sopenharmony_ci F(300000000, P_DISP_CC_PLL1_OUT_MAIN, 2, 0, 0), 4188c2ecf20Sopenharmony_ci F(345000000, P_DISP_CC_PLL0_OUT_MAIN, 4, 0, 0), 4198c2ecf20Sopenharmony_ci F(460000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), 4208c2ecf20Sopenharmony_ci { } 4218c2ecf20Sopenharmony_ci}; 4228c2ecf20Sopenharmony_ci 4238c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_rot_clk_src = { 4248c2ecf20Sopenharmony_ci .cmd_rcgr = 0x20e0, 4258c2ecf20Sopenharmony_ci .mnd_width = 0, 4268c2ecf20Sopenharmony_ci .hid_width = 5, 4278c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_5, 4288c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_rot_clk_src, 4298c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 4308c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_rot_clk_src", 4318c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_5, 4328c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_5), 4338c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 4348c2ecf20Sopenharmony_ci .ops = &clk_rcg2_shared_ops, 4358c2ecf20Sopenharmony_ci }, 4368c2ecf20Sopenharmony_ci}; 4378c2ecf20Sopenharmony_ci 4388c2ecf20Sopenharmony_cistatic struct clk_rcg2 disp_cc_mdss_vsync_clk_src = { 4398c2ecf20Sopenharmony_ci .cmd_rcgr = 0x20f8, 4408c2ecf20Sopenharmony_ci .mnd_width = 0, 4418c2ecf20Sopenharmony_ci .hid_width = 5, 4428c2ecf20Sopenharmony_ci .parent_map = disp_cc_parent_map_1, 4438c2ecf20Sopenharmony_ci .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, 4448c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data){ 4458c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_vsync_clk_src", 4468c2ecf20Sopenharmony_ci .parent_data = disp_cc_parent_data_1, 4478c2ecf20Sopenharmony_ci .num_parents = ARRAY_SIZE(disp_cc_parent_data_1), 4488c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 4498c2ecf20Sopenharmony_ci .ops = &clk_rcg2_ops, 4508c2ecf20Sopenharmony_ci }, 4518c2ecf20Sopenharmony_ci}; 4528c2ecf20Sopenharmony_ci 4538c2ecf20Sopenharmony_cistatic struct clk_regmap_div disp_cc_mdss_byte0_div_clk_src = { 4548c2ecf20Sopenharmony_ci .reg = 0x2128, 4558c2ecf20Sopenharmony_ci .shift = 0, 4568c2ecf20Sopenharmony_ci .width = 2, 4578c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data) { 4588c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_byte0_div_clk_src", 4598c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 4608c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_byte0_clk_src.clkr.hw, 4618c2ecf20Sopenharmony_ci }, 4628c2ecf20Sopenharmony_ci .num_parents = 1, 4638c2ecf20Sopenharmony_ci .ops = &clk_regmap_div_ops, 4648c2ecf20Sopenharmony_ci }, 4658c2ecf20Sopenharmony_ci}; 4668c2ecf20Sopenharmony_ci 4678c2ecf20Sopenharmony_ci 4688c2ecf20Sopenharmony_cistatic struct clk_regmap_div disp_cc_mdss_byte1_div_clk_src = { 4698c2ecf20Sopenharmony_ci .reg = 0x2144, 4708c2ecf20Sopenharmony_ci .shift = 0, 4718c2ecf20Sopenharmony_ci .width = 2, 4728c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data) { 4738c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_byte1_div_clk_src", 4748c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 4758c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_byte1_clk_src.clkr.hw, 4768c2ecf20Sopenharmony_ci }, 4778c2ecf20Sopenharmony_ci .num_parents = 1, 4788c2ecf20Sopenharmony_ci .ops = &clk_regmap_div_ops, 4798c2ecf20Sopenharmony_ci }, 4808c2ecf20Sopenharmony_ci}; 4818c2ecf20Sopenharmony_ci 4828c2ecf20Sopenharmony_ci 4838c2ecf20Sopenharmony_cistatic struct clk_regmap_div disp_cc_mdss_dp_link1_div_clk_src = { 4848c2ecf20Sopenharmony_ci .reg = 0x2224, 4858c2ecf20Sopenharmony_ci .shift = 0, 4868c2ecf20Sopenharmony_ci .width = 2, 4878c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data) { 4888c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_link1_div_clk_src", 4898c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 4908c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_link1_clk_src.clkr.hw, 4918c2ecf20Sopenharmony_ci }, 4928c2ecf20Sopenharmony_ci .num_parents = 1, 4938c2ecf20Sopenharmony_ci .ops = &clk_regmap_div_ro_ops, 4948c2ecf20Sopenharmony_ci }, 4958c2ecf20Sopenharmony_ci}; 4968c2ecf20Sopenharmony_ci 4978c2ecf20Sopenharmony_ci 4988c2ecf20Sopenharmony_cistatic struct clk_regmap_div disp_cc_mdss_dp_link_div_clk_src = { 4998c2ecf20Sopenharmony_ci .reg = 0x2190, 5008c2ecf20Sopenharmony_ci .shift = 0, 5018c2ecf20Sopenharmony_ci .width = 2, 5028c2ecf20Sopenharmony_ci .clkr.hw.init = &(struct clk_init_data) { 5038c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_link_div_clk_src", 5048c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 5058c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_link_clk_src.clkr.hw, 5068c2ecf20Sopenharmony_ci }, 5078c2ecf20Sopenharmony_ci .num_parents = 1, 5088c2ecf20Sopenharmony_ci .ops = &clk_regmap_div_ro_ops, 5098c2ecf20Sopenharmony_ci }, 5108c2ecf20Sopenharmony_ci}; 5118c2ecf20Sopenharmony_ci 5128c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_ahb_clk = { 5138c2ecf20Sopenharmony_ci .halt_reg = 0x2080, 5148c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 5158c2ecf20Sopenharmony_ci .clkr = { 5168c2ecf20Sopenharmony_ci .enable_reg = 0x2080, 5178c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 5188c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 5198c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_ahb_clk", 5208c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 5218c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_ahb_clk_src.clkr.hw, 5228c2ecf20Sopenharmony_ci }, 5238c2ecf20Sopenharmony_ci .num_parents = 1, 5248c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 5258c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 5268c2ecf20Sopenharmony_ci }, 5278c2ecf20Sopenharmony_ci }, 5288c2ecf20Sopenharmony_ci}; 5298c2ecf20Sopenharmony_ci 5308c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_byte0_clk = { 5318c2ecf20Sopenharmony_ci .halt_reg = 0x2028, 5328c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 5338c2ecf20Sopenharmony_ci .clkr = { 5348c2ecf20Sopenharmony_ci .enable_reg = 0x2028, 5358c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 5368c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 5378c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_byte0_clk", 5388c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 5398c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_byte0_clk_src.clkr.hw, 5408c2ecf20Sopenharmony_ci }, 5418c2ecf20Sopenharmony_ci .num_parents = 1, 5428c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 5438c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 5448c2ecf20Sopenharmony_ci }, 5458c2ecf20Sopenharmony_ci }, 5468c2ecf20Sopenharmony_ci}; 5478c2ecf20Sopenharmony_ci 5488c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_byte0_intf_clk = { 5498c2ecf20Sopenharmony_ci .halt_reg = 0x202c, 5508c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 5518c2ecf20Sopenharmony_ci .clkr = { 5528c2ecf20Sopenharmony_ci .enable_reg = 0x202c, 5538c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 5548c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 5558c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_byte0_intf_clk", 5568c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 5578c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_byte0_div_clk_src.clkr.hw, 5588c2ecf20Sopenharmony_ci }, 5598c2ecf20Sopenharmony_ci .num_parents = 1, 5608c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 5618c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 5628c2ecf20Sopenharmony_ci }, 5638c2ecf20Sopenharmony_ci }, 5648c2ecf20Sopenharmony_ci}; 5658c2ecf20Sopenharmony_ci 5668c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_byte1_clk = { 5678c2ecf20Sopenharmony_ci .halt_reg = 0x2030, 5688c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 5698c2ecf20Sopenharmony_ci .clkr = { 5708c2ecf20Sopenharmony_ci .enable_reg = 0x2030, 5718c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 5728c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 5738c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_byte1_clk", 5748c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 5758c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_byte1_clk_src.clkr.hw, 5768c2ecf20Sopenharmony_ci }, 5778c2ecf20Sopenharmony_ci .num_parents = 1, 5788c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 5798c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 5808c2ecf20Sopenharmony_ci }, 5818c2ecf20Sopenharmony_ci }, 5828c2ecf20Sopenharmony_ci}; 5838c2ecf20Sopenharmony_ci 5848c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_byte1_intf_clk = { 5858c2ecf20Sopenharmony_ci .halt_reg = 0x2034, 5868c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 5878c2ecf20Sopenharmony_ci .clkr = { 5888c2ecf20Sopenharmony_ci .enable_reg = 0x2034, 5898c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 5908c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 5918c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_byte1_intf_clk", 5928c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 5938c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_byte1_div_clk_src.clkr.hw, 5948c2ecf20Sopenharmony_ci }, 5958c2ecf20Sopenharmony_ci .num_parents = 1, 5968c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 5978c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 5988c2ecf20Sopenharmony_ci }, 5998c2ecf20Sopenharmony_ci }, 6008c2ecf20Sopenharmony_ci}; 6018c2ecf20Sopenharmony_ci 6028c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_dp_aux1_clk = { 6038c2ecf20Sopenharmony_ci .halt_reg = 0x2068, 6048c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 6058c2ecf20Sopenharmony_ci .clkr = { 6068c2ecf20Sopenharmony_ci .enable_reg = 0x2068, 6078c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 6088c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 6098c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_aux1_clk", 6108c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 6118c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_aux1_clk_src.clkr.hw, 6128c2ecf20Sopenharmony_ci }, 6138c2ecf20Sopenharmony_ci .num_parents = 1, 6148c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 6158c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 6168c2ecf20Sopenharmony_ci }, 6178c2ecf20Sopenharmony_ci }, 6188c2ecf20Sopenharmony_ci}; 6198c2ecf20Sopenharmony_ci 6208c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_dp_aux_clk = { 6218c2ecf20Sopenharmony_ci .halt_reg = 0x2054, 6228c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 6238c2ecf20Sopenharmony_ci .clkr = { 6248c2ecf20Sopenharmony_ci .enable_reg = 0x2054, 6258c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 6268c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 6278c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_aux_clk", 6288c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 6298c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_aux_clk_src.clkr.hw, 6308c2ecf20Sopenharmony_ci }, 6318c2ecf20Sopenharmony_ci .num_parents = 1, 6328c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 6338c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 6348c2ecf20Sopenharmony_ci }, 6358c2ecf20Sopenharmony_ci }, 6368c2ecf20Sopenharmony_ci}; 6378c2ecf20Sopenharmony_ci 6388c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_dp_link1_clk = { 6398c2ecf20Sopenharmony_ci .halt_reg = 0x205c, 6408c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 6418c2ecf20Sopenharmony_ci .clkr = { 6428c2ecf20Sopenharmony_ci .enable_reg = 0x205c, 6438c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 6448c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 6458c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_link1_clk", 6468c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 6478c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_link1_clk_src.clkr.hw, 6488c2ecf20Sopenharmony_ci }, 6498c2ecf20Sopenharmony_ci .num_parents = 1, 6508c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 6518c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 6528c2ecf20Sopenharmony_ci }, 6538c2ecf20Sopenharmony_ci }, 6548c2ecf20Sopenharmony_ci}; 6558c2ecf20Sopenharmony_ci 6568c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_dp_link1_intf_clk = { 6578c2ecf20Sopenharmony_ci .halt_reg = 0x2060, 6588c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 6598c2ecf20Sopenharmony_ci .clkr = { 6608c2ecf20Sopenharmony_ci .enable_reg = 0x2060, 6618c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 6628c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 6638c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_link1_intf_clk", 6648c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 6658c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_link1_div_clk_src.clkr.hw, 6668c2ecf20Sopenharmony_ci }, 6678c2ecf20Sopenharmony_ci .num_parents = 1, 6688c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 6698c2ecf20Sopenharmony_ci }, 6708c2ecf20Sopenharmony_ci }, 6718c2ecf20Sopenharmony_ci}; 6728c2ecf20Sopenharmony_ci 6738c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_dp_link_clk = { 6748c2ecf20Sopenharmony_ci .halt_reg = 0x2040, 6758c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 6768c2ecf20Sopenharmony_ci .clkr = { 6778c2ecf20Sopenharmony_ci .enable_reg = 0x2040, 6788c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 6798c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 6808c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_link_clk", 6818c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 6828c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_link_clk_src.clkr.hw, 6838c2ecf20Sopenharmony_ci }, 6848c2ecf20Sopenharmony_ci .num_parents = 1, 6858c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 6868c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 6878c2ecf20Sopenharmony_ci }, 6888c2ecf20Sopenharmony_ci }, 6898c2ecf20Sopenharmony_ci}; 6908c2ecf20Sopenharmony_ci 6918c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_dp_link_intf_clk = { 6928c2ecf20Sopenharmony_ci .halt_reg = 0x2044, 6938c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 6948c2ecf20Sopenharmony_ci .clkr = { 6958c2ecf20Sopenharmony_ci .enable_reg = 0x2044, 6968c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 6978c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 6988c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_link_intf_clk", 6998c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 7008c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_link_div_clk_src.clkr.hw, 7018c2ecf20Sopenharmony_ci }, 7028c2ecf20Sopenharmony_ci .num_parents = 1, 7038c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 7048c2ecf20Sopenharmony_ci }, 7058c2ecf20Sopenharmony_ci }, 7068c2ecf20Sopenharmony_ci}; 7078c2ecf20Sopenharmony_ci 7088c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_dp_pixel1_clk = { 7098c2ecf20Sopenharmony_ci .halt_reg = 0x2050, 7108c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 7118c2ecf20Sopenharmony_ci .clkr = { 7128c2ecf20Sopenharmony_ci .enable_reg = 0x2050, 7138c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 7148c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 7158c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_pixel1_clk", 7168c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 7178c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_pixel1_clk_src.clkr.hw, 7188c2ecf20Sopenharmony_ci }, 7198c2ecf20Sopenharmony_ci .num_parents = 1, 7208c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 7218c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 7228c2ecf20Sopenharmony_ci }, 7238c2ecf20Sopenharmony_ci }, 7248c2ecf20Sopenharmony_ci}; 7258c2ecf20Sopenharmony_ci 7268c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_dp_pixel2_clk = { 7278c2ecf20Sopenharmony_ci .halt_reg = 0x2058, 7288c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 7298c2ecf20Sopenharmony_ci .clkr = { 7308c2ecf20Sopenharmony_ci .enable_reg = 0x2058, 7318c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 7328c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 7338c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_pixel2_clk", 7348c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 7358c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_pixel2_clk_src.clkr.hw, 7368c2ecf20Sopenharmony_ci }, 7378c2ecf20Sopenharmony_ci .num_parents = 1, 7388c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 7398c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 7408c2ecf20Sopenharmony_ci }, 7418c2ecf20Sopenharmony_ci }, 7428c2ecf20Sopenharmony_ci}; 7438c2ecf20Sopenharmony_ci 7448c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_dp_pixel_clk = { 7458c2ecf20Sopenharmony_ci .halt_reg = 0x204c, 7468c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 7478c2ecf20Sopenharmony_ci .clkr = { 7488c2ecf20Sopenharmony_ci .enable_reg = 0x204c, 7498c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 7508c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 7518c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_dp_pixel_clk", 7528c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 7538c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_dp_pixel_clk_src.clkr.hw, 7548c2ecf20Sopenharmony_ci }, 7558c2ecf20Sopenharmony_ci .num_parents = 1, 7568c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 7578c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 7588c2ecf20Sopenharmony_ci }, 7598c2ecf20Sopenharmony_ci }, 7608c2ecf20Sopenharmony_ci}; 7618c2ecf20Sopenharmony_ci 7628c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_esc0_clk = { 7638c2ecf20Sopenharmony_ci .halt_reg = 0x2038, 7648c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 7658c2ecf20Sopenharmony_ci .clkr = { 7668c2ecf20Sopenharmony_ci .enable_reg = 0x2038, 7678c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 7688c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 7698c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_esc0_clk", 7708c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 7718c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_esc0_clk_src.clkr.hw, 7728c2ecf20Sopenharmony_ci }, 7738c2ecf20Sopenharmony_ci .num_parents = 1, 7748c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 7758c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 7768c2ecf20Sopenharmony_ci }, 7778c2ecf20Sopenharmony_ci }, 7788c2ecf20Sopenharmony_ci}; 7798c2ecf20Sopenharmony_ci 7808c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_esc1_clk = { 7818c2ecf20Sopenharmony_ci .halt_reg = 0x203c, 7828c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 7838c2ecf20Sopenharmony_ci .clkr = { 7848c2ecf20Sopenharmony_ci .enable_reg = 0x203c, 7858c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 7868c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 7878c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_esc1_clk", 7888c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 7898c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_esc1_clk_src.clkr.hw, 7908c2ecf20Sopenharmony_ci }, 7918c2ecf20Sopenharmony_ci .num_parents = 1, 7928c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 7938c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 7948c2ecf20Sopenharmony_ci }, 7958c2ecf20Sopenharmony_ci }, 7968c2ecf20Sopenharmony_ci}; 7978c2ecf20Sopenharmony_ci 7988c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_mdp_clk = { 7998c2ecf20Sopenharmony_ci .halt_reg = 0x200c, 8008c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 8018c2ecf20Sopenharmony_ci .clkr = { 8028c2ecf20Sopenharmony_ci .enable_reg = 0x200c, 8038c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 8048c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 8058c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_mdp_clk", 8068c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 8078c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_mdp_clk_src.clkr.hw, 8088c2ecf20Sopenharmony_ci }, 8098c2ecf20Sopenharmony_ci .num_parents = 1, 8108c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 8118c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 8128c2ecf20Sopenharmony_ci }, 8138c2ecf20Sopenharmony_ci }, 8148c2ecf20Sopenharmony_ci}; 8158c2ecf20Sopenharmony_ci 8168c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_mdp_lut_clk = { 8178c2ecf20Sopenharmony_ci .halt_reg = 0x201c, 8188c2ecf20Sopenharmony_ci .halt_check = BRANCH_VOTED, 8198c2ecf20Sopenharmony_ci .clkr = { 8208c2ecf20Sopenharmony_ci .enable_reg = 0x201c, 8218c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 8228c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 8238c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_mdp_lut_clk", 8248c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 8258c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_mdp_clk_src.clkr.hw, 8268c2ecf20Sopenharmony_ci }, 8278c2ecf20Sopenharmony_ci .num_parents = 1, 8288c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 8298c2ecf20Sopenharmony_ci }, 8308c2ecf20Sopenharmony_ci }, 8318c2ecf20Sopenharmony_ci}; 8328c2ecf20Sopenharmony_ci 8338c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_non_gdsc_ahb_clk = { 8348c2ecf20Sopenharmony_ci .halt_reg = 0x4004, 8358c2ecf20Sopenharmony_ci .halt_check = BRANCH_VOTED, 8368c2ecf20Sopenharmony_ci .clkr = { 8378c2ecf20Sopenharmony_ci .enable_reg = 0x4004, 8388c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 8398c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 8408c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_non_gdsc_ahb_clk", 8418c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 8428c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_ahb_clk_src.clkr.hw, 8438c2ecf20Sopenharmony_ci }, 8448c2ecf20Sopenharmony_ci .num_parents = 1, 8458c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 8468c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 8478c2ecf20Sopenharmony_ci }, 8488c2ecf20Sopenharmony_ci }, 8498c2ecf20Sopenharmony_ci}; 8508c2ecf20Sopenharmony_ci 8518c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_pclk0_clk = { 8528c2ecf20Sopenharmony_ci .halt_reg = 0x2004, 8538c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 8548c2ecf20Sopenharmony_ci .clkr = { 8558c2ecf20Sopenharmony_ci .enable_reg = 0x2004, 8568c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 8578c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 8588c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_pclk0_clk", 8598c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 8608c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_pclk0_clk_src.clkr.hw, 8618c2ecf20Sopenharmony_ci }, 8628c2ecf20Sopenharmony_ci .num_parents = 1, 8638c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 8648c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 8658c2ecf20Sopenharmony_ci }, 8668c2ecf20Sopenharmony_ci }, 8678c2ecf20Sopenharmony_ci}; 8688c2ecf20Sopenharmony_ci 8698c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_pclk1_clk = { 8708c2ecf20Sopenharmony_ci .halt_reg = 0x2008, 8718c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 8728c2ecf20Sopenharmony_ci .clkr = { 8738c2ecf20Sopenharmony_ci .enable_reg = 0x2008, 8748c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 8758c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 8768c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_pclk1_clk", 8778c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 8788c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_pclk1_clk_src.clkr.hw, 8798c2ecf20Sopenharmony_ci }, 8808c2ecf20Sopenharmony_ci .num_parents = 1, 8818c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 8828c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 8838c2ecf20Sopenharmony_ci }, 8848c2ecf20Sopenharmony_ci }, 8858c2ecf20Sopenharmony_ci}; 8868c2ecf20Sopenharmony_ci 8878c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_rot_clk = { 8888c2ecf20Sopenharmony_ci .halt_reg = 0x2014, 8898c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 8908c2ecf20Sopenharmony_ci .clkr = { 8918c2ecf20Sopenharmony_ci .enable_reg = 0x2014, 8928c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 8938c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 8948c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_rot_clk", 8958c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 8968c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_rot_clk_src.clkr.hw, 8978c2ecf20Sopenharmony_ci }, 8988c2ecf20Sopenharmony_ci .num_parents = 1, 8998c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 9008c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 9018c2ecf20Sopenharmony_ci }, 9028c2ecf20Sopenharmony_ci }, 9038c2ecf20Sopenharmony_ci}; 9048c2ecf20Sopenharmony_ci 9058c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_rscc_ahb_clk = { 9068c2ecf20Sopenharmony_ci .halt_reg = 0x400c, 9078c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 9088c2ecf20Sopenharmony_ci .clkr = { 9098c2ecf20Sopenharmony_ci .enable_reg = 0x400c, 9108c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 9118c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 9128c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_rscc_ahb_clk", 9138c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 9148c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_ahb_clk_src.clkr.hw, 9158c2ecf20Sopenharmony_ci }, 9168c2ecf20Sopenharmony_ci .num_parents = 1, 9178c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 9188c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 9198c2ecf20Sopenharmony_ci }, 9208c2ecf20Sopenharmony_ci }, 9218c2ecf20Sopenharmony_ci}; 9228c2ecf20Sopenharmony_ci 9238c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_rscc_vsync_clk = { 9248c2ecf20Sopenharmony_ci .halt_reg = 0x4008, 9258c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 9268c2ecf20Sopenharmony_ci .clkr = { 9278c2ecf20Sopenharmony_ci .enable_reg = 0x4008, 9288c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 9298c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 9308c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_rscc_vsync_clk", 9318c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 9328c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_vsync_clk_src.clkr.hw, 9338c2ecf20Sopenharmony_ci }, 9348c2ecf20Sopenharmony_ci .num_parents = 1, 9358c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 9368c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 9378c2ecf20Sopenharmony_ci }, 9388c2ecf20Sopenharmony_ci }, 9398c2ecf20Sopenharmony_ci}; 9408c2ecf20Sopenharmony_ci 9418c2ecf20Sopenharmony_cistatic struct clk_branch disp_cc_mdss_vsync_clk = { 9428c2ecf20Sopenharmony_ci .halt_reg = 0x2024, 9438c2ecf20Sopenharmony_ci .halt_check = BRANCH_HALT, 9448c2ecf20Sopenharmony_ci .clkr = { 9458c2ecf20Sopenharmony_ci .enable_reg = 0x2024, 9468c2ecf20Sopenharmony_ci .enable_mask = BIT(0), 9478c2ecf20Sopenharmony_ci .hw.init = &(struct clk_init_data){ 9488c2ecf20Sopenharmony_ci .name = "disp_cc_mdss_vsync_clk", 9498c2ecf20Sopenharmony_ci .parent_data = &(const struct clk_parent_data){ 9508c2ecf20Sopenharmony_ci .hw = &disp_cc_mdss_vsync_clk_src.clkr.hw, 9518c2ecf20Sopenharmony_ci }, 9528c2ecf20Sopenharmony_ci .num_parents = 1, 9538c2ecf20Sopenharmony_ci .flags = CLK_SET_RATE_PARENT, 9548c2ecf20Sopenharmony_ci .ops = &clk_branch2_ops, 9558c2ecf20Sopenharmony_ci }, 9568c2ecf20Sopenharmony_ci }, 9578c2ecf20Sopenharmony_ci}; 9588c2ecf20Sopenharmony_ci 9598c2ecf20Sopenharmony_cistatic struct gdsc mdss_gdsc = { 9608c2ecf20Sopenharmony_ci .gdscr = 0x3000, 9618c2ecf20Sopenharmony_ci .pd = { 9628c2ecf20Sopenharmony_ci .name = "mdss_gdsc", 9638c2ecf20Sopenharmony_ci }, 9648c2ecf20Sopenharmony_ci .pwrsts = PWRSTS_OFF_ON, 9658c2ecf20Sopenharmony_ci .flags = HW_CTRL, 9668c2ecf20Sopenharmony_ci}; 9678c2ecf20Sopenharmony_ci 9688c2ecf20Sopenharmony_cistatic struct clk_regmap *disp_cc_sm8250_clocks[] = { 9698c2ecf20Sopenharmony_ci [DISP_CC_MDSS_AHB_CLK] = &disp_cc_mdss_ahb_clk.clkr, 9708c2ecf20Sopenharmony_ci [DISP_CC_MDSS_AHB_CLK_SRC] = &disp_cc_mdss_ahb_clk_src.clkr, 9718c2ecf20Sopenharmony_ci [DISP_CC_MDSS_BYTE0_CLK] = &disp_cc_mdss_byte0_clk.clkr, 9728c2ecf20Sopenharmony_ci [DISP_CC_MDSS_BYTE0_CLK_SRC] = &disp_cc_mdss_byte0_clk_src.clkr, 9738c2ecf20Sopenharmony_ci [DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] = &disp_cc_mdss_byte0_div_clk_src.clkr, 9748c2ecf20Sopenharmony_ci [DISP_CC_MDSS_BYTE0_INTF_CLK] = &disp_cc_mdss_byte0_intf_clk.clkr, 9758c2ecf20Sopenharmony_ci [DISP_CC_MDSS_BYTE1_CLK] = &disp_cc_mdss_byte1_clk.clkr, 9768c2ecf20Sopenharmony_ci [DISP_CC_MDSS_BYTE1_CLK_SRC] = &disp_cc_mdss_byte1_clk_src.clkr, 9778c2ecf20Sopenharmony_ci [DISP_CC_MDSS_BYTE1_DIV_CLK_SRC] = &disp_cc_mdss_byte1_div_clk_src.clkr, 9788c2ecf20Sopenharmony_ci [DISP_CC_MDSS_BYTE1_INTF_CLK] = &disp_cc_mdss_byte1_intf_clk.clkr, 9798c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_AUX1_CLK] = &disp_cc_mdss_dp_aux1_clk.clkr, 9808c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_AUX1_CLK_SRC] = &disp_cc_mdss_dp_aux1_clk_src.clkr, 9818c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_AUX_CLK] = &disp_cc_mdss_dp_aux_clk.clkr, 9828c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_AUX_CLK_SRC] = &disp_cc_mdss_dp_aux_clk_src.clkr, 9838c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_LINK1_CLK] = &disp_cc_mdss_dp_link1_clk.clkr, 9848c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_LINK1_CLK_SRC] = &disp_cc_mdss_dp_link1_clk_src.clkr, 9858c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_LINK1_DIV_CLK_SRC] = &disp_cc_mdss_dp_link1_div_clk_src.clkr, 9868c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_LINK1_INTF_CLK] = &disp_cc_mdss_dp_link1_intf_clk.clkr, 9878c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_LINK_CLK] = &disp_cc_mdss_dp_link_clk.clkr, 9888c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_LINK_CLK_SRC] = &disp_cc_mdss_dp_link_clk_src.clkr, 9898c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_LINK_DIV_CLK_SRC] = &disp_cc_mdss_dp_link_div_clk_src.clkr, 9908c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_LINK_INTF_CLK] = &disp_cc_mdss_dp_link_intf_clk.clkr, 9918c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_PIXEL1_CLK] = &disp_cc_mdss_dp_pixel1_clk.clkr, 9928c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_PIXEL1_CLK_SRC] = &disp_cc_mdss_dp_pixel1_clk_src.clkr, 9938c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_PIXEL2_CLK] = &disp_cc_mdss_dp_pixel2_clk.clkr, 9948c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_PIXEL2_CLK_SRC] = &disp_cc_mdss_dp_pixel2_clk_src.clkr, 9958c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_PIXEL_CLK] = &disp_cc_mdss_dp_pixel_clk.clkr, 9968c2ecf20Sopenharmony_ci [DISP_CC_MDSS_DP_PIXEL_CLK_SRC] = &disp_cc_mdss_dp_pixel_clk_src.clkr, 9978c2ecf20Sopenharmony_ci [DISP_CC_MDSS_ESC0_CLK] = &disp_cc_mdss_esc0_clk.clkr, 9988c2ecf20Sopenharmony_ci [DISP_CC_MDSS_ESC0_CLK_SRC] = &disp_cc_mdss_esc0_clk_src.clkr, 9998c2ecf20Sopenharmony_ci [DISP_CC_MDSS_ESC1_CLK] = &disp_cc_mdss_esc1_clk.clkr, 10008c2ecf20Sopenharmony_ci [DISP_CC_MDSS_ESC1_CLK_SRC] = &disp_cc_mdss_esc1_clk_src.clkr, 10018c2ecf20Sopenharmony_ci [DISP_CC_MDSS_MDP_CLK] = &disp_cc_mdss_mdp_clk.clkr, 10028c2ecf20Sopenharmony_ci [DISP_CC_MDSS_MDP_CLK_SRC] = &disp_cc_mdss_mdp_clk_src.clkr, 10038c2ecf20Sopenharmony_ci [DISP_CC_MDSS_MDP_LUT_CLK] = &disp_cc_mdss_mdp_lut_clk.clkr, 10048c2ecf20Sopenharmony_ci [DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &disp_cc_mdss_non_gdsc_ahb_clk.clkr, 10058c2ecf20Sopenharmony_ci [DISP_CC_MDSS_PCLK0_CLK] = &disp_cc_mdss_pclk0_clk.clkr, 10068c2ecf20Sopenharmony_ci [DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr, 10078c2ecf20Sopenharmony_ci [DISP_CC_MDSS_PCLK1_CLK] = &disp_cc_mdss_pclk1_clk.clkr, 10088c2ecf20Sopenharmony_ci [DISP_CC_MDSS_PCLK1_CLK_SRC] = &disp_cc_mdss_pclk1_clk_src.clkr, 10098c2ecf20Sopenharmony_ci [DISP_CC_MDSS_ROT_CLK] = &disp_cc_mdss_rot_clk.clkr, 10108c2ecf20Sopenharmony_ci [DISP_CC_MDSS_ROT_CLK_SRC] = &disp_cc_mdss_rot_clk_src.clkr, 10118c2ecf20Sopenharmony_ci [DISP_CC_MDSS_RSCC_AHB_CLK] = &disp_cc_mdss_rscc_ahb_clk.clkr, 10128c2ecf20Sopenharmony_ci [DISP_CC_MDSS_RSCC_VSYNC_CLK] = &disp_cc_mdss_rscc_vsync_clk.clkr, 10138c2ecf20Sopenharmony_ci [DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr, 10148c2ecf20Sopenharmony_ci [DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr, 10158c2ecf20Sopenharmony_ci [DISP_CC_PLL0] = &disp_cc_pll0.clkr, 10168c2ecf20Sopenharmony_ci [DISP_CC_PLL1] = &disp_cc_pll1.clkr, 10178c2ecf20Sopenharmony_ci}; 10188c2ecf20Sopenharmony_ci 10198c2ecf20Sopenharmony_cistatic const struct qcom_reset_map disp_cc_sm8250_resets[] = { 10208c2ecf20Sopenharmony_ci [DISP_CC_MDSS_CORE_BCR] = { 0x2000 }, 10218c2ecf20Sopenharmony_ci [DISP_CC_MDSS_RSCC_BCR] = { 0x4000 }, 10228c2ecf20Sopenharmony_ci}; 10238c2ecf20Sopenharmony_ci 10248c2ecf20Sopenharmony_cistatic struct gdsc *disp_cc_sm8250_gdscs[] = { 10258c2ecf20Sopenharmony_ci [MDSS_GDSC] = &mdss_gdsc, 10268c2ecf20Sopenharmony_ci}; 10278c2ecf20Sopenharmony_ci 10288c2ecf20Sopenharmony_cistatic const struct regmap_config disp_cc_sm8250_regmap_config = { 10298c2ecf20Sopenharmony_ci .reg_bits = 32, 10308c2ecf20Sopenharmony_ci .reg_stride = 4, 10318c2ecf20Sopenharmony_ci .val_bits = 32, 10328c2ecf20Sopenharmony_ci .max_register = 0x10000, 10338c2ecf20Sopenharmony_ci .fast_io = true, 10348c2ecf20Sopenharmony_ci}; 10358c2ecf20Sopenharmony_ci 10368c2ecf20Sopenharmony_cistatic const struct qcom_cc_desc disp_cc_sm8250_desc = { 10378c2ecf20Sopenharmony_ci .config = &disp_cc_sm8250_regmap_config, 10388c2ecf20Sopenharmony_ci .clks = disp_cc_sm8250_clocks, 10398c2ecf20Sopenharmony_ci .num_clks = ARRAY_SIZE(disp_cc_sm8250_clocks), 10408c2ecf20Sopenharmony_ci .resets = disp_cc_sm8250_resets, 10418c2ecf20Sopenharmony_ci .num_resets = ARRAY_SIZE(disp_cc_sm8250_resets), 10428c2ecf20Sopenharmony_ci .gdscs = disp_cc_sm8250_gdscs, 10438c2ecf20Sopenharmony_ci .num_gdscs = ARRAY_SIZE(disp_cc_sm8250_gdscs), 10448c2ecf20Sopenharmony_ci}; 10458c2ecf20Sopenharmony_ci 10468c2ecf20Sopenharmony_cistatic const struct of_device_id disp_cc_sm8250_match_table[] = { 10478c2ecf20Sopenharmony_ci { .compatible = "qcom,sm8150-dispcc" }, 10488c2ecf20Sopenharmony_ci { .compatible = "qcom,sm8250-dispcc" }, 10498c2ecf20Sopenharmony_ci { } 10508c2ecf20Sopenharmony_ci}; 10518c2ecf20Sopenharmony_ciMODULE_DEVICE_TABLE(of, disp_cc_sm8250_match_table); 10528c2ecf20Sopenharmony_ci 10538c2ecf20Sopenharmony_cistatic int disp_cc_sm8250_probe(struct platform_device *pdev) 10548c2ecf20Sopenharmony_ci{ 10558c2ecf20Sopenharmony_ci struct regmap *regmap; 10568c2ecf20Sopenharmony_ci 10578c2ecf20Sopenharmony_ci regmap = qcom_cc_map(pdev, &disp_cc_sm8250_desc); 10588c2ecf20Sopenharmony_ci if (IS_ERR(regmap)) 10598c2ecf20Sopenharmony_ci return PTR_ERR(regmap); 10608c2ecf20Sopenharmony_ci 10618c2ecf20Sopenharmony_ci /* note: trion == lucid, except for the prepare() op */ 10628c2ecf20Sopenharmony_ci BUILD_BUG_ON(CLK_ALPHA_PLL_TYPE_TRION != CLK_ALPHA_PLL_TYPE_LUCID); 10638c2ecf20Sopenharmony_ci if (of_device_is_compatible(pdev->dev.of_node, "qcom,sm8150-dispcc")) { 10648c2ecf20Sopenharmony_ci disp_cc_pll0_config.config_ctl_hi_val = 0x00002267; 10658c2ecf20Sopenharmony_ci disp_cc_pll0_config.config_ctl_hi1_val = 0x00000024; 10668c2ecf20Sopenharmony_ci disp_cc_pll0_config.user_ctl_hi1_val = 0x000000D0; 10678c2ecf20Sopenharmony_ci disp_cc_pll0_init.ops = &clk_alpha_pll_trion_ops; 10688c2ecf20Sopenharmony_ci disp_cc_pll1_config.config_ctl_hi_val = 0x00002267; 10698c2ecf20Sopenharmony_ci disp_cc_pll1_config.config_ctl_hi1_val = 0x00000024; 10708c2ecf20Sopenharmony_ci disp_cc_pll1_config.user_ctl_hi1_val = 0x000000D0; 10718c2ecf20Sopenharmony_ci disp_cc_pll1_init.ops = &clk_alpha_pll_trion_ops; 10728c2ecf20Sopenharmony_ci } 10738c2ecf20Sopenharmony_ci 10748c2ecf20Sopenharmony_ci clk_lucid_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config); 10758c2ecf20Sopenharmony_ci clk_lucid_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config); 10768c2ecf20Sopenharmony_ci 10778c2ecf20Sopenharmony_ci /* Enable clock gating for MDP clocks */ 10788c2ecf20Sopenharmony_ci regmap_update_bits(regmap, 0x8000, 0x10, 0x10); 10798c2ecf20Sopenharmony_ci 10808c2ecf20Sopenharmony_ci /* DISP_CC_XO_CLK always-on */ 10818c2ecf20Sopenharmony_ci regmap_update_bits(regmap, 0x605c, BIT(0), BIT(0)); 10828c2ecf20Sopenharmony_ci 10838c2ecf20Sopenharmony_ci return qcom_cc_really_probe(pdev, &disp_cc_sm8250_desc, regmap); 10848c2ecf20Sopenharmony_ci} 10858c2ecf20Sopenharmony_ci 10868c2ecf20Sopenharmony_cistatic struct platform_driver disp_cc_sm8250_driver = { 10878c2ecf20Sopenharmony_ci .probe = disp_cc_sm8250_probe, 10888c2ecf20Sopenharmony_ci .driver = { 10898c2ecf20Sopenharmony_ci .name = "disp_cc-sm8250", 10908c2ecf20Sopenharmony_ci .of_match_table = disp_cc_sm8250_match_table, 10918c2ecf20Sopenharmony_ci }, 10928c2ecf20Sopenharmony_ci}; 10938c2ecf20Sopenharmony_ci 10948c2ecf20Sopenharmony_cistatic int __init disp_cc_sm8250_init(void) 10958c2ecf20Sopenharmony_ci{ 10968c2ecf20Sopenharmony_ci return platform_driver_register(&disp_cc_sm8250_driver); 10978c2ecf20Sopenharmony_ci} 10988c2ecf20Sopenharmony_cisubsys_initcall(disp_cc_sm8250_init); 10998c2ecf20Sopenharmony_ci 11008c2ecf20Sopenharmony_cistatic void __exit disp_cc_sm8250_exit(void) 11018c2ecf20Sopenharmony_ci{ 11028c2ecf20Sopenharmony_ci platform_driver_unregister(&disp_cc_sm8250_driver); 11038c2ecf20Sopenharmony_ci} 11048c2ecf20Sopenharmony_cimodule_exit(disp_cc_sm8250_exit); 11058c2ecf20Sopenharmony_ci 11068c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("QTI DISPCC SM8250 Driver"); 11078c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL v2"); 1108