Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | /* SPDX-License-Identifier: GPL-2.0-or-later */ /* * valkyriefb.h: Constants of all sorts for valkyriefb * * Created 8 August 1998 by * Martin Costabel <costabel@wanadoo.fr> and Kevin Schoedel * * Vmode-switching changes and vmode 15/17 modifications created 29 August * 1998 by Barry K. Nathan <barryn@pobox.com>. * * vmode 10 changed by Steven Borley <sjb@salix.demon.co.uk>, 14 mai 2000 * * Ported to 68k Macintosh by David Huggins-Daines <dhd@debian.org> * * Based directly on: * * controlfb.h: Constants of all sorts for controlfb * Copyright (C) 1998 Daniel Jacobowitz <dan@debian.org> * * pmc-valkyrie.h: Console support for PowerMac "control" display adaptor. * Copyright (C) 1997 Paul Mackerras. * * pmc-valkyrie.c: Console support for PowerMac "control" display adaptor. * Copyright (C) 1997 Paul Mackerras. * * and indirectly from: * * pmc-control.h: Console support for PowerMac "control" display adaptor. * Copyright (C) 1997 Paul Mackerras. * * pmc-control.c: Console support for PowerMac "control" display adaptor. * Copyright (C) 1996 Paul Mackerras. * * platinumfb.c: Console support for PowerMac "platinum" display adaptor. * Copyright (C) 1998 Jon Howell */ #ifdef CONFIG_MAC /* Valkyrie registers are word-aligned on m68k */ #define VALKYRIE_REG_PADSIZE 3 #else #define VALKYRIE_REG_PADSIZE 7 #endif /* * Structure of the registers for the Valkyrie colormap registers. */ struct cmap_regs { unsigned char addr; char pad1[VALKYRIE_REG_PADSIZE]; unsigned char lut; }; /* * Structure of the registers for the "valkyrie" display adaptor. */ struct vpreg { /* padded register */ unsigned char r; char pad[VALKYRIE_REG_PADSIZE]; }; struct valkyrie_regs { struct vpreg mode; struct vpreg depth; struct vpreg status; struct vpreg reg3; struct vpreg intr; struct vpreg reg5; struct vpreg intr_enb; struct vpreg msense; }; /* * Register initialization tables for the valkyrie display. * * Dot clock rate is * 3.9064MHz * 2**clock_params[2] * clock_params[1] / clock_params[0]. */ struct valkyrie_regvals { unsigned char mode; unsigned char clock_params[3]; int pitch[2]; /* bytes/line, indexed by color_mode */ int hres; int vres; }; #ifndef CONFIG_MAC /* Register values for 1024x768, 75Hz mode (17) */ /* I'm not sure which mode this is (16 or 17), so I'm defining it as 17, * since the equivalent mode in controlfb (which I adapted this from) is * also 17. Just because MacOS can't do this on Valkyrie doesn't mean we * can't! :) * * I was going to use 12, 31, 3, which I found by myself, but instead I'm * using 11, 28, 3 like controlfb, for consistency's sake. */ static struct valkyrie_regvals valkyrie_reg_init_17 = { 15, { 11, 28, 3 }, /* pixel clock = 79.55MHz for V=74.50Hz */ { 1024, 0 }, 1024, 768 }; /* Register values for 1024x768, 72Hz mode (15) */ /* This used to be 12, 30, 3 for pixel clock = 78.12MHz for V=72.12Hz, but * that didn't match MacOS in the same video mode on this chip, and it also * caused the 15" Apple Studio Display to not work in this mode. While this * mode still doesn't match MacOS exactly (as far as I can tell), it's a lot * closer now, and it works with the Apple Studio Display. * * Yes, even though MacOS calls it "72Hz", in reality it's about 70Hz. */ static struct valkyrie_regvals valkyrie_reg_init_15 = { 15, { 12, 29, 3 }, /* pixel clock = 75.52MHz for V=69.71Hz? */ /* I interpolated the V=69.71 from the vmode 14 and old 15 * numbers. Is this result correct? */ { 1024, 0 }, 1024, 768 }; /* Register values for 1024x768, 60Hz mode (14) */ static struct valkyrie_regvals valkyrie_reg_init_14 = { 14, { 15, 31, 3 }, /* pixel clock = 64.58MHz for V=59.62Hz */ { 1024, 0 }, 1024, 768 }; #endif /* !defined CONFIG_MAC */ /* Register values for 832x624, 75Hz mode (13) */ static struct valkyrie_regvals valkyrie_reg_init_13 = { 9, { 23, 42, 3 }, /* pixel clock = 57.07MHz for V=74.27Hz */ { 832, 0 }, 832, 624 }; /* Register values for 800x600, 72Hz mode (11) */ static struct valkyrie_regvals valkyrie_reg_init_11 = { 13, { 17, 27, 3 }, /* pixel clock = 49.63MHz for V=71.66Hz */ { 800, 0 }, 800, 600 }; /* Register values for 800x600, 60Hz mode (10) */ static struct valkyrie_regvals valkyrie_reg_init_10 = { 12, { 25, 32, 3 }, /* pixel clock = 40.0015MHz, used to be 20,53,2, pixel clock 41.41MHz for V=59.78Hz */ { 800, 1600 }, 800, 600 }; /* Register values for 640x480, 67Hz mode (6) */ static struct valkyrie_regvals valkyrie_reg_init_6 = { 6, { 14, 27, 2 }, /* pixel clock = 30.13MHz for V=66.43Hz */ { 640, 1280 }, 640, 480 }; /* Register values for 640x480, 60Hz mode (5) */ static struct valkyrie_regvals valkyrie_reg_init_5 = { 11, { 23, 37, 2 }, /* pixel clock = 25.14MHz for V=59.85Hz */ { 640, 1280 }, 640, 480 }; static struct valkyrie_regvals *valkyrie_reg_init[VMODE_MAX] = { NULL, NULL, NULL, NULL, &valkyrie_reg_init_5, &valkyrie_reg_init_6, NULL, NULL, NULL, &valkyrie_reg_init_10, &valkyrie_reg_init_11, NULL, &valkyrie_reg_init_13, #ifndef CONFIG_MAC &valkyrie_reg_init_14, &valkyrie_reg_init_15, NULL, &valkyrie_reg_init_17, #endif }; |