2.24. V4L2 CCI kAPI

struct cci_reg_sequence

CCI 寫入序列中的單個寫入

定義:

struct cci_reg_sequence {
    u32 reg;
    u64 val;
};

成員

reg

暫存器地址,使用 CCI_REG#() 宏來編碼暫存器寬度

val

暫存器值

描述

寫入序列的暫存器/值對。

int cci_read(struct regmap *map, u32 reg, u64 *val, int *err)

從單個 CCI 暫存器讀取值

引數

struct regmap *map

要從中讀取的暫存器對映

u32 reg

要讀取的暫存器地址,使用 CCI_REG#() 宏來編碼暫存器寬度

u64 *val

指向儲存讀取值的指標

int *err

可選指標,用於儲存錯誤,如果設定了先前的錯誤,則將跳過讀取

返回值

成功時返回 0,失敗時返回負錯誤程式碼。

int cci_write(struct regmap *map, u32 reg, u64 val, int *err)

將值寫入單個 CCI 暫存器

引數

struct regmap *map

要寫入的暫存器對映

u32 reg

要寫入的暫存器地址,使用 CCI_REG#() 宏來編碼暫存器寬度

u64 val

要寫入的值

int *err

可選指標,用於儲存錯誤,如果設定了先前的錯誤,則將跳過寫入

返回值

成功時返回 0,失敗時返回負錯誤程式碼。

int cci_update_bits(struct regmap *map, u32 reg, u64 mask, u64 val, int *err)

在單個 CCI 暫存器上執行讀/修改/寫迴圈

引數

struct regmap *map

要更新的暫存器對映

u32 reg

要更新的暫存器地址,使用 CCI_REG#() 宏來編碼暫存器寬度

u64 mask

要更改的位掩碼

u64 val

位掩碼的新值

int *err

可選指標,用於儲存錯誤,如果設定了先前的錯誤,則將跳過更新

描述

請注意,這使用讀-修改-寫來更新位,不能保證與其他 cci_*() 暫存器訪問函式相關的原子性。

返回值

成功時返回 0,失敗時返回負錯誤程式碼。

int cci_multi_reg_write(struct regmap *map, const struct cci_reg_sequence *regs, unsigned int num_regs, int *err)

將多個暫存器寫入裝置

引數

struct regmap *map

要寫入的暫存器對映

const struct cci_reg_sequence *regs

包含要寫入的暫存器地址-值對的結構陣列,暫存器地址使用 CCI_REG#() 宏來編碼暫存器寬度

unsigned int num_regs

要寫入的暫存器數量

int *err

可選指標,用於儲存錯誤,如果設定了先前的錯誤,則將跳過寫入

描述

將多個暫存器寫入裝置,其中暫存器-值對集以任何順序提供,可能並非全部在單個範圍內。

必須使用 CCI_REG#() 宏來編碼暫存器寬度。

對於僅具有 8 位寬寫入的暫存器地址-值對的原始列表,可以使用 regmap_multi_reg_write()。

返回值

成功時返回 0,失敗時返回負錯誤程式碼。

struct regmap *devm_cci_regmap_init_i2c(struct i2c_client *client, int reg_addr_bits)

建立 regmap 以與 cci_*() 暫存器訪問函式一起使用

引數

struct i2c_client *client

要為其建立 regmap 的 i2c_client

int reg_addr_bits

要使用的暫存器地址寬度(8 或 16)

描述

請注意,建立的 regmap 的記憶體由 devm() 管理,並繫結到客戶端。

返回值

成功時返回 0,失敗時返回負錯誤程式碼。