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 无效或无法匹配任何设备。