Merge tag 'firewire-update' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394...
[linux-2.6-microblaze.git] / drivers / clk / qcom / gcc-msm8960.c
1 /*
2  * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
3  *
4  * This software is licensed under the terms of the GNU General Public
5  * License version 2, as published by the Free Software Foundation, and
6  * may be copied, distributed, and modified under those terms.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  */
13
14 #include <linux/kernel.h>
15 #include <linux/bitops.h>
16 #include <linux/err.h>
17 #include <linux/platform_device.h>
18 #include <linux/module.h>
19 #include <linux/of.h>
20 #include <linux/of_device.h>
21 #include <linux/clk-provider.h>
22 #include <linux/regmap.h>
23 #include <linux/reset-controller.h>
24
25 #include <dt-bindings/clock/qcom,gcc-msm8960.h>
26 #include <dt-bindings/reset/qcom,gcc-msm8960.h>
27
28 #include "common.h"
29 #include "clk-regmap.h"
30 #include "clk-pll.h"
31 #include "clk-rcg.h"
32 #include "clk-branch.h"
33 #include "clk-hfpll.h"
34 #include "reset.h"
35
36 static struct clk_pll pll3 = {
37         .l_reg = 0x3164,
38         .m_reg = 0x3168,
39         .n_reg = 0x316c,
40         .config_reg = 0x3174,
41         .mode_reg = 0x3160,
42         .status_reg = 0x3178,
43         .status_bit = 16,
44         .clkr.hw.init = &(struct clk_init_data){
45                 .name = "pll3",
46                 .parent_names = (const char *[]){ "pxo" },
47                 .num_parents = 1,
48                 .ops = &clk_pll_ops,
49         },
50 };
51
52 static struct clk_regmap pll4_vote = {
53         .enable_reg = 0x34c0,
54         .enable_mask = BIT(4),
55         .hw.init = &(struct clk_init_data){
56                 .name = "pll4_vote",
57                 .parent_names = (const char *[]){ "pll4" },
58                 .num_parents = 1,
59                 .ops = &clk_pll_vote_ops,
60         },
61 };
62
63 static struct clk_pll pll8 = {
64         .l_reg = 0x3144,
65         .m_reg = 0x3148,
66         .n_reg = 0x314c,
67         .config_reg = 0x3154,
68         .mode_reg = 0x3140,
69         .status_reg = 0x3158,
70         .status_bit = 16,
71         .clkr.hw.init = &(struct clk_init_data){
72                 .name = "pll8",
73                 .parent_names = (const char *[]){ "pxo" },
74                 .num_parents = 1,
75                 .ops = &clk_pll_ops,
76         },
77 };
78
79 static struct clk_regmap pll8_vote = {
80         .enable_reg = 0x34c0,
81         .enable_mask = BIT(8),
82         .hw.init = &(struct clk_init_data){
83                 .name = "pll8_vote",
84                 .parent_names = (const char *[]){ "pll8" },
85                 .num_parents = 1,
86                 .ops = &clk_pll_vote_ops,
87         },
88 };
89
90 static struct hfpll_data hfpll0_data = {
91         .mode_reg = 0x3200,
92         .l_reg = 0x3208,
93         .m_reg = 0x320c,
94         .n_reg = 0x3210,
95         .config_reg = 0x3204,
96         .status_reg = 0x321c,
97         .config_val = 0x7845c665,
98         .droop_reg = 0x3214,
99         .droop_val = 0x0108c000,
100         .min_rate = 600000000UL,
101         .max_rate = 1800000000UL,
102 };
103
104 static struct clk_hfpll hfpll0 = {
105         .d = &hfpll0_data,
106         .clkr.hw.init = &(struct clk_init_data){
107                 .parent_names = (const char *[]){ "pxo" },
108                 .num_parents = 1,
109                 .name = "hfpll0",
110                 .ops = &clk_ops_hfpll,
111                 .flags = CLK_IGNORE_UNUSED,
112         },
113         .lock = __SPIN_LOCK_UNLOCKED(hfpll0.lock),
114 };
115
116 static struct hfpll_data hfpll1_8064_data = {
117         .mode_reg = 0x3240,
118         .l_reg = 0x3248,
119         .m_reg = 0x324c,
120         .n_reg = 0x3250,
121         .config_reg = 0x3244,
122         .status_reg = 0x325c,
123         .config_val = 0x7845c665,
124         .droop_reg = 0x3254,
125         .droop_val = 0x0108c000,
126         .min_rate = 600000000UL,
127         .max_rate = 1800000000UL,
128 };
129
130 static struct hfpll_data hfpll1_data = {
131         .mode_reg = 0x3300,
132         .l_reg = 0x3308,
133         .m_reg = 0x330c,
134         .n_reg = 0x3310,
135         .config_reg = 0x3304,
136         .status_reg = 0x331c,
137         .config_val = 0x7845c665,
138         .droop_reg = 0x3314,
139         .droop_val = 0x0108c000,
140         .min_rate = 600000000UL,
141         .max_rate = 1800000000UL,
142 };
143
144 static struct clk_hfpll hfpll1 = {
145         .d = &hfpll1_data,
146         .clkr.hw.init = &(struct clk_init_data){
147                 .parent_names = (const char *[]){ "pxo" },
148                 .num_parents = 1,
149                 .name = "hfpll1",
150                 .ops = &clk_ops_hfpll,
151                 .flags = CLK_IGNORE_UNUSED,
152         },
153         .lock = __SPIN_LOCK_UNLOCKED(hfpll1.lock),
154 };
155
156 static struct hfpll_data hfpll2_data = {
157         .mode_reg = 0x3280,
158         .l_reg = 0x3288,
159         .m_reg = 0x328c,
160         .n_reg = 0x3290,
161         .config_reg = 0x3284,
162         .status_reg = 0x329c,
163         .config_val = 0x7845c665,
164         .droop_reg = 0x3294,
165         .droop_val = 0x0108c000,
166         .min_rate = 600000000UL,
167         .max_rate = 1800000000UL,
168 };
169
170 static struct clk_hfpll hfpll2 = {
171         .d = &hfpll2_data,
172         .clkr.hw.init = &(struct clk_init_data){
173                 .parent_names = (const char *[]){ "pxo" },
174                 .num_parents = 1,
175                 .name = "hfpll2",
176                 .ops = &clk_ops_hfpll,
177                 .flags = CLK_IGNORE_UNUSED,
178         },
179         .lock = __SPIN_LOCK_UNLOCKED(hfpll2.lock),
180 };
181
182 static struct hfpll_data hfpll3_data = {
183         .mode_reg = 0x32c0,
184         .l_reg = 0x32c8,
185         .m_reg = 0x32cc,
186         .n_reg = 0x32d0,
187         .config_reg = 0x32c4,
188         .status_reg = 0x32dc,
189         .config_val = 0x7845c665,
190         .droop_reg = 0x32d4,
191         .droop_val = 0x0108c000,
192         .min_rate = 600000000UL,
193         .max_rate = 1800000000UL,
194 };
195
196 static struct clk_hfpll hfpll3 = {
197         .d = &hfpll3_data,
198         .clkr.hw.init = &(struct clk_init_data){
199                 .parent_names = (const char *[]){ "pxo" },
200                 .num_parents = 1,
201                 .name = "hfpll3",
202                 .ops = &clk_ops_hfpll,
203                 .flags = CLK_IGNORE_UNUSED,
204         },
205         .lock = __SPIN_LOCK_UNLOCKED(hfpll3.lock),
206 };
207
208 static struct hfpll_data hfpll_l2_8064_data = {
209         .mode_reg = 0x3300,
210         .l_reg = 0x3308,
211         .m_reg = 0x330c,
212         .n_reg = 0x3310,
213         .config_reg = 0x3304,
214         .status_reg = 0x331c,
215         .config_val = 0x7845c665,
216         .droop_reg = 0x3314,
217         .droop_val = 0x0108c000,
218         .min_rate = 600000000UL,
219         .max_rate = 1800000000UL,
220 };
221
222 static struct hfpll_data hfpll_l2_data = {
223         .mode_reg = 0x3400,
224         .l_reg = 0x3408,
225         .m_reg = 0x340c,
226         .n_reg = 0x3410,
227         .config_reg = 0x3404,
228         .status_reg = 0x341c,
229         .config_val = 0x7845c665,
230         .droop_reg = 0x3414,
231         .droop_val = 0x0108c000,
232         .min_rate = 600000000UL,
233         .max_rate = 1800000000UL,
234 };
235
236 static struct clk_hfpll hfpll_l2 = {
237         .d = &hfpll_l2_data,
238         .clkr.hw.init = &(struct clk_init_data){
239                 .parent_names = (const char *[]){ "pxo" },
240                 .num_parents = 1,
241                 .name = "hfpll_l2",
242                 .ops = &clk_ops_hfpll,
243                 .flags = CLK_IGNORE_UNUSED,
244         },
245         .lock = __SPIN_LOCK_UNLOCKED(hfpll_l2.lock),
246 };
247
248 static struct clk_pll pll14 = {
249         .l_reg = 0x31c4,
250         .m_reg = 0x31c8,
251         .n_reg = 0x31cc,
252         .config_reg = 0x31d4,
253         .mode_reg = 0x31c0,
254         .status_reg = 0x31d8,
255         .status_bit = 16,
256         .clkr.hw.init = &(struct clk_init_data){
257                 .name = "pll14",
258                 .parent_names = (const char *[]){ "pxo" },
259                 .num_parents = 1,
260                 .ops = &clk_pll_ops,
261         },
262 };
263
264 static struct clk_regmap pll14_vote = {
265         .enable_reg = 0x34c0,
266         .enable_mask = BIT(14),
267         .hw.init = &(struct clk_init_data){
268                 .name = "pll14_vote",
269                 .parent_names = (const char *[]){ "pll14" },
270                 .num_parents = 1,
271                 .ops = &clk_pll_vote_ops,
272         },
273 };
274
275 enum {
276         P_PXO,
277         P_PLL8,
278         P_PLL3,
279         P_CXO,
280 };
281
282 static const struct parent_map gcc_pxo_pll8_map[] = {
283         { P_PXO, 0 },
284         { P_PLL8, 3 }
285 };
286
287 static const char * const gcc_pxo_pll8[] = {
288         "pxo",
289         "pll8_vote",
290 };
291
292 static const struct parent_map gcc_pxo_pll8_cxo_map[] = {
293         { P_PXO, 0 },
294         { P_PLL8, 3 },
295         { P_CXO, 5 }
296 };
297
298 static const char * const gcc_pxo_pll8_cxo[] = {
299         "pxo",
300         "pll8_vote",
301         "cxo",
302 };
303
304 static const struct parent_map gcc_pxo_pll8_pll3_map[] = {
305         { P_PXO, 0 },
306         { P_PLL8, 3 },
307         { P_PLL3, 6 }
308 };
309
310 static const char * const gcc_pxo_pll8_pll3[] = {
311         "pxo",
312         "pll8_vote",
313         "pll3",
314 };
315
316 static struct freq_tbl clk_tbl_gsbi_uart[] = {
317         {  1843200, P_PLL8, 2,  6, 625 },
318         {  3686400, P_PLL8, 2, 12, 625 },
319         {  7372800, P_PLL8, 2, 24, 625 },
320         { 14745600, P_PLL8, 2, 48, 625 },
321         { 16000000, P_PLL8, 4,  1,   6 },
322         { 24000000, P_PLL8, 4,  1,   4 },
323         { 32000000, P_PLL8, 4,  1,   3 },
324         { 40000000, P_PLL8, 1,  5,  48 },
325         { 46400000, P_PLL8, 1, 29, 240 },
326         { 48000000, P_PLL8, 4,  1,   2 },
327         { 51200000, P_PLL8, 1,  2,  15 },
328         { 56000000, P_PLL8, 1,  7,  48 },
329         { 58982400, P_PLL8, 1, 96, 625 },
330         { 64000000, P_PLL8, 2,  1,   3 },
331         { }
332 };
333
334 static struct clk_rcg gsbi1_uart_src = {
335         .ns_reg = 0x29d4,
336         .md_reg = 0x29d0,
337         .mn = {
338                 .mnctr_en_bit = 8,
339                 .mnctr_reset_bit = 7,
340                 .mnctr_mode_shift = 5,
341                 .n_val_shift = 16,
342                 .m_val_shift = 16,
343                 .width = 16,
344         },
345         .p = {
346                 .pre_div_shift = 3,
347                 .pre_div_width = 2,
348         },
349         .s = {
350                 .src_sel_shift = 0,
351                 .parent_map = gcc_pxo_pll8_map,
352         },
353         .freq_tbl = clk_tbl_gsbi_uart,
354         .clkr = {
355                 .enable_reg = 0x29d4,
356                 .enable_mask = BIT(11),
357                 .hw.init = &(struct clk_init_data){
358                         .name = "gsbi1_uart_src",
359                         .parent_names = gcc_pxo_pll8,
360                         .num_parents = 2,
361                         .ops = &clk_rcg_ops,
362                         .flags = CLK_SET_PARENT_GATE,
363                 },
364         },
365 };
366
367 static struct clk_branch gsbi1_uart_clk = {
368         .halt_reg = 0x2fcc,
369         .halt_bit = 10,
370         .clkr = {
371                 .enable_reg = 0x29d4,
372                 .enable_mask = BIT(9),
373                 .hw.init = &(struct clk_init_data){
374                         .name = "gsbi1_uart_clk",
375                         .parent_names = (const char *[]){
376                                 "gsbi1_uart_src",
377                         },
378                         .num_parents = 1,
379                         .ops = &clk_branch_ops,
380                         .flags = CLK_SET_RATE_PARENT,
381                 },
382         },
383 };
384
385 static struct clk_rcg gsbi2_uart_src = {
386         .ns_reg = 0x29f4,
387         .md_reg = 0x29f0,
388         .mn = {
389                 .mnctr_en_bit = 8,
390                 .mnctr_reset_bit = 7,
391                 .mnctr_mode_shift = 5,
392                 .n_val_shift = 16,
393                 .m_val_shift = 16,
394                 .width = 16,
395         },
396         .p = {
397                 .pre_div_shift = 3,
398                 .pre_div_width = 2,
399         },
400         .s = {
401                 .src_sel_shift = 0,
402                 .parent_map = gcc_pxo_pll8_map,
403         },
404         .freq_tbl = clk_tbl_gsbi_uart,
405         .clkr = {
406                 .enable_reg = 0x29f4,
407                 .enable_mask = BIT(11),
408                 .hw.init = &(struct clk_init_data){
409                         .name = "gsbi2_uart_src",
410                         .parent_names = gcc_pxo_pll8,
411                         .num_parents = 2,
412                         .ops = &clk_rcg_ops,
413                         .flags = CLK_SET_PARENT_GATE,
414                 },
415         },
416 };
417
418 static struct clk_branch gsbi2_uart_clk = {
419         .halt_reg = 0x2fcc,
420         .halt_bit = 6,
421         .clkr = {
422                 .enable_reg = 0x29f4,
423                 .enable_mask = BIT(9),
424                 .hw.init = &(struct clk_init_data){
425                         .name = "gsbi2_uart_clk",
426                         .parent_names = (const char *[]){
427                                 "gsbi2_uart_src",
428                         },
429                         .num_parents = 1,
430                         .ops = &clk_branch_ops,
431                         .flags = CLK_SET_RATE_PARENT,
432                 },
433         },
434 };
435
436 static struct clk_rcg gsbi3_uart_src = {
437         .ns_reg = 0x2a14,
438         .md_reg = 0x2a10,
439         .mn = {
440                 .mnctr_en_bit = 8,
441                 .mnctr_reset_bit = 7,
442                 .mnctr_mode_shift = 5,
443                 .n_val_shift = 16,
444                 .m_val_shift = 16,
445                 .width = 16,
446         },
447         .p = {
448                 .pre_div_shift = 3,
449                 .pre_div_width = 2,
450         },
451         .s = {
452                 .src_sel_shift = 0,
453                 .parent_map = gcc_pxo_pll8_map,
454         },
455         .freq_tbl = clk_tbl_gsbi_uart,
456         .clkr = {
457                 .enable_reg = 0x2a14,
458                 .enable_mask = BIT(11),
459                 .hw.init = &(struct clk_init_data){
460                         .name = "gsbi3_uart_src",
461                         .parent_names = gcc_pxo_pll8,
462                         .num_parents = 2,
463                         .ops = &clk_rcg_ops,
464                         .flags = CLK_SET_PARENT_GATE,
465                 },
466         },
467 };
468
469 static struct clk_branch gsbi3_uart_clk = {
470         .halt_reg = 0x2fcc,
471         .halt_bit = 2,
472         .clkr = {
473                 .enable_reg = 0x2a14,
474                 .enable_mask = BIT(9),
475                 .hw.init = &(struct clk_init_data){
476                         .name = "gsbi3_uart_clk",
477                         .parent_names = (const char *[]){
478                                 "gsbi3_uart_src",
479                         },
480                         .num_parents = 1,
481                         .ops = &clk_branch_ops,
482                         .flags = CLK_SET_RATE_PARENT,
483                 },
484         },
485 };
486
487 static struct clk_rcg gsbi4_uart_src = {
488         .ns_reg = 0x2a34,
489         .md_reg = 0x2a30,
490         .mn = {
491                 .mnctr_en_bit = 8,
492                 .mnctr_reset_bit = 7,
493                 .mnctr_mode_shift = 5,
494                 .n_val_shift = 16,
495                 .m_val_shift = 16,
496                 .width = 16,
497         },
498         .p = {
499                 .pre_div_shift = 3,
500                 .pre_div_width = 2,
501         },
502         .s = {
503                 .src_sel_shift = 0,
504                 .parent_map = gcc_pxo_pll8_map,
505         },
506         .freq_tbl = clk_tbl_gsbi_uart,
507         .clkr = {
508                 .enable_reg = 0x2a34,
509                 .enable_mask = BIT(11),
510                 .hw.init = &(struct clk_init_data){
511                         .name = "gsbi4_uart_src",
512                         .parent_names = gcc_pxo_pll8,
513                         .num_parents = 2,
514                         .ops = &clk_rcg_ops,
515                         .flags = CLK_SET_PARENT_GATE,
516                 },
517         },
518 };
519
520 static struct clk_branch gsbi4_uart_clk = {
521         .halt_reg = 0x2fd0,
522         .halt_bit = 26,
523         .clkr = {
524                 .enable_reg = 0x2a34,
525                 .enable_mask = BIT(9),
526                 .hw.init = &(struct clk_init_data){
527                         .name = "gsbi4_uart_clk",
528                         .parent_names = (const char *[]){
529                                 "gsbi4_uart_src",
530                         },
531                         .num_parents = 1,
532                         .ops = &clk_branch_ops,
533                         .flags = CLK_SET_RATE_PARENT,
534                 },
535         },
536 };
537
538 static struct clk_rcg gsbi5_uart_src = {
539         .ns_reg = 0x2a54,
540         .md_reg = 0x2a50,
541         .mn = {
542                 .mnctr_en_bit = 8,
543                 .mnctr_reset_bit = 7,
544                 .mnctr_mode_shift = 5,
545                 .n_val_shift = 16,
546                 .m_val_shift = 16,
547                 .width = 16,
548         },
549         .p = {
550                 .pre_div_shift = 3,
551                 .pre_div_width = 2,
552         },
553         .s = {
554                 .src_sel_shift = 0,
555                 .parent_map = gcc_pxo_pll8_map,
556         },
557         .freq_tbl = clk_tbl_gsbi_uart,
558         .clkr = {
559                 .enable_reg = 0x2a54,
560                 .enable_mask = BIT(11),
561                 .hw.init = &(struct clk_init_data){
562                         .name = "gsbi5_uart_src",
563                         .parent_names = gcc_pxo_pll8,
564                         .num_parents = 2,
565                         .ops = &clk_rcg_ops,
566                         .flags = CLK_SET_PARENT_GATE,
567                 },
568         },
569 };
570
571 static struct clk_branch gsbi5_uart_clk = {
572         .halt_reg = 0x2fd0,
573         .halt_bit = 22,
574         .clkr = {
575                 .enable_reg = 0x2a54,
576                 .enable_mask = BIT(9),
577                 .hw.init = &(struct clk_init_data){
578                         .name = "gsbi5_uart_clk",
579                         .parent_names = (const char *[]){
580                                 "gsbi5_uart_src",
581                         },
582                         .num_parents = 1,
583                         .ops = &clk_branch_ops,
584                         .flags = CLK_SET_RATE_PARENT,
585                 },
586         },
587 };
588
589 static struct clk_rcg gsbi6_uart_src = {
590         .ns_reg = 0x2a74,
591         .md_reg = 0x2a70,
592         .mn = {
593                 .mnctr_en_bit = 8,
594                 .mnctr_reset_bit = 7,
595                 .mnctr_mode_shift = 5,
596                 .n_val_shift = 16,
597                 .m_val_shift = 16,
598                 .width = 16,
599         },
600         .p = {
601                 .pre_div_shift = 3,
602                 .pre_div_width = 2,
603         },
604         .s = {
605                 .src_sel_shift = 0,
606                 .parent_map = gcc_pxo_pll8_map,
607         },
608         .freq_tbl = clk_tbl_gsbi_uart,
609         .clkr = {
610                 .enable_reg = 0x2a74,
611                 .enable_mask = BIT(11),
612                 .hw.init = &(struct clk_init_data){
613                         .name = "gsbi6_uart_src",
614                         .parent_names = gcc_pxo_pll8,
615                         .num_parents = 2,
616                         .ops = &clk_rcg_ops,
617                         .flags = CLK_SET_PARENT_GATE,
618                 },
619         },
620 };
621
622 static struct clk_branch gsbi6_uart_clk = {
623         .halt_reg = 0x2fd0,
624         .halt_bit = 18,
625         .clkr = {
626                 .enable_reg = 0x2a74,
627                 .enable_mask = BIT(9),
628                 .hw.init = &(struct clk_init_data){
629                         .name = "gsbi6_uart_clk",
630                         .parent_names = (const char *[]){
631                                 "gsbi6_uart_src",
632                         },
633                         .num_parents = 1,
634                         .ops = &clk_branch_ops,
635                         .flags = CLK_SET_RATE_PARENT,
636                 },
637         },
638 };
639
640 static struct clk_rcg gsbi7_uart_src = {
641         .ns_reg = 0x2a94,
642         .md_reg = 0x2a90,
643         .mn = {
644                 .mnctr_en_bit = 8,
645                 .mnctr_reset_bit = 7,
646                 .mnctr_mode_shift = 5,
647                 .n_val_shift = 16,
648                 .m_val_shift = 16,
649                 .width = 16,
650         },
651         .p = {
652                 .pre_div_shift = 3,
653                 .pre_div_width = 2,
654         },
655         .s = {
656                 .src_sel_shift = 0,
657                 .parent_map = gcc_pxo_pll8_map,
658         },
659         .freq_tbl = clk_tbl_gsbi_uart,
660         .clkr = {
661                 .enable_reg = 0x2a94,
662                 .enable_mask = BIT(11),
663                 .hw.init = &(struct clk_init_data){
664                         .name = "gsbi7_uart_src",
665                         .parent_names = gcc_pxo_pll8,
666                         .num_parents = 2,
667                         .ops = &clk_rcg_ops,
668                         .flags = CLK_SET_PARENT_GATE,
669                 },
670         },
671 };
672
673 static struct clk_branch gsbi7_uart_clk = {
674         .halt_reg = 0x2fd0,
675         .halt_bit = 14,
676         .clkr = {
677                 .enable_reg = 0x2a94,
678                 .enable_mask = BIT(9),
679                 .hw.init = &(struct clk_init_data){
680                         .name = "gsbi7_uart_clk",
681                         .parent_names = (const char *[]){
682                                 "gsbi7_uart_src",
683                         },
684                         .num_parents = 1,
685                         .ops = &clk_branch_ops,
686                         .flags = CLK_SET_RATE_PARENT,
687                 },
688         },
689 };
690
691 static struct clk_rcg gsbi8_uart_src = {
692         .ns_reg = 0x2ab4,
693         .md_reg = 0x2ab0,
694         .mn = {
695                 .mnctr_en_bit = 8,
696                 .mnctr_reset_bit = 7,
697                 .mnctr_mode_shift = 5,
698                 .n_val_shift = 16,
699                 .m_val_shift = 16,
700                 .width = 16,
701         },
702         .p = {
703                 .pre_div_shift = 3,
704                 .pre_div_width = 2,
705         },
706         .s = {
707                 .src_sel_shift = 0,
708                 .parent_map = gcc_pxo_pll8_map,
709         },
710         .freq_tbl = clk_tbl_gsbi_uart,
711         .clkr = {
712                 .enable_reg = 0x2ab4,
713                 .enable_mask = BIT(11),
714                 .hw.init = &(struct clk_init_data){
715                         .name = "gsbi8_uart_src",
716                         .parent_names = gcc_pxo_pll8,
717                         .num_parents = 2,
718                         .ops = &clk_rcg_ops,
719                         .flags = CLK_SET_PARENT_GATE,
720                 },
721         },
722 };
723
724 static struct clk_branch gsbi8_uart_clk = {
725         .halt_reg = 0x2fd0,
726         .halt_bit = 10,
727         .clkr = {
728                 .enable_reg = 0x2ab4,
729                 .enable_mask = BIT(9),
730                 .hw.init = &(struct clk_init_data){
731                         .name = "gsbi8_uart_clk",
732                         .parent_names = (const char *[]){ "gsbi8_uart_src" },
733                         .num_parents = 1,
734                         .ops = &clk_branch_ops,
735                         .flags = CLK_SET_RATE_PARENT,
736                 },
737         },
738 };
739
740 static struct clk_rcg gsbi9_uart_src = {
741         .ns_reg = 0x2ad4,
742         .md_reg = 0x2ad0,
743         .mn = {
744                 .mnctr_en_bit = 8,
745                 .mnctr_reset_bit = 7,
746                 .mnctr_mode_shift = 5,
747                 .n_val_shift = 16,
748                 .m_val_shift = 16,
749                 .width = 16,
750         },
751         .p = {
752                 .pre_div_shift = 3,
753                 .pre_div_width = 2,
754         },
755         .s = {
756                 .src_sel_shift = 0,
757                 .parent_map = gcc_pxo_pll8_map,
758         },
759         .freq_tbl = clk_tbl_gsbi_uart,
760         .clkr = {
761                 .enable_reg = 0x2ad4,
762                 .enable_mask = BIT(11),
763                 .hw.init = &(struct clk_init_data){
764                         .name = "gsbi9_uart_src",
765                         .parent_names = gcc_pxo_pll8,
766                         .num_parents = 2,
767                         .ops = &clk_rcg_ops,
768                         .flags = CLK_SET_PARENT_GATE,
769                 },
770         },
771 };
772
773 static struct clk_branch gsbi9_uart_clk = {
774         .halt_reg = 0x2fd0,
775         .halt_bit = 6,
776         .clkr = {
777                 .enable_reg = 0x2ad4,
778                 .enable_mask = BIT(9),
779                 .hw.init = &(struct clk_init_data){
780                         .name = "gsbi9_uart_clk",
781                         .parent_names = (const char *[]){ "gsbi9_uart_src" },
782                         .num_parents = 1,
783                         .ops = &clk_branch_ops,
784                         .flags = CLK_SET_RATE_PARENT,
785                 },
786         },
787 };
788
789 static struct clk_rcg gsbi10_uart_src = {
790         .ns_reg = 0x2af4,
791         .md_reg = 0x2af0,
792         .mn = {
793                 .mnctr_en_bit = 8,
794                 .mnctr_reset_bit = 7,
795                 .mnctr_mode_shift = 5,
796                 .n_val_shift = 16,
797                 .m_val_shift = 16,
798                 .width = 16,
799         },
800         .p = {
801                 .pre_div_shift = 3,
802                 .pre_div_width = 2,
803         },
804         .s = {
805                 .src_sel_shift = 0,
806                 .parent_map = gcc_pxo_pll8_map,
807         },
808         .freq_tbl = clk_tbl_gsbi_uart,
809         .clkr = {
810                 .enable_reg = 0x2af4,
811                 .enable_mask = BIT(11),
812                 .hw.init = &(struct clk_init_data){
813                         .name = "gsbi10_uart_src",
814                         .parent_names = gcc_pxo_pll8,
815                         .num_parents = 2,
816                         .ops = &clk_rcg_ops,
817                         .flags = CLK_SET_PARENT_GATE,
818                 },
819         },
820 };
821
822 static struct clk_branch gsbi10_uart_clk = {
823         .halt_reg = 0x2fd0,
824         .halt_bit = 2,
825         .clkr = {
826                 .enable_reg = 0x2af4,
827                 .enable_mask = BIT(9),
828                 .hw.init = &(struct clk_init_data){
829                         .name = "gsbi10_uart_clk",
830                         .parent_names = (const char *[]){ "gsbi10_uart_src" },
831                         .num_parents = 1,
832                         .ops = &clk_branch_ops,
833                         .flags = CLK_SET_RATE_PARENT,
834                 },
835         },
836 };
837
838 static struct clk_rcg gsbi11_uart_src = {
839         .ns_reg = 0x2b14,
840         .md_reg = 0x2b10,
841         .mn = {
842                 .mnctr_en_bit = 8,
843                 .mnctr_reset_bit = 7,
844                 .mnctr_mode_shift = 5,
845                 .n_val_shift = 16,
846                 .m_val_shift = 16,
847                 .width = 16,
848         },
849         .p = {
850                 .pre_div_shift = 3,
851                 .pre_div_width = 2,
852         },
853         .s = {
854                 .src_sel_shift = 0,
855                 .parent_map = gcc_pxo_pll8_map,
856         },
857         .freq_tbl = clk_tbl_gsbi_uart,
858         .clkr = {
859                 .enable_reg = 0x2b14,
860                 .enable_mask = BIT(11),
861                 .hw.init = &(struct clk_init_data){
862                         .name = "gsbi11_uart_src",
863                         .parent_names = gcc_pxo_pll8,
864                         .num_parents = 2,
865                         .ops = &clk_rcg_ops,
866                         .flags = CLK_SET_PARENT_GATE,
867                 },
868         },
869 };
870
871 static struct clk_branch gsbi11_uart_clk = {
872         .halt_reg = 0x2fd4,
873         .halt_bit = 17,
874         .clkr = {
875                 .enable_reg = 0x2b14,
876                 .enable_mask = BIT(9),
877                 .hw.init = &(struct clk_init_data){
878                         .name = "gsbi11_uart_clk",
879                         .parent_names = (const char *[]){ "gsbi11_uart_src" },
880                         .num_parents = 1,
881                         .ops = &clk_branch_ops,
882                         .flags = CLK_SET_RATE_PARENT,
883                 },
884         },
885 };
886
887 static struct clk_rcg gsbi12_uart_src = {
888         .ns_reg = 0x2b34,
889         .md_reg = 0x2b30,
890         .mn = {
891                 .mnctr_en_bit = 8,
892                 .mnctr_reset_bit = 7,
893                 .mnctr_mode_shift = 5,
894                 .n_val_shift = 16,
895                 .m_val_shift = 16,
896                 .width = 16,
897         },
898         .p = {
899                 .pre_div_shift = 3,
900                 .pre_div_width = 2,
901         },
902         .s = {
903                 .src_sel_shift = 0,
904                 .parent_map = gcc_pxo_pll8_map,
905         },
906         .freq_tbl = clk_tbl_gsbi_uart,
907         .clkr = {
908                 .enable_reg = 0x2b34,
909                 .enable_mask = BIT(11),
910                 .hw.init = &(struct clk_init_data){
911                         .name = "gsbi12_uart_src",
912                         .parent_names = gcc_pxo_pll8,
913                         .num_parents = 2,
914                         .ops = &clk_rcg_ops,
915                         .flags = CLK_SET_PARENT_GATE,
916                 },
917         },
918 };
919
920 static struct clk_branch gsbi12_uart_clk = {
921         .halt_reg = 0x2fd4,
922         .halt_bit = 13,
923         .clkr = {
924                 .enable_reg = 0x2b34,
925                 .enable_mask = BIT(9),
926                 .hw.init = &(struct clk_init_data){
927                         .name = "gsbi12_uart_clk",
928                         .parent_names = (const char *[]){ "gsbi12_uart_src" },
929                         .num_parents = 1,
930                         .ops = &clk_branch_ops,
931                         .flags = CLK_SET_RATE_PARENT,
932                 },
933         },
934 };
935
936 static struct freq_tbl clk_tbl_gsbi_qup[] = {
937         {  1100000, P_PXO,  1, 2, 49 },
938         {  5400000, P_PXO,  1, 1,  5 },
939         { 10800000, P_PXO,  1, 2,  5 },
940         { 15060000, P_PLL8, 1, 2, 51 },
941         { 24000000, P_PLL8, 4, 1,  4 },
942         { 25600000, P_PLL8, 1, 1, 15 },
943         { 27000000, P_PXO,  1, 0,  0 },
944         { 48000000, P_PLL8, 4, 1,  2 },
945         { 51200000, P_PLL8, 1, 2, 15 },
946         { }
947 };
948
949 static struct clk_rcg gsbi1_qup_src = {
950         .ns_reg = 0x29cc,
951         .md_reg = 0x29c8,
952         .mn = {
953                 .mnctr_en_bit = 8,
954                 .mnctr_reset_bit = 7,
955                 .mnctr_mode_shift = 5,
956                 .n_val_shift = 16,
957                 .m_val_shift = 16,
958                 .width = 8,
959         },
960         .p = {
961                 .pre_div_shift = 3,
962                 .pre_div_width = 2,
963         },
964         .s = {
965                 .src_sel_shift = 0,
966                 .parent_map = gcc_pxo_pll8_map,
967         },
968         .freq_tbl = clk_tbl_gsbi_qup,
969         .clkr = {
970                 .enable_reg = 0x29cc,
971                 .enable_mask = BIT(11),
972                 .hw.init = &(struct clk_init_data){
973                         .name = "gsbi1_qup_src",
974                         .parent_names = gcc_pxo_pll8,
975                         .num_parents = 2,
976                         .ops = &clk_rcg_ops,
977                         .flags = CLK_SET_PARENT_GATE,
978                 },
979         },
980 };
981
982 static struct clk_branch gsbi1_qup_clk = {
983         .halt_reg = 0x2fcc,
984         .halt_bit = 9,
985         .clkr = {
986                 .enable_reg = 0x29cc,
987                 .enable_mask = BIT(9),
988                 .hw.init = &(struct clk_init_data){
989                         .name = "gsbi1_qup_clk",
990                         .parent_names = (const char *[]){ "gsbi1_qup_src" },
991                         .num_parents = 1,
992                         .ops = &clk_branch_ops,
993                         .flags = CLK_SET_RATE_PARENT,
994                 },
995         },
996 };
997
998 static struct clk_rcg gsbi2_qup_src = {
999         .ns_reg = 0x29ec,
1000         .md_reg = 0x29e8,
1001         .mn = {
1002                 .mnctr_en_bit = 8,
1003                 .mnctr_reset_bit = 7,
1004                 .mnctr_mode_shift = 5,
1005                 .n_val_shift = 16,
1006                 .m_val_shift = 16,
1007                 .width = 8,
1008         },
1009         .p = {
1010                 .pre_div_shift = 3,
1011                 .pre_div_width = 2,
1012         },
1013         .s = {
1014                 .src_sel_shift = 0,
1015                 .parent_map = gcc_pxo_pll8_map,
1016         },
1017         .freq_tbl = clk_tbl_gsbi_qup,
1018         .clkr = {
1019                 .enable_reg = 0x29ec,
1020                 .enable_mask = BIT(11),
1021                 .hw.init = &(struct clk_init_data){
1022                         .name = "gsbi2_qup_src",
1023                         .parent_names = gcc_pxo_pll8,
1024                         .num_parents = 2,
1025                         .ops = &clk_rcg_ops,
1026                         .flags = CLK_SET_PARENT_GATE,
1027                 },
1028         },
1029 };
1030
1031 static struct clk_branch gsbi2_qup_clk = {
1032         .halt_reg = 0x2fcc,
1033         .halt_bit = 4,
1034         .clkr = {
1035                 .enable_reg = 0x29ec,
1036                 .enable_mask = BIT(9),
1037                 .hw.init = &(struct clk_init_data){
1038                         .name = "gsbi2_qup_clk",
1039                         .parent_names = (const char *[]){ "gsbi2_qup_src" },
1040                         .num_parents = 1,
1041                         .ops = &clk_branch_ops,
1042                         .flags = CLK_SET_RATE_PARENT,
1043                 },
1044         },
1045 };
1046
1047 static struct clk_rcg gsbi3_qup_src = {
1048         .ns_reg = 0x2a0c,
1049         .md_reg = 0x2a08,
1050         .mn = {
1051                 .mnctr_en_bit = 8,
1052                 .mnctr_reset_bit = 7,
1053                 .mnctr_mode_shift = 5,
1054                 .n_val_shift = 16,
1055                 .m_val_shift = 16,
1056                 .width = 8,
1057         },
1058         .p = {
1059                 .pre_div_shift = 3,
1060                 .pre_div_width = 2,
1061         },
1062         .s = {
1063                 .src_sel_shift = 0,
1064                 .parent_map = gcc_pxo_pll8_map,
1065         },
1066         .freq_tbl = clk_tbl_gsbi_qup,
1067         .clkr = {
1068                 .enable_reg = 0x2a0c,
1069                 .enable_mask = BIT(11),
1070                 .hw.init = &(struct clk_init_data){
1071                         .name = "gsbi3_qup_src",
1072                         .parent_names = gcc_pxo_pll8,
1073                         .num_parents = 2,
1074                         .ops = &clk_rcg_ops,
1075                         .flags = CLK_SET_PARENT_GATE,
1076                 },
1077         },
1078 };
1079
1080 static struct clk_branch gsbi3_qup_clk = {
1081         .halt_reg = 0x2fcc,
1082         .halt_bit = 0,
1083         .clkr = {
1084                 .enable_reg = 0x2a0c,
1085                 .enable_mask = BIT(9),
1086                 .hw.init = &(struct clk_init_data){
1087                         .name = "gsbi3_qup_clk",
1088                         .parent_names = (const char *[]){ "gsbi3_qup_src" },
1089                         .num_parents = 1,
1090                         .ops = &clk_branch_ops,
1091                         .flags = CLK_SET_RATE_PARENT,
1092                 },
1093         },
1094 };
1095
1096 static struct clk_rcg gsbi4_qup_src = {
1097         .ns_reg = 0x2a2c,
1098         .md_reg = 0x2a28,
1099         .mn = {
1100                 .mnctr_en_bit = 8,
1101                 .mnctr_reset_bit = 7,
1102                 .mnctr_mode_shift = 5,
1103                 .n_val_shift = 16,
1104                 .m_val_shift = 16,
1105                 .width = 8,
1106         },
1107         .p = {
1108                 .pre_div_shift = 3,
1109                 .pre_div_width = 2,
1110         },
1111         .s = {
1112                 .src_sel_shift = 0,
1113                 .parent_map = gcc_pxo_pll8_map,
1114         },
1115         .freq_tbl = clk_tbl_gsbi_qup,
1116         .clkr = {
1117                 .enable_reg = 0x2a2c,
1118                 .enable_mask = BIT(11),
1119                 .hw.init = &(struct clk_init_data){
1120                         .name = "gsbi4_qup_src",
1121                         .parent_names = gcc_pxo_pll8,
1122                         .num_parents = 2,
1123                         .ops = &clk_rcg_ops,
1124                         .flags = CLK_SET_PARENT_GATE,
1125                 },
1126         },
1127 };
1128
1129 static struct clk_branch gsbi4_qup_clk = {
1130         .halt_reg = 0x2fd0,
1131         .halt_bit = 24,
1132         .clkr = {
1133                 .enable_reg = 0x2a2c,
1134                 .enable_mask = BIT(9),
1135                 .hw.init = &(struct clk_init_data){
1136                         .name = "gsbi4_qup_clk",
1137                         .parent_names = (const char *[]){ "gsbi4_qup_src" },
1138                         .num_parents = 1,
1139                         .ops = &clk_branch_ops,
1140                         .flags = CLK_SET_RATE_PARENT,
1141                 },
1142         },
1143 };
1144
1145 static struct clk_rcg gsbi5_qup_src = {
1146         .ns_reg = 0x2a4c,
1147         .md_reg = 0x2a48,
1148         .mn = {
1149                 .mnctr_en_bit = 8,
1150                 .mnctr_reset_bit = 7,
1151                 .mnctr_mode_shift = 5,
1152                 .n_val_shift = 16,
1153                 .m_val_shift = 16,
1154                 .width = 8,
1155         },
1156         .p = {
1157                 .pre_div_shift = 3,
1158                 .pre_div_width = 2,
1159         },
1160         .s = {
1161                 .src_sel_shift = 0,
1162                 .parent_map = gcc_pxo_pll8_map,
1163         },
1164         .freq_tbl = clk_tbl_gsbi_qup,
1165         .clkr = {
1166                 .enable_reg = 0x2a4c,
1167                 .enable_mask = BIT(11),
1168                 .hw.init = &(struct clk_init_data){
1169                         .name = "gsbi5_qup_src",
1170                         .parent_names = gcc_pxo_pll8,
1171                         .num_parents = 2,
1172                         .ops = &clk_rcg_ops,
1173                         .flags = CLK_SET_PARENT_GATE,
1174                 },
1175         },
1176 };
1177
1178 static struct clk_branch gsbi5_qup_clk = {
1179         .halt_reg = 0x2fd0,
1180         .halt_bit = 20,
1181         .clkr = {
1182                 .enable_reg = 0x2a4c,
1183                 .enable_mask = BIT(9),
1184                 .hw.init = &(struct clk_init_data){
1185                         .name = "gsbi5_qup_clk",
1186                         .parent_names = (const char *[]){ "gsbi5_qup_src" },
1187                         .num_parents = 1,
1188                         .ops = &clk_branch_ops,
1189                         .flags = CLK_SET_RATE_PARENT,
1190                 },
1191         },
1192 };
1193
1194 static struct clk_rcg gsbi6_qup_src = {
1195         .ns_reg = 0x2a6c,
1196         .md_reg = 0x2a68,
1197         .mn = {
1198                 .mnctr_en_bit = 8,
1199                 .mnctr_reset_bit = 7,
1200                 .mnctr_mode_shift = 5,
1201                 .n_val_shift = 16,
1202                 .m_val_shift = 16,
1203                 .width = 8,
1204         },
1205         .p = {
1206                 .pre_div_shift = 3,
1207                 .pre_div_width = 2,
1208         },
1209         .s = {
1210                 .src_sel_shift = 0,
1211                 .parent_map = gcc_pxo_pll8_map,
1212         },
1213         .freq_tbl = clk_tbl_gsbi_qup,
1214         .clkr = {
1215                 .enable_reg = 0x2a6c,
1216                 .enable_mask = BIT(11),
1217                 .hw.init = &(struct clk_init_data){
1218                         .name = "gsbi6_qup_src",
1219                         .parent_names = gcc_pxo_pll8,
1220                         .num_parents = 2,
1221                         .ops = &clk_rcg_ops,
1222                         .flags = CLK_SET_PARENT_GATE,
1223                 },
1224         },
1225 };
1226
1227 static struct clk_branch gsbi6_qup_clk = {
1228         .halt_reg = 0x2fd0,
1229         .halt_bit = 16,
1230         .clkr = {
1231                 .enable_reg = 0x2a6c,
1232                 .enable_mask = BIT(9),
1233                 .hw.init = &(struct clk_init_data){
1234                         .name = "gsbi6_qup_clk",
1235                         .parent_names = (const char *[]){ "gsbi6_qup_src" },
1236                         .num_parents = 1,
1237                         .ops = &clk_branch_ops,
1238                         .flags = CLK_SET_RATE_PARENT,
1239                 },
1240         },
1241 };
1242
1243 static struct clk_rcg gsbi7_qup_src = {
1244         .ns_reg = 0x2a8c,
1245         .md_reg = 0x2a88,
1246         .mn = {
1247                 .mnctr_en_bit = 8,
1248                 .mnctr_reset_bit = 7,
1249                 .mnctr_mode_shift = 5,
1250                 .n_val_shift = 16,
1251                 .m_val_shift = 16,
1252                 .width = 8,
1253         },
1254         .p = {
1255                 .pre_div_shift = 3,
1256                 .pre_div_width = 2,
1257         },
1258         .s = {
1259                 .src_sel_shift = 0,
1260                 .parent_map = gcc_pxo_pll8_map,
1261         },
1262         .freq_tbl = clk_tbl_gsbi_qup,
1263         .clkr = {
1264                 .enable_reg = 0x2a8c,
1265                 .enable_mask = BIT(11),
1266                 .hw.init = &(struct clk_init_data){
1267                         .name = "gsbi7_qup_src",
1268                         .parent_names = gcc_pxo_pll8,
1269                         .num_parents = 2,
1270                         .ops = &clk_rcg_ops,
1271                         .flags = CLK_SET_PARENT_GATE,
1272                 },
1273         },
1274 };
1275
1276 static struct clk_branch gsbi7_qup_clk = {
1277         .halt_reg = 0x2fd0,
1278         .halt_bit = 12,
1279         .clkr = {
1280                 .enable_reg = 0x2a8c,
1281                 .enable_mask = BIT(9),
1282                 .hw.init = &(struct clk_init_data){
1283                         .name = "gsbi7_qup_clk",
1284                         .parent_names = (const char *[]){ "gsbi7_qup_src" },
1285                         .num_parents = 1,
1286                         .ops = &clk_branch_ops,
1287                         .flags = CLK_SET_RATE_PARENT,
1288                 },
1289         },
1290 };
1291
1292 static struct clk_rcg gsbi8_qup_src = {
1293         .ns_reg = 0x2aac,
1294         .md_reg = 0x2aa8,
1295         .mn = {
1296                 .mnctr_en_bit = 8,
1297                 .mnctr_reset_bit = 7,
1298                 .mnctr_mode_shift = 5,
1299                 .n_val_shift = 16,
1300                 .m_val_shift = 16,
1301                 .width = 8,
1302         },
1303         .p = {
1304                 .pre_div_shift = 3,
1305                 .pre_div_width = 2,
1306         },
1307         .s = {
1308                 .src_sel_shift = 0,
1309                 .parent_map = gcc_pxo_pll8_map,
1310         },
1311         .freq_tbl = clk_tbl_gsbi_qup,
1312         .clkr = {
1313                 .enable_reg = 0x2aac,
1314                 .enable_mask = BIT(11),
1315                 .hw.init = &(struct clk_init_data){
1316                         .name = "gsbi8_qup_src",
1317                         .parent_names = gcc_pxo_pll8,
1318                         .num_parents = 2,
1319                         .ops = &clk_rcg_ops,
1320                         .flags = CLK_SET_PARENT_GATE,
1321                 },
1322         },
1323 };
1324
1325 static struct clk_branch gsbi8_qup_clk = {
1326         .halt_reg = 0x2fd0,
1327         .halt_bit = 8,
1328         .clkr = {
1329                 .enable_reg = 0x2aac,
1330                 .enable_mask = BIT(9),
1331                 .hw.init = &(struct clk_init_data){
1332                         .name = "gsbi8_qup_clk",
1333                         .parent_names = (const char *[]){ "gsbi8_qup_src" },
1334                         .num_parents = 1,
1335                         .ops = &clk_branch_ops,
1336                         .flags = CLK_SET_RATE_PARENT,
1337                 },
1338         },
1339 };
1340
1341 static struct clk_rcg gsbi9_qup_src = {
1342         .ns_reg = 0x2acc,
1343         .md_reg = 0x2ac8,
1344         .mn = {
1345                 .mnctr_en_bit = 8,
1346                 .mnctr_reset_bit = 7,
1347                 .mnctr_mode_shift = 5,
1348                 .n_val_shift = 16,
1349                 .m_val_shift = 16,
1350                 .width = 8,
1351         },
1352         .p = {
1353                 .pre_div_shift = 3,
1354                 .pre_div_width = 2,
1355         },
1356         .s = {
1357                 .src_sel_shift = 0,
1358                 .parent_map = gcc_pxo_pll8_map,
1359         },
1360         .freq_tbl = clk_tbl_gsbi_qup,
1361         .clkr = {
1362                 .enable_reg = 0x2acc,
1363                 .enable_mask = BIT(11),
1364                 .hw.init = &(struct clk_init_data){
1365                         .name = "gsbi9_qup_src",
1366                         .parent_names = gcc_pxo_pll8,
1367                         .num_parents = 2,
1368                         .ops = &clk_rcg_ops,
1369                         .flags = CLK_SET_PARENT_GATE,
1370                 },
1371         },
1372 };
1373
1374 static struct clk_branch gsbi9_qup_clk = {
1375         .halt_reg = 0x2fd0,
1376         .halt_bit = 4,
1377         .clkr = {
1378                 .enable_reg = 0x2acc,
1379                 .enable_mask = BIT(9),
1380                 .hw.init = &(struct clk_init_data){
1381                         .name = "gsbi9_qup_clk",
1382                         .parent_names = (const char *[]){ "gsbi9_qup_src" },
1383                         .num_parents = 1,
1384                         .ops = &clk_branch_ops,
1385                         .flags = CLK_SET_RATE_PARENT,
1386                 },
1387         },
1388 };
1389
1390 static struct clk_rcg gsbi10_qup_src = {
1391         .ns_reg = 0x2aec,
1392         .md_reg = 0x2ae8,
1393         .mn = {
1394                 .mnctr_en_bit = 8,
1395                 .mnctr_reset_bit = 7,
1396                 .mnctr_mode_shift = 5,
1397                 .n_val_shift = 16,
1398                 .m_val_shift = 16,
1399                 .width = 8,
1400         },
1401         .p = {
1402                 .pre_div_shift = 3,
1403                 .pre_div_width = 2,
1404         },
1405         .s = {
1406                 .src_sel_shift = 0,
1407                 .parent_map = gcc_pxo_pll8_map,
1408         },
1409         .freq_tbl = clk_tbl_gsbi_qup,
1410         .clkr = {
1411                 .enable_reg = 0x2aec,
1412                 .enable_mask = BIT(11),
1413                 .hw.init = &(struct clk_init_data){
1414                         .name = "gsbi10_qup_src",
1415                         .parent_names = gcc_pxo_pll8,
1416                         .num_parents = 2,
1417                         .ops = &clk_rcg_ops,
1418                         .flags = CLK_SET_PARENT_GATE,
1419                 },
1420         },
1421 };
1422
1423 static struct clk_branch gsbi10_qup_clk = {
1424         .halt_reg = 0x2fd0,
1425         .halt_bit = 0,
1426         .clkr = {
1427                 .enable_reg = 0x2aec,
1428                 .enable_mask = BIT(9),
1429                 .hw.init = &(struct clk_init_data){
1430                         .name = "gsbi10_qup_clk",
1431                         .parent_names = (const char *[]){ "gsbi10_qup_src" },
1432                         .num_parents = 1,
1433                         .ops = &clk_branch_ops,
1434                         .flags = CLK_SET_RATE_PARENT,
1435                 },
1436         },
1437 };
1438
1439 static struct clk_rcg gsbi11_qup_src = {
1440         .ns_reg = 0x2b0c,
1441         .md_reg = 0x2b08,
1442         .mn = {
1443                 .mnctr_en_bit = 8,
1444                 .mnctr_reset_bit = 7,
1445                 .mnctr_mode_shift = 5,
1446                 .n_val_shift = 16,
1447                 .m_val_shift = 16,
1448                 .width = 8,
1449         },
1450         .p = {
1451                 .pre_div_shift = 3,
1452                 .pre_div_width = 2,
1453         },
1454         .s = {
1455                 .src_sel_shift = 0,
1456                 .parent_map = gcc_pxo_pll8_map,
1457         },
1458         .freq_tbl = clk_tbl_gsbi_qup,
1459         .clkr = {
1460                 .enable_reg = 0x2b0c,
1461                 .enable_mask = BIT(11),
1462                 .hw.init = &(struct clk_init_data){
1463                         .name = "gsbi11_qup_src",
1464                         .parent_names = gcc_pxo_pll8,
1465                         .num_parents = 2,
1466                         .ops = &clk_rcg_ops,
1467                         .flags = CLK_SET_PARENT_GATE,
1468                 },
1469         },
1470 };
1471
1472 static struct clk_branch gsbi11_qup_clk = {
1473         .halt_reg = 0x2fd4,
1474         .halt_bit = 15,
1475         .clkr = {
1476                 .enable_reg = 0x2b0c,
1477                 .enable_mask = BIT(9),
1478                 .hw.init = &(struct clk_init_data){
1479                         .name = "gsbi11_qup_clk",
1480                         .parent_names = (const char *[]){ "gsbi11_qup_src" },
1481                         .num_parents = 1,
1482                         .ops = &clk_branch_ops,
1483                         .flags = CLK_SET_RATE_PARENT,
1484                 },
1485         },
1486 };
1487
1488 static struct clk_rcg gsbi12_qup_src = {
1489         .ns_reg = 0x2b2c,
1490         .md_reg = 0x2b28,
1491         .mn = {
1492                 .mnctr_en_bit = 8,
1493                 .mnctr_reset_bit = 7,
1494                 .mnctr_mode_shift = 5,
1495                 .n_val_shift = 16,
1496                 .m_val_shift = 16,
1497                 .width = 8,
1498         },
1499         .p = {
1500                 .pre_div_shift = 3,
1501                 .pre_div_width = 2,
1502         },
1503         .s = {
1504                 .src_sel_shift = 0,
1505                 .parent_map = gcc_pxo_pll8_map,
1506         },
1507         .freq_tbl = clk_tbl_gsbi_qup,
1508         .clkr = {
1509                 .enable_reg = 0x2b2c,
1510                 .enable_mask = BIT(11),
1511                 .hw.init = &(struct clk_init_data){
1512                         .name = "gsbi12_qup_src",
1513                         .parent_names = gcc_pxo_pll8,
1514                         .num_parents = 2,
1515                         .ops = &clk_rcg_ops,
1516                         .flags = CLK_SET_PARENT_GATE,
1517                 },
1518         },
1519 };
1520
1521 static struct clk_branch gsbi12_qup_clk = {
1522         .halt_reg = 0x2fd4,
1523         .halt_bit = 11,
1524         .clkr = {
1525                 .enable_reg = 0x2b2c,
1526                 .enable_mask = BIT(9),
1527                 .hw.init = &(struct clk_init_data){
1528                         .name = "gsbi12_qup_clk",
1529                         .parent_names = (const char *[]){ "gsbi12_qup_src" },
1530                         .num_parents = 1,
1531                         .ops = &clk_branch_ops,
1532                         .flags = CLK_SET_RATE_PARENT,
1533                 },
1534         },
1535 };
1536
1537 static const struct freq_tbl clk_tbl_gp[] = {
1538         { 9600000, P_CXO,  2, 0, 0 },
1539         { 13500000, P_PXO,  2, 0, 0 },
1540         { 19200000, P_CXO,  1, 0, 0 },
1541         { 27000000, P_PXO,  1, 0, 0 },
1542         { 64000000, P_PLL8, 2, 1, 3 },
1543         { 76800000, P_PLL8, 1, 1, 5 },
1544         { 96000000, P_PLL8, 4, 0, 0 },
1545         { 128000000, P_PLL8, 3, 0, 0 },
1546         { 192000000, P_PLL8, 2, 0, 0 },
1547         { }
1548 };
1549
1550 static struct clk_rcg gp0_src = {
1551         .ns_reg = 0x2d24,
1552         .md_reg = 0x2d00,
1553         .mn = {
1554                 .mnctr_en_bit = 8,
1555                 .mnctr_reset_bit = 7,
1556                 .mnctr_mode_shift = 5,
1557                 .n_val_shift = 16,
1558                 .m_val_shift = 16,
1559                 .width = 8,
1560         },
1561         .p = {
1562                 .pre_div_shift = 3,
1563                 .pre_div_width = 2,
1564         },
1565         .s = {
1566                 .src_sel_shift = 0,
1567                 .parent_map = gcc_pxo_pll8_cxo_map,
1568         },
1569         .freq_tbl = clk_tbl_gp,
1570         .clkr = {
1571                 .enable_reg = 0x2d24,
1572                 .enable_mask = BIT(11),
1573                 .hw.init = &(struct clk_init_data){
1574                         .name = "gp0_src",
1575                         .parent_names = gcc_pxo_pll8_cxo,
1576                         .num_parents = 3,
1577                         .ops = &clk_rcg_ops,
1578                         .flags = CLK_SET_PARENT_GATE,
1579                 },
1580         }
1581 };
1582
1583 static struct clk_branch gp0_clk = {
1584         .halt_reg = 0x2fd8,
1585         .halt_bit = 7,
1586         .clkr = {
1587                 .enable_reg = 0x2d24,
1588                 .enable_mask = BIT(9),
1589                 .hw.init = &(struct clk_init_data){
1590                         .name = "gp0_clk",
1591                         .parent_names = (const char *[]){ "gp0_src" },
1592                         .num_parents = 1,
1593                         .ops = &clk_branch_ops,
1594                         .flags = CLK_SET_RATE_PARENT,
1595                 },
1596         },
1597 };
1598
1599 static struct clk_rcg gp1_src = {
1600         .ns_reg = 0x2d44,
1601         .md_reg = 0x2d40,
1602         .mn = {
1603                 .mnctr_en_bit = 8,
1604                 .mnctr_reset_bit = 7,
1605                 .mnctr_mode_shift = 5,
1606                 .n_val_shift = 16,
1607                 .m_val_shift = 16,
1608                 .width = 8,
1609         },
1610         .p = {
1611                 .pre_div_shift = 3,
1612                 .pre_div_width = 2,
1613         },
1614         .s = {
1615                 .src_sel_shift = 0,
1616                 .parent_map = gcc_pxo_pll8_cxo_map,
1617         },
1618         .freq_tbl = clk_tbl_gp,
1619         .clkr = {
1620                 .enable_reg = 0x2d44,
1621                 .enable_mask = BIT(11),
1622                 .hw.init = &(struct clk_init_data){
1623                         .name = "gp1_src",
1624                         .parent_names = gcc_pxo_pll8_cxo,
1625                         .num_parents = 3,
1626                         .ops = &clk_rcg_ops,
1627                         .flags = CLK_SET_RATE_GATE,
1628                 },
1629         }
1630 };
1631
1632 static struct clk_branch gp1_clk = {
1633         .halt_reg = 0x2fd8,
1634         .halt_bit = 6,
1635         .clkr = {
1636                 .enable_reg = 0x2d44,
1637                 .enable_mask = BIT(9),
1638                 .hw.init = &(struct clk_init_data){
1639                         .name = "gp1_clk",
1640                         .parent_names = (const char *[]){ "gp1_src" },
1641                         .num_parents = 1,
1642                         .ops = &clk_branch_ops,
1643                         .flags = CLK_SET_RATE_PARENT,
1644                 },
1645         },
1646 };
1647
1648 static struct clk_rcg gp2_src = {
1649         .ns_reg = 0x2d64,
1650         .md_reg = 0x2d60,
1651         .mn = {
1652                 .mnctr_en_bit = 8,
1653                 .mnctr_reset_bit = 7,
1654                 .mnctr_mode_shift = 5,
1655                 .n_val_shift = 16,
1656                 .m_val_shift = 16,
1657                 .width = 8,
1658         },
1659         .p = {
1660                 .pre_div_shift = 3,
1661                 .pre_div_width = 2,
1662         },
1663         .s = {
1664                 .src_sel_shift = 0,
1665                 .parent_map = gcc_pxo_pll8_cxo_map,
1666         },
1667         .freq_tbl = clk_tbl_gp,
1668         .clkr = {
1669                 .enable_reg = 0x2d64,
1670                 .enable_mask = BIT(11),
1671                 .hw.init = &(struct clk_init_data){
1672                         .name = "gp2_src",
1673                         .parent_names = gcc_pxo_pll8_cxo,
1674                         .num_parents = 3,
1675                         .ops = &clk_rcg_ops,
1676                         .flags = CLK_SET_RATE_GATE,
1677                 },
1678         }
1679 };
1680
1681 static struct clk_branch gp2_clk = {
1682         .halt_reg = 0x2fd8,
1683         .halt_bit = 5,
1684         .clkr = {
1685                 .enable_reg = 0x2d64,
1686                 .enable_mask = BIT(9),
1687                 .hw.init = &(struct clk_init_data){
1688                         .name = "gp2_clk",
1689                         .parent_names = (const char *[]){ "gp2_src" },
1690                         .num_parents = 1,
1691                         .ops = &clk_branch_ops,
1692                         .flags = CLK_SET_RATE_PARENT,
1693                 },
1694         },
1695 };
1696
1697 static struct clk_branch pmem_clk = {
1698         .hwcg_reg = 0x25a0,
1699         .hwcg_bit = 6,
1700         .halt_reg = 0x2fc8,
1701         .halt_bit = 20,
1702         .clkr = {
1703                 .enable_reg = 0x25a0,
1704                 .enable_mask = BIT(4),
1705                 .hw.init = &(struct clk_init_data){
1706                         .name = "pmem_clk",
1707                         .ops = &clk_branch_ops,
1708                 },
1709         },
1710 };
1711
1712 static struct clk_rcg prng_src = {
1713         .ns_reg = 0x2e80,
1714         .p = {
1715                 .pre_div_shift = 3,
1716                 .pre_div_width = 4,
1717         },
1718         .s = {
1719                 .src_sel_shift = 0,
1720                 .parent_map = gcc_pxo_pll8_map,
1721         },
1722         .clkr = {
1723                 .hw.init = &(struct clk_init_data){
1724                         .name = "prng_src",
1725                         .parent_names = gcc_pxo_pll8,
1726                         .num_parents = 2,
1727                         .ops = &clk_rcg_ops,
1728                 },
1729         },
1730 };
1731
1732 static struct clk_branch prng_clk = {
1733         .halt_reg = 0x2fd8,
1734         .halt_check = BRANCH_HALT_VOTED,
1735         .halt_bit = 10,
1736         .clkr = {
1737                 .enable_reg = 0x3080,
1738                 .enable_mask = BIT(10),
1739                 .hw.init = &(struct clk_init_data){
1740                         .name = "prng_clk",
1741                         .parent_names = (const char *[]){ "prng_src" },
1742                         .num_parents = 1,
1743                         .ops = &clk_branch_ops,
1744                 },
1745         },
1746 };
1747
1748 static const struct freq_tbl clk_tbl_sdc[] = {
1749         {    144000, P_PXO,   3, 2, 125 },
1750         {    400000, P_PLL8,  4, 1, 240 },
1751         {  16000000, P_PLL8,  4, 1,   6 },
1752         {  17070000, P_PLL8,  1, 2,  45 },
1753         {  20210000, P_PLL8,  1, 1,  19 },
1754         {  24000000, P_PLL8,  4, 1,   4 },
1755         {  48000000, P_PLL8,  4, 1,   2 },
1756         {  64000000, P_PLL8,  3, 1,   2 },
1757         {  96000000, P_PLL8,  4, 0,   0 },
1758         { 192000000, P_PLL8,  2, 0,   0 },
1759         { }
1760 };
1761
1762 static struct clk_rcg sdc1_src = {
1763         .ns_reg = 0x282c,
1764         .md_reg = 0x2828,
1765         .mn = {
1766                 .mnctr_en_bit = 8,
1767                 .mnctr_reset_bit = 7,
1768                 .mnctr_mode_shift = 5,
1769                 .n_val_shift = 16,
1770                 .m_val_shift = 16,
1771                 .width = 8,
1772         },
1773         .p = {
1774                 .pre_div_shift = 3,
1775                 .pre_div_width = 2,
1776         },
1777         .s = {
1778                 .src_sel_shift = 0,
1779                 .parent_map = gcc_pxo_pll8_map,
1780         },
1781         .freq_tbl = clk_tbl_sdc,
1782         .clkr = {
1783                 .enable_reg = 0x282c,
1784                 .enable_mask = BIT(11),
1785                 .hw.init = &(struct clk_init_data){
1786                         .name = "sdc1_src",
1787                         .parent_names = gcc_pxo_pll8,
1788                         .num_parents = 2,
1789                         .ops = &clk_rcg_ops,
1790                 },
1791         }
1792 };
1793
1794 static struct clk_branch sdc1_clk = {
1795         .halt_reg = 0x2fc8,
1796         .halt_bit = 6,
1797         .clkr = {
1798                 .enable_reg = 0x282c,
1799                 .enable_mask = BIT(9),
1800                 .hw.init = &(struct clk_init_data){
1801                         .name = "sdc1_clk",
1802                         .parent_names = (const char *[]){ "sdc1_src" },
1803                         .num_parents = 1,
1804                         .ops = &clk_branch_ops,
1805                         .flags = CLK_SET_RATE_PARENT,
1806                 },
1807         },
1808 };
1809
1810 static struct clk_rcg sdc2_src = {
1811         .ns_reg = 0x284c,
1812         .md_reg = 0x2848,
1813         .mn = {
1814                 .mnctr_en_bit = 8,
1815                 .mnctr_reset_bit = 7,
1816                 .mnctr_mode_shift = 5,
1817                 .n_val_shift = 16,
1818                 .m_val_shift = 16,
1819                 .width = 8,
1820         },
1821         .p = {
1822                 .pre_div_shift = 3,
1823                 .pre_div_width = 2,
1824         },
1825         .s = {
1826                 .src_sel_shift = 0,
1827                 .parent_map = gcc_pxo_pll8_map,
1828         },
1829         .freq_tbl = clk_tbl_sdc,
1830         .clkr = {
1831                 .enable_reg = 0x284c,
1832                 .enable_mask = BIT(11),
1833                 .hw.init = &(struct clk_init_data){
1834                         .name = "sdc2_src",
1835                         .parent_names = gcc_pxo_pll8,
1836                         .num_parents = 2,
1837                         .ops = &clk_rcg_ops,
1838                 },
1839         }
1840 };
1841
1842 static struct clk_branch sdc2_clk = {
1843         .halt_reg = 0x2fc8,
1844         .halt_bit = 5,
1845         .clkr = {
1846                 .enable_reg = 0x284c,
1847                 .enable_mask = BIT(9),
1848                 .hw.init = &(struct clk_init_data){
1849                         .name = "sdc2_clk",
1850                         .parent_names = (const char *[]){ "sdc2_src" },
1851                         .num_parents = 1,
1852                         .ops = &clk_branch_ops,
1853                         .flags = CLK_SET_RATE_PARENT,
1854                 },
1855         },
1856 };
1857
1858 static struct clk_rcg sdc3_src = {
1859         .ns_reg = 0x286c,
1860         .md_reg = 0x2868,
1861         .mn = {
1862                 .mnctr_en_bit = 8,
1863                 .mnctr_reset_bit = 7,
1864                 .mnctr_mode_shift = 5,
1865                 .n_val_shift = 16,
1866                 .m_val_shift = 16,
1867                 .width = 8,
1868         },
1869         .p = {
1870                 .pre_div_shift = 3,
1871                 .pre_div_width = 2,
1872         },
1873         .s = {
1874                 .src_sel_shift = 0,
1875                 .parent_map = gcc_pxo_pll8_map,
1876         },
1877         .freq_tbl = clk_tbl_sdc,
1878         .clkr = {
1879                 .enable_reg = 0x286c,
1880                 .enable_mask = BIT(11),
1881                 .hw.init = &(struct clk_init_data){
1882                         .name = "sdc3_src",
1883                         .parent_names = gcc_pxo_pll8,
1884                         .num_parents = 2,
1885                         .ops = &clk_rcg_ops,
1886                 },
1887         }
1888 };
1889
1890 static struct clk_branch sdc3_clk = {
1891         .halt_reg = 0x2fc8,
1892         .halt_bit = 4,
1893         .clkr = {
1894                 .enable_reg = 0x286c,
1895                 .enable_mask = BIT(9),
1896                 .hw.init = &(struct clk_init_data){
1897                         .name = "sdc3_clk",
1898                         .parent_names = (const char *[]){ "sdc3_src" },
1899                         .num_parents = 1,
1900                         .ops = &clk_branch_ops,
1901                         .flags = CLK_SET_RATE_PARENT,
1902                 },
1903         },
1904 };
1905
1906 static struct clk_rcg sdc4_src = {
1907         .ns_reg = 0x288c,
1908         .md_reg = 0x2888,
1909         .mn = {
1910                 .mnctr_en_bit = 8,
1911                 .mnctr_reset_bit = 7,
1912                 .mnctr_mode_shift = 5,
1913                 .n_val_shift = 16,
1914                 .m_val_shift = 16,
1915                 .width = 8,
1916         },
1917         .p = {
1918                 .pre_div_shift = 3,
1919                 .pre_div_width = 2,
1920         },
1921         .s = {
1922                 .src_sel_shift = 0,
1923                 .parent_map = gcc_pxo_pll8_map,
1924         },
1925         .freq_tbl = clk_tbl_sdc,
1926         .clkr = {
1927                 .enable_reg = 0x288c,
1928                 .enable_mask = BIT(11),
1929                 .hw.init = &(struct clk_init_data){
1930                         .name = "sdc4_src",
1931                         .parent_names = gcc_pxo_pll8,
1932                         .num_parents = 2,
1933                         .ops = &clk_rcg_ops,
1934                 },
1935         }
1936 };
1937
1938 static struct clk_branch sdc4_clk = {
1939         .halt_reg = 0x2fc8,
1940         .halt_bit = 3,
1941         .clkr = {
1942                 .enable_reg = 0x288c,
1943                 .enable_mask = BIT(9),
1944                 .hw.init = &(struct clk_init_data){
1945                         .name = "sdc4_clk",
1946                         .parent_names = (const char *[]){ "sdc4_src" },
1947                         .num_parents = 1,
1948                         .ops = &clk_branch_ops,
1949                         .flags = CLK_SET_RATE_PARENT,
1950                 },
1951         },
1952 };
1953
1954 static struct clk_rcg sdc5_src = {
1955         .ns_reg = 0x28ac,
1956         .md_reg = 0x28a8,
1957         .mn = {
1958                 .mnctr_en_bit = 8,
1959                 .mnctr_reset_bit = 7,
1960                 .mnctr_mode_shift = 5,
1961                 .n_val_shift = 16,
1962                 .m_val_shift = 16,
1963                 .width = 8,
1964         },
1965         .p = {
1966                 .pre_div_shift = 3,
1967                 .pre_div_width = 2,
1968         },
1969         .s = {
1970                 .src_sel_shift = 0,
1971                 .parent_map = gcc_pxo_pll8_map,
1972         },
1973         .freq_tbl = clk_tbl_sdc,
1974         .clkr = {
1975                 .enable_reg = 0x28ac,
1976                 .enable_mask = BIT(11),
1977                 .hw.init = &(struct clk_init_data){
1978                         .name = "sdc5_src",
1979                         .parent_names = gcc_pxo_pll8,
1980                         .num_parents = 2,
1981                         .ops = &clk_rcg_ops,
1982                 },
1983         }
1984 };
1985
1986 static struct clk_branch sdc5_clk = {
1987         .halt_reg = 0x2fc8,
1988         .halt_bit = 2,
1989         .clkr = {
1990                 .enable_reg = 0x28ac,
1991                 .enable_mask = BIT(9),
1992                 .hw.init = &(struct clk_init_data){
1993                         .name = "sdc5_clk",
1994                         .parent_names = (const char *[]){ "sdc5_src" },
1995                         .num_parents = 1,
1996                         .ops = &clk_branch_ops,
1997                         .flags = CLK_SET_RATE_PARENT,
1998                 },
1999         },
2000 };
2001
2002 static const struct freq_tbl clk_tbl_tsif_ref[] = {
2003         { 105000, P_PXO,  1, 1, 256 },
2004         { }
2005 };
2006
2007 static struct clk_rcg tsif_ref_src = {
2008         .ns_reg = 0x2710,
2009         .md_reg = 0x270c,
2010         .mn = {
2011                 .mnctr_en_bit = 8,
2012                 .mnctr_reset_bit = 7,
2013                 .mnctr_mode_shift = 5,
2014                 .n_val_shift = 16,
2015                 .m_val_shift = 16,
2016                 .width = 16,
2017         },
2018         .p = {
2019                 .pre_div_shift = 3,
2020                 .pre_div_width = 2,
2021         },
2022         .s = {
2023                 .src_sel_shift = 0,
2024                 .parent_map = gcc_pxo_pll8_map,
2025         },
2026         .freq_tbl = clk_tbl_tsif_ref,
2027         .clkr = {
2028                 .enable_reg = 0x2710,
2029                 .enable_mask = BIT(11),
2030                 .hw.init = &(struct clk_init_data){
2031                         .name = "tsif_ref_src",
2032                         .parent_names = gcc_pxo_pll8,
2033                         .num_parents = 2,
2034                         .ops = &clk_rcg_ops,
2035                         .flags = CLK_SET_RATE_GATE,
2036                 },
2037         }
2038 };
2039
2040 static struct clk_branch tsif_ref_clk = {
2041         .halt_reg = 0x2fd4,
2042         .halt_bit = 5,
2043         .clkr = {
2044                 .enable_reg = 0x2710,
2045                 .enable_mask = BIT(9),
2046                 .hw.init = &(struct clk_init_data){
2047                         .name = "tsif_ref_clk",
2048                         .parent_names = (const char *[]){ "tsif_ref_src" },
2049                         .num_parents = 1,
2050                         .ops = &clk_branch_ops,
2051                         .flags = CLK_SET_RATE_PARENT,
2052                 },
2053         },
2054 };
2055
2056 static const struct freq_tbl clk_tbl_usb[] = {
2057         { 60000000, P_PLL8, 1, 5, 32 },
2058         { }
2059 };
2060
2061 static struct clk_rcg usb_hs1_xcvr_src = {
2062         .ns_reg = 0x290c,
2063         .md_reg = 0x2908,
2064         .mn = {
2065                 .mnctr_en_bit = 8,
2066                 .mnctr_reset_bit = 7,
2067                 .mnctr_mode_shift = 5,
2068                 .n_val_shift = 16,
2069                 .m_val_shift = 16,
2070                 .width = 8,
2071         },
2072         .p = {
2073                 .pre_div_shift = 3,
2074                 .pre_div_width = 2,
2075         },
2076         .s = {
2077                 .src_sel_shift = 0,
2078                 .parent_map = gcc_pxo_pll8_map,
2079         },
2080         .freq_tbl = clk_tbl_usb,
2081         .clkr = {
2082                 .enable_reg = 0x290c,
2083                 .enable_mask = BIT(11),
2084                 .hw.init = &(struct clk_init_data){
2085                         .name = "usb_hs1_xcvr_src",
2086                         .parent_names = gcc_pxo_pll8,
2087                         .num_parents = 2,
2088                         .ops = &clk_rcg_ops,
2089                         .flags = CLK_SET_RATE_GATE,
2090                 },
2091         }
2092 };
2093
2094 static struct clk_branch usb_hs1_xcvr_clk = {
2095         .halt_reg = 0x2fc8,
2096         .halt_bit = 0,
2097         .clkr = {
2098                 .enable_reg = 0x290c,
2099                 .enable_mask = BIT(9),
2100                 .hw.init = &(struct clk_init_data){
2101                         .name = "usb_hs1_xcvr_clk",
2102                         .parent_names = (const char *[]){ "usb_hs1_xcvr_src" },
2103                         .num_parents = 1,
2104                         .ops = &clk_branch_ops,
2105                         .flags = CLK_SET_RATE_PARENT,
2106                 },
2107         },
2108 };
2109
2110 static struct clk_rcg usb_hs3_xcvr_src = {
2111         .ns_reg = 0x370c,
2112         .md_reg = 0x3708,
2113         .mn = {
2114                 .mnctr_en_bit = 8,
2115                 .mnctr_reset_bit = 7,
2116                 .mnctr_mode_shift = 5,
2117                 .n_val_shift = 16,
2118                 .m_val_shift = 16,
2119                 .width = 8,
2120         },
2121         .p = {
2122                 .pre_div_shift = 3,
2123                 .pre_div_width = 2,
2124         },
2125         .s = {
2126                 .src_sel_shift = 0,
2127                 .parent_map = gcc_pxo_pll8_map,
2128         },
2129         .freq_tbl = clk_tbl_usb,
2130         .clkr = {
2131                 .enable_reg = 0x370c,
2132                 .enable_mask = BIT(11),
2133                 .hw.init = &(struct clk_init_data){
2134                         .name = "usb_hs3_xcvr_src",
2135                         .parent_names = gcc_pxo_pll8,
2136                         .num_parents = 2,
2137                         .ops = &clk_rcg_ops,
2138                         .flags = CLK_SET_RATE_GATE,
2139                 },
2140         }
2141 };
2142
2143 static struct clk_branch usb_hs3_xcvr_clk = {
2144         .halt_reg = 0x2fc8,
2145         .halt_bit = 30,
2146         .clkr = {
2147                 .enable_reg = 0x370c,
2148                 .enable_mask = BIT(9),
2149                 .hw.init = &(struct clk_init_data){
2150                         .name = "usb_hs3_xcvr_clk",
2151                         .parent_names = (const char *[]){ "usb_hs3_xcvr_src" },
2152                         .num_parents = 1,
2153                         .ops = &clk_branch_ops,
2154                         .flags = CLK_SET_RATE_PARENT,
2155                 },
2156         },
2157 };
2158
2159 static struct clk_rcg usb_hs4_xcvr_src = {
2160         .ns_reg = 0x372c,
2161         .md_reg = 0x3728,
2162         .mn = {
2163                 .mnctr_en_bit = 8,
2164                 .mnctr_reset_bit = 7,
2165                 .mnctr_mode_shift = 5,
2166                 .n_val_shift = 16,
2167                 .m_val_shift = 16,
2168                 .width = 8,
2169         },
2170         .p = {
2171                 .pre_div_shift = 3,
2172                 .pre_div_width = 2,
2173         },
2174         .s = {
2175                 .src_sel_shift = 0,
2176                 .parent_map = gcc_pxo_pll8_map,
2177         },
2178         .freq_tbl = clk_tbl_usb,
2179         .clkr = {
2180                 .enable_reg = 0x372c,
2181                 .enable_mask = BIT(11),
2182                 .hw.init = &(struct clk_init_data){
2183                         .name = "usb_hs4_xcvr_src",
2184                         .parent_names = gcc_pxo_pll8,
2185                         .num_parents = 2,
2186                         .ops = &clk_rcg_ops,
2187                         .flags = CLK_SET_RATE_GATE,
2188                 },
2189         }
2190 };
2191
2192 static struct clk_branch usb_hs4_xcvr_clk = {
2193         .halt_reg = 0x2fc8,
2194         .halt_bit = 2,
2195         .clkr = {
2196                 .enable_reg = 0x372c,
2197                 .enable_mask = BIT(9),
2198                 .hw.init = &(struct clk_init_data){
2199                         .name = "usb_hs4_xcvr_clk",
2200                         .parent_names = (const char *[]){ "usb_hs4_xcvr_src" },
2201                         .num_parents = 1,
2202                         .ops = &clk_branch_ops,
2203                         .flags = CLK_SET_RATE_PARENT,
2204                 },
2205         },
2206 };
2207
2208 static struct clk_rcg usb_hsic_xcvr_fs_src = {
2209         .ns_reg = 0x2928,
2210         .md_reg = 0x2924,
2211         .mn = {
2212                 .mnctr_en_bit = 8,
2213                 .mnctr_reset_bit = 7,
2214                 .mnctr_mode_shift = 5,
2215                 .n_val_shift = 16,
2216                 .m_val_shift = 16,
2217                 .width = 8,
2218         },
2219         .p = {
2220                 .pre_div_shift = 3,
2221                 .pre_div_width = 2,
2222         },
2223         .s = {
2224                 .src_sel_shift = 0,
2225                 .parent_map = gcc_pxo_pll8_map,
2226         },
2227         .freq_tbl = clk_tbl_usb,
2228         .clkr = {
2229                 .enable_reg = 0x2928,
2230                 .enable_mask = BIT(11),
2231                 .hw.init = &(struct clk_init_data){
2232                         .name = "usb_hsic_xcvr_fs_src",
2233                         .parent_names = gcc_pxo_pll8,
2234                         .num_parents = 2,
2235                         .ops = &clk_rcg_ops,
2236                         .flags = CLK_SET_RATE_GATE,
2237                 },
2238         }
2239 };
2240
2241 static const char * const usb_hsic_xcvr_fs_src_p[] = { "usb_hsic_xcvr_fs_src" };
2242
2243 static struct clk_branch usb_hsic_xcvr_fs_clk = {
2244         .halt_reg = 0x2fc8,
2245         .halt_bit = 2,
2246         .clkr = {
2247                 .enable_reg = 0x2928,
2248                 .enable_mask = BIT(9),
2249                 .hw.init = &(struct clk_init_data){
2250                         .name = "usb_hsic_xcvr_fs_clk",
2251                         .parent_names = usb_hsic_xcvr_fs_src_p,
2252                         .num_parents = 1,
2253                         .ops = &clk_branch_ops,
2254                         .flags = CLK_SET_RATE_PARENT,
2255                 },
2256         },
2257 };
2258
2259 static struct clk_branch usb_hsic_system_clk = {
2260         .halt_reg = 0x2fcc,
2261         .halt_bit = 24,
2262         .clkr = {
2263                 .enable_reg = 0x292c,
2264                 .enable_mask = BIT(4),
2265                 .hw.init = &(struct clk_init_data){
2266                         .parent_names = usb_hsic_xcvr_fs_src_p,
2267                         .num_parents = 1,
2268                         .name = "usb_hsic_system_clk",
2269                         .ops = &clk_branch_ops,
2270                         .flags = CLK_SET_RATE_PARENT,
2271                 },
2272         },
2273 };
2274
2275 static struct clk_branch usb_hsic_hsic_clk = {
2276         .halt_reg = 0x2fcc,
2277         .halt_bit = 19,
2278         .clkr = {
2279                 .enable_reg = 0x2b44,
2280                 .enable_mask = BIT(0),
2281                 .hw.init = &(struct clk_init_data){
2282                         .parent_names = (const char *[]){ "pll14_vote" },
2283                         .num_parents = 1,
2284                         .name = "usb_hsic_hsic_clk",
2285                         .ops = &clk_branch_ops,
2286                 },
2287         },
2288 };
2289
2290 static struct clk_branch usb_hsic_hsio_cal_clk = {
2291         .halt_reg = 0x2fcc,
2292         .halt_bit = 23,
2293         .clkr = {
2294                 .enable_reg = 0x2b48,
2295                 .enable_mask = BIT(0),
2296                 .hw.init = &(struct clk_init_data){
2297                         .name = "usb_hsic_hsio_cal_clk",
2298                         .ops = &clk_branch_ops,
2299                 },
2300         },
2301 };
2302
2303 static struct clk_rcg usb_fs1_xcvr_fs_src = {
2304         .ns_reg = 0x2968,
2305         .md_reg = 0x2964,
2306         .mn = {
2307                 .mnctr_en_bit = 8,
2308                 .mnctr_reset_bit = 7,
2309                 .mnctr_mode_shift = 5,
2310                 .n_val_shift = 16,
2311                 .m_val_shift = 16,
2312                 .width = 8,
2313         },
2314         .p = {
2315                 .pre_div_shift = 3,
2316                 .pre_div_width = 2,
2317         },
2318         .s = {
2319                 .src_sel_shift = 0,
2320                 .parent_map = gcc_pxo_pll8_map,
2321         },
2322         .freq_tbl = clk_tbl_usb,
2323         .clkr = {
2324                 .enable_reg = 0x2968,
2325                 .enable_mask = BIT(11),
2326                 .hw.init = &(struct clk_init_data){
2327                         .name = "usb_fs1_xcvr_fs_src",
2328                         .parent_names = gcc_pxo_pll8,
2329                         .num_parents = 2,
2330                         .ops = &clk_rcg_ops,
2331                         .flags = CLK_SET_RATE_GATE,
2332                 },
2333         }
2334 };
2335
2336 static const char * const usb_fs1_xcvr_fs_src_p[] = { "usb_fs1_xcvr_fs_src" };
2337
2338 static struct clk_branch usb_fs1_xcvr_fs_clk = {
2339         .halt_reg = 0x2fcc,
2340         .halt_bit = 15,
2341         .clkr = {
2342                 .enable_reg = 0x2968,
2343                 .enable_mask = BIT(9),
2344                 .hw.init = &(struct clk_init_data){
2345                         .name = "usb_fs1_xcvr_fs_clk",
2346                         .parent_names = usb_fs1_xcvr_fs_src_p,
2347                         .num_parents = 1,
2348                         .ops = &clk_branch_ops,
2349                         .flags = CLK_SET_RATE_PARENT,
2350                 },
2351         },
2352 };
2353
2354 static struct clk_branch usb_fs1_system_clk = {
2355         .halt_reg = 0x2fcc,
2356         .halt_bit = 16,
2357         .clkr = {
2358                 .enable_reg = 0x296c,
2359                 .enable_mask = BIT(4),
2360                 .hw.init = &(struct clk_init_data){
2361                         .parent_names = usb_fs1_xcvr_fs_src_p,
2362                         .num_parents = 1,
2363                         .name = "usb_fs1_system_clk",
2364                         .ops = &clk_branch_ops,
2365                         .flags = CLK_SET_RATE_PARENT,
2366                 },
2367         },
2368 };
2369
2370 static struct clk_rcg usb_fs2_xcvr_fs_src = {
2371         .ns_reg = 0x2988,
2372         .md_reg = 0x2984,
2373         .mn = {
2374                 .mnctr_en_bit = 8,
2375                 .mnctr_reset_bit = 7,
2376                 .mnctr_mode_shift = 5,
2377                 .n_val_shift = 16,
2378                 .m_val_shift = 16,
2379                 .width = 8,
2380         },
2381         .p = {
2382                 .pre_div_shift = 3,
2383                 .pre_div_width = 2,
2384         },
2385         .s = {
2386                 .src_sel_shift = 0,
2387                 .parent_map = gcc_pxo_pll8_map,
2388         },
2389         .freq_tbl = clk_tbl_usb,
2390         .clkr = {
2391                 .enable_reg = 0x2988,
2392                 .enable_mask = BIT(11),
2393                 .hw.init = &(struct clk_init_data){
2394                         .name = "usb_fs2_xcvr_fs_src",
2395                         .parent_names = gcc_pxo_pll8,
2396                         .num_parents = 2,
2397                         .ops = &clk_rcg_ops,
2398                         .flags = CLK_SET_RATE_GATE,
2399                 },
2400         }
2401 };
2402
2403 static const char * const usb_fs2_xcvr_fs_src_p[] = { "usb_fs2_xcvr_fs_src" };
2404
2405 static struct clk_branch usb_fs2_xcvr_fs_clk = {
2406         .halt_reg = 0x2fcc,
2407         .halt_bit = 12,
2408         .clkr = {
2409                 .enable_reg = 0x2988,
2410                 .enable_mask = BIT(9),
2411                 .hw.init = &(struct clk_init_data){
2412                         .name = "usb_fs2_xcvr_fs_clk",
2413                         .parent_names = usb_fs2_xcvr_fs_src_p,
2414                         .num_parents = 1,
2415                         .ops = &clk_branch_ops,
2416                         .flags = CLK_SET_RATE_PARENT,
2417                 },
2418         },
2419 };
2420
2421 static struct clk_branch usb_fs2_system_clk = {
2422         .halt_reg = 0x2fcc,
2423         .halt_bit = 13,
2424         .clkr = {
2425                 .enable_reg = 0x298c,
2426                 .enable_mask = BIT(4),
2427                 .hw.init = &(struct clk_init_data){
2428                         .name = "usb_fs2_system_clk",
2429                         .parent_names = usb_fs2_xcvr_fs_src_p,
2430                         .num_parents = 1,
2431                         .ops = &clk_branch_ops,
2432                         .flags = CLK_SET_RATE_PARENT,
2433                 },
2434         },
2435 };
2436
2437 static struct clk_branch ce1_core_clk = {
2438         .hwcg_reg = 0x2724,
2439         .hwcg_bit = 6,
2440         .halt_reg = 0x2fd4,
2441         .halt_bit = 27,
2442         .clkr = {
2443                 .enable_reg = 0x2724,
2444                 .enable_mask = BIT(4),
2445                 .hw.init = &(struct clk_init_data){
2446                         .name = "ce1_core_clk",
2447                         .ops = &clk_branch_ops,
2448                 },
2449         },
2450 };
2451
2452 static struct clk_branch ce1_h_clk = {
2453         .halt_reg = 0x2fd4,
2454         .halt_bit = 1,
2455         .clkr = {
2456                 .enable_reg = 0x2720,
2457                 .enable_mask = BIT(4),
2458                 .hw.init = &(struct clk_init_data){
2459                         .name = "ce1_h_clk",
2460                         .ops = &clk_branch_ops,
2461                 },
2462         },
2463 };
2464
2465 static struct clk_branch dma_bam_h_clk = {
2466         .hwcg_reg = 0x25c0,
2467         .hwcg_bit = 6,
2468         .halt_reg = 0x2fc8,
2469         .halt_bit = 12,
2470         .clkr = {
2471                 .enable_reg = 0x25c0,
2472                 .enable_mask = BIT(4),
2473                 .hw.init = &(struct clk_init_data){
2474                         .name = "dma_bam_h_clk",
2475                         .ops = &clk_branch_ops,
2476                 },
2477         },
2478 };
2479
2480 static struct clk_branch gsbi1_h_clk = {
2481         .hwcg_reg = 0x29c0,
2482         .hwcg_bit = 6,
2483         .halt_reg = 0x2fcc,
2484         .halt_bit = 11,
2485         .clkr = {
2486                 .enable_reg = 0x29c0,
2487                 .enable_mask = BIT(4),
2488                 .hw.init = &(struct clk_init_data){
2489                         .name = "gsbi1_h_clk",
2490                         .ops = &clk_branch_ops,
2491                 },
2492         },
2493 };
2494
2495 static struct clk_branch gsbi2_h_clk = {
2496         .hwcg_reg = 0x29e0,
2497         .hwcg_bit = 6,
2498         .halt_reg = 0x2fcc,
2499         .halt_bit = 7,
2500         .clkr = {
2501                 .enable_reg = 0x29e0,
2502                 .enable_mask = BIT(4),
2503                 .hw.init = &(struct clk_init_data){
2504                         .name = "gsbi2_h_clk",
2505                         .ops = &clk_branch_ops,
2506                 },
2507         },
2508 };
2509
2510 static struct clk_branch gsbi3_h_clk = {
2511         .hwcg_reg = 0x2a00,
2512         .hwcg_bit = 6,
2513         .halt_reg = 0x2fcc,
2514         .halt_bit = 3,
2515         .clkr = {
2516                 .enable_reg = 0x2a00,
2517                 .enable_mask = BIT(4),
2518                 .hw.init = &(struct clk_init_data){
2519                         .name = "gsbi3_h_clk",
2520                         .ops = &clk_branch_ops,
2521                 },
2522         },
2523 };
2524
2525 static struct clk_branch gsbi4_h_clk = {
2526         .hwcg_reg = 0x2a20,
2527         .hwcg_bit = 6,
2528         .halt_reg = 0x2fd0,
2529         .halt_bit = 27,
2530         .clkr = {
2531                 .enable_reg = 0x2a20,
2532                 .enable_mask = BIT(4),
2533                 .hw.init = &(struct clk_init_data){
2534                         .name = "gsbi4_h_clk",
2535                         .ops = &clk_branch_ops,
2536                 },
2537         },
2538 };
2539
2540 static struct clk_branch gsbi5_h_clk = {
2541         .hwcg_reg = 0x2a40,
2542         .hwcg_bit = 6,
2543         .halt_reg = 0x2fd0,
2544         .halt_bit = 23,
2545         .clkr = {
2546                 .enable_reg = 0x2a40,
2547                 .enable_mask = BIT(4),
2548                 .hw.init = &(struct clk_init_data){
2549                         .name = "gsbi5_h_clk",
2550                         .ops = &clk_branch_ops,
2551                 },
2552         },
2553 };
2554
2555 static struct clk_branch gsbi6_h_clk = {
2556         .hwcg_reg = 0x2a60,
2557         .hwcg_bit = 6,
2558         .halt_reg = 0x2fd0,
2559         .halt_bit = 19,
2560         .clkr = {
2561                 .enable_reg = 0x2a60,
2562                 .enable_mask = BIT(4),
2563                 .hw.init = &(struct clk_init_data){
2564                         .name = "gsbi6_h_clk",
2565                         .ops = &clk_branch_ops,
2566                 },
2567         },
2568 };
2569
2570 static struct clk_branch gsbi7_h_clk = {
2571         .hwcg_reg = 0x2a80,
2572         .hwcg_bit = 6,
2573         .halt_reg = 0x2fd0,
2574         .halt_bit = 15,
2575         .clkr = {
2576                 .enable_reg = 0x2a80,
2577                 .enable_mask = BIT(4),
2578                 .hw.init = &(struct clk_init_data){
2579                         .name = "gsbi7_h_clk",
2580                         .ops = &clk_branch_ops,
2581                 },
2582         },
2583 };
2584
2585 static struct clk_branch gsbi8_h_clk = {
2586         .hwcg_reg = 0x2aa0,
2587         .hwcg_bit = 6,
2588         .halt_reg = 0x2fd0,
2589         .halt_bit = 11,
2590         .clkr = {
2591                 .enable_reg = 0x2aa0,
2592                 .enable_mask = BIT(4),
2593                 .hw.init = &(struct clk_init_data){
2594                         .name = "gsbi8_h_clk",
2595                         .ops = &clk_branch_ops,
2596                 },
2597         },
2598 };
2599
2600 static struct clk_branch gsbi9_h_clk = {
2601         .hwcg_reg = 0x2ac0,
2602         .hwcg_bit = 6,
2603         .halt_reg = 0x2fd0,
2604         .halt_bit = 7,
2605         .clkr = {
2606                 .enable_reg = 0x2ac0,
2607                 .enable_mask = BIT(4),
2608                 .hw.init = &(struct clk_init_data){
2609                         .name = "gsbi9_h_clk",
2610                         .ops = &clk_branch_ops,
2611                 },
2612         },
2613 };
2614
2615 static struct clk_branch gsbi10_h_clk = {
2616         .hwcg_reg = 0x2ae0,
2617         .hwcg_bit = 6,
2618         .halt_reg = 0x2fd0,
2619         .halt_bit = 3,
2620         .clkr = {
2621                 .enable_reg = 0x2ae0,
2622                 .enable_mask = BIT(4),
2623                 .hw.init = &(struct clk_init_data){
2624                         .name = "gsbi10_h_clk",
2625                         .ops = &clk_branch_ops,
2626                 },
2627         },
2628 };
2629
2630 static struct clk_branch gsbi11_h_clk = {
2631         .hwcg_reg = 0x2b00,
2632         .hwcg_bit = 6,
2633         .halt_reg = 0x2fd4,
2634         .halt_bit = 18,
2635         .clkr = {
2636                 .enable_reg = 0x2b00,
2637                 .enable_mask = BIT(4),
2638                 .hw.init = &(struct clk_init_data){
2639                         .name = "gsbi11_h_clk",
2640                         .ops = &clk_branch_ops,
2641                 },
2642         },
2643 };
2644
2645 static struct clk_branch gsbi12_h_clk = {
2646         .hwcg_reg = 0x2b20,
2647         .hwcg_bit = 6,
2648         .halt_reg = 0x2fd4,
2649         .halt_bit = 14,
2650         .clkr = {
2651                 .enable_reg = 0x2b20,
2652                 .enable_mask = BIT(4),
2653                 .hw.init = &(struct clk_init_data){
2654                         .name = "gsbi12_h_clk",
2655                         .ops = &clk_branch_ops,
2656                 },
2657         },
2658 };
2659
2660 static struct clk_branch tsif_h_clk = {
2661         .hwcg_reg = 0x2700,
2662         .hwcg_bit = 6,
2663         .halt_reg = 0x2fd4,
2664         .halt_bit = 7,
2665         .clkr = {
2666                 .enable_reg = 0x2700,
2667                 .enable_mask = BIT(4),
2668                 .hw.init = &(struct clk_init_data){
2669                         .name = "tsif_h_clk",
2670                         .ops = &clk_branch_ops,
2671                 },
2672         },
2673 };
2674
2675 static struct clk_branch usb_fs1_h_clk = {
2676         .halt_reg = 0x2fcc,
2677         .halt_bit = 17,
2678         .clkr = {
2679                 .enable_reg = 0x2960,
2680                 .enable_mask = BIT(4),
2681                 .hw.init = &(struct clk_init_data){
2682                         .name = "usb_fs1_h_clk",
2683                         .ops = &clk_branch_ops,
2684                 },
2685         },
2686 };
2687
2688 static struct clk_branch usb_fs2_h_clk = {
2689         .halt_reg = 0x2fcc,
2690         .halt_bit = 14,
2691         .clkr = {
2692                 .enable_reg = 0x2980,
2693                 .enable_mask = BIT(4),
2694                 .hw.init = &(struct clk_init_data){
2695                         .name = "usb_fs2_h_clk",
2696                         .ops = &clk_branch_ops,
2697                 },
2698         },
2699 };
2700
2701 static struct clk_branch usb_hs1_h_clk = {
2702         .hwcg_reg = 0x2900,
2703         .hwcg_bit = 6,
2704         .halt_reg = 0x2fc8,
2705         .halt_bit = 1,
2706         .clkr = {
2707                 .enable_reg = 0x2900,
2708                 .enable_mask = BIT(4),
2709                 .hw.init = &(struct clk_init_data){
2710                         .name = "usb_hs1_h_clk",
2711                         .ops = &clk_branch_ops,
2712                 },
2713         },
2714 };
2715
2716 static struct clk_branch usb_hs3_h_clk = {
2717         .halt_reg = 0x2fc8,
2718         .halt_bit = 31,
2719         .clkr = {
2720                 .enable_reg = 0x3700,
2721                 .enable_mask = BIT(4),
2722                 .hw.init = &(struct clk_init_data){
2723                         .name = "usb_hs3_h_clk",
2724                         .ops = &clk_branch_ops,
2725                 },
2726         },
2727 };
2728
2729 static struct clk_branch usb_hs4_h_clk = {
2730         .halt_reg = 0x2fc8,
2731         .halt_bit = 7,
2732         .clkr = {
2733                 .enable_reg = 0x3720,
2734                 .enable_mask = BIT(4),
2735                 .hw.init = &(struct clk_init_data){
2736                         .name = "usb_hs4_h_clk",
2737                         .ops = &clk_branch_ops,
2738                 },
2739         },
2740 };
2741
2742 static struct clk_branch usb_hsic_h_clk = {
2743         .halt_reg = 0x2fcc,
2744         .halt_bit = 28,
2745         .clkr = {
2746                 .enable_reg = 0x2920,
2747                 .enable_mask = BIT(4),
2748                 .hw.init = &(struct clk_init_data){
2749                         .name = "usb_hsic_h_clk",
2750                         .ops = &clk_branch_ops,
2751                 },
2752         },
2753 };
2754
2755 static struct clk_branch sdc1_h_clk = {
2756         .hwcg_reg = 0x2820,
2757         .hwcg_bit = 6,
2758         .halt_reg = 0x2fc8,
2759         .halt_bit = 11,
2760         .clkr = {
2761                 .enable_reg = 0x2820,
2762                 .enable_mask = BIT(4),
2763                 .hw.init = &(struct clk_init_data){
2764                         .name = "sdc1_h_clk",
2765                         .ops = &clk_branch_ops,
2766                 },
2767         },
2768 };
2769
2770 static struct clk_branch sdc2_h_clk = {
2771         .hwcg_reg = 0x2840,
2772         .hwcg_bit = 6,
2773         .halt_reg = 0x2fc8,
2774         .halt_bit = 10,
2775         .clkr = {
2776                 .enable_reg = 0x2840,
2777                 .enable_mask = BIT(4),
2778                 .hw.init = &(struct clk_init_data){
2779                         .name = "sdc2_h_clk",
2780                         .ops = &clk_branch_ops,
2781                 },
2782         },
2783 };
2784
2785 static struct clk_branch sdc3_h_clk = {
2786         .hwcg_reg = 0x2860,
2787         .hwcg_bit = 6,
2788         .halt_reg = 0x2fc8,
2789         .halt_bit = 9,
2790         .clkr = {
2791                 .enable_reg = 0x2860,
2792                 .enable_mask = BIT(4),
2793                 .hw.init = &(struct clk_init_data){
2794                         .name = "sdc3_h_clk",
2795                         .ops = &clk_branch_ops,
2796                 },
2797         },
2798 };
2799
2800 static struct clk_branch sdc4_h_clk = {
2801         .hwcg_reg = 0x2880,
2802         .hwcg_bit = 6,
2803         .halt_reg = 0x2fc8,
2804         .halt_bit = 8,
2805         .clkr = {
2806                 .enable_reg = 0x2880,
2807                 .enable_mask = BIT(4),
2808                 .hw.init = &(struct clk_init_data){
2809                         .name = "sdc4_h_clk",
2810                         .ops = &clk_branch_ops,
2811                 },
2812         },
2813 };
2814
2815 static struct clk_branch sdc5_h_clk = {
2816         .hwcg_reg = 0x28a0,
2817         .hwcg_bit = 6,
2818         .halt_reg = 0x2fc8,
2819         .halt_bit = 7,
2820         .clkr = {
2821                 .enable_reg = 0x28a0,
2822                 .enable_mask = BIT(4),
2823                 .hw.init = &(struct clk_init_data){
2824                         .name = "sdc5_h_clk",
2825                         .ops = &clk_branch_ops,
2826                 },
2827         },
2828 };
2829
2830 static struct clk_branch adm0_clk = {
2831         .halt_reg = 0x2fdc,
2832         .halt_check = BRANCH_HALT_VOTED,
2833         .halt_bit = 14,
2834         .clkr = {
2835                 .enable_reg = 0x3080,
2836                 .enable_mask = BIT(2),
2837                 .hw.init = &(struct clk_init_data){
2838                         .name = "adm0_clk",
2839                         .ops = &clk_branch_ops,
2840                 },
2841         },
2842 };
2843
2844 static struct clk_branch adm0_pbus_clk = {
2845         .hwcg_reg = 0x2208,
2846         .hwcg_bit = 6,
2847         .halt_reg = 0x2fdc,
2848         .halt_check = BRANCH_HALT_VOTED,
2849         .halt_bit = 13,
2850         .clkr = {
2851                 .enable_reg = 0x3080,
2852                 .enable_mask = BIT(3),
2853                 .hw.init = &(struct clk_init_data){
2854                         .name = "adm0_pbus_clk",
2855                         .ops = &clk_branch_ops,
2856                 },
2857         },
2858 };
2859
2860 static struct freq_tbl clk_tbl_ce3[] = {
2861         { 48000000, P_PLL8, 8 },
2862         { 100000000, P_PLL3, 12 },
2863         { 120000000, P_PLL3, 10 },
2864         { }
2865 };
2866
2867 static struct clk_rcg ce3_src = {
2868         .ns_reg = 0x36c0,
2869         .p = {
2870                 .pre_div_shift = 3,
2871                 .pre_div_width = 4,
2872         },
2873         .s = {
2874                 .src_sel_shift = 0,
2875                 .parent_map = gcc_pxo_pll8_pll3_map,
2876         },
2877         .freq_tbl = clk_tbl_ce3,
2878         .clkr = {
2879                 .enable_reg = 0x36c0,
2880                 .enable_mask = BIT(7),
2881                 .hw.init = &(struct clk_init_data){
2882                         .name = "ce3_src",
2883                         .parent_names = gcc_pxo_pll8_pll3,
2884                         .num_parents = 3,
2885                         .ops = &clk_rcg_ops,
2886                         .flags = CLK_SET_RATE_GATE,
2887                 },
2888         },
2889 };
2890
2891 static struct clk_branch ce3_core_clk = {
2892         .halt_reg = 0x2fdc,
2893         .halt_bit = 5,
2894         .clkr = {
2895                 .enable_reg = 0x36cc,
2896                 .enable_mask = BIT(4),
2897                 .hw.init = &(struct clk_init_data){
2898                         .name = "ce3_core_clk",
2899                         .parent_names = (const char *[]){ "ce3_src" },
2900                         .num_parents = 1,
2901                         .ops = &clk_branch_ops,
2902                         .flags = CLK_SET_RATE_PARENT,
2903                 },
2904         },
2905 };
2906
2907 static struct clk_branch ce3_h_clk = {
2908         .halt_reg = 0x2fc4,
2909         .halt_bit = 16,
2910         .clkr = {
2911                 .enable_reg = 0x36c4,
2912                 .enable_mask = BIT(4),
2913                 .hw.init = &(struct clk_init_data){
2914                         .name = "ce3_h_clk",
2915                         .parent_names = (const char *[]){ "ce3_src" },
2916                         .num_parents = 1,
2917                         .ops = &clk_branch_ops,
2918                         .flags = CLK_SET_RATE_PARENT,
2919                 },
2920         },
2921 };
2922
2923 static const struct freq_tbl clk_tbl_sata_ref[] = {
2924         { 48000000, P_PLL8, 8, 0, 0 },
2925         { 100000000, P_PLL3, 12, 0, 0 },
2926         { }
2927 };
2928
2929 static struct clk_rcg sata_clk_src = {
2930         .ns_reg = 0x2c08,
2931         .p = {
2932                 .pre_div_shift = 3,
2933                 .pre_div_width = 4,
2934         },
2935         .s = {
2936                 .src_sel_shift = 0,
2937                 .parent_map = gcc_pxo_pll8_pll3_map,
2938         },
2939         .freq_tbl = clk_tbl_sata_ref,
2940         .clkr = {
2941                 .enable_reg = 0x2c08,
2942                 .enable_mask = BIT(7),
2943                 .hw.init = &(struct clk_init_data){
2944                         .name = "sata_clk_src",
2945                         .parent_names = gcc_pxo_pll8_pll3,
2946                         .num_parents = 3,
2947                         .ops = &clk_rcg_ops,
2948                         .flags = CLK_SET_RATE_GATE,
2949                 },
2950         },
2951 };
2952
2953 static struct clk_branch sata_rxoob_clk = {
2954         .halt_reg = 0x2fdc,
2955         .halt_bit = 26,
2956         .clkr = {
2957                 .enable_reg = 0x2c0c,
2958                 .enable_mask = BIT(4),
2959                 .hw.init = &(struct clk_init_data){
2960                         .name = "sata_rxoob_clk",
2961                         .parent_names = (const char *[]){ "sata_clk_src" },
2962                         .num_parents = 1,
2963                         .ops = &clk_branch_ops,
2964                         .flags = CLK_SET_RATE_PARENT,
2965                 },
2966         },
2967 };
2968
2969 static struct clk_branch sata_pmalive_clk = {
2970         .halt_reg = 0x2fdc,
2971         .halt_bit = 25,
2972         .clkr = {
2973                 .enable_reg = 0x2c10,
2974                 .enable_mask = BIT(4),
2975                 .hw.init = &(struct clk_init_data){
2976                         .name = "sata_pmalive_clk",
2977                         .parent_names = (const char *[]){ "sata_clk_src" },
2978                         .num_parents = 1,
2979                         .ops = &clk_branch_ops,
2980                         .flags = CLK_SET_RATE_PARENT,
2981                 },
2982         },
2983 };
2984
2985 static struct clk_branch sata_phy_ref_clk = {
2986         .halt_reg = 0x2fdc,
2987         .halt_bit = 24,
2988         .clkr = {
2989                 .enable_reg = 0x2c14,
2990                 .enable_mask = BIT(4),
2991                 .hw.init = &(struct clk_init_data){
2992                         .name = "sata_phy_ref_clk",
2993                         .parent_names = (const char *[]){ "pxo" },
2994                         .num_parents = 1,
2995                         .ops = &clk_branch_ops,
2996                 },
2997         },
2998 };
2999
3000 static struct clk_branch sata_a_clk = {
3001         .halt_reg = 0x2fc0,
3002         .halt_bit = 12,
3003         .clkr = {
3004                 .enable_reg = 0x2c20,
3005                 .enable_mask = BIT(4),
3006                 .hw.init = &(struct clk_init_data){
3007                         .name = "sata_a_clk",
3008                         .ops = &clk_branch_ops,
3009                 },
3010         },
3011 };
3012
3013 static struct clk_branch sata_h_clk = {
3014         .halt_reg = 0x2fdc,
3015         .halt_bit = 27,
3016         .clkr = {
3017                 .enable_reg = 0x2c00,
3018                 .enable_mask = BIT(4),
3019                 .hw.init = &(struct clk_init_data){
3020                         .name = "sata_h_clk",
3021                         .ops = &clk_branch_ops,
3022                 },
3023         },
3024 };
3025
3026 static struct clk_branch sfab_sata_s_h_clk = {
3027         .halt_reg = 0x2fc4,
3028         .halt_bit = 14,
3029         .clkr = {
3030                 .enable_reg = 0x2480,
3031                 .enable_mask = BIT(4),
3032                 .hw.init = &(struct clk_init_data){
3033                         .name = "sfab_sata_s_h_clk",
3034                         .ops = &clk_branch_ops,
3035                 },
3036         },
3037 };
3038
3039 static struct clk_branch sata_phy_cfg_clk = {
3040         .halt_reg = 0x2fcc,
3041         .halt_bit = 12,
3042         .clkr = {
3043                 .enable_reg = 0x2c40,
3044                 .enable_mask = BIT(4),
3045                 .hw.init = &(struct clk_init_data){
3046                         .name = "sata_phy_cfg_clk",
3047                         .ops = &clk_branch_ops,
3048                 },
3049         },
3050 };
3051
3052 static struct clk_branch pcie_phy_ref_clk = {
3053         .halt_reg = 0x2fdc,
3054         .halt_bit = 29,
3055         .clkr = {
3056                 .enable_reg = 0x22d0,
3057                 .enable_mask = BIT(4),
3058                 .hw.init = &(struct clk_init_data){
3059                         .name = "pcie_phy_ref_clk",
3060                         .ops = &clk_branch_ops,
3061                 },
3062         },
3063 };
3064
3065 static struct clk_branch pcie_h_clk = {
3066         .halt_reg = 0x2fd4,
3067         .halt_bit = 8,
3068         .clkr = {
3069                 .enable_reg = 0x22cc,
3070                 .enable_mask = BIT(4),
3071                 .hw.init = &(struct clk_init_data){
3072                         .name = "pcie_h_clk",
3073                         .ops = &clk_branch_ops,
3074                 },
3075         },
3076 };
3077
3078 static struct clk_branch pcie_a_clk = {
3079         .halt_reg = 0x2fc0,
3080         .halt_bit = 13,
3081         .clkr = {
3082                 .enable_reg = 0x22c0,
3083                 .enable_mask = BIT(4),
3084                 .hw.init = &(struct clk_init_data){
3085                         .name = "pcie_a_clk",
3086                         .ops = &clk_branch_ops,
3087                 },
3088         },
3089 };
3090
3091 static struct clk_branch pmic_arb0_h_clk = {
3092         .halt_reg = 0x2fd8,
3093         .halt_check = BRANCH_HALT_VOTED,
3094         .halt_bit = 22,
3095         .clkr = {
3096                 .enable_reg = 0x3080,
3097                 .enable_mask = BIT(8),
3098                 .hw.init = &(struct clk_init_data){
3099                         .name = "pmic_arb0_h_clk",
3100                         .ops = &clk_branch_ops,
3101                 },
3102         },
3103 };
3104
3105 static struct clk_branch pmic_arb1_h_clk = {
3106         .halt_reg = 0x2fd8,
3107         .halt_check = BRANCH_HALT_VOTED,
3108         .halt_bit = 21,
3109         .clkr = {
3110                 .enable_reg = 0x3080,
3111                 .enable_mask = BIT(9),
3112                 .hw.init = &(struct clk_init_data){
3113                         .name = "pmic_arb1_h_clk",
3114                         .ops = &clk_branch_ops,
3115                 },
3116         },
3117 };
3118
3119 static struct clk_branch pmic_ssbi2_clk = {
3120         .halt_reg = 0x2fd8,
3121         .halt_check = BRANCH_HALT_VOTED,
3122         .halt_bit = 23,
3123         .clkr = {
3124                 .enable_reg = 0x3080,
3125                 .enable_mask = BIT(7),
3126                 .hw.init = &(struct clk_init_data){
3127                         .name = "pmic_ssbi2_clk",
3128                         .ops = &clk_branch_ops,
3129                 },
3130         },
3131 };
3132
3133 static struct clk_branch rpm_msg_ram_h_clk = {
3134         .hwcg_reg = 0x27e0,
3135         .hwcg_bit = 6,
3136         .halt_reg = 0x2fd8,
3137         .halt_check = BRANCH_HALT_VOTED,
3138         .halt_bit = 12,
3139         .clkr = {
3140                 .enable_reg = 0x3080,
3141                 .enable_mask = BIT(6),
3142                 .hw.init = &(struct clk_init_data){
3143                         .name = "rpm_msg_ram_h_clk",
3144                         .ops = &clk_branch_ops,
3145                 },
3146         },
3147 };
3148
3149 static struct clk_regmap *gcc_msm8960_clks[] = {
3150         [PLL3] = &pll3.clkr,
3151         [PLL4_VOTE] = &pll4_vote,
3152         [PLL8] = &pll8.clkr,
3153         [PLL8_VOTE] = &pll8_vote,
3154         [PLL14] = &pll14.clkr,
3155         [PLL14_VOTE] = &pll14_vote,
3156         [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr,
3157         [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr,
3158         [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr,
3159         [GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr,
3160         [GSBI3_UART_SRC] = &gsbi3_uart_src.clkr,
3161         [GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr,
3162         [GSBI4_UART_SRC] = &gsbi4_uart_src.clkr,
3163         [GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr,
3164         [GSBI5_UART_SRC] = &gsbi5_uart_src.clkr,
3165         [GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr,
3166         [GSBI6_UART_SRC] = &gsbi6_uart_src.clkr,
3167         [GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr,
3168         [GSBI7_UART_SRC] = &gsbi7_uart_src.clkr,
3169         [GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr,
3170         [GSBI8_UART_SRC] = &gsbi8_uart_src.clkr,
3171         [GSBI8_UART_CLK] = &gsbi8_uart_clk.clkr,
3172         [GSBI9_UART_SRC] = &gsbi9_uart_src.clkr,
3173         [GSBI9_UART_CLK] = &gsbi9_uart_clk.clkr,
3174         [GSBI10_UART_SRC] = &gsbi10_uart_src.clkr,
3175         [GSBI10_UART_CLK] = &gsbi10_uart_clk.clkr,
3176         [GSBI11_UART_SRC] = &gsbi11_uart_src.clkr,
3177         [GSBI11_UART_CLK] = &gsbi11_uart_clk.clkr,
3178         [GSBI12_UART_SRC] = &gsbi12_uart_src.clkr,
3179         [GSBI12_UART_CLK] = &gsbi12_uart_clk.clkr,
3180         [GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr,
3181         [GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr,
3182         [GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr,
3183         [GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr,
3184         [GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr,
3185         [GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr,
3186         [GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr,
3187         [GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr,
3188         [GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr,
3189         [GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr,
3190         [GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr,
3191         [GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr,
3192         [GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr,
3193         [GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr,
3194         [GSBI8_QUP_SRC] = &gsbi8_qup_src.clkr,
3195         [GSBI8_QUP_CLK] = &gsbi8_qup_clk.clkr,
3196         [GSBI9_QUP_SRC] = &gsbi9_qup_src.clkr,
3197         [GSBI9_QUP_CLK] = &gsbi9_qup_clk.clkr,
3198         [GSBI10_QUP_SRC] = &gsbi10_qup_src.clkr,
3199         [GSBI10_QUP_CLK] = &gsbi10_qup_clk.clkr,
3200         [GSBI11_QUP_SRC] = &gsbi11_qup_src.clkr,
3201         [GSBI11_QUP_CLK] = &gsbi11_qup_clk.clkr,
3202         [GSBI12_QUP_SRC] = &gsbi12_qup_src.clkr,
3203         [GSBI12_QUP_CLK] = &gsbi12_qup_clk.clkr,
3204         [GP0_SRC] = &gp0_src.clkr,
3205         [GP0_CLK] = &gp0_clk.clkr,
3206         [GP1_SRC] = &gp1_src.clkr,
3207         [GP1_CLK] = &gp1_clk.clkr,
3208         [GP2_SRC] = &gp2_src.clkr,
3209         [GP2_CLK] = &gp2_clk.clkr,
3210         [PMEM_A_CLK] = &pmem_clk.clkr,
3211         [PRNG_SRC] = &prng_src.clkr,
3212         [PRNG_CLK] = &prng_clk.clkr,
3213         [SDC1_SRC] = &sdc1_src.clkr,
3214         [SDC1_CLK] = &sdc1_clk.clkr,
3215         [SDC2_SRC] = &sdc2_src.clkr,
3216         [SDC2_CLK] = &sdc2_clk.clkr,
3217         [SDC3_SRC] = &sdc3_src.clkr,
3218         [SDC3_CLK] = &sdc3_clk.clkr,
3219         [SDC4_SRC] = &sdc4_src.clkr,
3220         [SDC4_CLK] = &sdc4_clk.clkr,
3221         [SDC5_SRC] = &sdc5_src.clkr,
3222         [SDC5_CLK] = &sdc5_clk.clkr,
3223         [TSIF_REF_SRC] = &tsif_ref_src.clkr,
3224         [TSIF_REF_CLK] = &tsif_ref_clk.clkr,
3225         [USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr,
3226         [USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr,
3227         [USB_HSIC_XCVR_FS_SRC] = &usb_hsic_xcvr_fs_src.clkr,
3228         [USB_HSIC_XCVR_FS_CLK] = &usb_hsic_xcvr_fs_clk.clkr,
3229         [USB_HSIC_SYSTEM_CLK] = &usb_hsic_system_clk.clkr,
3230         [USB_HSIC_HSIC_CLK] = &usb_hsic_hsic_clk.clkr,
3231         [USB_HSIC_HSIO_CAL_CLK] = &usb_hsic_hsio_cal_clk.clkr,
3232         [USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr,
3233         [USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr,
3234         [USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr,
3235         [USB_FS2_XCVR_FS_SRC] = &usb_fs2_xcvr_fs_src.clkr,
3236         [USB_FS2_XCVR_FS_CLK] = &usb_fs2_xcvr_fs_clk.clkr,
3237         [USB_FS2_SYSTEM_CLK] = &usb_fs2_system_clk.clkr,
3238         [CE1_CORE_CLK] = &ce1_core_clk.clkr,
3239         [CE1_H_CLK] = &ce1_h_clk.clkr,
3240         [DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr,
3241         [GSBI1_H_CLK] = &gsbi1_h_clk.clkr,
3242         [GSBI2_H_CLK] = &gsbi2_h_clk.clkr,
3243         [GSBI3_H_CLK] = &gsbi3_h_clk.clkr,
3244         [GSBI4_H_CLK] = &gsbi4_h_clk.clkr,
3245         [GSBI5_H_CLK] = &gsbi5_h_clk.clkr,
3246         [GSBI6_H_CLK] = &gsbi6_h_clk.clkr,
3247         [GSBI7_H_CLK] = &gsbi7_h_clk.clkr,
3248         [GSBI8_H_CLK] = &gsbi8_h_clk.clkr,
3249         [GSBI9_H_CLK] = &gsbi9_h_clk.clkr,
3250         [GSBI10_H_CLK] = &gsbi10_h_clk.clkr,
3251         [GSBI11_H_CLK] = &gsbi11_h_clk.clkr,
3252         [GSBI12_H_CLK] = &gsbi12_h_clk.clkr,
3253         [TSIF_H_CLK] = &tsif_h_clk.clkr,
3254         [USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr,
3255         [USB_FS2_H_CLK] = &usb_fs2_h_clk.clkr,
3256         [USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr,
3257         [USB_HSIC_H_CLK] = &usb_hsic_h_clk.clkr,
3258         [SDC1_H_CLK] = &sdc1_h_clk.clkr,
3259         [SDC2_H_CLK] = &sdc2_h_clk.clkr,
3260         [SDC3_H_CLK] = &sdc3_h_clk.clkr,
3261         [SDC4_H_CLK] = &sdc4_h_clk.clkr,
3262         [SDC5_H_CLK] = &sdc5_h_clk.clkr,
3263         [ADM0_CLK] = &adm0_clk.clkr,
3264         [ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr,
3265         [PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr,
3266         [PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr,
3267         [PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr,
3268         [RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr,
3269         [PLL9] = &hfpll0.clkr,
3270         [PLL10] = &hfpll1.clkr,
3271         [PLL12] = &hfpll_l2.clkr,
3272 };
3273
3274 static const struct qcom_reset_map gcc_msm8960_resets[] = {
3275         [SFAB_MSS_Q6_SW_RESET] = { 0x2040, 7 },
3276         [SFAB_MSS_Q6_FW_RESET] = { 0x2044, 7 },
3277         [QDSS_STM_RESET] = { 0x2060, 6 },
3278         [AFAB_SMPSS_S_RESET] = { 0x20b8, 2 },
3279         [AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 },
3280         [AFAB_SMPSS_M0_RESET] = { 0x20b8 },
3281         [AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 },
3282         [AFAB_EBI1_CH1_RESET] = { 0x20c4, 7},
3283         [SFAB_ADM0_M0_RESET] = { 0x21e0, 7 },
3284         [SFAB_ADM0_M1_RESET] = { 0x21e4, 7 },
3285         [SFAB_ADM0_M2_RESET] = { 0x21e8, 7 },
3286         [ADM0_C2_RESET] = { 0x220c, 4},
3287         [ADM0_C1_RESET] = { 0x220c, 3},
3288         [ADM0_C0_RESET] = { 0x220c, 2},
3289         [ADM0_PBUS_RESET] = { 0x220c, 1 },
3290         [ADM0_RESET] = { 0x220c },
3291         [QDSS_CLKS_SW_RESET] = { 0x2260, 5 },
3292         [QDSS_POR_RESET] = { 0x2260, 4 },
3293         [QDSS_TSCTR_RESET] = { 0x2260, 3 },
3294         [QDSS_HRESET_RESET] = { 0x2260, 2 },
3295         [QDSS_AXI_RESET] = { 0x2260, 1 },
3296         [QDSS_DBG_RESET] = { 0x2260 },
3297         [PCIE_A_RESET] = { 0x22c0, 7 },
3298         [PCIE_AUX_RESET] = { 0x22c8, 7 },
3299         [PCIE_H_RESET] = { 0x22d0, 7 },
3300         [SFAB_PCIE_M_RESET] = { 0x22d4, 1 },
3301         [SFAB_PCIE_S_RESET] = { 0x22d4 },
3302         [SFAB_MSS_M_RESET] = { 0x2340, 7 },
3303         [SFAB_USB3_M_RESET] = { 0x2360, 7 },
3304         [SFAB_RIVA_M_RESET] = { 0x2380, 7 },
3305         [SFAB_LPASS_RESET] = { 0x23a0, 7 },
3306         [SFAB_AFAB_M_RESET] = { 0x23e0, 7 },
3307         [AFAB_SFAB_M0_RESET] = { 0x2420, 7 },
3308         [AFAB_SFAB_M1_RESET] = { 0x2424, 7 },
3309         [SFAB_SATA_S_RESET] = { 0x2480, 7 },
3310         [SFAB_DFAB_M_RESET] = { 0x2500, 7 },
3311         [DFAB_SFAB_M_RESET] = { 0x2520, 7 },
3312         [DFAB_SWAY0_RESET] = { 0x2540, 7 },
3313         [DFAB_SWAY1_RESET] = { 0x2544, 7 },
3314         [DFAB_ARB0_RESET] = { 0x2560, 7 },
3315         [DFAB_ARB1_RESET] = { 0x2564, 7 },
3316         [PPSS_PROC_RESET] = { 0x2594, 1 },
3317         [PPSS_RESET] = { 0x2594},
3318         [DMA_BAM_RESET] = { 0x25c0, 7 },
3319         [SPS_TIC_H_RESET] = { 0x2600, 7 },
3320         [SLIMBUS_H_RESET] = { 0x2620, 7 },
3321         [SFAB_CFPB_M_RESET] = { 0x2680, 7 },
3322         [SFAB_CFPB_S_RESET] = { 0x26c0, 7 },
3323         [TSIF_H_RESET] = { 0x2700, 7 },
3324         [CE1_H_RESET] = { 0x2720, 7 },
3325         [CE1_CORE_RESET] = { 0x2724, 7 },
3326         [CE1_SLEEP_RESET] = { 0x2728, 7 },
3327         [CE2_H_RESET] = { 0x2740, 7 },
3328         [CE2_CORE_RESET] = { 0x2744, 7 },
3329         [SFAB_SFPB_M_RESET] = { 0x2780, 7 },
3330         [SFAB_SFPB_S_RESET] = { 0x27a0, 7 },
3331         [RPM_PROC_RESET] = { 0x27c0, 7 },
3332         [PMIC_SSBI2_RESET] = { 0x280c, 12 },
3333         [SDC1_RESET] = { 0x2830 },
3334         [SDC2_RESET] = { 0x2850 },
3335         [SDC3_RESET] = { 0x2870 },
3336         [SDC4_RESET] = { 0x2890 },
3337         [SDC5_RESET] = { 0x28b0 },
3338         [DFAB_A2_RESET] = { 0x28c0, 7 },
3339         [USB_HS1_RESET] = { 0x2910 },
3340         [USB_HSIC_RESET] = { 0x2934 },
3341         [USB_FS1_XCVR_RESET] = { 0x2974, 1 },
3342         [USB_FS1_RESET] = { 0x2974 },
3343         [USB_FS2_XCVR_RESET] = { 0x2994, 1 },
3344         [USB_FS2_RESET] = { 0x2994 },
3345         [GSBI1_RESET] = { 0x29dc },
3346         [GSBI2_RESET] = { 0x29fc },
3347         [GSBI3_RESET] = { 0x2a1c },
3348         [GSBI4_RESET] = { 0x2a3c },
3349         [GSBI5_RESET] = { 0x2a5c },
3350         [GSBI6_RESET] = { 0x2a7c },
3351         [GSBI7_RESET] = { 0x2a9c },
3352         [GSBI8_RESET] = { 0x2abc },
3353         [GSBI9_RESET] = { 0x2adc },
3354         [GSBI10_RESET] = { 0x2afc },
3355         [GSBI11_RESET] = { 0x2b1c },
3356         [GSBI12_RESET] = { 0x2b3c },
3357         [SPDM_RESET] = { 0x2b6c },
3358         [TLMM_H_RESET] = { 0x2ba0, 7 },
3359         [SFAB_MSS_S_RESET] = { 0x2c00, 7 },
3360         [MSS_SLP_RESET] = { 0x2c60, 7 },
3361         [MSS_Q6SW_JTAG_RESET] = { 0x2c68, 7 },
3362         [MSS_Q6FW_JTAG_RESET] = { 0x2c6c, 7 },
3363         [MSS_RESET] = { 0x2c64 },
3364         [SATA_H_RESET] = { 0x2c80, 7 },
3365         [SATA_RXOOB_RESE] = { 0x2c8c, 7 },
3366         [SATA_PMALIVE_RESET] = { 0x2c90, 7 },
3367         [SATA_SFAB_M_RESET] = { 0x2c98, 7 },
3368         [TSSC_RESET] = { 0x2ca0, 7 },
3369         [PDM_RESET] = { 0x2cc0, 12 },
3370         [MPM_H_RESET] = { 0x2da0, 7 },
3371         [MPM_RESET] = { 0x2da4 },
3372         [SFAB_SMPSS_S_RESET] = { 0x2e00, 7 },
3373         [PRNG_RESET] = { 0x2e80, 12 },
3374         [RIVA_RESET] = { 0x35e0 },
3375 };
3376
3377 static struct clk_regmap *gcc_apq8064_clks[] = {
3378         [PLL3] = &pll3.clkr,
3379         [PLL4_VOTE] = &pll4_vote,
3380         [PLL8] = &pll8.clkr,
3381         [PLL8_VOTE] = &pll8_vote,
3382         [PLL14] = &pll14.clkr,
3383         [PLL14_VOTE] = &pll14_vote,
3384         [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr,
3385         [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr,
3386         [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr,
3387         [GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr,
3388         [GSBI3_UART_SRC] = &gsbi3_uart_src.clkr,
3389         [GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr,
3390         [GSBI4_UART_SRC] = &gsbi4_uart_src.clkr,
3391         [GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr,
3392         [GSBI5_UART_SRC] = &gsbi5_uart_src.clkr,
3393         [GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr,
3394         [GSBI6_UART_SRC] = &gsbi6_uart_src.clkr,
3395         [GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr,
3396         [GSBI7_UART_SRC] = &gsbi7_uart_src.clkr,
3397         [GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr,
3398         [GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr,
3399         [GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr,
3400         [GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr,
3401         [GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr,
3402         [GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr,
3403         [GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr,
3404         [GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr,
3405         [GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr,
3406         [GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr,
3407         [GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr,
3408         [GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr,
3409         [GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr,
3410         [GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr,
3411         [GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr,
3412         [GP0_SRC] = &gp0_src.clkr,
3413         [GP0_CLK] = &gp0_clk.clkr,
3414         [GP1_SRC] = &gp1_src.clkr,
3415         [GP1_CLK] = &gp1_clk.clkr,
3416         [GP2_SRC] = &gp2_src.clkr,
3417         [GP2_CLK] = &gp2_clk.clkr,
3418         [PMEM_A_CLK] = &pmem_clk.clkr,
3419         [PRNG_SRC] = &prng_src.clkr,
3420         [PRNG_CLK] = &prng_clk.clkr,
3421         [SDC1_SRC] = &sdc1_src.clkr,
3422         [SDC1_CLK] = &sdc1_clk.clkr,
3423         [SDC2_SRC] = &sdc2_src.clkr,
3424         [SDC2_CLK] = &sdc2_clk.clkr,
3425         [SDC3_SRC] = &sdc3_src.clkr,
3426         [SDC3_CLK] = &sdc3_clk.clkr,
3427         [SDC4_SRC] = &sdc4_src.clkr,
3428         [SDC4_CLK] = &sdc4_clk.clkr,
3429         [TSIF_REF_SRC] = &tsif_ref_src.clkr,
3430         [TSIF_REF_CLK] = &tsif_ref_clk.clkr,
3431         [USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr,
3432         [USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr,
3433         [USB_HS3_XCVR_SRC] = &usb_hs3_xcvr_src.clkr,
3434         [USB_HS3_XCVR_CLK] = &usb_hs3_xcvr_clk.clkr,
3435         [USB_HS4_XCVR_SRC] = &usb_hs4_xcvr_src.clkr,
3436         [USB_HS4_XCVR_CLK] = &usb_hs4_xcvr_clk.clkr,
3437         [USB_HSIC_XCVR_FS_SRC] = &usb_hsic_xcvr_fs_src.clkr,
3438         [USB_HSIC_XCVR_FS_CLK] = &usb_hsic_xcvr_fs_clk.clkr,
3439         [USB_HSIC_SYSTEM_CLK] = &usb_hsic_system_clk.clkr,
3440         [USB_HSIC_HSIC_CLK] = &usb_hsic_hsic_clk.clkr,
3441         [USB_HSIC_HSIO_CAL_CLK] = &usb_hsic_hsio_cal_clk.clkr,
3442         [USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr,
3443         [USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr,
3444         [USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr,
3445         [SATA_H_CLK] = &sata_h_clk.clkr,
3446         [SATA_CLK_SRC] = &sata_clk_src.clkr,
3447         [SATA_RXOOB_CLK] = &sata_rxoob_clk.clkr,
3448         [SATA_PMALIVE_CLK] = &sata_pmalive_clk.clkr,
3449         [SATA_PHY_REF_CLK] = &sata_phy_ref_clk.clkr,
3450         [SATA_PHY_CFG_CLK] = &sata_phy_cfg_clk.clkr,
3451         [SATA_A_CLK] = &sata_a_clk.clkr,
3452         [SFAB_SATA_S_H_CLK] = &sfab_sata_s_h_clk.clkr,
3453         [CE3_SRC] = &ce3_src.clkr,
3454         [CE3_CORE_CLK] = &ce3_core_clk.clkr,
3455         [CE3_H_CLK] = &ce3_h_clk.clkr,
3456         [DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr,
3457         [GSBI1_H_CLK] = &gsbi1_h_clk.clkr,
3458         [GSBI2_H_CLK] = &gsbi2_h_clk.clkr,
3459         [GSBI3_H_CLK] = &gsbi3_h_clk.clkr,
3460         [GSBI4_H_CLK] = &gsbi4_h_clk.clkr,
3461         [GSBI5_H_CLK] = &gsbi5_h_clk.clkr,
3462         [GSBI6_H_CLK] = &gsbi6_h_clk.clkr,
3463         [GSBI7_H_CLK] = &gsbi7_h_clk.clkr,
3464         [TSIF_H_CLK] = &tsif_h_clk.clkr,
3465         [USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr,
3466         [USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr,
3467         [USB_HSIC_H_CLK] = &usb_hsic_h_clk.clkr,
3468         [USB_HS3_H_CLK] = &usb_hs3_h_clk.clkr,
3469         [USB_HS4_H_CLK] = &usb_hs4_h_clk.clkr,
3470         [SDC1_H_CLK] = &sdc1_h_clk.clkr,
3471         [SDC2_H_CLK] = &sdc2_h_clk.clkr,
3472         [SDC3_H_CLK] = &sdc3_h_clk.clkr,
3473         [SDC4_H_CLK] = &sdc4_h_clk.clkr,
3474         [ADM0_CLK] = &adm0_clk.clkr,
3475         [ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr,
3476         [PCIE_A_CLK] = &pcie_a_clk.clkr,
3477         [PCIE_PHY_REF_CLK] = &pcie_phy_ref_clk.clkr,
3478         [PCIE_H_CLK] = &pcie_h_clk.clkr,
3479         [PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr,
3480         [PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr,
3481         [PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr,
3482         [RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr,
3483         [PLL9] = &hfpll0.clkr,
3484         [PLL10] = &hfpll1.clkr,
3485         [PLL12] = &hfpll_l2.clkr,
3486         [PLL16] = &hfpll2.clkr,
3487         [PLL17] = &hfpll3.clkr,
3488 };
3489
3490 static const struct qcom_reset_map gcc_apq8064_resets[] = {
3491         [QDSS_STM_RESET] = { 0x2060, 6 },
3492         [AFAB_SMPSS_S_RESET] = { 0x20b8, 2 },
3493         [AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 },
3494         [AFAB_SMPSS_M0_RESET] = { 0x20b8 },
3495         [AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 },
3496         [AFAB_EBI1_CH1_RESET] = { 0x20c4, 7},
3497         [SFAB_ADM0_M0_RESET] = { 0x21e0, 7 },
3498         [SFAB_ADM0_M1_RESET] = { 0x21e4, 7 },
3499         [SFAB_ADM0_M2_RESET] = { 0x21e8, 7 },
3500         [ADM0_C2_RESET] = { 0x220c, 4},
3501         [ADM0_C1_RESET] = { 0x220c, 3},
3502         [ADM0_C0_RESET] = { 0x220c, 2},
3503         [ADM0_PBUS_RESET] = { 0x220c, 1 },
3504         [ADM0_RESET] = { 0x220c },
3505         [QDSS_CLKS_SW_RESET] = { 0x2260, 5 },
3506         [QDSS_POR_RESET] = { 0x2260, 4 },
3507         [QDSS_TSCTR_RESET] = { 0x2260, 3 },
3508         [QDSS_HRESET_RESET] = { 0x2260, 2 },
3509         [QDSS_AXI_RESET] = { 0x2260, 1 },
3510         [QDSS_DBG_RESET] = { 0x2260 },
3511         [SFAB_PCIE_M_RESET] = { 0x22d8, 1 },
3512         [SFAB_PCIE_S_RESET] = { 0x22d8 },
3513         [PCIE_EXT_PCI_RESET] = { 0x22dc, 6 },
3514         [PCIE_PHY_RESET] = { 0x22dc, 5 },
3515         [PCIE_PCI_RESET] = { 0x22dc, 4 },
3516         [PCIE_POR_RESET] = { 0x22dc, 3 },
3517         [PCIE_HCLK_RESET] = { 0x22dc, 2 },
3518         [PCIE_ACLK_RESET] = { 0x22dc },
3519         [SFAB_USB3_M_RESET] = { 0x2360, 7 },
3520         [SFAB_RIVA_M_RESET] = { 0x2380, 7 },
3521         [SFAB_LPASS_RESET] = { 0x23a0, 7 },
3522         [SFAB_AFAB_M_RESET] = { 0x23e0, 7 },
3523         [AFAB_SFAB_M0_RESET] = { 0x2420, 7 },
3524         [AFAB_SFAB_M1_RESET] = { 0x2424, 7 },
3525         [SFAB_SATA_S_RESET] = { 0x2480, 7 },
3526         [SFAB_DFAB_M_RESET] = { 0x2500, 7 },
3527         [DFAB_SFAB_M_RESET] = { 0x2520, 7 },
3528         [DFAB_SWAY0_RESET] = { 0x2540, 7 },
3529         [DFAB_SWAY1_RESET] = { 0x2544, 7 },
3530         [DFAB_ARB0_RESET] = { 0x2560, 7 },
3531         [DFAB_ARB1_RESET] = { 0x2564, 7 },
3532         [PPSS_PROC_RESET] = { 0x2594, 1 },
3533         [PPSS_RESET] = { 0x2594},
3534         [DMA_BAM_RESET] = { 0x25c0, 7 },
3535         [SPS_TIC_H_RESET] = { 0x2600, 7 },
3536         [SFAB_CFPB_M_RESET] = { 0x2680, 7 },
3537         [SFAB_CFPB_S_RESET] = { 0x26c0, 7 },
3538         [TSIF_H_RESET] = { 0x2700, 7 },
3539         [CE1_H_RESET] = { 0x2720, 7 },
3540         [CE1_CORE_RESET] = { 0x2724, 7 },
3541         [CE1_SLEEP_RESET] = { 0x2728, 7 },
3542         [CE2_H_RESET] = { 0x2740, 7 },
3543         [CE2_CORE_RESET] = { 0x2744, 7 },
3544         [SFAB_SFPB_M_RESET] = { 0x2780, 7 },
3545         [SFAB_SFPB_S_RESET] = { 0x27a0, 7 },
3546         [RPM_PROC_RESET] = { 0x27c0, 7 },
3547         [PMIC_SSBI2_RESET] = { 0x280c, 12 },
3548         [SDC1_RESET] = { 0x2830 },
3549         [SDC2_RESET] = { 0x2850 },
3550         [SDC3_RESET] = { 0x2870 },
3551         [SDC4_RESET] = { 0x2890 },
3552         [USB_HS1_RESET] = { 0x2910 },
3553         [USB_HSIC_RESET] = { 0x2934 },
3554         [USB_FS1_XCVR_RESET] = { 0x2974, 1 },
3555         [USB_FS1_RESET] = { 0x2974 },
3556         [GSBI1_RESET] = { 0x29dc },
3557         [GSBI2_RESET] = { 0x29fc },
3558         [GSBI3_RESET] = { 0x2a1c },
3559         [GSBI4_RESET] = { 0x2a3c },
3560         [GSBI5_RESET] = { 0x2a5c },
3561         [GSBI6_RESET] = { 0x2a7c },
3562         [GSBI7_RESET] = { 0x2a9c },
3563         [SPDM_RESET] = { 0x2b6c },
3564         [TLMM_H_RESET] = { 0x2ba0, 7 },
3565         [SATA_SFAB_M_RESET] = { 0x2c18 },
3566         [SATA_RESET] = { 0x2c1c },
3567         [GSS_SLP_RESET] = { 0x2c60, 7 },
3568         [GSS_RESET] = { 0x2c64 },
3569         [TSSC_RESET] = { 0x2ca0, 7 },
3570         [PDM_RESET] = { 0x2cc0, 12 },
3571         [MPM_H_RESET] = { 0x2da0, 7 },
3572         [MPM_RESET] = { 0x2da4 },
3573         [SFAB_SMPSS_S_RESET] = { 0x2e00, 7 },
3574         [PRNG_RESET] = { 0x2e80, 12 },
3575         [RIVA_RESET] = { 0x35e0 },
3576         [CE3_H_RESET] = { 0x36c4, 7 },
3577         [SFAB_CE3_M_RESET] = { 0x36c8, 1 },
3578         [SFAB_CE3_S_RESET] = { 0x36c8 },
3579         [CE3_RESET] = { 0x36cc, 7 },
3580         [CE3_SLEEP_RESET] = { 0x36d0, 7 },
3581         [USB_HS3_RESET] = { 0x3710 },
3582         [USB_HS4_RESET] = { 0x3730 },
3583 };
3584
3585 static const struct regmap_config gcc_msm8960_regmap_config = {
3586         .reg_bits       = 32,
3587         .reg_stride     = 4,
3588         .val_bits       = 32,
3589         .max_register   = 0x3660,
3590         .fast_io        = true,
3591 };
3592
3593 static const struct regmap_config gcc_apq8064_regmap_config = {
3594         .reg_bits       = 32,
3595         .reg_stride     = 4,
3596         .val_bits       = 32,
3597         .max_register   = 0x3880,
3598         .fast_io        = true,
3599 };
3600
3601 static const struct qcom_cc_desc gcc_msm8960_desc = {
3602         .config = &gcc_msm8960_regmap_config,
3603         .clks = gcc_msm8960_clks,
3604         .num_clks = ARRAY_SIZE(gcc_msm8960_clks),
3605         .resets = gcc_msm8960_resets,
3606         .num_resets = ARRAY_SIZE(gcc_msm8960_resets),
3607 };
3608
3609 static const struct qcom_cc_desc gcc_apq8064_desc = {
3610         .config = &gcc_apq8064_regmap_config,
3611         .clks = gcc_apq8064_clks,
3612         .num_clks = ARRAY_SIZE(gcc_apq8064_clks),
3613         .resets = gcc_apq8064_resets,
3614         .num_resets = ARRAY_SIZE(gcc_apq8064_resets),
3615 };
3616
3617 static const struct of_device_id gcc_msm8960_match_table[] = {
3618         { .compatible = "qcom,gcc-msm8960", .data = &gcc_msm8960_desc },
3619         { .compatible = "qcom,gcc-apq8064", .data = &gcc_apq8064_desc },
3620         { }
3621 };
3622 MODULE_DEVICE_TABLE(of, gcc_msm8960_match_table);
3623
3624 static int gcc_msm8960_probe(struct platform_device *pdev)
3625 {
3626         struct device *dev = &pdev->dev;
3627         const struct of_device_id *match;
3628         struct platform_device *tsens;
3629         int ret;
3630
3631         match = of_match_device(gcc_msm8960_match_table, &pdev->dev);
3632         if (!match)
3633                 return -EINVAL;
3634
3635         ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000);
3636         if (ret)
3637                 return ret;
3638
3639         ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000);
3640         if (ret)
3641                 return ret;
3642
3643         ret = qcom_cc_probe(pdev, match->data);
3644         if (ret)
3645                 return ret;
3646
3647         if (match->data == &gcc_apq8064_desc) {
3648                 hfpll1.d = &hfpll1_8064_data;
3649                 hfpll_l2.d = &hfpll_l2_8064_data;
3650         }
3651
3652         tsens = platform_device_register_data(&pdev->dev, "qcom-tsens", -1,
3653                                               NULL, 0);
3654         if (IS_ERR(tsens))
3655                 return PTR_ERR(tsens);
3656
3657         platform_set_drvdata(pdev, tsens);
3658
3659         return 0;
3660 }
3661
3662 static int gcc_msm8960_remove(struct platform_device *pdev)
3663 {
3664         struct platform_device *tsens = platform_get_drvdata(pdev);
3665
3666         platform_device_unregister(tsens);
3667
3668         return 0;
3669 }
3670
3671 static struct platform_driver gcc_msm8960_driver = {
3672         .probe          = gcc_msm8960_probe,
3673         .remove         = gcc_msm8960_remove,
3674         .driver         = {
3675                 .name   = "gcc-msm8960",
3676                 .of_match_table = gcc_msm8960_match_table,
3677         },
3678 };
3679
3680 static int __init gcc_msm8960_init(void)
3681 {
3682         return platform_driver_register(&gcc_msm8960_driver);
3683 }
3684 core_initcall(gcc_msm8960_init);
3685
3686 static void __exit gcc_msm8960_exit(void)
3687 {
3688         platform_driver_unregister(&gcc_msm8960_driver);
3689 }
3690 module_exit(gcc_msm8960_exit);
3691
3692 MODULE_DESCRIPTION("QCOM GCC MSM8960 Driver");
3693 MODULE_LICENSE("GPL v2");
3694 MODULE_ALIAS("platform:gcc-msm8960");