aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/video4linux/v4l2-framework.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/video4linux/v4l2-framework.txt')
-rw-r--r--Documentation/video4linux/v4l2-framework.txt61
1 files changed, 30 insertions, 31 deletions
diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt
index ba4706afc5fb..b806edaf3e75 100644
--- a/Documentation/video4linux/v4l2-framework.txt
+++ b/Documentation/video4linux/v4l2-framework.txt
@@ -370,19 +370,20 @@ from the remove() callback ensures that this is always done correctly.
370The bridge driver also has some helper functions it can use: 370The bridge driver also has some helper functions it can use:
371 371
372struct v4l2_subdev *sd = v4l2_i2c_new_subdev(v4l2_dev, adapter, 372struct v4l2_subdev *sd = v4l2_i2c_new_subdev(v4l2_dev, adapter,
373 "module_foo", "chipid", 0x36); 373 "module_foo", "chipid", 0x36, NULL);
374 374
375This loads the given module (can be NULL if no module needs to be loaded) and 375This loads the given module (can be NULL if no module needs to be loaded) and
376calls i2c_new_device() with the given i2c_adapter and chip/address arguments. 376calls i2c_new_device() with the given i2c_adapter and chip/address arguments.
377If all goes well, then it registers the subdev with the v4l2_device. 377If all goes well, then it registers the subdev with the v4l2_device.
378 378
379You can also use v4l2_i2c_new_probed_subdev() which is very similar to 379You can also use the last argument of v4l2_i2c_new_subdev() to pass an array
380v4l2_i2c_new_subdev(), except that it has an array of possible I2C addresses 380of possible I2C addresses that it should probe. These probe addresses are
381that it should probe. Internally it calls i2c_new_probed_device(). 381only used if the previous argument is 0. A non-zero argument means that you
382know the exact i2c address so in that case no probing will take place.
382 383
383Both functions return NULL if something went wrong. 384Both functions return NULL if something went wrong.
384 385
385Note that the chipid you pass to v4l2_i2c_new_(probed_)subdev() is usually 386Note that the chipid you pass to v4l2_i2c_new_subdev() is usually
386the same as the module name. It allows you to specify a chip variant, e.g. 387the same as the module name. It allows you to specify a chip variant, e.g.
387"saa7114" or "saa7115". In general though the i2c driver autodetects this. 388"saa7114" or "saa7115". In general though the i2c driver autodetects this.
388The use of chipid is something that needs to be looked at more closely at a 389The use of chipid is something that needs to be looked at more closely at a
@@ -410,11 +411,6 @@ the irq and platform_data arguments after the subdev was setup. The older
410v4l2_i2c_new_(probed_)subdev functions will call s_config as well, but with 411v4l2_i2c_new_(probed_)subdev functions will call s_config as well, but with
411irq set to 0 and platform_data set to NULL. 412irq set to 0 and platform_data set to NULL.
412 413
413Note that in the next kernel release the functions v4l2_i2c_new_subdev,
414v4l2_i2c_new_probed_subdev and v4l2_i2c_new_probed_subdev_addr will all be
415replaced by a single v4l2_i2c_new_subdev that is identical to
416v4l2_i2c_new_subdev_cfg but without the irq and platform_data arguments.
417
418struct video_device 414struct video_device
419------------------- 415-------------------
420 416
@@ -490,31 +486,35 @@ VFL_TYPE_RADIO: radioX for radio tuners
490VFL_TYPE_VTX: vtxX for teletext devices (deprecated, don't use) 486VFL_TYPE_VTX: vtxX for teletext devices (deprecated, don't use)
491 487
492The last argument gives you a certain amount of control over the device 488The last argument gives you a certain amount of control over the device
493kernel number used (i.e. the X in videoX). Normally you will pass -1 to 489device node number used (i.e. the X in videoX). Normally you will pass -1
494let the v4l2 framework pick the first free number. But if a driver creates 490to let the v4l2 framework pick the first free number. But sometimes users
495many devices, then it can be useful to have different video devices in 491want to select a specific node number. It is common that drivers allow
496separate ranges. For example, video capture devices start at 0, video 492the user to select a specific device node number through a driver module
497output devices start at 16. 493option. That number is then passed to this function and video_register_device
498 494will attempt to select that device node number. If that number was already
499So you can use the last argument to specify a minimum kernel number and 495in use, then the next free device node number will be selected and it
500the v4l2 framework will try to pick the first free number that is equal 496will send a warning to the kernel log.
497
498Another use-case is if a driver creates many devices. In that case it can
499be useful to place different video devices in separate ranges. For example,
500video capture devices start at 0, video output devices start at 16.
501So you can use the last argument to specify a minimum device node number
502and the v4l2 framework will try to pick the first free number that is equal
501or higher to what you passed. If that fails, then it will just pick the 503or higher to what you passed. If that fails, then it will just pick the
502first free number. 504first free number.
503 505
506Since in this case you do not care about a warning about not being able
507to select the specified device node number, you can call the function
508video_register_device_no_warn() instead.
509
504Whenever a device node is created some attributes are also created for you. 510Whenever a device node is created some attributes are also created for you.
505If you look in /sys/class/video4linux you see the devices. Go into e.g. 511If you look in /sys/class/video4linux you see the devices. Go into e.g.
506video0 and you will see 'name' and 'index' attributes. The 'name' attribute 512video0 and you will see 'name' and 'index' attributes. The 'name' attribute
507is the 'name' field of the video_device struct. The 'index' attribute is 513is the 'name' field of the video_device struct.
508a device node index that can be assigned by the driver, or that is calculated
509for you.
510
511If you call video_register_device(), then the index is just increased by
5121 for each device node you register. The first video device node you register
513always starts off with 0.
514 514
515Alternatively you can call video_register_device_index() which is identical 515The 'index' attribute is the index of the device node: for each call to
516to video_register_device(), but with an extra index argument. Here you can 516video_register_device() the index is just increased by 1. The first video
517pass a specific index value (between 0 and 31) that should be used. 517device node you register always starts with index 0.
518 518
519Users can setup udev rules that utilize the index attribute to make fancy 519Users can setup udev rules that utilize the index attribute to make fancy
520device names (e.g. 'mpegX' for MPEG video capture device nodes). 520device names (e.g. 'mpegX' for MPEG video capture device nodes).
@@ -523,9 +523,8 @@ After the device was successfully registered, then you can use these fields:
523 523
524- vfl_type: the device type passed to video_register_device. 524- vfl_type: the device type passed to video_register_device.
525- minor: the assigned device minor number. 525- minor: the assigned device minor number.
526- num: the device kernel number (i.e. the X in videoX). 526- num: the device node number (i.e. the X in videoX).
527- index: the device index number (calculated or set explicitly using 527- index: the device index number.
528 video_register_device_index).
529 528
530If the registration failed, then you need to call video_device_release() 529If the registration failed, then you need to call video_device_release()
531to free the allocated video_device struct, or free your own struct if the 530to free the allocated video_device struct, or free your own struct if the