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

本文深入探讨了GalaxycoreSoC驱动如何通过使用gc_product_info结构体来支持多个传感器,并详细解释了驱动探查过程、匹配ID表、平台数据获取、设置dev_priv及对sensor上电后的注册流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         类似的方法可以用于一个简单的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;

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值