xref: /openbmc/linux/drivers/clk/qcom/gcc-msm8994.c (revision 28d3f06e56baa9c6e2c8e1d9e5fd663138c08b92)
1aec89f78SBastian Köcher /* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
2aec89f78SBastian Köcher  *
3aec89f78SBastian Köcher  * This program is free software; you can redistribute it and/or modify
4aec89f78SBastian Köcher  * it under the terms of the GNU General Public License version 2 and
5aec89f78SBastian Köcher  * only version 2 as published by the Free Software Foundation.
6aec89f78SBastian Köcher  *
7aec89f78SBastian Köcher  * This program is distributed in the hope that it will be useful,
8aec89f78SBastian Köcher  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9aec89f78SBastian Köcher  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10aec89f78SBastian Köcher  * GNU General Public License for more details.
11aec89f78SBastian Köcher  */
12aec89f78SBastian Köcher 
13aec89f78SBastian Köcher #include <linux/kernel.h>
14aec89f78SBastian Köcher #include <linux/init.h>
15aec89f78SBastian Köcher #include <linux/err.h>
16aec89f78SBastian Köcher #include <linux/ctype.h>
17aec89f78SBastian Köcher #include <linux/io.h>
18aec89f78SBastian Köcher #include <linux/of.h>
19aec89f78SBastian Köcher #include <linux/platform_device.h>
20aec89f78SBastian Köcher #include <linux/module.h>
21aec89f78SBastian Köcher #include <linux/regmap.h>
22aec89f78SBastian Köcher 
23aec89f78SBastian Köcher #include <dt-bindings/clock/qcom,gcc-msm8994.h>
24aec89f78SBastian Köcher 
25aec89f78SBastian Köcher #include "common.h"
26aec89f78SBastian Köcher #include "clk-regmap.h"
27aec89f78SBastian Köcher #include "clk-alpha-pll.h"
28aec89f78SBastian Köcher #include "clk-rcg.h"
29aec89f78SBastian Köcher #include "clk-branch.h"
30aec89f78SBastian Köcher #include "reset.h"
31aec89f78SBastian Köcher 
32aec89f78SBastian Köcher enum {
33aec89f78SBastian Köcher 	P_XO,
34aec89f78SBastian Köcher 	P_GPLL0,
35aec89f78SBastian Köcher 	P_GPLL4,
36aec89f78SBastian Köcher };
37aec89f78SBastian Köcher 
38aec89f78SBastian Köcher static const struct parent_map gcc_xo_gpll0_map[] = {
39aec89f78SBastian Köcher 	{ P_XO, 0 },
40aec89f78SBastian Köcher 	{ P_GPLL0, 1 },
41aec89f78SBastian Köcher };
42aec89f78SBastian Köcher 
43aec89f78SBastian Köcher static const char * const gcc_xo_gpll0[] = {
44aec89f78SBastian Köcher 	"xo",
45aec89f78SBastian Köcher 	"gpll0",
46aec89f78SBastian Köcher };
47aec89f78SBastian Köcher 
48aec89f78SBastian Köcher static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
49aec89f78SBastian Köcher 	{ P_XO, 0 },
50aec89f78SBastian Köcher 	{ P_GPLL0, 1 },
51aec89f78SBastian Köcher 	{ P_GPLL4, 5 },
52aec89f78SBastian Köcher };
53aec89f78SBastian Köcher 
54aec89f78SBastian Köcher static const char * const gcc_xo_gpll0_gpll4[] = {
55aec89f78SBastian Köcher 	"xo",
56aec89f78SBastian Köcher 	"gpll0",
57aec89f78SBastian Köcher 	"gpll4",
58aec89f78SBastian Köcher };
59aec89f78SBastian Köcher 
60aec89f78SBastian Köcher #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
61aec89f78SBastian Köcher 
62aec89f78SBastian Köcher static struct clk_fixed_factor xo = {
63aec89f78SBastian Köcher 	.mult = 1,
64aec89f78SBastian Köcher 	.div = 1,
65aec89f78SBastian Köcher 	.hw.init = &(struct clk_init_data)
66aec89f78SBastian Köcher 	{
67aec89f78SBastian Köcher 		.name = "xo",
68aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "xo_board" },
69aec89f78SBastian Köcher 		.num_parents = 1,
70aec89f78SBastian Köcher 		.ops = &clk_fixed_factor_ops,
71aec89f78SBastian Köcher 	},
72aec89f78SBastian Köcher };
73aec89f78SBastian Köcher 
74aec89f78SBastian Köcher static struct clk_alpha_pll gpll0_early = {
75aec89f78SBastian Köcher 	.offset = 0x00000,
76*28d3f06eSAbhishek Sahu 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
77aec89f78SBastian Köcher 	.clkr = {
78aec89f78SBastian Köcher 		.enable_reg = 0x1480,
79aec89f78SBastian Köcher 		.enable_mask = BIT(0),
80aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
81aec89f78SBastian Köcher 		{
82aec89f78SBastian Köcher 			.name = "gpll0_early",
83aec89f78SBastian Köcher 			.parent_names = (const char *[]) { "xo" },
84aec89f78SBastian Köcher 			.num_parents = 1,
85aec89f78SBastian Köcher 			.ops = &clk_alpha_pll_ops,
86aec89f78SBastian Köcher 		},
87aec89f78SBastian Köcher 	},
88aec89f78SBastian Köcher };
89aec89f78SBastian Köcher 
90aec89f78SBastian Köcher static struct clk_alpha_pll_postdiv gpll0 = {
91aec89f78SBastian Köcher 	.offset = 0x00000,
92*28d3f06eSAbhishek Sahu 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
93aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
94aec89f78SBastian Köcher 	{
95aec89f78SBastian Köcher 		.name = "gpll0",
96aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "gpll0_early" },
97aec89f78SBastian Köcher 		.num_parents = 1,
98aec89f78SBastian Köcher 		.ops = &clk_alpha_pll_postdiv_ops,
99aec89f78SBastian Köcher 	},
100aec89f78SBastian Köcher };
101aec89f78SBastian Köcher 
102aec89f78SBastian Köcher static struct clk_alpha_pll gpll4_early = {
103aec89f78SBastian Köcher 	.offset = 0x1dc0,
104*28d3f06eSAbhishek Sahu 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
105aec89f78SBastian Köcher 	.clkr = {
106aec89f78SBastian Köcher 		.enable_reg = 0x1480,
107aec89f78SBastian Köcher 		.enable_mask = BIT(4),
108aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
109aec89f78SBastian Köcher 		{
110aec89f78SBastian Köcher 			.name = "gpll4_early",
111aec89f78SBastian Köcher 			.parent_names = (const char *[]) { "xo" },
112aec89f78SBastian Köcher 			.num_parents = 1,
113aec89f78SBastian Köcher 			.ops = &clk_alpha_pll_ops,
114aec89f78SBastian Köcher 		},
115aec89f78SBastian Köcher 	},
116aec89f78SBastian Köcher };
117aec89f78SBastian Köcher 
118aec89f78SBastian Köcher static struct clk_alpha_pll_postdiv gpll4 = {
119aec89f78SBastian Köcher 	.offset = 0x1dc0,
120*28d3f06eSAbhishek Sahu 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
121aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
122aec89f78SBastian Köcher 	{
123aec89f78SBastian Köcher 		.name = "gpll4",
124aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "gpll4_early" },
125aec89f78SBastian Köcher 		.num_parents = 1,
126aec89f78SBastian Köcher 		.ops = &clk_alpha_pll_postdiv_ops,
127aec89f78SBastian Köcher 	},
128aec89f78SBastian Köcher };
129aec89f78SBastian Köcher 
130aec89f78SBastian Köcher static struct freq_tbl ftbl_ufs_axi_clk_src[] = {
131aec89f78SBastian Köcher 	F(50000000, P_GPLL0, 12, 0, 0),
132aec89f78SBastian Köcher 	F(100000000, P_GPLL0, 6, 0, 0),
133aec89f78SBastian Köcher 	F(150000000, P_GPLL0, 4, 0, 0),
134aec89f78SBastian Köcher 	F(171430000, P_GPLL0, 3.5, 0, 0),
135aec89f78SBastian Köcher 	F(200000000, P_GPLL0, 3, 0, 0),
136aec89f78SBastian Köcher 	F(240000000, P_GPLL0, 2.5, 0, 0),
137aec89f78SBastian Köcher 	{ }
138aec89f78SBastian Köcher };
139aec89f78SBastian Köcher 
140aec89f78SBastian Köcher static struct clk_rcg2 ufs_axi_clk_src = {
141aec89f78SBastian Köcher 	.cmd_rcgr = 0x1d68,
142aec89f78SBastian Köcher 	.mnd_width = 8,
143aec89f78SBastian Köcher 	.hid_width = 5,
144aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
145aec89f78SBastian Köcher 	.freq_tbl = ftbl_ufs_axi_clk_src,
146aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
147aec89f78SBastian Köcher 	{
148aec89f78SBastian Köcher 		.name = "ufs_axi_clk_src",
149aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
150aec89f78SBastian Köcher 		.num_parents = 2,
151aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
152aec89f78SBastian Köcher 	},
153aec89f78SBastian Köcher };
154aec89f78SBastian Köcher 
155aec89f78SBastian Köcher static struct freq_tbl ftbl_usb30_master_clk_src[] = {
156aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
157aec89f78SBastian Köcher 	F(125000000, P_GPLL0, 1, 5, 24),
158aec89f78SBastian Köcher 	{ }
159aec89f78SBastian Köcher };
160aec89f78SBastian Köcher 
161aec89f78SBastian Köcher static struct clk_rcg2 usb30_master_clk_src = {
162aec89f78SBastian Köcher 	.cmd_rcgr = 0x03d4,
163aec89f78SBastian Köcher 	.mnd_width = 8,
164aec89f78SBastian Köcher 	.hid_width = 5,
165aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
166aec89f78SBastian Köcher 	.freq_tbl = ftbl_usb30_master_clk_src,
167aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
168aec89f78SBastian Köcher 	{
169aec89f78SBastian Köcher 		.name = "usb30_master_clk_src",
170aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
171aec89f78SBastian Köcher 		.num_parents = 2,
172aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
173aec89f78SBastian Köcher 	},
174aec89f78SBastian Köcher };
175aec89f78SBastian Köcher 
176aec89f78SBastian Köcher static struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
177aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
178aec89f78SBastian Köcher 	F(50000000, P_GPLL0, 12, 0, 0),
179aec89f78SBastian Köcher 	{ }
180aec89f78SBastian Köcher };
181aec89f78SBastian Köcher 
182aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
183aec89f78SBastian Köcher 	.cmd_rcgr = 0x0660,
184aec89f78SBastian Köcher 	.hid_width = 5,
185aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
186aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
187aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
188aec89f78SBastian Köcher 	{
189aec89f78SBastian Köcher 		.name = "blsp1_qup1_i2c_apps_clk_src",
190aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
191aec89f78SBastian Köcher 		.num_parents = 2,
192aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
193aec89f78SBastian Köcher 	},
194aec89f78SBastian Köcher };
195aec89f78SBastian Köcher 
196aec89f78SBastian Köcher static struct freq_tbl ftbl_blspqup_spi_apps_clk_src[] = {
197aec89f78SBastian Köcher 	F(960000, P_XO, 10, 1, 2),
198aec89f78SBastian Köcher 	F(4800000, P_XO, 4, 0, 0),
199aec89f78SBastian Köcher 	F(9600000, P_XO, 2, 0, 0),
200aec89f78SBastian Köcher 	F(15000000, P_GPLL0, 10, 1, 4),
201aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
202aec89f78SBastian Köcher 	F(24000000, P_GPLL0, 12.5, 1, 2),
203aec89f78SBastian Köcher 	F(25000000, P_GPLL0, 12, 1, 2),
204aec89f78SBastian Köcher 	F(48000000, P_GPLL0, 12.5, 0, 0),
205aec89f78SBastian Köcher 	F(50000000, P_GPLL0, 12, 0, 0),
206aec89f78SBastian Köcher 	{ }
207aec89f78SBastian Köcher };
208aec89f78SBastian Köcher 
209aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
210aec89f78SBastian Köcher 	.cmd_rcgr = 0x064c,
211aec89f78SBastian Köcher 	.mnd_width = 8,
212aec89f78SBastian Köcher 	.hid_width = 5,
213aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
214aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
215aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
216aec89f78SBastian Köcher 	{
217aec89f78SBastian Köcher 		.name = "blsp1_qup1_spi_apps_clk_src",
218aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
219aec89f78SBastian Köcher 		.num_parents = 2,
220aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
221aec89f78SBastian Köcher 	},
222aec89f78SBastian Köcher };
223aec89f78SBastian Köcher 
224aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
225aec89f78SBastian Köcher 	.cmd_rcgr = 0x06e0,
226aec89f78SBastian Köcher 	.hid_width = 5,
227aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
228aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
229aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
230aec89f78SBastian Köcher 	{
231aec89f78SBastian Köcher 		.name = "blsp1_qup2_i2c_apps_clk_src",
232aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
233aec89f78SBastian Köcher 		.num_parents = 2,
234aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
235aec89f78SBastian Köcher 	},
236aec89f78SBastian Köcher };
237aec89f78SBastian Köcher 
238aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
239aec89f78SBastian Köcher 	.cmd_rcgr = 0x06cc,
240aec89f78SBastian Köcher 	.mnd_width = 8,
241aec89f78SBastian Köcher 	.hid_width = 5,
242aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
243aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
244aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
245aec89f78SBastian Köcher 	{
246aec89f78SBastian Köcher 		.name = "blsp1_qup2_spi_apps_clk_src",
247aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
248aec89f78SBastian Köcher 		.num_parents = 2,
249aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
250aec89f78SBastian Köcher 	},
251aec89f78SBastian Köcher };
252aec89f78SBastian Köcher 
253aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
254aec89f78SBastian Köcher 	.cmd_rcgr = 0x0760,
255aec89f78SBastian Köcher 	.hid_width = 5,
256aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
257aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
258aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
259aec89f78SBastian Köcher 	{
260aec89f78SBastian Köcher 		.name = "blsp1_qup3_i2c_apps_clk_src",
261aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
262aec89f78SBastian Köcher 		.num_parents = 2,
263aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
264aec89f78SBastian Köcher 	},
265aec89f78SBastian Köcher };
266aec89f78SBastian Köcher 
267aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
268aec89f78SBastian Köcher 	.cmd_rcgr = 0x074c,
269aec89f78SBastian Köcher 	.mnd_width = 8,
270aec89f78SBastian Köcher 	.hid_width = 5,
271aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
272aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
273aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
274aec89f78SBastian Köcher 	{
275aec89f78SBastian Köcher 		.name = "blsp1_qup3_spi_apps_clk_src",
276aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
277aec89f78SBastian Köcher 		.num_parents = 2,
278aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
279aec89f78SBastian Köcher 	},
280aec89f78SBastian Köcher };
281aec89f78SBastian Köcher 
282aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
283aec89f78SBastian Köcher 	.cmd_rcgr = 0x07e0,
284aec89f78SBastian Köcher 	.hid_width = 5,
285aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
286aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
287aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
288aec89f78SBastian Köcher 	{
289aec89f78SBastian Köcher 		.name = "blsp1_qup4_i2c_apps_clk_src",
290aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
291aec89f78SBastian Köcher 		.num_parents = 2,
292aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
293aec89f78SBastian Köcher 	},
294aec89f78SBastian Köcher };
295aec89f78SBastian Köcher 
296aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
297aec89f78SBastian Köcher 	.cmd_rcgr = 0x07cc,
298aec89f78SBastian Köcher 	.mnd_width = 8,
299aec89f78SBastian Köcher 	.hid_width = 5,
300aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
301aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
302aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
303aec89f78SBastian Köcher 	{
304aec89f78SBastian Köcher 		.name = "blsp1_qup4_spi_apps_clk_src",
305aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
306aec89f78SBastian Köcher 		.num_parents = 2,
307aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
308aec89f78SBastian Köcher 	},
309aec89f78SBastian Köcher };
310aec89f78SBastian Köcher 
311aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
312aec89f78SBastian Köcher 	.cmd_rcgr = 0x0860,
313aec89f78SBastian Köcher 	.hid_width = 5,
314aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
315aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
316aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
317aec89f78SBastian Köcher 	{
318aec89f78SBastian Köcher 		.name = "blsp1_qup5_i2c_apps_clk_src",
319aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
320aec89f78SBastian Köcher 		.num_parents = 2,
321aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
322aec89f78SBastian Köcher 	},
323aec89f78SBastian Köcher };
324aec89f78SBastian Köcher 
325aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
326aec89f78SBastian Köcher 	.cmd_rcgr = 0x084c,
327aec89f78SBastian Köcher 	.mnd_width = 8,
328aec89f78SBastian Köcher 	.hid_width = 5,
329aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
330aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
331aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
332aec89f78SBastian Köcher 	{
333aec89f78SBastian Köcher 		.name = "blsp1_qup5_spi_apps_clk_src",
334aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
335aec89f78SBastian Köcher 		.num_parents = 2,
336aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
337aec89f78SBastian Köcher 	},
338aec89f78SBastian Köcher };
339aec89f78SBastian Köcher 
340aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
341aec89f78SBastian Köcher 	.cmd_rcgr = 0x08e0,
342aec89f78SBastian Köcher 	.hid_width = 5,
343aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
344aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
345aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
346aec89f78SBastian Köcher 	{
347aec89f78SBastian Köcher 		.name = "blsp1_qup6_i2c_apps_clk_src",
348aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
349aec89f78SBastian Köcher 		.num_parents = 2,
350aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
351aec89f78SBastian Köcher 	},
352aec89f78SBastian Köcher };
353aec89f78SBastian Köcher 
354aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
355aec89f78SBastian Köcher 	.cmd_rcgr = 0x08cc,
356aec89f78SBastian Köcher 	.mnd_width = 8,
357aec89f78SBastian Köcher 	.hid_width = 5,
358aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
359aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
360aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
361aec89f78SBastian Köcher 	{
362aec89f78SBastian Köcher 		.name = "blsp1_qup6_spi_apps_clk_src",
363aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
364aec89f78SBastian Köcher 		.num_parents = 2,
365aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
366aec89f78SBastian Köcher 	},
367aec89f78SBastian Köcher };
368aec89f78SBastian Köcher 
369aec89f78SBastian Köcher static struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
370aec89f78SBastian Köcher 	F(3686400, P_GPLL0, 1, 96, 15625),
371aec89f78SBastian Köcher 	F(7372800, P_GPLL0, 1, 192, 15625),
372aec89f78SBastian Köcher 	F(14745600, P_GPLL0, 1, 384, 15625),
373aec89f78SBastian Köcher 	F(16000000, P_GPLL0, 5, 2, 15),
374aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
375aec89f78SBastian Köcher 	F(24000000, P_GPLL0, 5, 1, 5),
376aec89f78SBastian Köcher 	F(32000000, P_GPLL0, 1, 4, 75),
377aec89f78SBastian Köcher 	F(40000000, P_GPLL0, 15, 0, 0),
378aec89f78SBastian Köcher 	F(46400000, P_GPLL0, 1, 29, 375),
379aec89f78SBastian Köcher 	F(48000000, P_GPLL0, 12.5, 0, 0),
380aec89f78SBastian Köcher 	F(51200000, P_GPLL0, 1, 32, 375),
381aec89f78SBastian Köcher 	F(56000000, P_GPLL0, 1, 7, 75),
382aec89f78SBastian Köcher 	F(58982400, P_GPLL0, 1, 1536, 15625),
383aec89f78SBastian Köcher 	F(60000000, P_GPLL0, 10, 0, 0),
384aec89f78SBastian Köcher 	F(63160000, P_GPLL0, 9.5, 0, 0),
385aec89f78SBastian Köcher 	{ }
386aec89f78SBastian Köcher };
387aec89f78SBastian Köcher 
388aec89f78SBastian Köcher static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
389aec89f78SBastian Köcher 	.cmd_rcgr = 0x068c,
390aec89f78SBastian Köcher 	.mnd_width = 16,
391aec89f78SBastian Köcher 	.hid_width = 5,
392aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
393aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
394aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
395aec89f78SBastian Köcher 	{
396aec89f78SBastian Köcher 		.name = "blsp1_uart1_apps_clk_src",
397aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
398aec89f78SBastian Köcher 		.num_parents = 2,
399aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
400aec89f78SBastian Köcher 	},
401aec89f78SBastian Köcher };
402aec89f78SBastian Köcher 
403aec89f78SBastian Köcher static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
404aec89f78SBastian Köcher 	.cmd_rcgr = 0x070c,
405aec89f78SBastian Köcher 	.mnd_width = 16,
406aec89f78SBastian Köcher 	.hid_width = 5,
407aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
408aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
409aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
410aec89f78SBastian Köcher 	{
411aec89f78SBastian Köcher 		.name = "blsp1_uart2_apps_clk_src",
412aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
413aec89f78SBastian Köcher 		.num_parents = 2,
414aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
415aec89f78SBastian Köcher 	},
416aec89f78SBastian Köcher };
417aec89f78SBastian Köcher 
418aec89f78SBastian Köcher static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
419aec89f78SBastian Köcher 	.cmd_rcgr = 0x078c,
420aec89f78SBastian Köcher 	.mnd_width = 16,
421aec89f78SBastian Köcher 	.hid_width = 5,
422aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
423aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
424aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
425aec89f78SBastian Köcher 	{
426aec89f78SBastian Köcher 		.name = "blsp1_uart3_apps_clk_src",
427aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
428aec89f78SBastian Köcher 		.num_parents = 2,
429aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
430aec89f78SBastian Köcher 	},
431aec89f78SBastian Köcher };
432aec89f78SBastian Köcher 
433aec89f78SBastian Köcher static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
434aec89f78SBastian Köcher 	.cmd_rcgr = 0x080c,
435aec89f78SBastian Köcher 	.mnd_width = 16,
436aec89f78SBastian Köcher 	.hid_width = 5,
437aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
438aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
439aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
440aec89f78SBastian Köcher 	{
441aec89f78SBastian Köcher 		.name = "blsp1_uart4_apps_clk_src",
442aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
443aec89f78SBastian Köcher 		.num_parents = 2,
444aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
445aec89f78SBastian Köcher 	},
446aec89f78SBastian Köcher };
447aec89f78SBastian Köcher 
448aec89f78SBastian Köcher static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
449aec89f78SBastian Köcher 	.cmd_rcgr = 0x088c,
450aec89f78SBastian Köcher 	.mnd_width = 16,
451aec89f78SBastian Köcher 	.hid_width = 5,
452aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
453aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
454aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
455aec89f78SBastian Köcher 	{
456aec89f78SBastian Köcher 		.name = "blsp1_uart5_apps_clk_src",
457aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
458aec89f78SBastian Köcher 		.num_parents = 2,
459aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
460aec89f78SBastian Köcher 	},
461aec89f78SBastian Köcher };
462aec89f78SBastian Köcher 
463aec89f78SBastian Köcher static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
464aec89f78SBastian Köcher 	.cmd_rcgr = 0x090c,
465aec89f78SBastian Köcher 	.mnd_width = 16,
466aec89f78SBastian Köcher 	.hid_width = 5,
467aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
468aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
469aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
470aec89f78SBastian Köcher 	{
471aec89f78SBastian Köcher 		.name = "blsp1_uart6_apps_clk_src",
472aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
473aec89f78SBastian Köcher 		.num_parents = 2,
474aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
475aec89f78SBastian Köcher 	},
476aec89f78SBastian Köcher };
477aec89f78SBastian Köcher 
478aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
479aec89f78SBastian Köcher 	.cmd_rcgr = 0x09a0,
480aec89f78SBastian Köcher 	.hid_width = 5,
481aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
482aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
483aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
484aec89f78SBastian Köcher 	{
485aec89f78SBastian Köcher 		.name = "blsp2_qup1_i2c_apps_clk_src",
486aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
487aec89f78SBastian Köcher 		.num_parents = 2,
488aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
489aec89f78SBastian Köcher 	},
490aec89f78SBastian Köcher };
491aec89f78SBastian Köcher 
492aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
493aec89f78SBastian Köcher 	.cmd_rcgr = 0x098c,
494aec89f78SBastian Köcher 	.mnd_width = 8,
495aec89f78SBastian Köcher 	.hid_width = 5,
496aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
497aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
498aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
499aec89f78SBastian Köcher 	{
500aec89f78SBastian Köcher 		.name = "blsp2_qup1_spi_apps_clk_src",
501aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
502aec89f78SBastian Köcher 		.num_parents = 2,
503aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
504aec89f78SBastian Köcher 	},
505aec89f78SBastian Köcher };
506aec89f78SBastian Köcher 
507aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
508aec89f78SBastian Köcher 	.cmd_rcgr = 0x0a20,
509aec89f78SBastian Köcher 	.hid_width = 5,
510aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
511aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
512aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
513aec89f78SBastian Köcher 	{
514aec89f78SBastian Köcher 		.name = "blsp2_qup2_i2c_apps_clk_src",
515aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
516aec89f78SBastian Köcher 		.num_parents = 2,
517aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
518aec89f78SBastian Köcher 	},
519aec89f78SBastian Köcher };
520aec89f78SBastian Köcher 
521aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
522aec89f78SBastian Köcher 	.cmd_rcgr = 0x0a0c,
523aec89f78SBastian Köcher 	.mnd_width = 8,
524aec89f78SBastian Köcher 	.hid_width = 5,
525aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
526aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
527aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
528aec89f78SBastian Köcher 	{
529aec89f78SBastian Köcher 		.name = "blsp2_qup2_spi_apps_clk_src",
530aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
531aec89f78SBastian Köcher 		.num_parents = 2,
532aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
533aec89f78SBastian Köcher 	},
534aec89f78SBastian Köcher };
535aec89f78SBastian Köcher 
536aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
537aec89f78SBastian Köcher 	.cmd_rcgr = 0x0aa0,
538aec89f78SBastian Köcher 	.hid_width = 5,
539aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
540aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
541aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
542aec89f78SBastian Köcher 	{
543aec89f78SBastian Köcher 		.name = "blsp2_qup3_i2c_apps_clk_src",
544aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
545aec89f78SBastian Köcher 		.num_parents = 2,
546aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
547aec89f78SBastian Köcher 	},
548aec89f78SBastian Köcher };
549aec89f78SBastian Köcher 
550aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
551aec89f78SBastian Köcher 	.cmd_rcgr = 0x0a8c,
552aec89f78SBastian Köcher 	.mnd_width = 8,
553aec89f78SBastian Köcher 	.hid_width = 5,
554aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
555aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
556aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
557aec89f78SBastian Köcher 	{
558aec89f78SBastian Köcher 		.name = "blsp2_qup3_spi_apps_clk_src",
559aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
560aec89f78SBastian Köcher 		.num_parents = 2,
561aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
562aec89f78SBastian Köcher 	},
563aec89f78SBastian Köcher };
564aec89f78SBastian Köcher 
565aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
566aec89f78SBastian Köcher 	.cmd_rcgr = 0x0b20,
567aec89f78SBastian Köcher 	.hid_width = 5,
568aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
569aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
570aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
571aec89f78SBastian Köcher 	{
572aec89f78SBastian Köcher 		.name = "blsp2_qup4_i2c_apps_clk_src",
573aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
574aec89f78SBastian Köcher 		.num_parents = 2,
575aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
576aec89f78SBastian Köcher 	},
577aec89f78SBastian Köcher };
578aec89f78SBastian Köcher 
579aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
580aec89f78SBastian Köcher 	.cmd_rcgr = 0x0b0c,
581aec89f78SBastian Köcher 	.mnd_width = 8,
582aec89f78SBastian Köcher 	.hid_width = 5,
583aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
584aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
585aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
586aec89f78SBastian Köcher 	{
587aec89f78SBastian Köcher 		.name = "blsp2_qup4_spi_apps_clk_src",
588aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
589aec89f78SBastian Köcher 		.num_parents = 2,
590aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
591aec89f78SBastian Köcher 	},
592aec89f78SBastian Köcher };
593aec89f78SBastian Köcher 
594aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
595aec89f78SBastian Köcher 	.cmd_rcgr = 0x0ba0,
596aec89f78SBastian Köcher 	.hid_width = 5,
597aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
598aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
599aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
600aec89f78SBastian Köcher 	{
601aec89f78SBastian Köcher 		.name = "blsp2_qup5_i2c_apps_clk_src",
602aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
603aec89f78SBastian Köcher 		.num_parents = 2,
604aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
605aec89f78SBastian Köcher 	},
606aec89f78SBastian Köcher };
607aec89f78SBastian Köcher 
608aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
609aec89f78SBastian Köcher 	.cmd_rcgr = 0x0b8c,
610aec89f78SBastian Köcher 	.mnd_width = 8,
611aec89f78SBastian Köcher 	.hid_width = 5,
612aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
613aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
614aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
615aec89f78SBastian Köcher 	{
616aec89f78SBastian Köcher 		.name = "blsp2_qup5_spi_apps_clk_src",
617aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
618aec89f78SBastian Köcher 		.num_parents = 2,
619aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
620aec89f78SBastian Köcher 	},
621aec89f78SBastian Köcher };
622aec89f78SBastian Köcher 
623aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
624aec89f78SBastian Köcher 	.cmd_rcgr = 0x0c20,
625aec89f78SBastian Köcher 	.hid_width = 5,
626aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
627aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
628aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
629aec89f78SBastian Köcher 	{
630aec89f78SBastian Köcher 		.name = "blsp2_qup6_i2c_apps_clk_src",
631aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
632aec89f78SBastian Köcher 		.num_parents = 2,
633aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
634aec89f78SBastian Köcher 	},
635aec89f78SBastian Köcher };
636aec89f78SBastian Köcher 
637aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
638aec89f78SBastian Köcher 	.cmd_rcgr = 0x0c0c,
639aec89f78SBastian Köcher 	.mnd_width = 8,
640aec89f78SBastian Köcher 	.hid_width = 5,
641aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
642aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
643aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
644aec89f78SBastian Köcher 	{
645aec89f78SBastian Köcher 		.name = "blsp2_qup6_spi_apps_clk_src",
646aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
647aec89f78SBastian Köcher 		.num_parents = 2,
648aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
649aec89f78SBastian Köcher 	},
650aec89f78SBastian Köcher };
651aec89f78SBastian Köcher 
652aec89f78SBastian Köcher static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
653aec89f78SBastian Köcher 	.cmd_rcgr = 0x09cc,
654aec89f78SBastian Köcher 	.mnd_width = 16,
655aec89f78SBastian Köcher 	.hid_width = 5,
656aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
657aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
658aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
659aec89f78SBastian Köcher 	{
660aec89f78SBastian Köcher 		.name = "blsp2_uart1_apps_clk_src",
661aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
662aec89f78SBastian Köcher 		.num_parents = 2,
663aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
664aec89f78SBastian Köcher 	},
665aec89f78SBastian Köcher };
666aec89f78SBastian Köcher 
667aec89f78SBastian Köcher static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
668aec89f78SBastian Köcher 	.cmd_rcgr = 0x0a4c,
669aec89f78SBastian Köcher 	.mnd_width = 16,
670aec89f78SBastian Köcher 	.hid_width = 5,
671aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
672aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
673aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
674aec89f78SBastian Köcher 	{
675aec89f78SBastian Köcher 		.name = "blsp2_uart2_apps_clk_src",
676aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
677aec89f78SBastian Köcher 		.num_parents = 2,
678aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
679aec89f78SBastian Köcher 	},
680aec89f78SBastian Köcher };
681aec89f78SBastian Köcher 
682aec89f78SBastian Köcher static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
683aec89f78SBastian Köcher 	.cmd_rcgr = 0x0acc,
684aec89f78SBastian Köcher 	.mnd_width = 16,
685aec89f78SBastian Köcher 	.hid_width = 5,
686aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
687aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
688aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
689aec89f78SBastian Köcher 	{
690aec89f78SBastian Köcher 		.name = "blsp2_uart3_apps_clk_src",
691aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
692aec89f78SBastian Köcher 		.num_parents = 2,
693aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
694aec89f78SBastian Köcher 	},
695aec89f78SBastian Köcher };
696aec89f78SBastian Köcher 
697aec89f78SBastian Köcher static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
698aec89f78SBastian Köcher 	.cmd_rcgr = 0x0b4c,
699aec89f78SBastian Köcher 	.mnd_width = 16,
700aec89f78SBastian Köcher 	.hid_width = 5,
701aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
702aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
703aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
704aec89f78SBastian Köcher 	{
705aec89f78SBastian Köcher 		.name = "blsp2_uart4_apps_clk_src",
706aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
707aec89f78SBastian Köcher 		.num_parents = 2,
708aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
709aec89f78SBastian Köcher 	},
710aec89f78SBastian Köcher };
711aec89f78SBastian Köcher 
712aec89f78SBastian Köcher static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
713aec89f78SBastian Köcher 	.cmd_rcgr = 0x0bcc,
714aec89f78SBastian Köcher 	.mnd_width = 16,
715aec89f78SBastian Köcher 	.hid_width = 5,
716aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
717aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
718aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
719aec89f78SBastian Köcher 	{
720aec89f78SBastian Köcher 		.name = "blsp2_uart5_apps_clk_src",
721aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
722aec89f78SBastian Köcher 		.num_parents = 2,
723aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
724aec89f78SBastian Köcher 	},
725aec89f78SBastian Köcher };
726aec89f78SBastian Köcher 
727aec89f78SBastian Köcher static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
728aec89f78SBastian Köcher 	.cmd_rcgr = 0x0c4c,
729aec89f78SBastian Köcher 	.mnd_width = 16,
730aec89f78SBastian Köcher 	.hid_width = 5,
731aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
732aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
733aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
734aec89f78SBastian Köcher 	{
735aec89f78SBastian Köcher 		.name = "blsp2_uart6_apps_clk_src",
736aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
737aec89f78SBastian Köcher 		.num_parents = 2,
738aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
739aec89f78SBastian Köcher 	},
740aec89f78SBastian Köcher };
741aec89f78SBastian Köcher 
742aec89f78SBastian Köcher static struct freq_tbl ftbl_gp1_clk_src[] = {
743aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
744aec89f78SBastian Köcher 	F(100000000, P_GPLL0, 6, 0, 0),
745aec89f78SBastian Köcher 	F(200000000, P_GPLL0, 3, 0, 0),
746aec89f78SBastian Köcher 	{ }
747aec89f78SBastian Köcher };
748aec89f78SBastian Köcher 
749aec89f78SBastian Köcher static struct clk_rcg2 gp1_clk_src = {
750aec89f78SBastian Köcher 	.cmd_rcgr = 0x1904,
751aec89f78SBastian Köcher 	.mnd_width = 8,
752aec89f78SBastian Köcher 	.hid_width = 5,
753aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
754aec89f78SBastian Köcher 	.freq_tbl = ftbl_gp1_clk_src,
755aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
756aec89f78SBastian Köcher 	{
757aec89f78SBastian Köcher 		.name = "gp1_clk_src",
758aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
759aec89f78SBastian Köcher 		.num_parents = 2,
760aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
761aec89f78SBastian Köcher 	},
762aec89f78SBastian Köcher };
763aec89f78SBastian Köcher 
764aec89f78SBastian Köcher static struct freq_tbl ftbl_gp2_clk_src[] = {
765aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
766aec89f78SBastian Köcher 	F(100000000, P_GPLL0, 6, 0, 0),
767aec89f78SBastian Köcher 	F(200000000, P_GPLL0, 3, 0, 0),
768aec89f78SBastian Köcher 	{ }
769aec89f78SBastian Köcher };
770aec89f78SBastian Köcher 
771aec89f78SBastian Köcher static struct clk_rcg2 gp2_clk_src = {
772aec89f78SBastian Köcher 	.cmd_rcgr = 0x1944,
773aec89f78SBastian Köcher 	.mnd_width = 8,
774aec89f78SBastian Köcher 	.hid_width = 5,
775aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
776aec89f78SBastian Köcher 	.freq_tbl = ftbl_gp2_clk_src,
777aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
778aec89f78SBastian Köcher 	{
779aec89f78SBastian Köcher 		.name = "gp2_clk_src",
780aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
781aec89f78SBastian Köcher 		.num_parents = 2,
782aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
783aec89f78SBastian Köcher 	},
784aec89f78SBastian Köcher };
785aec89f78SBastian Köcher 
786aec89f78SBastian Köcher static struct freq_tbl ftbl_gp3_clk_src[] = {
787aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
788aec89f78SBastian Köcher 	F(100000000, P_GPLL0, 6, 0, 0),
789aec89f78SBastian Köcher 	F(200000000, P_GPLL0, 3, 0, 0),
790aec89f78SBastian Köcher 	{ }
791aec89f78SBastian Köcher };
792aec89f78SBastian Köcher 
793aec89f78SBastian Köcher static struct clk_rcg2 gp3_clk_src = {
794aec89f78SBastian Köcher 	.cmd_rcgr = 0x1984,
795aec89f78SBastian Köcher 	.mnd_width = 8,
796aec89f78SBastian Köcher 	.hid_width = 5,
797aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
798aec89f78SBastian Köcher 	.freq_tbl = ftbl_gp3_clk_src,
799aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
800aec89f78SBastian Köcher 	{
801aec89f78SBastian Köcher 		.name = "gp3_clk_src",
802aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
803aec89f78SBastian Köcher 		.num_parents = 2,
804aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
805aec89f78SBastian Köcher 	},
806aec89f78SBastian Köcher };
807aec89f78SBastian Köcher 
808aec89f78SBastian Köcher static struct freq_tbl ftbl_pcie_0_aux_clk_src[] = {
809aec89f78SBastian Köcher 	F(1011000, P_XO, 1, 1, 19),
810aec89f78SBastian Köcher 	{ }
811aec89f78SBastian Köcher };
812aec89f78SBastian Köcher 
813aec89f78SBastian Köcher static struct clk_rcg2 pcie_0_aux_clk_src = {
814aec89f78SBastian Köcher 	.cmd_rcgr = 0x1b00,
815aec89f78SBastian Köcher 	.mnd_width = 8,
816aec89f78SBastian Köcher 	.hid_width = 5,
817aec89f78SBastian Köcher 	.freq_tbl = ftbl_pcie_0_aux_clk_src,
818aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
819aec89f78SBastian Köcher 	{
820aec89f78SBastian Köcher 		.name = "pcie_0_aux_clk_src",
821aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "xo" },
822aec89f78SBastian Köcher 		.num_parents = 1,
823aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
824aec89f78SBastian Köcher 	},
825aec89f78SBastian Köcher };
826aec89f78SBastian Köcher 
827aec89f78SBastian Köcher static struct freq_tbl ftbl_pcie_pipe_clk_src[] = {
828aec89f78SBastian Köcher 	F(125000000, P_XO, 1, 0, 0),
829aec89f78SBastian Köcher 	{ }
830aec89f78SBastian Köcher };
831aec89f78SBastian Köcher 
832aec89f78SBastian Köcher static struct clk_rcg2 pcie_0_pipe_clk_src = {
833aec89f78SBastian Köcher 	.cmd_rcgr = 0x1adc,
834aec89f78SBastian Köcher 	.hid_width = 5,
835aec89f78SBastian Köcher 	.freq_tbl = ftbl_pcie_pipe_clk_src,
836aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
837aec89f78SBastian Köcher 	{
838aec89f78SBastian Köcher 		.name = "pcie_0_pipe_clk_src",
839aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "xo" },
840aec89f78SBastian Köcher 		.num_parents = 1,
841aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
842aec89f78SBastian Köcher 	},
843aec89f78SBastian Köcher };
844aec89f78SBastian Köcher 
845aec89f78SBastian Köcher static struct freq_tbl ftbl_pcie_1_aux_clk_src[] = {
846aec89f78SBastian Köcher 	F(1011000, P_XO, 1, 1, 19),
847aec89f78SBastian Köcher 	{ }
848aec89f78SBastian Köcher };
849aec89f78SBastian Köcher 
850aec89f78SBastian Köcher static struct clk_rcg2 pcie_1_aux_clk_src = {
851aec89f78SBastian Köcher 	.cmd_rcgr = 0x1b80,
852aec89f78SBastian Köcher 	.mnd_width = 8,
853aec89f78SBastian Köcher 	.hid_width = 5,
854aec89f78SBastian Köcher 	.freq_tbl = ftbl_pcie_1_aux_clk_src,
855aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
856aec89f78SBastian Köcher 	{
857aec89f78SBastian Köcher 		.name = "pcie_1_aux_clk_src",
858aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "xo" },
859aec89f78SBastian Köcher 		.num_parents = 1,
860aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
861aec89f78SBastian Köcher 	},
862aec89f78SBastian Köcher };
863aec89f78SBastian Köcher 
864aec89f78SBastian Köcher static struct clk_rcg2 pcie_1_pipe_clk_src = {
865aec89f78SBastian Köcher 	.cmd_rcgr = 0x1b5c,
866aec89f78SBastian Köcher 	.hid_width = 5,
867aec89f78SBastian Köcher 	.freq_tbl = ftbl_pcie_pipe_clk_src,
868aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
869aec89f78SBastian Köcher 	{
870aec89f78SBastian Köcher 		.name = "pcie_1_pipe_clk_src",
871aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "xo" },
872aec89f78SBastian Köcher 		.num_parents = 1,
873aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
874aec89f78SBastian Köcher 	},
875aec89f78SBastian Köcher };
876aec89f78SBastian Köcher 
877aec89f78SBastian Köcher static struct freq_tbl ftbl_pdm2_clk_src[] = {
878aec89f78SBastian Köcher 	F(60000000, P_GPLL0, 10, 0, 0),
879aec89f78SBastian Köcher 	{ }
880aec89f78SBastian Köcher };
881aec89f78SBastian Köcher 
882aec89f78SBastian Köcher static struct clk_rcg2 pdm2_clk_src = {
883aec89f78SBastian Köcher 	.cmd_rcgr = 0x0cd0,
884aec89f78SBastian Köcher 	.hid_width = 5,
885aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
886aec89f78SBastian Köcher 	.freq_tbl = ftbl_pdm2_clk_src,
887aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
888aec89f78SBastian Köcher 	{
889aec89f78SBastian Köcher 		.name = "pdm2_clk_src",
890aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
891aec89f78SBastian Köcher 		.num_parents = 2,
892aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
893aec89f78SBastian Köcher 	},
894aec89f78SBastian Köcher };
895aec89f78SBastian Köcher 
896aec89f78SBastian Köcher static struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
897aec89f78SBastian Köcher 	F(144000, P_XO, 16, 3, 25),
898aec89f78SBastian Köcher 	F(400000, P_XO, 12, 1, 4),
899aec89f78SBastian Köcher 	F(20000000, P_GPLL0, 15, 1, 2),
900aec89f78SBastian Köcher 	F(25000000, P_GPLL0, 12, 1, 2),
901aec89f78SBastian Köcher 	F(50000000, P_GPLL0, 12, 0, 0),
902aec89f78SBastian Köcher 	F(100000000, P_GPLL0, 6, 0, 0),
903aec89f78SBastian Köcher 	F(192000000, P_GPLL4, 2, 0, 0),
904aec89f78SBastian Köcher 	F(384000000, P_GPLL4, 1, 0, 0),
905aec89f78SBastian Köcher 	{ }
906aec89f78SBastian Köcher };
907aec89f78SBastian Köcher 
908aec89f78SBastian Köcher static struct clk_rcg2 sdcc1_apps_clk_src = {
909aec89f78SBastian Köcher 	.cmd_rcgr = 0x04d0,
910aec89f78SBastian Köcher 	.mnd_width = 8,
911aec89f78SBastian Köcher 	.hid_width = 5,
912aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_gpll4_map,
913aec89f78SBastian Köcher 	.freq_tbl = ftbl_sdcc1_apps_clk_src,
914aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
915aec89f78SBastian Köcher 	{
916aec89f78SBastian Köcher 		.name = "sdcc1_apps_clk_src",
917aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0_gpll4,
918aec89f78SBastian Köcher 		.num_parents = 3,
9195f5001a9SRajendra Nayak 		.ops = &clk_rcg2_floor_ops,
920aec89f78SBastian Köcher 	},
921aec89f78SBastian Köcher };
922aec89f78SBastian Köcher 
923aec89f78SBastian Köcher static struct freq_tbl ftbl_sdcc2_4_apps_clk_src[] = {
924aec89f78SBastian Köcher 	F(144000, P_XO, 16, 3, 25),
925aec89f78SBastian Köcher 	F(400000, P_XO, 12, 1, 4),
926aec89f78SBastian Köcher 	F(20000000, P_GPLL0, 15, 1, 2),
927aec89f78SBastian Köcher 	F(25000000, P_GPLL0, 12, 1, 2),
928aec89f78SBastian Köcher 	F(50000000, P_GPLL0, 12, 0, 0),
929aec89f78SBastian Köcher 	F(100000000, P_GPLL0, 6, 0, 0),
930aec89f78SBastian Köcher 	F(200000000, P_GPLL0, 3, 0, 0),
931aec89f78SBastian Köcher 	{ }
932aec89f78SBastian Köcher };
933aec89f78SBastian Köcher 
934aec89f78SBastian Köcher static struct clk_rcg2 sdcc2_apps_clk_src = {
935aec89f78SBastian Köcher 	.cmd_rcgr = 0x0510,
936aec89f78SBastian Köcher 	.mnd_width = 8,
937aec89f78SBastian Köcher 	.hid_width = 5,
938aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
939aec89f78SBastian Köcher 	.freq_tbl = ftbl_sdcc2_4_apps_clk_src,
940aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
941aec89f78SBastian Köcher 	{
942aec89f78SBastian Köcher 		.name = "sdcc2_apps_clk_src",
943aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
944aec89f78SBastian Köcher 		.num_parents = 2,
9455f5001a9SRajendra Nayak 		.ops = &clk_rcg2_floor_ops,
946aec89f78SBastian Köcher 	},
947aec89f78SBastian Köcher };
948aec89f78SBastian Köcher 
949aec89f78SBastian Köcher static struct clk_rcg2 sdcc3_apps_clk_src = {
950aec89f78SBastian Köcher 	.cmd_rcgr = 0x0550,
951aec89f78SBastian Köcher 	.mnd_width = 8,
952aec89f78SBastian Köcher 	.hid_width = 5,
953aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
954aec89f78SBastian Köcher 	.freq_tbl = ftbl_sdcc2_4_apps_clk_src,
955aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
956aec89f78SBastian Köcher 	{
957aec89f78SBastian Köcher 		.name = "sdcc3_apps_clk_src",
958aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
959aec89f78SBastian Köcher 		.num_parents = 2,
9605f5001a9SRajendra Nayak 		.ops = &clk_rcg2_floor_ops,
961aec89f78SBastian Köcher 	},
962aec89f78SBastian Köcher };
963aec89f78SBastian Köcher 
964aec89f78SBastian Köcher static struct clk_rcg2 sdcc4_apps_clk_src = {
965aec89f78SBastian Köcher 	.cmd_rcgr = 0x0590,
966aec89f78SBastian Köcher 	.mnd_width = 8,
967aec89f78SBastian Köcher 	.hid_width = 5,
968aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
969aec89f78SBastian Köcher 	.freq_tbl = ftbl_sdcc2_4_apps_clk_src,
970aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
971aec89f78SBastian Köcher 	{
972aec89f78SBastian Köcher 		.name = "sdcc4_apps_clk_src",
973aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
974aec89f78SBastian Köcher 		.num_parents = 2,
9755f5001a9SRajendra Nayak 		.ops = &clk_rcg2_floor_ops,
976aec89f78SBastian Köcher 	},
977aec89f78SBastian Köcher };
978aec89f78SBastian Köcher 
979aec89f78SBastian Köcher static struct freq_tbl ftbl_tsif_ref_clk_src[] = {
980aec89f78SBastian Köcher 	F(105500, P_XO, 1, 1, 182),
981aec89f78SBastian Köcher 	{ }
982aec89f78SBastian Köcher };
983aec89f78SBastian Köcher 
984aec89f78SBastian Köcher static struct clk_rcg2 tsif_ref_clk_src = {
985aec89f78SBastian Köcher 	.cmd_rcgr = 0x0d90,
986aec89f78SBastian Köcher 	.mnd_width = 8,
987aec89f78SBastian Köcher 	.hid_width = 5,
988aec89f78SBastian Köcher 	.freq_tbl = ftbl_tsif_ref_clk_src,
989aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
990aec89f78SBastian Köcher 	{
991aec89f78SBastian Köcher 		.name = "tsif_ref_clk_src",
992aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "xo" },
993aec89f78SBastian Köcher 		.num_parents = 1,
994aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
995aec89f78SBastian Köcher 	},
996aec89f78SBastian Köcher };
997aec89f78SBastian Köcher 
998aec89f78SBastian Köcher static struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
999aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
1000aec89f78SBastian Köcher 	F(60000000, P_GPLL0, 10, 0, 0),
1001aec89f78SBastian Köcher 	{ }
1002aec89f78SBastian Köcher };
1003aec89f78SBastian Köcher 
1004aec89f78SBastian Köcher static struct clk_rcg2 usb30_mock_utmi_clk_src = {
1005aec89f78SBastian Köcher 	.cmd_rcgr = 0x03e8,
1006aec89f78SBastian Köcher 	.hid_width = 5,
1007aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
1008aec89f78SBastian Köcher 	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,
1009aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
1010aec89f78SBastian Köcher 	{
1011aec89f78SBastian Köcher 		.name = "usb30_mock_utmi_clk_src",
1012aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
1013aec89f78SBastian Köcher 		.num_parents = 2,
1014aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
1015aec89f78SBastian Köcher 	},
1016aec89f78SBastian Köcher };
1017aec89f78SBastian Köcher 
1018aec89f78SBastian Köcher static struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
1019aec89f78SBastian Köcher 	F(1200000, P_XO, 16, 0, 0),
1020aec89f78SBastian Köcher 	{ }
1021aec89f78SBastian Köcher };
1022aec89f78SBastian Köcher 
1023aec89f78SBastian Köcher static struct clk_rcg2 usb3_phy_aux_clk_src = {
1024aec89f78SBastian Köcher 	.cmd_rcgr = 0x1414,
1025aec89f78SBastian Köcher 	.hid_width = 5,
1026aec89f78SBastian Köcher 	.freq_tbl = ftbl_usb3_phy_aux_clk_src,
1027aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
1028aec89f78SBastian Köcher 	{
1029aec89f78SBastian Köcher 		.name = "usb3_phy_aux_clk_src",
1030aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "xo" },
1031aec89f78SBastian Köcher 		.num_parents = 1,
1032aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
1033aec89f78SBastian Köcher 	},
1034aec89f78SBastian Köcher };
1035aec89f78SBastian Köcher 
1036aec89f78SBastian Köcher static struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
1037aec89f78SBastian Köcher 	F(75000000, P_GPLL0, 8, 0, 0),
1038aec89f78SBastian Köcher 	{ }
1039aec89f78SBastian Köcher };
1040aec89f78SBastian Köcher 
1041aec89f78SBastian Köcher static struct clk_rcg2 usb_hs_system_clk_src = {
1042aec89f78SBastian Köcher 	.cmd_rcgr = 0x0490,
1043aec89f78SBastian Köcher 	.hid_width = 5,
1044aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
1045aec89f78SBastian Köcher 	.freq_tbl = ftbl_usb_hs_system_clk_src,
1046aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
1047aec89f78SBastian Köcher 	{
1048aec89f78SBastian Köcher 		.name = "usb_hs_system_clk_src",
1049aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
1050aec89f78SBastian Köcher 		.num_parents = 2,
1051aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
1052aec89f78SBastian Köcher 	},
1053aec89f78SBastian Köcher };
1054aec89f78SBastian Köcher 
1055aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_ahb_clk = {
1056aec89f78SBastian Köcher 	.halt_reg = 0x05c4,
1057aec89f78SBastian Köcher 	.halt_check = BRANCH_HALT_VOTED,
1058aec89f78SBastian Köcher 	.clkr = {
1059aec89f78SBastian Köcher 		.enable_reg = 0x1484,
1060aec89f78SBastian Köcher 		.enable_mask = BIT(17),
1061aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1062aec89f78SBastian Köcher 		{
1063aec89f78SBastian Köcher 			.name = "gcc_blsp1_ahb_clk",
1064aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1065aec89f78SBastian Köcher 		},
1066aec89f78SBastian Köcher 	},
1067aec89f78SBastian Köcher };
1068aec89f78SBastian Köcher 
1069aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1070aec89f78SBastian Köcher 	.halt_reg = 0x0648,
1071aec89f78SBastian Köcher 	.clkr = {
1072aec89f78SBastian Köcher 		.enable_reg = 0x0648,
1073aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1074aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1075aec89f78SBastian Köcher 		{
1076aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1077aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1078aec89f78SBastian Köcher 				"blsp1_qup1_i2c_apps_clk_src",
1079aec89f78SBastian Köcher 			},
1080aec89f78SBastian Köcher 			.num_parents = 1,
1081aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1082aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1083aec89f78SBastian Köcher 		},
1084aec89f78SBastian Köcher 	},
1085aec89f78SBastian Köcher };
1086aec89f78SBastian Köcher 
1087aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1088aec89f78SBastian Köcher 	.halt_reg = 0x0644,
1089aec89f78SBastian Köcher 	.clkr = {
1090aec89f78SBastian Köcher 		.enable_reg = 0x0644,
1091aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1092aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1093aec89f78SBastian Köcher 		{
1094aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup1_spi_apps_clk",
1095aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1096aec89f78SBastian Köcher 				"blsp1_qup1_spi_apps_clk_src",
1097aec89f78SBastian Köcher 			},
1098aec89f78SBastian Köcher 			.num_parents = 1,
1099aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1100aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1101aec89f78SBastian Köcher 		},
1102aec89f78SBastian Köcher 	},
1103aec89f78SBastian Köcher };
1104aec89f78SBastian Köcher 
1105aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1106aec89f78SBastian Köcher 	.halt_reg = 0x06c8,
1107aec89f78SBastian Köcher 	.clkr = {
1108aec89f78SBastian Köcher 		.enable_reg = 0x06c8,
1109aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1110aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1111aec89f78SBastian Köcher 		{
1112aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1113aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1114aec89f78SBastian Köcher 				"blsp1_qup2_i2c_apps_clk_src",
1115aec89f78SBastian Köcher 			},
1116aec89f78SBastian Köcher 			.num_parents = 1,
1117aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1118aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1119aec89f78SBastian Köcher 		},
1120aec89f78SBastian Köcher 	},
1121aec89f78SBastian Köcher };
1122aec89f78SBastian Köcher 
1123aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1124aec89f78SBastian Köcher 	.halt_reg = 0x06c4,
1125aec89f78SBastian Köcher 	.clkr = {
1126aec89f78SBastian Köcher 		.enable_reg = 0x06c4,
1127aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1128aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1129aec89f78SBastian Köcher 		{
1130aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup2_spi_apps_clk",
1131aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1132aec89f78SBastian Köcher 				"blsp1_qup2_spi_apps_clk_src",
1133aec89f78SBastian Köcher 			},
1134aec89f78SBastian Köcher 			.num_parents = 1,
1135aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1136aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1137aec89f78SBastian Köcher 		},
1138aec89f78SBastian Köcher 	},
1139aec89f78SBastian Köcher };
1140aec89f78SBastian Köcher 
1141aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1142aec89f78SBastian Köcher 	.halt_reg = 0x0748,
1143aec89f78SBastian Köcher 	.clkr = {
1144aec89f78SBastian Köcher 		.enable_reg = 0x0748,
1145aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1146aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1147aec89f78SBastian Köcher 		{
1148aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1149aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1150aec89f78SBastian Köcher 				"blsp1_qup3_i2c_apps_clk_src",
1151aec89f78SBastian Köcher 			},
1152aec89f78SBastian Köcher 			.num_parents = 1,
1153aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1154aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1155aec89f78SBastian Köcher 		},
1156aec89f78SBastian Köcher 	},
1157aec89f78SBastian Köcher };
1158aec89f78SBastian Köcher 
1159aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1160aec89f78SBastian Köcher 	.halt_reg = 0x0744,
1161aec89f78SBastian Köcher 	.clkr = {
1162aec89f78SBastian Köcher 		.enable_reg = 0x0744,
1163aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1164aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1165aec89f78SBastian Köcher 		{
1166aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup3_spi_apps_clk",
1167aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1168aec89f78SBastian Köcher 				"blsp1_qup3_spi_apps_clk_src",
1169aec89f78SBastian Köcher 			},
1170aec89f78SBastian Köcher 			.num_parents = 1,
1171aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1172aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1173aec89f78SBastian Köcher 		},
1174aec89f78SBastian Köcher 	},
1175aec89f78SBastian Köcher };
1176aec89f78SBastian Köcher 
1177aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1178aec89f78SBastian Köcher 	.halt_reg = 0x07c8,
1179aec89f78SBastian Köcher 	.clkr = {
1180aec89f78SBastian Köcher 		.enable_reg = 0x07c8,
1181aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1182aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1183aec89f78SBastian Köcher 		{
1184aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup4_i2c_apps_clk",
1185aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1186aec89f78SBastian Köcher 				"blsp1_qup4_i2c_apps_clk_src",
1187aec89f78SBastian Köcher 			},
1188aec89f78SBastian Köcher 			.num_parents = 1,
1189aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1190aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1191aec89f78SBastian Köcher 		},
1192aec89f78SBastian Köcher 	},
1193aec89f78SBastian Köcher };
1194aec89f78SBastian Köcher 
1195aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1196aec89f78SBastian Köcher 	.halt_reg = 0x07c4,
1197aec89f78SBastian Köcher 	.clkr = {
1198aec89f78SBastian Köcher 		.enable_reg = 0x07c4,
1199aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1200aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1201aec89f78SBastian Köcher 		{
1202aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup4_spi_apps_clk",
1203aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1204aec89f78SBastian Köcher 				"blsp1_qup4_spi_apps_clk_src",
1205aec89f78SBastian Köcher 			},
1206aec89f78SBastian Köcher 			.num_parents = 1,
1207aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1208aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1209aec89f78SBastian Köcher 		},
1210aec89f78SBastian Köcher 	},
1211aec89f78SBastian Köcher };
1212aec89f78SBastian Köcher 
1213aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1214aec89f78SBastian Köcher 	.halt_reg = 0x0848,
1215aec89f78SBastian Köcher 	.clkr = {
1216aec89f78SBastian Köcher 		.enable_reg = 0x0848,
1217aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1218aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1219aec89f78SBastian Köcher 		{
1220aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup5_i2c_apps_clk",
1221aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1222aec89f78SBastian Köcher 				"blsp1_qup5_i2c_apps_clk_src",
1223aec89f78SBastian Köcher 			},
1224aec89f78SBastian Köcher 			.num_parents = 1,
1225aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1226aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1227aec89f78SBastian Köcher 		},
1228aec89f78SBastian Köcher 	},
1229aec89f78SBastian Köcher };
1230aec89f78SBastian Köcher 
1231aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1232aec89f78SBastian Köcher 	.halt_reg = 0x0844,
1233aec89f78SBastian Köcher 	.clkr = {
1234aec89f78SBastian Köcher 		.enable_reg = 0x0844,
1235aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1236aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1237aec89f78SBastian Köcher 		{
1238aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup5_spi_apps_clk",
1239aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1240aec89f78SBastian Köcher 				"blsp1_qup5_spi_apps_clk_src",
1241aec89f78SBastian Köcher 			},
1242aec89f78SBastian Köcher 			.num_parents = 1,
1243aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1244aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1245aec89f78SBastian Köcher 		},
1246aec89f78SBastian Köcher 	},
1247aec89f78SBastian Köcher };
1248aec89f78SBastian Köcher 
1249aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1250aec89f78SBastian Köcher 	.halt_reg = 0x08c8,
1251aec89f78SBastian Köcher 	.clkr = {
1252aec89f78SBastian Köcher 		.enable_reg = 0x08c8,
1253aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1254aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1255aec89f78SBastian Köcher 		{
1256aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup6_i2c_apps_clk",
1257aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1258aec89f78SBastian Köcher 				"blsp1_qup6_i2c_apps_clk_src",
1259aec89f78SBastian Köcher 			},
1260aec89f78SBastian Köcher 			.num_parents = 1,
1261aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1262aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1263aec89f78SBastian Köcher 		},
1264aec89f78SBastian Köcher 	},
1265aec89f78SBastian Köcher };
1266aec89f78SBastian Köcher 
1267aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1268aec89f78SBastian Köcher 	.halt_reg = 0x08c4,
1269aec89f78SBastian Köcher 	.clkr = {
1270aec89f78SBastian Köcher 		.enable_reg = 0x08c4,
1271aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1272aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1273aec89f78SBastian Köcher 		{
1274aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup6_spi_apps_clk",
1275aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1276aec89f78SBastian Köcher 				"blsp1_qup6_spi_apps_clk_src",
1277aec89f78SBastian Köcher 			},
1278aec89f78SBastian Köcher 			.num_parents = 1,
1279aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1280aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1281aec89f78SBastian Köcher 		},
1282aec89f78SBastian Köcher 	},
1283aec89f78SBastian Köcher };
1284aec89f78SBastian Köcher 
1285aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1286aec89f78SBastian Köcher 	.halt_reg = 0x0684,
1287aec89f78SBastian Köcher 	.clkr = {
1288aec89f78SBastian Köcher 		.enable_reg = 0x0684,
1289aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1290aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1291aec89f78SBastian Köcher 		{
1292aec89f78SBastian Köcher 			.name = "gcc_blsp1_uart1_apps_clk",
1293aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1294aec89f78SBastian Köcher 				"blsp1_uart1_apps_clk_src",
1295aec89f78SBastian Köcher 			},
1296aec89f78SBastian Köcher 			.num_parents = 1,
1297aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1298aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1299aec89f78SBastian Köcher 		},
1300aec89f78SBastian Köcher 	},
1301aec89f78SBastian Köcher };
1302aec89f78SBastian Köcher 
1303aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1304aec89f78SBastian Köcher 	.halt_reg = 0x0704,
1305aec89f78SBastian Köcher 	.clkr = {
1306aec89f78SBastian Köcher 		.enable_reg = 0x0704,
1307aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1308aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1309aec89f78SBastian Köcher 		{
1310aec89f78SBastian Köcher 			.name = "gcc_blsp1_uart2_apps_clk",
1311aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1312aec89f78SBastian Köcher 				"blsp1_uart2_apps_clk_src",
1313aec89f78SBastian Köcher 			},
1314aec89f78SBastian Köcher 			.num_parents = 1,
1315aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1316aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1317aec89f78SBastian Köcher 		},
1318aec89f78SBastian Köcher 	},
1319aec89f78SBastian Köcher };
1320aec89f78SBastian Köcher 
1321aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1322aec89f78SBastian Köcher 	.halt_reg = 0x0784,
1323aec89f78SBastian Köcher 	.clkr = {
1324aec89f78SBastian Köcher 		.enable_reg = 0x0784,
1325aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1326aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1327aec89f78SBastian Köcher 		{
1328aec89f78SBastian Köcher 			.name = "gcc_blsp1_uart3_apps_clk",
1329aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1330aec89f78SBastian Köcher 				"blsp1_uart3_apps_clk_src",
1331aec89f78SBastian Köcher 			},
1332aec89f78SBastian Köcher 			.num_parents = 1,
1333aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1334aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1335aec89f78SBastian Köcher 		},
1336aec89f78SBastian Köcher 	},
1337aec89f78SBastian Köcher };
1338aec89f78SBastian Köcher 
1339aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1340aec89f78SBastian Köcher 	.halt_reg = 0x0804,
1341aec89f78SBastian Köcher 	.clkr = {
1342aec89f78SBastian Köcher 		.enable_reg = 0x0804,
1343aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1344aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1345aec89f78SBastian Köcher 		{
1346aec89f78SBastian Köcher 			.name = "gcc_blsp1_uart4_apps_clk",
1347aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1348aec89f78SBastian Köcher 				"blsp1_uart4_apps_clk_src",
1349aec89f78SBastian Köcher 			},
1350aec89f78SBastian Köcher 			.num_parents = 1,
1351aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1352aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1353aec89f78SBastian Köcher 		},
1354aec89f78SBastian Köcher 	},
1355aec89f78SBastian Köcher };
1356aec89f78SBastian Köcher 
1357aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1358aec89f78SBastian Köcher 	.halt_reg = 0x0884,
1359aec89f78SBastian Köcher 	.clkr = {
1360aec89f78SBastian Köcher 		.enable_reg = 0x0884,
1361aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1362aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1363aec89f78SBastian Köcher 		{
1364aec89f78SBastian Köcher 			.name = "gcc_blsp1_uart5_apps_clk",
1365aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1366aec89f78SBastian Köcher 				"blsp1_uart5_apps_clk_src",
1367aec89f78SBastian Köcher 			},
1368aec89f78SBastian Köcher 			.num_parents = 1,
1369aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1370aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1371aec89f78SBastian Köcher 		},
1372aec89f78SBastian Köcher 	},
1373aec89f78SBastian Köcher };
1374aec89f78SBastian Köcher 
1375aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1376aec89f78SBastian Köcher 	.halt_reg = 0x0904,
1377aec89f78SBastian Köcher 	.clkr = {
1378aec89f78SBastian Köcher 		.enable_reg = 0x0904,
1379aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1380aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1381aec89f78SBastian Köcher 		{
1382aec89f78SBastian Köcher 			.name = "gcc_blsp1_uart6_apps_clk",
1383aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1384aec89f78SBastian Köcher 				"blsp1_uart6_apps_clk_src",
1385aec89f78SBastian Köcher 			},
1386aec89f78SBastian Köcher 			.num_parents = 1,
1387aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1388aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1389aec89f78SBastian Köcher 		},
1390aec89f78SBastian Köcher 	},
1391aec89f78SBastian Köcher };
1392aec89f78SBastian Köcher 
1393aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_ahb_clk = {
1394aec89f78SBastian Köcher 	.halt_reg = 0x0944,
1395aec89f78SBastian Köcher 	.halt_check = BRANCH_HALT_VOTED,
1396aec89f78SBastian Köcher 	.clkr = {
1397aec89f78SBastian Köcher 		.enable_reg = 0x1484,
1398aec89f78SBastian Köcher 		.enable_mask = BIT(15),
1399aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1400aec89f78SBastian Köcher 		{
1401aec89f78SBastian Köcher 			.name = "gcc_blsp2_ahb_clk",
1402aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1403aec89f78SBastian Köcher 		},
1404aec89f78SBastian Köcher 	},
1405aec89f78SBastian Köcher };
1406aec89f78SBastian Köcher 
1407aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1408aec89f78SBastian Köcher 	.halt_reg = 0x0988,
1409aec89f78SBastian Köcher 	.clkr = {
1410aec89f78SBastian Köcher 		.enable_reg = 0x0988,
1411aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1412aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1413aec89f78SBastian Köcher 		{
1414aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup1_i2c_apps_clk",
1415aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1416aec89f78SBastian Köcher 				"blsp2_qup1_i2c_apps_clk_src",
1417aec89f78SBastian Köcher 			},
1418aec89f78SBastian Köcher 			.num_parents = 1,
1419aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1420aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1421aec89f78SBastian Köcher 		},
1422aec89f78SBastian Köcher 	},
1423aec89f78SBastian Köcher };
1424aec89f78SBastian Köcher 
1425aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1426aec89f78SBastian Köcher 	.halt_reg = 0x0984,
1427aec89f78SBastian Köcher 	.clkr = {
1428aec89f78SBastian Köcher 		.enable_reg = 0x0984,
1429aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1430aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1431aec89f78SBastian Köcher 		{
1432aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup1_spi_apps_clk",
1433aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1434aec89f78SBastian Köcher 				"blsp2_qup1_spi_apps_clk_src",
1435aec89f78SBastian Köcher 			},
1436aec89f78SBastian Köcher 			.num_parents = 1,
1437aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1438aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1439aec89f78SBastian Köcher 		},
1440aec89f78SBastian Köcher 	},
1441aec89f78SBastian Köcher };
1442aec89f78SBastian Köcher 
1443aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1444aec89f78SBastian Köcher 	.halt_reg = 0x0a08,
1445aec89f78SBastian Köcher 	.clkr = {
1446aec89f78SBastian Köcher 		.enable_reg = 0x0a08,
1447aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1448aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1449aec89f78SBastian Köcher 		{
1450aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup2_i2c_apps_clk",
1451aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1452aec89f78SBastian Köcher 				"blsp2_qup2_i2c_apps_clk_src",
1453aec89f78SBastian Köcher 			},
1454aec89f78SBastian Köcher 			.num_parents = 1,
1455aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1456aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1457aec89f78SBastian Köcher 		},
1458aec89f78SBastian Köcher 	},
1459aec89f78SBastian Köcher };
1460aec89f78SBastian Köcher 
1461aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1462aec89f78SBastian Köcher 	.halt_reg = 0x0a04,
1463aec89f78SBastian Köcher 	.clkr = {
1464aec89f78SBastian Köcher 		.enable_reg = 0x0a04,
1465aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1466aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1467aec89f78SBastian Köcher 		{
1468aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup2_spi_apps_clk",
1469aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1470aec89f78SBastian Köcher 				"blsp2_qup2_spi_apps_clk_src",
1471aec89f78SBastian Köcher 			},
1472aec89f78SBastian Köcher 			.num_parents = 1,
1473aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1474aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1475aec89f78SBastian Köcher 		},
1476aec89f78SBastian Köcher 	},
1477aec89f78SBastian Köcher };
1478aec89f78SBastian Köcher 
1479aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1480aec89f78SBastian Köcher 	.halt_reg = 0x0a88,
1481aec89f78SBastian Köcher 	.clkr = {
1482aec89f78SBastian Köcher 		.enable_reg = 0x0a88,
1483aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1484aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1485aec89f78SBastian Köcher 		{
1486aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup3_i2c_apps_clk",
1487aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1488aec89f78SBastian Köcher 				"blsp2_qup3_i2c_apps_clk_src",
1489aec89f78SBastian Köcher 			},
1490aec89f78SBastian Köcher 			.num_parents = 1,
1491aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1492aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1493aec89f78SBastian Köcher 		},
1494aec89f78SBastian Köcher 	},
1495aec89f78SBastian Köcher };
1496aec89f78SBastian Köcher 
1497aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1498aec89f78SBastian Köcher 	.halt_reg = 0x0a84,
1499aec89f78SBastian Köcher 	.clkr = {
1500aec89f78SBastian Köcher 		.enable_reg = 0x0a84,
1501aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1502aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1503aec89f78SBastian Köcher 		{
1504aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup3_spi_apps_clk",
1505aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1506aec89f78SBastian Köcher 				"blsp2_qup3_spi_apps_clk_src",
1507aec89f78SBastian Köcher 			},
1508aec89f78SBastian Köcher 			.num_parents = 1,
1509aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1510aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1511aec89f78SBastian Köcher 		},
1512aec89f78SBastian Köcher 	},
1513aec89f78SBastian Köcher };
1514aec89f78SBastian Köcher 
1515aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1516aec89f78SBastian Köcher 	.halt_reg = 0x0b08,
1517aec89f78SBastian Köcher 	.clkr = {
1518aec89f78SBastian Köcher 		.enable_reg = 0x0b08,
1519aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1520aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1521aec89f78SBastian Köcher 		{
1522aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup4_i2c_apps_clk",
1523aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1524aec89f78SBastian Köcher 				"blsp2_qup4_i2c_apps_clk_src",
1525aec89f78SBastian Köcher 			},
1526aec89f78SBastian Köcher 			.num_parents = 1,
1527aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1528aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1529aec89f78SBastian Köcher 		},
1530aec89f78SBastian Köcher 	},
1531aec89f78SBastian Köcher };
1532aec89f78SBastian Köcher 
1533aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1534aec89f78SBastian Köcher 	.halt_reg = 0x0b04,
1535aec89f78SBastian Köcher 	.clkr = {
1536aec89f78SBastian Köcher 		.enable_reg = 0x0b04,
1537aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1538aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1539aec89f78SBastian Köcher 		{
1540aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup4_spi_apps_clk",
1541aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1542aec89f78SBastian Köcher 				"blsp2_qup4_spi_apps_clk_src",
1543aec89f78SBastian Köcher 			},
1544aec89f78SBastian Köcher 			.num_parents = 1,
1545aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1546aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1547aec89f78SBastian Köcher 		},
1548aec89f78SBastian Köcher 	},
1549aec89f78SBastian Köcher };
1550aec89f78SBastian Köcher 
1551aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
1552aec89f78SBastian Köcher 	.halt_reg = 0x0b88,
1553aec89f78SBastian Köcher 	.clkr = {
1554aec89f78SBastian Köcher 		.enable_reg = 0x0b88,
1555aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1556aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1557aec89f78SBastian Köcher 		{
1558aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup5_i2c_apps_clk",
1559aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1560aec89f78SBastian Köcher 				"blsp2_qup5_i2c_apps_clk_src",
1561aec89f78SBastian Köcher 			},
1562aec89f78SBastian Köcher 			.num_parents = 1,
1563aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1564aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1565aec89f78SBastian Köcher 		},
1566aec89f78SBastian Köcher 	},
1567aec89f78SBastian Köcher };
1568aec89f78SBastian Köcher 
1569aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
1570aec89f78SBastian Köcher 	.halt_reg = 0x0b84,
1571aec89f78SBastian Köcher 	.clkr = {
1572aec89f78SBastian Köcher 		.enable_reg = 0x0b84,
1573aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1574aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1575aec89f78SBastian Köcher 		{
1576aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup5_spi_apps_clk",
1577aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1578aec89f78SBastian Köcher 				"blsp2_qup5_spi_apps_clk_src",
1579aec89f78SBastian Köcher 			},
1580aec89f78SBastian Köcher 			.num_parents = 1,
1581aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1582aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1583aec89f78SBastian Köcher 		},
1584aec89f78SBastian Köcher 	},
1585aec89f78SBastian Köcher };
1586aec89f78SBastian Köcher 
1587aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
1588aec89f78SBastian Köcher 	.halt_reg = 0x0c08,
1589aec89f78SBastian Köcher 	.clkr = {
1590aec89f78SBastian Köcher 		.enable_reg = 0x0c08,
1591aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1592aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1593aec89f78SBastian Köcher 		{
1594aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup6_i2c_apps_clk",
1595aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1596aec89f78SBastian Köcher 				"blsp2_qup6_i2c_apps_clk_src",
1597aec89f78SBastian Köcher 			},
1598aec89f78SBastian Köcher 			.num_parents = 1,
1599aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1600aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1601aec89f78SBastian Köcher 		},
1602aec89f78SBastian Köcher 	},
1603aec89f78SBastian Köcher };
1604aec89f78SBastian Köcher 
1605aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
1606aec89f78SBastian Köcher 	.halt_reg = 0x0c04,
1607aec89f78SBastian Köcher 	.clkr = {
1608aec89f78SBastian Köcher 		.enable_reg = 0x0c04,
1609aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1610aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1611aec89f78SBastian Köcher 		{
1612aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup6_spi_apps_clk",
1613aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1614aec89f78SBastian Köcher 				"blsp2_qup6_spi_apps_clk_src",
1615aec89f78SBastian Köcher 			},
1616aec89f78SBastian Köcher 			.num_parents = 1,
1617aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1618aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1619aec89f78SBastian Köcher 		},
1620aec89f78SBastian Köcher 	},
1621aec89f78SBastian Köcher };
1622aec89f78SBastian Köcher 
1623aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1624aec89f78SBastian Köcher 	.halt_reg = 0x09c4,
1625aec89f78SBastian Köcher 	.clkr = {
1626aec89f78SBastian Köcher 		.enable_reg = 0x09c4,
1627aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1628aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1629aec89f78SBastian Köcher 		{
1630aec89f78SBastian Köcher 			.name = "gcc_blsp2_uart1_apps_clk",
1631aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1632aec89f78SBastian Köcher 				"blsp2_uart1_apps_clk_src",
1633aec89f78SBastian Köcher 			},
1634aec89f78SBastian Köcher 			.num_parents = 1,
1635aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1636aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1637aec89f78SBastian Köcher 		},
1638aec89f78SBastian Köcher 	},
1639aec89f78SBastian Köcher };
1640aec89f78SBastian Köcher 
1641aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1642aec89f78SBastian Köcher 	.halt_reg = 0x0a44,
1643aec89f78SBastian Köcher 	.clkr = {
1644aec89f78SBastian Köcher 		.enable_reg = 0x0a44,
1645aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1646aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1647aec89f78SBastian Köcher 		{
1648aec89f78SBastian Köcher 			.name = "gcc_blsp2_uart2_apps_clk",
1649aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1650aec89f78SBastian Köcher 				"blsp2_uart2_apps_clk_src",
1651aec89f78SBastian Köcher 			},
1652aec89f78SBastian Köcher 			.num_parents = 1,
1653aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1654aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1655aec89f78SBastian Köcher 		},
1656aec89f78SBastian Köcher 	},
1657aec89f78SBastian Köcher };
1658aec89f78SBastian Köcher 
1659aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_uart3_apps_clk = {
1660aec89f78SBastian Köcher 	.halt_reg = 0x0ac4,
1661aec89f78SBastian Köcher 	.clkr = {
1662aec89f78SBastian Köcher 		.enable_reg = 0x0ac4,
1663aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1664aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1665aec89f78SBastian Köcher 		{
1666aec89f78SBastian Köcher 			.name = "gcc_blsp2_uart3_apps_clk",
1667aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1668aec89f78SBastian Köcher 				"blsp2_uart3_apps_clk_src",
1669aec89f78SBastian Köcher 			},
1670aec89f78SBastian Köcher 			.num_parents = 1,
1671aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1672aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1673aec89f78SBastian Köcher 		},
1674aec89f78SBastian Köcher 	},
1675aec89f78SBastian Köcher };
1676aec89f78SBastian Köcher 
1677aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_uart4_apps_clk = {
1678aec89f78SBastian Köcher 	.halt_reg = 0x0b44,
1679aec89f78SBastian Köcher 	.clkr = {
1680aec89f78SBastian Köcher 		.enable_reg = 0x0b44,
1681aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1682aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1683aec89f78SBastian Köcher 		{
1684aec89f78SBastian Köcher 			.name = "gcc_blsp2_uart4_apps_clk",
1685aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1686aec89f78SBastian Köcher 				"blsp2_uart4_apps_clk_src",
1687aec89f78SBastian Köcher 			},
1688aec89f78SBastian Köcher 			.num_parents = 1,
1689aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1690aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1691aec89f78SBastian Köcher 		},
1692aec89f78SBastian Köcher 	},
1693aec89f78SBastian Köcher };
1694aec89f78SBastian Köcher 
1695aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_uart5_apps_clk = {
1696aec89f78SBastian Köcher 	.halt_reg = 0x0bc4,
1697aec89f78SBastian Köcher 	.clkr = {
1698aec89f78SBastian Köcher 		.enable_reg = 0x0bc4,
1699aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1700aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1701aec89f78SBastian Köcher 		{
1702aec89f78SBastian Köcher 			.name = "gcc_blsp2_uart5_apps_clk",
1703aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1704aec89f78SBastian Köcher 				"blsp2_uart5_apps_clk_src",
1705aec89f78SBastian Köcher 			},
1706aec89f78SBastian Köcher 			.num_parents = 1,
1707aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1708aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1709aec89f78SBastian Köcher 		},
1710aec89f78SBastian Köcher 	},
1711aec89f78SBastian Köcher };
1712aec89f78SBastian Köcher 
1713aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_uart6_apps_clk = {
1714aec89f78SBastian Köcher 	.halt_reg = 0x0c44,
1715aec89f78SBastian Köcher 	.clkr = {
1716aec89f78SBastian Köcher 		.enable_reg = 0x0c44,
1717aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1718aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1719aec89f78SBastian Köcher 		{
1720aec89f78SBastian Köcher 			.name = "gcc_blsp2_uart6_apps_clk",
1721aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1722aec89f78SBastian Köcher 				"blsp2_uart6_apps_clk_src",
1723aec89f78SBastian Köcher 			},
1724aec89f78SBastian Köcher 			.num_parents = 1,
1725aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1726aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1727aec89f78SBastian Köcher 		},
1728aec89f78SBastian Köcher 	},
1729aec89f78SBastian Köcher };
1730aec89f78SBastian Köcher 
1731aec89f78SBastian Köcher static struct clk_branch gcc_gp1_clk = {
1732aec89f78SBastian Köcher 	.halt_reg = 0x1900,
1733aec89f78SBastian Köcher 	.clkr = {
1734aec89f78SBastian Köcher 		.enable_reg = 0x1900,
1735aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1736aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1737aec89f78SBastian Köcher 		{
1738aec89f78SBastian Köcher 			.name = "gcc_gp1_clk",
1739aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1740aec89f78SBastian Köcher 				"gp1_clk_src",
1741aec89f78SBastian Köcher 			},
1742aec89f78SBastian Köcher 			.num_parents = 1,
1743aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1744aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1745aec89f78SBastian Köcher 		},
1746aec89f78SBastian Köcher 	},
1747aec89f78SBastian Köcher };
1748aec89f78SBastian Köcher 
1749aec89f78SBastian Köcher static struct clk_branch gcc_gp2_clk = {
1750aec89f78SBastian Köcher 	.halt_reg = 0x1940,
1751aec89f78SBastian Köcher 	.clkr = {
1752aec89f78SBastian Köcher 		.enable_reg = 0x1940,
1753aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1754aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1755aec89f78SBastian Köcher 		{
1756aec89f78SBastian Köcher 			.name = "gcc_gp2_clk",
1757aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1758aec89f78SBastian Köcher 				"gp2_clk_src",
1759aec89f78SBastian Köcher 			},
1760aec89f78SBastian Köcher 			.num_parents = 1,
1761aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1762aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1763aec89f78SBastian Köcher 		},
1764aec89f78SBastian Köcher 	},
1765aec89f78SBastian Köcher };
1766aec89f78SBastian Köcher 
1767aec89f78SBastian Köcher static struct clk_branch gcc_gp3_clk = {
1768aec89f78SBastian Köcher 	.halt_reg = 0x1980,
1769aec89f78SBastian Köcher 	.clkr = {
1770aec89f78SBastian Köcher 		.enable_reg = 0x1980,
1771aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1772aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1773aec89f78SBastian Köcher 		{
1774aec89f78SBastian Köcher 			.name = "gcc_gp3_clk",
1775aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1776aec89f78SBastian Köcher 				"gp3_clk_src",
1777aec89f78SBastian Köcher 			},
1778aec89f78SBastian Köcher 			.num_parents = 1,
1779aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1780aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1781aec89f78SBastian Köcher 		},
1782aec89f78SBastian Köcher 	},
1783aec89f78SBastian Köcher };
1784aec89f78SBastian Köcher 
1785aec89f78SBastian Köcher static struct clk_branch gcc_pcie_0_aux_clk = {
1786aec89f78SBastian Köcher 	.halt_reg = 0x1ad4,
1787aec89f78SBastian Köcher 	.clkr = {
1788aec89f78SBastian Köcher 		.enable_reg = 0x1ad4,
1789aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1790aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1791aec89f78SBastian Köcher 		{
1792aec89f78SBastian Köcher 			.name = "gcc_pcie_0_aux_clk",
1793aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1794aec89f78SBastian Köcher 				"pcie_0_aux_clk_src",
1795aec89f78SBastian Köcher 			},
1796aec89f78SBastian Köcher 			.num_parents = 1,
1797aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1798aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1799aec89f78SBastian Köcher 		},
1800aec89f78SBastian Köcher 	},
1801aec89f78SBastian Köcher };
1802aec89f78SBastian Köcher 
1803aec89f78SBastian Köcher static struct clk_branch gcc_pcie_0_pipe_clk = {
1804aec89f78SBastian Köcher 	.halt_reg = 0x1ad8,
1805aec89f78SBastian Köcher 	.halt_check = BRANCH_HALT_DELAY,
1806aec89f78SBastian Köcher 	.clkr = {
1807aec89f78SBastian Köcher 		.enable_reg = 0x1ad8,
1808aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1809aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1810aec89f78SBastian Köcher 		{
1811aec89f78SBastian Köcher 			.name = "gcc_pcie_0_pipe_clk",
1812aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1813aec89f78SBastian Köcher 				"pcie_0_pipe_clk_src",
1814aec89f78SBastian Köcher 			},
1815aec89f78SBastian Köcher 			.num_parents = 1,
1816aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1817aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1818aec89f78SBastian Köcher 		},
1819aec89f78SBastian Köcher 	},
1820aec89f78SBastian Köcher };
1821aec89f78SBastian Köcher 
1822aec89f78SBastian Köcher static struct clk_branch gcc_pcie_1_aux_clk = {
1823aec89f78SBastian Köcher 	.halt_reg = 0x1b54,
1824aec89f78SBastian Köcher 	.clkr = {
1825aec89f78SBastian Köcher 		.enable_reg = 0x1b54,
1826aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1827aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1828aec89f78SBastian Köcher 		{
1829aec89f78SBastian Köcher 			.name = "gcc_pcie_1_aux_clk",
1830aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1831aec89f78SBastian Köcher 				"pcie_1_aux_clk_src",
1832aec89f78SBastian Köcher 			},
1833aec89f78SBastian Köcher 			.num_parents = 1,
1834aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1835aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1836aec89f78SBastian Köcher 		},
1837aec89f78SBastian Köcher 	},
1838aec89f78SBastian Köcher };
1839aec89f78SBastian Köcher 
1840aec89f78SBastian Köcher static struct clk_branch gcc_pcie_1_pipe_clk = {
1841aec89f78SBastian Köcher 	.halt_reg = 0x1b58,
1842aec89f78SBastian Köcher 	.halt_check = BRANCH_HALT_DELAY,
1843aec89f78SBastian Köcher 	.clkr = {
1844aec89f78SBastian Köcher 		.enable_reg = 0x1b58,
1845aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1846aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1847aec89f78SBastian Köcher 		{
1848aec89f78SBastian Köcher 			.name = "gcc_pcie_1_pipe_clk",
1849aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1850aec89f78SBastian Köcher 				"pcie_1_pipe_clk_src",
1851aec89f78SBastian Köcher 			},
1852aec89f78SBastian Köcher 			.num_parents = 1,
1853aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1854aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1855aec89f78SBastian Köcher 		},
1856aec89f78SBastian Köcher 	},
1857aec89f78SBastian Köcher };
1858aec89f78SBastian Köcher 
1859aec89f78SBastian Köcher static struct clk_branch gcc_pdm2_clk = {
1860aec89f78SBastian Köcher 	.halt_reg = 0x0ccc,
1861aec89f78SBastian Köcher 	.clkr = {
1862aec89f78SBastian Köcher 		.enable_reg = 0x0ccc,
1863aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1864aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1865aec89f78SBastian Köcher 		{
1866aec89f78SBastian Köcher 			.name = "gcc_pdm2_clk",
1867aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1868aec89f78SBastian Köcher 				"pdm2_clk_src",
1869aec89f78SBastian Köcher 			},
1870aec89f78SBastian Köcher 			.num_parents = 1,
1871aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1872aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1873aec89f78SBastian Köcher 		},
1874aec89f78SBastian Köcher 	},
1875aec89f78SBastian Köcher };
1876aec89f78SBastian Köcher 
1877aec89f78SBastian Köcher static struct clk_branch gcc_sdcc1_apps_clk = {
1878aec89f78SBastian Köcher 	.halt_reg = 0x04c4,
1879aec89f78SBastian Köcher 	.clkr = {
1880aec89f78SBastian Köcher 		.enable_reg = 0x04c4,
1881aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1882aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1883aec89f78SBastian Köcher 		{
1884aec89f78SBastian Köcher 			.name = "gcc_sdcc1_apps_clk",
1885aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1886aec89f78SBastian Köcher 				"sdcc1_apps_clk_src",
1887aec89f78SBastian Köcher 			},
1888aec89f78SBastian Köcher 			.num_parents = 1,
1889aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1890aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1891aec89f78SBastian Köcher 		},
1892aec89f78SBastian Köcher 	},
1893aec89f78SBastian Köcher };
1894aec89f78SBastian Köcher 
1895eaff16bcSJeremy McNicoll static struct clk_branch gcc_sdcc1_ahb_clk = {
1896eaff16bcSJeremy McNicoll 	.halt_reg = 0x04c8,
1897eaff16bcSJeremy McNicoll 	.clkr = {
1898eaff16bcSJeremy McNicoll 		.enable_reg = 0x04c8,
1899eaff16bcSJeremy McNicoll 		.enable_mask = BIT(0),
1900eaff16bcSJeremy McNicoll 		.hw.init = &(struct clk_init_data)
1901eaff16bcSJeremy McNicoll 		{
1902eaff16bcSJeremy McNicoll 			.name = "gcc_sdcc1_ahb_clk",
1903eaff16bcSJeremy McNicoll 			.parent_names = (const char *[]){
1904eaff16bcSJeremy McNicoll 				"periph_noc_clk_src",
1905eaff16bcSJeremy McNicoll 			},
1906eaff16bcSJeremy McNicoll 			.num_parents = 1,
1907eaff16bcSJeremy McNicoll 			.ops = &clk_branch2_ops,
1908eaff16bcSJeremy McNicoll 		},
1909eaff16bcSJeremy McNicoll 	},
1910eaff16bcSJeremy McNicoll };
1911eaff16bcSJeremy McNicoll 
1912aec89f78SBastian Köcher static struct clk_branch gcc_sdcc2_apps_clk = {
1913aec89f78SBastian Köcher 	.halt_reg = 0x0504,
1914aec89f78SBastian Köcher 	.clkr = {
1915aec89f78SBastian Köcher 		.enable_reg = 0x0504,
1916aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1917aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1918aec89f78SBastian Köcher 		{
1919aec89f78SBastian Köcher 			.name = "gcc_sdcc2_apps_clk",
1920aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1921aec89f78SBastian Köcher 				"sdcc2_apps_clk_src",
1922aec89f78SBastian Köcher 			},
1923aec89f78SBastian Köcher 			.num_parents = 1,
1924aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1925aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1926aec89f78SBastian Köcher 		},
1927aec89f78SBastian Köcher 	},
1928aec89f78SBastian Köcher };
1929aec89f78SBastian Köcher 
1930aec89f78SBastian Köcher static struct clk_branch gcc_sdcc3_apps_clk = {
1931aec89f78SBastian Köcher 	.halt_reg = 0x0544,
1932aec89f78SBastian Köcher 	.clkr = {
1933aec89f78SBastian Köcher 		.enable_reg = 0x0544,
1934aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1935aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1936aec89f78SBastian Köcher 		{
1937aec89f78SBastian Köcher 			.name = "gcc_sdcc3_apps_clk",
1938aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1939aec89f78SBastian Köcher 				"sdcc3_apps_clk_src",
1940aec89f78SBastian Köcher 			},
1941aec89f78SBastian Köcher 			.num_parents = 1,
1942aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1943aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1944aec89f78SBastian Köcher 		},
1945aec89f78SBastian Köcher 	},
1946aec89f78SBastian Köcher };
1947aec89f78SBastian Köcher 
1948aec89f78SBastian Köcher static struct clk_branch gcc_sdcc4_apps_clk = {
1949aec89f78SBastian Köcher 	.halt_reg = 0x0584,
1950aec89f78SBastian Köcher 	.clkr = {
1951aec89f78SBastian Köcher 		.enable_reg = 0x0584,
1952aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1953aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1954aec89f78SBastian Köcher 		{
1955aec89f78SBastian Köcher 			.name = "gcc_sdcc4_apps_clk",
1956aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1957aec89f78SBastian Köcher 				"sdcc4_apps_clk_src",
1958aec89f78SBastian Köcher 			},
1959aec89f78SBastian Köcher 			.num_parents = 1,
1960aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1961aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1962aec89f78SBastian Köcher 		},
1963aec89f78SBastian Köcher 	},
1964aec89f78SBastian Köcher };
1965aec89f78SBastian Köcher 
1966aec89f78SBastian Köcher static struct clk_branch gcc_sys_noc_ufs_axi_clk = {
1967aec89f78SBastian Köcher 	.halt_reg = 0x1d7c,
1968aec89f78SBastian Köcher 	.clkr = {
1969aec89f78SBastian Köcher 		.enable_reg = 0x1d7c,
1970aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1971aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1972aec89f78SBastian Köcher 		{
1973aec89f78SBastian Köcher 			.name = "gcc_sys_noc_ufs_axi_clk",
1974aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1975aec89f78SBastian Köcher 				"ufs_axi_clk_src",
1976aec89f78SBastian Köcher 			},
1977aec89f78SBastian Köcher 			.num_parents = 1,
1978aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1979aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1980aec89f78SBastian Köcher 		},
1981aec89f78SBastian Köcher 	},
1982aec89f78SBastian Köcher };
1983aec89f78SBastian Köcher 
1984aec89f78SBastian Köcher static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
1985aec89f78SBastian Köcher 	.halt_reg = 0x03fc,
1986aec89f78SBastian Köcher 	.clkr = {
1987aec89f78SBastian Köcher 		.enable_reg = 0x03fc,
1988aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1989aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1990aec89f78SBastian Köcher 		{
1991aec89f78SBastian Köcher 			.name = "gcc_sys_noc_usb3_axi_clk",
1992aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1993aec89f78SBastian Köcher 				"usb30_master_clk_src",
1994aec89f78SBastian Köcher 			},
1995aec89f78SBastian Köcher 			.num_parents = 1,
1996aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1997aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1998aec89f78SBastian Köcher 		},
1999aec89f78SBastian Köcher 	},
2000aec89f78SBastian Köcher };
2001aec89f78SBastian Köcher 
2002aec89f78SBastian Köcher static struct clk_branch gcc_tsif_ref_clk = {
2003aec89f78SBastian Köcher 	.halt_reg = 0x0d88,
2004aec89f78SBastian Köcher 	.clkr = {
2005aec89f78SBastian Köcher 		.enable_reg = 0x0d88,
2006aec89f78SBastian Köcher 		.enable_mask = BIT(0),
2007aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
2008aec89f78SBastian Köcher 		{
2009aec89f78SBastian Köcher 			.name = "gcc_tsif_ref_clk",
2010aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
2011aec89f78SBastian Köcher 				"tsif_ref_clk_src",
2012aec89f78SBastian Köcher 			},
2013aec89f78SBastian Köcher 			.num_parents = 1,
2014aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
2015aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
2016aec89f78SBastian Köcher 		},
2017aec89f78SBastian Köcher 	},
2018aec89f78SBastian Köcher };
2019aec89f78SBastian Köcher 
2020aec89f78SBastian Köcher static struct clk_branch gcc_ufs_axi_clk = {
2021aec89f78SBastian Köcher 	.halt_reg = 0x1d48,
2022aec89f78SBastian Köcher 	.clkr = {
2023aec89f78SBastian Köcher 		.enable_reg = 0x1d48,
2024aec89f78SBastian Köcher 		.enable_mask = BIT(0),
2025aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
2026aec89f78SBastian Köcher 		{
2027aec89f78SBastian Köcher 			.name = "gcc_ufs_axi_clk",
2028aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
2029aec89f78SBastian Köcher 				"ufs_axi_clk_src",
2030aec89f78SBastian Köcher 			},
2031aec89f78SBastian Köcher 			.num_parents = 1,
2032aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
2033aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
2034aec89f78SBastian Köcher 		},
2035aec89f78SBastian Köcher 	},
2036aec89f78SBastian Köcher };
2037aec89f78SBastian Köcher 
2038aec89f78SBastian Köcher static struct clk_branch gcc_ufs_rx_cfg_clk = {
2039aec89f78SBastian Köcher 	.halt_reg = 0x1d54,
2040aec89f78SBastian Köcher 	.clkr = {
2041aec89f78SBastian Köcher 		.enable_reg = 0x1d54,
2042aec89f78SBastian Köcher 		.enable_mask = BIT(0),
2043aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
2044aec89f78SBastian Köcher 		{
2045aec89f78SBastian Köcher 			.name = "gcc_ufs_rx_cfg_clk",
2046aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
2047aec89f78SBastian Köcher 				"ufs_axi_clk_src",
2048aec89f78SBastian Köcher 			},
2049aec89f78SBastian Köcher 			.num_parents = 1,
2050aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
2051aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
2052aec89f78SBastian Köcher 		},
2053aec89f78SBastian Köcher 	},
2054aec89f78SBastian Köcher };
2055aec89f78SBastian Köcher 
2056aec89f78SBastian Köcher static struct clk_branch gcc_ufs_tx_cfg_clk = {
2057aec89f78SBastian Köcher 	.halt_reg = 0x1d50,
2058aec89f78SBastian Köcher 	.clkr = {
2059aec89f78SBastian Köcher 		.enable_reg = 0x1d50,
2060aec89f78SBastian Köcher 		.enable_mask = BIT(0),
2061aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
2062aec89f78SBastian Köcher 		{
2063aec89f78SBastian Köcher 			.name = "gcc_ufs_tx_cfg_clk",
2064aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
2065aec89f78SBastian Köcher 				"ufs_axi_clk_src",
2066aec89f78SBastian Köcher 			},
2067aec89f78SBastian Köcher 			.num_parents = 1,
2068aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
2069aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
2070aec89f78SBastian Köcher 		},
2071aec89f78SBastian Köcher 	},
2072aec89f78SBastian Köcher };
2073aec89f78SBastian Köcher 
2074aec89f78SBastian Köcher static struct clk_branch gcc_usb30_master_clk = {
2075aec89f78SBastian Köcher 	.halt_reg = 0x03c8,
2076aec89f78SBastian Köcher 	.clkr = {
2077aec89f78SBastian Köcher 		.enable_reg = 0x03c8,
2078aec89f78SBastian Köcher 		.enable_mask = BIT(0),
2079aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
2080aec89f78SBastian Köcher 		{
2081aec89f78SBastian Köcher 			.name = "gcc_usb30_master_clk",
2082aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
2083aec89f78SBastian Köcher 				"usb30_master_clk_src",
2084aec89f78SBastian Köcher 			},
2085aec89f78SBastian Köcher 			.num_parents = 1,
2086aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
2087aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
2088aec89f78SBastian Köcher 		},
2089aec89f78SBastian Köcher 	},
2090aec89f78SBastian Köcher };
2091aec89f78SBastian Köcher 
2092aec89f78SBastian Köcher static struct clk_branch gcc_usb30_mock_utmi_clk = {
2093aec89f78SBastian Köcher 	.halt_reg = 0x03d0,
2094aec89f78SBastian Köcher 	.clkr = {
2095aec89f78SBastian Köcher 		.enable_reg = 0x03d0,
2096aec89f78SBastian Köcher 		.enable_mask = BIT(0),
2097aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
2098aec89f78SBastian Köcher 		{
2099aec89f78SBastian Köcher 			.name = "gcc_usb30_mock_utmi_clk",
2100aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
2101aec89f78SBastian Köcher 				"usb30_mock_utmi_clk_src",
2102aec89f78SBastian Köcher 			},
2103aec89f78SBastian Köcher 			.num_parents = 1,
2104aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
2105aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
2106aec89f78SBastian Köcher 		},
2107aec89f78SBastian Köcher 	},
2108aec89f78SBastian Köcher };
2109aec89f78SBastian Köcher 
2110aec89f78SBastian Köcher static struct clk_branch gcc_usb3_phy_aux_clk = {
2111aec89f78SBastian Köcher 	.halt_reg = 0x1408,
2112aec89f78SBastian Köcher 	.clkr = {
2113aec89f78SBastian Köcher 		.enable_reg = 0x1408,
2114aec89f78SBastian Köcher 		.enable_mask = BIT(0),
2115aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
2116aec89f78SBastian Köcher 		{
2117aec89f78SBastian Köcher 			.name = "gcc_usb3_phy_aux_clk",
2118aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
2119aec89f78SBastian Köcher 				"usb3_phy_aux_clk_src",
2120aec89f78SBastian Köcher 			},
2121aec89f78SBastian Köcher 			.num_parents = 1,
2122aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
2123aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
2124aec89f78SBastian Köcher 		},
2125aec89f78SBastian Köcher 	},
2126aec89f78SBastian Köcher };
2127aec89f78SBastian Köcher 
2128aec89f78SBastian Köcher static struct clk_branch gcc_usb_hs_system_clk = {
2129aec89f78SBastian Köcher 	.halt_reg = 0x0484,
2130aec89f78SBastian Köcher 	.clkr = {
2131aec89f78SBastian Köcher 		.enable_reg = 0x0484,
2132aec89f78SBastian Köcher 		.enable_mask = BIT(0),
2133aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
2134aec89f78SBastian Köcher 		{
2135aec89f78SBastian Köcher 			.name = "gcc_usb_hs_system_clk",
2136aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
2137aec89f78SBastian Köcher 				"usb_hs_system_clk_src",
2138aec89f78SBastian Köcher 			},
2139aec89f78SBastian Köcher 			.num_parents = 1,
2140aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
2141aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
2142aec89f78SBastian Köcher 		},
2143aec89f78SBastian Köcher 	},
2144aec89f78SBastian Köcher };
2145aec89f78SBastian Köcher 
2146aec89f78SBastian Köcher static struct clk_regmap *gcc_msm8994_clocks[] = {
2147aec89f78SBastian Köcher 	[GPLL0_EARLY] = &gpll0_early.clkr,
2148aec89f78SBastian Köcher 	[GPLL0] = &gpll0.clkr,
2149aec89f78SBastian Köcher 	[GPLL4_EARLY] = &gpll4_early.clkr,
2150aec89f78SBastian Köcher 	[GPLL4] = &gpll4.clkr,
2151aec89f78SBastian Köcher 	[UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
2152aec89f78SBastian Köcher 	[USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2153aec89f78SBastian Köcher 	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2154aec89f78SBastian Köcher 	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2155aec89f78SBastian Köcher 	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2156aec89f78SBastian Köcher 	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2157aec89f78SBastian Köcher 	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2158aec89f78SBastian Köcher 	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2159aec89f78SBastian Köcher 	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2160aec89f78SBastian Köcher 	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2161aec89f78SBastian Köcher 	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2162aec89f78SBastian Köcher 	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2163aec89f78SBastian Köcher 	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2164aec89f78SBastian Köcher 	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2165aec89f78SBastian Köcher 	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2166aec89f78SBastian Köcher 	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2167aec89f78SBastian Köcher 	[BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2168aec89f78SBastian Köcher 	[BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
2169aec89f78SBastian Köcher 	[BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
2170aec89f78SBastian Köcher 	[BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
2171aec89f78SBastian Köcher 	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2172aec89f78SBastian Köcher 	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2173aec89f78SBastian Köcher 	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2174aec89f78SBastian Köcher 	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2175aec89f78SBastian Köcher 	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2176aec89f78SBastian Köcher 	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2177aec89f78SBastian Köcher 	[BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2178aec89f78SBastian Köcher 	[BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2179aec89f78SBastian Köcher 	[BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
2180aec89f78SBastian Köcher 	[BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
2181aec89f78SBastian Köcher 	[BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
2182aec89f78SBastian Köcher 	[BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
2183aec89f78SBastian Köcher 	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2184aec89f78SBastian Köcher 	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2185aec89f78SBastian Köcher 	[BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
2186aec89f78SBastian Köcher 	[BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
2187aec89f78SBastian Köcher 	[BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
2188aec89f78SBastian Köcher 	[BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
2189aec89f78SBastian Köcher 	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
2190aec89f78SBastian Köcher 	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
2191aec89f78SBastian Köcher 	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
2192aec89f78SBastian Köcher 	[PCIE_0_AUX_CLK_SRC] = &pcie_0_aux_clk_src.clkr,
2193aec89f78SBastian Köcher 	[PCIE_0_PIPE_CLK_SRC] = &pcie_0_pipe_clk_src.clkr,
2194aec89f78SBastian Köcher 	[PCIE_1_AUX_CLK_SRC] = &pcie_1_aux_clk_src.clkr,
2195aec89f78SBastian Köcher 	[PCIE_1_PIPE_CLK_SRC] = &pcie_1_pipe_clk_src.clkr,
2196aec89f78SBastian Köcher 	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2197aec89f78SBastian Köcher 	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2198aec89f78SBastian Köcher 	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2199aec89f78SBastian Köcher 	[SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
2200aec89f78SBastian Köcher 	[SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
2201aec89f78SBastian Köcher 	[TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
2202aec89f78SBastian Köcher 	[USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2203aec89f78SBastian Köcher 	[USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
2204aec89f78SBastian Köcher 	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2205aec89f78SBastian Köcher 	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2206aec89f78SBastian Köcher 	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2207aec89f78SBastian Köcher 	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2208aec89f78SBastian Köcher 	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2209aec89f78SBastian Köcher 	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2210aec89f78SBastian Köcher 	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2211aec89f78SBastian Köcher 	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2212aec89f78SBastian Köcher 	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2213aec89f78SBastian Köcher 	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2214aec89f78SBastian Köcher 	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2215aec89f78SBastian Köcher 	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2216aec89f78SBastian Köcher 	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2217aec89f78SBastian Köcher 	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2218aec89f78SBastian Köcher 	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2219aec89f78SBastian Köcher 	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2220aec89f78SBastian Köcher 	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2221aec89f78SBastian Köcher 	[GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
2222aec89f78SBastian Köcher 	[GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
2223aec89f78SBastian Köcher 	[GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
2224aec89f78SBastian Köcher 	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2225aec89f78SBastian Köcher 	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2226aec89f78SBastian Köcher 	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2227aec89f78SBastian Köcher 	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2228aec89f78SBastian Köcher 	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2229aec89f78SBastian Köcher 	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2230aec89f78SBastian Köcher 	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2231aec89f78SBastian Köcher 	[GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2232aec89f78SBastian Köcher 	[GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2233aec89f78SBastian Köcher 	[GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
2234aec89f78SBastian Köcher 	[GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
2235aec89f78SBastian Köcher 	[GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
2236aec89f78SBastian Köcher 	[GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
2237aec89f78SBastian Köcher 	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2238aec89f78SBastian Köcher 	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2239aec89f78SBastian Köcher 	[GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
2240aec89f78SBastian Köcher 	[GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
2241aec89f78SBastian Köcher 	[GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
2242aec89f78SBastian Köcher 	[GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
2243aec89f78SBastian Köcher 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2244aec89f78SBastian Köcher 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2245aec89f78SBastian Köcher 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2246aec89f78SBastian Köcher 	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2247aec89f78SBastian Köcher 	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2248aec89f78SBastian Köcher 	[GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
2249aec89f78SBastian Köcher 	[GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
2250aec89f78SBastian Köcher 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2251aec89f78SBastian Köcher 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2252aec89f78SBastian Köcher 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2253aec89f78SBastian Köcher 	[GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
2254aec89f78SBastian Köcher 	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2255eaff16bcSJeremy McNicoll 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2256aec89f78SBastian Köcher 	[GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr,
2257aec89f78SBastian Köcher 	[GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
2258aec89f78SBastian Köcher 	[GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2259aec89f78SBastian Köcher 	[GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
2260aec89f78SBastian Köcher 	[GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr,
2261aec89f78SBastian Köcher 	[GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr,
2262aec89f78SBastian Köcher 	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2263aec89f78SBastian Köcher 	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2264aec89f78SBastian Köcher 	[GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
2265aec89f78SBastian Köcher 	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2266aec89f78SBastian Köcher };
2267aec89f78SBastian Köcher 
2268aec89f78SBastian Köcher static const struct regmap_config gcc_msm8994_regmap_config = {
2269aec89f78SBastian Köcher 	.reg_bits	= 32,
2270aec89f78SBastian Köcher 	.reg_stride	= 4,
2271aec89f78SBastian Köcher 	.val_bits	= 32,
2272aec89f78SBastian Köcher 	.max_register	= 0x2000,
2273aec89f78SBastian Köcher 	.fast_io	= true,
2274aec89f78SBastian Köcher };
2275aec89f78SBastian Köcher 
2276aec89f78SBastian Köcher static const struct qcom_cc_desc gcc_msm8994_desc = {
2277aec89f78SBastian Köcher 	.config = &gcc_msm8994_regmap_config,
2278aec89f78SBastian Köcher 	.clks = gcc_msm8994_clocks,
2279aec89f78SBastian Köcher 	.num_clks = ARRAY_SIZE(gcc_msm8994_clocks),
2280aec89f78SBastian Köcher };
2281aec89f78SBastian Köcher 
2282aec89f78SBastian Köcher static const struct of_device_id gcc_msm8994_match_table[] = {
2283aec89f78SBastian Köcher 	{ .compatible = "qcom,gcc-msm8994" },
2284aec89f78SBastian Köcher 	{}
2285aec89f78SBastian Köcher };
2286aec89f78SBastian Köcher MODULE_DEVICE_TABLE(of, gcc_msm8994_match_table);
2287aec89f78SBastian Köcher 
2288aec89f78SBastian Köcher static int gcc_msm8994_probe(struct platform_device *pdev)
2289aec89f78SBastian Köcher {
2290aec89f78SBastian Köcher 	struct device *dev = &pdev->dev;
2291aec89f78SBastian Köcher 	struct clk *clk;
2292aec89f78SBastian Köcher 
2293aec89f78SBastian Köcher 	clk = devm_clk_register(dev, &xo.hw);
2294aec89f78SBastian Köcher 	if (IS_ERR(clk))
2295aec89f78SBastian Köcher 		return PTR_ERR(clk);
2296aec89f78SBastian Köcher 
2297aec89f78SBastian Köcher 	return qcom_cc_probe(pdev, &gcc_msm8994_desc);
2298aec89f78SBastian Köcher }
2299aec89f78SBastian Köcher 
2300aec89f78SBastian Köcher static struct platform_driver gcc_msm8994_driver = {
2301aec89f78SBastian Köcher 	.probe		= gcc_msm8994_probe,
2302aec89f78SBastian Köcher 	.driver		= {
2303aec89f78SBastian Köcher 		.name	= "gcc-msm8994",
2304aec89f78SBastian Köcher 		.of_match_table = gcc_msm8994_match_table,
2305aec89f78SBastian Köcher 	},
2306aec89f78SBastian Köcher };
2307aec89f78SBastian Köcher 
2308aec89f78SBastian Köcher static int __init gcc_msm8994_init(void)
2309aec89f78SBastian Köcher {
2310aec89f78SBastian Köcher 	return platform_driver_register(&gcc_msm8994_driver);
2311aec89f78SBastian Köcher }
2312aec89f78SBastian Köcher core_initcall(gcc_msm8994_init);
2313aec89f78SBastian Köcher 
2314aec89f78SBastian Köcher static void __exit gcc_msm8994_exit(void)
2315aec89f78SBastian Köcher {
2316aec89f78SBastian Köcher 	platform_driver_unregister(&gcc_msm8994_driver);
2317aec89f78SBastian Köcher }
2318aec89f78SBastian Köcher module_exit(gcc_msm8994_exit);
2319aec89f78SBastian Köcher 
2320aec89f78SBastian Köcher MODULE_DESCRIPTION("Qualcomm GCC MSM8994 Driver");
2321aec89f78SBastian Köcher MODULE_LICENSE("GPL v2");
2322aec89f78SBastian Köcher MODULE_ALIAS("platform:gcc-msm8994");
2323