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

Commit 840bc9b0 authored by Maciej W. Rozycki's avatar Maciej W. Rozycki Committed by Linus Torvalds
Browse files

pmagb-b-fb: improve diagnostics



Add error messages to the probe call.

[adaplas]
On failure, return actual error value instead of -ENXIO.

Signed-off-by: default avatarMaciej W. Rozycki <macro@linux-mips.org>
Signed-off-by: default avatarAntonino Daplas <adaplas@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 076a7dce
Loading
Loading
Loading
Loading
+27 −7
Original line number Diff line number Diff line
@@ -254,16 +254,23 @@ static int __init pmagbbfb_probe(struct device *dev)
	struct pmagbbfb_par *par;
	char freq0[12], freq1[12];
	u32 vid_base;
	int err;

	info = framebuffer_alloc(sizeof(struct pmagbbfb_par), dev);
	if (!info)
	if (!info) {
		printk(KERN_ERR "%s: Cannot allocate memory\n", dev->bus_id);
		return -ENOMEM;
	}

	par = info->par;
	dev_set_drvdata(dev, info);

	if (fb_alloc_cmap(&info->cmap, 256, 0) < 0)
	if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
		printk(KERN_ERR "%s: Cannot allocate color map\n",
		       dev->bus_id);
		err = -ENOMEM;
		goto err_alloc;
	}

	info->fbops = &pmagbbfb_ops;
	info->fix = pmagbbfb_fix;
@@ -273,22 +280,31 @@ static int __init pmagbbfb_probe(struct device *dev)
	/* Request the I/O MEM resource.  */
	start = tdev->resource.start;
	len = tdev->resource.end - start + 1;
	if (!request_mem_region(start, len, dev->bus_id))
	if (!request_mem_region(start, len, dev->bus_id)) {
		printk(KERN_ERR "%s: Cannot reserve FB region\n", dev->bus_id);
		err = -EBUSY;
		goto err_cmap;
	}

	/* MMIO mapping setup.  */
	info->fix.mmio_start = start;
	par->mmio = ioremap_nocache(info->fix.mmio_start, info->fix.mmio_len);
	if (!par->mmio)
	if (!par->mmio) {
		printk(KERN_ERR "%s: Cannot map MMIO\n", dev->bus_id);
		err = -ENOMEM;
		goto err_resource;
	}
	par->sfb = par->mmio + PMAGB_B_SFB;
	par->dac = par->mmio + PMAGB_B_BT459;

	/* Frame buffer mapping setup.  */
	info->fix.smem_start = start + PMAGB_B_FBMEM;
	par->smem = ioremap_nocache(info->fix.smem_start, info->fix.smem_len);
	if (!par->smem)
	if (!par->smem) {
		printk(KERN_ERR "%s: Cannot map FB\n", dev->bus_id);
		err = -ENOMEM;
		goto err_mmio_map;
	}
	vid_base = sfb_read(par, SFB_REG_VID_BASE);
	info->screen_base = (void __iomem *)par->smem + vid_base * 0x1000;
	info->screen_size = info->fix.smem_len - 2 * vid_base * 0x1000;
@@ -297,8 +313,12 @@ static int __init pmagbbfb_probe(struct device *dev)
	pmagbbfb_screen_setup(info);
	pmagbbfb_osc_setup(info);

	if (register_framebuffer(info) < 0)
	err = register_framebuffer(info);
	if (err < 0) {
		printk(KERN_ERR "%s: Cannot register framebuffer\n",
		       dev->bus_id);
		goto err_smem_map;
	}

	get_device(dev);

@@ -330,7 +350,7 @@ err_cmap:

err_alloc:
	framebuffer_release(info);
	return -ENXIO;
	return err;
}

static int __exit pmagbbfb_remove(struct device *dev)