€•àœŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ4/translations/zh_CN/driver-api/media/drivers/pvrusb2”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/zh_TW/driver-api/media/drivers/pvrusb2”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/it_IT/driver-api/media/drivers/pvrusb2”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/ja_JP/driver-api/media/drivers/pvrusb2”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/ko_KR/driver-api/media/drivers/pvrusb2”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/pt_BR/driver-api/media/drivers/pvrusb2”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/sp_SP/driver-api/media/drivers/pvrusb2”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/driver-api/media/drivers/pvrusb2.rst”h´KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒThe pvrusb2 driver”h]”hŒThe pvrusb2 driver”…””}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)”}”(hŒ$Author: Mike Isely ”h]”(hŒAuthor: Mike Isely <”…””}”(hhßh²hh³Nh´NubhŒ reference”“”)”}”(hŒisely@pobox.com”h]”hŒisely@pobox.com”…””}”(hhéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:isely@pobox.com”uh1hçhhßubhŒ>”…””}”(hhßh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÉ)”}”(hhh]”(hÎ)”}”(hŒ Background”h]”hŒ Background”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´K ubhÞ)”}”(hXThis driver is intended for the "Hauppauge WinTV PVR USB 2.0", which is a USB 2.0 hosted TV Tuner. This driver is a work in progress. Its history started with the reverse-engineering effort by Björn Danielsson whose web page can be found here: http://pvrusb2.dax.nu/”h]”(hŒÙThis driver is intended for the “Hauppauge WinTV PVR USB 2.0â€, which is a USB 2.0 hosted TV Tuner. This driver is a work in progress. Its history started with the reverse-engineering effort by Björn Danielsson <”…””}”(hjh²hh³Nh´Nubhè)”}”(hŒpvrusb2@dax.nu”h]”hŒpvrusb2@dax.nu”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:pvrusb2@dax.nu”uh1hçhjubhŒ$> whose web page can be found here: ”…””}”(hjh²hh³Nh´Nubhè)”}”(hŒhttp://pvrusb2.dax.nu/”h]”hŒhttp://pvrusb2.dax.nu/”…””}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j2uh1hçhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hjh²hubhÞ)”}”(hŒÆFrom there Aurelien Alleaume began an effort to create a video4linux compatible driver. I began with Aurelien's last known snapshot and evolved the driver to the state it is in here.”h]”(hŒFrom there Aurelien Alleaume <”…””}”(hjEh²hh³Nh´Nubhè)”}”(hŒ slts@free.fr”h]”hŒ slts@free.fr”…””}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:slts@free.fr”uh1hçhjEubhŒž> began an effort to create a video4linux compatible driver. I began with Aurelien’s last known snapshot and evolved the driver to the state it is in here.”…””}”(hjEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjh²hubhÞ)”}”(hŒSMore information on this driver can be found at: https://www.isely.net/pvrusb2.html”h]”(hŒ1More information on this driver can be found at: ”…””}”(hjgh²hh³Nh´Nubhè)”}”(hŒ"https://www.isely.net/pvrusb2.html”h]”hŒ"https://www.isely.net/pvrusb2.html”…””}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jquh1hçhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjh²hubhÞ)”}”(hŒFThis driver has a strong separation of layers. They are very roughly:”h]”hŒFThis driver has a strong separation of layers. They are very roughly:”…””}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjh²hubhŒenumerated_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ8Low level wire-protocol implementation with the device. ”h]”hÞ)”}”(hŒ7Low level wire-protocol implementation with the device.”h]”hŒ7Low level wire-protocol implementation with the device.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j—hj”h²hh³hÇh´Nubj˜)”}”(hŒ^I2C adaptor implementation and corresponding I2C client drivers implemented elsewhere in V4L. ”h]”hÞ)”}”(hŒ]I2C adaptor implementation and corresponding I2C client drivers implemented elsewhere in V4L.”h]”hŒ]I2C adaptor implementation and corresponding I2C client drivers implemented elsewhere in V4L.”…””}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j—hj”h²hh³hÇh´Nubj˜)”}”(hŒxHigh level hardware driver implementation which coordinates all activities that ensure correct operation of the device. ”h]”hÞ)”}”(hŒwHigh level hardware driver implementation which coordinates all activities that ensure correct operation of the device.”h]”hŒwHigh level hardware driver implementation which coordinates all activities that ensure correct operation of the device.”…””}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K"hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j—hj”h²hh³hÇh´Nubj˜)”}”(hŒ·A "context" layer which manages instancing of driver, setup, tear-down, arbitration, and interaction with high level interfaces appropriately as devices are hotplugged in the system. ”h]”hÞ)”}”(hŒ¶A "context" layer which manages instancing of driver, setup, tear-down, arbitration, and interaction with high level interfaces appropriately as devices are hotplugged in the system.”h]”hŒºA “context†layer which manages instancing of driver, setup, tear-down, arbitration, and interaction with high level interfaces appropriately as devices are hotplugged in the system.”…””}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K%hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j—hj”h²hh³hÇh´Nubj˜)”}”(hŒsHigh level interfaces which glue the driver to various published Linux APIs (V4L, sysfs, maybe DVB in the future). ”h]”hÞ)”}”(hŒrHigh level interfaces which glue the driver to various published Linux APIs (V4L, sysfs, maybe DVB in the future).”h]”hŒrHigh level interfaces which glue the driver to various published Linux APIs (V4L, sysfs, maybe DVB in the future).”…””}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K*hjùubah}”(h]”h ]”h"]”h$]”h&]”uh1j—hj”h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1j’hjh²hh³hÇh´KubhÞ)”}”(hX\The most important shearing layer is between the top 2 layers. A lot of work went into the driver to ensure that any kind of conceivable API can be laid on top of the core driver. (Yes, the driver internally leverages V4L to do its work but that really has nothing to do with the API published by the driver to the outside world.) The architecture allows for different APIs to simultaneously access the driver. I have a strong sense of fairness about APIs and also feel that it is a good design principle to keep implementation and interface isolated from each other. Thus while right now the V4L high level interface is the most complete, the sysfs high level interface will work equally well for similar functions, and there's no reason I see right now why it shouldn't be possible to produce a DVB high level interface that can sit right alongside V4L.”h]”hX`The most important shearing layer is between the top 2 layers. A lot of work went into the driver to ensure that any kind of conceivable API can be laid on top of the core driver. (Yes, the driver internally leverages V4L to do its work but that really has nothing to do with the API published by the driver to the outside world.) The architecture allows for different APIs to simultaneously access the driver. I have a strong sense of fairness about APIs and also feel that it is a good design principle to keep implementation and interface isolated from each other. Thus while right now the V4L high level interface is the most complete, the sysfs high level interface will work equally well for similar functions, and there’s no reason I see right now why it shouldn’t be possible to produce a DVB high level interface that can sit right alongside V4L.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K-hjh²hubeh}”(h]”Œ background”ah ]”h"]”Œ background”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K ubhÉ)”}”(hhh]”(hÎ)”}”(hŒBuilding”h]”hŒBuilding”…””}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj2h²hh³hÇh´K=ubhÞ)”}”(hX:To build these modules essentially amounts to just running "Make", but you need the kernel source tree nearby and you will likely also want to set a few controlling environment variables first in order to link things up with that source tree. Please see the Makefile here for comments that explain how to do that.”h]”hX>To build these modules essentially amounts to just running “Makeâ€, but you need the kernel source tree nearby and you will likely also want to set a few controlling environment variables first in order to link things up with that source tree. Please see the Makefile here for comments that explain how to do that.”…””}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K?hj2h²hubeh}”(h]”Œbuilding”ah ]”h"]”Œbuilding”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K=ubhÉ)”}”(hhh]”(hÎ)”}”(hŒ&Source file list / functional overview”h]”hŒ&Source file list / functional overview”…””}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjYh²hh³hÇh´KFubhÞ)”}”(hŒ½(Note: The term "module" used below generally refers to loosely defined functional units within the pvrusb2 driver and bears no relation to the Linux kernel's concept of a loadable module.)”h]”hŒÃ(Note: The term “module†used below generally refers to loosely defined functional units within the pvrusb2 driver and bears no relation to the Linux kernel’s concept of a loadable module.)”…””}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KHhjYh²hubhŒdefinition_list”“”)”}”(hhh]”(hŒdefinition_list_item”“”)”}”(hŒ‘pvrusb2-audio.[ch] - This is glue logic that resides between this driver and the msp3400.ko I2C client driver (which is found elsewhere in V4L). ”h]”(hŒterm”“”)”}”(hŒApvrusb2-audio.[ch] - This is glue logic that resides between this”h]”hŒApvrusb2-audio.[ch] - This is glue logic that resides between this”…””}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´KNhjubhŒ definition”“”)”}”(hhh]”hÞ)”}”(hŒNdriver and the msp3400.ko I2C client driver (which is found elsewhere in V4L).”h]”hŒNdriver and the msp3400.ko I2C client driver (which is found elsewhere in V4L).”…””}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KMhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÇh´KNhjzubj~)”}”(hX}pvrusb2-context.[ch] - This module implements the context for an instance of the driver. Everything else eventually ties back to or is otherwise instanced within the data structures implemented here. Hotplugging is ultimately coordinated here. All high level interfaces tie into the driver through this module. This module helps arbitrate each interface's access to the actual driver core, and is designed to allow concurrent access through multiple instances of multiple interfaces (thus you can for example change the tuner's frequency through sysfs while simultaneously streaming video through V4L out to an instance of mplayer). ”h]”(j„)”}”(hŒ@pvrusb2-context.[ch] - This module implements the context for an”h]”hŒ@pvrusb2-context.[ch] - This module implements the context for an”…””}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´KYhj²ubj”)”}”(hhh]”hÞ)”}”(hX;instance of the driver. Everything else eventually ties back to or is otherwise instanced within the data structures implemented here. Hotplugging is ultimately coordinated here. All high level interfaces tie into the driver through this module. This module helps arbitrate each interface's access to the actual driver core, and is designed to allow concurrent access through multiple instances of multiple interfaces (thus you can for example change the tuner's frequency through sysfs while simultaneously streaming video through V4L out to an instance of mplayer).”h]”hX?instance of the driver. Everything else eventually ties back to or is otherwise instanced within the data structures implemented here. Hotplugging is ultimately coordinated here. All high level interfaces tie into the driver through this module. This module helps arbitrate each interface’s access to the actual driver core, and is designed to allow concurrent access through multiple instances of multiple interfaces (thus you can for example change the tuner’s frequency through sysfs while simultaneously streaming video through V4L out to an instance of mplayer).”…””}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KQhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÇh´KYhjzh²hubj~)”}”(hŒ°pvrusb2-debug.h - This header defines a printk() wrapper and a mask of debugging bit definitions for the various kinds of debug messages that can be enabled within the driver. ”h]”(j„)”}”(hŒCpvrusb2-debug.h - This header defines a printk() wrapper and a mask”h]”hŒCpvrusb2-debug.h - This header defines a printk() wrapper and a mask”…””}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´K]hjáubj”)”}”(hhh]”hÞ)”}”(hŒkof debugging bit definitions for the various kinds of debug messages that can be enabled within the driver.”h]”hŒkof debugging bit definitions for the various kinds of debug messages that can be enabled within the driver.”…””}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K\hjóubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÇh´K]hjzh²hubj~)”}”(hX?pvrusb2-debugifc.[ch] - This module implements a crude command line oriented debug interface into the driver. Aside from being part of the process for implementing manual firmware extraction (see the pvrusb2 web site mentioned earlier), probably I'm the only one who has ever used this. It is mainly a debugging aid. ”h]”(j„)”}”(hŒCpvrusb2-debugifc.[ch] - This module implements a crude command line”h]”hŒCpvrusb2-debugifc.[ch] - This module implements a crude command line”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´Kchjubj”)”}”(hhh]”hÞ)”}”(hŒúoriented debug interface into the driver. Aside from being part of the process for implementing manual firmware extraction (see the pvrusb2 web site mentioned earlier), probably I'm the only one who has ever used this. It is mainly a debugging aid.”h]”hŒüoriented debug interface into the driver. Aside from being part of the process for implementing manual firmware extraction (see the pvrusb2 web site mentioned earlier), probably I’m the only one who has ever used this. It is mainly a debugging aid.”…””}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K`hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÇh´Kchjzh²hubj~)”}”(hŒpvrusb2-eeprom.[ch] - This is glue logic that resides between this driver the tveeprom.ko module, which is itself implemented elsewhere in V4L. ”h]”(j„)”}”(hŒBpvrusb2-eeprom.[ch] - This is glue logic that resides between this”h]”hŒBpvrusb2-eeprom.[ch] - This is glue logic that resides between this”…””}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´Kghj?ubj”)”}”(hhh]”hÞ)”}”(hŒLdriver the tveeprom.ko module, which is itself implemented elsewhere in V4L.”h]”hŒLdriver the tveeprom.ko module, which is itself implemented elsewhere in V4L.”…””}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KfhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÇh´Kghjzh²hubj~)”}”(hXrpvrusb2-encoder.[ch] - This module implements all protocol needed to interact with the Conexant mpeg2 encoder chip within the pvrusb2 device. It is a crude echo of corresponding logic in ivtv, however the design goals (strict isolation) and physical layer (proxy through USB instead of PCI) are enough different that this implementation had to be completely different. ”h]”(j„)”}”(hŒDpvrusb2-encoder.[ch] - This module implements all protocol needed to”h]”hŒDpvrusb2-encoder.[ch] - This module implements all protocol needed to”…””}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´Knhjnubj”)”}”(hhh]”hÞ)”}”(hX,interact with the Conexant mpeg2 encoder chip within the pvrusb2 device. It is a crude echo of corresponding logic in ivtv, however the design goals (strict isolation) and physical layer (proxy through USB instead of PCI) are enough different that this implementation had to be completely different.”h]”hX,interact with the Conexant mpeg2 encoder chip within the pvrusb2 device. It is a crude echo of corresponding logic in ivtv, however the design goals (strict isolation) and physical layer (proxy through USB instead of PCI) are enough different that this implementation had to be completely different.”…””}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kjhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÇh´Knhjzh²hubj~)”}”(hXÝpvrusb2-hdw-internal.h - This header defines the core data structure in the driver used to track ALL internal state related to control of the hardware. Nobody outside of the core hardware-handling modules should have any business using this header. All external access to the driver should be through one of the high level interfaces (e.g. V4L, sysfs, etc), and in fact even those high level interfaces are restricted to the API defined in pvrusb2-hdw.h and NOT this header. ”h]”(j„)”}”(hŒDpvrusb2-hdw-internal.h - This header defines the core data structure”h]”hŒDpvrusb2-hdw-internal.h - This header defines the core data structure”…””}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´Kwhjubj”)”}”(hhh]”hÞ)”}”(hX—in the driver used to track ALL internal state related to control of the hardware. Nobody outside of the core hardware-handling modules should have any business using this header. All external access to the driver should be through one of the high level interfaces (e.g. V4L, sysfs, etc), and in fact even those high level interfaces are restricted to the API defined in pvrusb2-hdw.h and NOT this header.”h]”hX—in the driver used to track ALL internal state related to control of the hardware. Nobody outside of the core hardware-handling modules should have any business using this header. All external access to the driver should be through one of the high level interfaces (e.g. V4L, sysfs, etc), and in fact even those high level interfaces are restricted to the API defined in pvrusb2-hdw.h and NOT this header.”…””}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kqhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÇh´Kwhjzh²hubj~)”}”(hŒ™pvrusb2-hdw.h - This header defines the full internal API for controlling the hardware. High level interfaces (e.g. V4L, sysfs) will work through here. ”h]”(j„)”}”(hŒ=pvrusb2-hdw.h - This header defines the full internal API for”h]”hŒ=pvrusb2-hdw.h - This header defines the full internal API for”…””}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´K{hjÌubj”)”}”(hhh]”hÞ)”}”(hŒZcontrolling the hardware. High level interfaces (e.g. V4L, sysfs) will work through here.”h]”hŒZcontrolling the hardware. High level interfaces (e.g. V4L, sysfs) will work through here.”…””}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KzhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÇh´K{hjzh²hubj~)”}”(hŒôpvrusb2-hdw.c - This module implements all the various bits of logic that handle overall control of a specific pvrusb2 device. (Policy, instantiation, and arbitration of pvrusb2 devices fall within the jurisdiction of pvrusb-context not here). ”h]”(j„)”}”(hŒDpvrusb2-hdw.c - This module implements all the various bits of logic”h]”hŒDpvrusb2-hdw.c - This module implements all the various bits of logic”…””}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´K€hjûubj”)”}”(hhh]”hÞ)”}”(hŒ®that handle overall control of a specific pvrusb2 device. (Policy, instantiation, and arbitration of pvrusb2 devices fall within the jurisdiction of pvrusb-context not here).”h]”hŒ®that handle overall control of a specific pvrusb2 device. (Policy, instantiation, and arbitration of pvrusb2 devices fall within the jurisdiction of pvrusb-context not here).”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K~hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÇh´K€hjzh²hubj~)”}”(hXpvrusb2-i2c-chips-\*.c - These modules implement the glue logic to tie together and configure various I2C modules as they attach to the I2C bus. There are two versions of this file. The "v4l2" version is intended to be used in-tree alongside V4L, where we implement just the logic that makes sense for a pure V4L environment. The "all" version is intended for use outside of V4L, where we might encounter other possibly "challenging" modules from ivtv or older kernel snapshots (or even the support modules in the standalone snapshot). ”h]”(j„)”}”(hŒBpvrusb2-i2c-chips-\*.c - These modules implement the glue logic to”h]”hŒBpvrusb2-i2c-chips-*.c - These modules implement the glue logic to”…””}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´KŠhj*ubj”)”}”(hhh]”hÞ)”}”(hX×tie together and configure various I2C modules as they attach to the I2C bus. There are two versions of this file. The "v4l2" version is intended to be used in-tree alongside V4L, where we implement just the logic that makes sense for a pure V4L environment. The "all" version is intended for use outside of V4L, where we might encounter other possibly "challenging" modules from ivtv or older kernel snapshots (or even the support modules in the standalone snapshot).”h]”hXãtie together and configure various I2C modules as they attach to the I2C bus. There are two versions of this file. The “v4l2†version is intended to be used in-tree alongside V4L, where we implement just the logic that makes sense for a pure V4L environment. The “all†version is intended for use outside of V4L, where we might encounter other possibly “challenging†modules from ivtv or older kernel snapshots (or even the support modules in the standalone snapshot).”…””}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kƒhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÇh´KŠhjzh²hubj~)”}”(hŒöpvrusb2-i2c-cmd-v4l1.[ch] - This module implements generic V4L1 compatible commands to the I2C modules. It is here where state changes inside the pvrusb2 driver are translated into V4L1 commands that are in turn send to the various I2C modules. ”h]”(j„)”}”(hŒ?pvrusb2-i2c-cmd-v4l1.[ch] - This module implements generic V4L1”h]”hŒ?pvrusb2-i2c-cmd-v4l1.[ch] - This module implements generic V4L1”…””}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´KhjYubj”)”}”(hhh]”hÞ)”}”(hŒµcompatible commands to the I2C modules. It is here where state changes inside the pvrusb2 driver are translated into V4L1 commands that are in turn send to the various I2C modules.”h]”hŒµcompatible commands to the I2C modules. It is here where state changes inside the pvrusb2 driver are translated into V4L1 commands that are in turn send to the various I2C modules.”…””}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÇh´Khjzh²hubj~)”}”(hŒöpvrusb2-i2c-cmd-v4l2.[ch] - This module implements generic V4L2 compatible commands to the I2C modules. It is here where state changes inside the pvrusb2 driver are translated into V4L2 commands that are in turn send to the various I2C modules. ”h]”(j„)”}”(hŒ?pvrusb2-i2c-cmd-v4l2.[ch] - This module implements generic V4L2”h]”hŒ?pvrusb2-i2c-cmd-v4l2.[ch] - This module implements generic V4L2”…””}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´K”hjˆubj”)”}”(hhh]”hÞ)”}”(hŒµcompatible commands to the I2C modules. It is here where state changes inside the pvrusb2 driver are translated into V4L2 commands that are in turn send to the various I2C modules.”h]”hŒµcompatible commands to the I2C modules. It is here where state changes inside the pvrusb2 driver are translated into V4L2 commands that are in turn send to the various I2C modules.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K’hjšubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÇh´K”hjzh²hubj~)”}”(hX*pvrusb2-i2c-core.[ch] - This module provides an implementation of a kernel-friendly I2C adaptor driver, through which other external I2C client drivers (e.g. msp3400, tuner, lirc) may connect and operate corresponding chips within the pvrusb2 device. It is through here that other V4L modules can reach into this driver to operate specific pieces (and those modules are in turn driven by glue logic which is coordinated by pvrusb2-hdw, doled out by pvrusb2-context, and then ultimately made available to users through one of the high level interfaces). ”h]”(j„)”}”(hŒCpvrusb2-i2c-core.[ch] - This module provides an implementation of a”h]”hŒCpvrusb2-i2c-core.[ch] - This module provides an implementation of a”…””}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´Kžhj·ubj”)”}”(hhh]”hÞ)”}”(hXåkernel-friendly I2C adaptor driver, through which other external I2C client drivers (e.g. msp3400, tuner, lirc) may connect and operate corresponding chips within the pvrusb2 device. It is through here that other V4L modules can reach into this driver to operate specific pieces (and those modules are in turn driven by glue logic which is coordinated by pvrusb2-hdw, doled out by pvrusb2-context, and then ultimately made available to users through one of the high level interfaces).”h]”hXåkernel-friendly I2C adaptor driver, through which other external I2C client drivers (e.g. msp3400, tuner, lirc) may connect and operate corresponding chips within the pvrusb2 device. It is through here that other V4L modules can reach into this driver to operate specific pieces (and those modules are in turn driven by glue logic which is coordinated by pvrusb2-hdw, doled out by pvrusb2-context, and then ultimately made available to users through one of the high level interfaces).”…””}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K—hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÇh´Kžhjzh²hubj~)”}”(hX!pvrusb2-io.[ch] - This module implements a very low level ring of transfer buffers, required in order to stream data from the device. This module is *very* low level. It only operates the buffers and makes no attempt to define any policy or mechanism for how such buffers might be used. ”h]”(j„)”}”(hŒApvrusb2-io.[ch] - This module implements a very low level ring of”h]”hŒApvrusb2-io.[ch] - This module implements a very low level ring of”…””}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´K¤hjæubj”)”}”(hhh]”hÞ)”}”(hŒÞtransfer buffers, required in order to stream data from the device. This module is *very* low level. It only operates the buffers and makes no attempt to define any policy or mechanism for how such buffers might be used.”h]”(hŒTtransfer buffers, required in order to stream data from the device. This module is ”…””}”(hjûh²hh³Nh´NubhŒemphasis”“”)”}”(hŒ*very*”h]”hŒvery”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûubhŒ„ low level. It only operates the buffers and makes no attempt to define any policy or mechanism for how such buffers might be used.”…””}”(hjûh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¡hjøubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÇh´K¤hjzh²hubj~)”}”(hX€pvrusb2-ioread.[ch] - This module layers on top of pvrusb2-io.[ch] to provide a streaming API usable by a read() system call style of I/O. Right now this is the only layer on top of pvrusb2-io.[ch], however the underlying architecture here was intended to allow for other styles of I/O to be implemented with additional modules, like mmap()'ed buffers or something even more exotic. ”h]”(j„)”}”(hŒBpvrusb2-ioread.[ch] - This module layers on top of pvrusb2-io.[ch]”h]”hŒBpvrusb2-ioread.[ch] - This module layers on top of pvrusb2-io.[ch]”…””}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´K«hj)ubj”)”}”(hhh]”hÞ)”}”(hX<to provide a streaming API usable by a read() system call style of I/O. Right now this is the only layer on top of pvrusb2-io.[ch], however the underlying architecture here was intended to allow for other styles of I/O to be implemented with additional modules, like mmap()'ed buffers or something even more exotic.”h]”hX>to provide a streaming API usable by a read() system call style of I/O. Right now this is the only layer on top of pvrusb2-io.[ch], however the underlying architecture here was intended to allow for other styles of I/O to be implemented with additional modules, like mmap()’ed buffers or something even more exotic.”…””}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K§hj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}h³hÇh´K«hjzh²hubj~)”}”(hŒ}pvrusb2-main.c - This is the top level of the driver. Module level and USB core entry points are here. This is our "main". ”h]”(j„)”}”(hŒCpvrusb2-main.c - This is the top level of the driver. Module level”h]”hŒCpvrusb2-main.c - This is the top level of the driver. Module level”…””}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒh³hÇh´K®hjXubj”)”}”(hhh]”hÞ)”}”(hŒ8and USB core entry points are here. This is our "main".”h]”hŒ