V4L2 soc-camera 数据结构

2014-11-24 08:47:23 来源: 作者: 浏览: 0

static LIST_HEAD(hosts)


所有的host都在hosts指向的链表上


static LIST_HEAD(devices);


所有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关系如下:


struct soc_camera_device {
struct list_head list;
struct device dev;
struct device *pdev; /* Platform device */
s32 user_width;
s32 user_height;
enum v4l2_colorspace colorspace;
unsigned char iface; /* Host number */
unsigned char devnum; /* Device number per host */
struct soc_camera_sense *sense; /* See comment in struct definition */
struct soc_camera_ops *ops;
struct video_device *vdev;
const struct soc_camera_format_xlate *current_fmt;
struct soc_camera_format_xlate *user_formats;
int num_user_formats;
enum v4l2_field field; /* Preserve field over close() */
void *host_priv; /* Per-device host private data */
/* soc_camera.c private count. Only accessed with .video_lock held */
int use_count;
struct mutex video_lock; /* Protects device data */
struct file *streamer; /* stream owner */
struct videobuf_queue vb_vidq;
};


-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: