1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun * arch/arm/mach-spear13xx/spear1310_clock.c
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * SPEAr1310 machine clock framework source file
5*4882a593Smuzhiyun *
6*4882a593Smuzhiyun * Copyright (C) 2012 ST Microelectronics
7*4882a593Smuzhiyun * Viresh Kumar <vireshk@kernel.org>
8*4882a593Smuzhiyun *
9*4882a593Smuzhiyun * This file is licensed under the terms of the GNU General Public
10*4882a593Smuzhiyun * License version 2. This program is licensed "as is" without any
11*4882a593Smuzhiyun * warranty of any kind, whether express or implied.
12*4882a593Smuzhiyun */
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun #include <linux/clkdev.h>
15*4882a593Smuzhiyun #include <linux/err.h>
16*4882a593Smuzhiyun #include <linux/io.h>
17*4882a593Smuzhiyun #include <linux/of_platform.h>
18*4882a593Smuzhiyun #include <linux/spinlock_types.h>
19*4882a593Smuzhiyun #include "clk.h"
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun /* PLL related registers and bit values */
22*4882a593Smuzhiyun #define SPEAR1310_PLL_CFG (misc_base + 0x210)
23*4882a593Smuzhiyun /* PLL_CFG bit values */
24*4882a593Smuzhiyun #define SPEAR1310_CLCD_SYNT_CLK_MASK 1
25*4882a593Smuzhiyun #define SPEAR1310_CLCD_SYNT_CLK_SHIFT 31
26*4882a593Smuzhiyun #define SPEAR1310_RAS_SYNT2_3_CLK_MASK 2
27*4882a593Smuzhiyun #define SPEAR1310_RAS_SYNT2_3_CLK_SHIFT 29
28*4882a593Smuzhiyun #define SPEAR1310_RAS_SYNT_CLK_MASK 2
29*4882a593Smuzhiyun #define SPEAR1310_RAS_SYNT0_1_CLK_SHIFT 27
30*4882a593Smuzhiyun #define SPEAR1310_PLL_CLK_MASK 2
31*4882a593Smuzhiyun #define SPEAR1310_PLL3_CLK_SHIFT 24
32*4882a593Smuzhiyun #define SPEAR1310_PLL2_CLK_SHIFT 22
33*4882a593Smuzhiyun #define SPEAR1310_PLL1_CLK_SHIFT 20
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun #define SPEAR1310_PLL1_CTR (misc_base + 0x214)
36*4882a593Smuzhiyun #define SPEAR1310_PLL1_FRQ (misc_base + 0x218)
37*4882a593Smuzhiyun #define SPEAR1310_PLL2_CTR (misc_base + 0x220)
38*4882a593Smuzhiyun #define SPEAR1310_PLL2_FRQ (misc_base + 0x224)
39*4882a593Smuzhiyun #define SPEAR1310_PLL3_CTR (misc_base + 0x22C)
40*4882a593Smuzhiyun #define SPEAR1310_PLL3_FRQ (misc_base + 0x230)
41*4882a593Smuzhiyun #define SPEAR1310_PLL4_CTR (misc_base + 0x238)
42*4882a593Smuzhiyun #define SPEAR1310_PLL4_FRQ (misc_base + 0x23C)
43*4882a593Smuzhiyun #define SPEAR1310_PERIP_CLK_CFG (misc_base + 0x244)
44*4882a593Smuzhiyun /* PERIP_CLK_CFG bit values */
45*4882a593Smuzhiyun #define SPEAR1310_GPT_OSC24_VAL 0
46*4882a593Smuzhiyun #define SPEAR1310_GPT_APB_VAL 1
47*4882a593Smuzhiyun #define SPEAR1310_GPT_CLK_MASK 1
48*4882a593Smuzhiyun #define SPEAR1310_GPT3_CLK_SHIFT 11
49*4882a593Smuzhiyun #define SPEAR1310_GPT2_CLK_SHIFT 10
50*4882a593Smuzhiyun #define SPEAR1310_GPT1_CLK_SHIFT 9
51*4882a593Smuzhiyun #define SPEAR1310_GPT0_CLK_SHIFT 8
52*4882a593Smuzhiyun #define SPEAR1310_UART_CLK_PLL5_VAL 0
53*4882a593Smuzhiyun #define SPEAR1310_UART_CLK_OSC24_VAL 1
54*4882a593Smuzhiyun #define SPEAR1310_UART_CLK_SYNT_VAL 2
55*4882a593Smuzhiyun #define SPEAR1310_UART_CLK_MASK 2
56*4882a593Smuzhiyun #define SPEAR1310_UART_CLK_SHIFT 4
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun #define SPEAR1310_AUX_CLK_PLL5_VAL 0
59*4882a593Smuzhiyun #define SPEAR1310_AUX_CLK_SYNT_VAL 1
60*4882a593Smuzhiyun #define SPEAR1310_CLCD_CLK_MASK 2
61*4882a593Smuzhiyun #define SPEAR1310_CLCD_CLK_SHIFT 2
62*4882a593Smuzhiyun #define SPEAR1310_C3_CLK_MASK 1
63*4882a593Smuzhiyun #define SPEAR1310_C3_CLK_SHIFT 1
64*4882a593Smuzhiyun
65*4882a593Smuzhiyun #define SPEAR1310_GMAC_CLK_CFG (misc_base + 0x248)
66*4882a593Smuzhiyun #define SPEAR1310_GMAC_PHY_IF_SEL_MASK 3
67*4882a593Smuzhiyun #define SPEAR1310_GMAC_PHY_IF_SEL_SHIFT 4
68*4882a593Smuzhiyun #define SPEAR1310_GMAC_PHY_CLK_MASK 1
69*4882a593Smuzhiyun #define SPEAR1310_GMAC_PHY_CLK_SHIFT 3
70*4882a593Smuzhiyun #define SPEAR1310_GMAC_PHY_INPUT_CLK_MASK 2
71*4882a593Smuzhiyun #define SPEAR1310_GMAC_PHY_INPUT_CLK_SHIFT 1
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun #define SPEAR1310_I2S_CLK_CFG (misc_base + 0x24C)
74*4882a593Smuzhiyun /* I2S_CLK_CFG register mask */
75*4882a593Smuzhiyun #define SPEAR1310_I2S_SCLK_X_MASK 0x1F
76*4882a593Smuzhiyun #define SPEAR1310_I2S_SCLK_X_SHIFT 27
77*4882a593Smuzhiyun #define SPEAR1310_I2S_SCLK_Y_MASK 0x1F
78*4882a593Smuzhiyun #define SPEAR1310_I2S_SCLK_Y_SHIFT 22
79*4882a593Smuzhiyun #define SPEAR1310_I2S_SCLK_EQ_SEL_SHIFT 21
80*4882a593Smuzhiyun #define SPEAR1310_I2S_SCLK_SYNTH_ENB 20
81*4882a593Smuzhiyun #define SPEAR1310_I2S_PRS1_CLK_X_MASK 0xFF
82*4882a593Smuzhiyun #define SPEAR1310_I2S_PRS1_CLK_X_SHIFT 12
83*4882a593Smuzhiyun #define SPEAR1310_I2S_PRS1_CLK_Y_MASK 0xFF
84*4882a593Smuzhiyun #define SPEAR1310_I2S_PRS1_CLK_Y_SHIFT 4
85*4882a593Smuzhiyun #define SPEAR1310_I2S_PRS1_EQ_SEL_SHIFT 3
86*4882a593Smuzhiyun #define SPEAR1310_I2S_REF_SEL_MASK 1
87*4882a593Smuzhiyun #define SPEAR1310_I2S_REF_SHIFT 2
88*4882a593Smuzhiyun #define SPEAR1310_I2S_SRC_CLK_MASK 2
89*4882a593Smuzhiyun #define SPEAR1310_I2S_SRC_CLK_SHIFT 0
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun #define SPEAR1310_C3_CLK_SYNT (misc_base + 0x250)
92*4882a593Smuzhiyun #define SPEAR1310_UART_CLK_SYNT (misc_base + 0x254)
93*4882a593Smuzhiyun #define SPEAR1310_GMAC_CLK_SYNT (misc_base + 0x258)
94*4882a593Smuzhiyun #define SPEAR1310_SDHCI_CLK_SYNT (misc_base + 0x25C)
95*4882a593Smuzhiyun #define SPEAR1310_CFXD_CLK_SYNT (misc_base + 0x260)
96*4882a593Smuzhiyun #define SPEAR1310_ADC_CLK_SYNT (misc_base + 0x264)
97*4882a593Smuzhiyun #define SPEAR1310_AMBA_CLK_SYNT (misc_base + 0x268)
98*4882a593Smuzhiyun #define SPEAR1310_CLCD_CLK_SYNT (misc_base + 0x270)
99*4882a593Smuzhiyun #define SPEAR1310_RAS_CLK_SYNT0 (misc_base + 0x280)
100*4882a593Smuzhiyun #define SPEAR1310_RAS_CLK_SYNT1 (misc_base + 0x288)
101*4882a593Smuzhiyun #define SPEAR1310_RAS_CLK_SYNT2 (misc_base + 0x290)
102*4882a593Smuzhiyun #define SPEAR1310_RAS_CLK_SYNT3 (misc_base + 0x298)
103*4882a593Smuzhiyun /* Check Fractional synthesizer reg masks */
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun #define SPEAR1310_PERIP1_CLK_ENB (misc_base + 0x300)
106*4882a593Smuzhiyun /* PERIP1_CLK_ENB register masks */
107*4882a593Smuzhiyun #define SPEAR1310_RTC_CLK_ENB 31
108*4882a593Smuzhiyun #define SPEAR1310_ADC_CLK_ENB 30
109*4882a593Smuzhiyun #define SPEAR1310_C3_CLK_ENB 29
110*4882a593Smuzhiyun #define SPEAR1310_JPEG_CLK_ENB 28
111*4882a593Smuzhiyun #define SPEAR1310_CLCD_CLK_ENB 27
112*4882a593Smuzhiyun #define SPEAR1310_DMA_CLK_ENB 25
113*4882a593Smuzhiyun #define SPEAR1310_GPIO1_CLK_ENB 24
114*4882a593Smuzhiyun #define SPEAR1310_GPIO0_CLK_ENB 23
115*4882a593Smuzhiyun #define SPEAR1310_GPT1_CLK_ENB 22
116*4882a593Smuzhiyun #define SPEAR1310_GPT0_CLK_ENB 21
117*4882a593Smuzhiyun #define SPEAR1310_I2S0_CLK_ENB 20
118*4882a593Smuzhiyun #define SPEAR1310_I2S1_CLK_ENB 19
119*4882a593Smuzhiyun #define SPEAR1310_I2C0_CLK_ENB 18
120*4882a593Smuzhiyun #define SPEAR1310_SSP_CLK_ENB 17
121*4882a593Smuzhiyun #define SPEAR1310_UART_CLK_ENB 15
122*4882a593Smuzhiyun #define SPEAR1310_PCIE_SATA_2_CLK_ENB 14
123*4882a593Smuzhiyun #define SPEAR1310_PCIE_SATA_1_CLK_ENB 13
124*4882a593Smuzhiyun #define SPEAR1310_PCIE_SATA_0_CLK_ENB 12
125*4882a593Smuzhiyun #define SPEAR1310_UOC_CLK_ENB 11
126*4882a593Smuzhiyun #define SPEAR1310_UHC1_CLK_ENB 10
127*4882a593Smuzhiyun #define SPEAR1310_UHC0_CLK_ENB 9
128*4882a593Smuzhiyun #define SPEAR1310_GMAC_CLK_ENB 8
129*4882a593Smuzhiyun #define SPEAR1310_CFXD_CLK_ENB 7
130*4882a593Smuzhiyun #define SPEAR1310_SDHCI_CLK_ENB 6
131*4882a593Smuzhiyun #define SPEAR1310_SMI_CLK_ENB 5
132*4882a593Smuzhiyun #define SPEAR1310_FSMC_CLK_ENB 4
133*4882a593Smuzhiyun #define SPEAR1310_SYSRAM0_CLK_ENB 3
134*4882a593Smuzhiyun #define SPEAR1310_SYSRAM1_CLK_ENB 2
135*4882a593Smuzhiyun #define SPEAR1310_SYSROM_CLK_ENB 1
136*4882a593Smuzhiyun #define SPEAR1310_BUS_CLK_ENB 0
137*4882a593Smuzhiyun
138*4882a593Smuzhiyun #define SPEAR1310_PERIP2_CLK_ENB (misc_base + 0x304)
139*4882a593Smuzhiyun /* PERIP2_CLK_ENB register masks */
140*4882a593Smuzhiyun #define SPEAR1310_THSENS_CLK_ENB 8
141*4882a593Smuzhiyun #define SPEAR1310_I2S_REF_PAD_CLK_ENB 7
142*4882a593Smuzhiyun #define SPEAR1310_ACP_CLK_ENB 6
143*4882a593Smuzhiyun #define SPEAR1310_GPT3_CLK_ENB 5
144*4882a593Smuzhiyun #define SPEAR1310_GPT2_CLK_ENB 4
145*4882a593Smuzhiyun #define SPEAR1310_KBD_CLK_ENB 3
146*4882a593Smuzhiyun #define SPEAR1310_CPU_DBG_CLK_ENB 2
147*4882a593Smuzhiyun #define SPEAR1310_DDR_CORE_CLK_ENB 1
148*4882a593Smuzhiyun #define SPEAR1310_DDR_CTRL_CLK_ENB 0
149*4882a593Smuzhiyun
150*4882a593Smuzhiyun #define SPEAR1310_RAS_CLK_ENB (misc_base + 0x310)
151*4882a593Smuzhiyun /* RAS_CLK_ENB register masks */
152*4882a593Smuzhiyun #define SPEAR1310_SYNT3_CLK_ENB 17
153*4882a593Smuzhiyun #define SPEAR1310_SYNT2_CLK_ENB 16
154*4882a593Smuzhiyun #define SPEAR1310_SYNT1_CLK_ENB 15
155*4882a593Smuzhiyun #define SPEAR1310_SYNT0_CLK_ENB 14
156*4882a593Smuzhiyun #define SPEAR1310_PCLK3_CLK_ENB 13
157*4882a593Smuzhiyun #define SPEAR1310_PCLK2_CLK_ENB 12
158*4882a593Smuzhiyun #define SPEAR1310_PCLK1_CLK_ENB 11
159*4882a593Smuzhiyun #define SPEAR1310_PCLK0_CLK_ENB 10
160*4882a593Smuzhiyun #define SPEAR1310_PLL3_CLK_ENB 9
161*4882a593Smuzhiyun #define SPEAR1310_PLL2_CLK_ENB 8
162*4882a593Smuzhiyun #define SPEAR1310_C125M_PAD_CLK_ENB 7
163*4882a593Smuzhiyun #define SPEAR1310_C30M_CLK_ENB 6
164*4882a593Smuzhiyun #define SPEAR1310_C48M_CLK_ENB 5
165*4882a593Smuzhiyun #define SPEAR1310_OSC_25M_CLK_ENB 4
166*4882a593Smuzhiyun #define SPEAR1310_OSC_32K_CLK_ENB 3
167*4882a593Smuzhiyun #define SPEAR1310_OSC_24M_CLK_ENB 2
168*4882a593Smuzhiyun #define SPEAR1310_PCLK_CLK_ENB 1
169*4882a593Smuzhiyun #define SPEAR1310_ACLK_CLK_ENB 0
170*4882a593Smuzhiyun
171*4882a593Smuzhiyun /* RAS Area Control Register */
172*4882a593Smuzhiyun #define SPEAR1310_RAS_CTRL_REG0 (ras_base + 0x000)
173*4882a593Smuzhiyun #define SPEAR1310_SSP1_CLK_MASK 3
174*4882a593Smuzhiyun #define SPEAR1310_SSP1_CLK_SHIFT 26
175*4882a593Smuzhiyun #define SPEAR1310_TDM_CLK_MASK 1
176*4882a593Smuzhiyun #define SPEAR1310_TDM2_CLK_SHIFT 24
177*4882a593Smuzhiyun #define SPEAR1310_TDM1_CLK_SHIFT 23
178*4882a593Smuzhiyun #define SPEAR1310_I2C_CLK_MASK 1
179*4882a593Smuzhiyun #define SPEAR1310_I2C7_CLK_SHIFT 22
180*4882a593Smuzhiyun #define SPEAR1310_I2C6_CLK_SHIFT 21
181*4882a593Smuzhiyun #define SPEAR1310_I2C5_CLK_SHIFT 20
182*4882a593Smuzhiyun #define SPEAR1310_I2C4_CLK_SHIFT 19
183*4882a593Smuzhiyun #define SPEAR1310_I2C3_CLK_SHIFT 18
184*4882a593Smuzhiyun #define SPEAR1310_I2C2_CLK_SHIFT 17
185*4882a593Smuzhiyun #define SPEAR1310_I2C1_CLK_SHIFT 16
186*4882a593Smuzhiyun #define SPEAR1310_GPT64_CLK_MASK 1
187*4882a593Smuzhiyun #define SPEAR1310_GPT64_CLK_SHIFT 15
188*4882a593Smuzhiyun #define SPEAR1310_RAS_UART_CLK_MASK 1
189*4882a593Smuzhiyun #define SPEAR1310_UART5_CLK_SHIFT 14
190*4882a593Smuzhiyun #define SPEAR1310_UART4_CLK_SHIFT 13
191*4882a593Smuzhiyun #define SPEAR1310_UART3_CLK_SHIFT 12
192*4882a593Smuzhiyun #define SPEAR1310_UART2_CLK_SHIFT 11
193*4882a593Smuzhiyun #define SPEAR1310_UART1_CLK_SHIFT 10
194*4882a593Smuzhiyun #define SPEAR1310_PCI_CLK_MASK 1
195*4882a593Smuzhiyun #define SPEAR1310_PCI_CLK_SHIFT 0
196*4882a593Smuzhiyun
197*4882a593Smuzhiyun #define SPEAR1310_RAS_CTRL_REG1 (ras_base + 0x004)
198*4882a593Smuzhiyun #define SPEAR1310_PHY_CLK_MASK 0x3
199*4882a593Smuzhiyun #define SPEAR1310_RMII_PHY_CLK_SHIFT 0
200*4882a593Smuzhiyun #define SPEAR1310_SMII_RGMII_PHY_CLK_SHIFT 2
201*4882a593Smuzhiyun
202*4882a593Smuzhiyun #define SPEAR1310_RAS_SW_CLK_CTRL (ras_base + 0x0148)
203*4882a593Smuzhiyun #define SPEAR1310_CAN1_CLK_ENB 25
204*4882a593Smuzhiyun #define SPEAR1310_CAN0_CLK_ENB 24
205*4882a593Smuzhiyun #define SPEAR1310_GPT64_CLK_ENB 23
206*4882a593Smuzhiyun #define SPEAR1310_SSP1_CLK_ENB 22
207*4882a593Smuzhiyun #define SPEAR1310_I2C7_CLK_ENB 21
208*4882a593Smuzhiyun #define SPEAR1310_I2C6_CLK_ENB 20
209*4882a593Smuzhiyun #define SPEAR1310_I2C5_CLK_ENB 19
210*4882a593Smuzhiyun #define SPEAR1310_I2C4_CLK_ENB 18
211*4882a593Smuzhiyun #define SPEAR1310_I2C3_CLK_ENB 17
212*4882a593Smuzhiyun #define SPEAR1310_I2C2_CLK_ENB 16
213*4882a593Smuzhiyun #define SPEAR1310_I2C1_CLK_ENB 15
214*4882a593Smuzhiyun #define SPEAR1310_UART5_CLK_ENB 14
215*4882a593Smuzhiyun #define SPEAR1310_UART4_CLK_ENB 13
216*4882a593Smuzhiyun #define SPEAR1310_UART3_CLK_ENB 12
217*4882a593Smuzhiyun #define SPEAR1310_UART2_CLK_ENB 11
218*4882a593Smuzhiyun #define SPEAR1310_UART1_CLK_ENB 10
219*4882a593Smuzhiyun #define SPEAR1310_RS485_1_CLK_ENB 9
220*4882a593Smuzhiyun #define SPEAR1310_RS485_0_CLK_ENB 8
221*4882a593Smuzhiyun #define SPEAR1310_TDM2_CLK_ENB 7
222*4882a593Smuzhiyun #define SPEAR1310_TDM1_CLK_ENB 6
223*4882a593Smuzhiyun #define SPEAR1310_PCI_CLK_ENB 5
224*4882a593Smuzhiyun #define SPEAR1310_GMII_CLK_ENB 4
225*4882a593Smuzhiyun #define SPEAR1310_MII2_CLK_ENB 3
226*4882a593Smuzhiyun #define SPEAR1310_MII1_CLK_ENB 2
227*4882a593Smuzhiyun #define SPEAR1310_MII0_CLK_ENB 1
228*4882a593Smuzhiyun #define SPEAR1310_ESRAM_CLK_ENB 0
229*4882a593Smuzhiyun
230*4882a593Smuzhiyun static DEFINE_SPINLOCK(_lock);
231*4882a593Smuzhiyun
232*4882a593Smuzhiyun /* pll rate configuration table, in ascending order of rates */
233*4882a593Smuzhiyun static struct pll_rate_tbl pll_rtbl[] = {
234*4882a593Smuzhiyun /* PCLK 24MHz */
235*4882a593Smuzhiyun {.mode = 0, .m = 0x83, .n = 0x04, .p = 0x5}, /* vco 1572, pll 49.125 MHz */
236*4882a593Smuzhiyun {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x3}, /* vco 1000, pll 125 MHz */
237*4882a593Smuzhiyun {.mode = 0, .m = 0x64, .n = 0x06, .p = 0x1}, /* vco 800, pll 400 MHz */
238*4882a593Smuzhiyun {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x1}, /* vco 1000, pll 500 MHz */
239*4882a593Smuzhiyun {.mode = 0, .m = 0xA6, .n = 0x06, .p = 0x1}, /* vco 1328, pll 664 MHz */
240*4882a593Smuzhiyun {.mode = 0, .m = 0xC8, .n = 0x06, .p = 0x1}, /* vco 1600, pll 800 MHz */
241*4882a593Smuzhiyun {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x0}, /* vco 1, pll 1 GHz */
242*4882a593Smuzhiyun };
243*4882a593Smuzhiyun
244*4882a593Smuzhiyun /* vco-pll4 rate configuration table, in ascending order of rates */
245*4882a593Smuzhiyun static struct pll_rate_tbl pll4_rtbl[] = {
246*4882a593Smuzhiyun {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x2}, /* vco 1000, pll 250 MHz */
247*4882a593Smuzhiyun {.mode = 0, .m = 0xA6, .n = 0x06, .p = 0x2}, /* vco 1328, pll 332 MHz */
248*4882a593Smuzhiyun {.mode = 0, .m = 0xC8, .n = 0x06, .p = 0x2}, /* vco 1600, pll 400 MHz */
249*4882a593Smuzhiyun {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x0}, /* vco 1, pll 1 GHz */
250*4882a593Smuzhiyun };
251*4882a593Smuzhiyun
252*4882a593Smuzhiyun /* aux rate configuration table, in ascending order of rates */
253*4882a593Smuzhiyun static struct aux_rate_tbl aux_rtbl[] = {
254*4882a593Smuzhiyun /* For VCO1div2 = 500 MHz */
255*4882a593Smuzhiyun {.xscale = 10, .yscale = 204, .eq = 0}, /* 12.29 MHz */
256*4882a593Smuzhiyun {.xscale = 4, .yscale = 21, .eq = 0}, /* 48 MHz */
257*4882a593Smuzhiyun {.xscale = 2, .yscale = 6, .eq = 0}, /* 83 MHz */
258*4882a593Smuzhiyun {.xscale = 2, .yscale = 4, .eq = 0}, /* 125 MHz */
259*4882a593Smuzhiyun {.xscale = 1, .yscale = 3, .eq = 1}, /* 166 MHz */
260*4882a593Smuzhiyun {.xscale = 1, .yscale = 2, .eq = 1}, /* 250 MHz */
261*4882a593Smuzhiyun };
262*4882a593Smuzhiyun
263*4882a593Smuzhiyun /* gmac rate configuration table, in ascending order of rates */
264*4882a593Smuzhiyun static struct aux_rate_tbl gmac_rtbl[] = {
265*4882a593Smuzhiyun /* For gmac phy input clk */
266*4882a593Smuzhiyun {.xscale = 2, .yscale = 6, .eq = 0}, /* divided by 6 */
267*4882a593Smuzhiyun {.xscale = 2, .yscale = 4, .eq = 0}, /* divided by 4 */
268*4882a593Smuzhiyun {.xscale = 1, .yscale = 3, .eq = 1}, /* divided by 3 */
269*4882a593Smuzhiyun {.xscale = 1, .yscale = 2, .eq = 1}, /* divided by 2 */
270*4882a593Smuzhiyun };
271*4882a593Smuzhiyun
272*4882a593Smuzhiyun /* clcd rate configuration table, in ascending order of rates */
273*4882a593Smuzhiyun static struct frac_rate_tbl clcd_rtbl[] = {
274*4882a593Smuzhiyun {.div = 0x14000}, /* 25 Mhz , for vc01div4 = 250 MHz*/
275*4882a593Smuzhiyun {.div = 0x1284B}, /* 27 Mhz , for vc01div4 = 250 MHz*/
276*4882a593Smuzhiyun {.div = 0x0D8D3}, /* 58 Mhz , for vco1div4 = 393 MHz */
277*4882a593Smuzhiyun {.div = 0x0B72C}, /* 58 Mhz , for vco1div4 = 332 MHz */
278*4882a593Smuzhiyun {.div = 0x089EE}, /* 58 Mhz , for vc01div4 = 250 MHz*/
279*4882a593Smuzhiyun {.div = 0x06f1C}, /* 72 Mhz , for vc01div4 = 250 MHz*/
280*4882a593Smuzhiyun {.div = 0x06E58}, /* 58 Mhz , for vco1div4 = 200 MHz */
281*4882a593Smuzhiyun {.div = 0x06c1B}, /* 74 Mhz , for vc01div4 = 250 MHz*/
282*4882a593Smuzhiyun {.div = 0x04A12}, /* 108 Mhz , for vc01div4 = 250 MHz*/
283*4882a593Smuzhiyun {.div = 0x0378E}, /* 144 Mhz , for vc01div4 = 250 MHz*/
284*4882a593Smuzhiyun };
285*4882a593Smuzhiyun
286*4882a593Smuzhiyun /* i2s prescaler1 masks */
287*4882a593Smuzhiyun static const struct aux_clk_masks i2s_prs1_masks = {
288*4882a593Smuzhiyun .eq_sel_mask = AUX_EQ_SEL_MASK,
289*4882a593Smuzhiyun .eq_sel_shift = SPEAR1310_I2S_PRS1_EQ_SEL_SHIFT,
290*4882a593Smuzhiyun .eq1_mask = AUX_EQ1_SEL,
291*4882a593Smuzhiyun .eq2_mask = AUX_EQ2_SEL,
292*4882a593Smuzhiyun .xscale_sel_mask = SPEAR1310_I2S_PRS1_CLK_X_MASK,
293*4882a593Smuzhiyun .xscale_sel_shift = SPEAR1310_I2S_PRS1_CLK_X_SHIFT,
294*4882a593Smuzhiyun .yscale_sel_mask = SPEAR1310_I2S_PRS1_CLK_Y_MASK,
295*4882a593Smuzhiyun .yscale_sel_shift = SPEAR1310_I2S_PRS1_CLK_Y_SHIFT,
296*4882a593Smuzhiyun };
297*4882a593Smuzhiyun
298*4882a593Smuzhiyun /* i2s sclk (bit clock) syynthesizers masks */
299*4882a593Smuzhiyun static struct aux_clk_masks i2s_sclk_masks = {
300*4882a593Smuzhiyun .eq_sel_mask = AUX_EQ_SEL_MASK,
301*4882a593Smuzhiyun .eq_sel_shift = SPEAR1310_I2S_SCLK_EQ_SEL_SHIFT,
302*4882a593Smuzhiyun .eq1_mask = AUX_EQ1_SEL,
303*4882a593Smuzhiyun .eq2_mask = AUX_EQ2_SEL,
304*4882a593Smuzhiyun .xscale_sel_mask = SPEAR1310_I2S_SCLK_X_MASK,
305*4882a593Smuzhiyun .xscale_sel_shift = SPEAR1310_I2S_SCLK_X_SHIFT,
306*4882a593Smuzhiyun .yscale_sel_mask = SPEAR1310_I2S_SCLK_Y_MASK,
307*4882a593Smuzhiyun .yscale_sel_shift = SPEAR1310_I2S_SCLK_Y_SHIFT,
308*4882a593Smuzhiyun .enable_bit = SPEAR1310_I2S_SCLK_SYNTH_ENB,
309*4882a593Smuzhiyun };
310*4882a593Smuzhiyun
311*4882a593Smuzhiyun /* i2s prs1 aux rate configuration table, in ascending order of rates */
312*4882a593Smuzhiyun static struct aux_rate_tbl i2s_prs1_rtbl[] = {
313*4882a593Smuzhiyun /* For parent clk = 49.152 MHz */
314*4882a593Smuzhiyun {.xscale = 1, .yscale = 12, .eq = 0}, /* 2.048 MHz, smp freq = 8Khz */
315*4882a593Smuzhiyun {.xscale = 11, .yscale = 96, .eq = 0}, /* 2.816 MHz, smp freq = 11Khz */
316*4882a593Smuzhiyun {.xscale = 1, .yscale = 6, .eq = 0}, /* 4.096 MHz, smp freq = 16Khz */
317*4882a593Smuzhiyun {.xscale = 11, .yscale = 48, .eq = 0}, /* 5.632 MHz, smp freq = 22Khz */
318*4882a593Smuzhiyun
319*4882a593Smuzhiyun /*
320*4882a593Smuzhiyun * with parent clk = 49.152, freq gen is 8.192 MHz, smp freq = 32Khz
321*4882a593Smuzhiyun * with parent clk = 12.288, freq gen is 2.048 MHz, smp freq = 8Khz
322*4882a593Smuzhiyun */
323*4882a593Smuzhiyun {.xscale = 1, .yscale = 3, .eq = 0},
324*4882a593Smuzhiyun
325*4882a593Smuzhiyun /* For parent clk = 49.152 MHz */
326*4882a593Smuzhiyun {.xscale = 17, .yscale = 37, .eq = 0}, /* 11.289 MHz, smp freq = 44Khz*/
327*4882a593Smuzhiyun
328*4882a593Smuzhiyun {.xscale = 1, .yscale = 2, .eq = 0}, /* 12.288 MHz */
329*4882a593Smuzhiyun };
330*4882a593Smuzhiyun
331*4882a593Smuzhiyun /* i2s sclk aux rate configuration table, in ascending order of rates */
332*4882a593Smuzhiyun static struct aux_rate_tbl i2s_sclk_rtbl[] = {
333*4882a593Smuzhiyun /* For i2s_ref_clk = 12.288MHz */
334*4882a593Smuzhiyun {.xscale = 1, .yscale = 4, .eq = 0}, /* 1.53 MHz */
335*4882a593Smuzhiyun {.xscale = 1, .yscale = 2, .eq = 0}, /* 3.07 Mhz */
336*4882a593Smuzhiyun };
337*4882a593Smuzhiyun
338*4882a593Smuzhiyun /* adc rate configuration table, in ascending order of rates */
339*4882a593Smuzhiyun /* possible adc range is 2.5 MHz to 20 MHz. */
340*4882a593Smuzhiyun static struct aux_rate_tbl adc_rtbl[] = {
341*4882a593Smuzhiyun /* For ahb = 166.67 MHz */
342*4882a593Smuzhiyun {.xscale = 1, .yscale = 31, .eq = 0}, /* 2.68 MHz */
343*4882a593Smuzhiyun {.xscale = 2, .yscale = 21, .eq = 0}, /* 7.94 MHz */
344*4882a593Smuzhiyun {.xscale = 4, .yscale = 21, .eq = 0}, /* 15.87 MHz */
345*4882a593Smuzhiyun {.xscale = 10, .yscale = 42, .eq = 0}, /* 19.84 MHz */
346*4882a593Smuzhiyun };
347*4882a593Smuzhiyun
348*4882a593Smuzhiyun /* General synth rate configuration table, in ascending order of rates */
349*4882a593Smuzhiyun static struct frac_rate_tbl gen_rtbl[] = {
350*4882a593Smuzhiyun /* For vco1div4 = 250 MHz */
351*4882a593Smuzhiyun {.div = 0x14000}, /* 25 MHz */
352*4882a593Smuzhiyun {.div = 0x0A000}, /* 50 MHz */
353*4882a593Smuzhiyun {.div = 0x05000}, /* 100 MHz */
354*4882a593Smuzhiyun {.div = 0x02000}, /* 250 MHz */
355*4882a593Smuzhiyun };
356*4882a593Smuzhiyun
357*4882a593Smuzhiyun /* clock parents */
358*4882a593Smuzhiyun static const char *vco_parents[] = { "osc_24m_clk", "osc_25m_clk", };
359*4882a593Smuzhiyun static const char *gpt_parents[] = { "osc_24m_clk", "apb_clk", };
360*4882a593Smuzhiyun static const char *uart0_parents[] = { "pll5_clk", "uart_syn_gclk", };
361*4882a593Smuzhiyun static const char *c3_parents[] = { "pll5_clk", "c3_syn_gclk", };
362*4882a593Smuzhiyun static const char *gmac_phy_input_parents[] = { "gmii_pad_clk", "pll2_clk",
363*4882a593Smuzhiyun "osc_25m_clk", };
364*4882a593Smuzhiyun static const char *gmac_phy_parents[] = { "phy_input_mclk", "phy_syn_gclk", };
365*4882a593Smuzhiyun static const char *clcd_synth_parents[] = { "vco1div4_clk", "pll2_clk", };
366*4882a593Smuzhiyun static const char *clcd_pixel_parents[] = { "pll5_clk", "clcd_syn_clk", };
367*4882a593Smuzhiyun static const char *i2s_src_parents[] = { "vco1div2_clk", "none", "pll3_clk",
368*4882a593Smuzhiyun "i2s_src_pad_clk", };
369*4882a593Smuzhiyun static const char *i2s_ref_parents[] = { "i2s_src_mclk", "i2s_prs1_clk", };
370*4882a593Smuzhiyun static const char *gen_synth0_1_parents[] = { "vco1div4_clk", "vco3div2_clk",
371*4882a593Smuzhiyun "pll3_clk", };
372*4882a593Smuzhiyun static const char *gen_synth2_3_parents[] = { "vco1div4_clk", "vco3div2_clk",
373*4882a593Smuzhiyun "pll2_clk", };
374*4882a593Smuzhiyun static const char *rmii_phy_parents[] = { "ras_tx50_clk", "none",
375*4882a593Smuzhiyun "ras_pll2_clk", "ras_syn0_clk", };
376*4882a593Smuzhiyun static const char *smii_rgmii_phy_parents[] = { "none", "ras_tx125_clk",
377*4882a593Smuzhiyun "ras_pll2_clk", "ras_syn0_clk", };
378*4882a593Smuzhiyun static const char *uart_parents[] = { "ras_apb_clk", "gen_syn3_clk", };
379*4882a593Smuzhiyun static const char *i2c_parents[] = { "ras_apb_clk", "gen_syn1_clk", };
380*4882a593Smuzhiyun static const char *ssp1_parents[] = { "ras_apb_clk", "gen_syn1_clk",
381*4882a593Smuzhiyun "ras_plclk0_clk", };
382*4882a593Smuzhiyun static const char *pci_parents[] = { "ras_pll3_clk", "gen_syn2_clk", };
383*4882a593Smuzhiyun static const char *tdm_parents[] = { "ras_pll3_clk", "gen_syn1_clk", };
384*4882a593Smuzhiyun
spear1310_clk_init(void __iomem * misc_base,void __iomem * ras_base)385*4882a593Smuzhiyun void __init spear1310_clk_init(void __iomem *misc_base, void __iomem *ras_base)
386*4882a593Smuzhiyun {
387*4882a593Smuzhiyun struct clk *clk, *clk1;
388*4882a593Smuzhiyun
389*4882a593Smuzhiyun clk = clk_register_fixed_rate(NULL, "osc_32k_clk", NULL, 0, 32000);
390*4882a593Smuzhiyun clk_register_clkdev(clk, "osc_32k_clk", NULL);
391*4882a593Smuzhiyun
392*4882a593Smuzhiyun clk = clk_register_fixed_rate(NULL, "osc_24m_clk", NULL, 0, 24000000);
393*4882a593Smuzhiyun clk_register_clkdev(clk, "osc_24m_clk", NULL);
394*4882a593Smuzhiyun
395*4882a593Smuzhiyun clk = clk_register_fixed_rate(NULL, "osc_25m_clk", NULL, 0, 25000000);
396*4882a593Smuzhiyun clk_register_clkdev(clk, "osc_25m_clk", NULL);
397*4882a593Smuzhiyun
398*4882a593Smuzhiyun clk = clk_register_fixed_rate(NULL, "gmii_pad_clk", NULL, 0, 125000000);
399*4882a593Smuzhiyun clk_register_clkdev(clk, "gmii_pad_clk", NULL);
400*4882a593Smuzhiyun
401*4882a593Smuzhiyun clk = clk_register_fixed_rate(NULL, "i2s_src_pad_clk", NULL, 0,
402*4882a593Smuzhiyun 12288000);
403*4882a593Smuzhiyun clk_register_clkdev(clk, "i2s_src_pad_clk", NULL);
404*4882a593Smuzhiyun
405*4882a593Smuzhiyun /* clock derived from 32 KHz osc clk */
406*4882a593Smuzhiyun clk = clk_register_gate(NULL, "rtc-spear", "osc_32k_clk", 0,
407*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_RTC_CLK_ENB, 0,
408*4882a593Smuzhiyun &_lock);
409*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e0580000.rtc");
410*4882a593Smuzhiyun
411*4882a593Smuzhiyun /* clock derived from 24 or 25 MHz osc clk */
412*4882a593Smuzhiyun /* vco-pll */
413*4882a593Smuzhiyun clk = clk_register_mux(NULL, "vco1_mclk", vco_parents,
414*4882a593Smuzhiyun ARRAY_SIZE(vco_parents), CLK_SET_RATE_NO_REPARENT,
415*4882a593Smuzhiyun SPEAR1310_PLL_CFG, SPEAR1310_PLL1_CLK_SHIFT,
416*4882a593Smuzhiyun SPEAR1310_PLL_CLK_MASK, 0, &_lock);
417*4882a593Smuzhiyun clk_register_clkdev(clk, "vco1_mclk", NULL);
418*4882a593Smuzhiyun clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "vco1_mclk",
419*4882a593Smuzhiyun 0, SPEAR1310_PLL1_CTR, SPEAR1310_PLL1_FRQ, pll_rtbl,
420*4882a593Smuzhiyun ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
421*4882a593Smuzhiyun clk_register_clkdev(clk, "vco1_clk", NULL);
422*4882a593Smuzhiyun clk_register_clkdev(clk1, "pll1_clk", NULL);
423*4882a593Smuzhiyun
424*4882a593Smuzhiyun clk = clk_register_mux(NULL, "vco2_mclk", vco_parents,
425*4882a593Smuzhiyun ARRAY_SIZE(vco_parents), CLK_SET_RATE_NO_REPARENT,
426*4882a593Smuzhiyun SPEAR1310_PLL_CFG, SPEAR1310_PLL2_CLK_SHIFT,
427*4882a593Smuzhiyun SPEAR1310_PLL_CLK_MASK, 0, &_lock);
428*4882a593Smuzhiyun clk_register_clkdev(clk, "vco2_mclk", NULL);
429*4882a593Smuzhiyun clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, "vco2_mclk",
430*4882a593Smuzhiyun 0, SPEAR1310_PLL2_CTR, SPEAR1310_PLL2_FRQ, pll_rtbl,
431*4882a593Smuzhiyun ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
432*4882a593Smuzhiyun clk_register_clkdev(clk, "vco2_clk", NULL);
433*4882a593Smuzhiyun clk_register_clkdev(clk1, "pll2_clk", NULL);
434*4882a593Smuzhiyun
435*4882a593Smuzhiyun clk = clk_register_mux(NULL, "vco3_mclk", vco_parents,
436*4882a593Smuzhiyun ARRAY_SIZE(vco_parents), CLK_SET_RATE_NO_REPARENT,
437*4882a593Smuzhiyun SPEAR1310_PLL_CFG, SPEAR1310_PLL3_CLK_SHIFT,
438*4882a593Smuzhiyun SPEAR1310_PLL_CLK_MASK, 0, &_lock);
439*4882a593Smuzhiyun clk_register_clkdev(clk, "vco3_mclk", NULL);
440*4882a593Smuzhiyun clk = clk_register_vco_pll("vco3_clk", "pll3_clk", NULL, "vco3_mclk",
441*4882a593Smuzhiyun 0, SPEAR1310_PLL3_CTR, SPEAR1310_PLL3_FRQ, pll_rtbl,
442*4882a593Smuzhiyun ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
443*4882a593Smuzhiyun clk_register_clkdev(clk, "vco3_clk", NULL);
444*4882a593Smuzhiyun clk_register_clkdev(clk1, "pll3_clk", NULL);
445*4882a593Smuzhiyun
446*4882a593Smuzhiyun clk = clk_register_vco_pll("vco4_clk", "pll4_clk", NULL, "osc_24m_clk",
447*4882a593Smuzhiyun 0, SPEAR1310_PLL4_CTR, SPEAR1310_PLL4_FRQ, pll4_rtbl,
448*4882a593Smuzhiyun ARRAY_SIZE(pll4_rtbl), &_lock, &clk1, NULL);
449*4882a593Smuzhiyun clk_register_clkdev(clk, "vco4_clk", NULL);
450*4882a593Smuzhiyun clk_register_clkdev(clk1, "pll4_clk", NULL);
451*4882a593Smuzhiyun
452*4882a593Smuzhiyun clk = clk_register_fixed_rate(NULL, "pll5_clk", "osc_24m_clk", 0,
453*4882a593Smuzhiyun 48000000);
454*4882a593Smuzhiyun clk_register_clkdev(clk, "pll5_clk", NULL);
455*4882a593Smuzhiyun
456*4882a593Smuzhiyun clk = clk_register_fixed_rate(NULL, "pll6_clk", "osc_25m_clk", 0,
457*4882a593Smuzhiyun 25000000);
458*4882a593Smuzhiyun clk_register_clkdev(clk, "pll6_clk", NULL);
459*4882a593Smuzhiyun
460*4882a593Smuzhiyun /* vco div n clocks */
461*4882a593Smuzhiyun clk = clk_register_fixed_factor(NULL, "vco1div2_clk", "vco1_clk", 0, 1,
462*4882a593Smuzhiyun 2);
463*4882a593Smuzhiyun clk_register_clkdev(clk, "vco1div2_clk", NULL);
464*4882a593Smuzhiyun
465*4882a593Smuzhiyun clk = clk_register_fixed_factor(NULL, "vco1div4_clk", "vco1_clk", 0, 1,
466*4882a593Smuzhiyun 4);
467*4882a593Smuzhiyun clk_register_clkdev(clk, "vco1div4_clk", NULL);
468*4882a593Smuzhiyun
469*4882a593Smuzhiyun clk = clk_register_fixed_factor(NULL, "vco2div2_clk", "vco2_clk", 0, 1,
470*4882a593Smuzhiyun 2);
471*4882a593Smuzhiyun clk_register_clkdev(clk, "vco2div2_clk", NULL);
472*4882a593Smuzhiyun
473*4882a593Smuzhiyun clk = clk_register_fixed_factor(NULL, "vco3div2_clk", "vco3_clk", 0, 1,
474*4882a593Smuzhiyun 2);
475*4882a593Smuzhiyun clk_register_clkdev(clk, "vco3div2_clk", NULL);
476*4882a593Smuzhiyun
477*4882a593Smuzhiyun /* peripherals */
478*4882a593Smuzhiyun clk_register_fixed_factor(NULL, "thermal_clk", "osc_24m_clk", 0, 1,
479*4882a593Smuzhiyun 128);
480*4882a593Smuzhiyun clk = clk_register_gate(NULL, "thermal_gclk", "thermal_clk", 0,
481*4882a593Smuzhiyun SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_THSENS_CLK_ENB, 0,
482*4882a593Smuzhiyun &_lock);
483*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "spear_thermal");
484*4882a593Smuzhiyun
485*4882a593Smuzhiyun /* clock derived from pll4 clk */
486*4882a593Smuzhiyun clk = clk_register_fixed_factor(NULL, "ddr_clk", "pll4_clk", 0, 1,
487*4882a593Smuzhiyun 1);
488*4882a593Smuzhiyun clk_register_clkdev(clk, "ddr_clk", NULL);
489*4882a593Smuzhiyun
490*4882a593Smuzhiyun /* clock derived from pll1 clk */
491*4882a593Smuzhiyun clk = clk_register_fixed_factor(NULL, "cpu_clk", "pll1_clk",
492*4882a593Smuzhiyun CLK_SET_RATE_PARENT, 1, 2);
493*4882a593Smuzhiyun clk_register_clkdev(clk, "cpu_clk", NULL);
494*4882a593Smuzhiyun
495*4882a593Smuzhiyun clk = clk_register_fixed_factor(NULL, "wdt_clk", "cpu_clk", 0, 1,
496*4882a593Smuzhiyun 2);
497*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "ec800620.wdt");
498*4882a593Smuzhiyun
499*4882a593Smuzhiyun clk = clk_register_fixed_factor(NULL, "smp_twd_clk", "cpu_clk", 0, 1,
500*4882a593Smuzhiyun 2);
501*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "smp_twd");
502*4882a593Smuzhiyun
503*4882a593Smuzhiyun clk = clk_register_fixed_factor(NULL, "ahb_clk", "pll1_clk", 0, 1,
504*4882a593Smuzhiyun 6);
505*4882a593Smuzhiyun clk_register_clkdev(clk, "ahb_clk", NULL);
506*4882a593Smuzhiyun
507*4882a593Smuzhiyun clk = clk_register_fixed_factor(NULL, "apb_clk", "pll1_clk", 0, 1,
508*4882a593Smuzhiyun 12);
509*4882a593Smuzhiyun clk_register_clkdev(clk, "apb_clk", NULL);
510*4882a593Smuzhiyun
511*4882a593Smuzhiyun /* gpt clocks */
512*4882a593Smuzhiyun clk = clk_register_mux(NULL, "gpt0_mclk", gpt_parents,
513*4882a593Smuzhiyun ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
514*4882a593Smuzhiyun SPEAR1310_PERIP_CLK_CFG, SPEAR1310_GPT0_CLK_SHIFT,
515*4882a593Smuzhiyun SPEAR1310_GPT_CLK_MASK, 0, &_lock);
516*4882a593Smuzhiyun clk_register_clkdev(clk, "gpt0_mclk", NULL);
517*4882a593Smuzhiyun clk = clk_register_gate(NULL, "gpt0_clk", "gpt0_mclk", 0,
518*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GPT0_CLK_ENB, 0,
519*4882a593Smuzhiyun &_lock);
520*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "gpt0");
521*4882a593Smuzhiyun
522*4882a593Smuzhiyun clk = clk_register_mux(NULL, "gpt1_mclk", gpt_parents,
523*4882a593Smuzhiyun ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
524*4882a593Smuzhiyun SPEAR1310_PERIP_CLK_CFG, SPEAR1310_GPT1_CLK_SHIFT,
525*4882a593Smuzhiyun SPEAR1310_GPT_CLK_MASK, 0, &_lock);
526*4882a593Smuzhiyun clk_register_clkdev(clk, "gpt1_mclk", NULL);
527*4882a593Smuzhiyun clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mclk", 0,
528*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GPT1_CLK_ENB, 0,
529*4882a593Smuzhiyun &_lock);
530*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "gpt1");
531*4882a593Smuzhiyun
532*4882a593Smuzhiyun clk = clk_register_mux(NULL, "gpt2_mclk", gpt_parents,
533*4882a593Smuzhiyun ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
534*4882a593Smuzhiyun SPEAR1310_PERIP_CLK_CFG, SPEAR1310_GPT2_CLK_SHIFT,
535*4882a593Smuzhiyun SPEAR1310_GPT_CLK_MASK, 0, &_lock);
536*4882a593Smuzhiyun clk_register_clkdev(clk, "gpt2_mclk", NULL);
537*4882a593Smuzhiyun clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mclk", 0,
538*4882a593Smuzhiyun SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_GPT2_CLK_ENB, 0,
539*4882a593Smuzhiyun &_lock);
540*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "gpt2");
541*4882a593Smuzhiyun
542*4882a593Smuzhiyun clk = clk_register_mux(NULL, "gpt3_mclk", gpt_parents,
543*4882a593Smuzhiyun ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
544*4882a593Smuzhiyun SPEAR1310_PERIP_CLK_CFG, SPEAR1310_GPT3_CLK_SHIFT,
545*4882a593Smuzhiyun SPEAR1310_GPT_CLK_MASK, 0, &_lock);
546*4882a593Smuzhiyun clk_register_clkdev(clk, "gpt3_mclk", NULL);
547*4882a593Smuzhiyun clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mclk", 0,
548*4882a593Smuzhiyun SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_GPT3_CLK_ENB, 0,
549*4882a593Smuzhiyun &_lock);
550*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "gpt3");
551*4882a593Smuzhiyun
552*4882a593Smuzhiyun /* others */
553*4882a593Smuzhiyun clk = clk_register_aux("uart_syn_clk", "uart_syn_gclk", "vco1div2_clk",
554*4882a593Smuzhiyun 0, SPEAR1310_UART_CLK_SYNT, NULL, aux_rtbl,
555*4882a593Smuzhiyun ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
556*4882a593Smuzhiyun clk_register_clkdev(clk, "uart_syn_clk", NULL);
557*4882a593Smuzhiyun clk_register_clkdev(clk1, "uart_syn_gclk", NULL);
558*4882a593Smuzhiyun
559*4882a593Smuzhiyun clk = clk_register_mux(NULL, "uart0_mclk", uart0_parents,
560*4882a593Smuzhiyun ARRAY_SIZE(uart0_parents),
561*4882a593Smuzhiyun CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
562*4882a593Smuzhiyun SPEAR1310_PERIP_CLK_CFG, SPEAR1310_UART_CLK_SHIFT,
563*4882a593Smuzhiyun SPEAR1310_UART_CLK_MASK, 0, &_lock);
564*4882a593Smuzhiyun clk_register_clkdev(clk, "uart0_mclk", NULL);
565*4882a593Smuzhiyun
566*4882a593Smuzhiyun clk = clk_register_gate(NULL, "uart0_clk", "uart0_mclk",
567*4882a593Smuzhiyun CLK_SET_RATE_PARENT, SPEAR1310_PERIP1_CLK_ENB,
568*4882a593Smuzhiyun SPEAR1310_UART_CLK_ENB, 0, &_lock);
569*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e0000000.serial");
570*4882a593Smuzhiyun
571*4882a593Smuzhiyun clk = clk_register_aux("sdhci_syn_clk", "sdhci_syn_gclk",
572*4882a593Smuzhiyun "vco1div2_clk", 0, SPEAR1310_SDHCI_CLK_SYNT, NULL,
573*4882a593Smuzhiyun aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
574*4882a593Smuzhiyun clk_register_clkdev(clk, "sdhci_syn_clk", NULL);
575*4882a593Smuzhiyun clk_register_clkdev(clk1, "sdhci_syn_gclk", NULL);
576*4882a593Smuzhiyun
577*4882a593Smuzhiyun clk = clk_register_gate(NULL, "sdhci_clk", "sdhci_syn_gclk",
578*4882a593Smuzhiyun CLK_SET_RATE_PARENT, SPEAR1310_PERIP1_CLK_ENB,
579*4882a593Smuzhiyun SPEAR1310_SDHCI_CLK_ENB, 0, &_lock);
580*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "b3000000.sdhci");
581*4882a593Smuzhiyun
582*4882a593Smuzhiyun clk = clk_register_aux("cfxd_syn_clk", "cfxd_syn_gclk", "vco1div2_clk",
583*4882a593Smuzhiyun 0, SPEAR1310_CFXD_CLK_SYNT, NULL, aux_rtbl,
584*4882a593Smuzhiyun ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
585*4882a593Smuzhiyun clk_register_clkdev(clk, "cfxd_syn_clk", NULL);
586*4882a593Smuzhiyun clk_register_clkdev(clk1, "cfxd_syn_gclk", NULL);
587*4882a593Smuzhiyun
588*4882a593Smuzhiyun clk = clk_register_gate(NULL, "cfxd_clk", "cfxd_syn_gclk",
589*4882a593Smuzhiyun CLK_SET_RATE_PARENT, SPEAR1310_PERIP1_CLK_ENB,
590*4882a593Smuzhiyun SPEAR1310_CFXD_CLK_ENB, 0, &_lock);
591*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "b2800000.cf");
592*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "arasan_xd");
593*4882a593Smuzhiyun
594*4882a593Smuzhiyun clk = clk_register_aux("c3_syn_clk", "c3_syn_gclk", "vco1div2_clk",
595*4882a593Smuzhiyun 0, SPEAR1310_C3_CLK_SYNT, NULL, aux_rtbl,
596*4882a593Smuzhiyun ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
597*4882a593Smuzhiyun clk_register_clkdev(clk, "c3_syn_clk", NULL);
598*4882a593Smuzhiyun clk_register_clkdev(clk1, "c3_syn_gclk", NULL);
599*4882a593Smuzhiyun
600*4882a593Smuzhiyun clk = clk_register_mux(NULL, "c3_mclk", c3_parents,
601*4882a593Smuzhiyun ARRAY_SIZE(c3_parents),
602*4882a593Smuzhiyun CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
603*4882a593Smuzhiyun SPEAR1310_PERIP_CLK_CFG, SPEAR1310_C3_CLK_SHIFT,
604*4882a593Smuzhiyun SPEAR1310_C3_CLK_MASK, 0, &_lock);
605*4882a593Smuzhiyun clk_register_clkdev(clk, "c3_mclk", NULL);
606*4882a593Smuzhiyun
607*4882a593Smuzhiyun clk = clk_register_gate(NULL, "c3_clk", "c3_mclk", 0,
608*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_C3_CLK_ENB, 0,
609*4882a593Smuzhiyun &_lock);
610*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "c3");
611*4882a593Smuzhiyun
612*4882a593Smuzhiyun /* gmac */
613*4882a593Smuzhiyun clk = clk_register_mux(NULL, "phy_input_mclk", gmac_phy_input_parents,
614*4882a593Smuzhiyun ARRAY_SIZE(gmac_phy_input_parents),
615*4882a593Smuzhiyun CLK_SET_RATE_NO_REPARENT, SPEAR1310_GMAC_CLK_CFG,
616*4882a593Smuzhiyun SPEAR1310_GMAC_PHY_INPUT_CLK_SHIFT,
617*4882a593Smuzhiyun SPEAR1310_GMAC_PHY_INPUT_CLK_MASK, 0, &_lock);
618*4882a593Smuzhiyun clk_register_clkdev(clk, "phy_input_mclk", NULL);
619*4882a593Smuzhiyun
620*4882a593Smuzhiyun clk = clk_register_aux("phy_syn_clk", "phy_syn_gclk", "phy_input_mclk",
621*4882a593Smuzhiyun 0, SPEAR1310_GMAC_CLK_SYNT, NULL, gmac_rtbl,
622*4882a593Smuzhiyun ARRAY_SIZE(gmac_rtbl), &_lock, &clk1);
623*4882a593Smuzhiyun clk_register_clkdev(clk, "phy_syn_clk", NULL);
624*4882a593Smuzhiyun clk_register_clkdev(clk1, "phy_syn_gclk", NULL);
625*4882a593Smuzhiyun
626*4882a593Smuzhiyun clk = clk_register_mux(NULL, "phy_mclk", gmac_phy_parents,
627*4882a593Smuzhiyun ARRAY_SIZE(gmac_phy_parents), CLK_SET_RATE_NO_REPARENT,
628*4882a593Smuzhiyun SPEAR1310_PERIP_CLK_CFG, SPEAR1310_GMAC_PHY_CLK_SHIFT,
629*4882a593Smuzhiyun SPEAR1310_GMAC_PHY_CLK_MASK, 0, &_lock);
630*4882a593Smuzhiyun clk_register_clkdev(clk, "stmmacphy.0", NULL);
631*4882a593Smuzhiyun
632*4882a593Smuzhiyun /* clcd */
633*4882a593Smuzhiyun clk = clk_register_mux(NULL, "clcd_syn_mclk", clcd_synth_parents,
634*4882a593Smuzhiyun ARRAY_SIZE(clcd_synth_parents),
635*4882a593Smuzhiyun CLK_SET_RATE_NO_REPARENT, SPEAR1310_CLCD_CLK_SYNT,
636*4882a593Smuzhiyun SPEAR1310_CLCD_SYNT_CLK_SHIFT,
637*4882a593Smuzhiyun SPEAR1310_CLCD_SYNT_CLK_MASK, 0, &_lock);
638*4882a593Smuzhiyun clk_register_clkdev(clk, "clcd_syn_mclk", NULL);
639*4882a593Smuzhiyun
640*4882a593Smuzhiyun clk = clk_register_frac("clcd_syn_clk", "clcd_syn_mclk", 0,
641*4882a593Smuzhiyun SPEAR1310_CLCD_CLK_SYNT, clcd_rtbl,
642*4882a593Smuzhiyun ARRAY_SIZE(clcd_rtbl), &_lock);
643*4882a593Smuzhiyun clk_register_clkdev(clk, "clcd_syn_clk", NULL);
644*4882a593Smuzhiyun
645*4882a593Smuzhiyun clk = clk_register_mux(NULL, "clcd_pixel_mclk", clcd_pixel_parents,
646*4882a593Smuzhiyun ARRAY_SIZE(clcd_pixel_parents),
647*4882a593Smuzhiyun CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
648*4882a593Smuzhiyun SPEAR1310_PERIP_CLK_CFG, SPEAR1310_CLCD_CLK_SHIFT,
649*4882a593Smuzhiyun SPEAR1310_CLCD_CLK_MASK, 0, &_lock);
650*4882a593Smuzhiyun clk_register_clkdev(clk, "clcd_pixel_mclk", NULL);
651*4882a593Smuzhiyun
652*4882a593Smuzhiyun clk = clk_register_gate(NULL, "clcd_clk", "clcd_pixel_mclk", 0,
653*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_CLCD_CLK_ENB, 0,
654*4882a593Smuzhiyun &_lock);
655*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e1000000.clcd");
656*4882a593Smuzhiyun
657*4882a593Smuzhiyun /* i2s */
658*4882a593Smuzhiyun clk = clk_register_mux(NULL, "i2s_src_mclk", i2s_src_parents,
659*4882a593Smuzhiyun ARRAY_SIZE(i2s_src_parents), CLK_SET_RATE_NO_REPARENT,
660*4882a593Smuzhiyun SPEAR1310_I2S_CLK_CFG, SPEAR1310_I2S_SRC_CLK_SHIFT,
661*4882a593Smuzhiyun SPEAR1310_I2S_SRC_CLK_MASK, 0, &_lock);
662*4882a593Smuzhiyun clk_register_clkdev(clk, "i2s_src_mclk", NULL);
663*4882a593Smuzhiyun
664*4882a593Smuzhiyun clk = clk_register_aux("i2s_prs1_clk", NULL, "i2s_src_mclk", 0,
665*4882a593Smuzhiyun SPEAR1310_I2S_CLK_CFG, &i2s_prs1_masks, i2s_prs1_rtbl,
666*4882a593Smuzhiyun ARRAY_SIZE(i2s_prs1_rtbl), &_lock, NULL);
667*4882a593Smuzhiyun clk_register_clkdev(clk, "i2s_prs1_clk", NULL);
668*4882a593Smuzhiyun
669*4882a593Smuzhiyun clk = clk_register_mux(NULL, "i2s_ref_mclk", i2s_ref_parents,
670*4882a593Smuzhiyun ARRAY_SIZE(i2s_ref_parents),
671*4882a593Smuzhiyun CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
672*4882a593Smuzhiyun SPEAR1310_I2S_CLK_CFG, SPEAR1310_I2S_REF_SHIFT,
673*4882a593Smuzhiyun SPEAR1310_I2S_REF_SEL_MASK, 0, &_lock);
674*4882a593Smuzhiyun clk_register_clkdev(clk, "i2s_ref_mclk", NULL);
675*4882a593Smuzhiyun
676*4882a593Smuzhiyun clk = clk_register_gate(NULL, "i2s_ref_pad_clk", "i2s_ref_mclk", 0,
677*4882a593Smuzhiyun SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_I2S_REF_PAD_CLK_ENB,
678*4882a593Smuzhiyun 0, &_lock);
679*4882a593Smuzhiyun clk_register_clkdev(clk, "i2s_ref_pad_clk", NULL);
680*4882a593Smuzhiyun
681*4882a593Smuzhiyun clk = clk_register_aux("i2s_sclk_clk", "i2s_sclk_gclk",
682*4882a593Smuzhiyun "i2s_ref_mclk", 0, SPEAR1310_I2S_CLK_CFG,
683*4882a593Smuzhiyun &i2s_sclk_masks, i2s_sclk_rtbl,
684*4882a593Smuzhiyun ARRAY_SIZE(i2s_sclk_rtbl), &_lock, &clk1);
685*4882a593Smuzhiyun clk_register_clkdev(clk, "i2s_sclk_clk", NULL);
686*4882a593Smuzhiyun clk_register_clkdev(clk1, "i2s_sclk_gclk", NULL);
687*4882a593Smuzhiyun
688*4882a593Smuzhiyun /* clock derived from ahb clk */
689*4882a593Smuzhiyun clk = clk_register_gate(NULL, "i2c0_clk", "ahb_clk", 0,
690*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_I2C0_CLK_ENB, 0,
691*4882a593Smuzhiyun &_lock);
692*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e0280000.i2c");
693*4882a593Smuzhiyun
694*4882a593Smuzhiyun clk = clk_register_gate(NULL, "dma_clk", "ahb_clk", 0,
695*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_DMA_CLK_ENB, 0,
696*4882a593Smuzhiyun &_lock);
697*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "ea800000.dma");
698*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "eb000000.dma");
699*4882a593Smuzhiyun
700*4882a593Smuzhiyun clk = clk_register_gate(NULL, "jpeg_clk", "ahb_clk", 0,
701*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_JPEG_CLK_ENB, 0,
702*4882a593Smuzhiyun &_lock);
703*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "b2000000.jpeg");
704*4882a593Smuzhiyun
705*4882a593Smuzhiyun clk = clk_register_gate(NULL, "gmac_clk", "ahb_clk", 0,
706*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GMAC_CLK_ENB, 0,
707*4882a593Smuzhiyun &_lock);
708*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e2000000.eth");
709*4882a593Smuzhiyun
710*4882a593Smuzhiyun clk = clk_register_gate(NULL, "fsmc_clk", "ahb_clk", 0,
711*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_FSMC_CLK_ENB, 0,
712*4882a593Smuzhiyun &_lock);
713*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "b0000000.flash");
714*4882a593Smuzhiyun
715*4882a593Smuzhiyun clk = clk_register_gate(NULL, "smi_clk", "ahb_clk", 0,
716*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_SMI_CLK_ENB, 0,
717*4882a593Smuzhiyun &_lock);
718*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "ea000000.flash");
719*4882a593Smuzhiyun
720*4882a593Smuzhiyun clk = clk_register_gate(NULL, "usbh0_clk", "ahb_clk", 0,
721*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_UHC0_CLK_ENB, 0,
722*4882a593Smuzhiyun &_lock);
723*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e4000000.ohci");
724*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e4800000.ehci");
725*4882a593Smuzhiyun
726*4882a593Smuzhiyun clk = clk_register_gate(NULL, "usbh1_clk", "ahb_clk", 0,
727*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_UHC1_CLK_ENB, 0,
728*4882a593Smuzhiyun &_lock);
729*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e5000000.ohci");
730*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e5800000.ehci");
731*4882a593Smuzhiyun
732*4882a593Smuzhiyun clk = clk_register_gate(NULL, "uoc_clk", "ahb_clk", 0,
733*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_UOC_CLK_ENB, 0,
734*4882a593Smuzhiyun &_lock);
735*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e3800000.otg");
736*4882a593Smuzhiyun
737*4882a593Smuzhiyun clk = clk_register_gate(NULL, "pcie_sata_0_clk", "ahb_clk", 0,
738*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_PCIE_SATA_0_CLK_ENB,
739*4882a593Smuzhiyun 0, &_lock);
740*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "b1000000.pcie");
741*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "b1000000.ahci");
742*4882a593Smuzhiyun
743*4882a593Smuzhiyun clk = clk_register_gate(NULL, "pcie_sata_1_clk", "ahb_clk", 0,
744*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_PCIE_SATA_1_CLK_ENB,
745*4882a593Smuzhiyun 0, &_lock);
746*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "b1800000.pcie");
747*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "b1800000.ahci");
748*4882a593Smuzhiyun
749*4882a593Smuzhiyun clk = clk_register_gate(NULL, "pcie_sata_2_clk", "ahb_clk", 0,
750*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_PCIE_SATA_2_CLK_ENB,
751*4882a593Smuzhiyun 0, &_lock);
752*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "b4000000.pcie");
753*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "b4000000.ahci");
754*4882a593Smuzhiyun
755*4882a593Smuzhiyun clk = clk_register_gate(NULL, "sysram0_clk", "ahb_clk", 0,
756*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_SYSRAM0_CLK_ENB, 0,
757*4882a593Smuzhiyun &_lock);
758*4882a593Smuzhiyun clk_register_clkdev(clk, "sysram0_clk", NULL);
759*4882a593Smuzhiyun
760*4882a593Smuzhiyun clk = clk_register_gate(NULL, "sysram1_clk", "ahb_clk", 0,
761*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_SYSRAM1_CLK_ENB, 0,
762*4882a593Smuzhiyun &_lock);
763*4882a593Smuzhiyun clk_register_clkdev(clk, "sysram1_clk", NULL);
764*4882a593Smuzhiyun
765*4882a593Smuzhiyun clk = clk_register_aux("adc_syn_clk", "adc_syn_gclk", "ahb_clk",
766*4882a593Smuzhiyun 0, SPEAR1310_ADC_CLK_SYNT, NULL, adc_rtbl,
767*4882a593Smuzhiyun ARRAY_SIZE(adc_rtbl), &_lock, &clk1);
768*4882a593Smuzhiyun clk_register_clkdev(clk, "adc_syn_clk", NULL);
769*4882a593Smuzhiyun clk_register_clkdev(clk1, "adc_syn_gclk", NULL);
770*4882a593Smuzhiyun
771*4882a593Smuzhiyun clk = clk_register_gate(NULL, "adc_clk", "adc_syn_gclk",
772*4882a593Smuzhiyun CLK_SET_RATE_PARENT, SPEAR1310_PERIP1_CLK_ENB,
773*4882a593Smuzhiyun SPEAR1310_ADC_CLK_ENB, 0, &_lock);
774*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e0080000.adc");
775*4882a593Smuzhiyun
776*4882a593Smuzhiyun /* clock derived from apb clk */
777*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ssp0_clk", "apb_clk", 0,
778*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_SSP_CLK_ENB, 0,
779*4882a593Smuzhiyun &_lock);
780*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e0100000.spi");
781*4882a593Smuzhiyun
782*4882a593Smuzhiyun clk = clk_register_gate(NULL, "gpio0_clk", "apb_clk", 0,
783*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GPIO0_CLK_ENB, 0,
784*4882a593Smuzhiyun &_lock);
785*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e0600000.gpio");
786*4882a593Smuzhiyun
787*4882a593Smuzhiyun clk = clk_register_gate(NULL, "gpio1_clk", "apb_clk", 0,
788*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GPIO1_CLK_ENB, 0,
789*4882a593Smuzhiyun &_lock);
790*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e0680000.gpio");
791*4882a593Smuzhiyun
792*4882a593Smuzhiyun clk = clk_register_gate(NULL, "i2s0_clk", "apb_clk", 0,
793*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_I2S0_CLK_ENB, 0,
794*4882a593Smuzhiyun &_lock);
795*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e0180000.i2s");
796*4882a593Smuzhiyun
797*4882a593Smuzhiyun clk = clk_register_gate(NULL, "i2s1_clk", "apb_clk", 0,
798*4882a593Smuzhiyun SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_I2S1_CLK_ENB, 0,
799*4882a593Smuzhiyun &_lock);
800*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e0200000.i2s");
801*4882a593Smuzhiyun
802*4882a593Smuzhiyun clk = clk_register_gate(NULL, "kbd_clk", "apb_clk", 0,
803*4882a593Smuzhiyun SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_KBD_CLK_ENB, 0,
804*4882a593Smuzhiyun &_lock);
805*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "e0300000.kbd");
806*4882a593Smuzhiyun
807*4882a593Smuzhiyun /* RAS clks */
808*4882a593Smuzhiyun clk = clk_register_mux(NULL, "gen_syn0_1_mclk", gen_synth0_1_parents,
809*4882a593Smuzhiyun ARRAY_SIZE(gen_synth0_1_parents),
810*4882a593Smuzhiyun CLK_SET_RATE_NO_REPARENT, SPEAR1310_PLL_CFG,
811*4882a593Smuzhiyun SPEAR1310_RAS_SYNT0_1_CLK_SHIFT,
812*4882a593Smuzhiyun SPEAR1310_RAS_SYNT_CLK_MASK, 0, &_lock);
813*4882a593Smuzhiyun clk_register_clkdev(clk, "gen_syn0_1_clk", NULL);
814*4882a593Smuzhiyun
815*4882a593Smuzhiyun clk = clk_register_mux(NULL, "gen_syn2_3_mclk", gen_synth2_3_parents,
816*4882a593Smuzhiyun ARRAY_SIZE(gen_synth2_3_parents),
817*4882a593Smuzhiyun CLK_SET_RATE_NO_REPARENT, SPEAR1310_PLL_CFG,
818*4882a593Smuzhiyun SPEAR1310_RAS_SYNT2_3_CLK_SHIFT,
819*4882a593Smuzhiyun SPEAR1310_RAS_SYNT_CLK_MASK, 0, &_lock);
820*4882a593Smuzhiyun clk_register_clkdev(clk, "gen_syn2_3_clk", NULL);
821*4882a593Smuzhiyun
822*4882a593Smuzhiyun clk = clk_register_frac("gen_syn0_clk", "gen_syn0_1_clk", 0,
823*4882a593Smuzhiyun SPEAR1310_RAS_CLK_SYNT0, gen_rtbl, ARRAY_SIZE(gen_rtbl),
824*4882a593Smuzhiyun &_lock);
825*4882a593Smuzhiyun clk_register_clkdev(clk, "gen_syn0_clk", NULL);
826*4882a593Smuzhiyun
827*4882a593Smuzhiyun clk = clk_register_frac("gen_syn1_clk", "gen_syn0_1_clk", 0,
828*4882a593Smuzhiyun SPEAR1310_RAS_CLK_SYNT1, gen_rtbl, ARRAY_SIZE(gen_rtbl),
829*4882a593Smuzhiyun &_lock);
830*4882a593Smuzhiyun clk_register_clkdev(clk, "gen_syn1_clk", NULL);
831*4882a593Smuzhiyun
832*4882a593Smuzhiyun clk = clk_register_frac("gen_syn2_clk", "gen_syn2_3_clk", 0,
833*4882a593Smuzhiyun SPEAR1310_RAS_CLK_SYNT2, gen_rtbl, ARRAY_SIZE(gen_rtbl),
834*4882a593Smuzhiyun &_lock);
835*4882a593Smuzhiyun clk_register_clkdev(clk, "gen_syn2_clk", NULL);
836*4882a593Smuzhiyun
837*4882a593Smuzhiyun clk = clk_register_frac("gen_syn3_clk", "gen_syn2_3_clk", 0,
838*4882a593Smuzhiyun SPEAR1310_RAS_CLK_SYNT3, gen_rtbl, ARRAY_SIZE(gen_rtbl),
839*4882a593Smuzhiyun &_lock);
840*4882a593Smuzhiyun clk_register_clkdev(clk, "gen_syn3_clk", NULL);
841*4882a593Smuzhiyun
842*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ras_osc_24m_clk", "osc_24m_clk", 0,
843*4882a593Smuzhiyun SPEAR1310_RAS_CLK_ENB, SPEAR1310_OSC_24M_CLK_ENB, 0,
844*4882a593Smuzhiyun &_lock);
845*4882a593Smuzhiyun clk_register_clkdev(clk, "ras_osc_24m_clk", NULL);
846*4882a593Smuzhiyun
847*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ras_osc_25m_clk", "osc_25m_clk", 0,
848*4882a593Smuzhiyun SPEAR1310_RAS_CLK_ENB, SPEAR1310_OSC_25M_CLK_ENB, 0,
849*4882a593Smuzhiyun &_lock);
850*4882a593Smuzhiyun clk_register_clkdev(clk, "ras_osc_25m_clk", NULL);
851*4882a593Smuzhiyun
852*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ras_osc_32k_clk", "osc_32k_clk", 0,
853*4882a593Smuzhiyun SPEAR1310_RAS_CLK_ENB, SPEAR1310_OSC_32K_CLK_ENB, 0,
854*4882a593Smuzhiyun &_lock);
855*4882a593Smuzhiyun clk_register_clkdev(clk, "ras_osc_32k_clk", NULL);
856*4882a593Smuzhiyun
857*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ras_pll2_clk", "pll2_clk", 0,
858*4882a593Smuzhiyun SPEAR1310_RAS_CLK_ENB, SPEAR1310_PLL2_CLK_ENB, 0,
859*4882a593Smuzhiyun &_lock);
860*4882a593Smuzhiyun clk_register_clkdev(clk, "ras_pll2_clk", NULL);
861*4882a593Smuzhiyun
862*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ras_pll3_clk", "pll3_clk", 0,
863*4882a593Smuzhiyun SPEAR1310_RAS_CLK_ENB, SPEAR1310_PLL3_CLK_ENB, 0,
864*4882a593Smuzhiyun &_lock);
865*4882a593Smuzhiyun clk_register_clkdev(clk, "ras_pll3_clk", NULL);
866*4882a593Smuzhiyun
867*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ras_tx125_clk", "gmii_pad_clk", 0,
868*4882a593Smuzhiyun SPEAR1310_RAS_CLK_ENB, SPEAR1310_C125M_PAD_CLK_ENB, 0,
869*4882a593Smuzhiyun &_lock);
870*4882a593Smuzhiyun clk_register_clkdev(clk, "ras_tx125_clk", NULL);
871*4882a593Smuzhiyun
872*4882a593Smuzhiyun clk = clk_register_fixed_rate(NULL, "ras_30m_fixed_clk", "pll5_clk", 0,
873*4882a593Smuzhiyun 30000000);
874*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ras_30m_clk", "ras_30m_fixed_clk", 0,
875*4882a593Smuzhiyun SPEAR1310_RAS_CLK_ENB, SPEAR1310_C30M_CLK_ENB, 0,
876*4882a593Smuzhiyun &_lock);
877*4882a593Smuzhiyun clk_register_clkdev(clk, "ras_30m_clk", NULL);
878*4882a593Smuzhiyun
879*4882a593Smuzhiyun clk = clk_register_fixed_rate(NULL, "ras_48m_fixed_clk", "pll5_clk", 0,
880*4882a593Smuzhiyun 48000000);
881*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ras_48m_clk", "ras_48m_fixed_clk", 0,
882*4882a593Smuzhiyun SPEAR1310_RAS_CLK_ENB, SPEAR1310_C48M_CLK_ENB, 0,
883*4882a593Smuzhiyun &_lock);
884*4882a593Smuzhiyun clk_register_clkdev(clk, "ras_48m_clk", NULL);
885*4882a593Smuzhiyun
886*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ras_ahb_clk", "ahb_clk", 0,
887*4882a593Smuzhiyun SPEAR1310_RAS_CLK_ENB, SPEAR1310_ACLK_CLK_ENB, 0,
888*4882a593Smuzhiyun &_lock);
889*4882a593Smuzhiyun clk_register_clkdev(clk, "ras_ahb_clk", NULL);
890*4882a593Smuzhiyun
891*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ras_apb_clk", "apb_clk", 0,
892*4882a593Smuzhiyun SPEAR1310_RAS_CLK_ENB, SPEAR1310_PCLK_CLK_ENB, 0,
893*4882a593Smuzhiyun &_lock);
894*4882a593Smuzhiyun clk_register_clkdev(clk, "ras_apb_clk", NULL);
895*4882a593Smuzhiyun
896*4882a593Smuzhiyun clk = clk_register_fixed_rate(NULL, "ras_plclk0_clk", NULL, 0,
897*4882a593Smuzhiyun 50000000);
898*4882a593Smuzhiyun
899*4882a593Smuzhiyun clk = clk_register_fixed_rate(NULL, "ras_tx50_clk", NULL, 0, 50000000);
900*4882a593Smuzhiyun
901*4882a593Smuzhiyun clk = clk_register_gate(NULL, "can0_clk", "apb_clk", 0,
902*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_CAN0_CLK_ENB, 0,
903*4882a593Smuzhiyun &_lock);
904*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "c_can_platform.0");
905*4882a593Smuzhiyun
906*4882a593Smuzhiyun clk = clk_register_gate(NULL, "can1_clk", "apb_clk", 0,
907*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_CAN1_CLK_ENB, 0,
908*4882a593Smuzhiyun &_lock);
909*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "c_can_platform.1");
910*4882a593Smuzhiyun
911*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ras_smii0_clk", "ras_ahb_clk", 0,
912*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_MII0_CLK_ENB, 0,
913*4882a593Smuzhiyun &_lock);
914*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5c400000.eth");
915*4882a593Smuzhiyun
916*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ras_smii1_clk", "ras_ahb_clk", 0,
917*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_MII1_CLK_ENB, 0,
918*4882a593Smuzhiyun &_lock);
919*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5c500000.eth");
920*4882a593Smuzhiyun
921*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ras_smii2_clk", "ras_ahb_clk", 0,
922*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_MII2_CLK_ENB, 0,
923*4882a593Smuzhiyun &_lock);
924*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5c600000.eth");
925*4882a593Smuzhiyun
926*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ras_rgmii_clk", "ras_ahb_clk", 0,
927*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_GMII_CLK_ENB, 0,
928*4882a593Smuzhiyun &_lock);
929*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5c700000.eth");
930*4882a593Smuzhiyun
931*4882a593Smuzhiyun clk = clk_register_mux(NULL, "smii_rgmii_phy_mclk",
932*4882a593Smuzhiyun smii_rgmii_phy_parents,
933*4882a593Smuzhiyun ARRAY_SIZE(smii_rgmii_phy_parents),
934*4882a593Smuzhiyun CLK_SET_RATE_NO_REPARENT, SPEAR1310_RAS_CTRL_REG1,
935*4882a593Smuzhiyun SPEAR1310_SMII_RGMII_PHY_CLK_SHIFT,
936*4882a593Smuzhiyun SPEAR1310_PHY_CLK_MASK, 0, &_lock);
937*4882a593Smuzhiyun clk_register_clkdev(clk, "stmmacphy.1", NULL);
938*4882a593Smuzhiyun clk_register_clkdev(clk, "stmmacphy.2", NULL);
939*4882a593Smuzhiyun clk_register_clkdev(clk, "stmmacphy.4", NULL);
940*4882a593Smuzhiyun
941*4882a593Smuzhiyun clk = clk_register_mux(NULL, "rmii_phy_mclk", rmii_phy_parents,
942*4882a593Smuzhiyun ARRAY_SIZE(rmii_phy_parents), CLK_SET_RATE_NO_REPARENT,
943*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG1, SPEAR1310_RMII_PHY_CLK_SHIFT,
944*4882a593Smuzhiyun SPEAR1310_PHY_CLK_MASK, 0, &_lock);
945*4882a593Smuzhiyun clk_register_clkdev(clk, "stmmacphy.3", NULL);
946*4882a593Smuzhiyun
947*4882a593Smuzhiyun clk = clk_register_mux(NULL, "uart1_mclk", uart_parents,
948*4882a593Smuzhiyun ARRAY_SIZE(uart_parents), CLK_SET_RATE_NO_REPARENT,
949*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_UART1_CLK_SHIFT,
950*4882a593Smuzhiyun SPEAR1310_RAS_UART_CLK_MASK, 0, &_lock);
951*4882a593Smuzhiyun clk_register_clkdev(clk, "uart1_mclk", NULL);
952*4882a593Smuzhiyun
953*4882a593Smuzhiyun clk = clk_register_gate(NULL, "uart1_clk", "uart1_mclk", 0,
954*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART1_CLK_ENB, 0,
955*4882a593Smuzhiyun &_lock);
956*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5c800000.serial");
957*4882a593Smuzhiyun
958*4882a593Smuzhiyun clk = clk_register_mux(NULL, "uart2_mclk", uart_parents,
959*4882a593Smuzhiyun ARRAY_SIZE(uart_parents), CLK_SET_RATE_NO_REPARENT,
960*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_UART2_CLK_SHIFT,
961*4882a593Smuzhiyun SPEAR1310_RAS_UART_CLK_MASK, 0, &_lock);
962*4882a593Smuzhiyun clk_register_clkdev(clk, "uart2_mclk", NULL);
963*4882a593Smuzhiyun
964*4882a593Smuzhiyun clk = clk_register_gate(NULL, "uart2_clk", "uart2_mclk", 0,
965*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART2_CLK_ENB, 0,
966*4882a593Smuzhiyun &_lock);
967*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5c900000.serial");
968*4882a593Smuzhiyun
969*4882a593Smuzhiyun clk = clk_register_mux(NULL, "uart3_mclk", uart_parents,
970*4882a593Smuzhiyun ARRAY_SIZE(uart_parents), CLK_SET_RATE_NO_REPARENT,
971*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_UART3_CLK_SHIFT,
972*4882a593Smuzhiyun SPEAR1310_RAS_UART_CLK_MASK, 0, &_lock);
973*4882a593Smuzhiyun clk_register_clkdev(clk, "uart3_mclk", NULL);
974*4882a593Smuzhiyun
975*4882a593Smuzhiyun clk = clk_register_gate(NULL, "uart3_clk", "uart3_mclk", 0,
976*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART3_CLK_ENB, 0,
977*4882a593Smuzhiyun &_lock);
978*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5ca00000.serial");
979*4882a593Smuzhiyun
980*4882a593Smuzhiyun clk = clk_register_mux(NULL, "uart4_mclk", uart_parents,
981*4882a593Smuzhiyun ARRAY_SIZE(uart_parents), CLK_SET_RATE_NO_REPARENT,
982*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_UART4_CLK_SHIFT,
983*4882a593Smuzhiyun SPEAR1310_RAS_UART_CLK_MASK, 0, &_lock);
984*4882a593Smuzhiyun clk_register_clkdev(clk, "uart4_mclk", NULL);
985*4882a593Smuzhiyun
986*4882a593Smuzhiyun clk = clk_register_gate(NULL, "uart4_clk", "uart4_mclk", 0,
987*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART4_CLK_ENB, 0,
988*4882a593Smuzhiyun &_lock);
989*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5cb00000.serial");
990*4882a593Smuzhiyun
991*4882a593Smuzhiyun clk = clk_register_mux(NULL, "uart5_mclk", uart_parents,
992*4882a593Smuzhiyun ARRAY_SIZE(uart_parents), CLK_SET_RATE_NO_REPARENT,
993*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_UART5_CLK_SHIFT,
994*4882a593Smuzhiyun SPEAR1310_RAS_UART_CLK_MASK, 0, &_lock);
995*4882a593Smuzhiyun clk_register_clkdev(clk, "uart5_mclk", NULL);
996*4882a593Smuzhiyun
997*4882a593Smuzhiyun clk = clk_register_gate(NULL, "uart5_clk", "uart5_mclk", 0,
998*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART5_CLK_ENB, 0,
999*4882a593Smuzhiyun &_lock);
1000*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5cc00000.serial");
1001*4882a593Smuzhiyun
1002*4882a593Smuzhiyun clk = clk_register_mux(NULL, "i2c1_mclk", i2c_parents,
1003*4882a593Smuzhiyun ARRAY_SIZE(i2c_parents), CLK_SET_RATE_NO_REPARENT,
1004*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_I2C1_CLK_SHIFT,
1005*4882a593Smuzhiyun SPEAR1310_I2C_CLK_MASK, 0, &_lock);
1006*4882a593Smuzhiyun clk_register_clkdev(clk, "i2c1_mclk", NULL);
1007*4882a593Smuzhiyun
1008*4882a593Smuzhiyun clk = clk_register_gate(NULL, "i2c1_clk", "i2c1_mclk", 0,
1009*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C1_CLK_ENB, 0,
1010*4882a593Smuzhiyun &_lock);
1011*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5cd00000.i2c");
1012*4882a593Smuzhiyun
1013*4882a593Smuzhiyun clk = clk_register_mux(NULL, "i2c2_mclk", i2c_parents,
1014*4882a593Smuzhiyun ARRAY_SIZE(i2c_parents), CLK_SET_RATE_NO_REPARENT,
1015*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_I2C2_CLK_SHIFT,
1016*4882a593Smuzhiyun SPEAR1310_I2C_CLK_MASK, 0, &_lock);
1017*4882a593Smuzhiyun clk_register_clkdev(clk, "i2c2_mclk", NULL);
1018*4882a593Smuzhiyun
1019*4882a593Smuzhiyun clk = clk_register_gate(NULL, "i2c2_clk", "i2c2_mclk", 0,
1020*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C2_CLK_ENB, 0,
1021*4882a593Smuzhiyun &_lock);
1022*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5ce00000.i2c");
1023*4882a593Smuzhiyun
1024*4882a593Smuzhiyun clk = clk_register_mux(NULL, "i2c3_mclk", i2c_parents,
1025*4882a593Smuzhiyun ARRAY_SIZE(i2c_parents), CLK_SET_RATE_NO_REPARENT,
1026*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_I2C3_CLK_SHIFT,
1027*4882a593Smuzhiyun SPEAR1310_I2C_CLK_MASK, 0, &_lock);
1028*4882a593Smuzhiyun clk_register_clkdev(clk, "i2c3_mclk", NULL);
1029*4882a593Smuzhiyun
1030*4882a593Smuzhiyun clk = clk_register_gate(NULL, "i2c3_clk", "i2c3_mclk", 0,
1031*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C3_CLK_ENB, 0,
1032*4882a593Smuzhiyun &_lock);
1033*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5cf00000.i2c");
1034*4882a593Smuzhiyun
1035*4882a593Smuzhiyun clk = clk_register_mux(NULL, "i2c4_mclk", i2c_parents,
1036*4882a593Smuzhiyun ARRAY_SIZE(i2c_parents), CLK_SET_RATE_NO_REPARENT,
1037*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_I2C4_CLK_SHIFT,
1038*4882a593Smuzhiyun SPEAR1310_I2C_CLK_MASK, 0, &_lock);
1039*4882a593Smuzhiyun clk_register_clkdev(clk, "i2c4_mclk", NULL);
1040*4882a593Smuzhiyun
1041*4882a593Smuzhiyun clk = clk_register_gate(NULL, "i2c4_clk", "i2c4_mclk", 0,
1042*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C4_CLK_ENB, 0,
1043*4882a593Smuzhiyun &_lock);
1044*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5d000000.i2c");
1045*4882a593Smuzhiyun
1046*4882a593Smuzhiyun clk = clk_register_mux(NULL, "i2c5_mclk", i2c_parents,
1047*4882a593Smuzhiyun ARRAY_SIZE(i2c_parents), CLK_SET_RATE_NO_REPARENT,
1048*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_I2C5_CLK_SHIFT,
1049*4882a593Smuzhiyun SPEAR1310_I2C_CLK_MASK, 0, &_lock);
1050*4882a593Smuzhiyun clk_register_clkdev(clk, "i2c5_mclk", NULL);
1051*4882a593Smuzhiyun
1052*4882a593Smuzhiyun clk = clk_register_gate(NULL, "i2c5_clk", "i2c5_mclk", 0,
1053*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C5_CLK_ENB, 0,
1054*4882a593Smuzhiyun &_lock);
1055*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5d100000.i2c");
1056*4882a593Smuzhiyun
1057*4882a593Smuzhiyun clk = clk_register_mux(NULL, "i2c6_mclk", i2c_parents,
1058*4882a593Smuzhiyun ARRAY_SIZE(i2c_parents), CLK_SET_RATE_NO_REPARENT,
1059*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_I2C6_CLK_SHIFT,
1060*4882a593Smuzhiyun SPEAR1310_I2C_CLK_MASK, 0, &_lock);
1061*4882a593Smuzhiyun clk_register_clkdev(clk, "i2c6_mclk", NULL);
1062*4882a593Smuzhiyun
1063*4882a593Smuzhiyun clk = clk_register_gate(NULL, "i2c6_clk", "i2c6_mclk", 0,
1064*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C6_CLK_ENB, 0,
1065*4882a593Smuzhiyun &_lock);
1066*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5d200000.i2c");
1067*4882a593Smuzhiyun
1068*4882a593Smuzhiyun clk = clk_register_mux(NULL, "i2c7_mclk", i2c_parents,
1069*4882a593Smuzhiyun ARRAY_SIZE(i2c_parents), CLK_SET_RATE_NO_REPARENT,
1070*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_I2C7_CLK_SHIFT,
1071*4882a593Smuzhiyun SPEAR1310_I2C_CLK_MASK, 0, &_lock);
1072*4882a593Smuzhiyun clk_register_clkdev(clk, "i2c7_mclk", NULL);
1073*4882a593Smuzhiyun
1074*4882a593Smuzhiyun clk = clk_register_gate(NULL, "i2c7_clk", "i2c7_mclk", 0,
1075*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C7_CLK_ENB, 0,
1076*4882a593Smuzhiyun &_lock);
1077*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5d300000.i2c");
1078*4882a593Smuzhiyun
1079*4882a593Smuzhiyun clk = clk_register_mux(NULL, "ssp1_mclk", ssp1_parents,
1080*4882a593Smuzhiyun ARRAY_SIZE(ssp1_parents), CLK_SET_RATE_NO_REPARENT,
1081*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_SSP1_CLK_SHIFT,
1082*4882a593Smuzhiyun SPEAR1310_SSP1_CLK_MASK, 0, &_lock);
1083*4882a593Smuzhiyun clk_register_clkdev(clk, "ssp1_mclk", NULL);
1084*4882a593Smuzhiyun
1085*4882a593Smuzhiyun clk = clk_register_gate(NULL, "ssp1_clk", "ssp1_mclk", 0,
1086*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_SSP1_CLK_ENB, 0,
1087*4882a593Smuzhiyun &_lock);
1088*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "5d400000.spi");
1089*4882a593Smuzhiyun
1090*4882a593Smuzhiyun clk = clk_register_mux(NULL, "pci_mclk", pci_parents,
1091*4882a593Smuzhiyun ARRAY_SIZE(pci_parents), CLK_SET_RATE_NO_REPARENT,
1092*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_PCI_CLK_SHIFT,
1093*4882a593Smuzhiyun SPEAR1310_PCI_CLK_MASK, 0, &_lock);
1094*4882a593Smuzhiyun clk_register_clkdev(clk, "pci_mclk", NULL);
1095*4882a593Smuzhiyun
1096*4882a593Smuzhiyun clk = clk_register_gate(NULL, "pci_clk", "pci_mclk", 0,
1097*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_PCI_CLK_ENB, 0,
1098*4882a593Smuzhiyun &_lock);
1099*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "pci");
1100*4882a593Smuzhiyun
1101*4882a593Smuzhiyun clk = clk_register_mux(NULL, "tdm1_mclk", tdm_parents,
1102*4882a593Smuzhiyun ARRAY_SIZE(tdm_parents), CLK_SET_RATE_NO_REPARENT,
1103*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_TDM1_CLK_SHIFT,
1104*4882a593Smuzhiyun SPEAR1310_TDM_CLK_MASK, 0, &_lock);
1105*4882a593Smuzhiyun clk_register_clkdev(clk, "tdm1_mclk", NULL);
1106*4882a593Smuzhiyun
1107*4882a593Smuzhiyun clk = clk_register_gate(NULL, "tdm1_clk", "tdm1_mclk", 0,
1108*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_TDM1_CLK_ENB, 0,
1109*4882a593Smuzhiyun &_lock);
1110*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "tdm_hdlc.0");
1111*4882a593Smuzhiyun
1112*4882a593Smuzhiyun clk = clk_register_mux(NULL, "tdm2_mclk", tdm_parents,
1113*4882a593Smuzhiyun ARRAY_SIZE(tdm_parents), CLK_SET_RATE_NO_REPARENT,
1114*4882a593Smuzhiyun SPEAR1310_RAS_CTRL_REG0, SPEAR1310_TDM2_CLK_SHIFT,
1115*4882a593Smuzhiyun SPEAR1310_TDM_CLK_MASK, 0, &_lock);
1116*4882a593Smuzhiyun clk_register_clkdev(clk, "tdm2_mclk", NULL);
1117*4882a593Smuzhiyun
1118*4882a593Smuzhiyun clk = clk_register_gate(NULL, "tdm2_clk", "tdm2_mclk", 0,
1119*4882a593Smuzhiyun SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_TDM2_CLK_ENB, 0,
1120*4882a593Smuzhiyun &_lock);
1121*4882a593Smuzhiyun clk_register_clkdev(clk, NULL, "tdm_hdlc.1");
1122*4882a593Smuzhiyun }
1123