xref: /rk3399_rockchip-uboot/include/linux/fb.h (revision bf90ecd3c366177c55012e68d15b8aeb2c41e907)
1*bf90ecd3SStefano Babic #ifndef _LINUX_FB_H
2*bf90ecd3SStefano Babic #define _LINUX_FB_H
3*bf90ecd3SStefano Babic 
4*bf90ecd3SStefano Babic #include <linux/types.h>
5*bf90ecd3SStefano Babic 
6*bf90ecd3SStefano Babic /* Definitions of frame buffers						*/
7*bf90ecd3SStefano Babic 
8*bf90ecd3SStefano Babic #define FB_MAX			32	/* sufficient for now */
9*bf90ecd3SStefano Babic 
10*bf90ecd3SStefano Babic #define FB_TYPE_PACKED_PIXELS		0	/* Packed Pixels	*/
11*bf90ecd3SStefano Babic 
12*bf90ecd3SStefano Babic #define FB_VISUAL_MONO01		0	/* Monochr. 1=Black 0=White */
13*bf90ecd3SStefano Babic #define FB_VISUAL_MONO10		1	/* Monochr. 1=White 0=Black */
14*bf90ecd3SStefano Babic #define FB_VISUAL_TRUECOLOR		2	/* True color	*/
15*bf90ecd3SStefano Babic #define FB_VISUAL_PSEUDOCOLOR		3	/* Pseudo color (like atari) */
16*bf90ecd3SStefano Babic #define FB_VISUAL_DIRECTCOLOR		4	/* Direct color */
17*bf90ecd3SStefano Babic #define FB_VISUAL_STATIC_PSEUDOCOLOR	5	/* Pseudo color readonly */
18*bf90ecd3SStefano Babic 
19*bf90ecd3SStefano Babic #define FB_ACCEL_NONE		0	/* no hardware accelerator	*/
20*bf90ecd3SStefano Babic 
21*bf90ecd3SStefano Babic struct fb_fix_screeninfo {
22*bf90ecd3SStefano Babic 	char id[16];			/* identification string eg "TT Builtin" */
23*bf90ecd3SStefano Babic 	unsigned long smem_start;	/* Start of frame buffer mem */
24*bf90ecd3SStefano Babic 					/* (physical address) */
25*bf90ecd3SStefano Babic 	__u32 smem_len;			/* Length of frame buffer mem */
26*bf90ecd3SStefano Babic 	__u32 type;			/* see FB_TYPE_*		*/
27*bf90ecd3SStefano Babic 	__u32 type_aux;			/* Interleave for interleaved Planes */
28*bf90ecd3SStefano Babic 	__u32 visual;			/* see FB_VISUAL_*		*/
29*bf90ecd3SStefano Babic 	__u16 xpanstep;			/* zero if no hardware panning  */
30*bf90ecd3SStefano Babic 	__u16 ypanstep;			/* zero if no hardware panning  */
31*bf90ecd3SStefano Babic 	__u16 ywrapstep;		/* zero if no hardware ywrap    */
32*bf90ecd3SStefano Babic 	__u32 line_length;		/* length of a line in bytes    */
33*bf90ecd3SStefano Babic 	unsigned long mmio_start;	/* Start of Memory Mapped I/O   */
34*bf90ecd3SStefano Babic 					/* (physical address) */
35*bf90ecd3SStefano Babic 	__u32 mmio_len;			/* Length of Memory Mapped I/O  */
36*bf90ecd3SStefano Babic 	__u32 accel;			/* Indicate to driver which	*/
37*bf90ecd3SStefano Babic 					/*  specific chip/card we have	*/
38*bf90ecd3SStefano Babic 	__u16 reserved[3];		/* Reserved for future compatibility */
39*bf90ecd3SStefano Babic };
40*bf90ecd3SStefano Babic 
41*bf90ecd3SStefano Babic /*
42*bf90ecd3SStefano Babic  * Interpretation of offset for color fields: All offsets are from the right,
43*bf90ecd3SStefano Babic  * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
44*bf90ecd3SStefano Babic  * can use the offset as right argument to <<). A pixel afterwards is a bit
45*bf90ecd3SStefano Babic  * stream and is written to video memory as that unmodified.
46*bf90ecd3SStefano Babic  *
47*bf90ecd3SStefano Babic  * For pseudocolor: offset and length should be the same for all color
48*bf90ecd3SStefano Babic  * components. Offset specifies the position of the least significant bit
49*bf90ecd3SStefano Babic  * of the pallette index in a pixel value. Length indicates the number
50*bf90ecd3SStefano Babic  * of available palette entries (i.e. # of entries = 1 << length).
51*bf90ecd3SStefano Babic  */
52*bf90ecd3SStefano Babic struct fb_bitfield {
53*bf90ecd3SStefano Babic 	__u32 offset;			/* beginning of bitfield	*/
54*bf90ecd3SStefano Babic 	__u32 length;			/* length of bitfield		*/
55*bf90ecd3SStefano Babic 	__u32 msb_right;
56*bf90ecd3SStefano Babic 
57*bf90ecd3SStefano Babic };
58*bf90ecd3SStefano Babic 
59*bf90ecd3SStefano Babic #define FB_NONSTD_HAM		1	/* Hold-And-Modify (HAM)        */
60*bf90ecd3SStefano Babic #define FB_NONSTD_REV_PIX_IN_B	2	/* order of pixels in each byte is reversed */
61*bf90ecd3SStefano Babic 
62*bf90ecd3SStefano Babic #define FB_ACTIVATE_NOW		0	/* set values immediately (or vbl)*/
63*bf90ecd3SStefano Babic #define FB_ACTIVATE_NXTOPEN	1	/* activate on next open	*/
64*bf90ecd3SStefano Babic #define FB_ACTIVATE_TEST	2	/* don't set, round up impossible */
65*bf90ecd3SStefano Babic #define FB_ACTIVATE_MASK       15
66*bf90ecd3SStefano Babic 					/* values			*/
67*bf90ecd3SStefano Babic #define FB_ACTIVATE_VBL	       16	/* activate values on next vbl  */
68*bf90ecd3SStefano Babic #define FB_CHANGE_CMAP_VBL     32	/* change colormap on vbl	*/
69*bf90ecd3SStefano Babic #define FB_ACTIVATE_ALL	       64	/* change all VCs on this fb	*/
70*bf90ecd3SStefano Babic #define FB_ACTIVATE_FORCE     128	/* force apply even when no change*/
71*bf90ecd3SStefano Babic #define FB_ACTIVATE_INV_MODE  256       /* invalidate videomode */
72*bf90ecd3SStefano Babic 
73*bf90ecd3SStefano Babic #define FB_SYNC_HOR_HIGH_ACT	1	/* horizontal sync high active	*/
74*bf90ecd3SStefano Babic #define FB_SYNC_VERT_HIGH_ACT	2	/* vertical sync high active	*/
75*bf90ecd3SStefano Babic #define FB_SYNC_EXT		4	/* external sync		*/
76*bf90ecd3SStefano Babic #define FB_SYNC_COMP_HIGH_ACT	8	/* composite sync high active   */
77*bf90ecd3SStefano Babic #define FB_SYNC_BROADCAST	16	/* broadcast video timings      */
78*bf90ecd3SStefano Babic 					/* vtotal = 144d/288n/576i => PAL  */
79*bf90ecd3SStefano Babic 					/* vtotal = 121d/242n/484i => NTSC */
80*bf90ecd3SStefano Babic #define FB_SYNC_ON_GREEN	32	/* sync on green */
81*bf90ecd3SStefano Babic 
82*bf90ecd3SStefano Babic #define FB_VMODE_NONINTERLACED  0	/* non interlaced */
83*bf90ecd3SStefano Babic #define FB_VMODE_INTERLACED	1	/* interlaced	*/
84*bf90ecd3SStefano Babic #define FB_VMODE_DOUBLE		2	/* double scan */
85*bf90ecd3SStefano Babic #define FB_VMODE_ODD_FLD_FIRST	4	/* interlaced: top line first */
86*bf90ecd3SStefano Babic #define FB_VMODE_MASK		255
87*bf90ecd3SStefano Babic 
88*bf90ecd3SStefano Babic #define FB_VMODE_YWRAP		256	/* ywrap instead of panning     */
89*bf90ecd3SStefano Babic #define FB_VMODE_SMOOTH_XPAN	512	/* smooth xpan possible (internally used) */
90*bf90ecd3SStefano Babic #define FB_VMODE_CONUPDATE	512	/* don't update x/yoffset	*/
91*bf90ecd3SStefano Babic 
92*bf90ecd3SStefano Babic /*
93*bf90ecd3SStefano Babic  * Display rotation support
94*bf90ecd3SStefano Babic  */
95*bf90ecd3SStefano Babic #define FB_ROTATE_UR      0
96*bf90ecd3SStefano Babic #define FB_ROTATE_CW      1
97*bf90ecd3SStefano Babic #define FB_ROTATE_UD      2
98*bf90ecd3SStefano Babic #define FB_ROTATE_CCW     3
99*bf90ecd3SStefano Babic 
100*bf90ecd3SStefano Babic #define PICOS2KHZ(a) (1000000000UL/(a))
101*bf90ecd3SStefano Babic #define KHZ2PICOS(a) (1000000000UL/(a))
102*bf90ecd3SStefano Babic 
103*bf90ecd3SStefano Babic struct fb_var_screeninfo {
104*bf90ecd3SStefano Babic 	__u32 xres;			/* visible resolution		*/
105*bf90ecd3SStefano Babic 	__u32 yres;
106*bf90ecd3SStefano Babic 	__u32 xres_virtual;		/* virtual resolution		*/
107*bf90ecd3SStefano Babic 	__u32 yres_virtual;
108*bf90ecd3SStefano Babic 	__u32 xoffset;			/* offset from virtual to visible */
109*bf90ecd3SStefano Babic 	__u32 yoffset;			/* resolution			*/
110*bf90ecd3SStefano Babic 
111*bf90ecd3SStefano Babic 	__u32 bits_per_pixel;		/* guess what			*/
112*bf90ecd3SStefano Babic 	__u32 grayscale;		/* != 0 Graylevels instead of colors */
113*bf90ecd3SStefano Babic 
114*bf90ecd3SStefano Babic 	struct fb_bitfield red;		/* bitfield in fb mem if true color, */
115*bf90ecd3SStefano Babic 	struct fb_bitfield green;	/* else only length is significant */
116*bf90ecd3SStefano Babic 	struct fb_bitfield blue;
117*bf90ecd3SStefano Babic 	struct fb_bitfield transp;	/* transparency			*/
118*bf90ecd3SStefano Babic 
119*bf90ecd3SStefano Babic 	__u32 nonstd;			/* != 0 Non standard pixel format */
120*bf90ecd3SStefano Babic 
121*bf90ecd3SStefano Babic 	__u32 activate;			/* see FB_ACTIVATE_*		*/
122*bf90ecd3SStefano Babic 
123*bf90ecd3SStefano Babic 	__u32 height;			/* height of picture in mm    */
124*bf90ecd3SStefano Babic 	__u32 width;			/* width of picture in mm     */
125*bf90ecd3SStefano Babic 
126*bf90ecd3SStefano Babic 	__u32 accel_flags;		/* (OBSOLETE) see fb_info.flags */
127*bf90ecd3SStefano Babic 
128*bf90ecd3SStefano Babic 	/* Timing: All values in pixclocks, except pixclock (of course) */
129*bf90ecd3SStefano Babic 	__u32 pixclock;			/* pixel clock in ps (pico seconds) */
130*bf90ecd3SStefano Babic 	__u32 left_margin;		/* time from sync to picture	*/
131*bf90ecd3SStefano Babic 	__u32 right_margin;		/* time from picture to sync	*/
132*bf90ecd3SStefano Babic 	__u32 upper_margin;		/* time from sync to picture	*/
133*bf90ecd3SStefano Babic 	__u32 lower_margin;
134*bf90ecd3SStefano Babic 	__u32 hsync_len;		/* length of horizontal sync	*/
135*bf90ecd3SStefano Babic 	__u32 vsync_len;		/* length of vertical sync	*/
136*bf90ecd3SStefano Babic 	__u32 sync;			/* see FB_SYNC_*		*/
137*bf90ecd3SStefano Babic 	__u32 vmode;			/* see FB_VMODE_*		*/
138*bf90ecd3SStefano Babic 	__u32 rotate;			/* angle we rotate counter clockwise */
139*bf90ecd3SStefano Babic 	__u32 reserved[5];		/* Reserved for future compatibility */
140*bf90ecd3SStefano Babic };
141*bf90ecd3SStefano Babic 
142*bf90ecd3SStefano Babic struct fb_cmap {
143*bf90ecd3SStefano Babic 	__u32 start;			/* First entry	*/
144*bf90ecd3SStefano Babic 	__u32 len;			/* Number of entries */
145*bf90ecd3SStefano Babic 	__u16 *red;			/* Red values	*/
146*bf90ecd3SStefano Babic 	__u16 *green;
147*bf90ecd3SStefano Babic 	__u16 *blue;
148*bf90ecd3SStefano Babic 	__u16 *transp;			/* transparency, can be NULL */
149*bf90ecd3SStefano Babic };
150*bf90ecd3SStefano Babic 
151*bf90ecd3SStefano Babic struct fb_con2fbmap {
152*bf90ecd3SStefano Babic 	__u32 console;
153*bf90ecd3SStefano Babic 	__u32 framebuffer;
154*bf90ecd3SStefano Babic };
155*bf90ecd3SStefano Babic 
156*bf90ecd3SStefano Babic /* VESA Blanking Levels */
157*bf90ecd3SStefano Babic #define VESA_NO_BLANKING        0
158*bf90ecd3SStefano Babic #define VESA_VSYNC_SUSPEND      1
159*bf90ecd3SStefano Babic #define VESA_HSYNC_SUSPEND      2
160*bf90ecd3SStefano Babic #define VESA_POWERDOWN          3
161*bf90ecd3SStefano Babic 
162*bf90ecd3SStefano Babic 
163*bf90ecd3SStefano Babic enum {
164*bf90ecd3SStefano Babic 	/* screen: unblanked, hsync: on,  vsync: on */
165*bf90ecd3SStefano Babic 	FB_BLANK_UNBLANK       = VESA_NO_BLANKING,
166*bf90ecd3SStefano Babic 
167*bf90ecd3SStefano Babic 	/* screen: blanked,   hsync: on,  vsync: on */
168*bf90ecd3SStefano Babic 	FB_BLANK_NORMAL        = VESA_NO_BLANKING + 1,
169*bf90ecd3SStefano Babic 
170*bf90ecd3SStefano Babic 	/* screen: blanked,   hsync: on,  vsync: off */
171*bf90ecd3SStefano Babic 	FB_BLANK_VSYNC_SUSPEND = VESA_VSYNC_SUSPEND + 1,
172*bf90ecd3SStefano Babic 
173*bf90ecd3SStefano Babic 	/* screen: blanked,   hsync: off, vsync: on */
174*bf90ecd3SStefano Babic 	FB_BLANK_HSYNC_SUSPEND = VESA_HSYNC_SUSPEND + 1,
175*bf90ecd3SStefano Babic 
176*bf90ecd3SStefano Babic 	/* screen: blanked,   hsync: off, vsync: off */
177*bf90ecd3SStefano Babic 	FB_BLANK_POWERDOWN     = VESA_POWERDOWN + 1
178*bf90ecd3SStefano Babic };
179*bf90ecd3SStefano Babic 
180*bf90ecd3SStefano Babic #define FB_VBLANK_VBLANKING	0x001	/* currently in a vertical blank */
181*bf90ecd3SStefano Babic #define FB_VBLANK_HBLANKING	0x002	/* currently in a horizontal blank */
182*bf90ecd3SStefano Babic #define FB_VBLANK_HAVE_VBLANK	0x004	/* vertical blanks can be detected */
183*bf90ecd3SStefano Babic #define FB_VBLANK_HAVE_HBLANK	0x008	/* horizontal blanks can be detected */
184*bf90ecd3SStefano Babic #define FB_VBLANK_HAVE_COUNT	0x010	/* global retrace counter is available */
185*bf90ecd3SStefano Babic #define FB_VBLANK_HAVE_VCOUNT	0x020	/* the vcount field is valid */
186*bf90ecd3SStefano Babic #define FB_VBLANK_HAVE_HCOUNT	0x040	/* the hcount field is valid */
187*bf90ecd3SStefano Babic #define FB_VBLANK_VSYNCING	0x080	/* currently in a vsync */
188*bf90ecd3SStefano Babic #define FB_VBLANK_HAVE_VSYNC	0x100	/* verical syncs can be detected */
189*bf90ecd3SStefano Babic 
190*bf90ecd3SStefano Babic struct fb_vblank {
191*bf90ecd3SStefano Babic 	__u32 flags;			/* FB_VBLANK flags */
192*bf90ecd3SStefano Babic 	__u32 count;			/* counter of retraces since boot */
193*bf90ecd3SStefano Babic 	__u32 vcount;			/* current scanline position */
194*bf90ecd3SStefano Babic 	__u32 hcount;			/* current scandot position */
195*bf90ecd3SStefano Babic 	__u32 reserved[4];		/* reserved for future compatibility */
196*bf90ecd3SStefano Babic };
197*bf90ecd3SStefano Babic 
198*bf90ecd3SStefano Babic /* Internal HW accel */
199*bf90ecd3SStefano Babic #define ROP_COPY 0
200*bf90ecd3SStefano Babic #define ROP_XOR  1
201*bf90ecd3SStefano Babic 
202*bf90ecd3SStefano Babic struct fb_copyarea {
203*bf90ecd3SStefano Babic 	__u32 dx;
204*bf90ecd3SStefano Babic 	__u32 dy;
205*bf90ecd3SStefano Babic 	__u32 width;
206*bf90ecd3SStefano Babic 	__u32 height;
207*bf90ecd3SStefano Babic 	__u32 sx;
208*bf90ecd3SStefano Babic 	__u32 sy;
209*bf90ecd3SStefano Babic };
210*bf90ecd3SStefano Babic 
211*bf90ecd3SStefano Babic struct fb_fillrect {
212*bf90ecd3SStefano Babic 	__u32 dx;	/* screen-relative */
213*bf90ecd3SStefano Babic 	__u32 dy;
214*bf90ecd3SStefano Babic 	__u32 width;
215*bf90ecd3SStefano Babic 	__u32 height;
216*bf90ecd3SStefano Babic 	__u32 color;
217*bf90ecd3SStefano Babic 	__u32 rop;
218*bf90ecd3SStefano Babic };
219*bf90ecd3SStefano Babic 
220*bf90ecd3SStefano Babic struct fb_image {
221*bf90ecd3SStefano Babic 	__u32 dx;		/* Where to place image */
222*bf90ecd3SStefano Babic 	__u32 dy;
223*bf90ecd3SStefano Babic 	__u32 width;		/* Size of image */
224*bf90ecd3SStefano Babic 	__u32 height;
225*bf90ecd3SStefano Babic 	__u32 fg_color;		/* Only used when a mono bitmap */
226*bf90ecd3SStefano Babic 	__u32 bg_color;
227*bf90ecd3SStefano Babic 	__u8  depth;		/* Depth of the image */
228*bf90ecd3SStefano Babic 	const char *data;	/* Pointer to image data */
229*bf90ecd3SStefano Babic 	struct fb_cmap cmap;	/* color map info */
230*bf90ecd3SStefano Babic };
231*bf90ecd3SStefano Babic 
232*bf90ecd3SStefano Babic /*
233*bf90ecd3SStefano Babic  * hardware cursor control
234*bf90ecd3SStefano Babic  */
235*bf90ecd3SStefano Babic 
236*bf90ecd3SStefano Babic #define FB_CUR_SETIMAGE 0x01
237*bf90ecd3SStefano Babic #define FB_CUR_SETPOS   0x02
238*bf90ecd3SStefano Babic #define FB_CUR_SETHOT   0x04
239*bf90ecd3SStefano Babic #define FB_CUR_SETCMAP  0x08
240*bf90ecd3SStefano Babic #define FB_CUR_SETSHAPE 0x10
241*bf90ecd3SStefano Babic #define FB_CUR_SETSIZE	0x20
242*bf90ecd3SStefano Babic #define FB_CUR_SETALL   0xFF
243*bf90ecd3SStefano Babic 
244*bf90ecd3SStefano Babic struct fbcurpos {
245*bf90ecd3SStefano Babic 	__u16 x, y;
246*bf90ecd3SStefano Babic };
247*bf90ecd3SStefano Babic 
248*bf90ecd3SStefano Babic struct fb_cursor {
249*bf90ecd3SStefano Babic 	__u16 set;		/* what to set */
250*bf90ecd3SStefano Babic 	__u16 enable;		/* cursor on/off */
251*bf90ecd3SStefano Babic 	__u16 rop;		/* bitop operation */
252*bf90ecd3SStefano Babic 	const char *mask;	/* cursor mask bits */
253*bf90ecd3SStefano Babic 	struct fbcurpos hot;	/* cursor hot spot */
254*bf90ecd3SStefano Babic 	struct fb_image	image;	/* Cursor image */
255*bf90ecd3SStefano Babic };
256*bf90ecd3SStefano Babic 
257*bf90ecd3SStefano Babic #ifdef CONFIG_FB_BACKLIGHT
258*bf90ecd3SStefano Babic /* Settings for the generic backlight code */
259*bf90ecd3SStefano Babic #define FB_BACKLIGHT_LEVELS	128
260*bf90ecd3SStefano Babic #define FB_BACKLIGHT_MAX	0xFF
261*bf90ecd3SStefano Babic #endif
262*bf90ecd3SStefano Babic 
263*bf90ecd3SStefano Babic #ifdef __KERNEL__
264*bf90ecd3SStefano Babic 
265*bf90ecd3SStefano Babic struct vm_area_struct;
266*bf90ecd3SStefano Babic struct fb_info;
267*bf90ecd3SStefano Babic struct device;
268*bf90ecd3SStefano Babic struct file;
269*bf90ecd3SStefano Babic 
270*bf90ecd3SStefano Babic /* Definitions below are used in the parsed monitor specs */
271*bf90ecd3SStefano Babic #define FB_DPMS_ACTIVE_OFF	1
272*bf90ecd3SStefano Babic #define FB_DPMS_SUSPEND		2
273*bf90ecd3SStefano Babic #define FB_DPMS_STANDBY		4
274*bf90ecd3SStefano Babic 
275*bf90ecd3SStefano Babic #define FB_DISP_DDI		1
276*bf90ecd3SStefano Babic #define FB_DISP_ANA_700_300	2
277*bf90ecd3SStefano Babic #define FB_DISP_ANA_714_286	4
278*bf90ecd3SStefano Babic #define FB_DISP_ANA_1000_400	8
279*bf90ecd3SStefano Babic #define FB_DISP_ANA_700_000	16
280*bf90ecd3SStefano Babic 
281*bf90ecd3SStefano Babic #define FB_DISP_MONO		32
282*bf90ecd3SStefano Babic #define FB_DISP_RGB		64
283*bf90ecd3SStefano Babic #define FB_DISP_MULTI		128
284*bf90ecd3SStefano Babic #define FB_DISP_UNKNOWN		256
285*bf90ecd3SStefano Babic 
286*bf90ecd3SStefano Babic #define FB_SIGNAL_NONE		0
287*bf90ecd3SStefano Babic #define FB_SIGNAL_BLANK_BLANK	1
288*bf90ecd3SStefano Babic #define FB_SIGNAL_SEPARATE	2
289*bf90ecd3SStefano Babic #define FB_SIGNAL_COMPOSITE	4
290*bf90ecd3SStefano Babic #define FB_SIGNAL_SYNC_ON_GREEN	8
291*bf90ecd3SStefano Babic #define FB_SIGNAL_SERRATION_ON	16
292*bf90ecd3SStefano Babic 
293*bf90ecd3SStefano Babic #define FB_MISC_PRIM_COLOR	1
294*bf90ecd3SStefano Babic #define FB_MISC_1ST_DETAIL	2	/* First Detailed Timing is preferred */
295*bf90ecd3SStefano Babic struct fb_chroma {
296*bf90ecd3SStefano Babic 	__u32 redx;	/* in fraction of 1024 */
297*bf90ecd3SStefano Babic 	__u32 greenx;
298*bf90ecd3SStefano Babic 	__u32 bluex;
299*bf90ecd3SStefano Babic 	__u32 whitex;
300*bf90ecd3SStefano Babic 	__u32 redy;
301*bf90ecd3SStefano Babic 	__u32 greeny;
302*bf90ecd3SStefano Babic 	__u32 bluey;
303*bf90ecd3SStefano Babic 	__u32 whitey;
304*bf90ecd3SStefano Babic };
305*bf90ecd3SStefano Babic 
306*bf90ecd3SStefano Babic struct fb_monspecs {
307*bf90ecd3SStefano Babic 	struct fb_chroma chroma;
308*bf90ecd3SStefano Babic 	struct fb_videomode *modedb;	/* mode database */
309*bf90ecd3SStefano Babic 	__u8  manufacturer[4];		/* Manufacturer */
310*bf90ecd3SStefano Babic 	__u8  monitor[14];		/* Monitor String */
311*bf90ecd3SStefano Babic 	__u8  serial_no[14];		/* Serial Number */
312*bf90ecd3SStefano Babic 	__u8  ascii[14];		/* ? */
313*bf90ecd3SStefano Babic 	__u32 modedb_len;		/* mode database length */
314*bf90ecd3SStefano Babic 	__u32 model;			/* Monitor Model */
315*bf90ecd3SStefano Babic 	__u32 serial;			/* Serial Number - Integer */
316*bf90ecd3SStefano Babic 	__u32 year;			/* Year manufactured */
317*bf90ecd3SStefano Babic 	__u32 week;			/* Week Manufactured */
318*bf90ecd3SStefano Babic 	__u32 hfmin;			/* hfreq lower limit (Hz) */
319*bf90ecd3SStefano Babic 	__u32 hfmax;			/* hfreq upper limit (Hz) */
320*bf90ecd3SStefano Babic 	__u32 dclkmin;			/* pixelclock lower limit (Hz) */
321*bf90ecd3SStefano Babic 	__u32 dclkmax;			/* pixelclock upper limit (Hz) */
322*bf90ecd3SStefano Babic 	__u16 input;			/* display type - see FB_DISP_* */
323*bf90ecd3SStefano Babic 	__u16 dpms;			/* DPMS support - see FB_DPMS_ */
324*bf90ecd3SStefano Babic 	__u16 signal;			/* Signal Type - see FB_SIGNAL_* */
325*bf90ecd3SStefano Babic 	__u16 vfmin;			/* vfreq lower limit (Hz) */
326*bf90ecd3SStefano Babic 	__u16 vfmax;			/* vfreq upper limit (Hz) */
327*bf90ecd3SStefano Babic 	__u16 gamma;			/* Gamma - in fractions of 100 */
328*bf90ecd3SStefano Babic 	__u16 gtf	: 1;		/* supports GTF */
329*bf90ecd3SStefano Babic 	__u16 misc;			/* Misc flags - see FB_MISC_* */
330*bf90ecd3SStefano Babic 	__u8  version;			/* EDID version... */
331*bf90ecd3SStefano Babic 	__u8  revision;			/* ...and revision */
332*bf90ecd3SStefano Babic 	__u8  max_x;			/* Maximum horizontal size (cm) */
333*bf90ecd3SStefano Babic 	__u8  max_y;			/* Maximum vertical size (cm) */
334*bf90ecd3SStefano Babic };
335*bf90ecd3SStefano Babic 
336*bf90ecd3SStefano Babic struct fb_cmap_user {
337*bf90ecd3SStefano Babic 	__u32 start;			/* First entry	*/
338*bf90ecd3SStefano Babic 	__u32 len;			/* Number of entries */
339*bf90ecd3SStefano Babic 	__u16 *red;		/* Red values	*/
340*bf90ecd3SStefano Babic 	__u16 *green;
341*bf90ecd3SStefano Babic 	__u16 *blue;
342*bf90ecd3SStefano Babic 	__u16 *transp;		/* transparency, can be NULL */
343*bf90ecd3SStefano Babic };
344*bf90ecd3SStefano Babic 
345*bf90ecd3SStefano Babic struct fb_image_user {
346*bf90ecd3SStefano Babic 	__u32 dx;			/* Where to place image */
347*bf90ecd3SStefano Babic 	__u32 dy;
348*bf90ecd3SStefano Babic 	__u32 width;			/* Size of image */
349*bf90ecd3SStefano Babic 	__u32 height;
350*bf90ecd3SStefano Babic 	__u32 fg_color;			/* Only used when a mono bitmap */
351*bf90ecd3SStefano Babic 	__u32 bg_color;
352*bf90ecd3SStefano Babic 	__u8  depth;			/* Depth of the image */
353*bf90ecd3SStefano Babic 	const char *data;	/* Pointer to image data */
354*bf90ecd3SStefano Babic 	struct fb_cmap_user cmap;	/* color map info */
355*bf90ecd3SStefano Babic };
356*bf90ecd3SStefano Babic 
357*bf90ecd3SStefano Babic struct fb_cursor_user {
358*bf90ecd3SStefano Babic 	__u16 set;			/* what to set */
359*bf90ecd3SStefano Babic 	__u16 enable;			/* cursor on/off */
360*bf90ecd3SStefano Babic 	__u16 rop;			/* bitop operation */
361*bf90ecd3SStefano Babic 	const char *mask;	/* cursor mask bits */
362*bf90ecd3SStefano Babic 	struct fbcurpos hot;		/* cursor hot spot */
363*bf90ecd3SStefano Babic 	struct fb_image_user image;	/* Cursor image */
364*bf90ecd3SStefano Babic };
365*bf90ecd3SStefano Babic 
366*bf90ecd3SStefano Babic /*
367*bf90ecd3SStefano Babic  * Register/unregister for framebuffer events
368*bf90ecd3SStefano Babic  */
369*bf90ecd3SStefano Babic 
370*bf90ecd3SStefano Babic /*	The resolution of the passed in fb_info about to change */
371*bf90ecd3SStefano Babic #define FB_EVENT_MODE_CHANGE		0x01
372*bf90ecd3SStefano Babic /*	The display on this fb_info is beeing suspended, no access to the
373*bf90ecd3SStefano Babic  *	framebuffer is allowed any more after that call returns
374*bf90ecd3SStefano Babic  */
375*bf90ecd3SStefano Babic #define FB_EVENT_SUSPEND		0x02
376*bf90ecd3SStefano Babic /*	The display on this fb_info was resumed, you can restore the display
377*bf90ecd3SStefano Babic  *	if you own it
378*bf90ecd3SStefano Babic  */
379*bf90ecd3SStefano Babic #define FB_EVENT_RESUME			0x03
380*bf90ecd3SStefano Babic /*      An entry from the modelist was removed */
381*bf90ecd3SStefano Babic #define FB_EVENT_MODE_DELETE            0x04
382*bf90ecd3SStefano Babic /*      A driver registered itself */
383*bf90ecd3SStefano Babic #define FB_EVENT_FB_REGISTERED          0x05
384*bf90ecd3SStefano Babic /*      A driver unregistered itself */
385*bf90ecd3SStefano Babic #define FB_EVENT_FB_UNREGISTERED        0x06
386*bf90ecd3SStefano Babic /*      CONSOLE-SPECIFIC: get console to framebuffer mapping */
387*bf90ecd3SStefano Babic #define FB_EVENT_GET_CONSOLE_MAP        0x07
388*bf90ecd3SStefano Babic /*      CONSOLE-SPECIFIC: set console to framebuffer mapping */
389*bf90ecd3SStefano Babic #define FB_EVENT_SET_CONSOLE_MAP        0x08
390*bf90ecd3SStefano Babic /*      A hardware display blank change occured */
391*bf90ecd3SStefano Babic #define FB_EVENT_BLANK                  0x09
392*bf90ecd3SStefano Babic /*      Private modelist is to be replaced */
393*bf90ecd3SStefano Babic #define FB_EVENT_NEW_MODELIST           0x0A
394*bf90ecd3SStefano Babic /*	The resolution of the passed in fb_info about to change and
395*bf90ecd3SStefano Babic         all vc's should be changed         */
396*bf90ecd3SStefano Babic #define FB_EVENT_MODE_CHANGE_ALL	0x0B
397*bf90ecd3SStefano Babic /*	A software display blank change occured */
398*bf90ecd3SStefano Babic #define FB_EVENT_CONBLANK               0x0C
399*bf90ecd3SStefano Babic /*      Get drawing requirements        */
400*bf90ecd3SStefano Babic #define FB_EVENT_GET_REQ                0x0D
401*bf90ecd3SStefano Babic /*      Unbind from the console if possible */
402*bf90ecd3SStefano Babic #define FB_EVENT_FB_UNBIND              0x0E
403*bf90ecd3SStefano Babic 
404*bf90ecd3SStefano Babic struct fb_event {
405*bf90ecd3SStefano Babic 	struct fb_info *info;
406*bf90ecd3SStefano Babic 	void *data;
407*bf90ecd3SStefano Babic };
408*bf90ecd3SStefano Babic 
409*bf90ecd3SStefano Babic struct fb_blit_caps {
410*bf90ecd3SStefano Babic 	u32 x;
411*bf90ecd3SStefano Babic 	u32 y;
412*bf90ecd3SStefano Babic 	u32 len;
413*bf90ecd3SStefano Babic 	u32 flags;
414*bf90ecd3SStefano Babic };
415*bf90ecd3SStefano Babic 
416*bf90ecd3SStefano Babic /*
417*bf90ecd3SStefano Babic  * Pixmap structure definition
418*bf90ecd3SStefano Babic  *
419*bf90ecd3SStefano Babic  * The purpose of this structure is to translate data
420*bf90ecd3SStefano Babic  * from the hardware independent format of fbdev to what
421*bf90ecd3SStefano Babic  * format the hardware needs.
422*bf90ecd3SStefano Babic  */
423*bf90ecd3SStefano Babic 
424*bf90ecd3SStefano Babic #define FB_PIXMAP_DEFAULT 1     /* used internally by fbcon */
425*bf90ecd3SStefano Babic #define FB_PIXMAP_SYSTEM  2     /* memory is in system RAM  */
426*bf90ecd3SStefano Babic #define FB_PIXMAP_IO      4     /* memory is iomapped       */
427*bf90ecd3SStefano Babic #define FB_PIXMAP_SYNC    256   /* set if GPU can DMA       */
428*bf90ecd3SStefano Babic 
429*bf90ecd3SStefano Babic struct fb_pixmap {
430*bf90ecd3SStefano Babic 	u8  *addr;		/* pointer to memory			*/
431*bf90ecd3SStefano Babic 	u32 size;		/* size of buffer in bytes		*/
432*bf90ecd3SStefano Babic 	u32 offset;		/* current offset to buffer		*/
433*bf90ecd3SStefano Babic 	u32 buf_align;		/* byte alignment of each bitmap	*/
434*bf90ecd3SStefano Babic 	u32 scan_align;		/* alignment per scanline		*/
435*bf90ecd3SStefano Babic 	u32 access_align;	/* alignment per read/write (bits)	*/
436*bf90ecd3SStefano Babic 	u32 flags;		/* see FB_PIXMAP_*			*/
437*bf90ecd3SStefano Babic 	u32 blit_x;             /* supported bit block dimensions (1-32)*/
438*bf90ecd3SStefano Babic 	u32 blit_y;             /* Format: blit_x = 1 << (width - 1)    */
439*bf90ecd3SStefano Babic 	                        /*         blit_y = 1 << (height - 1)   */
440*bf90ecd3SStefano Babic 	                        /* if 0, will be set to 0xffffffff (all)*/
441*bf90ecd3SStefano Babic 	/* access methods */
442*bf90ecd3SStefano Babic 	void (*writeio)(struct fb_info *info, void *dst, void *src, unsigned int size);
443*bf90ecd3SStefano Babic 	void (*readio) (struct fb_info *info, void *dst, void *src, unsigned int size);
444*bf90ecd3SStefano Babic };
445*bf90ecd3SStefano Babic 
446*bf90ecd3SStefano Babic #ifdef CONFIG_FB_DEFERRED_IO
447*bf90ecd3SStefano Babic struct fb_deferred_io {
448*bf90ecd3SStefano Babic 	/* delay between mkwrite and deferred handler */
449*bf90ecd3SStefano Babic 	unsigned long delay;
450*bf90ecd3SStefano Babic 	struct mutex lock; /* mutex that protects the page list */
451*bf90ecd3SStefano Babic 	struct list_head pagelist; /* list of touched pages */
452*bf90ecd3SStefano Babic 	/* callback */
453*bf90ecd3SStefano Babic 	void (*deferred_io)(struct fb_info *info, struct list_head *pagelist);
454*bf90ecd3SStefano Babic };
455*bf90ecd3SStefano Babic #endif
456*bf90ecd3SStefano Babic 
457*bf90ecd3SStefano Babic /* FBINFO_* = fb_info.flags bit flags */
458*bf90ecd3SStefano Babic #define FBINFO_MODULE		0x0001	/* Low-level driver is a module */
459*bf90ecd3SStefano Babic #define FBINFO_HWACCEL_DISABLED	0x0002
460*bf90ecd3SStefano Babic 	/* When FBINFO_HWACCEL_DISABLED is set:
461*bf90ecd3SStefano Babic 	 *  Hardware acceleration is turned off.  Software implementations
462*bf90ecd3SStefano Babic 	 *  of required functions (copyarea(), fillrect(), and imageblit())
463*bf90ecd3SStefano Babic 	 *  takes over; acceleration engine should be in a quiescent state */
464*bf90ecd3SStefano Babic 
465*bf90ecd3SStefano Babic /* hints */
466*bf90ecd3SStefano Babic #define FBINFO_PARTIAL_PAN_OK	0x0040 /* otw use pan only for double-buffering */
467*bf90ecd3SStefano Babic #define FBINFO_READS_FAST	0x0080 /* soft-copy faster than rendering */
468*bf90ecd3SStefano Babic 
469*bf90ecd3SStefano Babic /*
470*bf90ecd3SStefano Babic  * A driver may set this flag to indicate that it does want a set_par to be
471*bf90ecd3SStefano Babic  * called every time when fbcon_switch is executed. The advantage is that with
472*bf90ecd3SStefano Babic  * this flag set you can really be sure that set_par is always called before
473*bf90ecd3SStefano Babic  * any of the functions dependant on the correct hardware state or altering
474*bf90ecd3SStefano Babic  * that state, even if you are using some broken X releases. The disadvantage
475*bf90ecd3SStefano Babic  * is that it introduces unwanted delays to every console switch if set_par
476*bf90ecd3SStefano Babic  * is slow. It is a good idea to try this flag in the drivers initialization
477*bf90ecd3SStefano Babic  * code whenever there is a bug report related to switching between X and the
478*bf90ecd3SStefano Babic  * framebuffer console.
479*bf90ecd3SStefano Babic  */
480*bf90ecd3SStefano Babic #define FBINFO_MISC_ALWAYS_SETPAR   0x40000
481*bf90ecd3SStefano Babic 
482*bf90ecd3SStefano Babic /*
483*bf90ecd3SStefano Babic  * Host and GPU endianness differ.
484*bf90ecd3SStefano Babic  */
485*bf90ecd3SStefano Babic #define FBINFO_FOREIGN_ENDIAN	0x100000
486*bf90ecd3SStefano Babic /*
487*bf90ecd3SStefano Babic  * Big endian math. This is the same flags as above, but with different
488*bf90ecd3SStefano Babic  * meaning, it is set by the fb subsystem depending FOREIGN_ENDIAN flag
489*bf90ecd3SStefano Babic  * and host endianness. Drivers should not use this flag.
490*bf90ecd3SStefano Babic  */
491*bf90ecd3SStefano Babic #define FBINFO_BE_MATH  0x100000
492*bf90ecd3SStefano Babic 
493*bf90ecd3SStefano Babic struct fb_info {
494*bf90ecd3SStefano Babic 	int node;
495*bf90ecd3SStefano Babic 	int flags;
496*bf90ecd3SStefano Babic 	struct fb_var_screeninfo var;	/* Current var */
497*bf90ecd3SStefano Babic 	struct fb_fix_screeninfo fix;	/* Current fix */
498*bf90ecd3SStefano Babic 	struct fb_monspecs monspecs;	/* Current Monitor specs */
499*bf90ecd3SStefano Babic 	struct fb_pixmap pixmap;	/* Image hardware mapper */
500*bf90ecd3SStefano Babic 	struct fb_pixmap sprite;	/* Cursor hardware mapper */
501*bf90ecd3SStefano Babic 	struct fb_cmap cmap;		/* Current cmap */
502*bf90ecd3SStefano Babic 	struct list_head modelist;      /* mode list */
503*bf90ecd3SStefano Babic 	struct fb_videomode *mode;	/* current mode */
504*bf90ecd3SStefano Babic 
505*bf90ecd3SStefano Babic 	char *screen_base;	/* Virtual address */
506*bf90ecd3SStefano Babic 	unsigned long screen_size;	/* Amount of ioremapped VRAM or 0 */
507*bf90ecd3SStefano Babic 	void *pseudo_palette;		/* Fake palette of 16 colors */
508*bf90ecd3SStefano Babic #define FBINFO_STATE_RUNNING	0
509*bf90ecd3SStefano Babic #define FBINFO_STATE_SUSPENDED	1
510*bf90ecd3SStefano Babic 	u32 state;			/* Hardware state i.e suspend */
511*bf90ecd3SStefano Babic 	void *fbcon_par;                /* fbcon use-only private area */
512*bf90ecd3SStefano Babic 	/* From here on everything is device dependent */
513*bf90ecd3SStefano Babic 	void *par;
514*bf90ecd3SStefano Babic };
515*bf90ecd3SStefano Babic 
516*bf90ecd3SStefano Babic #define FBINFO_DEFAULT	0
517*bf90ecd3SStefano Babic 
518*bf90ecd3SStefano Babic #define FBINFO_FLAG_MODULE	FBINFO_MODULE
519*bf90ecd3SStefano Babic #define FBINFO_FLAG_DEFAULT	FBINFO_DEFAULT
520*bf90ecd3SStefano Babic 
521*bf90ecd3SStefano Babic // This will go away
522*bf90ecd3SStefano Babic #if defined(__sparc__)
523*bf90ecd3SStefano Babic 
524*bf90ecd3SStefano Babic /* We map all of our framebuffers such that big-endian accesses
525*bf90ecd3SStefano Babic  * are what we want, so the following is sufficient.
526*bf90ecd3SStefano Babic  */
527*bf90ecd3SStefano Babic 
528*bf90ecd3SStefano Babic // This will go away
529*bf90ecd3SStefano Babic #define fb_readb sbus_readb
530*bf90ecd3SStefano Babic #define fb_readw sbus_readw
531*bf90ecd3SStefano Babic #define fb_readl sbus_readl
532*bf90ecd3SStefano Babic #define fb_readq sbus_readq
533*bf90ecd3SStefano Babic #define fb_writeb sbus_writeb
534*bf90ecd3SStefano Babic #define fb_writew sbus_writew
535*bf90ecd3SStefano Babic #define fb_writel sbus_writel
536*bf90ecd3SStefano Babic #define fb_writeq sbus_writeq
537*bf90ecd3SStefano Babic #define fb_memset sbus_memset_io
538*bf90ecd3SStefano Babic 
539*bf90ecd3SStefano Babic #elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__) || defined(__hppa__) || defined(__sh__) || defined(__powerpc__) || defined(__avr32__) || defined(__bfin__)
540*bf90ecd3SStefano Babic 
541*bf90ecd3SStefano Babic #define fb_readb __raw_readb
542*bf90ecd3SStefano Babic #define fb_readw __raw_readw
543*bf90ecd3SStefano Babic #define fb_readl __raw_readl
544*bf90ecd3SStefano Babic #define fb_readq __raw_readq
545*bf90ecd3SStefano Babic #define fb_writeb __raw_writeb
546*bf90ecd3SStefano Babic #define fb_writew __raw_writew
547*bf90ecd3SStefano Babic #define fb_writel __raw_writel
548*bf90ecd3SStefano Babic #define fb_writeq __raw_writeq
549*bf90ecd3SStefano Babic #define fb_memset memset_io
550*bf90ecd3SStefano Babic 
551*bf90ecd3SStefano Babic #else
552*bf90ecd3SStefano Babic 
553*bf90ecd3SStefano Babic #define fb_readb(addr) (*(volatile u8 *) (addr))
554*bf90ecd3SStefano Babic #define fb_readw(addr) (*(volatile u16 *) (addr))
555*bf90ecd3SStefano Babic #define fb_readl(addr) (*(volatile u32 *) (addr))
556*bf90ecd3SStefano Babic #define fb_readq(addr) (*(volatile u64 *) (addr))
557*bf90ecd3SStefano Babic #define fb_writeb(b,addr) (*(volatile u8 *) (addr) = (b))
558*bf90ecd3SStefano Babic #define fb_writew(b,addr) (*(volatile u16 *) (addr) = (b))
559*bf90ecd3SStefano Babic #define fb_writel(b,addr) (*(volatile u32 *) (addr) = (b))
560*bf90ecd3SStefano Babic #define fb_writeq(b,addr) (*(volatile u64 *) (addr) = (b))
561*bf90ecd3SStefano Babic #define fb_memset memset
562*bf90ecd3SStefano Babic 
563*bf90ecd3SStefano Babic #endif
564*bf90ecd3SStefano Babic 
565*bf90ecd3SStefano Babic #define FB_LEFT_POS(p, bpp)          (fb_be_math(p) ? (32 - (bpp)) : 0)
566*bf90ecd3SStefano Babic #define FB_SHIFT_HIGH(p, val, bits)  (fb_be_math(p) ? (val) >> (bits) : \
567*bf90ecd3SStefano Babic 						      (val) << (bits))
568*bf90ecd3SStefano Babic #define FB_SHIFT_LOW(p, val, bits)   (fb_be_math(p) ? (val) << (bits) : \
569*bf90ecd3SStefano Babic 						      (val) >> (bits))
570*bf90ecd3SStefano Babic /* drivers/video/fbmon.c */
571*bf90ecd3SStefano Babic #define FB_MAXTIMINGS		0
572*bf90ecd3SStefano Babic #define FB_VSYNCTIMINGS		1
573*bf90ecd3SStefano Babic #define FB_HSYNCTIMINGS		2
574*bf90ecd3SStefano Babic #define FB_DCLKTIMINGS		3
575*bf90ecd3SStefano Babic #define FB_IGNOREMON		0x100
576*bf90ecd3SStefano Babic 
577*bf90ecd3SStefano Babic #define FB_MODE_IS_UNKNOWN	0
578*bf90ecd3SStefano Babic #define FB_MODE_IS_DETAILED	1
579*bf90ecd3SStefano Babic #define FB_MODE_IS_STANDARD	2
580*bf90ecd3SStefano Babic #define FB_MODE_IS_VESA		4
581*bf90ecd3SStefano Babic #define FB_MODE_IS_CALCULATED	8
582*bf90ecd3SStefano Babic #define FB_MODE_IS_FIRST	16
583*bf90ecd3SStefano Babic #define FB_MODE_IS_FROM_VAR     32
584*bf90ecd3SStefano Babic 
585*bf90ecd3SStefano Babic 
586*bf90ecd3SStefano Babic /* drivers/video/fbcmap.c */
587*bf90ecd3SStefano Babic 
588*bf90ecd3SStefano Babic extern int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp);
589*bf90ecd3SStefano Babic extern void fb_dealloc_cmap(struct fb_cmap *cmap);
590*bf90ecd3SStefano Babic extern int fb_copy_cmap(const struct fb_cmap *from, struct fb_cmap *to);
591*bf90ecd3SStefano Babic extern int fb_cmap_to_user(const struct fb_cmap *from, struct fb_cmap_user *to);
592*bf90ecd3SStefano Babic extern int fb_set_cmap(struct fb_cmap *cmap, struct fb_info *fb_info);
593*bf90ecd3SStefano Babic extern int fb_set_user_cmap(struct fb_cmap_user *cmap, struct fb_info *fb_info);
594*bf90ecd3SStefano Babic extern const struct fb_cmap *fb_default_cmap(int len);
595*bf90ecd3SStefano Babic extern void fb_invert_cmaps(void);
596*bf90ecd3SStefano Babic 
597*bf90ecd3SStefano Babic struct fb_videomode {
598*bf90ecd3SStefano Babic 	const char *name;	/* optional */
599*bf90ecd3SStefano Babic 	u32 refresh;		/* optional */
600*bf90ecd3SStefano Babic 	u32 xres;
601*bf90ecd3SStefano Babic 	u32 yres;
602*bf90ecd3SStefano Babic 	u32 pixclock;
603*bf90ecd3SStefano Babic 	u32 left_margin;
604*bf90ecd3SStefano Babic 	u32 right_margin;
605*bf90ecd3SStefano Babic 	u32 upper_margin;
606*bf90ecd3SStefano Babic 	u32 lower_margin;
607*bf90ecd3SStefano Babic 	u32 hsync_len;
608*bf90ecd3SStefano Babic 	u32 vsync_len;
609*bf90ecd3SStefano Babic 	u32 sync;
610*bf90ecd3SStefano Babic 	u32 vmode;
611*bf90ecd3SStefano Babic 	u32 flag;
612*bf90ecd3SStefano Babic };
613*bf90ecd3SStefano Babic 
614*bf90ecd3SStefano Babic #endif /* __KERNEL__ */
615*bf90ecd3SStefano Babic 
616*bf90ecd3SStefano Babic #endif /* _LINUX_FB_H */
617