162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * arch/arm/mach-spear13xx/spear1340_clock.c
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * SPEAr1340 machine clock framework source file
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Copyright (C) 2012 ST Microelectronics
862306a36Sopenharmony_ci * Viresh Kumar <vireshk@kernel.org>
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/clkdev.h>
1262306a36Sopenharmony_ci#include <linux/clk/spear.h>
1362306a36Sopenharmony_ci#include <linux/err.h>
1462306a36Sopenharmony_ci#include <linux/io.h>
1562306a36Sopenharmony_ci#include <linux/spinlock_types.h>
1662306a36Sopenharmony_ci#include "clk.h"
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci/* Clock Configuration Registers */
1962306a36Sopenharmony_ci#define SPEAR1340_SYS_CLK_CTRL			(misc_base + 0x200)
2062306a36Sopenharmony_ci	#define SPEAR1340_HCLK_SRC_SEL_SHIFT	27
2162306a36Sopenharmony_ci	#define SPEAR1340_HCLK_SRC_SEL_MASK	1
2262306a36Sopenharmony_ci	#define SPEAR1340_SCLK_SRC_SEL_SHIFT	23
2362306a36Sopenharmony_ci	#define SPEAR1340_SCLK_SRC_SEL_MASK	3
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci/* PLL related registers and bit values */
2662306a36Sopenharmony_ci#define SPEAR1340_PLL_CFG			(misc_base + 0x210)
2762306a36Sopenharmony_ci	/* PLL_CFG bit values */
2862306a36Sopenharmony_ci	#define SPEAR1340_CLCD_SYNT_CLK_MASK		1
2962306a36Sopenharmony_ci	#define SPEAR1340_CLCD_SYNT_CLK_SHIFT		31
3062306a36Sopenharmony_ci	#define SPEAR1340_GEN_SYNT2_3_CLK_SHIFT		29
3162306a36Sopenharmony_ci	#define SPEAR1340_GEN_SYNT_CLK_MASK		2
3262306a36Sopenharmony_ci	#define SPEAR1340_GEN_SYNT0_1_CLK_SHIFT		27
3362306a36Sopenharmony_ci	#define SPEAR1340_PLL_CLK_MASK			2
3462306a36Sopenharmony_ci	#define SPEAR1340_PLL3_CLK_SHIFT		24
3562306a36Sopenharmony_ci	#define SPEAR1340_PLL2_CLK_SHIFT		22
3662306a36Sopenharmony_ci	#define SPEAR1340_PLL1_CLK_SHIFT		20
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci#define SPEAR1340_PLL1_CTR			(misc_base + 0x214)
3962306a36Sopenharmony_ci#define SPEAR1340_PLL1_FRQ			(misc_base + 0x218)
4062306a36Sopenharmony_ci#define SPEAR1340_PLL2_CTR			(misc_base + 0x220)
4162306a36Sopenharmony_ci#define SPEAR1340_PLL2_FRQ			(misc_base + 0x224)
4262306a36Sopenharmony_ci#define SPEAR1340_PLL3_CTR			(misc_base + 0x22C)
4362306a36Sopenharmony_ci#define SPEAR1340_PLL3_FRQ			(misc_base + 0x230)
4462306a36Sopenharmony_ci#define SPEAR1340_PLL4_CTR			(misc_base + 0x238)
4562306a36Sopenharmony_ci#define SPEAR1340_PLL4_FRQ			(misc_base + 0x23C)
4662306a36Sopenharmony_ci#define SPEAR1340_PERIP_CLK_CFG			(misc_base + 0x244)
4762306a36Sopenharmony_ci	/* PERIP_CLK_CFG bit values */
4862306a36Sopenharmony_ci	#define SPEAR1340_SPDIF_CLK_MASK		1
4962306a36Sopenharmony_ci	#define SPEAR1340_SPDIF_OUT_CLK_SHIFT		15
5062306a36Sopenharmony_ci	#define SPEAR1340_SPDIF_IN_CLK_SHIFT		14
5162306a36Sopenharmony_ci	#define SPEAR1340_GPT3_CLK_SHIFT		13
5262306a36Sopenharmony_ci	#define SPEAR1340_GPT2_CLK_SHIFT		12
5362306a36Sopenharmony_ci	#define SPEAR1340_GPT_CLK_MASK			1
5462306a36Sopenharmony_ci	#define SPEAR1340_GPT1_CLK_SHIFT		9
5562306a36Sopenharmony_ci	#define SPEAR1340_GPT0_CLK_SHIFT		8
5662306a36Sopenharmony_ci	#define SPEAR1340_UART_CLK_MASK			2
5762306a36Sopenharmony_ci	#define SPEAR1340_UART1_CLK_SHIFT		6
5862306a36Sopenharmony_ci	#define SPEAR1340_UART0_CLK_SHIFT		4
5962306a36Sopenharmony_ci	#define SPEAR1340_CLCD_CLK_MASK			2
6062306a36Sopenharmony_ci	#define SPEAR1340_CLCD_CLK_SHIFT		2
6162306a36Sopenharmony_ci	#define SPEAR1340_C3_CLK_MASK			1
6262306a36Sopenharmony_ci	#define SPEAR1340_C3_CLK_SHIFT			1
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci#define SPEAR1340_GMAC_CLK_CFG			(misc_base + 0x248)
6562306a36Sopenharmony_ci	#define SPEAR1340_GMAC_PHY_CLK_MASK		1
6662306a36Sopenharmony_ci	#define SPEAR1340_GMAC_PHY_CLK_SHIFT		2
6762306a36Sopenharmony_ci	#define SPEAR1340_GMAC_PHY_INPUT_CLK_MASK	2
6862306a36Sopenharmony_ci	#define SPEAR1340_GMAC_PHY_INPUT_CLK_SHIFT	0
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci#define SPEAR1340_I2S_CLK_CFG			(misc_base + 0x24C)
7162306a36Sopenharmony_ci	/* I2S_CLK_CFG register mask */
7262306a36Sopenharmony_ci	#define SPEAR1340_I2S_SCLK_X_MASK		0x1F
7362306a36Sopenharmony_ci	#define SPEAR1340_I2S_SCLK_X_SHIFT		27
7462306a36Sopenharmony_ci	#define SPEAR1340_I2S_SCLK_Y_MASK		0x1F
7562306a36Sopenharmony_ci	#define SPEAR1340_I2S_SCLK_Y_SHIFT		22
7662306a36Sopenharmony_ci	#define SPEAR1340_I2S_SCLK_EQ_SEL_SHIFT		21
7762306a36Sopenharmony_ci	#define SPEAR1340_I2S_SCLK_SYNTH_ENB		20
7862306a36Sopenharmony_ci	#define SPEAR1340_I2S_PRS1_CLK_X_MASK		0xFF
7962306a36Sopenharmony_ci	#define SPEAR1340_I2S_PRS1_CLK_X_SHIFT		12
8062306a36Sopenharmony_ci	#define SPEAR1340_I2S_PRS1_CLK_Y_MASK		0xFF
8162306a36Sopenharmony_ci	#define SPEAR1340_I2S_PRS1_CLK_Y_SHIFT		4
8262306a36Sopenharmony_ci	#define SPEAR1340_I2S_PRS1_EQ_SEL_SHIFT		3
8362306a36Sopenharmony_ci	#define SPEAR1340_I2S_REF_SEL_MASK		1
8462306a36Sopenharmony_ci	#define SPEAR1340_I2S_REF_SHIFT			2
8562306a36Sopenharmony_ci	#define SPEAR1340_I2S_SRC_CLK_MASK		2
8662306a36Sopenharmony_ci	#define SPEAR1340_I2S_SRC_CLK_SHIFT		0
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci#define SPEAR1340_C3_CLK_SYNT			(misc_base + 0x250)
8962306a36Sopenharmony_ci#define SPEAR1340_UART0_CLK_SYNT		(misc_base + 0x254)
9062306a36Sopenharmony_ci#define SPEAR1340_UART1_CLK_SYNT		(misc_base + 0x258)
9162306a36Sopenharmony_ci#define SPEAR1340_GMAC_CLK_SYNT			(misc_base + 0x25C)
9262306a36Sopenharmony_ci#define SPEAR1340_SDHCI_CLK_SYNT		(misc_base + 0x260)
9362306a36Sopenharmony_ci#define SPEAR1340_CFXD_CLK_SYNT			(misc_base + 0x264)
9462306a36Sopenharmony_ci#define SPEAR1340_ADC_CLK_SYNT			(misc_base + 0x270)
9562306a36Sopenharmony_ci#define SPEAR1340_AMBA_CLK_SYNT			(misc_base + 0x274)
9662306a36Sopenharmony_ci#define SPEAR1340_CLCD_CLK_SYNT			(misc_base + 0x27C)
9762306a36Sopenharmony_ci#define SPEAR1340_SYS_CLK_SYNT			(misc_base + 0x284)
9862306a36Sopenharmony_ci#define SPEAR1340_GEN_CLK_SYNT0			(misc_base + 0x28C)
9962306a36Sopenharmony_ci#define SPEAR1340_GEN_CLK_SYNT1			(misc_base + 0x294)
10062306a36Sopenharmony_ci#define SPEAR1340_GEN_CLK_SYNT2			(misc_base + 0x29C)
10162306a36Sopenharmony_ci#define SPEAR1340_GEN_CLK_SYNT3			(misc_base + 0x304)
10262306a36Sopenharmony_ci#define SPEAR1340_PERIP1_CLK_ENB		(misc_base + 0x30C)
10362306a36Sopenharmony_ci	#define SPEAR1340_RTC_CLK_ENB			31
10462306a36Sopenharmony_ci	#define SPEAR1340_ADC_CLK_ENB			30
10562306a36Sopenharmony_ci	#define SPEAR1340_C3_CLK_ENB			29
10662306a36Sopenharmony_ci	#define SPEAR1340_CLCD_CLK_ENB			27
10762306a36Sopenharmony_ci	#define SPEAR1340_DMA_CLK_ENB			25
10862306a36Sopenharmony_ci	#define SPEAR1340_GPIO1_CLK_ENB			24
10962306a36Sopenharmony_ci	#define SPEAR1340_GPIO0_CLK_ENB			23
11062306a36Sopenharmony_ci	#define SPEAR1340_GPT1_CLK_ENB			22
11162306a36Sopenharmony_ci	#define SPEAR1340_GPT0_CLK_ENB			21
11262306a36Sopenharmony_ci	#define SPEAR1340_I2S_PLAY_CLK_ENB		20
11362306a36Sopenharmony_ci	#define SPEAR1340_I2S_REC_CLK_ENB		19
11462306a36Sopenharmony_ci	#define SPEAR1340_I2C0_CLK_ENB			18
11562306a36Sopenharmony_ci	#define SPEAR1340_SSP_CLK_ENB			17
11662306a36Sopenharmony_ci	#define SPEAR1340_UART0_CLK_ENB			15
11762306a36Sopenharmony_ci	#define SPEAR1340_PCIE_SATA_CLK_ENB		12
11862306a36Sopenharmony_ci	#define SPEAR1340_UOC_CLK_ENB			11
11962306a36Sopenharmony_ci	#define SPEAR1340_UHC1_CLK_ENB			10
12062306a36Sopenharmony_ci	#define SPEAR1340_UHC0_CLK_ENB			9
12162306a36Sopenharmony_ci	#define SPEAR1340_GMAC_CLK_ENB			8
12262306a36Sopenharmony_ci	#define SPEAR1340_CFXD_CLK_ENB			7
12362306a36Sopenharmony_ci	#define SPEAR1340_SDHCI_CLK_ENB			6
12462306a36Sopenharmony_ci	#define SPEAR1340_SMI_CLK_ENB			5
12562306a36Sopenharmony_ci	#define SPEAR1340_FSMC_CLK_ENB			4
12662306a36Sopenharmony_ci	#define SPEAR1340_SYSRAM0_CLK_ENB		3
12762306a36Sopenharmony_ci	#define SPEAR1340_SYSRAM1_CLK_ENB		2
12862306a36Sopenharmony_ci	#define SPEAR1340_SYSROM_CLK_ENB		1
12962306a36Sopenharmony_ci	#define SPEAR1340_BUS_CLK_ENB			0
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci#define SPEAR1340_PERIP2_CLK_ENB		(misc_base + 0x310)
13262306a36Sopenharmony_ci	#define SPEAR1340_THSENS_CLK_ENB		8
13362306a36Sopenharmony_ci	#define SPEAR1340_I2S_REF_PAD_CLK_ENB		7
13462306a36Sopenharmony_ci	#define SPEAR1340_ACP_CLK_ENB			6
13562306a36Sopenharmony_ci	#define SPEAR1340_GPT3_CLK_ENB			5
13662306a36Sopenharmony_ci	#define SPEAR1340_GPT2_CLK_ENB			4
13762306a36Sopenharmony_ci	#define SPEAR1340_KBD_CLK_ENB			3
13862306a36Sopenharmony_ci	#define SPEAR1340_CPU_DBG_CLK_ENB		2
13962306a36Sopenharmony_ci	#define SPEAR1340_DDR_CORE_CLK_ENB		1
14062306a36Sopenharmony_ci	#define SPEAR1340_DDR_CTRL_CLK_ENB		0
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci#define SPEAR1340_PERIP3_CLK_ENB		(misc_base + 0x314)
14362306a36Sopenharmony_ci	#define SPEAR1340_PLGPIO_CLK_ENB		18
14462306a36Sopenharmony_ci	#define SPEAR1340_VIDEO_DEC_CLK_ENB		16
14562306a36Sopenharmony_ci	#define SPEAR1340_VIDEO_ENC_CLK_ENB		15
14662306a36Sopenharmony_ci	#define SPEAR1340_SPDIF_OUT_CLK_ENB		13
14762306a36Sopenharmony_ci	#define SPEAR1340_SPDIF_IN_CLK_ENB		12
14862306a36Sopenharmony_ci	#define SPEAR1340_VIDEO_IN_CLK_ENB		11
14962306a36Sopenharmony_ci	#define SPEAR1340_CAM0_CLK_ENB			10
15062306a36Sopenharmony_ci	#define SPEAR1340_CAM1_CLK_ENB			9
15162306a36Sopenharmony_ci	#define SPEAR1340_CAM2_CLK_ENB			8
15262306a36Sopenharmony_ci	#define SPEAR1340_CAM3_CLK_ENB			7
15362306a36Sopenharmony_ci	#define SPEAR1340_MALI_CLK_ENB			6
15462306a36Sopenharmony_ci	#define SPEAR1340_CEC0_CLK_ENB			5
15562306a36Sopenharmony_ci	#define SPEAR1340_CEC1_CLK_ENB			4
15662306a36Sopenharmony_ci	#define SPEAR1340_PWM_CLK_ENB			3
15762306a36Sopenharmony_ci	#define SPEAR1340_I2C1_CLK_ENB			2
15862306a36Sopenharmony_ci	#define SPEAR1340_UART1_CLK_ENB			1
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_cistatic DEFINE_SPINLOCK(_lock);
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci/* pll rate configuration table, in ascending order of rates */
16362306a36Sopenharmony_cistatic struct pll_rate_tbl pll_rtbl[] = {
16462306a36Sopenharmony_ci	/* PCLK 24MHz */
16562306a36Sopenharmony_ci	{.mode = 0, .m = 0x83, .n = 0x04, .p = 0x5}, /* vco 1572, pll 49.125 MHz */
16662306a36Sopenharmony_ci	{.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x3}, /* vco 1000, pll 125 MHz */
16762306a36Sopenharmony_ci	{.mode = 0, .m = 0x64, .n = 0x06, .p = 0x1}, /* vco 800, pll 400 MHz */
16862306a36Sopenharmony_ci	{.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x1}, /* vco 1000, pll 500 MHz */
16962306a36Sopenharmony_ci	{.mode = 0, .m = 0xA6, .n = 0x06, .p = 0x1}, /* vco 1328, pll 664 MHz */
17062306a36Sopenharmony_ci	{.mode = 0, .m = 0xC8, .n = 0x06, .p = 0x1}, /* vco 1600, pll 800 MHz */
17162306a36Sopenharmony_ci	{.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x0}, /* vco 1, pll 1 GHz */
17262306a36Sopenharmony_ci	{.mode = 0, .m = 0x96, .n = 0x06, .p = 0x0}, /* vco 1200, pll 1200 MHz */
17362306a36Sopenharmony_ci};
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci/* vco-pll4 rate configuration table, in ascending order of rates */
17662306a36Sopenharmony_cistatic struct pll_rate_tbl pll4_rtbl[] = {
17762306a36Sopenharmony_ci	{.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x2}, /* vco 1000, pll 250 MHz */
17862306a36Sopenharmony_ci	{.mode = 0, .m = 0xA6, .n = 0x06, .p = 0x2}, /* vco 1328, pll 332 MHz */
17962306a36Sopenharmony_ci	{.mode = 0, .m = 0xC8, .n = 0x06, .p = 0x2}, /* vco 1600, pll 400 MHz */
18062306a36Sopenharmony_ci	{.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x0}, /* vco 1, pll 1 GHz */
18162306a36Sopenharmony_ci};
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ci/*
18462306a36Sopenharmony_ci * All below entries generate 166 MHz for
18562306a36Sopenharmony_ci * different values of vco1div2
18662306a36Sopenharmony_ci */
18762306a36Sopenharmony_cistatic struct frac_rate_tbl amba_synth_rtbl[] = {
18862306a36Sopenharmony_ci	{.div = 0x073A8}, /* for vco1div2 = 600 MHz */
18962306a36Sopenharmony_ci	{.div = 0x06062}, /* for vco1div2 = 500 MHz */
19062306a36Sopenharmony_ci	{.div = 0x04D1B}, /* for vco1div2 = 400 MHz */
19162306a36Sopenharmony_ci	{.div = 0x04000}, /* for vco1div2 = 332 MHz */
19262306a36Sopenharmony_ci	{.div = 0x03031}, /* for vco1div2 = 250 MHz */
19362306a36Sopenharmony_ci	{.div = 0x0268D}, /* for vco1div2 = 200 MHz */
19462306a36Sopenharmony_ci};
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_ci/*
19762306a36Sopenharmony_ci * Synthesizer Clock derived from vcodiv2. This clock is one of the
19862306a36Sopenharmony_ci * possible clocks to feed cpu directly.
19962306a36Sopenharmony_ci * We can program this synthesizer to make cpu run on different clock
20062306a36Sopenharmony_ci * frequencies.
20162306a36Sopenharmony_ci * Following table provides configuration values to let cpu run on 200,
20262306a36Sopenharmony_ci * 250, 332, 400 or 500 MHz considering different possibilites of input
20362306a36Sopenharmony_ci * (vco1div2) clock.
20462306a36Sopenharmony_ci *
20562306a36Sopenharmony_ci * --------------------------------------------------------------------
20662306a36Sopenharmony_ci * vco1div2(Mhz)	fout(Mhz)	cpuclk = fout/2		div
20762306a36Sopenharmony_ci * --------------------------------------------------------------------
20862306a36Sopenharmony_ci * 400			200		100			0x04000
20962306a36Sopenharmony_ci * 400			250		125			0x03333
21062306a36Sopenharmony_ci * 400			332		166			0x0268D
21162306a36Sopenharmony_ci * 400			400		200			0x02000
21262306a36Sopenharmony_ci * --------------------------------------------------------------------
21362306a36Sopenharmony_ci * 500			200		100			0x05000
21462306a36Sopenharmony_ci * 500			250		125			0x04000
21562306a36Sopenharmony_ci * 500			332		166			0x03031
21662306a36Sopenharmony_ci * 500			400		200			0x02800
21762306a36Sopenharmony_ci * 500			500		250			0x02000
21862306a36Sopenharmony_ci * --------------------------------------------------------------------
21962306a36Sopenharmony_ci * 600			200		100			0x06000
22062306a36Sopenharmony_ci * 600			250		125			0x04CCE
22162306a36Sopenharmony_ci * 600			332		166			0x039D5
22262306a36Sopenharmony_ci * 600			400		200			0x03000
22362306a36Sopenharmony_ci * 600			500		250			0x02666
22462306a36Sopenharmony_ci * --------------------------------------------------------------------
22562306a36Sopenharmony_ci * 664			200		100			0x06a38
22662306a36Sopenharmony_ci * 664			250		125			0x054FD
22762306a36Sopenharmony_ci * 664			332		166			0x04000
22862306a36Sopenharmony_ci * 664			400		200			0x0351E
22962306a36Sopenharmony_ci * 664			500		250			0x02A7E
23062306a36Sopenharmony_ci * --------------------------------------------------------------------
23162306a36Sopenharmony_ci * 800			200		100			0x08000
23262306a36Sopenharmony_ci * 800			250		125			0x06666
23362306a36Sopenharmony_ci * 800			332		166			0x04D18
23462306a36Sopenharmony_ci * 800			400		200			0x04000
23562306a36Sopenharmony_ci * 800			500		250			0x03333
23662306a36Sopenharmony_ci * --------------------------------------------------------------------
23762306a36Sopenharmony_ci * sys rate configuration table is in descending order of divisor.
23862306a36Sopenharmony_ci */
23962306a36Sopenharmony_cistatic struct frac_rate_tbl sys_synth_rtbl[] = {
24062306a36Sopenharmony_ci	{.div = 0x08000},
24162306a36Sopenharmony_ci	{.div = 0x06a38},
24262306a36Sopenharmony_ci	{.div = 0x06666},
24362306a36Sopenharmony_ci	{.div = 0x06000},
24462306a36Sopenharmony_ci	{.div = 0x054FD},
24562306a36Sopenharmony_ci	{.div = 0x05000},
24662306a36Sopenharmony_ci	{.div = 0x04D18},
24762306a36Sopenharmony_ci	{.div = 0x04CCE},
24862306a36Sopenharmony_ci	{.div = 0x04000},
24962306a36Sopenharmony_ci	{.div = 0x039D5},
25062306a36Sopenharmony_ci	{.div = 0x0351E},
25162306a36Sopenharmony_ci	{.div = 0x03333},
25262306a36Sopenharmony_ci	{.div = 0x03031},
25362306a36Sopenharmony_ci	{.div = 0x03000},
25462306a36Sopenharmony_ci	{.div = 0x02A7E},
25562306a36Sopenharmony_ci	{.div = 0x02800},
25662306a36Sopenharmony_ci	{.div = 0x0268D},
25762306a36Sopenharmony_ci	{.div = 0x02666},
25862306a36Sopenharmony_ci	{.div = 0x02000},
25962306a36Sopenharmony_ci};
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci/* aux rate configuration table, in ascending order of rates */
26262306a36Sopenharmony_cistatic struct aux_rate_tbl aux_rtbl[] = {
26362306a36Sopenharmony_ci	/* 12.29MHz for vic1div2=600MHz and 10.24MHz for VCO1div2=500MHz */
26462306a36Sopenharmony_ci	{.xscale = 5, .yscale = 122, .eq = 0},
26562306a36Sopenharmony_ci	/* 14.70MHz for vic1div2=600MHz and 12.29MHz for VCO1div2=500MHz */
26662306a36Sopenharmony_ci	{.xscale = 10, .yscale = 204, .eq = 0},
26762306a36Sopenharmony_ci	/* 48MHz for vic1div2=600MHz and 40 MHz for VCO1div2=500MHz */
26862306a36Sopenharmony_ci	{.xscale = 4, .yscale = 25, .eq = 0},
26962306a36Sopenharmony_ci	/* 57.14MHz for vic1div2=600MHz and 48 MHz for VCO1div2=500MHz */
27062306a36Sopenharmony_ci	{.xscale = 4, .yscale = 21, .eq = 0},
27162306a36Sopenharmony_ci	/* 83.33MHz for vic1div2=600MHz and 69.44MHz for VCO1div2=500MHz */
27262306a36Sopenharmony_ci	{.xscale = 5, .yscale = 18, .eq = 0},
27362306a36Sopenharmony_ci	/* 100MHz for vic1div2=600MHz and 83.33 MHz for VCO1div2=500MHz */
27462306a36Sopenharmony_ci	{.xscale = 2, .yscale = 6, .eq = 0},
27562306a36Sopenharmony_ci	/* 125MHz for vic1div2=600MHz and 104.1MHz for VCO1div2=500MHz */
27662306a36Sopenharmony_ci	{.xscale = 5, .yscale = 12, .eq = 0},
27762306a36Sopenharmony_ci	/* 150MHz for vic1div2=600MHz and 125MHz for VCO1div2=500MHz */
27862306a36Sopenharmony_ci	{.xscale = 2, .yscale = 4, .eq = 0},
27962306a36Sopenharmony_ci	/* 166MHz for vic1div2=600MHz and 138.88MHz for VCO1div2=500MHz */
28062306a36Sopenharmony_ci	{.xscale = 5, .yscale = 18, .eq = 1},
28162306a36Sopenharmony_ci	/* 200MHz for vic1div2=600MHz and 166MHz for VCO1div2=500MHz */
28262306a36Sopenharmony_ci	{.xscale = 1, .yscale = 3, .eq = 1},
28362306a36Sopenharmony_ci	/* 250MHz for vic1div2=600MHz and 208.33MHz for VCO1div2=500MHz */
28462306a36Sopenharmony_ci	{.xscale = 5, .yscale = 12, .eq = 1},
28562306a36Sopenharmony_ci	/* 300MHz for vic1div2=600MHz and 250MHz for VCO1div2=500MHz */
28662306a36Sopenharmony_ci	{.xscale = 1, .yscale = 2, .eq = 1},
28762306a36Sopenharmony_ci};
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_ci/* gmac rate configuration table, in ascending order of rates */
29062306a36Sopenharmony_cistatic struct aux_rate_tbl gmac_rtbl[] = {
29162306a36Sopenharmony_ci	/* For gmac phy input clk */
29262306a36Sopenharmony_ci	{.xscale = 2, .yscale = 6, .eq = 0}, /* divided by 6 */
29362306a36Sopenharmony_ci	{.xscale = 2, .yscale = 4, .eq = 0}, /* divided by 4 */
29462306a36Sopenharmony_ci	{.xscale = 1, .yscale = 3, .eq = 1}, /* divided by 3 */
29562306a36Sopenharmony_ci	{.xscale = 1, .yscale = 2, .eq = 1}, /* divided by 2 */
29662306a36Sopenharmony_ci};
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_ci/* clcd rate configuration table, in ascending order of rates */
29962306a36Sopenharmony_cistatic struct frac_rate_tbl clcd_rtbl[] = {
30062306a36Sopenharmony_ci	{.div = 0x18000}, /* 25 Mhz , for vc01div4 = 300 MHz*/
30162306a36Sopenharmony_ci	{.div = 0x1638E}, /* 27 Mhz , for vc01div4 = 300 MHz*/
30262306a36Sopenharmony_ci	{.div = 0x14000}, /* 25 Mhz , for vc01div4 = 250 MHz*/
30362306a36Sopenharmony_ci	{.div = 0x1284B}, /* 27 Mhz , for vc01div4 = 250 MHz*/
30462306a36Sopenharmony_ci	{.div = 0x0D8D3}, /* 58 Mhz , for vco1div4 = 393 MHz */
30562306a36Sopenharmony_ci	{.div = 0x0B72C}, /* 58 Mhz , for vco1div4 = 332 MHz */
30662306a36Sopenharmony_ci	{.div = 0x0A584}, /* 58 Mhz , for vco1div4 = 300 MHz */
30762306a36Sopenharmony_ci	{.div = 0x093B1}, /* 65 Mhz , for vc01div4 = 300 MHz*/
30862306a36Sopenharmony_ci	{.div = 0x089EE}, /* 58 Mhz , for vc01div4 = 250 MHz*/
30962306a36Sopenharmony_ci	{.div = 0x081BA}, /* 74 Mhz , for vc01div4 = 300 MHz*/
31062306a36Sopenharmony_ci	{.div = 0x07BA0}, /* 65 Mhz , for vc01div4 = 250 MHz*/
31162306a36Sopenharmony_ci	{.div = 0x06f1C}, /* 72 Mhz , for vc01div4 = 250 MHz*/
31262306a36Sopenharmony_ci	{.div = 0x06E58}, /* 58 Mhz , for vco1div4 = 200 MHz */
31362306a36Sopenharmony_ci	{.div = 0x06c1B}, /* 74 Mhz , for vc01div4 = 250 MHz*/
31462306a36Sopenharmony_ci	{.div = 0x058E3}, /* 108 Mhz , for vc01div4 = 300 MHz*/
31562306a36Sopenharmony_ci	{.div = 0x04A12}, /* 108 Mhz , for vc01div4 = 250 MHz*/
31662306a36Sopenharmony_ci	{.div = 0x040A5}, /* 148.5 Mhz , for vc01div4 = 300 MHz*/
31762306a36Sopenharmony_ci	{.div = 0x0378E}, /* 144 Mhz , for vc01div4 = 250 MHz*/
31862306a36Sopenharmony_ci	{.div = 0x0360D}, /* 148 Mhz , for vc01div4 = 250 MHz*/
31962306a36Sopenharmony_ci	{.div = 0x035E0}, /* 148.5 MHz, for vc01div4 = 250 MHz*/
32062306a36Sopenharmony_ci};
32162306a36Sopenharmony_ci
32262306a36Sopenharmony_ci/* i2s prescaler1 masks */
32362306a36Sopenharmony_cistatic const struct aux_clk_masks i2s_prs1_masks = {
32462306a36Sopenharmony_ci	.eq_sel_mask = AUX_EQ_SEL_MASK,
32562306a36Sopenharmony_ci	.eq_sel_shift = SPEAR1340_I2S_PRS1_EQ_SEL_SHIFT,
32662306a36Sopenharmony_ci	.eq1_mask = AUX_EQ1_SEL,
32762306a36Sopenharmony_ci	.eq2_mask = AUX_EQ2_SEL,
32862306a36Sopenharmony_ci	.xscale_sel_mask = SPEAR1340_I2S_PRS1_CLK_X_MASK,
32962306a36Sopenharmony_ci	.xscale_sel_shift = SPEAR1340_I2S_PRS1_CLK_X_SHIFT,
33062306a36Sopenharmony_ci	.yscale_sel_mask = SPEAR1340_I2S_PRS1_CLK_Y_MASK,
33162306a36Sopenharmony_ci	.yscale_sel_shift = SPEAR1340_I2S_PRS1_CLK_Y_SHIFT,
33262306a36Sopenharmony_ci};
33362306a36Sopenharmony_ci
33462306a36Sopenharmony_ci/* i2s sclk (bit clock) syynthesizers masks */
33562306a36Sopenharmony_cistatic const struct aux_clk_masks i2s_sclk_masks = {
33662306a36Sopenharmony_ci	.eq_sel_mask = AUX_EQ_SEL_MASK,
33762306a36Sopenharmony_ci	.eq_sel_shift = SPEAR1340_I2S_SCLK_EQ_SEL_SHIFT,
33862306a36Sopenharmony_ci	.eq1_mask = AUX_EQ1_SEL,
33962306a36Sopenharmony_ci	.eq2_mask = AUX_EQ2_SEL,
34062306a36Sopenharmony_ci	.xscale_sel_mask = SPEAR1340_I2S_SCLK_X_MASK,
34162306a36Sopenharmony_ci	.xscale_sel_shift = SPEAR1340_I2S_SCLK_X_SHIFT,
34262306a36Sopenharmony_ci	.yscale_sel_mask = SPEAR1340_I2S_SCLK_Y_MASK,
34362306a36Sopenharmony_ci	.yscale_sel_shift = SPEAR1340_I2S_SCLK_Y_SHIFT,
34462306a36Sopenharmony_ci	.enable_bit = SPEAR1340_I2S_SCLK_SYNTH_ENB,
34562306a36Sopenharmony_ci};
34662306a36Sopenharmony_ci
34762306a36Sopenharmony_ci/* i2s prs1 aux rate configuration table, in ascending order of rates */
34862306a36Sopenharmony_cistatic struct aux_rate_tbl i2s_prs1_rtbl[] = {
34962306a36Sopenharmony_ci	/* For parent clk = 49.152 MHz */
35062306a36Sopenharmony_ci	{.xscale = 1, .yscale = 12, .eq = 0}, /* 2.048 MHz, smp freq = 8Khz */
35162306a36Sopenharmony_ci	{.xscale = 11, .yscale = 96, .eq = 0}, /* 2.816 MHz, smp freq = 11Khz */
35262306a36Sopenharmony_ci	{.xscale = 1, .yscale = 6, .eq = 0}, /* 4.096 MHz, smp freq = 16Khz */
35362306a36Sopenharmony_ci	{.xscale = 11, .yscale = 48, .eq = 0}, /* 5.632 MHz, smp freq = 22Khz */
35462306a36Sopenharmony_ci
35562306a36Sopenharmony_ci	/*
35662306a36Sopenharmony_ci	 * with parent clk = 49.152, freq gen is 8.192 MHz, smp freq = 32Khz
35762306a36Sopenharmony_ci	 * with parent clk = 12.288, freq gen is 2.048 MHz, smp freq = 8Khz
35862306a36Sopenharmony_ci	 */
35962306a36Sopenharmony_ci	{.xscale = 1, .yscale = 3, .eq = 0},
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_ci	/* For parent clk = 49.152 MHz */
36262306a36Sopenharmony_ci	{.xscale = 17, .yscale = 37, .eq = 0}, /* 11.289 MHz, smp freq = 44Khz*/
36362306a36Sopenharmony_ci	{.xscale = 1, .yscale = 2, .eq = 0}, /* 12.288 MHz, smp freq = 48Khz*/
36462306a36Sopenharmony_ci};
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_ci/* i2s sclk aux rate configuration table, in ascending order of rates */
36762306a36Sopenharmony_cistatic struct aux_rate_tbl i2s_sclk_rtbl[] = {
36862306a36Sopenharmony_ci	/* For sclk = ref_clk * x/2/y */
36962306a36Sopenharmony_ci	{.xscale = 1, .yscale = 4, .eq = 0},
37062306a36Sopenharmony_ci	{.xscale = 1, .yscale = 2, .eq = 0},
37162306a36Sopenharmony_ci};
37262306a36Sopenharmony_ci
37362306a36Sopenharmony_ci/* adc rate configuration table, in ascending order of rates */
37462306a36Sopenharmony_ci/* possible adc range is 2.5 MHz to 20 MHz. */
37562306a36Sopenharmony_cistatic struct aux_rate_tbl adc_rtbl[] = {
37662306a36Sopenharmony_ci	/* For ahb = 166.67 MHz */
37762306a36Sopenharmony_ci	{.xscale = 1, .yscale = 31, .eq = 0}, /* 2.68 MHz */
37862306a36Sopenharmony_ci	{.xscale = 2, .yscale = 21, .eq = 0}, /* 7.94 MHz */
37962306a36Sopenharmony_ci	{.xscale = 4, .yscale = 21, .eq = 0}, /* 15.87 MHz */
38062306a36Sopenharmony_ci	{.xscale = 10, .yscale = 42, .eq = 0}, /* 19.84 MHz */
38162306a36Sopenharmony_ci};
38262306a36Sopenharmony_ci
38362306a36Sopenharmony_ci/* General synth rate configuration table, in ascending order of rates */
38462306a36Sopenharmony_cistatic struct frac_rate_tbl gen_rtbl[] = {
38562306a36Sopenharmony_ci	{.div = 0x1A92B}, /* 22.5792 MHz for vco1div4=300 MHz*/
38662306a36Sopenharmony_ci	{.div = 0x186A0}, /* 24.576 MHz for vco1div4=300 MHz*/
38762306a36Sopenharmony_ci	{.div = 0x18000}, /* 25 MHz for vco1div4=300 MHz*/
38862306a36Sopenharmony_ci	{.div = 0x1624E}, /* 22.5792 MHz for vco1div4=250 MHz*/
38962306a36Sopenharmony_ci	{.div = 0x14585}, /* 24.576 MHz for vco1div4=250 MHz*/
39062306a36Sopenharmony_ci	{.div = 0x14000}, /* 25 MHz for vco1div4=250 MHz*/
39162306a36Sopenharmony_ci	{.div = 0x0D495}, /* 45.1584 MHz for vco1div4=300 MHz*/
39262306a36Sopenharmony_ci	{.div = 0x0C000}, /* 50 MHz for vco1div4=300 MHz*/
39362306a36Sopenharmony_ci	{.div = 0x0B127}, /* 45.1584 MHz for vco1div4=250 MHz*/
39462306a36Sopenharmony_ci	{.div = 0x0A000}, /* 50 MHz for vco1div4=250 MHz*/
39562306a36Sopenharmony_ci	{.div = 0x07530}, /* 81.92 MHz for vco1div4=300 MHz*/
39662306a36Sopenharmony_ci	{.div = 0x061A8}, /* 81.92 MHz for vco1div4=250 MHz*/
39762306a36Sopenharmony_ci	{.div = 0x06000}, /* 100 MHz for vco1div4=300 MHz*/
39862306a36Sopenharmony_ci	{.div = 0x05000}, /* 100 MHz for vco1div4=250 MHz*/
39962306a36Sopenharmony_ci	{.div = 0x03000}, /* 200 MHz for vco1div4=300 MHz*/
40062306a36Sopenharmony_ci	{.div = 0x02DB6}, /* 210 MHz for vco1div4=300 MHz*/
40162306a36Sopenharmony_ci	{.div = 0x02BA2}, /* 220 MHz for vco1div4=300 MHz*/
40262306a36Sopenharmony_ci	{.div = 0x029BD}, /* 230 MHz for vco1div4=300 MHz*/
40362306a36Sopenharmony_ci	{.div = 0x02800}, /* 200 MHz for vco1div4=250 MHz*/
40462306a36Sopenharmony_ci	{.div = 0x02666}, /* 250 MHz for vco1div4=300 MHz*/
40562306a36Sopenharmony_ci	{.div = 0x02620}, /* 210 MHz for vco1div4=250 MHz*/
40662306a36Sopenharmony_ci	{.div = 0x02460}, /* 220 MHz for vco1div4=250 MHz*/
40762306a36Sopenharmony_ci	{.div = 0x022C0}, /* 230 MHz for vco1div4=250 MHz*/
40862306a36Sopenharmony_ci	{.div = 0x02160}, /* 240 MHz for vco1div4=250 MHz*/
40962306a36Sopenharmony_ci	{.div = 0x02000}, /* 250 MHz for vco1div4=250 MHz*/
41062306a36Sopenharmony_ci};
41162306a36Sopenharmony_ci
41262306a36Sopenharmony_ci/* clock parents */
41362306a36Sopenharmony_cistatic const char *vco_parents[] = { "osc_24m_clk", "osc_25m_clk", };
41462306a36Sopenharmony_cistatic const char *sys_parents[] = { "pll1_clk", "pll1_clk", "pll1_clk",
41562306a36Sopenharmony_ci	"pll1_clk", "sys_syn_clk", "sys_syn_clk", "pll2_clk", "pll3_clk", };
41662306a36Sopenharmony_cistatic const char *ahb_parents[] = { "cpu_div3_clk", "amba_syn_clk", };
41762306a36Sopenharmony_cistatic const char *gpt_parents[] = { "osc_24m_clk", "apb_clk", };
41862306a36Sopenharmony_cistatic const char *uart0_parents[] = { "pll5_clk", "osc_24m_clk",
41962306a36Sopenharmony_ci	"uart0_syn_gclk", };
42062306a36Sopenharmony_cistatic const char *uart1_parents[] = { "pll5_clk", "osc_24m_clk",
42162306a36Sopenharmony_ci	"uart1_syn_gclk", };
42262306a36Sopenharmony_cistatic const char *c3_parents[] = { "pll5_clk", "c3_syn_gclk", };
42362306a36Sopenharmony_cistatic const char *gmac_phy_input_parents[] = { "gmii_pad_clk", "pll2_clk",
42462306a36Sopenharmony_ci	"osc_25m_clk", };
42562306a36Sopenharmony_cistatic const char *gmac_phy_parents[] = { "phy_input_mclk", "phy_syn_gclk", };
42662306a36Sopenharmony_cistatic const char *clcd_synth_parents[] = { "vco1div4_clk", "pll2_clk", };
42762306a36Sopenharmony_cistatic const char *clcd_pixel_parents[] = { "pll5_clk", "clcd_syn_clk", };
42862306a36Sopenharmony_cistatic const char *i2s_src_parents[] = { "vco1div2_clk", "pll2_clk", "pll3_clk",
42962306a36Sopenharmony_ci	"i2s_src_pad_clk", };
43062306a36Sopenharmony_cistatic const char *i2s_ref_parents[] = { "i2s_src_mclk", "i2s_prs1_clk", };
43162306a36Sopenharmony_cistatic const char *spdif_out_parents[] = { "i2s_src_pad_clk", "gen_syn2_clk", };
43262306a36Sopenharmony_cistatic const char *spdif_in_parents[] = { "pll2_clk", "gen_syn3_clk", };
43362306a36Sopenharmony_ci
43462306a36Sopenharmony_cistatic const char *gen_synth0_1_parents[] = { "vco1div4_clk", "vco3div2_clk",
43562306a36Sopenharmony_ci	"pll3_clk", };
43662306a36Sopenharmony_cistatic const char *gen_synth2_3_parents[] = { "vco1div4_clk", "vco2div2_clk",
43762306a36Sopenharmony_ci	"pll2_clk", };
43862306a36Sopenharmony_ci
43962306a36Sopenharmony_civoid __init spear1340_clk_init(void __iomem *misc_base)
44062306a36Sopenharmony_ci{
44162306a36Sopenharmony_ci	struct clk *clk, *clk1;
44262306a36Sopenharmony_ci
44362306a36Sopenharmony_ci	clk = clk_register_fixed_rate(NULL, "osc_32k_clk", NULL, 0, 32000);
44462306a36Sopenharmony_ci	clk_register_clkdev(clk, "osc_32k_clk", NULL);
44562306a36Sopenharmony_ci
44662306a36Sopenharmony_ci	clk = clk_register_fixed_rate(NULL, "osc_24m_clk", NULL, 0, 24000000);
44762306a36Sopenharmony_ci	clk_register_clkdev(clk, "osc_24m_clk", NULL);
44862306a36Sopenharmony_ci
44962306a36Sopenharmony_ci	clk = clk_register_fixed_rate(NULL, "osc_25m_clk", NULL, 0, 25000000);
45062306a36Sopenharmony_ci	clk_register_clkdev(clk, "osc_25m_clk", NULL);
45162306a36Sopenharmony_ci
45262306a36Sopenharmony_ci	clk = clk_register_fixed_rate(NULL, "gmii_pad_clk", NULL, 0, 125000000);
45362306a36Sopenharmony_ci	clk_register_clkdev(clk, "gmii_pad_clk", NULL);
45462306a36Sopenharmony_ci
45562306a36Sopenharmony_ci	clk = clk_register_fixed_rate(NULL, "i2s_src_pad_clk", NULL, 0,
45662306a36Sopenharmony_ci				      12288000);
45762306a36Sopenharmony_ci	clk_register_clkdev(clk, "i2s_src_pad_clk", NULL);
45862306a36Sopenharmony_ci
45962306a36Sopenharmony_ci	/* clock derived from 32 KHz osc clk */
46062306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "rtc-spear", "osc_32k_clk", 0,
46162306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_RTC_CLK_ENB, 0,
46262306a36Sopenharmony_ci			&_lock);
46362306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e0580000.rtc");
46462306a36Sopenharmony_ci
46562306a36Sopenharmony_ci	/* clock derived from 24 or 25 MHz osc clk */
46662306a36Sopenharmony_ci	/* vco-pll */
46762306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "vco1_mclk", vco_parents,
46862306a36Sopenharmony_ci			ARRAY_SIZE(vco_parents), CLK_SET_RATE_NO_REPARENT,
46962306a36Sopenharmony_ci			SPEAR1340_PLL_CFG, SPEAR1340_PLL1_CLK_SHIFT,
47062306a36Sopenharmony_ci			SPEAR1340_PLL_CLK_MASK, 0, &_lock);
47162306a36Sopenharmony_ci	clk_register_clkdev(clk, "vco1_mclk", NULL);
47262306a36Sopenharmony_ci	clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "vco1_mclk", 0,
47362306a36Sopenharmony_ci			SPEAR1340_PLL1_CTR, SPEAR1340_PLL1_FRQ, pll_rtbl,
47462306a36Sopenharmony_ci			ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
47562306a36Sopenharmony_ci	clk_register_clkdev(clk, "vco1_clk", NULL);
47662306a36Sopenharmony_ci	clk_register_clkdev(clk1, "pll1_clk", NULL);
47762306a36Sopenharmony_ci
47862306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "vco2_mclk", vco_parents,
47962306a36Sopenharmony_ci			ARRAY_SIZE(vco_parents), CLK_SET_RATE_NO_REPARENT,
48062306a36Sopenharmony_ci			SPEAR1340_PLL_CFG, SPEAR1340_PLL2_CLK_SHIFT,
48162306a36Sopenharmony_ci			SPEAR1340_PLL_CLK_MASK, 0, &_lock);
48262306a36Sopenharmony_ci	clk_register_clkdev(clk, "vco2_mclk", NULL);
48362306a36Sopenharmony_ci	clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, "vco2_mclk", 0,
48462306a36Sopenharmony_ci			SPEAR1340_PLL2_CTR, SPEAR1340_PLL2_FRQ, pll_rtbl,
48562306a36Sopenharmony_ci			ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
48662306a36Sopenharmony_ci	clk_register_clkdev(clk, "vco2_clk", NULL);
48762306a36Sopenharmony_ci	clk_register_clkdev(clk1, "pll2_clk", NULL);
48862306a36Sopenharmony_ci
48962306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "vco3_mclk", vco_parents,
49062306a36Sopenharmony_ci			ARRAY_SIZE(vco_parents), CLK_SET_RATE_NO_REPARENT,
49162306a36Sopenharmony_ci			SPEAR1340_PLL_CFG, SPEAR1340_PLL3_CLK_SHIFT,
49262306a36Sopenharmony_ci			SPEAR1340_PLL_CLK_MASK, 0, &_lock);
49362306a36Sopenharmony_ci	clk_register_clkdev(clk, "vco3_mclk", NULL);
49462306a36Sopenharmony_ci	clk = clk_register_vco_pll("vco3_clk", "pll3_clk", NULL, "vco3_mclk", 0,
49562306a36Sopenharmony_ci			SPEAR1340_PLL3_CTR, SPEAR1340_PLL3_FRQ, pll_rtbl,
49662306a36Sopenharmony_ci			ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
49762306a36Sopenharmony_ci	clk_register_clkdev(clk, "vco3_clk", NULL);
49862306a36Sopenharmony_ci	clk_register_clkdev(clk1, "pll3_clk", NULL);
49962306a36Sopenharmony_ci
50062306a36Sopenharmony_ci	clk = clk_register_vco_pll("vco4_clk", "pll4_clk", NULL, "osc_24m_clk",
50162306a36Sopenharmony_ci			0, SPEAR1340_PLL4_CTR, SPEAR1340_PLL4_FRQ, pll4_rtbl,
50262306a36Sopenharmony_ci			ARRAY_SIZE(pll4_rtbl), &_lock, &clk1, NULL);
50362306a36Sopenharmony_ci	clk_register_clkdev(clk, "vco4_clk", NULL);
50462306a36Sopenharmony_ci	clk_register_clkdev(clk1, "pll4_clk", NULL);
50562306a36Sopenharmony_ci
50662306a36Sopenharmony_ci	clk = clk_register_fixed_rate(NULL, "pll5_clk", "osc_24m_clk", 0,
50762306a36Sopenharmony_ci			48000000);
50862306a36Sopenharmony_ci	clk_register_clkdev(clk, "pll5_clk", NULL);
50962306a36Sopenharmony_ci
51062306a36Sopenharmony_ci	clk = clk_register_fixed_rate(NULL, "pll6_clk", "osc_25m_clk", 0,
51162306a36Sopenharmony_ci			25000000);
51262306a36Sopenharmony_ci	clk_register_clkdev(clk, "pll6_clk", NULL);
51362306a36Sopenharmony_ci
51462306a36Sopenharmony_ci	/* vco div n clocks */
51562306a36Sopenharmony_ci	clk = clk_register_fixed_factor(NULL, "vco1div2_clk", "vco1_clk", 0, 1,
51662306a36Sopenharmony_ci			2);
51762306a36Sopenharmony_ci	clk_register_clkdev(clk, "vco1div2_clk", NULL);
51862306a36Sopenharmony_ci
51962306a36Sopenharmony_ci	clk = clk_register_fixed_factor(NULL, "vco1div4_clk", "vco1_clk", 0, 1,
52062306a36Sopenharmony_ci			4);
52162306a36Sopenharmony_ci	clk_register_clkdev(clk, "vco1div4_clk", NULL);
52262306a36Sopenharmony_ci
52362306a36Sopenharmony_ci	clk = clk_register_fixed_factor(NULL, "vco2div2_clk", "vco2_clk", 0, 1,
52462306a36Sopenharmony_ci			2);
52562306a36Sopenharmony_ci	clk_register_clkdev(clk, "vco2div2_clk", NULL);
52662306a36Sopenharmony_ci
52762306a36Sopenharmony_ci	clk = clk_register_fixed_factor(NULL, "vco3div2_clk", "vco3_clk", 0, 1,
52862306a36Sopenharmony_ci			2);
52962306a36Sopenharmony_ci	clk_register_clkdev(clk, "vco3div2_clk", NULL);
53062306a36Sopenharmony_ci
53162306a36Sopenharmony_ci	/* peripherals */
53262306a36Sopenharmony_ci	clk_register_fixed_factor(NULL, "thermal_clk", "osc_24m_clk", 0, 1,
53362306a36Sopenharmony_ci			128);
53462306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "thermal_gclk", "thermal_clk", 0,
53562306a36Sopenharmony_ci			SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_THSENS_CLK_ENB, 0,
53662306a36Sopenharmony_ci			&_lock);
53762306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e07008c4.thermal");
53862306a36Sopenharmony_ci
53962306a36Sopenharmony_ci	/* clock derived from pll4 clk */
54062306a36Sopenharmony_ci	clk = clk_register_fixed_factor(NULL, "ddr_clk", "pll4_clk", 0, 1,
54162306a36Sopenharmony_ci			1);
54262306a36Sopenharmony_ci	clk_register_clkdev(clk, "ddr_clk", NULL);
54362306a36Sopenharmony_ci
54462306a36Sopenharmony_ci	/* clock derived from pll1 clk */
54562306a36Sopenharmony_ci	clk = clk_register_frac("sys_syn_clk", "vco1div2_clk", 0,
54662306a36Sopenharmony_ci			SPEAR1340_SYS_CLK_SYNT, sys_synth_rtbl,
54762306a36Sopenharmony_ci			ARRAY_SIZE(sys_synth_rtbl), &_lock);
54862306a36Sopenharmony_ci	clk_register_clkdev(clk, "sys_syn_clk", NULL);
54962306a36Sopenharmony_ci
55062306a36Sopenharmony_ci	clk = clk_register_frac("amba_syn_clk", "vco1div2_clk", 0,
55162306a36Sopenharmony_ci			SPEAR1340_AMBA_CLK_SYNT, amba_synth_rtbl,
55262306a36Sopenharmony_ci			ARRAY_SIZE(amba_synth_rtbl), &_lock);
55362306a36Sopenharmony_ci	clk_register_clkdev(clk, "amba_syn_clk", NULL);
55462306a36Sopenharmony_ci
55562306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "sys_mclk", sys_parents,
55662306a36Sopenharmony_ci			ARRAY_SIZE(sys_parents), CLK_SET_RATE_NO_REPARENT,
55762306a36Sopenharmony_ci			SPEAR1340_SYS_CLK_CTRL, SPEAR1340_SCLK_SRC_SEL_SHIFT,
55862306a36Sopenharmony_ci			SPEAR1340_SCLK_SRC_SEL_MASK, 0, &_lock);
55962306a36Sopenharmony_ci	clk_register_clkdev(clk, "sys_mclk", NULL);
56062306a36Sopenharmony_ci
56162306a36Sopenharmony_ci	clk = clk_register_fixed_factor(NULL, "cpu_clk", "sys_mclk", 0, 1,
56262306a36Sopenharmony_ci			2);
56362306a36Sopenharmony_ci	clk_register_clkdev(clk, "cpu_clk", NULL);
56462306a36Sopenharmony_ci
56562306a36Sopenharmony_ci	clk = clk_register_fixed_factor(NULL, "cpu_div3_clk", "cpu_clk", 0, 1,
56662306a36Sopenharmony_ci			3);
56762306a36Sopenharmony_ci	clk_register_clkdev(clk, "cpu_div3_clk", NULL);
56862306a36Sopenharmony_ci
56962306a36Sopenharmony_ci	clk = clk_register_fixed_factor(NULL, "wdt_clk", "cpu_clk", 0, 1,
57062306a36Sopenharmony_ci			2);
57162306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "ec800620.wdt");
57262306a36Sopenharmony_ci
57362306a36Sopenharmony_ci	clk = clk_register_fixed_factor(NULL, "smp_twd_clk", "cpu_clk", 0, 1,
57462306a36Sopenharmony_ci			2);
57562306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "smp_twd");
57662306a36Sopenharmony_ci
57762306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "ahb_clk", ahb_parents,
57862306a36Sopenharmony_ci			ARRAY_SIZE(ahb_parents), CLK_SET_RATE_NO_REPARENT,
57962306a36Sopenharmony_ci			SPEAR1340_SYS_CLK_CTRL, SPEAR1340_HCLK_SRC_SEL_SHIFT,
58062306a36Sopenharmony_ci			SPEAR1340_HCLK_SRC_SEL_MASK, 0, &_lock);
58162306a36Sopenharmony_ci	clk_register_clkdev(clk, "ahb_clk", NULL);
58262306a36Sopenharmony_ci
58362306a36Sopenharmony_ci	clk = clk_register_fixed_factor(NULL, "apb_clk", "ahb_clk", 0, 1,
58462306a36Sopenharmony_ci			2);
58562306a36Sopenharmony_ci	clk_register_clkdev(clk, "apb_clk", NULL);
58662306a36Sopenharmony_ci
58762306a36Sopenharmony_ci	/* gpt clocks */
58862306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "gpt0_mclk", gpt_parents,
58962306a36Sopenharmony_ci			ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
59062306a36Sopenharmony_ci			SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GPT0_CLK_SHIFT,
59162306a36Sopenharmony_ci			SPEAR1340_GPT_CLK_MASK, 0, &_lock);
59262306a36Sopenharmony_ci	clk_register_clkdev(clk, "gpt0_mclk", NULL);
59362306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "gpt0_clk", "gpt0_mclk", 0,
59462306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPT0_CLK_ENB, 0,
59562306a36Sopenharmony_ci			&_lock);
59662306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "gpt0");
59762306a36Sopenharmony_ci
59862306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "gpt1_mclk", gpt_parents,
59962306a36Sopenharmony_ci			ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
60062306a36Sopenharmony_ci			SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GPT1_CLK_SHIFT,
60162306a36Sopenharmony_ci			SPEAR1340_GPT_CLK_MASK, 0, &_lock);
60262306a36Sopenharmony_ci	clk_register_clkdev(clk, "gpt1_mclk", NULL);
60362306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mclk", 0,
60462306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPT1_CLK_ENB, 0,
60562306a36Sopenharmony_ci			&_lock);
60662306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "gpt1");
60762306a36Sopenharmony_ci
60862306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "gpt2_mclk", gpt_parents,
60962306a36Sopenharmony_ci			ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
61062306a36Sopenharmony_ci			SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GPT2_CLK_SHIFT,
61162306a36Sopenharmony_ci			SPEAR1340_GPT_CLK_MASK, 0, &_lock);
61262306a36Sopenharmony_ci	clk_register_clkdev(clk, "gpt2_mclk", NULL);
61362306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mclk", 0,
61462306a36Sopenharmony_ci			SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_GPT2_CLK_ENB, 0,
61562306a36Sopenharmony_ci			&_lock);
61662306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "gpt2");
61762306a36Sopenharmony_ci
61862306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "gpt3_mclk", gpt_parents,
61962306a36Sopenharmony_ci			ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
62062306a36Sopenharmony_ci			SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GPT3_CLK_SHIFT,
62162306a36Sopenharmony_ci			SPEAR1340_GPT_CLK_MASK, 0, &_lock);
62262306a36Sopenharmony_ci	clk_register_clkdev(clk, "gpt3_mclk", NULL);
62362306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mclk", 0,
62462306a36Sopenharmony_ci			SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_GPT3_CLK_ENB, 0,
62562306a36Sopenharmony_ci			&_lock);
62662306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "gpt3");
62762306a36Sopenharmony_ci
62862306a36Sopenharmony_ci	/* others */
62962306a36Sopenharmony_ci	clk = clk_register_aux("uart0_syn_clk", "uart0_syn_gclk",
63062306a36Sopenharmony_ci			"vco1div2_clk", 0, SPEAR1340_UART0_CLK_SYNT, NULL,
63162306a36Sopenharmony_ci			aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
63262306a36Sopenharmony_ci	clk_register_clkdev(clk, "uart0_syn_clk", NULL);
63362306a36Sopenharmony_ci	clk_register_clkdev(clk1, "uart0_syn_gclk", NULL);
63462306a36Sopenharmony_ci
63562306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "uart0_mclk", uart0_parents,
63662306a36Sopenharmony_ci			ARRAY_SIZE(uart0_parents),
63762306a36Sopenharmony_ci			CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
63862306a36Sopenharmony_ci			SPEAR1340_PERIP_CLK_CFG, SPEAR1340_UART0_CLK_SHIFT,
63962306a36Sopenharmony_ci			SPEAR1340_UART_CLK_MASK, 0, &_lock);
64062306a36Sopenharmony_ci	clk_register_clkdev(clk, "uart0_mclk", NULL);
64162306a36Sopenharmony_ci
64262306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "uart0_clk", "uart0_mclk",
64362306a36Sopenharmony_ci			CLK_SET_RATE_PARENT, SPEAR1340_PERIP1_CLK_ENB,
64462306a36Sopenharmony_ci			SPEAR1340_UART0_CLK_ENB, 0, &_lock);
64562306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e0000000.serial");
64662306a36Sopenharmony_ci
64762306a36Sopenharmony_ci	clk = clk_register_aux("uart1_syn_clk", "uart1_syn_gclk",
64862306a36Sopenharmony_ci			"vco1div2_clk", 0, SPEAR1340_UART1_CLK_SYNT, NULL,
64962306a36Sopenharmony_ci			aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
65062306a36Sopenharmony_ci	clk_register_clkdev(clk, "uart1_syn_clk", NULL);
65162306a36Sopenharmony_ci	clk_register_clkdev(clk1, "uart1_syn_gclk", NULL);
65262306a36Sopenharmony_ci
65362306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "uart1_mclk", uart1_parents,
65462306a36Sopenharmony_ci			ARRAY_SIZE(uart1_parents), CLK_SET_RATE_NO_REPARENT,
65562306a36Sopenharmony_ci			SPEAR1340_PERIP_CLK_CFG, SPEAR1340_UART1_CLK_SHIFT,
65662306a36Sopenharmony_ci			SPEAR1340_UART_CLK_MASK, 0, &_lock);
65762306a36Sopenharmony_ci	clk_register_clkdev(clk, "uart1_mclk", NULL);
65862306a36Sopenharmony_ci
65962306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "uart1_clk", "uart1_mclk", 0,
66062306a36Sopenharmony_ci			SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_UART1_CLK_ENB, 0,
66162306a36Sopenharmony_ci			&_lock);
66262306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "b4100000.serial");
66362306a36Sopenharmony_ci
66462306a36Sopenharmony_ci	clk = clk_register_aux("sdhci_syn_clk", "sdhci_syn_gclk",
66562306a36Sopenharmony_ci			"vco1div2_clk", 0, SPEAR1340_SDHCI_CLK_SYNT, NULL,
66662306a36Sopenharmony_ci			aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
66762306a36Sopenharmony_ci	clk_register_clkdev(clk, "sdhci_syn_clk", NULL);
66862306a36Sopenharmony_ci	clk_register_clkdev(clk1, "sdhci_syn_gclk", NULL);
66962306a36Sopenharmony_ci
67062306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "sdhci_clk", "sdhci_syn_gclk",
67162306a36Sopenharmony_ci			CLK_SET_RATE_PARENT, SPEAR1340_PERIP1_CLK_ENB,
67262306a36Sopenharmony_ci			SPEAR1340_SDHCI_CLK_ENB, 0, &_lock);
67362306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "b3000000.sdhci");
67462306a36Sopenharmony_ci
67562306a36Sopenharmony_ci	clk = clk_register_aux("cfxd_syn_clk", "cfxd_syn_gclk", "vco1div2_clk",
67662306a36Sopenharmony_ci			0, SPEAR1340_CFXD_CLK_SYNT, NULL, aux_rtbl,
67762306a36Sopenharmony_ci			ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
67862306a36Sopenharmony_ci	clk_register_clkdev(clk, "cfxd_syn_clk", NULL);
67962306a36Sopenharmony_ci	clk_register_clkdev(clk1, "cfxd_syn_gclk", NULL);
68062306a36Sopenharmony_ci
68162306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "cfxd_clk", "cfxd_syn_gclk",
68262306a36Sopenharmony_ci			CLK_SET_RATE_PARENT, SPEAR1340_PERIP1_CLK_ENB,
68362306a36Sopenharmony_ci			SPEAR1340_CFXD_CLK_ENB, 0, &_lock);
68462306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "b2800000.cf");
68562306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "arasan_xd");
68662306a36Sopenharmony_ci
68762306a36Sopenharmony_ci	clk = clk_register_aux("c3_syn_clk", "c3_syn_gclk", "vco1div2_clk", 0,
68862306a36Sopenharmony_ci			SPEAR1340_C3_CLK_SYNT, NULL, aux_rtbl,
68962306a36Sopenharmony_ci			ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
69062306a36Sopenharmony_ci	clk_register_clkdev(clk, "c3_syn_clk", NULL);
69162306a36Sopenharmony_ci	clk_register_clkdev(clk1, "c3_syn_gclk", NULL);
69262306a36Sopenharmony_ci
69362306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "c3_mclk", c3_parents,
69462306a36Sopenharmony_ci			ARRAY_SIZE(c3_parents),
69562306a36Sopenharmony_ci			CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
69662306a36Sopenharmony_ci			SPEAR1340_PERIP_CLK_CFG, SPEAR1340_C3_CLK_SHIFT,
69762306a36Sopenharmony_ci			SPEAR1340_C3_CLK_MASK, 0, &_lock);
69862306a36Sopenharmony_ci	clk_register_clkdev(clk, "c3_mclk", NULL);
69962306a36Sopenharmony_ci
70062306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "c3_clk", "c3_mclk", CLK_SET_RATE_PARENT,
70162306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_C3_CLK_ENB, 0,
70262306a36Sopenharmony_ci			&_lock);
70362306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e1800000.c3");
70462306a36Sopenharmony_ci
70562306a36Sopenharmony_ci	/* gmac */
70662306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "phy_input_mclk", gmac_phy_input_parents,
70762306a36Sopenharmony_ci			ARRAY_SIZE(gmac_phy_input_parents),
70862306a36Sopenharmony_ci			CLK_SET_RATE_NO_REPARENT, SPEAR1340_GMAC_CLK_CFG,
70962306a36Sopenharmony_ci			SPEAR1340_GMAC_PHY_INPUT_CLK_SHIFT,
71062306a36Sopenharmony_ci			SPEAR1340_GMAC_PHY_INPUT_CLK_MASK, 0, &_lock);
71162306a36Sopenharmony_ci	clk_register_clkdev(clk, "phy_input_mclk", NULL);
71262306a36Sopenharmony_ci
71362306a36Sopenharmony_ci	clk = clk_register_aux("phy_syn_clk", "phy_syn_gclk", "phy_input_mclk",
71462306a36Sopenharmony_ci			0, SPEAR1340_GMAC_CLK_SYNT, NULL, gmac_rtbl,
71562306a36Sopenharmony_ci			ARRAY_SIZE(gmac_rtbl), &_lock, &clk1);
71662306a36Sopenharmony_ci	clk_register_clkdev(clk, "phy_syn_clk", NULL);
71762306a36Sopenharmony_ci	clk_register_clkdev(clk1, "phy_syn_gclk", NULL);
71862306a36Sopenharmony_ci
71962306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "phy_mclk", gmac_phy_parents,
72062306a36Sopenharmony_ci			ARRAY_SIZE(gmac_phy_parents), CLK_SET_RATE_NO_REPARENT,
72162306a36Sopenharmony_ci			SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GMAC_PHY_CLK_SHIFT,
72262306a36Sopenharmony_ci			SPEAR1340_GMAC_PHY_CLK_MASK, 0, &_lock);
72362306a36Sopenharmony_ci	clk_register_clkdev(clk, "stmmacphy.0", NULL);
72462306a36Sopenharmony_ci
72562306a36Sopenharmony_ci	/* clcd */
72662306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "clcd_syn_mclk", clcd_synth_parents,
72762306a36Sopenharmony_ci			ARRAY_SIZE(clcd_synth_parents),
72862306a36Sopenharmony_ci			CLK_SET_RATE_NO_REPARENT, SPEAR1340_CLCD_CLK_SYNT,
72962306a36Sopenharmony_ci			SPEAR1340_CLCD_SYNT_CLK_SHIFT,
73062306a36Sopenharmony_ci			SPEAR1340_CLCD_SYNT_CLK_MASK, 0, &_lock);
73162306a36Sopenharmony_ci	clk_register_clkdev(clk, "clcd_syn_mclk", NULL);
73262306a36Sopenharmony_ci
73362306a36Sopenharmony_ci	clk = clk_register_frac("clcd_syn_clk", "clcd_syn_mclk", 0,
73462306a36Sopenharmony_ci			SPEAR1340_CLCD_CLK_SYNT, clcd_rtbl,
73562306a36Sopenharmony_ci			ARRAY_SIZE(clcd_rtbl), &_lock);
73662306a36Sopenharmony_ci	clk_register_clkdev(clk, "clcd_syn_clk", NULL);
73762306a36Sopenharmony_ci
73862306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "clcd_pixel_mclk", clcd_pixel_parents,
73962306a36Sopenharmony_ci			ARRAY_SIZE(clcd_pixel_parents),
74062306a36Sopenharmony_ci			CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
74162306a36Sopenharmony_ci			SPEAR1340_PERIP_CLK_CFG, SPEAR1340_CLCD_CLK_SHIFT,
74262306a36Sopenharmony_ci			SPEAR1340_CLCD_CLK_MASK, 0, &_lock);
74362306a36Sopenharmony_ci	clk_register_clkdev(clk, "clcd_pixel_mclk", NULL);
74462306a36Sopenharmony_ci
74562306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "clcd_clk", "clcd_pixel_mclk", 0,
74662306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_CLCD_CLK_ENB, 0,
74762306a36Sopenharmony_ci			&_lock);
74862306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e1000000.clcd");
74962306a36Sopenharmony_ci
75062306a36Sopenharmony_ci	/* i2s */
75162306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "i2s_src_mclk", i2s_src_parents,
75262306a36Sopenharmony_ci			ARRAY_SIZE(i2s_src_parents), CLK_SET_RATE_NO_REPARENT,
75362306a36Sopenharmony_ci			SPEAR1340_I2S_CLK_CFG, SPEAR1340_I2S_SRC_CLK_SHIFT,
75462306a36Sopenharmony_ci			SPEAR1340_I2S_SRC_CLK_MASK, 0, &_lock);
75562306a36Sopenharmony_ci	clk_register_clkdev(clk, "i2s_src_mclk", NULL);
75662306a36Sopenharmony_ci
75762306a36Sopenharmony_ci	clk = clk_register_aux("i2s_prs1_clk", NULL, "i2s_src_mclk",
75862306a36Sopenharmony_ci			CLK_SET_RATE_PARENT, SPEAR1340_I2S_CLK_CFG,
75962306a36Sopenharmony_ci			&i2s_prs1_masks, i2s_prs1_rtbl,
76062306a36Sopenharmony_ci			ARRAY_SIZE(i2s_prs1_rtbl), &_lock, NULL);
76162306a36Sopenharmony_ci	clk_register_clkdev(clk, "i2s_prs1_clk", NULL);
76262306a36Sopenharmony_ci
76362306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "i2s_ref_mclk", i2s_ref_parents,
76462306a36Sopenharmony_ci			ARRAY_SIZE(i2s_ref_parents),
76562306a36Sopenharmony_ci			CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
76662306a36Sopenharmony_ci			SPEAR1340_I2S_CLK_CFG, SPEAR1340_I2S_REF_SHIFT,
76762306a36Sopenharmony_ci			SPEAR1340_I2S_REF_SEL_MASK, 0, &_lock);
76862306a36Sopenharmony_ci	clk_register_clkdev(clk, "i2s_ref_mclk", NULL);
76962306a36Sopenharmony_ci
77062306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "i2s_ref_pad_clk", "i2s_ref_mclk", 0,
77162306a36Sopenharmony_ci			SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_I2S_REF_PAD_CLK_ENB,
77262306a36Sopenharmony_ci			0, &_lock);
77362306a36Sopenharmony_ci	clk_register_clkdev(clk, "i2s_ref_pad_clk", NULL);
77462306a36Sopenharmony_ci
77562306a36Sopenharmony_ci	clk = clk_register_aux("i2s_sclk_clk", "i2s_sclk_gclk", "i2s_ref_mclk",
77662306a36Sopenharmony_ci			0, SPEAR1340_I2S_CLK_CFG, &i2s_sclk_masks,
77762306a36Sopenharmony_ci			i2s_sclk_rtbl, ARRAY_SIZE(i2s_sclk_rtbl), &_lock,
77862306a36Sopenharmony_ci			&clk1);
77962306a36Sopenharmony_ci	clk_register_clkdev(clk, "i2s_sclk_clk", NULL);
78062306a36Sopenharmony_ci	clk_register_clkdev(clk1, "i2s_sclk_gclk", NULL);
78162306a36Sopenharmony_ci
78262306a36Sopenharmony_ci	/* clock derived from ahb clk */
78362306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "i2c0_clk", "ahb_clk", 0,
78462306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_I2C0_CLK_ENB, 0,
78562306a36Sopenharmony_ci			&_lock);
78662306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e0280000.i2c");
78762306a36Sopenharmony_ci
78862306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "i2c1_clk", "ahb_clk", 0,
78962306a36Sopenharmony_ci			SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_I2C1_CLK_ENB, 0,
79062306a36Sopenharmony_ci			&_lock);
79162306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "b4000000.i2c");
79262306a36Sopenharmony_ci
79362306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "dma_clk", "ahb_clk", 0,
79462306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_DMA_CLK_ENB, 0,
79562306a36Sopenharmony_ci			&_lock);
79662306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "ea800000.dma");
79762306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "eb000000.dma");
79862306a36Sopenharmony_ci
79962306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "gmac_clk", "ahb_clk", 0,
80062306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GMAC_CLK_ENB, 0,
80162306a36Sopenharmony_ci			&_lock);
80262306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e2000000.eth");
80362306a36Sopenharmony_ci
80462306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "fsmc_clk", "ahb_clk", 0,
80562306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_FSMC_CLK_ENB, 0,
80662306a36Sopenharmony_ci			&_lock);
80762306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "b0000000.flash");
80862306a36Sopenharmony_ci
80962306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "smi_clk", "ahb_clk", 0,
81062306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_SMI_CLK_ENB, 0,
81162306a36Sopenharmony_ci			&_lock);
81262306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "ea000000.flash");
81362306a36Sopenharmony_ci
81462306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "usbh0_clk", "ahb_clk", 0,
81562306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_UHC0_CLK_ENB, 0,
81662306a36Sopenharmony_ci			&_lock);
81762306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e4000000.ohci");
81862306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e4800000.ehci");
81962306a36Sopenharmony_ci
82062306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "usbh1_clk", "ahb_clk", 0,
82162306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_UHC1_CLK_ENB, 0,
82262306a36Sopenharmony_ci			&_lock);
82362306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e5000000.ohci");
82462306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e5800000.ehci");
82562306a36Sopenharmony_ci
82662306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "uoc_clk", "ahb_clk", 0,
82762306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_UOC_CLK_ENB, 0,
82862306a36Sopenharmony_ci			&_lock);
82962306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e3800000.otg");
83062306a36Sopenharmony_ci
83162306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "pcie_sata_clk", "ahb_clk", 0,
83262306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_PCIE_SATA_CLK_ENB,
83362306a36Sopenharmony_ci			0, &_lock);
83462306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "b1000000.pcie");
83562306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "b1000000.ahci");
83662306a36Sopenharmony_ci
83762306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "sysram0_clk", "ahb_clk", 0,
83862306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_SYSRAM0_CLK_ENB, 0,
83962306a36Sopenharmony_ci			&_lock);
84062306a36Sopenharmony_ci	clk_register_clkdev(clk, "sysram0_clk", NULL);
84162306a36Sopenharmony_ci
84262306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "sysram1_clk", "ahb_clk", 0,
84362306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_SYSRAM1_CLK_ENB, 0,
84462306a36Sopenharmony_ci			&_lock);
84562306a36Sopenharmony_ci	clk_register_clkdev(clk, "sysram1_clk", NULL);
84662306a36Sopenharmony_ci
84762306a36Sopenharmony_ci	clk = clk_register_aux("adc_syn_clk", "adc_syn_gclk", "ahb_clk",
84862306a36Sopenharmony_ci			0, SPEAR1340_ADC_CLK_SYNT, NULL, adc_rtbl,
84962306a36Sopenharmony_ci			ARRAY_SIZE(adc_rtbl), &_lock, &clk1);
85062306a36Sopenharmony_ci	clk_register_clkdev(clk, "adc_syn_clk", NULL);
85162306a36Sopenharmony_ci	clk_register_clkdev(clk1, "adc_syn_gclk", NULL);
85262306a36Sopenharmony_ci
85362306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "adc_clk", "adc_syn_gclk",
85462306a36Sopenharmony_ci			CLK_SET_RATE_PARENT, SPEAR1340_PERIP1_CLK_ENB,
85562306a36Sopenharmony_ci			SPEAR1340_ADC_CLK_ENB, 0, &_lock);
85662306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e0080000.adc");
85762306a36Sopenharmony_ci
85862306a36Sopenharmony_ci	/* clock derived from apb clk */
85962306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "ssp_clk", "apb_clk", 0,
86062306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_SSP_CLK_ENB, 0,
86162306a36Sopenharmony_ci			&_lock);
86262306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e0100000.spi");
86362306a36Sopenharmony_ci
86462306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "gpio0_clk", "apb_clk", 0,
86562306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPIO0_CLK_ENB, 0,
86662306a36Sopenharmony_ci			&_lock);
86762306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e0600000.gpio");
86862306a36Sopenharmony_ci
86962306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "gpio1_clk", "apb_clk", 0,
87062306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPIO1_CLK_ENB, 0,
87162306a36Sopenharmony_ci			&_lock);
87262306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e0680000.gpio");
87362306a36Sopenharmony_ci
87462306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "i2s_play_clk", "apb_clk", 0,
87562306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_I2S_PLAY_CLK_ENB, 0,
87662306a36Sopenharmony_ci			&_lock);
87762306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "b2400000.i2s-play");
87862306a36Sopenharmony_ci
87962306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "i2s_rec_clk", "apb_clk", 0,
88062306a36Sopenharmony_ci			SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_I2S_REC_CLK_ENB, 0,
88162306a36Sopenharmony_ci			&_lock);
88262306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "b2000000.i2s-rec");
88362306a36Sopenharmony_ci
88462306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "kbd_clk", "apb_clk", 0,
88562306a36Sopenharmony_ci			SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_KBD_CLK_ENB, 0,
88662306a36Sopenharmony_ci			&_lock);
88762306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e0300000.kbd");
88862306a36Sopenharmony_ci
88962306a36Sopenharmony_ci	/* RAS clks */
89062306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "gen_syn0_1_mclk", gen_synth0_1_parents,
89162306a36Sopenharmony_ci			ARRAY_SIZE(gen_synth0_1_parents),
89262306a36Sopenharmony_ci			CLK_SET_RATE_NO_REPARENT, SPEAR1340_PLL_CFG,
89362306a36Sopenharmony_ci			SPEAR1340_GEN_SYNT0_1_CLK_SHIFT,
89462306a36Sopenharmony_ci			SPEAR1340_GEN_SYNT_CLK_MASK, 0, &_lock);
89562306a36Sopenharmony_ci	clk_register_clkdev(clk, "gen_syn0_1_mclk", NULL);
89662306a36Sopenharmony_ci
89762306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "gen_syn2_3_mclk", gen_synth2_3_parents,
89862306a36Sopenharmony_ci			ARRAY_SIZE(gen_synth2_3_parents),
89962306a36Sopenharmony_ci			CLK_SET_RATE_NO_REPARENT, SPEAR1340_PLL_CFG,
90062306a36Sopenharmony_ci			SPEAR1340_GEN_SYNT2_3_CLK_SHIFT,
90162306a36Sopenharmony_ci			SPEAR1340_GEN_SYNT_CLK_MASK, 0, &_lock);
90262306a36Sopenharmony_ci	clk_register_clkdev(clk, "gen_syn2_3_mclk", NULL);
90362306a36Sopenharmony_ci
90462306a36Sopenharmony_ci	clk = clk_register_frac("gen_syn0_clk", "gen_syn0_1_mclk", 0,
90562306a36Sopenharmony_ci			SPEAR1340_GEN_CLK_SYNT0, gen_rtbl, ARRAY_SIZE(gen_rtbl),
90662306a36Sopenharmony_ci			&_lock);
90762306a36Sopenharmony_ci	clk_register_clkdev(clk, "gen_syn0_clk", NULL);
90862306a36Sopenharmony_ci
90962306a36Sopenharmony_ci	clk = clk_register_frac("gen_syn1_clk", "gen_syn0_1_mclk", 0,
91062306a36Sopenharmony_ci			SPEAR1340_GEN_CLK_SYNT1, gen_rtbl, ARRAY_SIZE(gen_rtbl),
91162306a36Sopenharmony_ci			&_lock);
91262306a36Sopenharmony_ci	clk_register_clkdev(clk, "gen_syn1_clk", NULL);
91362306a36Sopenharmony_ci
91462306a36Sopenharmony_ci	clk = clk_register_frac("gen_syn2_clk", "gen_syn2_3_mclk", 0,
91562306a36Sopenharmony_ci			SPEAR1340_GEN_CLK_SYNT2, gen_rtbl, ARRAY_SIZE(gen_rtbl),
91662306a36Sopenharmony_ci			&_lock);
91762306a36Sopenharmony_ci	clk_register_clkdev(clk, "gen_syn2_clk", NULL);
91862306a36Sopenharmony_ci
91962306a36Sopenharmony_ci	clk = clk_register_frac("gen_syn3_clk", "gen_syn2_3_mclk", 0,
92062306a36Sopenharmony_ci			SPEAR1340_GEN_CLK_SYNT3, gen_rtbl, ARRAY_SIZE(gen_rtbl),
92162306a36Sopenharmony_ci			&_lock);
92262306a36Sopenharmony_ci	clk_register_clkdev(clk, "gen_syn3_clk", NULL);
92362306a36Sopenharmony_ci
92462306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "mali_clk", "gen_syn3_clk",
92562306a36Sopenharmony_ci			CLK_SET_RATE_PARENT, SPEAR1340_PERIP3_CLK_ENB,
92662306a36Sopenharmony_ci			SPEAR1340_MALI_CLK_ENB, 0, &_lock);
92762306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "mali");
92862306a36Sopenharmony_ci
92962306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "cec0_clk", "ahb_clk", 0,
93062306a36Sopenharmony_ci			SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CEC0_CLK_ENB, 0,
93162306a36Sopenharmony_ci			&_lock);
93262306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "spear_cec.0");
93362306a36Sopenharmony_ci
93462306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "cec1_clk", "ahb_clk", 0,
93562306a36Sopenharmony_ci			SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CEC1_CLK_ENB, 0,
93662306a36Sopenharmony_ci			&_lock);
93762306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "spear_cec.1");
93862306a36Sopenharmony_ci
93962306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "spdif_out_mclk", spdif_out_parents,
94062306a36Sopenharmony_ci			ARRAY_SIZE(spdif_out_parents),
94162306a36Sopenharmony_ci			CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
94262306a36Sopenharmony_ci			SPEAR1340_PERIP_CLK_CFG, SPEAR1340_SPDIF_OUT_CLK_SHIFT,
94362306a36Sopenharmony_ci			SPEAR1340_SPDIF_CLK_MASK, 0, &_lock);
94462306a36Sopenharmony_ci	clk_register_clkdev(clk, "spdif_out_mclk", NULL);
94562306a36Sopenharmony_ci
94662306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "spdif_out_clk", "spdif_out_mclk",
94762306a36Sopenharmony_ci			CLK_SET_RATE_PARENT, SPEAR1340_PERIP3_CLK_ENB,
94862306a36Sopenharmony_ci			SPEAR1340_SPDIF_OUT_CLK_ENB, 0, &_lock);
94962306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "d0000000.spdif-out");
95062306a36Sopenharmony_ci
95162306a36Sopenharmony_ci	clk = clk_register_mux(NULL, "spdif_in_mclk", spdif_in_parents,
95262306a36Sopenharmony_ci			ARRAY_SIZE(spdif_in_parents),
95362306a36Sopenharmony_ci			CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
95462306a36Sopenharmony_ci			SPEAR1340_PERIP_CLK_CFG, SPEAR1340_SPDIF_IN_CLK_SHIFT,
95562306a36Sopenharmony_ci			SPEAR1340_SPDIF_CLK_MASK, 0, &_lock);
95662306a36Sopenharmony_ci	clk_register_clkdev(clk, "spdif_in_mclk", NULL);
95762306a36Sopenharmony_ci
95862306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "spdif_in_clk", "spdif_in_mclk",
95962306a36Sopenharmony_ci			CLK_SET_RATE_PARENT, SPEAR1340_PERIP3_CLK_ENB,
96062306a36Sopenharmony_ci			SPEAR1340_SPDIF_IN_CLK_ENB, 0, &_lock);
96162306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "d0100000.spdif-in");
96262306a36Sopenharmony_ci
96362306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "acp_clk", "ahb_clk", 0,
96462306a36Sopenharmony_ci			SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_ACP_CLK_ENB, 0,
96562306a36Sopenharmony_ci			&_lock);
96662306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "acp_clk");
96762306a36Sopenharmony_ci
96862306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "plgpio_clk", "ahb_clk", 0,
96962306a36Sopenharmony_ci			SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_PLGPIO_CLK_ENB, 0,
97062306a36Sopenharmony_ci			&_lock);
97162306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e2800000.gpio");
97262306a36Sopenharmony_ci
97362306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "video_dec_clk", "ahb_clk", 0,
97462306a36Sopenharmony_ci			SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_DEC_CLK_ENB,
97562306a36Sopenharmony_ci			0, &_lock);
97662306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "video_dec");
97762306a36Sopenharmony_ci
97862306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "video_enc_clk", "ahb_clk", 0,
97962306a36Sopenharmony_ci			SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_ENC_CLK_ENB,
98062306a36Sopenharmony_ci			0, &_lock);
98162306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "video_enc");
98262306a36Sopenharmony_ci
98362306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "video_in_clk", "ahb_clk", 0,
98462306a36Sopenharmony_ci			SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_IN_CLK_ENB, 0,
98562306a36Sopenharmony_ci			&_lock);
98662306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "spear_vip");
98762306a36Sopenharmony_ci
98862306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "cam0_clk", "ahb_clk", 0,
98962306a36Sopenharmony_ci			SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM0_CLK_ENB, 0,
99062306a36Sopenharmony_ci			&_lock);
99162306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "d0200000.cam0");
99262306a36Sopenharmony_ci
99362306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "cam1_clk", "ahb_clk", 0,
99462306a36Sopenharmony_ci			SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM1_CLK_ENB, 0,
99562306a36Sopenharmony_ci			&_lock);
99662306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "d0300000.cam1");
99762306a36Sopenharmony_ci
99862306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "cam2_clk", "ahb_clk", 0,
99962306a36Sopenharmony_ci			SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM2_CLK_ENB, 0,
100062306a36Sopenharmony_ci			&_lock);
100162306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "d0400000.cam2");
100262306a36Sopenharmony_ci
100362306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "cam3_clk", "ahb_clk", 0,
100462306a36Sopenharmony_ci			SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM3_CLK_ENB, 0,
100562306a36Sopenharmony_ci			&_lock);
100662306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "d0500000.cam3");
100762306a36Sopenharmony_ci
100862306a36Sopenharmony_ci	clk = clk_register_gate(NULL, "pwm_clk", "ahb_clk", 0,
100962306a36Sopenharmony_ci			SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_PWM_CLK_ENB, 0,
101062306a36Sopenharmony_ci			&_lock);
101162306a36Sopenharmony_ci	clk_register_clkdev(clk, NULL, "e0180000.pwm");
101262306a36Sopenharmony_ci}
1013