summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorJohn Linn <john.linn@xilinx.com>2009-06-05 11:36:31 -0600
committerMichal Simek <monstr@monstr.eu>2009-12-14 08:45:03 +0100
commit6d858535be59b220c0f8dc335e030c2e3f3a3032 (patch)
tree6760484ac9aaaf867a3889886ed178479783d792 /arch
parent95dfbbe4700016bddd7e8915e95a97652e70f495 (diff)
downloadlinux-3.10-6d858535be59b220c0f8dc335e030c2e3f3a3032.tar.gz
linux-3.10-6d858535be59b220c0f8dc335e030c2e3f3a3032.tar.bz2
linux-3.10-6d858535be59b220c0f8dc335e030c2e3f3a3032.zip
microblaze: Fix the heartbeat gpio to be more robust
The device tree handling for the gpio in the heart beat was not handling the system when there was no gpio and it wasn't working with a newer version of the gpio core which does not have the is-bidir property. Signed-off-by: John Linn <john.linn@xilinx.com> Signed-off-by: Michal Simek <monstr@monstr.eu>
Diffstat (limited to 'arch')
-rw-r--r--arch/microblaze/kernel/heartbeat.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/arch/microblaze/kernel/heartbeat.c b/arch/microblaze/kernel/heartbeat.c
index 1bdf20222b9..522751737cf 100644
--- a/arch/microblaze/kernel/heartbeat.c
+++ b/arch/microblaze/kernel/heartbeat.c
@@ -45,6 +45,7 @@ void heartbeat(void)
void setup_heartbeat(void)
{
struct device_node *gpio = NULL;
+ int *prop;
int j;
char *gpio_list[] = {
"xlnx,xps-gpio-1.00.a",
@@ -58,10 +59,14 @@ void setup_heartbeat(void)
break;
}
- base_addr = *(int *) of_get_property(gpio, "reg", NULL);
- base_addr = (unsigned long) ioremap(base_addr, PAGE_SIZE);
- printk(KERN_NOTICE "Heartbeat GPIO at 0x%x\n", base_addr);
+ if (gpio) {
+ base_addr = *(int *) of_get_property(gpio, "reg", NULL);
+ base_addr = (unsigned long) ioremap(base_addr, PAGE_SIZE);
+ printk(KERN_NOTICE "Heartbeat GPIO at 0x%x\n", base_addr);
- if (*(int *) of_get_property(gpio, "xlnx,is-bidir", NULL))
- out_be32(base_addr + 4, 0); /* GPIO is configured as output */
+ /* GPIO is configured as output */
+ prop = (int *) of_get_property(gpio, "xlnx,is-bidir", NULL);
+ if (prop)
+ out_be32(base_addr + 4, 0);
+ }
}