@ -44,15 +44,52 @@
# include <asm/plat-s3c24xx/clock.h>
# include <asm/plat-s3c24xx/cpu.h>
static int s3c2440_setparent_armclk ( struct clk * clk , struct clk * parent )
{
unsigned long camdivn ;
unsigned long dvs ;
if ( parent = = & clk_f )
dvs = 0 ;
else if ( parent = = & clk_h )
dvs = S3C2440_CAMDIVN_DVSEN ;
else
return - EINVAL ;
clk - > parent = parent ;
camdivn = __raw_readl ( S3C2440_CAMDIVN ) ;
camdivn & = ~ S3C2440_CAMDIVN_DVSEN ;
camdivn | = dvs ;
__raw_writel ( camdivn , S3C2440_CAMDIVN ) ;
return 0 ;
}
static struct clk clk_arm = {
. name = " armclk " ,
. id = - 1 ,
. set_parent = s3c2440_setparent_armclk ,
} ;
static int s3c244x_clk_add ( struct sys_device * sysdev )
{
unsigned long camdivn = __raw_readl ( S3C2440_CAMDIVN ) ;
unsigned long clkdivn ;
struct clk * clock_upll ;
int ret ;
printk ( " S3C244X: Clock Support, DVS %s \n " ,
( camdivn & S3C2440_CAMDIVN_DVSEN ) ? " on " : " off " ) ;
clk_arm . parent = ( camdivn & S3C2440_CAMDIVN_DVSEN ) ? & clk_h : & clk_f ;
ret = s3c24xx_register_clock ( & clk_arm ) ;
if ( ret < 0 ) {
printk ( KERN_ERR " S3C24XX: Failed to add armclk (%d) \n " , ret ) ;
return ret ;
}
clock_upll = clk_get ( NULL , " upll " ) ;
if ( IS_ERR ( clock_upll ) ) {
printk ( KERN_ERR " S3C244X: Failed to get upll clock \n " ) ;