>sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget1/translations/zh_CN/driver-api/media/dtv-frontendmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/zh_TW/driver-api/media/dtv-frontendmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/it_IT/driver-api/media/dtv-frontendmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/ja_JP/driver-api/media/dtv-frontendmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/ko_KR/driver-api/media/dtv-frontendmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/sp_SP/driver-api/media/dtv-frontendmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhK/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend.rsthKubhsection)}(hhh](htitle)}(hDigital TV Frontend kABIh]hDigital TV Frontend kABI}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hDigital TV Frontendh]hDigital TV Frontend}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hX7The Digital TV Frontend kABI defines a driver-internal interface for registering low-level, hardware specific driver to a hardware independent frontend layer. It is only of interest for Digital TV device driver writers. The header file for this API is named ``dvb_frontend.h`` and located in ``include/media/``.h](hXThe Digital TV Frontend kABI defines a driver-internal interface for registering low-level, hardware specific driver to a hardware independent frontend layer. It is only of interest for Digital TV device driver writers. The header file for this API is named }(hhhhhNhNubhliteral)}(h``dvb_frontend.h``h]hdvb_frontend.h}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh and located in }(hhhhhNhNubh)}(h``include/media/``h]hinclude/media/}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hhh](h)}(hDemodulator driverh]hDemodulator driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hXXThe demodulator driver is responsible for talking with the decoding part of the hardware. Such driver should implement :c:type:`dvb_frontend_ops`, which tells what type of digital TV standards are supported, and points to a series of functions that allow the DVB core to command the hardware via the code under ``include/media/dvb_frontend.c``.h](hwThe demodulator driver is responsible for talking with the decoding part of the hardware. Such driver should implement }(hj!hhhNhNubh)}(h:c:type:`dvb_frontend_ops`h]h)}(hj+h]hdvb_frontend_ops}(hj-hhhNhNubah}(h]h ](xrefcc-typeeh"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&]refdocdriver-api/media/dtv-frontend refdomainj8reftypetype refexplicitrefwarn reftargetdvb_frontend_opsuh1hhhhKhj!ubh, which tells what type of digital TV standards are supported, and points to a series of functions that allow the DVB core to command the hardware via the code under }(hj!hhhNhNubh)}(h ``include/media/dvb_frontend.c``h]hinclude/media/dvb_frontend.c}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!ubh.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h9A typical example of such struct in a driver ``foo`` is::h](h-A typical example of such struct in a driver }(hjhhhhNhNubh)}(h``foo``h]hfoo}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhubh is:}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh literal_block)}(hXstatic struct dvb_frontend_ops foo_ops = { .delsys = { SYS_DVBT, SYS_DVBT2, SYS_DVBC_ANNEX_A }, .info = { .name = "foo DVB-T/T2/C driver", .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 | FE_CAN_QAM_128 | FE_CAN_QAM_256 | FE_CAN_QAM_AUTO | FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_HIERARCHY_AUTO | FE_CAN_MUTE_TS | FE_CAN_2G_MODULATION, .frequency_min = 42000000, /* Hz */ .frequency_max = 1002000000, /* Hz */ .symbol_rate_min = 870000, .symbol_rate_max = 11700000 }, .init = foo_init, .sleep = foo_sleep, .release = foo_release, .set_frontend = foo_set_frontend, .get_frontend = foo_get_frontend, .read_status = foo_get_status_and_stats, .tune = foo_tune, .i2c_gate_ctrl = foo_i2c_gate_ctrl, .get_frontend_algo = foo_get_algo, };h]hXstatic struct dvb_frontend_ops foo_ops = { .delsys = { SYS_DVBT, SYS_DVBT2, SYS_DVBC_ANNEX_A }, .info = { .name = "foo DVB-T/T2/C driver", .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 | FE_CAN_QAM_128 | FE_CAN_QAM_256 | FE_CAN_QAM_AUTO | FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_HIERARCHY_AUTO | FE_CAN_MUTE_TS | FE_CAN_2G_MODULATION, .frequency_min = 42000000, /* Hz */ .frequency_max = 1002000000, /* Hz */ .symbol_rate_min = 870000, .symbol_rate_max = 11700000 }, .init = foo_init, .sleep = foo_sleep, .release = foo_release, .set_frontend = foo_set_frontend, .get_frontend = foo_get_frontend, .read_status = foo_get_status_and_stats, .tune = foo_tune, .i2c_gate_ctrl = foo_i2c_gate_ctrl, .get_frontend_algo = foo_get_algo, };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubh)}(hdA typical example of such struct in a driver ``bar`` meant to be used on Satellite TV reception is::h](h-A typical example of such struct in a driver }(hjhhhNhNubh)}(h``bar``h]hbar}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh/ meant to be used on Satellite TV reception is:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK@hjhhubj)}(hXqstatic const struct dvb_frontend_ops bar_ops = { .delsys = { SYS_DVBS, SYS_DVBS2 }, .info = { .name = "Bar DVB-S/S2 demodulator", .frequency_min = 500000, /* KHz */ .frequency_max = 2500000, /* KHz */ .frequency_stepsize = 0, .symbol_rate_min = 1000000, .symbol_rate_max = 45000000, .symbol_rate_tolerance = 500, .caps = FE_CAN_INVERSION_AUTO | FE_CAN_FEC_AUTO | FE_CAN_QPSK, }, .init = bar_init, .sleep = bar_sleep, .release = bar_release, .set_frontend = bar_set_frontend, .get_frontend = bar_get_frontend, .read_status = bar_get_status_and_stats, .i2c_gate_ctrl = bar_i2c_gate_ctrl, .get_frontend_algo = bar_get_algo, .tune = bar_tune, /* Satellite-specific */ .diseqc_send_master_cmd = bar_send_diseqc_msg, .diseqc_send_burst = bar_send_burst, .set_tone = bar_set_tone, .set_voltage = bar_set_voltage, };h]hXqstatic const struct dvb_frontend_ops bar_ops = { .delsys = { SYS_DVBS, SYS_DVBS2 }, .info = { .name = "Bar DVB-S/S2 demodulator", .frequency_min = 500000, /* KHz */ .frequency_max = 2500000, /* KHz */ .frequency_stepsize = 0, .symbol_rate_min = 1000000, .symbol_rate_max = 45000000, .symbol_rate_tolerance = 500, .caps = FE_CAN_INVERSION_AUTO | FE_CAN_FEC_AUTO | FE_CAN_QPSK, }, .init = bar_init, .sleep = bar_sleep, .release = bar_release, .set_frontend = bar_set_frontend, .get_frontend = bar_get_frontend, .read_status = bar_get_status_and_stats, .i2c_gate_ctrl = bar_i2c_gate_ctrl, .get_frontend_algo = bar_get_algo, .tune = bar_tune, /* Satellite-specific */ .diseqc_send_master_cmd = bar_send_diseqc_msg, .diseqc_send_burst = bar_send_burst, .set_tone = bar_set_tone, .set_voltage = bar_set_voltage, };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKChjhhubhnote)}(hX#) For satellite digital TV standards (DVB-S, DVB-S2, ISDB-S), the frequencies are specified in kHz, while, for terrestrial and cable standards, they're specified in Hz. Due to that, if the same frontend supports both types, you'll need to have two separate :c:type:`dvb_frontend_ops` structures, one for each standard. #) The ``.i2c_gate_ctrl`` field is present only when the hardware has allows controlling an I2C gate (either directly of via some GPIO pin), in order to remove the tuner from the I2C bus after a channel is tuned. #) All new drivers should implement the :ref:`DVBv5 statistics ` via ``.read_status``. Yet, there are a number of callbacks meant to get statistics for signal strength, S/N and UCB. Those are there to provide backward compatibility with legacy applications that don't support the DVBv5 API. Implementing those callbacks are optional. Those callbacks may be removed in the future, after we have all existing drivers supporting DVBv5 stats. #) Other callbacks are required for satellite TV standards, in order to control LNBf and DiSEqC: ``.diseqc_send_master_cmd``, ``.diseqc_send_burst``, ``.set_tone``, ``.set_voltage``.h]henumerated_list)}(hhh](h list_item)}(hX<For satellite digital TV standards (DVB-S, DVB-S2, ISDB-S), the frequencies are specified in kHz, while, for terrestrial and cable standards, they're specified in Hz. Due to that, if the same frontend supports both types, you'll need to have two separate :c:type:`dvb_frontend_ops` structures, one for each standard.h]h)}(hX<For satellite digital TV standards (DVB-S, DVB-S2, ISDB-S), the frequencies are specified in kHz, while, for terrestrial and cable standards, they're specified in Hz. Due to that, if the same frontend supports both types, you'll need to have two separate :c:type:`dvb_frontend_ops` structures, one for each standard.h](hXFor satellite digital TV standards (DVB-S, DVB-S2, ISDB-S), the frequencies are specified in kHz, while, for terrestrial and cable standards, they’re specified in Hz. Due to that, if the same frontend supports both types, you’ll need to have two separate }(hjhhhNhNubh)}(h:c:type:`dvb_frontend_ops`h]h)}(hjh]hdvb_frontend_ops}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjJdvb_frontend_opsuh1hhhhKdhjubh# structures, one for each standard.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKdhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hThe ``.i2c_gate_ctrl`` field is present only when the hardware has allows controlling an I2C gate (either directly of via some GPIO pin), in order to remove the tuner from the I2C bus after a channel is tuned.h]h)}(hThe ``.i2c_gate_ctrl`` field is present only when the hardware has allows controlling an I2C gate (either directly of via some GPIO pin), in order to remove the tuner from the I2C bus after a channel is tuned.h](hThe }(hjhhhNhNubh)}(h``.i2c_gate_ctrl``h]h.i2c_gate_ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh field is present only when the hardware has allows controlling an I2C gate (either directly of via some GPIO pin), in order to remove the tuner from the I2C bus after a channel is tuned.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKihjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hXAll new drivers should implement the :ref:`DVBv5 statistics ` via ``.read_status``. Yet, there are a number of callbacks meant to get statistics for signal strength, S/N and UCB. Those are there to provide backward compatibility with legacy applications that don't support the DVBv5 API. Implementing those callbacks are optional. Those callbacks may be removed in the future, after we have all existing drivers supporting DVBv5 stats.h]h)}(hXAll new drivers should implement the :ref:`DVBv5 statistics ` via ``.read_status``. Yet, there are a number of callbacks meant to get statistics for signal strength, S/N and UCB. Those are there to provide backward compatibility with legacy applications that don't support the DVBv5 API. Implementing those callbacks are optional. Those callbacks may be removed in the future, after we have all existing drivers supporting DVBv5 stats.h](h%All new drivers should implement the }(hj<hhhNhNubh)}(h%:ref:`DVBv5 statistics `h]hinline)}(hjFh]hDVBv5 statistics}(hjJhhhNhNubah}(h]h ](j7stdstd-refeh"]h$]h&]uh1jHhjDubah}(h]h ]h"]h$]h&]refdocjD refdomainjTreftyperef refexplicitrefwarnjJ dvbv5_statsuh1hhhhKmhj<ubh via }(hj<hhhNhNubh)}(h``.read_status``h]h .read_status}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<ubhXc. Yet, there are a number of callbacks meant to get statistics for signal strength, S/N and UCB. Those are there to provide backward compatibility with legacy applications that don’t support the DVBv5 API. Implementing those callbacks are optional. Those callbacks may be removed in the future, after we have all existing drivers supporting DVBv5 stats.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKmhj8ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hOther callbacks are required for satellite TV standards, in order to control LNBf and DiSEqC: ``.diseqc_send_master_cmd``, ``.diseqc_send_burst``, ``.set_tone``, ``.set_voltage``.h]h)}(hOther callbacks are required for satellite TV standards, in order to control LNBf and DiSEqC: ``.diseqc_send_master_cmd``, ``.diseqc_send_burst``, ``.set_tone``, ``.set_voltage``.h](h^Other callbacks are required for satellite TV standards, in order to control LNBf and DiSEqC: }(hjhhhNhNubh)}(h``.diseqc_send_master_cmd``h]h.diseqc_send_master_cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, }(hjhhhNhNubh)}(h``.diseqc_send_burst``h]h.diseqc_send_burst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, }(hjhhhNhNubh)}(h ``.set_tone``h]h .set_tone}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, }hjsbh)}(h``.set_voltage``h]h .set_voltage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjhhhNhNubhsubstitution_definition)}(h.. |delta| unicode:: U+00394 h]hΔ}hjsbah}(h]h ]h"]deltaah$]h&]uh1jhhhKyhjhhubh)}(hThe ``include/media/dvb_frontend.c`` has a kernel thread which is responsible for tuning the device. It supports multiple algorithms to detect a channel, as defined at enum :c:func:`dvbfe_algo`.h](hThe }(hj hhhNhNubh)}(h ``include/media/dvb_frontend.c``h]hinclude/media/dvb_frontend.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh has a kernel thread which is responsible for tuning the device. It supports multiple algorithms to detect a channel, as defined at enum }(hj hhhNhNubh)}(h:c:func:`dvbfe_algo`h]h)}(hj&h]h dvbfe_algo()}(hj(hhhNhNubah}(h]h ](j7j8c-funceh"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypefunc refexplicitrefwarnjJ dvbfe_algouh1hhhhK{hj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK{hjhhubh)}(hXThe algorithm to be used is obtained via ``.get_frontend_algo``. If the driver doesn't fill its field at struct dvb_frontend_ops, it will default to ``DVBFE_ALGO_SW``, meaning that the dvb-core will do a zigzag when tuning, e. g. it will try first to use the specified center frequency ``f``, then, it will do ``f`` + |delta|, ``f`` - |delta|, ``f`` + 2 x |delta|, ``f`` - 2 x |delta| and so on.h](h)The algorithm to be used is obtained via }(hjMhhhNhNubh)}(h``.get_frontend_algo``h]h.get_frontend_algo}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMubhX. If the driver doesn’t fill its field at struct dvb_frontend_ops, it will default to }(hjMhhhNhNubh)}(h``DVBFE_ALGO_SW``h]h DVBFE_ALGO_SW}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMubhx, meaning that the dvb-core will do a zigzag when tuning, e. g. it will try first to use the specified center frequency }(hjMhhhNhNubh)}(h``f``h]hf}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMubh, then, it will do }(hjMhhhNhNubh)}(h``f``h]hf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMubh + }(hjMhhhNhNubhΔ}(hjMhhhNhNubh, }(hjMhhhNhNubh)}(h``f``h]hf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMubh - }(hjMhhhNhNubhΔ}(hjMhhhNhNubh, }hjMsbh)}(h``f``h]hf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMubh + 2 x }(hjMhhhNhNubhΔ}(hjMhhhNhNubh, }(hjMhhhNhNubh)}(h``f``h]hf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMubh - 2 x }(hjMhhhNhNubhΔ}(hjMhhhNhNubh and so on.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hIf the hardware has internally a some sort of zigzag algorithm, you should define a ``.get_frontend_algo`` function that would return ``DVBFE_ALGO_HW``.h](hTIf the hardware has internally a some sort of zigzag algorithm, you should define a }(hjhhhNhNubh)}(h``.get_frontend_algo``h]h.get_frontend_algo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh function that would return }(hjhhhNhNubh)}(h``DVBFE_ALGO_HW``h]h DVBFE_ALGO_HW}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hX(The core frontend support also supports a third type (``DVBFE_ALGO_CUSTOM``), in order to allow the driver to define its own hardware-assisted algorithm. Very few hardware need to use it nowadays. Using ``DVBFE_ALGO_CUSTOM`` require to provide other function callbacks at struct dvb_frontend_ops.h]h)}(hX(The core frontend support also supports a third type (``DVBFE_ALGO_CUSTOM``), in order to allow the driver to define its own hardware-assisted algorithm. Very few hardware need to use it nowadays. Using ``DVBFE_ALGO_CUSTOM`` require to provide other function callbacks at struct dvb_frontend_ops.h](h6The core frontend support also supports a third type (}(hj/hhhNhNubh)}(h``DVBFE_ALGO_CUSTOM``h]hDVBFE_ALGO_CUSTOM}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ubh), in order to allow the driver to define its own hardware-assisted algorithm. Very few hardware need to use it nowadays. Using }(hj/hhhNhNubh)}(h``DVBFE_ALGO_CUSTOM``h]hDVBFE_ALGO_CUSTOM}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ubhH require to provide other function callbacks at struct dvb_frontend_ops.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj+ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]demodulator-driverah ]h"]demodulator driverah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h.Attaching frontend driver to the bridge driverh]h.Attaching frontend driver to the bridge driver}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohhhhhKubh)}(hXBefore using the Digital TV frontend core, the bridge driver should attach the frontend demod, tuner and SEC devices and call :c:func:`dvb_register_frontend()`, in order to register the new frontend at the subsystem. At device detach/removal, the bridge driver should call :c:func:`dvb_unregister_frontend()` to remove the frontend from the core and then :c:func:`dvb_frontend_detach()` to free the memory allocated by the frontend drivers.h](h~Before using the Digital TV frontend core, the bridge driver should attach the frontend demod, tuner and SEC devices and call }(hjhhhNhNubh)}(h!:c:func:`dvb_register_frontend()`h]h)}(hjh]hdvb_register_frontend()}(hjhhhNhNubah}(h]h ](j7j8c-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypefunc refexplicitrefwarnjJdvb_register_frontenduh1hhhhKhjubhr, in order to register the new frontend at the subsystem. At device detach/removal, the bridge driver should call }(hjhhhNhNubh)}(h#:c:func:`dvb_unregister_frontend()`h]h)}(hjh]hdvb_unregister_frontend()}(hjhhhNhNubah}(h]h ](j7j8c-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypefunc refexplicitrefwarnjJdvb_unregister_frontenduh1hhhhKhjubh/ to remove the frontend from the core and then }(hjhhhNhNubh)}(h:c:func:`dvb_frontend_detach()`h]h)}(hjh]hdvb_frontend_detach()}(hjhhhNhNubah}(h]h ](j7j8c-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypefunc refexplicitrefwarnjJdvb_frontend_detachuh1hhhhKhjubh6 to free the memory allocated by the frontend drivers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjohhubh)}(hThe drivers should also call :c:func:`dvb_frontend_suspend()` as part of their handler for the :c:type:`device_driver`.\ ``suspend()``, and :c:func:`dvb_frontend_resume()` as part of their handler for :c:type:`device_driver`.\ ``resume()``.h](hThe drivers should also call }(hjhhhNhNubh)}(h :c:func:`dvb_frontend_suspend()`h]h)}(hjh]hdvb_frontend_suspend()}(hjhhhNhNubah}(h]h ](j7j8c-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypefunc refexplicitrefwarnjJdvb_frontend_suspenduh1hhhhKhjubh" as part of their handler for the }(hjhhhNhNubh)}(h:c:type:`device_driver`h]h)}(hj$h]h device_driver}(hj&hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjJ device_driveruh1hhhhKhjubh. }(hjhhhNhNubh)}(h ``suspend()``h]h suspend()}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, and }(hjhhhNhNubh)}(h:c:func:`dvb_frontend_resume()`h]h)}(hjYh]hdvb_frontend_resume()}(hj[hhhNhNubah}(h]h ](j7j8c-funceh"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypefunc refexplicitrefwarnjJdvb_frontend_resumeuh1hhhhKhjubh as part of their handler for }(hjhhhNhNubh)}(h:c:type:`device_driver`h]h)}(hj|h]h device_driver}(hj~hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjJ device_driveruh1hhhhKhjubh. }hjsbh)}(h ``resume()``h]hresume()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjohhubh)}(hIA few other optional functions are provided to handle some special cases.h]hIA few other optional functions are provided to handle some special cases.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjohhubhtarget)}(h.. _dvbv5_stats:h]h}(h]h ]h"]h$]h&]refid dvbv5-statsuh1jhKhjohhhhubeh}(h].attaching-frontend-driver-to-the-bridge-driverah ]h"].attaching frontend driver to the bridge driverah$]h&]uh1hhhhhhhhKubeh}(h]digital-tv-frontendah ]h"]digital tv frontendah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hDigital TV Frontend statisticsh]hDigital TV Frontend statistics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h Introductionh]h Introduction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hDigital TV frontends provide a range of :ref:`statistics ` meant to help tuning the device and measuring the quality of service.h](h(Digital TV frontends provide a range of }(hjhhhNhNubh)}(h,:ref:`statistics `h]jI)}(hj h]h statistics}(hjhhhNhNubah}(h]h ](j7stdstd-refeh"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&]refdocjD refdomainjreftyperef refexplicitrefwarnjJfrontend-stat-propertiesuh1hhhhKhjubhF meant to help tuning the device and measuring the quality of service.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXFor each statistics measurement, the driver should set the type of scale used, or ``FE_SCALE_NOT_AVAILABLE`` if the statistics is not available on a given time. Drivers should also provide the number of statistics for each type. that's usually 1 for most video standards [#f2]_.h](hRFor each statistics measurement, the driver should set the type of scale used, or }(hj5hhhNhNubh)}(h``FE_SCALE_NOT_AVAILABLE``h]hFE_SCALE_NOT_AVAILABLE}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubh if the statistics is not available on a given time. Drivers should also provide the number of statistics for each type. that’s usually 1 for most video standards }(hj5hhhNhNubhfootnote_reference)}(h[#f2]_h]h1}(hjQhhhNhNubah}(h]id1ah ]h"]h$]h&]autoKjf2docnamejDuh1jOhj5resolvedKubh.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hDrivers should initialize each statistic counters with length and scale at its init code. For example, if the frontend provides signal strength, it should have, on its init code::h]hDrivers should initialize each statistic counters with length and scale at its init code. For example, if the frontend provides signal strength, it should have, on its init code:}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hstruct dtv_frontend_properties *c = &state->fe.dtv_property_cache; c->strength.len = 1; c->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE;h]hstruct dtv_frontend_properties *c = &state->fe.dtv_property_cache; c->strength.len = 1; c->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE;}hj|sbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubh)}(h5And, when the statistics got updated, set the scale::h]h4And, when the statistics got updated, set the scale:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hTc->strength.stat[0].scale = FE_SCALE_DECIBEL; c->strength.stat[0].uvalue = strength;h]hTc->strength.stat[0].scale = FE_SCALE_DECIBEL; c->strength.stat[0].uvalue = strength;}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubhfootnote)}(hXFor ISDB-T, it may provide both a global statistics and a per-layer set of statistics. On such cases, len should be equal to 4. The first value corresponds to the global stat; the other ones to each layer, e. g.: - c->cnr.stat[0] for global S/N carrier ratio, - c->cnr.stat[1] for Layer A S/N carrier ratio, - c->cnr.stat[2] for layer B S/N carrier ratio, - c->cnr.stat[3] for layer C S/N carrier ratio. h](hlabel)}(hhh]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhNhNubh)}(hFor ISDB-T, it may provide both a global statistics and a per-layer set of statistics. On such cases, len should be equal to 4. The first value corresponds to the global stat; the other ones to each layer, e. g.:h]hFor ISDB-T, it may provide both a global statistics and a per-layer set of statistics. On such cases, len should be equal to 4. The first value corresponds to the global stat; the other ones to each layer, e. g.:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubh bullet_list)}(hhh](j)}(h,c->cnr.stat[0] for global S/N carrier ratio,h]h)}(hjh]h,c->cnr.stat[0] for global S/N carrier ratio,}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h-c->cnr.stat[1] for Layer A S/N carrier ratio,h]h)}(hjh]h-c->cnr.stat[1] for Layer A S/N carrier ratio,}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h-c->cnr.stat[2] for layer B S/N carrier ratio,h]h)}(hjh]h-c->cnr.stat[2] for layer B S/N carrier ratio,}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h.c->cnr.stat[3] for layer C S/N carrier ratio. h]h)}(h-c->cnr.stat[3] for layer C S/N carrier ratio.h]h-c->cnr.stat[3] for layer C S/N carrier ratio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhKhjubeh}(h]jaah ]h"]f2ah$]h&]j[aj`KjbjDuh1jhhhKhjhhubj)}(htPlease prefer to use ``FE_SCALE_DECIBEL`` instead of ``FE_SCALE_RELATIVE`` for signal strength and CNR measurements.h]h)}(htPlease prefer to use ``FE_SCALE_DECIBEL`` instead of ``FE_SCALE_RELATIVE`` for signal strength and CNR measurements.h](hPlease prefer to use }(hj>hhhNhNubh)}(h``FE_SCALE_DECIBEL``h]hFE_SCALE_DECIBEL}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>ubh instead of }(hj>hhhNhNubh)}(h``FE_SCALE_RELATIVE``h]hFE_SCALE_RELATIVE}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>ubh* for signal strength and CNR measurements.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj:ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hGroups of statisticsh]hGroups of statistics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hhhhhKubh)}(h;There are several groups of statistics currently supported:h]h;There are several groups of statistics currently supported:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj~hhubhdefinition_list)}(hhh](hdefinition_list_item)}(hXSignal strength (:ref:`DTV-STAT-SIGNAL-STRENGTH`) - Measures the signal strength level at the analog part of the tuner or demod. - Typically obtained from the gain applied to the tuner and/or frontend in order to detect the carrier. When no carrier is detected, the gain is at the maximum value (so, strength is on its minimal). - As the gain is visible through the set of registers that adjust the gain, typically, this statistics is always available [#f3]_. - Drivers should try to make it available all the times, as these statistics can be used when adjusting an antenna position and to check for troubles at the cabling. .. [#f3] On a few devices, the gain keeps floating if there is no carrier. On such devices, strength report should check first if carrier is detected at the tuner (``FE_HAS_CARRIER``, see :c:type:`fe_status`), and otherwise return the lowest possible value. h](hterm)}(h1Signal strength (:ref:`DTV-STAT-SIGNAL-STRENGTH`)h](hSignal strength (}(hjhhhNhNubh)}(h:ref:`DTV-STAT-SIGNAL-STRENGTH`h]jI)}(hjh]hDTV-STAT-SIGNAL-STRENGTH}(hjhhhNhNubah}(h]h ](j7stdstd-refeh"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&]refdocjD refdomainjreftyperef refexplicitrefwarnjJdtv-stat-signal-strengthuh1hhhhKhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubh definition)}(hhh](j)}(hhh](j)}(hMMeasures the signal strength level at the analog part of the tuner or demod. h]h)}(hLMeasures the signal strength level at the analog part of the tuner or demod.h]hLMeasures the signal strength level at the analog part of the tuner or demod.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hTypically obtained from the gain applied to the tuner and/or frontend in order to detect the carrier. When no carrier is detected, the gain is at the maximum value (so, strength is on its minimal). h]h)}(hTypically obtained from the gain applied to the tuner and/or frontend in order to detect the carrier. When no carrier is detected, the gain is at the maximum value (so, strength is on its minimal).h]hTypically obtained from the gain applied to the tuner and/or frontend in order to detect the carrier. When no carrier is detected, the gain is at the maximum value (so, strength is on its minimal).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hAs the gain is visible through the set of registers that adjust the gain, typically, this statistics is always available [#f3]_. h]h)}(hAs the gain is visible through the set of registers that adjust the gain, typically, this statistics is always available [#f3]_.h](hyAs the gain is visible through the set of registers that adjust the gain, typically, this statistics is always available }(hjhhhNhNubjP)}(h[#f3]_h]h2}(hj hhhNhNubah}(h]id2ah ]h"]h$]h&]j`Kjf3jbjDuh1jOhjjcKubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hDrivers should try to make it available all the times, as these statistics can be used when adjusting an antenna position and to check for troubles at the cabling. h]h)}(hDrivers should try to make it available all the times, as these statistics can be used when adjusting an antenna position and to check for troubles at the cabling.h]hDrivers should try to make it available all the times, as these statistics can be used when adjusting an antenna position and to check for troubles at the cabling.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj@ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j1j2uh1jhhhKhjubj)}(hOn a few devices, the gain keeps floating if there is no carrier. On such devices, strength report should check first if carrier is detected at the tuner (``FE_HAS_CARRIER``, see :c:type:`fe_status`), and otherwise return the lowest possible value. h](j)}(hhh]h2}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^hhhNhNubh)}(hOn a few devices, the gain keeps floating if there is no carrier. On such devices, strength report should check first if carrier is detected at the tuner (``FE_HAS_CARRIER``, see :c:type:`fe_status`), and otherwise return the lowest possible value.h](hOn a few devices, the gain keeps floating if there is no carrier. On such devices, strength report should check first if carrier is detected at the tuner (}(hjohhhNhNubh)}(h``FE_HAS_CARRIER``h]hFE_HAS_CARRIER}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoubh, see }(hjohhhNhNubh)}(h:c:type:`fe_status`h]h)}(hjh]h fe_status}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjJ fe_statusuh1hhhhKhjoubh2), and otherwise return the lowest possible value.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj^ubeh}(h]j/ah ]h"]f3ah$]h&]j*aj`KjbjDuh1jhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubj)}(hXFCarrier Signal to Noise ratio (:ref:`DTV-STAT-CNR`) - Signal to Noise ratio for the main carrier. - Signal to Noise measurement depends on the device. On some hardware, it is available when the main carrier is detected. On those hardware, CNR measurement usually comes from the tuner (e. g. after ``FE_HAS_CARRIER``, see :c:type:`fe_status`). On other devices, it requires inner FEC decoding, as the frontend measures it indirectly from other parameters (e. g. after ``FE_HAS_VITERBI``, see :c:type:`fe_status`). Having it available after inner FEC is more common. h](j)}(h3Carrier Signal to Noise ratio (:ref:`DTV-STAT-CNR`)h](hCarrier Signal to Noise ratio (}(hjhhhNhNubh)}(h:ref:`DTV-STAT-CNR`h]jI)}(hjh]h DTV-STAT-CNR}(hjhhhNhNubah}(h]h ](j7stdstd-refeh"]h$]h&]uh1jHhjubah}(h]h ]h"]h$]h&]refdocjD refdomainjreftyperef refexplicitrefwarnjJ dtv-stat-cnruh1hhhhKhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubj)}(hhh]j)}(hhh](j)}(h,Signal to Noise ratio for the main carrier. h]h)}(h+Signal to Noise ratio for the main carrier.h]h+Signal to Noise ratio for the main carrier.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hXSignal to Noise measurement depends on the device. On some hardware, it is available when the main carrier is detected. On those hardware, CNR measurement usually comes from the tuner (e. g. after ``FE_HAS_CARRIER``, see :c:type:`fe_status`). On other devices, it requires inner FEC decoding, as the frontend measures it indirectly from other parameters (e. g. after ``FE_HAS_VITERBI``, see :c:type:`fe_status`). Having it available after inner FEC is more common. h](h)}(hSignal to Noise measurement depends on the device. On some hardware, it is available when the main carrier is detected. On those hardware, CNR measurement usually comes from the tuner (e. g. after ``FE_HAS_CARRIER``, see :c:type:`fe_status`).h](hSignal to Noise measurement depends on the device. On some hardware, it is available when the main carrier is detected. On those hardware, CNR measurement usually comes from the tuner (e. g. after }(hj hhhNhNubh)}(h``FE_HAS_CARRIER``h]hFE_HAS_CARRIER}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh, see }(hj hhhNhNubh)}(h:c:type:`fe_status`h]h)}(hj9 h]h fe_status}(hj; hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj7 ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjJ fe_statusuh1hhhhKhj ubh).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubh)}(hOn other devices, it requires inner FEC decoding, as the frontend measures it indirectly from other parameters (e. g. after ``FE_HAS_VITERBI``, see :c:type:`fe_status`).h](h|On other devices, it requires inner FEC decoding, as the frontend measures it indirectly from other parameters (e. g. after }(hj` hhhNhNubh)}(h``FE_HAS_VITERBI``h]hFE_HAS_VITERBI}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj` ubh, see }(hj` hhhNhNubh)}(h:c:type:`fe_status`h]h)}(hj| h]h fe_status}(hj~ hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjz ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjJ fe_statusuh1hhhhKhj` ubh).}(hj` hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubh)}(h3Having it available after inner FEC is more common.h]h3Having it available after inner FEC is more common.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j1j2uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hXBit counts post-FEC (:ref:`DTV-STAT-POST-ERROR-BIT-COUNT` and :ref:`DTV-STAT-POST-TOTAL-BIT-COUNT`) - Those counters measure the number of bits and bit errors after the forward error correction (FEC) on the inner coding block (after Viterbi, LDPC or other inner code). - Due to its nature, those statistics depend on full coding lock (e. g. after ``FE_HAS_SYNC`` or after ``FE_HAS_LOCK``, see :c:type:`fe_status`). h](j)}(hcBit counts post-FEC (:ref:`DTV-STAT-POST-ERROR-BIT-COUNT` and :ref:`DTV-STAT-POST-TOTAL-BIT-COUNT`)h](hBit counts post-FEC (}(hj hhhNhNubh)}(h$:ref:`DTV-STAT-POST-ERROR-BIT-COUNT`h]jI)}(hj h]hDTV-STAT-POST-ERROR-BIT-COUNT}(hj hhhNhNubah}(h]h ](j7stdstd-refeh"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&]refdocjD refdomainj reftyperef refexplicitrefwarnjJdtv-stat-post-error-bit-countuh1hhhhKhj ubh and }(hj hhhNhNubh)}(h$:ref:`DTV-STAT-POST-TOTAL-BIT-COUNT`h]jI)}(hj h]hDTV-STAT-POST-TOTAL-BIT-COUNT}(hj hhhNhNubah}(h]h ](j7stdstd-refeh"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&]refdocjD refdomainj reftyperef refexplicitrefwarnjJdtv-stat-post-total-bit-countuh1hhhhKhj ubh)}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj ubj)}(hhh]j)}(hhh](j)}(hThose counters measure the number of bits and bit errors after the forward error correction (FEC) on the inner coding block (after Viterbi, LDPC or other inner code). h]h)}(hThose counters measure the number of bits and bit errors after the forward error correction (FEC) on the inner coding block (after Viterbi, LDPC or other inner code).h]hThose counters measure the number of bits and bit errors after the forward error correction (FEC) on the inner coding block (after Viterbi, LDPC or other inner code).}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj) ubah}(h]h ]h"]h$]h&]uh1jhj& ubj)}(hDue to its nature, those statistics depend on full coding lock (e. g. after ``FE_HAS_SYNC`` or after ``FE_HAS_LOCK``, see :c:type:`fe_status`). h]h)}(hDue to its nature, those statistics depend on full coding lock (e. g. after ``FE_HAS_SYNC`` or after ``FE_HAS_LOCK``, see :c:type:`fe_status`).h](hLDue to its nature, those statistics depend on full coding lock (e. g. after }(hjE hhhNhNubh)}(h``FE_HAS_SYNC``h]h FE_HAS_SYNC}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE ubh or after }(hjE hhhNhNubh)}(h``FE_HAS_LOCK``h]h FE_HAS_LOCK}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE ubh, see }(hjE hhhNhNubh)}(h:c:type:`fe_status`h]h)}(hjs h]h fe_status}(hju hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjq ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjJ fe_statusuh1hhhhKhjE ubh).}(hjE hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjA ubah}(h]h ]h"]h$]h&]uh1jhj& ubeh}(h]h ]h"]h$]h&]j1j2uh1jhhhKhj# ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hXBit counts pre-FEC (:ref:`DTV-STAT-PRE-ERROR-BIT-COUNT` and :ref:`DTV-STAT-PRE-TOTAL-BIT-COUNT`) - Those counters measure the number of bits and bit errors before the forward error correction (FEC) on the inner coding block (before Viterbi, LDPC or other inner code). - Not all frontends provide this kind of statistics. - Due to its nature, those statistics depend on inner coding lock (e. g. after ``FE_HAS_VITERBI``, see :c:type:`fe_status`). h](j)}(h`Bit counts pre-FEC (:ref:`DTV-STAT-PRE-ERROR-BIT-COUNT` and :ref:`DTV-STAT-PRE-TOTAL-BIT-COUNT`)h](hBit counts pre-FEC (}(hj hhhNhNubh)}(h#:ref:`DTV-STAT-PRE-ERROR-BIT-COUNT`h]jI)}(hj h]hDTV-STAT-PRE-ERROR-BIT-COUNT}(hj hhhNhNubah}(h]h ](j7stdstd-refeh"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&]refdocjD refdomainj reftyperef refexplicitrefwarnjJdtv-stat-pre-error-bit-countuh1hhhhMhj ubh and }(hj hhhNhNubh)}(h#:ref:`DTV-STAT-PRE-TOTAL-BIT-COUNT`h]jI)}(hj h]hDTV-STAT-PRE-TOTAL-BIT-COUNT}(hj hhhNhNubah}(h]h ](j7stdstd-refeh"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&]refdocjD refdomainj reftyperef refexplicitrefwarnjJdtv-stat-pre-total-bit-countuh1hhhhMhj ubh)}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj ubj)}(hhh]j)}(hhh](j)}(hThose counters measure the number of bits and bit errors before the forward error correction (FEC) on the inner coding block (before Viterbi, LDPC or other inner code). h]h)}(hThose counters measure the number of bits and bit errors before the forward error correction (FEC) on the inner coding block (before Viterbi, LDPC or other inner code).h]hThose counters measure the number of bits and bit errors before the forward error correction (FEC) on the inner coding block (before Viterbi, LDPC or other inner code).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h3Not all frontends provide this kind of statistics. h]h)}(h2Not all frontends provide this kind of statistics.h]h2Not all frontends provide this kind of statistics.}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj* ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h{Due to its nature, those statistics depend on inner coding lock (e. g. after ``FE_HAS_VITERBI``, see :c:type:`fe_status`). h]h)}(hzDue to its nature, those statistics depend on inner coding lock (e. g. after ``FE_HAS_VITERBI``, see :c:type:`fe_status`).h](hMDue to its nature, those statistics depend on inner coding lock (e. g. after }(hjF hhhNhNubh)}(h``FE_HAS_VITERBI``h]hFE_HAS_VITERBI}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF ubh, see }(hjF hhhNhNubh)}(h:c:type:`fe_status`h]h)}(hjb h]h fe_status}(hjd hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj` ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjJ fe_statusuh1hhhhMhjF ubh).}(hjF hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjB ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]j1j2uh1jhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(hXBlock counts (:ref:`DTV-STAT-ERROR-BLOCK-COUNT` and :ref:`DTV-STAT-TOTAL-BLOCK-COUNT`) - Those counters measure the number of blocks and block errors after the forward error correction (FEC) on the inner coding block (before Viterbi, LDPC or other inner code). - Due to its nature, those statistics depend on full coding lock (e. g. after ``FE_HAS_SYNC`` or after ``FE_HAS_LOCK``, see :c:type:`fe_status`). h](j)}(hVBlock counts (:ref:`DTV-STAT-ERROR-BLOCK-COUNT` and :ref:`DTV-STAT-TOTAL-BLOCK-COUNT`)h](hBlock counts (}(hj hhhNhNubh)}(h!:ref:`DTV-STAT-ERROR-BLOCK-COUNT`h]jI)}(hj h]hDTV-STAT-ERROR-BLOCK-COUNT}(hj hhhNhNubah}(h]h ](j7stdstd-refeh"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&]refdocjD refdomainj reftyperef refexplicitrefwarnjJdtv-stat-error-block-countuh1hhhhMhj ubh and }(hj hhhNhNubh)}(h!:ref:`DTV-STAT-TOTAL-BLOCK-COUNT`h]jI)}(hj h]hDTV-STAT-TOTAL-BLOCK-COUNT}(hj hhhNhNubah}(h]h ](j7stdstd-refeh"]h$]h&]uh1jHhj ubah}(h]h ]h"]h$]h&]refdocjD refdomainj reftyperef refexplicitrefwarnjJdtv-stat-total-block-countuh1hhhhMhj ubh)}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj ubj)}(hhh]j)}(hhh](j)}(hThose counters measure the number of blocks and block errors after the forward error correction (FEC) on the inner coding block (before Viterbi, LDPC or other inner code). h]h)}(hThose counters measure the number of blocks and block errors after the forward error correction (FEC) on the inner coding block (before Viterbi, LDPC or other inner code).h]hThose counters measure the number of blocks and block errors after the forward error correction (FEC) on the inner coding block (before Viterbi, LDPC or other inner code).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hDue to its nature, those statistics depend on full coding lock (e. g. after ``FE_HAS_SYNC`` or after ``FE_HAS_LOCK``, see :c:type:`fe_status`). h]h)}(hDue to its nature, those statistics depend on full coding lock (e. g. after ``FE_HAS_SYNC`` or after ``FE_HAS_LOCK``, see :c:type:`fe_status`).h](hLDue to its nature, those statistics depend on full coding lock (e. g. after }(hj hhhNhNubh)}(h``FE_HAS_SYNC``h]h FE_HAS_SYNC}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh or after }(hj hhhNhNubh)}(h``FE_HAS_LOCK``h]h FE_HAS_LOCK}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh, see }(hj hhhNhNubh)}(h:c:type:`fe_status`h]h)}(hjK h]h fe_status}(hjM hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjI ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjJ fe_statusuh1hhhhMhj ubh).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]j1j2uh1jhhhM hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubeh}(h]h ]h"]h$]h&]uh1jhj~hhhNhNubj)}(hVAll counters should be monotonically increased as they're collected from the hardware.h]h)}(hVAll counters should be monotonically increased as they're collected from the hardware.h]hXAll counters should be monotonically increased as they’re collected from the hardware.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhj~hhhhhNubh)}(hEA typical example of the logic that handle status and statistics is::h]hDA typical example of the logic that handle status and statistics is:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj~hhubj)}(hXstatic int foo_get_status_and_stats(struct dvb_frontend *fe) { struct foo_state *state = fe->demodulator_priv; struct dtv_frontend_properties *c = &fe->dtv_property_cache; int rc; enum fe_status *status; /* Both status and strength are always available */ rc = foo_read_status(fe, &status); if (rc < 0) return rc; rc = foo_read_strength(fe); if (rc < 0) return rc; /* Check if CNR is available */ if (!(fe->status & FE_HAS_CARRIER)) return 0; rc = foo_read_cnr(fe); if (rc < 0) return rc; /* Check if pre-BER stats are available */ if (!(fe->status & FE_HAS_VITERBI)) return 0; rc = foo_get_pre_ber(fe); if (rc < 0) return rc; /* Check if post-BER stats are available */ if (!(fe->status & FE_HAS_SYNC)) return 0; rc = foo_get_post_ber(fe); if (rc < 0) return rc; } static const struct dvb_frontend_ops ops = { /* ... */ .read_status = foo_get_status_and_stats, };h]hXstatic int foo_get_status_and_stats(struct dvb_frontend *fe) { struct foo_state *state = fe->demodulator_priv; struct dtv_frontend_properties *c = &fe->dtv_property_cache; int rc; enum fe_status *status; /* Both status and strength are always available */ rc = foo_read_status(fe, &status); if (rc < 0) return rc; rc = foo_read_strength(fe); if (rc < 0) return rc; /* Check if CNR is available */ if (!(fe->status & FE_HAS_CARRIER)) return 0; rc = foo_read_cnr(fe); if (rc < 0) return rc; /* Check if pre-BER stats are available */ if (!(fe->status & FE_HAS_VITERBI)) return 0; rc = foo_get_pre_ber(fe); if (rc < 0) return rc; /* Check if post-BER stats are available */ if (!(fe->status & FE_HAS_SYNC)) return 0; rc = foo_get_post_ber(fe); if (rc < 0) return rc; } static const struct dvb_frontend_ops ops = { /* ... */ .read_status = foo_get_status_and_stats, };}hj sbah}(h]h ]h"]h$]h&]hhuh1jhhhMhj~hhubeh}(h]groups-of-statisticsah ]h"]groups of statisticsah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hStatistics collectionh]hStatistics collection}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMGubh)}(hXOn almost all frontend hardware, the bit and byte counts are stored by the hardware after a certain amount of time or after the total bit/block counter reaches a certain value (usually programmable), for example, on every 1000 ms or after receiving 1,000,000 bits.h]hXOn almost all frontend hardware, the bit and byte counts are stored by the hardware after a certain amount of time or after the total bit/block counter reaches a certain value (usually programmable), for example, on every 1000 ms or after receiving 1,000,000 bits.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMIhj hhubh)}(hSo, if you read the registers too soon, you'll end by reading the same value as in the previous reading, causing the monotonic value to be incremented too often.h]hSo, if you read the registers too soon, you’ll end by reading the same value as in the previous reading, causing the monotonic value to be incremented too often.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMNhj hhubh)}(hgDrivers should take the responsibility to avoid too often reads. That can be done using two approaches:h]hgDrivers should take the responsibility to avoid too often reads. That can be done using two approaches:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMRhj hhubh)}(hhh](h)}(hFif the driver have a bit that indicates when a collected data is readyh]hFif the driver have a bit that indicates when a collected data is ready}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMVubh)}(hDDriver should check such bit before making the statistics available.h]hDDriver should check such bit before making the statistics available.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMXhj hhubh)}(hfAn example of such behavior can be found at this code snippet (adapted from mb86a20s driver's logic)::h]hgAn example of such behavior can be found at this code snippet (adapted from mb86a20s driver’s logic):}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMZhj hhubj)}(hXstatic int foo_get_pre_ber(struct dvb_frontend *fe) { struct foo_state *state = fe->demodulator_priv; struct dtv_frontend_properties *c = &fe->dtv_property_cache; int rc, bit_error; /* Check if the BER measures are already available */ rc = foo_read_u8(state, 0x54); if (rc < 0) return rc; if (!rc) return 0; /* Read Bit Error Count */ bit_error = foo_read_u32(state, 0x55); if (bit_error < 0) return bit_error; /* Read Total Bit Count */ rc = foo_read_u32(state, 0x51); if (rc < 0) return rc; c->pre_bit_error.stat[0].scale = FE_SCALE_COUNTER; c->pre_bit_error.stat[0].uvalue += bit_error; c->pre_bit_count.stat[0].scale = FE_SCALE_COUNTER; c->pre_bit_count.stat[0].uvalue += rc; return 0; }h]hXstatic int foo_get_pre_ber(struct dvb_frontend *fe) { struct foo_state *state = fe->demodulator_priv; struct dtv_frontend_properties *c = &fe->dtv_property_cache; int rc, bit_error; /* Check if the BER measures are already available */ rc = foo_read_u8(state, 0x54); if (rc < 0) return rc; if (!rc) return 0; /* Read Bit Error Count */ bit_error = foo_read_u32(state, 0x55); if (bit_error < 0) return bit_error; /* Read Total Bit Count */ rc = foo_read_u32(state, 0x51); if (rc < 0) return rc; c->pre_bit_error.stat[0].scale = FE_SCALE_COUNTER; c->pre_bit_error.stat[0].uvalue += bit_error; c->pre_bit_count.stat[0].scale = FE_SCALE_COUNTER; c->pre_bit_count.stat[0].uvalue += rc; return 0; }}hj4 sbah}(h]h ]h"]h$]h&]hhuh1jhhhM]hj hhubeh}(h]Fif-the-driver-have-a-bit-that-indicates-when-a-collected-data-is-readyah ]h"]Fif the driver have a bit that indicates when a collected data is readyah$]h&]uh1hhj hhhhhMVubh)}(hhh](h)}(h>If the driver doesn't provide a statistics available check bith]h@If the driver doesn’t provide a statistics available check bit}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ hhhhhM~ubh)}(hA few devices, however, may not provide a way to check if the stats are available (or the way to check it is unknown). They may not even provide a way to directly read the total number of bits or blocks.h]hA few devices, however, may not provide a way to check if the stats are available (or the way to check it is unknown). They may not even provide a way to directly read the total number of bits or blocks.}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjJ hhubh)}(hOn those devices, the driver need to ensure that it won't be reading from the register too often and/or estimate the total number of bits/blocks.h]hOn those devices, the driver need to ensure that it won’t be reading from the register too often and/or estimate the total number of bits/blocks.}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjJ hhubh)}(hjOn such drivers, a typical routine to get statistics would be like (adapted from dib8000 driver's logic)::h]hkOn such drivers, a typical routine to get statistics would be like (adapted from dib8000 driver’s logic):}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjJ hhubj)}(hXstruct foo_state { /* ... */ unsigned long per_jiffies_stats; } static int foo_get_pre_ber(struct dvb_frontend *fe) { struct foo_state *state = fe->demodulator_priv; struct dtv_frontend_properties *c = &fe->dtv_property_cache; int rc, bit_error; u64 bits; /* Check if time for stats was elapsed */ if (!time_after(jiffies, state->per_jiffies_stats)) return 0; /* Next stat should be collected in 1000 ms */ state->per_jiffies_stats = jiffies + msecs_to_jiffies(1000); /* Read Bit Error Count */ bit_error = foo_read_u32(state, 0x55); if (bit_error < 0) return bit_error; /* * On this particular frontend, there's no register that * would provide the number of bits per 1000ms sample. So, * some function would calculate it based on DTV properties */ bits = get_number_of_bits_per_1000ms(fe); c->pre_bit_error.stat[0].scale = FE_SCALE_COUNTER; c->pre_bit_error.stat[0].uvalue += bit_error; c->pre_bit_count.stat[0].scale = FE_SCALE_COUNTER; c->pre_bit_count.stat[0].uvalue += bits; return 0; }h]hXstruct foo_state { /* ... */ unsigned long per_jiffies_stats; } static int foo_get_pre_ber(struct dvb_frontend *fe) { struct foo_state *state = fe->demodulator_priv; struct dtv_frontend_properties *c = &fe->dtv_property_cache; int rc, bit_error; u64 bits; /* Check if time for stats was elapsed */ if (!time_after(jiffies, state->per_jiffies_stats)) return 0; /* Next stat should be collected in 1000 ms */ state->per_jiffies_stats = jiffies + msecs_to_jiffies(1000); /* Read Bit Error Count */ bit_error = foo_read_u32(state, 0x55); if (bit_error < 0) return bit_error; /* * On this particular frontend, there's no register that * would provide the number of bits per 1000ms sample. So, * some function would calculate it based on DTV properties */ bits = get_number_of_bits_per_1000ms(fe); c->pre_bit_error.stat[0].scale = FE_SCALE_COUNTER; c->pre_bit_error.stat[0].uvalue += bit_error; c->pre_bit_count.stat[0].scale = FE_SCALE_COUNTER; c->pre_bit_count.stat[0].uvalue += bits; return 0; }}hj sbah}(h]h ]h"]h$]h&]hhuh1jhhhMhjJ hhubh)}(hXPlease notice that, on both cases, we're getting the statistics using the :c:type:`dvb_frontend_ops` ``.read_status`` callback. The rationale is that the frontend core will automatically call this function periodically (usually, 3 times per second, when the frontend is locked).h](hLPlease notice that, on both cases, we’re getting the statistics using the }(hj hhhNhNubh)}(h:c:type:`dvb_frontend_ops`h]h)}(hj h]hdvb_frontend_ops}(hj hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjJdvb_frontend_opsuh1hhhhMhj ubh }(hj hhhNhNubh)}(h``.read_status``h]h .read_status}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh callback. The rationale is that the frontend core will automatically call this function periodically (usually, 3 times per second, when the frontend is locked).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjJ hhubh)}(hjThat warrants that we won't miss to collect a counter and increment the monotonic stats at the right time.h]hlThat warrants that we won’t miss to collect a counter and increment the monotonic stats at the right time.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjJ hhubeh}(h]>if-the-driver-doesn-t-provide-a-statistics-available-check-bitah ]h"]>if the driver doesn't provide a statistics available check bitah$]h&]uh1hhj hhhhhM~ubeh}(h]statistics-collectionah ]h"]statistics collectionah$]h&]uh1hhjhhhhhMGubeh}(h](digital-tv-frontend-statisticsjeh ]h"](digital tv frontend statistics dvbv5_statseh$]h&]uh1hhhhhhhhKexpect_referenced_by_name}j jsexpect_referenced_by_id}jjsubh)}(hhh](h)}(h'Digital TV Frontend functions and typesh]h'Digital TV Frontend functions and types}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single%dvb_frontend_tune_settings (C struct)c.dvb_frontend_tune_settingshNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(hdvb_frontend_tune_settingsh]hdesc_signature_line)}(h!struct dvb_frontend_tune_settingsh](hdesc_sig_keyword)}(hstructh]hstruct}(hj6hhhNhNubah}(h]h ]kah"]h$]h&]uh1j4hj0hhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKubhdesc_sig_space)}(h h]h }(hjHhhhNhNubah}(h]h ]wah"]h$]h&]uh1jFhj0hhhjEhKubh desc_name)}(hdvb_frontend_tune_settingsh]h desc_sig_name)}(hj,h]hdvb_frontend_tune_settings}(hj_hhhNhNubah}(h]h ]nah"]h$]h&]uh1j]hjYubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jWhj0hhhjEhKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1j.sphinx_line_type declaratorhj*hhhjEhKubah}(h]j!ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j(hjEhKhj%hhubh desc_content)}(hhh]h)}(h$parameters to adjust frontend tuningh]h$parameters to adjust frontend tuning}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhK=hjhhubah}(h]h ]h"]h$]h&]uh1jhj%hhhjEhKubeh}(h]h ](j8structeh"]h$]h&]domainj8objtypejdesctypejnoindex noindexentrynocontentsentryuh1j#hhhjhNhNubh container)}(hX**Definition**:: struct dvb_frontend_tune_settings { int min_delay_ms; int step_size; int max_drift; }; **Members** ``min_delay_ms`` minimum delay for tuning, in ms ``step_size`` step size between two consecutive frequencies ``max_drift`` maximum drifth](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKAhjubj)}(hbstruct dvb_frontend_tune_settings { int min_delay_ms; int step_size; int max_drift; };h]hbstruct dvb_frontend_tune_settings { int min_delay_ms; int step_size; int max_drift; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKChjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKIhjubj)}(hhh](j)}(h1``min_delay_ms`` minimum delay for tuning, in ms h](j)}(h``min_delay_ms``h]h)}(hjh]h min_delay_ms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhK@hjubj)}(hhh]h)}(hminimum delay for tuning, in msh]hminimum delay for tuning, in ms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK@hjubj)}(h<``step_size`` step size between two consecutive frequencies h](j)}(h ``step_size``h]h)}(hj>h]h step_size}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKAhj8ubj)}(hhh]h)}(h-step size between two consecutive frequenciesh]h-step size between two consecutive frequencies}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKAhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShKAhjubj)}(h``max_drift`` maximum drifth](j)}(h ``max_drift``h]h)}(hjwh]h max_drift}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKAhjqubj)}(hhh]h)}(h maximum drifth]h maximum drift}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKBhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhKAhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**NOTE**h]j)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKEhjhhubh)}(h>step_size is in Hz, for terrestrial/cable or kHz for satelliteh]h>step_size is in Hz, for terrestrial/cable or kHz for satellite}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKChjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdvb_tuner_info (C struct)c.dvb_tuner_infohNtauh1jhjhhhNhNubj$)}(hhh](j))}(hdvb_tuner_infoh]j/)}(hstruct dvb_tuner_infoh](j5)}(hj8h]hstruct}(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKHubjG)}(h h]h }(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjhhhjhKHubjX)}(hdvb_tuner_infoh]j^)}(hjh]hdvb_tuner_info}(hjhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhjhhhjhKHubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hjhhhjhKHubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j(hjhKHhjhhubj)}(hhh]h)}(h+Frontend name and min/max ranges/bandwidthsh]h+Frontend name and min/max ranges/bandwidths}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKNhj7hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKHubeh}(h]h ](j8structeh"]h$]h&]jj8jjRjjRjjjuh1j#hhhjhNhNubj)}(hXY**Definition**:: struct dvb_tuner_info { char name[128]; u32 frequency_min_hz; u32 frequency_max_hz; u32 frequency_step_hz; u32 bandwidth_min; u32 bandwidth_max; u32 bandwidth_step; }; **Members** ``name`` name of the Frontend ``frequency_min_hz`` minimal frequency supported in Hz ``frequency_max_hz`` maximum frequency supported in Hz ``frequency_step_hz`` frequency step in Hz ``bandwidth_min`` minimal frontend bandwidth supported ``bandwidth_max`` maximum frontend bandwidth supported ``bandwidth_step`` frontend bandwidth steph](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh:}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKRhjVubj)}(hstruct dvb_tuner_info { char name[128]; u32 frequency_min_hz; u32 frequency_max_hz; u32 frequency_step_hz; u32 bandwidth_min; u32 bandwidth_max; u32 bandwidth_step; };h]hstruct dvb_tuner_info { char name[128]; u32 frequency_min_hz; u32 frequency_max_hz; u32 frequency_step_hz; u32 bandwidth_min; u32 bandwidth_max; u32 bandwidth_step; };}hjwsbah}(h]h ]h"]h$]h&]hhuh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKThjVubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhK^hjVubj)}(hhh](j)}(h``name`` name of the Frontend h](j)}(h``name``h]h)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKQhjubj)}(hhh]h)}(hname of the Frontendh]hname of the Frontend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKQhjubj)}(h7``frequency_min_hz`` minimal frequency supported in Hz h](j)}(h``frequency_min_hz``h]h)}(hjh]hfrequency_min_hz}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKRhjubj)}(hhh]h)}(h!minimal frequency supported in Hzh]h!minimal frequency supported in Hz}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKRhjubj)}(h7``frequency_max_hz`` maximum frequency supported in Hz h](j)}(h``frequency_max_hz``h]h)}(hjh]hfrequency_max_hz}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKShjubj)}(hhh]h)}(h!maximum frequency supported in Hzh]h!maximum frequency supported in Hz}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKShj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hKShjubj)}(h+``frequency_step_hz`` frequency step in Hz h](j)}(h``frequency_step_hz``h]h)}(hjRh]hfrequency_step_hz}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKThjLubj)}(hhh]h)}(hfrequency step in Hzh]hfrequency step in Hz}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghKThjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghKThjubj)}(h7``bandwidth_min`` minimal frontend bandwidth supported h](j)}(h``bandwidth_min``h]h)}(hjh]h bandwidth_min}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKUhjubj)}(hhh]h)}(h$minimal frontend bandwidth supportedh]h$minimal frontend bandwidth supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKUhjubj)}(h7``bandwidth_max`` maximum frontend bandwidth supported h](j)}(h``bandwidth_max``h]h)}(hjh]h bandwidth_max}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKVhjubj)}(hhh]h)}(h$maximum frontend bandwidth supportedh]h$maximum frontend bandwidth supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKVhjubj)}(h*``bandwidth_step`` frontend bandwidth steph](j)}(h``bandwidth_step``h]h)}(hjh]hbandwidth_step}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKVhjubj)}(hhh]h)}(hfrontend bandwidth steph]hfrontend bandwidth step}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKVhjubeh}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](janalog_parameters (C struct)c.analog_parametershNtauh1jhjhhhNhNubj$)}(hhh](j))}(hanalog_parametersh]j/)}(hstruct analog_parametersh](j5)}(hj8h]hstruct}(hjWhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjShhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhK]ubjG)}(h h]h }(hjehhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjShhhjdhK]ubjX)}(hanalog_parametersh]j^)}(hjQh]hanalog_parameters}(hjwhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjsubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhjShhhjdhK]ubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hjOhhhjdhK]ubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1j(hjdhK]hjLhhubj)}(hhh]h)}(h/Parameters to tune into an analog/radio channelh]h/Parameters to tune into an analog/radio channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKehjhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjdhK]ubeh}(h]h ](j8structeh"]h$]h&]jj8jjjjjjjuh1j#hhhjhNhNubj)}(hX**Definition**:: struct analog_parameters { unsigned int frequency; unsigned int mode; unsigned int audmode; u64 std; }; **Members** ``frequency`` Frequency used by analog TV tuner (either in 62.5 kHz step, for TV, or 62.5 Hz for radio) ``mode`` Tuner mode, as defined on enum v4l2_tuner_type ``audmode`` Audio mode as defined for the rxsubchans field at videodev2.h, e. g. V4L2_TUNER_MODE_* ``std`` TV standard bitmap as defined at videodev2.h, e. g. V4L2_STD_*h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKihjubj)}(hwstruct analog_parameters { unsigned int frequency; unsigned int mode; unsigned int audmode; u64 std; };h]hwstruct analog_parameters { unsigned int frequency; unsigned int mode; unsigned int audmode; u64 std; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKkhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKrhjubj)}(hhh](j)}(hh``frequency`` Frequency used by analog TV tuner (either in 62.5 kHz step, for TV, or 62.5 Hz for radio) h](j)}(h ``frequency``h]h)}(hjh]h frequency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKihjubj)}(hhh]h)}(hYFrequency used by analog TV tuner (either in 62.5 kHz step, for TV, or 62.5 Hz for radio)h]hYFrequency used by analog TV tuner (either in 62.5 kHz step, for TV, or 62.5 Hz for radio)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKihjubj)}(h8``mode`` Tuner mode, as defined on enum v4l2_tuner_type h](j)}(h``mode``h]h)}(hj@h]hmode}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKjhj:ubj)}(hhh]h)}(h.Tuner mode, as defined on enum v4l2_tuner_typeh]h.Tuner mode, as defined on enum v4l2_tuner_type}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhKjhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhKjhjubj)}(hc``audmode`` Audio mode as defined for the rxsubchans field at videodev2.h, e. g. V4L2_TUNER_MODE_* h](j)}(h ``audmode``h]h)}(hjyh]haudmode}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKlhjsubj)}(hhh]h)}(hVAudio mode as defined for the rxsubchans field at videodev2.h, e. g. V4L2_TUNER_MODE_*h]hVAudio mode as defined for the rxsubchans field at videodev2.h, e. g. V4L2_TUNER_MODE_*}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKkhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhKlhjubj)}(hF``std`` TV standard bitmap as defined at videodev2.h, e. g. V4L2_STD_*h](j)}(h``std``h]h)}(hjh]hstd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKlhjubj)}(hhh]h)}(h>TV standard bitmap as defined at videodev2.h, e. g. V4L2_STD_*h]h>TV standard bitmap as defined at videodev2.h, e. g. V4L2_STD_*}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKlhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKphjhhubh)}(hHybrid tuners should be supported by both V4L2 and DVB APIs. This struct contains the data that are used by the V4L2 side. To avoid dependencies from V4L2 headers, all enums here are declared as integers.h]hHybrid tuners should be supported by both V4L2 and DVB APIs. This struct contains the data that are used by the V4L2 side. To avoid dependencies from V4L2 headers, all enums here are declared as integers.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKnhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdvbfe_algo (C enum) c.dvbfe_algohNtauh1jhjhhhNhNubj$)}(hhh](j))}(h dvbfe_algoh]j/)}(henum dvbfe_algoh](j5)}(henumh]henum}(hj4hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj0hhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKuubjG)}(h h]h }(hjChhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj0hhhjBhKuubjX)}(h dvbfe_algoh]j^)}(hj.h]h dvbfe_algo}(hjUhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjQubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhj0hhhjBhKuubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hj,hhhjBhKuubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1j(hjBhKuhj)hhubj)}(hhh]h)}(h1defines the algorithm used to tune into a channelh]h1defines the algorithm used to tune into a channel}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKzhjthhubah}(h]h ]h"]h$]h&]uh1jhj)hhhjBhKuubeh}(h]h ](j8enumeh"]h$]h&]jj8jjjjjjjuh1j#hhhjhNhNubj)}(hX**Constants** ``DVBFE_ALGO_HW`` Hardware Algorithm - Devices that support this algorithm do everything in hardware and no software support is needed to handle them. Requesting these devices to LOCK is the only thing required, device is supposed to do everything in the hardware. ``DVBFE_ALGO_SW`` Software Algorithm - These are dumb devices, that require software to do everything ``DVBFE_ALGO_CUSTOM`` Customizable Agorithm - Devices having this algorithm can be customized to have specific algorithms in the frontend driver, rather than simply doing a software zig-zag. In this case the zigzag maybe hardware assisted or it maybe completely done in hardware. In all cases, usage of this algorithm, in conjunction with the search and track callbacks, utilizes the driver specific algorithm. ``DVBFE_ALGO_RECOVERY`` Recovery Algorithm - These devices have AUTO recovery capabilities from LOCK failureh](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhK~hjubj)}(hhh](j)}(hX ``DVBFE_ALGO_HW`` Hardware Algorithm - Devices that support this algorithm do everything in hardware and no software support is needed to handle them. Requesting these devices to LOCK is the only thing required, device is supposed to do everything in the hardware. h](j)}(h``DVBFE_ALGO_HW``h]h)}(hjh]h DVBFE_ALGO_HW}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh]h)}(hHardware Algorithm - Devices that support this algorithm do everything in hardware and no software support is needed to handle them. Requesting these devices to LOCK is the only thing required, device is supposed to do everything in the hardware.h]hHardware Algorithm - Devices that support this algorithm do everything in hardware and no software support is needed to handle them. Requesting these devices to LOCK is the only thing required, device is supposed to do everything in the hardware.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hf``DVBFE_ALGO_SW`` Software Algorithm - These are dumb devices, that require software to do everything h](j)}(h``DVBFE_ALGO_SW``h]h)}(hjh]h DVBFE_ALGO_SW}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh]h)}(hSSoftware Algorithm - These are dumb devices, that require software to do everythingh]hSSoftware Algorithm - These are dumb devices, that require software to do everything}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hX``DVBFE_ALGO_CUSTOM`` Customizable Agorithm - Devices having this algorithm can be customized to have specific algorithms in the frontend driver, rather than simply doing a software zig-zag. In this case the zigzag maybe hardware assisted or it maybe completely done in hardware. In all cases, usage of this algorithm, in conjunction with the search and track callbacks, utilizes the driver specific algorithm. h](j)}(h``DVBFE_ALGO_CUSTOM``h]h)}(hj,h]hDVBFE_ALGO_CUSTOM}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhj&ubj)}(hhh]h)}(hXCustomizable Agorithm - Devices having this algorithm can be customized to have specific algorithms in the frontend driver, rather than simply doing a software zig-zag. In this case the zigzag maybe hardware assisted or it maybe completely done in hardware. In all cases, usage of this algorithm, in conjunction with the search and track callbacks, utilizes the driver specific algorithm.h]hXCustomizable Agorithm - Devices having this algorithm can be customized to have specific algorithms in the frontend driver, rather than simply doing a software zig-zag. In this case the zigzag maybe hardware assisted or it maybe completely done in hardware. In all cases, usage of this algorithm, in conjunction with the search and track callbacks, utilizes the driver specific algorithm.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhKhjubj)}(hl``DVBFE_ALGO_RECOVERY`` Recovery Algorithm - These devices have AUTO recovery capabilities from LOCK failureh](j)}(h``DVBFE_ALGO_RECOVERY``h]h)}(hjfh]hDVBFE_ALGO_RECOVERY}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhj`ubj)}(hhh]h)}(hTRecovery Algorithm - These devices have AUTO recovery capabilities from LOCK failureh]hTRecovery Algorithm - These devices have AUTO recovery capabilities from LOCK failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hKhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdvbfe_search (C enum)c.dvbfe_searchhNtauh1jhjhhhNhNubj$)}(hhh](j))}(h dvbfe_searchh]j/)}(henum dvbfe_searchh](j5)}(hj6h]henum}(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKubjG)}(h h]h }(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjhhhjhKubjX)}(h dvbfe_searchh]j^)}(hjh]h dvbfe_search}(hjhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j(hjhKhjhhubj)}(hhh]h)}(h&search callback possible return statush]h&search callback possible return status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j8enumeh"]h$]h&]jj8jjjjjjjuh1j#hhhjhNhNubj)}(hXC**Constants** ``DVBFE_ALGO_SEARCH_SUCCESS`` The frontend search algorithm completed and returned successfully ``DVBFE_ALGO_SEARCH_ASLEEP`` The frontend search algorithm is sleeping ``DVBFE_ALGO_SEARCH_FAILED`` The frontend search for a signal failed ``DVBFE_ALGO_SEARCH_INVALID`` The frontend search algorithm was probably supplied with invalid parameters and the search is an invalid one ``DVBFE_ALGO_SEARCH_AGAIN`` The frontend search algorithm was requested to search again ``DVBFE_ALGO_SEARCH_ERROR`` The frontend search algorithm failed due to some errorh](h)}(h **Constants**h]j)}(hj#h]h Constants}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh](j)}(h```DVBFE_ALGO_SEARCH_SUCCESS`` The frontend search algorithm completed and returned successfully h](j)}(h``DVBFE_ALGO_SEARCH_SUCCESS``h]h)}(hjBh]hDVBFE_ALGO_SEARCH_SUCCESS}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhj<ubj)}(hhh]h)}(hAThe frontend search algorithm completed and returned successfullyh]hAThe frontend search algorithm completed and returned successfully}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhKhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhKhj9ubj)}(hG``DVBFE_ALGO_SEARCH_ASLEEP`` The frontend search algorithm is sleeping h](j)}(h``DVBFE_ALGO_SEARCH_ASLEEP``h]h)}(hj{h]hDVBFE_ALGO_SEARCH_ASLEEP}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjuubj)}(hhh]h)}(h)The frontend search algorithm is sleepingh]h)The frontend search algorithm is sleeping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhKhj9ubj)}(hE``DVBFE_ALGO_SEARCH_FAILED`` The frontend search for a signal failed h](j)}(h``DVBFE_ALGO_SEARCH_FAILED``h]h)}(hjh]hDVBFE_ALGO_SEARCH_FAILED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh]h)}(h'The frontend search for a signal failedh]h'The frontend search for a signal failed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj9ubj)}(h``DVBFE_ALGO_SEARCH_INVALID`` The frontend search algorithm was probably supplied with invalid parameters and the search is an invalid one h](j)}(h``DVBFE_ALGO_SEARCH_INVALID``h]h)}(hjh]hDVBFE_ALGO_SEARCH_INVALID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh]h)}(hlThe frontend search algorithm was probably supplied with invalid parameters and the search is an invalid oneh]hlThe frontend search algorithm was probably supplied with invalid parameters and the search is an invalid one}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj9ubj)}(hX``DVBFE_ALGO_SEARCH_AGAIN`` The frontend search algorithm was requested to search again h](j)}(h``DVBFE_ALGO_SEARCH_AGAIN``h]h)}(hj'h]hDVBFE_ALGO_SEARCH_AGAIN}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhj!ubj)}(hhh]h)}(h;The frontend search algorithm was requested to search againh]h;The frontend search algorithm was requested to search again}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hKhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hKhj9ubj)}(hR``DVBFE_ALGO_SEARCH_ERROR`` The frontend search algorithm failed due to some errorh](j)}(h``DVBFE_ALGO_SEARCH_ERROR``h]h)}(hj`h]hDVBFE_ALGO_SEARCH_ERROR}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjZubj)}(hhh]h)}(h6The frontend search algorithm failed due to some errorh]h6The frontend search algorithm failed due to some error}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhKhj9ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdvb_tuner_ops (C struct)c.dvb_tuner_opshNtauh1jhjhhhNhNubj$)}(hhh](j))}(h dvb_tuner_opsh]j/)}(hstruct dvb_tuner_opsh](j5)}(hj8h]hstruct}(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKubjG)}(h h]h }(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjhhhjhKubjX)}(h dvb_tuner_opsh]j^)}(hjh]h dvb_tuner_ops}(hjhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j(hjhKhjhhubj)}(hhh]h)}(hTuner information and callbacksh]hTuner information and callbacks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j8structeh"]h$]h&]jj8jjjjjjjuh1j#hhhjhNhNubj)}(hX **Definition**:: struct dvb_tuner_ops { struct dvb_tuner_info info; void (*release)(struct dvb_frontend *fe); int (*init)(struct dvb_frontend *fe); int (*sleep)(struct dvb_frontend *fe); int (*suspend)(struct dvb_frontend *fe); int (*resume)(struct dvb_frontend *fe); int (*set_params)(struct dvb_frontend *fe); int (*set_analog_params)(struct dvb_frontend *fe, struct analog_parameters *p); int (*set_config)(struct dvb_frontend *fe, void *priv_cfg); int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency); int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth); int (*get_if_frequency)(struct dvb_frontend *fe, u32 *frequency); #define TUNER_STATUS_LOCKED 1; #define TUNER_STATUS_STEREO 2; int (*get_status)(struct dvb_frontend *fe, u32 *status); int (*get_rf_strength)(struct dvb_frontend *fe, u16 *strength); int (*get_afc)(struct dvb_frontend *fe, s32 *afc); int (*calc_regs)(struct dvb_frontend *fe, u8 *buf, int buf_len); int (*set_frequency)(struct dvb_frontend *fe, u32 frequency); int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth); }; **Members** ``info`` embedded :c:type:`struct dvb_tuner_info ` with tuner properties ``release`` callback function called when frontend is detached. drivers should free any allocated memory. ``init`` callback function used to initialize the tuner device. ``sleep`` callback function used to put the tuner to sleep. ``suspend`` callback function used to inform that the Kernel will suspend. ``resume`` callback function used to inform that the Kernel is resuming from suspend. ``set_params`` callback function used to inform the tuner to tune into a digital TV channel. The properties to be used are stored at :c:type:`struct dvb_frontend `.dtv_property_cache. The tuner demod can change the parameters to reflect the changes needed for the channel to be tuned, and update statistics. This is the recommended way to set the tuner parameters and should be used on newer drivers. ``set_analog_params`` callback function used to tune into an analog TV channel on hybrid tuners. It passes **analog_parameters** to the driver. ``set_config`` callback function used to send some tuner-specific parameters. ``get_frequency`` get the actual tuned frequency ``get_bandwidth`` get the bandwidth used by the low pass filters ``get_if_frequency`` get the Intermediate Frequency, in Hz. For baseband, should return 0. ``get_status`` returns the frontend lock status ``get_rf_strength`` returns the RF signal strength. Used mostly to support analog TV and radio. Digital TV should report, instead, via DVBv5 API (:c:type:`struct dvb_frontend `.dtv_property_cache). ``get_afc`` Used only by analog TV core. Reports the frequency drift due to AFC. ``calc_regs`` callback function used to pass register data settings for simple tuners. Shouldn't be used on newer drivers. ``set_frequency`` Set a new frequency. Shouldn't be used on newer drivers. ``set_bandwidth`` Set a new frequency. Shouldn't be used on newer drivers.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hXdstruct dvb_tuner_ops { struct dvb_tuner_info info; void (*release)(struct dvb_frontend *fe); int (*init)(struct dvb_frontend *fe); int (*sleep)(struct dvb_frontend *fe); int (*suspend)(struct dvb_frontend *fe); int (*resume)(struct dvb_frontend *fe); int (*set_params)(struct dvb_frontend *fe); int (*set_analog_params)(struct dvb_frontend *fe, struct analog_parameters *p); int (*set_config)(struct dvb_frontend *fe, void *priv_cfg); int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency); int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth); int (*get_if_frequency)(struct dvb_frontend *fe, u32 *frequency); #define TUNER_STATUS_LOCKED 1; #define TUNER_STATUS_STEREO 2; int (*get_status)(struct dvb_frontend *fe, u32 *status); int (*get_rf_strength)(struct dvb_frontend *fe, u16 *strength); int (*get_afc)(struct dvb_frontend *fe, s32 *afc); int (*calc_regs)(struct dvb_frontend *fe, u8 *buf, int buf_len); int (*set_frequency)(struct dvb_frontend *fe, u32 frequency); int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth); };h]hXdstruct dvb_tuner_ops { struct dvb_tuner_info info; void (*release)(struct dvb_frontend *fe); int (*init)(struct dvb_frontend *fe); int (*sleep)(struct dvb_frontend *fe); int (*suspend)(struct dvb_frontend *fe); int (*resume)(struct dvb_frontend *fe); int (*set_params)(struct dvb_frontend *fe); int (*set_analog_params)(struct dvb_frontend *fe, struct analog_parameters *p); int (*set_config)(struct dvb_frontend *fe, void *priv_cfg); int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency); int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth); int (*get_if_frequency)(struct dvb_frontend *fe, u32 *frequency); #define TUNER_STATUS_LOCKED 1; #define TUNER_STATUS_STEREO 2; int (*get_status)(struct dvb_frontend *fe, u32 *status); int (*get_rf_strength)(struct dvb_frontend *fe, u16 *strength); int (*get_afc)(struct dvb_frontend *fe, s32 *afc); int (*calc_regs)(struct dvb_frontend *fe, u8 *buf, int buf_len); int (*set_frequency)(struct dvb_frontend *fe, u32 frequency); int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth); };}hj9sbah}(h]h ]h"]h$]h&]hhuh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubh)}(h **Members**h]j)}(hjJh]hMembers}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh](j)}(hY``info`` embedded :c:type:`struct dvb_tuner_info ` with tuner properties h](j)}(h``info``h]h)}(hjih]hinfo}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjcubj)}(hhh]h)}(hOembedded :c:type:`struct dvb_tuner_info ` with tuner propertiesh](h embedded }(hjhhhNhNubh)}(h0:c:type:`struct dvb_tuner_info `h]h)}(hjh]hstruct dvb_tuner_info}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sbjJdvb_tuner_infouh1hhj~hKhjubh with tuner properties}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj~hKhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hKhj`ubj)}(hj``release`` callback function called when frontend is detached. drivers should free any allocated memory. h](j)}(h ``release``h]h)}(hjh]hrelease}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh]h)}(h]callback function called when frontend is detached. drivers should free any allocated memory.h]h]callback function called when frontend is detached. drivers should free any allocated memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj`ubj)}(h@``init`` callback function used to initialize the tuner device. h](j)}(h``init``h]h)}(hjh]hinit}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh]h)}(h6callback function used to initialize the tuner device.h]h6callback function used to initialize the tuner device.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj`ubj)}(h<``sleep`` callback function used to put the tuner to sleep. h](j)}(h ``sleep``h]h)}(hj@h]hsleep}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhj:ubj)}(hhh]h)}(h1callback function used to put the tuner to sleep.h]h1callback function used to put the tuner to sleep.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhKhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhKhj`ubj)}(hK``suspend`` callback function used to inform that the Kernel will suspend. h](j)}(h ``suspend``h]h)}(hjyh]hsuspend}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjsubj)}(hhh]h)}(h>callback function used to inform that the Kernel will suspend.h]h>callback function used to inform that the Kernel will suspend.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhKhj`ubj)}(hV``resume`` callback function used to inform that the Kernel is resuming from suspend. h](j)}(h ``resume``h]h)}(hjh]hresume}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh]h)}(hJcallback function used to inform that the Kernel is resuming from suspend.h]hJcallback function used to inform that the Kernel is resuming from suspend.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj`ubj)}(hX``set_params`` callback function used to inform the tuner to tune into a digital TV channel. The properties to be used are stored at :c:type:`struct dvb_frontend `.dtv_property_cache. The tuner demod can change the parameters to reflect the changes needed for the channel to be tuned, and update statistics. This is the recommended way to set the tuner parameters and should be used on newer drivers. h](j)}(h``set_params``h]h)}(hjh]h set_params}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh]h)}(hXcallback function used to inform the tuner to tune into a digital TV channel. The properties to be used are stored at :c:type:`struct dvb_frontend `.dtv_property_cache. The tuner demod can change the parameters to reflect the changes needed for the channel to be tuned, and update statistics. This is the recommended way to set the tuner parameters and should be used on newer drivers.h](hvcallback function used to inform the tuner to tune into a digital TV channel. The properties to be used are stored at }(hjhhhNhNubh)}(h,:c:type:`struct dvb_frontend `h]h)}(hjh]hstruct dvb_frontend}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ dvb_frontenduh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubh.dtv_property_cache. The tuner demod can change the parameters to reflect the changes needed for the channel to be tuned, and update statistics. This is the recommended way to set the tuner parameters and should be used on newer drivers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj`ubj)}(h``set_analog_params`` callback function used to tune into an analog TV channel on hybrid tuners. It passes **analog_parameters** to the driver. h](j)}(h``set_analog_params``h]h)}(hjJh]hset_analog_params}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjDubj)}(hhh]h)}(hycallback function used to tune into an analog TV channel on hybrid tuners. It passes **analog_parameters** to the driver.h](hUcallback function used to tune into an analog TV channel on hybrid tuners. It passes }(hjchhhNhNubj)}(h**analog_parameters**h]hanalog_parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh to the driver.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hKhj`ubj)}(hN``set_config`` callback function used to send some tuner-specific parameters. h](j)}(h``set_config``h]h)}(hjh]h set_config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh]h)}(h>callback function used to send some tuner-specific parameters.h]h>callback function used to send some tuner-specific parameters.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj`ubj)}(h1``get_frequency`` get the actual tuned frequency h](j)}(h``get_frequency``h]h)}(hjh]h get_frequency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh]h)}(hget the actual tuned frequencyh]hget the actual tuned frequency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj`ubj)}(hA``get_bandwidth`` get the bandwidth used by the low pass filters h](j)}(h``get_bandwidth``h]h)}(hj h]h get_bandwidth}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh]h)}(h.get the bandwidth used by the low pass filtersh]h.get the bandwidth used by the low pass filters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj`ubj)}(h[``get_if_frequency`` get the Intermediate Frequency, in Hz. For baseband, should return 0. h](j)}(h``get_if_frequency``h]h)}(hjBh]hget_if_frequency}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhj<ubj)}(hhh]h)}(hEget the Intermediate Frequency, in Hz. For baseband, should return 0.h]hEget the Intermediate Frequency, in Hz. For baseband, should return 0.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhKhj`ubj)}(h0``get_status`` returns the frontend lock status h](j)}(h``get_status``h]h)}(hj|h]h get_status}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjvubj)}(hhh]h)}(h returns the frontend lock statush]h returns the frontend lock status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhKhj`ubj)}(h``get_rf_strength`` returns the RF signal strength. Used mostly to support analog TV and radio. Digital TV should report, instead, via DVBv5 API (:c:type:`struct dvb_frontend `.dtv_property_cache). h](j)}(h``get_rf_strength``h]h)}(hjh]hget_rf_strength}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh]h)}(hreturns the RF signal strength. Used mostly to support analog TV and radio. Digital TV should report, instead, via DVBv5 API (:c:type:`struct dvb_frontend `.dtv_property_cache).h](h~returns the RF signal strength. Used mostly to support analog TV and radio. Digital TV should report, instead, via DVBv5 API (}(hjhhhNhNubh)}(h,:c:type:`struct dvb_frontend `h]h)}(hjh]hstruct dvb_frontend}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ dvb_frontenduh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubh.dtv_property_cache).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj`ubj)}(hQ``get_afc`` Used only by analog TV core. Reports the frequency drift due to AFC. h](j)}(h ``get_afc``h]h)}(hjh]hget_afc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhj ubj)}(hhh]h)}(hDUsed only by analog TV core. Reports the frequency drift due to AFC.h]hDUsed only by analog TV core. Reports the frequency drift due to AFC.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hKhj`ubj)}(h|``calc_regs`` callback function used to pass register data settings for simple tuners. Shouldn't be used on newer drivers. h](j)}(h ``calc_regs``h]h)}(hjLh]h calc_regs}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjFubj)}(hhh]h)}(hmcallback function used to pass register data settings for simple tuners. Shouldn't be used on newer drivers.h]hocallback function used to pass register data settings for simple tuners. Shouldn’t be used on newer drivers.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahKhj`ubj)}(hK``set_frequency`` Set a new frequency. Shouldn't be used on newer drivers. h](j)}(h``set_frequency``h]h)}(hjh]h set_frequency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh]h)}(h8Set a new frequency. Shouldn't be used on newer drivers.h]h:Set a new frequency. Shouldn’t be used on newer drivers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj`ubj)}(hJ``set_bandwidth`` Set a new frequency. Shouldn't be used on newer drivers.h](j)}(h``set_bandwidth``h]h)}(hjh]h set_bandwidth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubj)}(hhh]h)}(h8Set a new frequency. Shouldn't be used on newer drivers.h]h:Set a new frequency. Shouldn’t be used on newer drivers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj`ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**NOTE**h]j)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjhhubh)}(hqfrequencies used on **get_frequency** and **set_frequency** are in Hz for terrestrial/cable or kHz for satellite.h](hfrequencies used on }(hjhhhNhNubj)}(h**get_frequency**h]h get_frequency}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**set_frequency**h]h set_frequency}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh6 are in Hz for terrestrial/cable or kHz for satellite.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](janalog_demod_info (C struct)c.analog_demod_infohNtauh1jhjhhhNhNubj$)}(hhh](j))}(hanalog_demod_infoh]j/)}(hstruct analog_demod_infoh](j5)}(hj8h]hstruct}(hjdhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj`hhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhKubjG)}(h h]h }(hjrhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj`hhhjqhKubjX)}(hanalog_demod_infoh]j^)}(hj^h]hanalog_demod_info}(hjhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhj`hhhjqhKubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hj\hhhjqhKubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1j(hjqhKhjYhhubj)}(hhh]h)}(h2Information struct for analog TV part of the demodh]h2Information struct for analog TV part of the demod}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjqhKubeh}(h]h ](j8structeh"]h$]h&]jj8jjjjjjjuh1j#hhhjhNhNubj)}(h**Definition**:: struct analog_demod_info { char *name; }; **Members** ``name`` Name of the analog TV demodulatorh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjubj)}(h-struct analog_demod_info { char *name; };h]h-struct analog_demod_info { char *name; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjubj)}(hhh]j)}(h*``name`` Name of the analog TV demodulatorh](j)}(h``name``h]h)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj ubj)}(hhh]h)}(h!Name of the analog TV demodulatorh]h!Name of the analog TV demodulator}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](janalog_demod_ops (C struct)c.analog_demod_opshNtauh1jhjhhhNhNubj$)}(hhh](j))}(hanalog_demod_opsh]j/)}(hstruct analog_demod_opsh](j5)}(hj8h]hstruct}(hjmhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjihhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMubjG)}(h h]h }(hj{hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjihhhjzhMubjX)}(hanalog_demod_opsh]j^)}(hjgh]hanalog_demod_ops}(hjhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhjihhhjzhMubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hjehhhjzhMubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1j(hjzhMhjbhhubj)}(hhh]h)}(h>Demodulation information and callbacks for analog TV and radioh]h>Demodulation information and callbacks for analog TV and radio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjzhMubeh}(h]h ](j8structeh"]h$]h&]jj8jjjjjjjuh1j#hhhjhNhNubj)}(hX**Definition**:: struct analog_demod_ops { struct analog_demod_info info; void (*set_params)(struct dvb_frontend *fe, struct analog_parameters *params); int (*has_signal)(struct dvb_frontend *fe, u16 *signal); int (*get_afc)(struct dvb_frontend *fe, s32 *afc); void (*tuner_status)(struct dvb_frontend *fe); void (*standby)(struct dvb_frontend *fe); void (*release)(struct dvb_frontend *fe); int (*i2c_gate_ctrl)(struct dvb_frontend *fe, int enable); int (*set_config)(struct dvb_frontend *fe, void *priv_cfg); }; **Members** ``info`` pointer to struct analog_demod_info ``set_params`` callback function used to inform the demod to set the demodulator parameters needed to decode an analog or radio channel. The properties are passed via :c:type:`struct analog_params `. ``has_signal`` returns 0xffff if has signal, or 0 if it doesn't. ``get_afc`` Used only by analog TV core. Reports the frequency drift due to AFC. ``tuner_status`` callback function that returns tuner status bits, e. g. ``TUNER_STATUS_LOCKED`` and ``TUNER_STATUS_STEREO``. ``standby`` set the tuner to standby mode. ``release`` callback function called when frontend is detached. drivers should free any allocated memory. ``i2c_gate_ctrl`` controls the I2C gate. Newer drivers should use I2C mux support instead. ``set_config`` callback function used to send some tuner-specific parameters.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjubj)}(hXstruct analog_demod_ops { struct analog_demod_info info; void (*set_params)(struct dvb_frontend *fe, struct analog_parameters *params); int (*has_signal)(struct dvb_frontend *fe, u16 *signal); int (*get_afc)(struct dvb_frontend *fe, s32 *afc); void (*tuner_status)(struct dvb_frontend *fe); void (*standby)(struct dvb_frontend *fe); void (*release)(struct dvb_frontend *fe); int (*i2c_gate_ctrl)(struct dvb_frontend *fe, int enable); int (*set_config)(struct dvb_frontend *fe, void *priv_cfg); };h]hXstruct analog_demod_ops { struct analog_demod_info info; void (*set_params)(struct dvb_frontend *fe, struct analog_parameters *params); int (*has_signal)(struct dvb_frontend *fe, u16 *signal); int (*get_afc)(struct dvb_frontend *fe, s32 *afc); void (*tuner_status)(struct dvb_frontend *fe); void (*standby)(struct dvb_frontend *fe); void (*release)(struct dvb_frontend *fe); int (*i2c_gate_ctrl)(struct dvb_frontend *fe, int enable); int (*set_config)(struct dvb_frontend *fe, void *priv_cfg); };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM+hjubj)}(hhh](j)}(h-``info`` pointer to struct analog_demod_info h](j)}(h``info``h]h)}(hjh]hinfo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjubj)}(hhh]h)}(h#pointer to struct analog_demod_infoh]h#pointer to struct analog_demod_info}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjubj)}(h``set_params`` callback function used to inform the demod to set the demodulator parameters needed to decode an analog or radio channel. The properties are passed via :c:type:`struct analog_params `. h](j)}(h``set_params``h]h)}(hjUh]h set_params}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM!hjOubj)}(hhh]h)}(hcallback function used to inform the demod to set the demodulator parameters needed to decode an analog or radio channel. The properties are passed via :c:type:`struct analog_params `.h](hcallback function used to inform the demod to set the demodulator parameters needed to decode an analog or radio channel. The properties are passed via }(hjnhhhNhNubh)}(h.:c:type:`struct analog_params `h]h)}(hjxh]hstruct analog_params}(hjzhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ analog_paramsuh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjnubh.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhM!hjubj)}(hA``has_signal`` returns 0xffff if has signal, or 0 if it doesn't. h](j)}(h``has_signal``h]h)}(hjh]h has_signal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM"hjubj)}(hhh]h)}(h1returns 0xffff if has signal, or 0 if it doesn't.h]h3returns 0xffff if has signal, or 0 if it doesn’t.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubj)}(hQ``get_afc`` Used only by analog TV core. Reports the frequency drift due to AFC. h](j)}(h ``get_afc``h]h)}(hjh]hget_afc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM$hjubj)}(hhh]h)}(hDUsed only by analog TV core. Reports the frequency drift due to AFC.h]hDUsed only by analog TV core. Reports the frequency drift due to AFC.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM#hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM$hjubj)}(h~``tuner_status`` callback function that returns tuner status bits, e. g. ``TUNER_STATUS_LOCKED`` and ``TUNER_STATUS_STEREO``. h](j)}(h``tuner_status``h]h)}(hj% h]h tuner_status}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj# ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM&hj ubj)}(hhh]h)}(hlcallback function that returns tuner status bits, e. g. ``TUNER_STATUS_LOCKED`` and ``TUNER_STATUS_STEREO``.h](h8callback function that returns tuner status bits, e. g. }(hj> hhhNhNubh)}(h``TUNER_STATUS_LOCKED``h]hTUNER_STATUS_LOCKED}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj> ubh and }(hj> hhhNhNubh)}(h``TUNER_STATUS_STEREO``h]hTUNER_STATUS_STEREO}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj> ubh.}(hj> hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM%hj; ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj: hM&hjubj)}(h+``standby`` set the tuner to standby mode. h](j)}(h ``standby``h]h)}(hj h]hstandby}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM'hj} ubj)}(hhh]h)}(hset the tuner to standby mode.h]hset the tuner to standby mode.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM'hj ubah}(h]h ]h"]h$]h&]uh1jhj} ubeh}(h]h ]h"]h$]h&]uh1jhj hM'hjubj)}(hj``release`` callback function called when frontend is detached. drivers should free any allocated memory. h](j)}(h ``release``h]h)}(hj h]hrelease}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM)hj ubj)}(hhh]h)}(h]callback function called when frontend is detached. drivers should free any allocated memory.h]h]callback function called when frontend is detached. drivers should free any allocated memory.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM(hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM)hjubj)}(h[``i2c_gate_ctrl`` controls the I2C gate. Newer drivers should use I2C mux support instead. h](j)}(h``i2c_gate_ctrl``h]h)}(hj h]h i2c_gate_ctrl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM+hj ubj)}(hhh]h)}(hHcontrols the I2C gate. Newer drivers should use I2C mux support instead.h]hHcontrols the I2C gate. Newer drivers should use I2C mux support instead.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM*hj !ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj !hM+hjubj)}(hM``set_config`` callback function used to send some tuner-specific parameters.h](j)}(h``set_config``h]h)}(hj0!h]h set_config}(hj2!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.!ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM,hj*!ubj)}(hhh]h)}(h>callback function used to send some tuner-specific parameters.h]h>callback function used to send some tuner-specific parameters.}(hjI!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE!hM,hjF!ubah}(h]h ]h"]h$]h&]uh1jhj*!ubeh}(h]h ]h"]h$]h&]uh1jhjE!hM,hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%dvb_frontend_internal_info (C struct)c.dvb_frontend_internal_infohNtauh1jhjhhhNhNubj$)}(hhh](j))}(hdvb_frontend_internal_infoh]j/)}(h!struct dvb_frontend_internal_infoh](j5)}(hj8h]hstruct}(hj!hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj!hhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM3ubjG)}(h h]h }(hj!hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj!hhhj!hM3ubjX)}(hdvb_frontend_internal_infoh]j^)}(hj!h]hdvb_frontend_internal_info}(hj!hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hj!ubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhj!hhhj!hM3ubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hj!hhhj!hM3ubah}(h]j|!ah ](jjeh"]h$]h&]jj)jhuh1j(hj!hM3hj~!hhubj)}(hhh]h)}(h$Frontend properties and capabilitiesh]h$Frontend properties and capabilities}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMBhj!hhubah}(h]h ]h"]h$]h&]uh1jhj~!hhhj!hM3ubeh}(h]h ](j8structeh"]h$]h&]jj8jj!jj!jjjuh1j#hhhjhNhNubj)}(hX**Definition**:: struct dvb_frontend_internal_info { char name[128]; u32 frequency_min_hz; u32 frequency_max_hz; u32 frequency_stepsize_hz; u32 frequency_tolerance_hz; u32 symbol_rate_min; u32 symbol_rate_max; u32 symbol_rate_tolerance; enum fe_caps caps; }; **Members** ``name`` Name of the frontend ``frequency_min_hz`` Minimal frequency supported by the frontend. ``frequency_max_hz`` Minimal frequency supported by the frontend. ``frequency_stepsize_hz`` All frequencies are multiple of this value. ``frequency_tolerance_hz`` Frequency tolerance. ``symbol_rate_min`` Minimal symbol rate, in bauds (for Cable/Satellite systems). ``symbol_rate_max`` Maximal symbol rate, in bauds (for Cable/Satellite systems). ``symbol_rate_tolerance`` Maximal symbol rate tolerance, in ppm (for Cable/Satellite systems). ``caps`` Capabilities supported by the frontend, as specified in :c:type:`enum fe_caps `.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh:}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMFhj!ubj)}(hXstruct dvb_frontend_internal_info { char name[128]; u32 frequency_min_hz; u32 frequency_max_hz; u32 frequency_stepsize_hz; u32 frequency_tolerance_hz; u32 symbol_rate_min; u32 symbol_rate_max; u32 symbol_rate_tolerance; enum fe_caps caps; };h]hXstruct dvb_frontend_internal_info { char name[128]; u32 frequency_min_hz; u32 frequency_max_hz; u32 frequency_stepsize_hz; u32 frequency_tolerance_hz; u32 symbol_rate_min; u32 symbol_rate_max; u32 symbol_rate_tolerance; enum fe_caps caps; };}hj"sbah}(h]h ]h"]h$]h&]hhuh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMHhj!ubh)}(h **Members**h]j)}(hj"h]hMembers}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMThj!ubj)}(hhh](j)}(h``name`` Name of the frontend h](j)}(h``name``h]h)}(hj8"h]hname}(hj:"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6"ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMEhj2"ubj)}(hhh]h)}(hName of the frontendh]hName of the frontend}(hjQ"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM"hMEhjN"ubah}(h]h ]h"]h$]h&]uh1jhj2"ubeh}(h]h ]h"]h$]h&]uh1jhjM"hMEhj/"ubj)}(hB``frequency_min_hz`` Minimal frequency supported by the frontend. h](j)}(h``frequency_min_hz``h]h)}(hjq"h]hfrequency_min_hz}(hjs"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo"ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMFhjk"ubj)}(hhh]h)}(h,Minimal frequency supported by the frontend.h]h,Minimal frequency supported by the frontend.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMFhj"ubah}(h]h ]h"]h$]h&]uh1jhjk"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMFhj/"ubj)}(hB``frequency_max_hz`` Minimal frequency supported by the frontend. h](j)}(h``frequency_max_hz``h]h)}(hj"h]hfrequency_max_hz}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMGhj"ubj)}(hhh]h)}(h,Minimal frequency supported by the frontend.h]h,Minimal frequency supported by the frontend.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMGhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMGhj/"ubj)}(hF``frequency_stepsize_hz`` All frequencies are multiple of this value. h](j)}(h``frequency_stepsize_hz``h]h)}(hj"h]hfrequency_stepsize_hz}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMHhj"ubj)}(hhh]h)}(h+All frequencies are multiple of this value.h]h+All frequencies are multiple of this value.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMHhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMHhj/"ubj)}(h0``frequency_tolerance_hz`` Frequency tolerance. h](j)}(h``frequency_tolerance_hz``h]h)}(hj#h]hfrequency_tolerance_hz}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMIhj#ubj)}(hhh]h)}(hFrequency tolerance.h]hFrequency tolerance.}(hj5#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1#hMIhj2#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj1#hMIhj/"ubj)}(hQ``symbol_rate_min`` Minimal symbol rate, in bauds (for Cable/Satellite systems). h](j)}(h``symbol_rate_min``h]h)}(hjU#h]hsymbol_rate_min}(hjW#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS#ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMKhjO#ubj)}(hhh]h)}(h`.h](j)}(h``caps``h]h)}(hj$h]hcaps}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMPhj#ubj)}(hhh]h)}(hYCapabilities supported by the frontend, as specified in :c:type:`enum fe_caps `.h](h8Capabilities supported by the frontend, as specified in }(hj$hhhNhNubh)}(h :c:type:`enum fe_caps `h]h)}(hj&$h]h enum fe_caps}(hj($hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj$$ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJfe_capsuh1hhj$hMPhj$ubh.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hMPhj$ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj$hMPhj/"ubeh}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdvb_frontend_ops (C struct)c.dvb_frontend_opshNtauh1jhjhhhNhNubj$)}(hhh](j))}(hdvb_frontend_opsh]j/)}(hstruct dvb_frontend_opsh](j5)}(hj8h]hstruct}(hj$hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj{$hhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMWubjG)}(h h]h }(hj$hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj{$hhhj$hMWubjX)}(hdvb_frontend_opsh]j^)}(hjy$h]hdvb_frontend_ops}(hj$hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hj$ubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhj{$hhhj$hMWubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hjw$hhhj$hMWubah}(h]jr$ah ](jjeh"]h$]h&]jj)jhuh1j(hj$hMWhjt$hhubj)}(hhh]h)}(h5Demodulation information and callbacks for ditialt TVh]h5Demodulation information and callbacks for ditialt TV}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM_hj$hhubah}(h]h ]h"]h$]h&]uh1jhjt$hhhj$hMWubeh}(h]h ](j8structeh"]h$]h&]jj8jj$jj$jjjuh1j#hhhjhNhNubj)}(hX**Definition**:: struct dvb_frontend_ops { struct dvb_frontend_internal_info info; u8 delsys[MAX_DELSYS]; void (*detach)(struct dvb_frontend *fe); void (*release)(struct dvb_frontend* fe); void (*release_sec)(struct dvb_frontend* fe); int (*init)(struct dvb_frontend* fe); int (*sleep)(struct dvb_frontend* fe); int (*suspend)(struct dvb_frontend *fe); int (*resume)(struct dvb_frontend *fe); int (*write)(struct dvb_frontend* fe, const u8 buf[], int len); int (*tune)(struct dvb_frontend* fe,bool re_tune,unsigned int mode_flags,unsigned int *delay, enum fe_status *status); enum dvbfe_algo (*get_frontend_algo)(struct dvb_frontend *fe); int (*set_frontend)(struct dvb_frontend *fe); int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings); int (*get_frontend)(struct dvb_frontend *fe, struct dtv_frontend_properties *props); int (*read_status)(struct dvb_frontend *fe, enum fe_status *status); int (*read_ber)(struct dvb_frontend* fe, u32* ber); int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength); int (*read_snr)(struct dvb_frontend* fe, u16* snr); int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks); int (*diseqc_reset_overload)(struct dvb_frontend* fe); int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd); int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply); int (*diseqc_send_burst)(struct dvb_frontend *fe, enum fe_sec_mini_cmd minicmd); int (*set_tone)(struct dvb_frontend *fe, enum fe_sec_tone_mode tone); int (*set_voltage)(struct dvb_frontend *fe, enum fe_sec_voltage voltage); int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg); int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd); int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable); int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire); int (*set_lna)(struct dvb_frontend *); enum dvbfe_search (*search)(struct dvb_frontend *fe); struct dvb_tuner_ops tuner_ops; struct analog_demod_ops analog_ops; }; **Members** ``info`` embedded :c:type:`struct dvb_tuner_info ` with tuner properties ``delsys`` Delivery systems supported by the frontend ``detach`` callback function called when frontend is detached. drivers should clean up, but not yet free the :c:type:`struct dvb_frontend ` allocation. ``release`` callback function called when frontend is ready to be freed. drivers should free any allocated memory. ``release_sec`` callback function requesting that the Satellite Equipment Control (SEC) driver to release and free any memory allocated by the driver. ``init`` callback function used to initialize the tuner device. ``sleep`` callback function used to put the tuner to sleep. ``suspend`` callback function used to inform that the Kernel will suspend. ``resume`` callback function used to inform that the Kernel is resuming from suspend. ``write`` callback function used by some demod legacy drivers to allow other drivers to write data into their registers. Should not be used on new drivers. ``tune`` callback function used by demod drivers that use **DVBFE_ALGO_HW** to tune into a frequency. ``get_frontend_algo`` returns the desired hardware algorithm. ``set_frontend`` callback function used to inform the demod to set the parameters for demodulating a digital TV channel. The properties to be used are stored at :c:type:`struct dvb_frontend `.dtv_property_cache. The demod can change the parameters to reflect the changes needed for the channel to be decoded, and update statistics. ``get_tune_settings`` callback function ``get_frontend`` callback function used to inform the parameters actuall in use. The properties to be used are stored at :c:type:`struct dvb_frontend `.dtv_property_cache and update statistics. Please notice that it should not return an error code if the statistics are not available because the demog is not locked. ``read_status`` returns the locking status of the frontend. ``read_ber`` legacy callback function to return the bit error rate. Newer drivers should provide such info via DVBv5 API, e. g. **set_frontend**;/**get_frontend**, implementing this callback only if DVBv3 API compatibility is wanted. ``read_signal_strength`` legacy callback function to return the signal strength. Newer drivers should provide such info via DVBv5 API, e. g. **set_frontend**/**get_frontend**, implementing this callback only if DVBv3 API compatibility is wanted. ``read_snr`` legacy callback function to return the Signal/Noise rate. Newer drivers should provide such info via DVBv5 API, e. g. **set_frontend**/**get_frontend**, implementing this callback only if DVBv3 API compatibility is wanted. ``read_ucblocks`` legacy callback function to return the Uncorrected Error Blocks. Newer drivers should provide such info via DVBv5 API, e. g. **set_frontend**/**get_frontend**, implementing this callback only if DVBv3 API compatibility is wanted. ``diseqc_reset_overload`` callback function to implement the FE_DISEQC_RESET_OVERLOAD() ioctl (only Satellite) ``diseqc_send_master_cmd`` callback function to implement the FE_DISEQC_SEND_MASTER_CMD() ioctl (only Satellite). ``diseqc_recv_slave_reply`` callback function to implement the FE_DISEQC_RECV_SLAVE_REPLY() ioctl (only Satellite) ``diseqc_send_burst`` callback function to implement the FE_DISEQC_SEND_BURST() ioctl (only Satellite). ``set_tone`` callback function to implement the FE_SET_TONE() ioctl (only Satellite). ``set_voltage`` callback function to implement the FE_SET_VOLTAGE() ioctl (only Satellite). ``enable_high_lnb_voltage`` callback function to implement the FE_ENABLE_HIGH_LNB_VOLTAGE() ioctl (only Satellite). ``dishnetwork_send_legacy_command`` callback function to implement the FE_DISHNETWORK_SEND_LEGACY_CMD() ioctl (only Satellite). Drivers should not use this, except when the DVB core emulation fails to provide proper support (e.g. if **set_voltage** takes more than 8ms to work), and when backward compatibility with this legacy API is required. ``i2c_gate_ctrl`` controls the I2C gate. Newer drivers should use I2C mux support instead. ``ts_bus_ctrl`` callback function used to take control of the TS bus. ``set_lna`` callback function to power on/off/auto the LNA. ``search`` callback function used on some custom algo search algos. ``tuner_ops`` pointer to :c:type:`struct dvb_tuner_ops ` ``analog_ops`` pointer to :c:type:`struct analog_demod_ops `h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh:}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMchj$ubj)}(hXstruct dvb_frontend_ops { struct dvb_frontend_internal_info info; u8 delsys[MAX_DELSYS]; void (*detach)(struct dvb_frontend *fe); void (*release)(struct dvb_frontend* fe); void (*release_sec)(struct dvb_frontend* fe); int (*init)(struct dvb_frontend* fe); int (*sleep)(struct dvb_frontend* fe); int (*suspend)(struct dvb_frontend *fe); int (*resume)(struct dvb_frontend *fe); int (*write)(struct dvb_frontend* fe, const u8 buf[], int len); int (*tune)(struct dvb_frontend* fe,bool re_tune,unsigned int mode_flags,unsigned int *delay, enum fe_status *status); enum dvbfe_algo (*get_frontend_algo)(struct dvb_frontend *fe); int (*set_frontend)(struct dvb_frontend *fe); int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings); int (*get_frontend)(struct dvb_frontend *fe, struct dtv_frontend_properties *props); int (*read_status)(struct dvb_frontend *fe, enum fe_status *status); int (*read_ber)(struct dvb_frontend* fe, u32* ber); int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength); int (*read_snr)(struct dvb_frontend* fe, u16* snr); int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks); int (*diseqc_reset_overload)(struct dvb_frontend* fe); int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd); int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply); int (*diseqc_send_burst)(struct dvb_frontend *fe, enum fe_sec_mini_cmd minicmd); int (*set_tone)(struct dvb_frontend *fe, enum fe_sec_tone_mode tone); int (*set_voltage)(struct dvb_frontend *fe, enum fe_sec_voltage voltage); int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg); int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd); int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable); int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire); int (*set_lna)(struct dvb_frontend *); enum dvbfe_search (*search)(struct dvb_frontend *fe); struct dvb_tuner_ops tuner_ops; struct analog_demod_ops analog_ops; };h]hXstruct dvb_frontend_ops { struct dvb_frontend_internal_info info; u8 delsys[MAX_DELSYS]; void (*detach)(struct dvb_frontend *fe); void (*release)(struct dvb_frontend* fe); void (*release_sec)(struct dvb_frontend* fe); int (*init)(struct dvb_frontend* fe); int (*sleep)(struct dvb_frontend* fe); int (*suspend)(struct dvb_frontend *fe); int (*resume)(struct dvb_frontend *fe); int (*write)(struct dvb_frontend* fe, const u8 buf[], int len); int (*tune)(struct dvb_frontend* fe,bool re_tune,unsigned int mode_flags,unsigned int *delay, enum fe_status *status); enum dvbfe_algo (*get_frontend_algo)(struct dvb_frontend *fe); int (*set_frontend)(struct dvb_frontend *fe); int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings); int (*get_frontend)(struct dvb_frontend *fe, struct dtv_frontend_properties *props); int (*read_status)(struct dvb_frontend *fe, enum fe_status *status); int (*read_ber)(struct dvb_frontend* fe, u32* ber); int (*read_signal_strength)(struct dvb_frontend* fe, u16* strength); int (*read_snr)(struct dvb_frontend* fe, u16* snr); int (*read_ucblocks)(struct dvb_frontend* fe, u32* ucblocks); int (*diseqc_reset_overload)(struct dvb_frontend* fe); int (*diseqc_send_master_cmd)(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd); int (*diseqc_recv_slave_reply)(struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply); int (*diseqc_send_burst)(struct dvb_frontend *fe, enum fe_sec_mini_cmd minicmd); int (*set_tone)(struct dvb_frontend *fe, enum fe_sec_tone_mode tone); int (*set_voltage)(struct dvb_frontend *fe, enum fe_sec_voltage voltage); int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg); int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd); int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable); int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire); int (*set_lna)(struct dvb_frontend *); enum dvbfe_search (*search)(struct dvb_frontend *fe); struct dvb_tuner_ops tuner_ops; struct analog_demod_ops analog_ops; };}hj$sbah}(h]h ]h"]h$]h&]hhuh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMehj$ubh)}(h **Members**h]j)}(hj%h]hMembers}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj %ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj$ubj)}(hhh](j)}(hY``info`` embedded :c:type:`struct dvb_tuner_info ` with tuner properties h](j)}(h``info``h]h)}(hj.%h]hinfo}(hj0%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,%ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMchj(%ubj)}(hhh]h)}(hOembedded :c:type:`struct dvb_tuner_info ` with tuner propertiesh](h embedded }(hjG%hhhNhNubh)}(h0:c:type:`struct dvb_tuner_info `h]h)}(hjQ%h]hstruct dvb_tuner_info}(hjS%hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjO%ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_tuner_infouh1hhjC%hMchjG%ubh with tuner properties}(hjG%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjC%hMchjD%ubah}(h]h ]h"]h$]h&]uh1jhj(%ubeh}(h]h ]h"]h$]h&]uh1jhjC%hMchj%%ubj)}(h6``delsys`` Delivery systems supported by the frontend h](j)}(h ``delsys``h]h)}(hj%h]hdelsys}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMdhj%ubj)}(hhh]h)}(h*Delivery systems supported by the frontendh]h*Delivery systems supported by the frontend}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMdhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMdhj%%ubj)}(h``detach`` callback function called when frontend is detached. drivers should clean up, but not yet free the :c:type:`struct dvb_frontend ` allocation. h](j)}(h ``detach``h]h)}(hj%h]hdetach}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMghj%ubj)}(hhh]h)}(hcallback function called when frontend is detached. drivers should clean up, but not yet free the :c:type:`struct dvb_frontend ` allocation.h](hbcallback function called when frontend is detached. drivers should clean up, but not yet free the }(hj%hhhNhNubh)}(h,:c:type:`struct dvb_frontend `h]h)}(hj%h]hstruct dvb_frontend}(hj%hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ dvb_frontenduh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMehj%ubh allocation.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hMehj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMghj%%ubj)}(hs``release`` callback function called when frontend is ready to be freed. drivers should free any allocated memory. h](j)}(h ``release``h]h)}(hj &h]hrelease}(hj"&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMjhj&ubj)}(hhh]h)}(hfcallback function called when frontend is ready to be freed. drivers should free any allocated memory.h]hfcallback function called when frontend is ready to be freed. drivers should free any allocated memory.}(hj9&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhhj6&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj5&hMjhj%%ubj)}(h``release_sec`` callback function requesting that the Satellite Equipment Control (SEC) driver to release and free any memory allocated by the driver. h](j)}(h``release_sec``h]h)}(hjZ&h]h release_sec}(hj\&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjX&ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMmhjT&ubj)}(hhh]h)}(hcallback function requesting that the Satellite Equipment Control (SEC) driver to release and free any memory allocated by the driver.h]hcallback function requesting that the Satellite Equipment Control (SEC) driver to release and free any memory allocated by the driver.}(hjs&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMkhjp&ubah}(h]h ]h"]h$]h&]uh1jhjT&ubeh}(h]h ]h"]h$]h&]uh1jhjo&hMmhj%%ubj)}(h@``init`` callback function used to initialize the tuner device. h](j)}(h``init``h]h)}(hj&h]hinit}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMnhj&ubj)}(hhh]h)}(h6callback function used to initialize the tuner device.h]h6callback function used to initialize the tuner device.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMnhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMnhj%%ubj)}(h<``sleep`` callback function used to put the tuner to sleep. h](j)}(h ``sleep``h]h)}(hj&h]hsleep}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMohj&ubj)}(hhh]h)}(h1callback function used to put the tuner to sleep.h]h1callback function used to put the tuner to sleep.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMohj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMohj%%ubj)}(hK``suspend`` callback function used to inform that the Kernel will suspend. h](j)}(h ``suspend``h]h)}(hj'h]hsuspend}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMqhj'ubj)}(hhh]h)}(h>callback function used to inform that the Kernel will suspend.h]h>callback function used to inform that the Kernel will suspend.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMphj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMqhj%%ubj)}(hV``resume`` callback function used to inform that the Kernel is resuming from suspend. h](j)}(h ``resume``h]h)}(hj@'h]hresume}(hjB'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>'ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMshj:'ubj)}(hhh]h)}(hJcallback function used to inform that the Kernel is resuming from suspend.h]hJcallback function used to inform that the Kernel is resuming from suspend.}(hjY'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMrhjV'ubah}(h]h ]h"]h$]h&]uh1jhj:'ubeh}(h]h ]h"]h$]h&]uh1jhjU'hMshj%%ubj)}(h``write`` callback function used by some demod legacy drivers to allow other drivers to write data into their registers. Should not be used on new drivers. h](j)}(h ``write``h]h)}(hjz'h]hwrite}(hj|'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx'ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMvhjt'ubj)}(hhh]h)}(hcallback function used by some demod legacy drivers to allow other drivers to write data into their registers. Should not be used on new drivers.h]hcallback function used by some demod legacy drivers to allow other drivers to write data into their registers. Should not be used on new drivers.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMthj'ubah}(h]h ]h"]h$]h&]uh1jhjt'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMvhj%%ubj)}(hf``tune`` callback function used by demod drivers that use **DVBFE_ALGO_HW** to tune into a frequency. h](j)}(h``tune``h]h)}(hj'h]htune}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMxhj'ubj)}(hhh]h)}(h\callback function used by demod drivers that use **DVBFE_ALGO_HW** to tune into a frequency.h](h1callback function used by demod drivers that use }(hj'hhhNhNubj)}(h**DVBFE_ALGO_HW**h]h DVBFE_ALGO_HW}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh to tune into a frequency.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMwhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMxhj%%ubj)}(h>``get_frontend_algo`` returns the desired hardware algorithm. h](j)}(h``get_frontend_algo``h]h)}(hj(h]hget_frontend_algo}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMyhj'ubj)}(hhh]h)}(h'returns the desired hardware algorithm.h]h'returns the desired hardware algorithm.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMyhj(ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj(hMyhj%%ubj)}(hXZ``set_frontend`` callback function used to inform the demod to set the parameters for demodulating a digital TV channel. The properties to be used are stored at :c:type:`struct dvb_frontend `.dtv_property_cache. The demod can change the parameters to reflect the changes needed for the channel to be decoded, and update statistics. h](j)}(h``set_frontend``h]h)}(hj9(h]h set_frontend}(hj;(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7(ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj3(ubj)}(hhh]h)}(hXHcallback function used to inform the demod to set the parameters for demodulating a digital TV channel. The properties to be used are stored at :c:type:`struct dvb_frontend `.dtv_property_cache. The demod can change the parameters to reflect the changes needed for the channel to be decoded, and update statistics.h](hcallback function used to inform the demod to set the parameters for demodulating a digital TV channel. The properties to be used are stored at }(hjR(hhhNhNubh)}(h,:c:type:`struct dvb_frontend `h]h)}(hj\(h]hstruct dvb_frontend}(hj^(hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjZ(ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ dvb_frontenduh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMzhjR(ubh.dtv_property_cache. The demod can change the parameters to reflect the changes needed for the channel to be decoded, and update statistics.}(hjR(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjy(hMzhjO(ubah}(h]h ]h"]h$]h&]uh1jhj3(ubeh}(h]h ]h"]h$]h&]uh1jhjN(hMhj%%ubj)}(h(``get_tune_settings`` callback function h](j)}(h``get_tune_settings``h]h)}(hj(h]hget_tune_settings}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj(ubj)}(hhh]h)}(hcallback functionh]hcallback function}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj%%ubj)}(hXK``get_frontend`` callback function used to inform the parameters actuall in use. The properties to be used are stored at :c:type:`struct dvb_frontend `.dtv_property_cache and update statistics. Please notice that it should not return an error code if the statistics are not available because the demog is not locked. h](j)}(h``get_frontend``h]h)}(hj(h]h get_frontend}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj(ubj)}(hhh]h)}(hX9callback function used to inform the parameters actuall in use. The properties to be used are stored at :c:type:`struct dvb_frontend `.dtv_property_cache and update statistics. Please notice that it should not return an error code if the statistics are not available because the demog is not locked.h](hhcallback function used to inform the parameters actuall in use. The properties to be used are stored at }(hj(hhhNhNubh)}(h,:c:type:`struct dvb_frontend `h]h)}(hj(h]hstruct dvb_frontend}(hj(hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ dvb_frontenduh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj(ubh.dtv_property_cache and update statistics. Please notice that it should not return an error code if the statistics are not available because the demog is not locked.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj%%ubj)}(h<``read_status`` returns the locking status of the frontend. h](j)}(h``read_status``h]h)}(hj,)h]h read_status}(hj.)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*)ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj&)ubj)}(hhh]h)}(h+returns the locking status of the frontend.h]h+returns the locking status of the frontend.}(hjE)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA)hMhjB)ubah}(h]h ]h"]h$]h&]uh1jhj&)ubeh}(h]h ]h"]h$]h&]uh1jhjA)hMhj%%ubj)}(h``read_ber`` legacy callback function to return the bit error rate. Newer drivers should provide such info via DVBv5 API, e. g. **set_frontend**;/**get_frontend**, implementing this callback only if DVBv3 API compatibility is wanted. h](j)}(h ``read_ber``h]h)}(hje)h]hread_ber}(hjg)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjc)ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj_)ubj)}(hhh]h)}(hlegacy callback function to return the bit error rate. Newer drivers should provide such info via DVBv5 API, e. g. **set_frontend**;/**get_frontend**, implementing this callback only if DVBv3 API compatibility is wanted.h](hslegacy callback function to return the bit error rate. Newer drivers should provide such info via DVBv5 API, e. g. }(hj~)hhhNhNubj)}(h**set_frontend**h]h set_frontend}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~)ubh;/}(hj~)hhhNhNubj)}(h**get_frontend**h]h get_frontend}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~)ubhG, implementing this callback only if DVBv3 API compatibility is wanted.}(hj~)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj{)ubah}(h]h ]h"]h$]h&]uh1jhj_)ubeh}(h]h ]h"]h$]h&]uh1jhjz)hMhj%%ubj)}(h``read_signal_strength`` legacy callback function to return the signal strength. Newer drivers should provide such info via DVBv5 API, e. g. **set_frontend**/**get_frontend**, implementing this callback only if DVBv3 API compatibility is wanted. h](j)}(h``read_signal_strength``h]h)}(hj)h]hread_signal_strength}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj)ubj)}(hhh]h)}(hlegacy callback function to return the signal strength. Newer drivers should provide such info via DVBv5 API, e. g. **set_frontend**/**get_frontend**, implementing this callback only if DVBv3 API compatibility is wanted.h](htlegacy callback function to return the signal strength. Newer drivers should provide such info via DVBv5 API, e. g. }(hj)hhhNhNubj)}(h**set_frontend**h]h set_frontend}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh/}(hj)hhhNhNubj)}(h**get_frontend**h]h get_frontend}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubhG, implementing this callback only if DVBv3 API compatibility is wanted.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj%%ubj)}(h``read_snr`` legacy callback function to return the Signal/Noise rate. Newer drivers should provide such info via DVBv5 API, e. g. **set_frontend**/**get_frontend**, implementing this callback only if DVBv3 API compatibility is wanted. h](j)}(h ``read_snr``h]h)}(hj!*h]hread_snr}(hj#*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj*ubj)}(hhh]h)}(hlegacy callback function to return the Signal/Noise rate. Newer drivers should provide such info via DVBv5 API, e. g. **set_frontend**/**get_frontend**, implementing this callback only if DVBv3 API compatibility is wanted.h](hvlegacy callback function to return the Signal/Noise rate. Newer drivers should provide such info via DVBv5 API, e. g. }(hj:*hhhNhNubj)}(h**set_frontend**h]h set_frontend}(hjB*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:*ubh/}(hj:*hhhNhNubj)}(h**get_frontend**h]h get_frontend}(hjT*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:*ubhG, implementing this callback only if DVBv3 API compatibility is wanted.}(hj:*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj7*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj6*hMhj%%ubj)}(h``read_ucblocks`` legacy callback function to return the Uncorrected Error Blocks. Newer drivers should provide such info via DVBv5 API, e. g. **set_frontend**/**get_frontend**, implementing this callback only if DVBv3 API compatibility is wanted. h](j)}(h``read_ucblocks``h]h)}(hj*h]h read_ucblocks}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}*ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjy*ubj)}(hhh]h)}(hlegacy callback function to return the Uncorrected Error Blocks. Newer drivers should provide such info via DVBv5 API, e. g. **set_frontend**/**get_frontend**, implementing this callback only if DVBv3 API compatibility is wanted.h](h}legacy callback function to return the Uncorrected Error Blocks. Newer drivers should provide such info via DVBv5 API, e. g. }(hj*hhhNhNubj)}(h**set_frontend**h]h set_frontend}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh/}(hj*hhhNhNubj)}(h**get_frontend**h]h get_frontend}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubhG, implementing this callback only if DVBv3 API compatibility is wanted.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj*ubah}(h]h ]h"]h$]h&]uh1jhjy*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj%%ubj)}(ho``diseqc_reset_overload`` callback function to implement the FE_DISEQC_RESET_OVERLOAD() ioctl (only Satellite) h](j)}(h``diseqc_reset_overload``h]h)}(hj*h]hdiseqc_reset_overload}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj*ubj)}(hhh]h)}(hTcallback function to implement the FE_DISEQC_RESET_OVERLOAD() ioctl (only Satellite)h]hTcallback function to implement the FE_DISEQC_RESET_OVERLOAD() ioctl (only Satellite)}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]u h1jhj*hMhj%%ubj)}(hr``diseqc_send_master_cmd`` callback function to implement the FE_DISEQC_SEND_MASTER_CMD() ioctl (only Satellite). h](j)}(h``diseqc_send_master_cmd``h]h)}(hj+h]hdiseqc_send_master_cmd}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj+ubj)}(hhh]h)}(hVcallback function to implement the FE_DISEQC_SEND_MASTER_CMD() ioctl (only Satellite).h]hVcallback function to implement the FE_DISEQC_SEND_MASTER_CMD() ioctl (only Satellite).}(hj0+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj-+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj,+hMhj%%ubj)}(hs``diseqc_recv_slave_reply`` callback function to implement the FE_DISEQC_RECV_SLAVE_REPLY() ioctl (only Satellite) h](j)}(h``diseqc_recv_slave_reply``h]h)}(hjQ+h]hdiseqc_recv_slave_reply}(hjS+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO+ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjK+ubj)}(hhh]h)}(hVcallback function to implement the FE_DISEQC_RECV_SLAVE_REPLY() ioctl (only Satellite)h]hVcallback function to implement the FE_DISEQC_RECV_SLAVE_REPLY() ioctl (only Satellite)}(hjj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjg+ubah}(h]h ]h"]h$]h&]uh1jhjK+ubeh}(h]h ]h"]h$]h&]uh1jhjf+hMhj%%ubj)}(hh``diseqc_send_burst`` callback function to implement the FE_DISEQC_SEND_BURST() ioctl (only Satellite). h](j)}(h``diseqc_send_burst``h]h)}(hj+h]hdiseqc_send_burst}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj+ubj)}(hhh]h)}(hQcallback function to implement the FE_DISEQC_SEND_BURST() ioctl (only Satellite).h]hQcallback function to implement the FE_DISEQC_SEND_BURST() ioctl (only Satellite).}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj%%ubj)}(hV``set_tone`` callback function to implement the FE_SET_TONE() ioctl (only Satellite). h](j)}(h ``set_tone``h]h)}(hj+h]hset_tone}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj+ubj)}(hhh]h)}(hHcallback function to implement the FE_SET_TONE() ioctl (only Satellite).h]hHcallback function to implement the FE_SET_TONE() ioctl (only Satellite).}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj%%ubj)}(h\``set_voltage`` callback function to implement the FE_SET_VOLTAGE() ioctl (only Satellite). h](j)}(h``set_voltage``h]h)}(hj+h]h set_voltage}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj+ubj)}(hhh]h)}(hKcallback function to implement the FE_SET_VOLTAGE() ioctl (only Satellite).h]hKcallback function to implement the FE_SET_VOLTAGE() ioctl (only Satellite).}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj,ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj%%ubj)}(ht``enable_high_lnb_voltage`` callback function to implement the FE_ENABLE_HIGH_LNB_VOLTAGE() ioctl (only Satellite). h](j)}(h``enable_high_lnb_voltage``h]h)}(hj9,h]henable_high_lnb_voltage}(hj;,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7,ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj3,ubj)}(hhh]h)}(hWcallback function to implement the FE_ENABLE_HIGH_LNB_VOLTAGE() ioctl (only Satellite).h]hWcallback function to implement the FE_ENABLE_HIGH_LNB_VOLTAGE() ioctl (only Satellite).}(hjR,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjO,ubah}(h]h ]h"]h$]h&]uh1jhj3,ubeh}(h]h ]h"]h$]h&]uh1jhjN,hMhj%%ubj)}(hXY``dishnetwork_send_legacy_command`` callback function to implement the FE_DISHNETWORK_SEND_LEGACY_CMD() ioctl (only Satellite). Drivers should not use this, except when the DVB core emulation fails to provide proper support (e.g. if **set_voltage** takes more than 8ms to work), and when backward compatibility with this legacy API is required. h](j)}(h#``dishnetwork_send_legacy_command``h]h)}(hjs,h]hdishnetwork_send_legacy_command}(hju,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq,ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjm,ubj)}(hhh]h)}(hX4callback function to implement the FE_DISHNETWORK_SEND_LEGACY_CMD() ioctl (only Satellite). Drivers should not use this, except when the DVB core emulation fails to provide proper support (e.g. if **set_voltage** takes more than 8ms to work), and when backward compatibility with this legacy API is required.h](hcallback function to implement the FE_DISHNETWORK_SEND_LEGACY_CMD() ioctl (only Satellite). Drivers should not use this, except when the DVB core emulation fails to provide proper support (e.g. if }(hj,hhhNhNubj)}(h**set_voltage**h]h set_voltage}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh` takes more than 8ms to work), and when backward compatibility with this legacy API is required.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj,ubah}(h]h ]h"]h$]h&]uh1jhjm,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj%%ubj)}(h[``i2c_gate_ctrl`` controls the I2C gate. Newer drivers should use I2C mux support instead. h](j)}(h``i2c_gate_ctrl``h]h)}(hj,h]h i2c_gate_ctrl}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj,ubj)}(hhh]h)}(hHcontrols the I2C gate. Newer drivers should use I2C mux support instead.h]hHcontrols the I2C gate. Newer drivers should use I2C mux support instead.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj%%ubj)}(hF``ts_bus_ctrl`` callback function used to take control of the TS bus. h](j)}(h``ts_bus_ctrl``h]h)}(hj,h]h ts_bus_ctrl}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj,ubj)}(hhh]h)}(h5callback function used to take control of the TS bus.h]h5callback function used to take control of the TS bus.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhj%%ubj)}(h<``set_lna`` callback function to power on/off/auto the LNA. h](j)}(h ``set_lna``h]h)}(hj2-h]hset_lna}(hj4-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0-ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj,-ubj)}(hhh]h)}(h/callback function to power on/off/auto the LNA.h]h/callback function to power on/off/auto the LNA.}(hjK-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG-hMhjH-ubah}(h]h ]h"]h$]h&]uh1jhj,-ubeh}(h]h ]h"]h$]h&]uh1jhjG-hMhj%%ubj)}(hD``search`` callback function used on some custom algo search algos. h](j)}(h ``search``h]h)}(hjk-h]hsearch}(hjm-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji-ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhje-ubj)}(hhh]h)}(h8callback function used on some custom algo search algos.h]h8callback function used on some custom algo search algos.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhje-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhj%%ubj)}(hH``tuner_ops`` pointer to :c:type:`struct dvb_tuner_ops ` h](j)}(h ``tuner_ops``h]h)}(hj-h]h tuner_ops}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj-ubj)}(hhh]h)}(h9pointer to :c:type:`struct dvb_tuner_ops `h](h pointer to }(hj-hhhNhNubh)}(h.:c:type:`struct dvb_tuner_ops `h]h)}(hj-h]hstruct dvb_tuner_ops}(hj-hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ dvb_tuner_opsuh1hhj-hMhj-ubeh}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhj%%ubj)}(hN``analog_ops`` pointer to :c:type:`struct analog_demod_ops `h](j)}(h``analog_ops``h]h)}(hj-h]h analog_ops}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj-ubj)}(hhh]h)}(h?pointer to :c:type:`struct analog_demod_ops `h](h pointer to }(hj.hhhNhNubh)}(h4:c:type:`struct analog_demod_ops `h]h)}(hj.h]hstruct analog_demod_ops}(hj!.hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJanalog_demod_opsuh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj.ubeh}(h]h ]h"]h$]h&]uh1hhj<.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj%%ubeh}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"dtv_frontend_properties (C struct)c.dtv_frontend_propertieshNtauh1jhjhhhNhNubj$)}(hhh](j))}(hdtv_frontend_propertiesh]j/)}(hstruct dtv_frontend_propertiesh](j5)}(hj8h]hstruct}(hju.hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjq.hhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMubjG)}(h h]h }(hj.hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjq.hhhj.hMubjX)}(hdtv_frontend_propertiesh]j^)}(hjo.h]hdtv_frontend_properties}(hj.hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hj.ubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhjq.hhhj.hMubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hjm.hhhj.hMubah}(h]jh.ah ](jjeh"]h$]h&]jj)jhuh1j(hj.hMhjj.hhubj)}(hhh]h)}(hIcontains a list of properties that are specific to a digital TV standard.h]hIcontains a list of properties that are specific to a digital TV standard.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj.hhubah}(h]h ]h"]h$]h&]uh1jhjj.hhhj.hMubeh}(h]h ](j8structeh"]h$]h&]jj8jj.jj.jjjuh1j#hhhjhNhNubj)}(hX**Definition**:: struct dtv_frontend_properties { u32 frequency; enum fe_modulation modulation; enum fe_sec_voltage voltage; enum fe_sec_tone_mode sectone; enum fe_spectral_inversion inversion; enum fe_code_rate fec_inner; enum fe_transmit_mode transmission_mode; u32 bandwidth_hz; enum fe_guard_interval guard_interval; enum fe_hierarchy hierarchy; u32 symbol_rate; enum fe_code_rate code_rate_HP; enum fe_code_rate code_rate_LP; enum fe_pilot pilot; enum fe_rolloff rolloff; enum fe_delivery_system delivery_system; enum fe_interleaving interleaving; u8 isdbt_partial_reception; u8 isdbt_sb_mode; u8 isdbt_sb_subchannel; u32 isdbt_sb_segment_idx; u32 isdbt_sb_segment_count; u8 isdbt_layer_enabled; struct { u8 segment_count; enum fe_code_rate fec; enum fe_modulation modulation; u8 interleaving; } layer[3]; u32 stream_id; u32 scrambling_sequence_index; u8 atscmh_fic_ver; u8 atscmh_parade_id; u8 atscmh_nog; u8 atscmh_tnog; u8 atscmh_sgn; u8 atscmh_prc; u8 atscmh_rs_frame_mode; u8 atscmh_rs_frame_ensemble; u8 atscmh_rs_code_mode_pri; u8 atscmh_rs_code_mode_sec; u8 atscmh_sccc_block_mode; u8 atscmh_sccc_code_mode_a; u8 atscmh_sccc_code_mode_b; u8 atscmh_sccc_code_mode_c; u8 atscmh_sccc_code_mode_d; u32 lna; struct dtv_fe_stats strength; struct dtv_fe_stats cnr; struct dtv_fe_stats pre_bit_error; struct dtv_fe_stats pre_bit_count; struct dtv_fe_stats post_bit_error; struct dtv_fe_stats post_bit_count; struct dtv_fe_stats block_error; struct dtv_fe_stats block_count; }; **Members** ``frequency`` frequency in Hz for terrestrial/cable or in kHz for Satellite ``modulation`` Frontend modulation type ``voltage`` SEC voltage (only Satellite) ``sectone`` SEC tone mode (only Satellite) ``inversion`` Spectral inversion ``fec_inner`` Forward error correction inner Code Rate ``transmission_mode`` Transmission Mode ``bandwidth_hz`` Bandwidth, in Hz. A zero value means that userspace wants to autodetect. ``guard_interval`` Guard Interval ``hierarchy`` Hierarchy ``symbol_rate`` Symbol Rate ``code_rate_HP`` high priority stream code rate ``code_rate_LP`` low priority stream code rate ``pilot`` Enable/disable/autodetect pilot tones ``rolloff`` Rolloff factor (alpha) ``delivery_system`` FE delivery system (e. g. digital TV standard) ``interleaving`` interleaving ``isdbt_partial_reception`` ISDB-T partial reception (only ISDB standard) ``isdbt_sb_mode`` ISDB-T Sound Broadcast (SB) mode (only ISDB standard) ``isdbt_sb_subchannel`` ISDB-T SB subchannel (only ISDB standard) ``isdbt_sb_segment_idx`` ISDB-T SB segment index (only ISDB standard) ``isdbt_sb_segment_count`` ISDB-T SB segment count (only ISDB standard) ``isdbt_layer_enabled`` ISDB Layer enabled (only ISDB standard) ``layer`` ISDB per-layer data (only ISDB standard) ``layer.segment_count`` Segment Count; ``layer.fec`` per layer code rate; ``layer.modulation`` per layer modulation; ``layer.interleaving`` per layer interleaving. ``stream_id`` If different than zero, enable substream filtering, if hardware supports (DVB-S2 and DVB-T2). ``scrambling_sequence_index`` Carries the index of the DVB-S2 physical layer scrambling sequence. ``atscmh_fic_ver`` Version number of the FIC (Fast Information Channel) signaling data (only ATSC-M/H) ``atscmh_parade_id`` Parade identification number (only ATSC-M/H) ``atscmh_nog`` Number of MH groups per MH subframe for a designated parade (only ATSC-M/H) ``atscmh_tnog`` Total number of MH groups including all MH groups belonging to all MH parades in one MH subframe (only ATSC-M/H) ``atscmh_sgn`` Start group number (only ATSC-M/H) ``atscmh_prc`` Parade repetition cycle (only ATSC-M/H) ``atscmh_rs_frame_mode`` Reed Solomon (RS) frame mode (only ATSC-M/H) ``atscmh_rs_frame_ensemble`` RS frame ensemble (only ATSC-M/H) ``atscmh_rs_code_mode_pri`` RS code mode pri (only ATSC-M/H) ``atscmh_rs_code_mode_sec`` RS code mode sec (only ATSC-M/H) ``atscmh_sccc_block_mode`` Series Concatenated Convolutional Code (SCCC) Block Mode (only ATSC-M/H) ``atscmh_sccc_code_mode_a`` SCCC code mode A (only ATSC-M/H) ``atscmh_sccc_code_mode_b`` SCCC code mode B (only ATSC-M/H) ``atscmh_sccc_code_mode_c`` SCCC code mode C (only ATSC-M/H) ``atscmh_sccc_code_mode_d`` SCCC code mode D (only ATSC-M/H) ``lna`` Power ON/OFF/AUTO the Linear Now-noise Amplifier (LNA) ``strength`` DVBv5 API statistics: Signal Strength ``cnr`` DVBv5 API statistics: Signal to Noise ratio of the (main) carrier ``pre_bit_error`` DVBv5 API statistics: pre-Viterbi bit error count ``pre_bit_count`` DVBv5 API statistics: pre-Viterbi bit count ``post_bit_error`` DVBv5 API statistics: post-Viterbi bit error count ``post_bit_count`` DVBv5 API statistics: post-Viterbi bit count ``block_error`` DVBv5 API statistics: block error count ``block_count`` DVBv5 API statistics: block counth](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh:}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM hj.ubj)}(hXstruct dtv_frontend_properties { u32 frequency; enum fe_modulation modulation; enum fe_sec_voltage voltage; enum fe_sec_tone_mode sectone; enum fe_spectral_inversion inversion; enum fe_code_rate fec_inner; enum fe_transmit_mode transmission_mode; u32 bandwidth_hz; enum fe_guard_interval guard_interval; enum fe_hierarchy hierarchy; u32 symbol_rate; enum fe_code_rate code_rate_HP; enum fe_code_rate code_rate_LP; enum fe_pilot pilot; enum fe_rolloff rolloff; enum fe_delivery_system delivery_system; enum fe_interleaving interleaving; u8 isdbt_partial_reception; u8 isdbt_sb_mode; u8 isdbt_sb_subchannel; u32 isdbt_sb_segment_idx; u32 isdbt_sb_segment_count; u8 isdbt_layer_enabled; struct { u8 segment_count; enum fe_code_rate fec; enum fe_modulation modulation; u8 interleaving; } layer[3]; u32 stream_id; u32 scrambling_sequence_index; u8 atscmh_fic_ver; u8 atscmh_parade_id; u8 atscmh_nog; u8 atscmh_tnog; u8 atscmh_sgn; u8 atscmh_prc; u8 atscmh_rs_frame_mode; u8 atscmh_rs_frame_ensemble; u8 atscmh_rs_code_mode_pri; u8 atscmh_rs_code_mode_sec; u8 atscmh_sccc_block_mode; u8 atscmh_sccc_code_mode_a; u8 atscmh_sccc_code_mode_b; u8 atscmh_sccc_code_mode_c; u8 atscmh_sccc_code_mode_d; u32 lna; struct dtv_fe_stats strength; struct dtv_fe_stats cnr; struct dtv_fe_stats pre_bit_error; struct dtv_fe_stats pre_bit_count; struct dtv_fe_stats post_bit_error; struct dtv_fe_stats post_bit_count; struct dtv_fe_stats block_error; struct dtv_fe_stats block_count; };h]hXstruct dtv_frontend_properties { u32 frequency; enum fe_modulation modulation; enum fe_sec_voltage voltage; enum fe_sec_tone_mode sectone; enum fe_spectral_inversion inversion; enum fe_code_rate fec_inner; enum fe_transmit_mode transmission_mode; u32 bandwidth_hz; enum fe_guard_interval guard_interval; enum fe_hierarchy hierarchy; u32 symbol_rate; enum fe_code_rate code_rate_HP; enum fe_code_rate code_rate_LP; enum fe_pilot pilot; enum fe_rolloff rolloff; enum fe_delivery_system delivery_system; enum fe_interleaving interleaving; u8 isdbt_partial_reception; u8 isdbt_sb_mode; u8 isdbt_sb_subchannel; u32 isdbt_sb_segment_idx; u32 isdbt_sb_segment_count; u8 isdbt_layer_enabled; struct { u8 segment_count; enum fe_code_rate fec; enum fe_modulation modulation; u8 interleaving; } layer[3]; u32 stream_id; u32 scrambling_sequence_index; u8 atscmh_fic_ver; u8 atscmh_parade_id; u8 atscmh_nog; u8 atscmh_tnog; u8 atscmh_sgn; u8 atscmh_prc; u8 atscmh_rs_frame_mode; u8 atscmh_rs_frame_ensemble; u8 atscmh_rs_code_mode_pri; u8 atscmh_rs_code_mode_sec; u8 atscmh_sccc_block_mode; u8 atscmh_sccc_code_mode_a; u8 atscmh_sccc_code_mode_b; u8 atscmh_sccc_code_mode_c; u8 atscmh_sccc_code_mode_d; u32 lna; struct dtv_fe_stats strength; struct dtv_fe_stats cnr; struct dtv_fe_stats pre_bit_error; struct dtv_fe_stats pre_bit_count; struct dtv_fe_stats post_bit_error; struct dtv_fe_stats post_bit_count; struct dtv_fe_stats block_error; struct dtv_fe_stats block_count; };}hj.sbah}(h]h ]h"]h$]h&]hhuh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM hj.ubh)}(h **Members**h]j)}(hj/h]hMembers}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMEhj.ubj)}(hhh](j)}(hL``frequency`` frequency in Hz for terrestrial/cable or in kHz for Satellite h](j)}(h ``frequency``h]h)}(hj$/h]h frequency}(hj&/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"/ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM hj/ubj)}(hhh]h)}(h=frequency in Hz for terrestrial/cable or in kHz for Satelliteh]h=frequency in Hz for terrestrial/cable or in kHz for Satellite}(hj=/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM hj:/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj9/hM hj/ubj)}(h(``modulation`` Frontend modulation type h](j)}(h``modulation``h]h)}(hj^/h]h modulation}(hj`/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\/ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM hjX/ubj)}(hhh]h)}(hFrontend modulation typeh]hFrontend modulation type}(hjw/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs/hM hjt/ubah}(h]h ]h"]h$]h&]uh1jhjX/ubeh}(h]h ]h"]h$]h&]uh1jhjs/hM hj/ubj)}(h)``voltage`` SEC voltage (only Satellite) h](j)}(h ``voltage``h]h)}(hj/h]hvoltage}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM hj/ubj)}(hhh]h)}(hSEC voltage (only Satellite)h]hSEC voltage (only Satellite)}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hM hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hM hj/ubj)}(h+``sectone`` SEC tone mode (only Satellite) h](j)}(h ``sectone``h]h)}(hj/h]hsectone}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM hj/ubj)}(hhh]h)}(hSEC tone mode (only Satellite)h]hSEC tone mode (only Satellite)}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hM hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hM hj/ubj)}(h!``inversion`` Spectral inversion h](j)}(h ``inversion``h]h)}(hj 0h]h inversion}(hj 0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj0ubj)}(hhh]h)}(hSpectral inversionh]hSpectral inversion}(hj"0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj/ubj)}(h7``fec_inner`` Forward error correction inner Code Rate h](j)}(h ``fec_inner``h]h)}(hjB0h]h fec_inner}(hjD0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@0ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj<0ubj)}(hhh]h)}(h(Forward error correction inner Code Rateh]h(Forward error correction inner Code Rate}(hj[0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjW0hMhjX0ubah}(h]h ]h"]h$]h&]uh1jhj<0ubeh}(h]h ]h"]h$]h&]uh1jhjW0hMhj/ubj)}(h(``transmission_mode`` Transmission Mode h](j)}(h``transmission_mode``h]h)}(hj{0h]htransmission_mode}(hj}0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy0ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhju0ubj)}(hhh]h)}(hTransmission Modeh]hTransmission Mode}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhju0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj/ubj)}(hZ``bandwidth_hz`` Bandwidth, in Hz. A zero value means that userspace wants to autodetect. h](j)}(h``bandwidth_hz``h]h)}(hj0h]h bandwidth_hz}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj0ubj)}(hhh]h)}(hHBandwidth, in Hz. A zero value means that userspace wants to autodetect.h]hHBandwidth, in Hz. A zero value means that userspace wants to autodetect.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj/ubj)}(h"``guard_interval`` Guard Interval h](j)}(h``guard_interval``h]h)}(hj0h]hguard_interval}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj0ubj)}(hhh]h)}(hGuard Intervalh]hGuard Interval}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj/ubj)}(h``hierarchy`` Hierarchy h](j)}(h ``hierarchy``h]h)}(hj'1h]h hierarchy}(hj)1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%1ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj!1ubj)}(hhh]h)}(h Hierarchyh]h Hierarchy}(hj@1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<1hMhj=1ubah}(h]h ]h"]h$]h&]uh1jhj!1ubeh}(h]h ]h"]h$]h&]uh1jhj<1hMhj/ubj)}(h``symbol_rate`` Symbol Rate h](j)}(h``symbol_rate``h]h)}(hj`1h]h symbol_rate}(hjb1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^1ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjZ1ubj)}(hhh]h)}(h Symbol Rateh]h Symbol Rate}(hjy1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju1hMhjv1ubah}(h]h ]h"]h$]h&]uh1jhjZ1ubeh}(h]h ]h"]h$]h&]uh1jhju1hMhj/ubj)}(h0``code_rate_HP`` high priority stream code rate h](j)}(h``code_rate_HP``h]h)}(hj1h]h code_rate_HP}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj1ubj)}(hhh]h)}(hhigh priority stream code rateh]hhigh priority stream code rate}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj/ubj)}(h/``code_rate_LP`` low priority stream code rate h](j)}(h``code_rate_LP``h]h)}(hj1h]h code_rate_LP}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj1ubj)}(hhh]h)}(hlow priority stream code rateh]hlow priority stream code rate}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj/ubj)}(h0``pilot`` Enable/disable/autodetect pilot tones h](j)}(h ``pilot``h]h)}(hj 2h]hpilot}(hj 2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 2ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj2ubj)}(hhh]h)}(h%Enable/disable/autodetect pilot tonesh]h%Enable/disable/autodetect pilot tones}(hj$2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 2hMhj!2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj 2hMhj/ubj)}(h#``rolloff`` Rolloff factor (alpha) h](j)}(h ``rolloff``h]h)}(hjD2h]hrolloff}(hjF2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjB2ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj>2ubj)}(hhh]h)}(hRolloff factor (alpha)h]hRolloff factor (alpha)}(hj]2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY2hMhjZ2ubah}(h]h ]h"]h$]h&]uh1jhj>2ubeh}(h]h ]h"]h$]h&]uh1jhjY2hMhj/ubj)}(hC``delivery_system`` FE delivery system (e. g. digital TV standard) h](j)}(h``delivery_system``h]h)}(hj}2h]hdelivery_system}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{2ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjw2ubj)}(hhh]h)}(h.FE delivery system (e. g. digital TV standard)h]h.FE delivery system (e. g. digital TV standard)}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjw2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj/ubj)}(h``interleaving`` interleaving h](j)}(h``interleaving``h]h)}(hj2h]h interleaving}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj2ubj)}(hhh]h)}(h interleavingh]h interleaving}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj/ubj)}(hJ``isdbt_partial_reception`` ISDB-T partial reception (only ISDB standard) h](j)}(h``isdbt_partial_reception``h]h)}(hj2h]hisdbt_partial_reception}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj2ubj)}(hhh]h)}(h-ISDB-T partial reception (only ISDB standard)h]h-ISDB-T partial reception (only ISDB standard)}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj/ubj)}(hH``isdbt_sb_mode`` ISDB-T Sound Broadcast (SB) mode (only ISDB standard) h](j)}(h``isdbt_sb_mode``h]h)}(hj(3h]h isdbt_sb_mode}(hj*3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&3ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj"3ubj)}(hhh]h)}(h5ISDB-T Sound Broadcast (SB) mode (only ISDB standard)h]h5ISDB-T Sound Broadcast (SB) mode (only ISDB standard)}(hjA3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=3hMhj>3ubah}(h]h ]h"]h$]h&]uh1jhj"3ubeh}(h]h ]h"]h$]h&]uh1jhj=3hMhj/ubj)}(hB``isdbt_sb_subchannel`` ISDB-T SB subchannel (only ISDB standard) h](j)}(h``isdbt_sb_subchannel``h]h)}(hja3h]hisdbt_sb_subchannel}(hjc3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_3ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj[3ubj)}(hhh]h)}(h)ISDB-T SB subchannel (only ISDB standard)h]h)ISDB-T SB subchannel (only ISDB standard)}(hjz3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjv3hMhjw3ubah}(h]h ]h"]h$]h&]uh1jhj[3ubeh}(h]h ]h"]h$]h&]uh1jhjv3hMhj/ubj)}(hF``isdbt_sb_segment_idx`` ISDB-T SB segment index (only ISDB standard) h](j)}(h``isdbt_sb_segment_idx``h]h)}(hj3h]hisdbt_sb_segment_idx}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj3ubj)}(hhh]h)}(h,ISDB-T SB segment index (only ISDB standard)h]h,ISDB-T SB segment index (only ISDB standard)}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj/ubj)}(hH``isdbt_sb_segment_count`` ISDB-T SB segment count (only ISDB standard) h](j)}(h``isdbt_sb_segment_count``h]h)}(hj3h]hisdbt_sb_segment_count}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM hj3ubj)}(hhh]h)}(h,ISDB-T SB segment count (only ISDB standard)h]h,ISDB-T SB segment count (only ISDB standard)}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM hj/ubj)}(h@``isdbt_layer_enabled`` ISDB Layer enabled (only ISDB standard) h](j)}(h``isdbt_layer_enabled``h]h)}(hj 4h]hisdbt_layer_enabled}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 4ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM!hj4ubj)}(hhh]h)}(h'ISDB Layer enabled (only ISDB standard)h]h'ISDB Layer enabled (only ISDB standard)}(hj%4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!4hM!hj"4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj!4hM!hj/ubj)}(h3``layer`` ISDB per-layer data (only ISDB standard) h](j)}(h ``layer``h]h)}(hjE4h]hlayer}(hjG4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC4ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM"hj?4ubj)}(hhh]h)}(h(ISDB per-layer data (only ISDB standard)h]h(ISDB per-layer data (only ISDB standard)}(hj^4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ4hM"hj[4ubah}(h]h ]h"]h$]h&]uh1jhj?4ubeh}(h]h ]h"]h$]h&]uh1jhjZ4hM"hj/ubj)}(h'``layer.segment_count`` Segment Count; h](j)}(h``layer.segment_count``h]h)}(hj~4h]hlayer.segment_count}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|4ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM#hjx4ubj)}(hhh]h)}(hSegment Count;h]hSegment Count;}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hM#hj4ubah}(h]h ]h"]h$]h&]uh1jhjx4ubeh}(h]h ]h"]h$]h&]uh1jhj4hM#hj/ubj)}(h#``layer.fec`` per layer code rate; h](j)}(h ``layer.fec``h]h)}(hj4h]h layer.fec}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM$hj4ubj)}(hhh]h)}(hper layer code rate;h]hper layer code rate;}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hM$hj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hM$hj/ubj)}(h+``layer.modulation`` per layer modulation; h](j)}(h``layer.modulation``h]h)}(hj4h]hlayer.modulation}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM%hj4ubj)}(hhh]h)}(hper layer modulation;h]hper layer modulation;}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM%hj5ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj5hM%hj/ubj)}(h/``layer.interleaving`` per layer interleaving. h](j)}(h``layer.interleaving``h]h)}(hj)5h]hlayer.interleaving}(hj+5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'5ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM&hj#5ubj)}(hhh]h)}(hper layer interleaving.h]hper layer interleaving.}(hjB5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>5hM&hj?5ubah}(h]h ]h"]h$]h&]uh1jhj#5ubeh}(h]h ]h"]h$]h&]uh1jhj>5hM&hj/ubj)}(hl``stream_id`` If different than zero, enable substream filtering, if hardware supports (DVB-S2 and DVB-T2). h](j)}(h ``stream_id``h]h)}(hjb5h]h stream_id}(hjd5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`5ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM(hj\5ubj)}(hhh]h)}(h]If different than zero, enable substream filtering, if hardware supports (DVB-S2 and DVB-T2).h]h]If different than zero, enable substream filtering, if hardware supports (DVB-S2 and DVB-T2).}(hj{5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM'hjx5ubah}(h]h ]h"]h$]h&]uh1jhj\5ubeh}(h]h ]h"]h$]h&]uh1jhjw5hM(hj/ubj)}(hb``scrambling_sequence_index`` Carries the index of the DVB-S2 physical layer scrambling sequence. h](j)}(h``scrambling_sequence_index``h]h)}(hj5h]hscrambling_sequence_index}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM*hj5ubj)}(hhh]h)}(hCCarries the index of the DVB-S2 physical layer scrambling sequence.h]hCCarries the index of the DVB-S2 physical layer scrambling sequence.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM)hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hM*hj/ubj)}(hg``atscmh_fic_ver`` Version number of the FIC (Fast Information Channel) signaling data (only ATSC-M/H) h](j)}(h``atscmh_fic_ver``h]h)}(hj5h]hatscmh_fic_ver}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM,hj5ubj)}(hhh]h)}(hSVersion number of the FIC (Fast Information Channel) signaling data (only ATSC-M/H)h]hSVersion number of the FIC (Fast Information Channel) signaling data (only ATSC-M/H)}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM+hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hM,hj/ubj)}(hB``atscmh_parade_id`` Parade identification number (only ATSC-M/H) h](j)}(h``atscmh_parade_id``h]h)}(hj6h]hatscmh_parade_id}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM-hj 6ubj)}(hhh]h)}(h,Parade identification number (only ATSC-M/H)h]h,Parade identification number (only ATSC-M/H)}(hj)6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%6hM-hj&6ubah}(h]h ]h"]h$]h&]uh1jhj 6ubeh}(h]h ]h"]h$]h&]uh1jhj%6hM-hj/ubj)}(h[``atscmh_nog`` Number of MH groups per MH subframe for a designated parade (only ATSC-M/H) h](j)}(h``atscmh_nog``h]h)}(hjI6h]h atscmh_nog}(hjK6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG6ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM/hjC6ubj)}(hhh]h)}(hKNumber of MH groups per MH subframe for a designated parade (only ATSC-M/H)h]hKNumber of MH groups per MH subframe for a designated parade (only ATSC-M/H)}(hjb6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM.hj_6ubah}(h]h ]h"]h$]h&]uh1jhjC6ubeh}(h]h ]h"]h$]h&]uh1jhj^6hM/hj/ubj)}(h``atscmh_tnog`` Total number of MH groups including all MH groups belonging to all MH parades in one MH subframe (only ATSC-M/H) h](j)}(h``atscmh_tnog``h]h)}(hj6h]h atscmh_tnog}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM2hj}6ubj)}(hhh]h)}(hpTotal number of MH groups including all MH groups belonging to all MH parades in one MH subframe (only ATSC-M/H)h]hpTotal number of MH groups including all MH groups belonging to all MH parades in one MH subframe (only ATSC-M/H)}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM0hj6ubah}(h]h ]h"]h$]h&]uh1jhj}6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM2hj/ubj)}(h2``atscmh_sgn`` Start group number (only ATSC-M/H) h](j)}(h``atscmh_sgn``h]h)}(hj6h]h atscmh_sgn}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM3hj6ubj)}(hhh]h)}(h"Start group number (only ATSC-M/H)h]h"Start group number (only ATSC-M/H)}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM3hj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM3hj/ubj)}(h7``atscmh_prc`` Parade repetition cycle (only ATSC-M/H) h](j)}(h``atscmh_prc``h]h)}(hj6h]h atscmh_prc}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM4hj6ubj)}(hhh]h)}(h'Parade repetition cycle (only ATSC-M/H)h]h'Parade repetition cycle (only ATSC-M/H)}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 7hM4hj 7ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj 7hM4hj/ubj)}(hF``atscmh_rs_frame_mode`` Reed Solomon (RS) frame mode (only ATSC-M/H) h](j)}(h``atscmh_rs_frame_mode``h]h)}(hj/7h]hatscmh_rs_frame_mode}(hj17hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-7ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM5hj)7ubj)}(hhh]h)}(h,Reed Solomon (RS) frame mode (only ATSC-M/H)h]h,Reed Solomon (RS) frame mode (only ATSC-M/H)}(hjH7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjD7hM5hjE7ubah}(h]h ]h"]h$]h&]uh1jhj)7ubeh}(h]h ]h"]h$]h&]uh1jhjD7hM5hj/ubj)}(h?``atscmh_rs_frame_ensemble`` RS frame ensemble (only ATSC-M/H) h](j)}(h``atscmh_rs_frame_ensemble``h]h)}(hjh7h]hatscmh_rs_frame_ensemble}(hjj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjf7ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM6hjb7ubj)}(hhh]h)}(h!RS frame ensemble (only ATSC-M/H)h]h!RS frame ensemble (only ATSC-M/H)}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}7hM6hj~7ubah}(h]h ]h"]h$]h&]uh1jhjb7ubeh}(h]h ]h"]h$]h&]uh1jhj}7hM6hj/ubj)}(h=``atscmh_rs_code_mode_pri`` RS code mode pri (only ATSC-M/H) h](j)}(h``atscmh_rs_code_mode_pri``h]h)}(hj7h]hatscmh_rs_code_mode_pri}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM7hj7ubj)}(hhh]h)}(h RS code mode pri (only ATSC-M/H)h]h RS code mode pri (only ATSC-M/H)}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM7hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hM7hj/ubj)}(h=``atscmh_rs_code_mode_sec`` RS code mode sec (only ATSC-M/H) h](j)}(h``atscmh_rs_code_mode_sec``h]h)}(hj7h]hatscmh_rs_code_mode_sec}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM8hj7ubj)}(hhh]h)}(h RS code mode sec (only ATSC-M/H)h]h RS code mode sec (only ATSC-M/H)}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM8hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hM8hj/ubj)}(hd``atscmh_sccc_block_mode`` Series Concatenated Convolutional Code (SCCC) Block Mode (only ATSC-M/H) h](j)}(h``atscmh_sccc_block_mode``h]h)}(hj8h]hatscmh_sccc_block_mode}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM:hj 8ubj)}(hhh]h)}(hHSeries Concatenated Convolutional Code (SCCC) Block Mode (only ATSC-M/H)h]hHSeries Concatenated Convolutional Code (SCCC) Block Mode (only ATSC-M/H)}(hj,8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM9hj)8ubah}(h]h ]h"]h$]h&]uh1jhj 8ubeh}(h]h ]h"]h$]h&]uh1jhj(8hM:hj/ubj)}(h=``atscmh_sccc_code_mode_a`` SCCC code mode A (only ATSC-M/H) h](j)}(h``atscmh_sccc_code_mode_a``h]h)}(hjM8h]hatscmh_sccc_code_mode_a}(hjO8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjK8ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM;hjG8ubj)}(hhh]h)}(h SCCC code mode A (only ATSC-M/H)h]h SCCC code mode A (only ATSC-M/H)}(hjf8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjb8hM;hjc8ubah}(h]h ]h"]h$]h&]uh1jhjG8ubeh}(h]h ]h"]h$]h&]uh1jhjb8hM;hj/ubj)}(h=``atscmh_sccc_code_mode_b`` SCCC code mode B (only ATSC-M/H) h](j)}(h``atscmh_sccc_code_mode_b``h]h)}(hj8h]hatscmh_sccc_code_mode_b}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM<hj8ubj)}(hhh]h)}(h SCCC code mode B (only ATSC-M/H)h]h SCCC code mode B (only ATSC-M/H)}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hM<hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hM<hj/ubj)}(h=``atscmh_sccc_code_mode_c`` SCCC code mode C (only ATSC-M/H) h](j)}(h``atscmh_sccc_code_mode_c``h]h)}(hj8h]hatscmh_sccc_code_mode_c}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM=hj8ubj)}(hhh]h)}(h SCCC code mode C (only ATSC-M/H)h]h SCCC code mode C (only ATSC-M/H)}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hM=hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hM=hj/ubj)}(h=``atscmh_sccc_code_mode_d`` SCCC code mode D (only ATSC-M/H) h](j)}(h``atscmh_sccc_code_mode_d``h]h)}(hj8h]hatscmh_sccc_code_mode_d}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM>hj8ubj)}(hhh]h)}(h SCCC code mode D (only ATSC-M/H)h]h SCCC code mode D (only ATSC-M/H)}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 9hM>hj9ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj 9hM>hj/ubj)}(h?``lna`` Power ON/OFF/AUTO the Linear Now-noise Amplifier (LNA) h](j)}(h``lna``h]h)}(hj19h]hlna}(hj39hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/9ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM?hj+9ubj)}(hhh]h)}(h6Power ON/OFF/AUTO the Linear Now-noise Amplifier (LNA)h]h6Power ON/OFF/AUTO the Linear Now-noise Amplifier (LNA)}(hjJ9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF9hM?hjG9ubah}(h]h ]h"]h$]h&]uh1jhj+9ubeh}(h]h ]h"]h$]h&]uh1jhjF9hM?hj/ubj)}(h3``strength`` DVBv5 API statistics: Signal Strength h](j)}(h ``strength``h]h)}(hjj9h]hstrength}(hjl9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh9ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM@hjd9ubj)}(hhh]h)}(h%DVBv5 API statistics: Signal Strengthh]h%DVBv5 API statistics: Signal Strength}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hM@hj9ubah}(h]h ]h"]h$]h&]uh1jhjd9ubeh}(h]h ]h"]h$]h&]uh1jhj9hM@hj/ubj)}(hJ``cnr`` DVBv5 API statistics: Signal to Noise ratio of the (main) carrier h](j)}(h``cnr``h]h)}(hj9h]hcnr}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMBhj9ubj)}(hhh]h)}(hADVBv5 API statistics: Signal to Noise ratio of the (main) carrierh]hADVBv5 API statistics: Signal to Noise ratio of the (main) carrier}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMAhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMBhj/ubj)}(hD``pre_bit_error`` DVBv5 API statistics: pre-Viterbi bit error count h](j)}(h``pre_bit_error``h]h)}(hj9h]h pre_bit_error}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMChj9ubj)}(hhh]h)}(h1DVBv5 API statistics: pre-Viterbi bit error counth]h1DVBv5 API statistics: pre-Viterbi bit error count}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMChj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMChj/ubj)}(h>``pre_bit_count`` DVBv5 API statistics: pre-Viterbi bit count h](j)}(h``pre_bit_count``h]h)}(hj:h]h pre_bit_count}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMDhj:ubj)}(hhh]h)}(h+DVBv5 API statistics: pre-Viterbi bit counth]h+DVBv5 API statistics: pre-Viterbi bit count}(hj/:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+:hMDhj,:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj+:hMDhj/ubj)}(hF``post_bit_error`` DVBv5 API statistics: post-Viterbi bit error count h](j)}(h``post_bit_error``h]h)}(hjO:h]hpost_bit_error}(hjQ:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM:ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMEhjI:ubj)}(hhh]h)}(h2DVBv5 API statistics: post-Viterbi bit error counth]h2DVBv5 API statistics: post-Viterbi bit error count}(hjh:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd:hMEhje:ubah}(h]h ]h"]h$]h&]uh1jhjI:ubeh}(h]h ]h"]h$]h&]uh1jhjd:hMEhj/ubj)}(h@``post_bit_count`` DVBv5 API statistics: post-Viterbi bit count h](j)}(h``post_bit_count``h]h)}(hj:h]hpost_bit_count}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMFhj:ubj)}(hhh]h)}(h,DVBv5 API statistics: post-Viterbi bit counth]h,DVBv5 API statistics: post-Viterbi bit count}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMFhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMFhj/ubj)}(h8``block_error`` DVBv5 API statistics: block error count h](j)}(h``block_error``h]h)}(hj:h]h block_error}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMGhj:ubj)}(hhh]h)}(h'DVBv5 API statistics: block error counth]h'DVBv5 API statistics: block error count}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMGhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMGhj/ubj)}(h1``block_count`` DVBv5 API statistics: block counth](j)}(h``block_count``h]h)}(hj:h]h block_count}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMGhj:ubj)}(hhh]h)}(h!DVBv5 API statistics: block counth]h!DVBv5 API statistics: block count}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMHhj;ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj;hMGhj/ubeh}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**NOTE**h]j)}(hj=;h]hNOTE}(hj?;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;;ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMKhjhhubh)}(hUderivated statistics like Uncorrected Error blocks (UCE) are calculated on userspace.h]hUderivated statistics like Uncorrected Error blocks (UCE) are calculated on userspace.}(hjS;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMIhjhhubh)}(h**Description**h]j)}(hjd;h]h Description}(hjf;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb;ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMLhjhhubh)}(hOnly a subset of the properties are needed for a given delivery system. For more info, consult the media_api.html with the documentation of the Userspace API.h]hOnly a subset of the properties are needed for a given delivery system. For more info, consult the media_api.html with the documentation of the Userspace API.}(hjz;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMLhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdvb_frontend (C struct)c.dvb_frontendhNtauh1jhjhhhNhNubj$)}(hhh](j))}(h dvb_frontendh]j/)}(hstruct dvb_frontendh](j5)}(hj8h]hstruct}(hj;hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj;hhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMSubjG)}(h h]h }(hj;hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj;hhhj;hMSubjX)}(h dvb_frontendh]j^)}(hj;h]h dvb_frontend}(hj;hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hj;ubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhj;hhhj;hMSubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hj;hhhj;hMSubah}(h]j;ah ](jjeh"]h$]h&]jj)jhuh1j(hj;hMShj;hhubj)}(hhh]h)}(h)Frontend structure to be used on drivers.h]h)Frontend structure to be used on drivers.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj;hhubah}(h]h ]h"]h$]h&]uh1jhj;hhhj;hMSubeh}(h]h ](j8structeh"]h$]h&]jj8jj;jj;jjjuh1j#hhhjhNhNubj)}(hXC**Definition**:: struct dvb_frontend { struct kref refcount; struct dvb_frontend_ops ops; struct dvb_adapter *dvb; void *demodulator_priv; void *tuner_priv; void *frontend_priv; void *sec_priv; void *analog_demod_priv; struct dtv_frontend_properties dtv_property_cache; #define DVB_FRONTEND_COMPONENT_TUNER 0; #define DVB_FRONTEND_COMPONENT_DEMOD 1; int (*callback)(void *adapter_priv, int component, int cmd, int arg); int id; unsigned int exit; }; **Members** ``refcount`` refcount to keep track of :c:type:`struct dvb_frontend ` references ``ops`` embedded :c:type:`struct dvb_frontend_ops ` ``dvb`` pointer to :c:type:`struct dvb_adapter ` ``demodulator_priv`` demod private data ``tuner_priv`` tuner private data ``frontend_priv`` frontend private data ``sec_priv`` SEC private data ``analog_demod_priv`` Analog demod private data ``dtv_property_cache`` embedded :c:type:`struct dtv_frontend_properties ` ``callback`` callback function used on some drivers to call either the tuner or the demodulator. ``id`` Frontend ID ``exit`` Used to inform the DVB core that the frontend thread should exit (usually, means that the hardware got disconnected.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh:}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj<ubj)}(hXstruct dvb_frontend { struct kref refcount; struct dvb_frontend_ops ops; struct dvb_adapter *dvb; void *demodulator_priv; void *tuner_priv; void *frontend_priv; void *sec_priv; void *analog_demod_priv; struct dtv_frontend_properties dtv_property_cache; #define DVB_FRONTEND_COMPONENT_TUNER 0; #define DVB_FRONTEND_COMPONENT_DEMOD 1; int (*callback)(void *adapter_priv, int component, int cmd, int arg); int id; unsigned int exit; };h]hXstruct dvb_frontend { struct kref refcount; struct dvb_frontend_ops ops; struct dvb_adapter *dvb; void *demodulator_priv; void *tuner_priv; void *frontend_priv; void *sec_priv; void *analog_demod_priv; struct dtv_frontend_properties dtv_property_cache; #define DVB_FRONTEND_COMPONENT_TUNER 0; #define DVB_FRONTEND_COMPONENT_DEMOD 1; int (*callback)(void *adapter_priv, int component, int cmd, int arg); int id; unsigned int exit; };}hj!<sbah}(h]h ]h"]h$]h&]hhuh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj<ubh)}(h **Members**h]j)}(hj2<h]hMembers}(hj4<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0<ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj<ubj)}(hhh](j)}(h_``refcount`` refcount to keep track of :c:type:`struct dvb_frontend ` references h](j)}(h ``refcount``h]h)}(hjQ<h]hrefcount}(hjS<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO<ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjK<ubj)}(hhh]h)}(hQrefcount to keep track of :c:type:`struct dvb_frontend ` referencesh](hrefcount to keep track of }(hjj<hhhNhNubh)}(h,:c:type:`struct dvb_frontend `h]h)}(hjt<h]hstruct dvb_frontend}(hjv<hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjr<ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ dvb_frontenduh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjj<ubh references}(hjj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hMhjg<ubah}(h]h ]h"]h$]h&]uh1jhjK<ubeh}(h]h ]h"]h$]h&]uh1jhjf<hMhjH<ubj)}(hF``ops`` embedded :c:type:`struct dvb_frontend_ops ` h](j)}(h``ops``h]h)}(hj<h]hops}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj<ubj)}(hhh]h)}(h=embedded :c:type:`struct dvb_frontend_ops `h](h embedded }(hj<hhhNhNubh)}(h4:c:type:`struct dvb_frontend_ops `h]h)}(hj<h]hstruct dvb_frontend_ops}(hj<hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhj<hMhj<ubeh}(h]h ]h"]h$]h&]uh1hhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjH<ubj)}(h>``dvb`` pointer to :c:type:`struct dvb_adapter ` h](j)}(h``dvb``h]h)}(hj=h]hdvb}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj=ubj)}(hhh]h)}(h5pointer to :c:type:`struct dvb_adapter `h](h pointer to }(hj=hhhNhNubh)}(h*:c:type:`struct dvb_adapter `h]h)}(hj)=h]hstruct dvb_adapter}(hj+=hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj'=ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ dvb_adapteruh1hhj=hMhj=ubeh}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjH<ubj)}(h(``demodulator_priv`` demod private data h](j)}(h``demodulator_priv``h]h)}(hj^=h]hdemodulator_priv}(hj`=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\=ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjX=ubj)}(hhh]h)}(hdemod private datah]hdemod private data}(hjw=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs=hMhjt=ubah}(h]h ]h"]h$]h&]uh1jhjX=ubeh}(h]h ]h"]h$]h&]uh1jhjs=hMhjH<ubj)}(h"``tuner_priv`` tuner private data h](j)}(h``tuner_priv``h]h)}(hj=h]h tuner_priv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj=ubj)}(hhh]h)}(htuner private datah]htuner private data}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjH<ubj)}(h(``frontend_priv`` frontend private data h](j)}(h``frontend_priv``h]h)}(hj=h]h frontend_priv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj=ubj)}(hhh]h)}(hfrontend private datah]hfrontend private data}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjH<ubj)}(h``sec_priv`` SEC private data h](j)}(h ``sec_priv``h]h)}(hj >h]hsec_priv}(hj >hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj>ubj)}(hhh]h)}(hSEC private datah]hSEC private data}(hj">hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjH<ubj)}(h0``analog_demod_priv`` Analog demod private data h](j)}(h``analog_demod_priv``h]h)}(hjB>h]hanalog_demod_priv}(hjD>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@>ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj<>ubj)}(hhh]h)}(hAnalog demod private datah]hAnalog demod private data}(hj[>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjW>hMhjX>ubah}(h]h ]h"]h$]h&]uh1jhj<>ubeh}(h]h ]h"]h$]h&]uh1jhjW>hMhjH<ubj)}(hc``dtv_property_cache`` embedded :c:type:`struct dtv_frontend_properties ` h](j)}(h``dtv_property_cache``h]h)}(hj{>h]hdtv_property_cache}(hj}>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy>ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhju>ubj)}(hhh]h)}(hKembedded :c:type:`struct dtv_frontend_properties `h](h embedded }(hj>hhhNhNubh)}(hB:c:type:`struct dtv_frontend_properties `h]h)}(hj>h]hstruct dtv_frontend_properties}(hj>hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdtv_frontend_propertiesuh1hhj>hMhj>ubeh}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhju>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjH<ubj)}(ha``callback`` callback function used on some drivers to call either the tuner or the demodulator. h](j)}(h ``callback``h]h)}(hj>h]hcallback}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj>ubj)}(hhh]h)}(hScallback function used on some drivers to call either the tuner or the demodulator.h]hScallback function used on some drivers to call either the tuner or the demodulator.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjH<ubj)}(h``id`` Frontend ID h](j)}(h``id``h]h)}(hj ?h]hid}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ?ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj?ubj)}(hhh]h)}(h Frontend IDh]h Frontend ID}(hj&?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"?hMhj#?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj"?hMhjH<ubj)}(h}``exit`` Used to inform the DVB core that the frontend thread should exit (usually, means that the hardware got disconnected.h](j)}(h``exit``h]h)}(hjF?h]hexit}(hjH?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjD?ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj@?ubj)}(hhh]h)}(htUsed to inform the DVB core that the frontend thread should exit (usually, means that the hardware got disconnected.h]htUsed to inform the DVB core that the frontend thread should exit (usually, means that the hardware got disconnected.}(hj_?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj\?ubah}(h]h ]h"]h$]h&]uh1jhj@?ubeh}(h]h ]h"]h$]h&]uh1jhj[?hMhjH<ubeh}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"dvb_register_frontend (C function)c.dvb_register_frontendhNtauh1jhjhhhNhNubj$)}(hhh](j))}(hLint dvb_register_frontend (struct dvb_adapter *dvb, struct dvb_frontend *fe)h]j/)}(hKint dvb_register_frontend(struct dvb_adapter *dvb, struct dvb_frontend *fe)h](hdesc_sig_keyword_type)}(hinth]hint}(hj?hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j?hj?hhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMubjG)}(h h]h }(hj?hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj?hhhj?hMubjX)}(hdvb_register_frontendh]j^)}(hdvb_register_frontendh]hdvb_register_frontend}(hj?hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hj?ubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhj?hhhj?hMubhdesc_parameterlist)}(h2(struct dvb_adapter *dvb, struct dvb_frontend *fe)h](hdesc_parameter)}(hstruct dvb_adapter *dvbh](j5)}(hj8h]hstruct}(hj?hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj?ubjG)}(h h]h }(hj?hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj?ubh)}(hhh]j^)}(h dvb_adapterh]h dvb_adapter}(hj@hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hj?ubah}(h]h ]h"]h$]h&] refdomainj8reftype identifier reftargetj@modnameN classnameNjj)}j]j ASTIdentifier)}j@j?sbc.dvb_register_frontendasbuh1hhj?ubjG)}(h h]h }(hj%@hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj?ubhdesc_sig_punctuation)}(h*h]h*}(hj5@hhhNhNubah}(h]h ]pah"]h$]h&]uh1j3@hj?ubj^)}(hdvbh]hdvb}(hjD@hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1j?hj?ubj?)}(hstruct dvb_frontend *feh](j5)}(hj8h]hstruct}(hj]@hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjY@ubjG)}(h h]h }(hjj@hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjY@ubh)}(hhh]j^)}(h dvb_frontendh]h dvb_frontend}(hj{@hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjx@ubah}(h]h ]h"]h$]h&] refdomainj8reftypej@ reftargetj}@modnameN classnameNjj)}j]j!@c.dvb_register_frontendasbuh1hhjY@ubjG)}(h h]h }(hj@hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjY@ubj4@)}(hj7@h]h*}(hj@hhhNhNubah}(h]h ]j@@ah"]h$]h&]uh1j3@hjY@ubj^)}(hfeh]hfe}(hj@hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjY@ubeh}(h]h ]h"]h$]h&]noemphhhuh1j?hj?ubeh}(h]h ]h"]h$]h&]hhuh1j?hj?hhhj?hMubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hj?hhhj?hMubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1j(hj?hMhj?hhubj)}(hhh]h)}(h'Registers a DVB frontend at the adapterh]h'Registers a DVB frontend at the adapter}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj@hhubah}(h]h ]h"]h$]h&]uh1jhj?hhhj?hMubeh}(h]h ](j8functioneh"]h$]h&]jj8jj@jj@jjjuh1j#hhhjhNhNubj)}(hX**Parameters** ``struct dvb_adapter *dvb`` pointer to :c:type:`struct dvb_adapter ` ``struct dvb_frontend *fe`` pointer to :c:type:`struct dvb_frontend ` **Description** Allocate and initialize the private data needed by the frontend core to manage the frontend and calls dvb_register_device() to register a new frontend. It also cleans the property cache that stores the frontend parameters and selects the first available delivery system.h](h)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj@ubj)}(hhh](j)}(hR``struct dvb_adapter *dvb`` pointer to :c:type:`struct dvb_adapter ` h](j)}(h``struct dvb_adapter *dvb``h]h)}(hjAh]hstruct dvb_adapter *dvb}(hj!AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjAubj)}(hhh]h)}(h5pointer to :c:type:`struct dvb_adapter `h](h pointer to }(hj8AhhhNhNubh)}(h*:c:type:`struct dvb_adapter `h]h)}(hjBAh]hstruct dvb_adapter}(hjDAhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj@Aubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ dvb_adapteruh1hhj4AhMhj8Aubeh}(h]h ]h"]h$]h&]uh1hhj4AhMhj5Aubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj4AhMhjAubj)}(hT``struct dvb_frontend *fe`` pointer to :c:type:`struct dvb_frontend ` h](j)}(h``struct dvb_frontend *fe``h]h)}(hjwAh]hstruct dvb_frontend *fe}(hjyAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuAubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjqAubj)}(hhh]h)}(h7pointer to :c:type:`struct dvb_frontend `h](h pointer to }(hjAhhhNhNubh)}(h,:c:type:`struct dvb_frontend `h]h)}(hjAh]hstruct dvb_frontend}(hjAhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ dvb_frontenduh1hhjAhMhjAubeh}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjqAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjAubeh}(h]h ]h"]h$]h&]uh1jhj@ubh)}(h**Description**h]j)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj@ubh)}(hXAllocate and initialize the private data needed by the frontend core to manage the frontend and calls dvb_register_device() to register a new frontend. It also cleans the property cache that stores the frontend parameters and selects the first available delivery system.h]hXAllocate and initialize the private data needed by the frontend core to manage the frontend and calls dvb_register_device() to register a new frontend. It also cleans the property cache that stores the frontend parameters and selects the first available delivery system.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$dvb_unregister_frontend (C function)c.dvb_unregister_frontendhNtauh1jhjhhhNhNubj$)}(hhh](j))}(h5int dvb_unregister_frontend (struct dvb_frontend *fe)h]j/)}(h4int dvb_unregister_frontend(struct dvb_frontend *fe)h](j?)}(hinth]hint}(hjBhhhNhNubah}(h]h ]j?ah"]h$]h&]uh1j?hjBhhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMubjG)}(h h]h }(hj%BhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjBhhhj$BhMubjX)}(hdvb_unregister_frontendh]j^)}(hdvb_unregister_frontendh]hdvb_unregister_frontend}(hj7BhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hj3Bubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhjBhhhj$BhMubj?)}(h(struct dvb_frontend *fe)h]j?)}(hstruct dvb_frontend *feh](j5)}(hj8h]hstruct}(hjSBhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjOBubjG)}(h h]h }(hj`BhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjOBubh)}(hhh]j^)}(h dvb_frontendh]h dvb_frontend}(hjqBhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjnBubah}(h]h ]h"]h$]h&] refdomainj8reftypej@ reftargetjsBmodnameN classnameNjj)}j]j @)}j@j9Bsbc.dvb_unregister_frontendasbuh1hhjOBubjG)}(h h]h }(hjBhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjOBubj4@)}(hj7@h]h*}(hjBhhhNhNubah}(h]h ]j@@ah"]h$]h&]uh1j3@hjOBubj^)}(hfeh]hfe}(hjBhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjOBubeh}(h]h ]h"]h$]h&]noemphhhuh1j?hjKBubah}(h]h ]h"]h$]h&]hhuh1j?hjBhhhj$BhMubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hjBhhhj$BhMubah}(h]j Bah ](jjeh"]h$]h&]jj)jhuh1j(hj$BhMhj Bhhubj)}(hhh]h)}(hUnregisters a DVB frontendh]hUnregisters a DVB frontend}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjBhhubah}(h]h ]h"]h$]h&]uh1jhj Bhhhj$BhMubeh}(h]h ](j8functioneh"]h$]h&]jj8jjBjjBjjjuh1j#hhhjhNhNubj)}(hX**Parameters** ``struct dvb_frontend *fe`` pointer to :c:type:`struct dvb_frontend ` **Description** Stops the frontend kthread, calls dvb_unregister_device() and frees the private frontend data allocated by dvb_register_frontend(). **NOTE** This function doesn't frees the memory allocated by the demod, by the SEC driver and by the tuner. In order to free it, an explicit call to dvb_frontend_detach() is needed, after calling this function.h](h)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjBubj)}(hhh]j)}(hT``struct dvb_frontend *fe`` pointer to :c:type:`struct dvb_frontend ` h](j)}(h``struct dvb_frontend *fe``h]h)}(hjCh]hstruct dvb_frontend *fe}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjCubj)}(hhh]h)}(h7pointer to :c:type:`struct dvb_frontend `h](h pointer to }(hj0ChhhNhNubh)}(h,:c:type:`struct dvb_frontend `h]h)}(hj:Ch]hstruct dvb_frontend}(hj` **Description** This function should be called after dvb_unregister_frontend(). It calls the SEC, tuner and demod release functions: :c:type:`dvb_frontend_ops.release_sec `, :c:type:`dvb_frontend_ops.tuner_ops `.release, :c:type:`dvb_frontend_ops.analog_ops `.release and :c:type:`dvb_frontend_ops.release `. If the driver is compiled with ``CONFIG_MEDIA_ATTACH``, it also decreases the module reference count, needed to allow userspace to remove the previously used DVB frontend modules.h](h)}(h**Parameters**h]j)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjDubj)}(hhh]j)}(hT``struct dvb_frontend *fe`` pointer to :c:type:`struct dvb_frontend ` h](j)}(h``struct dvb_frontend *fe``h]h)}(hjDh]hstruct dvb_frontend *fe}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjDubj)}(hhh]h)}(h7pointer to :c:type:`struct dvb_frontend `h](h pointer to }(hjDhhhNhNubh)}(h,:c:type:`struct dvb_frontend `h]h)}(hjEh]hstruct dvb_frontend}(hjEhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ dvb_frontenduh1hhjDhMhjDubeh}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubh)}(h**Description**h]j)}(hj8Eh]h Description}(hj:EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Eubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjDubh)}(hXlThis function should be called after dvb_unregister_frontend(). It calls the SEC, tuner and demod release functions: :c:type:`dvb_frontend_ops.release_sec `, :c:type:`dvb_frontend_ops.tuner_ops `.release, :c:type:`dvb_frontend_ops.analog_ops `.release and :c:type:`dvb_frontend_ops.release `.h](huThis function should be called after dvb_unregister_frontend(). It calls the SEC, tuner and demod release functions: }(hjNEhhhNhNubh)}(h9:c:type:`dvb_frontend_ops.release_sec `h]h)}(hjXEh]hdvb_frontend_ops.release_sec}(hjZEhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjVEubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjNEubh, }(hjNEhhhNhNubh)}(h7:c:type:`dvb_frontend_ops.tuner_ops `h]h)}(hj|Eh]hdvb_frontend_ops.tuner_ops}(hj~EhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjzEubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhjuEhMhjNEubh .release, }(hjNEhhhNhNubh)}(h8:c:type:`dvb_frontend_ops.analog_ops `h]h)}(hjEh]hdvb_frontend_ops.analog_ops}(hjEhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhjuEhMhjNEubh .release and }(hjNEhhhNhNubh)}(h5:c:type:`dvb_frontend_ops.release `h]h)}(hjEh]hdvb_frontend_ops.release}(hjEhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhjuEhMhjNEubh.}(hjNEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjuEhMhjDubh)}(hIf the driver is compiled with ``CONFIG_MEDIA_ATTACH``, it also decreases the module reference count, needed to allow userspace to remove the previously used DVB frontend modules.h](hIf the driver is compiled with }(hjEhhhNhNubh)}(h``CONFIG_MEDIA_ATTACH``h]hCONFIG_MEDIA_ATTACH}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEubh}, it also decreases the module reference count, needed to allow userspace to remove the previously used DVB frontend modules.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!dvb_frontend_suspend (C function)c.dvb_frontend_suspendhNtauh1jhjhhhNhNubj$)}(hhh](j))}(h2int dvb_frontend_suspend (struct dvb_frontend *fe)h]j/)}(h1int dvb_frontend_suspend(struct dvb_frontend *fe)h](j?)}(hinth]hint}(hj*FhhhNhNubah}(h]h ]j?ah"]h$]h&]uh1j?hj&Fhhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMubjG)}(h h]h }(hj9FhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj&Fhhhj8FhMubjX)}(hdvb_frontend_suspendh]j^)}(hdvb_frontend_suspendh]hdvb_frontend_suspend}(hjKFhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjGFubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhj&Fhhhj8FhMubj?)}(h(struct dvb_frontend *fe)h]j?)}(hstruct dvb_frontend *feh](j5)}(hj8h]hstruct}(hjgFhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjcFubjG)}(h h]h }(hjtFhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjcFubh)}(hhh]j^)}(h dvb_frontendh]h dvb_frontend}(hjFhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjFubah}(h]h ]h"]h$]h&] refdomainj8reftypej@ reftargetjFmodnameN classnameNjj)}j]j @)}j@jMFsbc.dvb_frontend_suspendasbuh1hhjcFubjG)}(h h]h }(hjFhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjcFubj4@)}(hj7@h]h*}(hjFhhhNhNubah}(h]h ]j@@ah"]h$]h&]uh1j3@hjcFubj^)}(hfeh]hfe}(hjFhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjcFubeh}(h]h ]h"]h$]h&]noemphhhuh1j?hj_Fubah}(h]h ]h"]h$]h&]hhuh1j?hj&Fhhhj8FhMubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hj"Fhhhj8FhMubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1j(hj8FhMhjFhhubj)}(hhh]h)}(hSuspends a Digital TV frontendh]hSuspends a Digital TV frontend}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjFhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhj8FhMubeh}(h]h ](j8functioneh"]h$]h&]jj8jjGjjGjjjuh1j#hhhjhNhNubj)}(hX**Parameters** ``struct dvb_frontend *fe`` pointer to :c:type:`struct dvb_frontend ` **Description** This function prepares a Digital TV frontend to suspend. In order to prepare the tuner to suspend, if :c:type:`dvb_frontend_ops.tuner_ops `.suspend\(\) is available, it calls it. Otherwise, it will call :c:type:`dvb_frontend_ops.tuner_ops `.sleep\(\), if available. It will also call :c:type:`dvb_frontend_ops.suspend `\(\) to put the demod to suspend, if available. Otherwise it will call :c:type:`dvb_frontend_ops.sleep `\(\). The drivers should also call dvb_frontend_suspend\(\) as part of their handler for the :c:type:`device_driver.suspend `\(\).h](h)}(h**Parameters**h]j)}(hj Gh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Gubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjGubj)}(hhh]j)}(hT``struct dvb_frontend *fe`` pointer to :c:type:`struct dvb_frontend ` h](j)}(h``struct dvb_frontend *fe``h]h)}(hj+Gh]hstruct dvb_frontend *fe}(hj-GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)Gubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj%Gubj)}(hhh]h)}(h7pointer to :c:type:`struct dvb_frontend `h](h pointer to }(hjDGhhhNhNubh)}(h,:c:type:`struct dvb_frontend `h]h)}(hjNGh]hstruct dvb_frontend}(hjPGhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjLGubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ dvb_frontenduh1hhj@GhMhjDGubeh}(h]h ]h"]h$]h&]uh1hhj@GhMhjAGubah}(h]h ]h"]h$]h&]uh1jhj%Gubeh}(h]h ]h"]h$]h&]uh1jhj@GhMhj"Gubah}(h]h ]h"]h$]h&]uh1jhjGubh)}(h**Description**h]j)}(hjGh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjGubh)}(h8This function prepares a Digital TV frontend to suspend.h]h8This function prepares a Digital TV frontend to suspend.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjGubh)}(hIn order to prepare the tuner to suspend, if :c:type:`dvb_frontend_ops.tuner_ops `.suspend\(\) is available, it calls it. Otherwise, it will call :c:type:`dvb_frontend_ops.tuner_ops `.sleep\(\), if available.h](h-In order to prepare the tuner to suspend, if }(hjGhhhNhNubh)}(h7:c:type:`dvb_frontend_ops.tuner_ops `h]h)}(hjGh]hdvb_frontend_ops.tuner_ops}(hjGhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjGubh@.suspend() is available, it calls it. Otherwise, it will call }(hjGhhhNhNubh)}(h7:c:type:`dvb_frontend_ops.tuner_ops `h]h)}(hjGh]hdvb_frontend_ops.tuner_ops}(hjGhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhjGhMhjGubh.sleep(), if available.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhMhjGubh)}(hIt will also call :c:type:`dvb_frontend_ops.suspend `\(\) to put the demod to suspend, if available. Otherwise it will call :c:type:`dvb_frontend_ops.sleep `\(\).h](hIt will also call }(hjGhhhNhNubh)}(h5:c:type:`dvb_frontend_ops.suspend `h]h)}(hj Hh]hdvb_frontend_ops.suspend}(hj HhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjGubhG() to put the demod to suspend, if available. Otherwise it will call }(hjGhhhNhNubh)}(h3:c:type:`dvb_frontend_ops.sleep `h]h)}(hj-Hh]hdvb_frontend_ops.sleep}(hj/HhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj+Hubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhj&HhMhjGubh().}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&HhMhjGubh)}(hThe drivers should also call dvb_frontend_suspend\(\) as part of their handler for the :c:type:`device_driver.suspend `\(\).h](hWThe drivers should also call dvb_frontend_suspend() as part of their handler for the }(hjTHhhhNhNubh)}(h/:c:type:`device_driver.suspend `h]h)}(hj^Hh]hdevice_driver.suspend}(hj`HhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj\Hubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ device_driveruh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjTHubh().}(hjTHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{HhMhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j dvb_frontend_resume (C function)c.dvb_frontend_resumehNtauh1jhjhhhNhNubj$)}(hhh](j))}(h1int dvb_frontend_resume (struct dvb_frontend *fe)h]j/)}(h0int dvb_frontend_resume(struct dvb_frontend *fe)h](j?)}(hinth]hint}(hjHhhhNhNubah}(h]h ]j?ah"]h$]h&]uh1j?hjHhhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMubjG)}(h h]h }(hjHhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjHhhhjHhMubjX)}(hdvb_frontend_resumeh]j^)}(hdvb_frontend_resumeh]hdvb_frontend_resume}(hjHhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjHubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhjHhhhjHhMubj?)}(h(struct dvb_frontend *fe)h]j?)}(hstruct dvb_frontend *feh](j5)}(hj8h]hstruct}(hjHhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjHubjG)}(h h]h }(hjHhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjHubh)}(hhh]j^)}(h dvb_frontendh]h dvb_frontend}(hjIhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjHubah}(h]h ]h"]h$]h&] refdomainj8reftypej@ reftargetjImodnameN classnameNjj)}j]j @)}j@jHsbc.dvb_frontend_resumeasbuh1hhjHubjG)}(h h]h }(hj!IhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjHubj4@)}(hj7@h]h*}(hj/IhhhNhNubah}(h]h ]j@@ah"]h$]h&]uh1j3@hjHubj^)}(hfeh]hfe}(hj` **Description** This function resumes the usual operation of the tuner after resume. In order to resume the frontend, it calls the demod :c:type:`dvb_frontend_ops.resume `\(\) if available. Otherwise it calls demod :c:type:`dvb_frontend_ops.init `\(\). If :c:type:`dvb_frontend_ops.tuner_ops `.resume\(\) is available, It, it calls it. Otherwise,t will call :c:type:`dvb_frontend_ops.tuner_ops `.init\(\), if available. Once tuner and demods are resumed, it will enforce that the SEC voltage and tone are restored to their previous values and wake up the frontend's kthread in order to retune the frontend. The drivers should also call dvb_frontend_resume() as part of their handler for the :c:type:`device_driver.resume `\(\).h](h)}(h**Parameters**h]j)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM hjIubj)}(hhh]j)}(hT``struct dvb_frontend *fe`` pointer to :c:type:`struct dvb_frontend ` h](j)}(h``struct dvb_frontend *fe``h]h)}(hjIh]hstruct dvb_frontend *fe}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjIubj)}(hhh]h)}(h7pointer to :c:type:`struct dvb_frontend `h](h pointer to }(hjIhhhNhNubh)}(h,:c:type:`struct dvb_frontend `h]h)}(hjIh]hstruct dvb_frontend}(hjIhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ dvb_frontenduh1hhjIhMhjIubeh}(h]h ]h"]h$]h&]uh1hhjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubh)}(h**Description**h]j)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM hjIubh)}(hDThis function resumes the usual operation of the tuner after resume.h]hDThis function resumes the usual operation of the tuner after resume.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM hjIubh)}(hIn order to resume the frontend, it calls the demod :c:type:`dvb_frontend_ops.resume `\(\) if available. Otherwise it calls demod :c:type:`dvb_frontend_ops.init `\(\).h](h4In order to resume the frontend, it calls the demod }(hj&JhhhNhNubh)}(h4:c:type:`dvb_frontend_ops.resume `h]h)}(hj0Jh]hdvb_frontend_ops.resume}(hj2JhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj.Jubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM hj&Jubh,() if available. Otherwise it calls demod }(hj&JhhhNhNubh)}(h2:c:type:`dvb_frontend_ops.init `h]h)}(hjTJh]hdvb_frontend_ops.init}(hjVJhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjRJubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhjMJhM hj&Jubh().}(hj&JhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjMJhM hjIubh)}(hIf :c:type:`dvb_frontend_ops.tuner_ops `.resume\(\) is available, It, it calls it. Otherwise,t will call :c:type:`dvb_frontend_ops.tuner_ops `.init\(\), if available.h](hIf }(hj{JhhhNhNubh)}(h7:c:type:`dvb_frontend_ops.tuner_ops `h]h)}(hjJh]hdvb_frontend_ops.tuner_ops}(hjJhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj{JubhA.resume() is available, It, it calls it. Otherwise,t will call }(hj{JhhhNhNubh)}(h7:c:type:`dvb_frontend_ops.tuner_ops `h]h)}(hjJh]hdvb_frontend_ops.tuner_ops}(hjJhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhjJhMhj{Jubh.init(), if available.}(hj{JhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJhMhjIubh)}(hOnce tuner and demods are resumed, it will enforce that the SEC voltage and tone are restored to their previous values and wake up the frontend's kthread in order to retune the frontend.h]hOnce tuner and demods are resumed, it will enforce that the SEC voltage and tone are restored to their previous values and wake up the frontend’s kthread in order to retune the frontend.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjIubh)}(hThe drivers should also call dvb_frontend_resume() as part of their handler for the :c:type:`device_driver.resume `\(\).h](hTThe drivers should also call dvb_frontend_resume() as part of their handler for the }(hjJhhhNhNubh)}(h.:c:type:`device_driver.resume `h]h)}(hjJh]hdevice_driver.resume}(hjJhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ device_driveruh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjJubh().}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjKhMhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&dvb_frontend_reinitialise (C function)c.dvb_frontend_reinitialisehNtauh1jhjhhhNhNubj$)}(hhh](j))}(h8void dvb_frontend_reinitialise (struct dvb_frontend *fe)h]j/)}(h7void dvb_frontend_reinitialise(struct dvb_frontend *fe)h](j?)}(hvoidh]hvoid}(hj1KhhhNhNubah}(h]h ]j?ah"]h$]h&]uh1j?hj-Khhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM'ubjG)}(h h]h }(hj@KhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj-Khhhj?KhM'ubjX)}(hdvb_frontend_reinitialiseh]j^)}(hdvb_frontend_reinitialiseh]hdvb_frontend_reinitialise}(hjRKhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjNKubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhj-Khhhj?KhM'ubj?)}(h(struct dvb_frontend *fe)h]j?)}(hstruct dvb_frontend *feh](j5)}(hj8h]hstruct}(hjnKhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjjKubjG)}(h h]h }(hj{KhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjjKubh)}(hhh]j^)}(h dvb_frontendh]h dvb_frontend}(hjKhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjKubah}(h]h ]h"]h$]h&] refdomainj8reftypej@ reftargetjKmodnameN classnameNjj)}j]j @)}j@jTKsbc.dvb_frontend_reinitialiseasbuh1hhjjKubjG)}(h h]h }(hjKhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjjKubj4@)}(hj7@h]h*}(hjKhhhNhNubah}(h]h ]j@@ah"]h$]h&]uh1j3@hjjKubj^)}(hfeh]hfe}(hjKhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjjKubeh}(h]h ]h"]h$]h&]noemphhhuh1j?hjfKubah}(h]h ]h"]h$]h&]hhuh1j?hj-Khhhj?KhM'ubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hj)Khhhj?KhM'ubah}(h]j$Kah ](jjeh"]h$]h&]jj)jhuh1j(hj?KhM'hj&Khhubj)}(hhh]h)}(h)forces a reinitialisation at the frontendh]h)forces a reinitialisation at the frontend}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhjKhhubah}(h]h ]h"]h$]h&]uh1jhj&Khhhj?KhM'ubeh}(h]h ](j8functioneh"]h$]h&]jj8jj Ljj Ljjjuh1j#hhhjhNhNubj)}(hX**Parameters** ``struct dvb_frontend *fe`` pointer to :c:type:`struct dvb_frontend ` **Description** Calls :c:type:`dvb_frontend_ops.init `\(\) and :c:type:`dvb_frontend_ops.tuner_ops `.init\(\), and resets SEC tone and voltage (for Satellite systems). **NOTE** Currently, this function is used only by one driver (budget-av). It seems to be due to address some special issue with that specific frontend.h](h)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM hj Lubj)}(hhh]j)}(hT``struct dvb_frontend *fe`` pointer to :c:type:`struct dvb_frontend ` h](j)}(h``struct dvb_frontend *fe``h]h)}(hj2Lh]hstruct dvb_frontend *fe}(hj4LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0Lubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhMhj,Lubj)}(hhh]h)}(h7pointer to :c:type:`struct dvb_frontend `h](h pointer to }(hjKLhhhNhNubh)}(h,:c:type:`struct dvb_frontend `h]h)}(hjULh]hstruct dvb_frontend}(hjWLhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjSLubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJ dvb_frontenduh1hhjGLhMhjKLubeh}(h]h ]h"]h$]h&]uh1hhjGLhMhjHLubah}(h]h ]h"]h$]h&]uh1jhj,Lubeh}(h]h ]h"]h$]h&]uh1jhjGLhMhj)Lubah}(h]h ]h"]h$]h&]uh1jhj Lubh)}(h**Description**h]j)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM hj Lubh)}(hCalls :c:type:`dvb_frontend_ops.init `\(\) and :c:type:`dvb_frontend_ops.tuner_ops `.init\(\), and resets SEC tone and voltage (for Satellite systems).h](hCalls }(hjLhhhNhNubh)}(h2:c:type:`dvb_frontend_ops.init `h]h)}(hjLh]hdvb_frontend_ops.init}(hjLhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM hjLubh () and }(hjLhhhNhNubh)}(h7:c:type:`dvb_frontend_ops.tuner_ops `h]h)}(hjLh]hdvb_frontend_ops.tuner_ops}(hjLhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhjLhM hjLubhC.init(), and resets SEC tone and voltage (for Satellite systems).}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjLhM hj Lubh)}(h**NOTE**h]j)}(hjLh]hNOTE}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM#hj Lubh)}(hCurrently, this function is used only by one driver (budget-av). It seems to be due to address some special issue with that specific frontend.h]hCurrently, this function is used only by one driver (budget-av). It seems to be due to address some special issue with that specific frontend.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM#hj Lubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%dvb_frontend_sleep_until (C function)c.dvb_frontend_sleep_untilhNtauh1jhjhhhNhNubj$)}(hhh](j))}(h?void dvb_frontend_sleep_until (ktime_t *waketime, u32 add_usec)h]j/)}(h>void dvb_frontend_sleep_until(ktime_t *waketime, u32 add_usec)h](j?)}(hvoidh]hvoid}(hj>MhhhNhNubah}(h]h ]j?ah"]h$]h&]uh1j?hj:Mhhhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM@ubjG)}(h h]h }(hjMMhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj:MhhhjLMhM@ubjX)}(hdvb_frontend_sleep_untilh]j^)}(hdvb_frontend_sleep_untilh]hdvb_frontend_sleep_until}(hj_MhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hj[Mubah}(h]h ](jpjqeh"]h$]h&]hhuh1jWhj:MhhhjLMhM@ubj?)}(h!(ktime_t *waketime, u32 add_usec)h](j?)}(hktime_t *waketimeh](h)}(hhh]j^)}(hktime_th]hktime_t}(hj~MhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hj{Mubah}(h]h ]h"]h$]h&] refdomainj8reftypej@ reftargetjMmodnameN classnameNjj)}j]j @)}j@jaMsbc.dvb_frontend_sleep_untilasbuh1hhjwMubjG)}(h h]h }(hjMhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjwMubj4@)}(hj7@h]h*}(hjMhhhNhNubah}(h]h ]j@@ah"]h$]h&]uh1j3@hjwMubj^)}(hwaketimeh]hwaketime}(hjMhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjwMubeh}(h]h ]h"]h$]h&]noemphhhuh1j?hjsMubj?)}(h u32 add_usech](h)}(hhh]j^)}(hu32h]hu32}(hjMhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjMubah}(h]h ]h"]h$]h&] refdomainj8reftypej@ reftargetjMmodnameN classnameNjj)}j]jMc.dvb_frontend_sleep_untilasbuh1hhjMubjG)}(h h]h }(hjMhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjMubj^)}(hadd_usech]hadd_usec}(hjNhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j]hjMubeh}(h]h ]h"]h$]h&]noemphhhuh1j?hjsMubeh}(h]h ]h"]h$]h&]hhuh1j?hj:MhhhjLMhM@ubeh}(h]h ]h"]h$]h&]hhj{uh1j.j|j}hj6MhhhjLMhM@ubah}(h]j1Mah ](jjeh"]h$]h&]jj)jhuh1j(hjLMhM@hj3Mhhubj)}(hhh]h)}(h8Sleep for the amount of time given by add_usec parameterh]h8Sleep for the amount of time given by add_usec parameter}(hj+NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM*hj(Nhhubah}(h]h ]h"]h$]h&]uh1jhj3MhhhjLMhM@ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjCNjjCNjjjuh1j#hhhjhNhNubj)}(hX**Parameters** ``ktime_t *waketime`` pointer to :c:type:`struct ktime_t ` ``u32 add_usec`` time to sleep, in microseconds **Description** This function is used to measure the time required for the FE_DISHNETWORK_SEND_LEGACY_CMD() ioctl to work. It needs to be as precise as possible, as it affects the detection of the dish tone command at the satellite subsystem. Its used internally by the DVB frontend core, in order to emulate FE_DISHNETWORK_SEND_LEGACY_CMD() using the :c:type:`dvb_frontend_ops.set_voltage `\(\) callback. **NOTE** it should not be used at the drivers, as the emulation for the legacy callback is provided by the Kernel. The only situation where this should be at the drivers is when there are some bugs at the hardware that would prevent the core emulation to work. On such cases, the driver would be writing a :c:type:`dvb_frontend_ops.dishnetwork_send_legacy_command `\(\) and calling this function directly.h](h)}(h**Parameters**h]j)}(hjMNh]h Parameters}(hjONhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM.hjGNubj)}(hhh](j)}(hD``ktime_t *waketime`` pointer to :c:type:`struct ktime_t ` h](j)}(h``ktime_t *waketime``h]h)}(hjlNh]hktime_t *waketime}(hjnNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjNubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM-hjfNubj)}(hhh]h)}(h-pointer to :c:type:`struct ktime_t `h](h pointer to }(hjNhhhNhNubh)}(h":c:type:`struct ktime_t `h]h)}(hjNh]hstruct ktime_t}(hjNhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJktime_tuh1hhjNhM-hjNubeh}(h]h ]h"]h$]h&]uh1hhjNhM-hjNubah}(h]h ]h"]h$]h&]uh1jhjfNubeh}(h]h ]h"]h$]h&]uh1jhjNhM-hjcNubj)}(h0``u32 add_usec`` time to sleep, in microseconds h](j)}(h``u32 add_usec``h]h)}(hjNh]h u32 add_usec}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM.hjNubj)}(hhh]h)}(htime to sleep, in microsecondsh]htime to sleep, in microseconds}(hjNhhhBNhNubah}(h]h ]h"]h$]h&]uh1hhjNhM.hjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhM.hjcNubeh}(h]h ]h"]h$]h&]uh1jhjGNubh)}(h**Description**h]j)}(hjNh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM0hjGNubh)}(hThis function is used to measure the time required for the FE_DISHNETWORK_SEND_LEGACY_CMD() ioctl to work. It needs to be as precise as possible, as it affects the detection of the dish tone command at the satellite subsystem.h]hThis function is used to measure the time required for the FE_DISHNETWORK_SEND_LEGACY_CMD() ioctl to work. It needs to be as precise as possible, as it affects the detection of the dish tone command at the satellite subsystem.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM0hjGNubh)}(hIts used internally by the DVB frontend core, in order to emulate FE_DISHNETWORK_SEND_LEGACY_CMD() using the :c:type:`dvb_frontend_ops.set_voltage `\(\) callback.h](hmIts used internally by the DVB frontend core, in order to emulate FE_DISHNETWORK_SEND_LEGACY_CMD() using the }(hj$OhhhNhNubh)}(h9:c:type:`dvb_frontend_ops.set_voltage `h]h)}(hj.Oh]hdvb_frontend_ops.set_voltage}(hj0OhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhj,Oubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM5hj$Oubh() callback.}(hj$OhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjKOhM5hjGNubh)}(h**NOTE**h]j)}(hjXOh]hNOTE}(hjZOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVOubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM9hjGNubh)}(hXit should not be used at the drivers, as the emulation for the legacy callback is provided by the Kernel. The only situation where this should be at the drivers is when there are some bugs at the hardware that would prevent the core emulation to work. On such cases, the driver would be writing a :c:type:`dvb_frontend_ops.dishnetwork_send_legacy_command `\(\) and calling this function directly.h](hX)it should not be used at the drivers, as the emulation for the legacy callback is provided by the Kernel. The only situation where this should be at the drivers is when there are some bugs at the hardware that would prevent the core emulation to work. On such cases, the driver would be writing a }(hjnOhhhNhNubh)}(hM:c:type:`dvb_frontend_ops.dishnetwork_send_legacy_command `h]h)}(hjxOh]h0dvb_frontend_ops.dishnetwork_send_legacy_command}(hjzOhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1hhjvOubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnjjjJdvb_frontend_opsuh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/media/dtv-frontend:445: ./include/media/dvb_frontend.hhM9hjnOubh(() and calling this function directly.}(hjnOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjOhM9hjGNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]'digital-tv-frontend-functions-and-typesah ]h"]'digital tv frontend functions and typesah$]h&]uh1hhhhhhhhMubeh}(h]digital-tv-frontend-kabiah ]h"]digital tv frontend kabiah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjOerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}jjssubstitution_names}deltajsrefnames}(f2]jQaf3]j aurefids}(j]jaja]jQaj/]j aunameids}(jOjOjjjljijjj jj j j{jxj7jaj j jj/j j jG jD j j jOjOu nametypes}(jOjjljj j j{j7j jj jG j jOuh}(jOhjhjijjjojjj jjxjj[jQjajj j~j*j j/j^j j jD j j jJ jOjj!j*jjjJjOj'j,jjjjjWj\j`jej|!j!jr$jw$jh.jm.j;j;j?j?j BjBjCjCjFj"FjHjHj$Kj)Kj1Mj6Mu footnote_refs}(jP]jQajP]j au citation_refs} autofootnotes](jj^eautofootnote_refs](jQj esymbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jOKsRparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h1Hyperlink target "dvbv5-stats" is not referenced.}hjMPsbah}(h]h ]h"]h$]h&]uh1hhjJPubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1jHPuba transformerN include_log] decorationNhhub.