乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      [Android6.0][RK3399] 雙屏異顯代碼實(shí)現(xiàn)流程分析(一)【轉(zhuǎn)】

       李清龍的圖書館 2021-04-10

      本文轉(zhuǎn)載自:http://blog.csdn.net/dearsq/article/details/55049182

      Platform: RK3399 
      OS: Android 6.0 
      Version: v2016.08

      本文分為兩部分。 
      [RK3399] 雙屏異顯代碼實(shí)現(xiàn)流程分析(一)》為分析 RK video 部分標(biāo)準(zhǔn)的代碼(base on 2017.2.13 updated) 
      [RK3399] 雙屏異顯代碼實(shí)現(xiàn)流程分析(二)》為打上雙屏異顯 patch 后的代碼流程分析(eDP + mipi)

      代碼流程

      參考 KrisFei 大神總結(jié)的 3288 display 模塊加載流程。 
      http://blog.csdn.net/kris_fei/article/details/52584903 
      KrisFei 歸納的代碼流程如下:

      1. mipi dsi 接口信息初始化

      2. fb相關(guān)信息讀取

      3. timing參數(shù)初始化

      4. mipi dsi controller初始化

      5. lcdc控制器注冊

      代碼詳解

      在 RK3399 上代碼沒有太大的變化。下面為 display 部分的標(biāo)準(zhǔn)流程。

      在 make menuconfig 配置的時候 
      Location: 
      | -> Device Drivers 
      | -> Graphics support 
      | -> Rockchip Misc Video driver 
      | -> LCD Panel Select ( [=y]) 
      drivers/video/rockchip/screen/Kconfig

      choice 包括 General lcd panel 和 rk mipi dsi lcd 
      差別是

      < # CONFIG_LCD_GENERAL is not set < CONFIG_LCD_MIPI=y --- > CONFIG_LCD_GENERAL=y > # CONFIG_LCD_MIPI is not set
      • 1

      • 2

      • 3

      • 4

      • 5

      分別對應(yīng)的驅(qū)動文件是 
      lcd_general.c 
      lcd_mipi.c

      現(xiàn)在的版本(2017.2.13)中,lcd_general.c 還未實(shí)現(xiàn)代碼。 
      所以我們從分析默認(rèn)的 lcd_mipi.c 開始。

      mipi dsi 接口信息初始化

      lcd_mipi.c 
      rk_mipi_screen_init -> 
      ——platform_driver_probe -> //name是rk_mipi_screen 
      ————rk_mipi_screen_probe -> 
      ——————rk_mipi_screen_init_dt 
      ——————//讀取mipi信息(包括 screen_init),dsi_lane,dsi_hs_clk,mipi_dsi_num, power, rst, gpio, 屏幕的 timing 信息(包括 sceen on cmds, cmd_type, cmd_delay, cmd_debug)

      fb相關(guān)信息讀取

      rk_fb_init -> rk_fb.c 
      ——platform_driver_register -> //name: “rockchip,rk-fb” 
      ————rk_fb_probe -> //獲取disp-mode, u-boot-logo-on等參數(shù)。 
      ——————rockchip_ion_client_create //創(chuàng)建ion client。

      /* ION與PMEM類似,管理一或多個內(nèi)存池,其中有一些會在boot time的時候預(yù)先分配,以備給特殊的硬件使用(GPU,顯示控制器等)。它通過ION heaps來管理這些pool。它可以被userspace的process之間或者內(nèi)核中的模塊之間進(jìn)行內(nèi)存共享。*/

      timing 參數(shù)初始化

      //不管是那種接口類型的lcd,lcd的時序參數(shù)都是要讀取的。 
      rk_screen_init -> rk_screen.c 
      ——platform_driver_register -> //name: “rk-screen” 
      ————rk_screen_probe -> 
      ——————rk_fb_prase_timing_dt -> rk_fb.c //讀取來的配置存在結(jié)構(gòu)體 rk_screen 變量中 
      ————————of_get_display_timing //獲取時序參數(shù),dts中可以配置多組,這里會循環(huán)讀取。 
      ————————display_timings_get //根據(jù)當(dāng)前native-mode來選取當(dāng)前使用哪組時序參數(shù)。 
      ————————rk_fb_video_mode_from_timing //把 timing轉(zhuǎn)換到fb video mode中去供后續(xù)使用。

      mipi dsi controller 初始化

      //如果是另外的接口那就調(diào)用相應(yīng)的接口控制器驅(qū)動來初始化. 
      rk32_mipi_dsi_init -> rk32_mipi_dsi.c 
      ——platform_driver_register -> //name: “rk32-mipi” 
      ————rk32_mipi_dsi_probe -> //初始化struct dsi結(jié)構(gòu),包括clock, dsi ops, rk_screen 傳遞過來的參數(shù), 
      ——————rk_fb_get_prmry_screen -> rk_screen.c //獲取在之前 rk_screen_probe() 中初始化的rk_screen變量. 
      ————————//rk_mipi_dsi_probe -> //這個在 3399 代碼中沒有了 
      ————————register_dsi_ops //dsi->ops給dsi_ops 
      ————————//dsi_probe_current_chip //檢測dsi chip是否存在,這個在 3399 的代碼中沒有了 
      ————————rk_fb_trsm_ops_register //注冊trsm_mipi_ops為trsm_dsi_ops

      這里 3288 中的 rk_mipi_dsi_probe 在 3399 中被刪掉了 
      直接在 rk_fb_get_prmry_screen 中 register_dsi_ops,也省略掉了 dsi_probe_current_chip

      lcdc控制器注冊

      rk3368_lcdc_module_init -> rk3368_lcdc.c 
      ——platform_driver_register -> //.name = “rk3368-lcdc”, 
      ————rk3368_lcdc_probe -> 
      ——————of_property_read_u32(np, “rockchip,prop”, &prop); 
      ——————//判斷屏幕是 primary 還是 extend,如果是 extend 會延后 register 
      ——————rk3368_lcdc_parse_dt //讀取lcdc控制器的參數(shù) 
      ——————dev_drv->ops = &lcdc_drv_ops; //lcdc對應(yīng)ops 
      ——————devm_request_irq //lcdc對應(yīng)irq是rk3368_lcdc_isr() 
      ——————rk_fb_register -> //對應(yīng)ops是lcdc_drv_ops 
      ————————rk_fb->lcdc_dev_drv[i] = dev_drv; //根據(jù) RK30_MAX_LCDC_SUPPORT,循環(huán)注冊兩組 lcdc_dev_drv 
      ————————init_lcdc_device_driver -> //初始化 lcdc_device_driver 
      ——————————init_lcdc_win //一個lcdc能支持4層win. 
      ——————————rk_disp_pwr_ctr_parse_dt //解析lcdc power ctrl相關(guān)內(nèi)容。 
      ——————————rk_fb_set_prmry_screen 
      ——————————rk_fb_trsm_ops_get //根據(jù)不同的屏幕類型選擇對應(yīng)的ops. 
      ————————framebuffer_alloc //系統(tǒng)根據(jù) win 的多少來創(chuàng)建相應(yīng)數(shù)量的 fb 
      ————————fb_videomode_to_var //將 fb_videomode 轉(zhuǎn)化為 fb_var_screeninfo 
      ————————dsp_mode == ONE_VOP_DUAL_MIPI_VER_SCAN 
      ————————//判斷雙屏同顯的刷新方式,這里如果是垂直刷新的話 
      ————————//設(shè)置 fbi->var.xres /= 2;fbi->var.yres = 2; fbi->var.xres_virtual /= 2; fbi->var.yres_virtual = 2; 
      ————————fbi->fbops = &fb_ops; //fb ops 
      ————————rkfb_create_sysfs //生成到/dev/graphics/fbx/下 
      ————————register_framebuffer  
      ————————rkfb_create_sysfs 
      ————————//以下 code 只跑一次 
      ————————kthread_run //創(chuàng)建rk_fb_wait_for_vsync_thread 
      ————————dev_drv->ops->post_dspbuf //show logo for primary display device

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多