2.23. V4L2 fwnode kAPI

struct v4l2_fwnode_endpoint

端點資料結構

定義:

struct v4l2_fwnode_endpoint {
    struct fwnode_endpoint base;
    enum v4l2_mbus_type bus_type;
    struct {
        struct v4l2_mbus_config_parallel parallel;
        struct v4l2_mbus_config_mipi_csi1 mipi_csi1;
        struct v4l2_mbus_config_mipi_csi2 mipi_csi2;
    } bus;
    u64 *link_frequencies;
    unsigned int nr_of_link_frequencies;
};

成員

base

v4l2_fwnode 的 fwnode 端點

bus_type

匯流排型別

bus

匯流排配置資料結構

bus.parallel

嵌入式 struct v4l2_mbus_config_parallel。如果匯流排是並行匯流排,則使用此結構。

bus.mipi_csi1

嵌入式 struct v4l2_mbus_config_mipi_csi1。如果匯流排是 MIPI Alliance 的 Camera Serial Interface version 1 (MIPI CSI1) 或 Standard Mobile Imaging Architecture 的 Compact Camera Port 2 (SMIA CCP2),則使用此結構。

bus.mipi_csi2

嵌入式 struct v4l2_mbus_config_mipi_csi2。如果匯流排是 MIPI Alliance 的 Camera Serial Interface version 2 (MIPI CSI2),則使用此結構。

link_frequencies

支援的鏈路頻率陣列

nr_of_link_frequencies

link_frequenccies 陣列中的元素數量

V4L2_FWNODE_PROPERTY_UNSET

V4L2_FWNODE_PROPERTY_UNSET

標識未初始化的屬性

描述

struct v4l2_fwnode_device_properties 中的所有屬性都初始化為此值。

enum v4l2_fwnode_orientation

可能的裝置方向

常量

V4L2_FWNODE_ORIENTATION_FRONT

裝置安裝在正面

V4L2_FWNODE_ORIENTATION_BACK

裝置安裝在背面

V4L2_FWNODE_ORIENTATION_EXTERNAL

裝置位於外部

struct v4l2_fwnode_device_properties

fwnode 裝置屬性

定義:

struct v4l2_fwnode_device_properties {
    enum v4l2_fwnode_orientation orientation;
    unsigned int rotation;
};

成員

orientation

裝置方向。請參閱 enum v4l2_fwnode_orientation

rotation

裝置旋轉

兩個端點之間的連結

定義:

struct v4l2_fwnode_link {
    struct fwnode_handle *local_node;
    unsigned int local_port;
    unsigned int local_id;
    struct fwnode_handle *remote_node;
    unsigned int remote_port;
    unsigned int remote_id;
};

成員

local_node

指向此端點的 device_node 的指標

local_port

此端點所屬埠的識別符號

local_id

此端點所屬 id 的識別符號

remote_node

指向遠端端點的 device_node 的指標

remote_port

遠端端點所屬埠的識別符號

remote_id

遠端端點所屬 id 的識別符號

enum v4l2_connector_type

聯結器型別

常量

V4L2_CONN_UNKNOWN

未知的聯結器型別,沒有 V4L2 聯結器配置

V4L2_CONN_COMPOSITE

模擬複合聯結器

V4L2_CONN_SVIDEO

模擬 svideo 聯結器

聯結器連結資料結構

定義:

struct v4l2_connector_link {
    struct list_head head;
    struct v4l2_fwnode_link fwnode_link;
};

成員

head

用於將連結新增到 struct v4l2_fwnode_connector 的結構

fwnode_link

struct v4l2_fwnode_link 聯結器與聯結器所屬裝置之間的連結。

struct v4l2_fwnode_connector_analog

模擬聯結器資料結構

定義:

struct v4l2_fwnode_connector_analog {
    v4l2_std_id sdtv_stds;
};

成員

sdtv_stds

此聯結器支援的 sdtv 標準,如果沒有指定限制,則設定為 V4L2_STD_ALL。

struct v4l2_fwnode_connector

聯結器資料結構

定義:

struct v4l2_fwnode_connector {
    const char *name;
    const char *label;
    enum v4l2_connector_type type;
    struct list_head links;
    unsigned int nr_of_links;
    union {
        struct v4l2_fwnode_connector_analog analog;
    } connector;
};

成員

name

聯結器裝置名稱

label

可選的聯結器標籤

type

聯結器型別

links

所有聯結器 struct v4l2_connector_link 連結的列表

nr_of_links

連結總數

connector

聯結器配置

connector.analog

模擬聯結器配置 struct v4l2_fwnode_connector_analog

enum v4l2_fwnode_bus_type

韌體屬性定義的影片匯流排型別

常量

V4L2_FWNODE_BUS_TYPE_GUESS

如果沒有 bus-type fwnode 屬性,則為預設值

V4L2_FWNODE_BUS_TYPE_CSI2_CPHY

MIPI CSI-2 匯流排,C-PHY 物理層

V4L2_FWNODE_BUS_TYPE_CSI1

MIPI CSI-1 匯流排

V4L2_FWNODE_BUS_TYPE_CCP2

SMIA Compact Camera Port 2 匯流排

V4L2_FWNODE_BUS_TYPE_CSI2_DPHY

MIPI CSI-2 匯流排,D-PHY 物理層

V4L2_FWNODE_BUS_TYPE_PARALLEL

相機並行介面匯流排

V4L2_FWNODE_BUS_TYPE_BT656

BT.656 影片格式匯流排型別

V4L2_FWNODE_BUS_TYPE_DPI

影片並行介面匯流排

NR_OF_V4L2_FWNODE_BUS_TYPE

匯流排型別數量

int v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode, struct v4l2_fwnode_endpoint *vep)

解析所有 fwnode 節點屬性

引數

struct fwnode_handle *fwnode

指向端點的 fwnode 控制代碼的指標

struct v4l2_fwnode_endpoint *vep

指向 V4L2 fwnode 資料結構的指標

描述

此函式從韌體解析 V4L2 fwnode 端點特定的引數。有兩種方法可以使用此函式,一種是讓它獲取匯流排的型別(透過將 vep.bus_type 欄位設定為 V4L2_MBUS_UNKNOWN),另一種是將匯流排型別明確指定為 enum v4l2_mbus_type 型別之一。

vep.bus_type 為 V4L2_MBUS_UNKNOWN 時,如果“bus-type”屬性可用,該函式將使用該屬性來確定型別。呼叫者負責驗證呼叫返回後 vep.bus_type 欄位的內容。

作為一種已棄用的功能,用於支援舊的 DT 繫結,這些繫結沒有支援多種型別的裝置的“bus-type”屬性,如果“bus-type”屬性不存在,該函式將嘗試根據可用的端點屬性來猜測型別。永遠不要在新驅動程式或繫結中依賴猜測匯流排型別。

也可以將 vep.bus_type 設定為對應於實際匯流排的型別。在這種情況下,該函式將僅嘗試解析與此匯流排相關的屬性,並且如果“bus-type”屬性的值對應於不同的匯流排,它將返回一個錯誤。

呼叫者需要初始化 vep 的所有欄位,無論是顯式值還是將其置零。

如果函式失敗,則不會更改 V4L2 fwnode 端點狀態。

注意

此函式不解析“link-frequencies”屬性,因為其大小事先未知。如果需要可變大小的屬性,請使用 v4l2_fwnode_endpoint_alloc_parse()

返回值

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

記憶體分配失敗時返回 -ENOMEM,解析失敗時返回 -EINVAL,匯流排型別不匹配時返回 -ENXIO

void v4l2_fwnode_endpoint_free(struct v4l2_fwnode_endpoint *vep)

釋放 v4l2_fwnode_endpoint_alloc_parse() 獲取的 V4L2 fwnode

引數

struct v4l2_fwnode_endpoint *vep

要釋放資源的 V4L2 fwnode

描述

使用 NULL 引數或解析失敗的 V4L2 fwnode 呼叫此函式是安全的。

int v4l2_fwnode_endpoint_alloc_parse(struct fwnode_handle *fwnode, struct v4l2_fwnode_endpoint *vep)

解析所有 fwnode 節點屬性

引數

struct fwnode_handle *fwnode

指向端點的 fwnode 控制代碼的指標

struct v4l2_fwnode_endpoint *vep

指向 V4L2 fwnode 資料結構的指標

描述

此函式從韌體解析 V4L2 fwnode 端點特定的引數。有兩種方法可以使用此函式,一種是讓它獲取匯流排的型別(透過將 vep.bus_type 欄位設定為 V4L2_MBUS_UNKNOWN),另一種是將匯流排型別明確指定為 enum v4l2_mbus_type 型別之一。

vep.bus_type 為 V4L2_MBUS_UNKNOWN 時,如果“bus-type”屬性可用,該函式將使用該屬性來確定型別。呼叫者負責驗證呼叫返回後 vep.bus_type 欄位的內容。

作為一種已棄用的功能,用於支援舊的 DT 繫結,這些繫結沒有支援多種型別的裝置的“bus-type”屬性,如果“bus-type”屬性不存在,該函式將嘗試根據可用的端點屬性來猜測型別。永遠不要在新驅動程式或繫結中依賴猜測匯流排型別。

也可以將 vep.bus_type 設定為對應於實際匯流排的型別。在這種情況下,該函式將僅嘗試解析與此匯流排相關的屬性,並且如果“bus-type”屬性的值對應於不同的匯流排,它將返回一個錯誤。

呼叫者需要初始化 vep 的所有欄位,無論是顯式值還是將其置零。

如果函式失敗,則不會更改 V4L2 fwnode 端點狀態。

v4l2_fwnode_endpoint_alloc_parse()v4l2_fwnode_endpoint_parse() 有兩個重要的區別

  1. 它還可以解析可變大小的資料。

  2. 它已分配用於儲存可變大小資料的記憶體必須在使用完畢後使用 v4l2_fwnode_endpoint_free() 釋放。

返回值

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

記憶體分配失敗時返回 -ENOMEM,解析失敗時返回 -EINVAL,匯流排型別不匹配時返回 -ENXIO

解析兩個端點之間的連結

引數

struct fwnode_handle *fwnode

指向連結本地端點 fwnode 的指標

struct v4l2_fwnode_link *link

指向 V4L2 fwnode 連結資料結構的指標

描述

用本地和遠端節點以及埠號填充連結結構。local_node 和 remote_node 欄位設定為分別指向本地和遠端埠的父節點(如果該節點不是“ports”節點,則埠父節點是埠節點的父節點,否則是埠節點的祖父節點)。

將獲取對本地節點和遠端節點的引用,呼叫者必須使用 v4l2_fwnode_put_link() 在完成連結後釋放引用。

返回值

成功時返回 0,如果找不到遠端端點 fwnode,則返回 -ENOLINK。

釋放連結中節點的引用

引數

struct v4l2_fwnode_link *link

指向 V4L2 fwnode 連結資料結構的指標

描述

釋放連結中本地節點和遠端節點的引用。必須對使用 v4l2_fwnode_parse_link() 解析的每個連結呼叫此函式。

void v4l2_fwnode_connector_free(struct v4l2_fwnode_connector *connector)

釋放 V4L2 聯結器獲取的記憶體

引數

struct v4l2_fwnode_connector *connector

要釋放資源的 V4L2 聯結器

描述

釋放所有分配的記憶體,並釋放由 v4l2_fwnode_connector_parse()v4l2_fwnode_connector_add_link() 獲取的所有連結。

使用 NULL 引數或解析失敗的 V4L2 聯結器呼叫此函式是安全的。

int v4l2_fwnode_connector_parse(struct fwnode_handle *fwnode, struct v4l2_fwnode_connector *connector)

初始化“struct v4l2_fwnode_connector

引數

struct fwnode_handle *fwnode

指向子裝置端點的 fwnode 控制代碼的指標,聯結器連線到該控制代碼,或聯結器端點 fwnode 控制代碼。

struct v4l2_fwnode_connector *connector

指向 V4L2 fwnode 聯結器資料結構的指標

描述

使用聯結器型別、標籤和所有 enum v4l2_connector_type 特定聯結器資料填充 struct v4l2_fwnode_connector。標籤是可選的,因此如果沒有找到標籤,則將其設定為 NULL。該函式將連結初始化為零。呼叫 v4l2_fwnode_connector_add_link() 完成向聯結器新增連結。

不再需要標籤時,必須釋放為標籤分配的記憶體。釋放記憶體是透過 v4l2_fwnode_connector_free() 完成的。

返回值

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

  • 如果 fwnode 無效,則返回 -EINVAL

  • 如果聯結器型別未知或找不到聯結器裝置,則返回 -ENOTCONN

在聯結器節點和 v4l2-subdev 節點之間新增連結。

引數

struct fwnode_handle *fwnode

指向子裝置端點的 fwnode 控制代碼的指標,聯結器連線到該控制代碼

struct v4l2_fwnode_connector *connector

指向 V4L2 fwnode 聯結器資料結構的指標

描述

將新的 struct v4l2_connector_link 連結新增到 struct v4l2_fwnode_connector 聯結器連結列表。連結 local_node 指向聯結器節點,remote_node 指向主機 v4l2(子)裝置。

必須在使用完畢後釋放對 remote_node 和 local_node 的引用,並且必須釋放分配的記憶體。兩者都是透過呼叫 v4l2_fwnode_connector_free() 完成的。

返回值

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

  • 如果 fwnodeconnector 無效,或者 connector 型別未知,則返回 -EINVAL

  • 連結記憶體分配失敗時返回 -ENOMEM

  • 如果找不到遠端聯結器裝置,則返回 -ENOTCONN

  • 如果 v4l2(子)裝置和聯結器之間的連結解析失敗,則返回 -ENOLINK

int v4l2_fwnode_device_parse(struct device *dev, struct v4l2_fwnode_device_properties *props)

解析 fwnode 裝置屬性

引數

struct device *dev

指向 struct device 的指標

struct v4l2_fwnode_device_properties *props

指向 struct v4l2_fwnode_device_properties 的指標,用於儲存已解析的屬性值

描述

此函式從韌體介面解析並驗證 V4L2 fwnode 裝置屬性,並填充呼叫者提供的 struct v4l2_fwnode_device_properties。

返回值

成功時返回 % 0,如果已解析的屬性值無效,則返回 -EINVAL