Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 258671
b: refs/heads/master
c: 56e580d
h: refs/heads/master
i:
  258669: bbd6a92
  258667: 2bed407
  258663: 5225458
  258655: 9ea13f9
v: v3
  • Loading branch information
Sekhar Nori committed Jul 6, 2011
1 parent abe7a24 commit c3f161e
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 15 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: 0c6fce5eb6a9866674dcf6c26913d0908a119ba3
refs/heads/master: 56e580d7783ba49a50ccc1b1f3130e5ed2dc52e7
17 changes: 6 additions & 11 deletions trunk/arch/arm/mach-davinci/board-dm646x-evm.c
Original file line number Diff line number Diff line change
Expand Up @@ -719,9 +719,15 @@ static void __init cdce_clk_init(void)
}
}

#define DM6467T_EVM_REF_FREQ 33000000

static void __init davinci_map_io(void)
{
dm646x_init();

if (machine_is_davinci_dm6467tevm())
davinci_set_refclk_rate(DM6467T_EVM_REF_FREQ);

cdce_clk_init();
}

Expand Down Expand Up @@ -785,17 +791,6 @@ static __init void evm_init(void)
soc_info->emac_pdata->phy_id = DM646X_EVM_PHY_ID;
}

#define DM646X_EVM_REF_FREQ 27000000
#define DM6467T_EVM_REF_FREQ 33000000

void __init dm646x_board_setup_refclk(struct clk *clk)
{
if (machine_is_davinci_dm6467tevm())
clk->rate = DM6467T_EVM_REF_FREQ;
else
clk->rate = DM646X_EVM_REF_FREQ;
}

MACHINE_START(DAVINCI_DM6467_EVM, "DaVinci DM646x EVM")
.boot_params = (0x80000100),
.map_io = davinci_map_io,
Expand Down
38 changes: 38 additions & 0 deletions trunk/arch/arm/mach-davinci/clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,12 @@ static unsigned long clk_leafclk_recalc(struct clk *clk)
return clk->parent->rate;
}

int davinci_simple_set_rate(struct clk *clk, unsigned long rate)
{
clk->rate = rate;
return 0;
}

static unsigned long clk_pllclk_recalc(struct clk *clk)
{
u32 ctrl, mult = 1, prediv = 1, postdiv = 1;
Expand Down Expand Up @@ -506,6 +512,38 @@ int davinci_set_pllrate(struct pll_data *pll, unsigned int prediv,
}
EXPORT_SYMBOL(davinci_set_pllrate);

/**
* davinci_set_refclk_rate() - Set the reference clock rate
* @rate: The new rate.
*
* Sets the reference clock rate to a given value. This will most likely
* result in the entire clock tree getting updated.
*
* This is used to support boards which use a reference clock different
* than that used by default in <soc>.c file. The reference clock rate
* should be updated early in the boot process; ideally soon after the
* clock tree has been initialized once with the default reference clock
* rate (davinci_common_init()).
*
* Returns 0 on success, error otherwise.
*/
int davinci_set_refclk_rate(unsigned long rate)
{
struct clk *refclk;

refclk = clk_get(NULL, "ref");
if (IS_ERR(refclk)) {
pr_err("%s: failed to get reference clock.\n", __func__);
return PTR_ERR(refclk);
}

clk_set_rate(refclk, rate);

clk_put(refclk);

return 0;
}

int __init davinci_clk_init(struct clk_lookup *clocks)
{
struct clk_lookup *c;
Expand Down
2 changes: 2 additions & 0 deletions trunk/arch/arm/mach-davinci/clock.h
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ int davinci_clk_init(struct clk_lookup *clocks);
int davinci_set_pllrate(struct pll_data *pll, unsigned int prediv,
unsigned int mult, unsigned int postdiv);
int davinci_set_sysclk_rate(struct clk *clk, unsigned long rate);
int davinci_set_refclk_rate(unsigned long rate);
int davinci_simple_set_rate(struct clk *clk, unsigned long rate);

extern struct platform_device davinci_wdt_device;
extern void davinci_watchdog_reset(struct platform_device *);
Expand Down
4 changes: 3 additions & 1 deletion trunk/arch/arm/mach-davinci/dm646x.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
/*
* Device specific clocks
*/
#define DM646X_REF_FREQ 27000000
#define DM646X_AUX_FREQ 24000000

static struct pll_data pll1_data = {
Expand All @@ -56,6 +57,8 @@ static struct pll_data pll2_data = {

static struct clk ref_clk = {
.name = "ref_clk",
.rate = DM646X_REF_FREQ,
.set_rate = davinci_simple_set_rate,
};

static struct clk aux_clkin = {
Expand Down Expand Up @@ -901,7 +904,6 @@ int __init dm646x_init_edma(struct edma_rsv_info *rsv)

void __init dm646x_init(void)
{
dm646x_board_setup_refclk(&ref_clk);
davinci_common_init(&davinci_soc_info_dm646x);
}

Expand Down
2 changes: 0 additions & 2 deletions trunk/arch/arm/mach-davinci/include/mach/dm646x.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
#include <mach/asp.h>
#include <linux/i2c.h>
#include <linux/videodev2.h>
#include <linux/clk.h>
#include <linux/davinci_emac.h>

#define DM646X_EMAC_BASE (0x01C80000)
Expand All @@ -31,7 +30,6 @@
void __init dm646x_init(void);
void __init dm646x_init_mcasp0(struct snd_platform_data *pdata);
void __init dm646x_init_mcasp1(struct snd_platform_data *pdata);
void __init dm646x_board_setup_refclk(struct clk *clk);
int __init dm646x_init_edma(struct edma_rsv_info *rsv);

void dm646x_video_init(void);
Expand Down

0 comments on commit c3f161e

Please sign in to comment.