小田BSP的个人空间
source link: https://my.oschina.net/u/4702401/blog/5037759
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
本文介绍RockPI 4A
单板DRM
模块master
设备bind
函数rockchip_drm_bind()
。
文件:drivers/gpu/drm/rockchip/rockchip_drm_drv.c
。
功能:完成DRM
主设备的初始化,并调用所有从设备的bind
函数初始化整个显示系统。
执行流程见下图:
1、drm_dev_alloc(&rockchip_drm_driver, dev)
功能:分配并初始化一个DRM
设备,后续调用drm_dev_register()
完成设备注册。
重点关注设备驱动实现(rockchip_drm_driver
),后续配合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_
开头的函数是DRM
框架已实现的函数,各厂家可直接使用,无需适配。
2、drm_dev_set_unique(drm_dev, "%s", dev_name(dev))
功能:设置DRM
设备的唯一名称(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)
:把设备访问的虚拟地址转换成物理地址。
MMU
:把CPU
访问的虚拟地址转换成物理地址。
8、drm_mode_config_init(drm_dev)
功能:初始化mode_config
,创建DRM
框架标准属性。
9、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, };
10、rockchip_drm_create_properties(drm_dev)
功能:设置rockchip drm
属性。
11、component_bind_all(dev, drm_dev)
功能:调用所有从设备bind
驱动。
12、rockchip_attach_connector_property(drm_dev)
功能:赋值connector
的属性(brightness、contrast、saturation和hue
)。
brightness
:亮度
contrast
:对比度
saturation
:饱和度
hue
:色调
13、drm_vblank_init(drm_dev, drm_dev->mode_config.num_crtc)
功能:初始化vblank
。
14、drm_mode_config_reset(drm_dev)
功能:复位Plane、CRTC、Encoder和Connector
。
15、rockchip_drm_set_property_default(drm_dev)
功能:设置Connector
的默认属性。
16、drm_kms_helper_poll_init(drm_dev)
功能:使能KMS
轮询机制。
17、rockchip_gem_pool_init(drm_dev)
功能:初始化内存池。
18、of_reserved_mem_device_init(drm_dev->dev)
功能:将dts
配置中预留的memory
分配给device
。
19、rockchip_drm_fbdev_init(drm_dev)
功能:初始化framebuffer
。
20、drm_dev_register(drm_dev, 0)
功能:注册DRM
设备。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK