File Index
Files and directories
Sign in
FILE

spear1310_clock.c

File preview with syntax highlighting.

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