brintos

brintos / linux-shallow public Read only

0
0
Text · 66.1 KiB · f70d080 Raw
2620 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>4 */5 6#include <linux/kernel.h>7#include <linux/bitops.h>8#include <linux/err.h>9#include <linux/platform_device.h>10#include <linux/module.h>11#include <linux/of.h>12#include <linux/clk-provider.h>13#include <linux/regmap.h>14#include <linux/reset-controller.h>15#include <linux/clk.h>16 17#include <dt-bindings/clock/qcom,mmcc-msm8994.h>18 19#include "common.h"20#include "clk-regmap.h"21#include "clk-regmap-divider.h"22#include "clk-alpha-pll.h"23#include "clk-rcg.h"24#include "clk-branch.h"25#include "reset.h"26#include "gdsc.h"27 28 29enum {30	P_XO,31	P_GPLL0,32	P_MMPLL0,33	P_MMPLL1,34	P_MMPLL3,35	P_MMPLL4,36	P_MMPLL5, /* Is this one even used by anything? Downstream doesn't tell. */37	P_DSI0PLL,38	P_DSI1PLL,39	P_DSI0PLL_BYTE,40	P_DSI1PLL_BYTE,41	P_HDMIPLL,42};43static const struct parent_map mmcc_xo_gpll0_map[] = {44	{ P_XO, 0 },45	{ P_GPLL0, 5 }46};47 48static const struct clk_parent_data mmcc_xo_gpll0[] = {49	{ .fw_name = "xo" },50	{ .fw_name = "gpll0" },51};52 53static const struct parent_map mmss_xo_hdmi_map[] = {54	{ P_XO, 0 },55	{ P_HDMIPLL, 3 }56};57 58static const struct clk_parent_data mmss_xo_hdmi[] = {59	{ .fw_name = "xo" },60	{ .fw_name = "hdmipll" },61};62 63static const struct parent_map mmcc_xo_dsi0pll_dsi1pll_map[] = {64	{ P_XO, 0 },65	{ P_DSI0PLL, 1 },66	{ P_DSI1PLL, 2 }67};68 69static const struct clk_parent_data mmcc_xo_dsi0pll_dsi1pll[] = {70	{ .fw_name = "xo" },71	{ .fw_name = "dsi0pll" },72	{ .fw_name = "dsi1pll" },73};74 75static const struct parent_map mmcc_xo_dsibyte_map[] = {76	{ P_XO, 0 },77	{ P_DSI0PLL_BYTE, 1 },78	{ P_DSI1PLL_BYTE, 2 }79};80 81static const struct clk_parent_data mmcc_xo_dsibyte[] = {82	{ .fw_name = "xo" },83	{ .fw_name = "dsi0pllbyte" },84	{ .fw_name = "dsi1pllbyte" },85};86 87static const struct pll_vco mmpll_p_vco[] = {88	{ 250000000, 500000000, 3 },89	{ 500000000, 1000000000, 2 },90	{ 1000000000, 1500000000, 1 },91	{ 1500000000, 2000000000, 0 },92};93 94static const struct pll_vco mmpll_t_vco[] = {95	{ 500000000, 1500000000, 0 },96};97 98static const struct alpha_pll_config mmpll_p_config = {99	.post_div_mask = 0xf00,100};101 102static struct clk_alpha_pll mmpll0_early = {103	.offset = 0x0,104	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],105	.vco_table = mmpll_p_vco,106	.num_vco = ARRAY_SIZE(mmpll_p_vco),107	.clkr = {108		.enable_reg = 0x100,109		.enable_mask = BIT(0),110		.hw.init = &(struct clk_init_data){111			.name = "mmpll0_early",112			.parent_data = &(const struct clk_parent_data){113				.fw_name = "xo",114			},115			.num_parents = 1,116			.ops = &clk_alpha_pll_ops,117		},118	},119};120 121static struct clk_alpha_pll_postdiv mmpll0 = {122	.offset = 0x0,123	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],124	.width = 4,125	.clkr.hw.init = &(struct clk_init_data){126		.name = "mmpll0",127		.parent_hws = (const struct clk_hw *[]){ &mmpll0_early.clkr.hw },128		.num_parents = 1,129		.ops = &clk_alpha_pll_postdiv_ops,130		.flags = CLK_SET_RATE_PARENT,131	},132};133 134static struct clk_alpha_pll mmpll1_early = {135	.offset = 0x30,136	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],137	.vco_table = mmpll_p_vco,138	.num_vco = ARRAY_SIZE(mmpll_p_vco),139	.clkr = {140		.enable_reg = 0x100,141		.enable_mask = BIT(1),142		.hw.init = &(struct clk_init_data){143			.name = "mmpll1_early",144			.parent_data = &(const struct clk_parent_data){145				.fw_name = "xo",146			},147			.num_parents = 1,148			.ops = &clk_alpha_pll_ops,149		}150	},151};152 153static struct clk_alpha_pll_postdiv mmpll1 = {154	.offset = 0x30,155	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],156	.width = 4,157	.clkr.hw.init = &(struct clk_init_data){158		.name = "mmpll1",159		.parent_hws = (const struct clk_hw *[]){ &mmpll1_early.clkr.hw },160		.num_parents = 1,161		.ops = &clk_alpha_pll_postdiv_ops,162		.flags = CLK_SET_RATE_PARENT,163	},164};165 166static struct clk_alpha_pll mmpll3_early = {167	.offset = 0x60,168	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],169	.vco_table = mmpll_p_vco,170	.num_vco = ARRAY_SIZE(mmpll_p_vco),171	.clkr.hw.init = &(struct clk_init_data){172		.name = "mmpll3_early",173		.parent_data = &(const struct clk_parent_data){174				.fw_name = "xo",175		},176		.num_parents = 1,177		.ops = &clk_alpha_pll_ops,178	},179};180 181static struct clk_alpha_pll_postdiv mmpll3 = {182	.offset = 0x60,183	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],184	.width = 4,185	.clkr.hw.init = &(struct clk_init_data){186		.name = "mmpll3",187		.parent_hws = (const struct clk_hw *[]){ &mmpll3_early.clkr.hw },188		.num_parents = 1,189		.ops = &clk_alpha_pll_postdiv_ops,190		.flags = CLK_SET_RATE_PARENT,191	},192};193 194static struct clk_alpha_pll mmpll4_early = {195	.offset = 0x90,196	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],197	.vco_table = mmpll_t_vco,198	.num_vco = ARRAY_SIZE(mmpll_t_vco),199	.clkr.hw.init = &(struct clk_init_data){200		.name = "mmpll4_early",201		.parent_data = &(const struct clk_parent_data){202				.fw_name = "xo",203		},204		.num_parents = 1,205		.ops = &clk_alpha_pll_ops,206	},207};208 209static struct clk_alpha_pll_postdiv mmpll4 = {210	.offset = 0x90,211	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],212	.width = 2,213	.clkr.hw.init = &(struct clk_init_data){214		.name = "mmpll4",215		.parent_hws = (const struct clk_hw *[]){ &mmpll4_early.clkr.hw },216		.num_parents = 1,217		.ops = &clk_alpha_pll_postdiv_ops,218		.flags = CLK_SET_RATE_PARENT,219	},220};221 222static const struct parent_map mmcc_xo_gpll0_mmpll1_map[] = {223	{ P_XO, 0 },224	{ P_GPLL0, 5 },225	{ P_MMPLL1, 2 }226};227 228static const struct clk_parent_data mmcc_xo_gpll0_mmpll1[] = {229	{ .fw_name = "xo" },230	{ .fw_name = "gpll0" },231	{ .hw = &mmpll1.clkr.hw },232};233 234static const struct parent_map mmcc_xo_gpll0_mmpll0_map[] = {235	{ P_XO, 0 },236	{ P_GPLL0, 5 },237	{ P_MMPLL0, 1 }238};239 240static const struct clk_parent_data mmcc_xo_gpll0_mmpll0[] = {241	{ .fw_name = "xo" },242	{ .fw_name = "gpll0" },243	{ .hw = &mmpll0.clkr.hw },244};245 246static const struct parent_map mmcc_xo_gpll0_mmpll0_mmpll3_map[] = {247	{ P_XO, 0 },248	{ P_GPLL0, 5 },249	{ P_MMPLL0, 1 },250	{ P_MMPLL3, 3 }251};252 253static const struct clk_parent_data mmcc_xo_gpll0_mmpll0_mmpll3[] = {254	{ .fw_name = "xo" },255	{ .fw_name = "gpll0" },256	{ .hw = &mmpll0.clkr.hw },257	{ .hw = &mmpll3.clkr.hw },258};259 260static const struct parent_map mmcc_xo_gpll0_mmpll0_mmpll4_map[] = {261	{ P_XO, 0 },262	{ P_GPLL0, 5 },263	{ P_MMPLL0, 1 },264	{ P_MMPLL4, 3 }265};266 267static const struct clk_parent_data mmcc_xo_gpll0_mmpll0_mmpll4[] = {268	{ .fw_name = "xo" },269	{ .fw_name = "gpll0" },270	{ .hw = &mmpll0.clkr.hw },271	{ .hw = &mmpll4.clkr.hw },272};273 274static struct clk_alpha_pll mmpll5_early = {275	.offset = 0xc0,276	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],277	.vco_table = mmpll_p_vco,278	.num_vco = ARRAY_SIZE(mmpll_p_vco),279	.clkr.hw.init = &(struct clk_init_data){280		.name = "mmpll5_early",281		.parent_data = &(const struct clk_parent_data){282				.fw_name = "xo",283		},284		.num_parents = 1,285		.ops = &clk_alpha_pll_ops,286	},287};288 289static struct clk_alpha_pll_postdiv mmpll5 = {290	.offset = 0xc0,291	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],292	.width = 4,293	.clkr.hw.init = &(struct clk_init_data){294		.name = "mmpll5",295		.parent_hws = (const struct clk_hw *[]){ &mmpll5_early.clkr.hw },296		.num_parents = 1,297		.ops = &clk_alpha_pll_postdiv_ops,298		.flags = CLK_SET_RATE_PARENT,299	},300};301 302static const struct freq_tbl ftbl_ahb_clk_src[] = {303	/* Note: There might be more frequencies desired here. */304	F(19200000, P_XO, 1, 0, 0),305	F(40000000, P_GPLL0, 15, 0, 0),306	F(80000000, P_MMPLL0, 10, 0, 0),307	{ }308};309 310static struct clk_rcg2 ahb_clk_src = {311	.cmd_rcgr = 0x5000,312	.hid_width = 5,313	.parent_map = mmcc_xo_gpll0_mmpll0_map,314	.freq_tbl = ftbl_ahb_clk_src,315	.clkr.hw.init = &(struct clk_init_data){316		.name = "ahb_clk_src",317		.parent_data = mmcc_xo_gpll0_mmpll0,318		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),319		.ops = &clk_rcg2_ops,320	},321};322 323static const struct freq_tbl ftbl_axi_clk_src[] = {324	F(75000000, P_GPLL0, 8, 0, 0),325	F(150000000, P_GPLL0, 4, 0, 0),326	F(333430000, P_MMPLL1, 3.5, 0, 0),327	F(466800000, P_MMPLL1, 2.5, 0, 0),328	{ }329};330 331static const struct freq_tbl ftbl_axi_clk_src_8992[] = {332	F(75000000, P_GPLL0, 8, 0, 0),333	F(150000000, P_GPLL0, 4, 0, 0),334	F(300000000, P_GPLL0, 2, 0, 0),335	F(404000000, P_MMPLL1, 2, 0, 0),336	{ }337};338 339static struct clk_rcg2 axi_clk_src = {340	.cmd_rcgr = 0x5040,341	.hid_width = 5,342	.parent_map = mmcc_xo_gpll0_mmpll1_map,343	.freq_tbl = ftbl_axi_clk_src,344	.clkr.hw.init = &(struct clk_init_data){345		.name = "axi_clk_src",346		.parent_data = mmcc_xo_gpll0_mmpll1,347		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll1),348		.ops = &clk_rcg2_ops,349	},350};351 352static const struct freq_tbl ftbl_csi0_1_2_3_clk_src[] = {353	F(100000000, P_GPLL0, 6, 0, 0),354	F(240000000, P_GPLL0, 2.5, 0, 0),355	F(266670000, P_MMPLL0, 3, 0, 0),356	{ }357};358 359static const struct freq_tbl ftbl_csi0_1_2_3_clk_src_8992[] = {360	F(100000000, P_GPLL0, 6, 0, 0),361	F(266670000, P_MMPLL0, 3, 0, 0),362	{ }363};364 365static struct clk_rcg2 csi0_clk_src = {366	.cmd_rcgr = 0x3090,367	.hid_width = 5,368	.parent_map = mmcc_xo_gpll0_mmpll0_map,369	.freq_tbl = ftbl_csi0_1_2_3_clk_src,370	.clkr.hw.init = &(struct clk_init_data){371		.name = "csi0_clk_src",372		.parent_data = mmcc_xo_gpll0_mmpll0,373		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),374		.ops = &clk_rcg2_ops,375	},376};377 378static const struct freq_tbl ftbl_vcodec0_clk_src[] = {379	F(66670000, P_GPLL0, 9, 0, 0),380	F(100000000, P_GPLL0, 6, 0, 0),381	F(133330000, P_GPLL0, 4.5, 0, 0),382	F(150000000, P_GPLL0, 4, 0, 0),383	F(200000000, P_MMPLL0, 4, 0, 0),384	F(240000000, P_GPLL0, 2.5, 0, 0),385	F(266670000, P_MMPLL0, 3, 0, 0),386	F(320000000, P_MMPLL0, 2.5, 0, 0),387	F(510000000, P_MMPLL3, 2, 0, 0),388	{ }389};390 391static const struct freq_tbl ftbl_vcodec0_clk_src_8992[] = {392	F(66670000, P_GPLL0, 9, 0, 0),393	F(100000000, P_GPLL0, 6, 0, 0),394	F(133330000, P_GPLL0, 4.5, 0, 0),395	F(200000000, P_MMPLL0, 4, 0, 0),396	F(320000000, P_MMPLL0, 2.5, 0, 0),397	F(510000000, P_MMPLL3, 2, 0, 0),398	{ }399};400 401static struct clk_rcg2 vcodec0_clk_src = {402	.cmd_rcgr = 0x1000,403	.mnd_width = 8,404	.hid_width = 5,405	.parent_map = mmcc_xo_gpll0_mmpll0_mmpll3_map,406	.freq_tbl = ftbl_vcodec0_clk_src,407	.clkr.hw.init = &(struct clk_init_data){408		.name = "vcodec0_clk_src",409		.parent_data = mmcc_xo_gpll0_mmpll0_mmpll3,410		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll3),411		.ops = &clk_rcg2_ops,412	},413};414 415static struct clk_rcg2 csi1_clk_src = {416	.cmd_rcgr = 0x3100,417	.hid_width = 5,418	.parent_map = mmcc_xo_gpll0_mmpll0_map,419	.freq_tbl = ftbl_csi0_1_2_3_clk_src,420	.clkr.hw.init = &(struct clk_init_data){421		.name = "csi1_clk_src",422		.parent_data = mmcc_xo_gpll0_mmpll0,423		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),424		.ops = &clk_rcg2_ops,425	},426};427 428static struct clk_rcg2 csi2_clk_src = {429	.cmd_rcgr = 0x3160,430	.hid_width = 5,431	.parent_map = mmcc_xo_gpll0_mmpll0_map,432	.freq_tbl = ftbl_csi0_1_2_3_clk_src,433	.clkr.hw.init = &(struct clk_init_data){434		.name = "csi2_clk_src",435		.parent_data = mmcc_xo_gpll0_mmpll0,436		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),437		.ops = &clk_rcg2_ops,438	},439};440 441static struct clk_rcg2 csi3_clk_src = {442	.cmd_rcgr = 0x31c0,443	.hid_width = 5,444	.parent_map = mmcc_xo_gpll0_mmpll0_map,445	.freq_tbl = ftbl_csi0_1_2_3_clk_src,446	.clkr.hw.init = &(struct clk_init_data){447		.name = "csi3_clk_src",448		.parent_data = mmcc_xo_gpll0_mmpll0,449		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),450		.ops = &clk_rcg2_ops,451	},452};453 454static const struct freq_tbl ftbl_vfe0_clk_src[] = {455	F(80000000, P_GPLL0, 7.5, 0, 0),456	F(100000000, P_GPLL0, 6, 0, 0),457	F(200000000, P_GPLL0, 3, 0, 0),458	F(320000000, P_MMPLL0, 2.5, 0, 0),459	F(400000000, P_MMPLL0, 2, 0, 0),460	F(480000000, P_MMPLL4, 2, 0, 0),461	F(533330000, P_MMPLL0, 1.5, 0, 0),462	F(600000000, P_GPLL0, 1, 0, 0),463	{ }464};465 466static const struct freq_tbl ftbl_vfe0_1_clk_src_8992[] = {467	F(80000000, P_GPLL0, 7.5, 0, 0),468	F(100000000, P_GPLL0, 6, 0, 0),469	F(200000000, P_GPLL0, 3, 0, 0),470	F(320000000, P_MMPLL0, 2.5, 0, 0),471	F(480000000, P_MMPLL4, 2, 0, 0),472	F(600000000, P_GPLL0, 1, 0, 0),473	{ }474};475 476static struct clk_rcg2 vfe0_clk_src = {477	.cmd_rcgr = 0x3600,478	.hid_width = 5,479	.parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map,480	.freq_tbl = ftbl_vfe0_clk_src,481	.clkr.hw.init = &(struct clk_init_data){482		.name = "vfe0_clk_src",483		.parent_data = mmcc_xo_gpll0_mmpll0_mmpll4,484		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4),485		.ops = &clk_rcg2_ops,486	},487};488 489static const struct freq_tbl ftbl_vfe1_clk_src[] = {490	F(80000000, P_GPLL0, 7.5, 0, 0),491	F(100000000, P_GPLL0, 6, 0, 0),492	F(200000000, P_GPLL0, 3, 0, 0),493	F(320000000, P_MMPLL0, 2.5, 0, 0),494	F(400000000, P_MMPLL0, 2, 0, 0),495	F(533330000, P_MMPLL0, 1.5, 0, 0),496	{ }497};498 499static struct clk_rcg2 vfe1_clk_src = {500	.cmd_rcgr = 0x3620,501	.hid_width = 5,502	.parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map,503	.freq_tbl = ftbl_vfe1_clk_src,504	.clkr.hw.init = &(struct clk_init_data){505		.name = "vfe1_clk_src",506		.parent_data = mmcc_xo_gpll0_mmpll0_mmpll4,507		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4),508		.ops = &clk_rcg2_ops,509	},510};511 512static const struct freq_tbl ftbl_cpp_clk_src[] = {513	F(100000000, P_GPLL0, 6, 0, 0),514	F(200000000, P_GPLL0, 3, 0, 0),515	F(320000000, P_MMPLL0, 2.5, 0, 0),516	F(480000000, P_MMPLL4, 2, 0, 0),517	F(600000000, P_GPLL0, 1, 0, 0),518	F(640000000, P_MMPLL4, 1.5, 0, 0),519	{ }520};521 522static const struct freq_tbl ftbl_cpp_clk_src_8992[] = {523	F(100000000, P_GPLL0, 6, 0, 0),524	F(200000000, P_GPLL0, 3, 0, 0),525	F(320000000, P_MMPLL0, 2.5, 0, 0),526	F(480000000, P_MMPLL4, 2, 0, 0),527	F(640000000, P_MMPLL4, 1.5, 0, 0),528	{ }529};530 531static struct clk_rcg2 cpp_clk_src = {532	.cmd_rcgr = 0x3640,533	.hid_width = 5,534	.parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map,535	.freq_tbl = ftbl_cpp_clk_src,536	.clkr.hw.init = &(struct clk_init_data){537		.name = "cpp_clk_src",538		.parent_data = mmcc_xo_gpll0_mmpll0_mmpll4,539		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4),540		.ops = &clk_rcg2_ops,541	},542};543 544static const struct freq_tbl ftbl_jpeg0_1_clk_src[] = {545	F(75000000, P_GPLL0, 8, 0, 0),546	F(150000000, P_GPLL0, 4, 0, 0),547	F(228570000, P_MMPLL0, 3.5, 0, 0),548	F(266670000, P_MMPLL0, 3, 0, 0),549	F(320000000, P_MMPLL0, 2.5, 0, 0),550	F(480000000, P_MMPLL4, 2, 0, 0),551	{ }552};553 554static struct clk_rcg2 jpeg1_clk_src = {555	.cmd_rcgr = 0x3520,556	.hid_width = 5,557	.parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map,558	.freq_tbl = ftbl_jpeg0_1_clk_src,559	.clkr.hw.init = &(struct clk_init_data){560		.name = "jpeg1_clk_src",561		.parent_data = mmcc_xo_gpll0_mmpll0_mmpll4,562		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4),563		.ops = &clk_rcg2_ops,564	},565};566 567static const struct freq_tbl ftbl_jpeg2_clk_src[] = {568	F(75000000, P_GPLL0, 8, 0, 0),569	F(133330000, P_GPLL0, 4.5, 0, 0),570	F(150000000, P_GPLL0, 4, 0, 0),571	F(228570000, P_MMPLL0, 3.5, 0, 0),572	F(266670000, P_MMPLL0, 3, 0, 0),573	F(320000000, P_MMPLL0, 2.5, 0, 0),574	{ }575};576 577static struct clk_rcg2 jpeg2_clk_src = {578	.cmd_rcgr = 0x3540,579	.hid_width = 5,580	.parent_map = mmcc_xo_gpll0_mmpll0_map,581	.freq_tbl = ftbl_jpeg2_clk_src,582	.clkr.hw.init = &(struct clk_init_data){583		.name = "jpeg2_clk_src",584		.parent_data = mmcc_xo_gpll0_mmpll0,585		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),586		.ops = &clk_rcg2_ops,587	},588};589 590static const struct freq_tbl ftbl_csi2phytimer_clk_src[] = {591	F(50000000, P_GPLL0, 12, 0, 0),592	F(100000000, P_GPLL0, 6, 0, 0),593	F(200000000, P_MMPLL0, 4, 0, 0),594	{ }595};596 597static struct clk_rcg2 csi2phytimer_clk_src = {598	.cmd_rcgr = 0x3060,599	.hid_width = 5,600	.parent_map = mmcc_xo_gpll0_mmpll0_map,601	.freq_tbl = ftbl_csi2phytimer_clk_src,602	.clkr.hw.init = &(struct clk_init_data){603		.name = "csi2phytimer_clk_src",604		.parent_data = mmcc_xo_gpll0_mmpll0,605		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),606		.ops = &clk_rcg2_ops,607	},608};609 610static const struct freq_tbl ftbl_fd_core_clk_src[] = {611	F(60000000, P_GPLL0, 10, 0, 0),612	F(200000000, P_GPLL0, 3, 0, 0),613	F(320000000, P_MMPLL0, 2.5, 0, 0),614	F(400000000, P_MMPLL0, 2, 0, 0),615	{ }616};617 618static struct clk_rcg2 fd_core_clk_src = {619	.cmd_rcgr = 0x3b00,620	.hid_width = 5,621	.parent_map = mmcc_xo_gpll0_mmpll0_map,622	.freq_tbl = ftbl_fd_core_clk_src,623	.clkr.hw.init = &(struct clk_init_data){624		.name = "fd_core_clk_src",625		.parent_data = mmcc_xo_gpll0_mmpll0,626		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),627		.ops = &clk_rcg2_ops,628	},629};630 631static const struct freq_tbl ftbl_mdp_clk_src[] = {632	F(85710000, P_GPLL0, 7, 0, 0),633	F(100000000, P_GPLL0, 6, 0, 0),634	F(120000000, P_GPLL0, 5, 0, 0),635	F(150000000, P_GPLL0, 4, 0, 0),636	F(171430000, P_GPLL0, 3.5, 0, 0),637	F(200000000, P_GPLL0, 3, 0, 0),638	F(240000000, P_GPLL0, 2.5, 0, 0),639	F(266670000, P_MMPLL0, 3, 0, 0),640	F(300000000, P_GPLL0, 2, 0, 0),641	F(320000000, P_MMPLL0, 2.5, 0, 0),642	F(400000000, P_MMPLL0, 2, 0, 0),643	{ }644};645 646static const struct freq_tbl ftbl_mdp_clk_src_8992[] = {647	F(85710000, P_GPLL0, 7, 0, 0),648	F(171430000, P_GPLL0, 3.5, 0, 0),649	F(200000000, P_GPLL0, 3, 0, 0),650	F(240000000, P_GPLL0, 2.5, 0, 0),651	F(266670000, P_MMPLL0, 3, 0, 0),652	F(320000000, P_MMPLL0, 2.5, 0, 0),653	F(400000000, P_MMPLL0, 2, 0, 0),654	{ }655};656 657static struct clk_rcg2 mdp_clk_src = {658	.cmd_rcgr = 0x2040,659	.hid_width = 5,660	.parent_map = mmcc_xo_gpll0_mmpll0_map,661	.freq_tbl = ftbl_mdp_clk_src,662	.clkr.hw.init = &(struct clk_init_data){663		.name = "mdp_clk_src",664		.parent_data = mmcc_xo_gpll0_mmpll0,665		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),666		.ops = &clk_rcg2_ops,667	},668};669 670static struct clk_rcg2 pclk0_clk_src = {671	.cmd_rcgr = 0x2000,672	.mnd_width = 8,673	.hid_width = 5,674	.parent_map = mmcc_xo_dsi0pll_dsi1pll_map,675	.clkr.hw.init = &(struct clk_init_data){676		.name = "pclk0_clk_src",677		.parent_data = mmcc_xo_dsi0pll_dsi1pll,678		.num_parents = ARRAY_SIZE(mmcc_xo_dsi0pll_dsi1pll),679		.ops = &clk_pixel_ops,680		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,681	},682};683 684static struct clk_rcg2 pclk1_clk_src = {685	.cmd_rcgr = 0x2020,686	.mnd_width = 8,687	.hid_width = 5,688	.parent_map = mmcc_xo_dsi0pll_dsi1pll_map,689	.clkr.hw.init = &(struct clk_init_data){690		.name = "pclk1_clk_src",691		.parent_data = mmcc_xo_dsi0pll_dsi1pll,692		.num_parents = ARRAY_SIZE(mmcc_xo_dsi0pll_dsi1pll),693		.ops = &clk_pixel_ops,694		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,695	},696};697 698static const struct freq_tbl ftbl_ocmemnoc_clk_src[] = {699	F(19200000, P_XO, 1, 0, 0),700	F(75000000, P_GPLL0, 8, 0, 0),701	F(100000000, P_GPLL0, 6, 0, 0),702	F(150000000, P_GPLL0, 4, 0, 0),703	F(228570000, P_MMPLL0, 3.5, 0, 0),704	F(266670000, P_MMPLL0, 3, 0, 0),705	F(320000000, P_MMPLL0, 2.5, 0, 0),706	F(400000000, P_MMPLL0, 2, 0, 0),707	{ }708};709 710static const struct freq_tbl ftbl_ocmemnoc_clk_src_8992[] = {711	F(19200000, P_XO, 1, 0, 0),712	F(75000000, P_GPLL0, 8, 0, 0),713	F(100000000, P_GPLL0, 6, 0, 0),714	F(150000000, P_GPLL0, 4, 0, 0),715	F(320000000, P_MMPLL0, 2.5, 0, 0),716	F(400000000, P_MMPLL0, 2, 0, 0),717	{ }718};719 720static struct clk_rcg2 ocmemnoc_clk_src = {721	.cmd_rcgr = 0x5090,722	.hid_width = 5,723	.parent_map = mmcc_xo_gpll0_mmpll0_map,724	.freq_tbl = ftbl_ocmemnoc_clk_src,725	.clkr.hw.init = &(struct clk_init_data){726		.name = "ocmemnoc_clk_src",727		.parent_data = mmcc_xo_gpll0_mmpll0,728		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),729		.ops = &clk_rcg2_ops,730	},731};732 733static const struct freq_tbl ftbl_cci_clk_src[] = {734	F(19200000, P_XO, 1, 0, 0),735	F(37500000, P_GPLL0, 16, 0, 0),736	F(50000000, P_GPLL0, 12, 0, 0),737	F(100000000, P_GPLL0, 6, 0, 0),738	{ }739};740 741static struct clk_rcg2 cci_clk_src = {742	.cmd_rcgr = 0x3300,743	.mnd_width = 8,744	.hid_width = 5,745	.parent_map = mmcc_xo_gpll0_map,746	.freq_tbl = ftbl_cci_clk_src,747	.clkr.hw.init = &(struct clk_init_data){748		.name = "cci_clk_src",749		.parent_data = mmcc_xo_gpll0,750		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0),751		.ops = &clk_rcg2_ops,752	},753};754 755static const struct freq_tbl ftbl_mmss_gp0_1_clk_src[] = {756	F(10000, P_XO, 16, 10, 120),757	F(24000, P_GPLL0, 16, 1, 50),758	F(6000000, P_GPLL0, 10, 1, 10),759	F(12000000, P_GPLL0, 10, 1, 5),760	F(13000000, P_GPLL0, 4, 13, 150),761	F(24000000, P_GPLL0, 5, 1, 5),762	{ }763};764 765static struct clk_rcg2 mmss_gp0_clk_src = {766	.cmd_rcgr = 0x3420,767	.mnd_width = 8,768	.hid_width = 5,769	.parent_map = mmcc_xo_gpll0_map,770	.freq_tbl = ftbl_mmss_gp0_1_clk_src,771	.clkr.hw.init = &(struct clk_init_data){772		.name = "mmss_gp0_clk_src",773		.parent_data = mmcc_xo_gpll0,774		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0),775		.ops = &clk_rcg2_ops,776	},777};778 779static struct clk_rcg2 mmss_gp1_clk_src = {780	.cmd_rcgr = 0x3450,781	.mnd_width = 8,782	.hid_width = 5,783	.parent_map = mmcc_xo_gpll0_map,784	.freq_tbl = ftbl_mmss_gp0_1_clk_src,785	.clkr.hw.init = &(struct clk_init_data){786		.name = "mmss_gp1_clk_src",787		.parent_data = mmcc_xo_gpll0,788		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0),789		.ops = &clk_rcg2_ops,790	},791};792 793static struct clk_rcg2 jpeg0_clk_src = {794	.cmd_rcgr = 0x3500,795	.hid_width = 5,796	.parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map,797	.freq_tbl = ftbl_jpeg0_1_clk_src,798	.clkr.hw.init = &(struct clk_init_data){799		.name = "jpeg0_clk_src",800		.parent_data = mmcc_xo_gpll0_mmpll0_mmpll4,801		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4),802		.ops = &clk_rcg2_ops,803	},804};805 806static struct clk_rcg2 jpeg_dma_clk_src = {807	.cmd_rcgr = 0x3560,808	.hid_width = 5,809	.parent_map = mmcc_xo_gpll0_mmpll0_mmpll4_map,810	.freq_tbl = ftbl_jpeg0_1_clk_src,811	.clkr.hw.init = &(struct clk_init_data){812		.name = "jpeg_dma_clk_src",813		.parent_data = mmcc_xo_gpll0_mmpll0_mmpll4,814		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0_mmpll4),815		.ops = &clk_rcg2_ops,816	},817};818 819static const struct freq_tbl ftbl_mclk0_1_2_3_clk_src[] = {820	F(4800000, P_XO, 4, 0, 0),821	F(6000000, P_GPLL0, 10, 1, 10),822	F(8000000, P_GPLL0, 15, 1, 5),823	F(9600000, P_XO, 2, 0, 0),824	F(16000000, P_MMPLL0, 10, 1, 5),825	F(19200000, P_XO, 1, 0, 0),826	F(24000000, P_GPLL0, 5, 1, 5),827	F(32000000, P_MMPLL0, 5, 1, 5),828	F(48000000, P_GPLL0, 12.5, 0, 0),829	F(64000000, P_MMPLL0, 12.5, 0, 0),830	{ }831};832 833static const struct freq_tbl ftbl_mclk0_clk_src_8992[] = {834	F(4800000, P_XO, 4, 0, 0),835	F(6000000, P_MMPLL4, 10, 1, 16),836	F(8000000, P_MMPLL4, 10, 1, 12),837	F(9600000, P_XO, 2, 0, 0),838	F(12000000, P_MMPLL4, 10, 1, 8),839	F(16000000, P_MMPLL4, 10, 1, 6),840	F(19200000, P_XO, 1, 0, 0),841	F(24000000, P_MMPLL4, 10, 1, 4),842	F(32000000, P_MMPLL4, 10, 1, 3),843	F(48000000, P_MMPLL4, 10, 1, 2),844	F(64000000, P_MMPLL4, 15, 0, 0),845	{ }846};847 848static const struct freq_tbl ftbl_mclk1_2_3_clk_src_8992[] = {849	F(4800000, P_XO, 4, 0, 0),850	F(6000000, P_MMPLL4, 10, 1, 16),851	F(8000000, P_MMPLL4, 10, 1, 12),852	F(9600000, P_XO, 2, 0, 0),853	F(16000000, P_MMPLL4, 10, 1, 6),854	F(19200000, P_XO, 1, 0, 0),855	F(24000000, P_MMPLL4, 10, 1, 4),856	F(32000000, P_MMPLL4, 10, 1, 3),857	F(48000000, P_MMPLL4, 10, 1, 2),858	F(64000000, P_MMPLL4, 15, 0, 0),859	{ }860};861 862static struct clk_rcg2 mclk0_clk_src = {863	.cmd_rcgr = 0x3360,864	.mnd_width = 8,865	.hid_width = 5,866	.parent_map = mmcc_xo_gpll0_mmpll0_map,867	.freq_tbl = ftbl_mclk0_1_2_3_clk_src,868	.clkr.hw.init = &(struct clk_init_data){869		.name = "mclk0_clk_src",870		.parent_data = mmcc_xo_gpll0_mmpll0,871		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),872		.ops = &clk_rcg2_ops,873	},874};875 876static struct clk_rcg2 mclk1_clk_src = {877	.cmd_rcgr = 0x3390,878	.mnd_width = 8,879	.hid_width = 5,880	.parent_map = mmcc_xo_gpll0_mmpll0_map,881	.freq_tbl = ftbl_mclk0_1_2_3_clk_src,882	.clkr.hw.init = &(struct clk_init_data){883		.name = "mclk1_clk_src",884		.parent_data = mmcc_xo_gpll0_mmpll0,885		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),886		.ops = &clk_rcg2_ops,887	},888};889 890static struct clk_rcg2 mclk2_clk_src = {891	.cmd_rcgr = 0x33c0,892	.mnd_width = 8,893	.hid_width = 5,894	.parent_map = mmcc_xo_gpll0_mmpll0_map,895	.freq_tbl = ftbl_mclk0_1_2_3_clk_src,896	.clkr.hw.init = &(struct clk_init_data){897		.name = "mclk2_clk_src",898		.parent_data = mmcc_xo_gpll0_mmpll0,899		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),900		.ops = &clk_rcg2_ops,901	},902};903 904static struct clk_rcg2 mclk3_clk_src = {905	.cmd_rcgr = 0x33f0,906	.mnd_width = 8,907	.hid_width = 5,908	.parent_map = mmcc_xo_gpll0_mmpll0_map,909	.freq_tbl = ftbl_mclk0_1_2_3_clk_src,910	.clkr.hw.init = &(struct clk_init_data){911		.name = "mclk3_clk_src",912		.parent_data = mmcc_xo_gpll0_mmpll0,913		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),914		.ops = &clk_rcg2_ops,915	},916};917 918static const struct freq_tbl ftbl_csi0_1phytimer_clk_src[] = {919	F(50000000, P_GPLL0, 12, 0, 0),920	F(100000000, P_GPLL0, 6, 0, 0),921	F(200000000, P_MMPLL0, 4, 0, 0),922	{ }923};924 925static struct clk_rcg2 csi0phytimer_clk_src = {926	.cmd_rcgr = 0x3000,927	.hid_width = 5,928	.parent_map = mmcc_xo_gpll0_mmpll0_map,929	.freq_tbl = ftbl_csi0_1phytimer_clk_src,930	.clkr.hw.init = &(struct clk_init_data){931		.name = "csi0phytimer_clk_src",932		.parent_data = mmcc_xo_gpll0_mmpll0,933		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),934		.ops = &clk_rcg2_ops,935	},936};937 938static struct clk_rcg2 csi1phytimer_clk_src = {939	.cmd_rcgr = 0x3030,940	.hid_width = 5,941	.parent_map = mmcc_xo_gpll0_mmpll0_map,942	.freq_tbl = ftbl_csi0_1phytimer_clk_src,943	.clkr.hw.init = &(struct clk_init_data){944		.name = "csi1phytimer_clk_src",945		.parent_data = mmcc_xo_gpll0_mmpll0,946		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0_mmpll0),947		.ops = &clk_rcg2_ops,948	},949};950 951static struct clk_rcg2 byte0_clk_src = {952	.cmd_rcgr = 0x2120,953	.hid_width = 5,954	.parent_map = mmcc_xo_dsibyte_map,955	.clkr.hw.init = &(struct clk_init_data){956		.name = "byte0_clk_src",957		.parent_data = mmcc_xo_dsibyte,958		.num_parents = ARRAY_SIZE(mmcc_xo_dsibyte),959		.ops = &clk_byte2_ops,960		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,961	},962};963 964static struct clk_rcg2 byte1_clk_src = {965	.cmd_rcgr = 0x2140,966	.hid_width = 5,967	.parent_map = mmcc_xo_dsibyte_map,968	.clkr.hw.init = &(struct clk_init_data){969		.name = "byte1_clk_src",970		.parent_data = mmcc_xo_dsibyte,971		.num_parents = ARRAY_SIZE(mmcc_xo_dsibyte),972		.ops = &clk_byte2_ops,973		.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,974	},975};976 977static const struct freq_tbl ftbl_mdss_esc0_1_clk[] = {978	F(19200000, P_XO, 1, 0, 0),979	{ }980};981 982static struct clk_rcg2 esc0_clk_src = {983	.cmd_rcgr = 0x2160,984	.hid_width = 5,985	.parent_map = mmcc_xo_dsibyte_map,986	.freq_tbl = ftbl_mdss_esc0_1_clk,987	.clkr.hw.init = &(struct clk_init_data){988		.name = "esc0_clk_src",989		.parent_data = mmcc_xo_dsibyte,990		.num_parents = ARRAY_SIZE(mmcc_xo_dsibyte),991		.ops = &clk_rcg2_ops,992	},993};994 995static struct clk_rcg2 esc1_clk_src = {996	.cmd_rcgr = 0x2180,997	.hid_width = 5,998	.parent_map = mmcc_xo_dsibyte_map,999	.freq_tbl = ftbl_mdss_esc0_1_clk,1000	.clkr.hw.init = &(struct clk_init_data){1001		.name = "esc1_clk_src",1002		.parent_data = mmcc_xo_dsibyte,1003		.num_parents = ARRAY_SIZE(mmcc_xo_dsibyte),1004		.ops = &clk_rcg2_ops,1005	},1006};1007 1008static const struct freq_tbl extpclk_freq_tbl[] = {1009	{ .src = P_HDMIPLL },1010	{ }1011};1012 1013static struct clk_rcg2 extpclk_clk_src = {1014	.cmd_rcgr = 0x2060,1015	.hid_width = 5,1016	.parent_map = mmss_xo_hdmi_map,1017	.freq_tbl = extpclk_freq_tbl,1018	.clkr.hw.init = &(struct clk_init_data){1019		.name = "extpclk_clk_src",1020		.parent_data = mmss_xo_hdmi,1021		.num_parents = ARRAY_SIZE(mmss_xo_hdmi),1022		.ops = &clk_rcg2_ops,1023		.flags = CLK_SET_RATE_PARENT,1024	},1025};1026 1027static const struct freq_tbl ftbl_hdmi_clk_src[] = {1028	F(19200000, P_XO, 1, 0, 0),1029	{ }1030};1031 1032static struct clk_rcg2 hdmi_clk_src = {1033	.cmd_rcgr = 0x2100,1034	.hid_width = 5,1035	.parent_map = mmcc_xo_gpll0_map,1036	.freq_tbl = ftbl_hdmi_clk_src,1037	.clkr.hw.init = &(struct clk_init_data){1038		.name = "hdmi_clk_src",1039		.parent_data = mmcc_xo_gpll0,1040		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0),1041		.ops = &clk_rcg2_ops,1042	},1043};1044 1045static const struct freq_tbl ftbl_mdss_vsync_clk[] = {1046	F(19200000, P_XO, 1, 0, 0),1047	{ }1048};1049 1050static struct clk_rcg2 vsync_clk_src = {1051	.cmd_rcgr = 0x2080,1052	.hid_width = 5,1053	.parent_map = mmcc_xo_gpll0_map,1054	.freq_tbl = ftbl_mdss_vsync_clk,1055	.clkr.hw.init = &(struct clk_init_data){1056		.name = "vsync_clk_src",1057		.parent_data = mmcc_xo_gpll0,1058		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0),1059		.ops = &clk_rcg2_ops,1060	},1061};1062 1063static const struct freq_tbl ftbl_rbbmtimer_clk_src[] = {1064	F(19200000, P_XO, 1, 0, 0),1065	{ }1066};1067 1068static struct clk_rcg2 rbbmtimer_clk_src = {1069	.cmd_rcgr = 0x4090,1070	.hid_width = 5,1071	.parent_map = mmcc_xo_gpll0_map,1072	.freq_tbl = ftbl_rbbmtimer_clk_src,1073	.clkr.hw.init = &(struct clk_init_data){1074		.name = "rbbmtimer_clk_src",1075		.parent_data = mmcc_xo_gpll0,1076		.num_parents = ARRAY_SIZE(mmcc_xo_gpll0),1077		.ops = &clk_rcg2_ops,1078	},1079};1080 1081static struct clk_branch camss_ahb_clk = {1082	.halt_reg = 0x348c,1083	.clkr = {1084		.enable_reg = 0x348c,1085		.enable_mask = BIT(0),1086		.hw.init = &(struct clk_init_data){1087			.name = "camss_ahb_clk",1088			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },1089			.num_parents = 1,1090			.flags = CLK_SET_RATE_PARENT,1091			.ops = &clk_branch2_ops,1092		},1093	},1094};1095 1096static struct clk_branch camss_cci_cci_ahb_clk = {1097	.halt_reg = 0x3348,1098	.clkr = {1099		.enable_reg = 0x3348,1100		.enable_mask = BIT(0),1101		.hw.init = &(struct clk_init_data){1102			.name = "camss_cci_cci_ahb_clk",1103			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },1104			.num_parents = 1,1105			.flags = CLK_SET_RATE_PARENT,1106			.ops = &clk_branch2_ops,1107		},1108	},1109};1110 1111static struct clk_branch camss_cci_cci_clk = {1112	.halt_reg = 0x3344,1113	.clkr = {1114		.enable_reg = 0x3344,1115		.enable_mask = BIT(0),1116		.hw.init = &(struct clk_init_data){1117			.name = "camss_cci_cci_clk",1118			.parent_hws = (const struct clk_hw *[]){ &cci_clk_src.clkr.hw },1119			.num_parents = 1,1120			.ops = &clk_branch2_ops,1121		},1122	},1123};1124 1125static struct clk_branch camss_vfe_cpp_ahb_clk = {1126	.halt_reg = 0x36b4,1127	.clkr = {1128		.enable_reg = 0x36b4,1129		.enable_mask = BIT(0),1130		.hw.init = &(struct clk_init_data){1131			.name = "camss_vfe_cpp_ahb_clk",1132			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },1133			.num_parents = 1,1134			.flags = CLK_SET_RATE_PARENT,1135			.ops = &clk_branch2_ops,1136		},1137	},1138};1139 1140static struct clk_branch camss_vfe_cpp_axi_clk = {1141	.halt_reg = 0x36c4,1142	.clkr = {1143		.enable_reg = 0x36c4,1144		.enable_mask = BIT(0),1145		.hw.init = &(struct clk_init_data){1146			.name = "camss_vfe_cpp_axi_clk",1147			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },1148			.num_parents = 1,1149			.ops = &clk_branch2_ops,1150		},1151	},1152};1153 1154static struct clk_branch camss_vfe_cpp_clk = {1155	.halt_reg = 0x36b0,1156	.clkr = {1157		.enable_reg = 0x36b0,1158		.enable_mask = BIT(0),1159		.hw.init = &(struct clk_init_data){1160			.name = "camss_vfe_cpp_clk",1161			.parent_hws = (const struct clk_hw *[]){ &cpp_clk_src.clkr.hw },1162			.num_parents = 1,1163			.ops = &clk_branch2_ops,1164		},1165	},1166};1167 1168static struct clk_branch camss_csi0_ahb_clk = {1169	.halt_reg = 0x30bc,1170	.clkr = {1171		.enable_reg = 0x30bc,1172		.enable_mask = BIT(0),1173		.hw.init = &(struct clk_init_data){1174			.name = "camss_csi0_ahb_clk",1175			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },1176			.num_parents = 1,1177			.flags = CLK_SET_RATE_PARENT,1178			.ops = &clk_branch2_ops,1179		},1180	},1181};1182 1183static struct clk_branch camss_csi0_clk = {1184	.halt_reg = 0x30b4,1185	.clkr = {1186		.enable_reg = 0x30b4,1187		.enable_mask = BIT(0),1188		.hw.init = &(struct clk_init_data){1189			.name = "camss_csi0_clk",1190			.parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw },1191			.num_parents = 1,1192			.ops = &clk_branch2_ops,1193		},1194	},1195};1196 1197static struct clk_branch camss_csi0phy_clk = {1198	.halt_reg = 0x30c4,1199	.clkr = {1200		.enable_reg = 0x30c4,1201		.enable_mask = BIT(0),1202		.hw.init = &(struct clk_init_data){1203			.name = "camss_csi0phy_clk",1204			.parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw },1205			.num_parents = 1,1206			.ops = &clk_branch2_ops,1207		},1208	},1209};1210 1211static struct clk_branch camss_csi0pix_clk = {1212	.halt_reg = 0x30e4,1213	.clkr = {1214		.enable_reg = 0x30e4,1215		.enable_mask = BIT(0),1216		.hw.init = &(struct clk_init_data){1217			.name = "camss_csi0pix_clk",1218			.parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw },1219			.num_parents = 1,1220			.ops = &clk_branch2_ops,1221		},1222	},1223};1224 1225static struct clk_branch camss_csi0rdi_clk = {1226	.halt_reg = 0x30d4,1227	.clkr = {1228		.enable_reg = 0x30d4,1229		.enable_mask = BIT(0),1230		.hw.init = &(struct clk_init_data){1231			.name = "camss_csi0rdi_clk",1232			.parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw },1233			.num_parents = 1,1234			.ops = &clk_branch2_ops,1235		},1236	},1237};1238 1239static struct clk_branch camss_csi1_ahb_clk = {1240	.halt_reg = 0x3128,1241	.clkr = {1242		.enable_reg = 0x3128,1243		.enable_mask = BIT(0),1244		.hw.init = &(struct clk_init_data){1245			.name = "camss_csi1_ahb_clk",1246			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },1247			.num_parents = 1,1248			.flags = CLK_SET_RATE_PARENT,1249			.ops = &clk_branch2_ops,1250		},1251	},1252};1253 1254static struct clk_branch camss_csi1_clk = {1255	.halt_reg = 0x3124,1256	.clkr = {1257		.enable_reg = 0x3124,1258		.enable_mask = BIT(0),1259		.hw.init = &(struct clk_init_data){1260			.name = "camss_csi1_clk",1261			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },1262			.num_parents = 1,1263			.ops = &clk_branch2_ops,1264		},1265	},1266};1267 1268static struct clk_branch camss_csi1phy_clk = {1269	.halt_reg = 0x3134,1270	.clkr = {1271		.enable_reg = 0x3134,1272		.enable_mask = BIT(0),1273		.hw.init = &(struct clk_init_data){1274			.name = "camss_csi1phy_clk",1275			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },1276			.num_parents = 1,1277			.ops = &clk_branch2_ops,1278		},1279	},1280};1281 1282static struct clk_branch camss_csi1pix_clk = {1283	.halt_reg = 0x3154,1284	.clkr = {1285		.enable_reg = 0x3154,1286		.enable_mask = BIT(0),1287		.hw.init = &(struct clk_init_data){1288			.name = "camss_csi1pix_clk",1289			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },1290			.num_parents = 1,1291			.ops = &clk_branch2_ops,1292		},1293	},1294};1295 1296static struct clk_branch camss_csi1rdi_clk = {1297	.halt_reg = 0x3144,1298	.clkr = {1299		.enable_reg = 0x3144,1300		.enable_mask = BIT(0),1301		.hw.init = &(struct clk_init_data){1302			.name = "camss_csi1rdi_clk",1303			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },1304			.num_parents = 1,1305			.ops = &clk_branch2_ops,1306		},1307	},1308};1309 1310static struct clk_branch camss_csi2_ahb_clk = {1311	.halt_reg = 0x3188,1312	.clkr = {1313		.enable_reg = 0x3188,1314		.enable_mask = BIT(0),1315		.hw.init = &(struct clk_init_data){1316			.name = "camss_csi2_ahb_clk",1317			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },1318			.num_parents = 1,1319			.flags = CLK_SET_RATE_PARENT,1320			.ops = &clk_branch2_ops,1321		},1322	},1323};1324 1325static struct clk_branch camss_csi2_clk = {1326	.halt_reg = 0x3184,1327	.clkr = {1328		.enable_reg = 0x3184,1329		.enable_mask = BIT(0),1330		.hw.init = &(struct clk_init_data){1331			.name = "camss_csi2_clk",1332			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },1333			.num_parents = 1,1334			.ops = &clk_branch2_ops,1335		},1336	},1337};1338 1339static struct clk_branch camss_csi2phy_clk = {1340	.halt_reg = 0x3194,1341	.clkr = {1342		.enable_reg = 0x3194,1343		.enable_mask = BIT(0),1344		.hw.init = &(struct clk_init_data){1345			.name = "camss_csi2phy_clk",1346			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },1347			.num_parents = 1,1348			.ops = &clk_branch2_ops,1349		},1350	},1351};1352 1353static struct clk_branch camss_csi2pix_clk = {1354	.halt_reg = 0x31b4,1355	.clkr = {1356		.enable_reg = 0x31b4,1357		.enable_mask = BIT(0),1358		.hw.init = &(struct clk_init_data){1359			.name = "camss_csi2pix_clk",1360			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },1361			.num_parents = 1,1362			.ops = &clk_branch2_ops,1363		},1364	},1365};1366 1367static struct clk_branch camss_csi2rdi_clk = {1368	.halt_reg = 0x31a4,1369	.clkr = {1370		.enable_reg = 0x31a4,1371		.enable_mask = BIT(0),1372		.hw.init = &(struct clk_init_data){1373			.name = "camss_csi2rdi_clk",1374			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },1375			.num_parents = 1,1376			.ops = &clk_branch2_ops,1377		},1378	},1379};1380 1381static struct clk_branch camss_csi3_ahb_clk = {1382	.halt_reg = 0x31e8,1383	.clkr = {1384		.enable_reg = 0x31e8,1385		.enable_mask = BIT(0),1386		.hw.init = &(struct clk_init_data){1387			.name = "camss_csi3_ahb_clk",1388			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },1389			.num_parents = 1,1390			.flags = CLK_SET_RATE_PARENT,1391			.ops = &clk_branch2_ops,1392		},1393	},1394};1395 1396static struct clk_branch camss_csi3_clk = {1397	.halt_reg = 0x31e4,1398	.clkr = {1399		.enable_reg = 0x31e4,1400		.enable_mask = BIT(0),1401		.hw.init = &(struct clk_init_data){1402			.name = "camss_csi3_clk",1403			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },1404			.num_parents = 1,1405			.ops = &clk_branch2_ops,1406		},1407	},1408};1409 1410static struct clk_branch camss_csi3phy_clk = {1411	.halt_reg = 0x31f4,1412	.clkr = {1413		.enable_reg = 0x31f4,1414		.enable_mask = BIT(0),1415		.hw.init = &(struct clk_init_data){1416			.name = "camss_csi3phy_clk",1417			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },1418			.num_parents = 1,1419			.ops = &clk_branch2_ops,1420		},1421	},1422};1423 1424static struct clk_branch camss_csi3pix_clk = {1425	.halt_reg = 0x3214,1426	.clkr = {1427		.enable_reg = 0x3214,1428		.enable_mask = BIT(0),1429		.hw.init = &(struct clk_init_data){1430			.name = "camss_csi3pix_clk",1431			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },1432			.num_parents = 1,1433			.ops = &clk_branch2_ops,1434		},1435	},1436};1437 1438static struct clk_branch camss_csi3rdi_clk = {1439	.halt_reg = 0x3204,1440	.clkr = {1441		.enable_reg = 0x3204,1442		.enable_mask = BIT(0),1443		.hw.init = &(struct clk_init_data){1444			.name = "camss_csi3rdi_clk",1445			.parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },1446			.num_parents = 1,1447			.ops = &clk_branch2_ops,1448		},1449	},1450};1451 1452static struct clk_branch camss_csi_vfe0_clk = {1453	.halt_reg = 0x3704,1454	.clkr = {1455		.enable_reg = 0x3704,1456		.enable_mask = BIT(0),1457		.hw.init = &(struct clk_init_data){1458			.name = "camss_csi_vfe0_clk",1459			.parent_hws = (const struct clk_hw *[]){ &vfe0_clk_src.clkr.hw },1460			.num_parents = 1,1461			.ops = &clk_branch2_ops,1462		},1463	},1464};1465 1466static struct clk_branch camss_csi_vfe1_clk = {1467	.halt_reg = 0x3714,1468	.clkr = {1469		.enable_reg = 0x3714,1470		.enable_mask = BIT(0),1471		.hw.init = &(struct clk_init_data){1472			.name = "camss_csi_vfe1_clk",1473			.parent_hws = (const struct clk_hw *[]){ &vfe1_clk_src.clkr.hw },1474			.num_parents = 1,1475			.ops = &clk_branch2_ops,1476		},1477	},1478};1479 1480static struct clk_branch camss_gp0_clk = {1481	.halt_reg = 0x3444,1482	.clkr = {1483		.enable_reg = 0x3444,1484		.enable_mask = BIT(0),1485		.hw.init = &(struct clk_init_data){1486			.name = "camss_gp0_clk",1487			.parent_hws = (const struct clk_hw *[]){ &mmss_gp0_clk_src.clkr.hw },1488			.num_parents = 1,1489			.ops = &clk_branch2_ops,1490		},1491	},1492};1493 1494static struct clk_branch camss_gp1_clk = {1495	.halt_reg = 0x3474,1496	.clkr = {1497		.enable_reg = 0x3474,1498		.enable_mask = BIT(0),1499		.hw.init = &(struct clk_init_data){1500			.name = "camss_gp1_clk",1501			.parent_hws = (const struct clk_hw *[]){ &mmss_gp1_clk_src.clkr.hw },1502			.num_parents = 1,1503			.ops = &clk_branch2_ops,1504		},1505	},1506};1507 1508static struct clk_branch camss_ispif_ahb_clk = {1509	.halt_reg = 0x3224,1510	.clkr = {1511		.enable_reg = 0x3224,1512		.enable_mask = BIT(0),1513		.hw.init = &(struct clk_init_data){1514			.name = "camss_ispif_ahb_clk",1515			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },1516			.num_parents = 1,1517			.flags = CLK_SET_RATE_PARENT,1518			.ops = &clk_branch2_ops,1519		},1520	},1521};1522 1523static struct clk_branch camss_jpeg_dma_clk = {1524	.halt_reg = 0x35c0,1525	.clkr = {1526		.enable_reg = 0x35c0,1527		.enable_mask = BIT(0),1528		.hw.init = &(struct clk_init_data){1529			.name = "camss_jpeg_dma_clk",1530			.parent_hws = (const struct clk_hw *[]){ &jpeg_dma_clk_src.clkr.hw },1531			.num_parents = 1,1532			.ops = &clk_branch2_ops,1533		},1534	},1535};1536 1537static struct clk_branch camss_jpeg_jpeg0_clk = {1538	.halt_reg = 0x35a8,1539	.clkr = {1540		.enable_reg = 0x35a8,1541		.enable_mask = BIT(0),1542		.hw.init = &(struct clk_init_data){1543			.name = "camss_jpeg_jpeg0_clk",1544			.parent_hws = (const struct clk_hw *[]){ &jpeg0_clk_src.clkr.hw },1545			.num_parents = 1,1546			.ops = &clk_branch2_ops,1547		},1548	},1549};1550 1551static struct clk_branch camss_jpeg_jpeg1_clk = {1552	.halt_reg = 0x35ac,1553	.clkr = {1554		.enable_reg = 0x35ac,1555		.enable_mask = BIT(0),1556		.hw.init = &(struct clk_init_data){1557			.name = "camss_jpeg_jpeg1_clk",1558			.parent_hws = (const struct clk_hw *[]){ &jpeg1_clk_src.clkr.hw },1559			.num_parents = 1,1560			.ops = &clk_branch2_ops,1561		},1562	},1563};1564 1565static struct clk_branch camss_jpeg_jpeg2_clk = {1566	.halt_reg = 0x35b0,1567	.clkr = {1568		.enable_reg = 0x35b0,1569		.enable_mask = BIT(0),1570		.hw.init = &(struct clk_init_data){1571			.name = "camss_jpeg_jpeg2_clk",1572			.parent_hws = (const struct clk_hw *[]){ &jpeg2_clk_src.clkr.hw },1573			.num_parents = 1,1574			.ops = &clk_branch2_ops,1575		},1576	},1577};1578 1579static struct clk_branch camss_jpeg_jpeg_ahb_clk = {1580	.halt_reg = 0x35b4,1581	.clkr = {1582		.enable_reg = 0x35b4,1583		.enable_mask = BIT(0),1584		.hw.init = &(struct clk_init_data){1585			.name = "camss_jpeg_jpeg_ahb_clk",1586			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },1587			.num_parents = 1,1588			.flags = CLK_SET_RATE_PARENT,1589			.ops = &clk_branch2_ops,1590		},1591	},1592};1593 1594static struct clk_branch camss_jpeg_jpeg_axi_clk = {1595	.halt_reg = 0x35b8,1596	.clkr = {1597		.enable_reg = 0x35b8,1598		.enable_mask = BIT(0),1599		.hw.init = &(struct clk_init_data){1600			.name = "camss_jpeg_jpeg_axi_clk",1601			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },1602			.num_parents = 1,1603			.ops = &clk_branch2_ops,1604		},1605	},1606};1607 1608static struct clk_branch camss_mclk0_clk = {1609	.halt_reg = 0x3384,1610	.clkr = {1611		.enable_reg = 0x3384,1612		.enable_mask = BIT(0),1613		.hw.init = &(struct clk_init_data){1614			.name = "camss_mclk0_clk",1615			.parent_hws = (const struct clk_hw *[]){ &mclk0_clk_src.clkr.hw },1616			.num_parents = 1,1617			.ops = &clk_branch2_ops,1618		},1619	},1620};1621 1622static struct clk_branch camss_mclk1_clk = {1623	.halt_reg = 0x33b4,1624	.clkr = {1625		.enable_reg = 0x33b4,1626		.enable_mask = BIT(0),1627		.hw.init = &(struct clk_init_data){1628			.name = "camss_mclk1_clk",1629			.parent_hws = (const struct clk_hw *[]){ &mclk1_clk_src.clkr.hw },1630			.num_parents = 1,1631			.ops = &clk_branch2_ops,1632		},1633	},1634};1635 1636static struct clk_branch camss_mclk2_clk = {1637	.halt_reg = 0x33e4,1638	.clkr = {1639		.enable_reg = 0x33e4,1640		.enable_mask = BIT(0),1641		.hw.init = &(struct clk_init_data){1642			.name = "camss_mclk2_clk",1643			.parent_hws = (const struct clk_hw *[]){ &mclk2_clk_src.clkr.hw },1644			.num_parents = 1,1645			.ops = &clk_branch2_ops,1646		},1647	},1648};1649 1650static struct clk_branch camss_mclk3_clk = {1651	.halt_reg = 0x3414,1652	.clkr = {1653		.enable_reg = 0x3414,1654		.enable_mask = BIT(0),1655		.hw.init = &(struct clk_init_data){1656			.name = "camss_mclk3_clk",1657			.parent_hws = (const struct clk_hw *[]){ &mclk3_clk_src.clkr.hw },1658			.num_parents = 1,1659			.ops = &clk_branch2_ops,1660		},1661	},1662};1663 1664static struct clk_branch camss_micro_ahb_clk = {1665	.halt_reg = 0x3494,1666	.clkr = {1667		.enable_reg = 0x3494,1668		.enable_mask = BIT(0),1669		.hw.init = &(struct clk_init_data){1670			.name = "camss_micro_ahb_clk",1671			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },1672			.num_parents = 1,1673			.flags = CLK_SET_RATE_PARENT,1674			.ops = &clk_branch2_ops,1675		},1676	},1677};1678 1679static struct clk_branch camss_phy0_csi0phytimer_clk = {1680	.halt_reg = 0x3024,1681	.clkr = {1682		.enable_reg = 0x3024,1683		.enable_mask = BIT(0),1684		.hw.init = &(struct clk_init_data){1685			.name = "camss_phy0_csi0phytimer_clk",1686			.parent_hws = (const struct clk_hw *[]){ &csi0phytimer_clk_src.clkr.hw },1687			.num_parents = 1,1688			.ops = &clk_branch2_ops,1689		},1690	},1691};1692 1693static struct clk_branch camss_phy1_csi1phytimer_clk = {1694	.halt_reg = 0x3054,1695	.clkr = {1696		.enable_reg = 0x3054,1697		.enable_mask = BIT(0),1698		.hw.init = &(struct clk_init_data){1699			.name = "camss_phy1_csi1phytimer_clk",1700			.parent_hws = (const struct clk_hw *[]){ &csi1phytimer_clk_src.clkr.hw },1701			.num_parents = 1,1702			.ops = &clk_branch2_ops,1703		},1704	},1705};1706 1707static struct clk_branch camss_phy2_csi2phytimer_clk = {1708	.halt_reg = 0x3084,1709	.clkr = {1710		.enable_reg = 0x3084,1711		.enable_mask = BIT(0),1712		.hw.init = &(struct clk_init_data){1713			.name = "camss_phy2_csi2phytimer_clk",1714			.parent_hws = (const struct clk_hw *[]){ &csi2phytimer_clk_src.clkr.hw },1715			.num_parents = 1,1716			.ops = &clk_branch2_ops,1717		},1718	},1719};1720 1721static struct clk_branch camss_top_ahb_clk = {1722	.halt_reg = 0x3484,1723	.clkr = {1724		.enable_reg = 0x3484,1725		.enable_mask = BIT(0),1726		.hw.init = &(struct clk_init_data){1727			.name = "camss_top_ahb_clk",1728			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },1729			.num_parents = 1,1730			.flags = CLK_SET_RATE_PARENT,1731			.ops = &clk_branch2_ops,1732		},1733	},1734};1735 1736static struct clk_branch camss_vfe_vfe0_clk = {1737	.halt_reg = 0x36a8,1738	.clkr = {1739		.enable_reg = 0x36a8,1740		.enable_mask = BIT(0),1741		.hw.init = &(struct clk_init_data){1742			.name = "camss_vfe_vfe0_clk",1743			.parent_hws = (const struct clk_hw *[]){ &vfe0_clk_src.clkr.hw },1744			.num_parents = 1,1745			.ops = &clk_branch2_ops,1746		},1747	},1748};1749 1750static struct clk_branch camss_vfe_vfe1_clk = {1751	.halt_reg = 0x36ac,1752	.clkr = {1753		.enable_reg = 0x36ac,1754		.enable_mask = BIT(0),1755		.hw.init = &(struct clk_init_data){1756			.name = "camss_vfe_vfe1_clk",1757			.parent_hws = (const struct clk_hw *[]){ &vfe1_clk_src.clkr.hw },1758			.num_parents = 1,1759			.ops = &clk_branch2_ops,1760		},1761	},1762};1763 1764static struct clk_branch camss_vfe_vfe_ahb_clk = {1765	.halt_reg = 0x36b8,1766	.clkr = {1767		.enable_reg = 0x36b8,1768		.enable_mask = BIT(0),1769		.hw.init = &(struct clk_init_data){1770			.name = "camss_vfe_vfe_ahb_clk",1771			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },1772			.num_parents = 1,1773			.flags = CLK_SET_RATE_PARENT,1774			.ops = &clk_branch2_ops,1775		},1776	},1777};1778 1779static struct clk_branch camss_vfe_vfe_axi_clk = {1780	.halt_reg = 0x36bc,1781	.clkr = {1782		.enable_reg = 0x36bc,1783		.enable_mask = BIT(0),1784		.hw.init = &(struct clk_init_data){1785			.name = "camss_vfe_vfe_axi_clk",1786			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },1787			.num_parents = 1,1788			.ops = &clk_branch2_ops,1789		},1790	},1791};1792 1793static struct clk_branch fd_ahb_clk = {1794	.halt_reg = 0x3b74,1795	.clkr = {1796		.enable_reg = 0x3b74,1797		.enable_mask = BIT(0),1798		.hw.init = &(struct clk_init_data){1799			.name = "fd_ahb_clk",1800			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },1801			.num_parents = 1,1802			.ops = &clk_branch2_ops,1803		},1804	},1805};1806 1807static struct clk_branch fd_axi_clk = {1808	.halt_reg = 0x3b70,1809	.clkr = {1810		.enable_reg = 0x3b70,1811		.enable_mask = BIT(0),1812		.hw.init = &(struct clk_init_data){1813			.name = "fd_axi_clk",1814			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },1815			.num_parents = 1,1816			.ops = &clk_branch2_ops,1817		},1818	},1819};1820 1821static struct clk_branch fd_core_clk = {1822	.halt_reg = 0x3b68,1823	.clkr = {1824		.enable_reg = 0x3b68,1825		.enable_mask = BIT(0),1826		.hw.init = &(struct clk_init_data){1827			.name = "fd_core_clk",1828			.parent_hws = (const struct clk_hw *[]){ &fd_core_clk_src.clkr.hw },1829			.num_parents = 1,1830			.ops = &clk_branch2_ops,1831		},1832	},1833};1834 1835static struct clk_branch fd_core_uar_clk = {1836	.halt_reg = 0x3b6c,1837	.clkr = {1838		.enable_reg = 0x3b6c,1839		.enable_mask = BIT(0),1840		.hw.init = &(struct clk_init_data){1841			.name = "fd_core_uar_clk",1842			.parent_hws = (const struct clk_hw *[]){ &fd_core_clk_src.clkr.hw },1843			.num_parents = 1,1844			.ops = &clk_branch2_ops,1845		},1846	},1847};1848 1849static struct clk_branch mdss_ahb_clk = {1850	.halt_reg = 0x2308,1851	.halt_check = BRANCH_HALT,1852	.clkr = {1853		.enable_reg = 0x2308,1854		.enable_mask = BIT(0),1855		.hw.init = &(struct clk_init_data){1856			.name = "mdss_ahb_clk",1857			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },1858			.num_parents = 1,1859			.flags = CLK_SET_RATE_PARENT,1860			.ops = &clk_branch2_ops,1861		},1862	},1863};1864 1865static struct clk_branch mdss_axi_clk = {1866	.halt_reg = 0x2310,1867	.clkr = {1868		.enable_reg = 0x2310,1869		.enable_mask = BIT(0),1870		.hw.init = &(struct clk_init_data){1871			.name = "mdss_axi_clk",1872			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },1873			.num_parents = 1,1874			.flags = CLK_SET_RATE_PARENT,1875			.ops = &clk_branch2_ops,1876		},1877	},1878};1879 1880static struct clk_branch mdss_byte0_clk = {1881	.halt_reg = 0x233c,1882	.clkr = {1883		.enable_reg = 0x233c,1884		.enable_mask = BIT(0),1885		.hw.init = &(struct clk_init_data){1886			.name = "mdss_byte0_clk",1887			.parent_hws = (const struct clk_hw *[]){ &byte0_clk_src.clkr.hw },1888			.num_parents = 1,1889			.flags = CLK_SET_RATE_PARENT,1890			.ops = &clk_branch2_ops,1891		},1892	},1893};1894 1895static struct clk_branch mdss_byte1_clk = {1896	.halt_reg = 0x2340,1897	.clkr = {1898		.enable_reg = 0x2340,1899		.enable_mask = BIT(0),1900		.hw.init = &(struct clk_init_data){1901			.name = "mdss_byte1_clk",1902			.parent_hws = (const struct clk_hw *[]){ &byte1_clk_src.clkr.hw },1903			.num_parents = 1,1904			.flags = CLK_SET_RATE_PARENT,1905			.ops = &clk_branch2_ops,1906		},1907	},1908};1909 1910static struct clk_branch mdss_esc0_clk = {1911	.halt_reg = 0x2344,1912	.clkr = {1913		.enable_reg = 0x2344,1914		.enable_mask = BIT(0),1915		.hw.init = &(struct clk_init_data){1916			.name = "mdss_esc0_clk",1917			.parent_hws = (const struct clk_hw *[]){ &esc0_clk_src.clkr.hw },1918			.num_parents = 1,1919			.flags = CLK_SET_RATE_PARENT,1920			.ops = &clk_branch2_ops,1921		},1922	},1923};1924 1925static struct clk_branch mdss_esc1_clk = {1926	.halt_reg = 0x2348,1927	.clkr = {1928		.enable_reg = 0x2348,1929		.enable_mask = BIT(0),1930		.hw.init = &(struct clk_init_data){1931			.name = "mdss_esc1_clk",1932			.parent_hws = (const struct clk_hw *[]){ &esc1_clk_src.clkr.hw },1933			.num_parents = 1,1934			.flags = CLK_SET_RATE_PARENT,1935			.ops = &clk_branch2_ops,1936		},1937	},1938};1939 1940static struct clk_branch mdss_extpclk_clk = {1941	.halt_reg = 0x2324,1942	.clkr = {1943		.enable_reg = 0x2324,1944		.enable_mask = BIT(0),1945		.hw.init = &(struct clk_init_data){1946			.name = "mdss_extpclk_clk",1947			.parent_hws = (const struct clk_hw *[]){ &extpclk_clk_src.clkr.hw },1948			.num_parents = 1,1949			.flags = CLK_SET_RATE_PARENT,1950			.ops = &clk_branch2_ops,1951		},1952	},1953};1954 1955static struct clk_branch mdss_hdmi_ahb_clk = {1956	.halt_reg = 0x230c,1957	.clkr = {1958		.enable_reg = 0x230c,1959		.enable_mask = BIT(0),1960		.hw.init = &(struct clk_init_data){1961			.name = "mdss_hdmi_ahb_clk",1962			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },1963			.num_parents = 1,1964			.flags = CLK_SET_RATE_PARENT,1965			.ops = &clk_branch2_ops,1966		},1967	},1968};1969 1970static struct clk_branch mdss_hdmi_clk = {1971	.halt_reg = 0x2338,1972	.clkr = {1973		.enable_reg = 0x2338,1974		.enable_mask = BIT(0),1975		.hw.init = &(struct clk_init_data){1976			.name = "mdss_hdmi_clk",1977			.parent_hws = (const struct clk_hw *[]){ &hdmi_clk_src.clkr.hw },1978			.num_parents = 1,1979			.flags = CLK_SET_RATE_PARENT,1980			.ops = &clk_branch2_ops,1981		},1982	},1983};1984 1985static struct clk_branch mdss_mdp_clk = {1986	.halt_reg = 0x231c,1987	.clkr = {1988		.enable_reg = 0x231c,1989		.enable_mask = BIT(0),1990		.hw.init = &(struct clk_init_data){1991			.name = "mdss_mdp_clk",1992			.parent_hws = (const struct clk_hw *[]){ &mdp_clk_src.clkr.hw },1993			.num_parents = 1,1994			.flags = CLK_SET_RATE_PARENT,1995			.ops = &clk_branch2_ops,1996		},1997	},1998};1999 2000static struct clk_branch mdss_pclk0_clk = {2001	.halt_reg = 0x2314,2002	.clkr = {2003		.enable_reg = 0x2314,2004		.enable_mask = BIT(0),2005		.hw.init = &(struct clk_init_data){2006			.name = "mdss_pclk0_clk",2007			.parent_hws = (const struct clk_hw *[]){ &pclk0_clk_src.clkr.hw },2008			.num_parents = 1,2009			.flags = CLK_SET_RATE_PARENT,2010			.ops = &clk_branch2_ops,2011		},2012	},2013};2014 2015static struct clk_branch mdss_pclk1_clk = {2016	.halt_reg = 0x2318,2017	.clkr = {2018		.enable_reg = 0x2318,2019		.enable_mask = BIT(0),2020		.hw.init = &(struct clk_init_data){2021			.name = "mdss_pclk1_clk",2022			.parent_hws = (const struct clk_hw *[]){ &pclk1_clk_src.clkr.hw },2023			.num_parents = 1,2024			.flags = CLK_SET_RATE_PARENT,2025			.ops = &clk_branch2_ops,2026		},2027	},2028};2029 2030static struct clk_branch mdss_vsync_clk = {2031	.halt_reg = 0x2328,2032	.clkr = {2033		.enable_reg = 0x2328,2034		.enable_mask = BIT(0),2035		.hw.init = &(struct clk_init_data){2036			.name = "mdss_vsync_clk",2037			.parent_hws = (const struct clk_hw *[]){ &vsync_clk_src.clkr.hw },2038			.num_parents = 1,2039			.flags = CLK_SET_RATE_PARENT,2040			.ops = &clk_branch2_ops,2041		},2042	},2043};2044 2045static struct clk_branch mmss_misc_ahb_clk = {2046	.halt_reg = 0x502c,2047	.clkr = {2048		.enable_reg = 0x502c,2049		.enable_mask = BIT(0),2050		.hw.init = &(struct clk_init_data){2051			.name = "mmss_misc_ahb_clk",2052			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },2053			.num_parents = 1,2054			.flags = CLK_SET_RATE_PARENT,2055			.ops = &clk_branch2_ops,2056		},2057	},2058};2059 2060static struct clk_branch mmss_mmssnoc_axi_clk = {2061	.halt_reg = 0x506c,2062	.clkr = {2063		.enable_reg = 0x506c,2064		.enable_mask = BIT(0),2065		.hw.init = &(struct clk_init_data){2066			.name = "mmss_mmssnoc_axi_clk",2067			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },2068			.num_parents = 1,2069			/* Gating this clock will wreck havoc among MMSS! */2070			.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,2071			.ops = &clk_branch2_ops,2072		},2073	},2074};2075 2076static struct clk_branch mmss_s0_axi_clk = {2077	.halt_reg = 0x5064,2078	.clkr = {2079		.enable_reg = 0x5064,2080		.enable_mask = BIT(0),2081		.hw.init = &(struct clk_init_data){2082			.name = "mmss_s0_axi_clk",2083			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw, },2084			.num_parents = 1,2085			.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,2086			.ops = &clk_branch2_ops,2087		},2088	},2089};2090 2091static struct clk_branch ocmemcx_ocmemnoc_clk = {2092	.halt_reg = 0x4058,2093	.clkr = {2094		.enable_reg = 0x4058,2095		.enable_mask = BIT(0),2096		.hw.init = &(struct clk_init_data){2097			.name = "ocmemcx_ocmemnoc_clk",2098			.parent_hws = (const struct clk_hw *[]){ &ocmemnoc_clk_src.clkr.hw },2099			.num_parents = 1,2100			.flags = CLK_SET_RATE_PARENT,2101			.ops = &clk_branch2_ops,2102		},2103	},2104};2105 2106static struct clk_branch oxili_gfx3d_clk = {2107	.halt_reg = 0x4028,2108	.clkr = {2109		.enable_reg = 0x4028,2110		.enable_mask = BIT(0),2111		.hw.init = &(struct clk_init_data){2112			.name = "oxili_gfx3d_clk",2113			.parent_data = &(const struct clk_parent_data){2114				.fw_name = "oxili_gfx3d_clk_src",2115				.name = "oxili_gfx3d_clk_src"2116			},2117			.num_parents = 1,2118			.flags = CLK_SET_RATE_PARENT,2119			.ops = &clk_branch2_ops,2120		},2121	},2122};2123 2124static struct clk_branch oxili_rbbmtimer_clk = {2125	.halt_reg = 0x40b0,2126	.clkr = {2127		.enable_reg = 0x40b0,2128		.enable_mask = BIT(0),2129		.hw.init = &(struct clk_init_data){2130			.name = "oxili_rbbmtimer_clk",2131			.parent_hws = (const struct clk_hw *[]){ &rbbmtimer_clk_src.clkr.hw },2132			.num_parents = 1,2133			.flags = CLK_SET_RATE_PARENT,2134			.ops = &clk_branch2_ops,2135		},2136	},2137};2138 2139static struct clk_branch oxilicx_ahb_clk = {2140	.halt_reg = 0x403c,2141	.clkr = {2142		.enable_reg = 0x403c,2143		.enable_mask = BIT(0),2144		.hw.init = &(struct clk_init_data){2145			.name = "oxilicx_ahb_clk",2146			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },2147			.num_parents = 1,2148			.flags = CLK_SET_RATE_PARENT,2149			.ops = &clk_branch2_ops,2150		},2151	},2152};2153 2154static struct clk_branch venus0_ahb_clk = {2155	.halt_reg = 0x1030,2156	.clkr = {2157		.enable_reg = 0x1030,2158		.enable_mask = BIT(0),2159		.hw.init = &(struct clk_init_data){2160			.name = "venus0_ahb_clk",2161			.parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },2162			.num_parents = 1,2163			.flags = CLK_SET_RATE_PARENT,2164			.ops = &clk_branch2_ops,2165		},2166	},2167};2168 2169static struct clk_branch venus0_axi_clk = {2170	.halt_reg = 0x1034,2171	.clkr = {2172		.enable_reg = 0x1034,2173		.enable_mask = BIT(0),2174		.hw.init = &(struct clk_init_data){2175			.name = "venus0_axi_clk",2176			.parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },2177			.num_parents = 1,2178			.ops = &clk_branch2_ops,2179		},2180	},2181};2182 2183static struct clk_branch venus0_ocmemnoc_clk = {2184	.halt_reg = 0x1038,2185	.clkr = {2186		.enable_reg = 0x1038,2187		.enable_mask = BIT(0),2188		.hw.init = &(struct clk_init_data){2189			.name = "venus0_ocmemnoc_clk",2190			.parent_hws = (const struct clk_hw *[]){ &ocmemnoc_clk_src.clkr.hw },2191			.num_parents = 1,2192			.flags = CLK_SET_RATE_PARENT,2193			.ops = &clk_branch2_ops,2194		},2195	},2196};2197 2198static struct clk_branch venus0_vcodec0_clk = {2199	.halt_reg = 0x1028,2200	.clkr = {2201		.enable_reg = 0x1028,2202		.enable_mask = BIT(0),2203		.hw.init = &(struct clk_init_data){2204			.name = "venus0_vcodec0_clk",2205			.parent_hws = (const struct clk_hw *[]){ &vcodec0_clk_src.clkr.hw },2206			.num_parents = 1,2207			.flags = CLK_SET_RATE_PARENT,2208			.ops = &clk_branch2_ops,2209		},2210	},2211};2212 2213static struct clk_branch venus0_core0_vcodec_clk = {2214	.halt_reg = 0x1048,2215	.clkr = {2216		.enable_reg = 0x1048,2217		.enable_mask = BIT(0),2218		.hw.init = &(struct clk_init_data){2219			.name = "venus0_core0_vcodec_clk",2220			.parent_hws = (const struct clk_hw *[]){ &vcodec0_clk_src.clkr.hw },2221			.num_parents = 1,2222			.flags = CLK_SET_RATE_PARENT,2223			.ops = &clk_branch2_ops,2224		},2225	},2226};2227 2228static struct clk_branch venus0_core1_vcodec_clk = {2229	.halt_reg = 0x104c,2230	.clkr = {2231		.enable_reg = 0x104c,2232		.enable_mask = BIT(0),2233		.hw.init = &(struct clk_init_data){2234			.name = "venus0_core1_vcodec_clk",2235			.parent_hws = (const struct clk_hw *[]){ &vcodec0_clk_src.clkr.hw },2236			.num_parents = 1,2237			.flags = CLK_SET_RATE_PARENT,2238			.ops = &clk_branch2_ops,2239		},2240	},2241};2242 2243static struct clk_branch venus0_core2_vcodec_clk = {2244	.halt_reg = 0x1054,2245	.clkr = {2246		.enable_reg = 0x1054,2247		.enable_mask = BIT(0),2248		.hw.init = &(struct clk_init_data){2249			.name = "venus0_core2_vcodec_clk",2250			.parent_hws = (const struct clk_hw *[]){ &vcodec0_clk_src.clkr.hw },2251			.num_parents = 1,2252			.flags = CLK_SET_RATE_PARENT,2253			.ops = &clk_branch2_ops,2254		},2255	},2256};2257 2258static struct gdsc venus_gdsc = {2259	.gdscr = 0x1024,2260	.cxcs = (unsigned int []){ 0x1038, 0x1034, 0x1048 },2261	.cxc_count = 3,2262	.pd = {2263		.name = "venus_gdsc",2264	},2265	.pwrsts = PWRSTS_OFF_ON,2266};2267 2268static struct gdsc venus_core0_gdsc = {2269	.gdscr = 0x1040,2270	.cxcs = (unsigned int []){ 0x1048 },2271	.cxc_count = 1,2272	.pd = {2273		.name = "venus_core0_gdsc",2274	},2275	.pwrsts = PWRSTS_OFF_ON,2276	.flags = HW_CTRL,2277};2278 2279static struct gdsc venus_core1_gdsc = {2280	.gdscr = 0x1044,2281	.cxcs = (unsigned int []){ 0x104c },2282	.cxc_count = 1,2283	.pd = {2284	.name = "venus_core1_gdsc",2285	},2286	.pwrsts = PWRSTS_OFF_ON,2287	.flags = HW_CTRL,2288};2289 2290static struct gdsc venus_core2_gdsc = {2291	.gdscr = 0x1050,2292	.cxcs = (unsigned int []){ 0x1054 },2293	.cxc_count = 1,2294	.pd = {2295		.name = "venus_core2_gdsc",2296	},2297	.pwrsts = PWRSTS_OFF_ON,2298	.flags = HW_CTRL,2299};2300 2301static struct gdsc mdss_gdsc = {2302	.gdscr = 0x2304,2303	.cxcs = (unsigned int []){ 0x2310, 0x231c },2304	.cxc_count = 2,2305	.pd = {2306		.name = "mdss_gdsc",2307	},2308	.pwrsts = PWRSTS_OFF_ON,2309};2310 2311static struct gdsc camss_top_gdsc = {2312	.gdscr = 0x34a0,2313	.cxcs = (unsigned int []){ 0x3704, 0x3714, 0x3494 },2314	.cxc_count = 3,2315	.pd = {2316		.name = "camss_top_gdsc",2317	},2318	.pwrsts = PWRSTS_OFF_ON,2319};2320 2321static struct gdsc jpeg_gdsc = {2322	.gdscr = 0x35a4,2323	.cxcs = (unsigned int []){ 0x35a8 },2324	.cxc_count = 1,2325	.pd = {2326		.name = "jpeg_gdsc",2327	},2328	.parent = &camss_top_gdsc.pd,2329	.pwrsts = PWRSTS_OFF_ON,2330};2331 2332static struct gdsc vfe_gdsc = {2333	.gdscr = 0x36a4,2334	.cxcs = (unsigned int []){ 0x36bc },2335	.cxc_count = 1,2336	.pd = {2337		.name = "vfe_gdsc",2338	},2339	.parent = &camss_top_gdsc.pd,2340	.pwrsts = PWRSTS_OFF_ON,2341};2342 2343static struct gdsc cpp_gdsc = {2344	.gdscr = 0x36d4,2345	.cxcs = (unsigned int []){ 0x36c4, 0x36b0 },2346	.cxc_count = 2,2347	.pd = {2348		.name = "cpp_gdsc",2349	},2350	.parent = &camss_top_gdsc.pd,2351	.pwrsts = PWRSTS_OFF_ON,2352};2353 2354static struct gdsc fd_gdsc = {2355	.gdscr = 0x3b64,2356	.cxcs = (unsigned int []){ 0x3b70, 0x3b68 },2357	.pd = {2358		.name = "fd_gdsc",2359	},2360	.pwrsts = PWRSTS_OFF_ON,2361};2362 2363static struct gdsc oxili_cx_gdsc = {2364	.gdscr = 0x4034,2365	.pd = {2366		.name = "oxili_cx_gdsc",2367	},2368	.pwrsts = PWRSTS_OFF_ON,2369	.flags = VOTABLE,2370};2371 2372static struct gdsc oxili_gx_gdsc = {2373	.gdscr = 0x4024,2374	.cxcs = (unsigned int []){ 0x4028 },2375	.cxc_count = 1,2376	.pd = {2377		.name = "oxili_gx_gdsc",2378	},2379	.pwrsts = PWRSTS_OFF_ON,2380	.parent = &oxili_cx_gdsc.pd,2381	.flags = CLAMP_IO,2382	.supply = "VDD_GFX",2383};2384 2385static struct clk_regmap *mmcc_msm8994_clocks[] = {2386	[MMPLL0_EARLY] = &mmpll0_early.clkr,2387	[MMPLL0_PLL] = &mmpll0.clkr,2388	[MMPLL1_EARLY] = &mmpll1_early.clkr,2389	[MMPLL1_PLL] = &mmpll1.clkr,2390	[MMPLL3_EARLY] = &mmpll3_early.clkr,2391	[MMPLL3_PLL] = &mmpll3.clkr,2392	[MMPLL4_EARLY] = &mmpll4_early.clkr,2393	[MMPLL4_PLL] = &mmpll4.clkr,2394	[MMPLL5_EARLY] = &mmpll5_early.clkr,2395	[MMPLL5_PLL] = &mmpll5.clkr,2396	[AHB_CLK_SRC] = &ahb_clk_src.clkr,2397	[AXI_CLK_SRC] = &axi_clk_src.clkr,2398	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,2399	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,2400	[CSI2_CLK_SRC] = &csi2_clk_src.clkr,2401	[CSI3_CLK_SRC] = &csi3_clk_src.clkr,2402	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,2403	[VFE1_CLK_SRC] = &vfe1_clk_src.clkr,2404	[CPP_CLK_SRC] = &cpp_clk_src.clkr,2405	[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,2406	[JPEG1_CLK_SRC] = &jpeg1_clk_src.clkr,2407	[JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,2408	[CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,2409	[FD_CORE_CLK_SRC] = &fd_core_clk_src.clkr,2410	[MDP_CLK_SRC] = &mdp_clk_src.clkr,2411	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,2412	[PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,2413	[OCMEMNOC_CLK_SRC] = &ocmemnoc_clk_src.clkr,2414	[CCI_CLK_SRC] = &cci_clk_src.clkr,2415	[MMSS_GP0_CLK_SRC] = &mmss_gp0_clk_src.clkr,2416	[MMSS_GP1_CLK_SRC] = &mmss_gp1_clk_src.clkr,2417	[JPEG_DMA_CLK_SRC] = &jpeg_dma_clk_src.clkr,2418	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,2419	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,2420	[MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,2421	[MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,2422	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,2423	[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,2424	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,2425	[BYTE1_CLK_SRC] = &byte1_clk_src.clkr,2426	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,2427	[ESC1_CLK_SRC] = &esc1_clk_src.clkr,2428	[MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,2429	[MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,2430	[EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,2431	[HDMI_CLK_SRC] = &hdmi_clk_src.clkr,2432	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,2433	[RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr,2434	[CAMSS_AHB_CLK] = &camss_ahb_clk.clkr,2435	[CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr,2436	[CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr,2437	[CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr,2438	[CAMSS_VFE_CPP_AXI_CLK] = &camss_vfe_cpp_axi_clk.clkr,2439	[CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr,2440	[CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,2441	[CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,2442	[CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,2443	[CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,2444	[CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,2445	[CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,2446	[CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,2447	[CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,2448	[CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,2449	[CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,2450	[CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,2451	[CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,2452	[CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,2453	[CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,2454	[CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,2455	[CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,2456	[CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,2457	[CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,2458	[CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,2459	[CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,2460	[CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,2461	[CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,2462	[CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,2463	[CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,2464	[CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,2465	[CAMSS_JPEG_DMA_CLK] = &camss_jpeg_dma_clk.clkr,2466	[CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr,2467	[CAMSS_JPEG_JPEG1_CLK] = &camss_jpeg_jpeg1_clk.clkr,2468	[CAMSS_JPEG_JPEG2_CLK] = &camss_jpeg_jpeg2_clk.clkr,2469	[CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr,2470	[CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr,2471	[CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,2472	[CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,2473	[CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,2474	[CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,2475	[CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,2476	[CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr,2477	[CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr,2478	[CAMSS_PHY2_CSI2PHYTIMER_CLK] = &camss_phy2_csi2phytimer_clk.clkr,2479	[CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,2480	[CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr,2481	[CAMSS_VFE_VFE1_CLK] = &camss_vfe_vfe1_clk.clkr,2482	[CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr,2483	[CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr,2484	[FD_AHB_CLK] = &fd_ahb_clk.clkr,2485	[FD_AXI_CLK] = &fd_axi_clk.clkr,2486	[FD_CORE_CLK] = &fd_core_clk.clkr,2487	[FD_CORE_UAR_CLK] = &fd_core_uar_clk.clkr,2488	[MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,2489	[MDSS_AXI_CLK] = &mdss_axi_clk.clkr,2490	[MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,2491	[MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,2492	[MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,2493	[MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,2494	[MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,2495	[MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,2496	[MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,2497	[MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,2498	[MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,2499	[MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,2500	[MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr,2501	[MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr,2502	[OCMEMCX_OCMEMNOC_CLK] = &ocmemcx_ocmemnoc_clk.clkr,2503	[OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr,2504	[OXILI_RBBMTIMER_CLK] = &oxili_rbbmtimer_clk.clkr,2505	[OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr,2506	[VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr,2507	[VENUS0_AXI_CLK] = &venus0_axi_clk.clkr,2508	[VENUS0_OCMEMNOC_CLK] = &venus0_ocmemnoc_clk.clkr,2509	[VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr,2510	[VENUS0_CORE0_VCODEC_CLK] = &venus0_core0_vcodec_clk.clkr,2511	[VENUS0_CORE1_VCODEC_CLK] = &venus0_core1_vcodec_clk.clkr,2512	[VENUS0_CORE2_VCODEC_CLK] = &venus0_core2_vcodec_clk.clkr,2513};2514 2515static struct gdsc *mmcc_msm8994_gdscs[] = {2516	[VENUS_GDSC] = &venus_gdsc,2517	[VENUS_CORE0_GDSC] = &venus_core0_gdsc,2518	[VENUS_CORE1_GDSC] = &venus_core1_gdsc,2519	[VENUS_CORE2_GDSC] = &venus_core2_gdsc,2520	[CAMSS_TOP_GDSC] = &camss_top_gdsc,2521	[MDSS_GDSC] = &mdss_gdsc,2522	[JPEG_GDSC] = &jpeg_gdsc,2523	[VFE_GDSC] = &vfe_gdsc,2524	[CPP_GDSC] = &cpp_gdsc,2525	[OXILI_GX_GDSC] = &oxili_gx_gdsc,2526	[OXILI_CX_GDSC] = &oxili_cx_gdsc,2527	[FD_GDSC] = &fd_gdsc,2528};2529 2530static const struct qcom_reset_map mmcc_msm8994_resets[] = {2531	[CAMSS_MICRO_BCR] = { 0x3490 },2532};2533 2534static const struct regmap_config mmcc_msm8994_regmap_config = {2535	.reg_bits	= 32,2536	.reg_stride	= 4,2537	.val_bits	= 32,2538	.max_register	= 0x5200,2539	.fast_io	= true,2540};2541 2542static const struct qcom_cc_desc mmcc_msm8994_desc = {2543	.config = &mmcc_msm8994_regmap_config,2544	.clks = mmcc_msm8994_clocks,2545	.num_clks = ARRAY_SIZE(mmcc_msm8994_clocks),2546	.resets = mmcc_msm8994_resets,2547	.num_resets = ARRAY_SIZE(mmcc_msm8994_resets),2548	.gdscs = mmcc_msm8994_gdscs,2549	.num_gdscs = ARRAY_SIZE(mmcc_msm8994_gdscs),2550};2551 2552static const struct of_device_id mmcc_msm8994_match_table[] = {2553	{ .compatible = "qcom,mmcc-msm8992" },2554	{ .compatible = "qcom,mmcc-msm8994" }, /* V2 and V2.1 */2555	{ }2556};2557MODULE_DEVICE_TABLE(of, mmcc_msm8994_match_table);2558 2559static int mmcc_msm8994_probe(struct platform_device *pdev)2560{2561	struct regmap *regmap;2562 2563	if (of_device_is_compatible(pdev->dev.of_node, "qcom,mmcc-msm8992")) {2564		/* MSM8992 features less clocks and some have different freq tables */2565		mmcc_msm8994_desc.clks[CAMSS_JPEG_JPEG1_CLK] = NULL;2566		mmcc_msm8994_desc.clks[CAMSS_JPEG_JPEG2_CLK] = NULL;2567		mmcc_msm8994_desc.clks[FD_CORE_CLK_SRC] = NULL;2568		mmcc_msm8994_desc.clks[FD_CORE_CLK] = NULL;2569		mmcc_msm8994_desc.clks[FD_CORE_UAR_CLK] = NULL;2570		mmcc_msm8994_desc.clks[FD_AXI_CLK] = NULL;2571		mmcc_msm8994_desc.clks[FD_AHB_CLK] = NULL;2572		mmcc_msm8994_desc.clks[JPEG1_CLK_SRC] = NULL;2573		mmcc_msm8994_desc.clks[JPEG2_CLK_SRC] = NULL;2574		mmcc_msm8994_desc.clks[VENUS0_CORE2_VCODEC_CLK] = NULL;2575 2576		mmcc_msm8994_desc.gdscs[FD_GDSC] = NULL;2577		mmcc_msm8994_desc.gdscs[VENUS_CORE2_GDSC] = NULL;2578 2579		axi_clk_src.freq_tbl = ftbl_axi_clk_src_8992;2580		cpp_clk_src.freq_tbl = ftbl_cpp_clk_src_8992;2581		csi0_clk_src.freq_tbl = ftbl_csi0_1_2_3_clk_src_8992;2582		csi1_clk_src.freq_tbl = ftbl_csi0_1_2_3_clk_src_8992;2583		csi2_clk_src.freq_tbl = ftbl_csi0_1_2_3_clk_src_8992;2584		csi3_clk_src.freq_tbl = ftbl_csi0_1_2_3_clk_src_8992;2585		mclk0_clk_src.freq_tbl = ftbl_mclk0_clk_src_8992;2586		mclk1_clk_src.freq_tbl = ftbl_mclk1_2_3_clk_src_8992;2587		mclk2_clk_src.freq_tbl = ftbl_mclk1_2_3_clk_src_8992;2588		mclk3_clk_src.freq_tbl = ftbl_mclk1_2_3_clk_src_8992;2589		mdp_clk_src.freq_tbl = ftbl_mdp_clk_src_8992;2590		ocmemnoc_clk_src.freq_tbl = ftbl_ocmemnoc_clk_src_8992;2591		vcodec0_clk_src.freq_tbl = ftbl_vcodec0_clk_src_8992;2592		vfe0_clk_src.freq_tbl = ftbl_vfe0_1_clk_src_8992;2593		vfe1_clk_src.freq_tbl = ftbl_vfe0_1_clk_src_8992;2594	}2595 2596	regmap = qcom_cc_map(pdev, &mmcc_msm8994_desc);2597	if (IS_ERR(regmap))2598		return PTR_ERR(regmap);2599 2600	clk_alpha_pll_configure(&mmpll0_early, regmap, &mmpll_p_config);2601	clk_alpha_pll_configure(&mmpll1_early, regmap, &mmpll_p_config);2602	clk_alpha_pll_configure(&mmpll3_early, regmap, &mmpll_p_config);2603	clk_alpha_pll_configure(&mmpll5_early, regmap, &mmpll_p_config);2604 2605	return qcom_cc_really_probe(&pdev->dev, &mmcc_msm8994_desc, regmap);2606}2607 2608static struct platform_driver mmcc_msm8994_driver = {2609	.probe		= mmcc_msm8994_probe,2610	.driver		= {2611		.name	= "mmcc-msm8994",2612		.of_match_table = mmcc_msm8994_match_table,2613	},2614};2615module_platform_driver(mmcc_msm8994_driver);2616 2617MODULE_DESCRIPTION("QCOM MMCC MSM8994 Driver");2618MODULE_LICENSE("GPL v2");2619MODULE_ALIAS("platform:mmcc-msm8994");2620