11a00c962STaniya Das // SPDX-License-Identifier: GPL-2.0-only
21a00c962STaniya Das /*
3*6e6fec3fSTaniya Das * Copyright (c) 2021-2022, The Linux Foundation. All rights reserved.
41a00c962STaniya Das */
51a00c962STaniya Das
61a00c962STaniya Das #include <linux/clk-provider.h>
71a00c962STaniya Das #include <linux/module.h>
81a00c962STaniya Das #include <linux/platform_device.h>
91a00c962STaniya Das #include <linux/regmap.h>
101a00c962STaniya Das
111a00c962STaniya Das #include <dt-bindings/clock/qcom,dispcc-sc7280.h>
121a00c962STaniya Das
131a00c962STaniya Das #include "clk-alpha-pll.h"
141a00c962STaniya Das #include "clk-branch.h"
151a00c962STaniya Das #include "clk-rcg.h"
161a00c962STaniya Das #include "clk-regmap-divider.h"
171a00c962STaniya Das #include "common.h"
181a00c962STaniya Das #include "gdsc.h"
191a00c962STaniya Das
201a00c962STaniya Das enum {
211a00c962STaniya Das P_BI_TCXO,
221a00c962STaniya Das P_DISP_CC_PLL0_OUT_EVEN,
231a00c962STaniya Das P_DISP_CC_PLL0_OUT_MAIN,
241a00c962STaniya Das P_DP_PHY_PLL_LINK_CLK,
251a00c962STaniya Das P_DP_PHY_PLL_VCO_DIV_CLK,
261a00c962STaniya Das P_DSI0_PHY_PLL_OUT_BYTECLK,
271a00c962STaniya Das P_DSI0_PHY_PLL_OUT_DSICLK,
281a00c962STaniya Das P_EDP_PHY_PLL_LINK_CLK,
291a00c962STaniya Das P_EDP_PHY_PLL_VCO_DIV_CLK,
301a00c962STaniya Das P_GCC_DISP_GPLL0_CLK,
311a00c962STaniya Das };
321a00c962STaniya Das
331a00c962STaniya Das static const struct pll_vco lucid_vco[] = {
341a00c962STaniya Das { 249600000, 2000000000, 0 },
351a00c962STaniya Das };
361a00c962STaniya Das
371a00c962STaniya Das /* 1520MHz Configuration*/
381a00c962STaniya Das static const struct alpha_pll_config disp_cc_pll0_config = {
391a00c962STaniya Das .l = 0x4F,
401a00c962STaniya Das .alpha = 0x2AAA,
411a00c962STaniya Das .config_ctl_val = 0x20485699,
421a00c962STaniya Das .config_ctl_hi_val = 0x00002261,
431a00c962STaniya Das .config_ctl_hi1_val = 0x329A299C,
441a00c962STaniya Das .user_ctl_val = 0x00000001,
451a00c962STaniya Das .user_ctl_hi_val = 0x00000805,
461a00c962STaniya Das .user_ctl_hi1_val = 0x00000000,
471a00c962STaniya Das };
481a00c962STaniya Das
491a00c962STaniya Das static struct clk_alpha_pll disp_cc_pll0 = {
501a00c962STaniya Das .offset = 0x0,
511a00c962STaniya Das .vco_table = lucid_vco,
521a00c962STaniya Das .num_vco = ARRAY_SIZE(lucid_vco),
531a00c962STaniya Das .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
541a00c962STaniya Das .clkr = {
551a00c962STaniya Das .hw.init = &(struct clk_init_data){
561a00c962STaniya Das .name = "disp_cc_pll0",
571a00c962STaniya Das .parent_data = &(const struct clk_parent_data){
581a00c962STaniya Das .fw_name = "bi_tcxo",
591a00c962STaniya Das },
601a00c962STaniya Das .num_parents = 1,
611a00c962STaniya Das .ops = &clk_alpha_pll_lucid_ops,
621a00c962STaniya Das },
631a00c962STaniya Das },
641a00c962STaniya Das };
651a00c962STaniya Das
661a00c962STaniya Das static const struct parent_map disp_cc_parent_map_0[] = {
671a00c962STaniya Das { P_BI_TCXO, 0 },
681a00c962STaniya Das };
691a00c962STaniya Das
701a00c962STaniya Das static const struct clk_parent_data disp_cc_parent_data_0[] = {
711a00c962STaniya Das { .fw_name = "bi_tcxo" },
721a00c962STaniya Das };
731a00c962STaniya Das
741a00c962STaniya Das static const struct parent_map disp_cc_parent_map_1[] = {
751a00c962STaniya Das { P_BI_TCXO, 0 },
761a00c962STaniya Das { P_DP_PHY_PLL_LINK_CLK, 1 },
771a00c962STaniya Das { P_DP_PHY_PLL_VCO_DIV_CLK, 2 },
781a00c962STaniya Das };
791a00c962STaniya Das
801a00c962STaniya Das static const struct clk_parent_data disp_cc_parent_data_1[] = {
811a00c962STaniya Das { .fw_name = "bi_tcxo" },
821a00c962STaniya Das { .fw_name = "dp_phy_pll_link_clk" },
831a00c962STaniya Das { .fw_name = "dp_phy_pll_vco_div_clk" },
841a00c962STaniya Das };
851a00c962STaniya Das
861a00c962STaniya Das static const struct parent_map disp_cc_parent_map_2[] = {
871a00c962STaniya Das { P_BI_TCXO, 0 },
881a00c962STaniya Das { P_DSI0_PHY_PLL_OUT_BYTECLK, 1 },
891a00c962STaniya Das };
901a00c962STaniya Das
911a00c962STaniya Das static const struct clk_parent_data disp_cc_parent_data_2[] = {
921a00c962STaniya Das { .fw_name = "bi_tcxo" },
931a00c962STaniya Das { .fw_name = "dsi0_phy_pll_out_byteclk" },
941a00c962STaniya Das };
951a00c962STaniya Das
961a00c962STaniya Das static const struct parent_map disp_cc_parent_map_3[] = {
971a00c962STaniya Das { P_BI_TCXO, 0 },
981a00c962STaniya Das { P_EDP_PHY_PLL_LINK_CLK, 1 },
991a00c962STaniya Das { P_EDP_PHY_PLL_VCO_DIV_CLK, 2 },
1001a00c962STaniya Das };
1011a00c962STaniya Das
1021a00c962STaniya Das static const struct clk_parent_data disp_cc_parent_data_3[] = {
1031a00c962STaniya Das { .fw_name = "bi_tcxo" },
1041a00c962STaniya Das { .fw_name = "edp_phy_pll_link_clk" },
1051a00c962STaniya Das { .fw_name = "edp_phy_pll_vco_div_clk" },
1061a00c962STaniya Das };
1071a00c962STaniya Das
1081a00c962STaniya Das static const struct parent_map disp_cc_parent_map_4[] = {
1091a00c962STaniya Das { P_BI_TCXO, 0 },
1101a00c962STaniya Das { P_DISP_CC_PLL0_OUT_MAIN, 1 },
1111a00c962STaniya Das { P_GCC_DISP_GPLL0_CLK, 4 },
1121a00c962STaniya Das { P_DISP_CC_PLL0_OUT_EVEN, 5 },
1131a00c962STaniya Das };
1141a00c962STaniya Das
1151a00c962STaniya Das static const struct clk_parent_data disp_cc_parent_data_4[] = {
1161a00c962STaniya Das { .fw_name = "bi_tcxo" },
1171a00c962STaniya Das { .hw = &disp_cc_pll0.clkr.hw },
1181a00c962STaniya Das { .fw_name = "gcc_disp_gpll0_clk" },
1191a00c962STaniya Das { .hw = &disp_cc_pll0.clkr.hw },
1201a00c962STaniya Das };
1211a00c962STaniya Das
1221a00c962STaniya Das static const struct parent_map disp_cc_parent_map_5[] = {
1231a00c962STaniya Das { P_BI_TCXO, 0 },
1241a00c962STaniya Das { P_GCC_DISP_GPLL0_CLK, 4 },
1251a00c962STaniya Das };
1261a00c962STaniya Das
1271a00c962STaniya Das static const struct clk_parent_data disp_cc_parent_data_5[] = {
1281a00c962STaniya Das { .fw_name = "bi_tcxo" },
1291a00c962STaniya Das { .fw_name = "gcc_disp_gpll0_clk" },
1301a00c962STaniya Das };
1311a00c962STaniya Das
1321a00c962STaniya Das static const struct parent_map disp_cc_parent_map_6[] = {
1331a00c962STaniya Das { P_BI_TCXO, 0 },
1341a00c962STaniya Das { P_DSI0_PHY_PLL_OUT_DSICLK, 1 },
1351a00c962STaniya Das };
1361a00c962STaniya Das
1371a00c962STaniya Das static const struct clk_parent_data disp_cc_parent_data_6[] = {
1381a00c962STaniya Das { .fw_name = "bi_tcxo" },
1391a00c962STaniya Das { .fw_name = "dsi0_phy_pll_out_dsiclk" },
1401a00c962STaniya Das };
1411a00c962STaniya Das
1421a00c962STaniya Das static const struct freq_tbl ftbl_disp_cc_mdss_ahb_clk_src[] = {
1431a00c962STaniya Das F(19200000, P_BI_TCXO, 1, 0, 0),
1441a00c962STaniya Das F(37500000, P_GCC_DISP_GPLL0_CLK, 16, 0, 0),
1451a00c962STaniya Das F(75000000, P_GCC_DISP_GPLL0_CLK, 8, 0, 0),
1461a00c962STaniya Das { }
1471a00c962STaniya Das };
1481a00c962STaniya Das
1491a00c962STaniya Das static struct clk_rcg2 disp_cc_mdss_ahb_clk_src = {
1501a00c962STaniya Das .cmd_rcgr = 0x1170,
1511a00c962STaniya Das .mnd_width = 0,
1521a00c962STaniya Das .hid_width = 5,
1531a00c962STaniya Das .parent_map = disp_cc_parent_map_5,
1541a00c962STaniya Das .freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src,
1551a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data){
1561a00c962STaniya Das .name = "disp_cc_mdss_ahb_clk_src",
1571a00c962STaniya Das .parent_data = disp_cc_parent_data_5,
1581a00c962STaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_5),
1591a00c962STaniya Das .ops = &clk_rcg2_shared_ops,
1601a00c962STaniya Das },
1611a00c962STaniya Das };
1621a00c962STaniya Das
1631a00c962STaniya Das static struct clk_rcg2 disp_cc_mdss_byte0_clk_src = {
1641a00c962STaniya Das .cmd_rcgr = 0x10d8,
1651a00c962STaniya Das .mnd_width = 0,
1661a00c962STaniya Das .hid_width = 5,
1671a00c962STaniya Das .parent_map = disp_cc_parent_map_2,
1681a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data){
1691a00c962STaniya Das .name = "disp_cc_mdss_byte0_clk_src",
1701a00c962STaniya Das .parent_data = disp_cc_parent_data_2,
1711a00c962STaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
1721a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
1731a00c962STaniya Das .ops = &clk_byte2_ops,
1741a00c962STaniya Das },
1751a00c962STaniya Das };
1761a00c962STaniya Das
1771a00c962STaniya Das static const struct freq_tbl ftbl_disp_cc_mdss_dp_aux_clk_src[] = {
1781a00c962STaniya Das F(19200000, P_BI_TCXO, 1, 0, 0),
1791a00c962STaniya Das { }
1801a00c962STaniya Das };
1811a00c962STaniya Das
1821a00c962STaniya Das static struct clk_rcg2 disp_cc_mdss_dp_aux_clk_src = {
1831a00c962STaniya Das .cmd_rcgr = 0x1158,
1841a00c962STaniya Das .mnd_width = 0,
1851a00c962STaniya Das .hid_width = 5,
1861a00c962STaniya Das .parent_map = disp_cc_parent_map_0,
1871a00c962STaniya Das .freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src,
1881a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data){
1891a00c962STaniya Das .name = "disp_cc_mdss_dp_aux_clk_src",
1901a00c962STaniya Das .parent_data = disp_cc_parent_data_0,
1911a00c962STaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
1921a00c962STaniya Das .ops = &clk_rcg2_ops,
1931a00c962STaniya Das },
1941a00c962STaniya Das };
1951a00c962STaniya Das
1961a00c962STaniya Das static struct clk_rcg2 disp_cc_mdss_dp_crypto_clk_src = {
1971a00c962STaniya Das .cmd_rcgr = 0x1128,
1981a00c962STaniya Das .mnd_width = 0,
1991a00c962STaniya Das .hid_width = 5,
2001a00c962STaniya Das .parent_map = disp_cc_parent_map_1,
2011a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data){
2021a00c962STaniya Das .name = "disp_cc_mdss_dp_crypto_clk_src",
2031a00c962STaniya Das .parent_data = disp_cc_parent_data_1,
2041a00c962STaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
2051a00c962STaniya Das .ops = &clk_byte2_ops,
2061a00c962STaniya Das },
2071a00c962STaniya Das };
2081a00c962STaniya Das
2091a00c962STaniya Das static struct clk_rcg2 disp_cc_mdss_dp_link_clk_src = {
2101a00c962STaniya Das .cmd_rcgr = 0x110c,
2111a00c962STaniya Das .mnd_width = 0,
2121a00c962STaniya Das .hid_width = 5,
2131a00c962STaniya Das .parent_map = disp_cc_parent_map_1,
2141a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data){
2151a00c962STaniya Das .name = "disp_cc_mdss_dp_link_clk_src",
2161a00c962STaniya Das .parent_data = disp_cc_parent_data_1,
2171a00c962STaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
2181a00c962STaniya Das .ops = &clk_byte2_ops,
2191a00c962STaniya Das },
2201a00c962STaniya Das };
2211a00c962STaniya Das
2221a00c962STaniya Das static struct clk_rcg2 disp_cc_mdss_dp_pixel_clk_src = {
2231a00c962STaniya Das .cmd_rcgr = 0x1140,
2241a00c962STaniya Das .mnd_width = 16,
2251a00c962STaniya Das .hid_width = 5,
2261a00c962STaniya Das .parent_map = disp_cc_parent_map_1,
2271a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data){
2281a00c962STaniya Das .name = "disp_cc_mdss_dp_pixel_clk_src",
2291a00c962STaniya Das .parent_data = disp_cc_parent_data_1,
2301a00c962STaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
2311a00c962STaniya Das .ops = &clk_dp_ops,
2321a00c962STaniya Das },
2331a00c962STaniya Das };
2341a00c962STaniya Das
2351a00c962STaniya Das static struct clk_rcg2 disp_cc_mdss_edp_aux_clk_src = {
2361a00c962STaniya Das .cmd_rcgr = 0x11d0,
2371a00c962STaniya Das .mnd_width = 0,
2381a00c962STaniya Das .hid_width = 5,
2391a00c962STaniya Das .parent_map = disp_cc_parent_map_0,
2401a00c962STaniya Das .freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src,
2411a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data){
2421a00c962STaniya Das .name = "disp_cc_mdss_edp_aux_clk_src",
2431a00c962STaniya Das .parent_data = disp_cc_parent_data_0,
2441a00c962STaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
2451a00c962STaniya Das .ops = &clk_rcg2_ops,
2461a00c962STaniya Das },
2471a00c962STaniya Das };
2481a00c962STaniya Das
2491a00c962STaniya Das static struct clk_rcg2 disp_cc_mdss_edp_link_clk_src = {
2501a00c962STaniya Das .cmd_rcgr = 0x11a0,
2511a00c962STaniya Das .mnd_width = 0,
2521a00c962STaniya Das .hid_width = 5,
2531a00c962STaniya Das .parent_map = disp_cc_parent_map_3,
2541a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data){
2551a00c962STaniya Das .name = "disp_cc_mdss_edp_link_clk_src",
2561a00c962STaniya Das .parent_data = disp_cc_parent_data_3,
2571a00c962STaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
2581a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
2591a00c962STaniya Das .ops = &clk_byte2_ops,
2601a00c962STaniya Das },
2611a00c962STaniya Das };
2621a00c962STaniya Das
2631a00c962STaniya Das static struct clk_rcg2 disp_cc_mdss_edp_pixel_clk_src = {
2641a00c962STaniya Das .cmd_rcgr = 0x1188,
2651a00c962STaniya Das .mnd_width = 16,
2661a00c962STaniya Das .hid_width = 5,
2671a00c962STaniya Das .parent_map = disp_cc_parent_map_3,
2681a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data){
2691a00c962STaniya Das .name = "disp_cc_mdss_edp_pixel_clk_src",
2701a00c962STaniya Das .parent_data = disp_cc_parent_data_3,
2711a00c962STaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
2721a00c962STaniya Das .ops = &clk_dp_ops,
2731a00c962STaniya Das },
2741a00c962STaniya Das };
2751a00c962STaniya Das
2761a00c962STaniya Das static struct clk_rcg2 disp_cc_mdss_esc0_clk_src = {
2771a00c962STaniya Das .cmd_rcgr = 0x10f4,
2781a00c962STaniya Das .mnd_width = 0,
2791a00c962STaniya Das .hid_width = 5,
2801a00c962STaniya Das .parent_map = disp_cc_parent_map_2,
2811a00c962STaniya Das .freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src,
2821a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data){
2831a00c962STaniya Das .name = "disp_cc_mdss_esc0_clk_src",
2841a00c962STaniya Das .parent_data = disp_cc_parent_data_2,
2851a00c962STaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
2861a00c962STaniya Das .ops = &clk_rcg2_ops,
2871a00c962STaniya Das },
2881a00c962STaniya Das };
2891a00c962STaniya Das
2901a00c962STaniya Das static const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src[] = {
2911a00c962STaniya Das F(200000000, P_GCC_DISP_GPLL0_CLK, 3, 0, 0),
2921a00c962STaniya Das F(300000000, P_GCC_DISP_GPLL0_CLK, 2, 0, 0),
2931a00c962STaniya Das F(380000000, P_DISP_CC_PLL0_OUT_MAIN, 4, 0, 0),
2941a00c962STaniya Das F(506666667, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
2951a00c962STaniya Das F(608000000, P_DISP_CC_PLL0_OUT_MAIN, 2.5, 0, 0),
2961a00c962STaniya Das { }
2971a00c962STaniya Das };
2981a00c962STaniya Das
2991a00c962STaniya Das static struct clk_rcg2 disp_cc_mdss_mdp_clk_src = {
3001a00c962STaniya Das .cmd_rcgr = 0x1090,
3011a00c962STaniya Das .mnd_width = 0,
3021a00c962STaniya Das .hid_width = 5,
3031a00c962STaniya Das .parent_map = disp_cc_parent_map_4,
3041a00c962STaniya Das .freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src,
3051a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data){
3061a00c962STaniya Das .name = "disp_cc_mdss_mdp_clk_src",
3071a00c962STaniya Das .parent_data = disp_cc_parent_data_4,
3081a00c962STaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
3091a00c962STaniya Das .ops = &clk_rcg2_shared_ops,
3101a00c962STaniya Das },
3111a00c962STaniya Das };
3121a00c962STaniya Das
3131a00c962STaniya Das static struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = {
3141a00c962STaniya Das .cmd_rcgr = 0x1078,
3151a00c962STaniya Das .mnd_width = 8,
3161a00c962STaniya Das .hid_width = 5,
3171a00c962STaniya Das .parent_map = disp_cc_parent_map_6,
3181a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data){
3191a00c962STaniya Das .name = "disp_cc_mdss_pclk0_clk_src",
3201a00c962STaniya Das .parent_data = disp_cc_parent_data_6,
3211a00c962STaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_6),
3221a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
3231a00c962STaniya Das .ops = &clk_pixel_ops,
3241a00c962STaniya Das },
3251a00c962STaniya Das };
3261a00c962STaniya Das
3271a00c962STaniya Das static struct clk_rcg2 disp_cc_mdss_rot_clk_src = {
3281a00c962STaniya Das .cmd_rcgr = 0x10a8,
3291a00c962STaniya Das .mnd_width = 0,
3301a00c962STaniya Das .hid_width = 5,
3311a00c962STaniya Das .parent_map = disp_cc_parent_map_4,
3321a00c962STaniya Das .freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src,
3331a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data){
3341a00c962STaniya Das .name = "disp_cc_mdss_rot_clk_src",
3351a00c962STaniya Das .parent_data = disp_cc_parent_data_4,
3361a00c962STaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
3371a00c962STaniya Das .ops = &clk_rcg2_shared_ops,
3381a00c962STaniya Das },
3391a00c962STaniya Das };
3401a00c962STaniya Das
3411a00c962STaniya Das static struct clk_rcg2 disp_cc_mdss_vsync_clk_src = {
3421a00c962STaniya Das .cmd_rcgr = 0x10c0,
3431a00c962STaniya Das .mnd_width = 0,
3441a00c962STaniya Das .hid_width = 5,
3451a00c962STaniya Das .parent_map = disp_cc_parent_map_0,
3461a00c962STaniya Das .freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src,
3471a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data){
3481a00c962STaniya Das .name = "disp_cc_mdss_vsync_clk_src",
3491a00c962STaniya Das .parent_data = disp_cc_parent_data_0,
3501a00c962STaniya Das .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
3511a00c962STaniya Das .ops = &clk_rcg2_ops,
3521a00c962STaniya Das },
3531a00c962STaniya Das };
3541a00c962STaniya Das
3551a00c962STaniya Das static struct clk_regmap_div disp_cc_mdss_byte0_div_clk_src = {
3561a00c962STaniya Das .reg = 0x10f0,
3571a00c962STaniya Das .shift = 0,
3581a00c962STaniya Das .width = 4,
3591a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data) {
3601a00c962STaniya Das .name = "disp_cc_mdss_byte0_div_clk_src",
3611a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
3621a00c962STaniya Das &disp_cc_mdss_byte0_clk_src.clkr.hw,
3631a00c962STaniya Das },
3641a00c962STaniya Das .num_parents = 1,
3651a00c962STaniya Das .ops = &clk_regmap_div_ops,
3661a00c962STaniya Das },
3671a00c962STaniya Das };
3681a00c962STaniya Das
3691a00c962STaniya Das static struct clk_regmap_div disp_cc_mdss_dp_link_div_clk_src = {
3701a00c962STaniya Das .reg = 0x1124,
3711a00c962STaniya Das .shift = 0,
3721a00c962STaniya Das .width = 4,
3731a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data) {
3741a00c962STaniya Das .name = "disp_cc_mdss_dp_link_div_clk_src",
3751a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
3761a00c962STaniya Das &disp_cc_mdss_dp_link_clk_src.clkr.hw,
3771a00c962STaniya Das },
3781a00c962STaniya Das .num_parents = 1,
3791a00c962STaniya Das .ops = &clk_regmap_div_ro_ops,
3801a00c962STaniya Das },
3811a00c962STaniya Das };
3821a00c962STaniya Das
3831a00c962STaniya Das static struct clk_regmap_div disp_cc_mdss_edp_link_div_clk_src = {
3841a00c962STaniya Das .reg = 0x11b8,
3851a00c962STaniya Das .shift = 0,
3861a00c962STaniya Das .width = 4,
3871a00c962STaniya Das .clkr.hw.init = &(struct clk_init_data) {
3881a00c962STaniya Das .name = "disp_cc_mdss_edp_link_div_clk_src",
3891a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
3901a00c962STaniya Das &disp_cc_mdss_edp_link_clk_src.clkr.hw,
3911a00c962STaniya Das },
3921a00c962STaniya Das .num_parents = 1,
3931a00c962STaniya Das .ops = &clk_regmap_div_ro_ops,
3941a00c962STaniya Das },
3951a00c962STaniya Das };
3961a00c962STaniya Das
3971a00c962STaniya Das static struct clk_branch disp_cc_mdss_ahb_clk = {
3981a00c962STaniya Das .halt_reg = 0x1050,
3991a00c962STaniya Das .halt_check = BRANCH_HALT,
4001a00c962STaniya Das .clkr = {
4011a00c962STaniya Das .enable_reg = 0x1050,
4021a00c962STaniya Das .enable_mask = BIT(0),
4031a00c962STaniya Das .hw.init = &(struct clk_init_data){
4041a00c962STaniya Das .name = "disp_cc_mdss_ahb_clk",
4051a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
4061a00c962STaniya Das &disp_cc_mdss_ahb_clk_src.clkr.hw,
4071a00c962STaniya Das },
4081a00c962STaniya Das .num_parents = 1,
4091a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
4101a00c962STaniya Das .ops = &clk_branch2_ops,
4111a00c962STaniya Das },
4121a00c962STaniya Das },
4131a00c962STaniya Das };
4141a00c962STaniya Das
4151a00c962STaniya Das static struct clk_branch disp_cc_mdss_byte0_clk = {
4161a00c962STaniya Das .halt_reg = 0x1030,
4171a00c962STaniya Das .halt_check = BRANCH_HALT,
4181a00c962STaniya Das .clkr = {
4191a00c962STaniya Das .enable_reg = 0x1030,
4201a00c962STaniya Das .enable_mask = BIT(0),
4211a00c962STaniya Das .hw.init = &(struct clk_init_data){
4221a00c962STaniya Das .name = "disp_cc_mdss_byte0_clk",
4231a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
4241a00c962STaniya Das &disp_cc_mdss_byte0_clk_src.clkr.hw,
4251a00c962STaniya Das },
4261a00c962STaniya Das .num_parents = 1,
4271a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
4281a00c962STaniya Das .ops = &clk_branch2_ops,
4291a00c962STaniya Das },
4301a00c962STaniya Das },
4311a00c962STaniya Das };
4321a00c962STaniya Das
4331a00c962STaniya Das static struct clk_branch disp_cc_mdss_byte0_intf_clk = {
4341a00c962STaniya Das .halt_reg = 0x1034,
4351a00c962STaniya Das .halt_check = BRANCH_HALT,
4361a00c962STaniya Das .clkr = {
4371a00c962STaniya Das .enable_reg = 0x1034,
4381a00c962STaniya Das .enable_mask = BIT(0),
4391a00c962STaniya Das .hw.init = &(struct clk_init_data){
4401a00c962STaniya Das .name = "disp_cc_mdss_byte0_intf_clk",
4411a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
4421a00c962STaniya Das &disp_cc_mdss_byte0_div_clk_src.clkr.hw,
4431a00c962STaniya Das },
4441a00c962STaniya Das .num_parents = 1,
4451a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
4461a00c962STaniya Das .ops = &clk_branch2_ops,
4471a00c962STaniya Das },
4481a00c962STaniya Das },
4491a00c962STaniya Das };
4501a00c962STaniya Das
4511a00c962STaniya Das static struct clk_branch disp_cc_mdss_dp_aux_clk = {
4521a00c962STaniya Das .halt_reg = 0x104c,
4531a00c962STaniya Das .halt_check = BRANCH_HALT,
4541a00c962STaniya Das .clkr = {
4551a00c962STaniya Das .enable_reg = 0x104c,
4561a00c962STaniya Das .enable_mask = BIT(0),
4571a00c962STaniya Das .hw.init = &(struct clk_init_data){
4581a00c962STaniya Das .name = "disp_cc_mdss_dp_aux_clk",
4591a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
4601a00c962STaniya Das &disp_cc_mdss_dp_aux_clk_src.clkr.hw,
4611a00c962STaniya Das },
4621a00c962STaniya Das .num_parents = 1,
4631a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
4641a00c962STaniya Das .ops = &clk_branch2_ops,
4651a00c962STaniya Das },
4661a00c962STaniya Das },
4671a00c962STaniya Das };
4681a00c962STaniya Das
4691a00c962STaniya Das static struct clk_branch disp_cc_mdss_dp_crypto_clk = {
4701a00c962STaniya Das .halt_reg = 0x1044,
4711a00c962STaniya Das .halt_check = BRANCH_HALT,
4721a00c962STaniya Das .clkr = {
4731a00c962STaniya Das .enable_reg = 0x1044,
4741a00c962STaniya Das .enable_mask = BIT(0),
4751a00c962STaniya Das .hw.init = &(struct clk_init_data){
4761a00c962STaniya Das .name = "disp_cc_mdss_dp_crypto_clk",
4771a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
4781a00c962STaniya Das &disp_cc_mdss_dp_crypto_clk_src.clkr.hw,
4791a00c962STaniya Das },
4801a00c962STaniya Das .num_parents = 1,
4811a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
4821a00c962STaniya Das .ops = &clk_branch2_ops,
4831a00c962STaniya Das },
4841a00c962STaniya Das },
4851a00c962STaniya Das };
4861a00c962STaniya Das
4871a00c962STaniya Das static struct clk_branch disp_cc_mdss_dp_link_clk = {
4881a00c962STaniya Das .halt_reg = 0x103c,
4891a00c962STaniya Das .halt_check = BRANCH_HALT,
4901a00c962STaniya Das .clkr = {
4911a00c962STaniya Das .enable_reg = 0x103c,
4921a00c962STaniya Das .enable_mask = BIT(0),
4931a00c962STaniya Das .hw.init = &(struct clk_init_data){
4941a00c962STaniya Das .name = "disp_cc_mdss_dp_link_clk",
4951a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
4961a00c962STaniya Das &disp_cc_mdss_dp_link_clk_src.clkr.hw,
4971a00c962STaniya Das },
4981a00c962STaniya Das .num_parents = 1,
4991a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
5001a00c962STaniya Das .ops = &clk_branch2_ops,
5011a00c962STaniya Das },
5021a00c962STaniya Das },
5031a00c962STaniya Das };
5041a00c962STaniya Das
5051a00c962STaniya Das static struct clk_branch disp_cc_mdss_dp_link_intf_clk = {
5061a00c962STaniya Das .halt_reg = 0x1040,
5071a00c962STaniya Das .halt_check = BRANCH_HALT,
5081a00c962STaniya Das .clkr = {
5091a00c962STaniya Das .enable_reg = 0x1040,
5101a00c962STaniya Das .enable_mask = BIT(0),
5111a00c962STaniya Das .hw.init = &(struct clk_init_data){
5121a00c962STaniya Das .name = "disp_cc_mdss_dp_link_intf_clk",
5131a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
5141a00c962STaniya Das &disp_cc_mdss_dp_link_div_clk_src.clkr.hw,
5151a00c962STaniya Das },
5161a00c962STaniya Das .num_parents = 1,
5171a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
5181a00c962STaniya Das .ops = &clk_branch2_ops,
5191a00c962STaniya Das },
5201a00c962STaniya Das },
5211a00c962STaniya Das };
5221a00c962STaniya Das
5231a00c962STaniya Das static struct clk_branch disp_cc_mdss_dp_pixel_clk = {
5241a00c962STaniya Das .halt_reg = 0x1048,
5251a00c962STaniya Das .halt_check = BRANCH_HALT,
5261a00c962STaniya Das .clkr = {
5271a00c962STaniya Das .enable_reg = 0x1048,
5281a00c962STaniya Das .enable_mask = BIT(0),
5291a00c962STaniya Das .hw.init = &(struct clk_init_data){
5301a00c962STaniya Das .name = "disp_cc_mdss_dp_pixel_clk",
5311a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
5321a00c962STaniya Das &disp_cc_mdss_dp_pixel_clk_src.clkr.hw,
5331a00c962STaniya Das },
5341a00c962STaniya Das .num_parents = 1,
5351a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
5361a00c962STaniya Das .ops = &clk_branch2_ops,
5371a00c962STaniya Das },
5381a00c962STaniya Das },
5391a00c962STaniya Das };
5401a00c962STaniya Das
5411a00c962STaniya Das static struct clk_branch disp_cc_mdss_edp_aux_clk = {
5421a00c962STaniya Das .halt_reg = 0x1060,
5431a00c962STaniya Das .halt_check = BRANCH_HALT,
5441a00c962STaniya Das .clkr = {
5451a00c962STaniya Das .enable_reg = 0x1060,
5461a00c962STaniya Das .enable_mask = BIT(0),
5471a00c962STaniya Das .hw.init = &(struct clk_init_data){
5481a00c962STaniya Das .name = "disp_cc_mdss_edp_aux_clk",
5491a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
5501a00c962STaniya Das &disp_cc_mdss_edp_aux_clk_src.clkr.hw,
5511a00c962STaniya Das },
5521a00c962STaniya Das .num_parents = 1,
5531a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
5541a00c962STaniya Das .ops = &clk_branch2_ops,
5551a00c962STaniya Das },
5561a00c962STaniya Das },
5571a00c962STaniya Das };
5581a00c962STaniya Das
5591a00c962STaniya Das static struct clk_branch disp_cc_mdss_edp_link_clk = {
5601a00c962STaniya Das .halt_reg = 0x1058,
5611a00c962STaniya Das .halt_check = BRANCH_HALT,
5621a00c962STaniya Das .clkr = {
5631a00c962STaniya Das .enable_reg = 0x1058,
5641a00c962STaniya Das .enable_mask = BIT(0),
5651a00c962STaniya Das .hw.init = &(struct clk_init_data){
5661a00c962STaniya Das .name = "disp_cc_mdss_edp_link_clk",
5671a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
5681a00c962STaniya Das &disp_cc_mdss_edp_link_clk_src.clkr.hw,
5691a00c962STaniya Das },
5701a00c962STaniya Das .num_parents = 1,
5711a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
5721a00c962STaniya Das .ops = &clk_branch2_ops,
5731a00c962STaniya Das },
5741a00c962STaniya Das },
5751a00c962STaniya Das };
5761a00c962STaniya Das
5771a00c962STaniya Das static struct clk_branch disp_cc_mdss_edp_link_intf_clk = {
5781a00c962STaniya Das .halt_reg = 0x105c,
5791a00c962STaniya Das .halt_check = BRANCH_HALT,
5801a00c962STaniya Das .clkr = {
5811a00c962STaniya Das .enable_reg = 0x105c,
5821a00c962STaniya Das .enable_mask = BIT(0),
5831a00c962STaniya Das .hw.init = &(struct clk_init_data){
5841a00c962STaniya Das .name = "disp_cc_mdss_edp_link_intf_clk",
5851a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
5861a00c962STaniya Das &disp_cc_mdss_edp_link_div_clk_src.clkr.hw
5871a00c962STaniya Das },
5881a00c962STaniya Das .num_parents = 1,
5891a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
5901a00c962STaniya Das .ops = &clk_branch2_ops,
5911a00c962STaniya Das },
5921a00c962STaniya Das },
5931a00c962STaniya Das };
5941a00c962STaniya Das
5951a00c962STaniya Das static struct clk_branch disp_cc_mdss_edp_pixel_clk = {
5961a00c962STaniya Das .halt_reg = 0x1054,
5971a00c962STaniya Das .halt_check = BRANCH_HALT,
5981a00c962STaniya Das .clkr = {
5991a00c962STaniya Das .enable_reg = 0x1054,
6001a00c962STaniya Das .enable_mask = BIT(0),
6011a00c962STaniya Das .hw.init = &(struct clk_init_data){
6021a00c962STaniya Das .name = "disp_cc_mdss_edp_pixel_clk",
6031a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
6041a00c962STaniya Das &disp_cc_mdss_edp_pixel_clk_src.clkr.hw,
6051a00c962STaniya Das },
6061a00c962STaniya Das .num_parents = 1,
6071a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
6081a00c962STaniya Das .ops = &clk_branch2_ops,
6091a00c962STaniya Das },
6101a00c962STaniya Das },
6111a00c962STaniya Das };
6121a00c962STaniya Das
6131a00c962STaniya Das static struct clk_branch disp_cc_mdss_esc0_clk = {
6141a00c962STaniya Das .halt_reg = 0x1038,
6151a00c962STaniya Das .halt_check = BRANCH_HALT,
6161a00c962STaniya Das .clkr = {
6171a00c962STaniya Das .enable_reg = 0x1038,
6181a00c962STaniya Das .enable_mask = BIT(0),
6191a00c962STaniya Das .hw.init = &(struct clk_init_data){
6201a00c962STaniya Das .name = "disp_cc_mdss_esc0_clk",
6211a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
6221a00c962STaniya Das &disp_cc_mdss_esc0_clk_src.clkr.hw,
6231a00c962STaniya Das },
6241a00c962STaniya Das .num_parents = 1,
6251a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
6261a00c962STaniya Das .ops = &clk_branch2_ops,
6271a00c962STaniya Das },
6281a00c962STaniya Das },
6291a00c962STaniya Das };
6301a00c962STaniya Das
6311a00c962STaniya Das static struct clk_branch disp_cc_mdss_mdp_clk = {
6321a00c962STaniya Das .halt_reg = 0x1014,
6331a00c962STaniya Das .halt_check = BRANCH_HALT,
6341a00c962STaniya Das .clkr = {
6351a00c962STaniya Das .enable_reg = 0x1014,
6361a00c962STaniya Das .enable_mask = BIT(0),
6371a00c962STaniya Das .hw.init = &(struct clk_init_data){
6381a00c962STaniya Das .name = "disp_cc_mdss_mdp_clk",
6391a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
6401a00c962STaniya Das &disp_cc_mdss_mdp_clk_src.clkr.hw,
6411a00c962STaniya Das },
6421a00c962STaniya Das .num_parents = 1,
6431a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
6441a00c962STaniya Das .ops = &clk_branch2_ops,
6451a00c962STaniya Das },
6461a00c962STaniya Das },
6471a00c962STaniya Das };
6481a00c962STaniya Das
6491a00c962STaniya Das static struct clk_branch disp_cc_mdss_mdp_lut_clk = {
6501a00c962STaniya Das .halt_reg = 0x1024,
6511a00c962STaniya Das .halt_check = BRANCH_HALT_VOTED,
6521a00c962STaniya Das .clkr = {
6531a00c962STaniya Das .enable_reg = 0x1024,
6541a00c962STaniya Das .enable_mask = BIT(0),
6551a00c962STaniya Das .hw.init = &(struct clk_init_data){
6561a00c962STaniya Das .name = "disp_cc_mdss_mdp_lut_clk",
6571a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
6581a00c962STaniya Das &disp_cc_mdss_mdp_clk_src.clkr.hw,
6591a00c962STaniya Das },
6601a00c962STaniya Das .num_parents = 1,
6611a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
6621a00c962STaniya Das .ops = &clk_branch2_ops,
6631a00c962STaniya Das },
6641a00c962STaniya Das },
6651a00c962STaniya Das };
6661a00c962STaniya Das
6671a00c962STaniya Das static struct clk_branch disp_cc_mdss_non_gdsc_ahb_clk = {
6681a00c962STaniya Das .halt_reg = 0x2004,
6691a00c962STaniya Das .halt_check = BRANCH_HALT_VOTED,
6701a00c962STaniya Das .clkr = {
6711a00c962STaniya Das .enable_reg = 0x2004,
6721a00c962STaniya Das .enable_mask = BIT(0),
6731a00c962STaniya Das .hw.init = &(struct clk_init_data){
6741a00c962STaniya Das .name = "disp_cc_mdss_non_gdsc_ahb_clk",
6751a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
6761a00c962STaniya Das &disp_cc_mdss_ahb_clk_src.clkr.hw,
6771a00c962STaniya Das },
6781a00c962STaniya Das .num_parents = 1,
6791a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
6801a00c962STaniya Das .ops = &clk_branch2_ops,
6811a00c962STaniya Das },
6821a00c962STaniya Das },
6831a00c962STaniya Das };
6841a00c962STaniya Das
6851a00c962STaniya Das static struct clk_branch disp_cc_mdss_pclk0_clk = {
6861a00c962STaniya Das .halt_reg = 0x1010,
6871a00c962STaniya Das .halt_check = BRANCH_HALT,
6881a00c962STaniya Das .clkr = {
6891a00c962STaniya Das .enable_reg = 0x1010,
6901a00c962STaniya Das .enable_mask = BIT(0),
6911a00c962STaniya Das .hw.init = &(struct clk_init_data){
6921a00c962STaniya Das .name = "disp_cc_mdss_pclk0_clk",
6931a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
6941a00c962STaniya Das &disp_cc_mdss_pclk0_clk_src.clkr.hw,
6951a00c962STaniya Das },
6961a00c962STaniya Das .num_parents = 1,
6971a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
6981a00c962STaniya Das .ops = &clk_branch2_ops,
6991a00c962STaniya Das },
7001a00c962STaniya Das },
7011a00c962STaniya Das };
7021a00c962STaniya Das
7031a00c962STaniya Das static struct clk_branch disp_cc_mdss_rot_clk = {
7041a00c962STaniya Das .halt_reg = 0x101c,
7051a00c962STaniya Das .halt_check = BRANCH_HALT,
7061a00c962STaniya Das .clkr = {
7071a00c962STaniya Das .enable_reg = 0x101c,
7081a00c962STaniya Das .enable_mask = BIT(0),
7091a00c962STaniya Das .hw.init = &(struct clk_init_data){
7101a00c962STaniya Das .name = "disp_cc_mdss_rot_clk",
7111a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
7121a00c962STaniya Das &disp_cc_mdss_rot_clk_src.clkr.hw,
7131a00c962STaniya Das },
7141a00c962STaniya Das .num_parents = 1,
7151a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
7161a00c962STaniya Das .ops = &clk_branch2_ops,
7171a00c962STaniya Das },
7181a00c962STaniya Das },
7191a00c962STaniya Das };
7201a00c962STaniya Das
7211a00c962STaniya Das static struct clk_branch disp_cc_mdss_rscc_ahb_clk = {
7221a00c962STaniya Das .halt_reg = 0x200c,
7231a00c962STaniya Das .halt_check = BRANCH_HALT,
7241a00c962STaniya Das .clkr = {
7251a00c962STaniya Das .enable_reg = 0x200c,
7261a00c962STaniya Das .enable_mask = BIT(0),
7271a00c962STaniya Das .hw.init = &(struct clk_init_data){
7281a00c962STaniya Das .name = "disp_cc_mdss_rscc_ahb_clk",
7291a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
7301a00c962STaniya Das &disp_cc_mdss_ahb_clk_src.clkr.hw,
7311a00c962STaniya Das },
7321a00c962STaniya Das .num_parents = 1,
7331a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
7341a00c962STaniya Das .ops = &clk_branch2_ops,
7351a00c962STaniya Das },
7361a00c962STaniya Das },
7371a00c962STaniya Das };
7381a00c962STaniya Das
7391a00c962STaniya Das static struct clk_branch disp_cc_mdss_rscc_vsync_clk = {
7401a00c962STaniya Das .halt_reg = 0x2008,
7411a00c962STaniya Das .halt_check = BRANCH_HALT,
7421a00c962STaniya Das .clkr = {
7431a00c962STaniya Das .enable_reg = 0x2008,
7441a00c962STaniya Das .enable_mask = BIT(0),
7451a00c962STaniya Das .hw.init = &(struct clk_init_data){
7461a00c962STaniya Das .name = "disp_cc_mdss_rscc_vsync_clk",
7471a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
7481a00c962STaniya Das &disp_cc_mdss_vsync_clk_src.clkr.hw,
7491a00c962STaniya Das },
7501a00c962STaniya Das .num_parents = 1,
7511a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
7521a00c962STaniya Das .ops = &clk_branch2_ops,
7531a00c962STaniya Das },
7541a00c962STaniya Das },
7551a00c962STaniya Das };
7561a00c962STaniya Das
7571a00c962STaniya Das static struct clk_branch disp_cc_mdss_vsync_clk = {
7581a00c962STaniya Das .halt_reg = 0x102c,
7591a00c962STaniya Das .halt_check = BRANCH_HALT,
7601a00c962STaniya Das .clkr = {
7611a00c962STaniya Das .enable_reg = 0x102c,
7621a00c962STaniya Das .enable_mask = BIT(0),
7631a00c962STaniya Das .hw.init = &(struct clk_init_data){
7641a00c962STaniya Das .name = "disp_cc_mdss_vsync_clk",
7651a00c962STaniya Das .parent_hws = (const struct clk_hw*[]){
7661a00c962STaniya Das &disp_cc_mdss_vsync_clk_src.clkr.hw,
7671a00c962STaniya Das },
7681a00c962STaniya Das .num_parents = 1,
7691a00c962STaniya Das .flags = CLK_SET_RATE_PARENT,
7701a00c962STaniya Das .ops = &clk_branch2_ops,
7711a00c962STaniya Das },
7721a00c962STaniya Das },
7731a00c962STaniya Das };
7741a00c962STaniya Das
7751a00c962STaniya Das static struct clk_branch disp_cc_sleep_clk = {
7761a00c962STaniya Das .halt_reg = 0x5004,
7771a00c962STaniya Das .halt_check = BRANCH_HALT,
7781a00c962STaniya Das .clkr = {
7791a00c962STaniya Das .enable_reg = 0x5004,
7801a00c962STaniya Das .enable_mask = BIT(0),
7811a00c962STaniya Das .hw.init = &(struct clk_init_data){
7821a00c962STaniya Das .name = "disp_cc_sleep_clk",
7831a00c962STaniya Das .ops = &clk_branch2_ops,
7841a00c962STaniya Das },
7851a00c962STaniya Das },
7861a00c962STaniya Das };
7871a00c962STaniya Das
7881a00c962STaniya Das static struct gdsc disp_cc_mdss_core_gdsc = {
7891a00c962STaniya Das .gdscr = 0x1004,
790*6e6fec3fSTaniya Das .en_rest_wait_val = 0x2,
791*6e6fec3fSTaniya Das .en_few_wait_val = 0x2,
792*6e6fec3fSTaniya Das .clk_dis_wait_val = 0xf,
7931a00c962STaniya Das .pd = {
7941a00c962STaniya Das .name = "disp_cc_mdss_core_gdsc",
7951a00c962STaniya Das },
7961a00c962STaniya Das .pwrsts = PWRSTS_OFF_ON,
7971a00c962STaniya Das .flags = HW_CTRL | RETAIN_FF_ENABLE,
7981a00c962STaniya Das };
7991a00c962STaniya Das
8001a00c962STaniya Das static struct clk_regmap *disp_cc_sc7280_clocks[] = {
8011a00c962STaniya Das [DISP_CC_MDSS_AHB_CLK] = &disp_cc_mdss_ahb_clk.clkr,
8021a00c962STaniya Das [DISP_CC_MDSS_AHB_CLK_SRC] = &disp_cc_mdss_ahb_clk_src.clkr,
8031a00c962STaniya Das [DISP_CC_MDSS_BYTE0_CLK] = &disp_cc_mdss_byte0_clk.clkr,
8041a00c962STaniya Das [DISP_CC_MDSS_BYTE0_CLK_SRC] = &disp_cc_mdss_byte0_clk_src.clkr,
8051a00c962STaniya Das [DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] = &disp_cc_mdss_byte0_div_clk_src.clkr,
8061a00c962STaniya Das [DISP_CC_MDSS_BYTE0_INTF_CLK] = &disp_cc_mdss_byte0_intf_clk.clkr,
8071a00c962STaniya Das [DISP_CC_MDSS_DP_AUX_CLK] = &disp_cc_mdss_dp_aux_clk.clkr,
8081a00c962STaniya Das [DISP_CC_MDSS_DP_AUX_CLK_SRC] = &disp_cc_mdss_dp_aux_clk_src.clkr,
8091a00c962STaniya Das [DISP_CC_MDSS_DP_CRYPTO_CLK] = &disp_cc_mdss_dp_crypto_clk.clkr,
8101a00c962STaniya Das [DISP_CC_MDSS_DP_CRYPTO_CLK_SRC] = &disp_cc_mdss_dp_crypto_clk_src.clkr,
8111a00c962STaniya Das [DISP_CC_MDSS_DP_LINK_CLK] = &disp_cc_mdss_dp_link_clk.clkr,
8121a00c962STaniya Das [DISP_CC_MDSS_DP_LINK_CLK_SRC] = &disp_cc_mdss_dp_link_clk_src.clkr,
8131a00c962STaniya Das [DISP_CC_MDSS_DP_LINK_DIV_CLK_SRC] =
8141a00c962STaniya Das &disp_cc_mdss_dp_link_div_clk_src.clkr,
8151a00c962STaniya Das [DISP_CC_MDSS_DP_LINK_INTF_CLK] = &disp_cc_mdss_dp_link_intf_clk.clkr,
8161a00c962STaniya Das [DISP_CC_MDSS_DP_PIXEL_CLK] = &disp_cc_mdss_dp_pixel_clk.clkr,
8171a00c962STaniya Das [DISP_CC_MDSS_DP_PIXEL_CLK_SRC] = &disp_cc_mdss_dp_pixel_clk_src.clkr,
8181a00c962STaniya Das [DISP_CC_MDSS_EDP_AUX_CLK] = &disp_cc_mdss_edp_aux_clk.clkr,
8191a00c962STaniya Das [DISP_CC_MDSS_EDP_AUX_CLK_SRC] = &disp_cc_mdss_edp_aux_clk_src.clkr,
8201a00c962STaniya Das [DISP_CC_MDSS_EDP_LINK_CLK] = &disp_cc_mdss_edp_link_clk.clkr,
8211a00c962STaniya Das [DISP_CC_MDSS_EDP_LINK_CLK_SRC] = &disp_cc_mdss_edp_link_clk_src.clkr,
8221a00c962STaniya Das [DISP_CC_MDSS_EDP_LINK_DIV_CLK_SRC] =
8231a00c962STaniya Das &disp_cc_mdss_edp_link_div_clk_src.clkr,
8241a00c962STaniya Das [DISP_CC_MDSS_EDP_LINK_INTF_CLK] = &disp_cc_mdss_edp_link_intf_clk.clkr,
8251a00c962STaniya Das [DISP_CC_MDSS_EDP_PIXEL_CLK] = &disp_cc_mdss_edp_pixel_clk.clkr,
8261a00c962STaniya Das [DISP_CC_MDSS_EDP_PIXEL_CLK_SRC] = &disp_cc_mdss_edp_pixel_clk_src.clkr,
8271a00c962STaniya Das [DISP_CC_MDSS_ESC0_CLK] = &disp_cc_mdss_esc0_clk.clkr,
8281a00c962STaniya Das [DISP_CC_MDSS_ESC0_CLK_SRC] = &disp_cc_mdss_esc0_clk_src.clkr,
8291a00c962STaniya Das [DISP_CC_MDSS_MDP_CLK] = &disp_cc_mdss_mdp_clk.clkr,
8301a00c962STaniya Das [DISP_CC_MDSS_MDP_CLK_SRC] = &disp_cc_mdss_mdp_clk_src.clkr,
8311a00c962STaniya Das [DISP_CC_MDSS_MDP_LUT_CLK] = &disp_cc_mdss_mdp_lut_clk.clkr,
8321a00c962STaniya Das [DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &disp_cc_mdss_non_gdsc_ahb_clk.clkr,
8331a00c962STaniya Das [DISP_CC_MDSS_PCLK0_CLK] = &disp_cc_mdss_pclk0_clk.clkr,
8341a00c962STaniya Das [DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr,
8351a00c962STaniya Das [DISP_CC_MDSS_ROT_CLK] = &disp_cc_mdss_rot_clk.clkr,
8361a00c962STaniya Das [DISP_CC_MDSS_ROT_CLK_SRC] = &disp_cc_mdss_rot_clk_src.clkr,
8371a00c962STaniya Das [DISP_CC_MDSS_RSCC_AHB_CLK] = &disp_cc_mdss_rscc_ahb_clk.clkr,
8381a00c962STaniya Das [DISP_CC_MDSS_RSCC_VSYNC_CLK] = &disp_cc_mdss_rscc_vsync_clk.clkr,
8391a00c962STaniya Das [DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr,
8401a00c962STaniya Das [DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr,
8411a00c962STaniya Das [DISP_CC_PLL0] = &disp_cc_pll0.clkr,
8421a00c962STaniya Das [DISP_CC_SLEEP_CLK] = &disp_cc_sleep_clk.clkr,
8431a00c962STaniya Das };
8441a00c962STaniya Das
8451a00c962STaniya Das static struct gdsc *disp_cc_sc7280_gdscs[] = {
8461a00c962STaniya Das [DISP_CC_MDSS_CORE_GDSC] = &disp_cc_mdss_core_gdsc,
8471a00c962STaniya Das };
8481a00c962STaniya Das
8491a00c962STaniya Das static const struct regmap_config disp_cc_sc7280_regmap_config = {
8501a00c962STaniya Das .reg_bits = 32,
8511a00c962STaniya Das .reg_stride = 4,
8521a00c962STaniya Das .val_bits = 32,
8531a00c962STaniya Das .max_register = 0x10000,
8541a00c962STaniya Das .fast_io = true,
8551a00c962STaniya Das };
8561a00c962STaniya Das
8571a00c962STaniya Das static const struct qcom_cc_desc disp_cc_sc7280_desc = {
8581a00c962STaniya Das .config = &disp_cc_sc7280_regmap_config,
8591a00c962STaniya Das .clks = disp_cc_sc7280_clocks,
8601a00c962STaniya Das .num_clks = ARRAY_SIZE(disp_cc_sc7280_clocks),
8611a00c962STaniya Das .gdscs = disp_cc_sc7280_gdscs,
8621a00c962STaniya Das .num_gdscs = ARRAY_SIZE(disp_cc_sc7280_gdscs),
8631a00c962STaniya Das };
8641a00c962STaniya Das
8651a00c962STaniya Das static const struct of_device_id disp_cc_sc7280_match_table[] = {
8661a00c962STaniya Das { .compatible = "qcom,sc7280-dispcc" },
8671a00c962STaniya Das { }
8681a00c962STaniya Das };
8691a00c962STaniya Das MODULE_DEVICE_TABLE(of, disp_cc_sc7280_match_table);
8701a00c962STaniya Das
disp_cc_sc7280_probe(struct platform_device * pdev)8711a00c962STaniya Das static int disp_cc_sc7280_probe(struct platform_device *pdev)
8721a00c962STaniya Das {
8731a00c962STaniya Das struct regmap *regmap;
8741a00c962STaniya Das
8751a00c962STaniya Das regmap = qcom_cc_map(pdev, &disp_cc_sc7280_desc);
8761a00c962STaniya Das if (IS_ERR(regmap))
8771a00c962STaniya Das return PTR_ERR(regmap);
8781a00c962STaniya Das
8791a00c962STaniya Das clk_lucid_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
8801a00c962STaniya Das
8811a00c962STaniya Das /*
8821a00c962STaniya Das * Keep the clocks always-ON
8831a00c962STaniya Das * DISP_CC_XO_CLK
8841a00c962STaniya Das */
8851a00c962STaniya Das regmap_update_bits(regmap, 0x5008, BIT(0), BIT(0));
8861a00c962STaniya Das
8871a00c962STaniya Das return qcom_cc_really_probe(pdev, &disp_cc_sc7280_desc, regmap);
8881a00c962STaniya Das }
8891a00c962STaniya Das
8901a00c962STaniya Das static struct platform_driver disp_cc_sc7280_driver = {
8911a00c962STaniya Das .probe = disp_cc_sc7280_probe,
8921a00c962STaniya Das .driver = {
8931a00c962STaniya Das .name = "disp_cc-sc7280",
8941a00c962STaniya Das .of_match_table = disp_cc_sc7280_match_table,
8951a00c962STaniya Das },
8961a00c962STaniya Das };
8971a00c962STaniya Das
disp_cc_sc7280_init(void)8981a00c962STaniya Das static int __init disp_cc_sc7280_init(void)
8991a00c962STaniya Das {
9001a00c962STaniya Das return platform_driver_register(&disp_cc_sc7280_driver);
9011a00c962STaniya Das }
9021a00c962STaniya Das subsys_initcall(disp_cc_sc7280_init);
9031a00c962STaniya Das
disp_cc_sc7280_exit(void)9041a00c962STaniya Das static void __exit disp_cc_sc7280_exit(void)
9051a00c962STaniya Das {
9061a00c962STaniya Das platform_driver_unregister(&disp_cc_sc7280_driver);
9071a00c962STaniya Das }
9081a00c962STaniya Das module_exit(disp_cc_sc7280_exit);
9091a00c962STaniya Das
9101a00c962STaniya Das MODULE_DESCRIPTION("QTI DISP_CC sc7280 Driver");
9111a00c962STaniya Das MODULE_LICENSE("GPL v2");
912