diff options
| -rw-r--r-- | drivers/video/s3fb.c | 9 | ||||
| -rw-r--r-- | drivers/video/svgalib.c | 47 |
2 files changed, 38 insertions, 18 deletions
diff --git a/drivers/video/s3fb.c b/drivers/video/s3fb.c index d11735895a01..a96ac4392173 100644 --- a/drivers/video/s3fb.c +++ b/drivers/video/s3fb.c | |||
| @@ -403,8 +403,13 @@ static int s3fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
| 403 | 403 | ||
| 404 | /* Find appropriate format */ | 404 | /* Find appropriate format */ |
| 405 | rv = svga_match_format (s3fb_formats, var, NULL); | 405 | rv = svga_match_format (s3fb_formats, var, NULL); |
| 406 | if ((rv < 0) || ((par->chip == CHIP_988_VIRGE_VX) ? (rv == 7) : (rv == 6))) | 406 | |
| 407 | { /* 24bpp on VIRGE VX, 32bpp on others */ | 407 | /* 32bpp mode is not supported on VIRGE VX, |
| 408 | 24bpp is not supported on others */ | ||
| 409 | if ((par->chip == CHIP_988_VIRGE_VX) ? (rv == 7) : (rv == 6)) | ||
| 410 | rv = -EINVAL; | ||
| 411 | |||
| 412 | if (rv < 0) { | ||
| 408 | printk(KERN_ERR "fb%d: unsupported mode requested\n", info->node); | 413 | printk(KERN_ERR "fb%d: unsupported mode requested\n", info->node); |
| 409 | return rv; | 414 | return rv; |
| 410 | } | 415 | } |
diff --git a/drivers/video/svgalib.c b/drivers/video/svgalib.c index 25df928d37d8..9c7106701572 100644 --- a/drivers/video/svgalib.c +++ b/drivers/video/svgalib.c | |||
| @@ -598,9 +598,11 @@ void svga_set_timings(const struct svga_timing_regs *tm, struct fb_var_screeninf | |||
| 598 | /* ------------------------------------------------------------------------- */ | 598 | /* ------------------------------------------------------------------------- */ |
| 599 | 599 | ||
| 600 | 600 | ||
| 601 | int svga_match_format(const struct svga_fb_format *frm, struct fb_var_screeninfo *var, struct fb_fix_screeninfo *fix) | 601 | static inline int match_format(const struct svga_fb_format *frm, |
| 602 | struct fb_var_screeninfo *var) | ||
| 602 | { | 603 | { |
| 603 | int i = 0; | 604 | int i = 0; |
| 605 | int stored = -EINVAL; | ||
| 604 | 606 | ||
| 605 | while (frm->bits_per_pixel != SVGA_FORMAT_END_VAL) | 607 | while (frm->bits_per_pixel != SVGA_FORMAT_END_VAL) |
| 606 | { | 608 | { |
| @@ -609,25 +611,38 @@ int svga_match_format(const struct svga_fb_format *frm, struct fb_var_screeninfo | |||
| 609 | (var->green.length <= frm->green.length) && | 611 | (var->green.length <= frm->green.length) && |
| 610 | (var->blue.length <= frm->blue.length) && | 612 | (var->blue.length <= frm->blue.length) && |
| 611 | (var->transp.length <= frm->transp.length) && | 613 | (var->transp.length <= frm->transp.length) && |
| 612 | (var->nonstd == frm->nonstd)) { | 614 | (var->nonstd == frm->nonstd)) |
| 613 | var->bits_per_pixel = frm->bits_per_pixel; | ||
| 614 | var->red = frm->red; | ||
| 615 | var->green = frm->green; | ||
| 616 | var->blue = frm->blue; | ||
| 617 | var->transp = frm->transp; | ||
| 618 | var->nonstd = frm->nonstd; | ||
| 619 | if (fix != NULL) { | ||
| 620 | fix->type = frm->type; | ||
| 621 | fix->type_aux = frm->type_aux; | ||
| 622 | fix->visual = frm->visual; | ||
| 623 | fix->xpanstep = frm->xpanstep; | ||
| 624 | } | ||
| 625 | return i; | 615 | return i; |
| 626 | } | 616 | if (var->bits_per_pixel == frm->bits_per_pixel) |
| 617 | stored = i; | ||
| 627 | i++; | 618 | i++; |
| 628 | frm++; | 619 | frm++; |
| 629 | } | 620 | } |
| 630 | return -EINVAL; | 621 | return stored; |
| 622 | } | ||
| 623 | |||
| 624 | int svga_match_format(const struct svga_fb_format *frm, | ||
| 625 | struct fb_var_screeninfo *var, | ||
| 626 | struct fb_fix_screeninfo *fix) | ||
| 627 | { | ||
| 628 | int i = match_format(frm, var); | ||
| 629 | |||
| 630 | if (i >= 0) { | ||
| 631 | var->bits_per_pixel = frm[i].bits_per_pixel; | ||
| 632 | var->red = frm[i].red; | ||
| 633 | var->green = frm[i].green; | ||
| 634 | var->blue = frm[i].blue; | ||
| 635 | var->transp = frm[i].transp; | ||
| 636 | var->nonstd = frm[i].nonstd; | ||
| 637 | if (fix != NULL) { | ||
| 638 | fix->type = frm[i].type; | ||
| 639 | fix->type_aux = frm[i].type_aux; | ||
| 640 | fix->visual = frm[i].visual; | ||
| 641 | fix->xpanstep = frm[i].xpanstep; | ||
| 642 | } | ||
| 643 | } | ||
| 644 | |||
| 645 | return i; | ||
| 631 | } | 646 | } |
| 632 | 647 | ||
| 633 | 648 | ||
