Skip to content

Commit

Permalink
[POWERPC] fsl_soc: Factor fsl_get_sys_freq() out of the wdt and spi i…
Browse files Browse the repository at this point in the history
…nits.

Signed-off-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
  • Loading branch information
Scott Wood authored and Kumar Gala committed Apr 17, 2008
1 parent 9c43279 commit 3866409
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 38 deletions.
70 changes: 32 additions & 38 deletions arch/powerpc/sysdev/fsl_soc.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,33 @@ phys_addr_t get_immrbase(void)

EXPORT_SYMBOL(get_immrbase);

static u32 sysfreq = -1;

u32 fsl_get_sys_freq(void)
{
struct device_node *soc;
const u32 *prop;
int size;

if (sysfreq != -1)
return sysfreq;

soc = of_find_node_by_type(NULL, "soc");
if (!soc)
return -1;

prop = of_get_property(soc, "clock-frequency", &size);
if (!prop || size != sizeof(*prop) || *prop == 0)
prop = of_get_property(soc, "bus-frequency", &size);

if (prop && size == sizeof(*prop))
sysfreq = *prop;

of_node_put(soc);
return sysfreq;
}
EXPORT_SYMBOL(fsl_get_sys_freq);

#if defined(CONFIG_CPM2) || defined(CONFIG_QUICC_ENGINE) || defined(CONFIG_8xx)

static u32 brgfreq = -1;
Expand Down Expand Up @@ -516,9 +543,9 @@ arch_initcall(fsl_i2c_of_init);
static int __init mpc83xx_wdt_init(void)
{
struct resource r;
struct device_node *soc, *np;
struct device_node *np;
struct platform_device *dev;
const unsigned int *freq;
u32 freq = fsl_get_sys_freq();
int ret;

np = of_find_compatible_node(NULL, "watchdog", "mpc83xx_wdt");
Expand All @@ -528,19 +555,6 @@ static int __init mpc83xx_wdt_init(void)
goto nodev;
}

soc = of_find_node_by_type(NULL, "soc");

if (!soc) {
ret = -ENODEV;
goto nosoc;
}

freq = of_get_property(soc, "bus-frequency", NULL);
if (!freq) {
ret = -ENODEV;
goto err;
}

memset(&r, 0, sizeof(r));

ret = of_address_to_resource(np, 0, &r);
Expand All @@ -553,20 +567,16 @@ static int __init mpc83xx_wdt_init(void)
goto err;
}

ret = platform_device_add_data(dev, freq, sizeof(int));
ret = platform_device_add_data(dev, &freq, sizeof(freq));
if (ret)
goto unreg;

of_node_put(soc);
of_node_put(np);

return 0;

unreg:
platform_device_unregister(dev);
err:
of_node_put(soc);
nosoc:
of_node_put(np);
nodev:
return ret;
Expand Down Expand Up @@ -830,25 +840,9 @@ int __init fsl_spi_init(struct spi_board_info *board_infos,
sysclk = get_brgfreq();
#endif
if (sysclk == -1) {
struct device_node *np;
const u32 *freq;
int size;

np = of_find_node_by_type(NULL, "soc");
if (!np)
sysclk = fsl_get_sys_freq();
if (sysclk == -1)
return -ENODEV;

freq = of_get_property(np, "clock-frequency", &size);
if (!freq || size != sizeof(*freq) || *freq == 0) {
freq = of_get_property(np, "bus-frequency", &size);
if (!freq || size != sizeof(*freq) || *freq == 0) {
of_node_put(np);
return -ENODEV;
}
}

sysclk = *freq;
of_node_put(np);
}

ret = of_fsl_spi_probe(NULL, "fsl,spi", sysclk, board_infos,
Expand Down
1 change: 1 addition & 0 deletions arch/powerpc/sysdev/fsl_soc.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
extern phys_addr_t get_immrbase(void);
extern u32 get_brgfreq(void);
extern u32 get_baudrate(void);
extern u32 fsl_get_sys_freq(void);

struct spi_board_info;

Expand Down

0 comments on commit 3866409

Please sign in to comment.