九鼎创展论坛

标题: V4L2 soc-camera 数据结构 [打印本页]

作者: armeasy    时间: 2014-7-10 09:16
标题: V4L2 soc-camera 数据结构
所有的host都在hosts指向的链表上

[cpp] view plaincopy


所有soc camera device都挂在devices指向的链表上。

系统内可能有多个soc_camera_host,每个soc_camera_host可以对应1 ~ n个soc_camera_device。每个soc_camera_device通过soc_camera_video_start函数创建设备节点/dev/videoX
soc_camera_host对应着系统camera处理模块,尽管理论上可以有多个camera host,但是大部分系统仅有一个camera host

在soc_camera_host_register中调用v4l2_device_register为这个soc_camera_host注册一个v4l2_device设备。
在soc_camera_probe中调用soc_camera_init_i2c,为soc_camera_device注册一个v4l2_subdev,我们从soc_camera_probe代码可以看出,只有i2C的设备可以使用这种方式,对于非I2C设备来说,需要soc_camera_link提供add_device来增加子设备。

soc_camera_host, soc_camera_device,v4l2_device,v4l2_subdev关系如下:


[cpp] view plaincopy


每一个soc_camera_device都会对应一个/dev/videoX设备节点,除非在soc_camera_probe时失败。
@list:soc_came_device通过这个成员连接到全局devices链表上

@pdev:每一个soc_camera_device,都会有一个platform device,pdev就是这个platform device结构的dev成员
@user_width, @user_height:这个camera的缺省width和height

@iface:camera bus id,也是host id,一个host可以对应多个soc_camera_device
@devnum:device number,每个soc_camera_device都会自动分配一个device number

@ops:操作集合,sensor,video AD(也许还有host)驱动要实现这个接口

@use_count:soc camera使用计数,每次打开这个设备加1,关闭则减1

soc_camera_host

[cpp] view plaincopy


@v4l2_dev:每个host都是一个v4l2_device
@list:soc_camera_host通过这个成员链接到全局hosts链表上

@nr:host number,每个host接口对应一个host
@priv:一般存放平台特定的camera参数,比如irq,DMA


[cpp] view plaincopy


这个是由sensor,video AD或者host实现的回调函数集。@suspend,@resume:系统休眠唤醒时的回调函数,如果不考虑电源管理,可以不实现这两个函数
@query_bus_param:获取sensor和host之间的总线信息,比如HSYNC VSYNC极性,数据总线宽度,数据线极性等

@set_bus_param:设置sensor和host之间的总线参数。
@enum_input:枚举给定的input number,上层通过@v4l2_input->index指定要查看哪个input,一般可以不实现。
@controls:controls
@num_controls:@controls数目






欢迎光临 九鼎创展论坛 (http://bbs.9tripod.com/) Powered by Discuz! X3.2