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

指向结构体 v4l2_dbg_chip_info 的指针。

7.5.4. 描述

注意

这是一个 实验性 API 元素 接口,将来可能会更改。

出于驱动程序调试的目的,此 ioctl 允许测试应用程序查询驱动程序关于电视卡上存在的芯片的信息。常规应用程序不得使用它。当您发现某个芯片特定的错误时,请联系 linux-media 邮件列表 (https://linuxtv.org/lists.php),以便可以修复它。

此外,Linux 内核必须使用 CONFIG_VIDEO_ADV_DEBUG 选项进行编译才能启用此 ioctl。

要查询驱动程序,应用程序必须初始化结构体 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,如果驱动程序支持向设备写入寄存器,则该字段将包含 V4L2_CHIP_FL_WRITABLE

我们建议使用 v4l2-dbg 实用程序,而不是直接调用此 ioctl。它可以从 LinuxTV v4l-dvb 存储库获得;有关访问说明,请参阅 https://linuxtv.org/repo/

结构体 v4l2_dbg_match

__u32

type

有关可能类型的列表,请参阅 芯片匹配类型

union {

(匿名)

__u32

addr

按此数字匹配芯片,根据 type 字段解释。

char

name[32]

按此名称匹配芯片,根据 type 字段解释。当前未使用。

}

type v4l2_dbg_chip_info
结构体 v4l2_dbg_chip_info

struct v4l2_dbg_match

match

如何匹配芯片,请参阅 结构体 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 无效或无法匹配设备。