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: Maciej W. Rozycki <macro@linux-mips.org> Signed-off-by: Antonino Daplas <adaplas@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
076a7dce9a
commit
840bc9b093
1 changed files with 27 additions and 7 deletions
|
@ -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 @@ static int __init pmagbbfb_probe(struct device *dev)
|
|||
|
||||
err_alloc:
|
||||
framebuffer_release(info);
|
||||
return -ENXIO;
|
||||
return err;
|
||||
}
|
||||
|
||||
static int __exit pmagbbfb_remove(struct device *dev)
|
||||
|
|
Loading…
Reference in a new issue