1. 文档适用平台
2.
camera文件目录说明
Linux Kernel-4.4: |
|arch/
arm64/boot/dts/rockchip DTS 配置文件
|phy/rockchip/phy-rockchip-
mipi-rx.c mipi dphy 驱动,独立于 cif 驱动
|
drivers/
media
|
|platform/rockchip/cif RKCIF 驱动
|── capture.c 主要完成硬件配置,v4l2、vb2 框架下的相关回调,帧中断处理
|── dev.c 主要完成 probe,sub-
device 异步(Async)注册,iommu 及 clk 管理
|── dev.h 驱动相关结构体定义
|── regs.h 寄存器宏定义
|
I2C/ Camera Sensor 驱动
3. RKCIF 驱动说明
3.1 CIF 驱动代码简介
RKCIF 驱动主要是依据 v4l2 / media
Framework 实现硬件的配置、中断处理、控制 buffer轮转,以及控制 subdevice(如 mipi dphy 及 sensor)的上下电等功能。
下面的框图描述了 RKCIF1 驱动的拓扑结构。
名称 | 类型 | 描述 |
rkcif-device | v412_vdev, capture | Format: YUV; support: Crop |
rockchip-sy-mipi-dphy | v412_subdev | MIPI-DPHY Configure. |
●CIF o
NEFrame(单帧)模式. 单帧模式下,驱动每收到一个帧中断,在中断处理函数中设置下一帧 buffer 地址,然后再开始采集下一帧数据.
●CIF pingpong(双 buffers)模式. pingpong 帧模式下,cif 在采集一帧后(f1),会自动采集下一帧(f2),cif 驱动在收到 f1 中断后,要更新数据地址
指针并清除 frame1 status,以 让 cif 继续采集新的数据帧.
●单帧模式下, 如果图像
分辨率较高, 比如 1080p, 那么 fps 可能只能达到 15fps
●如果无 iommu 功能并在 reqbuf 时采用 mmap 方式分配 buffer, 要求 kernel 保留较大的 CMA size。 可以在 kernel defconfig 中修改, 如下。
CONFIG_CMA_SIZE_MBYTES=64
3.2 CIF dts 配置
请首先参考 Documentation/devicetree/bindings/media/rockchip-cif.txt .该文档会随着驱动代码及时更新.在芯片的 dtsi 中,一般配置好了 cif 的基本信息,包括但不限于:
●Reg,寄存器偏移地址
●Clock, 所需要的 clocks。 Clock-names 需要和驱动中定义的相同。
●Reset, 可用 CRU 软件复位 CIF
●Interrupts
●Iommu, 如果 cif 有 iommu 的情况下一般都会启用 iommu。
3.2.1 板级配置
首先确认对应的芯片级 dtsi 中, 是否存在新的 cif 驱动的节点定义 。请用compatible 区分新旧 cif 驱动。
●旧的 cif 驱动
compatible = "rockchip,cif";
●新的 cif 驱动
compatible = "rockchip,rk3xxx-cif";
然后确认该 cif 是否有 iommu 功能, 如果有 iommu 节点也需要设置为”okay”状态。最后还需要定义 Remote Port[1]。 Remote Port 将 Sensor 与 CIF 连接起来, 在 kernel 初始化过程中, Sensor 与 CIF 异步注册, 二者最终根据 dts 中 Remote Port 信息绑定起来。
示例一,
PX3SE EVB 板子上 cif dts 配置。
CIF 节点定义在 arch/arm/boot/dts/
rk312x.dtsi,
cif_new: cif-new@1010a000 {
compatible = "rockchip,
RK3128-cif";
.......
更多详细内容请下载附件查看