Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 100853
b: refs/heads/master
c: ba7622a
h: refs/heads/master
i:
  100851: 9dfe14c
v: v3
  • Loading branch information
Ben Dooks committed Jul 7, 2008
1 parent 6f66d15 commit c1b8604
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 29a7bcfd144a577b5cdb3b735c58e20d0489b30e
refs/heads/master: ba7622a19fabb853b8bbb918a5d76557f88e4274
54 changes: 53 additions & 1 deletion trunk/arch/arm/mach-s3c2443/clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,6 @@ static struct clk clk_mdivclk = {
.get_rate = s3c2443_getrate_mdivclk,
};


static int s3c2443_setparent_msysclk(struct clk *clk, struct clk *parent)
{
unsigned long clksrc = __raw_readl(S3C2443_CLKSRC);
Expand Down Expand Up @@ -249,6 +248,46 @@ static struct clk clk_msysclk = {
.set_parent = s3c2443_setparent_msysclk,
};

/* armdiv
*
* this clock is sourced from msysclk and can have a number of
* divider values applied to it to then be fed into armclk.
*/

static struct clk clk_armdiv = {
.name = "armdiv",
.id = -1,
.parent = &clk_msysclk,
};

/* armclk
*
* this is the clock fed into the ARM core itself, either from
* armdiv or from hclk.
*/

static int s3c2443_setparent_armclk(struct clk *clk, struct clk *parent)
{
unsigned long clkdiv0;

clkdiv0 = __raw_readl(S3C2443_CLKDIV0);

if (parent == &clk_armdiv)
clkdiv0 &= ~S3C2443_CLKDIV0_DVS;
else if (parent == &clk_h)
clkdiv0 |= S3C2443_CLKDIV0_DVS;
else
return -EINVAL;

__raw_writel(clkdiv0, S3C2443_CLKDIV0);
return 0;
}

static struct clk clk_arm = {
.name = "armclk",
.id = -1,
.set_parent = s3c2443_setparent_armclk,
};

/* esysclk
*
Expand Down Expand Up @@ -887,6 +926,15 @@ static void __init s3c2443_clk_initparents(void)
}

clk_init_set_parent(&clk_msysclk, parent);

/* arm */

if (__raw_readl(S3C2443_CLKDIV0) & S3C2443_CLKDIV0_DVS)
parent = &clk_h;
else
parent = &clk_armdiv;

clk_init_set_parent(&clk_arm, parent);
}

/* armdiv divisor table */
Expand Down Expand Up @@ -936,6 +984,8 @@ static struct clk *clks[] __initdata = {
&clk_hsspi,
&clk_hsmmc_div,
&clk_hsmmc,
&clk_armdiv,
&clk_arm,
};

void __init s3c2443_init_clocks(int xtal)
Expand All @@ -958,6 +1008,8 @@ void __init s3c2443_init_clocks(int xtal)
hclk = hclk / ((clkdiv0 & S3C2443_CLKDIV0_HALF_HCLK) ? 2 : 1);
pclk = hclk / ((clkdiv0 & S3C2443_CLKDIV0_HALF_PCLK) ? 2 : 1);

clk_armdiv.rate = fclk;

s3c24xx_setup_clocks(xtal, fclk, hclk, pclk);

printk("S3C2443: mpll %s %ld.%03ld MHz, cpu %ld.%03ld MHz, mem %ld.%03ld MHz, pclk %ld.%03ld MHz\n",
Expand Down

0 comments on commit c1b8604

Please sign in to comment.