s5pv210顯示驅(qū)動分析.docx_第1頁
s5pv210顯示驅(qū)動分析.docx_第2頁
s5pv210顯示驅(qū)動分析.docx_第3頁
s5pv210顯示驅(qū)動分析.docx_第4頁
s5pv210顯示驅(qū)動分析.docx_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

S5PV210顯示驅(qū)動分析與移植(android)一、LCD控制器1 綜述要使一塊LCD正常的顯示文字或圖像,不僅需要LCD驅(qū)動器,而且還需要相應(yīng)的LCD控制器。在通常情況下,生產(chǎn)廠商把LCD驅(qū)動器會以COF/COG的形式與LCD玻璃基板制作在一起,而LCD控制器則是由外部的電路來實現(xiàn),現(xiàn)在很多的MCU內(nèi)部都集成了LCD控制器,如S5PV210等。通過LCD控制器就可以產(chǎn)生LCD驅(qū)動器所需要的控制信號來控制STN/TFT屏了。 LCD控制器可以通過編程支持不同LCD屏的要求,例如行和列像素數(shù),數(shù)據(jù)總線寬度,接口時序和刷新頻率等。LCD控制器的主要作用,是將定位在系統(tǒng)存儲器中的顯示緩沖區(qū)中的LCD圖像數(shù)據(jù)傳送到外部LCD驅(qū)動器,并產(chǎn)生必要的控制信號,例如RGB_VSYNC, RGB_HSYNC, RGB_VCLK等。如下是S5PV210的LCD控制器內(nèi)部結(jié)構(gòu)框圖:主要由VSFR, VDMA, VPRCS , VTIME和視頻時鐘產(chǎn)生器幾個模塊組成: VSFR由121個可編程控制器組,一套gamma LUT寄存器組(包括64個寄存器),一套i80命令寄存器組(包括12個寄存器)和5塊256*32調(diào)色板存儲器組成,主要用于對lcd控制器進(jìn)行配置。 VDMA是LCD專用的DMA傳輸通道,可以自動從系統(tǒng)總線上獲取視頻數(shù)據(jù)傳送到VPRCS,無需CPU干涉。 VPRCS收到數(shù)據(jù)后組成特定的格式(如16bpp或24bpp),然后通過數(shù)據(jù)接口(RGB_VD, VEN_VD, V656_VD or SYS_VD)傳送到外部LCD屏上。 VTIME模塊由可編程邏輯組成,負(fù)責(zé)不同lcd驅(qū)動器的接口時序控制需求。VTIME模塊產(chǎn)生 RGB_VSYNC, RGB_HSYNC, RGB_VCLK, RGB_VDEN, VEN_VSYNC等信號。主要特性: 支持4種接口類型:RGB/i80/ITU 601(656)/YTU444 支持單色、4級灰度、16級灰度、256色的調(diào)色板顯示模式 支持64K和16M色非調(diào)色板顯示模式 支持多種規(guī)格和分辨率的LCD 虛擬屏幕最大可達(dá)16MB 5個256*32位調(diào)色板內(nèi)存 支持透明疊加2 接口信號FIMD顯示控制器全部信號定義如下所示SignalI/ODescriptionLCD TypeLCD_HSYNCO水平同步信號RGB I/FLCD_VSYNCO垂直同步信號LCD_VDENO數(shù)據(jù)使能LCD_VCLKO視頻時鐘LCD_VD23:0OLCD像素數(shù)據(jù)輸出SYS_OEO輸出使能VSYNC_LDIOIndirect i80接口,垂直同步信號i80 I/FSYS_CS0OIndirect i80接口,片選LCD0SYS_CS1OIndirect i80接口,片選LCD1SYS_RSOIndirect i80接口,寄存器選擇信號SYS_WEOIndirect i80接口,寫使能信號SYS_VD23:0IOIndirect i80接口,視頻數(shù)據(jù)輸入輸出SYS_OEOIndirect i80接口,輸出使能信號VEN_HSYNCO601接口水平同步信號ITU 601/656 I/FVEN_VSYNCO601接口垂直同步信號VEN_HREFO601接口數(shù)據(jù)使能V601_CLKO601接口數(shù)據(jù)時鐘VEN_DATA7:0O601接口YUV422格式數(shù)據(jù)輸出V656_DATA7:0O656接口YUV422格式數(shù)據(jù)輸出V656_CLKO656接口數(shù)據(jù)時鐘VEN_FIELDO601接口域信號其中主要的RGB接口信號: LCD_HSYNC: 行同步信號,表示一行數(shù)據(jù)的開始,LCD控制器在整個水平線(整行)數(shù)據(jù)移入LCD驅(qū)動器后,插入一個LCD_HSYNC信號; LCD_VSYNC: 幀同步信號,表示一幀數(shù)據(jù)的開始,LCD控制器在一個完整幀顯示完成后立即插入一個LCD_VSYNC信號,開始新一幀的顯示;VSYNC信號出現(xiàn)的頻率表示一秒鐘內(nèi)能顯示多少幀圖像,稱為“顯示器的頻率” LCD_VCLK:像素時鐘信號,表示正在傳輸一個像素的數(shù)據(jù); LCD_VDEN: 數(shù)據(jù)使能信號; LCD_VD23:0: LCD像素數(shù)據(jù)輸出端口3 工作時序下圖是LCD RGB接口工作時序圖:上面時序圖上各時鐘延時參數(shù)的含義如下:(這些參數(shù)的值,LCD產(chǎn)生廠商會提供相應(yīng)的數(shù)據(jù)手冊) VBPD(vertical back porch):表示在一幀圖像開始時,垂直同步信號以后的無效的行數(shù) VFBD(vertical front porch):表示在一幀圖像結(jié)束后,垂直同步信號以前的無效的行數(shù) VSPW(vertical sync pulse width):表示垂直同步脈沖的寬度,用行數(shù)計算 HBPD(horizontal back porch):表示從水平同步信號開始到一行的有效數(shù)據(jù)開始之間的VCLK的個數(shù) HFPD(horizontal front porth):表示一行的有效數(shù)據(jù)結(jié)束到下一個水平同步信號開始之間的VCLK的個數(shù) HSPW(horizontal sync pulse width):表示水平同步信號的寬度,用VCLK計算(1)幀的傳輸過程1)VSYNC信號有效時,表示一幀數(shù)據(jù)的開始,信號寬度為 (VSPW + 1)個HSYNC信號周期,即(VSPW + 1)個無效行;2)VSYNC信號脈沖之后,總共還要經(jīng)過(VBPD + 1)個HSYNC信號周期,有效的行數(shù)據(jù)才出現(xiàn);所以,在VSYNC信號有效之后,還要經(jīng)過(VSPW + 1 + VBPD + 1)個無效的行;3)隨即發(fā)出(LINEVAL + 1)行的有效數(shù)據(jù);4)最后是(VFPD + 1)個無效的行; (2)行中像素數(shù)據(jù)的傳輸過程 1)HSYNC信號有效時,表示一行數(shù)據(jù)的開始,信號寬度為(HSPW + 1)個VCLK信號周期,即(HSPW + 1)個無效像素;2)HSYNC信號脈沖之后,還要經(jīng)過(HBPD + 1)個VCLK信號周期,有效的像素數(shù)據(jù)才出現(xiàn); 3)隨后發(fā)出(HOZVAL + 1)個像素的有效數(shù)據(jù); 4)最后是(HFPD + 1)個無效的像素; (3)將VSYNC、HSYNC、VCLK等信號的時間參數(shù)設(shè)置好之后,并將幀內(nèi)存的地址告訴LCD控制器,它即可自動地發(fā)起DMA傳輸從幀內(nèi)存中得到圖像數(shù)據(jù),最終在上述信號的控制下出現(xiàn)在數(shù)據(jù)總線VD23:0上。用戶只需要把要顯示的圖像數(shù)據(jù)寫入幀內(nèi)存中。4 外部接口S5PV210內(nèi)部LCD控制器接口圖如下:如下是信號的引腳連接描述:(1)16M(24BPP)色的顯示模式 用24位的數(shù)據(jù)來表示一個像素的顏色,每種顏色使用8位LCD控制器從內(nèi)存中獲得某個像素的24為顏色值后,直接通過VD23:0數(shù)據(jù)線發(fā)送給LCD; 在內(nèi)存中,使用4個字節(jié)(32位)來表示一個像素,其中的3個字節(jié)從高到低分別表示紅、綠、藍(lán),剩余的1個字節(jié)無效; (2)64K(16BPP)色的顯示模式 用16位的數(shù)據(jù)來表示一個像素的顏色; 格式又分為兩種:5:6:5使用5位來表示紅色,6位表示綠色,5位表示藍(lán)色 ;5:5:5:1分別使用5位來表示紅、綠、藍(lán),最后一位表示透明度;每種bpp模式下的引腳定義5 寄存器主要寄存器如下:(其它參照用戶手冊S5PV210X_UserManual_preliminary_v0.0_090908.pdf) VIDCON0: 配置視頻輸出格式,顯示使能 VIDCON1: RGB 接口控制信號 VIDCON2 : 輸出數(shù)據(jù)格式控制 VIDCON3 : 圖像增強(qiáng)控制 I80IFCONx: i80接口控制信號 ITUIFCON : ITU接口控制信號 VIDTCONx: 配置視頻輸出時序及顯示大小 WINCONx: 每個窗口特性設(shè)置 VIDOSDxA,B : 窗口位置設(shè)置 VIDOSDxC,D: OSD大小設(shè)置寄存器描述:VIDEO主控制寄存器0(VIDCON0,R/W,ADDRESS=0XF800_0000)二、Framebuffer驅(qū)動1 簡介幀緩沖是Linux為顯示設(shè)備提供的一個接口,它把一些顯示設(shè)備描述成一個緩沖區(qū),允許應(yīng)用程序通過FrameBuffer定義好的接口訪問這些圖形設(shè)備,從而不用去關(guān)心具體的硬件細(xì)節(jié)。對于幀緩沖設(shè)備而言,只要在顯示緩沖區(qū)與顯示點對應(yīng)的區(qū)域?qū)懭腩伾担瑢?yīng)的顏色就會自動的在屏幕上顯示。下面來看一下在不同色位模式下緩沖區(qū)與顯示點的對應(yīng)關(guān)系:2. 驅(qū)動結(jié)構(gòu)幀緩沖設(shè)備為標(biāo)準(zhǔn)的字符型設(shè)備,在Linux中主設(shè)備號29,定義在/linux/major.h中的FB_MAJOR,次設(shè)備號定義幀緩沖的個數(shù),最大允許有32個FrameBuffer,定義在/include/linux/fb.h中的FB_MAX,對應(yīng)于文件系統(tǒng)下/dev/fb%d設(shè)備文件。幀緩沖設(shè)備驅(qū)動在Linux子系統(tǒng)中的結(jié)構(gòu)如下:我們從上面這幅圖看,幀緩沖設(shè)備在Linux中也可以看做是一個完整的子系統(tǒng),大體由fbmem.c和xxxfb.c(對應(yīng)我們的s3cfb.c)組成。向上給應(yīng)用程序提供完善的設(shè)備文件操作接口(即對FrameBuffer設(shè)備進(jìn)行read、write、ioctl等操作),接口在Linux提供的fbmem.c文件中實現(xiàn);向下提供了硬件操作的接口,只是這些接口Linux并沒有提供實現(xiàn),因為這要根據(jù)具體的LCD控制器硬件進(jìn)行設(shè)置,所以這就是我們要做的事情了(即s3cfb.c部分的實現(xiàn))。3. 數(shù)據(jù)結(jié)構(gòu)及接口函數(shù)從幀緩沖設(shè)備驅(qū)動程序結(jié)構(gòu)看,該驅(qū)動主要跟fb_info結(jié)構(gòu)體有關(guān),該結(jié)構(gòu)體記錄了幀緩沖設(shè)備的全部信息,包括設(shè)備的設(shè)置參數(shù)、狀態(tài)以及對底層硬件操作的函數(shù)指針。在Linux中,每一個幀緩沖設(shè)備都必須對應(yīng)一個fb_info,fb_info在/linux/fb.h中的定義如下:(只列出重要的一些) struct fb_info int node;int flags;struct fb_var_screeninfo var;/*LCD可變參數(shù)結(jié)構(gòu)體*/struct fb_fix_screeninfo fix;/*LCD固定參數(shù)結(jié)構(gòu)體*/struct fb_monspecs monspecs;/*LCD顯示器標(biāo)準(zhǔn)*/struct work_struct queue;/*幀緩沖事件隊列*/struct fb_pixmap pixmap; /*圖像硬件mapper*/struct fb_pixmap sprite; /*光標(biāo)硬件mapper*/struct fb_cmap cmap; /*當(dāng)前的顏色表*/struct fb_videomode *mode;/*當(dāng)前的顯示模式*/#ifdef CONFIG_FB_BACKLIGHTstruct backlight_device *bl_dev;/*對應(yīng)的背光設(shè)備*/struct mutex bl_curve_mutex;u8 bl_curveFB_BACKLIGHT_LEVELS;/*背光調(diào)整*/#endif#ifdef CONFIG_FB_DEFERRED_IOstruct delayed_work deferred_work;struct fb_deferred_io *fbdefio;#endifstruct fb_ops *fbops; /*對底層硬件操作的函數(shù)指針*/struct device *device;struct device *dev;/*fb設(shè)備*/int class_flag;#ifdef CONFIG_FB_TILEBLITTINGstruct fb_tile_ops *tileops; /*圖塊Blitting*/#endifchar _iomem *screen_base;/*虛擬基地址*/unsigned long screen_size;/*LCD IO映射的虛擬內(nèi)存大小*/ void *pseudo_palette;/*偽16色顏色表*/ #define FBINFO_STATE_RUNNING0#define FBINFO_STATE_SUSPENDED1u32 state;/*LCD的掛起或恢復(fù)狀態(tài)*/void *fbcon_par;void *par;其中,比較重要的成員有struct fb_var_screeninfo var、struct fb_fix_screeninfo fix和struct fb_ops *fbops,他們也都是結(jié)構(gòu)體。fb_var_screeninfo結(jié)構(gòu)體主要記錄用戶可以修改的控制器的參數(shù),比如屏幕的分辨率和每個像素的比特數(shù)等,該結(jié)構(gòu)體定義如下: struct fb_var_screeninfo _u32 xres;/*可見屏幕一行有多少個像素點*/_u32 yres;/*可見屏幕一列有多少個像素點*/_u32 xres_virtual;/*虛擬屏幕一行有多少個像素點*/_u32 yres_virtual;/*虛擬屏幕一列有多少個像素點*/_u32 xoffset;/*虛擬到可見屏幕之間的行偏移*/_u32 yoffset;/*虛擬到可見屏幕之間的列偏移*/_u32 bits_per_pixel;/*每個像素的位數(shù)即BPP*/_u32 grayscale;/*非0時,指的是灰度*/struct fb_bitfield red;/*fb緩存的R位域*/struct fb_bitfield green;/*fb緩存的G位域*/struct fb_bitfield blue;/*fb緩存的B位域*/struct fb_bitfield transp;/*透明度*/_u32 nonstd;/* != 0 非標(biāo)準(zhǔn)像素格式*/_u32 activate;_u32 height;/*高度*/_u32 width;/*寬度*/_u32 accel_flags;/*定時:除了pixclock本身外,其他的都以像素時鐘為單位*/_u32 pixclock;/*像素時鐘(皮秒)*/_u32 left_margin;/*行切換,從同步到繪圖之間的延遲*/_u32 right_margin;/*行切換,從繪圖到同步之間的延遲*/_u32 upper_margin;/*幀切換,從同步到繪圖之間的延遲*/_u32 lower_margin;/*幀切換,從繪圖到同步之間的延遲*/_u32 hsync_len;/*水平同步的長度*/_u32 vsync_len;/*垂直同步的長度*/_u32 sync;_u32 vmode;_u32 rotate;_u32 reserved5;/*保留*/;而fb_fix_screeninfo結(jié)構(gòu)體又主要記錄用戶不可以修改的控制器的參數(shù),比如屏幕緩沖區(qū)的物理地址和長度等,該結(jié)構(gòu)體的定義如下: struct fb_fix_screeninfo char id16;/*字符串形式的標(biāo)示符 */unsigned long smem_start;/*fb緩存的開始位置 */_u32 smem_len;/*fb緩存的長度 */_u32 type;/*看FB_TYPE_* */_u32 type_aux;/*分界*/_u32 visual;/*看FB_VISUAL_* */ _u16 xpanstep;/*如果沒有硬件panning就賦值為0 */_u16 ypanstep;/*如果沒有硬件panning就賦值為0 */_u16 ywrapstep;/*如果沒有硬件ywrap就賦值為0 */_u32 line_length;/*一行的字節(jié)數(shù) */unsigned long mmio_start;/*內(nèi)存映射IO的開始位置*/_u32 mmio_len;/*內(nèi)存映射IO的長度*/_u32 accel;_u16 reserved3;/*保留*/;fb_ops結(jié)構(gòu)體是對底層硬件操作的函數(shù)指針,該結(jié)構(gòu)體中定義了對硬件的操作有:(這里只列出了常用的操作) struct fb_ops struct module *owner;/檢查可變參數(shù)并進(jìn)行設(shè)置int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info);/根據(jù)設(shè)置的值進(jìn)行更新,使之有效int (*fb_set_par)(struct fb_info *info);/設(shè)置顏色寄存器int (*fb_setcolreg)(unsigned regno, unsigned red, unsigned green,unsigned blue, unsigned transp, struct fb_info *info);/顯示空白int (*fb_blank)(int blank, struct fb_info *info);/矩形填充void (*fb_fillrect) (struct fb_info *info, const struct fb_fillrect *rect);/復(fù)制數(shù)據(jù)void (*fb_copyarea) (struct fb_info *info, const struct fb_copyarea *region);/圖形填充void (*fb_imageblit) (struct fb_info *info, const struct fb_image *image);4. LCD參數(shù)配置在S5PV210中,LCD控制器被集成在芯片的內(nèi)部作為一個相對獨立的單元,所以Linux把它看做是一個平臺設(shè)備,故在內(nèi)核代碼/arch/arm/plat-s5p/devs.c中定義有LCD相關(guān)的平臺設(shè)備及資源,代碼如下: /* LCD Controller */LCD控制器的資源信息static struct resource s3cfb_resource = 0 = .start = S5P_PA_LCD, /控制器IO端口開始地址(0xf8000000).end = S5P_PA_LCD + S5P_SZ_LCD - 1,/控制器IO端口結(jié)束地址(1M).flags = IORESOURCE_MEM,/標(biāo)識為LCD控制器IO端口,在驅(qū)動中引用這個就表示引用IO端口,1 = .start = IRQ_LCD1,/LCD中斷.end = IRQ_LCD1,.flags = IORESOURCE_IRQ,/標(biāo)識為LCD中斷;static u64 fb_dma_mask = 0xffffffffUL;struct platform_device s3c_device_fb = .name = s3cfb,/作為平臺設(shè)備的LCD設(shè)備名.id = -1,.num_resources= ARRAY_SIZE(s3cfb_resource),/資源數(shù)量.resource = s3cfb_resource,/引用上面定義的資源.dev = .dma_mask= &fb_dma_mask,.coherent_dma_mask= 0xffffffffUL;EXPORT_SYMBOL(s3c_device_fb);/導(dǎo)出定義的LCD平臺設(shè)備,好在mach-t34h.c的smdkv210_devices中添加到平臺設(shè)備列表中 除此之外,Linux還在/arch/arm/plat-s5p/include/plat/fb.h中為LCD平臺設(shè)備定義了一個s3c_platform_fb結(jié)構(gòu)體,該結(jié)構(gòu)體主要是記錄LCD的硬件參數(shù)信息(比如該結(jié)構(gòu)體的s3cfb_lcdy成員結(jié)構(gòu)中就用于記錄LCD的屏幕尺寸、屏幕信息、可變的屏幕參數(shù)、LCD配置寄存器等),這樣在寫驅(qū)動的時候就直接使用這個結(jié)構(gòu)體。下面,我們來看一下內(nèi)核是如果使用這個結(jié)構(gòu)體的。在/arch/arm/mach-s5pv210/mach-t34h.c中定義有: /* LCD driver info */LCD硬件的配置信息,這些參數(shù)要根據(jù)具體的LCD屏進(jìn)行設(shè)置static struct s3c_platform_fb lte480wv_fb_data _initdata = .width = 1024,/屏幕寬度.height = 600,/屏幕高度 /以下一些參數(shù)在上面的時序圖分析中講到過,各參數(shù)的值請跟據(jù)具體的LCD屏數(shù)據(jù)手冊結(jié)合上面時序分析來設(shè)定. freq = 60,/像素時鐘.bpp = 32,/色位模式. h_fp= 160,/行切換,從同步到繪圖之間的延遲. h_bp= 160,/行切換,從繪圖到同步之間的延遲. h_sw= 2,/水平同步的長度. v_fp= 12,/幀切換,從同步到繪圖之間的延遲. v_fp= 23,/幀切換,從繪圖到同步之間的延遲. v_sw= 2,/垂直同步的長度;static struct s3c_platform_fb lte480wv_fb_data _initdata = .hw_ver= 0x62,.nr_wins = 5,.default_win = CONFIG_FB_S3C_DEFAULT_WINDOW,.swap = FB_SWAP_WORD | FB_SWAP_HWORD,.lcd = <e480wv,.cfg_gpio= s3cfb_cfg_gpio,.backlight_on= s3cfb_backlight_on,.backlight_off = s3cfb_backlight_off, .lcd_on = s3cfb_lcd_on,.lcd_off = s3cfb_lcd_off,;5. Framebuffer設(shè)備注冊S3cfb.c中的s3cfb_probe設(shè)備探測,是驅(qū)動注冊的主要函數(shù),/*定義一個結(jié)構(gòu)體用來維護(hù)驅(qū)動程序中各函數(shù)中用到的變量先別看結(jié)構(gòu)體要定義這些成員,到各函數(shù)使用的地方就明白了*/static int _devinit s3cfb_probe(struct platform_device *pdev)struct s3c_platform_fb *pdata;/*LCD屏配置信息結(jié)構(gòu)體*/struct s3cfb_global *fbdev;/*驅(qū)動程序全局變量結(jié)構(gòu)體*/struct resource *res; /*用來保存從LCD平臺設(shè)備中獲取的LCD資源*/int i, j, ret = 0;printk(%sn,_func_);fbdev = kzalloc(sizeof(struct s3cfb_global), GFP_KERNEL);if (!fbdev) dev_err(&pdev-dev, failed to allocate for global fb structuren);ret = -ENOMEM;goto err_global;fbdev-dev = &pdev-dev;fbdev-regulator = regulator_get(&pdev-dev, pd);if (!fbdev-regulator) dev_err(fbdev-dev, failed to get regulatorn);ret = -EINVAL;goto err_regulator;ret = regulator_enable(fbdev-regulator);if (ret dev, failed to enable regulatorn);ret = -EINVAL;goto err_regulator;/*獲取LCD參數(shù)信息*/pdata = to_fb_plat(&pdev-dev);if (!pdata) dev_err(fbdev-dev, failed to get platform datan);ret = -EINVAL;goto err_pdata;fbdev-lcd = (struct s3cfb_lcd *)pdata-lcd;/*配置GPIO端口*/if (pdata-cfg_gpio)pdata-cfg_gpio(pdev);/*設(shè)置時鐘參數(shù)*/if (pdata-clk_on)pdata-clk_on(pdev, &fbdev-clock);/*獲取LCD平臺設(shè)備所使用的IO端口資源,注意這個IORESOURCE_MEM標(biāo)志和LCD平臺設(shè)備定義中的一致*/res = platform_get_resource(pdev, IORESOURCE_MEM, 0);if (!res) dev_err(fbdev-dev, failed to get io memory regionn);ret = -EINVAL;goto err_io;/*申請LCD IO端口所占用的IO空間(注意理解IO空間和內(nèi)存空間的區(qū)別),request_mem_region定義在ioport.h中*/res = request_mem_region(res-start, res-end - res-start + 1, pdev-name);if (!res) dev_err(fbdev-dev, failed to request io memory regionn);ret = -EINVAL;goto err_io;/*將LCD的IO端口占用的這段IO空間映射到內(nèi)存的虛擬地址,ioremap定義在io.h中 注意:IO空間要映射后才能使用,以后對虛擬地址的操作就是對IO空間的操作*/fbdev-regs = ioremap(res-start, res-end - res-start + 1);if (!fbdev-regs) dev_err(fbdev-dev, failed to remap io regionn);ret = -EINVAL;goto err_mem;#ifdef CONFIG_FB_S3C_LTE480WV/*設(shè)置寄存器初始狀態(tài)*/s3cfb_pre_init_para(fbdev); #endif /*設(shè)置gamma 值*/ s3cfb_set_gamma(fbdev);/*設(shè)置VSYNC中斷*/s3cfb_set_vsync_interrupt(fbdev, 1);/*設(shè)置全局中斷*/s3cfb_set_global_interrupt(fbdev, 1);/*fb設(shè)備參數(shù)信息初始化*/s3cfb_init_global(fbdev);/*為framebuffer分配空間,進(jìn)行內(nèi)存映射,填充fb_info*/if (s3cfb_alloc_framebuffer(fbdev) ret = -ENOMEM;goto err_alloc;/*注冊fb設(shè)備到系統(tǒng)中*/if (s3cfb_register_framebuffer(fbdev) ret = -EINVAL;goto err_register;s3cfb_set_clock(fbdev);s3cfb_set_window(fbdev, pdata-default_win, 1);s3cfb_display_on(fbdev);fbdev-irq = platform_get_irq(pdev, 0);if (request_irq(fbdev-irq, s3cfb_irq_frame, IRQF_SHARED,pdev-name, fbdev) dev_err(fbdev-dev, request_irq failedn);ret = -EINVAL;goto err_irq;#ifdef CONFIG_FB_S3C_LCD_INITif (pdata-backlight_on)p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論