diff options
Diffstat (limited to 'drivers/video/geode')
-rw-r--r-- | drivers/video/geode/gx1fb_core.c | 17 | ||||
-rw-r--r-- | drivers/video/geode/gxfb_core.c | 17 | ||||
-rw-r--r-- | drivers/video/geode/lxfb_core.c | 17 |
3 files changed, 33 insertions, 18 deletions
diff --git a/drivers/video/geode/gx1fb_core.c b/drivers/video/geode/gx1fb_core.c index 751e491ca8c..f20eff8c4a8 100644 --- a/drivers/video/geode/gx1fb_core.c +++ b/drivers/video/geode/gx1fb_core.c | |||
@@ -136,13 +136,10 @@ static int gx1fb_set_par(struct fb_info *info) | |||
136 | { | 136 | { |
137 | struct geodefb_par *par = info->par; | 137 | struct geodefb_par *par = info->par; |
138 | 138 | ||
139 | if (info->var.bits_per_pixel == 16) { | 139 | if (info->var.bits_per_pixel == 16) |
140 | info->fix.visual = FB_VISUAL_TRUECOLOR; | 140 | info->fix.visual = FB_VISUAL_TRUECOLOR; |
141 | fb_dealloc_cmap(&info->cmap); | 141 | else |
142 | } else { | ||
143 | info->fix.visual = FB_VISUAL_PSEUDOCOLOR; | 142 | info->fix.visual = FB_VISUAL_PSEUDOCOLOR; |
144 | fb_alloc_cmap(&info->cmap, 1<<info->var.bits_per_pixel, 0); | ||
145 | } | ||
146 | 143 | ||
147 | info->fix.line_length = gx1_line_delta(info->var.xres, info->var.bits_per_pixel); | 144 | info->fix.line_length = gx1_line_delta(info->var.xres, info->var.bits_per_pixel); |
148 | 145 | ||
@@ -315,6 +312,10 @@ static struct fb_info * __init gx1fb_init_fbinfo(struct device *dev) | |||
315 | if (!par->panel_x) | 312 | if (!par->panel_x) |
316 | par->enable_crt = 1; /* fall back to CRT if no panel is specified */ | 313 | par->enable_crt = 1; /* fall back to CRT if no panel is specified */ |
317 | 314 | ||
315 | if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) { | ||
316 | framebuffer_release(info); | ||
317 | return NULL; | ||
318 | } | ||
318 | return info; | 319 | return info; |
319 | } | 320 | } |
320 | 321 | ||
@@ -374,8 +375,11 @@ static int __init gx1fb_probe(struct pci_dev *pdev, const struct pci_device_id * | |||
374 | release_mem_region(gx1_gx_base() + 0x8300, 0x100); | 375 | release_mem_region(gx1_gx_base() + 0x8300, 0x100); |
375 | } | 376 | } |
376 | 377 | ||
377 | if (info) | 378 | if (info) { |
379 | fb_dealloc_cmap(&info->cmap); | ||
378 | framebuffer_release(info); | 380 | framebuffer_release(info); |
381 | } | ||
382 | |||
379 | return ret; | 383 | return ret; |
380 | } | 384 | } |
381 | 385 | ||
@@ -395,6 +399,7 @@ static void gx1fb_remove(struct pci_dev *pdev) | |||
395 | iounmap(par->dc_regs); | 399 | iounmap(par->dc_regs); |
396 | release_mem_region(gx1_gx_base() + 0x8300, 0x100); | 400 | release_mem_region(gx1_gx_base() + 0x8300, 0x100); |
397 | 401 | ||
402 | fb_dealloc_cmap(&info->cmap); | ||
398 | pci_set_drvdata(pdev, NULL); | 403 | pci_set_drvdata(pdev, NULL); |
399 | 404 | ||
400 | framebuffer_release(info); | 405 | framebuffer_release(info); |
diff --git a/drivers/video/geode/gxfb_core.c b/drivers/video/geode/gxfb_core.c index 48411892631..2552cac39e1 100644 --- a/drivers/video/geode/gxfb_core.c +++ b/drivers/video/geode/gxfb_core.c | |||
@@ -171,13 +171,10 @@ static int gxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
171 | 171 | ||
172 | static int gxfb_set_par(struct fb_info *info) | 172 | static int gxfb_set_par(struct fb_info *info) |
173 | { | 173 | { |
174 | if (info->var.bits_per_pixel > 8) { | 174 | if (info->var.bits_per_pixel > 8) |
175 | info->fix.visual = FB_VISUAL_TRUECOLOR; | 175 | info->fix.visual = FB_VISUAL_TRUECOLOR; |
176 | fb_dealloc_cmap(&info->cmap); | 176 | else |
177 | } else { | ||
178 | info->fix.visual = FB_VISUAL_PSEUDOCOLOR; | 177 | info->fix.visual = FB_VISUAL_PSEUDOCOLOR; |
179 | fb_alloc_cmap(&info->cmap, 1<<info->var.bits_per_pixel, 0); | ||
180 | } | ||
181 | 178 | ||
182 | info->fix.line_length = gx_line_delta(info->var.xres, info->var.bits_per_pixel); | 179 | info->fix.line_length = gx_line_delta(info->var.xres, info->var.bits_per_pixel); |
183 | 180 | ||
@@ -331,6 +328,11 @@ static struct fb_info * __init gxfb_init_fbinfo(struct device *dev) | |||
331 | 328 | ||
332 | info->var.grayscale = 0; | 329 | info->var.grayscale = 0; |
333 | 330 | ||
331 | if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) { | ||
332 | framebuffer_release(info); | ||
333 | return NULL; | ||
334 | } | ||
335 | |||
334 | return info; | 336 | return info; |
335 | } | 337 | } |
336 | 338 | ||
@@ -443,8 +445,10 @@ static int __init gxfb_probe(struct pci_dev *pdev, const struct pci_device_id *i | |||
443 | pci_release_region(pdev, 1); | 445 | pci_release_region(pdev, 1); |
444 | } | 446 | } |
445 | 447 | ||
446 | if (info) | 448 | if (info) { |
449 | fb_dealloc_cmap(&info->cmap); | ||
447 | framebuffer_release(info); | 450 | framebuffer_release(info); |
451 | } | ||
448 | return ret; | 452 | return ret; |
449 | } | 453 | } |
450 | 454 | ||
@@ -467,6 +471,7 @@ static void gxfb_remove(struct pci_dev *pdev) | |||
467 | iounmap(par->gp_regs); | 471 | iounmap(par->gp_regs); |
468 | pci_release_region(pdev, 1); | 472 | pci_release_region(pdev, 1); |
469 | 473 | ||
474 | fb_dealloc_cmap(&info->cmap); | ||
470 | pci_set_drvdata(pdev, NULL); | 475 | pci_set_drvdata(pdev, NULL); |
471 | 476 | ||
472 | framebuffer_release(info); | 477 | framebuffer_release(info); |
diff --git a/drivers/video/geode/lxfb_core.c b/drivers/video/geode/lxfb_core.c index b965ecdbc60..889cbe39e58 100644 --- a/drivers/video/geode/lxfb_core.c +++ b/drivers/video/geode/lxfb_core.c | |||
@@ -278,13 +278,10 @@ static int lxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
278 | 278 | ||
279 | static int lxfb_set_par(struct fb_info *info) | 279 | static int lxfb_set_par(struct fb_info *info) |
280 | { | 280 | { |
281 | if (info->var.bits_per_pixel > 8) { | 281 | if (info->var.bits_per_pixel > 8) |
282 | info->fix.visual = FB_VISUAL_TRUECOLOR; | 282 | info->fix.visual = FB_VISUAL_TRUECOLOR; |
283 | fb_dealloc_cmap(&info->cmap); | 283 | else |
284 | } else { | ||
285 | info->fix.visual = FB_VISUAL_PSEUDOCOLOR; | 284 | info->fix.visual = FB_VISUAL_PSEUDOCOLOR; |
286 | fb_alloc_cmap(&info->cmap, 1<<info->var.bits_per_pixel, 0); | ||
287 | } | ||
288 | 285 | ||
289 | info->fix.line_length = lx_get_pitch(info->var.xres, | 286 | info->fix.line_length = lx_get_pitch(info->var.xres, |
290 | info->var.bits_per_pixel); | 287 | info->var.bits_per_pixel); |
@@ -451,6 +448,11 @@ static struct fb_info * __init lxfb_init_fbinfo(struct device *dev) | |||
451 | 448 | ||
452 | info->pseudo_palette = (void *)par + sizeof(struct lxfb_par); | 449 | info->pseudo_palette = (void *)par + sizeof(struct lxfb_par); |
453 | 450 | ||
451 | if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) { | ||
452 | framebuffer_release(info); | ||
453 | return NULL; | ||
454 | } | ||
455 | |||
454 | info->var.grayscale = 0; | 456 | info->var.grayscale = 0; |
455 | 457 | ||
456 | return info; | 458 | return info; |
@@ -579,8 +581,10 @@ err: | |||
579 | pci_release_region(pdev, 3); | 581 | pci_release_region(pdev, 3); |
580 | } | 582 | } |
581 | 583 | ||
582 | if (info) | 584 | if (info) { |
585 | fb_dealloc_cmap(&info->cmap); | ||
583 | framebuffer_release(info); | 586 | framebuffer_release(info); |
587 | } | ||
584 | 588 | ||
585 | return ret; | 589 | return ret; |
586 | } | 590 | } |
@@ -604,6 +608,7 @@ static void lxfb_remove(struct pci_dev *pdev) | |||
604 | iounmap(par->vp_regs); | 608 | iounmap(par->vp_regs); |
605 | pci_release_region(pdev, 3); | 609 | pci_release_region(pdev, 3); |
606 | 610 | ||
611 | fb_dealloc_cmap(&info->cmap); | ||
607 | pci_set_drvdata(pdev, NULL); | 612 | pci_set_drvdata(pdev, NULL); |
608 | framebuffer_release(info); | 613 | framebuffer_release(info); |
609 | } | 614 | } |