| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132 | 
							- /* linux/arch/arm/mach-s5pv210/clock.c
 
-  *
 
-  * Copyright (c) 2010 Samsung Electronics Co., Ltd.
 
-  *		http://www.samsung.com/
 
-  *
 
-  * S5PV210 - Clock support
 
-  *
 
-  * This program is free software; you can redistribute it and/or modify
 
-  * it under the terms of the GNU General Public License version 2 as
 
-  * published by the Free Software Foundation.
 
- */
 
- #include <linux/init.h>
 
- #include <linux/module.h>
 
- #include <linux/kernel.h>
 
- #include <linux/list.h>
 
- #include <linux/errno.h>
 
- #include <linux/err.h>
 
- #include <linux/clk.h>
 
- #include <linux/device.h>
 
- #include <linux/io.h>
 
- #include <mach/map.h>
 
- #include <plat/cpu-freq.h>
 
- #include <mach/regs-clock.h>
 
- #include <plat/clock.h>
 
- #include <plat/cpu.h>
 
- #include <plat/pll.h>
 
- #include <plat/s5p-clock.h>
 
- #include <plat/clock-clksrc.h>
 
- #include "common.h"
 
- static unsigned long xtal;
 
- static struct clksrc_clk clk_mout_apll = {
 
- 	.clk	= {
 
- 		.name		= "mout_apll",
 
- 	},
 
- 	.sources	= &clk_src_apll,
 
- 	.reg_src	= { .reg = S5P_CLK_SRC0, .shift = 0, .size = 1 },
 
- };
 
- static struct clksrc_clk clk_mout_epll = {
 
- 	.clk	= {
 
- 		.name		= "mout_epll",
 
- 	},
 
- 	.sources	= &clk_src_epll,
 
- 	.reg_src	= { .reg = S5P_CLK_SRC0, .shift = 8, .size = 1 },
 
- };
 
- static struct clksrc_clk clk_mout_mpll = {
 
- 	.clk = {
 
- 		.name		= "mout_mpll",
 
- 	},
 
- 	.sources	= &clk_src_mpll,
 
- 	.reg_src	= { .reg = S5P_CLK_SRC0, .shift = 4, .size = 1 },
 
- };
 
- static struct clk *clkset_armclk_list[] = {
 
- 	[0] = &clk_mout_apll.clk,
 
- 	[1] = &clk_mout_mpll.clk,
 
- };
 
- static struct clksrc_sources clkset_armclk = {
 
- 	.sources	= clkset_armclk_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_armclk_list),
 
- };
 
- static struct clksrc_clk clk_armclk = {
 
- 	.clk	= {
 
- 		.name		= "armclk",
 
- 	},
 
- 	.sources	= &clkset_armclk,
 
- 	.reg_src	= { .reg = S5P_CLK_SRC0, .shift = 16, .size = 1 },
 
- 	.reg_div	= { .reg = S5P_CLK_DIV0, .shift = 0, .size = 3 },
 
- };
 
- static struct clksrc_clk clk_hclk_msys = {
 
- 	.clk	= {
 
- 		.name		= "hclk_msys",
 
- 		.parent		= &clk_armclk.clk,
 
- 	},
 
- 	.reg_div	= { .reg = S5P_CLK_DIV0, .shift = 8, .size = 3 },
 
- };
 
- static struct clksrc_clk clk_pclk_msys = {
 
- 	.clk	= {
 
- 		.name		= "pclk_msys",
 
- 		.parent		= &clk_hclk_msys.clk,
 
- 	},
 
- 	.reg_div        = { .reg = S5P_CLK_DIV0, .shift = 12, .size = 3 },
 
- };
 
- static struct clksrc_clk clk_sclk_a2m = {
 
- 	.clk	= {
 
- 		.name		= "sclk_a2m",
 
- 		.parent		= &clk_mout_apll.clk,
 
- 	},
 
- 	.reg_div	= { .reg = S5P_CLK_DIV0, .shift = 4, .size = 3 },
 
- };
 
- static struct clk *clkset_hclk_sys_list[] = {
 
- 	[0] = &clk_mout_mpll.clk,
 
- 	[1] = &clk_sclk_a2m.clk,
 
- };
 
- static struct clksrc_sources clkset_hclk_sys = {
 
- 	.sources	= clkset_hclk_sys_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_hclk_sys_list),
 
- };
 
- static struct clksrc_clk clk_hclk_dsys = {
 
- 	.clk	= {
 
- 		.name	= "hclk_dsys",
 
- 	},
 
- 	.sources	= &clkset_hclk_sys,
 
- 	.reg_src        = { .reg = S5P_CLK_SRC0, .shift = 20, .size = 1 },
 
- 	.reg_div        = { .reg = S5P_CLK_DIV0, .shift = 16, .size = 4 },
 
- };
 
- static struct clksrc_clk clk_pclk_dsys = {
 
- 	.clk	= {
 
- 		.name	= "pclk_dsys",
 
- 		.parent	= &clk_hclk_dsys.clk,
 
- 	},
 
- 	.reg_div = { .reg = S5P_CLK_DIV0, .shift = 20, .size = 3 },
 
- };
 
- static struct clksrc_clk clk_hclk_psys = {
 
- 	.clk	= {
 
- 		.name	= "hclk_psys",
 
- 	},
 
- 	.sources	= &clkset_hclk_sys,
 
- 	.reg_src        = { .reg = S5P_CLK_SRC0, .shift = 24, .size = 1 },
 
- 	.reg_div        = { .reg = S5P_CLK_DIV0, .shift = 24, .size = 4 },
 
- };
 
- static struct clksrc_clk clk_pclk_psys = {
 
- 	.clk	= {
 
- 		.name	= "pclk_psys",
 
- 		.parent	= &clk_hclk_psys.clk,
 
- 	},
 
- 	.reg_div        = { .reg = S5P_CLK_DIV0, .shift = 28, .size = 3 },
 
- };
 
- static int s5pv210_clk_ip0_ctrl(struct clk *clk, int enable)
 
- {
 
- 	return s5p_gatectrl(S5P_CLKGATE_IP0, clk, enable);
 
- }
 
- static int s5pv210_clk_ip1_ctrl(struct clk *clk, int enable)
 
- {
 
- 	return s5p_gatectrl(S5P_CLKGATE_IP1, clk, enable);
 
- }
 
- static int s5pv210_clk_ip2_ctrl(struct clk *clk, int enable)
 
- {
 
- 	return s5p_gatectrl(S5P_CLKGATE_IP2, clk, enable);
 
- }
 
- static int s5pv210_clk_ip3_ctrl(struct clk *clk, int enable)
 
- {
 
- 	return s5p_gatectrl(S5P_CLKGATE_IP3, clk, enable);
 
- }
 
- static int s5pv210_clk_mask0_ctrl(struct clk *clk, int enable)
 
- {
 
- 	return s5p_gatectrl(S5P_CLK_SRC_MASK0, clk, enable);
 
- }
 
- static int s5pv210_clk_mask1_ctrl(struct clk *clk, int enable)
 
- {
 
- 	return s5p_gatectrl(S5P_CLK_SRC_MASK1, clk, enable);
 
- }
 
- static int s5pv210_clk_hdmiphy_ctrl(struct clk *clk, int enable)
 
- {
 
- 	return s5p_gatectrl(S5P_HDMI_PHY_CONTROL, clk, enable);
 
- }
 
- static int exynos4_clk_dac_ctrl(struct clk *clk, int enable)
 
- {
 
- 	return s5p_gatectrl(S5P_DAC_PHY_CONTROL, clk, enable);
 
- }
 
- static struct clk clk_sclk_hdmi27m = {
 
- 	.name		= "sclk_hdmi27m",
 
- 	.rate		= 27000000,
 
- };
 
- static struct clk clk_sclk_hdmiphy = {
 
- 	.name		= "sclk_hdmiphy",
 
- };
 
- static struct clk clk_sclk_usbphy0 = {
 
- 	.name		= "sclk_usbphy0",
 
- };
 
- static struct clk clk_sclk_usbphy1 = {
 
- 	.name		= "sclk_usbphy1",
 
- };
 
- static struct clk clk_pcmcdclk0 = {
 
- 	.name		= "pcmcdclk",
 
- };
 
- static struct clk clk_pcmcdclk1 = {
 
- 	.name		= "pcmcdclk",
 
- };
 
- static struct clk clk_pcmcdclk2 = {
 
- 	.name		= "pcmcdclk",
 
- };
 
- static struct clk dummy_apb_pclk = {
 
- 	.name		= "apb_pclk",
 
- 	.id		= -1,
 
- };
 
- static struct clk *clkset_vpllsrc_list[] = {
 
- 	[0] = &clk_fin_vpll,
 
- 	[1] = &clk_sclk_hdmi27m,
 
- };
 
- static struct clksrc_sources clkset_vpllsrc = {
 
- 	.sources	= clkset_vpllsrc_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_vpllsrc_list),
 
- };
 
- static struct clksrc_clk clk_vpllsrc = {
 
- 	.clk	= {
 
- 		.name		= "vpll_src",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 7),
 
- 	},
 
- 	.sources	= &clkset_vpllsrc,
 
- 	.reg_src	= { .reg = S5P_CLK_SRC1, .shift = 28, .size = 1 },
 
- };
 
- static struct clk *clkset_sclk_vpll_list[] = {
 
- 	[0] = &clk_vpllsrc.clk,
 
- 	[1] = &clk_fout_vpll,
 
- };
 
- static struct clksrc_sources clkset_sclk_vpll = {
 
- 	.sources	= clkset_sclk_vpll_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_sclk_vpll_list),
 
- };
 
- static struct clksrc_clk clk_sclk_vpll = {
 
- 	.clk	= {
 
- 		.name		= "sclk_vpll",
 
- 	},
 
- 	.sources	= &clkset_sclk_vpll,
 
- 	.reg_src	= { .reg = S5P_CLK_SRC0, .shift = 12, .size = 1 },
 
- };
 
- static struct clk *clkset_moutdmc0src_list[] = {
 
- 	[0] = &clk_sclk_a2m.clk,
 
- 	[1] = &clk_mout_mpll.clk,
 
- 	[2] = NULL,
 
- 	[3] = NULL,
 
- };
 
- static struct clksrc_sources clkset_moutdmc0src = {
 
- 	.sources	= clkset_moutdmc0src_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_moutdmc0src_list),
 
- };
 
- static struct clksrc_clk clk_mout_dmc0 = {
 
- 	.clk	= {
 
- 		.name		= "mout_dmc0",
 
- 	},
 
- 	.sources	= &clkset_moutdmc0src,
 
- 	.reg_src	= { .reg = S5P_CLK_SRC6, .shift = 24, .size = 2 },
 
- };
 
- static struct clksrc_clk clk_sclk_dmc0 = {
 
- 	.clk	= {
 
- 		.name		= "sclk_dmc0",
 
- 		.parent		= &clk_mout_dmc0.clk,
 
- 	},
 
- 	.reg_div	= { .reg = S5P_CLK_DIV6, .shift = 28, .size = 4 },
 
- };
 
- static unsigned long s5pv210_clk_imem_get_rate(struct clk *clk)
 
- {
 
- 	return clk_get_rate(clk->parent) / 2;
 
- }
 
- static struct clk_ops clk_hclk_imem_ops = {
 
- 	.get_rate	= s5pv210_clk_imem_get_rate,
 
- };
 
- static unsigned long s5pv210_clk_fout_apll_get_rate(struct clk *clk)
 
- {
 
- 	return s5p_get_pll45xx(xtal, __raw_readl(S5P_APLL_CON), pll_4508);
 
- }
 
- static struct clk_ops clk_fout_apll_ops = {
 
- 	.get_rate	= s5pv210_clk_fout_apll_get_rate,
 
- };
 
- static struct clk init_clocks_off[] = {
 
- 	{
 
- 		.name		= "dma",
 
- 		.devname	= "dma-pl330.0",
 
- 		.parent		= &clk_hclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip0_ctrl,
 
- 		.ctrlbit	= (1 << 3),
 
- 	}, {
 
- 		.name		= "dma",
 
- 		.devname	= "dma-pl330.1",
 
- 		.parent		= &clk_hclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip0_ctrl,
 
- 		.ctrlbit	= (1 << 4),
 
- 	}, {
 
- 		.name		= "rot",
 
- 		.parent		= &clk_hclk_dsys.clk,
 
- 		.enable		= s5pv210_clk_ip0_ctrl,
 
- 		.ctrlbit	= (1<<29),
 
- 	}, {
 
- 		.name		= "fimc",
 
- 		.devname	= "s5pv210-fimc.0",
 
- 		.parent		= &clk_hclk_dsys.clk,
 
- 		.enable		= s5pv210_clk_ip0_ctrl,
 
- 		.ctrlbit	= (1 << 24),
 
- 	}, {
 
- 		.name		= "fimc",
 
- 		.devname	= "s5pv210-fimc.1",
 
- 		.parent		= &clk_hclk_dsys.clk,
 
- 		.enable		= s5pv210_clk_ip0_ctrl,
 
- 		.ctrlbit	= (1 << 25),
 
- 	}, {
 
- 		.name		= "fimc",
 
- 		.devname	= "s5pv210-fimc.2",
 
- 		.parent		= &clk_hclk_dsys.clk,
 
- 		.enable		= s5pv210_clk_ip0_ctrl,
 
- 		.ctrlbit	= (1 << 26),
 
- 	}, {
 
- 		.name		= "jpeg",
 
- 		.parent		= &clk_hclk_dsys.clk,
 
- 		.enable		= s5pv210_clk_ip0_ctrl,
 
- 		.ctrlbit	= (1 << 28),
 
- 	}, {
 
- 		.name		= "mfc",
 
- 		.devname	= "s5p-mfc",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip0_ctrl,
 
- 		.ctrlbit	= (1 << 16),
 
- 	}, {
 
- 		.name		= "dac",
 
- 		.devname	= "s5p-sdo",
 
- 		.parent		= &clk_hclk_dsys.clk,
 
- 		.enable		= s5pv210_clk_ip1_ctrl,
 
- 		.ctrlbit	= (1 << 10),
 
- 	}, {
 
- 		.name		= "mixer",
 
- 		.devname	= "s5p-mixer",
 
- 		.parent		= &clk_hclk_dsys.clk,
 
- 		.enable		= s5pv210_clk_ip1_ctrl,
 
- 		.ctrlbit	= (1 << 9),
 
- 	}, {
 
- 		.name		= "vp",
 
- 		.devname	= "s5p-mixer",
 
- 		.parent		= &clk_hclk_dsys.clk,
 
- 		.enable		= s5pv210_clk_ip1_ctrl,
 
- 		.ctrlbit	= (1 << 8),
 
- 	}, {
 
- 		.name		= "hdmi",
 
- 		.devname	= "s5pv210-hdmi",
 
- 		.parent		= &clk_hclk_dsys.clk,
 
- 		.enable		= s5pv210_clk_ip1_ctrl,
 
- 		.ctrlbit	= (1 << 11),
 
- 	}, {
 
- 		.name		= "hdmiphy",
 
- 		.devname	= "s5pv210-hdmi",
 
- 		.enable		= s5pv210_clk_hdmiphy_ctrl,
 
- 		.ctrlbit	= (1 << 0),
 
- 	}, {
 
- 		.name		= "dacphy",
 
- 		.devname	= "s5p-sdo",
 
- 		.enable		= exynos4_clk_dac_ctrl,
 
- 		.ctrlbit	= (1 << 0),
 
- 	}, {
 
- 		.name		= "otg",
 
- 		.parent		= &clk_hclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip1_ctrl,
 
- 		.ctrlbit	= (1<<16),
 
- 	}, {
 
- 		.name		= "usb-host",
 
- 		.parent		= &clk_hclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip1_ctrl,
 
- 		.ctrlbit	= (1<<17),
 
- 	}, {
 
- 		.name		= "lcd",
 
- 		.parent		= &clk_hclk_dsys.clk,
 
- 		.enable		= s5pv210_clk_ip1_ctrl,
 
- 		.ctrlbit	= (1<<0),
 
- 	}, {
 
- 		.name		= "cfcon",
 
- 		.parent		= &clk_hclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip1_ctrl,
 
- 		.ctrlbit	= (1<<25),
 
- 	}, {
 
- 		.name		= "systimer",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1<<16),
 
- 	}, {
 
- 		.name		= "watchdog",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1<<22),
 
- 	}, {
 
- 		.name		= "rtc",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1<<15),
 
- 	}, {
 
- 		.name		= "i2c",
 
- 		.devname	= "s3c2440-i2c.0",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1<<7),
 
- 	}, {
 
- 		.name		= "i2c",
 
- 		.devname	= "s3c2440-i2c.1",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1 << 10),
 
- 	}, {
 
- 		.name		= "i2c",
 
- 		.devname	= "s3c2440-i2c.2",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1<<9),
 
- 	}, {
 
- 		.name		= "i2c",
 
- 		.devname	= "s3c2440-hdmiphy-i2c",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1 << 11),
 
- 	}, {
 
- 		.name		= "spi",
 
- 		.devname	= "s5pv210-spi.0",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1<<12),
 
- 	}, {
 
- 		.name		= "spi",
 
- 		.devname	= "s5pv210-spi.1",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1<<13),
 
- 	}, {
 
- 		.name		= "spi",
 
- 		.devname	= "s5pv210-spi.2",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1<<14),
 
- 	}, {
 
- 		.name		= "timers",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1<<23),
 
- 	}, {
 
- 		.name		= "adc",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1<<24),
 
- 	}, {
 
- 		.name		= "keypad",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1<<21),
 
- 	}, {
 
- 		.name		= "iis",
 
- 		.devname	= "samsung-i2s.0",
 
- 		.parent		= &clk_p,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1<<4),
 
- 	}, {
 
- 		.name		= "iis",
 
- 		.devname	= "samsung-i2s.1",
 
- 		.parent		= &clk_p,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1 << 5),
 
- 	}, {
 
- 		.name		= "iis",
 
- 		.devname	= "samsung-i2s.2",
 
- 		.parent		= &clk_p,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1 << 6),
 
- 	}, {
 
- 		.name		= "spdif",
 
- 		.parent		= &clk_p,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1 << 0),
 
- 	},
 
- };
 
- static struct clk init_clocks[] = {
 
- 	{
 
- 		.name		= "hclk_imem",
 
- 		.parent		= &clk_hclk_msys.clk,
 
- 		.ctrlbit	= (1 << 5),
 
- 		.enable		= s5pv210_clk_ip0_ctrl,
 
- 		.ops		= &clk_hclk_imem_ops,
 
- 	}, {
 
- 		.name		= "uart",
 
- 		.devname	= "s5pv210-uart.0",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1 << 17),
 
- 	}, {
 
- 		.name		= "uart",
 
- 		.devname	= "s5pv210-uart.1",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1 << 18),
 
- 	}, {
 
- 		.name		= "uart",
 
- 		.devname	= "s5pv210-uart.2",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1 << 19),
 
- 	}, {
 
- 		.name		= "uart",
 
- 		.devname	= "s5pv210-uart.3",
 
- 		.parent		= &clk_pclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip3_ctrl,
 
- 		.ctrlbit	= (1 << 20),
 
- 	}, {
 
- 		.name		= "sromc",
 
- 		.parent		= &clk_hclk_psys.clk,
 
- 		.enable		= s5pv210_clk_ip1_ctrl,
 
- 		.ctrlbit	= (1 << 26),
 
- 	},
 
- };
 
- static struct clk clk_hsmmc0 = {
 
- 	.name		= "hsmmc",
 
- 	.devname	= "s3c-sdhci.0",
 
- 	.parent		= &clk_hclk_psys.clk,
 
- 	.enable		= s5pv210_clk_ip2_ctrl,
 
- 	.ctrlbit	= (1<<16),
 
- };
 
- static struct clk clk_hsmmc1 = {
 
- 	.name		= "hsmmc",
 
- 	.devname	= "s3c-sdhci.1",
 
- 	.parent		= &clk_hclk_psys.clk,
 
- 	.enable		= s5pv210_clk_ip2_ctrl,
 
- 	.ctrlbit	= (1<<17),
 
- };
 
- static struct clk clk_hsmmc2 = {
 
- 	.name		= "hsmmc",
 
- 	.devname	= "s3c-sdhci.2",
 
- 	.parent		= &clk_hclk_psys.clk,
 
- 	.enable		= s5pv210_clk_ip2_ctrl,
 
- 	.ctrlbit	= (1<<18),
 
- };
 
- static struct clk clk_hsmmc3 = {
 
- 	.name		= "hsmmc",
 
- 	.devname	= "s3c-sdhci.3",
 
- 	.parent		= &clk_hclk_psys.clk,
 
- 	.enable		= s5pv210_clk_ip2_ctrl,
 
- 	.ctrlbit	= (1<<19),
 
- };
 
- static struct clk *clkset_uart_list[] = {
 
- 	[6] = &clk_mout_mpll.clk,
 
- 	[7] = &clk_mout_epll.clk,
 
- };
 
- static struct clksrc_sources clkset_uart = {
 
- 	.sources	= clkset_uart_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_uart_list),
 
- };
 
- static struct clk *clkset_group1_list[] = {
 
- 	[0] = &clk_sclk_a2m.clk,
 
- 	[1] = &clk_mout_mpll.clk,
 
- 	[2] = &clk_mout_epll.clk,
 
- 	[3] = &clk_sclk_vpll.clk,
 
- };
 
- static struct clksrc_sources clkset_group1 = {
 
- 	.sources	= clkset_group1_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_group1_list),
 
- };
 
- static struct clk *clkset_sclk_onenand_list[] = {
 
- 	[0] = &clk_hclk_psys.clk,
 
- 	[1] = &clk_hclk_dsys.clk,
 
- };
 
- static struct clksrc_sources clkset_sclk_onenand = {
 
- 	.sources	= clkset_sclk_onenand_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_sclk_onenand_list),
 
- };
 
- static struct clk *clkset_sclk_dac_list[] = {
 
- 	[0] = &clk_sclk_vpll.clk,
 
- 	[1] = &clk_sclk_hdmiphy,
 
- };
 
- static struct clksrc_sources clkset_sclk_dac = {
 
- 	.sources	= clkset_sclk_dac_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_sclk_dac_list),
 
- };
 
- static struct clksrc_clk clk_sclk_dac = {
 
- 	.clk		= {
 
- 		.name		= "sclk_dac",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 2),
 
- 	},
 
- 	.sources	= &clkset_sclk_dac,
 
- 	.reg_src	= { .reg = S5P_CLK_SRC1, .shift = 8, .size = 1 },
 
- };
 
- static struct clksrc_clk clk_sclk_pixel = {
 
- 	.clk		= {
 
- 		.name		= "sclk_pixel",
 
- 		.parent		= &clk_sclk_vpll.clk,
 
- 	},
 
- 	.reg_div	= { .reg = S5P_CLK_DIV1, .shift = 0, .size = 4},
 
- };
 
- static struct clk *clkset_sclk_hdmi_list[] = {
 
- 	[0] = &clk_sclk_pixel.clk,
 
- 	[1] = &clk_sclk_hdmiphy,
 
- };
 
- static struct clksrc_sources clkset_sclk_hdmi = {
 
- 	.sources	= clkset_sclk_hdmi_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_sclk_hdmi_list),
 
- };
 
- static struct clksrc_clk clk_sclk_hdmi = {
 
- 	.clk		= {
 
- 		.name		= "sclk_hdmi",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 0),
 
- 	},
 
- 	.sources	= &clkset_sclk_hdmi,
 
- 	.reg_src	= { .reg = S5P_CLK_SRC1, .shift = 0, .size = 1 },
 
- };
 
- static struct clk *clkset_sclk_mixer_list[] = {
 
- 	[0] = &clk_sclk_dac.clk,
 
- 	[1] = &clk_sclk_hdmi.clk,
 
- };
 
- static struct clksrc_sources clkset_sclk_mixer = {
 
- 	.sources	= clkset_sclk_mixer_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_sclk_mixer_list),
 
- };
 
- static struct clksrc_clk clk_sclk_mixer = {
 
- 	.clk		= {
 
- 		.name		= "sclk_mixer",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 1),
 
- 	},
 
- 	.sources = &clkset_sclk_mixer,
 
- 	.reg_src = { .reg = S5P_CLK_SRC1, .shift = 4, .size = 1 },
 
- };
 
- static struct clksrc_clk *sclk_tv[] = {
 
- 	&clk_sclk_dac,
 
- 	&clk_sclk_pixel,
 
- 	&clk_sclk_hdmi,
 
- 	&clk_sclk_mixer,
 
- };
 
- static struct clk *clkset_sclk_audio0_list[] = {
 
- 	[0] = &clk_ext_xtal_mux,
 
- 	[1] = &clk_pcmcdclk0,
 
- 	[2] = &clk_sclk_hdmi27m,
 
- 	[3] = &clk_sclk_usbphy0,
 
- 	[4] = &clk_sclk_usbphy1,
 
- 	[5] = &clk_sclk_hdmiphy,
 
- 	[6] = &clk_mout_mpll.clk,
 
- 	[7] = &clk_mout_epll.clk,
 
- 	[8] = &clk_sclk_vpll.clk,
 
- };
 
- static struct clksrc_sources clkset_sclk_audio0 = {
 
- 	.sources	= clkset_sclk_audio0_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_sclk_audio0_list),
 
- };
 
- static struct clksrc_clk clk_sclk_audio0 = {
 
- 	.clk		= {
 
- 		.name		= "sclk_audio",
 
- 		.devname	= "soc-audio.0",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 24),
 
- 	},
 
- 	.sources = &clkset_sclk_audio0,
 
- 	.reg_src = { .reg = S5P_CLK_SRC6, .shift = 0, .size = 4 },
 
- 	.reg_div = { .reg = S5P_CLK_DIV6, .shift = 0, .size = 4 },
 
- };
 
- static struct clk *clkset_sclk_audio1_list[] = {
 
- 	[0] = &clk_ext_xtal_mux,
 
- 	[1] = &clk_pcmcdclk1,
 
- 	[2] = &clk_sclk_hdmi27m,
 
- 	[3] = &clk_sclk_usbphy0,
 
- 	[4] = &clk_sclk_usbphy1,
 
- 	[5] = &clk_sclk_hdmiphy,
 
- 	[6] = &clk_mout_mpll.clk,
 
- 	[7] = &clk_mout_epll.clk,
 
- 	[8] = &clk_sclk_vpll.clk,
 
- };
 
- static struct clksrc_sources clkset_sclk_audio1 = {
 
- 	.sources	= clkset_sclk_audio1_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_sclk_audio1_list),
 
- };
 
- static struct clksrc_clk clk_sclk_audio1 = {
 
- 	.clk		= {
 
- 		.name		= "sclk_audio",
 
- 		.devname	= "soc-audio.1",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 25),
 
- 	},
 
- 	.sources = &clkset_sclk_audio1,
 
- 	.reg_src = { .reg = S5P_CLK_SRC6, .shift = 4, .size = 4 },
 
- 	.reg_div = { .reg = S5P_CLK_DIV6, .shift = 4, .size = 4 },
 
- };
 
- static struct clk *clkset_sclk_audio2_list[] = {
 
- 	[0] = &clk_ext_xtal_mux,
 
- 	[1] = &clk_pcmcdclk0,
 
- 	[2] = &clk_sclk_hdmi27m,
 
- 	[3] = &clk_sclk_usbphy0,
 
- 	[4] = &clk_sclk_usbphy1,
 
- 	[5] = &clk_sclk_hdmiphy,
 
- 	[6] = &clk_mout_mpll.clk,
 
- 	[7] = &clk_mout_epll.clk,
 
- 	[8] = &clk_sclk_vpll.clk,
 
- };
 
- static struct clksrc_sources clkset_sclk_audio2 = {
 
- 	.sources	= clkset_sclk_audio2_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_sclk_audio2_list),
 
- };
 
- static struct clksrc_clk clk_sclk_audio2 = {
 
- 	.clk		= {
 
- 		.name		= "sclk_audio",
 
- 		.devname	= "soc-audio.2",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 26),
 
- 	},
 
- 	.sources = &clkset_sclk_audio2,
 
- 	.reg_src = { .reg = S5P_CLK_SRC6, .shift = 8, .size = 4 },
 
- 	.reg_div = { .reg = S5P_CLK_DIV6, .shift = 8, .size = 4 },
 
- };
 
- static struct clk *clkset_sclk_spdif_list[] = {
 
- 	[0] = &clk_sclk_audio0.clk,
 
- 	[1] = &clk_sclk_audio1.clk,
 
- 	[2] = &clk_sclk_audio2.clk,
 
- };
 
- static struct clksrc_sources clkset_sclk_spdif = {
 
- 	.sources	= clkset_sclk_spdif_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_sclk_spdif_list),
 
- };
 
- static struct clksrc_clk clk_sclk_spdif = {
 
- 	.clk		= {
 
- 		.name		= "sclk_spdif",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 27),
 
- 		.ops		= &s5p_sclk_spdif_ops,
 
- 	},
 
- 	.sources = &clkset_sclk_spdif,
 
- 	.reg_src = { .reg = S5P_CLK_SRC6, .shift = 12, .size = 2 },
 
- };
 
- static struct clk *clkset_group2_list[] = {
 
- 	[0] = &clk_ext_xtal_mux,
 
- 	[1] = &clk_xusbxti,
 
- 	[2] = &clk_sclk_hdmi27m,
 
- 	[3] = &clk_sclk_usbphy0,
 
- 	[4] = &clk_sclk_usbphy1,
 
- 	[5] = &clk_sclk_hdmiphy,
 
- 	[6] = &clk_mout_mpll.clk,
 
- 	[7] = &clk_mout_epll.clk,
 
- 	[8] = &clk_sclk_vpll.clk,
 
- };
 
- static struct clksrc_sources clkset_group2 = {
 
- 	.sources	= clkset_group2_list,
 
- 	.nr_sources	= ARRAY_SIZE(clkset_group2_list),
 
- };
 
- static struct clksrc_clk clksrcs[] = {
 
- 	{
 
- 		.clk	= {
 
- 			.name		= "sclk_dmc",
 
- 		},
 
- 		.sources = &clkset_group1,
 
- 		.reg_src = { .reg = S5P_CLK_SRC6, .shift = 24, .size = 2 },
 
- 		.reg_div = { .reg = S5P_CLK_DIV6, .shift = 28, .size = 4 },
 
- 	}, {
 
- 		.clk	= {
 
- 			.name		= "sclk_onenand",
 
- 		},
 
- 		.sources = &clkset_sclk_onenand,
 
- 		.reg_src = { .reg = S5P_CLK_SRC0, .shift = 28, .size = 1 },
 
- 		.reg_div = { .reg = S5P_CLK_DIV6, .shift = 12, .size = 3 },
 
- 	}, {
 
- 		.clk	= {
 
- 			.name		= "sclk_fimc",
 
- 			.devname	= "s5pv210-fimc.0",
 
- 			.enable		= s5pv210_clk_mask1_ctrl,
 
- 			.ctrlbit	= (1 << 2),
 
- 		},
 
- 		.sources = &clkset_group2,
 
- 		.reg_src = { .reg = S5P_CLK_SRC3, .shift = 12, .size = 4 },
 
- 		.reg_div = { .reg = S5P_CLK_DIV3, .shift = 12, .size = 4 },
 
- 	}, {
 
- 		.clk	= {
 
- 			.name		= "sclk_fimc",
 
- 			.devname	= "s5pv210-fimc.1",
 
- 			.enable		= s5pv210_clk_mask1_ctrl,
 
- 			.ctrlbit	= (1 << 3),
 
- 		},
 
- 		.sources = &clkset_group2,
 
- 		.reg_src = { .reg = S5P_CLK_SRC3, .shift = 16, .size = 4 },
 
- 		.reg_div = { .reg = S5P_CLK_DIV3, .shift = 16, .size = 4 },
 
- 	}, {
 
- 		.clk	= {
 
- 			.name		= "sclk_fimc",
 
- 			.devname	= "s5pv210-fimc.2",
 
- 			.enable		= s5pv210_clk_mask1_ctrl,
 
- 			.ctrlbit	= (1 << 4),
 
- 		},
 
- 		.sources = &clkset_group2,
 
- 		.reg_src = { .reg = S5P_CLK_SRC3, .shift = 20, .size = 4 },
 
- 		.reg_div = { .reg = S5P_CLK_DIV3, .shift = 20, .size = 4 },
 
- 	}, {
 
- 		.clk		= {
 
- 			.name		= "sclk_cam0",
 
- 			.enable		= s5pv210_clk_mask0_ctrl,
 
- 			.ctrlbit	= (1 << 3),
 
- 		},
 
- 		.sources = &clkset_group2,
 
- 		.reg_src = { .reg = S5P_CLK_SRC1, .shift = 12, .size = 4 },
 
- 		.reg_div = { .reg = S5P_CLK_DIV1, .shift = 12, .size = 4 },
 
- 	}, {
 
- 		.clk		= {
 
- 			.name		= "sclk_cam1",
 
- 			.enable		= s5pv210_clk_mask0_ctrl,
 
- 			.ctrlbit	= (1 << 4),
 
- 		},
 
- 		.sources = &clkset_group2,
 
- 		.reg_src = { .reg = S5P_CLK_SRC1, .shift = 16, .size = 4 },
 
- 		.reg_div = { .reg = S5P_CLK_DIV1, .shift = 16, .size = 4 },
 
- 	}, {
 
- 		.clk		= {
 
- 			.name		= "sclk_fimd",
 
- 			.enable		= s5pv210_clk_mask0_ctrl,
 
- 			.ctrlbit	= (1 << 5),
 
- 		},
 
- 		.sources = &clkset_group2,
 
- 		.reg_src = { .reg = S5P_CLK_SRC1, .shift = 20, .size = 4 },
 
- 		.reg_div = { .reg = S5P_CLK_DIV1, .shift = 20, .size = 4 },
 
- 	}, {
 
- 		.clk		= {
 
- 			.name		= "sclk_mfc",
 
- 			.devname	= "s5p-mfc",
 
- 			.enable		= s5pv210_clk_ip0_ctrl,
 
- 			.ctrlbit	= (1 << 16),
 
- 		},
 
- 		.sources = &clkset_group1,
 
- 		.reg_src = { .reg = S5P_CLK_SRC2, .shift = 4, .size = 2 },
 
- 		.reg_div = { .reg = S5P_CLK_DIV2, .shift = 4, .size = 4 },
 
- 	}, {
 
- 		.clk		= {
 
- 			.name		= "sclk_g2d",
 
- 			.enable		= s5pv210_clk_ip0_ctrl,
 
- 			.ctrlbit	= (1 << 12),
 
- 		},
 
- 		.sources = &clkset_group1,
 
- 		.reg_src = { .reg = S5P_CLK_SRC2, .shift = 8, .size = 2 },
 
- 		.reg_div = { .reg = S5P_CLK_DIV2, .shift = 8, .size = 4 },
 
- 	}, {
 
- 		.clk		= {
 
- 			.name		= "sclk_g3d",
 
- 			.enable		= s5pv210_clk_ip0_ctrl,
 
- 			.ctrlbit	= (1 << 8),
 
- 		},
 
- 		.sources = &clkset_group1,
 
- 		.reg_src = { .reg = S5P_CLK_SRC2, .shift = 0, .size = 2 },
 
- 		.reg_div = { .reg = S5P_CLK_DIV2, .shift = 0, .size = 4 },
 
- 	}, {
 
- 		.clk		= {
 
- 			.name		= "sclk_csis",
 
- 			.enable		= s5pv210_clk_mask0_ctrl,
 
- 			.ctrlbit	= (1 << 6),
 
- 		},
 
- 		.sources = &clkset_group2,
 
- 		.reg_src = { .reg = S5P_CLK_SRC1, .shift = 24, .size = 4 },
 
- 		.reg_div = { .reg = S5P_CLK_DIV1, .shift = 28, .size = 4 },
 
- 	}, {
 
- 		.clk		= {
 
- 			.name		= "sclk_pwi",
 
- 			.enable		= s5pv210_clk_mask0_ctrl,
 
- 			.ctrlbit	= (1 << 29),
 
- 		},
 
- 		.sources = &clkset_group2,
 
- 		.reg_src = { .reg = S5P_CLK_SRC6, .shift = 20, .size = 4 },
 
- 		.reg_div = { .reg = S5P_CLK_DIV6, .shift = 24, .size = 4 },
 
- 	}, {
 
- 		.clk		= {
 
- 			.name		= "sclk_pwm",
 
- 			.enable		= s5pv210_clk_mask0_ctrl,
 
- 			.ctrlbit	= (1 << 19),
 
- 		},
 
- 		.sources = &clkset_group2,
 
- 		.reg_src = { .reg = S5P_CLK_SRC5, .shift = 12, .size = 4 },
 
- 		.reg_div = { .reg = S5P_CLK_DIV5, .shift = 12, .size = 4 },
 
- 	},
 
- };
 
- static struct clksrc_clk clk_sclk_uart0 = {
 
- 	.clk	= {
 
- 		.name		= "uclk1",
 
- 		.devname	= "s5pv210-uart.0",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 12),
 
- 	},
 
- 	.sources = &clkset_uart,
 
- 	.reg_src = { .reg = S5P_CLK_SRC4, .shift = 16, .size = 4 },
 
- 	.reg_div = { .reg = S5P_CLK_DIV4, .shift = 16, .size = 4 },
 
- };
 
- static struct clksrc_clk clk_sclk_uart1 = {
 
- 	.clk		= {
 
- 		.name		= "uclk1",
 
- 		.devname	= "s5pv210-uart.1",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 13),
 
- 	},
 
- 	.sources = &clkset_uart,
 
- 	.reg_src = { .reg = S5P_CLK_SRC4, .shift = 20, .size = 4 },
 
- 	.reg_div = { .reg = S5P_CLK_DIV4, .shift = 20, .size = 4 },
 
- };
 
- static struct clksrc_clk clk_sclk_uart2 = {
 
- 	.clk		= {
 
- 		.name		= "uclk1",
 
- 		.devname	= "s5pv210-uart.2",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 14),
 
- 	},
 
- 	.sources = &clkset_uart,
 
- 	.reg_src = { .reg = S5P_CLK_SRC4, .shift = 24, .size = 4 },
 
- 	.reg_div = { .reg = S5P_CLK_DIV4, .shift = 24, .size = 4 },
 
- };
 
- static struct clksrc_clk clk_sclk_uart3	= {
 
- 	.clk		= {
 
- 		.name		= "uclk1",
 
- 		.devname	= "s5pv210-uart.3",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 15),
 
- 	},
 
- 	.sources = &clkset_uart,
 
- 	.reg_src = { .reg = S5P_CLK_SRC4, .shift = 28, .size = 4 },
 
- 	.reg_div = { .reg = S5P_CLK_DIV4, .shift = 28, .size = 4 },
 
- };
 
- static struct clksrc_clk clk_sclk_mmc0 = {
 
- 	.clk		= {
 
- 		.name		= "sclk_mmc",
 
- 		.devname	= "s3c-sdhci.0",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 8),
 
- 	},
 
- 	.sources = &clkset_group2,
 
- 	.reg_src = { .reg = S5P_CLK_SRC4, .shift = 0, .size = 4 },
 
- 	.reg_div = { .reg = S5P_CLK_DIV4, .shift = 0, .size = 4 },
 
- };
 
- static struct clksrc_clk clk_sclk_mmc1 = {
 
- 	.clk		= {
 
- 		.name		= "sclk_mmc",
 
- 		.devname	= "s3c-sdhci.1",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 9),
 
- 	},
 
- 	.sources = &clkset_group2,
 
- 	.reg_src = { .reg = S5P_CLK_SRC4, .shift = 4, .size = 4 },
 
- 	.reg_div = { .reg = S5P_CLK_DIV4, .shift = 4, .size = 4 },
 
- };
 
- static struct clksrc_clk clk_sclk_mmc2 = {
 
- 	.clk		= {
 
- 		.name		= "sclk_mmc",
 
- 		.devname	= "s3c-sdhci.2",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 10),
 
- 	},
 
- 	.sources = &clkset_group2,
 
- 	.reg_src = { .reg = S5P_CLK_SRC4, .shift = 8, .size = 4 },
 
- 	.reg_div = { .reg = S5P_CLK_DIV4, .shift = 8, .size = 4 },
 
- };
 
- static struct clksrc_clk clk_sclk_mmc3 = {
 
- 	.clk		= {
 
- 		.name		= "sclk_mmc",
 
- 		.devname	= "s3c-sdhci.3",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 11),
 
- 	},
 
- 	.sources = &clkset_group2,
 
- 	.reg_src = { .reg = S5P_CLK_SRC4, .shift = 12, .size = 4 },
 
- 	.reg_div = { .reg = S5P_CLK_DIV4, .shift = 12, .size = 4 },
 
- };
 
- static struct clksrc_clk clk_sclk_spi0 = {
 
- 	.clk		= {
 
- 		.name		= "sclk_spi",
 
- 		.devname	= "s5pv210-spi.0",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 16),
 
- 	},
 
- 	.sources = &clkset_group2,
 
- 	.reg_src = { .reg = S5P_CLK_SRC5, .shift = 0, .size = 4 },
 
- 	.reg_div = { .reg = S5P_CLK_DIV5, .shift = 0, .size = 4 },
 
- 	};
 
- static struct clksrc_clk clk_sclk_spi1 = {
 
- 	.clk		= {
 
- 		.name		= "sclk_spi",
 
- 		.devname	= "s5pv210-spi.1",
 
- 		.enable		= s5pv210_clk_mask0_ctrl,
 
- 		.ctrlbit	= (1 << 17),
 
- 	},
 
- 	.sources = &clkset_group2,
 
- 	.reg_src = { .reg = S5P_CLK_SRC5, .shift = 4, .size = 4 },
 
- 	.reg_div = { .reg = S5P_CLK_DIV5, .shift = 4, .size = 4 },
 
- 	};
 
- static struct clksrc_clk *clksrc_cdev[] = {
 
- 	&clk_sclk_uart0,
 
- 	&clk_sclk_uart1,
 
- 	&clk_sclk_uart2,
 
- 	&clk_sclk_uart3,
 
- 	&clk_sclk_mmc0,
 
- 	&clk_sclk_mmc1,
 
- 	&clk_sclk_mmc2,
 
- 	&clk_sclk_mmc3,
 
- 	&clk_sclk_spi0,
 
- 	&clk_sclk_spi1,
 
- };
 
- static struct clk *clk_cdev[] = {
 
- 	&clk_hsmmc0,
 
- 	&clk_hsmmc1,
 
- 	&clk_hsmmc2,
 
- 	&clk_hsmmc3,
 
- };
 
- /* Clock initialisation code */
 
- static struct clksrc_clk *sysclks[] = {
 
- 	&clk_mout_apll,
 
- 	&clk_mout_epll,
 
- 	&clk_mout_mpll,
 
- 	&clk_armclk,
 
- 	&clk_hclk_msys,
 
- 	&clk_sclk_a2m,
 
- 	&clk_hclk_dsys,
 
- 	&clk_hclk_psys,
 
- 	&clk_pclk_msys,
 
- 	&clk_pclk_dsys,
 
- 	&clk_pclk_psys,
 
- 	&clk_vpllsrc,
 
- 	&clk_sclk_vpll,
 
- 	&clk_mout_dmc0,
 
- 	&clk_sclk_dmc0,
 
- 	&clk_sclk_audio0,
 
- 	&clk_sclk_audio1,
 
- 	&clk_sclk_audio2,
 
- 	&clk_sclk_spdif,
 
- };
 
- static u32 epll_div[][6] = {
 
- 	{  48000000, 0, 48, 3, 3, 0 },
 
- 	{  96000000, 0, 48, 3, 2, 0 },
 
- 	{ 144000000, 1, 72, 3, 2, 0 },
 
- 	{ 192000000, 0, 48, 3, 1, 0 },
 
- 	{ 288000000, 1, 72, 3, 1, 0 },
 
- 	{  32750000, 1, 65, 3, 4, 35127 },
 
- 	{  32768000, 1, 65, 3, 4, 35127 },
 
- 	{  45158400, 0, 45, 3, 3, 10355 },
 
- 	{  45000000, 0, 45, 3, 3, 10355 },
 
- 	{  45158000, 0, 45, 3, 3, 10355 },
 
- 	{  49125000, 0, 49, 3, 3, 9961 },
 
- 	{  49152000, 0, 49, 3, 3, 9961 },
 
- 	{  67737600, 1, 67, 3, 3, 48366 },
 
- 	{  67738000, 1, 67, 3, 3, 48366 },
 
- 	{  73800000, 1, 73, 3, 3, 47710 },
 
- 	{  73728000, 1, 73, 3, 3, 47710 },
 
- 	{  36000000, 1, 32, 3, 4, 0 },
 
- 	{  60000000, 1, 60, 3, 3, 0 },
 
- 	{  72000000, 1, 72, 3, 3, 0 },
 
- 	{  80000000, 1, 80, 3, 3, 0 },
 
- 	{  84000000, 0, 42, 3, 2, 0 },
 
- 	{  50000000, 0, 50, 3, 3, 0 },
 
- };
 
- static int s5pv210_epll_set_rate(struct clk *clk, unsigned long rate)
 
- {
 
- 	unsigned int epll_con, epll_con_k;
 
- 	unsigned int i;
 
 
  |