diff options
Diffstat (limited to 'drivers/video/atafb.c')
-rw-r--r-- | drivers/video/atafb.c | 74 |
1 files changed, 30 insertions, 44 deletions
diff --git a/drivers/video/atafb.c b/drivers/video/atafb.c index b7646ad71bb3..f932c138fe1d 100644 --- a/drivers/video/atafb.c +++ b/drivers/video/atafb.c | |||
@@ -149,6 +149,7 @@ static struct atafb_par { | |||
149 | short mono; | 149 | short mono; |
150 | short ste_mode; | 150 | short ste_mode; |
151 | short bpp; | 151 | short bpp; |
152 | u32 pseudo_palette[16]; | ||
152 | } falcon; | 153 | } falcon; |
153 | #endif | 154 | #endif |
154 | /* Nothing needed for external mode */ | 155 | /* Nothing needed for external mode */ |
@@ -885,10 +886,6 @@ static int vdl_prescale[4][3] = { | |||
885 | /* Default hsync timing [mon_type] in picoseconds */ | 886 | /* Default hsync timing [mon_type] in picoseconds */ |
886 | static long h_syncs[4] = { 3000000, 4875000, 4000000, 4875000 }; | 887 | static long h_syncs[4] = { 3000000, 4875000, 4000000, 4875000 }; |
887 | 888 | ||
888 | #ifdef FBCON_HAS_CFB16 | ||
889 | static u16 fbcon_cfb16_cmap[16]; | ||
890 | #endif | ||
891 | |||
892 | static inline int hxx_prescale(struct falcon_hw *hw) | 889 | static inline int hxx_prescale(struct falcon_hw *hw) |
893 | { | 890 | { |
894 | return hw->ste_mode ? 16 | 891 | return hw->ste_mode ? 16 |
@@ -1736,10 +1733,10 @@ static int falcon_setcolreg(unsigned int regno, unsigned int red, | |||
1736 | (((red & 0xe000) >> 13) | ((red & 0x1000) >> 12) << 8) | | 1733 | (((red & 0xe000) >> 13) | ((red & 0x1000) >> 12) << 8) | |
1737 | (((green & 0xe000) >> 13) | ((green & 0x1000) >> 12) << 4) | | 1734 | (((green & 0xe000) >> 13) | ((green & 0x1000) >> 12) << 4) | |
1738 | ((blue & 0xe000) >> 13) | ((blue & 0x1000) >> 12); | 1735 | ((blue & 0xe000) >> 13) | ((blue & 0x1000) >> 12); |
1739 | #ifdef FBCON_HAS_CFB16 | 1736 | #ifdef ATAFB_FALCON |
1740 | fbcon_cfb16_cmap[regno] = ((red & 0xf800) | | 1737 | ((u32 *)info->pseudo_palette)[regno] = ((red & 0xf800) | |
1741 | ((green & 0xfc00) >> 5) | | 1738 | ((green & 0xfc00) >> 5) | |
1742 | ((blue & 0xf800) >> 11)); | 1739 | ((blue & 0xf800) >> 11)); |
1743 | #endif | 1740 | #endif |
1744 | } | 1741 | } |
1745 | return 0; | 1742 | return 0; |
@@ -2447,42 +2444,6 @@ static void atafb_set_disp(struct fb_info *info) | |||
2447 | atafb_get_fix(&info->fix, info); | 2444 | atafb_get_fix(&info->fix, info); |
2448 | 2445 | ||
2449 | info->screen_base = (void *)info->fix.smem_start; | 2446 | info->screen_base = (void *)info->fix.smem_start; |
2450 | |||
2451 | switch (info->fix.type) { | ||
2452 | case FB_TYPE_INTERLEAVED_PLANES: | ||
2453 | switch (info->var.bits_per_pixel) { | ||
2454 | case 2: | ||
2455 | // display->dispsw = &fbcon_iplan2p2; | ||
2456 | break; | ||
2457 | case 4: | ||
2458 | // display->dispsw = &fbcon_iplan2p4; | ||
2459 | break; | ||
2460 | case 8: | ||
2461 | // display->dispsw = &fbcon_iplan2p8; | ||
2462 | break; | ||
2463 | } | ||
2464 | break; | ||
2465 | case FB_TYPE_PACKED_PIXELS: | ||
2466 | switch (info->var.bits_per_pixel) { | ||
2467 | #ifdef FBCON_HAS_MFB | ||
2468 | case 1: | ||
2469 | // display->dispsw = &fbcon_mfb; | ||
2470 | break; | ||
2471 | #endif | ||
2472 | #ifdef FBCON_HAS_CFB8 | ||
2473 | case 8: | ||
2474 | // display->dispsw = &fbcon_cfb8; | ||
2475 | break; | ||
2476 | #endif | ||
2477 | #ifdef FBCON_HAS_CFB16 | ||
2478 | case 16: | ||
2479 | // display->dispsw = &fbcon_cfb16; | ||
2480 | // display->dispsw_data = fbcon_cfb16_cmap; | ||
2481 | break; | ||
2482 | #endif | ||
2483 | } | ||
2484 | break; | ||
2485 | } | ||
2486 | } | 2447 | } |
2487 | 2448 | ||
2488 | static int atafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, | 2449 | static int atafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, |
@@ -2553,6 +2514,13 @@ static void atafb_fillrect(struct fb_info *info, const struct fb_fillrect *rect) | |||
2553 | if (!rect->width || !rect->height) | 2514 | if (!rect->width || !rect->height) |
2554 | return; | 2515 | return; |
2555 | 2516 | ||
2517 | #ifdef ATAFB_FALCON | ||
2518 | if (info->var.bits_per_pixel == 16) { | ||
2519 | cfb_fillrect(info, rect); | ||
2520 | return; | ||
2521 | } | ||
2522 | #endif | ||
2523 | |||
2556 | /* | 2524 | /* |
2557 | * We could use hardware clipping but on many cards you get around | 2525 | * We could use hardware clipping but on many cards you get around |
2558 | * hardware clipping by writing to framebuffer directly. | 2526 | * hardware clipping by writing to framebuffer directly. |
@@ -2587,6 +2555,13 @@ static void atafb_copyarea(struct fb_info *info, const struct fb_copyarea *area) | |||
2587 | u32 dx, dy, sx, sy, width, height; | 2555 | u32 dx, dy, sx, sy, width, height; |
2588 | int rev_copy = 0; | 2556 | int rev_copy = 0; |
2589 | 2557 | ||
2558 | #ifdef ATAFB_FALCON | ||
2559 | if (info->var.bits_per_pixel == 16) { | ||
2560 | cfb_copyarea(info, area); | ||
2561 | return; | ||
2562 | } | ||
2563 | #endif | ||
2564 | |||
2590 | /* clip the destination */ | 2565 | /* clip the destination */ |
2591 | x2 = area->dx + area->width; | 2566 | x2 = area->dx + area->width; |
2592 | y2 = area->dy + area->height; | 2567 | y2 = area->dy + area->height; |
@@ -2636,6 +2611,13 @@ static void atafb_imageblit(struct fb_info *info, const struct fb_image *image) | |||
2636 | const char *src; | 2611 | const char *src; |
2637 | u32 dx, dy, width, height, pitch; | 2612 | u32 dx, dy, width, height, pitch; |
2638 | 2613 | ||
2614 | #ifdef ATAFB_FALCON | ||
2615 | if (info->var.bits_per_pixel == 16) { | ||
2616 | cfb_imageblit(info, image); | ||
2617 | return; | ||
2618 | } | ||
2619 | #endif | ||
2620 | |||
2639 | /* | 2621 | /* |
2640 | * We could use hardware clipping but on many cards you get around | 2622 | * We could use hardware clipping but on many cards you get around |
2641 | * hardware clipping by writing to framebuffer directly like we are | 2623 | * hardware clipping by writing to framebuffer directly like we are |
@@ -3229,6 +3211,10 @@ int __init atafb_init(void) | |||
3229 | // tries to read from HW which may not be initialized yet | 3211 | // tries to read from HW which may not be initialized yet |
3230 | // so set sane var first, then call atafb_set_par | 3212 | // so set sane var first, then call atafb_set_par |
3231 | atafb_get_var(&fb_info.var, &fb_info); | 3213 | atafb_get_var(&fb_info.var, &fb_info); |
3214 | |||
3215 | #ifdef ATAFB_FALCON | ||
3216 | fb_info.pseudo_palette = current_par.hw.falcon.pseudo_palette; | ||
3217 | #endif | ||
3232 | fb_info.flags = FBINFO_FLAG_DEFAULT; | 3218 | fb_info.flags = FBINFO_FLAG_DEFAULT; |
3233 | 3219 | ||
3234 | if (!fb_find_mode(&fb_info.var, &fb_info, mode_option, atafb_modedb, | 3220 | if (!fb_find_mode(&fb_info.var, &fb_info, mode_option, atafb_modedb, |