Linux DRM那些事-master設備bind

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

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

功能:完成DRM主設備的初始化,並調用全部從設備的bind函數初始化整個顯示系統。post

執行流程見下圖:atom

一、drm_dev_alloc(&rockchip_drm_driver, dev)spa

功能:分配並初始化一個DRM設備,後續調用drm_dev_register()完成設備註冊。debug

重點關注設備驅動實現(rockchip_drm_driver),後續配合libdrm介紹code

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_開頭的函數是DRM框架已實現的函數,各廠家可直接使用,無需適配。component

二、drm_dev_set_unique(drm_dev, "%s", dev_name(dev))blog

功能:設置DRM設備的惟一名稱(dev->unique),即display-subsystem。ip

三、devfreq_get_devfreq_by_phandle(dev, 0)

功能:獲取devfreq

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

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

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

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

六、fence_context_alloc(1)

功能:分配1組fence contexts

七、rockchip_drm_init_iommu(drm_dev)

功能:初始化IOMMU

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

MMU:把CPU訪問的虛擬地址轉換成物理地址。

八、drm_mode_config_init(drm_dev)

功能:初始化mode_config,建立DRM框架標準屬性。

九、rockchip_drm_mode_config_init(drm_dev)

功能:設置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,
};

十、rockchip_drm_create_properties(drm_dev)

功能:設置rockchip drm屬性。

十一、component_bind_all(dev, drm_dev)

功能:調用全部從設備bind驅動。

十二、rockchip_attach_connector_property(drm_dev)

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

brightness:亮度

contrast:對比度

saturation:飽和度

hue:色調

1三、drm_vblank_init(drm_dev, drm_dev->mode_config.num_crtc)

功能:初始化vblank

1四、drm_mode_config_reset(drm_dev)

功能:復位Plane、CRTC、Encoder和Connector

1五、rockchip_drm_set_property_default(drm_dev)

功能:設置Connector的默認屬性。

1六、drm_kms_helper_poll_init(drm_dev)

功能:使能KMS輪詢機制。

1七、rockchip_gem_pool_init(drm_dev)

功能:初始化內存池。

1八、of_reserved_mem_device_init(drm_dev->dev)

功能:將dts配置中預留的memory分配給device

1九、rockchip_drm_fbdev_init(drm_dev)

功能:初始化framebuffer

20、drm_dev_register(drm_dev, 0)

功能:註冊DRM設備。

相關文章
相關標籤/搜索