aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/tgafb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/tgafb.c')
-rw-r--r--drivers/video/tgafb.c56
1 files changed, 11 insertions, 45 deletions
diff --git a/drivers/video/tgafb.c b/drivers/video/tgafb.c
index 94fde625a6c0..08b3153bfb3f 100644
--- a/drivers/video/tgafb.c
+++ b/drivers/video/tgafb.c
@@ -23,6 +23,7 @@
23#include <linux/fb.h> 23#include <linux/fb.h>
24#include <linux/pci.h> 24#include <linux/pci.h>
25#include <linux/selection.h> 25#include <linux/selection.h>
26#include <linux/bitrev.h>
26#include <asm/io.h> 27#include <asm/io.h>
27#include <video/tgafb.h> 28#include <video/tgafb.h>
28 29
@@ -517,41 +518,6 @@ tgafb_blank(int blank, struct fb_info *info)
517static void 518static void
518tgafb_imageblit(struct fb_info *info, const struct fb_image *image) 519tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
519{ 520{
520 static unsigned char const bitrev[256] = {
521 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
522 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
523 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
524 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
525 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
526 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
527 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
528 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
529 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
530 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
531 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
532 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
533 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
534 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
535 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
536 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
537 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
538 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
539 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
540 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
541 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
542 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
543 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
544 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
545 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
546 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
547 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
548 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
549 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
550 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
551 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
552 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
553 };
554
555 struct tga_par *par = (struct tga_par *) info->par; 521 struct tga_par *par = (struct tga_par *) info->par;
556 u32 fgcolor, bgcolor, dx, dy, width, height, vxres, vyres, pixelmask; 522 u32 fgcolor, bgcolor, dx, dy, width, height, vxres, vyres, pixelmask;
557 unsigned long rincr, line_length, shift, pos, is8bpp; 523 unsigned long rincr, line_length, shift, pos, is8bpp;
@@ -649,7 +615,7 @@ tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
649 /* The image data is bit big endian; we need 615 /* The image data is bit big endian; we need
650 little endian. */ 616 little endian. */
651 for (j = 0; j < bwidth; ++j) 617 for (j = 0; j < bwidth; ++j)
652 mask |= bitrev[data[j]] << (j * 8); 618 mask |= bitrev8(data[j]) << (j * 8);
653 619
654 __raw_writel(mask << shift, fb_base + pos); 620 __raw_writel(mask << shift, fb_base + pos);
655 621
@@ -676,10 +642,10 @@ tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
676 for (i = 0; i < height; ++i) { 642 for (i = 0; i < height; ++i) {
677 for (j = 0; j < bwidth; j += 4) { 643 for (j = 0; j < bwidth; j += 4) {
678 u32 mask = 0; 644 u32 mask = 0;
679 mask |= bitrev[data[j+0]] << (0 * 8); 645 mask |= bitrev8(data[j+0]) << (0 * 8);
680 mask |= bitrev[data[j+1]] << (1 * 8); 646 mask |= bitrev8(data[j+1]) << (1 * 8);
681 mask |= bitrev[data[j+2]] << (2 * 8); 647 mask |= bitrev8(data[j+2]) << (2 * 8);
682 mask |= bitrev[data[j+3]] << (3 * 8); 648 mask |= bitrev8(data[j+3]) << (3 * 8);
683 __raw_writel(mask, fb_base + pos + j*bincr); 649 __raw_writel(mask, fb_base + pos + j*bincr);
684 } 650 }
685 pos += line_length; 651 pos += line_length;
@@ -699,7 +665,7 @@ tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
699 for (i = 0; i < height; ++i) { 665 for (i = 0; i < height; ++i) {
700 u32 mask = 0; 666 u32 mask = 0;
701 for (j = 0; j < bwidth; ++j) 667 for (j = 0; j < bwidth; ++j)
702 mask |= bitrev[data[j]] << (j * 8); 668 mask |= bitrev8(data[j]) << (j * 8);
703 __raw_writel(mask, fb_base + pos); 669 __raw_writel(mask, fb_base + pos);
704 pos += line_length; 670 pos += line_length;
705 data += rincr; 671 data += rincr;
@@ -726,8 +692,8 @@ tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
726 for (i = 0; i < height; ++i) { 692 for (i = 0; i < height; ++i) {
727 for (j = 0; j < bwidth; j += 2) { 693 for (j = 0; j < bwidth; j += 2) {
728 u32 mask = 0; 694 u32 mask = 0;
729 mask |= bitrev[data[j+0]] << (0 * 8); 695 mask |= bitrev8(data[j+0]) << (0 * 8);
730 mask |= bitrev[data[j+1]] << (1 * 8); 696 mask |= bitrev8(data[j+1]) << (1 * 8);
731 mask <<= shift; 697 mask <<= shift;
732 __raw_writel(mask, fb_base + pos + j*bincr); 698 __raw_writel(mask, fb_base + pos + j*bincr);
733 } 699 }
@@ -746,9 +712,9 @@ tgafb_imageblit(struct fb_info *info, const struct fb_image *image)
746 bwidth = (width & 15) > 8; 712 bwidth = (width & 15) > 8;
747 713
748 for (i = 0; i < height; ++i) { 714 for (i = 0; i < height; ++i) {
749 u32 mask = bitrev[data[0]]; 715 u32 mask = bitrev8(data[0]);
750 if (bwidth) 716 if (bwidth)
751 mask |= bitrev[data[1]] << 8; 717 mask |= bitrev8(data[1]) << 8;
752 mask <<= shift; 718 mask <<= shift;
753 __raw_writel(mask, fb_base + pos); 719 __raw_writel(mask, fb_base + pos);
754 pos += line_length; 720 pos += line_length;