diff options
author | Kevin Hilman <khilman@deeprootsystems.com> | 2009-04-29 19:23:59 -0400 |
---|---|---|
committer | Kevin Hilman <khilman@deeprootsystems.com> | 2009-05-26 10:18:15 -0400 |
commit | fb6313879caa46831d71a316b97b51d37d100269 (patch) | |
tree | 17441fc3ff71bfda33af952f4ff7d4e1f1ea7403 /arch/arm/mach-davinci | |
parent | 0521444d497ee1f8a31314d2ce3c6b9edab25b51 (diff) |
davinci: add platform support for watchdog timer
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
Diffstat (limited to 'arch/arm/mach-davinci')
-rw-r--r-- | arch/arm/mach-davinci/clock.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-davinci/devices.c | 35 | ||||
-rw-r--r-- | arch/arm/mach-davinci/time.c | 9 |
3 files changed, 42 insertions, 5 deletions
diff --git a/arch/arm/mach-davinci/clock.h b/arch/arm/mach-davinci/clock.h index 35736ec202f8..584494a32070 100644 --- a/arch/arm/mach-davinci/clock.h +++ b/arch/arm/mach-davinci/clock.h | |||
@@ -93,4 +93,7 @@ struct davinci_clk { | |||
93 | } | 93 | } |
94 | 94 | ||
95 | int davinci_clk_init(struct davinci_clk *clocks); | 95 | int davinci_clk_init(struct davinci_clk *clocks); |
96 | |||
97 | extern struct platform_device davinci_wdt_device; | ||
98 | |||
96 | #endif | 99 | #endif |
diff --git a/arch/arm/mach-davinci/devices.c b/arch/arm/mach-davinci/devices.c index a31370b93dd2..7fdc408105b2 100644 --- a/arch/arm/mach-davinci/devices.c +++ b/arch/arm/mach-davinci/devices.c | |||
@@ -54,3 +54,38 @@ void __init davinci_init_i2c(struct davinci_i2c_platform_data *pdata) | |||
54 | (void) platform_device_register(&davinci_i2c_device); | 54 | (void) platform_device_register(&davinci_i2c_device); |
55 | } | 55 | } |
56 | 56 | ||
57 | /*-------------------------------------------------------------------------*/ | ||
58 | |||
59 | static struct resource wdt_resources[] = { | ||
60 | { | ||
61 | .start = 0x01c21c00, | ||
62 | .end = 0x01c21fff, | ||
63 | .flags = IORESOURCE_MEM, | ||
64 | }, | ||
65 | }; | ||
66 | |||
67 | struct platform_device davinci_wdt_device = { | ||
68 | .name = "watchdog", | ||
69 | .id = -1, | ||
70 | .num_resources = ARRAY_SIZE(wdt_resources), | ||
71 | .resource = wdt_resources, | ||
72 | }; | ||
73 | |||
74 | static void davinci_init_wdt(void) | ||
75 | { | ||
76 | platform_device_register(&davinci_wdt_device); | ||
77 | } | ||
78 | |||
79 | /*-------------------------------------------------------------------------*/ | ||
80 | |||
81 | static int __init davinci_init_devices(void) | ||
82 | { | ||
83 | /* please keep these calls, and their implementations above, | ||
84 | * in alphabetical order so they're easier to sort through. | ||
85 | */ | ||
86 | davinci_init_wdt(); | ||
87 | |||
88 | return 0; | ||
89 | } | ||
90 | arch_initcall(davinci_init_devices); | ||
91 | |||
diff --git a/arch/arm/mach-davinci/time.c b/arch/arm/mach-davinci/time.c index 494e01bff5c3..efbbc2ac63b4 100644 --- a/arch/arm/mach-davinci/time.c +++ b/arch/arm/mach-davinci/time.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/clk.h> | 19 | #include <linux/clk.h> |
20 | #include <linux/err.h> | 20 | #include <linux/err.h> |
21 | #include <linux/device.h> | 21 | #include <linux/device.h> |
22 | #include <linux/platform_device.h> | ||
22 | 23 | ||
23 | #include <mach/hardware.h> | 24 | #include <mach/hardware.h> |
24 | #include <asm/system.h> | 25 | #include <asm/system.h> |
@@ -349,15 +350,13 @@ struct sys_timer davinci_timer = { | |||
349 | 350 | ||
350 | 351 | ||
351 | /* reset board using watchdog timer */ | 352 | /* reset board using watchdog timer */ |
352 | void davinci_watchdog_reset(void) { | 353 | void davinci_watchdog_reset(void) |
354 | { | ||
353 | u32 tgcr, wdtcr; | 355 | u32 tgcr, wdtcr; |
354 | void __iomem *base = IO_ADDRESS(DAVINCI_WDOG_BASE); | 356 | void __iomem *base = IO_ADDRESS(DAVINCI_WDOG_BASE); |
355 | struct device dev; | ||
356 | struct clk *wd_clk; | 357 | struct clk *wd_clk; |
357 | char *name = "watchdog"; | ||
358 | 358 | ||
359 | dev_set_name(&dev, name); | 359 | wd_clk = clk_get(&davinci_wdt_device.dev, NULL); |
360 | wd_clk = clk_get(&dev, NULL); | ||
361 | if (WARN_ON(IS_ERR(wd_clk))) | 360 | if (WARN_ON(IS_ERR(wd_clk))) |
362 | return; | 361 | return; |
363 | clk_enable(wd_clk); | 362 | clk_enable(wd_clk); |