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 -- 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 <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. 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 > </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 > </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 > </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 > </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