Linux DRM那些事-master設(shè)備bind

本文介紹RockPI 4A單板DRM模塊master設(shè)備bind函數(shù)rockchip_drm_bind()

文件:drivers/gpu/drm/rockchip/rockchip_drm_drv.c

功能:完成DRM主設(shè)備的初始化,并調(diào)用所有從設(shè)備的bind函數(shù)初始化整個顯示系統(tǒng)。

執(zhí)行流程見下圖:

rockchip_drm_bind函數(shù)

1、drm_dev_alloc(&rockchip_drm_driver, dev)

功能:分配并初始化一個DRM設(shè)備,后續(xù)調(diào)用drm_dev_register()完成設(shè)備注冊。

重點關(guān)注設(shè)備驅(qū)動實現(xiàn)(rockchip_drm_driver),后續(xù)配合libdrm介紹。

static struct drm_driver rockchip_drm_driver = {
    .driver_features    = DRIVER_MODESET | DRIVER_GEM |
                  DRIVER_PRIME | DRIVER_ATOMIC |
                  DRIVER_RENDER,
    .preclose       = rockchip_drm_preclose,
    .lastclose      = rockchip_drm_lastclose,
    .get_vblank_counter = drm_vblank_no_hw_counter,
    .open           = rockchip_drm_open,
    .postclose      = rockchip_drm_postclose,
    .enable_vblank      = rockchip_drm_crtc_enable_vblank,   
    .disable_vblank     = rockchip_drm_crtc_disable_vblank,  
    .gem_vm_ops     = &rockchip_drm_vm_ops,
    .gem_free_object    = rockchip_gem_free_object,
    .dumb_create        = rockchip_gem_dumb_create,          
    .dumb_map_offset    = rockchip_gem_dumb_map_offset,      
    .dumb_destroy       = drm_gem_dumb_destroy,
    .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
    .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
    .gem_prime_import   = drm_gem_prime_import,
    .gem_prime_export   = drm_gem_prime_export,
    .gem_prime_get_sg_table = rockchip_gem_prime_get_sg_table,
    .gem_prime_import_sg_table  = rockchip_gem_prime_import_sg_table,
    .gem_prime_vmap     = rockchip_gem_prime_vmap,
    .gem_prime_vunmap   = rockchip_gem_prime_vunmap,
    .gem_prime_mmap     = rockchip_gem_mmap_buf,
    .gem_prime_begin_cpu_access = rockchip_gem_prime_begin_cpu_access,
    .gem_prime_end_cpu_access = rockchip_gem_prime_end_cpu_access,
#ifdef CONFIG_DEBUG_FS
    .debugfs_init       = rockchip_drm_debugfs_init,
    .debugfs_cleanup    = rockchip_drm_debugfs_cleanup,
#endif
    .ioctls         = rockchip_ioctls,
    .num_ioctls     = ARRAY_SIZE(rockchip_ioctls),
    .fops           = &rockchip_drm_driver_fops,
    .name   = DRIVER_NAME,
    .desc   = DRIVER_DESC,
    .date   = DRIVER_DATE,
    .major  = DRIVER_MAJOR,
    .minor  = DRIVER_MINOR,
}

drm_開頭的函數(shù)是DRM框架已實現(xiàn)的函數(shù),各廠家可直接使用,無需適配。

2、drm_dev_set_unique(drm_dev, "%s", dev_name(dev))

功能:設(shè)置DRM設(shè)備的唯一名稱(dev->unique),即display-subsystem

3、devfreq_get_devfreq_by_phandle(dev, 0)

功能:獲取devfreq

4、devm_clk_get(dev, "hdmi-tmds-pll")

功能:獲取hdmi-tmds-pll時鐘。

5、devm_clk_get(dev, "default-vop-pll")

功能:獲取default-vop-pll時鐘。

6、fence_context_alloc(1)

功能:分配1組fence contexts。

7、rockchip_drm_init_iommu(drm_dev)

功能:初始化IOMMU。

IOMMU(Input/Output Memory Management Unit):把設(shè)備訪問的虛擬地址轉(zhuǎn)換成物理地址。

MMU:把CPU訪問的虛擬地址轉(zhuǎn)換成物理地址。

8、drm_mode_config_init(drm_dev)

功能:初始化mode_config,創(chuàng)建DRM框架標(biāo)準(zhǔn)屬性。

9、rockchip_drm_mode_config_init(drm_dev)

功能:設(shè)置rockchip mode_config的寬和高限制,注冊drm_mode_config_funcs。

static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = {
    .fb_create = rockchip_user_fb_create, 
    .output_poll_changed = rockchip_drm_output_poll_changed,
    .atomic_check = drm_atomic_helper_check,
    .atomic_commit = rockchip_drm_atomic_commit,
};

10、rockchip_drm_create_properties(drm_dev)

功能:設(shè)置rockchip drm屬性。

11、component_bind_all(dev, drm_dev)

功能:調(diào)用所有從設(shè)備bind驅(qū)動。

12、rockchip_attach_connector_property(drm_dev)

功能:賦值connector的屬性(brightness、contrast、saturation和hue)。

brightness:亮度

contrast:對比度

saturation:飽和度

hue:色調(diào)

13、drm_vblank_init(drm_dev, drm_dev->mode_config.num_crtc)

功能:初始化vblank。

14、drm_mode_config_reset(drm_dev)

功能:復(fù)位Plane、CRTC、Encoder和Connector

15、rockchip_drm_set_property_default(drm_dev)

功能:設(shè)置Connector的默認屬性。

16、drm_kms_helper_poll_init(drm_dev)

功能:使能KMS輪詢機制。

17、rockchip_gem_pool_init(drm_dev)

功能:初始化內(nèi)存池。

18、of_reserved_mem_device_init(drm_dev->dev)

功能:將dts配置中預(yù)留的memory分配給device。

19、rockchip_drm_fbdev_init(drm_dev)

功能:初始化framebuffer。

20、drm_dev_register(drm_dev, 0)

功能:注冊DRM設(shè)備。

注:本文僅在簡書、OSCHINA和今日頭條發(fā)布過,轉(zhuǎn)載請標(biāo)注原作者和鏈接。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容