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

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

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

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

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

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

i2c_info->platform_dataplatform_camera.ccamera_device_table里的devs_idget_platform_data得到;

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

4)于是对sensor上电后,读出id, (这个相关函数和信息由i2c_client 得到)看是否与i2c_device_idid(这个是由该驱动的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;

};

你可能感兴趣的:(万能camera驱动----之-----camera sensor匹配过程)