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 英特尔公司