您的位置:首页 > 其它

万能camera驱动----之-----camera sensor匹配过程

2014-09-22 13:42 211 查看
类似的方法可以用于一个简单的sensor driver
用来支持多个sensor.比如Galaxycore SoC驱动,对于每个sensor, 有一个 gc_product_info 结构体,它包含了产品id号和对应的全部的寄存器配置表格。在驱动的probe中,将探测到的sensor
id和id tables里的匹配,匹配上了,相应的product_info里的寄存器表就会被调用,用于初始化sensor.

1)他的参数i2c_device_id已经由i2c子系统match函数确定,所以对应的product_info就被确定,哪个camera
sensor已经被确定, 很多寄存器的表格将被确定;

2)从v4l2_subdev得到gc_device的platform_data, platform_data 里有对应的power控制的相关函数,

gc_device的platform_data也是在probe包含的函数里由client->dev.platform_data赋值的,

client->dev.platform_data 在i2c-core.c里由info->platform_data得到,

i2c_info->platform_data由platform_camera.c里camera_device_table里的devs_id的get_platform_data得到;

3)v4l2_set_subdevdata()设置了sd->dev_priv,这样从subdev也就可以得到i2c_client;

4)于是对sensor上电后,读出id, (这个相关函数和信息由i2c_client 得到)看是否与i2c_device_id的id(这个是由该驱动的id
tables得到)匹配,匹配的话将完成注册。

Example:

struct gc_product_mapping product_mappings[] = {

{ GC2155_ID, &gc2155_product_info },

{ GC0310_ID, &gc0310_product_info },

};

struct gc_product_mapping {

int gc_id;

struct gc_product_info *product_info;

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: