brintos

brintos / linux-shallow public Read only

0
0
Text · 18.4 KiB · 51c7492 Raw
700 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Copyright (c) 2021, The Linux Foundation. All rights reserved.4 */5 6#include <linux/clk-provider.h>7#include <linux/module.h>8#include <linux/platform_device.h>9#include <linux/regmap.h>10 11#include <dt-bindings/clock/qcom,dispcc-sm6125.h>12 13#include "clk-alpha-pll.h"14#include "clk-branch.h"15#include "clk-rcg.h"16#include "clk-regmap.h"17#include "common.h"18#include "gdsc.h"19 20enum {21	P_BI_TCXO,22	P_DISP_CC_PLL0_OUT_MAIN,23	P_DP_PHY_PLL_LINK_CLK,24	P_DP_PHY_PLL_VCO_DIV_CLK,25	P_DSI0_PHY_PLL_OUT_BYTECLK,26	P_DSI0_PHY_PLL_OUT_DSICLK,27	P_DSI1_PHY_PLL_OUT_DSICLK,28	P_GPLL0_OUT_MAIN,29};30 31static const struct pll_vco disp_cc_pll_vco[] = {32	{ 500000000, 1000000000, 2 },33};34 35static struct clk_alpha_pll disp_cc_pll0 = {36	.offset = 0x0,37	.vco_table = disp_cc_pll_vco,38	.num_vco = ARRAY_SIZE(disp_cc_pll_vco),39	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],40	.flags = SUPPORTS_DYNAMIC_UPDATE,41	.clkr = {42		.hw.init = &(struct clk_init_data){43			.name = "disp_cc_pll0",44			.parent_data = &(const struct clk_parent_data){45				.fw_name = "bi_tcxo",46			},47			.num_parents = 1,48			.ops = &clk_alpha_pll_ops,49		},50	},51};52 53/* 768MHz configuration */54static const struct alpha_pll_config disp_cc_pll0_config = {55	.l = 0x28,56	.vco_val = 0x2 << 20,57	.vco_mask = 0x3 << 20,58	.main_output_mask = BIT(0),59	.config_ctl_val = 0x4001055b,60};61 62static const struct parent_map disp_cc_parent_map_0[] = {63	{ P_BI_TCXO, 0 },64};65 66static const struct clk_parent_data disp_cc_parent_data_0[] = {67	{ .fw_name = "bi_tcxo" },68};69 70static const struct parent_map disp_cc_parent_map_1[] = {71	{ P_BI_TCXO, 0 },72	{ P_DP_PHY_PLL_LINK_CLK, 1 },73	{ P_DP_PHY_PLL_VCO_DIV_CLK, 2 },74};75 76static const struct clk_parent_data disp_cc_parent_data_1[] = {77	{ .fw_name = "bi_tcxo" },78	{ .fw_name = "dp_phy_pll_link_clk" },79	{ .fw_name = "dp_phy_pll_vco_div_clk" },80};81 82static const struct parent_map disp_cc_parent_map_2[] = {83	{ P_BI_TCXO, 0 },84	{ P_DSI0_PHY_PLL_OUT_BYTECLK, 1 },85};86 87static const struct clk_parent_data disp_cc_parent_data_2[] = {88	{ .fw_name = "bi_tcxo" },89	{ .fw_name = "dsi0_phy_pll_out_byteclk" },90};91 92static const struct parent_map disp_cc_parent_map_3[] = {93	{ P_BI_TCXO, 0 },94	{ P_DISP_CC_PLL0_OUT_MAIN, 1 },95	{ P_GPLL0_OUT_MAIN, 4 },96};97 98static const struct clk_parent_data disp_cc_parent_data_3[] = {99	{ .fw_name = "bi_tcxo" },100	{ .hw = &disp_cc_pll0.clkr.hw },101	{ .fw_name = "gcc_disp_gpll0_div_clk_src" },102};103 104static const struct parent_map disp_cc_parent_map_4[] = {105	{ P_BI_TCXO, 0 },106	{ P_GPLL0_OUT_MAIN, 4 },107};108 109static const struct clk_parent_data disp_cc_parent_data_4[] = {110	{ .fw_name = "bi_tcxo" },111	{ .fw_name = "gcc_disp_gpll0_div_clk_src" },112};113 114static const struct parent_map disp_cc_parent_map_5[] = {115	{ P_BI_TCXO, 0 },116	{ P_DSI0_PHY_PLL_OUT_DSICLK, 1 },117	{ P_DSI1_PHY_PLL_OUT_DSICLK, 2 },118};119 120static const struct clk_parent_data disp_cc_parent_data_5[] = {121	{ .fw_name = "bi_tcxo" },122	{ .fw_name = "dsi0_phy_pll_out_dsiclk" },123	{ .fw_name = "dsi1_phy_pll_out_dsiclk" },124};125 126static const struct freq_tbl ftbl_disp_cc_mdss_ahb_clk_src[] = {127	F(19200000, P_BI_TCXO, 1, 0, 0),128	F(37500000, P_GPLL0_OUT_MAIN, 16, 0, 0),129	F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),130	{ }131};132 133static struct clk_rcg2 disp_cc_mdss_ahb_clk_src = {134	.cmd_rcgr = 0x2154,135	.mnd_width = 0,136	.hid_width = 5,137	.parent_map = disp_cc_parent_map_4,138	.freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src,139	.clkr.hw.init = &(struct clk_init_data){140		.name = "disp_cc_mdss_ahb_clk_src",141		.parent_data = disp_cc_parent_data_4,142		.num_parents = ARRAY_SIZE(disp_cc_parent_data_4),143		.ops = &clk_rcg2_shared_ops,144	},145};146 147static struct clk_rcg2 disp_cc_mdss_byte0_clk_src = {148	.cmd_rcgr = 0x20bc,149	.mnd_width = 0,150	.hid_width = 5,151	.parent_map = disp_cc_parent_map_2,152	.clkr.hw.init = &(struct clk_init_data){153		.name = "disp_cc_mdss_byte0_clk_src",154		.parent_data = disp_cc_parent_data_2,155		.num_parents = ARRAY_SIZE(disp_cc_parent_data_2),156		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,157		.ops = &clk_byte2_ops,158	},159};160 161static const struct freq_tbl ftbl_disp_cc_mdss_dp_aux1_clk_src[] = {162	F(19200000, P_BI_TCXO, 1, 0, 0),163	{ }164};165 166static struct clk_rcg2 disp_cc_mdss_dp_aux_clk_src = {167	.cmd_rcgr = 0x213c,168	.mnd_width = 0,169	.hid_width = 5,170	.parent_map = disp_cc_parent_map_0,171	.freq_tbl = ftbl_disp_cc_mdss_dp_aux1_clk_src,172	.clkr.hw.init = &(struct clk_init_data){173		.name = "disp_cc_mdss_dp_aux_clk_src",174		.parent_data = disp_cc_parent_data_0,175		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),176		.ops = &clk_rcg2_ops,177	},178};179 180static const struct freq_tbl ftbl_disp_cc_mdss_dp_crypto_clk_src[] = {181	F( 180000, P_DP_PHY_PLL_LINK_CLK,   1.5,   0,   0),182	F( 360000, P_DP_PHY_PLL_LINK_CLK,   1.5,   0,   0),183	{ }184};185 186static struct clk_rcg2 disp_cc_mdss_dp_crypto_clk_src = {187	.cmd_rcgr = 0x210c,188	.mnd_width = 0,189	.hid_width = 5,190	.parent_map = disp_cc_parent_map_1,191	.freq_tbl = ftbl_disp_cc_mdss_dp_crypto_clk_src,192	.clkr.hw.init = &(struct clk_init_data){193		.name = "disp_cc_mdss_dp_crypto_clk_src",194		.parent_data = disp_cc_parent_data_1,195		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),196		.flags = CLK_GET_RATE_NOCACHE,197		.ops = &clk_rcg2_ops,198	},199};200 201static const struct freq_tbl ftbl_disp_cc_mdss_dp_link_clk_src[] = {202	F( 162000, P_DP_PHY_PLL_LINK_CLK,   1,   0,   0),203	F( 270000, P_DP_PHY_PLL_LINK_CLK,   1,   0,   0),204	F( 540000, P_DP_PHY_PLL_LINK_CLK,   1,   0,   0),205	{ }206};207 208static struct clk_rcg2 disp_cc_mdss_dp_link_clk_src = {209	.cmd_rcgr = 0x20f0,210	.mnd_width = 0,211	.hid_width = 5,212	.parent_map = disp_cc_parent_map_1,213	.freq_tbl = ftbl_disp_cc_mdss_dp_link_clk_src,214	.clkr.hw.init = &(struct clk_init_data){215		.name = "disp_cc_mdss_dp_link_clk_src",216		.parent_data = disp_cc_parent_data_1,217		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),218		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,219		.ops = &clk_rcg2_ops,220	},221};222 223static struct clk_rcg2 disp_cc_mdss_dp_pixel_clk_src = {224	.cmd_rcgr = 0x2124,225	.mnd_width = 16,226	.hid_width = 5,227	.parent_map = disp_cc_parent_map_1,228	.clkr.hw.init = &(struct clk_init_data){229		.name = "disp_cc_mdss_dp_pixel_clk_src",230		.parent_data = disp_cc_parent_data_1,231		.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),232		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,233		.ops = &clk_dp_ops,234	},235};236 237static struct clk_rcg2 disp_cc_mdss_esc0_clk_src = {238	.cmd_rcgr = 0x20d8,239	.mnd_width = 0,240	.hid_width = 5,241	.parent_map = disp_cc_parent_map_2,242	.freq_tbl = ftbl_disp_cc_mdss_dp_aux1_clk_src,243	.clkr.hw.init = &(struct clk_init_data){244		.name = "disp_cc_mdss_esc0_clk_src",245		.parent_data = disp_cc_parent_data_2,246		.num_parents = ARRAY_SIZE(disp_cc_parent_data_2),247		.ops = &clk_rcg2_ops,248	},249};250 251static const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src[] = {252	F(19200000, P_BI_TCXO, 1, 0, 0),253	F(192000000, P_DISP_CC_PLL0_OUT_MAIN, 4, 0, 0),254	F(256000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),255	F(307200000, P_DISP_CC_PLL0_OUT_MAIN, 2.5, 0, 0),256	F(384000000, P_DISP_CC_PLL0_OUT_MAIN, 2, 0, 0),257	F(400000000, P_GPLL0_OUT_MAIN, 1.5, 0, 0),258	{ }259};260 261static struct clk_rcg2 disp_cc_mdss_mdp_clk_src = {262	.cmd_rcgr = 0x2074,263	.mnd_width = 0,264	.hid_width = 5,265	.parent_map = disp_cc_parent_map_3,266	.freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src,267	.clkr.hw.init = &(struct clk_init_data){268		.name = "disp_cc_mdss_mdp_clk_src",269		.parent_data = disp_cc_parent_data_3,270		.num_parents = ARRAY_SIZE(disp_cc_parent_data_3),271		.ops = &clk_rcg2_shared_ops,272	},273};274 275static struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = {276	.cmd_rcgr = 0x205c,277	.mnd_width = 8,278	.hid_width = 5,279	.parent_map = disp_cc_parent_map_5,280	.clkr.hw.init = &(struct clk_init_data){281		.name = "disp_cc_mdss_pclk0_clk_src",282		.parent_data = disp_cc_parent_data_5,283		.num_parents = ARRAY_SIZE(disp_cc_parent_data_5),284		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,285		.ops = &clk_pixel_ops,286	},287};288 289static const struct freq_tbl ftbl_disp_cc_mdss_rot_clk_src[] = {290	F(19200000, P_BI_TCXO, 1, 0, 0),291	F(192000000, P_DISP_CC_PLL0_OUT_MAIN, 4, 0, 0),292	F(256000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),293	F(307200000, P_DISP_CC_PLL0_OUT_MAIN, 2.5, 0, 0),294	{ }295};296 297static struct clk_rcg2 disp_cc_mdss_rot_clk_src = {298	.cmd_rcgr = 0x208c,299	.mnd_width = 0,300	.hid_width = 5,301	.parent_map = disp_cc_parent_map_3,302	.freq_tbl = ftbl_disp_cc_mdss_rot_clk_src,303	.clkr.hw.init = &(struct clk_init_data){304		.name = "disp_cc_mdss_rot_clk_src",305		.parent_data = disp_cc_parent_data_3,306		.num_parents = ARRAY_SIZE(disp_cc_parent_data_3),307		.flags = CLK_SET_RATE_PARENT,308		.ops = &clk_rcg2_shared_ops,309	},310};311 312static struct clk_rcg2 disp_cc_mdss_vsync_clk_src = {313	.cmd_rcgr = 0x20a4,314	.mnd_width = 0,315	.hid_width = 5,316	.parent_map = disp_cc_parent_map_0,317	.freq_tbl = ftbl_disp_cc_mdss_dp_aux1_clk_src,318	.clkr.hw.init = &(struct clk_init_data){319		.name = "disp_cc_mdss_vsync_clk_src",320		.parent_data = disp_cc_parent_data_0,321		.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),322		.ops = &clk_rcg2_ops,323	},324};325 326static struct clk_branch disp_cc_mdss_ahb_clk = {327	.halt_reg = 0x2044,328	.halt_check = BRANCH_HALT,329	.clkr = {330		.enable_reg = 0x2044,331		.enable_mask = BIT(0),332		.hw.init = &(struct clk_init_data){333			.name = "disp_cc_mdss_ahb_clk",334			.parent_hws = (const struct clk_hw*[]){335				&disp_cc_mdss_ahb_clk_src.clkr.hw,336			},337			.num_parents = 1,338			.flags = CLK_SET_RATE_PARENT,339			.ops = &clk_branch2_ops,340		},341	},342};343 344static struct clk_branch disp_cc_mdss_byte0_clk = {345	.halt_reg = 0x2024,346	.halt_check = BRANCH_HALT,347	.clkr = {348		.enable_reg = 0x2024,349		.enable_mask = BIT(0),350		.hw.init = &(struct clk_init_data){351			.name = "disp_cc_mdss_byte0_clk",352			.parent_hws = (const struct clk_hw*[]){353				&disp_cc_mdss_byte0_clk_src.clkr.hw,354			},355			.num_parents = 1,356			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,357			.ops = &clk_branch2_ops,358		},359	},360};361 362static struct clk_branch disp_cc_mdss_byte0_intf_clk = {363	.halt_reg = 0x2028,364	.halt_check = BRANCH_HALT,365	.clkr = {366		.enable_reg = 0x2028,367		.enable_mask = BIT(0),368		.hw.init = &(struct clk_init_data){369			.name = "disp_cc_mdss_byte0_intf_clk",370			.parent_hws = (const struct clk_hw*[]){371				&disp_cc_mdss_byte0_clk_src.clkr.hw,372			},373			.num_parents = 1,374			.flags = CLK_GET_RATE_NOCACHE,375			.ops = &clk_branch2_ops,376		},377	},378};379 380static struct clk_branch disp_cc_mdss_dp_aux_clk = {381	.halt_reg = 0x2040,382	.halt_check = BRANCH_HALT,383	.clkr = {384		.enable_reg = 0x2040,385		.enable_mask = BIT(0),386		.hw.init = &(struct clk_init_data){387			.name = "disp_cc_mdss_dp_aux_clk",388			.parent_hws = (const struct clk_hw*[]){389				&disp_cc_mdss_dp_aux_clk_src.clkr.hw,390			},391			.num_parents = 1,392			.flags = CLK_SET_RATE_PARENT,393			.ops = &clk_branch2_ops,394		},395	},396};397 398static struct clk_branch disp_cc_mdss_dp_crypto_clk = {399	.halt_reg = 0x2038,400	.halt_check = BRANCH_HALT,401	.clkr = {402		.enable_reg = 0x2038,403		.enable_mask = BIT(0),404		.hw.init = &(struct clk_init_data){405			.name = "disp_cc_mdss_dp_crypto_clk",406			.parent_hws = (const struct clk_hw*[]){407				&disp_cc_mdss_dp_crypto_clk_src.clkr.hw,408			},409			.num_parents = 1,410			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,411			.ops = &clk_branch2_ops,412		},413	},414};415 416static struct clk_branch disp_cc_mdss_dp_link_clk = {417	.halt_reg = 0x2030,418	.halt_check = BRANCH_HALT,419	.clkr = {420		.enable_reg = 0x2030,421		.enable_mask = BIT(0),422		.hw.init = &(struct clk_init_data){423			.name = "disp_cc_mdss_dp_link_clk",424			.parent_hws = (const struct clk_hw*[]){425				&disp_cc_mdss_dp_link_clk_src.clkr.hw,426			},427			.num_parents = 1,428			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,429			.ops = &clk_branch2_ops,430		},431	},432};433 434static struct clk_branch disp_cc_mdss_dp_link_intf_clk = {435	.halt_reg = 0x2034,436	.halt_check = BRANCH_HALT,437	.clkr = {438		.enable_reg = 0x2034,439		.enable_mask = BIT(0),440		.hw.init = &(struct clk_init_data){441			.name = "disp_cc_mdss_dp_link_intf_clk",442			.parent_hws = (const struct clk_hw*[]){443				&disp_cc_mdss_dp_link_clk_src.clkr.hw,444			},445			.num_parents = 1,446			.flags = CLK_GET_RATE_NOCACHE,447			.ops = &clk_branch2_ops,448		},449	},450};451 452static struct clk_branch disp_cc_mdss_dp_pixel_clk = {453	.halt_reg = 0x203c,454	.halt_check = BRANCH_HALT,455	.clkr = {456		.enable_reg = 0x203c,457		.enable_mask = BIT(0),458		.hw.init = &(struct clk_init_data){459			.name = "disp_cc_mdss_dp_pixel_clk",460			.parent_hws = (const struct clk_hw*[]){461				&disp_cc_mdss_dp_pixel_clk_src.clkr.hw,462			},463			.num_parents = 1,464			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,465			.ops = &clk_branch2_ops,466		},467	},468};469 470static struct clk_branch disp_cc_mdss_esc0_clk = {471	.halt_reg = 0x202c,472	.halt_check = BRANCH_HALT,473	.clkr = {474		.enable_reg = 0x202c,475		.enable_mask = BIT(0),476		.hw.init = &(struct clk_init_data){477			.name = "disp_cc_mdss_esc0_clk",478			.parent_hws = (const struct clk_hw*[]){479				&disp_cc_mdss_esc0_clk_src.clkr.hw,480			},481			.num_parents = 1,482			.flags = CLK_SET_RATE_PARENT,483			.ops = &clk_branch2_ops,484		},485	},486};487 488static struct clk_branch disp_cc_mdss_mdp_clk = {489	.halt_reg = 0x2008,490	.halt_check = BRANCH_HALT,491	.clkr = {492		.enable_reg = 0x2008,493		.enable_mask = BIT(0),494		.hw.init = &(struct clk_init_data){495			.name = "disp_cc_mdss_mdp_clk",496			.parent_hws = (const struct clk_hw*[]){497				&disp_cc_mdss_mdp_clk_src.clkr.hw,498			},499			.num_parents = 1,500			.flags = CLK_SET_RATE_PARENT,501			.ops = &clk_branch2_ops,502		},503	},504};505 506static struct clk_branch disp_cc_mdss_mdp_lut_clk = {507	.halt_reg = 0x2018,508	.halt_check = BRANCH_VOTED,509	.clkr = {510		.enable_reg = 0x2018,511		.enable_mask = BIT(0),512		.hw.init = &(struct clk_init_data){513			.name = "disp_cc_mdss_mdp_lut_clk",514			.parent_hws = (const struct clk_hw*[]){515				&disp_cc_mdss_mdp_clk_src.clkr.hw,516			},517			.num_parents = 1,518			.ops = &clk_branch2_ops,519		},520	},521};522 523static struct clk_branch disp_cc_mdss_non_gdsc_ahb_clk = {524	.halt_reg = 0x4004,525	.halt_check = BRANCH_VOTED,526	.clkr = {527		.enable_reg = 0x4004,528		.enable_mask = BIT(0),529		.hw.init = &(struct clk_init_data){530			.name = "disp_cc_mdss_non_gdsc_ahb_clk",531			.parent_hws = (const struct clk_hw*[]){532				&disp_cc_mdss_ahb_clk_src.clkr.hw,533			},534			.num_parents = 1,535			.flags = CLK_SET_RATE_PARENT,536			.ops = &clk_branch2_ops,537		},538	},539};540 541static struct clk_branch disp_cc_mdss_pclk0_clk = {542	.halt_reg = 0x2004,543	.halt_check = BRANCH_HALT,544	.clkr = {545		.enable_reg = 0x2004,546		.enable_mask = BIT(0),547		.hw.init = &(struct clk_init_data){548			.name = "disp_cc_mdss_pclk0_clk",549			.parent_hws = (const struct clk_hw*[]){550				&disp_cc_mdss_pclk0_clk_src.clkr.hw,551			},552			.num_parents = 1,553			.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,554			.ops = &clk_branch2_ops,555		},556	},557};558 559static struct clk_branch disp_cc_mdss_rot_clk = {560	.halt_reg = 0x2010,561	.halt_check = BRANCH_HALT,562	.clkr = {563		.enable_reg = 0x2010,564		.enable_mask = BIT(0),565		.hw.init = &(struct clk_init_data){566			.name = "disp_cc_mdss_rot_clk",567			.parent_hws = (const struct clk_hw*[]){568				&disp_cc_mdss_rot_clk_src.clkr.hw,569			},570			.num_parents = 1,571			.flags = CLK_SET_RATE_PARENT,572			.ops = &clk_branch2_ops,573		},574	},575};576 577static struct clk_branch disp_cc_mdss_vsync_clk = {578	.halt_reg = 0x2020,579	.halt_check = BRANCH_HALT,580	.clkr = {581		.enable_reg = 0x2020,582		.enable_mask = BIT(0),583		.hw.init = &(struct clk_init_data){584			.name = "disp_cc_mdss_vsync_clk",585			.parent_hws = (const struct clk_hw*[]){586				&disp_cc_mdss_vsync_clk_src.clkr.hw,587			},588			.num_parents = 1,589			.flags = CLK_SET_RATE_PARENT,590			.ops = &clk_branch2_ops,591		},592	},593};594 595static struct clk_branch disp_cc_xo_clk = {596	.halt_reg = 0x604c,597	.halt_check = BRANCH_HALT,598	.clkr = {599		.enable_reg = 0x604c,600		.enable_mask = BIT(0),601		.hw.init = &(struct clk_init_data){602			.name = "disp_cc_xo_clk",603			.flags = CLK_IS_CRITICAL,604			.ops = &clk_branch2_ops,605		},606	},607};608 609static struct gdsc mdss_gdsc = {610	.gdscr = 0x3000,611	.pd = {612		.name = "mdss_gdsc",613	},614	.pwrsts = PWRSTS_OFF_ON,615	.flags = HW_CTRL,616};617 618static struct clk_regmap *disp_cc_sm6125_clocks[] = {619	[DISP_CC_MDSS_AHB_CLK] = &disp_cc_mdss_ahb_clk.clkr,620	[DISP_CC_MDSS_AHB_CLK_SRC] = &disp_cc_mdss_ahb_clk_src.clkr,621	[DISP_CC_MDSS_BYTE0_CLK] = &disp_cc_mdss_byte0_clk.clkr,622	[DISP_CC_MDSS_BYTE0_CLK_SRC] = &disp_cc_mdss_byte0_clk_src.clkr,623	[DISP_CC_MDSS_BYTE0_INTF_CLK] = &disp_cc_mdss_byte0_intf_clk.clkr,624	[DISP_CC_MDSS_DP_AUX_CLK] = &disp_cc_mdss_dp_aux_clk.clkr,625	[DISP_CC_MDSS_DP_AUX_CLK_SRC] = &disp_cc_mdss_dp_aux_clk_src.clkr,626	[DISP_CC_MDSS_DP_CRYPTO_CLK] = &disp_cc_mdss_dp_crypto_clk.clkr,627	[DISP_CC_MDSS_DP_CRYPTO_CLK_SRC] = &disp_cc_mdss_dp_crypto_clk_src.clkr,628	[DISP_CC_MDSS_DP_LINK_CLK] = &disp_cc_mdss_dp_link_clk.clkr,629	[DISP_CC_MDSS_DP_LINK_CLK_SRC] = &disp_cc_mdss_dp_link_clk_src.clkr,630	[DISP_CC_MDSS_DP_LINK_INTF_CLK] = &disp_cc_mdss_dp_link_intf_clk.clkr,631	[DISP_CC_MDSS_DP_PIXEL_CLK] = &disp_cc_mdss_dp_pixel_clk.clkr,632	[DISP_CC_MDSS_DP_PIXEL_CLK_SRC] = &disp_cc_mdss_dp_pixel_clk_src.clkr,633	[DISP_CC_MDSS_ESC0_CLK] = &disp_cc_mdss_esc0_clk.clkr,634	[DISP_CC_MDSS_ESC0_CLK_SRC] = &disp_cc_mdss_esc0_clk_src.clkr,635	[DISP_CC_MDSS_MDP_CLK] = &disp_cc_mdss_mdp_clk.clkr,636	[DISP_CC_MDSS_MDP_CLK_SRC] = &disp_cc_mdss_mdp_clk_src.clkr,637	[DISP_CC_MDSS_MDP_LUT_CLK] = &disp_cc_mdss_mdp_lut_clk.clkr,638	[DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &disp_cc_mdss_non_gdsc_ahb_clk.clkr,639	[DISP_CC_MDSS_PCLK0_CLK] = &disp_cc_mdss_pclk0_clk.clkr,640	[DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr,641	[DISP_CC_MDSS_ROT_CLK] = &disp_cc_mdss_rot_clk.clkr,642	[DISP_CC_MDSS_ROT_CLK_SRC] = &disp_cc_mdss_rot_clk_src.clkr,643	[DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr,644	[DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr,645	[DISP_CC_PLL0] = &disp_cc_pll0.clkr,646	[DISP_CC_XO_CLK] = &disp_cc_xo_clk.clkr,647};648 649static struct gdsc *disp_cc_sm6125_gdscs[] = {650	[MDSS_GDSC] = &mdss_gdsc,651};652 653static const struct regmap_config disp_cc_sm6125_regmap_config = {654	.reg_bits = 32,655	.reg_stride = 4,656	.val_bits = 32,657	.max_register = 0x10000,658	.fast_io = true,659};660 661static const struct qcom_cc_desc disp_cc_sm6125_desc = {662	.config = &disp_cc_sm6125_regmap_config,663	.clks = disp_cc_sm6125_clocks,664	.num_clks = ARRAY_SIZE(disp_cc_sm6125_clocks),665	.gdscs = disp_cc_sm6125_gdscs,666	.num_gdscs = ARRAY_SIZE(disp_cc_sm6125_gdscs),667};668 669static const struct of_device_id disp_cc_sm6125_match_table[] = {670	{ .compatible = "qcom,sm6125-dispcc" },671	{ }672};673MODULE_DEVICE_TABLE(of, disp_cc_sm6125_match_table);674 675static int disp_cc_sm6125_probe(struct platform_device *pdev)676{677	struct regmap *regmap;678 679	regmap = qcom_cc_map(pdev, &disp_cc_sm6125_desc);680	if (IS_ERR(regmap))681		return PTR_ERR(regmap);682 683	clk_alpha_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);684 685	return qcom_cc_really_probe(&pdev->dev, &disp_cc_sm6125_desc, regmap);686}687 688static struct platform_driver disp_cc_sm6125_driver = {689	.probe = disp_cc_sm6125_probe,690	.driver = {691		.name = "disp_cc-sm6125",692		.of_match_table = disp_cc_sm6125_match_table,693	},694};695 696module_platform_driver(disp_cc_sm6125_driver);697 698MODULE_DESCRIPTION("QTI DISPCC SM6125 Driver");699MODULE_LICENSE("GPL v2");700