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, max](輸入)

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