1779 lines · 48.0 KB · C
RawDownload
/* * Silicon Motion SM7XX frame buffer device * * Copyright (C) 2006 Silicon Motion Technology Corp. * Authors:  Ge Wang, gewang@siliconmotion.com *	     Boyod boyod.yang@siliconmotion.com.cn * * Copyright (C) 2009 Lemote, Inc. * Author:   Wu Zhangjin, wuzhangjin@gmail.com * * Copyright (C) 2011 Igalia, S.L. * Author:   Javier M. Mellid <jmunhoz@igalia.com> * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of this archive for * more details. * * Framebuffer driver for Silicon Motion SM710, SM712, SM721 and SM722 chips */ #include <linux/aperture.h>#include <linux/io.h>#include <linux/fb.h>#include <linux/pci.h>#include <linux/init.h>#include <linux/slab.h>#include <linux/uaccess.h>#include <linux/module.h>#include <linux/console.h> #include <linux/pm.h> #include "sm712.h" struct smtcfb_screen_info {	u16 lfb_width;	u16 lfb_height;	u16 lfb_depth;}; /* * Private structure */struct smtcfb_info {	struct pci_dev *pdev;	struct fb_info *fb;	u16 chip_id;	u8  chip_rev_id; 	void __iomem *lfb;	/* linear frame buffer */	void __iomem *dp_regs;	/* drawing processor control regs */	void __iomem *vp_regs;	/* video processor control regs */	void __iomem *cp_regs;	/* capture processor control regs */	void __iomem *mmio;	/* memory map IO port */ 	u_int width;	u_int height;	u_int hz; 	u32 colreg[17];}; void __iomem *smtc_regbaseaddress;	/* Memory Map IO starting address */ static const struct fb_var_screeninfo smtcfb_var = {	.xres           = 1024,	.yres           = 600,	.xres_virtual   = 1024,	.yres_virtual   = 600,	.bits_per_pixel = 16,	.red            = {16, 8, 0},	.green          = {8, 8, 0},	.blue           = {0, 8, 0},	.activate       = FB_ACTIVATE_NOW,	.height         = -1,	.width          = -1,	.vmode          = FB_VMODE_NONINTERLACED,	.nonstd         = 0,	.accel_flags    = FB_ACCELF_TEXT,}; static struct fb_fix_screeninfo smtcfb_fix = {	.id             = "smXXXfb",	.type           = FB_TYPE_PACKED_PIXELS,	.visual         = FB_VISUAL_TRUECOLOR,	.line_length    = 800 * 3,	.accel          = FB_ACCEL_SMI_LYNX,	.type_aux       = 0,	.xpanstep       = 0,	.ypanstep       = 0,	.ywrapstep      = 0,}; struct vesa_mode {	char index[6];	u16  lfb_width;	u16  lfb_height;	u16  lfb_depth;}; static const struct vesa_mode vesa_mode_table[] = {	{"0x301", 640,  480,  8},	{"0x303", 800,  600,  8},	{"0x305", 1024, 768,  8},	{"0x307", 1280, 1024, 8}, 	{"0x311", 640,  480,  16},	{"0x314", 800,  600,  16},	{"0x317", 1024, 768,  16},	{"0x31A", 1280, 1024, 16}, 	{"0x312", 640,  480,  24},	{"0x315", 800,  600,  24},	{"0x318", 1024, 768,  24},	{"0x31B", 1280, 1024, 24},}; /**********************************************************************			 SM712 Mode table. **********************************************************************/static const struct modeinit vgamode[] = {	{		/*  mode#0: 640 x 480  16Bpp  60Hz */		640, 480, 16, 60,		/*  Init_MISC */		0xE3,		{	/*  Init_SR0_SR4 */			0x03, 0x01, 0x0F, 0x00, 0x0E,		},		{	/*  Init_SR10_SR24 */			0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,			0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,			0xC4, 0x30, 0x02, 0x01, 0x01,		},		{	/*  Init_SR30_SR75 */			0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,			0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,			0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,			0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,			0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,			0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,			0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,			0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,			0x00, 0x45, 0x30, 0x30, 0x40, 0x30,		},		{	/*  Init_SR80_SR93 */			0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,			0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,			0x00, 0x00, 0x00, 0x00,		},		{	/*  Init_SRA0_SRAF */			0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,			0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,		},		{	/*  Init_GR00_GR08 */			0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,			0xFF,		},		{	/*  Init_AR00_AR14 */			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,			0x41, 0x00, 0x0F, 0x00, 0x00,		},		{	/*  Init_CR00_CR18 */			0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,			0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,			0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,			0xFF,		},		{	/*  Init_CR30_CR4D */			0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,			0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,			0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,			0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,		},		{	/*  Init_CR90_CRA7 */			0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,			0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,			0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,		},	},	{		/*  mode#1: 640 x 480  24Bpp  60Hz */		640, 480, 24, 60,		/*  Init_MISC */		0xE3,		{	/*  Init_SR0_SR4 */			0x03, 0x01, 0x0F, 0x00, 0x0E,		},		{	/*  Init_SR10_SR24 */			0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,			0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,			0xC4, 0x30, 0x02, 0x01, 0x01,		},		{	/*  Init_SR30_SR75 */			0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,			0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,			0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,			0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,			0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,			0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,			0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,			0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,			0x00, 0x45, 0x30, 0x30, 0x40, 0x30,		},		{	/*  Init_SR80_SR93 */			0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,			0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,			0x00, 0x00, 0x00, 0x00,		},		{	/*  Init_SRA0_SRAF */			0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,			0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,		},		{	/*  Init_GR00_GR08 */			0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,			0xFF,		},		{	/*  Init_AR00_AR14 */			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,			0x41, 0x00, 0x0F, 0x00, 0x00,		},		{	/*  Init_CR00_CR18 */			0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,			0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,			0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,			0xFF,		},		{	/*  Init_CR30_CR4D */			0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,			0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,			0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,			0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,		},		{	/*  Init_CR90_CRA7 */			0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,			0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,			0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,		},	},	{		/*  mode#0: 640 x 480  32Bpp  60Hz */		640, 480, 32, 60,		/*  Init_MISC */		0xE3,		{	/*  Init_SR0_SR4 */			0x03, 0x01, 0x0F, 0x00, 0x0E,		},		{	/*  Init_SR10_SR24 */			0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,			0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,			0xC4, 0x30, 0x02, 0x01, 0x01,		},		{	/*  Init_SR30_SR75 */			0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,			0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,			0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,			0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,			0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,			0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,			0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,			0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,			0x00, 0x45, 0x30, 0x30, 0x40, 0x30,		},		{	/*  Init_SR80_SR93 */			0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,			0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,			0x00, 0x00, 0x00, 0x00,		},		{	/*  Init_SRA0_SRAF */			0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,			0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,		},		{	/*  Init_GR00_GR08 */			0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,			0xFF,		},		{	/*  Init_AR00_AR14 */			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,			0x41, 0x00, 0x0F, 0x00, 0x00,		},		{	/*  Init_CR00_CR18 */			0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,			0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,			0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,			0xFF,		},		{	/*  Init_CR30_CR4D */			0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,			0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,			0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,			0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,		},		{	/*  Init_CR90_CRA7 */			0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,			0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,			0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,		},	}, 	{	/*  mode#2: 800 x 600  16Bpp  60Hz */		800, 600, 16, 60,		/*  Init_MISC */		0x2B,		{	/*  Init_SR0_SR4 */			0x03, 0x01, 0x0F, 0x03, 0x0E,		},		{	/*  Init_SR10_SR24 */			0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,			0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,			0xC4, 0x30, 0x02, 0x01, 0x01,		},		{	/*  Init_SR30_SR75 */			0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24,			0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF,			0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC,			0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24,			0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,			0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24,			0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,			0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,			0x02, 0x45, 0x30, 0x35, 0x40, 0x20,		},		{	/*  Init_SR80_SR93 */			0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24,			0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24,			0x00, 0x00, 0x00, 0x00,		},		{	/*  Init_SRA0_SRAF */			0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,			0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,		},		{	/*  Init_GR00_GR08 */			0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,			0xFF,		},		{	/*  Init_AR00_AR14 */			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,			0x41, 0x00, 0x0F, 0x00, 0x00,		},		{	/*  Init_CR00_CR18 */			0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,			0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,			0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,			0xFF,		},		{	/*  Init_CR30_CR4D */			0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,			0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,			0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,			0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,		},		{	/*  Init_CR90_CRA7 */			0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,			0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,			0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,		},	},	{	/*  mode#3: 800 x 600  24Bpp  60Hz */		800, 600, 24, 60,		0x2B,		{	/*  Init_SR0_SR4 */			0x03, 0x01, 0x0F, 0x03, 0x0E,		},		{	/*  Init_SR10_SR24 */			0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,			0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,			0xC4, 0x30, 0x02, 0x01, 0x01,		},		{	/*  Init_SR30_SR75 */			0x36, 0x03, 0x20, 0x09, 0xC0, 0x36, 0x36, 0x36,			0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x03, 0xFF,			0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,			0x20, 0x0C, 0x44, 0x20, 0x00, 0x36, 0x36, 0x36,			0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,			0x04, 0x55, 0x59, 0x36, 0x36, 0x00, 0x00, 0x36,			0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,			0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,			0x02, 0x45, 0x30, 0x30, 0x40, 0x20,		},		{	/*  Init_SR80_SR93 */			0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x36,			0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x36, 0x36,			0x00, 0x00, 0x00, 0x00,		},		{	/*  Init_SRA0_SRAF */			0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,			0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,		},		{	/*  Init_GR00_GR08 */			0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,			0xFF,		},		{	/*  Init_AR00_AR14 */			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,			0x41, 0x00, 0x0F, 0x00, 0x00,		},		{	/*  Init_CR00_CR18 */			0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,			0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,			0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,			0xFF,		},		{	/*  Init_CR30_CR4D */			0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,			0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,			0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,			0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,		},		{	/*  Init_CR90_CRA7 */			0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,			0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,			0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,		},	},	{	/*  mode#7: 800 x 600  32Bpp  60Hz */		800, 600, 32, 60,		/*  Init_MISC */		0x2B,		{	/*  Init_SR0_SR4 */			0x03, 0x01, 0x0F, 0x03, 0x0E,		},		{	/*  Init_SR10_SR24 */			0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,			0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,			0xC4, 0x30, 0x02, 0x01, 0x01,		},		{	/*  Init_SR30_SR75 */			0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24,			0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF,			0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC,			0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24,			0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,			0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24,			0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,			0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,			0x02, 0x45, 0x30, 0x35, 0x40, 0x20,		},		{	/*  Init_SR80_SR93 */			0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24,			0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24,			0x00, 0x00, 0x00, 0x00,		},		{	/*  Init_SRA0_SRAF */			0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,			0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,		},		{	/*  Init_GR00_GR08 */			0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,			0xFF,		},		{	/*  Init_AR00_AR14 */			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,			0x41, 0x00, 0x0F, 0x00, 0x00,		},		{	/*  Init_CR00_CR18 */			0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,			0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,			0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,			0xFF,		},		{	/*  Init_CR30_CR4D */			0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,			0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,			0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,			0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,		},		{	/*  Init_CR90_CRA7 */			0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,			0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,			0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,		},	},	/* We use 1024x768 table to light 1024x600 panel for lemote */	{	/*  mode#4: 1024 x 600  16Bpp  60Hz  */		1024, 600, 16, 60,		/*  Init_MISC */		0xEB,		{	/*  Init_SR0_SR4 */			0x03, 0x01, 0x0F, 0x00, 0x0E,		},		{	/*  Init_SR10_SR24 */			0xC8, 0x40, 0x14, 0x60, 0x00, 0x0A, 0x17, 0x20,			0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,			0xC4, 0x30, 0x02, 0x00, 0x01,		},		{	/*  Init_SR30_SR75 */			0x22, 0x03, 0x24, 0x09, 0xC0, 0x22, 0x22, 0x22,			0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x03, 0xFF,			0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,			0x20, 0x0C, 0x44, 0x20, 0x00, 0x22, 0x22, 0x22,			0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,			0x00, 0x60, 0x59, 0x22, 0x22, 0x00, 0x00, 0x22,			0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,			0x50, 0x03, 0x16, 0x02, 0x0D, 0x82, 0x09, 0x02,

Lines 1–500 of 1779.