亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 2789 | 回復(fù): 1
打印 上一主題 下一主題

6410參照韋老師寫(xiě)的LCD驅(qū)動(dòng)無(wú)法注冊(cè)以及顯示位移的問(wèn)題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2014-09-30 23:11 |只看該作者 |倒序?yàn)g覽

把內(nèi)核自帶的LCD驅(qū)動(dòng)刪除掉以后,自己寫(xiě)的LCD 驅(qū)動(dòng)每次都在register_framebuffer(info);時(shí)出現(xiàn)段錯(cuò)誤,當(dāng)不刪除內(nèi)核自帶的LCD驅(qū)動(dòng)時(shí),把自己的LCD驅(qū)動(dòng)注冊(cè)為fb1時(shí),可以注冊(cè)成功,并且能夠用tislib成功測(cè)試,代碼如下


static int cnt;


static struct fb_info *info,fbinfo;

struct fb_ops s3cfb_ops = {

        .owner                = THIS_MODULE,

        .fb_fillrect        = cfb_fillrect,

        .fb_copyarea        = cfb_copyarea,

        .fb_imageblit        = cfb_imageblit,

};







        



int request_io(void)

{

        printk("\nget in the IO\n";

/*        ss=request_mem_region(0x71200010,0x04,"fb0";

        if(!ss)

        {

                printk("\nrequest VIC0INTENABLE failed\n";

                return -ENXIO;

        }                        

        ss=ioremap(0x71200010,0x04);

        if(!ss)

        {

                printk("\nioremap VIC0INTENABLE failed\n";

                return -ENXIO;

        }*/









        k=request_mem_region(0x7F008100,0x0c,"fb0";

        if(!k)

        {

                printk("\nrequest GPICON_IO failed\n";

                return -ENXIO;

        }                        

        k=ioremap(0x7F008100,0x0c);

        if(!k)

        {

                printk("\nioremap GPICON_IO failed\n";

                return -ENXIO;

        }

        zz=request_mem_region(0x7F006000,0x48,"fb0";

        if(!zz)

        {

                printk("\nrequest PWMTIMER_BASE failed\n";

                return -ENXIO;

        }                        

        zz=ioremap(0x7F006000,0x4;

        if(!zz)

        {

                printk("\nioremap PWMTIMER_BASE failed\n";

                return -ENXIO;

        }

        b=request_mem_region(0x7E00F030,0x04,"fb0");

        if(!b)

        {

                printk("\nrequest HCLK_GATE failed\n");

                return -ENXIO;

        }                        

        b=ioremap(0x7E00F030,0x04);

        if(!b)

        {

                printk("\nioremap HCLK_GATE failed\n");

                return -ENXIO;

        }









        xx=request_mem_region(0x7F008080,0x28,"fb0");

        if(!xx)

        {

                printk("\nrequest GPECON failed\n");

                return -ENXIO;

        }                        

        xx=ioremap(0x7F008080,0x2;

        if(!xx)

        {

                printk("\nioremap GPECON failed\n");

                return -ENXIO;

        }

        x=request_mem_region(0x7F008120,0x0c,"fb0");

        if(!x)

        {

                printk("\nrequest GPJCON_IO failed\n");

                return -ENXIO;

        }                        

        x=ioremap(0x7F008120,0x0c);

        if(!x)

        {

                printk("\nioremap GPJCON_IO failed\n");

                return -ENXIO;

        }

        y=request_mem_region(0x7F0081A0,0x04,"fb0");

        if(!y)

        {

                printk("\nrequest SPCON failed\n");

                return 0;

        }                        

        y=ioremap(0x7F0081A0,0x04);

        if(!y)

        {

                printk("\nioremap SPCON failed\n");

                return 0;

        }

        l=request_mem_region(0x7410800C,0x04,"fb0");

        if(!l)

        {

                printk("\nrequest MIFPCON failed\n");

                return -ENXIO;

        }                        

        l=ioremap(0x7410800C,0x04);

        if(!l)

        {

                printk("\nioremap MIFPCON failed\n");

                return -ENXIO;

        }



        printk("finish the io\n");



}        








int __devinit s3cfb_init(void)

{

info= framebuffer_alloc(0, NULL);

        if (!info)

                return -ENOMEM;

        printk(KERN_EMERG"finish the framebuffer");

        strcpy(info->fix.id,"s3ccfb");

        printk(KERN_EMERG"finish the strcpy");

        

        info->fix.smem_len=480*800*16/8;

        info->fix.type=FB_TYPE_PACKED_PIXELS;

        info->fix.visual=FB_VISUAL_TRUECOLOR;

        info->fix.line_length=800*2;



        

        info->var.xres=800;

        info->var.yres=480;

        info->var.xres_virtual=800;

        info->var.yres_virtual=480;

        info->var.bits_per_pixel=16;



        info->var.red.offset=11;

        info->var.red.length=5;

        info->var.green.offset=5;

        info->var.green.length=6;

        info->var.blue.offset=0;

        info->var.blue.length=5;



        info->var.activate=FB_ACTIVATE_NOW;

        info->fbops=&s3cfb_ops;

        //s3c_lcd->screen_base  is  virtual address

        info->screen_size=480*800*2;

        //s3c_lcd->fix.smem_start  is physical address



        

        request_io();

        

        value=readl(HCLK_GATE);

        value=value|1<<3;

        writel(value,HCLK_GATE);

        mm=ioremap(0x77100000,0x350);

        if (mm == NULL) {

                printk(KERN_EMERG"ioremap() of registers failed\n");

               

                return -ENOMEM;

        }

        printk(KERN_EMERG"finish the ioremap");

        

        value=0x00011111;

        writel(value,lu_GPECON);

        value=0x00000001;

        writel(value,lu_GPEDAT);

        



        value=0x8AAAAAAA;

        writel(value,lu_GPFCON);

        value=0x00000000;

        

        writel(value,lu_GPFDAT);

        value=0x80000000;

        writel(value,lu_GPFPUD);

        





        value=0xAAAAAAAA;

        writel(value,lu_GPICON);

        value=0x00AAAAAA;

        writel(value,lu_GPJCON);

        value=0x15<<16 | 0x16<<8 | 0x02<<0;

        writel(value,S3C_VIDTCON0);

        value=0x2C<<16 | 0xD2<<8 | 0x02<<0;

        writel(value,S3C_VIDTCON1);

        value=(480 - 1)<<11|(800 - 1);

        writel(value,S3C_VIDTCON2);

        

        

        value=1<<19|1<<15|1<<12|1;

        writel(value,S3C_VIDINTCON0);

        value=readl(S3C_VIDINTCON1);

        writel(value,S3C_VIDINTCON1);

        value=readl(lu_MIFPCON);

        value=value&~(1<<3);

        writel(value,lu_MIFPCON);

        



        value=readl(lu_SPCON);

        value =  (value & ~(0x3)) | 1;

        writel(value,lu_SPCON);

        

        value=2<<5|1<<3|2<<1|1;

        writel(value,S3C_DITHMODE);

        value = request_irq(62, s3_irq, 0, "s3ccfb", NULL);

        if (value != 0) {

                printk("s3c_ts.c: Could not request lcd_irq !\n");

                return -EIO;

        }

        value=(0<<26)|(0<<17)|(0<<16)|(3<<6)|(0<<5)|(1<<4)|(0<<2);

        writel(value,S3C_VIDCON0);

        value=readl(S3C_VIDCON1);

        value |= 1<<5|1<<6;

        writel(value,S3C_VIDCON1);







        

        

        value=0;

        writel(value,S3C_VIDOSD0A);

        value=(800 - 1)<<11 |(480 - 1);

        writel(value,S3C_VIDOSD0B);

        value=480*800*2;

        writel(value,S3C_VIDOSD0C);



        value=readl(S3C_WINCON0);

        value |= 1<<0;

        value &= ~(0xf << 2);

        value |= 0x5<<2;

        writel(value,S3C_WINCON0);



        info->screen_base = dma_alloc_writecombine(NULL, info->fix.smem_len,&info->fix.smem_start, GFP_KERNEL);

        printk(KERN_EMERG"finish the dma_alloc_writecombine");

        value=info->fix.smem_start;

        writel(value,S3C_VIDW00ADD0B0);

        value=(info->fix.smem_start+info->fix.smem_len)&0xFFFFFF;

        writel(value,S3C_VIDW00ADD1B0);

        

        /*value= request_irq(55, do_irq, IRQF_DISABLED, "LCD", NULL);

        if (value != 0) {

                printk("s3c_ts.c: Could not request timer_irq !\n");

                return -EIO;

        }*/

        pwm(50);

        printk("register framebuffer\n");

        

        value=readl(S3C_VIDCON0);

        value=value|3;

        writel(value,S3C_VIDCON0);               

               

        


        

        value=register_framebuffer(info);
        

        if (value < 0) {

                        printk(KERN_EMERG"Failed to register framebuffer device");}

        

        printk("finish the insmod\n");

        

        return 0;        

}





問(wèn)題1:當(dāng)刪除系統(tǒng)自帶驅(qū)動(dòng),注冊(cè)自己的LCD驅(qū)動(dòng)fb0以后,文字出現(xiàn)位移導(dǎo)致不清楚的圖片,這是用tislib測(cè)試時(shí)打印出的代碼,明顯的能看出來(lái)這個(gè)箭頭的光標(biāo)行與行之間有漂移,位置不對(duì),到底是什么原因會(huì)導(dǎo)致這樣的問(wèn)題呀,而且自己的驅(qū)動(dòng)注冊(cè)fb0成功只能把register_framebuffer(info);函數(shù)寫(xiě)在int __devinit s3cfb_init(void)函數(shù)的ioremap()函數(shù)之前,一旦寫(xiě)在ioremap()函數(shù)之后,就無(wú)法注冊(cè)成功了,出現(xiàn)段錯(cuò)誤。
問(wèn)題2:當(dāng)不刪除系統(tǒng)自帶的LCD驅(qū)動(dòng),也就是已經(jīng)有了fb0,注冊(cè)自己的驅(qū)動(dòng)fb1時(shí),不管register_framebuffer(info)函數(shù)寫(xiě)在int __devinit s3cfb_init(void)函數(shù)的什么位置,都能調(diào)用成功,而且當(dāng)用tislib測(cè)試自己的FB1 LCD驅(qū)動(dòng)時(shí)畫(huà)面顯示正常,一點(diǎn)問(wèn)題都沒(méi)有,和上面問(wèn)題1作對(duì)比,感覺(jué)有沒(méi)有去掉系統(tǒng)驅(qū)動(dòng)對(duì)我的驅(qū)動(dòng)影響很大,不知道為什么會(huì)這樣,已經(jīng)糾結(jié)這個(gè)問(wèn)題幾個(gè)月了,求高手指點(diǎn)迷津,不甚感謝!!


論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2014-11-03 11:20 |只看該作者
聽(tīng)起來(lái)像是你的fb0與fb1用的同一塊buffer,然后系統(tǒng)起來(lái)默認(rèn)會(huì)對(duì)fb0進(jìn)行初始化,你后面再用fb1就正常了,應(yīng)該查下上層是怎么初始化fb0的吧
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP