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