• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            星光燦爛

            C元素

            一段s3c lcd framebuffer 的代碼

              1 int __init s3c_fb_probe(struct platform_device *pdev)
              2 {
              3     char driver_name[]="s3c_fb";
              4     int ret;
              5     int index=0;
              6 
              7     for(index=0; index<S3C_FB_NUM; index++){                   //遍歷每一個fb,我們里只有一個lcd.
              8         s3c_fb_init_fbinfo(&info[index], driver_name, index);
              9 
             10         if(index==0){                                          //操作主lcd
             11             s3c_fb_backlight_power(1);                         //開啟背光,lcd電源源,開啟背光等。           
             12             s3c_fb_lcd_power(1);
             13             s3c_fb_backlight_level(DEFAULT_BACKLIGHT_LEVEL);
             14 
             15             dprintk("dev FB init\n");
             16 
             17             //映射內存區域
             18             if (!request_mem_region((unsigned long)S3C_VA_LCD, SZ_1M, "s3c-lcd")) {
             19                 ret = -EBUSY;
             20                 goto dealloc_fb;
             21             }
             22 
             23             dprintk("got LCD region\n");
             24 
             25             //打開lcd_clock
             26             lcd_clock = clk_get(NULL, "lcd");
             27             if (!lcd_clock) {
             28                 printk(KERN_INFO "failed to get lcd clock source\n");
             29                 ret =  -ENOENT;
             30                 goto release_irq;
             31             }
             32 
             33             clk_enable(lcd_clock);
             34             printk("S3C_LCD clock got enabled :: %ld.%03ld Mhz\n", print_mhz(clk_get_rate(lcd_clock)));
             35 
             36             msleep(5);
             37         }
             38 
             39         //申請顯存
             40         /* Initialize video memory */
             41         ret = s3c_fb_map_video_memory(&info[index]);
             42         if (ret) {
             43             printk("Failed to allocate video RAM: %d\n", ret);
             44             ret = -ENOMEM;
             45             goto release_clock;
             46         }
             47         dprintk("got video memory\n");
             48 
             49         //初始化寄存器,這里與具體的設備有關。
             50         ret = s3c_fb_init_registers(&info[index]);
             51         ret = s3c_fb_check_var(&info[index].fb.var, &info[index].fb);
             52 
             53         //所謂的色表(調色盤?),不清除是干啥的。
             54         if(index<2){
             55             /* 2007-01-09-Tue. for RGB 8-8-8 palette*/
             56             if(fb_alloc_cmap(&info[index].fb.cmap, 2560)<0){
             57                 goto dealloc_fb;
             58             }
             59         }
             60         else{
             61             /* 2007-01-09-Tue. for RGB 8-8-8 palette*/
             62             if(fb_alloc_cmap(&info[index].fb.cmap, 160)<0){
             63                 goto dealloc_fb;
             64             }
             65         }
             66         //注冊framebuffer??
             67         ret = register_framebuffer(&info[index].fb);
             68         if (ret < 0) {
             69             printk(KERN_ERR "Failed to register framebuffer device: %d\n", ret);
             70             goto free_video_memory;
             71         }
             72     }//     for(index=0; index<CONFIG_FB_NUM; index++)
             73 
             74     //    initialize the struct for Waitforvsync
             75     // 關于中斷的初始化工作,貌似2412是注冊以后又取消了
             76     s3cfb_vSyncInfo.count = 0;
             77     init_waitqueue_head(&s3cfb_vSyncInfo.waitQueue);
             78 
             79 #if defined(CONFIG_ARCH_S3C2443)
             80     ret = request_irq(IRQ_LCD3, s3c_fb_irq, 0"s3c-lcd", pdev);
             81 #elif defined(CONFIG_ARCH_S3C6400)
             82     ret = request_irq(IRQ_LCD_VSYNC, s3c_fb_irq, 0"s3c-lcd", pdev);
             83 #elif defined (CONFIG_S3C_DVS) && defined (CONFIG_ARCH_S3C2412)
             84     ret = request_irq(IRQ_LCD, s3c_dvs_irq, 0"s3c-lcd", pdev);
             85 #endif
             86     if (ret != 0) {
             87         printk("Failed to install irq (%d)\n", ret);
             88         goto release_irq;
             89     }
             90 
             91 #if defined (CONFIG_S3C_DVS) & defined (CONFIG_ARCH_S3C2412)
             92     disable_irq(IRQ_LCD);
             93 #endif
             94 
             95     //在sys底下建立節點,用于和用戶空間交互
             96     /* create device files */
             97     device_create_file(&(pdev->dev), &dev_attr_backlight_power);
             98     device_create_file(&(pdev->dev), &dev_attr_backlight_level);
             99     device_create_file(&(pdev->dev), &dev_attr_lcd_power);
            100 
            101     //勝利退出
            102     printk(KERN_INFO "fb%d: %s frame buffer device\n",
            103         info[index].fb.node, info[index].fb.fix.id);
            104     return 0;
            105 
            106 free_video_memory:
            107     s3c_fb_unmap_video_memory(&info[index]);
            108 
            109 release_clock:
            110     clk_disable(lcd_clock);
            111     clk_put(lcd_clock);
            112 
            113 release_irq:
            114 #if defined(CONFIG_ARCH_S3C2443)
            115     free_irq(IRQ_LCD3, &info);
            116 #elif defined(CONFIG_ARCH_S3C6400)
            117     free_irq(IRQ_LCD_VSYNC, &info);
            118 #endif
            119     //release_mem:
            120     release_mem_region((unsigned long)S3C_VA_LCD, S3C_SZ_LCD);
            121 
            122 dealloc_fb:
            123     framebuffer_release(&info[index].fb);
            124     return ret;
            125 }
            126 
            127 
            128 

            posted on 2008-04-17 12:52 菌子 閱讀(906) 評論(0)  編輯 收藏 引用 所屬分類: Linux

            導航

            <2008年4月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            統計

            常用鏈接

            留言簿(8)

            隨筆分類

            隨筆檔案

            令一片星空

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            99久久精品这里只有精品| 中文字幕乱码久久午夜| 久久中文字幕一区二区| 国产精品无码久久综合| 久久婷婷久久一区二区三区| 久久国产精品一区| 婷婷久久久亚洲欧洲日产国码AV| 2020久久精品国产免费| 合区精品久久久中文字幕一区 | 久久精品人人槡人妻人人玩AV | 国产免费久久精品99re丫y| 久久精品国产亚洲AV香蕉| 亚洲午夜久久久精品影院| 久久精品国产亚洲AV影院| 青青草原综合久久| 亚洲精品白浆高清久久久久久| 久久亚洲国产欧洲精品一| 亚洲AV日韩精品久久久久久久| 国产三级观看久久| 色综合合久久天天综合绕视看| 亚洲精品乱码久久久久久按摩| 久久无码一区二区三区少妇| 99久久精品国产高清一区二区 | 欧洲精品久久久av无码电影| 久久婷婷五月综合成人D啪| 久久国产精品-国产精品| 日韩精品久久久久久免费| 麻豆久久久9性大片| 色综合久久久久综合99| 久久国产乱子伦精品免费午夜| 94久久国产乱子伦精品免费| 亚洲国产成人久久精品影视| 国产一区二区精品久久| 青青草原1769久久免费播放| 久久精品国产91久久综合麻豆自制 | 久久亚洲高清综合| 久久国产乱子伦精品免费午夜| 国产精品成人99久久久久 | 中文无码久久精品| 久久婷婷五月综合97色| 久久亚洲精精品中文字幕|