9.1.14. MIPI CCS 摄像头传感器驱动

MIPI CCS 摄像头传感器驱动是用于兼容 MIPI CCS 的摄像头传感器的通用驱动程序。

另请参阅 CCS 驱动程序 UAPI 文档

9.1.14.1. CCS 静态数据

MIPI CCS 驱动程序支持所有兼容设备的 CCS 静态数据,不仅包括那些符合 CCS 1.1 的设备,还包括 CCS 1.0 和 SMIA(++)。对于 CCS,文件名格式为

ccs/ccs-sensor-vvvv-mmmm-rrrr.fw (传感器) 和 ccs/ccs-module-vvvv-mmmm-rrrr.fw (模块)。

对于兼容 SMIA++ 的设备,相应的文件名是

ccs/smiapp-sensor-vv-mmmm-rr.fw (传感器) 和 ccs/smiapp-module-vv-mmmm-rrrr.fw (模块)。

对于兼容 SMIA (非++) 的设备,静态数据文件名是

ccs/smia-sensor-vv-mmmm-rr.fw (传感器)。

vvvv 或 vv 分别表示 MIPI 和 SMIA 制造商 ID,mmmm 模型 ID,rrrr 或 rr 修订号。

9.1.14.1.1. CCS 工具

CCS 工具是一组用于处理 CCS 静态数据文件的工具。CCS 工具包括人类可读的 CCS 静态数据 YAML 格式的定义,并包括一个将其转换为二进制文件的程序。

9.1.14.2. 寄存器定义生成器

ccs-regs.asc 文件包含 MIPI CCS 寄存器定义,这些定义用于生成 C 源代码文件,以便更好地用于 C 语言编写的程序。由于生成的文件之间存在许多依赖关系,请不要手动修改它们,因为这很容易出错而且徒劳,而应该更改生成它们的脚本。

9.1.14.2.1. 用法

通常,调用脚本的方式如下,以更新 CCS 驱动程序定义

$ Documentation/driver-api/media/drivers/ccs/mk-ccs-regs -k \
        -e drivers/media/i2c/ccs/ccs-regs.h \
        -L drivers/media/i2c/ccs/ccs-limits.h \
        -l drivers/media/i2c/ccs/ccs-limits.c \
        -c Documentation/driver-api/media/drivers/ccs/ccs-regs.asc

9.1.15. CCS PLL 计算器

CCS PLL 计算器用于计算 PLL 配置,给定传感器的功能以及板配置和用户指定的配置。由于包含所有这些配置的配置空间非常大,因此 PLL 计算器并非完全微不足道。然而,对于驱动程序来说,它相对简单易用。

PLL 计算器实现的 PLL 模型对应于 MIPI CCS 1.1。

struct ccs_pll_branch_fr

CCS PLL 配置(前端)

定义:

struct ccs_pll_branch_fr {
    u16 pre_pll_clk_div;
    u16 pll_multiplier;
    u32 pll_ip_clk_freq_hz;
    u32 pll_op_clk_freq_hz;
};

成员

pre_pll_clk_div

PLL 前时钟分频器

pll_multiplier

PLL 倍频器

pll_ip_clk_freq_hz

PLL 输入时钟频率

pll_op_clk_freq_hz

PLL 输出时钟频率

描述

CCS PLL 树的单个分支前端。

struct ccs_pll_branch_bk

CCS PLL 配置(后端)

定义:

struct ccs_pll_branch_bk {
    u16 sys_clk_div;
    u16 pix_clk_div;
    u32 sys_clk_freq_hz;
    u32 pix_clk_freq_hz;
};

成员

sys_clk_div

系统时钟分频器

pix_clk_div

像素时钟分频器

sys_clk_freq_hz

系统时钟频率

pix_clk_freq_hz

像素时钟频率

描述

CCS PLL 树的单个分支后端。

struct ccs_pll

完整的 CCS PLL 配置

定义:

struct ccs_pll {
    u8 bus_type;
    u8 op_lanes;
    u8 vt_lanes;
    struct {
        u8 lanes;
    } csi2;
    u8 binning_horizontal;
    u8 binning_vertical;
    u8 scale_m;
    u8 scale_n;
    u8 bits_per_pixel;
    u8 op_bits_per_lane;
    u16 flags;
    u32 link_freq;
    u32 ext_clk_freq_hz;
    struct ccs_pll_branch_fr vt_fr;
    struct ccs_pll_branch_bk vt_bk;
    struct ccs_pll_branch_fr op_fr;
    struct ccs_pll_branch_bk op_bk;
    u32 pixel_rate_csi;
    u32 pixel_rate_pixel_array;
};

成员

bus_type

数据总线的类型,CCS_PLL_BUS_TYPE_*(输入)

op_lanes

操作通道数(输入)

vt_lanes

视频定时通道数(输入)

csi2

CSI-2 相关参数

csi2.lanes

CSI-2 数据通道数(输入)

binning_horizontal

水平合并因子(输入)

binning_vertical

垂直合并因子(输入)

scale_m

降尺度因子,M 分量,[16,最大值](输入)

scale_n

降尺度因子,N 分量,通常为 16(输入)

bits_per_pixel

输出数据总线上每个像素的位数(输入)

op_bits_per_lane

每个 OP 通道的位数(输入)

flags

CCS_PLL_FLAG_*(输入)

link_freq

选择的链路频率(输入)

ext_clk_freq_hz

外部时钟频率,即传感器的输入时钟(输入)

vt_fr

视频定时前端配置(输出)

vt_bk

视频定时后端配置(输出)

op_fr

操作定时前端配置(输出)

op_bk

操作定时后端配置(输出)

pixel_rate_csi

输出数据总线上的像素速率(输出)

pixel_rate_pixel_array

传感器像素阵列中的标称像素速率(输出)

描述

计算 CCS PLL 配置所需的所有信息。

struct ccs_pll_branch_limits_fr

CCS PLL 前端限制

定义:

struct ccs_pll_branch_limits_fr {
    u16 min_pre_pll_clk_div;
    u16 max_pre_pll_clk_div;
    u32 min_pll_ip_clk_freq_hz;
    u32 max_pll_ip_clk_freq_hz;
    u16 min_pll_multiplier;
    u16 max_pll_multiplier;
    u32 min_pll_op_clk_freq_hz;
    u32 max_pll_op_clk_freq_hz;
};

成员

min_pre_pll_clk_div

最小 PLL 前时钟分频器

max_pre_pll_clk_div

最大 PLL 前时钟分频器

min_pll_ip_clk_freq_hz

最小 PLL 输入时钟频率

max_pll_ip_clk_freq_hz

最大 PLL 输入时钟频率

min_pll_multiplier

最小 PLL 倍频器

max_pll_multiplier

最大 PLL 倍频器

min_pll_op_clk_freq_hz

最小 PLL 输出时钟频率

max_pll_op_clk_freq_hz

最大 PLL 输出时钟频率

struct ccs_pll_branch_limits_bk

CCS PLL 后端限制

定义:

struct ccs_pll_branch_limits_bk {
    u16 min_sys_clk_div;
    u16 max_sys_clk_div;
    u32 min_sys_clk_freq_hz;
    u32 max_sys_clk_freq_hz;
    u16 min_pix_clk_div;
    u16 max_pix_clk_div;
    u32 min_pix_clk_freq_hz;
    u32 max_pix_clk_freq_hz;
};

成员

min_sys_clk_div

最小系统时钟分频器

max_sys_clk_div

最大系统时钟分频器

min_sys_clk_freq_hz

最小系统时钟频率

max_sys_clk_freq_hz

最大系统时钟频率

min_pix_clk_div

最小像素时钟分频器

max_pix_clk_div

最大像素时钟分频器

min_pix_clk_freq_hz

最小像素时钟频率

max_pix_clk_freq_hz

最大像素时钟频率

struct ccs_pll_limits

CCS PLL 限制

定义:

struct ccs_pll_limits {
    u32 min_ext_clk_freq_hz;
    u32 max_ext_clk_freq_hz;
    struct ccs_pll_branch_limits_fr vt_fr;
    struct ccs_pll_branch_limits_bk vt_bk;
    struct ccs_pll_branch_limits_fr op_fr;
    struct ccs_pll_branch_limits_bk op_bk;
    u32 min_line_length_pck_bin;
    u32 min_line_length_pck;
};

成员

min_ext_clk_freq_hz

最小外部时钟频率

max_ext_clk_freq_hz

最大外部时钟频率

vt_fr

视频时序前端限制

vt_bk

视频时序后端限制

op_fr

操作时序前端限制

op_bk

操作时序后端限制

min_line_length_pck_bin

带合并的最小行长度,以像素为单位

min_line_length_pck

不带合并的最小行长度,以像素为单位

int ccs_pll_calculate(struct device *dev, const struct ccs_pll_limits *limits, struct ccs_pll *pll)

根据输入参数计算 CCS PLL 配置

参数

struct device *dev

设备指针,用于打印消息

const struct ccs_pll_limits *limits

特定于传感器的限制

struct ccs_pll *pll

给定的 PLL 配置

描述

根据限制以及给定的设备特定、系统特定或用户配置的输入数据计算 CCS PLL 配置。

版权所有 © 2020 英特尔公司