Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6c8f5b90 authored by David S. Miller's avatar David S. Miller
Browse files

[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: default avatarDavid S. Miller <davem@davemloft.net>
parent 1bd4b280
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -233,7 +233,7 @@ static u8 bw2regs_66hz[] __devinitdata = {
	0x10, 0x20,	0
};

static void __devinit bw2_do_default_mode(struct bw2_par *par,
static int __devinit bw2_do_default_mode(struct bw2_par *par,
					 struct fb_info *info,
					 int *linebytes)
{
@@ -266,17 +266,18 @@ static void __devinit bw2_do_default_mode(struct bw2_par *par,
		break;

	case BWTWO_SR_ID_NOCONN:
		return;
		return 0;

	default:
		prom_printf("bw2: can't handle SR %02x\n",
		printk(KERN_ERR "bw2: can't handle SR %02x\n",
		       status);
		prom_halt();
		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 @@ static int __devinit bw2_probe(struct of_device *op, const struct of_device_id *
	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);

+10 −7
Original line number Diff line number Diff line
@@ -315,7 +315,7 @@ static u_char cg3_dacvals[] __devinitdata = {
	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 @@ static void __devinit cg3_do_default_mode(struct cg3_par *par)
			else
				type = CG3_AT_66HZ;
		} else {
			prom_printf("cgthree: can't handle SR %02x\n",
			printk(KERN_ERR "cgthree: can't handle SR %02x\n",
			       status);
			prom_halt();
			return;
			return -EINVAL;
		}
	}

@@ -351,6 +350,7 @@ static void __devinit cg3_do_default_mode(struct cg3_par *par)
		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 @@ static int __devinit cg3_probe(struct of_device *op,

	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;