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