.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
---|
1 | 2 | /* |
---|
2 | 3 | * macfb.c: Generic framebuffer for Macs whose colourmaps/modes we |
---|
3 | 4 | * don't know how to set. |
---|
.. | .. |
---|
17 | 18 | * |
---|
18 | 19 | * The VideoToolbox "Bugs" web page at |
---|
19 | 20 | * http://rajsky.psych.nyu.edu/Tips/VideoBugs.html |
---|
20 | | - * |
---|
21 | | - * This code is free software. You may copy, modify, and distribute |
---|
22 | | - * it subject to the terms and conditions of the GNU General Public |
---|
23 | | - * License, version 2, or any later version, at your convenience. |
---|
24 | 21 | */ |
---|
25 | 22 | |
---|
26 | 23 | #include <linux/module.h> |
---|
.. | .. |
---|
120 | 117 | #define PIXEL_TO_MM(a) (((a)*10)/28) /* width in mm at 72 dpi */ |
---|
121 | 118 | |
---|
122 | 119 | static struct fb_var_screeninfo macfb_defined = { |
---|
123 | | - .bits_per_pixel = 8, |
---|
124 | 120 | .activate = FB_ACTIVATE_NOW, |
---|
125 | | - .width = -1, |
---|
126 | | - .height = -1, |
---|
127 | 121 | .right_margin = 32, |
---|
128 | 122 | .upper_margin = 16, |
---|
129 | 123 | .lower_margin = 4, |
---|
.. | .. |
---|
139 | 133 | static void *slot_addr; |
---|
140 | 134 | static struct fb_info fb_info; |
---|
141 | 135 | static u32 pseudo_palette[16]; |
---|
142 | | -static int inverse; |
---|
143 | 136 | static int vidtest; |
---|
144 | 137 | |
---|
145 | 138 | /* |
---|
.. | .. |
---|
152 | 145 | unsigned int green, unsigned int blue, |
---|
153 | 146 | struct fb_info *info) |
---|
154 | 147 | { |
---|
155 | | - static int lastreg = -1; |
---|
| 148 | + static int lastreg = -2; |
---|
156 | 149 | unsigned long flags; |
---|
157 | 150 | |
---|
158 | 151 | local_irq_save(flags); |
---|
.. | .. |
---|
201 | 194 | unsigned int bpp = info->var.bits_per_pixel; |
---|
202 | 195 | unsigned long flags; |
---|
203 | 196 | |
---|
204 | | - if (bpp > 8) |
---|
205 | | - return 1; /* failsafe */ |
---|
206 | | - |
---|
207 | 197 | local_irq_save(flags); |
---|
208 | 198 | |
---|
209 | 199 | /* On these chips, the CLUT register numbers are spread out |
---|
.. | .. |
---|
233 | 223 | struct fb_info *info) |
---|
234 | 224 | { |
---|
235 | 225 | unsigned long flags; |
---|
236 | | - |
---|
237 | | - if (info->var.bits_per_pixel > 8) |
---|
238 | | - return 1; /* failsafe */ |
---|
239 | 226 | |
---|
240 | 227 | local_irq_save(flags); |
---|
241 | 228 | |
---|
.. | .. |
---|
353 | 340 | unsigned long flags; |
---|
354 | 341 | int clut_status; |
---|
355 | 342 | |
---|
356 | | - if (info->var.bits_per_pixel > 8) |
---|
357 | | - return 1; /* failsafe */ |
---|
358 | | - |
---|
359 | 343 | local_irq_save(flags); |
---|
360 | 344 | |
---|
361 | 345 | /* Set the register address */ |
---|
.. | .. |
---|
494 | 478 | break; |
---|
495 | 479 | /* |
---|
496 | 480 | * 24-bit colour almost doesn't exist on 68k Macs -- |
---|
497 | | - * http://support.apple.com/kb/TA28634 (Old Article: 10992) |
---|
| 481 | + * https://support.apple.com/kb/TA28634 (Old Article: 10992) |
---|
498 | 482 | */ |
---|
499 | 483 | case 24: |
---|
500 | 484 | case 32: |
---|
.. | .. |
---|
512 | 496 | return 0; |
---|
513 | 497 | } |
---|
514 | 498 | |
---|
515 | | -static struct fb_ops macfb_ops = { |
---|
| 499 | +static const struct fb_ops macfb_ops = { |
---|
516 | 500 | .owner = THIS_MODULE, |
---|
517 | 501 | .fb_setcolreg = macfb_setcolreg, |
---|
518 | 502 | .fb_fillrect = cfb_fillrect, |
---|
.. | .. |
---|
532 | 516 | continue; |
---|
533 | 517 | |
---|
534 | 518 | if (!strcmp(this_opt, "inverse")) |
---|
535 | | - inverse = 1; |
---|
| 519 | + fb_invert_cmaps(); |
---|
536 | 520 | else |
---|
537 | 521 | if (!strcmp(this_opt, "vidtest")) |
---|
538 | 522 | vidtest = 1; /* enable experimental CLUT code */ |
---|
.. | .. |
---|
688 | 672 | case NUBUS_DRHW_APPLE_MDC: |
---|
689 | 673 | strcpy(macfb_fix.id, "Mac Disp. Card"); |
---|
690 | 674 | macfb_setpalette = mdc_setpalette; |
---|
691 | | - macfb_defined.activate = FB_ACTIVATE_NOW; |
---|
692 | 675 | break; |
---|
693 | 676 | case NUBUS_DRHW_APPLE_TFB: |
---|
694 | 677 | strcpy(macfb_fix.id, "Toby"); |
---|
695 | 678 | macfb_setpalette = toby_setpalette; |
---|
696 | | - macfb_defined.activate = FB_ACTIVATE_NOW; |
---|
697 | 679 | break; |
---|
698 | 680 | case NUBUS_DRHW_APPLE_JET: |
---|
699 | 681 | strcpy(macfb_fix.id, "Jet"); |
---|
700 | 682 | macfb_setpalette = jet_setpalette; |
---|
701 | | - macfb_defined.activate = FB_ACTIVATE_NOW; |
---|
702 | 683 | break; |
---|
703 | 684 | default: |
---|
704 | 685 | strcpy(macfb_fix.id, "Generic NuBus"); |
---|
.. | .. |
---|
731 | 712 | strcpy(macfb_fix.id, "DAFB"); |
---|
732 | 713 | macfb_setpalette = dafb_setpalette; |
---|
733 | 714 | dafb_cmap_regs = ioremap(DAFB_BASE, 0x1000); |
---|
734 | | - macfb_defined.activate = FB_ACTIVATE_NOW; |
---|
735 | 715 | break; |
---|
736 | 716 | |
---|
737 | 717 | /* |
---|
.. | .. |
---|
741 | 721 | strcpy(macfb_fix.id, "V8"); |
---|
742 | 722 | macfb_setpalette = v8_brazil_setpalette; |
---|
743 | 723 | v8_brazil_cmap_regs = ioremap(DAC_BASE, 0x1000); |
---|
744 | | - macfb_defined.activate = FB_ACTIVATE_NOW; |
---|
745 | 724 | break; |
---|
746 | 725 | |
---|
747 | 726 | /* |
---|
.. | .. |
---|
755 | 734 | strcpy(macfb_fix.id, "Brazil"); |
---|
756 | 735 | macfb_setpalette = v8_brazil_setpalette; |
---|
757 | 736 | v8_brazil_cmap_regs = ioremap(DAC_BASE, 0x1000); |
---|
758 | | - macfb_defined.activate = FB_ACTIVATE_NOW; |
---|
759 | 737 | break; |
---|
760 | 738 | |
---|
761 | 739 | /* |
---|
.. | .. |
---|
772 | 750 | strcpy(macfb_fix.id, "Sonora"); |
---|
773 | 751 | macfb_setpalette = v8_brazil_setpalette; |
---|
774 | 752 | v8_brazil_cmap_regs = ioremap(DAC_BASE, 0x1000); |
---|
775 | | - macfb_defined.activate = FB_ACTIVATE_NOW; |
---|
776 | 753 | break; |
---|
777 | 754 | |
---|
778 | 755 | /* |
---|
.. | .. |
---|
785 | 762 | strcpy(macfb_fix.id, "RBV"); |
---|
786 | 763 | macfb_setpalette = rbv_setpalette; |
---|
787 | 764 | rbv_cmap_regs = ioremap(DAC_BASE, 0x1000); |
---|
788 | | - macfb_defined.activate = FB_ACTIVATE_NOW; |
---|
789 | 765 | break; |
---|
790 | 766 | |
---|
791 | 767 | /* |
---|
.. | .. |
---|
796 | 772 | strcpy(macfb_fix.id, "Civic"); |
---|
797 | 773 | macfb_setpalette = civic_setpalette; |
---|
798 | 774 | civic_cmap_regs = ioremap(CIVIC_BASE, 0x1000); |
---|
799 | | - macfb_defined.activate = FB_ACTIVATE_NOW; |
---|
800 | 775 | break; |
---|
801 | 776 | |
---|
802 | 777 | |
---|
.. | .. |
---|
810 | 785 | macfb_setpalette = v8_brazil_setpalette; |
---|
811 | 786 | v8_brazil_cmap_regs = |
---|
812 | 787 | ioremap(DAC_BASE, 0x1000); |
---|
813 | | - macfb_defined.activate = FB_ACTIVATE_NOW; |
---|
814 | 788 | } |
---|
815 | 789 | break; |
---|
816 | 790 | |
---|
.. | .. |
---|
823 | 797 | macfb_setpalette = v8_brazil_setpalette; |
---|
824 | 798 | v8_brazil_cmap_regs = |
---|
825 | 799 | ioremap(DAC_BASE, 0x1000); |
---|
826 | | - macfb_defined.activate = FB_ACTIVATE_NOW; |
---|
827 | 800 | } |
---|
828 | 801 | break; |
---|
829 | 802 | |
---|
.. | .. |
---|
892 | 865 | strcpy(macfb_fix.id, "CSC"); |
---|
893 | 866 | macfb_setpalette = csc_setpalette; |
---|
894 | 867 | csc_cmap_regs = ioremap(CSC_BASE, 0x1000); |
---|
895 | | - macfb_defined.activate = FB_ACTIVATE_NOW; |
---|
896 | 868 | break; |
---|
897 | 869 | |
---|
898 | 870 | default: |
---|