Skip to content

Commit

Permalink
[WATCHDOG] mv64x60_wdt: Add arch/powerpc platform support
Browse files Browse the repository at this point in the history
Add support for arch/powerpc, specifically for the prpmc2800 platform.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
  • Loading branch information
Dale Farnsworth authored and Wim Van Sebroeck committed Jul 24, 2007
1 parent 8a5cfa6 commit 7e07a15
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 9 deletions.
6 changes: 6 additions & 0 deletions arch/powerpc/boot/dts/prpmc2800.dts
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,12 @@
interrupt-parent = <&/mv64x60/pic>;
};

wdt@b410 { /* watchdog timer */
compatible = "marvell,mv64x60-wdt";
reg = <b410 8>;
timeout = <a>; /* wdt timeout in seconds */
};

i2c@c000 {
device_type = "i2c";
compatible = "marvell,mv64x60-i2c";
Expand Down
64 changes: 64 additions & 0 deletions arch/powerpc/sysdev/mv64x60_dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,61 @@ static int __init mv64x60_i2c_device_setup(struct device_node *np, int id)
return err;
}

/*
* Create mv64x60_wdt platform devices
*/
static int __init mv64x60_wdt_device_setup(struct device_node *np, int id)
{
struct resource r;
struct platform_device *pdev;
struct mv64x60_wdt_pdata pdata;
const unsigned int *prop;
int err;

err = of_address_to_resource(np, 0, &r);
if (err)
return err;

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

prop = of_get_property(np, "timeout", NULL);
if (!prop)
return -ENODEV;
pdata.timeout = *prop;

np = of_get_parent(np);
if (!np)
return -ENODEV;

prop = of_get_property(np, "clock-frequency", NULL);
of_node_put(np);
if (!prop)
return -ENODEV;
pdata.bus_clk = *prop / 1000000; /* wdt driver wants freq in MHz */

pdev = platform_device_alloc(MV64x60_WDT_NAME, id);
if (!pdev)
return -ENOMEM;

err = platform_device_add_resources(pdev, &r, 1);
if (err)
goto error;

err = platform_device_add_data(pdev, &pdata, sizeof(pdata));
if (err)
goto error;

err = platform_device_add(pdev);
if (err)
goto error;

return 0;

error:
platform_device_put(pdev);
return err;
}

static int __init mv64x60_device_setup(void)
{
struct device_node *np = NULL;
Expand All @@ -414,6 +469,15 @@ static int __init mv64x60_device_setup(void)
if ((err = mv64x60_i2c_device_setup(np, id)))
goto error;

/* support up to one watchdog timer */
np = of_find_compatible_node(np, NULL, "marvell,mv64x60-wdt");
if (np) {
if ((err = mv64x60_wdt_device_setup(np, id)))
goto error;
of_node_put(np);
}


return 0;

error:
Expand Down
2 changes: 1 addition & 1 deletion drivers/char/watchdog/mv64x60_wdt.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
#include <linux/watchdog.h>
#include <linux/platform_device.h>

#include <asm/mv64x60.h>
#include <linux/mv643xx.h>
#include <asm/uaccess.h>
#include <asm/io.h>

Expand Down
8 changes: 0 additions & 8 deletions include/asm-ppc/mv64x60.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,14 +120,6 @@ extern spinlock_t mv64x60_lock;

#define MV64x60_64BIT_WIN_COUNT 24

/* Watchdog Platform Device, Driver Data */
#define MV64x60_WDT_NAME "mv64x60_wdt"

struct mv64x60_wdt_pdata {
int timeout; /* watchdog expiry in seconds, default 10 */
int bus_clk; /* bus clock in MHz, default 133 */
};

/*
* Define a structure that's used to pass in config information to the
* core routines.
Expand Down
8 changes: 8 additions & 0 deletions include/linux/mv643xx.h
Original file line number Diff line number Diff line change
Expand Up @@ -1302,4 +1302,12 @@ struct mv643xx_eth_platform_data {
u8 mac_addr[6]; /* mac address if non-zero*/
};

/* Watchdog Platform Device, Driver Data */
#define MV64x60_WDT_NAME "mv64x60_wdt"

struct mv64x60_wdt_pdata {
int timeout; /* watchdog expiry in seconds, default 10 */
int bus_clk; /* bus clock in MHz, default 133 */
};

#endif /* __ASM_MV643XX_H */

0 comments on commit 7e07a15

Please sign in to comment.