diff options
Diffstat (limited to 'arch/arm/cpu/armv7/s5pc1xx/clock.c')
| -rw-r--r-- | arch/arm/cpu/armv7/s5pc1xx/clock.c | 51 | 
1 files changed, 39 insertions, 12 deletions
| diff --git a/arch/arm/cpu/armv7/s5pc1xx/clock.c b/arch/arm/cpu/armv7/s5pc1xx/clock.c index 19619f92c..98a27e551 100644 --- a/arch/arm/cpu/armv7/s5pc1xx/clock.c +++ b/arch/arm/cpu/armv7/s5pc1xx/clock.c @@ -38,14 +38,16 @@  #define CONFIG_SYS_CLK_FREQ_C110	24000000  #endif -unsigned long (*get_pclk)(void); +unsigned long (*get_uart_clk)(int dev_index); +unsigned long (*get_pwm_clk)(void);  unsigned long (*get_arm_clk)(void);  unsigned long (*get_pll_clk)(int);  /* s5pc110: return pll clock frequency */  static unsigned long s5pc100_get_pll_clk(int pllreg)  { -	struct s5pc100_clock *clk = (struct s5pc100_clock *)S5PC1XX_CLOCK_BASE; +	struct s5pc100_clock *clk = +		(struct s5pc100_clock *)samsung_get_base_clock();  	unsigned long r, m, p, s, mask, fout;  	unsigned int freq; @@ -95,7 +97,8 @@ static unsigned long s5pc100_get_pll_clk(int pllreg)  /* s5pc100: return pll clock frequency */  static unsigned long s5pc110_get_pll_clk(int pllreg)  { -	struct s5pc110_clock *clk = (struct s5pc110_clock *)S5PC1XX_CLOCK_BASE; +	struct s5pc110_clock *clk = +		(struct s5pc110_clock *)samsung_get_base_clock();  	unsigned long r, m, p, s, mask, fout;  	unsigned int freq; @@ -151,7 +154,8 @@ static unsigned long s5pc110_get_pll_clk(int pllreg)  /* s5pc110: return ARM clock frequency */  static unsigned long s5pc110_get_arm_clk(void)  { -	struct s5pc110_clock *clk = (struct s5pc110_clock *)S5PC1XX_CLOCK_BASE; +	struct s5pc110_clock *clk = +		(struct s5pc110_clock *)samsung_get_base_clock();  	unsigned long div;  	unsigned long dout_apll, armclk;  	unsigned int apll_ratio; @@ -170,7 +174,8 @@ static unsigned long s5pc110_get_arm_clk(void)  /* s5pc100: return ARM clock frequency */  static unsigned long s5pc100_get_arm_clk(void)  { -	struct s5pc100_clock *clk = (struct s5pc100_clock *)S5PC1XX_CLOCK_BASE; +	struct s5pc100_clock *clk = +		(struct s5pc100_clock *)samsung_get_base_clock();  	unsigned long div;  	unsigned long dout_apll, armclk;  	unsigned int apll_ratio, arm_ratio; @@ -191,7 +196,8 @@ static unsigned long s5pc100_get_arm_clk(void)  /* s5pc100: return HCLKD0 frequency */  static unsigned long get_hclk(void)  { -	struct s5pc100_clock *clk = (struct s5pc100_clock *)S5PC1XX_CLOCK_BASE; +	struct s5pc100_clock *clk = +		(struct s5pc100_clock *)samsung_get_base_clock();  	unsigned long hclkd0;  	uint div, d0_bus_ratio; @@ -207,7 +213,8 @@ static unsigned long get_hclk(void)  /* s5pc100: return PCLKD1 frequency */  static unsigned long get_pclkd1(void)  { -	struct s5pc100_clock *clk = (struct s5pc100_clock *)S5PC1XX_CLOCK_BASE; +	struct s5pc100_clock *clk = +		(struct s5pc100_clock *)samsung_get_base_clock();  	unsigned long d1_bus, pclkd1;  	uint div, d1_bus_ratio, pclkd1_ratio; @@ -227,7 +234,8 @@ static unsigned long get_pclkd1(void)  /* s5pc110: return HCLKs frequency */  static unsigned long get_hclk_sys(int dom)  { -	struct s5pc110_clock *clk = (struct s5pc110_clock *)S5PC1XX_CLOCK_BASE; +	struct s5pc110_clock *clk = +		(struct s5pc110_clock *)samsung_get_base_clock();  	unsigned long hclk;  	unsigned int div;  	unsigned int offset; @@ -255,7 +263,8 @@ static unsigned long get_hclk_sys(int dom)  /* s5pc110: return PCLKs frequency */  static unsigned long get_pclk_sys(int dom)  { -	struct s5pc110_clock *clk = (struct s5pc110_clock *)S5PC1XX_CLOCK_BASE; +	struct s5pc110_clock *clk = +		(struct s5pc110_clock *)samsung_get_base_clock();  	unsigned long pclk;  	unsigned int div;  	unsigned int offset; @@ -289,15 +298,33 @@ static unsigned long s5pc100_get_pclk(void)  	return get_pclkd1();  } -void s5pc1xx_clock_init(void) +/* s5pc1xx: return uart clock frequency */ +static unsigned long s5pc1xx_get_uart_clk(int dev_index) +{ +	if (cpu_is_s5pc110()) +		return s5pc110_get_pclk(); +	else +		return s5pc100_get_pclk(); +} + +/* s5pc1xx: return pwm clock frequency */ +static unsigned long s5pc1xx_get_pwm_clk(void) +{ +	if (cpu_is_s5pc110()) +		return s5pc110_get_pclk(); +	else +		return s5pc100_get_pclk(); +} + +void s5p_clock_init(void)  {  	if (cpu_is_s5pc110()) {  		get_pll_clk = s5pc110_get_pll_clk;  		get_arm_clk = s5pc110_get_arm_clk; -		get_pclk = s5pc110_get_pclk;  	} else {  		get_pll_clk = s5pc100_get_pll_clk;  		get_arm_clk = s5pc100_get_arm_clk; -		get_pclk = s5pc100_get_pclk;  	} +	get_uart_clk = s5pc1xx_get_uart_clk; +	get_pwm_clk = s5pc1xx_get_pwm_clk;  } |