|
@@ -17,6 +17,8 @@
|
|
|
* more details.
|
|
|
*/
|
|
|
|
|
|
+#undef DEBUG
|
|
|
+
|
|
|
#include <linux/module.h>
|
|
|
#include <linux/kernel.h>
|
|
|
#include <linux/errno.h>
|
|
@@ -535,33 +537,35 @@ static int __devinit platinumfb_probe(struct of_device* odev,
|
|
|
volatile __u8 *fbuffer;
|
|
|
int bank0, bank1, bank2, bank3, rc;
|
|
|
|
|
|
- printk(KERN_INFO "platinumfb: Found Apple Platinum video hardware\n");
|
|
|
+ dev_info(&odev->dev, "Found Apple Platinum video hardware\n");
|
|
|
|
|
|
info = framebuffer_alloc(sizeof(*pinfo), &odev->dev);
|
|
|
- if (info == NULL)
|
|
|
+ if (info == NULL) {
|
|
|
+ dev_err(&odev->dev, "Failed to allocate fbdev !\n");
|
|
|
return -ENOMEM;
|
|
|
+ }
|
|
|
pinfo = info->par;
|
|
|
|
|
|
if (of_address_to_resource(dp, 0, &pinfo->rsrc_reg) ||
|
|
|
of_address_to_resource(dp, 1, &pinfo->rsrc_fb)) {
|
|
|
- printk(KERN_ERR "platinumfb: Can't get resources\n");
|
|
|
- framebuffer_release(info);
|
|
|
- return -ENXIO;
|
|
|
- }
|
|
|
- if (!request_mem_region(pinfo->rsrc_reg.start,
|
|
|
- pinfo->rsrc_reg.start -
|
|
|
- pinfo->rsrc_reg.end + 1,
|
|
|
- "platinumfb registers")) {
|
|
|
+ dev_err(&odev->dev, "Can't get resources\n");
|
|
|
framebuffer_release(info);
|
|
|
return -ENXIO;
|
|
|
}
|
|
|
+ dev_dbg(&odev->dev, " registers : 0x%llx...0x%llx\n",
|
|
|
+ (unsigned long long)pinfo->rsrc_reg.start,
|
|
|
+ (unsigned long long)pinfo->rsrc_reg.end);
|
|
|
+ dev_dbg(&odev->dev, " framebuffer: 0x%llx...0x%llx\n",
|
|
|
+ (unsigned long long)pinfo->rsrc_fb.start,
|
|
|
+ (unsigned long long)pinfo->rsrc_fb.end);
|
|
|
+
|
|
|
+ /* Do not try to request register space, they overlap with the
|
|
|
+ * northbridge and that can fail. Only request framebuffer
|
|
|
+ */
|
|
|
if (!request_mem_region(pinfo->rsrc_fb.start,
|
|
|
- pinfo->rsrc_fb.start
|
|
|
- - pinfo->rsrc_fb.end + 1,
|
|
|
+ pinfo->rsrc_fb.end - pinfo->rsrc_fb.start + 1,
|
|
|
"platinumfb framebuffer")) {
|
|
|
- release_mem_region(pinfo->rsrc_reg.start,
|
|
|
- pinfo->rsrc_reg.end -
|
|
|
- pinfo->rsrc_reg.start + 1);
|
|
|
+ printk(KERN_ERR "platinumfb: Can't request framebuffer !\n");
|
|
|
framebuffer_release(info);
|
|
|
return -ENXIO;
|
|
|
}
|
|
@@ -600,7 +604,8 @@ static int __devinit platinumfb_probe(struct of_device* odev,
|
|
|
bank2 = fbuffer[0x200000] == 0x56;
|
|
|
bank3 = fbuffer[0x300000] == 0x78;
|
|
|
pinfo->total_vram = (bank0 + bank1 + bank2 + bank3) * 0x100000;
|
|
|
- printk(KERN_INFO "platinumfb: Total VRAM = %dMB (%d%d%d%d)\n", (int) (pinfo->total_vram / 1024 / 1024),
|
|
|
+ printk(KERN_INFO "platinumfb: Total VRAM = %dMB (%d%d%d%d)\n",
|
|
|
+ (unsigned int) (pinfo->total_vram / 1024 / 1024),
|
|
|
bank3, bank2, bank1, bank0);
|
|
|
|
|
|
/*
|
|
@@ -644,16 +649,15 @@ static int __devexit platinumfb_remove(struct of_device* odev)
|
|
|
unregister_framebuffer (info);
|
|
|
|
|
|
/* Unmap frame buffer and registers */
|
|
|
+ iounmap(pinfo->frame_buffer);
|
|
|
+ iounmap(pinfo->platinum_regs);
|
|
|
+ iounmap(pinfo->cmap_regs);
|
|
|
+
|
|
|
release_mem_region(pinfo->rsrc_fb.start,
|
|
|
pinfo->rsrc_fb.end -
|
|
|
pinfo->rsrc_fb.start + 1);
|
|
|
- release_mem_region(pinfo->rsrc_reg.start,
|
|
|
- pinfo->rsrc_reg.end -
|
|
|
- pinfo->rsrc_reg.start + 1);
|
|
|
- iounmap(pinfo->frame_buffer);
|
|
|
- iounmap(pinfo->platinum_regs);
|
|
|
+
|
|
|
release_mem_region(pinfo->cmap_regs_phys, 0x1000);
|
|
|
- iounmap(pinfo->cmap_regs);
|
|
|
|
|
|
framebuffer_release(info);
|
|
|
|