MIPI DSI 【三】BRING UP

一、概述


书接上文,前边提到了所有子模块要开始启动了,master调用了rockchip_drm_bind函数。

二、结构体


2.1 rockchip_drm_driver结构体

static struct drm_driver rockchip_drm_driver = {
   
    .driver_features        = DRIVER_MODESET | DRIVER_GEM |
                              DRIVER_PRIME | DRIVER_ATOMIC |
                              DRIVER_RENDER,
    .postclose              = rockchip_drm_postclose,
    .lastclose              = rockchip_drm_lastclose,
    .open                   = rockchip_drm_open,
    .gem_vm_ops             = &drm_gem_cma_vm_ops,
    .gem_free_object_unlocked = 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,
#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,
    .patchlevel     = DRIVER_PATCH,
};

2.2 struct drm_device 【drm_device.h】
2.3 struct drm_driver【drm_drv.h】

三、源码分析


3.1 rockchip_drm_bind函数分析
由这个函数的代码量就可以看出来这是个办大事儿的函数

static int rockchip_drm_bind(struct device *dev)
{
   
     struct drm_device *drm_dev;
     struct rockchip_drm_private *private;
     int ret;
     struct device_node *np = dev->of_node;
     struct device_node *parent_np;
     struct drm_crtc *crtc;
//3.1.1 分配一个新的drm_device
     drm_dev = drm_dev_alloc(&rockchip_drm_driver, dev);
     if (IS_ERR(drm_dev))
             return PTR_ERR(drm_dev);

     dev_set_drvdata(dev, drm_dev);

     private = devm_kzalloc(drm_dev->dev, sizeof(*private), GFP_KERNEL);
     if (!private) {
   
             ret = -ENOMEM;
             goto err_free;
     }

     mutex_init(&private->commit_lock);
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值