Merge branch 'dmi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvar...
[linux-2.6-microblaze.git] / drivers / video / fbdev / controlfb.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * controlfb_hw.h: Constants of all sorts for controlfb
4  *
5  * Copyright (C) 1998 Daniel Jacobowitz <dan@debian.org>
6  *
7  * Based on an awful lot of code, including:
8  *
9  * control.c: Console support for PowerMac "control" display adaptor.
10  * Copyright (C) 1996 Paul Mackerras.
11  *
12  * The so far unpublished platinumfb.c
13  * Copyright (C) 1998 Jon Howell
14  */
15
16 /*
17  * Structure of the registers for the RADACAL colormap device.
18  */
19 struct cmap_regs {
20         unsigned char addr;     /* index for both cmap and misc registers */
21         char pad1[15];
22         unsigned char crsr;     /* cursor palette */
23         char pad2[15];
24         unsigned char dat;      /* RADACAL misc register data */
25         char pad3[15];
26         unsigned char lut;      /* cmap data */
27         char pad4[15];
28 };
29
30 /*
31  * Structure of the registers for the "control" display adaptor.
32  */
33 #define PAD(x)  char x[12]
34
35 struct preg {                   /* padded register */
36         unsigned r;
37         char pad[12];
38 };
39
40 struct control_regs {
41         struct preg vcount;     /* vertical counter */
42         /* Vertical parameters are in units of 1/2 scan line */
43         struct preg vswin;      /* between vsblank and vssync */
44         struct preg vsblank;    /* vert start blank */
45         struct preg veblank;    /* vert end blank (display start) */
46         struct preg vewin;      /* between vesync and veblank */
47         struct preg vesync;     /* vert end sync */
48         struct preg vssync;     /* vert start sync */
49         struct preg vperiod;    /* vert period */
50         struct preg piped;      /* pipe delay hardware cursor */
51         /* Horizontal params are in units of 2 pixels */
52         struct preg hperiod;    /* horiz period - 2 */
53         struct preg hsblank;    /* horiz start blank */
54         struct preg heblank;    /* horiz end blank */
55         struct preg hesync;     /* horiz end sync */
56         struct preg hssync;     /* horiz start sync */
57         struct preg heq;        /* half horiz sync len */
58         struct preg hlfln;      /* half horiz period */
59         struct preg hserr;      /* horiz period - horiz sync len */
60         struct preg cnttst;
61         struct preg ctrl;       /* display control */
62         struct preg start_addr; /* start address: 5 lsbs zero */
63         struct preg pitch;      /* addrs diff between scan lines */
64         struct preg mon_sense;  /* monitor sense bits */
65         struct preg vram_attr;  /* enable vram banks */
66         struct preg mode;
67         struct preg rfrcnt;     /* refresh count */
68         struct preg intr_ena;   /* interrupt enable */
69         struct preg intr_stat;  /* interrupt status */
70         struct preg res[5];
71 };
72
73 struct control_regints {
74         /* Vertical parameters are in units of 1/2 scan line */
75         unsigned vswin; /* between vsblank and vssync */
76         unsigned vsblank;       /* vert start blank */
77         unsigned veblank;       /* vert end blank (display start) */
78         unsigned vewin; /* between vesync and veblank */
79         unsigned vesync;        /* vert end sync */
80         unsigned vssync;        /* vert start sync */
81         unsigned vperiod;       /* vert period */
82         unsigned piped;         /* pipe delay hardware cursor */
83         /* Horizontal params are in units of 2 pixels */
84         /* Except, apparently, for hres > 1024 (or == 1280?) */
85         unsigned hperiod;       /* horiz period - 2 */
86         unsigned hsblank;       /* horiz start blank */
87         unsigned heblank;       /* horiz end blank */
88         unsigned hesync;        /* horiz end sync */
89         unsigned hssync;        /* horiz start sync */
90         unsigned heq;           /* half horiz sync len */
91         unsigned hlfln;         /* half horiz period */
92         unsigned hserr;         /* horiz period - horiz sync len */
93 };
94         
95 /*
96  * Dot clock rate is
97  * 3.9064MHz * 2**clock_params[2] * clock_params[1] / clock_params[0].
98  */
99 struct control_regvals {
100         unsigned regs[16];              /* for vswin .. hserr */
101         unsigned char mode;
102         unsigned char radacal_ctrl;
103         unsigned char clock_params[3];
104 };
105
106 #define CTRLFB_OFF 16   /* position of pixel 0 in frame buffer */
107
108
109 /*
110  * Best cmode supported by control
111  */
112 struct max_cmodes {
113         int m[2];       /* 0: 2MB vram, 1: 4MB vram */
114 };
115
116 /*
117  * Video modes supported by macmodes.c
118  */
119 static struct max_cmodes control_mac_modes[] = {
120         {{-1,-1}},      /* 512x384, 60Hz interlaced (NTSC) */
121         {{-1,-1}},      /* 512x384, 60Hz */
122         {{-1,-1}},      /* 640x480, 50Hz interlaced (PAL) */
123         {{-1,-1}},      /* 640x480, 60Hz interlaced (NTSC) */
124         {{ 2, 2}},      /* 640x480, 60Hz (VGA) */
125         {{ 2, 2}},      /* 640x480, 67Hz */
126         {{-1,-1}},      /* 640x870, 75Hz (portrait) */
127         {{-1,-1}},      /* 768x576, 50Hz (PAL full frame) */
128         {{ 2, 2}},      /* 800x600, 56Hz */
129         {{ 2, 2}},      /* 800x600, 60Hz */
130         {{ 2, 2}},      /* 800x600, 72Hz */
131         {{ 2, 2}},      /* 800x600, 75Hz */
132         {{ 1, 2}},      /* 832x624, 75Hz */
133         {{ 1, 2}},      /* 1024x768, 60Hz */
134         {{ 1, 2}},      /* 1024x768, 70Hz (or 72Hz?) */
135         {{ 1, 2}},      /* 1024x768, 75Hz (VESA) */
136         {{ 1, 2}},      /* 1024x768, 75Hz */
137         {{ 1, 2}},      /* 1152x870, 75Hz */
138         {{ 0, 1}},      /* 1280x960, 75Hz */
139         {{ 0, 1}},      /* 1280x1024, 75Hz */
140         {{ 1, 2}},      /* 1152x768, 60Hz */
141         {{ 0, 1}},      /* 1600x1024, 60Hz */
142 };
143