7.5. ioctl VIDIOC_DBG_G_CHIP_INFO

7.5.1. 名稱

VIDIOC_DBG_G_CHIP_INFO - 識別電視卡上的晶片

7.5.2. 概要

VIDIOC_DBG_G_CHIP_INFO

int ioctl(int fd, VIDIOC_DBG_G_CHIP_INFO, struct v4l2_dbg_chip_info *argp)

7.5.3. 引數

fd

open() 返回的檔案描述符。

argp

指向 struct v4l2_dbg_chip_info 的指標。

7.5.4. 描述

注意

這是一個 實驗性 API 元素 介面,將來可能會發生變化。

出於驅動程式除錯的目的,此 ioctl 允許測試應用程式查詢驅動程式關於電視卡上存在的晶片的資訊。 正規應用程式不得使用它。 當您發現特定於晶片的錯誤時,請聯絡 linux-media 郵件列表 (https://linuxtv.org/lists.php),以便可以修復它。

此外,必須使用 CONFIG_VIDEO_ADV_DEBUG 選項編譯 Linux 核心才能啟用此 ioctl。

要查詢驅動程式,應用程式必須初始化 struct v4l2_dbg_chip_infomatch.typematch.addrmatch.name 欄位,並使用指向此結構的指標呼叫 ioctl VIDIOC_DBG_G_CHIP_INFO。 成功後,驅動程式會將有關所選晶片的資訊儲存在 nameflags 欄位中。

match.typeV4L2_CHIP_MATCH_BRIDGE 時,match.addr 選擇電視卡上的第 n 個橋接“晶片”。 您可以透過從零開始並遞增 match.addr 1 來列舉所有晶片,直到 ioctl VIDIOC_DBG_G_CHIP_INFO 失敗並出現 EINVAL 錯誤程式碼。 數字零始終選擇橋接晶片本身,例如,連線到 PCI 或 USB 匯流排的晶片。 非零數字標識橋接晶片的特定部分,例如 AC97 暫存器塊。

match.typeV4L2_CHIP_MATCH_SUBDEV 時,match.addr 選擇第 n 個子裝置。 這允許您列舉所有子裝置。

成功後,name 欄位將包含晶片名稱,如果驅動程式支援從裝置讀取暫存器,則 flags 欄位將包含 V4L2_CHIP_FL_READABLE,如果驅動程式支援將暫存器寫入裝置,則 flags 欄位將包含 V4L2_CHIP_FL_WRITABLE

我們建議使用 v4l2-dbg 實用程式,而不是直接呼叫此 ioctl。 它可以從 LinuxTV v4l-dvb 儲存庫獲得; 有關訪問說明,請參閱 https://linuxtv.org/repo/

struct v4l2_dbg_match

__u32

type

有關可能的型別列表,請參閱 晶片匹配型別

union {

(anonymous)

__u32

addr

按此數字匹配晶片,根據 type 欄位解釋。

char

name[32]

按此名稱匹配晶片,根據 type 欄位解釋。 當前未使用。

}

type v4l2_dbg_chip_info
struct v4l2_dbg_chip_info

struct v4l2_dbg_match

match

如何匹配晶片,請參閱 struct v4l2_dbg_match

char

name[32]

晶片的名稱。

__u32

flags

由驅動程式設定。 如果設定了 V4L2_CHIP_FL_READABLE,則驅動程式支援從裝置讀取暫存器。 如果設定了 V4L2_CHIP_FL_WRITABLE,則它支援寫入暫存器。

__u32

reserved[8]

保留欄位,應用程式和驅動程式都必須將其設定為 0。

晶片匹配型別

V4L2_CHIP_MATCH_BRIDGE

0

匹配卡上的第 n 個晶片,零表示橋接晶片。 不匹配子裝置。

V4L2_CHIP_MATCH_SUBDEV

4

匹配第 n 個子裝置。

7.5.5. 返回值

成功時返回 0,出錯時返回 -1,並適當設定 errno 變數。 通用錯誤程式碼在 通用錯誤程式碼 章節中描述。

EINVAL

match_type 無效或無法匹配任何裝置。