📄 epson1356fb.h
字号:
/* * epson1356fb.h -- Epson SED1356 Framebuffer Driver * * Copyright 2001, 2002, 2003 MontaVista Software Inc. * Author: MontaVista Software, Inc. * stevel@mvista.com or source@mvista.com * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 675 Mass Ave, Cambridge, MA 02139, USA. * */#ifdef E1356FB_DEBUG#define DPRINTK(a,b...) printk(KERN_DEBUG "e1356fb: %s: " a, __FUNCTION__ , ## b)#else#define DPRINTK(a,b...)#endif #define E1356_REG_SIZE 0x200000#define PICOS2KHZ(a) (1000000000UL/(a))#define KHZ2PICOS(a) (1000000000UL/(a))#define MAX_PIXCLOCK 40000 // KHz#define NTSC_PIXCLOCK 14318 // KHz#define PAL_PIXCLOCK 17734 // KHz/* * Maximum percent errors between desired pixel clock and * supported pixel clock. Lower-than and higher-than desired * clock percent errors. */#define MAX_PCLK_ERROR_LOWER 10#define MAX_PCLK_ERROR_HIGHER -1#define fontwidth_x8(p) (((fontwidth(p) + 7) >> 3) << 3)/* * Register Structures */// Basic#define REG_BASE_BASIC 0x00typedef struct { u8 rev_code; // 00 u8 misc; // 01} reg_basic_t;// General IO Pins#define REG_BASE_GENIO 0x04typedef struct { u8 gpio_cfg; // 04 u8 gpio_cfg2; // 05 SED13806 u8 spacer[2]; // 06 u8 gpio_ctrl; // 08 u8 gpio_ctrl2; // 09 SED13806} reg_genio_t;// MD Config Readback#define REG_BASE_MDCFG 0x0ctypedef struct { u8 md_cfg_stat0; // 0C u8 md_cfg_stat1; // 0D} reg_mdcfg_t;// Clock Config#define REG_BASE_CLKCFG 0x10typedef struct { u8 mem_clk_cfg; // 10 u8 spacer1[3]; // 11 u8 lcd_pclk_cfg; // 14 u8 spacer2[3]; // 15 u8 crttv_pclk_cfg; // 18 u8 spacer3[3]; // 19 u8 mpclk_cfg; // 1C u8 spacer4; // 1D u8 cpu2mem_wait_sel; // 1E} reg_clkcfg_t;// Memory Config#define REG_BASE_MEMCFG 0x20typedef struct { u8 mem_cfg; // 20 u8 dram_refresh; // 21 u8 spacer[8]; // 22 u8 dram_timings_ctrl0; // 2A u8 dram_timings_ctrl1; // 2B} reg_memcfg_t;// Panel Config#define REG_BASE_PANELCFG 0x30typedef struct { u8 panel_type; // 30 u8 mod_rate; // 31} reg_panelcfg_t;// LCD and CRTTV Display Config#define REG_BASE_LCD_DISPCFG 0x32#define REG_BASE_CRTTV_DISPCFG 0x50typedef struct { u8 hdw; // 32 or 50 u8 spacer1; // 33 or 51 u8 hndp; // 34 or 52 u8 hsync_start; // 35 or 53 u8 hsync_pulse; // 36 or 54 u8 spacer2; // 37 or 55 u8 vdh0; // 38 or 56 u8 vdh1; // 39 or 57 u8 vndp; // 3A or 58 u8 vsync_start; // 3B or 59 u8 vsync_pulse; // 3C or 5A u8 tv_output_ctrl; // 5B (TV only)} reg_dispcfg_t;// LCD and CRTTV Display Mode#define REG_BASE_LCD_DISPMODE 0x40#define REG_BASE_CRTTV_DISPMODE 0x60typedef struct { u8 disp_mode; // 40 or 60 u8 lcd_misc; // 41 (LCD only) u8 start_addr0; // 42 or 62 u8 start_addr1; // 43 or 63 u8 start_addr2; // 44 or 64 u8 spacer1; // 45 or 65 u8 mem_addr_offset0; // 46 or 66 u8 mem_addr_offset1; // 47 or 67 u8 pixel_panning; // 48 or 68 u8 spacer2; // 49 or 69 u8 fifo_high_thresh; // 4A or 6A u8 fifo_low_thresh; // 4B or 6B} reg_dispmode_t;// LCD and CRTTV Ink/Cursor#define REG_BASE_LCD_INKCURS 0x70#define REG_BASE_CRTTV_INKCURS 0x80typedef struct { u8 ctrl; // 70 or 80 u8 start_addr; // 71 or 81 u8 x_pos0; // 72 or 82 u8 x_pos1; // 73 or 83 u8 y_pos0; // 74 or 84 u8 y_pos1; // 75 or 85 u8 blue0; // 76 or 86 u8 green0; // 77 or 87 u8 red0; // 78 or 88 u8 spacer1; // 79 or 89 u8 blue1; // 7A or 8A u8 green1; // 7B or 8B u8 red1; // 7C or 8C u8 spacer2; // 7D or 8D u8 fifo; // 7E or 8E} reg_inkcurs_t;// BitBlt Config#define REG_BASE_BITBLT 0x100typedef struct { u8 ctrl0; // 100 u8 ctrl1; // 101 u8 rop_code; // 102 u8 operation; // 103 u8 src_start_addr0; // 104 u8 src_start_addr1; // 105 u8 src_start_addr2; // 106 u8 spacer1; // 107 u8 dest_start_addr0; // 108 u8 dest_start_addr1; // 109 u8 dest_start_addr2; // 10A u8 spacer2; // 10B u8 mem_addr_offset0; // 10C u8 mem_addr_offset1; // 10D u8 spacer3[2]; // 10E u8 width0; // 110 u8 width1; // 111 u8 height0; // 112 u8 height1; // 113 u8 bg_color0; // 114 u8 bg_color1; // 115 u8 spacer4[2]; // 116 u8 fg_color0; // 118 u8 fg_color1; // 119} reg_bitblt_t;// LUT#define REG_BASE_LUT 0x1e0typedef struct { u8 mode; // 1E0 u8 spacer1; // 1E1 u8 addr; // 1E2 u8 spacer2; // 1E3 u8 data; // 1E4} reg_lut_t;// Power Save Config#define REG_BASE_PWRSAVE 0x1f0typedef struct { u8 cfg; // 1F0 u8 status; // 1F1} reg_pwrsave_t;// Misc#define REG_BASE_MISC 0x1f4typedef struct { u8 cpu2mem_watchdog; // 1F4 u8 spacer[7]; // 1F5 u8 disp_mode; // 1FC} reg_misc_t;// MediaPlug#define REG_BASE_MEDIAPLUG 0x1000typedef struct { u8 lcmd; // 1000 u8 spacer1; // 1001 u8 reserved_lcmd; // 1002 u8 spacer2; // 1003 u8 cmd; // 1004 u8 spacer3; // 1005 u8 reserved_cmd; // 1006 u8 spacer4; // 1007 u8 data; // 1008} reg_mediaplug_t;// BitBlt data register. 16-bit access only#define REG_BASE_BITBLT_DATA 0x100000typedef struct { reg_basic_t* basic; reg_genio_t* genio; reg_mdcfg_t* md_cfg; reg_clkcfg_t* clk_cfg; reg_memcfg_t* mem_cfg; reg_panelcfg_t* panel_cfg; reg_dispcfg_t* lcd_cfg; reg_dispcfg_t* crttv_cfg; reg_dispmode_t* lcd_mode; reg_dispmode_t* crttv_mode; reg_inkcurs_t* lcd_inkcurs; reg_inkcurs_t* crttv_inkcurs; reg_bitblt_t* bitblt; reg_lut_t* lut; reg_pwrsave_t* pwr_save; reg_misc_t* misc; reg_mediaplug_t* mediaplug; u16* bitblt_data;} e1356_reg_t;/*--------------------------------------------------------*/enum mem_type_t { MEM_TYPE_EDO_2CAS = 0, MEM_TYPE_FPM_2CAS, MEM_TYPE_EDO_2WE, MEM_TYPE_FPM_2WE, MEM_TYPE_EMBEDDED_SDRAM = 0x80};enum mem_smr_t { MEM_SMR_CBR = 0, MEM_SMR_SELF, MEM_SMR_NONE};enum disp_type_t { DISP_TYPE_LCD = 0, DISP_TYPE_TFT, DISP_TYPE_CRT, DISP_TYPE_PAL, DISP_TYPE_NTSC};/* * Maximum timing values, as determined by the SED1356 register * field sizes. All are indexed by display type, except * max_hsync_start which is first indexed by color depth, * then by display type. */static const int max_hndp[5] = {256, 256, 512, 511, 510};static const int max_hsync_start[2][5] = { {0, 252, 507, 505, 505}, // 8 bpp {0, 254, 509, 507, 507} // 16 bpp};static const int max_hsync_width[5] = {0, 128, 128, 0, 0};static const int max_vndp[5] = {64, 64, 128, 128, 128};static const int max_vsync_start[5] = {0, 64, 128, 128, 128};static const int max_vsync_width[5] = {0, 8, 8, 0, 0};#define IS_PANEL(disp_type) \ (disp_type == DISP_TYPE_LCD || disp_type == DISP_TYPE_TFT)#define IS_CRT(disp_type) (disp_type == DISP_TYPE_CRT)#define IS_TV(disp_type) \ (disp_type == DISP_TYPE_NTSC || disp_type == DISP_TYPE_PAL)enum tv_filters_t { TV_FILT_LUM = 1, TV_FILT_CHROM = 2,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -