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