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