I3C 裝置驅動 API¶
-
enum i3c_error_code¶
I3C 錯誤程式碼
常量
I3C_ERROR_UNKNOWN未知錯誤,通常表示該錯誤與 I3C 無關
I3C_ERROR_M0M0 錯誤
I3C_ERROR_M1M1 錯誤
I3C_ERROR_M2M2 錯誤
描述
這些是由 I3C 規範定義的標準錯誤程式碼。當 i3c_device_do_priv_xfers() 或 i3c_device_send_hdr_cmds() 返回 -EIO 時,可以檢查 struct_i3c_priv_xfer.err 或 struct i3c_hdr_cmd.err 中的錯誤程式碼,以更好地瞭解出錯的原因。
-
enum i3c_hdr_mode¶
HDR 模式 ID
常量
I3C_HDR_DDRDDR 模式
I3C_HDR_TSPTSP 模式
I3C_HDR_TSLTSL 模式
-
struct i3c_priv_xfer¶
I3C SDR 私有傳輸
定義:
struct i3c_priv_xfer {
u8 rnw;
u16 len;
u16 actual_len;
union {
void *in;
const void *out;
} data;
enum i3c_error_code err;
};
成員
rnw編碼傳輸方向。 true 表示讀取,false 表示寫入
len傳輸的位元組長度
actual_len控制器傳輸的實際位元組長度
data輸入/輸出緩衝區
data.in輸入緩衝區。 必須指向 DMA 可用的緩衝區
data.out輸出緩衝區。 必須指向 DMA 可用的緩衝區
errI3C 錯誤程式碼
-
enum i3c_dcr¶
I3C DCR 值
常量
I3C_DCR_GENERIC_DEVICE通用 I3C 裝置
-
struct i3c_device_info¶
I3C 裝置資訊
定義:
struct i3c_device_info {
u64 pid;
u8 bcr;
u8 dcr;
u8 static_addr;
u8 dyn_addr;
u8 hdr_cap;
u8 max_read_ds;
u8 max_write_ds;
u8 max_ibi_len;
u32 max_read_turnaround;
u16 max_read_len;
u16 max_write_len;
};
成員
pid配置 ID
bcr匯流排特性暫存器
dcr裝置特性暫存器
static_addr靜態/I2C 地址
dyn_addr動態地址
hdr_cap支援的 HDR 模式
max_read_ds最大讀取速度資訊
max_write_ds最大寫入速度資訊
max_ibi_len最大 IBI 負載長度
max_read_turnaround最大讀取週轉時間(微秒)
max_read_len最大私有 SDR 讀取長度(位元組)
max_write_len最大私有 SDR 寫入長度(位元組)
描述
這些都是 I3C 裝置應該通告的基本資訊。其中一些是可選的,具體取決於裝置型別和裝置功能。對於附加到具有 i3c_master_add_i3c_dev_locked() 的主裝置的每個 I3C 從裝置,核心將傳送相關的 CCC 命令來檢索這些資料。
-
struct i3c_driver¶
I3C 裝置驅動程式
定義:
struct i3c_driver {
struct device_driver driver;
int (*probe)(struct i3c_device *dev);
void (*remove)(struct i3c_device *dev);
const struct i3c_device_id *id_table;
};
成員
driver繼承自 device_driver
probeI3C 裝置探測方法
removeI3C 裝置移除方法
id_tableI3C 裝置匹配表。框架將使用它來決定將哪個裝置繫結到此驅動程式
-
dev_to_i3cdev¶
dev_to_i3cdev (__dev)
返回包含 dev 的 I3C 裝置
引數
__dev裝置物件
返回
指向 I3C 裝置物件的指標。
-
module_i3c_driver¶
module_i3c_driver (__drv)
註冊一個提供 I3C 驅動程式的模組
引數
__drv要註冊的 I3C 驅動程式
描述
提供通用的 init/exit 函式,它們只是註冊/登出 I3C 驅動程式。任何不需要額外 init/cleanup 步驟的驅動程式都應該使用它。
-
int i3c_i2c_driver_register(struct i3c_driver *i3cdrv, struct i2c_driver *i2cdrv)¶
註冊一個 i2c 和一個 i3c 驅動程式
引數
struct i3c_driver *i3cdrv要註冊的 I3C 驅動程式
struct i2c_driver *i2cdrv要註冊的 I2C 驅動程式
描述
此函式註冊 i2cdev 和 i3cdev,如果其中一個註冊失敗,則失敗。這主要適用於支援 I2C 和 I3C 模式的裝置。請注意,當未啟用 CONFIG_I3C 時,此函式僅註冊 I2C 驅動程式。
返回
如果兩個註冊都成功,則為 0,否則為負錯誤程式碼。
-
void i3c_i2c_driver_unregister(struct i3c_driver *i3cdrv, struct i2c_driver *i2cdrv)¶
登出一個 i2c 和一個 i3c 驅動程式
引數
struct i3c_driver *i3cdrv要註冊的 I3C 驅動程式
struct i2c_driver *i2cdrv要註冊的 I2C 驅動程式
描述
此函式登出 i3cdrv 和 i2cdrv。請注意,當未啟用 CONFIG_I3C 時,此函式僅登出 i2cdrv。
-
module_i3c_i2c_driver¶
module_i3c_i2c_driver (__i3cdrv, __i2cdrv)
註冊一個提供 I3C 和 I2C 驅動程式的模組
引數
__i3cdrv要註冊的 I3C 驅動程式
__i2cdrv要註冊的 I2C 驅動程式
描述
提供通用的 init/exit 函式,它們只是註冊/登出 I3C 和 I2C 驅動程式。即使停用 CONFIG_I3C,也可以使用此宏,在這種情況下,只會註冊 I2C 驅動程式。任何不需要額外 init/cleanup 步驟的驅動程式都應該使用它。
-
struct i3c_ibi_setup¶
IBI 設定物件
定義:
struct i3c_ibi_setup {
unsigned int max_payload_len;
unsigned int num_slots;
void (*handler)(struct i3c_device *dev, const struct i3c_ibi_payload *payload);
};
成員
max_payload_len與 IBI 關聯的負載的最大長度。 如果一個 IBI 的負載大於此數字,則該 IBI 將被拒絕。
num_slots預分配的 IBI 插槽數。 應該選擇此值,以使系統永遠不會耗盡 IBI 插槽,否則您將丟失 IBI。
handlerIBI 處理程式,每次收到 IBI 時都會呼叫。 此處理程式在工作佇列上下文中呼叫。 允許它休眠並在總線上傳送新訊息,但建議儘可能快地完成在那裡進行的處理,以避免延遲處理同一工作佇列中排隊的其他 IBI。
描述
用於將資訊傳遞給 i3c_device_request_ibi() 的臨時結構。 此物件可以在堆疊上分配,因為 i3c_device_request_ibi() 複製每一位資訊,並且在 i3c_device_request_ibi() 返回後不再使用它。
-
int i3c_device_do_priv_xfers(struct i3c_device *dev, struct i3c_priv_xfer *xfers, int nxfers)¶
執行定向到特定裝置的 I3C SDR 私有傳輸
引數
struct i3c_device *dev應進行傳輸的裝置
struct i3c_priv_xfer *xfers傳輸陣列
int nxfers傳輸次數
描述
啟動與 dev 的一個或多個私有 SDR 傳輸。
此函式可以休眠,因此不能在原子上下文中呼叫。
返回
- 成功時為 0,否則為負錯誤核心。
- -EAGAIN:控制器丟失地址仲裁。目標
(IBI、HJ 或控制器角色請求)贏得匯流排。客戶端驅動程式需要在稍後重新發送“xfers”。請參閱 I3C 規範 ver 1.1.1 09-Jun-2021。第:5.1.2.2.3 節。
-
int i3c_device_do_setdasa(struct i3c_device *dev)¶
使用靜態地址進行 I3C 動態地址分配
引數
struct i3c_device *dev應進行 DAA 的裝置
返回
成功時為 0,否則為負錯誤核心。
-
void i3c_device_get_info(const struct i3c_device *dev, struct i3c_device_info *info)¶
獲取 I3C 裝置資訊
引數
const struct i3c_device *dev我們想要獲取資訊的裝置
struct i3c_device_info *info要填充的資訊物件
描述
檢索 I3C 裝置資訊。
-
int i3c_device_disable_ibi(struct i3c_device *dev)¶
停用來自特定裝置的 IBI
引數
struct i3c_device *dev應停用 IBI 的裝置
描述
此函式停用來自特定裝置的 IBI,並等待處理所有掛起的 IBI。
返回
成功時為 0,否則為負錯誤核心。
-
int i3c_device_enable_ibi(struct i3c_device *dev)¶
啟用來自特定裝置的 IBI
引數
struct i3c_device *dev應啟用 IBI 的裝置
描述
此函式啟用來自特定裝置的 IBI,並等待處理所有掛起的 IBI。 應該在 i3c_device_request_ibi() 成功的裝置上呼叫此函式。
請注意,可能在此函式返回到其呼叫方之前收到來自此裝置的 IBI。
返回
成功時為 0,否則為負錯誤核心。
-
int i3c_device_request_ibi(struct i3c_device *dev, const struct i3c_ibi_setup *req)¶
請求 IBI
引數
struct i3c_device *dev我們應為其啟用 IBI 的裝置
const struct i3c_ibi_setup *req為此 IBI 請求的設定
描述
此函式負責預先分配處理來自 dev 的 IBI 所需的所有資源。 當此函式返回時,在呼叫 i3c_device_enable_ibi() 之前,IBI 不會被啟用。
返回
成功時為 0,否則為負錯誤核心。
-
void i3c_device_free_ibi(struct i3c_device *dev)¶
釋放 IBI 處理所需的所有資源
引數
struct i3c_device *dev您要釋放 IBI 資源的裝置
描述
此函式負責釋放先前由 i3c_device_request_ibi() 分配的資源。 應該在使用 i3c_device_disable_ibi() 停用 IBI 後呼叫此函式。
-
struct device *i3cdev_to_dev(struct i3c_device *i3cdev)¶
返回嵌入在 i3cdev 中的裝置
引數
struct i3c_device *i3cdevI3C 裝置
返回
指向裝置物件的指標。
-
const struct i3c_device_id *i3c_device_match_id(struct i3c_device *i3cdev, const struct i3c_device_id *id_table)¶
返回與 i3cdev 匹配的 i3c_device_id 條目
引數
struct i3c_device *i3cdevI3C 裝置
const struct i3c_device_id *id_tableI3C 裝置匹配表
返回
指向 i3c_device_id 物件的指標,如果沒有匹配項,則為 NULL。
-
int i3c_driver_register_with_owner(struct i3c_driver *drv, struct module *owner)¶
註冊一個 I3C 裝置驅動程式
引數
struct i3c_driver *drv要註冊的驅動程式
struct module *owner擁有此驅動程式的模組
描述
向核心註冊 drv。
返回
成功時為 0,否則為負錯誤核心。
-
void i3c_driver_unregister(struct i3c_driver *drv)¶
登出一個 I3C 裝置驅動程式
引數
struct i3c_driver *drv要登出的驅動程式
描述
登出 drv。