183751977SKonrad Dybcio // SPDX-License-Identifier: GPL-2.0-only
283751977SKonrad Dybcio /*
383751977SKonrad Dybcio * Copyright (c) 2021, The Linux Foundation. All rights reserved.
483751977SKonrad Dybcio * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>
583751977SKonrad Dybcio */
683751977SKonrad Dybcio
783751977SKonrad Dybcio #include <linux/clk-provider.h>
883751977SKonrad Dybcio #include <linux/module.h>
983751977SKonrad Dybcio #include <linux/platform_device.h>
1083751977SKonrad Dybcio #include <linux/regmap.h>
1183751977SKonrad Dybcio
1283751977SKonrad Dybcio #include <dt-bindings/clock/qcom,dispcc-sm6350.h>
1383751977SKonrad Dybcio
1483751977SKonrad Dybcio #include "clk-alpha-pll.h"
1583751977SKonrad Dybcio #include "clk-branch.h"
1683751977SKonrad Dybcio #include "clk-rcg.h"
1783751977SKonrad Dybcio #include "clk-regmap.h"
1883751977SKonrad Dybcio #include "clk-regmap-divider.h"
1983751977SKonrad Dybcio #include "common.h"
2083751977SKonrad Dybcio #include "gdsc.h"
2183751977SKonrad Dybcio #include "reset.h"
2283751977SKonrad Dybcio
2383751977SKonrad Dybcio enum {
2483751977SKonrad Dybcio P_BI_TCXO,
2583751977SKonrad Dybcio P_DISP_CC_PLL0_OUT_EVEN,
2683751977SKonrad Dybcio P_DISP_CC_PLL0_OUT_MAIN,
2783751977SKonrad Dybcio P_DP_PHY_PLL_LINK_CLK,
2883751977SKonrad Dybcio P_DP_PHY_PLL_VCO_DIV_CLK,
2983751977SKonrad Dybcio P_DSI0_PHY_PLL_OUT_BYTECLK,
3083751977SKonrad Dybcio P_DSI0_PHY_PLL_OUT_DSICLK,
3183751977SKonrad Dybcio P_GCC_DISP_GPLL0_CLK,
3283751977SKonrad Dybcio };
3383751977SKonrad Dybcio
3483751977SKonrad Dybcio static struct pll_vco fabia_vco[] = {
3583751977SKonrad Dybcio { 249600000, 2000000000, 0 },
3683751977SKonrad Dybcio };
3783751977SKonrad Dybcio
3883751977SKonrad Dybcio static const struct alpha_pll_config disp_cc_pll0_config = {
3983751977SKonrad Dybcio .l = 0x3a,
4083751977SKonrad Dybcio .alpha = 0x5555,
4183751977SKonrad Dybcio .config_ctl_val = 0x20485699,
4283751977SKonrad Dybcio .config_ctl_hi_val = 0x00002067,
4383751977SKonrad Dybcio .test_ctl_val = 0x40000000,
4483751977SKonrad Dybcio .test_ctl_hi_val = 0x00000002,
4583751977SKonrad Dybcio .user_ctl_val = 0x00000000,
4683751977SKonrad Dybcio .user_ctl_hi_val = 0x00004805,
4783751977SKonrad Dybcio };
4883751977SKonrad Dybcio
4983751977SKonrad Dybcio static struct clk_alpha_pll disp_cc_pll0 = {
5083751977SKonrad Dybcio .offset = 0x0,
5183751977SKonrad Dybcio .vco_table = fabia_vco,
5283751977SKonrad Dybcio .num_vco = ARRAY_SIZE(fabia_vco),
5383751977SKonrad Dybcio .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
5483751977SKonrad Dybcio .clkr = {
5583751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
5683751977SKonrad Dybcio .name = "disp_cc_pll0",
5783751977SKonrad Dybcio .parent_data = &(const struct clk_parent_data){
5883751977SKonrad Dybcio .fw_name = "bi_tcxo",
5983751977SKonrad Dybcio },
6083751977SKonrad Dybcio .num_parents = 1,
6183751977SKonrad Dybcio .ops = &clk_alpha_pll_fabia_ops,
6283751977SKonrad Dybcio },
6383751977SKonrad Dybcio },
6483751977SKonrad Dybcio };
6583751977SKonrad Dybcio
6683751977SKonrad Dybcio static const struct parent_map disp_cc_parent_map_0[] = {
6783751977SKonrad Dybcio { P_BI_TCXO, 0 },
6883751977SKonrad Dybcio { P_DP_PHY_PLL_LINK_CLK, 1 },
6983751977SKonrad Dybcio { P_DP_PHY_PLL_VCO_DIV_CLK, 2 },
7083751977SKonrad Dybcio };
7183751977SKonrad Dybcio
7283751977SKonrad Dybcio static const struct clk_parent_data disp_cc_parent_data_0[] = {
7383751977SKonrad Dybcio { .fw_name = "bi_tcxo" },
7483751977SKonrad Dybcio { .fw_name = "dp_phy_pll_link_clk" },
7583751977SKonrad Dybcio { .fw_name = "dp_phy_pll_vco_div_clk" },
7683751977SKonrad Dybcio };
7783751977SKonrad Dybcio
7883751977SKonrad Dybcio static const struct parent_map disp_cc_parent_map_1[] = {
7983751977SKonrad Dybcio { P_BI_TCXO, 0 },
8083751977SKonrad Dybcio { P_DSI0_PHY_PLL_OUT_BYTECLK, 1 },
8183751977SKonrad Dybcio };
8283751977SKonrad Dybcio
8383751977SKonrad Dybcio static const struct clk_parent_data disp_cc_parent_data_1[] = {
8483751977SKonrad Dybcio { .fw_name = "bi_tcxo" },
8583751977SKonrad Dybcio { .fw_name = "dsi0_phy_pll_out_byteclk" },
8683751977SKonrad Dybcio };
8783751977SKonrad Dybcio
8883751977SKonrad Dybcio static const struct parent_map disp_cc_parent_map_3[] = {
8983751977SKonrad Dybcio { P_BI_TCXO, 0 },
9083751977SKonrad Dybcio { P_DISP_CC_PLL0_OUT_MAIN, 1 },
9183751977SKonrad Dybcio { P_GCC_DISP_GPLL0_CLK, 4 },
9283751977SKonrad Dybcio { P_DISP_CC_PLL0_OUT_EVEN, 5 },
9383751977SKonrad Dybcio };
9483751977SKonrad Dybcio
9583751977SKonrad Dybcio static const struct clk_parent_data disp_cc_parent_data_3[] = {
9683751977SKonrad Dybcio { .fw_name = "bi_tcxo" },
9783751977SKonrad Dybcio { .hw = &disp_cc_pll0.clkr.hw },
9883751977SKonrad Dybcio { .fw_name = "gcc_disp_gpll0_clk" },
9983751977SKonrad Dybcio { .hw = &disp_cc_pll0.clkr.hw },
10083751977SKonrad Dybcio };
10183751977SKonrad Dybcio
10283751977SKonrad Dybcio static const struct parent_map disp_cc_parent_map_4[] = {
10383751977SKonrad Dybcio { P_BI_TCXO, 0 },
10483751977SKonrad Dybcio { P_GCC_DISP_GPLL0_CLK, 4 },
10583751977SKonrad Dybcio };
10683751977SKonrad Dybcio
10783751977SKonrad Dybcio static const struct clk_parent_data disp_cc_parent_data_4[] = {
10883751977SKonrad Dybcio { .fw_name = "bi_tcxo" },
10983751977SKonrad Dybcio { .fw_name = "gcc_disp_gpll0_clk" },
11083751977SKonrad Dybcio };
11183751977SKonrad Dybcio
11283751977SKonrad Dybcio static const struct parent_map disp_cc_parent_map_5[] = {
11383751977SKonrad Dybcio { P_BI_TCXO, 0 },
11483751977SKonrad Dybcio { P_DSI0_PHY_PLL_OUT_DSICLK, 1 },
11583751977SKonrad Dybcio };
11683751977SKonrad Dybcio
11783751977SKonrad Dybcio static const struct clk_parent_data disp_cc_parent_data_5[] = {
11883751977SKonrad Dybcio { .fw_name = "bi_tcxo" },
11983751977SKonrad Dybcio { .fw_name = "dsi0_phy_pll_out_dsiclk" },
12083751977SKonrad Dybcio };
12183751977SKonrad Dybcio
12283751977SKonrad Dybcio static const struct parent_map disp_cc_parent_map_6[] = {
12383751977SKonrad Dybcio { P_BI_TCXO, 0 },
12483751977SKonrad Dybcio };
12583751977SKonrad Dybcio
12683751977SKonrad Dybcio static const struct clk_parent_data disp_cc_parent_data_6[] = {
12783751977SKonrad Dybcio { .fw_name = "bi_tcxo" },
12883751977SKonrad Dybcio };
12983751977SKonrad Dybcio
13083751977SKonrad Dybcio static const struct freq_tbl ftbl_disp_cc_mdss_ahb_clk_src[] = {
13183751977SKonrad Dybcio F(19200000, P_BI_TCXO, 1, 0, 0),
13283751977SKonrad Dybcio F(37500000, P_GCC_DISP_GPLL0_CLK, 16, 0, 0),
13383751977SKonrad Dybcio F(75000000, P_GCC_DISP_GPLL0_CLK, 8, 0, 0),
13483751977SKonrad Dybcio { }
13583751977SKonrad Dybcio };
13683751977SKonrad Dybcio
13783751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_ahb_clk_src = {
13883751977SKonrad Dybcio .cmd_rcgr = 0x115c,
13983751977SKonrad Dybcio .mnd_width = 0,
14083751977SKonrad Dybcio .hid_width = 5,
14183751977SKonrad Dybcio .parent_map = disp_cc_parent_map_4,
14283751977SKonrad Dybcio .freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src,
14383751977SKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){
14483751977SKonrad Dybcio .name = "disp_cc_mdss_ahb_clk_src",
14583751977SKonrad Dybcio .parent_data = disp_cc_parent_data_4,
14683751977SKonrad Dybcio .num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
14783751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT,
14883751977SKonrad Dybcio .ops = &clk_rcg2_ops,
14983751977SKonrad Dybcio },
15083751977SKonrad Dybcio };
15183751977SKonrad Dybcio
15283751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_byte0_clk_src = {
15383751977SKonrad Dybcio .cmd_rcgr = 0x10c4,
15483751977SKonrad Dybcio .mnd_width = 0,
15583751977SKonrad Dybcio .hid_width = 5,
15683751977SKonrad Dybcio .parent_map = disp_cc_parent_map_1,
15783751977SKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){
15883751977SKonrad Dybcio .name = "disp_cc_mdss_byte0_clk_src",
15983751977SKonrad Dybcio .parent_data = disp_cc_parent_data_1,
16083751977SKonrad Dybcio .num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
16183751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
16283751977SKonrad Dybcio .ops = &clk_byte2_ops,
16383751977SKonrad Dybcio },
16483751977SKonrad Dybcio };
16583751977SKonrad Dybcio
16683751977SKonrad Dybcio static struct clk_regmap_div disp_cc_mdss_byte0_div_clk_src = {
16783751977SKonrad Dybcio .reg = 0x10dc,
16883751977SKonrad Dybcio .shift = 0,
16983751977SKonrad Dybcio .width = 2,
17083751977SKonrad Dybcio .clkr.hw.init = &(struct clk_init_data) {
17183751977SKonrad Dybcio .name = "disp_cc_mdss_byte0_div_clk_src",
17283751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
17383751977SKonrad Dybcio &disp_cc_mdss_byte0_clk_src.clkr.hw,
17483751977SKonrad Dybcio },
17583751977SKonrad Dybcio .num_parents = 1,
17683751977SKonrad Dybcio .flags = CLK_GET_RATE_NOCACHE,
17783751977SKonrad Dybcio .ops = &clk_regmap_div_ro_ops,
17883751977SKonrad Dybcio },
17983751977SKonrad Dybcio };
18083751977SKonrad Dybcio
18183751977SKonrad Dybcio static const struct freq_tbl ftbl_disp_cc_mdss_dp_aux_clk_src[] = {
18283751977SKonrad Dybcio F(19200000, P_BI_TCXO, 1, 0, 0),
18383751977SKonrad Dybcio { }
18483751977SKonrad Dybcio };
18583751977SKonrad Dybcio
18683751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_dp_aux_clk_src = {
18783751977SKonrad Dybcio .cmd_rcgr = 0x1144,
18883751977SKonrad Dybcio .mnd_width = 0,
18983751977SKonrad Dybcio .hid_width = 5,
190*3ad28517SLuca Weiss .parent_map = disp_cc_parent_map_6,
19183751977SKonrad Dybcio .freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src,
19283751977SKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){
19383751977SKonrad Dybcio .name = "disp_cc_mdss_dp_aux_clk_src",
194*3ad28517SLuca Weiss .parent_data = disp_cc_parent_data_6,
195*3ad28517SLuca Weiss .num_parents = ARRAY_SIZE(disp_cc_parent_data_6),
19683751977SKonrad Dybcio .ops = &clk_rcg2_ops,
19783751977SKonrad Dybcio },
19883751977SKonrad Dybcio };
19983751977SKonrad Dybcio
20083751977SKonrad Dybcio static const struct freq_tbl ftbl_disp_cc_mdss_dp_crypto_clk_src[] = {
20183751977SKonrad Dybcio F(108000, P_DP_PHY_PLL_LINK_CLK, 3, 0, 0),
20283751977SKonrad Dybcio F(180000, P_DP_PHY_PLL_LINK_CLK, 3, 0, 0),
20383751977SKonrad Dybcio F(360000, P_DP_PHY_PLL_LINK_CLK, 1.5, 0, 0),
20483751977SKonrad Dybcio F(540000, P_DP_PHY_PLL_LINK_CLK, 1.5, 0, 0),
20583751977SKonrad Dybcio { }
20683751977SKonrad Dybcio };
20783751977SKonrad Dybcio
20883751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_dp_crypto_clk_src = {
20983751977SKonrad Dybcio .cmd_rcgr = 0x1114,
21083751977SKonrad Dybcio .mnd_width = 0,
21183751977SKonrad Dybcio .hid_width = 5,
21283751977SKonrad Dybcio .parent_map = disp_cc_parent_map_0,
21383751977SKonrad Dybcio .freq_tbl = ftbl_disp_cc_mdss_dp_crypto_clk_src,
21483751977SKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){
21583751977SKonrad Dybcio .name = "disp_cc_mdss_dp_crypto_clk_src",
21683751977SKonrad Dybcio .parent_data = disp_cc_parent_data_0,
21783751977SKonrad Dybcio .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
21883751977SKonrad Dybcio .flags = CLK_GET_RATE_NOCACHE,
21983751977SKonrad Dybcio .ops = &clk_rcg2_ops,
22083751977SKonrad Dybcio },
22183751977SKonrad Dybcio };
22283751977SKonrad Dybcio
22383751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_dp_link_clk_src = {
22483751977SKonrad Dybcio .cmd_rcgr = 0x10f8,
22583751977SKonrad Dybcio .mnd_width = 0,
22683751977SKonrad Dybcio .hid_width = 5,
22783751977SKonrad Dybcio .parent_map = disp_cc_parent_map_0,
22883751977SKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){
22983751977SKonrad Dybcio .name = "disp_cc_mdss_dp_link_clk_src",
23083751977SKonrad Dybcio .parent_data = disp_cc_parent_data_0,
23183751977SKonrad Dybcio .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
23283751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
233e91d89deSDmitry Baryshkov .ops = &clk_byte2_ops,
23483751977SKonrad Dybcio },
23583751977SKonrad Dybcio };
23683751977SKonrad Dybcio
23783751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_dp_pixel_clk_src = {
23883751977SKonrad Dybcio .cmd_rcgr = 0x112c,
23983751977SKonrad Dybcio .mnd_width = 16,
24083751977SKonrad Dybcio .hid_width = 5,
24183751977SKonrad Dybcio .parent_map = disp_cc_parent_map_0,
24283751977SKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){
24383751977SKonrad Dybcio .name = "disp_cc_mdss_dp_pixel_clk_src",
24483751977SKonrad Dybcio .parent_data = disp_cc_parent_data_0,
24583751977SKonrad Dybcio .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
24683751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
24783751977SKonrad Dybcio .ops = &clk_dp_ops,
24883751977SKonrad Dybcio },
24983751977SKonrad Dybcio };
25083751977SKonrad Dybcio
25183751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_esc0_clk_src = {
25283751977SKonrad Dybcio .cmd_rcgr = 0x10e0,
25383751977SKonrad Dybcio .mnd_width = 0,
25483751977SKonrad Dybcio .hid_width = 5,
25583751977SKonrad Dybcio .parent_map = disp_cc_parent_map_1,
25683751977SKonrad Dybcio .freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src,
25783751977SKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){
25883751977SKonrad Dybcio .name = "disp_cc_mdss_esc0_clk_src",
25983751977SKonrad Dybcio .parent_data = disp_cc_parent_data_1,
26083751977SKonrad Dybcio .num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
26183751977SKonrad Dybcio .ops = &clk_rcg2_ops,
26283751977SKonrad Dybcio },
26383751977SKonrad Dybcio };
26483751977SKonrad Dybcio
26583751977SKonrad Dybcio static const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src[] = {
26683751977SKonrad Dybcio F(19200000, P_BI_TCXO, 1, 0, 0),
26783751977SKonrad Dybcio F(200000000, P_GCC_DISP_GPLL0_CLK, 3, 0, 0),
26883751977SKonrad Dybcio F(300000000, P_GCC_DISP_GPLL0_CLK, 2, 0, 0),
26983751977SKonrad Dybcio F(373333333, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
27083751977SKonrad Dybcio F(448000000, P_DISP_CC_PLL0_OUT_MAIN, 2.5, 0, 0),
27183751977SKonrad Dybcio F(560000000, P_DISP_CC_PLL0_OUT_MAIN, 2, 0, 0),
27283751977SKonrad Dybcio { }
27383751977SKonrad Dybcio };
27483751977SKonrad Dybcio
27583751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_mdp_clk_src = {
27683751977SKonrad Dybcio .cmd_rcgr = 0x107c,
27783751977SKonrad Dybcio .mnd_width = 0,
27883751977SKonrad Dybcio .hid_width = 5,
27983751977SKonrad Dybcio .parent_map = disp_cc_parent_map_3,
28083751977SKonrad Dybcio .freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src,
28183751977SKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){
28283751977SKonrad Dybcio .name = "disp_cc_mdss_mdp_clk_src",
28383751977SKonrad Dybcio .parent_data = disp_cc_parent_data_3,
28483751977SKonrad Dybcio .num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
28583751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT,
28683751977SKonrad Dybcio .ops = &clk_rcg2_ops,
28783751977SKonrad Dybcio },
28883751977SKonrad Dybcio };
28983751977SKonrad Dybcio
29083751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = {
29183751977SKonrad Dybcio .cmd_rcgr = 0x1064,
29283751977SKonrad Dybcio .mnd_width = 8,
29383751977SKonrad Dybcio .hid_width = 5,
29483751977SKonrad Dybcio .parent_map = disp_cc_parent_map_5,
29583751977SKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){
29683751977SKonrad Dybcio .name = "disp_cc_mdss_pclk0_clk_src",
29783751977SKonrad Dybcio .parent_data = disp_cc_parent_data_5,
29883751977SKonrad Dybcio .num_parents = ARRAY_SIZE(disp_cc_parent_data_5),
29992039e8cSKonrad Dybcio .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE | CLK_OPS_PARENT_ENABLE,
30083751977SKonrad Dybcio .ops = &clk_pixel_ops,
30183751977SKonrad Dybcio },
30283751977SKonrad Dybcio };
30383751977SKonrad Dybcio
30483751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_rot_clk_src = {
30583751977SKonrad Dybcio .cmd_rcgr = 0x1094,
30683751977SKonrad Dybcio .mnd_width = 0,
30783751977SKonrad Dybcio .hid_width = 5,
30883751977SKonrad Dybcio .parent_map = disp_cc_parent_map_3,
30983751977SKonrad Dybcio .freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src,
31083751977SKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){
31183751977SKonrad Dybcio .name = "disp_cc_mdss_rot_clk_src",
31283751977SKonrad Dybcio .parent_data = disp_cc_parent_data_3,
31383751977SKonrad Dybcio .num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
31483751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT,
31583751977SKonrad Dybcio .ops = &clk_rcg2_ops,
31683751977SKonrad Dybcio },
31783751977SKonrad Dybcio };
31883751977SKonrad Dybcio
31983751977SKonrad Dybcio static struct clk_rcg2 disp_cc_mdss_vsync_clk_src = {
32083751977SKonrad Dybcio .cmd_rcgr = 0x10ac,
32183751977SKonrad Dybcio .mnd_width = 0,
32283751977SKonrad Dybcio .hid_width = 5,
32383751977SKonrad Dybcio .parent_map = disp_cc_parent_map_6,
32483751977SKonrad Dybcio .freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src,
32583751977SKonrad Dybcio .clkr.hw.init = &(struct clk_init_data){
32683751977SKonrad Dybcio .name = "disp_cc_mdss_vsync_clk_src",
32783751977SKonrad Dybcio .parent_data = disp_cc_parent_data_6,
32883751977SKonrad Dybcio .num_parents = ARRAY_SIZE(disp_cc_parent_data_6),
32983751977SKonrad Dybcio .ops = &clk_rcg2_ops,
33083751977SKonrad Dybcio },
33183751977SKonrad Dybcio };
33283751977SKonrad Dybcio
33383751977SKonrad Dybcio static struct clk_regmap_div disp_cc_mdss_dp_link_div_clk_src = {
33483751977SKonrad Dybcio .reg = 0x1110,
33583751977SKonrad Dybcio .shift = 0,
33683751977SKonrad Dybcio .width = 2,
33783751977SKonrad Dybcio .clkr.hw.init = &(struct clk_init_data) {
33883751977SKonrad Dybcio .name = "disp_cc_mdss_dp_link_div_clk_src",
33983751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
34083751977SKonrad Dybcio &disp_cc_mdss_dp_link_clk_src.clkr.hw,
34183751977SKonrad Dybcio },
34283751977SKonrad Dybcio .num_parents = 1,
34383751977SKonrad Dybcio .flags = CLK_GET_RATE_NOCACHE,
34483751977SKonrad Dybcio .ops = &clk_regmap_div_ro_ops,
34583751977SKonrad Dybcio },
34683751977SKonrad Dybcio };
34783751977SKonrad Dybcio
34883751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_ahb_clk = {
34983751977SKonrad Dybcio .halt_reg = 0x104c,
35083751977SKonrad Dybcio .halt_check = BRANCH_HALT,
35183751977SKonrad Dybcio .clkr = {
35283751977SKonrad Dybcio .enable_reg = 0x104c,
35383751977SKonrad Dybcio .enable_mask = BIT(0),
35483751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
35583751977SKonrad Dybcio .name = "disp_cc_mdss_ahb_clk",
35683751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
35783751977SKonrad Dybcio &disp_cc_mdss_ahb_clk_src.clkr.hw,
35883751977SKonrad Dybcio },
35983751977SKonrad Dybcio .num_parents = 1,
36083751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT,
36183751977SKonrad Dybcio .ops = &clk_branch2_ops,
36283751977SKonrad Dybcio },
36383751977SKonrad Dybcio },
36483751977SKonrad Dybcio };
36583751977SKonrad Dybcio
36683751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_byte0_clk = {
36783751977SKonrad Dybcio .halt_reg = 0x102c,
36883751977SKonrad Dybcio .halt_check = BRANCH_HALT,
36983751977SKonrad Dybcio .clkr = {
37083751977SKonrad Dybcio .enable_reg = 0x102c,
37183751977SKonrad Dybcio .enable_mask = BIT(0),
37283751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
37383751977SKonrad Dybcio .name = "disp_cc_mdss_byte0_clk",
37483751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
37583751977SKonrad Dybcio &disp_cc_mdss_byte0_clk_src.clkr.hw,
37683751977SKonrad Dybcio },
37783751977SKonrad Dybcio .num_parents = 1,
37892039e8cSKonrad Dybcio .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE | CLK_OPS_PARENT_ENABLE,
37983751977SKonrad Dybcio .ops = &clk_branch2_ops,
38083751977SKonrad Dybcio },
38183751977SKonrad Dybcio },
38283751977SKonrad Dybcio };
38383751977SKonrad Dybcio
38483751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_byte0_intf_clk = {
38583751977SKonrad Dybcio .halt_reg = 0x1030,
38683751977SKonrad Dybcio .halt_check = BRANCH_HALT,
38783751977SKonrad Dybcio .clkr = {
38883751977SKonrad Dybcio .enable_reg = 0x1030,
38983751977SKonrad Dybcio .enable_mask = BIT(0),
39083751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
39183751977SKonrad Dybcio .name = "disp_cc_mdss_byte0_intf_clk",
39283751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
39383751977SKonrad Dybcio &disp_cc_mdss_byte0_div_clk_src.clkr.hw,
39483751977SKonrad Dybcio },
39583751977SKonrad Dybcio .num_parents = 1,
39683751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
39783751977SKonrad Dybcio .ops = &clk_branch2_ops,
39883751977SKonrad Dybcio },
39983751977SKonrad Dybcio },
40083751977SKonrad Dybcio };
40183751977SKonrad Dybcio
40283751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_dp_aux_clk = {
40383751977SKonrad Dybcio .halt_reg = 0x1048,
40483751977SKonrad Dybcio .halt_check = BRANCH_HALT,
40583751977SKonrad Dybcio .clkr = {
40683751977SKonrad Dybcio .enable_reg = 0x1048,
40783751977SKonrad Dybcio .enable_mask = BIT(0),
40883751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
40983751977SKonrad Dybcio .name = "disp_cc_mdss_dp_aux_clk",
41083751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
41183751977SKonrad Dybcio &disp_cc_mdss_dp_aux_clk_src.clkr.hw,
41283751977SKonrad Dybcio },
41383751977SKonrad Dybcio .num_parents = 1,
41483751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT,
41583751977SKonrad Dybcio .ops = &clk_branch2_ops,
41683751977SKonrad Dybcio },
41783751977SKonrad Dybcio },
41883751977SKonrad Dybcio };
41983751977SKonrad Dybcio
42083751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_dp_crypto_clk = {
42183751977SKonrad Dybcio .halt_reg = 0x1040,
42283751977SKonrad Dybcio .halt_check = BRANCH_HALT,
42383751977SKonrad Dybcio .clkr = {
42483751977SKonrad Dybcio .enable_reg = 0x1040,
42583751977SKonrad Dybcio .enable_mask = BIT(0),
42683751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
42783751977SKonrad Dybcio .name = "disp_cc_mdss_dp_crypto_clk",
42883751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
42983751977SKonrad Dybcio &disp_cc_mdss_dp_crypto_clk_src.clkr.hw,
43083751977SKonrad Dybcio },
43183751977SKonrad Dybcio .num_parents = 1,
43283751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
43383751977SKonrad Dybcio .ops = &clk_branch2_ops,
43483751977SKonrad Dybcio },
43583751977SKonrad Dybcio },
43683751977SKonrad Dybcio };
43783751977SKonrad Dybcio
43883751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_dp_link_clk = {
43983751977SKonrad Dybcio .halt_reg = 0x1038,
44083751977SKonrad Dybcio .halt_check = BRANCH_HALT,
44183751977SKonrad Dybcio .clkr = {
44283751977SKonrad Dybcio .enable_reg = 0x1038,
44383751977SKonrad Dybcio .enable_mask = BIT(0),
44483751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
44583751977SKonrad Dybcio .name = "disp_cc_mdss_dp_link_clk",
44683751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
44783751977SKonrad Dybcio &disp_cc_mdss_dp_link_clk_src.clkr.hw,
44883751977SKonrad Dybcio },
44983751977SKonrad Dybcio .num_parents = 1,
45083751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
45183751977SKonrad Dybcio .ops = &clk_branch2_ops,
45283751977SKonrad Dybcio },
45383751977SKonrad Dybcio },
45483751977SKonrad Dybcio };
45583751977SKonrad Dybcio
45683751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_dp_link_intf_clk = {
45783751977SKonrad Dybcio .halt_reg = 0x103c,
45883751977SKonrad Dybcio .halt_check = BRANCH_HALT,
45983751977SKonrad Dybcio .clkr = {
46083751977SKonrad Dybcio .enable_reg = 0x103c,
46183751977SKonrad Dybcio .enable_mask = BIT(0),
46283751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
46383751977SKonrad Dybcio .name = "disp_cc_mdss_dp_link_intf_clk",
46483751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
46583751977SKonrad Dybcio &disp_cc_mdss_dp_link_div_clk_src.clkr.hw,
46683751977SKonrad Dybcio },
46783751977SKonrad Dybcio .num_parents = 1,
46883751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
46983751977SKonrad Dybcio .ops = &clk_branch2_ops,
47083751977SKonrad Dybcio },
47183751977SKonrad Dybcio },
47283751977SKonrad Dybcio };
47383751977SKonrad Dybcio
47483751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_dp_pixel_clk = {
47583751977SKonrad Dybcio .halt_reg = 0x1044,
47683751977SKonrad Dybcio .halt_check = BRANCH_HALT,
47783751977SKonrad Dybcio .clkr = {
47883751977SKonrad Dybcio .enable_reg = 0x1044,
47983751977SKonrad Dybcio .enable_mask = BIT(0),
48083751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
48183751977SKonrad Dybcio .name = "disp_cc_mdss_dp_pixel_clk",
48283751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
48383751977SKonrad Dybcio &disp_cc_mdss_dp_pixel_clk_src.clkr.hw,
48483751977SKonrad Dybcio },
48583751977SKonrad Dybcio .num_parents = 1,
48683751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
48783751977SKonrad Dybcio .ops = &clk_branch2_ops,
48883751977SKonrad Dybcio },
48983751977SKonrad Dybcio },
49083751977SKonrad Dybcio };
49183751977SKonrad Dybcio
49283751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_esc0_clk = {
49383751977SKonrad Dybcio .halt_reg = 0x1034,
49483751977SKonrad Dybcio .halt_check = BRANCH_HALT,
49583751977SKonrad Dybcio .clkr = {
49683751977SKonrad Dybcio .enable_reg = 0x1034,
49783751977SKonrad Dybcio .enable_mask = BIT(0),
49883751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
49983751977SKonrad Dybcio .name = "disp_cc_mdss_esc0_clk",
50083751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
50183751977SKonrad Dybcio &disp_cc_mdss_esc0_clk_src.clkr.hw,
50283751977SKonrad Dybcio },
50383751977SKonrad Dybcio .num_parents = 1,
50483751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT,
50583751977SKonrad Dybcio .ops = &clk_branch2_ops,
50683751977SKonrad Dybcio },
50783751977SKonrad Dybcio },
50883751977SKonrad Dybcio };
50983751977SKonrad Dybcio
51083751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_mdp_clk = {
51183751977SKonrad Dybcio .halt_reg = 0x1010,
51283751977SKonrad Dybcio .halt_check = BRANCH_HALT,
51383751977SKonrad Dybcio .clkr = {
51483751977SKonrad Dybcio .enable_reg = 0x1010,
51583751977SKonrad Dybcio .enable_mask = BIT(0),
51683751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
51783751977SKonrad Dybcio .name = "disp_cc_mdss_mdp_clk",
51883751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
51983751977SKonrad Dybcio &disp_cc_mdss_mdp_clk_src.clkr.hw,
52083751977SKonrad Dybcio },
52183751977SKonrad Dybcio .num_parents = 1,
52283751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT,
52383751977SKonrad Dybcio .ops = &clk_branch2_ops,
52483751977SKonrad Dybcio },
52583751977SKonrad Dybcio },
52683751977SKonrad Dybcio };
52783751977SKonrad Dybcio
52883751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_mdp_lut_clk = {
52983751977SKonrad Dybcio .halt_reg = 0x1020,
53083751977SKonrad Dybcio .halt_check = BRANCH_HALT_VOTED,
53183751977SKonrad Dybcio .clkr = {
53283751977SKonrad Dybcio .enable_reg = 0x1020,
53383751977SKonrad Dybcio .enable_mask = BIT(0),
53483751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
53583751977SKonrad Dybcio .name = "disp_cc_mdss_mdp_lut_clk",
53683751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
53783751977SKonrad Dybcio &disp_cc_mdss_mdp_clk_src.clkr.hw,
53883751977SKonrad Dybcio },
53983751977SKonrad Dybcio .num_parents = 1,
54083751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT,
54183751977SKonrad Dybcio .ops = &clk_branch2_ops,
54283751977SKonrad Dybcio },
54383751977SKonrad Dybcio },
54483751977SKonrad Dybcio };
54583751977SKonrad Dybcio
54683751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_non_gdsc_ahb_clk = {
54783751977SKonrad Dybcio .halt_reg = 0x2004,
54883751977SKonrad Dybcio .halt_check = BRANCH_HALT_VOTED,
54983751977SKonrad Dybcio .clkr = {
55083751977SKonrad Dybcio .enable_reg = 0x2004,
55183751977SKonrad Dybcio .enable_mask = BIT(0),
55283751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
55383751977SKonrad Dybcio .name = "disp_cc_mdss_non_gdsc_ahb_clk",
55483751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
55583751977SKonrad Dybcio &disp_cc_mdss_ahb_clk_src.clkr.hw,
55683751977SKonrad Dybcio },
55783751977SKonrad Dybcio .num_parents = 1,
55883751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT,
55983751977SKonrad Dybcio .ops = &clk_branch2_ops,
56083751977SKonrad Dybcio },
56183751977SKonrad Dybcio },
56283751977SKonrad Dybcio };
56383751977SKonrad Dybcio
56483751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_pclk0_clk = {
56583751977SKonrad Dybcio .halt_reg = 0x100c,
56683751977SKonrad Dybcio .halt_check = BRANCH_HALT,
56783751977SKonrad Dybcio .clkr = {
56883751977SKonrad Dybcio .enable_reg = 0x100c,
56983751977SKonrad Dybcio .enable_mask = BIT(0),
57083751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
57183751977SKonrad Dybcio .name = "disp_cc_mdss_pclk0_clk",
57283751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
57383751977SKonrad Dybcio &disp_cc_mdss_pclk0_clk_src.clkr.hw,
57483751977SKonrad Dybcio },
57583751977SKonrad Dybcio .num_parents = 1,
57683751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
57783751977SKonrad Dybcio .ops = &clk_branch2_ops,
57883751977SKonrad Dybcio },
57983751977SKonrad Dybcio },
58083751977SKonrad Dybcio };
58183751977SKonrad Dybcio
58283751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_rot_clk = {
58383751977SKonrad Dybcio .halt_reg = 0x1018,
58483751977SKonrad Dybcio .halt_check = BRANCH_HALT,
58583751977SKonrad Dybcio .clkr = {
58683751977SKonrad Dybcio .enable_reg = 0x1018,
58783751977SKonrad Dybcio .enable_mask = BIT(0),
58883751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
58983751977SKonrad Dybcio .name = "disp_cc_mdss_rot_clk",
59083751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
59183751977SKonrad Dybcio &disp_cc_mdss_rot_clk_src.clkr.hw,
59283751977SKonrad Dybcio },
59383751977SKonrad Dybcio .num_parents = 1,
59483751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT,
59583751977SKonrad Dybcio .ops = &clk_branch2_ops,
59683751977SKonrad Dybcio },
59783751977SKonrad Dybcio },
59883751977SKonrad Dybcio };
59983751977SKonrad Dybcio
60083751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_rscc_ahb_clk = {
60183751977SKonrad Dybcio .halt_reg = 0x200c,
60283751977SKonrad Dybcio .halt_check = BRANCH_HALT,
60383751977SKonrad Dybcio .clkr = {
60483751977SKonrad Dybcio .enable_reg = 0x200c,
60583751977SKonrad Dybcio .enable_mask = BIT(0),
60683751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
60783751977SKonrad Dybcio .name = "disp_cc_mdss_rscc_ahb_clk",
60883751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
60983751977SKonrad Dybcio &disp_cc_mdss_ahb_clk_src.clkr.hw,
61083751977SKonrad Dybcio },
61183751977SKonrad Dybcio .num_parents = 1,
61283751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT,
61383751977SKonrad Dybcio .ops = &clk_branch2_ops,
61483751977SKonrad Dybcio },
61583751977SKonrad Dybcio },
61683751977SKonrad Dybcio };
61783751977SKonrad Dybcio
61883751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_rscc_vsync_clk = {
61983751977SKonrad Dybcio .halt_reg = 0x2008,
62083751977SKonrad Dybcio .halt_check = BRANCH_HALT,
62183751977SKonrad Dybcio .clkr = {
62283751977SKonrad Dybcio .enable_reg = 0x2008,
62383751977SKonrad Dybcio .enable_mask = BIT(0),
62483751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
62583751977SKonrad Dybcio .name = "disp_cc_mdss_rscc_vsync_clk",
62683751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
62783751977SKonrad Dybcio &disp_cc_mdss_vsync_clk_src.clkr.hw,
62883751977SKonrad Dybcio },
62983751977SKonrad Dybcio .num_parents = 1,
63083751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT,
63183751977SKonrad Dybcio .ops = &clk_branch2_ops,
63283751977SKonrad Dybcio },
63383751977SKonrad Dybcio },
63483751977SKonrad Dybcio };
63583751977SKonrad Dybcio
63683751977SKonrad Dybcio static struct clk_branch disp_cc_mdss_vsync_clk = {
63783751977SKonrad Dybcio .halt_reg = 0x1028,
63883751977SKonrad Dybcio .halt_check = BRANCH_HALT,
63983751977SKonrad Dybcio .clkr = {
64083751977SKonrad Dybcio .enable_reg = 0x1028,
64183751977SKonrad Dybcio .enable_mask = BIT(0),
64283751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
64383751977SKonrad Dybcio .name = "disp_cc_mdss_vsync_clk",
64483751977SKonrad Dybcio .parent_hws = (const struct clk_hw*[]){
64583751977SKonrad Dybcio &disp_cc_mdss_vsync_clk_src.clkr.hw,
64683751977SKonrad Dybcio },
64783751977SKonrad Dybcio .num_parents = 1,
64883751977SKonrad Dybcio .flags = CLK_SET_RATE_PARENT,
64983751977SKonrad Dybcio .ops = &clk_branch2_ops,
65083751977SKonrad Dybcio },
65183751977SKonrad Dybcio },
65283751977SKonrad Dybcio };
65383751977SKonrad Dybcio
65483751977SKonrad Dybcio static struct clk_branch disp_cc_sleep_clk = {
65583751977SKonrad Dybcio .halt_reg = 0x5004,
65683751977SKonrad Dybcio .halt_check = BRANCH_HALT,
65783751977SKonrad Dybcio .clkr = {
65883751977SKonrad Dybcio .enable_reg = 0x5004,
65983751977SKonrad Dybcio .enable_mask = BIT(0),
66083751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
66183751977SKonrad Dybcio .name = "disp_cc_sleep_clk",
66283751977SKonrad Dybcio .ops = &clk_branch2_ops,
66383751977SKonrad Dybcio },
66483751977SKonrad Dybcio },
66583751977SKonrad Dybcio };
66683751977SKonrad Dybcio
66783751977SKonrad Dybcio static struct clk_branch disp_cc_xo_clk = {
66883751977SKonrad Dybcio .halt_reg = 0x5008,
66983751977SKonrad Dybcio .halt_check = BRANCH_HALT,
67083751977SKonrad Dybcio .clkr = {
67183751977SKonrad Dybcio .enable_reg = 0x5008,
67283751977SKonrad Dybcio .enable_mask = BIT(0),
67383751977SKonrad Dybcio .hw.init = &(struct clk_init_data){
67483751977SKonrad Dybcio .name = "disp_cc_xo_clk",
67583751977SKonrad Dybcio .flags = CLK_IS_CRITICAL,
67683751977SKonrad Dybcio .ops = &clk_branch2_ops,
67783751977SKonrad Dybcio },
67883751977SKonrad Dybcio },
67983751977SKonrad Dybcio };
68083751977SKonrad Dybcio
68183751977SKonrad Dybcio static struct gdsc mdss_gdsc = {
68283751977SKonrad Dybcio .gdscr = 0x1004,
68383751977SKonrad Dybcio .pd = {
68483751977SKonrad Dybcio .name = "mdss_gdsc",
68583751977SKonrad Dybcio },
68683751977SKonrad Dybcio .pwrsts = PWRSTS_OFF_ON,
68783751977SKonrad Dybcio .flags = RETAIN_FF_ENABLE,
68883751977SKonrad Dybcio };
68983751977SKonrad Dybcio
69083751977SKonrad Dybcio static struct clk_regmap *disp_cc_sm6350_clocks[] = {
69183751977SKonrad Dybcio [DISP_CC_MDSS_AHB_CLK] = &disp_cc_mdss_ahb_clk.clkr,
69283751977SKonrad Dybcio [DISP_CC_MDSS_AHB_CLK_SRC] = &disp_cc_mdss_ahb_clk_src.clkr,
69383751977SKonrad Dybcio [DISP_CC_MDSS_BYTE0_CLK] = &disp_cc_mdss_byte0_clk.clkr,
69483751977SKonrad Dybcio [DISP_CC_MDSS_BYTE0_CLK_SRC] = &disp_cc_mdss_byte0_clk_src.clkr,
69583751977SKonrad Dybcio [DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] = &disp_cc_mdss_byte0_div_clk_src.clkr,
69683751977SKonrad Dybcio [DISP_CC_MDSS_BYTE0_INTF_CLK] = &disp_cc_mdss_byte0_intf_clk.clkr,
69783751977SKonrad Dybcio [DISP_CC_MDSS_DP_AUX_CLK] = &disp_cc_mdss_dp_aux_clk.clkr,
69883751977SKonrad Dybcio [DISP_CC_MDSS_DP_AUX_CLK_SRC] = &disp_cc_mdss_dp_aux_clk_src.clkr,
69983751977SKonrad Dybcio [DISP_CC_MDSS_DP_CRYPTO_CLK] = &disp_cc_mdss_dp_crypto_clk.clkr,
70083751977SKonrad Dybcio [DISP_CC_MDSS_DP_CRYPTO_CLK_SRC] = &disp_cc_mdss_dp_crypto_clk_src.clkr,
70183751977SKonrad Dybcio [DISP_CC_MDSS_DP_LINK_CLK] = &disp_cc_mdss_dp_link_clk.clkr,
70283751977SKonrad Dybcio [DISP_CC_MDSS_DP_LINK_CLK_SRC] = &disp_cc_mdss_dp_link_clk_src.clkr,
70383751977SKonrad Dybcio [DISP_CC_MDSS_DP_LINK_DIV_CLK_SRC] =
70483751977SKonrad Dybcio &disp_cc_mdss_dp_link_div_clk_src.clkr,
70583751977SKonrad Dybcio [DISP_CC_MDSS_DP_LINK_INTF_CLK] = &disp_cc_mdss_dp_link_intf_clk.clkr,
70683751977SKonrad Dybcio [DISP_CC_MDSS_DP_PIXEL_CLK] = &disp_cc_mdss_dp_pixel_clk.clkr,
70783751977SKonrad Dybcio [DISP_CC_MDSS_DP_PIXEL_CLK_SRC] = &disp_cc_mdss_dp_pixel_clk_src.clkr,
70883751977SKonrad Dybcio [DISP_CC_MDSS_ESC0_CLK] = &disp_cc_mdss_esc0_clk.clkr,
70983751977SKonrad Dybcio [DISP_CC_MDSS_ESC0_CLK_SRC] = &disp_cc_mdss_esc0_clk_src.clkr,
71083751977SKonrad Dybcio [DISP_CC_MDSS_MDP_CLK] = &disp_cc_mdss_mdp_clk.clkr,
71183751977SKonrad Dybcio [DISP_CC_MDSS_MDP_CLK_SRC] = &disp_cc_mdss_mdp_clk_src.clkr,
71283751977SKonrad Dybcio [DISP_CC_MDSS_MDP_LUT_CLK] = &disp_cc_mdss_mdp_lut_clk.clkr,
71383751977SKonrad Dybcio [DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &disp_cc_mdss_non_gdsc_ahb_clk.clkr,
71483751977SKonrad Dybcio [DISP_CC_MDSS_PCLK0_CLK] = &disp_cc_mdss_pclk0_clk.clkr,
71583751977SKonrad Dybcio [DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr,
71683751977SKonrad Dybcio [DISP_CC_MDSS_ROT_CLK] = &disp_cc_mdss_rot_clk.clkr,
71783751977SKonrad Dybcio [DISP_CC_MDSS_ROT_CLK_SRC] = &disp_cc_mdss_rot_clk_src.clkr,
71883751977SKonrad Dybcio [DISP_CC_MDSS_RSCC_AHB_CLK] = &disp_cc_mdss_rscc_ahb_clk.clkr,
71983751977SKonrad Dybcio [DISP_CC_MDSS_RSCC_VSYNC_CLK] = &disp_cc_mdss_rscc_vsync_clk.clkr,
72083751977SKonrad Dybcio [DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr,
72183751977SKonrad Dybcio [DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr,
72283751977SKonrad Dybcio [DISP_CC_PLL0] = &disp_cc_pll0.clkr,
72383751977SKonrad Dybcio [DISP_CC_SLEEP_CLK] = &disp_cc_sleep_clk.clkr,
72483751977SKonrad Dybcio [DISP_CC_XO_CLK] = &disp_cc_xo_clk.clkr,
72583751977SKonrad Dybcio };
72683751977SKonrad Dybcio
72783751977SKonrad Dybcio static struct gdsc *disp_cc_sm6350_gdscs[] = {
72883751977SKonrad Dybcio [MDSS_GDSC] = &mdss_gdsc,
72983751977SKonrad Dybcio };
73083751977SKonrad Dybcio
73183751977SKonrad Dybcio static const struct regmap_config disp_cc_sm6350_regmap_config = {
73283751977SKonrad Dybcio .reg_bits = 32,
73383751977SKonrad Dybcio .reg_stride = 4,
73483751977SKonrad Dybcio .val_bits = 32,
73583751977SKonrad Dybcio .max_register = 0x10000,
73683751977SKonrad Dybcio .fast_io = true,
73783751977SKonrad Dybcio };
73883751977SKonrad Dybcio
73983751977SKonrad Dybcio static const struct qcom_cc_desc disp_cc_sm6350_desc = {
74083751977SKonrad Dybcio .config = &disp_cc_sm6350_regmap_config,
74183751977SKonrad Dybcio .clks = disp_cc_sm6350_clocks,
74283751977SKonrad Dybcio .num_clks = ARRAY_SIZE(disp_cc_sm6350_clocks),
74383751977SKonrad Dybcio .gdscs = disp_cc_sm6350_gdscs,
74483751977SKonrad Dybcio .num_gdscs = ARRAY_SIZE(disp_cc_sm6350_gdscs),
74583751977SKonrad Dybcio };
74683751977SKonrad Dybcio
74783751977SKonrad Dybcio static const struct of_device_id disp_cc_sm6350_match_table[] = {
74883751977SKonrad Dybcio { .compatible = "qcom,sm6350-dispcc" },
74983751977SKonrad Dybcio { }
75083751977SKonrad Dybcio };
75183751977SKonrad Dybcio MODULE_DEVICE_TABLE(of, disp_cc_sm6350_match_table);
75283751977SKonrad Dybcio
disp_cc_sm6350_probe(struct platform_device * pdev)75383751977SKonrad Dybcio static int disp_cc_sm6350_probe(struct platform_device *pdev)
75483751977SKonrad Dybcio {
75583751977SKonrad Dybcio struct regmap *regmap;
75683751977SKonrad Dybcio
75783751977SKonrad Dybcio regmap = qcom_cc_map(pdev, &disp_cc_sm6350_desc);
75883751977SKonrad Dybcio if (IS_ERR(regmap))
75983751977SKonrad Dybcio return PTR_ERR(regmap);
76083751977SKonrad Dybcio
76183751977SKonrad Dybcio clk_fabia_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
76283751977SKonrad Dybcio
76383751977SKonrad Dybcio return qcom_cc_really_probe(pdev, &disp_cc_sm6350_desc, regmap);
76483751977SKonrad Dybcio }
76583751977SKonrad Dybcio
76683751977SKonrad Dybcio static struct platform_driver disp_cc_sm6350_driver = {
76783751977SKonrad Dybcio .probe = disp_cc_sm6350_probe,
76883751977SKonrad Dybcio .driver = {
76983751977SKonrad Dybcio .name = "disp_cc-sm6350",
77083751977SKonrad Dybcio .of_match_table = disp_cc_sm6350_match_table,
77183751977SKonrad Dybcio },
77283751977SKonrad Dybcio };
77383751977SKonrad Dybcio
disp_cc_sm6350_init(void)77483751977SKonrad Dybcio static int __init disp_cc_sm6350_init(void)
77583751977SKonrad Dybcio {
77683751977SKonrad Dybcio return platform_driver_register(&disp_cc_sm6350_driver);
77783751977SKonrad Dybcio }
77883751977SKonrad Dybcio subsys_initcall(disp_cc_sm6350_init);
77983751977SKonrad Dybcio
disp_cc_sm6350_exit(void)78083751977SKonrad Dybcio static void __exit disp_cc_sm6350_exit(void)
78183751977SKonrad Dybcio {
78283751977SKonrad Dybcio platform_driver_unregister(&disp_cc_sm6350_driver);
78383751977SKonrad Dybcio }
78483751977SKonrad Dybcio module_exit(disp_cc_sm6350_exit);
78583751977SKonrad Dybcio
78683751977SKonrad Dybcio MODULE_DESCRIPTION("QTI DISP_CC SM6350 Driver");
78783751977SKonrad Dybcio MODULE_LICENSE("GPL v2");
788