1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Copyright (c) 2019, The Linux Foundation. All rights reserved.
4*4882a593Smuzhiyun */
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun #include <linux/kernel.h>
7*4882a593Smuzhiyun #include <linux/bitops.h>
8*4882a593Smuzhiyun #include <linux/err.h>
9*4882a593Smuzhiyun #include <linux/platform_device.h>
10*4882a593Smuzhiyun #include <linux/module.h>
11*4882a593Smuzhiyun #include <linux/of.h>
12*4882a593Smuzhiyun #include <linux/of_device.h>
13*4882a593Smuzhiyun #include <linux/clk-provider.h>
14*4882a593Smuzhiyun #include <linux/regmap.h>
15*4882a593Smuzhiyun #include <linux/reset-controller.h>
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun #include <dt-bindings/clock/qcom,mmcc-msm8998.h>
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun #include "common.h"
20*4882a593Smuzhiyun #include "clk-regmap.h"
21*4882a593Smuzhiyun #include "clk-regmap-divider.h"
22*4882a593Smuzhiyun #include "clk-alpha-pll.h"
23*4882a593Smuzhiyun #include "clk-rcg.h"
24*4882a593Smuzhiyun #include "clk-branch.h"
25*4882a593Smuzhiyun #include "reset.h"
26*4882a593Smuzhiyun #include "gdsc.h"
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun enum {
29*4882a593Smuzhiyun P_XO,
30*4882a593Smuzhiyun P_GPLL0,
31*4882a593Smuzhiyun P_GPLL0_DIV,
32*4882a593Smuzhiyun P_MMPLL0_OUT_EVEN,
33*4882a593Smuzhiyun P_MMPLL1_OUT_EVEN,
34*4882a593Smuzhiyun P_MMPLL3_OUT_EVEN,
35*4882a593Smuzhiyun P_MMPLL4_OUT_EVEN,
36*4882a593Smuzhiyun P_MMPLL5_OUT_EVEN,
37*4882a593Smuzhiyun P_MMPLL6_OUT_EVEN,
38*4882a593Smuzhiyun P_MMPLL7_OUT_EVEN,
39*4882a593Smuzhiyun P_MMPLL10_OUT_EVEN,
40*4882a593Smuzhiyun P_DSI0PLL,
41*4882a593Smuzhiyun P_DSI1PLL,
42*4882a593Smuzhiyun P_DSI0PLL_BYTE,
43*4882a593Smuzhiyun P_DSI1PLL_BYTE,
44*4882a593Smuzhiyun P_HDMIPLL,
45*4882a593Smuzhiyun P_DPVCO,
46*4882a593Smuzhiyun P_DPLINK,
47*4882a593Smuzhiyun P_CORE_BI_PLL_TEST_SE,
48*4882a593Smuzhiyun };
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun static struct clk_fixed_factor gpll0_div = {
51*4882a593Smuzhiyun .mult = 1,
52*4882a593Smuzhiyun .div = 2,
53*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
54*4882a593Smuzhiyun .name = "mmss_gpll0_div",
55*4882a593Smuzhiyun .parent_data = &(const struct clk_parent_data){
56*4882a593Smuzhiyun .fw_name = "gpll0",
57*4882a593Smuzhiyun .name = "gpll0"
58*4882a593Smuzhiyun },
59*4882a593Smuzhiyun .num_parents = 1,
60*4882a593Smuzhiyun .ops = &clk_fixed_factor_ops,
61*4882a593Smuzhiyun },
62*4882a593Smuzhiyun };
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun static const struct clk_div_table post_div_table_fabia_even[] = {
65*4882a593Smuzhiyun { 0x0, 1 },
66*4882a593Smuzhiyun { 0x1, 2 },
67*4882a593Smuzhiyun { 0x3, 4 },
68*4882a593Smuzhiyun { 0x7, 8 },
69*4882a593Smuzhiyun { }
70*4882a593Smuzhiyun };
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun static struct clk_alpha_pll mmpll0 = {
73*4882a593Smuzhiyun .offset = 0xc000,
74*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
75*4882a593Smuzhiyun .clkr = {
76*4882a593Smuzhiyun .enable_reg = 0x1e0,
77*4882a593Smuzhiyun .enable_mask = BIT(0),
78*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
79*4882a593Smuzhiyun .name = "mmpll0",
80*4882a593Smuzhiyun .parent_data = &(const struct clk_parent_data){
81*4882a593Smuzhiyun .fw_name = "xo",
82*4882a593Smuzhiyun .name = "xo"
83*4882a593Smuzhiyun },
84*4882a593Smuzhiyun .num_parents = 1,
85*4882a593Smuzhiyun .ops = &clk_alpha_pll_fixed_fabia_ops,
86*4882a593Smuzhiyun },
87*4882a593Smuzhiyun },
88*4882a593Smuzhiyun };
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun static struct clk_alpha_pll_postdiv mmpll0_out_even = {
91*4882a593Smuzhiyun .offset = 0xc000,
92*4882a593Smuzhiyun .post_div_shift = 8,
93*4882a593Smuzhiyun .post_div_table = post_div_table_fabia_even,
94*4882a593Smuzhiyun .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
95*4882a593Smuzhiyun .width = 4,
96*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
97*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
98*4882a593Smuzhiyun .name = "mmpll0_out_even",
99*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &mmpll0.clkr.hw },
100*4882a593Smuzhiyun .num_parents = 1,
101*4882a593Smuzhiyun .ops = &clk_alpha_pll_postdiv_fabia_ops,
102*4882a593Smuzhiyun },
103*4882a593Smuzhiyun };
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun static struct clk_alpha_pll mmpll1 = {
106*4882a593Smuzhiyun .offset = 0xc050,
107*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
108*4882a593Smuzhiyun .clkr = {
109*4882a593Smuzhiyun .enable_reg = 0x1e0,
110*4882a593Smuzhiyun .enable_mask = BIT(1),
111*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
112*4882a593Smuzhiyun .name = "mmpll1",
113*4882a593Smuzhiyun .parent_data = &(const struct clk_parent_data){
114*4882a593Smuzhiyun .fw_name = "xo",
115*4882a593Smuzhiyun .name = "xo"
116*4882a593Smuzhiyun },
117*4882a593Smuzhiyun .num_parents = 1,
118*4882a593Smuzhiyun .ops = &clk_alpha_pll_fixed_fabia_ops,
119*4882a593Smuzhiyun },
120*4882a593Smuzhiyun },
121*4882a593Smuzhiyun };
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun static struct clk_alpha_pll_postdiv mmpll1_out_even = {
124*4882a593Smuzhiyun .offset = 0xc050,
125*4882a593Smuzhiyun .post_div_shift = 8,
126*4882a593Smuzhiyun .post_div_table = post_div_table_fabia_even,
127*4882a593Smuzhiyun .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
128*4882a593Smuzhiyun .width = 4,
129*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
130*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
131*4882a593Smuzhiyun .name = "mmpll1_out_even",
132*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &mmpll1.clkr.hw },
133*4882a593Smuzhiyun .num_parents = 1,
134*4882a593Smuzhiyun .ops = &clk_alpha_pll_postdiv_fabia_ops,
135*4882a593Smuzhiyun },
136*4882a593Smuzhiyun };
137*4882a593Smuzhiyun
138*4882a593Smuzhiyun static struct clk_alpha_pll mmpll3 = {
139*4882a593Smuzhiyun .offset = 0x0,
140*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
141*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
142*4882a593Smuzhiyun .name = "mmpll3",
143*4882a593Smuzhiyun .parent_data = &(const struct clk_parent_data){
144*4882a593Smuzhiyun .fw_name = "xo",
145*4882a593Smuzhiyun .name = "xo"
146*4882a593Smuzhiyun },
147*4882a593Smuzhiyun .num_parents = 1,
148*4882a593Smuzhiyun .ops = &clk_alpha_pll_fixed_fabia_ops,
149*4882a593Smuzhiyun },
150*4882a593Smuzhiyun };
151*4882a593Smuzhiyun
152*4882a593Smuzhiyun static struct clk_alpha_pll_postdiv mmpll3_out_even = {
153*4882a593Smuzhiyun .offset = 0x0,
154*4882a593Smuzhiyun .post_div_shift = 8,
155*4882a593Smuzhiyun .post_div_table = post_div_table_fabia_even,
156*4882a593Smuzhiyun .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
157*4882a593Smuzhiyun .width = 4,
158*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
159*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
160*4882a593Smuzhiyun .name = "mmpll3_out_even",
161*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &mmpll3.clkr.hw },
162*4882a593Smuzhiyun .num_parents = 1,
163*4882a593Smuzhiyun .ops = &clk_alpha_pll_postdiv_fabia_ops,
164*4882a593Smuzhiyun },
165*4882a593Smuzhiyun };
166*4882a593Smuzhiyun
167*4882a593Smuzhiyun static struct clk_alpha_pll mmpll4 = {
168*4882a593Smuzhiyun .offset = 0x50,
169*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
170*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
171*4882a593Smuzhiyun .name = "mmpll4",
172*4882a593Smuzhiyun .parent_data = &(const struct clk_parent_data){
173*4882a593Smuzhiyun .fw_name = "xo",
174*4882a593Smuzhiyun .name = "xo"
175*4882a593Smuzhiyun },
176*4882a593Smuzhiyun .num_parents = 1,
177*4882a593Smuzhiyun .ops = &clk_alpha_pll_fixed_fabia_ops,
178*4882a593Smuzhiyun },
179*4882a593Smuzhiyun };
180*4882a593Smuzhiyun
181*4882a593Smuzhiyun static struct clk_alpha_pll_postdiv mmpll4_out_even = {
182*4882a593Smuzhiyun .offset = 0x50,
183*4882a593Smuzhiyun .post_div_shift = 8,
184*4882a593Smuzhiyun .post_div_table = post_div_table_fabia_even,
185*4882a593Smuzhiyun .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
186*4882a593Smuzhiyun .width = 4,
187*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
188*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
189*4882a593Smuzhiyun .name = "mmpll4_out_even",
190*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &mmpll4.clkr.hw },
191*4882a593Smuzhiyun .num_parents = 1,
192*4882a593Smuzhiyun .ops = &clk_alpha_pll_postdiv_fabia_ops,
193*4882a593Smuzhiyun },
194*4882a593Smuzhiyun };
195*4882a593Smuzhiyun
196*4882a593Smuzhiyun static struct clk_alpha_pll mmpll5 = {
197*4882a593Smuzhiyun .offset = 0xa0,
198*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
199*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
200*4882a593Smuzhiyun .name = "mmpll5",
201*4882a593Smuzhiyun .parent_data = &(const struct clk_parent_data){
202*4882a593Smuzhiyun .fw_name = "xo",
203*4882a593Smuzhiyun .name = "xo"
204*4882a593Smuzhiyun },
205*4882a593Smuzhiyun .num_parents = 1,
206*4882a593Smuzhiyun .ops = &clk_alpha_pll_fixed_fabia_ops,
207*4882a593Smuzhiyun },
208*4882a593Smuzhiyun };
209*4882a593Smuzhiyun
210*4882a593Smuzhiyun static struct clk_alpha_pll_postdiv mmpll5_out_even = {
211*4882a593Smuzhiyun .offset = 0xa0,
212*4882a593Smuzhiyun .post_div_shift = 8,
213*4882a593Smuzhiyun .post_div_table = post_div_table_fabia_even,
214*4882a593Smuzhiyun .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
215*4882a593Smuzhiyun .width = 4,
216*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
217*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
218*4882a593Smuzhiyun .name = "mmpll5_out_even",
219*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &mmpll5.clkr.hw },
220*4882a593Smuzhiyun .num_parents = 1,
221*4882a593Smuzhiyun .ops = &clk_alpha_pll_postdiv_fabia_ops,
222*4882a593Smuzhiyun },
223*4882a593Smuzhiyun };
224*4882a593Smuzhiyun
225*4882a593Smuzhiyun static struct clk_alpha_pll mmpll6 = {
226*4882a593Smuzhiyun .offset = 0xf0,
227*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
228*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
229*4882a593Smuzhiyun .name = "mmpll6",
230*4882a593Smuzhiyun .parent_data = &(const struct clk_parent_data){
231*4882a593Smuzhiyun .fw_name = "xo",
232*4882a593Smuzhiyun .name = "xo"
233*4882a593Smuzhiyun },
234*4882a593Smuzhiyun .num_parents = 1,
235*4882a593Smuzhiyun .ops = &clk_alpha_pll_fixed_fabia_ops,
236*4882a593Smuzhiyun },
237*4882a593Smuzhiyun };
238*4882a593Smuzhiyun
239*4882a593Smuzhiyun static struct clk_alpha_pll_postdiv mmpll6_out_even = {
240*4882a593Smuzhiyun .offset = 0xf0,
241*4882a593Smuzhiyun .post_div_shift = 8,
242*4882a593Smuzhiyun .post_div_table = post_div_table_fabia_even,
243*4882a593Smuzhiyun .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
244*4882a593Smuzhiyun .width = 4,
245*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
246*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
247*4882a593Smuzhiyun .name = "mmpll6_out_even",
248*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &mmpll6.clkr.hw },
249*4882a593Smuzhiyun .num_parents = 1,
250*4882a593Smuzhiyun .ops = &clk_alpha_pll_postdiv_fabia_ops,
251*4882a593Smuzhiyun },
252*4882a593Smuzhiyun };
253*4882a593Smuzhiyun
254*4882a593Smuzhiyun static struct clk_alpha_pll mmpll7 = {
255*4882a593Smuzhiyun .offset = 0x140,
256*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
257*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
258*4882a593Smuzhiyun .name = "mmpll7",
259*4882a593Smuzhiyun .parent_data = &(const struct clk_parent_data){
260*4882a593Smuzhiyun .fw_name = "xo",
261*4882a593Smuzhiyun .name = "xo"
262*4882a593Smuzhiyun },
263*4882a593Smuzhiyun .num_parents = 1,
264*4882a593Smuzhiyun .ops = &clk_alpha_pll_fixed_fabia_ops,
265*4882a593Smuzhiyun },
266*4882a593Smuzhiyun };
267*4882a593Smuzhiyun
268*4882a593Smuzhiyun static struct clk_alpha_pll_postdiv mmpll7_out_even = {
269*4882a593Smuzhiyun .offset = 0x140,
270*4882a593Smuzhiyun .post_div_shift = 8,
271*4882a593Smuzhiyun .post_div_table = post_div_table_fabia_even,
272*4882a593Smuzhiyun .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
273*4882a593Smuzhiyun .width = 4,
274*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
275*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
276*4882a593Smuzhiyun .name = "mmpll7_out_even",
277*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &mmpll7.clkr.hw },
278*4882a593Smuzhiyun .num_parents = 1,
279*4882a593Smuzhiyun .ops = &clk_alpha_pll_postdiv_fabia_ops,
280*4882a593Smuzhiyun },
281*4882a593Smuzhiyun };
282*4882a593Smuzhiyun
283*4882a593Smuzhiyun static struct clk_alpha_pll mmpll10 = {
284*4882a593Smuzhiyun .offset = 0x190,
285*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
286*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
287*4882a593Smuzhiyun .name = "mmpll10",
288*4882a593Smuzhiyun .parent_data = &(const struct clk_parent_data){
289*4882a593Smuzhiyun .fw_name = "xo",
290*4882a593Smuzhiyun .name = "xo"
291*4882a593Smuzhiyun },
292*4882a593Smuzhiyun .num_parents = 1,
293*4882a593Smuzhiyun .ops = &clk_alpha_pll_fixed_fabia_ops,
294*4882a593Smuzhiyun },
295*4882a593Smuzhiyun };
296*4882a593Smuzhiyun
297*4882a593Smuzhiyun static struct clk_alpha_pll_postdiv mmpll10_out_even = {
298*4882a593Smuzhiyun .offset = 0x190,
299*4882a593Smuzhiyun .post_div_shift = 8,
300*4882a593Smuzhiyun .post_div_table = post_div_table_fabia_even,
301*4882a593Smuzhiyun .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
302*4882a593Smuzhiyun .width = 4,
303*4882a593Smuzhiyun .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
304*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
305*4882a593Smuzhiyun .name = "mmpll10_out_even",
306*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &mmpll10.clkr.hw },
307*4882a593Smuzhiyun .num_parents = 1,
308*4882a593Smuzhiyun .ops = &clk_alpha_pll_postdiv_fabia_ops,
309*4882a593Smuzhiyun },
310*4882a593Smuzhiyun };
311*4882a593Smuzhiyun
312*4882a593Smuzhiyun static const struct parent_map mmss_xo_hdmi_map[] = {
313*4882a593Smuzhiyun { P_XO, 0 },
314*4882a593Smuzhiyun { P_HDMIPLL, 1 },
315*4882a593Smuzhiyun { P_CORE_BI_PLL_TEST_SE, 7 }
316*4882a593Smuzhiyun };
317*4882a593Smuzhiyun
318*4882a593Smuzhiyun static const struct clk_parent_data mmss_xo_hdmi[] = {
319*4882a593Smuzhiyun { .fw_name = "xo", .name = "xo" },
320*4882a593Smuzhiyun { .fw_name = "hdmipll", .name = "hdmipll" },
321*4882a593Smuzhiyun { .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
322*4882a593Smuzhiyun };
323*4882a593Smuzhiyun
324*4882a593Smuzhiyun static const struct parent_map mmss_xo_dsi0pll_dsi1pll_map[] = {
325*4882a593Smuzhiyun { P_XO, 0 },
326*4882a593Smuzhiyun { P_DSI0PLL, 1 },
327*4882a593Smuzhiyun { P_DSI1PLL, 2 },
328*4882a593Smuzhiyun { P_CORE_BI_PLL_TEST_SE, 7 }
329*4882a593Smuzhiyun };
330*4882a593Smuzhiyun
331*4882a593Smuzhiyun static const struct clk_parent_data mmss_xo_dsi0pll_dsi1pll[] = {
332*4882a593Smuzhiyun { .fw_name = "xo", .name = "xo" },
333*4882a593Smuzhiyun { .fw_name = "dsi0dsi", .name = "dsi0dsi" },
334*4882a593Smuzhiyun { .fw_name = "dsi1dsi", .name = "dsi1dsi" },
335*4882a593Smuzhiyun { .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
336*4882a593Smuzhiyun };
337*4882a593Smuzhiyun
338*4882a593Smuzhiyun static const struct parent_map mmss_xo_dsibyte_map[] = {
339*4882a593Smuzhiyun { P_XO, 0 },
340*4882a593Smuzhiyun { P_DSI0PLL_BYTE, 1 },
341*4882a593Smuzhiyun { P_DSI1PLL_BYTE, 2 },
342*4882a593Smuzhiyun { P_CORE_BI_PLL_TEST_SE, 7 }
343*4882a593Smuzhiyun };
344*4882a593Smuzhiyun
345*4882a593Smuzhiyun static const struct clk_parent_data mmss_xo_dsibyte[] = {
346*4882a593Smuzhiyun { .fw_name = "xo", .name = "xo" },
347*4882a593Smuzhiyun { .fw_name = "dsi0byte", .name = "dsi0byte" },
348*4882a593Smuzhiyun { .fw_name = "dsi1byte", .name = "dsi1byte" },
349*4882a593Smuzhiyun { .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
350*4882a593Smuzhiyun };
351*4882a593Smuzhiyun
352*4882a593Smuzhiyun static const struct parent_map mmss_xo_dp_map[] = {
353*4882a593Smuzhiyun { P_XO, 0 },
354*4882a593Smuzhiyun { P_DPLINK, 1 },
355*4882a593Smuzhiyun { P_DPVCO, 2 },
356*4882a593Smuzhiyun { P_CORE_BI_PLL_TEST_SE, 7 }
357*4882a593Smuzhiyun };
358*4882a593Smuzhiyun
359*4882a593Smuzhiyun static const struct clk_parent_data mmss_xo_dp[] = {
360*4882a593Smuzhiyun { .fw_name = "xo", .name = "xo" },
361*4882a593Smuzhiyun { .fw_name = "dplink", .name = "dplink" },
362*4882a593Smuzhiyun { .fw_name = "dpvco", .name = "dpvco" },
363*4882a593Smuzhiyun { .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
364*4882a593Smuzhiyun };
365*4882a593Smuzhiyun
366*4882a593Smuzhiyun static const struct parent_map mmss_xo_gpll0_gpll0_div_map[] = {
367*4882a593Smuzhiyun { P_XO, 0 },
368*4882a593Smuzhiyun { P_GPLL0, 5 },
369*4882a593Smuzhiyun { P_GPLL0_DIV, 6 },
370*4882a593Smuzhiyun { P_CORE_BI_PLL_TEST_SE, 7 }
371*4882a593Smuzhiyun };
372*4882a593Smuzhiyun
373*4882a593Smuzhiyun static const struct clk_parent_data mmss_xo_gpll0_gpll0_div[] = {
374*4882a593Smuzhiyun { .fw_name = "xo", .name = "xo" },
375*4882a593Smuzhiyun { .fw_name = "gpll0", .name = "gpll0" },
376*4882a593Smuzhiyun { .hw = &gpll0_div.hw },
377*4882a593Smuzhiyun { .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
378*4882a593Smuzhiyun };
379*4882a593Smuzhiyun
380*4882a593Smuzhiyun static const struct parent_map mmss_xo_mmpll0_gpll0_gpll0_div_map[] = {
381*4882a593Smuzhiyun { P_XO, 0 },
382*4882a593Smuzhiyun { P_MMPLL0_OUT_EVEN, 1 },
383*4882a593Smuzhiyun { P_GPLL0, 5 },
384*4882a593Smuzhiyun { P_GPLL0_DIV, 6 },
385*4882a593Smuzhiyun { P_CORE_BI_PLL_TEST_SE, 7 }
386*4882a593Smuzhiyun };
387*4882a593Smuzhiyun
388*4882a593Smuzhiyun static const struct clk_parent_data mmss_xo_mmpll0_gpll0_gpll0_div[] = {
389*4882a593Smuzhiyun { .fw_name = "xo", .name = "xo" },
390*4882a593Smuzhiyun { .hw = &mmpll0_out_even.clkr.hw },
391*4882a593Smuzhiyun { .fw_name = "gpll0", .name = "gpll0" },
392*4882a593Smuzhiyun { .hw = &gpll0_div.hw },
393*4882a593Smuzhiyun { .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
394*4882a593Smuzhiyun };
395*4882a593Smuzhiyun
396*4882a593Smuzhiyun static const struct parent_map mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map[] = {
397*4882a593Smuzhiyun { P_XO, 0 },
398*4882a593Smuzhiyun { P_MMPLL0_OUT_EVEN, 1 },
399*4882a593Smuzhiyun { P_MMPLL1_OUT_EVEN, 2 },
400*4882a593Smuzhiyun { P_GPLL0, 5 },
401*4882a593Smuzhiyun { P_GPLL0_DIV, 6 },
402*4882a593Smuzhiyun { P_CORE_BI_PLL_TEST_SE, 7 }
403*4882a593Smuzhiyun };
404*4882a593Smuzhiyun
405*4882a593Smuzhiyun static const struct clk_parent_data mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div[] = {
406*4882a593Smuzhiyun { .fw_name = "xo", .name = "xo" },
407*4882a593Smuzhiyun { .hw = &mmpll0_out_even.clkr.hw },
408*4882a593Smuzhiyun { .hw = &mmpll1_out_even.clkr.hw },
409*4882a593Smuzhiyun { .fw_name = "gpll0", .name = "gpll0" },
410*4882a593Smuzhiyun { .hw = &gpll0_div.hw },
411*4882a593Smuzhiyun { .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
412*4882a593Smuzhiyun };
413*4882a593Smuzhiyun
414*4882a593Smuzhiyun static const struct parent_map mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map[] = {
415*4882a593Smuzhiyun { P_XO, 0 },
416*4882a593Smuzhiyun { P_MMPLL0_OUT_EVEN, 1 },
417*4882a593Smuzhiyun { P_MMPLL5_OUT_EVEN, 2 },
418*4882a593Smuzhiyun { P_GPLL0, 5 },
419*4882a593Smuzhiyun { P_GPLL0_DIV, 6 },
420*4882a593Smuzhiyun { P_CORE_BI_PLL_TEST_SE, 7 }
421*4882a593Smuzhiyun };
422*4882a593Smuzhiyun
423*4882a593Smuzhiyun static const struct clk_parent_data mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div[] = {
424*4882a593Smuzhiyun { .fw_name = "xo", .name = "xo" },
425*4882a593Smuzhiyun { .hw = &mmpll0_out_even.clkr.hw },
426*4882a593Smuzhiyun { .hw = &mmpll5_out_even.clkr.hw },
427*4882a593Smuzhiyun { .fw_name = "gpll0", .name = "gpll0" },
428*4882a593Smuzhiyun { .hw = &gpll0_div.hw },
429*4882a593Smuzhiyun { .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
430*4882a593Smuzhiyun };
431*4882a593Smuzhiyun
432*4882a593Smuzhiyun static const struct parent_map mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div_map[] = {
433*4882a593Smuzhiyun { P_XO, 0 },
434*4882a593Smuzhiyun { P_MMPLL0_OUT_EVEN, 1 },
435*4882a593Smuzhiyun { P_MMPLL3_OUT_EVEN, 3 },
436*4882a593Smuzhiyun { P_MMPLL6_OUT_EVEN, 4 },
437*4882a593Smuzhiyun { P_GPLL0, 5 },
438*4882a593Smuzhiyun { P_GPLL0_DIV, 6 },
439*4882a593Smuzhiyun { P_CORE_BI_PLL_TEST_SE, 7 }
440*4882a593Smuzhiyun };
441*4882a593Smuzhiyun
442*4882a593Smuzhiyun static const struct clk_parent_data mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div[] = {
443*4882a593Smuzhiyun { .fw_name = "xo", .name = "xo" },
444*4882a593Smuzhiyun { .hw = &mmpll0_out_even.clkr.hw },
445*4882a593Smuzhiyun { .hw = &mmpll3_out_even.clkr.hw },
446*4882a593Smuzhiyun { .hw = &mmpll6_out_even.clkr.hw },
447*4882a593Smuzhiyun { .fw_name = "gpll0", .name = "gpll0" },
448*4882a593Smuzhiyun { .hw = &gpll0_div.hw },
449*4882a593Smuzhiyun { .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
450*4882a593Smuzhiyun };
451*4882a593Smuzhiyun
452*4882a593Smuzhiyun static const struct parent_map mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map[] = {
453*4882a593Smuzhiyun { P_XO, 0 },
454*4882a593Smuzhiyun { P_MMPLL4_OUT_EVEN, 1 },
455*4882a593Smuzhiyun { P_MMPLL7_OUT_EVEN, 2 },
456*4882a593Smuzhiyun { P_MMPLL10_OUT_EVEN, 3 },
457*4882a593Smuzhiyun { P_GPLL0, 5 },
458*4882a593Smuzhiyun { P_GPLL0_DIV, 6 },
459*4882a593Smuzhiyun { P_CORE_BI_PLL_TEST_SE, 7 }
460*4882a593Smuzhiyun };
461*4882a593Smuzhiyun
462*4882a593Smuzhiyun static const struct clk_parent_data mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div[] = {
463*4882a593Smuzhiyun { .fw_name = "xo", .name = "xo" },
464*4882a593Smuzhiyun { .hw = &mmpll4_out_even.clkr.hw },
465*4882a593Smuzhiyun { .hw = &mmpll7_out_even.clkr.hw },
466*4882a593Smuzhiyun { .hw = &mmpll10_out_even.clkr.hw },
467*4882a593Smuzhiyun { .fw_name = "gpll0", .name = "gpll0" },
468*4882a593Smuzhiyun { .hw = &gpll0_div.hw },
469*4882a593Smuzhiyun { .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
470*4882a593Smuzhiyun };
471*4882a593Smuzhiyun
472*4882a593Smuzhiyun static const struct parent_map mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div_map[] = {
473*4882a593Smuzhiyun { P_XO, 0 },
474*4882a593Smuzhiyun { P_MMPLL0_OUT_EVEN, 1 },
475*4882a593Smuzhiyun { P_MMPLL7_OUT_EVEN, 2 },
476*4882a593Smuzhiyun { P_MMPLL10_OUT_EVEN, 3 },
477*4882a593Smuzhiyun { P_GPLL0, 5 },
478*4882a593Smuzhiyun { P_GPLL0_DIV, 6 },
479*4882a593Smuzhiyun { P_CORE_BI_PLL_TEST_SE, 7 }
480*4882a593Smuzhiyun };
481*4882a593Smuzhiyun
482*4882a593Smuzhiyun static const struct clk_parent_data mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div[] = {
483*4882a593Smuzhiyun { .fw_name = "xo", .name = "xo" },
484*4882a593Smuzhiyun { .hw = &mmpll0_out_even.clkr.hw },
485*4882a593Smuzhiyun { .hw = &mmpll7_out_even.clkr.hw },
486*4882a593Smuzhiyun { .hw = &mmpll10_out_even.clkr.hw },
487*4882a593Smuzhiyun { .fw_name = "gpll0", .name = "gpll0" },
488*4882a593Smuzhiyun { .hw = &gpll0_div.hw },
489*4882a593Smuzhiyun { .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
490*4882a593Smuzhiyun };
491*4882a593Smuzhiyun
492*4882a593Smuzhiyun static const struct parent_map mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map[] = {
493*4882a593Smuzhiyun { P_XO, 0 },
494*4882a593Smuzhiyun { P_MMPLL0_OUT_EVEN, 1 },
495*4882a593Smuzhiyun { P_MMPLL4_OUT_EVEN, 2 },
496*4882a593Smuzhiyun { P_MMPLL7_OUT_EVEN, 3 },
497*4882a593Smuzhiyun { P_MMPLL10_OUT_EVEN, 4 },
498*4882a593Smuzhiyun { P_GPLL0, 5 },
499*4882a593Smuzhiyun { P_GPLL0_DIV, 6 },
500*4882a593Smuzhiyun { P_CORE_BI_PLL_TEST_SE, 7 }
501*4882a593Smuzhiyun };
502*4882a593Smuzhiyun
503*4882a593Smuzhiyun static const struct clk_parent_data mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div[] = {
504*4882a593Smuzhiyun { .fw_name = "xo", .name = "xo" },
505*4882a593Smuzhiyun { .hw = &mmpll0_out_even.clkr.hw },
506*4882a593Smuzhiyun { .hw = &mmpll4_out_even.clkr.hw },
507*4882a593Smuzhiyun { .hw = &mmpll7_out_even.clkr.hw },
508*4882a593Smuzhiyun { .hw = &mmpll10_out_even.clkr.hw },
509*4882a593Smuzhiyun { .fw_name = "gpll0", .name = "gpll0" },
510*4882a593Smuzhiyun { .hw = &gpll0_div.hw },
511*4882a593Smuzhiyun { .fw_name = "core_bi_pll_test_se", .name = "core_bi_pll_test_se" },
512*4882a593Smuzhiyun };
513*4882a593Smuzhiyun
514*4882a593Smuzhiyun static struct clk_rcg2 byte0_clk_src = {
515*4882a593Smuzhiyun .cmd_rcgr = 0x2120,
516*4882a593Smuzhiyun .hid_width = 5,
517*4882a593Smuzhiyun .parent_map = mmss_xo_dsibyte_map,
518*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
519*4882a593Smuzhiyun .name = "byte0_clk_src",
520*4882a593Smuzhiyun .parent_data = mmss_xo_dsibyte,
521*4882a593Smuzhiyun .num_parents = 4,
522*4882a593Smuzhiyun .ops = &clk_byte2_ops,
523*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
524*4882a593Smuzhiyun },
525*4882a593Smuzhiyun };
526*4882a593Smuzhiyun
527*4882a593Smuzhiyun static struct clk_rcg2 byte1_clk_src = {
528*4882a593Smuzhiyun .cmd_rcgr = 0x2140,
529*4882a593Smuzhiyun .hid_width = 5,
530*4882a593Smuzhiyun .parent_map = mmss_xo_dsibyte_map,
531*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
532*4882a593Smuzhiyun .name = "byte1_clk_src",
533*4882a593Smuzhiyun .parent_data = mmss_xo_dsibyte,
534*4882a593Smuzhiyun .num_parents = 4,
535*4882a593Smuzhiyun .ops = &clk_byte2_ops,
536*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
537*4882a593Smuzhiyun },
538*4882a593Smuzhiyun };
539*4882a593Smuzhiyun
540*4882a593Smuzhiyun static const struct freq_tbl ftbl_cci_clk_src[] = {
541*4882a593Smuzhiyun F(37500000, P_GPLL0, 16, 0, 0),
542*4882a593Smuzhiyun F(50000000, P_GPLL0, 12, 0, 0),
543*4882a593Smuzhiyun F(100000000, P_GPLL0, 6, 0, 0),
544*4882a593Smuzhiyun { }
545*4882a593Smuzhiyun };
546*4882a593Smuzhiyun
547*4882a593Smuzhiyun static struct clk_rcg2 cci_clk_src = {
548*4882a593Smuzhiyun .cmd_rcgr = 0x3300,
549*4882a593Smuzhiyun .hid_width = 5,
550*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div_map,
551*4882a593Smuzhiyun .freq_tbl = ftbl_cci_clk_src,
552*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
553*4882a593Smuzhiyun .name = "cci_clk_src",
554*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div,
555*4882a593Smuzhiyun .num_parents = 7,
556*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
557*4882a593Smuzhiyun },
558*4882a593Smuzhiyun };
559*4882a593Smuzhiyun
560*4882a593Smuzhiyun static const struct freq_tbl ftbl_cpp_clk_src[] = {
561*4882a593Smuzhiyun F(100000000, P_GPLL0, 6, 0, 0),
562*4882a593Smuzhiyun F(200000000, P_GPLL0, 3, 0, 0),
563*4882a593Smuzhiyun F(384000000, P_MMPLL4_OUT_EVEN, 2, 0, 0),
564*4882a593Smuzhiyun F(404000000, P_MMPLL0_OUT_EVEN, 2, 0, 0),
565*4882a593Smuzhiyun F(480000000, P_MMPLL7_OUT_EVEN, 2, 0, 0),
566*4882a593Smuzhiyun F(576000000, P_MMPLL10_OUT_EVEN, 1, 0, 0),
567*4882a593Smuzhiyun F(600000000, P_GPLL0, 1, 0, 0),
568*4882a593Smuzhiyun { }
569*4882a593Smuzhiyun };
570*4882a593Smuzhiyun
571*4882a593Smuzhiyun static struct clk_rcg2 cpp_clk_src = {
572*4882a593Smuzhiyun .cmd_rcgr = 0x3640,
573*4882a593Smuzhiyun .hid_width = 5,
574*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
575*4882a593Smuzhiyun .freq_tbl = ftbl_cpp_clk_src,
576*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
577*4882a593Smuzhiyun .name = "cpp_clk_src",
578*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
579*4882a593Smuzhiyun .num_parents = 8,
580*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
581*4882a593Smuzhiyun },
582*4882a593Smuzhiyun };
583*4882a593Smuzhiyun
584*4882a593Smuzhiyun static const struct freq_tbl ftbl_csi_clk_src[] = {
585*4882a593Smuzhiyun F(164571429, P_MMPLL10_OUT_EVEN, 3.5, 0, 0),
586*4882a593Smuzhiyun F(256000000, P_MMPLL4_OUT_EVEN, 3, 0, 0),
587*4882a593Smuzhiyun F(274290000, P_MMPLL7_OUT_EVEN, 3.5, 0, 0),
588*4882a593Smuzhiyun F(300000000, P_GPLL0, 2, 0, 0),
589*4882a593Smuzhiyun F(384000000, P_MMPLL4_OUT_EVEN, 2, 0, 0),
590*4882a593Smuzhiyun F(576000000, P_MMPLL10_OUT_EVEN, 1, 0, 0),
591*4882a593Smuzhiyun { }
592*4882a593Smuzhiyun };
593*4882a593Smuzhiyun
594*4882a593Smuzhiyun static struct clk_rcg2 csi0_clk_src = {
595*4882a593Smuzhiyun .cmd_rcgr = 0x3090,
596*4882a593Smuzhiyun .hid_width = 5,
597*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
598*4882a593Smuzhiyun .freq_tbl = ftbl_csi_clk_src,
599*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
600*4882a593Smuzhiyun .name = "csi0_clk_src",
601*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
602*4882a593Smuzhiyun .num_parents = 8,
603*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
604*4882a593Smuzhiyun },
605*4882a593Smuzhiyun };
606*4882a593Smuzhiyun
607*4882a593Smuzhiyun static struct clk_rcg2 csi1_clk_src = {
608*4882a593Smuzhiyun .cmd_rcgr = 0x3100,
609*4882a593Smuzhiyun .hid_width = 5,
610*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
611*4882a593Smuzhiyun .freq_tbl = ftbl_csi_clk_src,
612*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
613*4882a593Smuzhiyun .name = "csi1_clk_src",
614*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
615*4882a593Smuzhiyun .num_parents = 8,
616*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
617*4882a593Smuzhiyun },
618*4882a593Smuzhiyun };
619*4882a593Smuzhiyun
620*4882a593Smuzhiyun static struct clk_rcg2 csi2_clk_src = {
621*4882a593Smuzhiyun .cmd_rcgr = 0x3160,
622*4882a593Smuzhiyun .hid_width = 5,
623*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
624*4882a593Smuzhiyun .freq_tbl = ftbl_csi_clk_src,
625*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
626*4882a593Smuzhiyun .name = "csi2_clk_src",
627*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
628*4882a593Smuzhiyun .num_parents = 8,
629*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
630*4882a593Smuzhiyun },
631*4882a593Smuzhiyun };
632*4882a593Smuzhiyun
633*4882a593Smuzhiyun static struct clk_rcg2 csi3_clk_src = {
634*4882a593Smuzhiyun .cmd_rcgr = 0x31c0,
635*4882a593Smuzhiyun .hid_width = 5,
636*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
637*4882a593Smuzhiyun .freq_tbl = ftbl_csi_clk_src,
638*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
639*4882a593Smuzhiyun .name = "csi3_clk_src",
640*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
641*4882a593Smuzhiyun .num_parents = 8,
642*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
643*4882a593Smuzhiyun },
644*4882a593Smuzhiyun };
645*4882a593Smuzhiyun
646*4882a593Smuzhiyun static const struct freq_tbl ftbl_csiphy_clk_src[] = {
647*4882a593Smuzhiyun F(164571429, P_MMPLL10_OUT_EVEN, 3.5, 0, 0),
648*4882a593Smuzhiyun F(256000000, P_MMPLL4_OUT_EVEN, 3, 0, 0),
649*4882a593Smuzhiyun F(274290000, P_MMPLL7_OUT_EVEN, 3.5, 0, 0),
650*4882a593Smuzhiyun F(300000000, P_GPLL0, 2, 0, 0),
651*4882a593Smuzhiyun F(384000000, P_MMPLL4_OUT_EVEN, 2, 0, 0),
652*4882a593Smuzhiyun { }
653*4882a593Smuzhiyun };
654*4882a593Smuzhiyun
655*4882a593Smuzhiyun static struct clk_rcg2 csiphy_clk_src = {
656*4882a593Smuzhiyun .cmd_rcgr = 0x3800,
657*4882a593Smuzhiyun .hid_width = 5,
658*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
659*4882a593Smuzhiyun .freq_tbl = ftbl_csiphy_clk_src,
660*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
661*4882a593Smuzhiyun .name = "csiphy_clk_src",
662*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
663*4882a593Smuzhiyun .num_parents = 8,
664*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
665*4882a593Smuzhiyun },
666*4882a593Smuzhiyun };
667*4882a593Smuzhiyun
668*4882a593Smuzhiyun static const struct freq_tbl ftbl_csiphytimer_clk_src[] = {
669*4882a593Smuzhiyun F(200000000, P_GPLL0, 3, 0, 0),
670*4882a593Smuzhiyun F(269333333, P_MMPLL0_OUT_EVEN, 3, 0, 0),
671*4882a593Smuzhiyun { }
672*4882a593Smuzhiyun };
673*4882a593Smuzhiyun
674*4882a593Smuzhiyun static struct clk_rcg2 csi0phytimer_clk_src = {
675*4882a593Smuzhiyun .cmd_rcgr = 0x3000,
676*4882a593Smuzhiyun .hid_width = 5,
677*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
678*4882a593Smuzhiyun .freq_tbl = ftbl_csiphytimer_clk_src,
679*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
680*4882a593Smuzhiyun .name = "csi0phytimer_clk_src",
681*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
682*4882a593Smuzhiyun .num_parents = 8,
683*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
684*4882a593Smuzhiyun },
685*4882a593Smuzhiyun };
686*4882a593Smuzhiyun
687*4882a593Smuzhiyun static struct clk_rcg2 csi1phytimer_clk_src = {
688*4882a593Smuzhiyun .cmd_rcgr = 0x3030,
689*4882a593Smuzhiyun .hid_width = 5,
690*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
691*4882a593Smuzhiyun .freq_tbl = ftbl_csiphytimer_clk_src,
692*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
693*4882a593Smuzhiyun .name = "csi1phytimer_clk_src",
694*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
695*4882a593Smuzhiyun .num_parents = 8,
696*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
697*4882a593Smuzhiyun },
698*4882a593Smuzhiyun };
699*4882a593Smuzhiyun
700*4882a593Smuzhiyun static struct clk_rcg2 csi2phytimer_clk_src = {
701*4882a593Smuzhiyun .cmd_rcgr = 0x3060,
702*4882a593Smuzhiyun .hid_width = 5,
703*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
704*4882a593Smuzhiyun .freq_tbl = ftbl_csiphytimer_clk_src,
705*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
706*4882a593Smuzhiyun .name = "csi2phytimer_clk_src",
707*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
708*4882a593Smuzhiyun .num_parents = 8,
709*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
710*4882a593Smuzhiyun },
711*4882a593Smuzhiyun };
712*4882a593Smuzhiyun
713*4882a593Smuzhiyun static const struct freq_tbl ftbl_dp_aux_clk_src[] = {
714*4882a593Smuzhiyun F(19200000, P_XO, 1, 0, 0),
715*4882a593Smuzhiyun { }
716*4882a593Smuzhiyun };
717*4882a593Smuzhiyun
718*4882a593Smuzhiyun static struct clk_rcg2 dp_aux_clk_src = {
719*4882a593Smuzhiyun .cmd_rcgr = 0x2260,
720*4882a593Smuzhiyun .hid_width = 5,
721*4882a593Smuzhiyun .parent_map = mmss_xo_gpll0_gpll0_div_map,
722*4882a593Smuzhiyun .freq_tbl = ftbl_dp_aux_clk_src,
723*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
724*4882a593Smuzhiyun .name = "dp_aux_clk_src",
725*4882a593Smuzhiyun .parent_data = mmss_xo_gpll0_gpll0_div,
726*4882a593Smuzhiyun .num_parents = 4,
727*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
728*4882a593Smuzhiyun },
729*4882a593Smuzhiyun };
730*4882a593Smuzhiyun
731*4882a593Smuzhiyun static const struct freq_tbl ftbl_dp_crypto_clk_src[] = {
732*4882a593Smuzhiyun F(101250, P_DPLINK, 1, 5, 16),
733*4882a593Smuzhiyun F(168750, P_DPLINK, 1, 5, 16),
734*4882a593Smuzhiyun F(337500, P_DPLINK, 1, 5, 16),
735*4882a593Smuzhiyun { }
736*4882a593Smuzhiyun };
737*4882a593Smuzhiyun
738*4882a593Smuzhiyun static struct clk_rcg2 dp_crypto_clk_src = {
739*4882a593Smuzhiyun .cmd_rcgr = 0x2220,
740*4882a593Smuzhiyun .hid_width = 5,
741*4882a593Smuzhiyun .parent_map = mmss_xo_dp_map,
742*4882a593Smuzhiyun .freq_tbl = ftbl_dp_crypto_clk_src,
743*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
744*4882a593Smuzhiyun .name = "dp_crypto_clk_src",
745*4882a593Smuzhiyun .parent_data = mmss_xo_dp,
746*4882a593Smuzhiyun .num_parents = 4,
747*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
748*4882a593Smuzhiyun },
749*4882a593Smuzhiyun };
750*4882a593Smuzhiyun
751*4882a593Smuzhiyun static const struct freq_tbl ftbl_dp_link_clk_src[] = {
752*4882a593Smuzhiyun F(162000, P_DPLINK, 2, 0, 0),
753*4882a593Smuzhiyun F(270000, P_DPLINK, 2, 0, 0),
754*4882a593Smuzhiyun F(540000, P_DPLINK, 2, 0, 0),
755*4882a593Smuzhiyun { }
756*4882a593Smuzhiyun };
757*4882a593Smuzhiyun
758*4882a593Smuzhiyun static struct clk_rcg2 dp_link_clk_src = {
759*4882a593Smuzhiyun .cmd_rcgr = 0x2200,
760*4882a593Smuzhiyun .hid_width = 5,
761*4882a593Smuzhiyun .parent_map = mmss_xo_dp_map,
762*4882a593Smuzhiyun .freq_tbl = ftbl_dp_link_clk_src,
763*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
764*4882a593Smuzhiyun .name = "dp_link_clk_src",
765*4882a593Smuzhiyun .parent_data = mmss_xo_dp,
766*4882a593Smuzhiyun .num_parents = 4,
767*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
768*4882a593Smuzhiyun },
769*4882a593Smuzhiyun };
770*4882a593Smuzhiyun
771*4882a593Smuzhiyun static const struct freq_tbl ftbl_dp_pixel_clk_src[] = {
772*4882a593Smuzhiyun F(154000000, P_DPVCO, 1, 0, 0),
773*4882a593Smuzhiyun F(337500000, P_DPVCO, 2, 0, 0),
774*4882a593Smuzhiyun F(675000000, P_DPVCO, 2, 0, 0),
775*4882a593Smuzhiyun { }
776*4882a593Smuzhiyun };
777*4882a593Smuzhiyun
778*4882a593Smuzhiyun static struct clk_rcg2 dp_pixel_clk_src = {
779*4882a593Smuzhiyun .cmd_rcgr = 0x2240,
780*4882a593Smuzhiyun .hid_width = 5,
781*4882a593Smuzhiyun .parent_map = mmss_xo_dp_map,
782*4882a593Smuzhiyun .freq_tbl = ftbl_dp_pixel_clk_src,
783*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
784*4882a593Smuzhiyun .name = "dp_pixel_clk_src",
785*4882a593Smuzhiyun .parent_data = mmss_xo_dp,
786*4882a593Smuzhiyun .num_parents = 4,
787*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
788*4882a593Smuzhiyun },
789*4882a593Smuzhiyun };
790*4882a593Smuzhiyun
791*4882a593Smuzhiyun static const struct freq_tbl ftbl_esc_clk_src[] = {
792*4882a593Smuzhiyun F(19200000, P_XO, 1, 0, 0),
793*4882a593Smuzhiyun { }
794*4882a593Smuzhiyun };
795*4882a593Smuzhiyun
796*4882a593Smuzhiyun static struct clk_rcg2 esc0_clk_src = {
797*4882a593Smuzhiyun .cmd_rcgr = 0x2160,
798*4882a593Smuzhiyun .hid_width = 5,
799*4882a593Smuzhiyun .parent_map = mmss_xo_dsibyte_map,
800*4882a593Smuzhiyun .freq_tbl = ftbl_esc_clk_src,
801*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
802*4882a593Smuzhiyun .name = "esc0_clk_src",
803*4882a593Smuzhiyun .parent_data = mmss_xo_dsibyte,
804*4882a593Smuzhiyun .num_parents = 4,
805*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
806*4882a593Smuzhiyun },
807*4882a593Smuzhiyun };
808*4882a593Smuzhiyun
809*4882a593Smuzhiyun static struct clk_rcg2 esc1_clk_src = {
810*4882a593Smuzhiyun .cmd_rcgr = 0x2180,
811*4882a593Smuzhiyun .hid_width = 5,
812*4882a593Smuzhiyun .parent_map = mmss_xo_dsibyte_map,
813*4882a593Smuzhiyun .freq_tbl = ftbl_esc_clk_src,
814*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
815*4882a593Smuzhiyun .name = "esc1_clk_src",
816*4882a593Smuzhiyun .parent_data = mmss_xo_dsibyte,
817*4882a593Smuzhiyun .num_parents = 4,
818*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
819*4882a593Smuzhiyun },
820*4882a593Smuzhiyun };
821*4882a593Smuzhiyun
822*4882a593Smuzhiyun static const struct freq_tbl ftbl_extpclk_clk_src[] = {
823*4882a593Smuzhiyun { .src = P_HDMIPLL },
824*4882a593Smuzhiyun { }
825*4882a593Smuzhiyun };
826*4882a593Smuzhiyun
827*4882a593Smuzhiyun static struct clk_rcg2 extpclk_clk_src = {
828*4882a593Smuzhiyun .cmd_rcgr = 0x2060,
829*4882a593Smuzhiyun .hid_width = 5,
830*4882a593Smuzhiyun .parent_map = mmss_xo_hdmi_map,
831*4882a593Smuzhiyun .freq_tbl = ftbl_extpclk_clk_src,
832*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
833*4882a593Smuzhiyun .name = "extpclk_clk_src",
834*4882a593Smuzhiyun .parent_data = mmss_xo_hdmi,
835*4882a593Smuzhiyun .num_parents = 3,
836*4882a593Smuzhiyun .ops = &clk_byte_ops,
837*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
838*4882a593Smuzhiyun },
839*4882a593Smuzhiyun };
840*4882a593Smuzhiyun
841*4882a593Smuzhiyun static const struct freq_tbl ftbl_fd_core_clk_src[] = {
842*4882a593Smuzhiyun F(100000000, P_GPLL0, 6, 0, 0),
843*4882a593Smuzhiyun F(200000000, P_GPLL0, 3, 0, 0),
844*4882a593Smuzhiyun F(404000000, P_MMPLL0_OUT_EVEN, 2, 0, 0),
845*4882a593Smuzhiyun F(480000000, P_MMPLL7_OUT_EVEN, 2, 0, 0),
846*4882a593Smuzhiyun F(576000000, P_MMPLL10_OUT_EVEN, 1, 0, 0),
847*4882a593Smuzhiyun { }
848*4882a593Smuzhiyun };
849*4882a593Smuzhiyun
850*4882a593Smuzhiyun static struct clk_rcg2 fd_core_clk_src = {
851*4882a593Smuzhiyun .cmd_rcgr = 0x3b00,
852*4882a593Smuzhiyun .hid_width = 5,
853*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
854*4882a593Smuzhiyun .freq_tbl = ftbl_fd_core_clk_src,
855*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
856*4882a593Smuzhiyun .name = "fd_core_clk_src",
857*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
858*4882a593Smuzhiyun .num_parents = 8,
859*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
860*4882a593Smuzhiyun },
861*4882a593Smuzhiyun };
862*4882a593Smuzhiyun
863*4882a593Smuzhiyun static const struct freq_tbl ftbl_hdmi_clk_src[] = {
864*4882a593Smuzhiyun F(19200000, P_XO, 1, 0, 0),
865*4882a593Smuzhiyun { }
866*4882a593Smuzhiyun };
867*4882a593Smuzhiyun
868*4882a593Smuzhiyun static struct clk_rcg2 hdmi_clk_src = {
869*4882a593Smuzhiyun .cmd_rcgr = 0x2100,
870*4882a593Smuzhiyun .hid_width = 5,
871*4882a593Smuzhiyun .parent_map = mmss_xo_gpll0_gpll0_div_map,
872*4882a593Smuzhiyun .freq_tbl = ftbl_hdmi_clk_src,
873*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
874*4882a593Smuzhiyun .name = "hdmi_clk_src",
875*4882a593Smuzhiyun .parent_data = mmss_xo_gpll0_gpll0_div,
876*4882a593Smuzhiyun .num_parents = 4,
877*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
878*4882a593Smuzhiyun },
879*4882a593Smuzhiyun };
880*4882a593Smuzhiyun
881*4882a593Smuzhiyun static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
882*4882a593Smuzhiyun F(75000000, P_GPLL0, 8, 0, 0),
883*4882a593Smuzhiyun F(150000000, P_GPLL0, 4, 0, 0),
884*4882a593Smuzhiyun F(320000000, P_MMPLL7_OUT_EVEN, 3, 0, 0),
885*4882a593Smuzhiyun F(480000000, P_MMPLL7_OUT_EVEN, 2, 0, 0),
886*4882a593Smuzhiyun { }
887*4882a593Smuzhiyun };
888*4882a593Smuzhiyun
889*4882a593Smuzhiyun static struct clk_rcg2 jpeg0_clk_src = {
890*4882a593Smuzhiyun .cmd_rcgr = 0x3500,
891*4882a593Smuzhiyun .hid_width = 5,
892*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
893*4882a593Smuzhiyun .freq_tbl = ftbl_jpeg0_clk_src,
894*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
895*4882a593Smuzhiyun .name = "jpeg0_clk_src",
896*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
897*4882a593Smuzhiyun .num_parents = 8,
898*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
899*4882a593Smuzhiyun },
900*4882a593Smuzhiyun };
901*4882a593Smuzhiyun
902*4882a593Smuzhiyun static const struct freq_tbl ftbl_maxi_clk_src[] = {
903*4882a593Smuzhiyun F(19200000, P_XO, 1, 0, 0),
904*4882a593Smuzhiyun F(75000000, P_GPLL0_DIV, 4, 0, 0),
905*4882a593Smuzhiyun F(171428571, P_GPLL0, 3.5, 0, 0),
906*4882a593Smuzhiyun F(323200000, P_MMPLL0_OUT_EVEN, 2.5, 0, 0),
907*4882a593Smuzhiyun F(406000000, P_MMPLL1_OUT_EVEN, 2, 0, 0),
908*4882a593Smuzhiyun { }
909*4882a593Smuzhiyun };
910*4882a593Smuzhiyun
911*4882a593Smuzhiyun static struct clk_rcg2 maxi_clk_src = {
912*4882a593Smuzhiyun .cmd_rcgr = 0xf020,
913*4882a593Smuzhiyun .hid_width = 5,
914*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map,
915*4882a593Smuzhiyun .freq_tbl = ftbl_maxi_clk_src,
916*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
917*4882a593Smuzhiyun .name = "maxi_clk_src",
918*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div,
919*4882a593Smuzhiyun .num_parents = 6,
920*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
921*4882a593Smuzhiyun },
922*4882a593Smuzhiyun };
923*4882a593Smuzhiyun
924*4882a593Smuzhiyun static const struct freq_tbl ftbl_mclk_clk_src[] = {
925*4882a593Smuzhiyun F(4800000, P_XO, 4, 0, 0),
926*4882a593Smuzhiyun F(6000000, P_GPLL0_DIV, 10, 1, 5),
927*4882a593Smuzhiyun F(8000000, P_GPLL0_DIV, 1, 2, 75),
928*4882a593Smuzhiyun F(9600000, P_XO, 2, 0, 0),
929*4882a593Smuzhiyun F(16666667, P_GPLL0_DIV, 2, 1, 9),
930*4882a593Smuzhiyun F(19200000, P_XO, 1, 0, 0),
931*4882a593Smuzhiyun F(24000000, P_GPLL0_DIV, 1, 2, 25),
932*4882a593Smuzhiyun F(33333333, P_GPLL0_DIV, 1, 2, 9),
933*4882a593Smuzhiyun F(48000000, P_GPLL0, 1, 2, 25),
934*4882a593Smuzhiyun F(66666667, P_GPLL0, 1, 2, 9),
935*4882a593Smuzhiyun { }
936*4882a593Smuzhiyun };
937*4882a593Smuzhiyun
938*4882a593Smuzhiyun static struct clk_rcg2 mclk0_clk_src = {
939*4882a593Smuzhiyun .cmd_rcgr = 0x3360,
940*4882a593Smuzhiyun .hid_width = 5,
941*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
942*4882a593Smuzhiyun .freq_tbl = ftbl_mclk_clk_src,
943*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
944*4882a593Smuzhiyun .name = "mclk0_clk_src",
945*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
946*4882a593Smuzhiyun .num_parents = 7,
947*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
948*4882a593Smuzhiyun },
949*4882a593Smuzhiyun };
950*4882a593Smuzhiyun
951*4882a593Smuzhiyun static struct clk_rcg2 mclk1_clk_src = {
952*4882a593Smuzhiyun .cmd_rcgr = 0x3390,
953*4882a593Smuzhiyun .hid_width = 5,
954*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
955*4882a593Smuzhiyun .freq_tbl = ftbl_mclk_clk_src,
956*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
957*4882a593Smuzhiyun .name = "mclk1_clk_src",
958*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
959*4882a593Smuzhiyun .num_parents = 7,
960*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
961*4882a593Smuzhiyun },
962*4882a593Smuzhiyun };
963*4882a593Smuzhiyun
964*4882a593Smuzhiyun static struct clk_rcg2 mclk2_clk_src = {
965*4882a593Smuzhiyun .cmd_rcgr = 0x33c0,
966*4882a593Smuzhiyun .hid_width = 5,
967*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
968*4882a593Smuzhiyun .freq_tbl = ftbl_mclk_clk_src,
969*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
970*4882a593Smuzhiyun .name = "mclk2_clk_src",
971*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
972*4882a593Smuzhiyun .num_parents = 7,
973*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
974*4882a593Smuzhiyun },
975*4882a593Smuzhiyun };
976*4882a593Smuzhiyun
977*4882a593Smuzhiyun static struct clk_rcg2 mclk3_clk_src = {
978*4882a593Smuzhiyun .cmd_rcgr = 0x33f0,
979*4882a593Smuzhiyun .hid_width = 5,
980*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
981*4882a593Smuzhiyun .freq_tbl = ftbl_mclk_clk_src,
982*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
983*4882a593Smuzhiyun .name = "mclk3_clk_src",
984*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
985*4882a593Smuzhiyun .num_parents = 7,
986*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
987*4882a593Smuzhiyun },
988*4882a593Smuzhiyun };
989*4882a593Smuzhiyun
990*4882a593Smuzhiyun static const struct freq_tbl ftbl_mdp_clk_src[] = {
991*4882a593Smuzhiyun F(85714286, P_GPLL0, 7, 0, 0),
992*4882a593Smuzhiyun F(100000000, P_GPLL0, 6, 0, 0),
993*4882a593Smuzhiyun F(150000000, P_GPLL0, 4, 0, 0),
994*4882a593Smuzhiyun F(171428571, P_GPLL0, 3.5, 0, 0),
995*4882a593Smuzhiyun F(200000000, P_GPLL0, 3, 0, 0),
996*4882a593Smuzhiyun F(275000000, P_MMPLL5_OUT_EVEN, 3, 0, 0),
997*4882a593Smuzhiyun F(300000000, P_GPLL0, 2, 0, 0),
998*4882a593Smuzhiyun F(330000000, P_MMPLL5_OUT_EVEN, 2.5, 0, 0),
999*4882a593Smuzhiyun F(412500000, P_MMPLL5_OUT_EVEN, 2, 0, 0),
1000*4882a593Smuzhiyun { }
1001*4882a593Smuzhiyun };
1002*4882a593Smuzhiyun
1003*4882a593Smuzhiyun static struct clk_rcg2 mdp_clk_src = {
1004*4882a593Smuzhiyun .cmd_rcgr = 0x2040,
1005*4882a593Smuzhiyun .hid_width = 5,
1006*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map,
1007*4882a593Smuzhiyun .freq_tbl = ftbl_mdp_clk_src,
1008*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
1009*4882a593Smuzhiyun .name = "mdp_clk_src",
1010*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div,
1011*4882a593Smuzhiyun .num_parents = 6,
1012*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
1013*4882a593Smuzhiyun },
1014*4882a593Smuzhiyun };
1015*4882a593Smuzhiyun
1016*4882a593Smuzhiyun static const struct freq_tbl ftbl_vsync_clk_src[] = {
1017*4882a593Smuzhiyun F(19200000, P_XO, 1, 0, 0),
1018*4882a593Smuzhiyun { }
1019*4882a593Smuzhiyun };
1020*4882a593Smuzhiyun
1021*4882a593Smuzhiyun static struct clk_rcg2 vsync_clk_src = {
1022*4882a593Smuzhiyun .cmd_rcgr = 0x2080,
1023*4882a593Smuzhiyun .hid_width = 5,
1024*4882a593Smuzhiyun .parent_map = mmss_xo_gpll0_gpll0_div_map,
1025*4882a593Smuzhiyun .freq_tbl = ftbl_vsync_clk_src,
1026*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
1027*4882a593Smuzhiyun .name = "vsync_clk_src",
1028*4882a593Smuzhiyun .parent_data = mmss_xo_gpll0_gpll0_div,
1029*4882a593Smuzhiyun .num_parents = 4,
1030*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
1031*4882a593Smuzhiyun },
1032*4882a593Smuzhiyun };
1033*4882a593Smuzhiyun
1034*4882a593Smuzhiyun static const struct freq_tbl ftbl_ahb_clk_src[] = {
1035*4882a593Smuzhiyun F(19200000, P_XO, 1, 0, 0),
1036*4882a593Smuzhiyun F(40000000, P_GPLL0, 15, 0, 0),
1037*4882a593Smuzhiyun F(80800000, P_MMPLL0_OUT_EVEN, 10, 0, 0),
1038*4882a593Smuzhiyun { }
1039*4882a593Smuzhiyun };
1040*4882a593Smuzhiyun
1041*4882a593Smuzhiyun static struct clk_rcg2 ahb_clk_src = {
1042*4882a593Smuzhiyun .cmd_rcgr = 0x5000,
1043*4882a593Smuzhiyun .hid_width = 5,
1044*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map,
1045*4882a593Smuzhiyun .freq_tbl = ftbl_ahb_clk_src,
1046*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
1047*4882a593Smuzhiyun .name = "ahb_clk_src",
1048*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_gpll0_gpll0_div,
1049*4882a593Smuzhiyun .num_parents = 5,
1050*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
1051*4882a593Smuzhiyun },
1052*4882a593Smuzhiyun };
1053*4882a593Smuzhiyun
1054*4882a593Smuzhiyun static const struct freq_tbl ftbl_axi_clk_src[] = {
1055*4882a593Smuzhiyun F(75000000, P_GPLL0, 8, 0, 0),
1056*4882a593Smuzhiyun F(171428571, P_GPLL0, 3.5, 0, 0),
1057*4882a593Smuzhiyun F(240000000, P_GPLL0, 2.5, 0, 0),
1058*4882a593Smuzhiyun F(323200000, P_MMPLL0_OUT_EVEN, 2.5, 0, 0),
1059*4882a593Smuzhiyun F(406000000, P_MMPLL0_OUT_EVEN, 2, 0, 0),
1060*4882a593Smuzhiyun { }
1061*4882a593Smuzhiyun };
1062*4882a593Smuzhiyun
1063*4882a593Smuzhiyun /* RO to linux */
1064*4882a593Smuzhiyun static struct clk_rcg2 axi_clk_src = {
1065*4882a593Smuzhiyun .cmd_rcgr = 0xd000,
1066*4882a593Smuzhiyun .hid_width = 5,
1067*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map,
1068*4882a593Smuzhiyun .freq_tbl = ftbl_axi_clk_src,
1069*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
1070*4882a593Smuzhiyun .name = "axi_clk_src",
1071*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div,
1072*4882a593Smuzhiyun .num_parents = 6,
1073*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
1074*4882a593Smuzhiyun },
1075*4882a593Smuzhiyun };
1076*4882a593Smuzhiyun
1077*4882a593Smuzhiyun static struct clk_rcg2 pclk0_clk_src = {
1078*4882a593Smuzhiyun .cmd_rcgr = 0x2000,
1079*4882a593Smuzhiyun .mnd_width = 8,
1080*4882a593Smuzhiyun .hid_width = 5,
1081*4882a593Smuzhiyun .parent_map = mmss_xo_dsi0pll_dsi1pll_map,
1082*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
1083*4882a593Smuzhiyun .name = "pclk0_clk_src",
1084*4882a593Smuzhiyun .parent_data = mmss_xo_dsi0pll_dsi1pll,
1085*4882a593Smuzhiyun .num_parents = 4,
1086*4882a593Smuzhiyun .ops = &clk_pixel_ops,
1087*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1088*4882a593Smuzhiyun },
1089*4882a593Smuzhiyun };
1090*4882a593Smuzhiyun
1091*4882a593Smuzhiyun static struct clk_rcg2 pclk1_clk_src = {
1092*4882a593Smuzhiyun .cmd_rcgr = 0x2020,
1093*4882a593Smuzhiyun .mnd_width = 8,
1094*4882a593Smuzhiyun .hid_width = 5,
1095*4882a593Smuzhiyun .parent_map = mmss_xo_dsi0pll_dsi1pll_map,
1096*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
1097*4882a593Smuzhiyun .name = "pclk1_clk_src",
1098*4882a593Smuzhiyun .parent_data = mmss_xo_dsi0pll_dsi1pll,
1099*4882a593Smuzhiyun .num_parents = 4,
1100*4882a593Smuzhiyun .ops = &clk_pixel_ops,
1101*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1102*4882a593Smuzhiyun },
1103*4882a593Smuzhiyun };
1104*4882a593Smuzhiyun
1105*4882a593Smuzhiyun static const struct freq_tbl ftbl_rot_clk_src[] = {
1106*4882a593Smuzhiyun F(171428571, P_GPLL0, 3.5, 0, 0),
1107*4882a593Smuzhiyun F(275000000, P_MMPLL5_OUT_EVEN, 3, 0, 0),
1108*4882a593Smuzhiyun F(330000000, P_MMPLL5_OUT_EVEN, 2.5, 0, 0),
1109*4882a593Smuzhiyun F(412500000, P_MMPLL5_OUT_EVEN, 2, 0, 0),
1110*4882a593Smuzhiyun { }
1111*4882a593Smuzhiyun };
1112*4882a593Smuzhiyun
1113*4882a593Smuzhiyun static struct clk_rcg2 rot_clk_src = {
1114*4882a593Smuzhiyun .cmd_rcgr = 0x21a0,
1115*4882a593Smuzhiyun .hid_width = 5,
1116*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map,
1117*4882a593Smuzhiyun .freq_tbl = ftbl_rot_clk_src,
1118*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
1119*4882a593Smuzhiyun .name = "rot_clk_src",
1120*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div,
1121*4882a593Smuzhiyun .num_parents = 6,
1122*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
1123*4882a593Smuzhiyun },
1124*4882a593Smuzhiyun };
1125*4882a593Smuzhiyun
1126*4882a593Smuzhiyun static const struct freq_tbl ftbl_video_core_clk_src[] = {
1127*4882a593Smuzhiyun F(200000000, P_GPLL0, 3, 0, 0),
1128*4882a593Smuzhiyun F(269330000, P_MMPLL0_OUT_EVEN, 3, 0, 0),
1129*4882a593Smuzhiyun F(355200000, P_MMPLL6_OUT_EVEN, 2.5, 0, 0),
1130*4882a593Smuzhiyun F(444000000, P_MMPLL6_OUT_EVEN, 2, 0, 0),
1131*4882a593Smuzhiyun F(533000000, P_MMPLL3_OUT_EVEN, 2, 0, 0),
1132*4882a593Smuzhiyun { }
1133*4882a593Smuzhiyun };
1134*4882a593Smuzhiyun
1135*4882a593Smuzhiyun static struct clk_rcg2 video_core_clk_src = {
1136*4882a593Smuzhiyun .cmd_rcgr = 0x1000,
1137*4882a593Smuzhiyun .hid_width = 5,
1138*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div_map,
1139*4882a593Smuzhiyun .freq_tbl = ftbl_video_core_clk_src,
1140*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
1141*4882a593Smuzhiyun .name = "video_core_clk_src",
1142*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div,
1143*4882a593Smuzhiyun .num_parents = 7,
1144*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
1145*4882a593Smuzhiyun },
1146*4882a593Smuzhiyun };
1147*4882a593Smuzhiyun
1148*4882a593Smuzhiyun static struct clk_rcg2 video_subcore0_clk_src = {
1149*4882a593Smuzhiyun .cmd_rcgr = 0x1060,
1150*4882a593Smuzhiyun .hid_width = 5,
1151*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div_map,
1152*4882a593Smuzhiyun .freq_tbl = ftbl_video_core_clk_src,
1153*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
1154*4882a593Smuzhiyun .name = "video_subcore0_clk_src",
1155*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div,
1156*4882a593Smuzhiyun .num_parents = 7,
1157*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
1158*4882a593Smuzhiyun },
1159*4882a593Smuzhiyun };
1160*4882a593Smuzhiyun
1161*4882a593Smuzhiyun static struct clk_rcg2 video_subcore1_clk_src = {
1162*4882a593Smuzhiyun .cmd_rcgr = 0x1080,
1163*4882a593Smuzhiyun .hid_width = 5,
1164*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div_map,
1165*4882a593Smuzhiyun .freq_tbl = ftbl_video_core_clk_src,
1166*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
1167*4882a593Smuzhiyun .name = "video_subcore1_clk_src",
1168*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div,
1169*4882a593Smuzhiyun .num_parents = 7,
1170*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
1171*4882a593Smuzhiyun },
1172*4882a593Smuzhiyun };
1173*4882a593Smuzhiyun
1174*4882a593Smuzhiyun static const struct freq_tbl ftbl_vfe_clk_src[] = {
1175*4882a593Smuzhiyun F(200000000, P_GPLL0, 3, 0, 0),
1176*4882a593Smuzhiyun F(300000000, P_GPLL0, 2, 0, 0),
1177*4882a593Smuzhiyun F(320000000, P_MMPLL7_OUT_EVEN, 3, 0, 0),
1178*4882a593Smuzhiyun F(384000000, P_MMPLL4_OUT_EVEN, 2, 0, 0),
1179*4882a593Smuzhiyun F(404000000, P_MMPLL0_OUT_EVEN, 2, 0, 0),
1180*4882a593Smuzhiyun F(480000000, P_MMPLL7_OUT_EVEN, 2, 0, 0),
1181*4882a593Smuzhiyun F(576000000, P_MMPLL10_OUT_EVEN, 1, 0, 0),
1182*4882a593Smuzhiyun F(600000000, P_GPLL0, 1, 0, 0),
1183*4882a593Smuzhiyun { }
1184*4882a593Smuzhiyun };
1185*4882a593Smuzhiyun
1186*4882a593Smuzhiyun static struct clk_rcg2 vfe0_clk_src = {
1187*4882a593Smuzhiyun .cmd_rcgr = 0x3600,
1188*4882a593Smuzhiyun .hid_width = 5,
1189*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
1190*4882a593Smuzhiyun .freq_tbl = ftbl_vfe_clk_src,
1191*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
1192*4882a593Smuzhiyun .name = "vfe0_clk_src",
1193*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
1194*4882a593Smuzhiyun .num_parents = 8,
1195*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
1196*4882a593Smuzhiyun },
1197*4882a593Smuzhiyun };
1198*4882a593Smuzhiyun
1199*4882a593Smuzhiyun static struct clk_rcg2 vfe1_clk_src = {
1200*4882a593Smuzhiyun .cmd_rcgr = 0x3620,
1201*4882a593Smuzhiyun .hid_width = 5,
1202*4882a593Smuzhiyun .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map,
1203*4882a593Smuzhiyun .freq_tbl = ftbl_vfe_clk_src,
1204*4882a593Smuzhiyun .clkr.hw.init = &(struct clk_init_data){
1205*4882a593Smuzhiyun .name = "vfe1_clk_src",
1206*4882a593Smuzhiyun .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div,
1207*4882a593Smuzhiyun .num_parents = 8,
1208*4882a593Smuzhiyun .ops = &clk_rcg2_ops,
1209*4882a593Smuzhiyun },
1210*4882a593Smuzhiyun };
1211*4882a593Smuzhiyun
1212*4882a593Smuzhiyun static struct clk_branch misc_ahb_clk = {
1213*4882a593Smuzhiyun .halt_reg = 0x328,
1214*4882a593Smuzhiyun .clkr = {
1215*4882a593Smuzhiyun .enable_reg = 0x328,
1216*4882a593Smuzhiyun .enable_mask = BIT(0),
1217*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1218*4882a593Smuzhiyun .name = "misc_ahb_clk",
1219*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1220*4882a593Smuzhiyun .num_parents = 1,
1221*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1222*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1223*4882a593Smuzhiyun },
1224*4882a593Smuzhiyun },
1225*4882a593Smuzhiyun };
1226*4882a593Smuzhiyun
1227*4882a593Smuzhiyun static struct clk_branch video_core_clk = {
1228*4882a593Smuzhiyun .halt_reg = 0x1028,
1229*4882a593Smuzhiyun .clkr = {
1230*4882a593Smuzhiyun .enable_reg = 0x1028,
1231*4882a593Smuzhiyun .enable_mask = BIT(0),
1232*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1233*4882a593Smuzhiyun .name = "video_core_clk",
1234*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &video_core_clk_src.clkr.hw },
1235*4882a593Smuzhiyun .num_parents = 1,
1236*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1237*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1238*4882a593Smuzhiyun },
1239*4882a593Smuzhiyun },
1240*4882a593Smuzhiyun };
1241*4882a593Smuzhiyun
1242*4882a593Smuzhiyun static struct clk_branch video_ahb_clk = {
1243*4882a593Smuzhiyun .halt_reg = 0x1030,
1244*4882a593Smuzhiyun .clkr = {
1245*4882a593Smuzhiyun .enable_reg = 0x1030,
1246*4882a593Smuzhiyun .enable_mask = BIT(0),
1247*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1248*4882a593Smuzhiyun .name = "video_ahb_clk",
1249*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1250*4882a593Smuzhiyun .num_parents = 1,
1251*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1252*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1253*4882a593Smuzhiyun },
1254*4882a593Smuzhiyun },
1255*4882a593Smuzhiyun };
1256*4882a593Smuzhiyun
1257*4882a593Smuzhiyun static struct clk_branch video_axi_clk = {
1258*4882a593Smuzhiyun .halt_reg = 0x1034,
1259*4882a593Smuzhiyun .clkr = {
1260*4882a593Smuzhiyun .enable_reg = 0x1034,
1261*4882a593Smuzhiyun .enable_mask = BIT(0),
1262*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1263*4882a593Smuzhiyun .name = "video_axi_clk",
1264*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
1265*4882a593Smuzhiyun .num_parents = 1,
1266*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1267*4882a593Smuzhiyun },
1268*4882a593Smuzhiyun },
1269*4882a593Smuzhiyun };
1270*4882a593Smuzhiyun
1271*4882a593Smuzhiyun static struct clk_branch video_maxi_clk = {
1272*4882a593Smuzhiyun .halt_reg = 0x1038,
1273*4882a593Smuzhiyun .clkr = {
1274*4882a593Smuzhiyun .enable_reg = 0x1038,
1275*4882a593Smuzhiyun .enable_mask = BIT(0),
1276*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1277*4882a593Smuzhiyun .name = "video_maxi_clk",
1278*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &maxi_clk_src.clkr.hw },
1279*4882a593Smuzhiyun .num_parents = 1,
1280*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1281*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1282*4882a593Smuzhiyun },
1283*4882a593Smuzhiyun },
1284*4882a593Smuzhiyun };
1285*4882a593Smuzhiyun
1286*4882a593Smuzhiyun static struct clk_branch video_subcore0_clk = {
1287*4882a593Smuzhiyun .halt_reg = 0x1048,
1288*4882a593Smuzhiyun .clkr = {
1289*4882a593Smuzhiyun .enable_reg = 0x1048,
1290*4882a593Smuzhiyun .enable_mask = BIT(0),
1291*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1292*4882a593Smuzhiyun .name = "video_subcore0_clk",
1293*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &video_subcore0_clk_src.clkr.hw },
1294*4882a593Smuzhiyun .num_parents = 1,
1295*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1296*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1297*4882a593Smuzhiyun },
1298*4882a593Smuzhiyun },
1299*4882a593Smuzhiyun };
1300*4882a593Smuzhiyun
1301*4882a593Smuzhiyun static struct clk_branch video_subcore1_clk = {
1302*4882a593Smuzhiyun .halt_reg = 0x104c,
1303*4882a593Smuzhiyun .clkr = {
1304*4882a593Smuzhiyun .enable_reg = 0x104c,
1305*4882a593Smuzhiyun .enable_mask = BIT(0),
1306*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1307*4882a593Smuzhiyun .name = "video_subcore1_clk",
1308*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &video_subcore1_clk_src.clkr.hw },
1309*4882a593Smuzhiyun .num_parents = 1,
1310*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1311*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1312*4882a593Smuzhiyun },
1313*4882a593Smuzhiyun },
1314*4882a593Smuzhiyun };
1315*4882a593Smuzhiyun
1316*4882a593Smuzhiyun static struct clk_branch mdss_ahb_clk = {
1317*4882a593Smuzhiyun .halt_reg = 0x2308,
1318*4882a593Smuzhiyun .clkr = {
1319*4882a593Smuzhiyun .enable_reg = 0x2308,
1320*4882a593Smuzhiyun .enable_mask = BIT(0),
1321*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1322*4882a593Smuzhiyun .name = "mdss_ahb_clk",
1323*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1324*4882a593Smuzhiyun .num_parents = 1,
1325*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1326*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1327*4882a593Smuzhiyun },
1328*4882a593Smuzhiyun },
1329*4882a593Smuzhiyun };
1330*4882a593Smuzhiyun
1331*4882a593Smuzhiyun static struct clk_branch mdss_hdmi_dp_ahb_clk = {
1332*4882a593Smuzhiyun .halt_reg = 0x230c,
1333*4882a593Smuzhiyun .clkr = {
1334*4882a593Smuzhiyun .enable_reg = 0x230c,
1335*4882a593Smuzhiyun .enable_mask = BIT(0),
1336*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1337*4882a593Smuzhiyun .name = "mdss_hdmi_dp_ahb_clk",
1338*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1339*4882a593Smuzhiyun .num_parents = 1,
1340*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1341*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1342*4882a593Smuzhiyun },
1343*4882a593Smuzhiyun },
1344*4882a593Smuzhiyun };
1345*4882a593Smuzhiyun
1346*4882a593Smuzhiyun static struct clk_branch mdss_axi_clk = {
1347*4882a593Smuzhiyun .halt_reg = 0x2310,
1348*4882a593Smuzhiyun .clkr = {
1349*4882a593Smuzhiyun .enable_reg = 0x2310,
1350*4882a593Smuzhiyun .enable_mask = BIT(0),
1351*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1352*4882a593Smuzhiyun .name = "mdss_axi_clk",
1353*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
1354*4882a593Smuzhiyun .num_parents = 1,
1355*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1356*4882a593Smuzhiyun },
1357*4882a593Smuzhiyun },
1358*4882a593Smuzhiyun };
1359*4882a593Smuzhiyun
1360*4882a593Smuzhiyun static struct clk_branch mdss_pclk0_clk = {
1361*4882a593Smuzhiyun .halt_reg = 0x2314,
1362*4882a593Smuzhiyun .clkr = {
1363*4882a593Smuzhiyun .enable_reg = 0x2314,
1364*4882a593Smuzhiyun .enable_mask = BIT(0),
1365*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1366*4882a593Smuzhiyun .name = "mdss_pclk0_clk",
1367*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &pclk0_clk_src.clkr.hw },
1368*4882a593Smuzhiyun .num_parents = 1,
1369*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1370*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1371*4882a593Smuzhiyun },
1372*4882a593Smuzhiyun },
1373*4882a593Smuzhiyun };
1374*4882a593Smuzhiyun
1375*4882a593Smuzhiyun static struct clk_branch mdss_pclk1_clk = {
1376*4882a593Smuzhiyun .halt_reg = 0x2318,
1377*4882a593Smuzhiyun .clkr = {
1378*4882a593Smuzhiyun .enable_reg = 0x2318,
1379*4882a593Smuzhiyun .enable_mask = BIT(0),
1380*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1381*4882a593Smuzhiyun .name = "mdss_pclk1_clk",
1382*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &pclk1_clk_src.clkr.hw },
1383*4882a593Smuzhiyun .num_parents = 1,
1384*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1385*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1386*4882a593Smuzhiyun },
1387*4882a593Smuzhiyun },
1388*4882a593Smuzhiyun };
1389*4882a593Smuzhiyun
1390*4882a593Smuzhiyun static struct clk_branch mdss_mdp_clk = {
1391*4882a593Smuzhiyun .halt_reg = 0x231c,
1392*4882a593Smuzhiyun .clkr = {
1393*4882a593Smuzhiyun .enable_reg = 0x231c,
1394*4882a593Smuzhiyun .enable_mask = BIT(0),
1395*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1396*4882a593Smuzhiyun .name = "mdss_mdp_clk",
1397*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &mdp_clk_src.clkr.hw },
1398*4882a593Smuzhiyun .num_parents = 1,
1399*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1400*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1401*4882a593Smuzhiyun },
1402*4882a593Smuzhiyun },
1403*4882a593Smuzhiyun };
1404*4882a593Smuzhiyun
1405*4882a593Smuzhiyun static struct clk_branch mdss_mdp_lut_clk = {
1406*4882a593Smuzhiyun .halt_reg = 0x2320,
1407*4882a593Smuzhiyun .clkr = {
1408*4882a593Smuzhiyun .enable_reg = 0x2320,
1409*4882a593Smuzhiyun .enable_mask = BIT(0),
1410*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1411*4882a593Smuzhiyun .name = "mdss_mdp_lut_clk",
1412*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &mdp_clk_src.clkr.hw },
1413*4882a593Smuzhiyun .num_parents = 1,
1414*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1415*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1416*4882a593Smuzhiyun },
1417*4882a593Smuzhiyun },
1418*4882a593Smuzhiyun };
1419*4882a593Smuzhiyun
1420*4882a593Smuzhiyun static struct clk_branch mdss_extpclk_clk = {
1421*4882a593Smuzhiyun .halt_reg = 0x2324,
1422*4882a593Smuzhiyun .clkr = {
1423*4882a593Smuzhiyun .enable_reg = 0x2324,
1424*4882a593Smuzhiyun .enable_mask = BIT(0),
1425*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1426*4882a593Smuzhiyun .name = "mdss_extpclk_clk",
1427*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &extpclk_clk_src.clkr.hw },
1428*4882a593Smuzhiyun .num_parents = 1,
1429*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1430*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1431*4882a593Smuzhiyun },
1432*4882a593Smuzhiyun },
1433*4882a593Smuzhiyun };
1434*4882a593Smuzhiyun
1435*4882a593Smuzhiyun static struct clk_branch mdss_vsync_clk = {
1436*4882a593Smuzhiyun .halt_reg = 0x2328,
1437*4882a593Smuzhiyun .clkr = {
1438*4882a593Smuzhiyun .enable_reg = 0x2328,
1439*4882a593Smuzhiyun .enable_mask = BIT(0),
1440*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1441*4882a593Smuzhiyun .name = "mdss_vsync_clk",
1442*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &vsync_clk_src.clkr.hw },
1443*4882a593Smuzhiyun .num_parents = 1,
1444*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1445*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1446*4882a593Smuzhiyun },
1447*4882a593Smuzhiyun },
1448*4882a593Smuzhiyun };
1449*4882a593Smuzhiyun
1450*4882a593Smuzhiyun static struct clk_branch mdss_hdmi_clk = {
1451*4882a593Smuzhiyun .halt_reg = 0x2338,
1452*4882a593Smuzhiyun .clkr = {
1453*4882a593Smuzhiyun .enable_reg = 0x2338,
1454*4882a593Smuzhiyun .enable_mask = BIT(0),
1455*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1456*4882a593Smuzhiyun .name = "mdss_hdmi_clk",
1457*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &hdmi_clk_src.clkr.hw },
1458*4882a593Smuzhiyun .num_parents = 1,
1459*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1460*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1461*4882a593Smuzhiyun },
1462*4882a593Smuzhiyun },
1463*4882a593Smuzhiyun };
1464*4882a593Smuzhiyun
1465*4882a593Smuzhiyun static struct clk_branch mdss_byte0_clk = {
1466*4882a593Smuzhiyun .halt_reg = 0x233c,
1467*4882a593Smuzhiyun .clkr = {
1468*4882a593Smuzhiyun .enable_reg = 0x233c,
1469*4882a593Smuzhiyun .enable_mask = BIT(0),
1470*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1471*4882a593Smuzhiyun .name = "mdss_byte0_clk",
1472*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &byte0_clk_src.clkr.hw },
1473*4882a593Smuzhiyun .num_parents = 1,
1474*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1475*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1476*4882a593Smuzhiyun },
1477*4882a593Smuzhiyun },
1478*4882a593Smuzhiyun };
1479*4882a593Smuzhiyun
1480*4882a593Smuzhiyun static struct clk_branch mdss_byte1_clk = {
1481*4882a593Smuzhiyun .halt_reg = 0x2340,
1482*4882a593Smuzhiyun .clkr = {
1483*4882a593Smuzhiyun .enable_reg = 0x2340,
1484*4882a593Smuzhiyun .enable_mask = BIT(0),
1485*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1486*4882a593Smuzhiyun .name = "mdss_byte1_clk",
1487*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &byte1_clk_src.clkr.hw },
1488*4882a593Smuzhiyun .num_parents = 1,
1489*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1490*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1491*4882a593Smuzhiyun },
1492*4882a593Smuzhiyun },
1493*4882a593Smuzhiyun };
1494*4882a593Smuzhiyun
1495*4882a593Smuzhiyun static struct clk_branch mdss_esc0_clk = {
1496*4882a593Smuzhiyun .halt_reg = 0x2344,
1497*4882a593Smuzhiyun .clkr = {
1498*4882a593Smuzhiyun .enable_reg = 0x2344,
1499*4882a593Smuzhiyun .enable_mask = BIT(0),
1500*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1501*4882a593Smuzhiyun .name = "mdss_esc0_clk",
1502*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &esc0_clk_src.clkr.hw },
1503*4882a593Smuzhiyun .num_parents = 1,
1504*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1505*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1506*4882a593Smuzhiyun },
1507*4882a593Smuzhiyun },
1508*4882a593Smuzhiyun };
1509*4882a593Smuzhiyun
1510*4882a593Smuzhiyun static struct clk_branch mdss_esc1_clk = {
1511*4882a593Smuzhiyun .halt_reg = 0x2348,
1512*4882a593Smuzhiyun .clkr = {
1513*4882a593Smuzhiyun .enable_reg = 0x2348,
1514*4882a593Smuzhiyun .enable_mask = BIT(0),
1515*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1516*4882a593Smuzhiyun .name = "mdss_esc1_clk",
1517*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &esc1_clk_src.clkr.hw },
1518*4882a593Smuzhiyun .num_parents = 1,
1519*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1520*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1521*4882a593Smuzhiyun },
1522*4882a593Smuzhiyun },
1523*4882a593Smuzhiyun };
1524*4882a593Smuzhiyun
1525*4882a593Smuzhiyun static struct clk_branch mdss_rot_clk = {
1526*4882a593Smuzhiyun .halt_reg = 0x2350,
1527*4882a593Smuzhiyun .clkr = {
1528*4882a593Smuzhiyun .enable_reg = 0x2350,
1529*4882a593Smuzhiyun .enable_mask = BIT(0),
1530*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1531*4882a593Smuzhiyun .name = "mdss_rot_clk",
1532*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &rot_clk_src.clkr.hw },
1533*4882a593Smuzhiyun .num_parents = 1,
1534*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1535*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1536*4882a593Smuzhiyun },
1537*4882a593Smuzhiyun },
1538*4882a593Smuzhiyun };
1539*4882a593Smuzhiyun
1540*4882a593Smuzhiyun static struct clk_branch mdss_dp_link_clk = {
1541*4882a593Smuzhiyun .halt_reg = 0x2354,
1542*4882a593Smuzhiyun .clkr = {
1543*4882a593Smuzhiyun .enable_reg = 0x2354,
1544*4882a593Smuzhiyun .enable_mask = BIT(0),
1545*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1546*4882a593Smuzhiyun .name = "mdss_dp_link_clk",
1547*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &dp_link_clk_src.clkr.hw },
1548*4882a593Smuzhiyun .num_parents = 1,
1549*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1550*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1551*4882a593Smuzhiyun },
1552*4882a593Smuzhiyun },
1553*4882a593Smuzhiyun };
1554*4882a593Smuzhiyun
1555*4882a593Smuzhiyun static struct clk_branch mdss_dp_link_intf_clk = {
1556*4882a593Smuzhiyun .halt_reg = 0x2358,
1557*4882a593Smuzhiyun .clkr = {
1558*4882a593Smuzhiyun .enable_reg = 0x2358,
1559*4882a593Smuzhiyun .enable_mask = BIT(0),
1560*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1561*4882a593Smuzhiyun .name = "mdss_dp_link_intf_clk",
1562*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &dp_link_clk_src.clkr.hw },
1563*4882a593Smuzhiyun .num_parents = 1,
1564*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1565*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1566*4882a593Smuzhiyun },
1567*4882a593Smuzhiyun },
1568*4882a593Smuzhiyun };
1569*4882a593Smuzhiyun
1570*4882a593Smuzhiyun static struct clk_branch mdss_dp_crypto_clk = {
1571*4882a593Smuzhiyun .halt_reg = 0x235c,
1572*4882a593Smuzhiyun .clkr = {
1573*4882a593Smuzhiyun .enable_reg = 0x235c,
1574*4882a593Smuzhiyun .enable_mask = BIT(0),
1575*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1576*4882a593Smuzhiyun .name = "mdss_dp_crypto_clk",
1577*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &dp_crypto_clk_src.clkr.hw },
1578*4882a593Smuzhiyun .num_parents = 1,
1579*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1580*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1581*4882a593Smuzhiyun },
1582*4882a593Smuzhiyun },
1583*4882a593Smuzhiyun };
1584*4882a593Smuzhiyun
1585*4882a593Smuzhiyun static struct clk_branch mdss_dp_pixel_clk = {
1586*4882a593Smuzhiyun .halt_reg = 0x2360,
1587*4882a593Smuzhiyun .clkr = {
1588*4882a593Smuzhiyun .enable_reg = 0x2360,
1589*4882a593Smuzhiyun .enable_mask = BIT(0),
1590*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1591*4882a593Smuzhiyun .name = "mdss_dp_pixel_clk",
1592*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &dp_pixel_clk_src.clkr.hw },
1593*4882a593Smuzhiyun .num_parents = 1,
1594*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1595*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1596*4882a593Smuzhiyun },
1597*4882a593Smuzhiyun },
1598*4882a593Smuzhiyun };
1599*4882a593Smuzhiyun
1600*4882a593Smuzhiyun static struct clk_branch mdss_dp_aux_clk = {
1601*4882a593Smuzhiyun .halt_reg = 0x2364,
1602*4882a593Smuzhiyun .clkr = {
1603*4882a593Smuzhiyun .enable_reg = 0x2364,
1604*4882a593Smuzhiyun .enable_mask = BIT(0),
1605*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1606*4882a593Smuzhiyun .name = "mdss_dp_aux_clk",
1607*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &dp_aux_clk_src.clkr.hw },
1608*4882a593Smuzhiyun .num_parents = 1,
1609*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1610*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1611*4882a593Smuzhiyun },
1612*4882a593Smuzhiyun },
1613*4882a593Smuzhiyun };
1614*4882a593Smuzhiyun
1615*4882a593Smuzhiyun static struct clk_branch mdss_byte0_intf_clk = {
1616*4882a593Smuzhiyun .halt_reg = 0x2374,
1617*4882a593Smuzhiyun .clkr = {
1618*4882a593Smuzhiyun .enable_reg = 0x2374,
1619*4882a593Smuzhiyun .enable_mask = BIT(0),
1620*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1621*4882a593Smuzhiyun .name = "mdss_byte0_intf_clk",
1622*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &byte0_clk_src.clkr.hw },
1623*4882a593Smuzhiyun .num_parents = 1,
1624*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1625*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1626*4882a593Smuzhiyun },
1627*4882a593Smuzhiyun },
1628*4882a593Smuzhiyun };
1629*4882a593Smuzhiyun
1630*4882a593Smuzhiyun static struct clk_branch mdss_byte1_intf_clk = {
1631*4882a593Smuzhiyun .halt_reg = 0x2378,
1632*4882a593Smuzhiyun .clkr = {
1633*4882a593Smuzhiyun .enable_reg = 0x2378,
1634*4882a593Smuzhiyun .enable_mask = BIT(0),
1635*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1636*4882a593Smuzhiyun .name = "mdss_byte1_intf_clk",
1637*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &byte1_clk_src.clkr.hw },
1638*4882a593Smuzhiyun .num_parents = 1,
1639*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1640*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1641*4882a593Smuzhiyun },
1642*4882a593Smuzhiyun },
1643*4882a593Smuzhiyun };
1644*4882a593Smuzhiyun
1645*4882a593Smuzhiyun static struct clk_branch camss_csi0phytimer_clk = {
1646*4882a593Smuzhiyun .halt_reg = 0x3024,
1647*4882a593Smuzhiyun .clkr = {
1648*4882a593Smuzhiyun .enable_reg = 0x3024,
1649*4882a593Smuzhiyun .enable_mask = BIT(0),
1650*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1651*4882a593Smuzhiyun .name = "camss_csi0phytimer_clk",
1652*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csi0phytimer_clk_src.clkr.hw },
1653*4882a593Smuzhiyun .num_parents = 1,
1654*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1655*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1656*4882a593Smuzhiyun },
1657*4882a593Smuzhiyun },
1658*4882a593Smuzhiyun };
1659*4882a593Smuzhiyun
1660*4882a593Smuzhiyun static struct clk_branch camss_csi1phytimer_clk = {
1661*4882a593Smuzhiyun .halt_reg = 0x3054,
1662*4882a593Smuzhiyun .clkr = {
1663*4882a593Smuzhiyun .enable_reg = 0x3054,
1664*4882a593Smuzhiyun .enable_mask = BIT(0),
1665*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1666*4882a593Smuzhiyun .name = "camss_csi1phytimer_clk",
1667*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csi1phytimer_clk_src.clkr.hw },
1668*4882a593Smuzhiyun .num_parents = 1,
1669*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1670*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1671*4882a593Smuzhiyun },
1672*4882a593Smuzhiyun },
1673*4882a593Smuzhiyun };
1674*4882a593Smuzhiyun
1675*4882a593Smuzhiyun static struct clk_branch camss_csi2phytimer_clk = {
1676*4882a593Smuzhiyun .halt_reg = 0x3084,
1677*4882a593Smuzhiyun .clkr = {
1678*4882a593Smuzhiyun .enable_reg = 0x3084,
1679*4882a593Smuzhiyun .enable_mask = BIT(0),
1680*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1681*4882a593Smuzhiyun .name = "camss_csi2phytimer_clk",
1682*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csi2phytimer_clk_src.clkr.hw },
1683*4882a593Smuzhiyun .num_parents = 1,
1684*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1685*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1686*4882a593Smuzhiyun },
1687*4882a593Smuzhiyun },
1688*4882a593Smuzhiyun };
1689*4882a593Smuzhiyun
1690*4882a593Smuzhiyun static struct clk_branch camss_csi0_clk = {
1691*4882a593Smuzhiyun .halt_reg = 0x30b4,
1692*4882a593Smuzhiyun .clkr = {
1693*4882a593Smuzhiyun .enable_reg = 0x30b4,
1694*4882a593Smuzhiyun .enable_mask = BIT(0),
1695*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1696*4882a593Smuzhiyun .name = "camss_csi0_clk",
1697*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw },
1698*4882a593Smuzhiyun .num_parents = 1,
1699*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1700*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1701*4882a593Smuzhiyun },
1702*4882a593Smuzhiyun },
1703*4882a593Smuzhiyun };
1704*4882a593Smuzhiyun
1705*4882a593Smuzhiyun static struct clk_branch camss_csi0_ahb_clk = {
1706*4882a593Smuzhiyun .halt_reg = 0x30bc,
1707*4882a593Smuzhiyun .clkr = {
1708*4882a593Smuzhiyun .enable_reg = 0x30bc,
1709*4882a593Smuzhiyun .enable_mask = BIT(0),
1710*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1711*4882a593Smuzhiyun .name = "camss_csi0_ahb_clk",
1712*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1713*4882a593Smuzhiyun .num_parents = 1,
1714*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1715*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1716*4882a593Smuzhiyun },
1717*4882a593Smuzhiyun },
1718*4882a593Smuzhiyun };
1719*4882a593Smuzhiyun
1720*4882a593Smuzhiyun static struct clk_branch camss_csi0rdi_clk = {
1721*4882a593Smuzhiyun .halt_reg = 0x30d4,
1722*4882a593Smuzhiyun .clkr = {
1723*4882a593Smuzhiyun .enable_reg = 0x30d4,
1724*4882a593Smuzhiyun .enable_mask = BIT(0),
1725*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1726*4882a593Smuzhiyun .name = "camss_csi0rdi_clk",
1727*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw },
1728*4882a593Smuzhiyun .num_parents = 1,
1729*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1730*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1731*4882a593Smuzhiyun },
1732*4882a593Smuzhiyun },
1733*4882a593Smuzhiyun };
1734*4882a593Smuzhiyun
1735*4882a593Smuzhiyun static struct clk_branch camss_csi0pix_clk = {
1736*4882a593Smuzhiyun .halt_reg = 0x30e4,
1737*4882a593Smuzhiyun .clkr = {
1738*4882a593Smuzhiyun .enable_reg = 0x30e4,
1739*4882a593Smuzhiyun .enable_mask = BIT(0),
1740*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1741*4882a593Smuzhiyun .name = "camss_csi0pix_clk",
1742*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw },
1743*4882a593Smuzhiyun .num_parents = 1,
1744*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1745*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1746*4882a593Smuzhiyun },
1747*4882a593Smuzhiyun },
1748*4882a593Smuzhiyun };
1749*4882a593Smuzhiyun
1750*4882a593Smuzhiyun static struct clk_branch camss_csi1_clk = {
1751*4882a593Smuzhiyun .halt_reg = 0x3124,
1752*4882a593Smuzhiyun .clkr = {
1753*4882a593Smuzhiyun .enable_reg = 0x3124,
1754*4882a593Smuzhiyun .enable_mask = BIT(0),
1755*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1756*4882a593Smuzhiyun .name = "camss_csi1_clk",
1757*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
1758*4882a593Smuzhiyun .num_parents = 1,
1759*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1760*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1761*4882a593Smuzhiyun },
1762*4882a593Smuzhiyun },
1763*4882a593Smuzhiyun };
1764*4882a593Smuzhiyun
1765*4882a593Smuzhiyun static struct clk_branch camss_csi1_ahb_clk = {
1766*4882a593Smuzhiyun .halt_reg = 0x3128,
1767*4882a593Smuzhiyun .clkr = {
1768*4882a593Smuzhiyun .enable_reg = 0x3128,
1769*4882a593Smuzhiyun .enable_mask = BIT(0),
1770*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1771*4882a593Smuzhiyun .name = "camss_csi1_ahb_clk",
1772*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1773*4882a593Smuzhiyun .num_parents = 1,
1774*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1775*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1776*4882a593Smuzhiyun },
1777*4882a593Smuzhiyun },
1778*4882a593Smuzhiyun };
1779*4882a593Smuzhiyun
1780*4882a593Smuzhiyun static struct clk_branch camss_csi1rdi_clk = {
1781*4882a593Smuzhiyun .halt_reg = 0x3144,
1782*4882a593Smuzhiyun .clkr = {
1783*4882a593Smuzhiyun .enable_reg = 0x3144,
1784*4882a593Smuzhiyun .enable_mask = BIT(0),
1785*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1786*4882a593Smuzhiyun .name = "camss_csi1rdi_clk",
1787*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
1788*4882a593Smuzhiyun .num_parents = 1,
1789*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1790*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1791*4882a593Smuzhiyun },
1792*4882a593Smuzhiyun },
1793*4882a593Smuzhiyun };
1794*4882a593Smuzhiyun
1795*4882a593Smuzhiyun static struct clk_branch camss_csi1pix_clk = {
1796*4882a593Smuzhiyun .halt_reg = 0x3154,
1797*4882a593Smuzhiyun .clkr = {
1798*4882a593Smuzhiyun .enable_reg = 0x3154,
1799*4882a593Smuzhiyun .enable_mask = BIT(0),
1800*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1801*4882a593Smuzhiyun .name = "camss_csi1pix_clk",
1802*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw },
1803*4882a593Smuzhiyun .num_parents = 1,
1804*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1805*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1806*4882a593Smuzhiyun },
1807*4882a593Smuzhiyun },
1808*4882a593Smuzhiyun };
1809*4882a593Smuzhiyun
1810*4882a593Smuzhiyun static struct clk_branch camss_csi2_clk = {
1811*4882a593Smuzhiyun .halt_reg = 0x3184,
1812*4882a593Smuzhiyun .clkr = {
1813*4882a593Smuzhiyun .enable_reg = 0x3184,
1814*4882a593Smuzhiyun .enable_mask = BIT(0),
1815*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1816*4882a593Smuzhiyun .name = "camss_csi2_clk",
1817*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csi2_clk_src.clkr.hw },
1818*4882a593Smuzhiyun .num_parents = 1,
1819*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1820*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1821*4882a593Smuzhiyun },
1822*4882a593Smuzhiyun },
1823*4882a593Smuzhiyun };
1824*4882a593Smuzhiyun
1825*4882a593Smuzhiyun static struct clk_branch camss_csi2_ahb_clk = {
1826*4882a593Smuzhiyun .halt_reg = 0x3188,
1827*4882a593Smuzhiyun .clkr = {
1828*4882a593Smuzhiyun .enable_reg = 0x3188,
1829*4882a593Smuzhiyun .enable_mask = BIT(0),
1830*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1831*4882a593Smuzhiyun .name = "camss_csi2_ahb_clk",
1832*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1833*4882a593Smuzhiyun .num_parents = 1,
1834*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1835*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1836*4882a593Smuzhiyun },
1837*4882a593Smuzhiyun },
1838*4882a593Smuzhiyun };
1839*4882a593Smuzhiyun
1840*4882a593Smuzhiyun static struct clk_branch camss_csi2rdi_clk = {
1841*4882a593Smuzhiyun .halt_reg = 0x31a4,
1842*4882a593Smuzhiyun .clkr = {
1843*4882a593Smuzhiyun .enable_reg = 0x31a4,
1844*4882a593Smuzhiyun .enable_mask = BIT(0),
1845*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1846*4882a593Smuzhiyun .name = "camss_csi2rdi_clk",
1847*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csi2_clk_src.clkr.hw },
1848*4882a593Smuzhiyun .num_parents = 1,
1849*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1850*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1851*4882a593Smuzhiyun },
1852*4882a593Smuzhiyun },
1853*4882a593Smuzhiyun };
1854*4882a593Smuzhiyun
1855*4882a593Smuzhiyun static struct clk_branch camss_csi2pix_clk = {
1856*4882a593Smuzhiyun .halt_reg = 0x31b4,
1857*4882a593Smuzhiyun .clkr = {
1858*4882a593Smuzhiyun .enable_reg = 0x31b4,
1859*4882a593Smuzhiyun .enable_mask = BIT(0),
1860*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1861*4882a593Smuzhiyun .name = "camss_csi2pix_clk",
1862*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csi2_clk_src.clkr.hw },
1863*4882a593Smuzhiyun .num_parents = 1,
1864*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1865*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1866*4882a593Smuzhiyun },
1867*4882a593Smuzhiyun },
1868*4882a593Smuzhiyun };
1869*4882a593Smuzhiyun
1870*4882a593Smuzhiyun static struct clk_branch camss_csi3_clk = {
1871*4882a593Smuzhiyun .halt_reg = 0x31e4,
1872*4882a593Smuzhiyun .clkr = {
1873*4882a593Smuzhiyun .enable_reg = 0x31e4,
1874*4882a593Smuzhiyun .enable_mask = BIT(0),
1875*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1876*4882a593Smuzhiyun .name = "camss_csi3_clk",
1877*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csi3_clk_src.clkr.hw },
1878*4882a593Smuzhiyun .num_parents = 1,
1879*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1880*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1881*4882a593Smuzhiyun },
1882*4882a593Smuzhiyun },
1883*4882a593Smuzhiyun };
1884*4882a593Smuzhiyun
1885*4882a593Smuzhiyun static struct clk_branch camss_csi3_ahb_clk = {
1886*4882a593Smuzhiyun .halt_reg = 0x31e8,
1887*4882a593Smuzhiyun .clkr = {
1888*4882a593Smuzhiyun .enable_reg = 0x31e8,
1889*4882a593Smuzhiyun .enable_mask = BIT(0),
1890*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1891*4882a593Smuzhiyun .name = "camss_csi3_ahb_clk",
1892*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1893*4882a593Smuzhiyun .num_parents = 1,
1894*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1895*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1896*4882a593Smuzhiyun },
1897*4882a593Smuzhiyun },
1898*4882a593Smuzhiyun };
1899*4882a593Smuzhiyun
1900*4882a593Smuzhiyun static struct clk_branch camss_csi3rdi_clk = {
1901*4882a593Smuzhiyun .halt_reg = 0x3204,
1902*4882a593Smuzhiyun .clkr = {
1903*4882a593Smuzhiyun .enable_reg = 0x3204,
1904*4882a593Smuzhiyun .enable_mask = BIT(0),
1905*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1906*4882a593Smuzhiyun .name = "camss_csi3rdi_clk",
1907*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csi3_clk_src.clkr.hw },
1908*4882a593Smuzhiyun .num_parents = 1,
1909*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1910*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1911*4882a593Smuzhiyun },
1912*4882a593Smuzhiyun },
1913*4882a593Smuzhiyun };
1914*4882a593Smuzhiyun
1915*4882a593Smuzhiyun static struct clk_branch camss_csi3pix_clk = {
1916*4882a593Smuzhiyun .halt_reg = 0x3214,
1917*4882a593Smuzhiyun .clkr = {
1918*4882a593Smuzhiyun .enable_reg = 0x3214,
1919*4882a593Smuzhiyun .enable_mask = BIT(0),
1920*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1921*4882a593Smuzhiyun .name = "camss_csi3pix_clk",
1922*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csi3_clk_src.clkr.hw },
1923*4882a593Smuzhiyun .num_parents = 1,
1924*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1925*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1926*4882a593Smuzhiyun },
1927*4882a593Smuzhiyun },
1928*4882a593Smuzhiyun };
1929*4882a593Smuzhiyun
1930*4882a593Smuzhiyun static struct clk_branch camss_ispif_ahb_clk = {
1931*4882a593Smuzhiyun .halt_reg = 0x3224,
1932*4882a593Smuzhiyun .clkr = {
1933*4882a593Smuzhiyun .enable_reg = 0x3224,
1934*4882a593Smuzhiyun .enable_mask = BIT(0),
1935*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1936*4882a593Smuzhiyun .name = "camss_ispif_ahb_clk",
1937*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1938*4882a593Smuzhiyun .num_parents = 1,
1939*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1940*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1941*4882a593Smuzhiyun },
1942*4882a593Smuzhiyun },
1943*4882a593Smuzhiyun };
1944*4882a593Smuzhiyun
1945*4882a593Smuzhiyun static struct clk_branch camss_cci_clk = {
1946*4882a593Smuzhiyun .halt_reg = 0x3344,
1947*4882a593Smuzhiyun .clkr = {
1948*4882a593Smuzhiyun .enable_reg = 0x3344,
1949*4882a593Smuzhiyun .enable_mask = BIT(0),
1950*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1951*4882a593Smuzhiyun .name = "camss_cci_clk",
1952*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &cci_clk_src.clkr.hw },
1953*4882a593Smuzhiyun .num_parents = 1,
1954*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1955*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1956*4882a593Smuzhiyun },
1957*4882a593Smuzhiyun },
1958*4882a593Smuzhiyun };
1959*4882a593Smuzhiyun
1960*4882a593Smuzhiyun static struct clk_branch camss_cci_ahb_clk = {
1961*4882a593Smuzhiyun .halt_reg = 0x3348,
1962*4882a593Smuzhiyun .clkr = {
1963*4882a593Smuzhiyun .enable_reg = 0x3348,
1964*4882a593Smuzhiyun .enable_mask = BIT(0),
1965*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1966*4882a593Smuzhiyun .name = "camss_cci_ahb_clk",
1967*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
1968*4882a593Smuzhiyun .num_parents = 1,
1969*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1970*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1971*4882a593Smuzhiyun },
1972*4882a593Smuzhiyun },
1973*4882a593Smuzhiyun };
1974*4882a593Smuzhiyun
1975*4882a593Smuzhiyun static struct clk_branch camss_mclk0_clk = {
1976*4882a593Smuzhiyun .halt_reg = 0x3384,
1977*4882a593Smuzhiyun .clkr = {
1978*4882a593Smuzhiyun .enable_reg = 0x3384,
1979*4882a593Smuzhiyun .enable_mask = BIT(0),
1980*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1981*4882a593Smuzhiyun .name = "camss_mclk0_clk",
1982*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &mclk0_clk_src.clkr.hw },
1983*4882a593Smuzhiyun .num_parents = 1,
1984*4882a593Smuzhiyun .ops = &clk_branch2_ops,
1985*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
1986*4882a593Smuzhiyun },
1987*4882a593Smuzhiyun },
1988*4882a593Smuzhiyun };
1989*4882a593Smuzhiyun
1990*4882a593Smuzhiyun static struct clk_branch camss_mclk1_clk = {
1991*4882a593Smuzhiyun .halt_reg = 0x33b4,
1992*4882a593Smuzhiyun .clkr = {
1993*4882a593Smuzhiyun .enable_reg = 0x33b4,
1994*4882a593Smuzhiyun .enable_mask = BIT(0),
1995*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
1996*4882a593Smuzhiyun .name = "camss_mclk1_clk",
1997*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &mclk1_clk_src.clkr.hw },
1998*4882a593Smuzhiyun .num_parents = 1,
1999*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2000*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2001*4882a593Smuzhiyun },
2002*4882a593Smuzhiyun },
2003*4882a593Smuzhiyun };
2004*4882a593Smuzhiyun
2005*4882a593Smuzhiyun static struct clk_branch camss_mclk2_clk = {
2006*4882a593Smuzhiyun .halt_reg = 0x33e4,
2007*4882a593Smuzhiyun .clkr = {
2008*4882a593Smuzhiyun .enable_reg = 0x33e4,
2009*4882a593Smuzhiyun .enable_mask = BIT(0),
2010*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2011*4882a593Smuzhiyun .name = "camss_mclk2_clk",
2012*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &mclk2_clk_src.clkr.hw },
2013*4882a593Smuzhiyun .num_parents = 1,
2014*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2015*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2016*4882a593Smuzhiyun },
2017*4882a593Smuzhiyun },
2018*4882a593Smuzhiyun };
2019*4882a593Smuzhiyun
2020*4882a593Smuzhiyun static struct clk_branch camss_mclk3_clk = {
2021*4882a593Smuzhiyun .halt_reg = 0x3414,
2022*4882a593Smuzhiyun .clkr = {
2023*4882a593Smuzhiyun .enable_reg = 0x3414,
2024*4882a593Smuzhiyun .enable_mask = BIT(0),
2025*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2026*4882a593Smuzhiyun .name = "camss_mclk3_clk",
2027*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &mclk3_clk_src.clkr.hw },
2028*4882a593Smuzhiyun .num_parents = 1,
2029*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2030*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2031*4882a593Smuzhiyun },
2032*4882a593Smuzhiyun },
2033*4882a593Smuzhiyun };
2034*4882a593Smuzhiyun
2035*4882a593Smuzhiyun static struct clk_branch camss_top_ahb_clk = {
2036*4882a593Smuzhiyun .halt_reg = 0x3484,
2037*4882a593Smuzhiyun .clkr = {
2038*4882a593Smuzhiyun .enable_reg = 0x3484,
2039*4882a593Smuzhiyun .enable_mask = BIT(0),
2040*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2041*4882a593Smuzhiyun .name = "camss_top_ahb_clk",
2042*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2043*4882a593Smuzhiyun .num_parents = 1,
2044*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2045*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2046*4882a593Smuzhiyun },
2047*4882a593Smuzhiyun },
2048*4882a593Smuzhiyun };
2049*4882a593Smuzhiyun
2050*4882a593Smuzhiyun static struct clk_branch camss_ahb_clk = {
2051*4882a593Smuzhiyun .halt_reg = 0x348c,
2052*4882a593Smuzhiyun .clkr = {
2053*4882a593Smuzhiyun .enable_reg = 0x348c,
2054*4882a593Smuzhiyun .enable_mask = BIT(0),
2055*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2056*4882a593Smuzhiyun .name = "camss_ahb_clk",
2057*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2058*4882a593Smuzhiyun .num_parents = 1,
2059*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2060*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2061*4882a593Smuzhiyun },
2062*4882a593Smuzhiyun },
2063*4882a593Smuzhiyun };
2064*4882a593Smuzhiyun
2065*4882a593Smuzhiyun static struct clk_branch camss_micro_ahb_clk = {
2066*4882a593Smuzhiyun .halt_reg = 0x3494,
2067*4882a593Smuzhiyun .clkr = {
2068*4882a593Smuzhiyun .enable_reg = 0x3494,
2069*4882a593Smuzhiyun .enable_mask = BIT(0),
2070*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2071*4882a593Smuzhiyun .name = "camss_micro_ahb_clk",
2072*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2073*4882a593Smuzhiyun .num_parents = 1,
2074*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2075*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2076*4882a593Smuzhiyun },
2077*4882a593Smuzhiyun },
2078*4882a593Smuzhiyun };
2079*4882a593Smuzhiyun
2080*4882a593Smuzhiyun static struct clk_branch camss_jpeg0_clk = {
2081*4882a593Smuzhiyun .halt_reg = 0x35a8,
2082*4882a593Smuzhiyun .clkr = {
2083*4882a593Smuzhiyun .enable_reg = 0x35a8,
2084*4882a593Smuzhiyun .enable_mask = BIT(0),
2085*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2086*4882a593Smuzhiyun .name = "camss_jpeg0_clk",
2087*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &jpeg0_clk_src.clkr.hw },
2088*4882a593Smuzhiyun .num_parents = 1,
2089*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2090*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2091*4882a593Smuzhiyun },
2092*4882a593Smuzhiyun },
2093*4882a593Smuzhiyun };
2094*4882a593Smuzhiyun
2095*4882a593Smuzhiyun static struct clk_branch camss_jpeg_ahb_clk = {
2096*4882a593Smuzhiyun .halt_reg = 0x35b4,
2097*4882a593Smuzhiyun .clkr = {
2098*4882a593Smuzhiyun .enable_reg = 0x35b4,
2099*4882a593Smuzhiyun .enable_mask = BIT(0),
2100*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2101*4882a593Smuzhiyun .name = "camss_jpeg_ahb_clk",
2102*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2103*4882a593Smuzhiyun .num_parents = 1,
2104*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2105*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2106*4882a593Smuzhiyun },
2107*4882a593Smuzhiyun },
2108*4882a593Smuzhiyun };
2109*4882a593Smuzhiyun
2110*4882a593Smuzhiyun static struct clk_branch camss_jpeg_axi_clk = {
2111*4882a593Smuzhiyun .halt_reg = 0x35b8,
2112*4882a593Smuzhiyun .clkr = {
2113*4882a593Smuzhiyun .enable_reg = 0x35b8,
2114*4882a593Smuzhiyun .enable_mask = BIT(0),
2115*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2116*4882a593Smuzhiyun .name = "camss_jpeg_axi_clk",
2117*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
2118*4882a593Smuzhiyun .num_parents = 1,
2119*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2120*4882a593Smuzhiyun },
2121*4882a593Smuzhiyun },
2122*4882a593Smuzhiyun };
2123*4882a593Smuzhiyun
2124*4882a593Smuzhiyun static struct clk_branch camss_vfe0_ahb_clk = {
2125*4882a593Smuzhiyun .halt_reg = 0x3668,
2126*4882a593Smuzhiyun .clkr = {
2127*4882a593Smuzhiyun .enable_reg = 0x3668,
2128*4882a593Smuzhiyun .enable_mask = BIT(0),
2129*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2130*4882a593Smuzhiyun .name = "camss_vfe0_ahb_clk",
2131*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2132*4882a593Smuzhiyun .num_parents = 1,
2133*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2134*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2135*4882a593Smuzhiyun },
2136*4882a593Smuzhiyun },
2137*4882a593Smuzhiyun };
2138*4882a593Smuzhiyun
2139*4882a593Smuzhiyun static struct clk_branch camss_vfe1_ahb_clk = {
2140*4882a593Smuzhiyun .halt_reg = 0x3678,
2141*4882a593Smuzhiyun .clkr = {
2142*4882a593Smuzhiyun .enable_reg = 0x3678,
2143*4882a593Smuzhiyun .enable_mask = BIT(0),
2144*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2145*4882a593Smuzhiyun .name = "camss_vfe1_ahb_clk",
2146*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2147*4882a593Smuzhiyun .num_parents = 1,
2148*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2149*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2150*4882a593Smuzhiyun },
2151*4882a593Smuzhiyun },
2152*4882a593Smuzhiyun };
2153*4882a593Smuzhiyun
2154*4882a593Smuzhiyun static struct clk_branch camss_vfe0_clk = {
2155*4882a593Smuzhiyun .halt_reg = 0x36a8,
2156*4882a593Smuzhiyun .clkr = {
2157*4882a593Smuzhiyun .enable_reg = 0x36a8,
2158*4882a593Smuzhiyun .enable_mask = BIT(0),
2159*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2160*4882a593Smuzhiyun .name = "camss_vfe0_clk",
2161*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &vfe0_clk_src.clkr.hw },
2162*4882a593Smuzhiyun .num_parents = 1,
2163*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2164*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2165*4882a593Smuzhiyun },
2166*4882a593Smuzhiyun },
2167*4882a593Smuzhiyun };
2168*4882a593Smuzhiyun
2169*4882a593Smuzhiyun static struct clk_branch camss_vfe1_clk = {
2170*4882a593Smuzhiyun .halt_reg = 0x36ac,
2171*4882a593Smuzhiyun .clkr = {
2172*4882a593Smuzhiyun .enable_reg = 0x36ac,
2173*4882a593Smuzhiyun .enable_mask = BIT(0),
2174*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2175*4882a593Smuzhiyun .name = "camss_vfe1_clk",
2176*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &vfe1_clk_src.clkr.hw },
2177*4882a593Smuzhiyun .num_parents = 1,
2178*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2179*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2180*4882a593Smuzhiyun },
2181*4882a593Smuzhiyun },
2182*4882a593Smuzhiyun };
2183*4882a593Smuzhiyun
2184*4882a593Smuzhiyun static struct clk_branch camss_cpp_clk = {
2185*4882a593Smuzhiyun .halt_reg = 0x36b0,
2186*4882a593Smuzhiyun .clkr = {
2187*4882a593Smuzhiyun .enable_reg = 0x36b0,
2188*4882a593Smuzhiyun .enable_mask = BIT(0),
2189*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2190*4882a593Smuzhiyun .name = "camss_cpp_clk",
2191*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &cpp_clk_src.clkr.hw },
2192*4882a593Smuzhiyun .num_parents = 1,
2193*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2194*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2195*4882a593Smuzhiyun },
2196*4882a593Smuzhiyun },
2197*4882a593Smuzhiyun };
2198*4882a593Smuzhiyun
2199*4882a593Smuzhiyun static struct clk_branch camss_cpp_ahb_clk = {
2200*4882a593Smuzhiyun .halt_reg = 0x36b4,
2201*4882a593Smuzhiyun .clkr = {
2202*4882a593Smuzhiyun .enable_reg = 0x36b4,
2203*4882a593Smuzhiyun .enable_mask = BIT(0),
2204*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2205*4882a593Smuzhiyun .name = "camss_cpp_ahb_clk",
2206*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2207*4882a593Smuzhiyun .num_parents = 1,
2208*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2209*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2210*4882a593Smuzhiyun },
2211*4882a593Smuzhiyun },
2212*4882a593Smuzhiyun };
2213*4882a593Smuzhiyun
2214*4882a593Smuzhiyun static struct clk_branch camss_vfe_vbif_ahb_clk = {
2215*4882a593Smuzhiyun .halt_reg = 0x36b8,
2216*4882a593Smuzhiyun .clkr = {
2217*4882a593Smuzhiyun .enable_reg = 0x36b8,
2218*4882a593Smuzhiyun .enable_mask = BIT(0),
2219*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2220*4882a593Smuzhiyun .name = "camss_vfe_vbif_ahb_clk",
2221*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2222*4882a593Smuzhiyun .num_parents = 1,
2223*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2224*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2225*4882a593Smuzhiyun },
2226*4882a593Smuzhiyun },
2227*4882a593Smuzhiyun };
2228*4882a593Smuzhiyun
2229*4882a593Smuzhiyun static struct clk_branch camss_vfe_vbif_axi_clk = {
2230*4882a593Smuzhiyun .halt_reg = 0x36bc,
2231*4882a593Smuzhiyun .clkr = {
2232*4882a593Smuzhiyun .enable_reg = 0x36bc,
2233*4882a593Smuzhiyun .enable_mask = BIT(0),
2234*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2235*4882a593Smuzhiyun .name = "camss_vfe_vbif_axi_clk",
2236*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
2237*4882a593Smuzhiyun .num_parents = 1,
2238*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2239*4882a593Smuzhiyun },
2240*4882a593Smuzhiyun },
2241*4882a593Smuzhiyun };
2242*4882a593Smuzhiyun
2243*4882a593Smuzhiyun static struct clk_branch camss_cpp_axi_clk = {
2244*4882a593Smuzhiyun .halt_reg = 0x36c4,
2245*4882a593Smuzhiyun .clkr = {
2246*4882a593Smuzhiyun .enable_reg = 0x36c4,
2247*4882a593Smuzhiyun .enable_mask = BIT(0),
2248*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2249*4882a593Smuzhiyun .name = "camss_cpp_axi_clk",
2250*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
2251*4882a593Smuzhiyun .num_parents = 1,
2252*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2253*4882a593Smuzhiyun },
2254*4882a593Smuzhiyun },
2255*4882a593Smuzhiyun };
2256*4882a593Smuzhiyun
2257*4882a593Smuzhiyun static struct clk_branch camss_cpp_vbif_ahb_clk = {
2258*4882a593Smuzhiyun .halt_reg = 0x36c8,
2259*4882a593Smuzhiyun .clkr = {
2260*4882a593Smuzhiyun .enable_reg = 0x36c8,
2261*4882a593Smuzhiyun .enable_mask = BIT(0),
2262*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2263*4882a593Smuzhiyun .name = "camss_cpp_vbif_ahb_clk",
2264*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2265*4882a593Smuzhiyun .num_parents = 1,
2266*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2267*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2268*4882a593Smuzhiyun },
2269*4882a593Smuzhiyun },
2270*4882a593Smuzhiyun };
2271*4882a593Smuzhiyun
2272*4882a593Smuzhiyun static struct clk_branch camss_csi_vfe0_clk = {
2273*4882a593Smuzhiyun .halt_reg = 0x3704,
2274*4882a593Smuzhiyun .clkr = {
2275*4882a593Smuzhiyun .enable_reg = 0x3704,
2276*4882a593Smuzhiyun .enable_mask = BIT(0),
2277*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2278*4882a593Smuzhiyun .name = "camss_csi_vfe0_clk",
2279*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &vfe0_clk_src.clkr.hw },
2280*4882a593Smuzhiyun .num_parents = 1,
2281*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2282*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2283*4882a593Smuzhiyun },
2284*4882a593Smuzhiyun },
2285*4882a593Smuzhiyun };
2286*4882a593Smuzhiyun
2287*4882a593Smuzhiyun static struct clk_branch camss_csi_vfe1_clk = {
2288*4882a593Smuzhiyun .halt_reg = 0x3714,
2289*4882a593Smuzhiyun .clkr = {
2290*4882a593Smuzhiyun .enable_reg = 0x3714,
2291*4882a593Smuzhiyun .enable_mask = BIT(0),
2292*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2293*4882a593Smuzhiyun .name = "camss_csi_vfe1_clk",
2294*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &vfe1_clk_src.clkr.hw },
2295*4882a593Smuzhiyun .num_parents = 1,
2296*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2297*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2298*4882a593Smuzhiyun },
2299*4882a593Smuzhiyun },
2300*4882a593Smuzhiyun };
2301*4882a593Smuzhiyun
2302*4882a593Smuzhiyun static struct clk_branch camss_vfe0_stream_clk = {
2303*4882a593Smuzhiyun .halt_reg = 0x3720,
2304*4882a593Smuzhiyun .clkr = {
2305*4882a593Smuzhiyun .enable_reg = 0x3720,
2306*4882a593Smuzhiyun .enable_mask = BIT(0),
2307*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2308*4882a593Smuzhiyun .name = "camss_vfe0_stream_clk",
2309*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &vfe0_clk_src.clkr.hw },
2310*4882a593Smuzhiyun .num_parents = 1,
2311*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2312*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2313*4882a593Smuzhiyun },
2314*4882a593Smuzhiyun },
2315*4882a593Smuzhiyun };
2316*4882a593Smuzhiyun
2317*4882a593Smuzhiyun static struct clk_branch camss_vfe1_stream_clk = {
2318*4882a593Smuzhiyun .halt_reg = 0x3724,
2319*4882a593Smuzhiyun .clkr = {
2320*4882a593Smuzhiyun .enable_reg = 0x3724,
2321*4882a593Smuzhiyun .enable_mask = BIT(0),
2322*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2323*4882a593Smuzhiyun .name = "camss_vfe1_stream_clk",
2324*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &vfe1_clk_src.clkr.hw },
2325*4882a593Smuzhiyun .num_parents = 1,
2326*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2327*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2328*4882a593Smuzhiyun },
2329*4882a593Smuzhiyun },
2330*4882a593Smuzhiyun };
2331*4882a593Smuzhiyun
2332*4882a593Smuzhiyun static struct clk_branch camss_cphy_csid0_clk = {
2333*4882a593Smuzhiyun .halt_reg = 0x3730,
2334*4882a593Smuzhiyun .clkr = {
2335*4882a593Smuzhiyun .enable_reg = 0x3730,
2336*4882a593Smuzhiyun .enable_mask = BIT(0),
2337*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2338*4882a593Smuzhiyun .name = "camss_cphy_csid0_clk",
2339*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw },
2340*4882a593Smuzhiyun .num_parents = 1,
2341*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2342*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2343*4882a593Smuzhiyun },
2344*4882a593Smuzhiyun },
2345*4882a593Smuzhiyun };
2346*4882a593Smuzhiyun
2347*4882a593Smuzhiyun static struct clk_branch camss_cphy_csid1_clk = {
2348*4882a593Smuzhiyun .halt_reg = 0x3734,
2349*4882a593Smuzhiyun .clkr = {
2350*4882a593Smuzhiyun .enable_reg = 0x3734,
2351*4882a593Smuzhiyun .enable_mask = BIT(0),
2352*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2353*4882a593Smuzhiyun .name = "camss_cphy_csid1_clk",
2354*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw },
2355*4882a593Smuzhiyun .num_parents = 1,
2356*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2357*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2358*4882a593Smuzhiyun },
2359*4882a593Smuzhiyun },
2360*4882a593Smuzhiyun };
2361*4882a593Smuzhiyun
2362*4882a593Smuzhiyun static struct clk_branch camss_cphy_csid2_clk = {
2363*4882a593Smuzhiyun .halt_reg = 0x3738,
2364*4882a593Smuzhiyun .clkr = {
2365*4882a593Smuzhiyun .enable_reg = 0x3738,
2366*4882a593Smuzhiyun .enable_mask = BIT(0),
2367*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2368*4882a593Smuzhiyun .name = "camss_cphy_csid2_clk",
2369*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw },
2370*4882a593Smuzhiyun .num_parents = 1,
2371*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2372*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2373*4882a593Smuzhiyun },
2374*4882a593Smuzhiyun },
2375*4882a593Smuzhiyun };
2376*4882a593Smuzhiyun
2377*4882a593Smuzhiyun static struct clk_branch camss_cphy_csid3_clk = {
2378*4882a593Smuzhiyun .halt_reg = 0x373c,
2379*4882a593Smuzhiyun .clkr = {
2380*4882a593Smuzhiyun .enable_reg = 0x373c,
2381*4882a593Smuzhiyun .enable_mask = BIT(0),
2382*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2383*4882a593Smuzhiyun .name = "camss_cphy_csid3_clk",
2384*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw },
2385*4882a593Smuzhiyun .num_parents = 1,
2386*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2387*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2388*4882a593Smuzhiyun },
2389*4882a593Smuzhiyun },
2390*4882a593Smuzhiyun };
2391*4882a593Smuzhiyun
2392*4882a593Smuzhiyun static struct clk_branch camss_csiphy0_clk = {
2393*4882a593Smuzhiyun .halt_reg = 0x3740,
2394*4882a593Smuzhiyun .clkr = {
2395*4882a593Smuzhiyun .enable_reg = 0x3740,
2396*4882a593Smuzhiyun .enable_mask = BIT(0),
2397*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2398*4882a593Smuzhiyun .name = "camss_csiphy0_clk",
2399*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw },
2400*4882a593Smuzhiyun .num_parents = 1,
2401*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2402*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2403*4882a593Smuzhiyun },
2404*4882a593Smuzhiyun },
2405*4882a593Smuzhiyun };
2406*4882a593Smuzhiyun
2407*4882a593Smuzhiyun static struct clk_branch camss_csiphy1_clk = {
2408*4882a593Smuzhiyun .halt_reg = 0x3744,
2409*4882a593Smuzhiyun .clkr = {
2410*4882a593Smuzhiyun .enable_reg = 0x3744,
2411*4882a593Smuzhiyun .enable_mask = BIT(0),
2412*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2413*4882a593Smuzhiyun .name = "camss_csiphy1_clk",
2414*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw },
2415*4882a593Smuzhiyun .num_parents = 1,
2416*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2417*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2418*4882a593Smuzhiyun },
2419*4882a593Smuzhiyun },
2420*4882a593Smuzhiyun };
2421*4882a593Smuzhiyun
2422*4882a593Smuzhiyun static struct clk_branch camss_csiphy2_clk = {
2423*4882a593Smuzhiyun .halt_reg = 0x3748,
2424*4882a593Smuzhiyun .clkr = {
2425*4882a593Smuzhiyun .enable_reg = 0x3748,
2426*4882a593Smuzhiyun .enable_mask = BIT(0),
2427*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2428*4882a593Smuzhiyun .name = "camss_csiphy2_clk",
2429*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw },
2430*4882a593Smuzhiyun .num_parents = 1,
2431*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2432*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2433*4882a593Smuzhiyun },
2434*4882a593Smuzhiyun },
2435*4882a593Smuzhiyun };
2436*4882a593Smuzhiyun
2437*4882a593Smuzhiyun static struct clk_branch fd_core_clk = {
2438*4882a593Smuzhiyun .halt_reg = 0x3b68,
2439*4882a593Smuzhiyun .clkr = {
2440*4882a593Smuzhiyun .enable_reg = 0x3b68,
2441*4882a593Smuzhiyun .enable_mask = BIT(0),
2442*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2443*4882a593Smuzhiyun .name = "fd_core_clk",
2444*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &fd_core_clk_src.clkr.hw },
2445*4882a593Smuzhiyun .num_parents = 1,
2446*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2447*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2448*4882a593Smuzhiyun },
2449*4882a593Smuzhiyun },
2450*4882a593Smuzhiyun };
2451*4882a593Smuzhiyun
2452*4882a593Smuzhiyun static struct clk_branch fd_core_uar_clk = {
2453*4882a593Smuzhiyun .halt_reg = 0x3b6c,
2454*4882a593Smuzhiyun .clkr = {
2455*4882a593Smuzhiyun .enable_reg = 0x3b6c,
2456*4882a593Smuzhiyun .enable_mask = BIT(0),
2457*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2458*4882a593Smuzhiyun .name = "fd_core_uar_clk",
2459*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &fd_core_clk_src.clkr.hw },
2460*4882a593Smuzhiyun .num_parents = 1,
2461*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2462*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2463*4882a593Smuzhiyun },
2464*4882a593Smuzhiyun },
2465*4882a593Smuzhiyun };
2466*4882a593Smuzhiyun
2467*4882a593Smuzhiyun static struct clk_branch fd_ahb_clk = {
2468*4882a593Smuzhiyun .halt_reg = 0x3b74,
2469*4882a593Smuzhiyun .clkr = {
2470*4882a593Smuzhiyun .enable_reg = 0x3b74,
2471*4882a593Smuzhiyun .enable_mask = BIT(0),
2472*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2473*4882a593Smuzhiyun .name = "fd_ahb_clk",
2474*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2475*4882a593Smuzhiyun .num_parents = 1,
2476*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2477*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2478*4882a593Smuzhiyun },
2479*4882a593Smuzhiyun },
2480*4882a593Smuzhiyun };
2481*4882a593Smuzhiyun
2482*4882a593Smuzhiyun static struct clk_branch mnoc_ahb_clk = {
2483*4882a593Smuzhiyun .halt_reg = 0x5024,
2484*4882a593Smuzhiyun .clkr = {
2485*4882a593Smuzhiyun .enable_reg = 0x5024,
2486*4882a593Smuzhiyun .enable_mask = BIT(0),
2487*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2488*4882a593Smuzhiyun .name = "mnoc_ahb_clk",
2489*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2490*4882a593Smuzhiyun .num_parents = 1,
2491*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2492*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2493*4882a593Smuzhiyun },
2494*4882a593Smuzhiyun },
2495*4882a593Smuzhiyun };
2496*4882a593Smuzhiyun
2497*4882a593Smuzhiyun static struct clk_branch bimc_smmu_ahb_clk = {
2498*4882a593Smuzhiyun .halt_reg = 0xe004,
2499*4882a593Smuzhiyun .clkr = {
2500*4882a593Smuzhiyun .enable_reg = 0xe004,
2501*4882a593Smuzhiyun .enable_mask = BIT(0),
2502*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2503*4882a593Smuzhiyun .name = "bimc_smmu_ahb_clk",
2504*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2505*4882a593Smuzhiyun .num_parents = 1,
2506*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2507*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2508*4882a593Smuzhiyun },
2509*4882a593Smuzhiyun },
2510*4882a593Smuzhiyun };
2511*4882a593Smuzhiyun
2512*4882a593Smuzhiyun static struct clk_branch bimc_smmu_axi_clk = {
2513*4882a593Smuzhiyun .halt_reg = 0xe008,
2514*4882a593Smuzhiyun .clkr = {
2515*4882a593Smuzhiyun .enable_reg = 0xe008,
2516*4882a593Smuzhiyun .enable_mask = BIT(0),
2517*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2518*4882a593Smuzhiyun .name = "bimc_smmu_axi_clk",
2519*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw },
2520*4882a593Smuzhiyun .num_parents = 1,
2521*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2522*4882a593Smuzhiyun },
2523*4882a593Smuzhiyun },
2524*4882a593Smuzhiyun };
2525*4882a593Smuzhiyun
2526*4882a593Smuzhiyun static struct clk_branch mnoc_maxi_clk = {
2527*4882a593Smuzhiyun .halt_reg = 0xf004,
2528*4882a593Smuzhiyun .clkr = {
2529*4882a593Smuzhiyun .enable_reg = 0xf004,
2530*4882a593Smuzhiyun .enable_mask = BIT(0),
2531*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2532*4882a593Smuzhiyun .name = "mnoc_maxi_clk",
2533*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &maxi_clk_src.clkr.hw },
2534*4882a593Smuzhiyun .num_parents = 1,
2535*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2536*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2537*4882a593Smuzhiyun },
2538*4882a593Smuzhiyun },
2539*4882a593Smuzhiyun };
2540*4882a593Smuzhiyun
2541*4882a593Smuzhiyun static struct clk_branch vmem_maxi_clk = {
2542*4882a593Smuzhiyun .halt_reg = 0xf064,
2543*4882a593Smuzhiyun .clkr = {
2544*4882a593Smuzhiyun .enable_reg = 0xf064,
2545*4882a593Smuzhiyun .enable_mask = BIT(0),
2546*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2547*4882a593Smuzhiyun .name = "vmem_maxi_clk",
2548*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &maxi_clk_src.clkr.hw },
2549*4882a593Smuzhiyun .num_parents = 1,
2550*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2551*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2552*4882a593Smuzhiyun },
2553*4882a593Smuzhiyun },
2554*4882a593Smuzhiyun };
2555*4882a593Smuzhiyun
2556*4882a593Smuzhiyun static struct clk_branch vmem_ahb_clk = {
2557*4882a593Smuzhiyun .halt_reg = 0xf068,
2558*4882a593Smuzhiyun .clkr = {
2559*4882a593Smuzhiyun .enable_reg = 0xf068,
2560*4882a593Smuzhiyun .enable_mask = BIT(0),
2561*4882a593Smuzhiyun .hw.init = &(struct clk_init_data){
2562*4882a593Smuzhiyun .name = "vmem_ahb_clk",
2563*4882a593Smuzhiyun .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw },
2564*4882a593Smuzhiyun .num_parents = 1,
2565*4882a593Smuzhiyun .ops = &clk_branch2_ops,
2566*4882a593Smuzhiyun .flags = CLK_SET_RATE_PARENT,
2567*4882a593Smuzhiyun },
2568*4882a593Smuzhiyun },
2569*4882a593Smuzhiyun };
2570*4882a593Smuzhiyun
2571*4882a593Smuzhiyun static struct clk_hw *mmcc_msm8998_hws[] = {
2572*4882a593Smuzhiyun &gpll0_div.hw,
2573*4882a593Smuzhiyun };
2574*4882a593Smuzhiyun
2575*4882a593Smuzhiyun static struct gdsc video_top_gdsc = {
2576*4882a593Smuzhiyun .gdscr = 0x1024,
2577*4882a593Smuzhiyun .pd = {
2578*4882a593Smuzhiyun .name = "video_top",
2579*4882a593Smuzhiyun },
2580*4882a593Smuzhiyun .pwrsts = PWRSTS_OFF_ON,
2581*4882a593Smuzhiyun };
2582*4882a593Smuzhiyun
2583*4882a593Smuzhiyun static struct gdsc video_subcore0_gdsc = {
2584*4882a593Smuzhiyun .gdscr = 0x1040,
2585*4882a593Smuzhiyun .pd = {
2586*4882a593Smuzhiyun .name = "video_subcore0",
2587*4882a593Smuzhiyun },
2588*4882a593Smuzhiyun .parent = &video_top_gdsc.pd,
2589*4882a593Smuzhiyun .pwrsts = PWRSTS_OFF_ON,
2590*4882a593Smuzhiyun };
2591*4882a593Smuzhiyun
2592*4882a593Smuzhiyun static struct gdsc video_subcore1_gdsc = {
2593*4882a593Smuzhiyun .gdscr = 0x1044,
2594*4882a593Smuzhiyun .pd = {
2595*4882a593Smuzhiyun .name = "video_subcore1",
2596*4882a593Smuzhiyun },
2597*4882a593Smuzhiyun .parent = &video_top_gdsc.pd,
2598*4882a593Smuzhiyun .pwrsts = PWRSTS_OFF_ON,
2599*4882a593Smuzhiyun };
2600*4882a593Smuzhiyun
2601*4882a593Smuzhiyun static struct gdsc mdss_gdsc = {
2602*4882a593Smuzhiyun .gdscr = 0x2304,
2603*4882a593Smuzhiyun .cxcs = (unsigned int []){ 0x2310, 0x2350, 0x231c, 0x2320 },
2604*4882a593Smuzhiyun .cxc_count = 4,
2605*4882a593Smuzhiyun .pd = {
2606*4882a593Smuzhiyun .name = "mdss",
2607*4882a593Smuzhiyun },
2608*4882a593Smuzhiyun .pwrsts = PWRSTS_OFF_ON,
2609*4882a593Smuzhiyun };
2610*4882a593Smuzhiyun
2611*4882a593Smuzhiyun static struct gdsc camss_top_gdsc = {
2612*4882a593Smuzhiyun .gdscr = 0x34a0,
2613*4882a593Smuzhiyun .cxcs = (unsigned int []){ 0x35b8, 0x36c4, 0x3704, 0x3714, 0x3494,
2614*4882a593Smuzhiyun 0x35a8, 0x3868 },
2615*4882a593Smuzhiyun .cxc_count = 7,
2616*4882a593Smuzhiyun .pd = {
2617*4882a593Smuzhiyun .name = "camss_top",
2618*4882a593Smuzhiyun },
2619*4882a593Smuzhiyun .pwrsts = PWRSTS_OFF_ON,
2620*4882a593Smuzhiyun };
2621*4882a593Smuzhiyun
2622*4882a593Smuzhiyun static struct gdsc camss_vfe0_gdsc = {
2623*4882a593Smuzhiyun .gdscr = 0x3664,
2624*4882a593Smuzhiyun .pd = {
2625*4882a593Smuzhiyun .name = "camss_vfe0",
2626*4882a593Smuzhiyun },
2627*4882a593Smuzhiyun .parent = &camss_top_gdsc.pd,
2628*4882a593Smuzhiyun .pwrsts = PWRSTS_OFF_ON,
2629*4882a593Smuzhiyun };
2630*4882a593Smuzhiyun
2631*4882a593Smuzhiyun static struct gdsc camss_vfe1_gdsc = {
2632*4882a593Smuzhiyun .gdscr = 0x3674,
2633*4882a593Smuzhiyun .pd = {
2634*4882a593Smuzhiyun .name = "camss_vfe1_gdsc",
2635*4882a593Smuzhiyun },
2636*4882a593Smuzhiyun .parent = &camss_top_gdsc.pd,
2637*4882a593Smuzhiyun .pwrsts = PWRSTS_OFF_ON,
2638*4882a593Smuzhiyun };
2639*4882a593Smuzhiyun
2640*4882a593Smuzhiyun static struct gdsc camss_cpp_gdsc = {
2641*4882a593Smuzhiyun .gdscr = 0x36d4,
2642*4882a593Smuzhiyun .pd = {
2643*4882a593Smuzhiyun .name = "camss_cpp",
2644*4882a593Smuzhiyun },
2645*4882a593Smuzhiyun .parent = &camss_top_gdsc.pd,
2646*4882a593Smuzhiyun .pwrsts = PWRSTS_OFF_ON,
2647*4882a593Smuzhiyun };
2648*4882a593Smuzhiyun
2649*4882a593Smuzhiyun static struct gdsc bimc_smmu_gdsc = {
2650*4882a593Smuzhiyun .gdscr = 0xe020,
2651*4882a593Smuzhiyun .gds_hw_ctrl = 0xe024,
2652*4882a593Smuzhiyun .pd = {
2653*4882a593Smuzhiyun .name = "bimc_smmu",
2654*4882a593Smuzhiyun },
2655*4882a593Smuzhiyun .pwrsts = PWRSTS_OFF_ON,
2656*4882a593Smuzhiyun .flags = HW_CTRL,
2657*4882a593Smuzhiyun };
2658*4882a593Smuzhiyun
2659*4882a593Smuzhiyun static struct clk_regmap *mmcc_msm8998_clocks[] = {
2660*4882a593Smuzhiyun [MMPLL0] = &mmpll0.clkr,
2661*4882a593Smuzhiyun [MMPLL0_OUT_EVEN] = &mmpll0_out_even.clkr,
2662*4882a593Smuzhiyun [MMPLL1] = &mmpll1.clkr,
2663*4882a593Smuzhiyun [MMPLL1_OUT_EVEN] = &mmpll1_out_even.clkr,
2664*4882a593Smuzhiyun [MMPLL3] = &mmpll3.clkr,
2665*4882a593Smuzhiyun [MMPLL3_OUT_EVEN] = &mmpll3_out_even.clkr,
2666*4882a593Smuzhiyun [MMPLL4] = &mmpll4.clkr,
2667*4882a593Smuzhiyun [MMPLL4_OUT_EVEN] = &mmpll4_out_even.clkr,
2668*4882a593Smuzhiyun [MMPLL5] = &mmpll5.clkr,
2669*4882a593Smuzhiyun [MMPLL5_OUT_EVEN] = &mmpll5_out_even.clkr,
2670*4882a593Smuzhiyun [MMPLL6] = &mmpll6.clkr,
2671*4882a593Smuzhiyun [MMPLL6_OUT_EVEN] = &mmpll6_out_even.clkr,
2672*4882a593Smuzhiyun [MMPLL7] = &mmpll7.clkr,
2673*4882a593Smuzhiyun [MMPLL7_OUT_EVEN] = &mmpll7_out_even.clkr,
2674*4882a593Smuzhiyun [MMPLL10] = &mmpll10.clkr,
2675*4882a593Smuzhiyun [MMPLL10_OUT_EVEN] = &mmpll10_out_even.clkr,
2676*4882a593Smuzhiyun [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2677*4882a593Smuzhiyun [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
2678*4882a593Smuzhiyun [CCI_CLK_SRC] = &cci_clk_src.clkr,
2679*4882a593Smuzhiyun [CPP_CLK_SRC] = &cpp_clk_src.clkr,
2680*4882a593Smuzhiyun [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
2681*4882a593Smuzhiyun [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
2682*4882a593Smuzhiyun [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
2683*4882a593Smuzhiyun [CSI3_CLK_SRC] = &csi3_clk_src.clkr,
2684*4882a593Smuzhiyun [CSIPHY_CLK_SRC] = &csiphy_clk_src.clkr,
2685*4882a593Smuzhiyun [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
2686*4882a593Smuzhiyun [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
2687*4882a593Smuzhiyun [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
2688*4882a593Smuzhiyun [DP_AUX_CLK_SRC] = &dp_aux_clk_src.clkr,
2689*4882a593Smuzhiyun [DP_CRYPTO_CLK_SRC] = &dp_crypto_clk_src.clkr,
2690*4882a593Smuzhiyun [DP_LINK_CLK_SRC] = &dp_link_clk_src.clkr,
2691*4882a593Smuzhiyun [DP_PIXEL_CLK_SRC] = &dp_pixel_clk_src.clkr,
2692*4882a593Smuzhiyun [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2693*4882a593Smuzhiyun [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
2694*4882a593Smuzhiyun [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
2695*4882a593Smuzhiyun [FD_CORE_CLK_SRC] = &fd_core_clk_src.clkr,
2696*4882a593Smuzhiyun [HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
2697*4882a593Smuzhiyun [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
2698*4882a593Smuzhiyun [MAXI_CLK_SRC] = &maxi_clk_src.clkr,
2699*4882a593Smuzhiyun [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
2700*4882a593Smuzhiyun [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
2701*4882a593Smuzhiyun [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
2702*4882a593Smuzhiyun [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
2703*4882a593Smuzhiyun [MDP_CLK_SRC] = &mdp_clk_src.clkr,
2704*4882a593Smuzhiyun [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2705*4882a593Smuzhiyun [AHB_CLK_SRC] = &ahb_clk_src.clkr,
2706*4882a593Smuzhiyun [AXI_CLK_SRC] = &axi_clk_src.clkr,
2707*4882a593Smuzhiyun [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2708*4882a593Smuzhiyun [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
2709*4882a593Smuzhiyun [ROT_CLK_SRC] = &rot_clk_src.clkr,
2710*4882a593Smuzhiyun [VIDEO_CORE_CLK_SRC] = &video_core_clk_src.clkr,
2711*4882a593Smuzhiyun [VIDEO_SUBCORE0_CLK_SRC] = &video_subcore0_clk_src.clkr,
2712*4882a593Smuzhiyun [VIDEO_SUBCORE1_CLK_SRC] = &video_subcore1_clk_src.clkr,
2713*4882a593Smuzhiyun [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
2714*4882a593Smuzhiyun [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
2715*4882a593Smuzhiyun [MISC_AHB_CLK] = &misc_ahb_clk.clkr,
2716*4882a593Smuzhiyun [VIDEO_CORE_CLK] = &video_core_clk.clkr,
2717*4882a593Smuzhiyun [VIDEO_AHB_CLK] = &video_ahb_clk.clkr,
2718*4882a593Smuzhiyun [VIDEO_AXI_CLK] = &video_axi_clk.clkr,
2719*4882a593Smuzhiyun [VIDEO_MAXI_CLK] = &video_maxi_clk.clkr,
2720*4882a593Smuzhiyun [VIDEO_SUBCORE0_CLK] = &video_subcore0_clk.clkr,
2721*4882a593Smuzhiyun [VIDEO_SUBCORE1_CLK] = &video_subcore1_clk.clkr,
2722*4882a593Smuzhiyun [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
2723*4882a593Smuzhiyun [MDSS_HDMI_DP_AHB_CLK] = &mdss_hdmi_dp_ahb_clk.clkr,
2724*4882a593Smuzhiyun [MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
2725*4882a593Smuzhiyun [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
2726*4882a593Smuzhiyun [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
2727*4882a593Smuzhiyun [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
2728*4882a593Smuzhiyun [MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr,
2729*4882a593Smuzhiyun [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
2730*4882a593Smuzhiyun [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
2731*4882a593Smuzhiyun [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
2732*4882a593Smuzhiyun [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
2733*4882a593Smuzhiyun [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
2734*4882a593Smuzhiyun [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
2735*4882a593Smuzhiyun [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
2736*4882a593Smuzhiyun [MDSS_ROT_CLK] = &mdss_rot_clk.clkr,
2737*4882a593Smuzhiyun [MDSS_DP_LINK_CLK] = &mdss_dp_link_clk.clkr,
2738*4882a593Smuzhiyun [MDSS_DP_LINK_INTF_CLK] = &mdss_dp_link_intf_clk.clkr,
2739*4882a593Smuzhiyun [MDSS_DP_CRYPTO_CLK] = &mdss_dp_crypto_clk.clkr,
2740*4882a593Smuzhiyun [MDSS_DP_PIXEL_CLK] = &mdss_dp_pixel_clk.clkr,
2741*4882a593Smuzhiyun [MDSS_DP_AUX_CLK] = &mdss_dp_aux_clk.clkr,
2742*4882a593Smuzhiyun [MDSS_BYTE0_INTF_CLK] = &mdss_byte0_intf_clk.clkr,
2743*4882a593Smuzhiyun [MDSS_BYTE1_INTF_CLK] = &mdss_byte1_intf_clk.clkr,
2744*4882a593Smuzhiyun [CAMSS_CSI0PHYTIMER_CLK] = &camss_csi0phytimer_clk.clkr,
2745*4882a593Smuzhiyun [CAMSS_CSI1PHYTIMER_CLK] = &camss_csi1phytimer_clk.clkr,
2746*4882a593Smuzhiyun [CAMSS_CSI2PHYTIMER_CLK] = &camss_csi2phytimer_clk.clkr,
2747*4882a593Smuzhiyun [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
2748*4882a593Smuzhiyun [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
2749*4882a593Smuzhiyun [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
2750*4882a593Smuzhiyun [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
2751*4882a593Smuzhiyun [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
2752*4882a593Smuzhiyun [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
2753*4882a593Smuzhiyun [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
2754*4882a593Smuzhiyun [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
2755*4882a593Smuzhiyun [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
2756*4882a593Smuzhiyun [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
2757*4882a593Smuzhiyun [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
2758*4882a593Smuzhiyun [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
2759*4882a593Smuzhiyun [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
2760*4882a593Smuzhiyun [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
2761*4882a593Smuzhiyun [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
2762*4882a593Smuzhiyun [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
2763*4882a593Smuzhiyun [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
2764*4882a593Smuzhiyun [CAMSS_CCI_CLK] = &camss_cci_clk.clkr,
2765*4882a593Smuzhiyun [CAMSS_CCI_AHB_CLK] = &camss_cci_ahb_clk.clkr,
2766*4882a593Smuzhiyun [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
2767*4882a593Smuzhiyun [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
2768*4882a593Smuzhiyun [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
2769*4882a593Smuzhiyun [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
2770*4882a593Smuzhiyun [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
2771*4882a593Smuzhiyun [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr,
2772*4882a593Smuzhiyun [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
2773*4882a593Smuzhiyun [CAMSS_JPEG0_CLK] = &camss_jpeg0_clk.clkr,
2774*4882a593Smuzhiyun [CAMSS_JPEG_AHB_CLK] = &camss_jpeg_ahb_clk.clkr,
2775*4882a593Smuzhiyun [CAMSS_JPEG_AXI_CLK] = &camss_jpeg_axi_clk.clkr,
2776*4882a593Smuzhiyun [CAMSS_VFE0_AHB_CLK] = &camss_vfe0_ahb_clk.clkr,
2777*4882a593Smuzhiyun [CAMSS_VFE1_AHB_CLK] = &camss_vfe1_ahb_clk.clkr,
2778*4882a593Smuzhiyun [CAMSS_VFE0_CLK] = &camss_vfe0_clk.clkr,
2779*4882a593Smuzhiyun [CAMSS_VFE1_CLK] = &camss_vfe1_clk.clkr,
2780*4882a593Smuzhiyun [CAMSS_CPP_CLK] = &camss_cpp_clk.clkr,
2781*4882a593Smuzhiyun [CAMSS_CPP_AHB_CLK] = &camss_cpp_ahb_clk.clkr,
2782*4882a593Smuzhiyun [CAMSS_VFE_VBIF_AHB_CLK] = &camss_vfe_vbif_ahb_clk.clkr,
2783*4882a593Smuzhiyun [CAMSS_VFE_VBIF_AXI_CLK] = &camss_vfe_vbif_axi_clk.clkr,
2784*4882a593Smuzhiyun [CAMSS_CPP_AXI_CLK] = &camss_cpp_axi_clk.clkr,
2785*4882a593Smuzhiyun [CAMSS_CPP_VBIF_AHB_CLK] = &camss_cpp_vbif_ahb_clk.clkr,
2786*4882a593Smuzhiyun [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
2787*4882a593Smuzhiyun [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
2788*4882a593Smuzhiyun [CAMSS_VFE0_STREAM_CLK] = &camss_vfe0_stream_clk.clkr,
2789*4882a593Smuzhiyun [CAMSS_VFE1_STREAM_CLK] = &camss_vfe1_stream_clk.clkr,
2790*4882a593Smuzhiyun [CAMSS_CPHY_CSID0_CLK] = &camss_cphy_csid0_clk.clkr,
2791*4882a593Smuzhiyun [CAMSS_CPHY_CSID1_CLK] = &camss_cphy_csid1_clk.clkr,
2792*4882a593Smuzhiyun [CAMSS_CPHY_CSID2_CLK] = &camss_cphy_csid2_clk.clkr,
2793*4882a593Smuzhiyun [CAMSS_CPHY_CSID3_CLK] = &camss_cphy_csid3_clk.clkr,
2794*4882a593Smuzhiyun [CAMSS_CSIPHY0_CLK] = &camss_csiphy0_clk.clkr,
2795*4882a593Smuzhiyun [CAMSS_CSIPHY1_CLK] = &camss_csiphy1_clk.clkr,
2796*4882a593Smuzhiyun [CAMSS_CSIPHY2_CLK] = &camss_csiphy2_clk.clkr,
2797*4882a593Smuzhiyun [FD_CORE_CLK] = &fd_core_clk.clkr,
2798*4882a593Smuzhiyun [FD_CORE_UAR_CLK] = &fd_core_uar_clk.clkr,
2799*4882a593Smuzhiyun [FD_AHB_CLK] = &fd_ahb_clk.clkr,
2800*4882a593Smuzhiyun [MNOC_AHB_CLK] = &mnoc_ahb_clk.clkr,
2801*4882a593Smuzhiyun [BIMC_SMMU_AHB_CLK] = &bimc_smmu_ahb_clk.clkr,
2802*4882a593Smuzhiyun [BIMC_SMMU_AXI_CLK] = &bimc_smmu_axi_clk.clkr,
2803*4882a593Smuzhiyun [MNOC_MAXI_CLK] = &mnoc_maxi_clk.clkr,
2804*4882a593Smuzhiyun [VMEM_MAXI_CLK] = &vmem_maxi_clk.clkr,
2805*4882a593Smuzhiyun [VMEM_AHB_CLK] = &vmem_ahb_clk.clkr,
2806*4882a593Smuzhiyun };
2807*4882a593Smuzhiyun
2808*4882a593Smuzhiyun static struct gdsc *mmcc_msm8998_gdscs[] = {
2809*4882a593Smuzhiyun [VIDEO_TOP_GDSC] = &video_top_gdsc,
2810*4882a593Smuzhiyun [VIDEO_SUBCORE0_GDSC] = &video_subcore0_gdsc,
2811*4882a593Smuzhiyun [VIDEO_SUBCORE1_GDSC] = &video_subcore1_gdsc,
2812*4882a593Smuzhiyun [MDSS_GDSC] = &mdss_gdsc,
2813*4882a593Smuzhiyun [CAMSS_TOP_GDSC] = &camss_top_gdsc,
2814*4882a593Smuzhiyun [CAMSS_VFE0_GDSC] = &camss_vfe0_gdsc,
2815*4882a593Smuzhiyun [CAMSS_VFE1_GDSC] = &camss_vfe1_gdsc,
2816*4882a593Smuzhiyun [CAMSS_CPP_GDSC] = &camss_cpp_gdsc,
2817*4882a593Smuzhiyun [BIMC_SMMU_GDSC] = &bimc_smmu_gdsc,
2818*4882a593Smuzhiyun };
2819*4882a593Smuzhiyun
2820*4882a593Smuzhiyun static const struct qcom_reset_map mmcc_msm8998_resets[] = {
2821*4882a593Smuzhiyun [SPDM_BCR] = { 0x200 },
2822*4882a593Smuzhiyun [SPDM_RM_BCR] = { 0x300 },
2823*4882a593Smuzhiyun [MISC_BCR] = { 0x320 },
2824*4882a593Smuzhiyun [VIDEO_TOP_BCR] = { 0x1020 },
2825*4882a593Smuzhiyun [THROTTLE_VIDEO_BCR] = { 0x1180 },
2826*4882a593Smuzhiyun [MDSS_BCR] = { 0x2300 },
2827*4882a593Smuzhiyun [THROTTLE_MDSS_BCR] = { 0x2460 },
2828*4882a593Smuzhiyun [CAMSS_PHY0_BCR] = { 0x3020 },
2829*4882a593Smuzhiyun [CAMSS_PHY1_BCR] = { 0x3050 },
2830*4882a593Smuzhiyun [CAMSS_PHY2_BCR] = { 0x3080 },
2831*4882a593Smuzhiyun [CAMSS_CSI0_BCR] = { 0x30b0 },
2832*4882a593Smuzhiyun [CAMSS_CSI0RDI_BCR] = { 0x30d0 },
2833*4882a593Smuzhiyun [CAMSS_CSI0PIX_BCR] = { 0x30e0 },
2834*4882a593Smuzhiyun [CAMSS_CSI1_BCR] = { 0x3120 },
2835*4882a593Smuzhiyun [CAMSS_CSI1RDI_BCR] = { 0x3140 },
2836*4882a593Smuzhiyun [CAMSS_CSI1PIX_BCR] = { 0x3150 },
2837*4882a593Smuzhiyun [CAMSS_CSI2_BCR] = { 0x3180 },
2838*4882a593Smuzhiyun [CAMSS_CSI2RDI_BCR] = { 0x31a0 },
2839*4882a593Smuzhiyun [CAMSS_CSI2PIX_BCR] = { 0x31b0 },
2840*4882a593Smuzhiyun [CAMSS_CSI3_BCR] = { 0x31e0 },
2841*4882a593Smuzhiyun [CAMSS_CSI3RDI_BCR] = { 0x3200 },
2842*4882a593Smuzhiyun [CAMSS_CSI3PIX_BCR] = { 0x3210 },
2843*4882a593Smuzhiyun [CAMSS_ISPIF_BCR] = { 0x3220 },
2844*4882a593Smuzhiyun [CAMSS_CCI_BCR] = { 0x3340 },
2845*4882a593Smuzhiyun [CAMSS_TOP_BCR] = { 0x3480 },
2846*4882a593Smuzhiyun [CAMSS_AHB_BCR] = { 0x3488 },
2847*4882a593Smuzhiyun [CAMSS_MICRO_BCR] = { 0x3490 },
2848*4882a593Smuzhiyun [CAMSS_JPEG_BCR] = { 0x35a0 },
2849*4882a593Smuzhiyun [CAMSS_VFE0_BCR] = { 0x3660 },
2850*4882a593Smuzhiyun [CAMSS_VFE1_BCR] = { 0x3670 },
2851*4882a593Smuzhiyun [CAMSS_VFE_VBIF_BCR] = { 0x36a0 },
2852*4882a593Smuzhiyun [CAMSS_CPP_TOP_BCR] = { 0x36c0 },
2853*4882a593Smuzhiyun [CAMSS_CPP_BCR] = { 0x36d0 },
2854*4882a593Smuzhiyun [CAMSS_CSI_VFE0_BCR] = { 0x3700 },
2855*4882a593Smuzhiyun [CAMSS_CSI_VFE1_BCR] = { 0x3710 },
2856*4882a593Smuzhiyun [CAMSS_FD_BCR] = { 0x3b60 },
2857*4882a593Smuzhiyun [THROTTLE_CAMSS_BCR] = { 0x3c30 },
2858*4882a593Smuzhiyun [MNOCAHB_BCR] = { 0x5020 },
2859*4882a593Smuzhiyun [MNOCAXI_BCR] = { 0xd020 },
2860*4882a593Smuzhiyun [BMIC_SMMU_BCR] = { 0xe000 },
2861*4882a593Smuzhiyun [MNOC_MAXI_BCR] = { 0xf000 },
2862*4882a593Smuzhiyun [VMEM_BCR] = { 0xf060 },
2863*4882a593Smuzhiyun [BTO_BCR] = { 0x10004 },
2864*4882a593Smuzhiyun };
2865*4882a593Smuzhiyun
2866*4882a593Smuzhiyun static const struct regmap_config mmcc_msm8998_regmap_config = {
2867*4882a593Smuzhiyun .reg_bits = 32,
2868*4882a593Smuzhiyun .reg_stride = 4,
2869*4882a593Smuzhiyun .val_bits = 32,
2870*4882a593Smuzhiyun .max_register = 0x10004,
2871*4882a593Smuzhiyun .fast_io = true,
2872*4882a593Smuzhiyun };
2873*4882a593Smuzhiyun
2874*4882a593Smuzhiyun static const struct qcom_cc_desc mmcc_msm8998_desc = {
2875*4882a593Smuzhiyun .config = &mmcc_msm8998_regmap_config,
2876*4882a593Smuzhiyun .clks = mmcc_msm8998_clocks,
2877*4882a593Smuzhiyun .num_clks = ARRAY_SIZE(mmcc_msm8998_clocks),
2878*4882a593Smuzhiyun .resets = mmcc_msm8998_resets,
2879*4882a593Smuzhiyun .num_resets = ARRAY_SIZE(mmcc_msm8998_resets),
2880*4882a593Smuzhiyun .gdscs = mmcc_msm8998_gdscs,
2881*4882a593Smuzhiyun .num_gdscs = ARRAY_SIZE(mmcc_msm8998_gdscs),
2882*4882a593Smuzhiyun .clk_hws = mmcc_msm8998_hws,
2883*4882a593Smuzhiyun .num_clk_hws = ARRAY_SIZE(mmcc_msm8998_hws),
2884*4882a593Smuzhiyun };
2885*4882a593Smuzhiyun
2886*4882a593Smuzhiyun static const struct of_device_id mmcc_msm8998_match_table[] = {
2887*4882a593Smuzhiyun { .compatible = "qcom,mmcc-msm8998" },
2888*4882a593Smuzhiyun { }
2889*4882a593Smuzhiyun };
2890*4882a593Smuzhiyun MODULE_DEVICE_TABLE(of, mmcc_msm8998_match_table);
2891*4882a593Smuzhiyun
mmcc_msm8998_probe(struct platform_device * pdev)2892*4882a593Smuzhiyun static int mmcc_msm8998_probe(struct platform_device *pdev)
2893*4882a593Smuzhiyun {
2894*4882a593Smuzhiyun struct regmap *regmap;
2895*4882a593Smuzhiyun
2896*4882a593Smuzhiyun regmap = qcom_cc_map(pdev, &mmcc_msm8998_desc);
2897*4882a593Smuzhiyun if (IS_ERR(regmap))
2898*4882a593Smuzhiyun return PTR_ERR(regmap);
2899*4882a593Smuzhiyun
2900*4882a593Smuzhiyun return qcom_cc_really_probe(pdev, &mmcc_msm8998_desc, regmap);
2901*4882a593Smuzhiyun }
2902*4882a593Smuzhiyun
2903*4882a593Smuzhiyun static struct platform_driver mmcc_msm8998_driver = {
2904*4882a593Smuzhiyun .probe = mmcc_msm8998_probe,
2905*4882a593Smuzhiyun .driver = {
2906*4882a593Smuzhiyun .name = "mmcc-msm8998",
2907*4882a593Smuzhiyun .of_match_table = mmcc_msm8998_match_table,
2908*4882a593Smuzhiyun },
2909*4882a593Smuzhiyun };
2910*4882a593Smuzhiyun module_platform_driver(mmcc_msm8998_driver);
2911*4882a593Smuzhiyun
2912*4882a593Smuzhiyun MODULE_DESCRIPTION("QCOM MMCC MSM8998 Driver");
2913*4882a593Smuzhiyun MODULE_LICENSE("GPL v2");
2914