0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include <linux/clkdev.h>
0012 #include <linux/clk/spear.h>
0013 #include <linux/err.h>
0014 #include <linux/io.h>
0015 #include <linux/of_platform.h>
0016 #include <linux/spinlock_types.h>
0017 #include "clk.h"
0018
0019
0020 #define SPEAR1340_SYS_CLK_CTRL (misc_base + 0x200)
0021 #define SPEAR1340_HCLK_SRC_SEL_SHIFT 27
0022 #define SPEAR1340_HCLK_SRC_SEL_MASK 1
0023 #define SPEAR1340_SCLK_SRC_SEL_SHIFT 23
0024 #define SPEAR1340_SCLK_SRC_SEL_MASK 3
0025
0026
0027 #define SPEAR1340_PLL_CFG (misc_base + 0x210)
0028
0029 #define SPEAR1340_CLCD_SYNT_CLK_MASK 1
0030 #define SPEAR1340_CLCD_SYNT_CLK_SHIFT 31
0031 #define SPEAR1340_GEN_SYNT2_3_CLK_SHIFT 29
0032 #define SPEAR1340_GEN_SYNT_CLK_MASK 2
0033 #define SPEAR1340_GEN_SYNT0_1_CLK_SHIFT 27
0034 #define SPEAR1340_PLL_CLK_MASK 2
0035 #define SPEAR1340_PLL3_CLK_SHIFT 24
0036 #define SPEAR1340_PLL2_CLK_SHIFT 22
0037 #define SPEAR1340_PLL1_CLK_SHIFT 20
0038
0039 #define SPEAR1340_PLL1_CTR (misc_base + 0x214)
0040 #define SPEAR1340_PLL1_FRQ (misc_base + 0x218)
0041 #define SPEAR1340_PLL2_CTR (misc_base + 0x220)
0042 #define SPEAR1340_PLL2_FRQ (misc_base + 0x224)
0043 #define SPEAR1340_PLL3_CTR (misc_base + 0x22C)
0044 #define SPEAR1340_PLL3_FRQ (misc_base + 0x230)
0045 #define SPEAR1340_PLL4_CTR (misc_base + 0x238)
0046 #define SPEAR1340_PLL4_FRQ (misc_base + 0x23C)
0047 #define SPEAR1340_PERIP_CLK_CFG (misc_base + 0x244)
0048
0049 #define SPEAR1340_SPDIF_CLK_MASK 1
0050 #define SPEAR1340_SPDIF_OUT_CLK_SHIFT 15
0051 #define SPEAR1340_SPDIF_IN_CLK_SHIFT 14
0052 #define SPEAR1340_GPT3_CLK_SHIFT 13
0053 #define SPEAR1340_GPT2_CLK_SHIFT 12
0054 #define SPEAR1340_GPT_CLK_MASK 1
0055 #define SPEAR1340_GPT1_CLK_SHIFT 9
0056 #define SPEAR1340_GPT0_CLK_SHIFT 8
0057 #define SPEAR1340_UART_CLK_MASK 2
0058 #define SPEAR1340_UART1_CLK_SHIFT 6
0059 #define SPEAR1340_UART0_CLK_SHIFT 4
0060 #define SPEAR1340_CLCD_CLK_MASK 2
0061 #define SPEAR1340_CLCD_CLK_SHIFT 2
0062 #define SPEAR1340_C3_CLK_MASK 1
0063 #define SPEAR1340_C3_CLK_SHIFT 1
0064
0065 #define SPEAR1340_GMAC_CLK_CFG (misc_base + 0x248)
0066 #define SPEAR1340_GMAC_PHY_CLK_MASK 1
0067 #define SPEAR1340_GMAC_PHY_CLK_SHIFT 2
0068 #define SPEAR1340_GMAC_PHY_INPUT_CLK_MASK 2
0069 #define SPEAR1340_GMAC_PHY_INPUT_CLK_SHIFT 0
0070
0071 #define SPEAR1340_I2S_CLK_CFG (misc_base + 0x24C)
0072
0073 #define SPEAR1340_I2S_SCLK_X_MASK 0x1F
0074 #define SPEAR1340_I2S_SCLK_X_SHIFT 27
0075 #define SPEAR1340_I2S_SCLK_Y_MASK 0x1F
0076 #define SPEAR1340_I2S_SCLK_Y_SHIFT 22
0077 #define SPEAR1340_I2S_SCLK_EQ_SEL_SHIFT 21
0078 #define SPEAR1340_I2S_SCLK_SYNTH_ENB 20
0079 #define SPEAR1340_I2S_PRS1_CLK_X_MASK 0xFF
0080 #define SPEAR1340_I2S_PRS1_CLK_X_SHIFT 12
0081 #define SPEAR1340_I2S_PRS1_CLK_Y_MASK 0xFF
0082 #define SPEAR1340_I2S_PRS1_CLK_Y_SHIFT 4
0083 #define SPEAR1340_I2S_PRS1_EQ_SEL_SHIFT 3
0084 #define SPEAR1340_I2S_REF_SEL_MASK 1
0085 #define SPEAR1340_I2S_REF_SHIFT 2
0086 #define SPEAR1340_I2S_SRC_CLK_MASK 2
0087 #define SPEAR1340_I2S_SRC_CLK_SHIFT 0
0088
0089 #define SPEAR1340_C3_CLK_SYNT (misc_base + 0x250)
0090 #define SPEAR1340_UART0_CLK_SYNT (misc_base + 0x254)
0091 #define SPEAR1340_UART1_CLK_SYNT (misc_base + 0x258)
0092 #define SPEAR1340_GMAC_CLK_SYNT (misc_base + 0x25C)
0093 #define SPEAR1340_SDHCI_CLK_SYNT (misc_base + 0x260)
0094 #define SPEAR1340_CFXD_CLK_SYNT (misc_base + 0x264)
0095 #define SPEAR1340_ADC_CLK_SYNT (misc_base + 0x270)
0096 #define SPEAR1340_AMBA_CLK_SYNT (misc_base + 0x274)
0097 #define SPEAR1340_CLCD_CLK_SYNT (misc_base + 0x27C)
0098 #define SPEAR1340_SYS_CLK_SYNT (misc_base + 0x284)
0099 #define SPEAR1340_GEN_CLK_SYNT0 (misc_base + 0x28C)
0100 #define SPEAR1340_GEN_CLK_SYNT1 (misc_base + 0x294)
0101 #define SPEAR1340_GEN_CLK_SYNT2 (misc_base + 0x29C)
0102 #define SPEAR1340_GEN_CLK_SYNT3 (misc_base + 0x304)
0103 #define SPEAR1340_PERIP1_CLK_ENB (misc_base + 0x30C)
0104 #define SPEAR1340_RTC_CLK_ENB 31
0105 #define SPEAR1340_ADC_CLK_ENB 30
0106 #define SPEAR1340_C3_CLK_ENB 29
0107 #define SPEAR1340_CLCD_CLK_ENB 27
0108 #define SPEAR1340_DMA_CLK_ENB 25
0109 #define SPEAR1340_GPIO1_CLK_ENB 24
0110 #define SPEAR1340_GPIO0_CLK_ENB 23
0111 #define SPEAR1340_GPT1_CLK_ENB 22
0112 #define SPEAR1340_GPT0_CLK_ENB 21
0113 #define SPEAR1340_I2S_PLAY_CLK_ENB 20
0114 #define SPEAR1340_I2S_REC_CLK_ENB 19
0115 #define SPEAR1340_I2C0_CLK_ENB 18
0116 #define SPEAR1340_SSP_CLK_ENB 17
0117 #define SPEAR1340_UART0_CLK_ENB 15
0118 #define SPEAR1340_PCIE_SATA_CLK_ENB 12
0119 #define SPEAR1340_UOC_CLK_ENB 11
0120 #define SPEAR1340_UHC1_CLK_ENB 10
0121 #define SPEAR1340_UHC0_CLK_ENB 9
0122 #define SPEAR1340_GMAC_CLK_ENB 8
0123 #define SPEAR1340_CFXD_CLK_ENB 7
0124 #define SPEAR1340_SDHCI_CLK_ENB 6
0125 #define SPEAR1340_SMI_CLK_ENB 5
0126 #define SPEAR1340_FSMC_CLK_ENB 4
0127 #define SPEAR1340_SYSRAM0_CLK_ENB 3
0128 #define SPEAR1340_SYSRAM1_CLK_ENB 2
0129 #define SPEAR1340_SYSROM_CLK_ENB 1
0130 #define SPEAR1340_BUS_CLK_ENB 0
0131
0132 #define SPEAR1340_PERIP2_CLK_ENB (misc_base + 0x310)
0133 #define SPEAR1340_THSENS_CLK_ENB 8
0134 #define SPEAR1340_I2S_REF_PAD_CLK_ENB 7
0135 #define SPEAR1340_ACP_CLK_ENB 6
0136 #define SPEAR1340_GPT3_CLK_ENB 5
0137 #define SPEAR1340_GPT2_CLK_ENB 4
0138 #define SPEAR1340_KBD_CLK_ENB 3
0139 #define SPEAR1340_CPU_DBG_CLK_ENB 2
0140 #define SPEAR1340_DDR_CORE_CLK_ENB 1
0141 #define SPEAR1340_DDR_CTRL_CLK_ENB 0
0142
0143 #define SPEAR1340_PERIP3_CLK_ENB (misc_base + 0x314)
0144 #define SPEAR1340_PLGPIO_CLK_ENB 18
0145 #define SPEAR1340_VIDEO_DEC_CLK_ENB 16
0146 #define SPEAR1340_VIDEO_ENC_CLK_ENB 15
0147 #define SPEAR1340_SPDIF_OUT_CLK_ENB 13
0148 #define SPEAR1340_SPDIF_IN_CLK_ENB 12
0149 #define SPEAR1340_VIDEO_IN_CLK_ENB 11
0150 #define SPEAR1340_CAM0_CLK_ENB 10
0151 #define SPEAR1340_CAM1_CLK_ENB 9
0152 #define SPEAR1340_CAM2_CLK_ENB 8
0153 #define SPEAR1340_CAM3_CLK_ENB 7
0154 #define SPEAR1340_MALI_CLK_ENB 6
0155 #define SPEAR1340_CEC0_CLK_ENB 5
0156 #define SPEAR1340_CEC1_CLK_ENB 4
0157 #define SPEAR1340_PWM_CLK_ENB 3
0158 #define SPEAR1340_I2C1_CLK_ENB 2
0159 #define SPEAR1340_UART1_CLK_ENB 1
0160
0161 static DEFINE_SPINLOCK(_lock);
0162
0163
0164 static struct pll_rate_tbl pll_rtbl[] = {
0165
0166 {.mode = 0, .m = 0x83, .n = 0x04, .p = 0x5},
0167 {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x3},
0168 {.mode = 0, .m = 0x64, .n = 0x06, .p = 0x1},
0169 {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x1},
0170 {.mode = 0, .m = 0xA6, .n = 0x06, .p = 0x1},
0171 {.mode = 0, .m = 0xC8, .n = 0x06, .p = 0x1},
0172 {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x0},
0173 {.mode = 0, .m = 0x96, .n = 0x06, .p = 0x0},
0174 };
0175
0176
0177 static struct pll_rate_tbl pll4_rtbl[] = {
0178 {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x2},
0179 {.mode = 0, .m = 0xA6, .n = 0x06, .p = 0x2},
0180 {.mode = 0, .m = 0xC8, .n = 0x06, .p = 0x2},
0181 {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x0},
0182 };
0183
0184
0185
0186
0187
0188 static struct frac_rate_tbl amba_synth_rtbl[] = {
0189 {.div = 0x073A8},
0190 {.div = 0x06062},
0191 {.div = 0x04D1B},
0192 {.div = 0x04000},
0193 {.div = 0x03031},
0194 {.div = 0x0268D},
0195 };
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240 static struct frac_rate_tbl sys_synth_rtbl[] = {
0241 {.div = 0x08000},
0242 {.div = 0x06a38},
0243 {.div = 0x06666},
0244 {.div = 0x06000},
0245 {.div = 0x054FD},
0246 {.div = 0x05000},
0247 {.div = 0x04D18},
0248 {.div = 0x04CCE},
0249 {.div = 0x04000},
0250 {.div = 0x039D5},
0251 {.div = 0x0351E},
0252 {.div = 0x03333},
0253 {.div = 0x03031},
0254 {.div = 0x03000},
0255 {.div = 0x02A7E},
0256 {.div = 0x02800},
0257 {.div = 0x0268D},
0258 {.div = 0x02666},
0259 {.div = 0x02000},
0260 };
0261
0262
0263 static struct aux_rate_tbl aux_rtbl[] = {
0264
0265 {.xscale = 5, .yscale = 122, .eq = 0},
0266
0267 {.xscale = 10, .yscale = 204, .eq = 0},
0268
0269 {.xscale = 4, .yscale = 25, .eq = 0},
0270
0271 {.xscale = 4, .yscale = 21, .eq = 0},
0272
0273 {.xscale = 5, .yscale = 18, .eq = 0},
0274
0275 {.xscale = 2, .yscale = 6, .eq = 0},
0276
0277 {.xscale = 5, .yscale = 12, .eq = 0},
0278
0279 {.xscale = 2, .yscale = 4, .eq = 0},
0280
0281 {.xscale = 5, .yscale = 18, .eq = 1},
0282
0283 {.xscale = 1, .yscale = 3, .eq = 1},
0284
0285 {.xscale = 5, .yscale = 12, .eq = 1},
0286
0287 {.xscale = 1, .yscale = 2, .eq = 1},
0288 };
0289
0290
0291 static struct aux_rate_tbl gmac_rtbl[] = {
0292
0293 {.xscale = 2, .yscale = 6, .eq = 0},
0294 {.xscale = 2, .yscale = 4, .eq = 0},
0295 {.xscale = 1, .yscale = 3, .eq = 1},
0296 {.xscale = 1, .yscale = 2, .eq = 1},
0297 };
0298
0299
0300 static struct frac_rate_tbl clcd_rtbl[] = {
0301 {.div = 0x18000},
0302 {.div = 0x1638E},
0303 {.div = 0x14000},
0304 {.div = 0x1284B},
0305 {.div = 0x0D8D3},
0306 {.div = 0x0B72C},
0307 {.div = 0x0A584},
0308 {.div = 0x093B1},
0309 {.div = 0x089EE},
0310 {.div = 0x081BA},
0311 {.div = 0x07BA0},
0312 {.div = 0x06f1C},
0313 {.div = 0x06E58},
0314 {.div = 0x06c1B},
0315 {.div = 0x058E3},
0316 {.div = 0x04A12},
0317 {.div = 0x040A5},
0318 {.div = 0x0378E},
0319 {.div = 0x0360D},
0320 {.div = 0x035E0},
0321 };
0322
0323
0324 static const struct aux_clk_masks i2s_prs1_masks = {
0325 .eq_sel_mask = AUX_EQ_SEL_MASK,
0326 .eq_sel_shift = SPEAR1340_I2S_PRS1_EQ_SEL_SHIFT,
0327 .eq1_mask = AUX_EQ1_SEL,
0328 .eq2_mask = AUX_EQ2_SEL,
0329 .xscale_sel_mask = SPEAR1340_I2S_PRS1_CLK_X_MASK,
0330 .xscale_sel_shift = SPEAR1340_I2S_PRS1_CLK_X_SHIFT,
0331 .yscale_sel_mask = SPEAR1340_I2S_PRS1_CLK_Y_MASK,
0332 .yscale_sel_shift = SPEAR1340_I2S_PRS1_CLK_Y_SHIFT,
0333 };
0334
0335
0336 static const struct aux_clk_masks i2s_sclk_masks = {
0337 .eq_sel_mask = AUX_EQ_SEL_MASK,
0338 .eq_sel_shift = SPEAR1340_I2S_SCLK_EQ_SEL_SHIFT,
0339 .eq1_mask = AUX_EQ1_SEL,
0340 .eq2_mask = AUX_EQ2_SEL,
0341 .xscale_sel_mask = SPEAR1340_I2S_SCLK_X_MASK,
0342 .xscale_sel_shift = SPEAR1340_I2S_SCLK_X_SHIFT,
0343 .yscale_sel_mask = SPEAR1340_I2S_SCLK_Y_MASK,
0344 .yscale_sel_shift = SPEAR1340_I2S_SCLK_Y_SHIFT,
0345 .enable_bit = SPEAR1340_I2S_SCLK_SYNTH_ENB,
0346 };
0347
0348
0349 static struct aux_rate_tbl i2s_prs1_rtbl[] = {
0350
0351 {.xscale = 1, .yscale = 12, .eq = 0},
0352 {.xscale = 11, .yscale = 96, .eq = 0},
0353 {.xscale = 1, .yscale = 6, .eq = 0},
0354 {.xscale = 11, .yscale = 48, .eq = 0},
0355
0356
0357
0358
0359
0360 {.xscale = 1, .yscale = 3, .eq = 0},
0361
0362
0363 {.xscale = 17, .yscale = 37, .eq = 0},
0364 {.xscale = 1, .yscale = 2, .eq = 0},
0365 };
0366
0367
0368 static struct aux_rate_tbl i2s_sclk_rtbl[] = {
0369
0370 {.xscale = 1, .yscale = 4, .eq = 0},
0371 {.xscale = 1, .yscale = 2, .eq = 0},
0372 };
0373
0374
0375
0376 static struct aux_rate_tbl adc_rtbl[] = {
0377
0378 {.xscale = 1, .yscale = 31, .eq = 0},
0379 {.xscale = 2, .yscale = 21, .eq = 0},
0380 {.xscale = 4, .yscale = 21, .eq = 0},
0381 {.xscale = 10, .yscale = 42, .eq = 0},
0382 };
0383
0384
0385 static struct frac_rate_tbl gen_rtbl[] = {
0386 {.div = 0x1A92B},
0387 {.div = 0x186A0},
0388 {.div = 0x18000},
0389 {.div = 0x1624E},
0390 {.div = 0x14585},
0391 {.div = 0x14000},
0392 {.div = 0x0D495},
0393 {.div = 0x0C000},
0394 {.div = 0x0B127},
0395 {.div = 0x0A000},
0396 {.div = 0x07530},
0397 {.div = 0x061A8},
0398 {.div = 0x06000},
0399 {.div = 0x05000},
0400 {.div = 0x03000},
0401 {.div = 0x02DB6},
0402 {.div = 0x02BA2},
0403 {.div = 0x029BD},
0404 {.div = 0x02800},
0405 {.div = 0x02666},
0406 {.div = 0x02620},
0407 {.div = 0x02460},
0408 {.div = 0x022C0},
0409 {.div = 0x02160},
0410 {.div = 0x02000},
0411 };
0412
0413
0414 static const char *vco_parents[] = { "osc_24m_clk", "osc_25m_clk", };
0415 static const char *sys_parents[] = { "pll1_clk", "pll1_clk", "pll1_clk",
0416 "pll1_clk", "sys_syn_clk", "sys_syn_clk", "pll2_clk", "pll3_clk", };
0417 static const char *ahb_parents[] = { "cpu_div3_clk", "amba_syn_clk", };
0418 static const char *gpt_parents[] = { "osc_24m_clk", "apb_clk", };
0419 static const char *uart0_parents[] = { "pll5_clk", "osc_24m_clk",
0420 "uart0_syn_gclk", };
0421 static const char *uart1_parents[] = { "pll5_clk", "osc_24m_clk",
0422 "uart1_syn_gclk", };
0423 static const char *c3_parents[] = { "pll5_clk", "c3_syn_gclk", };
0424 static const char *gmac_phy_input_parents[] = { "gmii_pad_clk", "pll2_clk",
0425 "osc_25m_clk", };
0426 static const char *gmac_phy_parents[] = { "phy_input_mclk", "phy_syn_gclk", };
0427 static const char *clcd_synth_parents[] = { "vco1div4_clk", "pll2_clk", };
0428 static const char *clcd_pixel_parents[] = { "pll5_clk", "clcd_syn_clk", };
0429 static const char *i2s_src_parents[] = { "vco1div2_clk", "pll2_clk", "pll3_clk",
0430 "i2s_src_pad_clk", };
0431 static const char *i2s_ref_parents[] = { "i2s_src_mclk", "i2s_prs1_clk", };
0432 static const char *spdif_out_parents[] = { "i2s_src_pad_clk", "gen_syn2_clk", };
0433 static const char *spdif_in_parents[] = { "pll2_clk", "gen_syn3_clk", };
0434
0435 static const char *gen_synth0_1_parents[] = { "vco1div4_clk", "vco3div2_clk",
0436 "pll3_clk", };
0437 static const char *gen_synth2_3_parents[] = { "vco1div4_clk", "vco2div2_clk",
0438 "pll2_clk", };
0439
0440 void __init spear1340_clk_init(void __iomem *misc_base)
0441 {
0442 struct clk *clk, *clk1;
0443
0444 clk = clk_register_fixed_rate(NULL, "osc_32k_clk", NULL, 0, 32000);
0445 clk_register_clkdev(clk, "osc_32k_clk", NULL);
0446
0447 clk = clk_register_fixed_rate(NULL, "osc_24m_clk", NULL, 0, 24000000);
0448 clk_register_clkdev(clk, "osc_24m_clk", NULL);
0449
0450 clk = clk_register_fixed_rate(NULL, "osc_25m_clk", NULL, 0, 25000000);
0451 clk_register_clkdev(clk, "osc_25m_clk", NULL);
0452
0453 clk = clk_register_fixed_rate(NULL, "gmii_pad_clk", NULL, 0, 125000000);
0454 clk_register_clkdev(clk, "gmii_pad_clk", NULL);
0455
0456 clk = clk_register_fixed_rate(NULL, "i2s_src_pad_clk", NULL, 0,
0457 12288000);
0458 clk_register_clkdev(clk, "i2s_src_pad_clk", NULL);
0459
0460
0461 clk = clk_register_gate(NULL, "rtc-spear", "osc_32k_clk", 0,
0462 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_RTC_CLK_ENB, 0,
0463 &_lock);
0464 clk_register_clkdev(clk, NULL, "e0580000.rtc");
0465
0466
0467
0468 clk = clk_register_mux(NULL, "vco1_mclk", vco_parents,
0469 ARRAY_SIZE(vco_parents), CLK_SET_RATE_NO_REPARENT,
0470 SPEAR1340_PLL_CFG, SPEAR1340_PLL1_CLK_SHIFT,
0471 SPEAR1340_PLL_CLK_MASK, 0, &_lock);
0472 clk_register_clkdev(clk, "vco1_mclk", NULL);
0473 clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "vco1_mclk", 0,
0474 SPEAR1340_PLL1_CTR, SPEAR1340_PLL1_FRQ, pll_rtbl,
0475 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
0476 clk_register_clkdev(clk, "vco1_clk", NULL);
0477 clk_register_clkdev(clk1, "pll1_clk", NULL);
0478
0479 clk = clk_register_mux(NULL, "vco2_mclk", vco_parents,
0480 ARRAY_SIZE(vco_parents), CLK_SET_RATE_NO_REPARENT,
0481 SPEAR1340_PLL_CFG, SPEAR1340_PLL2_CLK_SHIFT,
0482 SPEAR1340_PLL_CLK_MASK, 0, &_lock);
0483 clk_register_clkdev(clk, "vco2_mclk", NULL);
0484 clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, "vco2_mclk", 0,
0485 SPEAR1340_PLL2_CTR, SPEAR1340_PLL2_FRQ, pll_rtbl,
0486 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
0487 clk_register_clkdev(clk, "vco2_clk", NULL);
0488 clk_register_clkdev(clk1, "pll2_clk", NULL);
0489
0490 clk = clk_register_mux(NULL, "vco3_mclk", vco_parents,
0491 ARRAY_SIZE(vco_parents), CLK_SET_RATE_NO_REPARENT,
0492 SPEAR1340_PLL_CFG, SPEAR1340_PLL3_CLK_SHIFT,
0493 SPEAR1340_PLL_CLK_MASK, 0, &_lock);
0494 clk_register_clkdev(clk, "vco3_mclk", NULL);
0495 clk = clk_register_vco_pll("vco3_clk", "pll3_clk", NULL, "vco3_mclk", 0,
0496 SPEAR1340_PLL3_CTR, SPEAR1340_PLL3_FRQ, pll_rtbl,
0497 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
0498 clk_register_clkdev(clk, "vco3_clk", NULL);
0499 clk_register_clkdev(clk1, "pll3_clk", NULL);
0500
0501 clk = clk_register_vco_pll("vco4_clk", "pll4_clk", NULL, "osc_24m_clk",
0502 0, SPEAR1340_PLL4_CTR, SPEAR1340_PLL4_FRQ, pll4_rtbl,
0503 ARRAY_SIZE(pll4_rtbl), &_lock, &clk1, NULL);
0504 clk_register_clkdev(clk, "vco4_clk", NULL);
0505 clk_register_clkdev(clk1, "pll4_clk", NULL);
0506
0507 clk = clk_register_fixed_rate(NULL, "pll5_clk", "osc_24m_clk", 0,
0508 48000000);
0509 clk_register_clkdev(clk, "pll5_clk", NULL);
0510
0511 clk = clk_register_fixed_rate(NULL, "pll6_clk", "osc_25m_clk", 0,
0512 25000000);
0513 clk_register_clkdev(clk, "pll6_clk", NULL);
0514
0515
0516 clk = clk_register_fixed_factor(NULL, "vco1div2_clk", "vco1_clk", 0, 1,
0517 2);
0518 clk_register_clkdev(clk, "vco1div2_clk", NULL);
0519
0520 clk = clk_register_fixed_factor(NULL, "vco1div4_clk", "vco1_clk", 0, 1,
0521 4);
0522 clk_register_clkdev(clk, "vco1div4_clk", NULL);
0523
0524 clk = clk_register_fixed_factor(NULL, "vco2div2_clk", "vco2_clk", 0, 1,
0525 2);
0526 clk_register_clkdev(clk, "vco2div2_clk", NULL);
0527
0528 clk = clk_register_fixed_factor(NULL, "vco3div2_clk", "vco3_clk", 0, 1,
0529 2);
0530 clk_register_clkdev(clk, "vco3div2_clk", NULL);
0531
0532
0533 clk_register_fixed_factor(NULL, "thermal_clk", "osc_24m_clk", 0, 1,
0534 128);
0535 clk = clk_register_gate(NULL, "thermal_gclk", "thermal_clk", 0,
0536 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_THSENS_CLK_ENB, 0,
0537 &_lock);
0538 clk_register_clkdev(clk, NULL, "e07008c4.thermal");
0539
0540
0541 clk = clk_register_fixed_factor(NULL, "ddr_clk", "pll4_clk", 0, 1,
0542 1);
0543 clk_register_clkdev(clk, "ddr_clk", NULL);
0544
0545
0546 clk = clk_register_frac("sys_syn_clk", "vco1div2_clk", 0,
0547 SPEAR1340_SYS_CLK_SYNT, sys_synth_rtbl,
0548 ARRAY_SIZE(sys_synth_rtbl), &_lock);
0549 clk_register_clkdev(clk, "sys_syn_clk", NULL);
0550
0551 clk = clk_register_frac("amba_syn_clk", "vco1div2_clk", 0,
0552 SPEAR1340_AMBA_CLK_SYNT, amba_synth_rtbl,
0553 ARRAY_SIZE(amba_synth_rtbl), &_lock);
0554 clk_register_clkdev(clk, "amba_syn_clk", NULL);
0555
0556 clk = clk_register_mux(NULL, "sys_mclk", sys_parents,
0557 ARRAY_SIZE(sys_parents), CLK_SET_RATE_NO_REPARENT,
0558 SPEAR1340_SYS_CLK_CTRL, SPEAR1340_SCLK_SRC_SEL_SHIFT,
0559 SPEAR1340_SCLK_SRC_SEL_MASK, 0, &_lock);
0560 clk_register_clkdev(clk, "sys_mclk", NULL);
0561
0562 clk = clk_register_fixed_factor(NULL, "cpu_clk", "sys_mclk", 0, 1,
0563 2);
0564 clk_register_clkdev(clk, "cpu_clk", NULL);
0565
0566 clk = clk_register_fixed_factor(NULL, "cpu_div3_clk", "cpu_clk", 0, 1,
0567 3);
0568 clk_register_clkdev(clk, "cpu_div3_clk", NULL);
0569
0570 clk = clk_register_fixed_factor(NULL, "wdt_clk", "cpu_clk", 0, 1,
0571 2);
0572 clk_register_clkdev(clk, NULL, "ec800620.wdt");
0573
0574 clk = clk_register_fixed_factor(NULL, "smp_twd_clk", "cpu_clk", 0, 1,
0575 2);
0576 clk_register_clkdev(clk, NULL, "smp_twd");
0577
0578 clk = clk_register_mux(NULL, "ahb_clk", ahb_parents,
0579 ARRAY_SIZE(ahb_parents), CLK_SET_RATE_NO_REPARENT,
0580 SPEAR1340_SYS_CLK_CTRL, SPEAR1340_HCLK_SRC_SEL_SHIFT,
0581 SPEAR1340_HCLK_SRC_SEL_MASK, 0, &_lock);
0582 clk_register_clkdev(clk, "ahb_clk", NULL);
0583
0584 clk = clk_register_fixed_factor(NULL, "apb_clk", "ahb_clk", 0, 1,
0585 2);
0586 clk_register_clkdev(clk, "apb_clk", NULL);
0587
0588
0589 clk = clk_register_mux(NULL, "gpt0_mclk", gpt_parents,
0590 ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
0591 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GPT0_CLK_SHIFT,
0592 SPEAR1340_GPT_CLK_MASK, 0, &_lock);
0593 clk_register_clkdev(clk, "gpt0_mclk", NULL);
0594 clk = clk_register_gate(NULL, "gpt0_clk", "gpt0_mclk", 0,
0595 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPT0_CLK_ENB, 0,
0596 &_lock);
0597 clk_register_clkdev(clk, NULL, "gpt0");
0598
0599 clk = clk_register_mux(NULL, "gpt1_mclk", gpt_parents,
0600 ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
0601 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GPT1_CLK_SHIFT,
0602 SPEAR1340_GPT_CLK_MASK, 0, &_lock);
0603 clk_register_clkdev(clk, "gpt1_mclk", NULL);
0604 clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mclk", 0,
0605 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPT1_CLK_ENB, 0,
0606 &_lock);
0607 clk_register_clkdev(clk, NULL, "gpt1");
0608
0609 clk = clk_register_mux(NULL, "gpt2_mclk", gpt_parents,
0610 ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
0611 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GPT2_CLK_SHIFT,
0612 SPEAR1340_GPT_CLK_MASK, 0, &_lock);
0613 clk_register_clkdev(clk, "gpt2_mclk", NULL);
0614 clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mclk", 0,
0615 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_GPT2_CLK_ENB, 0,
0616 &_lock);
0617 clk_register_clkdev(clk, NULL, "gpt2");
0618
0619 clk = clk_register_mux(NULL, "gpt3_mclk", gpt_parents,
0620 ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
0621 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GPT3_CLK_SHIFT,
0622 SPEAR1340_GPT_CLK_MASK, 0, &_lock);
0623 clk_register_clkdev(clk, "gpt3_mclk", NULL);
0624 clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mclk", 0,
0625 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_GPT3_CLK_ENB, 0,
0626 &_lock);
0627 clk_register_clkdev(clk, NULL, "gpt3");
0628
0629
0630 clk = clk_register_aux("uart0_syn_clk", "uart0_syn_gclk",
0631 "vco1div2_clk", 0, SPEAR1340_UART0_CLK_SYNT, NULL,
0632 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
0633 clk_register_clkdev(clk, "uart0_syn_clk", NULL);
0634 clk_register_clkdev(clk1, "uart0_syn_gclk", NULL);
0635
0636 clk = clk_register_mux(NULL, "uart0_mclk", uart0_parents,
0637 ARRAY_SIZE(uart0_parents),
0638 CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
0639 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_UART0_CLK_SHIFT,
0640 SPEAR1340_UART_CLK_MASK, 0, &_lock);
0641 clk_register_clkdev(clk, "uart0_mclk", NULL);
0642
0643 clk = clk_register_gate(NULL, "uart0_clk", "uart0_mclk",
0644 CLK_SET_RATE_PARENT, SPEAR1340_PERIP1_CLK_ENB,
0645 SPEAR1340_UART0_CLK_ENB, 0, &_lock);
0646 clk_register_clkdev(clk, NULL, "e0000000.serial");
0647
0648 clk = clk_register_aux("uart1_syn_clk", "uart1_syn_gclk",
0649 "vco1div2_clk", 0, SPEAR1340_UART1_CLK_SYNT, NULL,
0650 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
0651 clk_register_clkdev(clk, "uart1_syn_clk", NULL);
0652 clk_register_clkdev(clk1, "uart1_syn_gclk", NULL);
0653
0654 clk = clk_register_mux(NULL, "uart1_mclk", uart1_parents,
0655 ARRAY_SIZE(uart1_parents), CLK_SET_RATE_NO_REPARENT,
0656 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_UART1_CLK_SHIFT,
0657 SPEAR1340_UART_CLK_MASK, 0, &_lock);
0658 clk_register_clkdev(clk, "uart1_mclk", NULL);
0659
0660 clk = clk_register_gate(NULL, "uart1_clk", "uart1_mclk", 0,
0661 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_UART1_CLK_ENB, 0,
0662 &_lock);
0663 clk_register_clkdev(clk, NULL, "b4100000.serial");
0664
0665 clk = clk_register_aux("sdhci_syn_clk", "sdhci_syn_gclk",
0666 "vco1div2_clk", 0, SPEAR1340_SDHCI_CLK_SYNT, NULL,
0667 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
0668 clk_register_clkdev(clk, "sdhci_syn_clk", NULL);
0669 clk_register_clkdev(clk1, "sdhci_syn_gclk", NULL);
0670
0671 clk = clk_register_gate(NULL, "sdhci_clk", "sdhci_syn_gclk",
0672 CLK_SET_RATE_PARENT, SPEAR1340_PERIP1_CLK_ENB,
0673 SPEAR1340_SDHCI_CLK_ENB, 0, &_lock);
0674 clk_register_clkdev(clk, NULL, "b3000000.sdhci");
0675
0676 clk = clk_register_aux("cfxd_syn_clk", "cfxd_syn_gclk", "vco1div2_clk",
0677 0, SPEAR1340_CFXD_CLK_SYNT, NULL, aux_rtbl,
0678 ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
0679 clk_register_clkdev(clk, "cfxd_syn_clk", NULL);
0680 clk_register_clkdev(clk1, "cfxd_syn_gclk", NULL);
0681
0682 clk = clk_register_gate(NULL, "cfxd_clk", "cfxd_syn_gclk",
0683 CLK_SET_RATE_PARENT, SPEAR1340_PERIP1_CLK_ENB,
0684 SPEAR1340_CFXD_CLK_ENB, 0, &_lock);
0685 clk_register_clkdev(clk, NULL, "b2800000.cf");
0686 clk_register_clkdev(clk, NULL, "arasan_xd");
0687
0688 clk = clk_register_aux("c3_syn_clk", "c3_syn_gclk", "vco1div2_clk", 0,
0689 SPEAR1340_C3_CLK_SYNT, NULL, aux_rtbl,
0690 ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
0691 clk_register_clkdev(clk, "c3_syn_clk", NULL);
0692 clk_register_clkdev(clk1, "c3_syn_gclk", NULL);
0693
0694 clk = clk_register_mux(NULL, "c3_mclk", c3_parents,
0695 ARRAY_SIZE(c3_parents),
0696 CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
0697 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_C3_CLK_SHIFT,
0698 SPEAR1340_C3_CLK_MASK, 0, &_lock);
0699 clk_register_clkdev(clk, "c3_mclk", NULL);
0700
0701 clk = clk_register_gate(NULL, "c3_clk", "c3_mclk", CLK_SET_RATE_PARENT,
0702 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_C3_CLK_ENB, 0,
0703 &_lock);
0704 clk_register_clkdev(clk, NULL, "e1800000.c3");
0705
0706
0707 clk = clk_register_mux(NULL, "phy_input_mclk", gmac_phy_input_parents,
0708 ARRAY_SIZE(gmac_phy_input_parents),
0709 CLK_SET_RATE_NO_REPARENT, SPEAR1340_GMAC_CLK_CFG,
0710 SPEAR1340_GMAC_PHY_INPUT_CLK_SHIFT,
0711 SPEAR1340_GMAC_PHY_INPUT_CLK_MASK, 0, &_lock);
0712 clk_register_clkdev(clk, "phy_input_mclk", NULL);
0713
0714 clk = clk_register_aux("phy_syn_clk", "phy_syn_gclk", "phy_input_mclk",
0715 0, SPEAR1340_GMAC_CLK_SYNT, NULL, gmac_rtbl,
0716 ARRAY_SIZE(gmac_rtbl), &_lock, &clk1);
0717 clk_register_clkdev(clk, "phy_syn_clk", NULL);
0718 clk_register_clkdev(clk1, "phy_syn_gclk", NULL);
0719
0720 clk = clk_register_mux(NULL, "phy_mclk", gmac_phy_parents,
0721 ARRAY_SIZE(gmac_phy_parents), CLK_SET_RATE_NO_REPARENT,
0722 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GMAC_PHY_CLK_SHIFT,
0723 SPEAR1340_GMAC_PHY_CLK_MASK, 0, &_lock);
0724 clk_register_clkdev(clk, "stmmacphy.0", NULL);
0725
0726
0727 clk = clk_register_mux(NULL, "clcd_syn_mclk", clcd_synth_parents,
0728 ARRAY_SIZE(clcd_synth_parents),
0729 CLK_SET_RATE_NO_REPARENT, SPEAR1340_CLCD_CLK_SYNT,
0730 SPEAR1340_CLCD_SYNT_CLK_SHIFT,
0731 SPEAR1340_CLCD_SYNT_CLK_MASK, 0, &_lock);
0732 clk_register_clkdev(clk, "clcd_syn_mclk", NULL);
0733
0734 clk = clk_register_frac("clcd_syn_clk", "clcd_syn_mclk", 0,
0735 SPEAR1340_CLCD_CLK_SYNT, clcd_rtbl,
0736 ARRAY_SIZE(clcd_rtbl), &_lock);
0737 clk_register_clkdev(clk, "clcd_syn_clk", NULL);
0738
0739 clk = clk_register_mux(NULL, "clcd_pixel_mclk", clcd_pixel_parents,
0740 ARRAY_SIZE(clcd_pixel_parents),
0741 CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
0742 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_CLCD_CLK_SHIFT,
0743 SPEAR1340_CLCD_CLK_MASK, 0, &_lock);
0744 clk_register_clkdev(clk, "clcd_pixel_mclk", NULL);
0745
0746 clk = clk_register_gate(NULL, "clcd_clk", "clcd_pixel_mclk", 0,
0747 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_CLCD_CLK_ENB, 0,
0748 &_lock);
0749 clk_register_clkdev(clk, NULL, "e1000000.clcd");
0750
0751
0752 clk = clk_register_mux(NULL, "i2s_src_mclk", i2s_src_parents,
0753 ARRAY_SIZE(i2s_src_parents), CLK_SET_RATE_NO_REPARENT,
0754 SPEAR1340_I2S_CLK_CFG, SPEAR1340_I2S_SRC_CLK_SHIFT,
0755 SPEAR1340_I2S_SRC_CLK_MASK, 0, &_lock);
0756 clk_register_clkdev(clk, "i2s_src_mclk", NULL);
0757
0758 clk = clk_register_aux("i2s_prs1_clk", NULL, "i2s_src_mclk",
0759 CLK_SET_RATE_PARENT, SPEAR1340_I2S_CLK_CFG,
0760 &i2s_prs1_masks, i2s_prs1_rtbl,
0761 ARRAY_SIZE(i2s_prs1_rtbl), &_lock, NULL);
0762 clk_register_clkdev(clk, "i2s_prs1_clk", NULL);
0763
0764 clk = clk_register_mux(NULL, "i2s_ref_mclk", i2s_ref_parents,
0765 ARRAY_SIZE(i2s_ref_parents),
0766 CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
0767 SPEAR1340_I2S_CLK_CFG, SPEAR1340_I2S_REF_SHIFT,
0768 SPEAR1340_I2S_REF_SEL_MASK, 0, &_lock);
0769 clk_register_clkdev(clk, "i2s_ref_mclk", NULL);
0770
0771 clk = clk_register_gate(NULL, "i2s_ref_pad_clk", "i2s_ref_mclk", 0,
0772 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_I2S_REF_PAD_CLK_ENB,
0773 0, &_lock);
0774 clk_register_clkdev(clk, "i2s_ref_pad_clk", NULL);
0775
0776 clk = clk_register_aux("i2s_sclk_clk", "i2s_sclk_gclk", "i2s_ref_mclk",
0777 0, SPEAR1340_I2S_CLK_CFG, &i2s_sclk_masks,
0778 i2s_sclk_rtbl, ARRAY_SIZE(i2s_sclk_rtbl), &_lock,
0779 &clk1);
0780 clk_register_clkdev(clk, "i2s_sclk_clk", NULL);
0781 clk_register_clkdev(clk1, "i2s_sclk_gclk", NULL);
0782
0783
0784 clk = clk_register_gate(NULL, "i2c0_clk", "ahb_clk", 0,
0785 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_I2C0_CLK_ENB, 0,
0786 &_lock);
0787 clk_register_clkdev(clk, NULL, "e0280000.i2c");
0788
0789 clk = clk_register_gate(NULL, "i2c1_clk", "ahb_clk", 0,
0790 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_I2C1_CLK_ENB, 0,
0791 &_lock);
0792 clk_register_clkdev(clk, NULL, "b4000000.i2c");
0793
0794 clk = clk_register_gate(NULL, "dma_clk", "ahb_clk", 0,
0795 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_DMA_CLK_ENB, 0,
0796 &_lock);
0797 clk_register_clkdev(clk, NULL, "ea800000.dma");
0798 clk_register_clkdev(clk, NULL, "eb000000.dma");
0799
0800 clk = clk_register_gate(NULL, "gmac_clk", "ahb_clk", 0,
0801 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GMAC_CLK_ENB, 0,
0802 &_lock);
0803 clk_register_clkdev(clk, NULL, "e2000000.eth");
0804
0805 clk = clk_register_gate(NULL, "fsmc_clk", "ahb_clk", 0,
0806 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_FSMC_CLK_ENB, 0,
0807 &_lock);
0808 clk_register_clkdev(clk, NULL, "b0000000.flash");
0809
0810 clk = clk_register_gate(NULL, "smi_clk", "ahb_clk", 0,
0811 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_SMI_CLK_ENB, 0,
0812 &_lock);
0813 clk_register_clkdev(clk, NULL, "ea000000.flash");
0814
0815 clk = clk_register_gate(NULL, "usbh0_clk", "ahb_clk", 0,
0816 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_UHC0_CLK_ENB, 0,
0817 &_lock);
0818 clk_register_clkdev(clk, NULL, "e4000000.ohci");
0819 clk_register_clkdev(clk, NULL, "e4800000.ehci");
0820
0821 clk = clk_register_gate(NULL, "usbh1_clk", "ahb_clk", 0,
0822 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_UHC1_CLK_ENB, 0,
0823 &_lock);
0824 clk_register_clkdev(clk, NULL, "e5000000.ohci");
0825 clk_register_clkdev(clk, NULL, "e5800000.ehci");
0826
0827 clk = clk_register_gate(NULL, "uoc_clk", "ahb_clk", 0,
0828 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_UOC_CLK_ENB, 0,
0829 &_lock);
0830 clk_register_clkdev(clk, NULL, "e3800000.otg");
0831
0832 clk = clk_register_gate(NULL, "pcie_sata_clk", "ahb_clk", 0,
0833 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_PCIE_SATA_CLK_ENB,
0834 0, &_lock);
0835 clk_register_clkdev(clk, NULL, "b1000000.pcie");
0836 clk_register_clkdev(clk, NULL, "b1000000.ahci");
0837
0838 clk = clk_register_gate(NULL, "sysram0_clk", "ahb_clk", 0,
0839 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_SYSRAM0_CLK_ENB, 0,
0840 &_lock);
0841 clk_register_clkdev(clk, "sysram0_clk", NULL);
0842
0843 clk = clk_register_gate(NULL, "sysram1_clk", "ahb_clk", 0,
0844 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_SYSRAM1_CLK_ENB, 0,
0845 &_lock);
0846 clk_register_clkdev(clk, "sysram1_clk", NULL);
0847
0848 clk = clk_register_aux("adc_syn_clk", "adc_syn_gclk", "ahb_clk",
0849 0, SPEAR1340_ADC_CLK_SYNT, NULL, adc_rtbl,
0850 ARRAY_SIZE(adc_rtbl), &_lock, &clk1);
0851 clk_register_clkdev(clk, "adc_syn_clk", NULL);
0852 clk_register_clkdev(clk1, "adc_syn_gclk", NULL);
0853
0854 clk = clk_register_gate(NULL, "adc_clk", "adc_syn_gclk",
0855 CLK_SET_RATE_PARENT, SPEAR1340_PERIP1_CLK_ENB,
0856 SPEAR1340_ADC_CLK_ENB, 0, &_lock);
0857 clk_register_clkdev(clk, NULL, "e0080000.adc");
0858
0859
0860 clk = clk_register_gate(NULL, "ssp_clk", "apb_clk", 0,
0861 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_SSP_CLK_ENB, 0,
0862 &_lock);
0863 clk_register_clkdev(clk, NULL, "e0100000.spi");
0864
0865 clk = clk_register_gate(NULL, "gpio0_clk", "apb_clk", 0,
0866 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPIO0_CLK_ENB, 0,
0867 &_lock);
0868 clk_register_clkdev(clk, NULL, "e0600000.gpio");
0869
0870 clk = clk_register_gate(NULL, "gpio1_clk", "apb_clk", 0,
0871 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPIO1_CLK_ENB, 0,
0872 &_lock);
0873 clk_register_clkdev(clk, NULL, "e0680000.gpio");
0874
0875 clk = clk_register_gate(NULL, "i2s_play_clk", "apb_clk", 0,
0876 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_I2S_PLAY_CLK_ENB, 0,
0877 &_lock);
0878 clk_register_clkdev(clk, NULL, "b2400000.i2s-play");
0879
0880 clk = clk_register_gate(NULL, "i2s_rec_clk", "apb_clk", 0,
0881 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_I2S_REC_CLK_ENB, 0,
0882 &_lock);
0883 clk_register_clkdev(clk, NULL, "b2000000.i2s-rec");
0884
0885 clk = clk_register_gate(NULL, "kbd_clk", "apb_clk", 0,
0886 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_KBD_CLK_ENB, 0,
0887 &_lock);
0888 clk_register_clkdev(clk, NULL, "e0300000.kbd");
0889
0890
0891 clk = clk_register_mux(NULL, "gen_syn0_1_mclk", gen_synth0_1_parents,
0892 ARRAY_SIZE(gen_synth0_1_parents),
0893 CLK_SET_RATE_NO_REPARENT, SPEAR1340_PLL_CFG,
0894 SPEAR1340_GEN_SYNT0_1_CLK_SHIFT,
0895 SPEAR1340_GEN_SYNT_CLK_MASK, 0, &_lock);
0896 clk_register_clkdev(clk, "gen_syn0_1_mclk", NULL);
0897
0898 clk = clk_register_mux(NULL, "gen_syn2_3_mclk", gen_synth2_3_parents,
0899 ARRAY_SIZE(gen_synth2_3_parents),
0900 CLK_SET_RATE_NO_REPARENT, SPEAR1340_PLL_CFG,
0901 SPEAR1340_GEN_SYNT2_3_CLK_SHIFT,
0902 SPEAR1340_GEN_SYNT_CLK_MASK, 0, &_lock);
0903 clk_register_clkdev(clk, "gen_syn2_3_mclk", NULL);
0904
0905 clk = clk_register_frac("gen_syn0_clk", "gen_syn0_1_mclk", 0,
0906 SPEAR1340_GEN_CLK_SYNT0, gen_rtbl, ARRAY_SIZE(gen_rtbl),
0907 &_lock);
0908 clk_register_clkdev(clk, "gen_syn0_clk", NULL);
0909
0910 clk = clk_register_frac("gen_syn1_clk", "gen_syn0_1_mclk", 0,
0911 SPEAR1340_GEN_CLK_SYNT1, gen_rtbl, ARRAY_SIZE(gen_rtbl),
0912 &_lock);
0913 clk_register_clkdev(clk, "gen_syn1_clk", NULL);
0914
0915 clk = clk_register_frac("gen_syn2_clk", "gen_syn2_3_mclk", 0,
0916 SPEAR1340_GEN_CLK_SYNT2, gen_rtbl, ARRAY_SIZE(gen_rtbl),
0917 &_lock);
0918 clk_register_clkdev(clk, "gen_syn2_clk", NULL);
0919
0920 clk = clk_register_frac("gen_syn3_clk", "gen_syn2_3_mclk", 0,
0921 SPEAR1340_GEN_CLK_SYNT3, gen_rtbl, ARRAY_SIZE(gen_rtbl),
0922 &_lock);
0923 clk_register_clkdev(clk, "gen_syn3_clk", NULL);
0924
0925 clk = clk_register_gate(NULL, "mali_clk", "gen_syn3_clk",
0926 CLK_SET_RATE_PARENT, SPEAR1340_PERIP3_CLK_ENB,
0927 SPEAR1340_MALI_CLK_ENB, 0, &_lock);
0928 clk_register_clkdev(clk, NULL, "mali");
0929
0930 clk = clk_register_gate(NULL, "cec0_clk", "ahb_clk", 0,
0931 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CEC0_CLK_ENB, 0,
0932 &_lock);
0933 clk_register_clkdev(clk, NULL, "spear_cec.0");
0934
0935 clk = clk_register_gate(NULL, "cec1_clk", "ahb_clk", 0,
0936 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CEC1_CLK_ENB, 0,
0937 &_lock);
0938 clk_register_clkdev(clk, NULL, "spear_cec.1");
0939
0940 clk = clk_register_mux(NULL, "spdif_out_mclk", spdif_out_parents,
0941 ARRAY_SIZE(spdif_out_parents),
0942 CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
0943 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_SPDIF_OUT_CLK_SHIFT,
0944 SPEAR1340_SPDIF_CLK_MASK, 0, &_lock);
0945 clk_register_clkdev(clk, "spdif_out_mclk", NULL);
0946
0947 clk = clk_register_gate(NULL, "spdif_out_clk", "spdif_out_mclk",
0948 CLK_SET_RATE_PARENT, SPEAR1340_PERIP3_CLK_ENB,
0949 SPEAR1340_SPDIF_OUT_CLK_ENB, 0, &_lock);
0950 clk_register_clkdev(clk, NULL, "d0000000.spdif-out");
0951
0952 clk = clk_register_mux(NULL, "spdif_in_mclk", spdif_in_parents,
0953 ARRAY_SIZE(spdif_in_parents),
0954 CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
0955 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_SPDIF_IN_CLK_SHIFT,
0956 SPEAR1340_SPDIF_CLK_MASK, 0, &_lock);
0957 clk_register_clkdev(clk, "spdif_in_mclk", NULL);
0958
0959 clk = clk_register_gate(NULL, "spdif_in_clk", "spdif_in_mclk",
0960 CLK_SET_RATE_PARENT, SPEAR1340_PERIP3_CLK_ENB,
0961 SPEAR1340_SPDIF_IN_CLK_ENB, 0, &_lock);
0962 clk_register_clkdev(clk, NULL, "d0100000.spdif-in");
0963
0964 clk = clk_register_gate(NULL, "acp_clk", "ahb_clk", 0,
0965 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_ACP_CLK_ENB, 0,
0966 &_lock);
0967 clk_register_clkdev(clk, NULL, "acp_clk");
0968
0969 clk = clk_register_gate(NULL, "plgpio_clk", "ahb_clk", 0,
0970 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_PLGPIO_CLK_ENB, 0,
0971 &_lock);
0972 clk_register_clkdev(clk, NULL, "e2800000.gpio");
0973
0974 clk = clk_register_gate(NULL, "video_dec_clk", "ahb_clk", 0,
0975 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_DEC_CLK_ENB,
0976 0, &_lock);
0977 clk_register_clkdev(clk, NULL, "video_dec");
0978
0979 clk = clk_register_gate(NULL, "video_enc_clk", "ahb_clk", 0,
0980 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_ENC_CLK_ENB,
0981 0, &_lock);
0982 clk_register_clkdev(clk, NULL, "video_enc");
0983
0984 clk = clk_register_gate(NULL, "video_in_clk", "ahb_clk", 0,
0985 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_IN_CLK_ENB, 0,
0986 &_lock);
0987 clk_register_clkdev(clk, NULL, "spear_vip");
0988
0989 clk = clk_register_gate(NULL, "cam0_clk", "ahb_clk", 0,
0990 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM0_CLK_ENB, 0,
0991 &_lock);
0992 clk_register_clkdev(clk, NULL, "d0200000.cam0");
0993
0994 clk = clk_register_gate(NULL, "cam1_clk", "ahb_clk", 0,
0995 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM1_CLK_ENB, 0,
0996 &_lock);
0997 clk_register_clkdev(clk, NULL, "d0300000.cam1");
0998
0999 clk = clk_register_gate(NULL, "cam2_clk", "ahb_clk", 0,
1000 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM2_CLK_ENB, 0,
1001 &_lock);
1002 clk_register_clkdev(clk, NULL, "d0400000.cam2");
1003
1004 clk = clk_register_gate(NULL, "cam3_clk", "ahb_clk", 0,
1005 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM3_CLK_ENB, 0,
1006 &_lock);
1007 clk_register_clkdev(clk, NULL, "d0500000.cam3");
1008
1009 clk = clk_register_gate(NULL, "pwm_clk", "ahb_clk", 0,
1010 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_PWM_CLK_ENB, 0,
1011 &_lock);
1012 clk_register_clkdev(clk, NULL, "e0180000.pwm");
1013 }