epson1356fb.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:16k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *      epson1356fb.h  --  Epson SED1356 Framebuffer Driver
  3.  *
  4.  * Copyright 2001 MontaVista Software Inc.
  5.  * Author: MontaVista Software, Inc.
  6.  *          stevel@mvista.com or source@mvista.com
  7.  *
  8.  *  This program is free software; you can redistribute  it and/or modify it
  9.  *  under  the terms of  the GNU General  Public License as published by the
  10.  *  Free Software Foundation;  either version 2 of the  License, or (at your
  11.  *  option) any later version.
  12.  *
  13.  *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
  14.  *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
  15.  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
  16.  *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
  17.  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  18.  *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
  19.  *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  20.  *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
  21.  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  22.  *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  23.  *
  24.  *  You should have received a copy of the  GNU General Public License along
  25.  *  with this program; if not, write  to the Free Software Foundation, Inc.,
  26.  *  675 Mass Ave, Cambridge, MA 02139, USA.
  27.  */
  28. #ifdef E1356FB_DEBUG
  29. #define DPRINTK(a,b...) printk(KERN_DEBUG "e1356fb: %s: " a, __FUNCTION__ , ## b)
  30. #else
  31. #define DPRINTK(a,b...)
  32. #endif 
  33. #define E1356_REG_SIZE  0x200000
  34. #define PICOS2KHZ(a) (1000000000UL/(a))
  35. #define KHZ2PICOS(a) (1000000000UL/(a))
  36. #define MAX_PIXCLOCK  40000 // KHz
  37. #define NTSC_PIXCLOCK 14318 // KHz
  38. #define PAL_PIXCLOCK  17734 // KHz
  39. /*
  40.  * Maximum percent errors between desired pixel clock and
  41.  * supported pixel clock. Lower-than and higher-than desired
  42.  * clock percent errors.
  43.  */
  44. #define MAX_PCLK_ERROR_LOWER  10
  45. #define MAX_PCLK_ERROR_HIGHER -1
  46. #define fontwidth_x8(p) (((fontwidth(p) + 7) >> 3) << 3)
  47. /*
  48.  * Register Structures
  49.  */
  50. // Basic
  51. #define REG_BASE_BASIC     0x00
  52. typedef struct {
  53. u8 rev_code;           // 00
  54. u8 misc;               // 01
  55. } reg_basic_t;
  56. // General IO Pins
  57. #define REG_BASE_GENIO     0x04
  58. typedef struct {
  59. u8 gpio_cfg;           // 04
  60. u8 gpio_cfg2;          // 05 SED13806
  61. u8 spacer[2];          // 06
  62. u8 gpio_ctrl;          // 08
  63. u8 gpio_ctrl2;         // 09 SED13806
  64. } reg_genio_t;
  65. // MD Config Readback
  66. #define REG_BASE_MDCFG     0x0c
  67. typedef struct {
  68. u8 md_cfg_stat0;       // 0C
  69. u8 md_cfg_stat1;       // 0D
  70. } reg_mdcfg_t;
  71. // Clock Config
  72. #define REG_BASE_CLKCFG    0x10
  73. typedef struct {
  74. u8 mem_clk_cfg;        // 10
  75. u8 spacer1[3];         // 11
  76. u8 lcd_pclk_cfg;       // 14
  77. u8 spacer2[3];         // 15
  78. u8 crttv_pclk_cfg;     // 18
  79. u8 spacer3[3];         // 19
  80. u8 mpclk_cfg;          // 1C
  81. u8 spacer4;            // 1D
  82. u8 cpu2mem_wait_sel;   // 1E
  83. } reg_clkcfg_t;
  84. // Memory Config
  85. #define REG_BASE_MEMCFG    0x20
  86. typedef struct {
  87. u8 mem_cfg;            // 20
  88. u8 dram_refresh;       // 21
  89. u8 spacer[8];          // 22
  90. u8 dram_timings_ctrl0; // 2A
  91. u8 dram_timings_ctrl1; // 2B
  92. } reg_memcfg_t;
  93. // Panel Config
  94. #define REG_BASE_PANELCFG  0x30
  95. typedef struct {
  96. u8 panel_type;         // 30
  97. u8 mod_rate;           // 31
  98. } reg_panelcfg_t;
  99. // LCD and CRTTV Display Config
  100. #define REG_BASE_LCD_DISPCFG   0x32
  101. #define REG_BASE_CRTTV_DISPCFG 0x50
  102. typedef struct {
  103. u8 hdw;                // 32 or 50
  104. u8 spacer1;            // 33 or 51
  105. u8 hndp;               // 34 or 52
  106. u8 hsync_start;        // 35 or 53
  107. u8 hsync_pulse;        // 36 or 54
  108. u8 spacer2;            // 37 or 55
  109. u8 vdh0;               // 38 or 56
  110. u8 vdh1;               // 39 or 57
  111. u8 vndp;               // 3A or 58
  112. u8 vsync_start;        // 3B or 59
  113. u8 vsync_pulse;        // 3C or 5A
  114. u8 tv_output_ctrl;     // 5B (TV only)
  115. } reg_dispcfg_t;
  116. // LCD and CRTTV Display Mode
  117. #define REG_BASE_LCD_DISPMODE   0x40
  118. #define REG_BASE_CRTTV_DISPMODE 0x60
  119. typedef struct {
  120. u8 disp_mode;          // 40 or 60
  121. u8 lcd_misc;           // 41 (LCD only)
  122. u8 start_addr0;        // 42 or 62
  123. u8 start_addr1;        // 43 or 63
  124. u8 start_addr2;        // 44 or 64
  125. u8 spacer1;            // 45 or 65
  126. u8 mem_addr_offset0;   // 46 or 66
  127. u8 mem_addr_offset1;   // 47 or 67
  128. u8 pixel_panning;      // 48 or 68
  129. u8 spacer2;            // 49 or 69
  130. u8 fifo_high_thresh;   // 4A or 6A
  131. u8 fifo_low_thresh;    // 4B or 6B
  132. } reg_dispmode_t;
  133. // LCD and CRTTV Ink/Cursor
  134. #define REG_BASE_LCD_INKCURS   0x70
  135. #define REG_BASE_CRTTV_INKCURS 0x80
  136. typedef struct {
  137. u8 ctrl;               // 70 or 80
  138. u8 start_addr;         // 71 or 81
  139. u8 x_pos0;             // 72 or 82
  140. u8 x_pos1;             // 73 or 83
  141. u8 y_pos0;             // 74 or 84
  142. u8 y_pos1;             // 75 or 85
  143. u8 blue0;              // 76 or 86
  144. u8 green0;             // 77 or 87
  145. u8 red0;               // 78 or 88
  146. u8 spacer1;            // 79 or 89
  147. u8 blue1;              // 7A or 8A
  148. u8 green1;             // 7B or 8B
  149. u8 red1;               // 7C or 8C
  150. u8 spacer2;            // 7D or 8D
  151. u8 fifo;               // 7E or 8E
  152. } reg_inkcurs_t;
  153. // BitBlt Config
  154. #define REG_BASE_BITBLT        0x100
  155. typedef struct {
  156. u8 ctrl0;              // 100
  157. u8 ctrl1;              // 101
  158. u8 rop_code;           // 102
  159. u8 operation;          // 103
  160. u8 src_start_addr0;    // 104
  161. u8 src_start_addr1;    // 105
  162. u8 src_start_addr2;    // 106
  163. u8 spacer1;            // 107
  164. u8 dest_start_addr0;   // 108
  165. u8 dest_start_addr1;   // 109
  166. u8 dest_start_addr2;   // 10A
  167. u8 spacer2;            // 10B
  168. u8 mem_addr_offset0;   // 10C
  169. u8 mem_addr_offset1;   // 10D
  170. u8 spacer3[2];         // 10E
  171. u8 width0;             // 110
  172. u8 width1;             // 111
  173. u8 height0;            // 112
  174. u8 height1;            // 113
  175. u8 bg_color0;          // 114
  176. u8 bg_color1;          // 115
  177. u8 spacer4[2];         // 116
  178. u8 fg_color0;          // 118
  179. u8 fg_color1;          // 119
  180. } reg_bitblt_t;
  181. // LUT
  182. #define REG_BASE_LUT           0x1e0
  183. typedef struct {
  184. u8 mode;               // 1E0
  185. u8 spacer1;            // 1E1
  186. u8 addr;               // 1E2
  187. u8 spacer2;            // 1E3
  188. u8 data;               // 1E4
  189. } reg_lut_t;
  190. // Power Save Config
  191. #define REG_BASE_PWRSAVE       0x1f0
  192. typedef struct {
  193. u8 cfg;                // 1F0
  194. u8 status;             // 1F1
  195. } reg_pwrsave_t;
  196. // Misc
  197. #define REG_BASE_MISC          0x1f4
  198. typedef struct {
  199. u8 cpu2mem_watchdog;   // 1F4
  200. u8 spacer[7];          // 1F5
  201. u8 disp_mode;          // 1FC
  202. } reg_misc_t;
  203. // MediaPlug
  204. #define REG_BASE_MEDIAPLUG     0x1000
  205. typedef struct {
  206. u8 lcmd;               // 1000
  207. u8 spacer1;            // 1001
  208. u8 reserved_lcmd;      // 1002
  209. u8 spacer2;            // 1003
  210. u8 cmd;                // 1004
  211. u8 spacer3;            // 1005
  212. u8 reserved_cmd;       // 1006
  213. u8 spacer4;            // 1007
  214. u8 data;               // 1008
  215. } reg_mediaplug_t;
  216. // BitBlt data register. 16-bit access only
  217. #define REG_BASE_BITBLT_DATA   0x100000
  218. typedef struct {
  219. reg_basic_t* basic;
  220. reg_genio_t* genio;
  221. reg_mdcfg_t* md_cfg;
  222. reg_clkcfg_t* clk_cfg;
  223. reg_memcfg_t* mem_cfg;
  224. reg_panelcfg_t* panel_cfg;
  225. reg_dispcfg_t* lcd_cfg;
  226. reg_dispcfg_t* crttv_cfg;
  227. reg_dispmode_t* lcd_mode;
  228. reg_dispmode_t* crttv_mode;
  229. reg_inkcurs_t* lcd_inkcurs;
  230. reg_inkcurs_t* crttv_inkcurs;
  231. reg_bitblt_t* bitblt;
  232. reg_lut_t* lut;
  233. reg_pwrsave_t* pwr_save;
  234. reg_misc_t* misc;
  235. reg_mediaplug_t* mediaplug;
  236. u16* bitblt_data;
  237. } e1356_reg_t;
  238. /*--------------------------------------------------------*/
  239. enum mem_type_t {
  240. MEM_TYPE_EDO_2CAS = 0,
  241. MEM_TYPE_FPM_2CAS,
  242. MEM_TYPE_EDO_2WE,
  243. MEM_TYPE_FPM_2WE,
  244. MEM_TYPE_EMBEDDED_SDRAM = 0x80
  245. };
  246. enum mem_smr_t {
  247. MEM_SMR_CBR = 0,
  248. MEM_SMR_SELF,
  249. MEM_SMR_NONE
  250. };
  251. enum disp_type_t {
  252. DISP_TYPE_LCD = 0,
  253. DISP_TYPE_TFT,
  254. DISP_TYPE_CRT,
  255. DISP_TYPE_PAL,
  256. DISP_TYPE_NTSC
  257. };
  258. /*
  259.  * Maximum timing values, as determined by the SED1356 register
  260.  * field sizes. All are indexed by display type, except
  261.  * max_hsync_start which is first indexed by color depth,
  262.  * then by display type.
  263.  */
  264. static const int max_hndp[5] = {256, 256, 512, 511, 510};
  265. static const int max_hsync_start[2][5] = {
  266. {0, 252, 507, 505, 505}, // 8 bpp
  267. {0, 254, 509, 507, 507}  // 16 bpp
  268. };
  269. static const int max_hsync_width[5] = {0, 128, 128, 0, 0};
  270. static const int max_vndp[5] = {64, 64, 128, 128, 128};
  271. static const int max_vsync_start[5] = {0, 64, 128, 128, 128};
  272. static const int max_vsync_width[5] = {0, 8, 8, 0, 0};
  273. #define IS_PANEL(disp_type) 
  274.     (disp_type == DISP_TYPE_LCD || disp_type == DISP_TYPE_TFT)
  275. #define IS_CRT(disp_type) (disp_type == DISP_TYPE_CRT)
  276. #define IS_TV(disp_type) 
  277.     (disp_type == DISP_TYPE_NTSC || disp_type == DISP_TYPE_PAL)
  278. enum tv_filters_t {
  279. TV_FILT_LUM = 1,
  280. TV_FILT_CHROM = 2,
  281. TV_FILT_FLICKER = 4
  282. };
  283. enum tv_format_t {
  284. TV_FMT_COMPOSITE = 0,
  285. TV_FMT_S_VIDEO
  286. };
  287. struct e1356fb_fix {
  288. int system;       // the number of a pre-packaged system
  289. u64 regbase_phys; // phys start address of registers
  290. u64 membase_phys; // phys start address of fb memory
  291. // Memory parameters
  292. int mem_speed;    // speed: 50, 60, 70, or 80 (nsec)
  293. int mem_type;     // mem type: EDO-2CAS, FPM-2CAS, EDO-2WE, FPM-2WE
  294. int mem_refresh;  // refresh rate in KHz
  295. int mem_smr;      // suspend mode refresh: CAS_BEFORE_RAS, SELF, or NONE
  296. // Clocks
  297. int busclk;       // BUSCLK frequency, in KHz
  298. int mclk;         // MCLK freq, in KHz, will either be BUSCLK or BUSCLK/2
  299. int clki;         // CLKI frequency, in KHz
  300. int clki2;        // CLKI2 frequency, in KHz
  301. int disp_type;    // LCD, TFT, CRT, PAL, or NTSC
  302. // TV Options
  303. u8  tv_filt;      // TV Filter mask, LUM, CHROM, and FLICKER
  304. int tv_fmt;       // TV output format, COMPOSITE or S_VIDEO
  305.     
  306. // Panel (LCD,TFT) Options
  307. int panel_el;     // enable support for EL-type panels
  308. int panel_width;  // Panel data width: LCD: 4/8/16, TFT: 9/12/18
  309.     
  310. // Misc
  311. int noaccel;
  312. int nopan;
  313. #ifdef CONFIG_MTRR
  314. int nomtrr;
  315. #endif
  316. int nohwcursor;
  317. int mmunalign;    // force unaligned returned VA in mmap()
  318. char fontname[40];
  319. char *mode_option;
  320. };
  321. typedef struct {
  322. int pixclk_d;     // Desired Pixel Clock, KHz
  323. int pixclk;       // Closest supported clock to desired clock, KHz
  324. int error;        // percent error between pixclock and pixclock_d
  325. int clksrc;       // equal to busclk, mclk, clki, or clki2, KHz
  326. int divisor;      // pixclk = clksrc/divisor, where divisor = 1,2,3, or 4
  327. u8  pixclk_bits;  // pixclock register value for above settings
  328. } pixclock_info_t;
  329. struct e1356fb_par {
  330. int width;
  331. int height;
  332. int width_virt;   // Width in pixels
  333. int height_virt;  // Height in lines
  334. int bpp;          // bits-per-pixel
  335. int Bpp;          // Bytes-per-pixel
  336. // Timing
  337. pixclock_info_t ipclk;
  338. int horiz_ndp;    // Horiz. Non-Display Period, pixels
  339. int vert_ndp;     // Vert. Non-Display Period, lines
  340. int hsync_pol;    // Polarity of horiz. sync signal (HRTC for CRT/TV,
  341. // FPLINE for TFT). 0=active lo, 1=active hi
  342. int hsync_start;  // Horiz. Sync Start position, pixels
  343. int hsync_width;  // Horiz. Sync Pulse width, pixels
  344. int hsync_freq;   // calculated horizontal sync frequency
  345. int vsync_pol;    // Polarity of vert. sync signal (VRTC for CRT/TV,
  346. // FPFRAME for TFT). 0=active lo, 1=active hi
  347. int vsync_start;  // Vert. Sync Start position, lines
  348. int vsync_width;  // Vert. Sync Pulse width, lines
  349. int vsync_freq;   // calculated vertical sync frequency
  350. int cmap_len;     // color-map length
  351. };
  352. struct fb_info_e1356 {
  353. struct fb_info fb_info;
  354. void *regbase_virt;
  355. unsigned long regbase_size;
  356. void *membase_virt;
  357. unsigned long fb_size;
  358. e1356_reg_t reg;
  359. void* putcs_buffer;
  360.     
  361. int max_pixclock;   // Max supported pixel clock, KHz
  362. int open, mmaped;   // open count, is mmap'ed
  363. u8 chip_rev;
  364.     
  365. #ifdef CONFIG_MTRR
  366. int mtrr_idx;
  367. #endif
  368. #ifdef SHADOW_FRAME_BUFFER
  369. struct {
  370. void* fb;
  371. struct timer_list timer;
  372. } shadow;
  373. #endif
  374. struct { unsigned red, green, blue, pad; } palette[256];
  375. struct display disp;
  376. #if defined(FBCON_HAS_CFB16)
  377. u16 fbcon_cmap16[16];
  378. #endif
  379.     
  380. struct {
  381. int type;
  382. int state;
  383. int w,h,u;
  384. int x,y,redraw;
  385. unsigned long enable,disable;
  386. struct timer_list timer;
  387. spinlock_t lock; 
  388. } cursor;
  389.  
  390. struct e1356fb_fix fix;
  391. struct e1356fb_par default_par;
  392. struct e1356fb_par current_par;
  393. };
  394. // The following are boot options for particular SED1356-based target systems
  395. enum {
  396. SYS_NULL,
  397. SYS_PB1000,
  398. SYS_PB1500,
  399. SYS_SDU1356,
  400. SYS_CLIO1050,
  401. NUM_SYSTEMS // must be last
  402. };
  403. static struct {
  404. struct e1356fb_fix fix;
  405. struct e1356fb_par par;
  406. } systems[NUM_SYSTEMS] = {
  407. /*
  408.  * NULL system to help us detect missing options
  409.    * when the driver is compiled as a module.
  410.  */
  411. {
  412. {   // fix
  413. SYS_NULL,
  414. },
  415. {   // par
  416. }
  417. },
  418. /*
  419.  * Alchemy Pb1000 evaluation board, SED1356
  420.  */
  421. {
  422. {   // fix
  423. SYS_PB1000,
  424. /*
  425.  * Note!: these are "pseudo" physical addresses;
  426.  * the SED1356 is not actually mapped here, but rather
  427.  * at the 36-bit address of 0xE 0000 0000. There is an
  428.  * ugly hack in the Au1000 TLB refill handler that will
  429.  * translate pte_t's in the range 0xE000 0000 -->
  430.  * 0xEFFF FFFF to the 36-bit range 0xE 0000 0000 -->
  431.  * 0xE 0FFF FFFF. The long-term solution is to support
  432.  * 36-bit physical addresses in linux-mips32 mm, since
  433.  * the mips32 specification specifically supports this.
  434.  */
  435. 0xE00000000, 0xE00200000,
  436. 60, MEM_TYPE_EDO_2CAS, 64, MEM_SMR_CBR,
  437. 0, 0,   // BUSCLK and MCLK are calculated at run-time
  438. 40000, 14318, // CLKI, CLKI2
  439. #ifdef CONFIG_PB1000_CRT
  440. DISP_TYPE_CRT,
  441. 0, 0, // TV Options
  442. 0, 0, // Panel options
  443. #elif defined (CONFIG_PB1000_NTSC)
  444. DISP_TYPE_NTSC,
  445. TV_FILT_FLICKER|TV_FILT_LUM|TV_FILT_CHROM,
  446. TV_FMT_COMPOSITE,
  447. 0, 0, // Panel options
  448. #elif defined (CONFIG_PB1000_TFT)
  449. DISP_TYPE_TFT,
  450. 0, 0, // TV Options
  451. 0, 12, // Panel options, EL panel?, data width?
  452. #else
  453. DISP_TYPE_PAL,
  454. TV_FILT_FLICKER|TV_FILT_LUM|TV_FILT_CHROM,
  455. TV_FMT_COMPOSITE,
  456. 0, 0, // Panel options
  457. #endif
  458. 0, 0,
  459. #ifdef CONFIG_MTRR
  460. 0,
  461. #endif
  462. 0,
  463. 0,
  464. {0},
  465. "800x600@60"
  466. },
  467. {   // par
  468. 0, 0, 800, 600, 8, 1,
  469. // timings will be set by modedb
  470. {0}, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  471. 256
  472. }
  473. },
  474. /*
  475.  * Alchemy Pb1500 evaluation board, SED13806
  476.  */
  477. {
  478. {   // fix
  479. SYS_PB1500,
  480. /*
  481.  * Note!: these are "pseudo" physical addresses;
  482.  * the SED1356 is not actually mapped here, but rather
  483.  * at the 36-bit address of 0xE 0000 0000. There is an
  484.  * ugly hack in the Au1000 TLB refill handler that will
  485.  * translate pte_t's in the range 0xE000 0000 -->
  486.  * 0xEFFF FFFF to the 36-bit range 0xE 0000 0000 -->
  487.  * 0xE 0FFF FFFF. The long-term solution is to support
  488.  * 36-bit physical addresses in linux-mips32 mm, since
  489.  * the mips32 specification specifically supports this.
  490.  */
  491. 0xE1B000000, 0xE1B200000,
  492. 50, MEM_TYPE_EMBEDDED_SDRAM, 64, MEM_SMR_CBR,
  493. 0, 0,   // BUSCLK and MCLK are calculated at run-time
  494. 40000, 14318, // CLKI, CLKI2
  495. #ifdef CONFIG_PB1500_CRT
  496. DISP_TYPE_CRT,
  497. 0, 0, // TV Options
  498. 0, 0, // Panel options
  499. #else
  500. DISP_TYPE_TFT,
  501. 0, 0, // TV Options
  502. 0, 12, // Panel options, EL panel?, data width?
  503. #endif
  504. 0, 0,
  505. #ifdef CONFIG_MTRR
  506. 0,
  507. #endif
  508. 0,
  509. 0,
  510. {0},
  511. "800x600@60"
  512. },
  513. {   // par
  514. 0, 0, 800, 600, 8, 1,
  515. // timings will be set by modedb
  516. {0}, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  517. 256
  518. }
  519. },
  520. /*
  521.  * Epson SDU1356B0C PCI eval card. These settings assume the
  522.  * card is configured for PCI, the MediaPlug is disabled,
  523.  * and the onboard clock synthesizer is at the power-up
  524.  * clock settings.
  525.  */
  526. {
  527. {   // fix
  528. SYS_SDU1356,
  529. 0x0, 0x0,  // addresses obtained from PCI config space
  530. // FIXME: just guess for now
  531. 60, MEM_TYPE_EDO_2CAS, 64, MEM_SMR_CBR,
  532. 33000, 0, 40000, 25175, // BUSCLK, MCLK, CLKI, CLKI2
  533. DISP_TYPE_CRT,
  534. 0, 0,
  535. 0, 0,
  536. 0, 0,
  537. #ifdef CONFIG_MTRR
  538. 0,
  539. #endif
  540. 0,
  541. 0,
  542. {0},
  543. "800x600@60"
  544. },
  545. {   // par
  546. 0, 0, 1024, 768, 8, 1,
  547. // timings will be set by modedb
  548. {0}, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  549. 256
  550. }
  551. },
  552. /*
  553.  * Vadem Clio 1050 - this is for the benefit of the Linux-VR project.
  554.  * FIXME: Most of these settings are just guesses, until I can get a
  555.  * Clio 1050 and dump the registers that WinCE has setup.
  556.  */
  557. {
  558. {   // fix
  559. SYS_CLIO1050,
  560. 0x0a000000, 0x0a200000,
  561. 60, MEM_TYPE_EDO_2CAS, 64, MEM_SMR_CBR,
  562. 40000, 40000, 14318, 14318,
  563. DISP_TYPE_TFT,
  564. 0, 0,
  565. 0, 16,
  566. 0, 0,
  567. #ifdef CONFIG_MTRR
  568. 0,
  569. #endif
  570. 0,
  571. 0,
  572. {0},
  573. "640x480@85"
  574. },
  575. {   // par
  576. 0, 0, 1024, 768, 16, 2,
  577. // timings will be set by modedb
  578. {0}, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  579. 16
  580. }
  581. }
  582. };