161 lines
4.6 KiB
ReStructuredText
161 lines
4.6 KiB
ReStructuredText
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
|
.. c:namespace:: V4L
|
|
|
|
.. _VIDIOC_DBG_G_REGISTER:
|
|
|
|
**************************************************
|
|
ioctl VIDIOC_DBG_G_REGISTER, VIDIOC_DBG_S_REGISTER
|
|
**************************************************
|
|
|
|
Name
|
|
====
|
|
|
|
VIDIOC_DBG_G_REGISTER - VIDIOC_DBG_S_REGISTER - Read or write hardware registers
|
|
|
|
Synopsis
|
|
========
|
|
|
|
.. c:macro:: VIDIOC_DBG_G_REGISTER
|
|
|
|
``int ioctl(int fd, VIDIOC_DBG_G_REGISTER, struct v4l2_dbg_register *argp)``
|
|
|
|
.. c:macro:: VIDIOC_DBG_S_REGISTER
|
|
|
|
``int ioctl(int fd, VIDIOC_DBG_S_REGISTER, const struct v4l2_dbg_register *argp)``
|
|
|
|
Arguments
|
|
=========
|
|
|
|
``fd``
|
|
File descriptor returned by :c:func:`open()`.
|
|
|
|
``argp``
|
|
Pointer to struct :c:type:`v4l2_dbg_register`.
|
|
|
|
Description
|
|
===========
|
|
|
|
.. note::
|
|
|
|
This is an :ref:`experimental` interface and may
|
|
change in the future.
|
|
|
|
For driver debugging purposes these ioctls allow test applications to
|
|
access hardware registers directly. Regular applications must not use
|
|
them.
|
|
|
|
Since writing or even reading registers can jeopardize the system
|
|
security, its stability and damage the hardware, both ioctls require
|
|
superuser privileges. Additionally the Linux kernel must be compiled
|
|
with the ``CONFIG_VIDEO_ADV_DEBUG`` option to enable these ioctls.
|
|
|
|
To write a register applications must initialize all fields of a struct
|
|
:c:type:`v4l2_dbg_register` except for ``size`` and
|
|
call ``VIDIOC_DBG_S_REGISTER`` with a pointer to this structure. The
|
|
``match.type`` and ``match.addr`` or ``match.name`` fields select a chip
|
|
on the TV card, the ``reg`` field specifies a register number and the
|
|
``val`` field the value to be written into the register.
|
|
|
|
To read a register applications must initialize the ``match.type``,
|
|
``match.addr`` or ``match.name`` and ``reg`` fields, and call
|
|
``VIDIOC_DBG_G_REGISTER`` with a pointer to this structure. On success
|
|
the driver stores the register value in the ``val`` field and the size
|
|
(in bytes) of the value in ``size``.
|
|
|
|
When ``match.type`` is ``V4L2_CHIP_MATCH_BRIDGE``, ``match.addr``
|
|
selects the nth non-sub-device chip on the TV card. The number zero
|
|
always selects the host chip, e. g. the chip connected to the PCI or USB
|
|
bus. You can find out which chips are present with the
|
|
:ref:`VIDIOC_DBG_G_CHIP_INFO` ioctl.
|
|
|
|
When ``match.type`` is ``V4L2_CHIP_MATCH_SUBDEV``, ``match.addr``
|
|
selects the nth sub-device.
|
|
|
|
These ioctls are optional, not all drivers may support them. However
|
|
when a driver supports these ioctls it must also support
|
|
:ref:`VIDIOC_DBG_G_CHIP_INFO`. Conversely
|
|
it may support ``VIDIOC_DBG_G_CHIP_INFO`` but not these ioctls.
|
|
|
|
``VIDIOC_DBG_G_REGISTER`` and ``VIDIOC_DBG_S_REGISTER`` were introduced
|
|
in Linux 2.6.21, but their API was changed to the one described here in
|
|
kernel 2.6.29.
|
|
|
|
We recommended the v4l2-dbg utility over calling these ioctls directly.
|
|
It is available from the LinuxTV v4l-dvb repository; see
|
|
`https://linuxtv.org/repo/ <https://linuxtv.org/repo/>`__ for access
|
|
instructions.
|
|
|
|
.. tabularcolumns:: |p{3.5cm}|p{3.5cm}|p{3.5cm}|p{6.6cm}|
|
|
|
|
.. c:type:: v4l2_dbg_match
|
|
|
|
.. flat-table:: struct v4l2_dbg_match
|
|
:header-rows: 0
|
|
:stub-columns: 0
|
|
:widths: 1 1 2
|
|
|
|
* - __u32
|
|
- ``type``
|
|
- See :ref:`chip-match-types` for a list of possible types.
|
|
* - union {
|
|
- (anonymous)
|
|
* - __u32
|
|
- ``addr``
|
|
- Match a chip by this number, interpreted according to the ``type``
|
|
field.
|
|
* - char
|
|
- ``name[32]``
|
|
- Match a chip by this name, interpreted according to the ``type``
|
|
field. Currently unused.
|
|
* - }
|
|
-
|
|
|
|
|
|
.. c:type:: v4l2_dbg_register
|
|
|
|
.. flat-table:: struct v4l2_dbg_register
|
|
:header-rows: 0
|
|
:stub-columns: 0
|
|
|
|
* - struct v4l2_dbg_match
|
|
- ``match``
|
|
- How to match the chip, see :c:type:`v4l2_dbg_match`.
|
|
* - __u32
|
|
- ``size``
|
|
- The register size in bytes.
|
|
* - __u64
|
|
- ``reg``
|
|
- A register number.
|
|
* - __u64
|
|
- ``val``
|
|
- The value read from, or to be written into the register.
|
|
|
|
|
|
.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.5cm}|
|
|
|
|
.. _chip-match-types:
|
|
|
|
.. flat-table:: Chip Match Types
|
|
:header-rows: 0
|
|
:stub-columns: 0
|
|
:widths: 3 1 4
|
|
|
|
* - ``V4L2_CHIP_MATCH_BRIDGE``
|
|
- 0
|
|
- Match the nth chip on the card, zero for the bridge chip. Does not
|
|
match sub-devices.
|
|
* - ``V4L2_CHIP_MATCH_SUBDEV``
|
|
- 4
|
|
- Match the nth sub-device.
|
|
|
|
Return Value
|
|
============
|
|
|
|
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
|
appropriately. The generic error codes are described at the
|
|
:ref:`Generic Error Codes <gen-errors>` chapter.
|
|
|
|
EPERM
|
|
Insufficient permissions. Root privileges are required to execute
|
|
these ioctls.
|