microblaze: Fix the heartbeat gpio to be more robust
authorJohn Linn <john.linn@xilinx.com>
Fri, 5 Jun 2009 17:36:31 +0000 (11:36 -0600)
committerMichal Simek <monstr@monstr.eu>
Mon, 14 Dec 2009 07:45:03 +0000 (08:45 +0100)
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>
arch/microblaze/kernel/heartbeat.c

index 1bdf202..5227517 100644 (file)
@@ -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);
+       }
 }