Home | History | Annotate | Download | only in spec
      1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
      2 <HTML
      3 ><HEAD
      4 ><TITLE
      5 >ioctl VIDIOC_DBG_G_REGISTER, VIDIOC_DBG_S_REGISTER</TITLE
      6 ><META
      7 NAME="GENERATOR"
      8 CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
      9 REL="HOME"
     10 TITLE="Video for Linux Two API Specification"
     11 HREF="book1.htm"><LINK
     12 REL="UP"
     13 TITLE="Function Reference"
     14 HREF="r7624.htm"><LINK
     15 REL="PREVIOUS"
     16 TITLE="ioctl VIDIOC_CROPCAP"
     17 HREF="r7771.htm"><LINK
     18 REL="NEXT"
     19 TITLE="ioctl VIDIOC_ENCODER_CMD, VIDIOC_TRY_ENCODER_CMD"
     20 HREF="r8087.htm"></HEAD
     21 ><BODY
     22 CLASS="REFENTRY"
     23 BGCOLOR="#FFFFFF"
     24 TEXT="#000000"
     25 LINK="#0000FF"
     26 VLINK="#840084"
     27 ALINK="#0000FF"
     28 ><DIV
     29 CLASS="NAVHEADER"
     30 ><TABLE
     31 SUMMARY="Header navigation table"
     32 WIDTH="100%"
     33 BORDER="0"
     34 CELLPADDING="0"
     35 CELLSPACING="0"
     36 ><TR
     37 ><TH
     38 COLSPAN="3"
     39 ALIGN="center"
     40 >Video for Linux Two API Specification: Revision 0.24</TH
     41 ></TR
     42 ><TR
     43 ><TD
     44 WIDTH="10%"
     45 ALIGN="left"
     46 VALIGN="bottom"
     47 ><A
     48 HREF="r7771.htm"
     49 ACCESSKEY="P"
     50 >Prev</A
     51 ></TD
     52 ><TD
     53 WIDTH="80%"
     54 ALIGN="center"
     55 VALIGN="bottom"
     56 ></TD
     57 ><TD
     58 WIDTH="10%"
     59 ALIGN="right"
     60 VALIGN="bottom"
     61 ><A
     62 HREF="r8087.htm"
     63 ACCESSKEY="N"
     64 >Next</A
     65 ></TD
     66 ></TR
     67 ></TABLE
     68 ><HR
     69 ALIGN="LEFT"
     70 WIDTH="100%"></DIV
     71 ><H1
     72 ><A
     73 NAME="VIDIOC-DBG-G-REGISTER"
     74 ></A
     75 >ioctl VIDIOC_DBG_G_REGISTER, VIDIOC_DBG_S_REGISTER</H1
     76 ><DIV
     77 CLASS="REFNAMEDIV"
     78 ><A
     79 NAME="AEN7904"
     80 ></A
     81 ><H2
     82 >Name</H2
     83 >VIDIOC_DBG_G_REGISTER, VIDIOC_DBG_S_REGISTER&nbsp;--&nbsp;Read or write hardware registers</DIV
     84 ><DIV
     85 CLASS="REFSYNOPSISDIV"
     86 ><A
     87 NAME="AEN7908"
     88 ></A
     89 ><H2
     90 >Synopsis</H2
     91 ><DIV
     92 CLASS="FUNCSYNOPSIS"
     93 ><P
     94 ></P
     95 ><A
     96 NAME="AEN7909"
     97 ></A
     98 ><P
     99 ><CODE
    100 ><CODE
    101 CLASS="FUNCDEF"
    102 >int ioctl</CODE
    103 >(int fd, int request, struct v4l2_register *argp);</CODE
    104 ></P
    105 ><P
    106 ></P
    107 ></DIV
    108 ><DIV
    109 CLASS="FUNCSYNOPSIS"
    110 ><P
    111 ></P
    112 ><A
    113 NAME="AEN7919"
    114 ></A
    115 ><P
    116 ><CODE
    117 ><CODE
    118 CLASS="FUNCDEF"
    119 >int ioctl</CODE
    120 >(int fd, int request, const struct v4l2_register
    121 *argp);</CODE
    122 ></P
    123 ><P
    124 ></P
    125 ></DIV
    126 ></DIV
    127 ><DIV
    128 CLASS="REFSECT1"
    129 ><A
    130 NAME="AEN7929"
    131 ></A
    132 ><H2
    133 >Arguments</H2
    134 ><P
    135 ></P
    136 ><DIV
    137 CLASS="VARIABLELIST"
    138 ><DL
    139 ><DT
    140 ><CODE
    141 CLASS="PARAMETER"
    142 >fd</CODE
    143 ></DT
    144 ><DD
    145 ><P
    146 >File descriptor returned by <A
    147 HREF="r14090.htm"
    148 ><CODE
    149 CLASS="FUNCTION"
    150 >open()</CODE
    151 ></A
    152 >.</P
    153 ></DD
    154 ><DT
    155 ><CODE
    156 CLASS="PARAMETER"
    157 >request</CODE
    158 ></DT
    159 ><DD
    160 ><P
    161 >VIDIOC_DBG_G_REGISTER, VIDIOC_DBG_S_REGISTER</P
    162 ></DD
    163 ><DT
    164 ><CODE
    165 CLASS="PARAMETER"
    166 >argp</CODE
    167 ></DT
    168 ><DD
    169 ><P
    170 ></P
    171 ></DD
    172 ></DL
    173 ></DIV
    174 ></DIV
    175 ><DIV
    176 CLASS="REFSECT1"
    177 ><A
    178 NAME="AEN7949"
    179 ></A
    180 ><H2
    181 >Description</H2
    182 ><DIV
    183 CLASS="NOTE"
    184 ><BLOCKQUOTE
    185 CLASS="NOTE"
    186 ><P
    187 ><B
    188 >Experimental: </B
    189 >This is an <A
    190 HREF="x16453.htm"
    191 >experimental</A
    192 >
    193 interface and may change in the future.</P
    194 ></BLOCKQUOTE
    195 ></DIV
    196 ><P
    197 >For driver debugging purposes these ioctls allow test
    198 applications to access hardware registers directly. Regular
    199 applications should not use them.</P
    200 ><P
    201 >Since writing or even reading registers can jeopardize the
    202 system security, its stability and damage the hardware, both ioctls
    203 require superuser privileges. Additionally the Linux kernel must be
    204 compiled with the <CODE
    205 CLASS="CONSTANT"
    206 >CONFIG_VIDEO_ADV_DEBUG</CODE
    207 > option
    208 to enable these ioctls.</P
    209 ><P
    210 >To write a register applications must initialize all fields
    211 of a struct&nbsp;<A
    212 HREF="r7900.htm#V4L2-REGISTER"
    213 >v4l2_register</A
    214 > and call
    215 <CODE
    216 CLASS="CONSTANT"
    217 >VIDIOC_DBG_S_REGISTER</CODE
    218 > with a pointer to this
    219 structure. The <CODE
    220 CLASS="STRUCTFIELD"
    221 >match_type</CODE
    222 > and
    223 <CODE
    224 CLASS="STRUCTFIELD"
    225 >match_chip</CODE
    226 > fields select a chip on the TV
    227 card, the <CODE
    228 CLASS="STRUCTFIELD"
    229 >reg</CODE
    230 > field specifies a register
    231 number and the <CODE
    232 CLASS="STRUCTFIELD"
    233 >val</CODE
    234 > field the value to be
    235 written into the register.</P
    236 ><P
    237 >To read a register applications must initialize the
    238 <CODE
    239 CLASS="STRUCTFIELD"
    240 >match_type</CODE
    241 >,
    242 <CODE
    243 CLASS="STRUCTFIELD"
    244 >match_chip</CODE
    245 > and
    246 <CODE
    247 CLASS="STRUCTFIELD"
    248 >reg</CODE
    249 > fields, and call
    250 <CODE
    251 CLASS="CONSTANT"
    252 >VIDIOC_DBG_G_REGISTER</CODE
    253 > with a pointer to this
    254 structure. On success the driver stores the register value in the
    255 <CODE
    256 CLASS="STRUCTFIELD"
    257 >val</CODE
    258 > field. On failure the structure remains
    259 unchanged.</P
    260 ><P
    261 >When <CODE
    262 CLASS="STRUCTFIELD"
    263 >match_type</CODE
    264 > is
    265 <CODE
    266 CLASS="CONSTANT"
    267 >V4L2_CHIP_MATCH_HOST</CODE
    268 >,
    269 <CODE
    270 CLASS="STRUCTFIELD"
    271 >match_chip</CODE
    272 > selects the nth non-I<SUP
    273 >2</SUP
    274 >C chip
    275 on the TV card. Drivers may also interpret
    276 <CODE
    277 CLASS="STRUCTFIELD"
    278 >match_chip</CODE
    279 > as a random ID, but we recommend
    280 against that. The number zero always selects the host chip, e.&nbsp;g. the
    281 chip connected to the PCI bus. You can find out which chips are
    282 present with the <A
    283 HREF="r9804.htm"
    284 ><CODE
    285 CLASS="CONSTANT"
    286 >VIDIOC_G_CHIP_IDENT</CODE
    287 ></A
    288 > ioctl.</P
    289 ><P
    290 >When <CODE
    291 CLASS="STRUCTFIELD"
    292 >match_type</CODE
    293 > is
    294 <CODE
    295 CLASS="CONSTANT"
    296 >V4L2_CHIP_MATCH_I2C_DRIVER</CODE
    297 >,
    298 <CODE
    299 CLASS="STRUCTFIELD"
    300 >match_chip</CODE
    301 > contains a driver ID as defined
    302 in the <TT
    303 CLASS="FILENAME"
    304 >linux/i2c-id.h</TT
    305 > header file. For instance
    306 <CODE
    307 CLASS="CONSTANT"
    308 >I2C_DRIVERID_SAA7127</CODE
    309 > will match any chip
    310 supported by the saa7127 driver, regardless of its I<SUP
    311 >2</SUP
    312 >C bus address.
    313 When multiple chips supported by the same driver are present, the
    314 effect of these ioctls is undefined. Again with the
    315 <A
    316 HREF="r9804.htm"
    317 ><CODE
    318 CLASS="CONSTANT"
    319 >VIDIOC_G_CHIP_IDENT</CODE
    320 ></A
    321 > ioctl you can find out which I<SUP
    322 >2</SUP
    323 >C chips are
    324 present.</P
    325 ><P
    326 >When <CODE
    327 CLASS="STRUCTFIELD"
    328 >match_type</CODE
    329 > is
    330 <CODE
    331 CLASS="CONSTANT"
    332 >V4L2_CHIP_MATCH_I2C_ADDR</CODE
    333 >,
    334 <CODE
    335 CLASS="STRUCTFIELD"
    336 >match_chip</CODE
    337 > selects a chip by its 7 bit I<SUP
    338 >2</SUP
    339 >C
    340 bus address.</P
    341 ><DIV
    342 CLASS="NOTE"
    343 ><BLOCKQUOTE
    344 CLASS="NOTE"
    345 ><P
    346 ><B
    347 >Success not guaranteed: </B
    348 >Due to a flaw in the Linux I<SUP
    349 >2</SUP
    350 >C bus driver these ioctls may
    351 return successfully without actually reading or writing a register. To
    352 catch the most likely failure we recommend a <A
    353 HREF="r9804.htm"
    354 ><CODE
    355 CLASS="CONSTANT"
    356 >VIDIOC_G_CHIP_IDENT</CODE
    357 ></A
    358 >
    359 call confirming the presence of the selected I<SUP
    360 >2</SUP
    361 >C chip.</P
    362 ></BLOCKQUOTE
    363 ></DIV
    364 ><P
    365 >These ioctls are optional, not all drivers may support them.
    366 However when a driver supports these ioctls it must also support
    367 <A
    368 HREF="r9804.htm"
    369 ><CODE
    370 CLASS="CONSTANT"
    371 >VIDIOC_G_CHIP_IDENT</CODE
    372 ></A
    373 >. Conversely it may support
    374 <CODE
    375 CLASS="CONSTANT"
    376 >VIDIOC_G_CHIP_IDENT</CODE
    377 > but not these ioctls.</P
    378 ><P
    379 ><CODE
    380 CLASS="CONSTANT"
    381 >VIDIOC_DBG_G_REGISTER</CODE
    382 > and
    383 <CODE
    384 CLASS="CONSTANT"
    385 >VIDIOC_DBG_S_REGISTER</CODE
    386 > were introduced in Linux
    387 2.6.21.</P
    388 ><P
    389 >We recommended the <SPAN
    390 CLASS="APPLICATION"
    391 >v4l2-dbg</SPAN
    392 >
    393 utility over calling these ioctls directly. It is available from the
    394 LinuxTV v4l-dvb repository; see <A
    395 HREF="http://linuxtv.org/repo/"
    396 TARGET="_top"
    397 >http://linuxtv.org/repo/</A
    398 > for
    399 access instructions.</P
    400 ><DIV
    401 CLASS="TABLE"
    402 ><A
    403 NAME="V4L2-REGISTER"
    404 ></A
    405 ><P
    406 ><B
    407 >Table 1. struct <CODE
    408 CLASS="STRUCTNAME"
    409 >v4l2_register</CODE
    410 ></B
    411 ></P
    412 ><TABLE
    413 BORDER="0"
    414 FRAME="void"
    415 WIDTH="100%"
    416 CLASS="CALSTABLE"
    417 ><COL
    418 WIDTH="33%"
    419 TITLE="C1"><COL
    420 WIDTH="33%"
    421 TITLE="C2"><COL
    422 WIDTH="33%"
    423 TITLE="C4"><COL><TBODY
    424 VALIGN="TOP"
    425 ><TR
    426 ><TD
    427 >__u32</TD
    428 ><TD
    429 ><CODE
    430 CLASS="STRUCTFIELD"
    431 >match_type</CODE
    432 ></TD
    433 ><TD
    434 >See <A
    435 HREF="r7900.htm#CHIP-MATCH-TYPES"
    436 >Table 2</A
    437 > for a list of
    438  possible types.</TD
    439 ><TD
    440 >&nbsp;</TD
    441 ></TR
    442 ><TR
    443 ><TD
    444 >__u32</TD
    445 ><TD
    446 ><CODE
    447 CLASS="STRUCTFIELD"
    448 >match_chip</CODE
    449 ></TD
    450 ><TD
    451 >Match a chip by this number, interpreted according
    452 to the <CODE
    453 CLASS="STRUCTFIELD"
    454 >match_type</CODE
    455 > field.</TD
    456 ><TD
    457 >&nbsp;</TD
    458 ></TR
    459 ><TR
    460 ><TD
    461 >__u64</TD
    462 ><TD
    463 ><CODE
    464 CLASS="STRUCTFIELD"
    465 >reg</CODE
    466 ></TD
    467 ><TD
    468 >A register number.</TD
    469 ><TD
    470 >&nbsp;</TD
    471 ></TR
    472 ><TR
    473 ><TD
    474 >__u64</TD
    475 ><TD
    476 ><CODE
    477 CLASS="STRUCTFIELD"
    478 >val</CODE
    479 ></TD
    480 ><TD
    481 >The value read from, or to be written into the
    482 register.</TD
    483 ><TD
    484 >&nbsp;</TD
    485 ></TR
    486 ></TBODY
    487 ></TABLE
    488 ></DIV
    489 ><DIV
    490 CLASS="TABLE"
    491 ><A
    492 NAME="CHIP-MATCH-TYPES"
    493 ></A
    494 ><P
    495 ><B
    496 >Table 2. Chip Match Types</B
    497 ></P
    498 ><TABLE
    499 BORDER="0"
    500 FRAME="void"
    501 WIDTH="100%"
    502 CLASS="CALSTABLE"
    503 ><COL
    504 WIDTH="38%"
    505 TITLE="C1"><COL
    506 WIDTH="12%"
    507 TITLE="C2"><COL
    508 WIDTH="50%"
    509 TITLE="C3"><TBODY
    510 VALIGN="TOP"
    511 ><TR
    512 ><TD
    513 ><CODE
    514 CLASS="CONSTANT"
    515 >V4L2_CHIP_MATCH_HOST</CODE
    516 ></TD
    517 ><TD
    518 >0</TD
    519 ><TD
    520 >Match the nth chip on the card, zero for the
    521             host chip. Does not match I<SUP
    522 >2</SUP
    523 >C chips.</TD
    524 ></TR
    525 ><TR
    526 ><TD
    527 ><CODE
    528 CLASS="CONSTANT"
    529 >V4L2_CHIP_MATCH_I2C_DRIVER</CODE
    530 ></TD
    531 ><TD
    532 >1</TD
    533 ><TD
    534 >Match an I<SUP
    535 >2</SUP
    536 >C chip by its driver ID from the
    537 <TT
    538 CLASS="FILENAME"
    539 >linux/i2c-id.h</TT
    540 > header file.</TD
    541 ></TR
    542 ><TR
    543 ><TD
    544 ><CODE
    545 CLASS="CONSTANT"
    546 >V4L2_CHIP_MATCH_I2C_ADDR</CODE
    547 ></TD
    548 ><TD
    549 >2</TD
    550 ><TD
    551 >Match a chip by its 7 bit I<SUP
    552 >2</SUP
    553 >C bus address.</TD
    554 ></TR
    555 ></TBODY
    556 ></TABLE
    557 ></DIV
    558 ></DIV
    559 ><DIV
    560 CLASS="REFSECT1"
    561 ><A
    562 NAME="AEN8068"
    563 ></A
    564 ><H2
    565 >Return Value</H2
    566 ><P
    567 >On success <SPAN
    568 CLASS="RETURNVALUE"
    569 >0</SPAN
    570 > is returned, on error <SPAN
    571 CLASS="RETURNVALUE"
    572 >-1</SPAN
    573 > and the <CODE
    574 CLASS="VARNAME"
    575 >errno</CODE
    576 > variable is set appropriately:</P
    577 ><P
    578 ></P
    579 ><DIV
    580 CLASS="VARIABLELIST"
    581 ><DL
    582 ><DT
    583 ><SPAN
    584 CLASS="ERRORCODE"
    585 >EINVAL</SPAN
    586 ></DT
    587 ><DD
    588 ><P
    589 >The driver does not support this ioctl, or the kernel
    590 was not compiled with the <CODE
    591 CLASS="CONSTANT"
    592 >CONFIG_VIDEO_ADV_DEBUG</CODE
    593 >
    594 option, or the <CODE
    595 CLASS="STRUCTFIELD"
    596 >match_type</CODE
    597 > is invalid, or the
    598 selected chip or register does not exist.</P
    599 ></DD
    600 ><DT
    601 ><SPAN
    602 CLASS="ERRORCODE"
    603 >EPERM</SPAN
    604 ></DT
    605 ><DD
    606 ><P
    607 >Insufficient permissions. Root privileges are required
    608 to execute these ioctls.</P
    609 ></DD
    610 ></DL
    611 ></DIV
    612 ></DIV
    613 ><DIV
    614 CLASS="NAVFOOTER"
    615 ><HR
    616 ALIGN="LEFT"
    617 WIDTH="100%"><TABLE
    618 SUMMARY="Footer navigation table"
    619 WIDTH="100%"
    620 BORDER="0"
    621 CELLPADDING="0"
    622 CELLSPACING="0"
    623 ><TR
    624 ><TD
    625 WIDTH="33%"
    626 ALIGN="left"
    627 VALIGN="top"
    628 ><A
    629 HREF="r7771.htm"
    630 ACCESSKEY="P"
    631 >Prev</A
    632 ></TD
    633 ><TD
    634 WIDTH="34%"
    635 ALIGN="center"
    636 VALIGN="top"
    637 ><A
    638 HREF="book1.htm"
    639 ACCESSKEY="H"
    640 >Home</A
    641 ></TD
    642 ><TD
    643 WIDTH="33%"
    644 ALIGN="right"
    645 VALIGN="top"
    646 ><A
    647 HREF="r8087.htm"
    648 ACCESSKEY="N"
    649 >Next</A
    650 ></TD
    651 ></TR
    652 ><TR
    653 ><TD
    654 WIDTH="33%"
    655 ALIGN="left"
    656 VALIGN="top"
    657 >ioctl VIDIOC_CROPCAP</TD
    658 ><TD
    659 WIDTH="34%"
    660 ALIGN="center"
    661 VALIGN="top"
    662 ><A
    663 HREF="r7624.htm"
    664 ACCESSKEY="U"
    665 >Up</A
    666 ></TD
    667 ><TD
    668 WIDTH="33%"
    669 ALIGN="right"
    670 VALIGN="top"
    671 >ioctl VIDIOC_ENCODER_CMD, VIDIOC_TRY_ENCODER_CMD</TD
    672 ></TR
    673 ></TABLE
    674 ></DIV
    675 ></BODY
    676 ></HTML
    677 >
    678