[VIDEO]: Do not prom_halt() in cg3 and bw2 device probe.

Just give a normal kernel log message of the problem and
return failure.

Based upon a patch from Mark Fortescue.

Signed-off-by: David S. Miller <davem@davemloft.net>
diff --git a/drivers/video/bw2.c b/drivers/video/bw2.c
index 718b9f8..833b10c 100644
--- a/drivers/video/bw2.c
+++ b/drivers/video/bw2.c
@@ -233,9 +233,9 @@
 	0x10, 0x20,	0
 };
 
-static void __devinit bw2_do_default_mode(struct bw2_par *par,
-					  struct fb_info *info,
-					  int *linebytes)
+static int __devinit bw2_do_default_mode(struct bw2_par *par,
+					 struct fb_info *info,
+					 int *linebytes)
 {
 	u8 status, mon;
 	u8 *p;
@@ -266,17 +266,18 @@
 		break;
 
 	case BWTWO_SR_ID_NOCONN:
-		return;
+		return 0;
 
 	default:
-		prom_printf("bw2: can't handle SR %02x\n",
-			    status);
-		prom_halt();
+		printk(KERN_ERR "bw2: can't handle SR %02x\n",
+		       status);
+		return -EINVAL;
 	}
 	for ( ; *p; p += 2) {
 		u8 __iomem *regp = &((u8 __iomem *)par->regs)[p[0]];
 		sbus_writeb(p[1], regp);
 	}
+	return 0;
 }
 
 static int __devinit bw2_probe(struct of_device *op, const struct of_device_id *match)
@@ -312,8 +313,11 @@
 	if (!par->regs)
 		goto out_release_fb;
 
-	if (!of_find_property(dp, "width", NULL))
-		bw2_do_default_mode(par, info, &linebytes);
+	if (!of_find_property(dp, "width", NULL)) {
+		err = bw2_do_default_mode(par, info, &linebytes);
+		if (err)
+			goto out_unmap_regs;
+	}
 
 	par->fbsize = PAGE_ALIGN(linebytes * info->var.yres);
 
diff --git a/drivers/video/cg3.c b/drivers/video/cg3.c
index 5741b46..a5c7fb3 100644
--- a/drivers/video/cg3.c
+++ b/drivers/video/cg3.c
@@ -315,7 +315,7 @@
 	4, 0xff,	5, 0x00,	6, 0x70,	7, 0x00,	0
 };
 
-static void __devinit cg3_do_default_mode(struct cg3_par *par)
+static int __devinit cg3_do_default_mode(struct cg3_par *par)
 {
 	enum cg3_type type;
 	u8 *p;
@@ -332,10 +332,9 @@
 			else
 				type = CG3_AT_66HZ;
 		} else {
-			prom_printf("cgthree: can't handle SR %02x\n",
-				    status);
-			prom_halt();
-			return;
+			printk(KERN_ERR "cgthree: can't handle SR %02x\n",
+			       status);
+			return -EINVAL;
 		}
 	}
 
@@ -351,6 +350,7 @@
 		regp = (u8 __iomem *)&par->regs->cmap.control;
 		sbus_writeb(p[1], regp);
 	}
+	return 0;
 }
 
 static int __devinit cg3_probe(struct of_device *op,
@@ -400,8 +400,11 @@
 
 	cg3_blank(0, info);
 
-	if (!of_find_property(dp, "width", NULL))
-		cg3_do_default_mode(par);
+	if (!of_find_property(dp, "width", NULL)) {
+		err = cg3_do_default_mode(par);
+		if (err)
+			goto out_unmap_screen;
+	}
 
 	if (fb_alloc_cmap(&info->cmap, 256, 0))
 		goto out_unmap_screen;