• <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             //映射內(nèi)存區(qū)域
             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         //所謂的色表(調(diào)色盤?),不清除是干啥的。
             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底下建立節(jié)點,用于和用戶空間交互
             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

            統(tǒng)計

            常用鏈接

            留言簿(8)

            隨筆分類

            隨筆檔案

            令一片星空

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            国产Av激情久久无码天堂| jizzjizz国产精品久久| 久久99精品久久只有精品| 色欲久久久天天天综合网精品| 亚洲精品乱码久久久久久蜜桃不卡| 亚洲精品tv久久久久久久久| 久久久久综合网久久| 久久久久久国产精品美女| 国产精品无码久久四虎| 色欲久久久天天天综合网| 久久―日本道色综合久久| 久久久久久久综合日本| 99久久精品免费看国产一区二区三区 | 狠狠色婷婷久久综合频道日韩| 国产69精品久久久久观看软件| 亚洲国产精品久久久久婷婷软件 | 99久久精品毛片免费播放| 精品伊人久久大线蕉色首页| 99久久久国产精品免费无卡顿| 亚洲&#228;v永久无码精品天堂久久 | 久久伊人影视| 久久久久亚洲AV成人网人人网站| 久久夜色精品国产噜噜亚洲a | 久久久久亚洲AV片无码下载蜜桃| 久久91亚洲人成电影网站| 精品久久香蕉国产线看观看亚洲| 色妞色综合久久夜夜| 精品无码久久久久久久久久| 久久人妻少妇嫩草AV蜜桃| 久久综合九色综合精品| 国产精品久久久亚洲| 亚洲精品蜜桃久久久久久| 噜噜噜色噜噜噜久久| 久久91精品综合国产首页| 亚洲午夜久久影院| 久久久久久久99精品免费观看| 精品熟女少妇av免费久久| 麻豆亚洲AV永久无码精品久久| 久久香综合精品久久伊人| 无码专区久久综合久中文字幕 | 国内精品久久久人妻中文字幕|