浏览代码

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>
John Linn 16 年之前
父节点
当前提交
6d858535be
共有 1 个文件被更改,包括 10 次插入5 次删除
  1. 10 5
      arch/microblaze/kernel/heartbeat.c

+ 10 - 5
arch/microblaze/kernel/heartbeat.c

@@ -45,6 +45,7 @@ void heartbeat(void)
 void setup_heartbeat(void)
 void setup_heartbeat(void)
 {
 {
 	struct device_node *gpio = NULL;
 	struct device_node *gpio = NULL;
+	int *prop;
 	int j;
 	int j;
 	char *gpio_list[] = {
 	char *gpio_list[] = {
 				"xlnx,xps-gpio-1.00.a",
 				"xlnx,xps-gpio-1.00.a",
@@ -58,10 +59,14 @@ void setup_heartbeat(void)
 			break;
 			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);
+	}
 }
 }