|
@@ -136,13 +136,10 @@ static int gx1fb_set_par(struct fb_info *info)
|
|
|
{
|
|
|
struct geodefb_par *par = info->par;
|
|
|
|
|
|
- if (info->var.bits_per_pixel == 16) {
|
|
|
+ if (info->var.bits_per_pixel == 16)
|
|
|
info->fix.visual = FB_VISUAL_TRUECOLOR;
|
|
|
- fb_dealloc_cmap(&info->cmap);
|
|
|
- } else {
|
|
|
+ else
|
|
|
info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
|
|
|
- fb_alloc_cmap(&info->cmap, 1<<info->var.bits_per_pixel, 0);
|
|
|
- }
|
|
|
|
|
|
info->fix.line_length = gx1_line_delta(info->var.xres, info->var.bits_per_pixel);
|
|
|
|
|
@@ -315,6 +312,10 @@ static struct fb_info * __init gx1fb_init_fbinfo(struct device *dev)
|
|
|
if (!par->panel_x)
|
|
|
par->enable_crt = 1; /* fall back to CRT if no panel is specified */
|
|
|
|
|
|
+ if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
|
|
|
+ framebuffer_release(info);
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
return info;
|
|
|
}
|
|
|
|
|
@@ -374,8 +375,11 @@ static int __init gx1fb_probe(struct pci_dev *pdev, const struct pci_device_id *
|
|
|
release_mem_region(gx1_gx_base() + 0x8300, 0x100);
|
|
|
}
|
|
|
|
|
|
- if (info)
|
|
|
+ if (info) {
|
|
|
+ fb_dealloc_cmap(&info->cmap);
|
|
|
framebuffer_release(info);
|
|
|
+ }
|
|
|
+
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -395,6 +399,7 @@ static void gx1fb_remove(struct pci_dev *pdev)
|
|
|
iounmap(par->dc_regs);
|
|
|
release_mem_region(gx1_gx_base() + 0x8300, 0x100);
|
|
|
|
|
|
+ fb_dealloc_cmap(&info->cmap);
|
|
|
pci_set_drvdata(pdev, NULL);
|
|
|
|
|
|
framebuffer_release(info);
|