soc_camera驱动涉及camera controller、camera sensor。
camera controller驱动往往是platform driver,其相应的platform device会包含camera控制器的寄存器、中断号等信息,要求platform device和platform driver的名字必须一致,否则二者无法成功匹配。
camera sensor大多是i2c接口,即属于i2c slave device,按照一般的i2c驱动写法,会先在板级信息代码中调用i2c_registar_board_info注册i2c_board_info(包含名字和slave地址),然后在i2c控制器(i2c adapter)驱动加载时,会对每个i2c_board_info调用i2c_new_device()。但在soc_camera驱动架构中,是不需要这么做的,这些工作都有v4l2来完成。
一
soc camera驱动加载时会注册soc_camera_bus_type总线
二
camera控制器驱动加载时,会调用soc_camera_host_register()
|
scan_add_host() //查询与此host匹配的soc_camera_device,并调用device_register注册,这样会触发soc camera bus的probe函数
三
soc_camera_probe()
|
首先sensor上电、复位
|
然后为sensor创建i2c_client,如下:
soc_camera_init_i2c()
|
v4l2_i2c_new_subdev_board()
|
i2c_new_device() //它会触发i2c_bus_type总线的probe函数 i2c_device_probe()
四
sensor驱动加载时,会再走sensor 的probe函数