Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
0004  */
0005 
0006 #include <linux/kernel.h>
0007 #include <linux/bitops.h>
0008 #include <linux/err.h>
0009 #include <linux/platform_device.h>
0010 #include <linux/module.h>
0011 #include <linux/of.h>
0012 #include <linux/of_device.h>
0013 #include <linux/clk-provider.h>
0014 #include <linux/regmap.h>
0015 #include <linux/reset-controller.h>
0016 
0017 #include <dt-bindings/clock/qcom,gcc-msm8960.h>
0018 #include <dt-bindings/reset/qcom,gcc-msm8960.h>
0019 
0020 #include "common.h"
0021 #include "clk-regmap.h"
0022 #include "clk-pll.h"
0023 #include "clk-rcg.h"
0024 #include "clk-branch.h"
0025 #include "clk-hfpll.h"
0026 #include "reset.h"
0027 
0028 static struct clk_pll pll3 = {
0029     .l_reg = 0x3164,
0030     .m_reg = 0x3168,
0031     .n_reg = 0x316c,
0032     .config_reg = 0x3174,
0033     .mode_reg = 0x3160,
0034     .status_reg = 0x3178,
0035     .status_bit = 16,
0036     .clkr.hw.init = &(struct clk_init_data){
0037         .name = "pll3",
0038         .parent_names = (const char *[]){ "pxo" },
0039         .num_parents = 1,
0040         .ops = &clk_pll_ops,
0041     },
0042 };
0043 
0044 static struct clk_regmap pll4_vote = {
0045     .enable_reg = 0x34c0,
0046     .enable_mask = BIT(4),
0047     .hw.init = &(struct clk_init_data){
0048         .name = "pll4_vote",
0049         .parent_names = (const char *[]){ "pll4" },
0050         .num_parents = 1,
0051         .ops = &clk_pll_vote_ops,
0052     },
0053 };
0054 
0055 static struct clk_pll pll8 = {
0056     .l_reg = 0x3144,
0057     .m_reg = 0x3148,
0058     .n_reg = 0x314c,
0059     .config_reg = 0x3154,
0060     .mode_reg = 0x3140,
0061     .status_reg = 0x3158,
0062     .status_bit = 16,
0063     .clkr.hw.init = &(struct clk_init_data){
0064         .name = "pll8",
0065         .parent_names = (const char *[]){ "pxo" },
0066         .num_parents = 1,
0067         .ops = &clk_pll_ops,
0068     },
0069 };
0070 
0071 static struct clk_regmap pll8_vote = {
0072     .enable_reg = 0x34c0,
0073     .enable_mask = BIT(8),
0074     .hw.init = &(struct clk_init_data){
0075         .name = "pll8_vote",
0076         .parent_names = (const char *[]){ "pll8" },
0077         .num_parents = 1,
0078         .ops = &clk_pll_vote_ops,
0079     },
0080 };
0081 
0082 static struct hfpll_data hfpll0_data = {
0083     .mode_reg = 0x3200,
0084     .l_reg = 0x3208,
0085     .m_reg = 0x320c,
0086     .n_reg = 0x3210,
0087     .config_reg = 0x3204,
0088     .status_reg = 0x321c,
0089     .config_val = 0x7845c665,
0090     .droop_reg = 0x3214,
0091     .droop_val = 0x0108c000,
0092     .min_rate = 600000000UL,
0093     .max_rate = 1800000000UL,
0094 };
0095 
0096 static struct clk_hfpll hfpll0 = {
0097     .d = &hfpll0_data,
0098     .clkr.hw.init = &(struct clk_init_data){
0099         .parent_names = (const char *[]){ "pxo" },
0100         .num_parents = 1,
0101         .name = "hfpll0",
0102         .ops = &clk_ops_hfpll,
0103         .flags = CLK_IGNORE_UNUSED,
0104     },
0105     .lock = __SPIN_LOCK_UNLOCKED(hfpll0.lock),
0106 };
0107 
0108 static struct hfpll_data hfpll1_8064_data = {
0109     .mode_reg = 0x3240,
0110     .l_reg = 0x3248,
0111     .m_reg = 0x324c,
0112     .n_reg = 0x3250,
0113     .config_reg = 0x3244,
0114     .status_reg = 0x325c,
0115     .config_val = 0x7845c665,
0116     .droop_reg = 0x3254,
0117     .droop_val = 0x0108c000,
0118     .min_rate = 600000000UL,
0119     .max_rate = 1800000000UL,
0120 };
0121 
0122 static struct hfpll_data hfpll1_data = {
0123     .mode_reg = 0x3300,
0124     .l_reg = 0x3308,
0125     .m_reg = 0x330c,
0126     .n_reg = 0x3310,
0127     .config_reg = 0x3304,
0128     .status_reg = 0x331c,
0129     .config_val = 0x7845c665,
0130     .droop_reg = 0x3314,
0131     .droop_val = 0x0108c000,
0132     .min_rate = 600000000UL,
0133     .max_rate = 1800000000UL,
0134 };
0135 
0136 static struct clk_hfpll hfpll1 = {
0137     .d = &hfpll1_data,
0138     .clkr.hw.init = &(struct clk_init_data){
0139         .parent_names = (const char *[]){ "pxo" },
0140         .num_parents = 1,
0141         .name = "hfpll1",
0142         .ops = &clk_ops_hfpll,
0143         .flags = CLK_IGNORE_UNUSED,
0144     },
0145     .lock = __SPIN_LOCK_UNLOCKED(hfpll1.lock),
0146 };
0147 
0148 static struct hfpll_data hfpll2_data = {
0149     .mode_reg = 0x3280,
0150     .l_reg = 0x3288,
0151     .m_reg = 0x328c,
0152     .n_reg = 0x3290,
0153     .config_reg = 0x3284,
0154     .status_reg = 0x329c,
0155     .config_val = 0x7845c665,
0156     .droop_reg = 0x3294,
0157     .droop_val = 0x0108c000,
0158     .min_rate = 600000000UL,
0159     .max_rate = 1800000000UL,
0160 };
0161 
0162 static struct clk_hfpll hfpll2 = {
0163     .d = &hfpll2_data,
0164     .clkr.hw.init = &(struct clk_init_data){
0165         .parent_names = (const char *[]){ "pxo" },
0166         .num_parents = 1,
0167         .name = "hfpll2",
0168         .ops = &clk_ops_hfpll,
0169         .flags = CLK_IGNORE_UNUSED,
0170     },
0171     .lock = __SPIN_LOCK_UNLOCKED(hfpll2.lock),
0172 };
0173 
0174 static struct hfpll_data hfpll3_data = {
0175     .mode_reg = 0x32c0,
0176     .l_reg = 0x32c8,
0177     .m_reg = 0x32cc,
0178     .n_reg = 0x32d0,
0179     .config_reg = 0x32c4,
0180     .status_reg = 0x32dc,
0181     .config_val = 0x7845c665,
0182     .droop_reg = 0x32d4,
0183     .droop_val = 0x0108c000,
0184     .min_rate = 600000000UL,
0185     .max_rate = 1800000000UL,
0186 };
0187 
0188 static struct clk_hfpll hfpll3 = {
0189     .d = &hfpll3_data,
0190     .clkr.hw.init = &(struct clk_init_data){
0191         .parent_names = (const char *[]){ "pxo" },
0192         .num_parents = 1,
0193         .name = "hfpll3",
0194         .ops = &clk_ops_hfpll,
0195         .flags = CLK_IGNORE_UNUSED,
0196     },
0197     .lock = __SPIN_LOCK_UNLOCKED(hfpll3.lock),
0198 };
0199 
0200 static struct hfpll_data hfpll_l2_8064_data = {
0201     .mode_reg = 0x3300,
0202     .l_reg = 0x3308,
0203     .m_reg = 0x330c,
0204     .n_reg = 0x3310,
0205     .config_reg = 0x3304,
0206     .status_reg = 0x331c,
0207     .config_val = 0x7845c665,
0208     .droop_reg = 0x3314,
0209     .droop_val = 0x0108c000,
0210     .min_rate = 600000000UL,
0211     .max_rate = 1800000000UL,
0212 };
0213 
0214 static struct hfpll_data hfpll_l2_data = {
0215     .mode_reg = 0x3400,
0216     .l_reg = 0x3408,
0217     .m_reg = 0x340c,
0218     .n_reg = 0x3410,
0219     .config_reg = 0x3404,
0220     .status_reg = 0x341c,
0221     .config_val = 0x7845c665,
0222     .droop_reg = 0x3414,
0223     .droop_val = 0x0108c000,
0224     .min_rate = 600000000UL,
0225     .max_rate = 1800000000UL,
0226 };
0227 
0228 static struct clk_hfpll hfpll_l2 = {
0229     .d = &hfpll_l2_data,
0230     .clkr.hw.init = &(struct clk_init_data){
0231         .parent_names = (const char *[]){ "pxo" },
0232         .num_parents = 1,
0233         .name = "hfpll_l2",
0234         .ops = &clk_ops_hfpll,
0235         .flags = CLK_IGNORE_UNUSED,
0236     },
0237     .lock = __SPIN_LOCK_UNLOCKED(hfpll_l2.lock),
0238 };
0239 
0240 static struct clk_pll pll14 = {
0241     .l_reg = 0x31c4,
0242     .m_reg = 0x31c8,
0243     .n_reg = 0x31cc,
0244     .config_reg = 0x31d4,
0245     .mode_reg = 0x31c0,
0246     .status_reg = 0x31d8,
0247     .status_bit = 16,
0248     .clkr.hw.init = &(struct clk_init_data){
0249         .name = "pll14",
0250         .parent_names = (const char *[]){ "pxo" },
0251         .num_parents = 1,
0252         .ops = &clk_pll_ops,
0253     },
0254 };
0255 
0256 static struct clk_regmap pll14_vote = {
0257     .enable_reg = 0x34c0,
0258     .enable_mask = BIT(14),
0259     .hw.init = &(struct clk_init_data){
0260         .name = "pll14_vote",
0261         .parent_names = (const char *[]){ "pll14" },
0262         .num_parents = 1,
0263         .ops = &clk_pll_vote_ops,
0264     },
0265 };
0266 
0267 enum {
0268     P_PXO,
0269     P_PLL8,
0270     P_PLL3,
0271     P_CXO,
0272 };
0273 
0274 static const struct parent_map gcc_pxo_pll8_map[] = {
0275     { P_PXO, 0 },
0276     { P_PLL8, 3 }
0277 };
0278 
0279 static const char * const gcc_pxo_pll8[] = {
0280     "pxo",
0281     "pll8_vote",
0282 };
0283 
0284 static const struct parent_map gcc_pxo_pll8_cxo_map[] = {
0285     { P_PXO, 0 },
0286     { P_PLL8, 3 },
0287     { P_CXO, 5 }
0288 };
0289 
0290 static const char * const gcc_pxo_pll8_cxo[] = {
0291     "pxo",
0292     "pll8_vote",
0293     "cxo",
0294 };
0295 
0296 static const struct parent_map gcc_pxo_pll8_pll3_map[] = {
0297     { P_PXO, 0 },
0298     { P_PLL8, 3 },
0299     { P_PLL3, 6 }
0300 };
0301 
0302 static const char * const gcc_pxo_pll8_pll3[] = {
0303     "pxo",
0304     "pll8_vote",
0305     "pll3",
0306 };
0307 
0308 static struct freq_tbl clk_tbl_gsbi_uart[] = {
0309     {  1843200, P_PLL8, 2,  6, 625 },
0310     {  3686400, P_PLL8, 2, 12, 625 },
0311     {  7372800, P_PLL8, 2, 24, 625 },
0312     { 14745600, P_PLL8, 2, 48, 625 },
0313     { 16000000, P_PLL8, 4,  1,   6 },
0314     { 24000000, P_PLL8, 4,  1,   4 },
0315     { 32000000, P_PLL8, 4,  1,   3 },
0316     { 40000000, P_PLL8, 1,  5,  48 },
0317     { 46400000, P_PLL8, 1, 29, 240 },
0318     { 48000000, P_PLL8, 4,  1,   2 },
0319     { 51200000, P_PLL8, 1,  2,  15 },
0320     { 56000000, P_PLL8, 1,  7,  48 },
0321     { 58982400, P_PLL8, 1, 96, 625 },
0322     { 64000000, P_PLL8, 2,  1,   3 },
0323     { }
0324 };
0325 
0326 static struct clk_rcg gsbi1_uart_src = {
0327     .ns_reg = 0x29d4,
0328     .md_reg = 0x29d0,
0329     .mn = {
0330         .mnctr_en_bit = 8,
0331         .mnctr_reset_bit = 7,
0332         .mnctr_mode_shift = 5,
0333         .n_val_shift = 16,
0334         .m_val_shift = 16,
0335         .width = 16,
0336     },
0337     .p = {
0338         .pre_div_shift = 3,
0339         .pre_div_width = 2,
0340     },
0341     .s = {
0342         .src_sel_shift = 0,
0343         .parent_map = gcc_pxo_pll8_map,
0344     },
0345     .freq_tbl = clk_tbl_gsbi_uart,
0346     .clkr = {
0347         .enable_reg = 0x29d4,
0348         .enable_mask = BIT(11),
0349         .hw.init = &(struct clk_init_data){
0350             .name = "gsbi1_uart_src",
0351             .parent_names = gcc_pxo_pll8,
0352             .num_parents = 2,
0353             .ops = &clk_rcg_ops,
0354             .flags = CLK_SET_PARENT_GATE,
0355         },
0356     },
0357 };
0358 
0359 static struct clk_branch gsbi1_uart_clk = {
0360     .halt_reg = 0x2fcc,
0361     .halt_bit = 10,
0362     .clkr = {
0363         .enable_reg = 0x29d4,
0364         .enable_mask = BIT(9),
0365         .hw.init = &(struct clk_init_data){
0366             .name = "gsbi1_uart_clk",
0367             .parent_names = (const char *[]){
0368                 "gsbi1_uart_src",
0369             },
0370             .num_parents = 1,
0371             .ops = &clk_branch_ops,
0372             .flags = CLK_SET_RATE_PARENT,
0373         },
0374     },
0375 };
0376 
0377 static struct clk_rcg gsbi2_uart_src = {
0378     .ns_reg = 0x29f4,
0379     .md_reg = 0x29f0,
0380     .mn = {
0381         .mnctr_en_bit = 8,
0382         .mnctr_reset_bit = 7,
0383         .mnctr_mode_shift = 5,
0384         .n_val_shift = 16,
0385         .m_val_shift = 16,
0386         .width = 16,
0387     },
0388     .p = {
0389         .pre_div_shift = 3,
0390         .pre_div_width = 2,
0391     },
0392     .s = {
0393         .src_sel_shift = 0,
0394         .parent_map = gcc_pxo_pll8_map,
0395     },
0396     .freq_tbl = clk_tbl_gsbi_uart,
0397     .clkr = {
0398         .enable_reg = 0x29f4,
0399         .enable_mask = BIT(11),
0400         .hw.init = &(struct clk_init_data){
0401             .name = "gsbi2_uart_src",
0402             .parent_names = gcc_pxo_pll8,
0403             .num_parents = 2,
0404             .ops = &clk_rcg_ops,
0405             .flags = CLK_SET_PARENT_GATE,
0406         },
0407     },
0408 };
0409 
0410 static struct clk_branch gsbi2_uart_clk = {
0411     .halt_reg = 0x2fcc,
0412     .halt_bit = 6,
0413     .clkr = {
0414         .enable_reg = 0x29f4,
0415         .enable_mask = BIT(9),
0416         .hw.init = &(struct clk_init_data){
0417             .name = "gsbi2_uart_clk",
0418             .parent_names = (const char *[]){
0419                 "gsbi2_uart_src",
0420             },
0421             .num_parents = 1,
0422             .ops = &clk_branch_ops,
0423             .flags = CLK_SET_RATE_PARENT,
0424         },
0425     },
0426 };
0427 
0428 static struct clk_rcg gsbi3_uart_src = {
0429     .ns_reg = 0x2a14,
0430     .md_reg = 0x2a10,
0431     .mn = {
0432         .mnctr_en_bit = 8,
0433         .mnctr_reset_bit = 7,
0434         .mnctr_mode_shift = 5,
0435         .n_val_shift = 16,
0436         .m_val_shift = 16,
0437         .width = 16,
0438     },
0439     .p = {
0440         .pre_div_shift = 3,
0441         .pre_div_width = 2,
0442     },
0443     .s = {
0444         .src_sel_shift = 0,
0445         .parent_map = gcc_pxo_pll8_map,
0446     },
0447     .freq_tbl = clk_tbl_gsbi_uart,
0448     .clkr = {
0449         .enable_reg = 0x2a14,
0450         .enable_mask = BIT(11),
0451         .hw.init = &(struct clk_init_data){
0452             .name = "gsbi3_uart_src",
0453             .parent_names = gcc_pxo_pll8,
0454             .num_parents = 2,
0455             .ops = &clk_rcg_ops,
0456             .flags = CLK_SET_PARENT_GATE,
0457         },
0458     },
0459 };
0460 
0461 static struct clk_branch gsbi3_uart_clk = {
0462     .halt_reg = 0x2fcc,
0463     .halt_bit = 2,
0464     .clkr = {
0465         .enable_reg = 0x2a14,
0466         .enable_mask = BIT(9),
0467         .hw.init = &(struct clk_init_data){
0468             .name = "gsbi3_uart_clk",
0469             .parent_names = (const char *[]){
0470                 "gsbi3_uart_src",
0471             },
0472             .num_parents = 1,
0473             .ops = &clk_branch_ops,
0474             .flags = CLK_SET_RATE_PARENT,
0475         },
0476     },
0477 };
0478 
0479 static struct clk_rcg gsbi4_uart_src = {
0480     .ns_reg = 0x2a34,
0481     .md_reg = 0x2a30,
0482     .mn = {
0483         .mnctr_en_bit = 8,
0484         .mnctr_reset_bit = 7,
0485         .mnctr_mode_shift = 5,
0486         .n_val_shift = 16,
0487         .m_val_shift = 16,
0488         .width = 16,
0489     },
0490     .p = {
0491         .pre_div_shift = 3,
0492         .pre_div_width = 2,
0493     },
0494     .s = {
0495         .src_sel_shift = 0,
0496         .parent_map = gcc_pxo_pll8_map,
0497     },
0498     .freq_tbl = clk_tbl_gsbi_uart,
0499     .clkr = {
0500         .enable_reg = 0x2a34,
0501         .enable_mask = BIT(11),
0502         .hw.init = &(struct clk_init_data){
0503             .name = "gsbi4_uart_src",
0504             .parent_names = gcc_pxo_pll8,
0505             .num_parents = 2,
0506             .ops = &clk_rcg_ops,
0507             .flags = CLK_SET_PARENT_GATE,
0508         },
0509     },
0510 };
0511 
0512 static struct clk_branch gsbi4_uart_clk = {
0513     .halt_reg = 0x2fd0,
0514     .halt_bit = 26,
0515     .clkr = {
0516         .enable_reg = 0x2a34,
0517         .enable_mask = BIT(9),
0518         .hw.init = &(struct clk_init_data){
0519             .name = "gsbi4_uart_clk",
0520             .parent_names = (const char *[]){
0521                 "gsbi4_uart_src",
0522             },
0523             .num_parents = 1,
0524             .ops = &clk_branch_ops,
0525             .flags = CLK_SET_RATE_PARENT,
0526         },
0527     },
0528 };
0529 
0530 static struct clk_rcg gsbi5_uart_src = {
0531     .ns_reg = 0x2a54,
0532     .md_reg = 0x2a50,
0533     .mn = {
0534         .mnctr_en_bit = 8,
0535         .mnctr_reset_bit = 7,
0536         .mnctr_mode_shift = 5,
0537         .n_val_shift = 16,
0538         .m_val_shift = 16,
0539         .width = 16,
0540     },
0541     .p = {
0542         .pre_div_shift = 3,
0543         .pre_div_width = 2,
0544     },
0545     .s = {
0546         .src_sel_shift = 0,
0547         .parent_map = gcc_pxo_pll8_map,
0548     },
0549     .freq_tbl = clk_tbl_gsbi_uart,
0550     .clkr = {
0551         .enable_reg = 0x2a54,
0552         .enable_mask = BIT(11),
0553         .hw.init = &(struct clk_init_data){
0554             .name = "gsbi5_uart_src",
0555             .parent_names = gcc_pxo_pll8,
0556             .num_parents = 2,
0557             .ops = &clk_rcg_ops,
0558             .flags = CLK_SET_PARENT_GATE,
0559         },
0560     },
0561 };
0562 
0563 static struct clk_branch gsbi5_uart_clk = {
0564     .halt_reg = 0x2fd0,
0565     .halt_bit = 22,
0566     .clkr = {
0567         .enable_reg = 0x2a54,
0568         .enable_mask = BIT(9),
0569         .hw.init = &(struct clk_init_data){
0570             .name = "gsbi5_uart_clk",
0571             .parent_names = (const char *[]){
0572                 "gsbi5_uart_src",
0573             },
0574             .num_parents = 1,
0575             .ops = &clk_branch_ops,
0576             .flags = CLK_SET_RATE_PARENT,
0577         },
0578     },
0579 };
0580 
0581 static struct clk_rcg gsbi6_uart_src = {
0582     .ns_reg = 0x2a74,
0583     .md_reg = 0x2a70,
0584     .mn = {
0585         .mnctr_en_bit = 8,
0586         .mnctr_reset_bit = 7,
0587         .mnctr_mode_shift = 5,
0588         .n_val_shift = 16,
0589         .m_val_shift = 16,
0590         .width = 16,
0591     },
0592     .p = {
0593         .pre_div_shift = 3,
0594         .pre_div_width = 2,
0595     },
0596     .s = {
0597         .src_sel_shift = 0,
0598         .parent_map = gcc_pxo_pll8_map,
0599     },
0600     .freq_tbl = clk_tbl_gsbi_uart,
0601     .clkr = {
0602         .enable_reg = 0x2a74,
0603         .enable_mask = BIT(11),
0604         .hw.init = &(struct clk_init_data){
0605             .name = "gsbi6_uart_src",
0606             .parent_names = gcc_pxo_pll8,
0607             .num_parents = 2,
0608             .ops = &clk_rcg_ops,
0609             .flags = CLK_SET_PARENT_GATE,
0610         },
0611     },
0612 };
0613 
0614 static struct clk_branch gsbi6_uart_clk = {
0615     .halt_reg = 0x2fd0,
0616     .halt_bit = 18,
0617     .clkr = {
0618         .enable_reg = 0x2a74,
0619         .enable_mask = BIT(9),
0620         .hw.init = &(struct clk_init_data){
0621             .name = "gsbi6_uart_clk",
0622             .parent_names = (const char *[]){
0623                 "gsbi6_uart_src",
0624             },
0625             .num_parents = 1,
0626             .ops = &clk_branch_ops,
0627             .flags = CLK_SET_RATE_PARENT,
0628         },
0629     },
0630 };
0631 
0632 static struct clk_rcg gsbi7_uart_src = {
0633     .ns_reg = 0x2a94,
0634     .md_reg = 0x2a90,
0635     .mn = {
0636         .mnctr_en_bit = 8,
0637         .mnctr_reset_bit = 7,
0638         .mnctr_mode_shift = 5,
0639         .n_val_shift = 16,
0640         .m_val_shift = 16,
0641         .width = 16,
0642     },
0643     .p = {
0644         .pre_div_shift = 3,
0645         .pre_div_width = 2,
0646     },
0647     .s = {
0648         .src_sel_shift = 0,
0649         .parent_map = gcc_pxo_pll8_map,
0650     },
0651     .freq_tbl = clk_tbl_gsbi_uart,
0652     .clkr = {
0653         .enable_reg = 0x2a94,
0654         .enable_mask = BIT(11),
0655         .hw.init = &(struct clk_init_data){
0656             .name = "gsbi7_uart_src",
0657             .parent_names = gcc_pxo_pll8,
0658             .num_parents = 2,
0659             .ops = &clk_rcg_ops,
0660             .flags = CLK_SET_PARENT_GATE,
0661         },
0662     },
0663 };
0664 
0665 static struct clk_branch gsbi7_uart_clk = {
0666     .halt_reg = 0x2fd0,
0667     .halt_bit = 14,
0668     .clkr = {
0669         .enable_reg = 0x2a94,
0670         .enable_mask = BIT(9),
0671         .hw.init = &(struct clk_init_data){
0672             .name = "gsbi7_uart_clk",
0673             .parent_names = (const char *[]){
0674                 "gsbi7_uart_src",
0675             },
0676             .num_parents = 1,
0677             .ops = &clk_branch_ops,
0678             .flags = CLK_SET_RATE_PARENT,
0679         },
0680     },
0681 };
0682 
0683 static struct clk_rcg gsbi8_uart_src = {
0684     .ns_reg = 0x2ab4,
0685     .md_reg = 0x2ab0,
0686     .mn = {
0687         .mnctr_en_bit = 8,
0688         .mnctr_reset_bit = 7,
0689         .mnctr_mode_shift = 5,
0690         .n_val_shift = 16,
0691         .m_val_shift = 16,
0692         .width = 16,
0693     },
0694     .p = {
0695         .pre_div_shift = 3,
0696         .pre_div_width = 2,
0697     },
0698     .s = {
0699         .src_sel_shift = 0,
0700         .parent_map = gcc_pxo_pll8_map,
0701     },
0702     .freq_tbl = clk_tbl_gsbi_uart,
0703     .clkr = {
0704         .enable_reg = 0x2ab4,
0705         .enable_mask = BIT(11),
0706         .hw.init = &(struct clk_init_data){
0707             .name = "gsbi8_uart_src",
0708             .parent_names = gcc_pxo_pll8,
0709             .num_parents = 2,
0710             .ops = &clk_rcg_ops,
0711             .flags = CLK_SET_PARENT_GATE,
0712         },
0713     },
0714 };
0715 
0716 static struct clk_branch gsbi8_uart_clk = {
0717     .halt_reg = 0x2fd0,
0718     .halt_bit = 10,
0719     .clkr = {
0720         .enable_reg = 0x2ab4,
0721         .enable_mask = BIT(9),
0722         .hw.init = &(struct clk_init_data){
0723             .name = "gsbi8_uart_clk",
0724             .parent_names = (const char *[]){ "gsbi8_uart_src" },
0725             .num_parents = 1,
0726             .ops = &clk_branch_ops,
0727             .flags = CLK_SET_RATE_PARENT,
0728         },
0729     },
0730 };
0731 
0732 static struct clk_rcg gsbi9_uart_src = {
0733     .ns_reg = 0x2ad4,
0734     .md_reg = 0x2ad0,
0735     .mn = {
0736         .mnctr_en_bit = 8,
0737         .mnctr_reset_bit = 7,
0738         .mnctr_mode_shift = 5,
0739         .n_val_shift = 16,
0740         .m_val_shift = 16,
0741         .width = 16,
0742     },
0743     .p = {
0744         .pre_div_shift = 3,
0745         .pre_div_width = 2,
0746     },
0747     .s = {
0748         .src_sel_shift = 0,
0749         .parent_map = gcc_pxo_pll8_map,
0750     },
0751     .freq_tbl = clk_tbl_gsbi_uart,
0752     .clkr = {
0753         .enable_reg = 0x2ad4,
0754         .enable_mask = BIT(11),
0755         .hw.init = &(struct clk_init_data){
0756             .name = "gsbi9_uart_src",
0757             .parent_names = gcc_pxo_pll8,
0758             .num_parents = 2,
0759             .ops = &clk_rcg_ops,
0760             .flags = CLK_SET_PARENT_GATE,
0761         },
0762     },
0763 };
0764 
0765 static struct clk_branch gsbi9_uart_clk = {
0766     .halt_reg = 0x2fd0,
0767     .halt_bit = 6,
0768     .clkr = {
0769         .enable_reg = 0x2ad4,
0770         .enable_mask = BIT(9),
0771         .hw.init = &(struct clk_init_data){
0772             .name = "gsbi9_uart_clk",
0773             .parent_names = (const char *[]){ "gsbi9_uart_src" },
0774             .num_parents = 1,
0775             .ops = &clk_branch_ops,
0776             .flags = CLK_SET_RATE_PARENT,
0777         },
0778     },
0779 };
0780 
0781 static struct clk_rcg gsbi10_uart_src = {
0782     .ns_reg = 0x2af4,
0783     .md_reg = 0x2af0,
0784     .mn = {
0785         .mnctr_en_bit = 8,
0786         .mnctr_reset_bit = 7,
0787         .mnctr_mode_shift = 5,
0788         .n_val_shift = 16,
0789         .m_val_shift = 16,
0790         .width = 16,
0791     },
0792     .p = {
0793         .pre_div_shift = 3,
0794         .pre_div_width = 2,
0795     },
0796     .s = {
0797         .src_sel_shift = 0,
0798         .parent_map = gcc_pxo_pll8_map,
0799     },
0800     .freq_tbl = clk_tbl_gsbi_uart,
0801     .clkr = {
0802         .enable_reg = 0x2af4,
0803         .enable_mask = BIT(11),
0804         .hw.init = &(struct clk_init_data){
0805             .name = "gsbi10_uart_src",
0806             .parent_names = gcc_pxo_pll8,
0807             .num_parents = 2,
0808             .ops = &clk_rcg_ops,
0809             .flags = CLK_SET_PARENT_GATE,
0810         },
0811     },
0812 };
0813 
0814 static struct clk_branch gsbi10_uart_clk = {
0815     .halt_reg = 0x2fd0,
0816     .halt_bit = 2,
0817     .clkr = {
0818         .enable_reg = 0x2af4,
0819         .enable_mask = BIT(9),
0820         .hw.init = &(struct clk_init_data){
0821             .name = "gsbi10_uart_clk",
0822             .parent_names = (const char *[]){ "gsbi10_uart_src" },
0823             .num_parents = 1,
0824             .ops = &clk_branch_ops,
0825             .flags = CLK_SET_RATE_PARENT,
0826         },
0827     },
0828 };
0829 
0830 static struct clk_rcg gsbi11_uart_src = {
0831     .ns_reg = 0x2b14,
0832     .md_reg = 0x2b10,
0833     .mn = {
0834         .mnctr_en_bit = 8,
0835         .mnctr_reset_bit = 7,
0836         .mnctr_mode_shift = 5,
0837         .n_val_shift = 16,
0838         .m_val_shift = 16,
0839         .width = 16,
0840     },
0841     .p = {
0842         .pre_div_shift = 3,
0843         .pre_div_width = 2,
0844     },
0845     .s = {
0846         .src_sel_shift = 0,
0847         .parent_map = gcc_pxo_pll8_map,
0848     },
0849     .freq_tbl = clk_tbl_gsbi_uart,
0850     .clkr = {
0851         .enable_reg = 0x2b14,
0852         .enable_mask = BIT(11),
0853         .hw.init = &(struct clk_init_data){
0854             .name = "gsbi11_uart_src",
0855             .parent_names = gcc_pxo_pll8,
0856             .num_parents = 2,
0857             .ops = &clk_rcg_ops,
0858             .flags = CLK_SET_PARENT_GATE,
0859         },
0860     },
0861 };
0862 
0863 static struct clk_branch gsbi11_uart_clk = {
0864     .halt_reg = 0x2fd4,
0865     .halt_bit = 17,
0866     .clkr = {
0867         .enable_reg = 0x2b14,
0868         .enable_mask = BIT(9),
0869         .hw.init = &(struct clk_init_data){
0870             .name = "gsbi11_uart_clk",
0871             .parent_names = (const char *[]){ "gsbi11_uart_src" },
0872             .num_parents = 1,
0873             .ops = &clk_branch_ops,
0874             .flags = CLK_SET_RATE_PARENT,
0875         },
0876     },
0877 };
0878 
0879 static struct clk_rcg gsbi12_uart_src = {
0880     .ns_reg = 0x2b34,
0881     .md_reg = 0x2b30,
0882     .mn = {
0883         .mnctr_en_bit = 8,
0884         .mnctr_reset_bit = 7,
0885         .mnctr_mode_shift = 5,
0886         .n_val_shift = 16,
0887         .m_val_shift = 16,
0888         .width = 16,
0889     },
0890     .p = {
0891         .pre_div_shift = 3,
0892         .pre_div_width = 2,
0893     },
0894     .s = {
0895         .src_sel_shift = 0,
0896         .parent_map = gcc_pxo_pll8_map,
0897     },
0898     .freq_tbl = clk_tbl_gsbi_uart,
0899     .clkr = {
0900         .enable_reg = 0x2b34,
0901         .enable_mask = BIT(11),
0902         .hw.init = &(struct clk_init_data){
0903             .name = "gsbi12_uart_src",
0904             .parent_names = gcc_pxo_pll8,
0905             .num_parents = 2,
0906             .ops = &clk_rcg_ops,
0907             .flags = CLK_SET_PARENT_GATE,
0908         },
0909     },
0910 };
0911 
0912 static struct clk_branch gsbi12_uart_clk = {
0913     .halt_reg = 0x2fd4,
0914     .halt_bit = 13,
0915     .clkr = {
0916         .enable_reg = 0x2b34,
0917         .enable_mask = BIT(9),
0918         .hw.init = &(struct clk_init_data){
0919             .name = "gsbi12_uart_clk",
0920             .parent_names = (const char *[]){ "gsbi12_uart_src" },
0921             .num_parents = 1,
0922             .ops = &clk_branch_ops,
0923             .flags = CLK_SET_RATE_PARENT,
0924         },
0925     },
0926 };
0927 
0928 static struct freq_tbl clk_tbl_gsbi_qup[] = {
0929     {  1100000, P_PXO,  1, 2, 49 },
0930     {  5400000, P_PXO,  1, 1,  5 },
0931     { 10800000, P_PXO,  1, 2,  5 },
0932     { 15060000, P_PLL8, 1, 2, 51 },
0933     { 24000000, P_PLL8, 4, 1,  4 },
0934     { 25600000, P_PLL8, 1, 1, 15 },
0935     { 27000000, P_PXO,  1, 0,  0 },
0936     { 48000000, P_PLL8, 4, 1,  2 },
0937     { 51200000, P_PLL8, 1, 2, 15 },
0938     { }
0939 };
0940 
0941 static struct clk_rcg gsbi1_qup_src = {
0942     .ns_reg = 0x29cc,
0943     .md_reg = 0x29c8,
0944     .mn = {
0945         .mnctr_en_bit = 8,
0946         .mnctr_reset_bit = 7,
0947         .mnctr_mode_shift = 5,
0948         .n_val_shift = 16,
0949         .m_val_shift = 16,
0950         .width = 8,
0951     },
0952     .p = {
0953         .pre_div_shift = 3,
0954         .pre_div_width = 2,
0955     },
0956     .s = {
0957         .src_sel_shift = 0,
0958         .parent_map = gcc_pxo_pll8_map,
0959     },
0960     .freq_tbl = clk_tbl_gsbi_qup,
0961     .clkr = {
0962         .enable_reg = 0x29cc,
0963         .enable_mask = BIT(11),
0964         .hw.init = &(struct clk_init_data){
0965             .name = "gsbi1_qup_src",
0966             .parent_names = gcc_pxo_pll8,
0967             .num_parents = 2,
0968             .ops = &clk_rcg_ops,
0969             .flags = CLK_SET_PARENT_GATE,
0970         },
0971     },
0972 };
0973 
0974 static struct clk_branch gsbi1_qup_clk = {
0975     .halt_reg = 0x2fcc,
0976     .halt_bit = 9,
0977     .clkr = {
0978         .enable_reg = 0x29cc,
0979         .enable_mask = BIT(9),
0980         .hw.init = &(struct clk_init_data){
0981             .name = "gsbi1_qup_clk",
0982             .parent_names = (const char *[]){ "gsbi1_qup_src" },
0983             .num_parents = 1,
0984             .ops = &clk_branch_ops,
0985             .flags = CLK_SET_RATE_PARENT,
0986         },
0987     },
0988 };
0989 
0990 static struct clk_rcg gsbi2_qup_src = {
0991     .ns_reg = 0x29ec,
0992     .md_reg = 0x29e8,
0993     .mn = {
0994         .mnctr_en_bit = 8,
0995         .mnctr_reset_bit = 7,
0996         .mnctr_mode_shift = 5,
0997         .n_val_shift = 16,
0998         .m_val_shift = 16,
0999         .width = 8,
1000     },
1001     .p = {
1002         .pre_div_shift = 3,
1003         .pre_div_width = 2,
1004     },
1005     .s = {
1006         .src_sel_shift = 0,
1007         .parent_map = gcc_pxo_pll8_map,
1008     },
1009     .freq_tbl = clk_tbl_gsbi_qup,
1010     .clkr = {
1011         .enable_reg = 0x29ec,
1012         .enable_mask = BIT(11),
1013         .hw.init = &(struct clk_init_data){
1014             .name = "gsbi2_qup_src",
1015             .parent_names = gcc_pxo_pll8,
1016             .num_parents = 2,
1017             .ops = &clk_rcg_ops,
1018             .flags = CLK_SET_PARENT_GATE,
1019         },
1020     },
1021 };
1022 
1023 static struct clk_branch gsbi2_qup_clk = {
1024     .halt_reg = 0x2fcc,
1025     .halt_bit = 4,
1026     .clkr = {
1027         .enable_reg = 0x29ec,
1028         .enable_mask = BIT(9),
1029         .hw.init = &(struct clk_init_data){
1030             .name = "gsbi2_qup_clk",
1031             .parent_names = (const char *[]){ "gsbi2_qup_src" },
1032             .num_parents = 1,
1033             .ops = &clk_branch_ops,
1034             .flags = CLK_SET_RATE_PARENT,
1035         },
1036     },
1037 };
1038 
1039 static struct clk_rcg gsbi3_qup_src = {
1040     .ns_reg = 0x2a0c,
1041     .md_reg = 0x2a08,
1042     .mn = {
1043         .mnctr_en_bit = 8,
1044         .mnctr_reset_bit = 7,
1045         .mnctr_mode_shift = 5,
1046         .n_val_shift = 16,
1047         .m_val_shift = 16,
1048         .width = 8,
1049     },
1050     .p = {
1051         .pre_div_shift = 3,
1052         .pre_div_width = 2,
1053     },
1054     .s = {
1055         .src_sel_shift = 0,
1056         .parent_map = gcc_pxo_pll8_map,
1057     },
1058     .freq_tbl = clk_tbl_gsbi_qup,
1059     .clkr = {
1060         .enable_reg = 0x2a0c,
1061         .enable_mask = BIT(11),
1062         .hw.init = &(struct clk_init_data){
1063             .name = "gsbi3_qup_src",
1064             .parent_names = gcc_pxo_pll8,
1065             .num_parents = 2,
1066             .ops = &clk_rcg_ops,
1067             .flags = CLK_SET_PARENT_GATE,
1068         },
1069     },
1070 };
1071 
1072 static struct clk_branch gsbi3_qup_clk = {
1073     .halt_reg = 0x2fcc,
1074     .halt_bit = 0,
1075     .clkr = {
1076         .enable_reg = 0x2a0c,
1077         .enable_mask = BIT(9),
1078         .hw.init = &(struct clk_init_data){
1079             .name = "gsbi3_qup_clk",
1080             .parent_names = (const char *[]){ "gsbi3_qup_src" },
1081             .num_parents = 1,
1082             .ops = &clk_branch_ops,
1083             .flags = CLK_SET_RATE_PARENT,
1084         },
1085     },
1086 };
1087 
1088 static struct clk_rcg gsbi4_qup_src = {
1089     .ns_reg = 0x2a2c,
1090     .md_reg = 0x2a28,
1091     .mn = {
1092         .mnctr_en_bit = 8,
1093         .mnctr_reset_bit = 7,
1094         .mnctr_mode_shift = 5,
1095         .n_val_shift = 16,
1096         .m_val_shift = 16,
1097         .width = 8,
1098     },
1099     .p = {
1100         .pre_div_shift = 3,
1101         .pre_div_width = 2,
1102     },
1103     .s = {
1104         .src_sel_shift = 0,
1105         .parent_map = gcc_pxo_pll8_map,
1106     },
1107     .freq_tbl = clk_tbl_gsbi_qup,
1108     .clkr = {
1109         .enable_reg = 0x2a2c,
1110         .enable_mask = BIT(11),
1111         .hw.init = &(struct clk_init_data){
1112             .name = "gsbi4_qup_src",
1113             .parent_names = gcc_pxo_pll8,
1114             .num_parents = 2,
1115             .ops = &clk_rcg_ops,
1116             .flags = CLK_SET_PARENT_GATE,
1117         },
1118     },
1119 };
1120 
1121 static struct clk_branch gsbi4_qup_clk = {
1122     .halt_reg = 0x2fd0,
1123     .halt_bit = 24,
1124     .clkr = {
1125         .enable_reg = 0x2a2c,
1126         .enable_mask = BIT(9),
1127         .hw.init = &(struct clk_init_data){
1128             .name = "gsbi4_qup_clk",
1129             .parent_names = (const char *[]){ "gsbi4_qup_src" },
1130             .num_parents = 1,
1131             .ops = &clk_branch_ops,
1132             .flags = CLK_SET_RATE_PARENT,
1133         },
1134     },
1135 };
1136 
1137 static struct clk_rcg gsbi5_qup_src = {
1138     .ns_reg = 0x2a4c,
1139     .md_reg = 0x2a48,
1140     .mn = {
1141         .mnctr_en_bit = 8,
1142         .mnctr_reset_bit = 7,
1143         .mnctr_mode_shift = 5,
1144         .n_val_shift = 16,
1145         .m_val_shift = 16,
1146         .width = 8,
1147     },
1148     .p = {
1149         .pre_div_shift = 3,
1150         .pre_div_width = 2,
1151     },
1152     .s = {
1153         .src_sel_shift = 0,
1154         .parent_map = gcc_pxo_pll8_map,
1155     },
1156     .freq_tbl = clk_tbl_gsbi_qup,
1157     .clkr = {
1158         .enable_reg = 0x2a4c,
1159         .enable_mask = BIT(11),
1160         .hw.init = &(struct clk_init_data){
1161             .name = "gsbi5_qup_src",
1162             .parent_names = gcc_pxo_pll8,
1163             .num_parents = 2,
1164             .ops = &clk_rcg_ops,
1165             .flags = CLK_SET_PARENT_GATE,
1166         },
1167     },
1168 };
1169 
1170 static struct clk_branch gsbi5_qup_clk = {
1171     .halt_reg = 0x2fd0,
1172     .halt_bit = 20,
1173     .clkr = {
1174         .enable_reg = 0x2a4c,
1175         .enable_mask = BIT(9),
1176         .hw.init = &(struct clk_init_data){
1177             .name = "gsbi5_qup_clk",
1178             .parent_names = (const char *[]){ "gsbi5_qup_src" },
1179             .num_parents = 1,
1180             .ops = &clk_branch_ops,
1181             .flags = CLK_SET_RATE_PARENT,
1182         },
1183     },
1184 };
1185 
1186 static struct clk_rcg gsbi6_qup_src = {
1187     .ns_reg = 0x2a6c,
1188     .md_reg = 0x2a68,
1189     .mn = {
1190         .mnctr_en_bit = 8,
1191         .mnctr_reset_bit = 7,
1192         .mnctr_mode_shift = 5,
1193         .n_val_shift = 16,
1194         .m_val_shift = 16,
1195         .width = 8,
1196     },
1197     .p = {
1198         .pre_div_shift = 3,
1199         .pre_div_width = 2,
1200     },
1201     .s = {
1202         .src_sel_shift = 0,
1203         .parent_map = gcc_pxo_pll8_map,
1204     },
1205     .freq_tbl = clk_tbl_gsbi_qup,
1206     .clkr = {
1207         .enable_reg = 0x2a6c,
1208         .enable_mask = BIT(11),
1209         .hw.init = &(struct clk_init_data){
1210             .name = "gsbi6_qup_src",
1211             .parent_names = gcc_pxo_pll8,
1212             .num_parents = 2,
1213             .ops = &clk_rcg_ops,
1214             .flags = CLK_SET_PARENT_GATE,
1215         },
1216     },
1217 };
1218 
1219 static struct clk_branch gsbi6_qup_clk = {
1220     .halt_reg = 0x2fd0,
1221     .halt_bit = 16,
1222     .clkr = {
1223         .enable_reg = 0x2a6c,
1224         .enable_mask = BIT(9),
1225         .hw.init = &(struct clk_init_data){
1226             .name = "gsbi6_qup_clk",
1227             .parent_names = (const char *[]){ "gsbi6_qup_src" },
1228             .num_parents = 1,
1229             .ops = &clk_branch_ops,
1230             .flags = CLK_SET_RATE_PARENT,
1231         },
1232     },
1233 };
1234 
1235 static struct clk_rcg gsbi7_qup_src = {
1236     .ns_reg = 0x2a8c,
1237     .md_reg = 0x2a88,
1238     .mn = {
1239         .mnctr_en_bit = 8,
1240         .mnctr_reset_bit = 7,
1241         .mnctr_mode_shift = 5,
1242         .n_val_shift = 16,
1243         .m_val_shift = 16,
1244         .width = 8,
1245     },
1246     .p = {
1247         .pre_div_shift = 3,
1248         .pre_div_width = 2,
1249     },
1250     .s = {
1251         .src_sel_shift = 0,
1252         .parent_map = gcc_pxo_pll8_map,
1253     },
1254     .freq_tbl = clk_tbl_gsbi_qup,
1255     .clkr = {
1256         .enable_reg = 0x2a8c,
1257         .enable_mask = BIT(11),
1258         .hw.init = &(struct clk_init_data){
1259             .name = "gsbi7_qup_src",
1260             .parent_names = gcc_pxo_pll8,
1261             .num_parents = 2,
1262             .ops = &clk_rcg_ops,
1263             .flags = CLK_SET_PARENT_GATE,
1264         },
1265     },
1266 };
1267 
1268 static struct clk_branch gsbi7_qup_clk = {
1269     .halt_reg = 0x2fd0,
1270     .halt_bit = 12,
1271     .clkr = {
1272         .enable_reg = 0x2a8c,
1273         .enable_mask = BIT(9),
1274         .hw.init = &(struct clk_init_data){
1275             .name = "gsbi7_qup_clk",
1276             .parent_names = (const char *[]){ "gsbi7_qup_src" },
1277             .num_parents = 1,
1278             .ops = &clk_branch_ops,
1279             .flags = CLK_SET_RATE_PARENT,
1280         },
1281     },
1282 };
1283 
1284 static struct clk_rcg gsbi8_qup_src = {
1285     .ns_reg = 0x2aac,
1286     .md_reg = 0x2aa8,
1287     .mn = {
1288         .mnctr_en_bit = 8,
1289         .mnctr_reset_bit = 7,
1290         .mnctr_mode_shift = 5,
1291         .n_val_shift = 16,
1292         .m_val_shift = 16,
1293         .width = 8,
1294     },
1295     .p = {
1296         .pre_div_shift = 3,
1297         .pre_div_width = 2,
1298     },
1299     .s = {
1300         .src_sel_shift = 0,
1301         .parent_map = gcc_pxo_pll8_map,
1302     },
1303     .freq_tbl = clk_tbl_gsbi_qup,
1304     .clkr = {
1305         .enable_reg = 0x2aac,
1306         .enable_mask = BIT(11),
1307         .hw.init = &(struct clk_init_data){
1308             .name = "gsbi8_qup_src",
1309             .parent_names = gcc_pxo_pll8,
1310             .num_parents = 2,
1311             .ops = &clk_rcg_ops,
1312             .flags = CLK_SET_PARENT_GATE,
1313         },
1314     },
1315 };
1316 
1317 static struct clk_branch gsbi8_qup_clk = {
1318     .halt_reg = 0x2fd0,
1319     .halt_bit = 8,
1320     .clkr = {
1321         .enable_reg = 0x2aac,
1322         .enable_mask = BIT(9),
1323         .hw.init = &(struct clk_init_data){
1324             .name = "gsbi8_qup_clk",
1325             .parent_names = (const char *[]){ "gsbi8_qup_src" },
1326             .num_parents = 1,
1327             .ops = &clk_branch_ops,
1328             .flags = CLK_SET_RATE_PARENT,
1329         },
1330     },
1331 };
1332 
1333 static struct clk_rcg gsbi9_qup_src = {
1334     .ns_reg = 0x2acc,
1335     .md_reg = 0x2ac8,
1336     .mn = {
1337         .mnctr_en_bit = 8,
1338         .mnctr_reset_bit = 7,
1339         .mnctr_mode_shift = 5,
1340         .n_val_shift = 16,
1341         .m_val_shift = 16,
1342         .width = 8,
1343     },
1344     .p = {
1345         .pre_div_shift = 3,
1346         .pre_div_width = 2,
1347     },
1348     .s = {
1349         .src_sel_shift = 0,
1350         .parent_map = gcc_pxo_pll8_map,
1351     },
1352     .freq_tbl = clk_tbl_gsbi_qup,
1353     .clkr = {
1354         .enable_reg = 0x2acc,
1355         .enable_mask = BIT(11),
1356         .hw.init = &(struct clk_init_data){
1357             .name = "gsbi9_qup_src",
1358             .parent_names = gcc_pxo_pll8,
1359             .num_parents = 2,
1360             .ops = &clk_rcg_ops,
1361             .flags = CLK_SET_PARENT_GATE,
1362         },
1363     },
1364 };
1365 
1366 static struct clk_branch gsbi9_qup_clk = {
1367     .halt_reg = 0x2fd0,
1368     .halt_bit = 4,
1369     .clkr = {
1370         .enable_reg = 0x2acc,
1371         .enable_mask = BIT(9),
1372         .hw.init = &(struct clk_init_data){
1373             .name = "gsbi9_qup_clk",
1374             .parent_names = (const char *[]){ "gsbi9_qup_src" },
1375             .num_parents = 1,
1376             .ops = &clk_branch_ops,
1377             .flags = CLK_SET_RATE_PARENT,
1378         },
1379     },
1380 };
1381 
1382 static struct clk_rcg gsbi10_qup_src = {
1383     .ns_reg = 0x2aec,
1384     .md_reg = 0x2ae8,
1385     .mn = {
1386         .mnctr_en_bit = 8,
1387         .mnctr_reset_bit = 7,
1388         .mnctr_mode_shift = 5,
1389         .n_val_shift = 16,
1390         .m_val_shift = 16,
1391         .width = 8,
1392     },
1393     .p = {
1394         .pre_div_shift = 3,
1395         .pre_div_width = 2,
1396     },
1397     .s = {
1398         .src_sel_shift = 0,
1399         .parent_map = gcc_pxo_pll8_map,
1400     },
1401     .freq_tbl = clk_tbl_gsbi_qup,
1402     .clkr = {
1403         .enable_reg = 0x2aec,
1404         .enable_mask = BIT(11),
1405         .hw.init = &(struct clk_init_data){
1406             .name = "gsbi10_qup_src",
1407             .parent_names = gcc_pxo_pll8,
1408             .num_parents = 2,
1409             .ops = &clk_rcg_ops,
1410             .flags = CLK_SET_PARENT_GATE,
1411         },
1412     },
1413 };
1414 
1415 static struct clk_branch gsbi10_qup_clk = {
1416     .halt_reg = 0x2fd0,
1417     .halt_bit = 0,
1418     .clkr = {
1419         .enable_reg = 0x2aec,
1420         .enable_mask = BIT(9),
1421         .hw.init = &(struct clk_init_data){
1422             .name = "gsbi10_qup_clk",
1423             .parent_names = (const char *[]){ "gsbi10_qup_src" },
1424             .num_parents = 1,
1425             .ops = &clk_branch_ops,
1426             .flags = CLK_SET_RATE_PARENT,
1427         },
1428     },
1429 };
1430 
1431 static struct clk_rcg gsbi11_qup_src = {
1432     .ns_reg = 0x2b0c,
1433     .md_reg = 0x2b08,
1434     .mn = {
1435         .mnctr_en_bit = 8,
1436         .mnctr_reset_bit = 7,
1437         .mnctr_mode_shift = 5,
1438         .n_val_shift = 16,
1439         .m_val_shift = 16,
1440         .width = 8,
1441     },
1442     .p = {
1443         .pre_div_shift = 3,
1444         .pre_div_width = 2,
1445     },
1446     .s = {
1447         .src_sel_shift = 0,
1448         .parent_map = gcc_pxo_pll8_map,
1449     },
1450     .freq_tbl = clk_tbl_gsbi_qup,
1451     .clkr = {
1452         .enable_reg = 0x2b0c,
1453         .enable_mask = BIT(11),
1454         .hw.init = &(struct clk_init_data){
1455             .name = "gsbi11_qup_src",
1456             .parent_names = gcc_pxo_pll8,
1457             .num_parents = 2,
1458             .ops = &clk_rcg_ops,
1459             .flags = CLK_SET_PARENT_GATE,
1460         },
1461     },
1462 };
1463 
1464 static struct clk_branch gsbi11_qup_clk = {
1465     .halt_reg = 0x2fd4,
1466     .halt_bit = 15,
1467     .clkr = {
1468         .enable_reg = 0x2b0c,
1469         .enable_mask = BIT(9),
1470         .hw.init = &(struct clk_init_data){
1471             .name = "gsbi11_qup_clk",
1472             .parent_names = (const char *[]){ "gsbi11_qup_src" },
1473             .num_parents = 1,
1474             .ops = &clk_branch_ops,
1475             .flags = CLK_SET_RATE_PARENT,
1476         },
1477     },
1478 };
1479 
1480 static struct clk_rcg gsbi12_qup_src = {
1481     .ns_reg = 0x2b2c,
1482     .md_reg = 0x2b28,
1483     .mn = {
1484         .mnctr_en_bit = 8,
1485         .mnctr_reset_bit = 7,
1486         .mnctr_mode_shift = 5,
1487         .n_val_shift = 16,
1488         .m_val_shift = 16,
1489         .width = 8,
1490     },
1491     .p = {
1492         .pre_div_shift = 3,
1493         .pre_div_width = 2,
1494     },
1495     .s = {
1496         .src_sel_shift = 0,
1497         .parent_map = gcc_pxo_pll8_map,
1498     },
1499     .freq_tbl = clk_tbl_gsbi_qup,
1500     .clkr = {
1501         .enable_reg = 0x2b2c,
1502         .enable_mask = BIT(11),
1503         .hw.init = &(struct clk_init_data){
1504             .name = "gsbi12_qup_src",
1505             .parent_names = gcc_pxo_pll8,
1506             .num_parents = 2,
1507             .ops = &clk_rcg_ops,
1508             .flags = CLK_SET_PARENT_GATE,
1509         },
1510     },
1511 };
1512 
1513 static struct clk_branch gsbi12_qup_clk = {
1514     .halt_reg = 0x2fd4,
1515     .halt_bit = 11,
1516     .clkr = {
1517         .enable_reg = 0x2b2c,
1518         .enable_mask = BIT(9),
1519         .hw.init = &(struct clk_init_data){
1520             .name = "gsbi12_qup_clk",
1521             .parent_names = (const char *[]){ "gsbi12_qup_src" },
1522             .num_parents = 1,
1523             .ops = &clk_branch_ops,
1524             .flags = CLK_SET_RATE_PARENT,
1525         },
1526     },
1527 };
1528 
1529 static const struct freq_tbl clk_tbl_gp[] = {
1530     { 9600000, P_CXO,  2, 0, 0 },
1531     { 13500000, P_PXO,  2, 0, 0 },
1532     { 19200000, P_CXO,  1, 0, 0 },
1533     { 27000000, P_PXO,  1, 0, 0 },
1534     { 64000000, P_PLL8, 2, 1, 3 },
1535     { 76800000, P_PLL8, 1, 1, 5 },
1536     { 96000000, P_PLL8, 4, 0, 0 },
1537     { 128000000, P_PLL8, 3, 0, 0 },
1538     { 192000000, P_PLL8, 2, 0, 0 },
1539     { }
1540 };
1541 
1542 static struct clk_rcg gp0_src = {
1543     .ns_reg = 0x2d24,
1544     .md_reg = 0x2d00,
1545     .mn = {
1546         .mnctr_en_bit = 8,
1547         .mnctr_reset_bit = 7,
1548         .mnctr_mode_shift = 5,
1549         .n_val_shift = 16,
1550         .m_val_shift = 16,
1551         .width = 8,
1552     },
1553     .p = {
1554         .pre_div_shift = 3,
1555         .pre_div_width = 2,
1556     },
1557     .s = {
1558         .src_sel_shift = 0,
1559         .parent_map = gcc_pxo_pll8_cxo_map,
1560     },
1561     .freq_tbl = clk_tbl_gp,
1562     .clkr = {
1563         .enable_reg = 0x2d24,
1564         .enable_mask = BIT(11),
1565         .hw.init = &(struct clk_init_data){
1566             .name = "gp0_src",
1567             .parent_names = gcc_pxo_pll8_cxo,
1568             .num_parents = 3,
1569             .ops = &clk_rcg_ops,
1570             .flags = CLK_SET_PARENT_GATE,
1571         },
1572     }
1573 };
1574 
1575 static struct clk_branch gp0_clk = {
1576     .halt_reg = 0x2fd8,
1577     .halt_bit = 7,
1578     .clkr = {
1579         .enable_reg = 0x2d24,
1580         .enable_mask = BIT(9),
1581         .hw.init = &(struct clk_init_data){
1582             .name = "gp0_clk",
1583             .parent_names = (const char *[]){ "gp0_src" },
1584             .num_parents = 1,
1585             .ops = &clk_branch_ops,
1586             .flags = CLK_SET_RATE_PARENT,
1587         },
1588     },
1589 };
1590 
1591 static struct clk_rcg gp1_src = {
1592     .ns_reg = 0x2d44,
1593     .md_reg = 0x2d40,
1594     .mn = {
1595         .mnctr_en_bit = 8,
1596         .mnctr_reset_bit = 7,
1597         .mnctr_mode_shift = 5,
1598         .n_val_shift = 16,
1599         .m_val_shift = 16,
1600         .width = 8,
1601     },
1602     .p = {
1603         .pre_div_shift = 3,
1604         .pre_div_width = 2,
1605     },
1606     .s = {
1607         .src_sel_shift = 0,
1608         .parent_map = gcc_pxo_pll8_cxo_map,
1609     },
1610     .freq_tbl = clk_tbl_gp,
1611     .clkr = {
1612         .enable_reg = 0x2d44,
1613         .enable_mask = BIT(11),
1614         .hw.init = &(struct clk_init_data){
1615             .name = "gp1_src",
1616             .parent_names = gcc_pxo_pll8_cxo,
1617             .num_parents = 3,
1618             .ops = &clk_rcg_ops,
1619             .flags = CLK_SET_RATE_GATE,
1620         },
1621     }
1622 };
1623 
1624 static struct clk_branch gp1_clk = {
1625     .halt_reg = 0x2fd8,
1626     .halt_bit = 6,
1627     .clkr = {
1628         .enable_reg = 0x2d44,
1629         .enable_mask = BIT(9),
1630         .hw.init = &(struct clk_init_data){
1631             .name = "gp1_clk",
1632             .parent_names = (const char *[]){ "gp1_src" },
1633             .num_parents = 1,
1634             .ops = &clk_branch_ops,
1635             .flags = CLK_SET_RATE_PARENT,
1636         },
1637     },
1638 };
1639 
1640 static struct clk_rcg gp2_src = {
1641     .ns_reg = 0x2d64,
1642     .md_reg = 0x2d60,
1643     .mn = {
1644         .mnctr_en_bit = 8,
1645         .mnctr_reset_bit = 7,
1646         .mnctr_mode_shift = 5,
1647         .n_val_shift = 16,
1648         .m_val_shift = 16,
1649         .width = 8,
1650     },
1651     .p = {
1652         .pre_div_shift = 3,
1653         .pre_div_width = 2,
1654     },
1655     .s = {
1656         .src_sel_shift = 0,
1657         .parent_map = gcc_pxo_pll8_cxo_map,
1658     },
1659     .freq_tbl = clk_tbl_gp,
1660     .clkr = {
1661         .enable_reg = 0x2d64,
1662         .enable_mask = BIT(11),
1663         .hw.init = &(struct clk_init_data){
1664             .name = "gp2_src",
1665             .parent_names = gcc_pxo_pll8_cxo,
1666             .num_parents = 3,
1667             .ops = &clk_rcg_ops,
1668             .flags = CLK_SET_RATE_GATE,
1669         },
1670     }
1671 };
1672 
1673 static struct clk_branch gp2_clk = {
1674     .halt_reg = 0x2fd8,
1675     .halt_bit = 5,
1676     .clkr = {
1677         .enable_reg = 0x2d64,
1678         .enable_mask = BIT(9),
1679         .hw.init = &(struct clk_init_data){
1680             .name = "gp2_clk",
1681             .parent_names = (const char *[]){ "gp2_src" },
1682             .num_parents = 1,
1683             .ops = &clk_branch_ops,
1684             .flags = CLK_SET_RATE_PARENT,
1685         },
1686     },
1687 };
1688 
1689 static struct clk_branch pmem_clk = {
1690     .hwcg_reg = 0x25a0,
1691     .hwcg_bit = 6,
1692     .halt_reg = 0x2fc8,
1693     .halt_bit = 20,
1694     .clkr = {
1695         .enable_reg = 0x25a0,
1696         .enable_mask = BIT(4),
1697         .hw.init = &(struct clk_init_data){
1698             .name = "pmem_clk",
1699             .ops = &clk_branch_ops,
1700         },
1701     },
1702 };
1703 
1704 static struct clk_rcg prng_src = {
1705     .ns_reg = 0x2e80,
1706     .p = {
1707         .pre_div_shift = 3,
1708         .pre_div_width = 4,
1709     },
1710     .s = {
1711         .src_sel_shift = 0,
1712         .parent_map = gcc_pxo_pll8_map,
1713     },
1714     .clkr = {
1715         .hw.init = &(struct clk_init_data){
1716             .name = "prng_src",
1717             .parent_names = gcc_pxo_pll8,
1718             .num_parents = 2,
1719             .ops = &clk_rcg_ops,
1720         },
1721     },
1722 };
1723 
1724 static struct clk_branch prng_clk = {
1725     .halt_reg = 0x2fd8,
1726     .halt_check = BRANCH_HALT_VOTED,
1727     .halt_bit = 10,
1728     .clkr = {
1729         .enable_reg = 0x3080,
1730         .enable_mask = BIT(10),
1731         .hw.init = &(struct clk_init_data){
1732             .name = "prng_clk",
1733             .parent_names = (const char *[]){ "prng_src" },
1734             .num_parents = 1,
1735             .ops = &clk_branch_ops,
1736         },
1737     },
1738 };
1739 
1740 static const struct freq_tbl clk_tbl_sdc[] = {
1741     {    144000, P_PXO,   3, 2, 125 },
1742     {    400000, P_PLL8,  4, 1, 240 },
1743     {  16000000, P_PLL8,  4, 1,   6 },
1744     {  17070000, P_PLL8,  1, 2,  45 },
1745     {  20210000, P_PLL8,  1, 1,  19 },
1746     {  24000000, P_PLL8,  4, 1,   4 },
1747     {  48000000, P_PLL8,  4, 1,   2 },
1748     {  64000000, P_PLL8,  3, 1,   2 },
1749     {  96000000, P_PLL8,  4, 0,   0 },
1750     { 192000000, P_PLL8,  2, 0,   0 },
1751     { }
1752 };
1753 
1754 static struct clk_rcg sdc1_src = {
1755     .ns_reg = 0x282c,
1756     .md_reg = 0x2828,
1757     .mn = {
1758         .mnctr_en_bit = 8,
1759         .mnctr_reset_bit = 7,
1760         .mnctr_mode_shift = 5,
1761         .n_val_shift = 16,
1762         .m_val_shift = 16,
1763         .width = 8,
1764     },
1765     .p = {
1766         .pre_div_shift = 3,
1767         .pre_div_width = 2,
1768     },
1769     .s = {
1770         .src_sel_shift = 0,
1771         .parent_map = gcc_pxo_pll8_map,
1772     },
1773     .freq_tbl = clk_tbl_sdc,
1774     .clkr = {
1775         .enable_reg = 0x282c,
1776         .enable_mask = BIT(11),
1777         .hw.init = &(struct clk_init_data){
1778             .name = "sdc1_src",
1779             .parent_names = gcc_pxo_pll8,
1780             .num_parents = 2,
1781             .ops = &clk_rcg_ops,
1782         },
1783     }
1784 };
1785 
1786 static struct clk_branch sdc1_clk = {
1787     .halt_reg = 0x2fc8,
1788     .halt_bit = 6,
1789     .clkr = {
1790         .enable_reg = 0x282c,
1791         .enable_mask = BIT(9),
1792         .hw.init = &(struct clk_init_data){
1793             .name = "sdc1_clk",
1794             .parent_names = (const char *[]){ "sdc1_src" },
1795             .num_parents = 1,
1796             .ops = &clk_branch_ops,
1797             .flags = CLK_SET_RATE_PARENT,
1798         },
1799     },
1800 };
1801 
1802 static struct clk_rcg sdc2_src = {
1803     .ns_reg = 0x284c,
1804     .md_reg = 0x2848,
1805     .mn = {
1806         .mnctr_en_bit = 8,
1807         .mnctr_reset_bit = 7,
1808         .mnctr_mode_shift = 5,
1809         .n_val_shift = 16,
1810         .m_val_shift = 16,
1811         .width = 8,
1812     },
1813     .p = {
1814         .pre_div_shift = 3,
1815         .pre_div_width = 2,
1816     },
1817     .s = {
1818         .src_sel_shift = 0,
1819         .parent_map = gcc_pxo_pll8_map,
1820     },
1821     .freq_tbl = clk_tbl_sdc,
1822     .clkr = {
1823         .enable_reg = 0x284c,
1824         .enable_mask = BIT(11),
1825         .hw.init = &(struct clk_init_data){
1826             .name = "sdc2_src",
1827             .parent_names = gcc_pxo_pll8,
1828             .num_parents = 2,
1829             .ops = &clk_rcg_ops,
1830         },
1831     }
1832 };
1833 
1834 static struct clk_branch sdc2_clk = {
1835     .halt_reg = 0x2fc8,
1836     .halt_bit = 5,
1837     .clkr = {
1838         .enable_reg = 0x284c,
1839         .enable_mask = BIT(9),
1840         .hw.init = &(struct clk_init_data){
1841             .name = "sdc2_clk",
1842             .parent_names = (const char *[]){ "sdc2_src" },
1843             .num_parents = 1,
1844             .ops = &clk_branch_ops,
1845             .flags = CLK_SET_RATE_PARENT,
1846         },
1847     },
1848 };
1849 
1850 static struct clk_rcg sdc3_src = {
1851     .ns_reg = 0x286c,
1852     .md_reg = 0x2868,
1853     .mn = {
1854         .mnctr_en_bit = 8,
1855         .mnctr_reset_bit = 7,
1856         .mnctr_mode_shift = 5,
1857         .n_val_shift = 16,
1858         .m_val_shift = 16,
1859         .width = 8,
1860     },
1861     .p = {
1862         .pre_div_shift = 3,
1863         .pre_div_width = 2,
1864     },
1865     .s = {
1866         .src_sel_shift = 0,
1867         .parent_map = gcc_pxo_pll8_map,
1868     },
1869     .freq_tbl = clk_tbl_sdc,
1870     .clkr = {
1871         .enable_reg = 0x286c,
1872         .enable_mask = BIT(11),
1873         .hw.init = &(struct clk_init_data){
1874             .name = "sdc3_src",
1875             .parent_names = gcc_pxo_pll8,
1876             .num_parents = 2,
1877             .ops = &clk_rcg_ops,
1878         },
1879     }
1880 };
1881 
1882 static struct clk_branch sdc3_clk = {
1883     .halt_reg = 0x2fc8,
1884     .halt_bit = 4,
1885     .clkr = {
1886         .enable_reg = 0x286c,
1887         .enable_mask = BIT(9),
1888         .hw.init = &(struct clk_init_data){
1889             .name = "sdc3_clk",
1890             .parent_names = (const char *[]){ "sdc3_src" },
1891             .num_parents = 1,
1892             .ops = &clk_branch_ops,
1893             .flags = CLK_SET_RATE_PARENT,
1894         },
1895     },
1896 };
1897 
1898 static struct clk_rcg sdc4_src = {
1899     .ns_reg = 0x288c,
1900     .md_reg = 0x2888,
1901     .mn = {
1902         .mnctr_en_bit = 8,
1903         .mnctr_reset_bit = 7,
1904         .mnctr_mode_shift = 5,
1905         .n_val_shift = 16,
1906         .m_val_shift = 16,
1907         .width = 8,
1908     },
1909     .p = {
1910         .pre_div_shift = 3,
1911         .pre_div_width = 2,
1912     },
1913     .s = {
1914         .src_sel_shift = 0,
1915         .parent_map = gcc_pxo_pll8_map,
1916     },
1917     .freq_tbl = clk_tbl_sdc,
1918     .clkr = {
1919         .enable_reg = 0x288c,
1920         .enable_mask = BIT(11),
1921         .hw.init = &(struct clk_init_data){
1922             .name = "sdc4_src",
1923             .parent_names = gcc_pxo_pll8,
1924             .num_parents = 2,
1925             .ops = &clk_rcg_ops,
1926         },
1927     }
1928 };
1929 
1930 static struct clk_branch sdc4_clk = {
1931     .halt_reg = 0x2fc8,
1932     .halt_bit = 3,
1933     .clkr = {
1934         .enable_reg = 0x288c,
1935         .enable_mask = BIT(9),
1936         .hw.init = &(struct clk_init_data){
1937             .name = "sdc4_clk",
1938             .parent_names = (const char *[]){ "sdc4_src" },
1939             .num_parents = 1,
1940             .ops = &clk_branch_ops,
1941             .flags = CLK_SET_RATE_PARENT,
1942         },
1943     },
1944 };
1945 
1946 static struct clk_rcg sdc5_src = {
1947     .ns_reg = 0x28ac,
1948     .md_reg = 0x28a8,
1949     .mn = {
1950         .mnctr_en_bit = 8,
1951         .mnctr_reset_bit = 7,
1952         .mnctr_mode_shift = 5,
1953         .n_val_shift = 16,
1954         .m_val_shift = 16,
1955         .width = 8,
1956     },
1957     .p = {
1958         .pre_div_shift = 3,
1959         .pre_div_width = 2,
1960     },
1961     .s = {
1962         .src_sel_shift = 0,
1963         .parent_map = gcc_pxo_pll8_map,
1964     },
1965     .freq_tbl = clk_tbl_sdc,
1966     .clkr = {
1967         .enable_reg = 0x28ac,
1968         .enable_mask = BIT(11),
1969         .hw.init = &(struct clk_init_data){
1970             .name = "sdc5_src",
1971             .parent_names = gcc_pxo_pll8,
1972             .num_parents = 2,
1973             .ops = &clk_rcg_ops,
1974         },
1975     }
1976 };
1977 
1978 static struct clk_branch sdc5_clk = {
1979     .halt_reg = 0x2fc8,
1980     .halt_bit = 2,
1981     .clkr = {
1982         .enable_reg = 0x28ac,
1983         .enable_mask = BIT(9),
1984         .hw.init = &(struct clk_init_data){
1985             .name = "sdc5_clk",
1986             .parent_names = (const char *[]){ "sdc5_src" },
1987             .num_parents = 1,
1988             .ops = &clk_branch_ops,
1989             .flags = CLK_SET_RATE_PARENT,
1990         },
1991     },
1992 };
1993 
1994 static const struct freq_tbl clk_tbl_tsif_ref[] = {
1995     { 105000, P_PXO,  1, 1, 256 },
1996     { }
1997 };
1998 
1999 static struct clk_rcg tsif_ref_src = {
2000     .ns_reg = 0x2710,
2001     .md_reg = 0x270c,
2002     .mn = {
2003         .mnctr_en_bit = 8,
2004         .mnctr_reset_bit = 7,
2005         .mnctr_mode_shift = 5,
2006         .n_val_shift = 16,
2007         .m_val_shift = 16,
2008         .width = 16,
2009     },
2010     .p = {
2011         .pre_div_shift = 3,
2012         .pre_div_width = 2,
2013     },
2014     .s = {
2015         .src_sel_shift = 0,
2016         .parent_map = gcc_pxo_pll8_map,
2017     },
2018     .freq_tbl = clk_tbl_tsif_ref,
2019     .clkr = {
2020         .enable_reg = 0x2710,
2021         .enable_mask = BIT(11),
2022         .hw.init = &(struct clk_init_data){
2023             .name = "tsif_ref_src",
2024             .parent_names = gcc_pxo_pll8,
2025             .num_parents = 2,
2026             .ops = &clk_rcg_ops,
2027             .flags = CLK_SET_RATE_GATE,
2028         },
2029     }
2030 };
2031 
2032 static struct clk_branch tsif_ref_clk = {
2033     .halt_reg = 0x2fd4,
2034     .halt_bit = 5,
2035     .clkr = {
2036         .enable_reg = 0x2710,
2037         .enable_mask = BIT(9),
2038         .hw.init = &(struct clk_init_data){
2039             .name = "tsif_ref_clk",
2040             .parent_names = (const char *[]){ "tsif_ref_src" },
2041             .num_parents = 1,
2042             .ops = &clk_branch_ops,
2043             .flags = CLK_SET_RATE_PARENT,
2044         },
2045     },
2046 };
2047 
2048 static const struct freq_tbl clk_tbl_usb[] = {
2049     { 60000000, P_PLL8, 1, 5, 32 },
2050     { }
2051 };
2052 
2053 static struct clk_rcg usb_hs1_xcvr_src = {
2054     .ns_reg = 0x290c,
2055     .md_reg = 0x2908,
2056     .mn = {
2057         .mnctr_en_bit = 8,
2058         .mnctr_reset_bit = 7,
2059         .mnctr_mode_shift = 5,
2060         .n_val_shift = 16,
2061         .m_val_shift = 16,
2062         .width = 8,
2063     },
2064     .p = {
2065         .pre_div_shift = 3,
2066         .pre_div_width = 2,
2067     },
2068     .s = {
2069         .src_sel_shift = 0,
2070         .parent_map = gcc_pxo_pll8_map,
2071     },
2072     .freq_tbl = clk_tbl_usb,
2073     .clkr = {
2074         .enable_reg = 0x290c,
2075         .enable_mask = BIT(11),
2076         .hw.init = &(struct clk_init_data){
2077             .name = "usb_hs1_xcvr_src",
2078             .parent_names = gcc_pxo_pll8,
2079             .num_parents = 2,
2080             .ops = &clk_rcg_ops,
2081             .flags = CLK_SET_RATE_GATE,
2082         },
2083     }
2084 };
2085 
2086 static struct clk_branch usb_hs1_xcvr_clk = {
2087     .halt_reg = 0x2fc8,
2088     .halt_bit = 0,
2089     .clkr = {
2090         .enable_reg = 0x290c,
2091         .enable_mask = BIT(9),
2092         .hw.init = &(struct clk_init_data){
2093             .name = "usb_hs1_xcvr_clk",
2094             .parent_names = (const char *[]){ "usb_hs1_xcvr_src" },
2095             .num_parents = 1,
2096             .ops = &clk_branch_ops,
2097             .flags = CLK_SET_RATE_PARENT,
2098         },
2099     },
2100 };
2101 
2102 static struct clk_rcg usb_hs3_xcvr_src = {
2103     .ns_reg = 0x370c,
2104     .md_reg = 0x3708,
2105     .mn = {
2106         .mnctr_en_bit = 8,
2107         .mnctr_reset_bit = 7,
2108         .mnctr_mode_shift = 5,
2109         .n_val_shift = 16,
2110         .m_val_shift = 16,
2111         .width = 8,
2112     },
2113     .p = {
2114         .pre_div_shift = 3,
2115         .pre_div_width = 2,
2116     },
2117     .s = {
2118         .src_sel_shift = 0,
2119         .parent_map = gcc_pxo_pll8_map,
2120     },
2121     .freq_tbl = clk_tbl_usb,
2122     .clkr = {
2123         .enable_reg = 0x370c,
2124         .enable_mask = BIT(11),
2125         .hw.init = &(struct clk_init_data){
2126             .name = "usb_hs3_xcvr_src",
2127             .parent_names = gcc_pxo_pll8,
2128             .num_parents = 2,
2129             .ops = &clk_rcg_ops,
2130             .flags = CLK_SET_RATE_GATE,
2131         },
2132     }
2133 };
2134 
2135 static struct clk_branch usb_hs3_xcvr_clk = {
2136     .halt_reg = 0x2fc8,
2137     .halt_bit = 30,
2138     .clkr = {
2139         .enable_reg = 0x370c,
2140         .enable_mask = BIT(9),
2141         .hw.init = &(struct clk_init_data){
2142             .name = "usb_hs3_xcvr_clk",
2143             .parent_names = (const char *[]){ "usb_hs3_xcvr_src" },
2144             .num_parents = 1,
2145             .ops = &clk_branch_ops,
2146             .flags = CLK_SET_RATE_PARENT,
2147         },
2148     },
2149 };
2150 
2151 static struct clk_rcg usb_hs4_xcvr_src = {
2152     .ns_reg = 0x372c,
2153     .md_reg = 0x3728,
2154     .mn = {
2155         .mnctr_en_bit = 8,
2156         .mnctr_reset_bit = 7,
2157         .mnctr_mode_shift = 5,
2158         .n_val_shift = 16,
2159         .m_val_shift = 16,
2160         .width = 8,
2161     },
2162     .p = {
2163         .pre_div_shift = 3,
2164         .pre_div_width = 2,
2165     },
2166     .s = {
2167         .src_sel_shift = 0,
2168         .parent_map = gcc_pxo_pll8_map,
2169     },
2170     .freq_tbl = clk_tbl_usb,
2171     .clkr = {
2172         .enable_reg = 0x372c,
2173         .enable_mask = BIT(11),
2174         .hw.init = &(struct clk_init_data){
2175             .name = "usb_hs4_xcvr_src",
2176             .parent_names = gcc_pxo_pll8,
2177             .num_parents = 2,
2178             .ops = &clk_rcg_ops,
2179             .flags = CLK_SET_RATE_GATE,
2180         },
2181     }
2182 };
2183 
2184 static struct clk_branch usb_hs4_xcvr_clk = {
2185     .halt_reg = 0x2fc8,
2186     .halt_bit = 2,
2187     .clkr = {
2188         .enable_reg = 0x372c,
2189         .enable_mask = BIT(9),
2190         .hw.init = &(struct clk_init_data){
2191             .name = "usb_hs4_xcvr_clk",
2192             .parent_names = (const char *[]){ "usb_hs4_xcvr_src" },
2193             .num_parents = 1,
2194             .ops = &clk_branch_ops,
2195             .flags = CLK_SET_RATE_PARENT,
2196         },
2197     },
2198 };
2199 
2200 static struct clk_rcg usb_hsic_xcvr_fs_src = {
2201     .ns_reg = 0x2928,
2202     .md_reg = 0x2924,
2203     .mn = {
2204         .mnctr_en_bit = 8,
2205         .mnctr_reset_bit = 7,
2206         .mnctr_mode_shift = 5,
2207         .n_val_shift = 16,
2208         .m_val_shift = 16,
2209         .width = 8,
2210     },
2211     .p = {
2212         .pre_div_shift = 3,
2213         .pre_div_width = 2,
2214     },
2215     .s = {
2216         .src_sel_shift = 0,
2217         .parent_map = gcc_pxo_pll8_map,
2218     },
2219     .freq_tbl = clk_tbl_usb,
2220     .clkr = {
2221         .enable_reg = 0x2928,
2222         .enable_mask = BIT(11),
2223         .hw.init = &(struct clk_init_data){
2224             .name = "usb_hsic_xcvr_fs_src",
2225             .parent_names = gcc_pxo_pll8,
2226             .num_parents = 2,
2227             .ops = &clk_rcg_ops,
2228             .flags = CLK_SET_RATE_GATE,
2229         },
2230     }
2231 };
2232 
2233 static const char * const usb_hsic_xcvr_fs_src_p[] = { "usb_hsic_xcvr_fs_src" };
2234 
2235 static struct clk_branch usb_hsic_xcvr_fs_clk = {
2236     .halt_reg = 0x2fc8,
2237     .halt_bit = 2,
2238     .clkr = {
2239         .enable_reg = 0x2928,
2240         .enable_mask = BIT(9),
2241         .hw.init = &(struct clk_init_data){
2242             .name = "usb_hsic_xcvr_fs_clk",
2243             .parent_names = usb_hsic_xcvr_fs_src_p,
2244             .num_parents = 1,
2245             .ops = &clk_branch_ops,
2246             .flags = CLK_SET_RATE_PARENT,
2247         },
2248     },
2249 };
2250 
2251 static struct clk_branch usb_hsic_system_clk = {
2252     .halt_reg = 0x2fcc,
2253     .halt_bit = 24,
2254     .clkr = {
2255         .enable_reg = 0x292c,
2256         .enable_mask = BIT(4),
2257         .hw.init = &(struct clk_init_data){
2258             .parent_names = usb_hsic_xcvr_fs_src_p,
2259             .num_parents = 1,
2260             .name = "usb_hsic_system_clk",
2261             .ops = &clk_branch_ops,
2262             .flags = CLK_SET_RATE_PARENT,
2263         },
2264     },
2265 };
2266 
2267 static struct clk_branch usb_hsic_hsic_clk = {
2268     .halt_reg = 0x2fcc,
2269     .halt_bit = 19,
2270     .clkr = {
2271         .enable_reg = 0x2b44,
2272         .enable_mask = BIT(0),
2273         .hw.init = &(struct clk_init_data){
2274             .parent_names = (const char *[]){ "pll14_vote" },
2275             .num_parents = 1,
2276             .name = "usb_hsic_hsic_clk",
2277             .ops = &clk_branch_ops,
2278         },
2279     },
2280 };
2281 
2282 static struct clk_branch usb_hsic_hsio_cal_clk = {
2283     .halt_reg = 0x2fcc,
2284     .halt_bit = 23,
2285     .clkr = {
2286         .enable_reg = 0x2b48,
2287         .enable_mask = BIT(0),
2288         .hw.init = &(struct clk_init_data){
2289             .name = "usb_hsic_hsio_cal_clk",
2290             .ops = &clk_branch_ops,
2291         },
2292     },
2293 };
2294 
2295 static struct clk_rcg usb_fs1_xcvr_fs_src = {
2296     .ns_reg = 0x2968,
2297     .md_reg = 0x2964,
2298     .mn = {
2299         .mnctr_en_bit = 8,
2300         .mnctr_reset_bit = 7,
2301         .mnctr_mode_shift = 5,
2302         .n_val_shift = 16,
2303         .m_val_shift = 16,
2304         .width = 8,
2305     },
2306     .p = {
2307         .pre_div_shift = 3,
2308         .pre_div_width = 2,
2309     },
2310     .s = {
2311         .src_sel_shift = 0,
2312         .parent_map = gcc_pxo_pll8_map,
2313     },
2314     .freq_tbl = clk_tbl_usb,
2315     .clkr = {
2316         .enable_reg = 0x2968,
2317         .enable_mask = BIT(11),
2318         .hw.init = &(struct clk_init_data){
2319             .name = "usb_fs1_xcvr_fs_src",
2320             .parent_names = gcc_pxo_pll8,
2321             .num_parents = 2,
2322             .ops = &clk_rcg_ops,
2323             .flags = CLK_SET_RATE_GATE,
2324         },
2325     }
2326 };
2327 
2328 static const char * const usb_fs1_xcvr_fs_src_p[] = { "usb_fs1_xcvr_fs_src" };
2329 
2330 static struct clk_branch usb_fs1_xcvr_fs_clk = {
2331     .halt_reg = 0x2fcc,
2332     .halt_bit = 15,
2333     .clkr = {
2334         .enable_reg = 0x2968,
2335         .enable_mask = BIT(9),
2336         .hw.init = &(struct clk_init_data){
2337             .name = "usb_fs1_xcvr_fs_clk",
2338             .parent_names = usb_fs1_xcvr_fs_src_p,
2339             .num_parents = 1,
2340             .ops = &clk_branch_ops,
2341             .flags = CLK_SET_RATE_PARENT,
2342         },
2343     },
2344 };
2345 
2346 static struct clk_branch usb_fs1_system_clk = {
2347     .halt_reg = 0x2fcc,
2348     .halt_bit = 16,
2349     .clkr = {
2350         .enable_reg = 0x296c,
2351         .enable_mask = BIT(4),
2352         .hw.init = &(struct clk_init_data){
2353             .parent_names = usb_fs1_xcvr_fs_src_p,
2354             .num_parents = 1,
2355             .name = "usb_fs1_system_clk",
2356             .ops = &clk_branch_ops,
2357             .flags = CLK_SET_RATE_PARENT,
2358         },
2359     },
2360 };
2361 
2362 static struct clk_rcg usb_fs2_xcvr_fs_src = {
2363     .ns_reg = 0x2988,
2364     .md_reg = 0x2984,
2365     .mn = {
2366         .mnctr_en_bit = 8,
2367         .mnctr_reset_bit = 7,
2368         .mnctr_mode_shift = 5,
2369         .n_val_shift = 16,
2370         .m_val_shift = 16,
2371         .width = 8,
2372     },
2373     .p = {
2374         .pre_div_shift = 3,
2375         .pre_div_width = 2,
2376     },
2377     .s = {
2378         .src_sel_shift = 0,
2379         .parent_map = gcc_pxo_pll8_map,
2380     },
2381     .freq_tbl = clk_tbl_usb,
2382     .clkr = {
2383         .enable_reg = 0x2988,
2384         .enable_mask = BIT(11),
2385         .hw.init = &(struct clk_init_data){
2386             .name = "usb_fs2_xcvr_fs_src",
2387             .parent_names = gcc_pxo_pll8,
2388             .num_parents = 2,
2389             .ops = &clk_rcg_ops,
2390             .flags = CLK_SET_RATE_GATE,
2391         },
2392     }
2393 };
2394 
2395 static const char * const usb_fs2_xcvr_fs_src_p[] = { "usb_fs2_xcvr_fs_src" };
2396 
2397 static struct clk_branch usb_fs2_xcvr_fs_clk = {
2398     .halt_reg = 0x2fcc,
2399     .halt_bit = 12,
2400     .clkr = {
2401         .enable_reg = 0x2988,
2402         .enable_mask = BIT(9),
2403         .hw.init = &(struct clk_init_data){
2404             .name = "usb_fs2_xcvr_fs_clk",
2405             .parent_names = usb_fs2_xcvr_fs_src_p,
2406             .num_parents = 1,
2407             .ops = &clk_branch_ops,
2408             .flags = CLK_SET_RATE_PARENT,
2409         },
2410     },
2411 };
2412 
2413 static struct clk_branch usb_fs2_system_clk = {
2414     .halt_reg = 0x2fcc,
2415     .halt_bit = 13,
2416     .clkr = {
2417         .enable_reg = 0x298c,
2418         .enable_mask = BIT(4),
2419         .hw.init = &(struct clk_init_data){
2420             .name = "usb_fs2_system_clk",
2421             .parent_names = usb_fs2_xcvr_fs_src_p,
2422             .num_parents = 1,
2423             .ops = &clk_branch_ops,
2424             .flags = CLK_SET_RATE_PARENT,
2425         },
2426     },
2427 };
2428 
2429 static struct clk_branch ce1_core_clk = {
2430     .hwcg_reg = 0x2724,
2431     .hwcg_bit = 6,
2432     .halt_reg = 0x2fd4,
2433     .halt_bit = 27,
2434     .clkr = {
2435         .enable_reg = 0x2724,
2436         .enable_mask = BIT(4),
2437         .hw.init = &(struct clk_init_data){
2438             .name = "ce1_core_clk",
2439             .ops = &clk_branch_ops,
2440         },
2441     },
2442 };
2443 
2444 static struct clk_branch ce1_h_clk = {
2445     .halt_reg = 0x2fd4,
2446     .halt_bit = 1,
2447     .clkr = {
2448         .enable_reg = 0x2720,
2449         .enable_mask = BIT(4),
2450         .hw.init = &(struct clk_init_data){
2451             .name = "ce1_h_clk",
2452             .ops = &clk_branch_ops,
2453         },
2454     },
2455 };
2456 
2457 static struct clk_branch dma_bam_h_clk = {
2458     .hwcg_reg = 0x25c0,
2459     .hwcg_bit = 6,
2460     .halt_reg = 0x2fc8,
2461     .halt_bit = 12,
2462     .clkr = {
2463         .enable_reg = 0x25c0,
2464         .enable_mask = BIT(4),
2465         .hw.init = &(struct clk_init_data){
2466             .name = "dma_bam_h_clk",
2467             .ops = &clk_branch_ops,
2468         },
2469     },
2470 };
2471 
2472 static struct clk_branch gsbi1_h_clk = {
2473     .hwcg_reg = 0x29c0,
2474     .hwcg_bit = 6,
2475     .halt_reg = 0x2fcc,
2476     .halt_bit = 11,
2477     .clkr = {
2478         .enable_reg = 0x29c0,
2479         .enable_mask = BIT(4),
2480         .hw.init = &(struct clk_init_data){
2481             .name = "gsbi1_h_clk",
2482             .ops = &clk_branch_ops,
2483         },
2484     },
2485 };
2486 
2487 static struct clk_branch gsbi2_h_clk = {
2488     .hwcg_reg = 0x29e0,
2489     .hwcg_bit = 6,
2490     .halt_reg = 0x2fcc,
2491     .halt_bit = 7,
2492     .clkr = {
2493         .enable_reg = 0x29e0,
2494         .enable_mask = BIT(4),
2495         .hw.init = &(struct clk_init_data){
2496             .name = "gsbi2_h_clk",
2497             .ops = &clk_branch_ops,
2498         },
2499     },
2500 };
2501 
2502 static struct clk_branch gsbi3_h_clk = {
2503     .hwcg_reg = 0x2a00,
2504     .hwcg_bit = 6,
2505     .halt_reg = 0x2fcc,
2506     .halt_bit = 3,
2507     .clkr = {
2508         .enable_reg = 0x2a00,
2509         .enable_mask = BIT(4),
2510         .hw.init = &(struct clk_init_data){
2511             .name = "gsbi3_h_clk",
2512             .ops = &clk_branch_ops,
2513         },
2514     },
2515 };
2516 
2517 static struct clk_branch gsbi4_h_clk = {
2518     .hwcg_reg = 0x2a20,
2519     .hwcg_bit = 6,
2520     .halt_reg = 0x2fd0,
2521     .halt_bit = 27,
2522     .clkr = {
2523         .enable_reg = 0x2a20,
2524         .enable_mask = BIT(4),
2525         .hw.init = &(struct clk_init_data){
2526             .name = "gsbi4_h_clk",
2527             .ops = &clk_branch_ops,
2528         },
2529     },
2530 };
2531 
2532 static struct clk_branch gsbi5_h_clk = {
2533     .hwcg_reg = 0x2a40,
2534     .hwcg_bit = 6,
2535     .halt_reg = 0x2fd0,
2536     .halt_bit = 23,
2537     .clkr = {
2538         .enable_reg = 0x2a40,
2539         .enable_mask = BIT(4),
2540         .hw.init = &(struct clk_init_data){
2541             .name = "gsbi5_h_clk",
2542             .ops = &clk_branch_ops,
2543         },
2544     },
2545 };
2546 
2547 static struct clk_branch gsbi6_h_clk = {
2548     .hwcg_reg = 0x2a60,
2549     .hwcg_bit = 6,
2550     .halt_reg = 0x2fd0,
2551     .halt_bit = 19,
2552     .clkr = {
2553         .enable_reg = 0x2a60,
2554         .enable_mask = BIT(4),
2555         .hw.init = &(struct clk_init_data){
2556             .name = "gsbi6_h_clk",
2557             .ops = &clk_branch_ops,
2558         },
2559     },
2560 };
2561 
2562 static struct clk_branch gsbi7_h_clk = {
2563     .hwcg_reg = 0x2a80,
2564     .hwcg_bit = 6,
2565     .halt_reg = 0x2fd0,
2566     .halt_bit = 15,
2567     .clkr = {
2568         .enable_reg = 0x2a80,
2569         .enable_mask = BIT(4),
2570         .hw.init = &(struct clk_init_data){
2571             .name = "gsbi7_h_clk",
2572             .ops = &clk_branch_ops,
2573         },
2574     },
2575 };
2576 
2577 static struct clk_branch gsbi8_h_clk = {
2578     .hwcg_reg = 0x2aa0,
2579     .hwcg_bit = 6,
2580     .halt_reg = 0x2fd0,
2581     .halt_bit = 11,
2582     .clkr = {
2583         .enable_reg = 0x2aa0,
2584         .enable_mask = BIT(4),
2585         .hw.init = &(struct clk_init_data){
2586             .name = "gsbi8_h_clk",
2587             .ops = &clk_branch_ops,
2588         },
2589     },
2590 };
2591 
2592 static struct clk_branch gsbi9_h_clk = {
2593     .hwcg_reg = 0x2ac0,
2594     .hwcg_bit = 6,
2595     .halt_reg = 0x2fd0,
2596     .halt_bit = 7,
2597     .clkr = {
2598         .enable_reg = 0x2ac0,
2599         .enable_mask = BIT(4),
2600         .hw.init = &(struct clk_init_data){
2601             .name = "gsbi9_h_clk",
2602             .ops = &clk_branch_ops,
2603         },
2604     },
2605 };
2606 
2607 static struct clk_branch gsbi10_h_clk = {
2608     .hwcg_reg = 0x2ae0,
2609     .hwcg_bit = 6,
2610     .halt_reg = 0x2fd0,
2611     .halt_bit = 3,
2612     .clkr = {
2613         .enable_reg = 0x2ae0,
2614         .enable_mask = BIT(4),
2615         .hw.init = &(struct clk_init_data){
2616             .name = "gsbi10_h_clk",
2617             .ops = &clk_branch_ops,
2618         },
2619     },
2620 };
2621 
2622 static struct clk_branch gsbi11_h_clk = {
2623     .hwcg_reg = 0x2b00,
2624     .hwcg_bit = 6,
2625     .halt_reg = 0x2fd4,
2626     .halt_bit = 18,
2627     .clkr = {
2628         .enable_reg = 0x2b00,
2629         .enable_mask = BIT(4),
2630         .hw.init = &(struct clk_init_data){
2631             .name = "gsbi11_h_clk",
2632             .ops = &clk_branch_ops,
2633         },
2634     },
2635 };
2636 
2637 static struct clk_branch gsbi12_h_clk = {
2638     .hwcg_reg = 0x2b20,
2639     .hwcg_bit = 6,
2640     .halt_reg = 0x2fd4,
2641     .halt_bit = 14,
2642     .clkr = {
2643         .enable_reg = 0x2b20,
2644         .enable_mask = BIT(4),
2645         .hw.init = &(struct clk_init_data){
2646             .name = "gsbi12_h_clk",
2647             .ops = &clk_branch_ops,
2648         },
2649     },
2650 };
2651 
2652 static struct clk_branch tsif_h_clk = {
2653     .hwcg_reg = 0x2700,
2654     .hwcg_bit = 6,
2655     .halt_reg = 0x2fd4,
2656     .halt_bit = 7,
2657     .clkr = {
2658         .enable_reg = 0x2700,
2659         .enable_mask = BIT(4),
2660         .hw.init = &(struct clk_init_data){
2661             .name = "tsif_h_clk",
2662             .ops = &clk_branch_ops,
2663         },
2664     },
2665 };
2666 
2667 static struct clk_branch usb_fs1_h_clk = {
2668     .halt_reg = 0x2fcc,
2669     .halt_bit = 17,
2670     .clkr = {
2671         .enable_reg = 0x2960,
2672         .enable_mask = BIT(4),
2673         .hw.init = &(struct clk_init_data){
2674             .name = "usb_fs1_h_clk",
2675             .ops = &clk_branch_ops,
2676         },
2677     },
2678 };
2679 
2680 static struct clk_branch usb_fs2_h_clk = {
2681     .halt_reg = 0x2fcc,
2682     .halt_bit = 14,
2683     .clkr = {
2684         .enable_reg = 0x2980,
2685         .enable_mask = BIT(4),
2686         .hw.init = &(struct clk_init_data){
2687             .name = "usb_fs2_h_clk",
2688             .ops = &clk_branch_ops,
2689         },
2690     },
2691 };
2692 
2693 static struct clk_branch usb_hs1_h_clk = {
2694     .hwcg_reg = 0x2900,
2695     .hwcg_bit = 6,
2696     .halt_reg = 0x2fc8,
2697     .halt_bit = 1,
2698     .clkr = {
2699         .enable_reg = 0x2900,
2700         .enable_mask = BIT(4),
2701         .hw.init = &(struct clk_init_data){
2702             .name = "usb_hs1_h_clk",
2703             .ops = &clk_branch_ops,
2704         },
2705     },
2706 };
2707 
2708 static struct clk_branch usb_hs3_h_clk = {
2709     .halt_reg = 0x2fc8,
2710     .halt_bit = 31,
2711     .clkr = {
2712         .enable_reg = 0x3700,
2713         .enable_mask = BIT(4),
2714         .hw.init = &(struct clk_init_data){
2715             .name = "usb_hs3_h_clk",
2716             .ops = &clk_branch_ops,
2717         },
2718     },
2719 };
2720 
2721 static struct clk_branch usb_hs4_h_clk = {
2722     .halt_reg = 0x2fc8,
2723     .halt_bit = 7,
2724     .clkr = {
2725         .enable_reg = 0x3720,
2726         .enable_mask = BIT(4),
2727         .hw.init = &(struct clk_init_data){
2728             .name = "usb_hs4_h_clk",
2729             .ops = &clk_branch_ops,
2730         },
2731     },
2732 };
2733 
2734 static struct clk_branch usb_hsic_h_clk = {
2735     .halt_reg = 0x2fcc,
2736     .halt_bit = 28,
2737     .clkr = {
2738         .enable_reg = 0x2920,
2739         .enable_mask = BIT(4),
2740         .hw.init = &(struct clk_init_data){
2741             .name = "usb_hsic_h_clk",
2742             .ops = &clk_branch_ops,
2743         },
2744     },
2745 };
2746 
2747 static struct clk_branch sdc1_h_clk = {
2748     .hwcg_reg = 0x2820,
2749     .hwcg_bit = 6,
2750     .halt_reg = 0x2fc8,
2751     .halt_bit = 11,
2752     .clkr = {
2753         .enable_reg = 0x2820,
2754         .enable_mask = BIT(4),
2755         .hw.init = &(struct clk_init_data){
2756             .name = "sdc1_h_clk",
2757             .ops = &clk_branch_ops,
2758         },
2759     },
2760 };
2761 
2762 static struct clk_branch sdc2_h_clk = {
2763     .hwcg_reg = 0x2840,
2764     .hwcg_bit = 6,
2765     .halt_reg = 0x2fc8,
2766     .halt_bit = 10,
2767     .clkr = {
2768         .enable_reg = 0x2840,
2769         .enable_mask = BIT(4),
2770         .hw.init = &(struct clk_init_data){
2771             .name = "sdc2_h_clk",
2772             .ops = &clk_branch_ops,
2773         },
2774     },
2775 };
2776 
2777 static struct clk_branch sdc3_h_clk = {
2778     .hwcg_reg = 0x2860,
2779     .hwcg_bit = 6,
2780     .halt_reg = 0x2fc8,
2781     .halt_bit = 9,
2782     .clkr = {
2783         .enable_reg = 0x2860,
2784         .enable_mask = BIT(4),
2785         .hw.init = &(struct clk_init_data){
2786             .name = "sdc3_h_clk",
2787             .ops = &clk_branch_ops,
2788         },
2789     },
2790 };
2791 
2792 static struct clk_branch sdc4_h_clk = {
2793     .hwcg_reg = 0x2880,
2794     .hwcg_bit = 6,
2795     .halt_reg = 0x2fc8,
2796     .halt_bit = 8,
2797     .clkr = {
2798         .enable_reg = 0x2880,
2799         .enable_mask = BIT(4),
2800         .hw.init = &(struct clk_init_data){
2801             .name = "sdc4_h_clk",
2802             .ops = &clk_branch_ops,
2803         },
2804     },
2805 };
2806 
2807 static struct clk_branch sdc5_h_clk = {
2808     .hwcg_reg = 0x28a0,
2809     .hwcg_bit = 6,
2810     .halt_reg = 0x2fc8,
2811     .halt_bit = 7,
2812     .clkr = {
2813         .enable_reg = 0x28a0,
2814         .enable_mask = BIT(4),
2815         .hw.init = &(struct clk_init_data){
2816             .name = "sdc5_h_clk",
2817             .ops = &clk_branch_ops,
2818         },
2819     },
2820 };
2821 
2822 static struct clk_branch adm0_clk = {
2823     .halt_reg = 0x2fdc,
2824     .halt_check = BRANCH_HALT_VOTED,
2825     .halt_bit = 14,
2826     .clkr = {
2827         .enable_reg = 0x3080,
2828         .enable_mask = BIT(2),
2829         .hw.init = &(struct clk_init_data){
2830             .name = "adm0_clk",
2831             .ops = &clk_branch_ops,
2832         },
2833     },
2834 };
2835 
2836 static struct clk_branch adm0_pbus_clk = {
2837     .hwcg_reg = 0x2208,
2838     .hwcg_bit = 6,
2839     .halt_reg = 0x2fdc,
2840     .halt_check = BRANCH_HALT_VOTED,
2841     .halt_bit = 13,
2842     .clkr = {
2843         .enable_reg = 0x3080,
2844         .enable_mask = BIT(3),
2845         .hw.init = &(struct clk_init_data){
2846             .name = "adm0_pbus_clk",
2847             .ops = &clk_branch_ops,
2848         },
2849     },
2850 };
2851 
2852 static struct freq_tbl clk_tbl_ce3[] = {
2853     { 48000000, P_PLL8, 8 },
2854     { 100000000, P_PLL3, 12 },
2855     { 120000000, P_PLL3, 10 },
2856     { }
2857 };
2858 
2859 static struct clk_rcg ce3_src = {
2860     .ns_reg = 0x36c0,
2861     .p = {
2862         .pre_div_shift = 3,
2863         .pre_div_width = 4,
2864     },
2865     .s = {
2866         .src_sel_shift = 0,
2867         .parent_map = gcc_pxo_pll8_pll3_map,
2868     },
2869     .freq_tbl = clk_tbl_ce3,
2870     .clkr = {
2871         .enable_reg = 0x36c0,
2872         .enable_mask = BIT(7),
2873         .hw.init = &(struct clk_init_data){
2874             .name = "ce3_src",
2875             .parent_names = gcc_pxo_pll8_pll3,
2876             .num_parents = 3,
2877             .ops = &clk_rcg_ops,
2878             .flags = CLK_SET_RATE_GATE,
2879         },
2880     },
2881 };
2882 
2883 static struct clk_branch ce3_core_clk = {
2884     .halt_reg = 0x2fdc,
2885     .halt_bit = 5,
2886     .clkr = {
2887         .enable_reg = 0x36cc,
2888         .enable_mask = BIT(4),
2889         .hw.init = &(struct clk_init_data){
2890             .name = "ce3_core_clk",
2891             .parent_names = (const char *[]){ "ce3_src" },
2892             .num_parents = 1,
2893             .ops = &clk_branch_ops,
2894             .flags = CLK_SET_RATE_PARENT,
2895         },
2896     },
2897 };
2898 
2899 static struct clk_branch ce3_h_clk = {
2900     .halt_reg = 0x2fc4,
2901     .halt_bit = 16,
2902     .clkr = {
2903         .enable_reg = 0x36c4,
2904         .enable_mask = BIT(4),
2905         .hw.init = &(struct clk_init_data){
2906             .name = "ce3_h_clk",
2907             .parent_names = (const char *[]){ "ce3_src" },
2908             .num_parents = 1,
2909             .ops = &clk_branch_ops,
2910             .flags = CLK_SET_RATE_PARENT,
2911         },
2912     },
2913 };
2914 
2915 static const struct freq_tbl clk_tbl_sata_ref[] = {
2916     { 48000000, P_PLL8, 8, 0, 0 },
2917     { 100000000, P_PLL3, 12, 0, 0 },
2918     { }
2919 };
2920 
2921 static struct clk_rcg sata_clk_src = {
2922     .ns_reg = 0x2c08,
2923     .p = {
2924         .pre_div_shift = 3,
2925         .pre_div_width = 4,
2926     },
2927     .s = {
2928         .src_sel_shift = 0,
2929         .parent_map = gcc_pxo_pll8_pll3_map,
2930     },
2931     .freq_tbl = clk_tbl_sata_ref,
2932     .clkr = {
2933         .enable_reg = 0x2c08,
2934         .enable_mask = BIT(7),
2935         .hw.init = &(struct clk_init_data){
2936             .name = "sata_clk_src",
2937             .parent_names = gcc_pxo_pll8_pll3,
2938             .num_parents = 3,
2939             .ops = &clk_rcg_ops,
2940             .flags = CLK_SET_RATE_GATE,
2941         },
2942     },
2943 };
2944 
2945 static struct clk_branch sata_rxoob_clk = {
2946     .halt_reg = 0x2fdc,
2947     .halt_bit = 26,
2948     .clkr = {
2949         .enable_reg = 0x2c0c,
2950         .enable_mask = BIT(4),
2951         .hw.init = &(struct clk_init_data){
2952             .name = "sata_rxoob_clk",
2953             .parent_names = (const char *[]){ "sata_clk_src" },
2954             .num_parents = 1,
2955             .ops = &clk_branch_ops,
2956             .flags = CLK_SET_RATE_PARENT,
2957         },
2958     },
2959 };
2960 
2961 static struct clk_branch sata_pmalive_clk = {
2962     .halt_reg = 0x2fdc,
2963     .halt_bit = 25,
2964     .clkr = {
2965         .enable_reg = 0x2c10,
2966         .enable_mask = BIT(4),
2967         .hw.init = &(struct clk_init_data){
2968             .name = "sata_pmalive_clk",
2969             .parent_names = (const char *[]){ "sata_clk_src" },
2970             .num_parents = 1,
2971             .ops = &clk_branch_ops,
2972             .flags = CLK_SET_RATE_PARENT,
2973         },
2974     },
2975 };
2976 
2977 static struct clk_branch sata_phy_ref_clk = {
2978     .halt_reg = 0x2fdc,
2979     .halt_bit = 24,
2980     .clkr = {
2981         .enable_reg = 0x2c14,
2982         .enable_mask = BIT(4),
2983         .hw.init = &(struct clk_init_data){
2984             .name = "sata_phy_ref_clk",
2985             .parent_names = (const char *[]){ "pxo" },
2986             .num_parents = 1,
2987             .ops = &clk_branch_ops,
2988         },
2989     },
2990 };
2991 
2992 static struct clk_branch sata_a_clk = {
2993     .halt_reg = 0x2fc0,
2994     .halt_bit = 12,
2995     .clkr = {
2996         .enable_reg = 0x2c20,
2997         .enable_mask = BIT(4),
2998         .hw.init = &(struct clk_init_data){
2999             .name = "sata_a_clk",
3000             .ops = &clk_branch_ops,
3001         },
3002     },
3003 };
3004 
3005 static struct clk_branch sata_h_clk = {
3006     .halt_reg = 0x2fdc,
3007     .halt_bit = 27,
3008     .clkr = {
3009         .enable_reg = 0x2c00,
3010         .enable_mask = BIT(4),
3011         .hw.init = &(struct clk_init_data){
3012             .name = "sata_h_clk",
3013             .ops = &clk_branch_ops,
3014         },
3015     },
3016 };
3017 
3018 static struct clk_branch sfab_sata_s_h_clk = {
3019     .halt_reg = 0x2fc4,
3020     .halt_bit = 14,
3021     .clkr = {
3022         .enable_reg = 0x2480,
3023         .enable_mask = BIT(4),
3024         .hw.init = &(struct clk_init_data){
3025             .name = "sfab_sata_s_h_clk",
3026             .ops = &clk_branch_ops,
3027         },
3028     },
3029 };
3030 
3031 static struct clk_branch sata_phy_cfg_clk = {
3032     .halt_reg = 0x2fcc,
3033     .halt_bit = 12,
3034     .clkr = {
3035         .enable_reg = 0x2c40,
3036         .enable_mask = BIT(4),
3037         .hw.init = &(struct clk_init_data){
3038             .name = "sata_phy_cfg_clk",
3039             .ops = &clk_branch_ops,
3040         },
3041     },
3042 };
3043 
3044 static struct clk_branch pcie_phy_ref_clk = {
3045     .halt_reg = 0x2fdc,
3046     .halt_bit = 29,
3047     .clkr = {
3048         .enable_reg = 0x22d0,
3049         .enable_mask = BIT(4),
3050         .hw.init = &(struct clk_init_data){
3051             .name = "pcie_phy_ref_clk",
3052             .ops = &clk_branch_ops,
3053         },
3054     },
3055 };
3056 
3057 static struct clk_branch pcie_h_clk = {
3058     .halt_reg = 0x2fd4,
3059     .halt_bit = 8,
3060     .clkr = {
3061         .enable_reg = 0x22cc,
3062         .enable_mask = BIT(4),
3063         .hw.init = &(struct clk_init_data){
3064             .name = "pcie_h_clk",
3065             .ops = &clk_branch_ops,
3066         },
3067     },
3068 };
3069 
3070 static struct clk_branch pcie_a_clk = {
3071     .halt_reg = 0x2fc0,
3072     .halt_bit = 13,
3073     .clkr = {
3074         .enable_reg = 0x22c0,
3075         .enable_mask = BIT(4),
3076         .hw.init = &(struct clk_init_data){
3077             .name = "pcie_a_clk",
3078             .ops = &clk_branch_ops,
3079         },
3080     },
3081 };
3082 
3083 static struct clk_branch pmic_arb0_h_clk = {
3084     .halt_reg = 0x2fd8,
3085     .halt_check = BRANCH_HALT_VOTED,
3086     .halt_bit = 22,
3087     .clkr = {
3088         .enable_reg = 0x3080,
3089         .enable_mask = BIT(8),
3090         .hw.init = &(struct clk_init_data){
3091             .name = "pmic_arb0_h_clk",
3092             .ops = &clk_branch_ops,
3093         },
3094     },
3095 };
3096 
3097 static struct clk_branch pmic_arb1_h_clk = {
3098     .halt_reg = 0x2fd8,
3099     .halt_check = BRANCH_HALT_VOTED,
3100     .halt_bit = 21,
3101     .clkr = {
3102         .enable_reg = 0x3080,
3103         .enable_mask = BIT(9),
3104         .hw.init = &(struct clk_init_data){
3105             .name = "pmic_arb1_h_clk",
3106             .ops = &clk_branch_ops,
3107         },
3108     },
3109 };
3110 
3111 static struct clk_branch pmic_ssbi2_clk = {
3112     .halt_reg = 0x2fd8,
3113     .halt_check = BRANCH_HALT_VOTED,
3114     .halt_bit = 23,
3115     .clkr = {
3116         .enable_reg = 0x3080,
3117         .enable_mask = BIT(7),
3118         .hw.init = &(struct clk_init_data){
3119             .name = "pmic_ssbi2_clk",
3120             .ops = &clk_branch_ops,
3121         },
3122     },
3123 };
3124 
3125 static struct clk_branch rpm_msg_ram_h_clk = {
3126     .hwcg_reg = 0x27e0,
3127     .hwcg_bit = 6,
3128     .halt_reg = 0x2fd8,
3129     .halt_check = BRANCH_HALT_VOTED,
3130     .halt_bit = 12,
3131     .clkr = {
3132         .enable_reg = 0x3080,
3133         .enable_mask = BIT(6),
3134         .hw.init = &(struct clk_init_data){
3135             .name = "rpm_msg_ram_h_clk",
3136             .ops = &clk_branch_ops,
3137         },
3138     },
3139 };
3140 
3141 static struct clk_regmap *gcc_msm8960_clks[] = {
3142     [PLL3] = &pll3.clkr,
3143     [PLL4_VOTE] = &pll4_vote,
3144     [PLL8] = &pll8.clkr,
3145     [PLL8_VOTE] = &pll8_vote,
3146     [PLL14] = &pll14.clkr,
3147     [PLL14_VOTE] = &pll14_vote,
3148     [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr,
3149     [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr,
3150     [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr,
3151     [GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr,
3152     [GSBI3_UART_SRC] = &gsbi3_uart_src.clkr,
3153     [GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr,
3154     [GSBI4_UART_SRC] = &gsbi4_uart_src.clkr,
3155     [GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr,
3156     [GSBI5_UART_SRC] = &gsbi5_uart_src.clkr,
3157     [GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr,
3158     [GSBI6_UART_SRC] = &gsbi6_uart_src.clkr,
3159     [GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr,
3160     [GSBI7_UART_SRC] = &gsbi7_uart_src.clkr,
3161     [GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr,
3162     [GSBI8_UART_SRC] = &gsbi8_uart_src.clkr,
3163     [GSBI8_UART_CLK] = &gsbi8_uart_clk.clkr,
3164     [GSBI9_UART_SRC] = &gsbi9_uart_src.clkr,
3165     [GSBI9_UART_CLK] = &gsbi9_uart_clk.clkr,
3166     [GSBI10_UART_SRC] = &gsbi10_uart_src.clkr,
3167     [GSBI10_UART_CLK] = &gsbi10_uart_clk.clkr,
3168     [GSBI11_UART_SRC] = &gsbi11_uart_src.clkr,
3169     [GSBI11_UART_CLK] = &gsbi11_uart_clk.clkr,
3170     [GSBI12_UART_SRC] = &gsbi12_uart_src.clkr,
3171     [GSBI12_UART_CLK] = &gsbi12_uart_clk.clkr,
3172     [GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr,
3173     [GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr,
3174     [GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr,
3175     [GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr,
3176     [GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr,
3177     [GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr,
3178     [GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr,
3179     [GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr,
3180     [GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr,
3181     [GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr,
3182     [GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr,
3183     [GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr,
3184     [GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr,
3185     [GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr,
3186     [GSBI8_QUP_SRC] = &gsbi8_qup_src.clkr,
3187     [GSBI8_QUP_CLK] = &gsbi8_qup_clk.clkr,
3188     [GSBI9_QUP_SRC] = &gsbi9_qup_src.clkr,
3189     [GSBI9_QUP_CLK] = &gsbi9_qup_clk.clkr,
3190     [GSBI10_QUP_SRC] = &gsbi10_qup_src.clkr,
3191     [GSBI10_QUP_CLK] = &gsbi10_qup_clk.clkr,
3192     [GSBI11_QUP_SRC] = &gsbi11_qup_src.clkr,
3193     [GSBI11_QUP_CLK] = &gsbi11_qup_clk.clkr,
3194     [GSBI12_QUP_SRC] = &gsbi12_qup_src.clkr,
3195     [GSBI12_QUP_CLK] = &gsbi12_qup_clk.clkr,
3196     [GP0_SRC] = &gp0_src.clkr,
3197     [GP0_CLK] = &gp0_clk.clkr,
3198     [GP1_SRC] = &gp1_src.clkr,
3199     [GP1_CLK] = &gp1_clk.clkr,
3200     [GP2_SRC] = &gp2_src.clkr,
3201     [GP2_CLK] = &gp2_clk.clkr,
3202     [PMEM_A_CLK] = &pmem_clk.clkr,
3203     [PRNG_SRC] = &prng_src.clkr,
3204     [PRNG_CLK] = &prng_clk.clkr,
3205     [SDC1_SRC] = &sdc1_src.clkr,
3206     [SDC1_CLK] = &sdc1_clk.clkr,
3207     [SDC2_SRC] = &sdc2_src.clkr,
3208     [SDC2_CLK] = &sdc2_clk.clkr,
3209     [SDC3_SRC] = &sdc3_src.clkr,
3210     [SDC3_CLK] = &sdc3_clk.clkr,
3211     [SDC4_SRC] = &sdc4_src.clkr,
3212     [SDC4_CLK] = &sdc4_clk.clkr,
3213     [SDC5_SRC] = &sdc5_src.clkr,
3214     [SDC5_CLK] = &sdc5_clk.clkr,
3215     [TSIF_REF_SRC] = &tsif_ref_src.clkr,
3216     [TSIF_REF_CLK] = &tsif_ref_clk.clkr,
3217     [USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr,
3218     [USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr,
3219     [USB_HSIC_XCVR_FS_SRC] = &usb_hsic_xcvr_fs_src.clkr,
3220     [USB_HSIC_XCVR_FS_CLK] = &usb_hsic_xcvr_fs_clk.clkr,
3221     [USB_HSIC_SYSTEM_CLK] = &usb_hsic_system_clk.clkr,
3222     [USB_HSIC_HSIC_CLK] = &usb_hsic_hsic_clk.clkr,
3223     [USB_HSIC_HSIO_CAL_CLK] = &usb_hsic_hsio_cal_clk.clkr,
3224     [USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr,
3225     [USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr,
3226     [USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr,
3227     [USB_FS2_XCVR_FS_SRC] = &usb_fs2_xcvr_fs_src.clkr,
3228     [USB_FS2_XCVR_FS_CLK] = &usb_fs2_xcvr_fs_clk.clkr,
3229     [USB_FS2_SYSTEM_CLK] = &usb_fs2_system_clk.clkr,
3230     [CE1_CORE_CLK] = &ce1_core_clk.clkr,
3231     [CE1_H_CLK] = &ce1_h_clk.clkr,
3232     [DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr,
3233     [GSBI1_H_CLK] = &gsbi1_h_clk.clkr,
3234     [GSBI2_H_CLK] = &gsbi2_h_clk.clkr,
3235     [GSBI3_H_CLK] = &gsbi3_h_clk.clkr,
3236     [GSBI4_H_CLK] = &gsbi4_h_clk.clkr,
3237     [GSBI5_H_CLK] = &gsbi5_h_clk.clkr,
3238     [GSBI6_H_CLK] = &gsbi6_h_clk.clkr,
3239     [GSBI7_H_CLK] = &gsbi7_h_clk.clkr,
3240     [GSBI8_H_CLK] = &gsbi8_h_clk.clkr,
3241     [GSBI9_H_CLK] = &gsbi9_h_clk.clkr,
3242     [GSBI10_H_CLK] = &gsbi10_h_clk.clkr,
3243     [GSBI11_H_CLK] = &gsbi11_h_clk.clkr,
3244     [GSBI12_H_CLK] = &gsbi12_h_clk.clkr,
3245     [TSIF_H_CLK] = &tsif_h_clk.clkr,
3246     [USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr,
3247     [USB_FS2_H_CLK] = &usb_fs2_h_clk.clkr,
3248     [USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr,
3249     [USB_HSIC_H_CLK] = &usb_hsic_h_clk.clkr,
3250     [SDC1_H_CLK] = &sdc1_h_clk.clkr,
3251     [SDC2_H_CLK] = &sdc2_h_clk.clkr,
3252     [SDC3_H_CLK] = &sdc3_h_clk.clkr,
3253     [SDC4_H_CLK] = &sdc4_h_clk.clkr,
3254     [SDC5_H_CLK] = &sdc5_h_clk.clkr,
3255     [ADM0_CLK] = &adm0_clk.clkr,
3256     [ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr,
3257     [PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr,
3258     [PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr,
3259     [PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr,
3260     [RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr,
3261     [PLL9] = &hfpll0.clkr,
3262     [PLL10] = &hfpll1.clkr,
3263     [PLL12] = &hfpll_l2.clkr,
3264 };
3265 
3266 static const struct qcom_reset_map gcc_msm8960_resets[] = {
3267     [SFAB_MSS_Q6_SW_RESET] = { 0x2040, 7 },
3268     [SFAB_MSS_Q6_FW_RESET] = { 0x2044, 7 },
3269     [QDSS_STM_RESET] = { 0x2060, 6 },
3270     [AFAB_SMPSS_S_RESET] = { 0x20b8, 2 },
3271     [AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 },
3272     [AFAB_SMPSS_M0_RESET] = { 0x20b8 },
3273     [AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 },
3274     [AFAB_EBI1_CH1_RESET] = { 0x20c4, 7},
3275     [SFAB_ADM0_M0_RESET] = { 0x21e0, 7 },
3276     [SFAB_ADM0_M1_RESET] = { 0x21e4, 7 },
3277     [SFAB_ADM0_M2_RESET] = { 0x21e8, 7 },
3278     [ADM0_C2_RESET] = { 0x220c, 4},
3279     [ADM0_C1_RESET] = { 0x220c, 3},
3280     [ADM0_C0_RESET] = { 0x220c, 2},
3281     [ADM0_PBUS_RESET] = { 0x220c, 1 },
3282     [ADM0_RESET] = { 0x220c },
3283     [QDSS_CLKS_SW_RESET] = { 0x2260, 5 },
3284     [QDSS_POR_RESET] = { 0x2260, 4 },
3285     [QDSS_TSCTR_RESET] = { 0x2260, 3 },
3286     [QDSS_HRESET_RESET] = { 0x2260, 2 },
3287     [QDSS_AXI_RESET] = { 0x2260, 1 },
3288     [QDSS_DBG_RESET] = { 0x2260 },
3289     [PCIE_A_RESET] = { 0x22c0, 7 },
3290     [PCIE_AUX_RESET] = { 0x22c8, 7 },
3291     [PCIE_H_RESET] = { 0x22d0, 7 },
3292     [SFAB_PCIE_M_RESET] = { 0x22d4, 1 },
3293     [SFAB_PCIE_S_RESET] = { 0x22d4 },
3294     [SFAB_MSS_M_RESET] = { 0x2340, 7 },
3295     [SFAB_USB3_M_RESET] = { 0x2360, 7 },
3296     [SFAB_RIVA_M_RESET] = { 0x2380, 7 },
3297     [SFAB_LPASS_RESET] = { 0x23a0, 7 },
3298     [SFAB_AFAB_M_RESET] = { 0x23e0, 7 },
3299     [AFAB_SFAB_M0_RESET] = { 0x2420, 7 },
3300     [AFAB_SFAB_M1_RESET] = { 0x2424, 7 },
3301     [SFAB_SATA_S_RESET] = { 0x2480, 7 },
3302     [SFAB_DFAB_M_RESET] = { 0x2500, 7 },
3303     [DFAB_SFAB_M_RESET] = { 0x2520, 7 },
3304     [DFAB_SWAY0_RESET] = { 0x2540, 7 },
3305     [DFAB_SWAY1_RESET] = { 0x2544, 7 },
3306     [DFAB_ARB0_RESET] = { 0x2560, 7 },
3307     [DFAB_ARB1_RESET] = { 0x2564, 7 },
3308     [PPSS_PROC_RESET] = { 0x2594, 1 },
3309     [PPSS_RESET] = { 0x2594},
3310     [DMA_BAM_RESET] = { 0x25c0, 7 },
3311     [SPS_TIC_H_RESET] = { 0x2600, 7 },
3312     [SLIMBUS_H_RESET] = { 0x2620, 7 },
3313     [SFAB_CFPB_M_RESET] = { 0x2680, 7 },
3314     [SFAB_CFPB_S_RESET] = { 0x26c0, 7 },
3315     [TSIF_H_RESET] = { 0x2700, 7 },
3316     [CE1_H_RESET] = { 0x2720, 7 },
3317     [CE1_CORE_RESET] = { 0x2724, 7 },
3318     [CE1_SLEEP_RESET] = { 0x2728, 7 },
3319     [CE2_H_RESET] = { 0x2740, 7 },
3320     [CE2_CORE_RESET] = { 0x2744, 7 },
3321     [SFAB_SFPB_M_RESET] = { 0x2780, 7 },
3322     [SFAB_SFPB_S_RESET] = { 0x27a0, 7 },
3323     [RPM_PROC_RESET] = { 0x27c0, 7 },
3324     [PMIC_SSBI2_RESET] = { 0x280c, 12 },
3325     [SDC1_RESET] = { 0x2830 },
3326     [SDC2_RESET] = { 0x2850 },
3327     [SDC3_RESET] = { 0x2870 },
3328     [SDC4_RESET] = { 0x2890 },
3329     [SDC5_RESET] = { 0x28b0 },
3330     [DFAB_A2_RESET] = { 0x28c0, 7 },
3331     [USB_HS1_RESET] = { 0x2910 },
3332     [USB_HSIC_RESET] = { 0x2934 },
3333     [USB_FS1_XCVR_RESET] = { 0x2974, 1 },
3334     [USB_FS1_RESET] = { 0x2974 },
3335     [USB_FS2_XCVR_RESET] = { 0x2994, 1 },
3336     [USB_FS2_RESET] = { 0x2994 },
3337     [GSBI1_RESET] = { 0x29dc },
3338     [GSBI2_RESET] = { 0x29fc },
3339     [GSBI3_RESET] = { 0x2a1c },
3340     [GSBI4_RESET] = { 0x2a3c },
3341     [GSBI5_RESET] = { 0x2a5c },
3342     [GSBI6_RESET] = { 0x2a7c },
3343     [GSBI7_RESET] = { 0x2a9c },
3344     [GSBI8_RESET] = { 0x2abc },
3345     [GSBI9_RESET] = { 0x2adc },
3346     [GSBI10_RESET] = { 0x2afc },
3347     [GSBI11_RESET] = { 0x2b1c },
3348     [GSBI12_RESET] = { 0x2b3c },
3349     [SPDM_RESET] = { 0x2b6c },
3350     [TLMM_H_RESET] = { 0x2ba0, 7 },
3351     [SFAB_MSS_S_RESET] = { 0x2c00, 7 },
3352     [MSS_SLP_RESET] = { 0x2c60, 7 },
3353     [MSS_Q6SW_JTAG_RESET] = { 0x2c68, 7 },
3354     [MSS_Q6FW_JTAG_RESET] = { 0x2c6c, 7 },
3355     [MSS_RESET] = { 0x2c64 },
3356     [SATA_H_RESET] = { 0x2c80, 7 },
3357     [SATA_RXOOB_RESE] = { 0x2c8c, 7 },
3358     [SATA_PMALIVE_RESET] = { 0x2c90, 7 },
3359     [SATA_SFAB_M_RESET] = { 0x2c98, 7 },
3360     [TSSC_RESET] = { 0x2ca0, 7 },
3361     [PDM_RESET] = { 0x2cc0, 12 },
3362     [MPM_H_RESET] = { 0x2da0, 7 },
3363     [MPM_RESET] = { 0x2da4 },
3364     [SFAB_SMPSS_S_RESET] = { 0x2e00, 7 },
3365     [PRNG_RESET] = { 0x2e80, 12 },
3366     [RIVA_RESET] = { 0x35e0 },
3367 };
3368 
3369 static struct clk_regmap *gcc_apq8064_clks[] = {
3370     [PLL3] = &pll3.clkr,
3371     [PLL4_VOTE] = &pll4_vote,
3372     [PLL8] = &pll8.clkr,
3373     [PLL8_VOTE] = &pll8_vote,
3374     [PLL14] = &pll14.clkr,
3375     [PLL14_VOTE] = &pll14_vote,
3376     [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr,
3377     [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr,
3378     [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr,
3379     [GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr,
3380     [GSBI3_UART_SRC] = &gsbi3_uart_src.clkr,
3381     [GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr,
3382     [GSBI4_UART_SRC] = &gsbi4_uart_src.clkr,
3383     [GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr,
3384     [GSBI5_UART_SRC] = &gsbi5_uart_src.clkr,
3385     [GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr,
3386     [GSBI6_UART_SRC] = &gsbi6_uart_src.clkr,
3387     [GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr,
3388     [GSBI7_UART_SRC] = &gsbi7_uart_src.clkr,
3389     [GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr,
3390     [GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr,
3391     [GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr,
3392     [GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr,
3393     [GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr,
3394     [GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr,
3395     [GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr,
3396     [GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr,
3397     [GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr,
3398     [GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr,
3399     [GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr,
3400     [GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr,
3401     [GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr,
3402     [GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr,
3403     [GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr,
3404     [GP0_SRC] = &gp0_src.clkr,
3405     [GP0_CLK] = &gp0_clk.clkr,
3406     [GP1_SRC] = &gp1_src.clkr,
3407     [GP1_CLK] = &gp1_clk.clkr,
3408     [GP2_SRC] = &gp2_src.clkr,
3409     [GP2_CLK] = &gp2_clk.clkr,
3410     [PMEM_A_CLK] = &pmem_clk.clkr,
3411     [PRNG_SRC] = &prng_src.clkr,
3412     [PRNG_CLK] = &prng_clk.clkr,
3413     [SDC1_SRC] = &sdc1_src.clkr,
3414     [SDC1_CLK] = &sdc1_clk.clkr,
3415     [SDC2_SRC] = &sdc2_src.clkr,
3416     [SDC2_CLK] = &sdc2_clk.clkr,
3417     [SDC3_SRC] = &sdc3_src.clkr,
3418     [SDC3_CLK] = &sdc3_clk.clkr,
3419     [SDC4_SRC] = &sdc4_src.clkr,
3420     [SDC4_CLK] = &sdc4_clk.clkr,
3421     [TSIF_REF_SRC] = &tsif_ref_src.clkr,
3422     [TSIF_REF_CLK] = &tsif_ref_clk.clkr,
3423     [USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr,
3424     [USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr,
3425     [USB_HS3_XCVR_SRC] = &usb_hs3_xcvr_src.clkr,
3426     [USB_HS3_XCVR_CLK] = &usb_hs3_xcvr_clk.clkr,
3427     [USB_HS4_XCVR_SRC] = &usb_hs4_xcvr_src.clkr,
3428     [USB_HS4_XCVR_CLK] = &usb_hs4_xcvr_clk.clkr,
3429     [USB_HSIC_XCVR_FS_SRC] = &usb_hsic_xcvr_fs_src.clkr,
3430     [USB_HSIC_XCVR_FS_CLK] = &usb_hsic_xcvr_fs_clk.clkr,
3431     [USB_HSIC_SYSTEM_CLK] = &usb_hsic_system_clk.clkr,
3432     [USB_HSIC_HSIC_CLK] = &usb_hsic_hsic_clk.clkr,
3433     [USB_HSIC_HSIO_CAL_CLK] = &usb_hsic_hsio_cal_clk.clkr,
3434     [USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr,
3435     [USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr,
3436     [USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr,
3437     [SATA_H_CLK] = &sata_h_clk.clkr,
3438     [SATA_CLK_SRC] = &sata_clk_src.clkr,
3439     [SATA_RXOOB_CLK] = &sata_rxoob_clk.clkr,
3440     [SATA_PMALIVE_CLK] = &sata_pmalive_clk.clkr,
3441     [SATA_PHY_REF_CLK] = &sata_phy_ref_clk.clkr,
3442     [SATA_PHY_CFG_CLK] = &sata_phy_cfg_clk.clkr,
3443     [SATA_A_CLK] = &sata_a_clk.clkr,
3444     [SFAB_SATA_S_H_CLK] = &sfab_sata_s_h_clk.clkr,
3445     [CE3_SRC] = &ce3_src.clkr,
3446     [CE3_CORE_CLK] = &ce3_core_clk.clkr,
3447     [CE3_H_CLK] = &ce3_h_clk.clkr,
3448     [DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr,
3449     [GSBI1_H_CLK] = &gsbi1_h_clk.clkr,
3450     [GSBI2_H_CLK] = &gsbi2_h_clk.clkr,
3451     [GSBI3_H_CLK] = &gsbi3_h_clk.clkr,
3452     [GSBI4_H_CLK] = &gsbi4_h_clk.clkr,
3453     [GSBI5_H_CLK] = &gsbi5_h_clk.clkr,
3454     [GSBI6_H_CLK] = &gsbi6_h_clk.clkr,
3455     [GSBI7_H_CLK] = &gsbi7_h_clk.clkr,
3456     [TSIF_H_CLK] = &tsif_h_clk.clkr,
3457     [USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr,
3458     [USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr,
3459     [USB_HSIC_H_CLK] = &usb_hsic_h_clk.clkr,
3460     [USB_HS3_H_CLK] = &usb_hs3_h_clk.clkr,
3461     [USB_HS4_H_CLK] = &usb_hs4_h_clk.clkr,
3462     [SDC1_H_CLK] = &sdc1_h_clk.clkr,
3463     [SDC2_H_CLK] = &sdc2_h_clk.clkr,
3464     [SDC3_H_CLK] = &sdc3_h_clk.clkr,
3465     [SDC4_H_CLK] = &sdc4_h_clk.clkr,
3466     [ADM0_CLK] = &adm0_clk.clkr,
3467     [ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr,
3468     [PCIE_A_CLK] = &pcie_a_clk.clkr,
3469     [PCIE_PHY_REF_CLK] = &pcie_phy_ref_clk.clkr,
3470     [PCIE_H_CLK] = &pcie_h_clk.clkr,
3471     [PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr,
3472     [PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr,
3473     [PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr,
3474     [RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr,
3475     [PLL9] = &hfpll0.clkr,
3476     [PLL10] = &hfpll1.clkr,
3477     [PLL12] = &hfpll_l2.clkr,
3478     [PLL16] = &hfpll2.clkr,
3479     [PLL17] = &hfpll3.clkr,
3480 };
3481 
3482 static const struct qcom_reset_map gcc_apq8064_resets[] = {
3483     [QDSS_STM_RESET] = { 0x2060, 6 },
3484     [AFAB_SMPSS_S_RESET] = { 0x20b8, 2 },
3485     [AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 },
3486     [AFAB_SMPSS_M0_RESET] = { 0x20b8 },
3487     [AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 },
3488     [AFAB_EBI1_CH1_RESET] = { 0x20c4, 7},
3489     [SFAB_ADM0_M0_RESET] = { 0x21e0, 7 },
3490     [SFAB_ADM0_M1_RESET] = { 0x21e4, 7 },
3491     [SFAB_ADM0_M2_RESET] = { 0x21e8, 7 },
3492     [ADM0_C2_RESET] = { 0x220c, 4},
3493     [ADM0_C1_RESET] = { 0x220c, 3},
3494     [ADM0_C0_RESET] = { 0x220c, 2},
3495     [ADM0_PBUS_RESET] = { 0x220c, 1 },
3496     [ADM0_RESET] = { 0x220c },
3497     [QDSS_CLKS_SW_RESET] = { 0x2260, 5 },
3498     [QDSS_POR_RESET] = { 0x2260, 4 },
3499     [QDSS_TSCTR_RESET] = { 0x2260, 3 },
3500     [QDSS_HRESET_RESET] = { 0x2260, 2 },
3501     [QDSS_AXI_RESET] = { 0x2260, 1 },
3502     [QDSS_DBG_RESET] = { 0x2260 },
3503     [SFAB_PCIE_M_RESET] = { 0x22d8, 1 },
3504     [SFAB_PCIE_S_RESET] = { 0x22d8 },
3505     [PCIE_EXT_PCI_RESET] = { 0x22dc, 6 },
3506     [PCIE_PHY_RESET] = { 0x22dc, 5 },
3507     [PCIE_PCI_RESET] = { 0x22dc, 4 },
3508     [PCIE_POR_RESET] = { 0x22dc, 3 },
3509     [PCIE_HCLK_RESET] = { 0x22dc, 2 },
3510     [PCIE_ACLK_RESET] = { 0x22dc },
3511     [SFAB_USB3_M_RESET] = { 0x2360, 7 },
3512     [SFAB_RIVA_M_RESET] = { 0x2380, 7 },
3513     [SFAB_LPASS_RESET] = { 0x23a0, 7 },
3514     [SFAB_AFAB_M_RESET] = { 0x23e0, 7 },
3515     [AFAB_SFAB_M0_RESET] = { 0x2420, 7 },
3516     [AFAB_SFAB_M1_RESET] = { 0x2424, 7 },
3517     [SFAB_SATA_S_RESET] = { 0x2480, 7 },
3518     [SFAB_DFAB_M_RESET] = { 0x2500, 7 },
3519     [DFAB_SFAB_M_RESET] = { 0x2520, 7 },
3520     [DFAB_SWAY0_RESET] = { 0x2540, 7 },
3521     [DFAB_SWAY1_RESET] = { 0x2544, 7 },
3522     [DFAB_ARB0_RESET] = { 0x2560, 7 },
3523     [DFAB_ARB1_RESET] = { 0x2564, 7 },
3524     [PPSS_PROC_RESET] = { 0x2594, 1 },
3525     [PPSS_RESET] = { 0x2594},
3526     [DMA_BAM_RESET] = { 0x25c0, 7 },
3527     [SPS_TIC_H_RESET] = { 0x2600, 7 },
3528     [SFAB_CFPB_M_RESET] = { 0x2680, 7 },
3529     [SFAB_CFPB_S_RESET] = { 0x26c0, 7 },
3530     [TSIF_H_RESET] = { 0x2700, 7 },
3531     [CE1_H_RESET] = { 0x2720, 7 },
3532     [CE1_CORE_RESET] = { 0x2724, 7 },
3533     [CE1_SLEEP_RESET] = { 0x2728, 7 },
3534     [CE2_H_RESET] = { 0x2740, 7 },
3535     [CE2_CORE_RESET] = { 0x2744, 7 },
3536     [SFAB_SFPB_M_RESET] = { 0x2780, 7 },
3537     [SFAB_SFPB_S_RESET] = { 0x27a0, 7 },
3538     [RPM_PROC_RESET] = { 0x27c0, 7 },
3539     [PMIC_SSBI2_RESET] = { 0x280c, 12 },
3540     [SDC1_RESET] = { 0x2830 },
3541     [SDC2_RESET] = { 0x2850 },
3542     [SDC3_RESET] = { 0x2870 },
3543     [SDC4_RESET] = { 0x2890 },
3544     [USB_HS1_RESET] = { 0x2910 },
3545     [USB_HSIC_RESET] = { 0x2934 },
3546     [USB_FS1_XCVR_RESET] = { 0x2974, 1 },
3547     [USB_FS1_RESET] = { 0x2974 },
3548     [GSBI1_RESET] = { 0x29dc },
3549     [GSBI2_RESET] = { 0x29fc },
3550     [GSBI3_RESET] = { 0x2a1c },
3551     [GSBI4_RESET] = { 0x2a3c },
3552     [GSBI5_RESET] = { 0x2a5c },
3553     [GSBI6_RESET] = { 0x2a7c },
3554     [GSBI7_RESET] = { 0x2a9c },
3555     [SPDM_RESET] = { 0x2b6c },
3556     [TLMM_H_RESET] = { 0x2ba0, 7 },
3557     [SATA_SFAB_M_RESET] = { 0x2c18 },
3558     [SATA_RESET] = { 0x2c1c },
3559     [GSS_SLP_RESET] = { 0x2c60, 7 },
3560     [GSS_RESET] = { 0x2c64 },
3561     [TSSC_RESET] = { 0x2ca0, 7 },
3562     [PDM_RESET] = { 0x2cc0, 12 },
3563     [MPM_H_RESET] = { 0x2da0, 7 },
3564     [MPM_RESET] = { 0x2da4 },
3565     [SFAB_SMPSS_S_RESET] = { 0x2e00, 7 },
3566     [PRNG_RESET] = { 0x2e80, 12 },
3567     [RIVA_RESET] = { 0x35e0 },
3568     [CE3_H_RESET] = { 0x36c4, 7 },
3569     [SFAB_CE3_M_RESET] = { 0x36c8, 1 },
3570     [SFAB_CE3_S_RESET] = { 0x36c8 },
3571     [CE3_RESET] = { 0x36cc, 7 },
3572     [CE3_SLEEP_RESET] = { 0x36d0, 7 },
3573     [USB_HS3_RESET] = { 0x3710 },
3574     [USB_HS4_RESET] = { 0x3730 },
3575 };
3576 
3577 static const struct regmap_config gcc_msm8960_regmap_config = {
3578     .reg_bits   = 32,
3579     .reg_stride = 4,
3580     .val_bits   = 32,
3581     .max_register   = 0x3660,
3582     .fast_io    = true,
3583 };
3584 
3585 static const struct regmap_config gcc_apq8064_regmap_config = {
3586     .reg_bits   = 32,
3587     .reg_stride = 4,
3588     .val_bits   = 32,
3589     .max_register   = 0x3880,
3590     .fast_io    = true,
3591 };
3592 
3593 static const struct qcom_cc_desc gcc_msm8960_desc = {
3594     .config = &gcc_msm8960_regmap_config,
3595     .clks = gcc_msm8960_clks,
3596     .num_clks = ARRAY_SIZE(gcc_msm8960_clks),
3597     .resets = gcc_msm8960_resets,
3598     .num_resets = ARRAY_SIZE(gcc_msm8960_resets),
3599 };
3600 
3601 static const struct qcom_cc_desc gcc_apq8064_desc = {
3602     .config = &gcc_apq8064_regmap_config,
3603     .clks = gcc_apq8064_clks,
3604     .num_clks = ARRAY_SIZE(gcc_apq8064_clks),
3605     .resets = gcc_apq8064_resets,
3606     .num_resets = ARRAY_SIZE(gcc_apq8064_resets),
3607 };
3608 
3609 static const struct of_device_id gcc_msm8960_match_table[] = {
3610     { .compatible = "qcom,gcc-msm8960", .data = &gcc_msm8960_desc },
3611     { .compatible = "qcom,gcc-apq8064", .data = &gcc_apq8064_desc },
3612     { }
3613 };
3614 MODULE_DEVICE_TABLE(of, gcc_msm8960_match_table);
3615 
3616 static int gcc_msm8960_probe(struct platform_device *pdev)
3617 {
3618     struct device *dev = &pdev->dev;
3619     const struct of_device_id *match;
3620     struct platform_device *tsens;
3621     int ret;
3622 
3623     match = of_match_device(gcc_msm8960_match_table, &pdev->dev);
3624     if (!match)
3625         return -EINVAL;
3626 
3627     ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000);
3628     if (ret)
3629         return ret;
3630 
3631     ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000);
3632     if (ret)
3633         return ret;
3634 
3635     ret = qcom_cc_probe(pdev, match->data);
3636     if (ret)
3637         return ret;
3638 
3639     if (match->data == &gcc_apq8064_desc) {
3640         hfpll1.d = &hfpll1_8064_data;
3641         hfpll_l2.d = &hfpll_l2_8064_data;
3642     }
3643 
3644     if (of_get_available_child_count(pdev->dev.of_node) != 0)
3645         return devm_of_platform_populate(&pdev->dev);
3646 
3647     tsens = platform_device_register_data(&pdev->dev, "qcom-tsens", -1,
3648                           NULL, 0);
3649     if (IS_ERR(tsens))
3650         return PTR_ERR(tsens);
3651 
3652     platform_set_drvdata(pdev, tsens);
3653 
3654     return 0;
3655 }
3656 
3657 static int gcc_msm8960_remove(struct platform_device *pdev)
3658 {
3659     struct platform_device *tsens = platform_get_drvdata(pdev);
3660 
3661     if (tsens)
3662         platform_device_unregister(tsens);
3663 
3664     return 0;
3665 }
3666 
3667 static struct platform_driver gcc_msm8960_driver = {
3668     .probe      = gcc_msm8960_probe,
3669     .remove     = gcc_msm8960_remove,
3670     .driver     = {
3671         .name   = "gcc-msm8960",
3672         .of_match_table = gcc_msm8960_match_table,
3673     },
3674 };
3675 
3676 static int __init gcc_msm8960_init(void)
3677 {
3678     return platform_driver_register(&gcc_msm8960_driver);
3679 }
3680 core_initcall(gcc_msm8960_init);
3681 
3682 static void __exit gcc_msm8960_exit(void)
3683 {
3684     platform_driver_unregister(&gcc_msm8960_driver);
3685 }
3686 module_exit(gcc_msm8960_exit);
3687 
3688 MODULE_DESCRIPTION("QCOM GCC MSM8960 Driver");
3689 MODULE_LICENSE("GPL v2");
3690 MODULE_ALIAS("platform:gcc-msm8960");