davinci: add platform support for watchdog timer

Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
This commit is contained in:
Kevin Hilman 2009-04-29 16:23:59 -07:00
parent 0521444d49
commit fb6313879c
3 changed files with 42 additions and 5 deletions

View file

@ -93,4 +93,7 @@ struct davinci_clk {
} }
int davinci_clk_init(struct davinci_clk *clocks); int davinci_clk_init(struct davinci_clk *clocks);
extern struct platform_device davinci_wdt_device;
#endif #endif

View file

@ -54,3 +54,38 @@ void __init davinci_init_i2c(struct davinci_i2c_platform_data *pdata)
(void) platform_device_register(&davinci_i2c_device); (void) platform_device_register(&davinci_i2c_device);
} }
/*-------------------------------------------------------------------------*/
static struct resource wdt_resources[] = {
{
.start = 0x01c21c00,
.end = 0x01c21fff,
.flags = IORESOURCE_MEM,
},
};
struct platform_device davinci_wdt_device = {
.name = "watchdog",
.id = -1,
.num_resources = ARRAY_SIZE(wdt_resources),
.resource = wdt_resources,
};
static void davinci_init_wdt(void)
{
platform_device_register(&davinci_wdt_device);
}
/*-------------------------------------------------------------------------*/
static int __init davinci_init_devices(void)
{
/* please keep these calls, and their implementations above,
* in alphabetical order so they're easier to sort through.
*/
davinci_init_wdt();
return 0;
}
arch_initcall(davinci_init_devices);

View file

@ -19,6 +19,7 @@
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/platform_device.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/system.h> #include <asm/system.h>
@ -349,15 +350,13 @@ struct sys_timer davinci_timer = {
/* reset board using watchdog timer */ /* reset board using watchdog timer */
void davinci_watchdog_reset(void) { void davinci_watchdog_reset(void)
{
u32 tgcr, wdtcr; u32 tgcr, wdtcr;
void __iomem *base = IO_ADDRESS(DAVINCI_WDOG_BASE); void __iomem *base = IO_ADDRESS(DAVINCI_WDOG_BASE);
struct device dev;
struct clk *wd_clk; struct clk *wd_clk;
char *name = "watchdog";
dev_set_name(&dev, name); wd_clk = clk_get(&davinci_wdt_device.dev, NULL);
wd_clk = clk_get(&dev, NULL);
if (WARN_ON(IS_ERR(wd_clk))) if (WARN_ON(IS_ERR(wd_clk)))
return; return;
clk_enable(wd_clk); clk_enable(wd_clk);