sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget,/translations/zh_CN/driver-api/miscellaneousmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/zh_TW/driver-api/miscellaneousmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/it_IT/driver-api/miscellaneousmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ja_JP/driver-api/miscellaneousmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ko_KR/driver-api/miscellaneousmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/sp_SP/driver-api/miscellaneousmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hParallel Port Devicesh]hParallel Port Devices}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhF/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous.rsthKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single!parport_register_driver (C macro)c.parport_register_driverhNtauh1hhhhhhNhNubhdesc)}(hhh](hdesc_signature)}(hparport_register_driverh]hdesc_signature_line)}(hparport_register_driverh]h desc_name)}(hparport_register_driverh]h desc_sig_name)}(hhh]hparport_register_driver}(hhhhhNhNubah}(h]h ]nah"]h$]h&]uh1hhhubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1hhhhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhM@ubah}(h]h ]h"]h$]h&]hh add_permalinkuh1hӌsphinx_line_type declaratorhhhhhhhM@ubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1hhhhM@hhhhubh desc_content)}(hhh]h}(h]h ]h"]h$]h&]uh1jhhhhhhhM@ubeh}(h]h ](cmacroeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1hhhhhhNhNubh paragraph)}(h$``parport_register_driver (driver)``h]hliteral)}(hj+h]h parport_register_driver (driver)}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj)ubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMBhhhhubh block_quote)}(h'register a parallel port device driver h]j()}(h®ister a parallel port device driverh]h®ister a parallel port device driver}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhM&hjEubah}(h]h ]h"]h$]h&]uh1jChjWhM&hhhhubh container)}(hX&**Parameters** ``driver`` structure describing the driver This can be called by a parallel port device driver in order to receive notifications about ports being found in the system, as well as ports no longer available. The **driver** structure is allocated by the caller and must not be deallocated until after calling parport_unregister_driver(). If using the non device model: The driver's attach() function may block. The port that attach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so. Calling parport_register_device() on that port will do this for you. The driver's detach() function may block. The port that detach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so. Returns 0 on success. The non device model will always succeeds. but the new device model can fail and will return the error code.h](j()}(h**Parameters**h]hstrong)}(hjfh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjdubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhM*hj`ubhdefinition_list)}(hhh]hdefinition_list_item)}(hX``driver`` structure describing the driver This can be called by a parallel port device driver in order to receive notifications about ports being found in the system, as well as ports no longer available. The **driver** structure is allocated by the caller and must not be deallocated until after calling parport_unregister_driver(). If using the non device model: The driver's attach() function may block. The port that attach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so. Calling parport_register_device() on that port will do this for you. The driver's detach() function may block. The port that detach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so. Returns 0 on success. The non device model will always succeeds. but the new device model can fail and will return the error code.h](hterm)}(h ``driver``h]j.)}(hjh]hdriver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhM=hjubh definition)}(hhh](j()}(hstructure describing the driverh]hstructure describing the driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhM'hjubj()}(hThis can be called by a parallel port device driver in order to receive notifications about ports being found in the system, as well as ports no longer available.h]hThis can be called by a parallel port device driver in order to receive notifications about ports being found in the system, as well as ports no longer available.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhM)hjubj()}(hThe **driver** structure is allocated by the caller and must not be deallocated until after calling parport_unregister_driver().h](hThe }(hjhhhNhNubji)}(h **driver**h]hdriver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubhr structure is allocated by the caller and must not be deallocated until after calling parport_unregister_driver().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhM-hjubj()}(hX?If using the non device model: The driver's attach() function may block. The port that attach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so. Calling parport_register_device() on that port will do this for you.h]hXAIf using the non device model: The driver’s attach() function may block. The port that attach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so. Calling parport_register_device() on that port will do this for you.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhM0hjubj()}(hThe driver's detach() function may block. The port that detach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so.h]hThe driver’s detach() function may block. The port that detach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhM7hjubj()}(hReturns 0 on success. The non device model will always succeeds. but the new device model can fail and will return the error code.h]hReturns 0 on success. The non device model will always succeeds. but the new device model can fail and will return the error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjhM=hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM=hjubah}(h]h ]h"]h$]h&]uh1j~hj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČmodule_parport_driver (C macro)c.module_parport_driverhNtauh1hhhhhhNhNubh)}(hhh](h)}(hmodule_parport_driverh]h)}(hmodule_parport_driverh]h)}(hmodule_parport_driverh]h)}(hj?h]hmodule_parport_driver}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ](hheh"]h$]h&]hhuh1hhjAhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMNubah}(h]h ]h"]h$]h&]hhjuh1hjjhj=hhhj\hMNubah}(h]j8ah ](jjeh"]h$]h&]j j )j huh1hhj\hMNhj:hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj:hhhj\hMNubeh}(h]h ](jmacroeh"]h$]h&]j!jj"juj#juj$j%j&uh1hhhhhhNhNubj()}(h,``module_parport_driver (__parport_driver)``h]j.)}(hj{h]h(module_parport_driver (__parport_driver)}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjyubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMPhhhhubjD)}(h6Helper macro for registering a modular parport driver h]j()}(h5Helper macro for registering a modular parport driverh]h5Helper macro for registering a modular parport driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMGhjubah}(h]h ]h"]h$]h&]uh1jChjhMGhhhhubj_)}(hX=**Parameters** ``__parport_driver`` struct parport_driver to be used **Description** Helper macro for parport drivers which do not do anything special in module init and exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it replaces module_init() and module_exit().h](j()}(h**Parameters**h]ji)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMKhjubj)}(hhh]j)}(h6``__parport_driver`` struct parport_driver to be used h](j)}(h``__parport_driver``h]j.)}(hjh]h__parport_driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMHhjubj)}(hhh]j()}(h struct parport_driver to be usedh]h struct parport_driver to be used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjhMHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjubah}(h]h ]h"]h$]h&]uh1j~hjubj()}(h**Description**h]ji)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMJhjubj()}(hHelper macro for parport drivers which do not do anything special in module init and exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it replaces module_init() and module_exit().h]hHelper macro for parport drivers which do not do anything special in module init and exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it replaces module_init() and module_exit().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMJhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČparport_yield (C function)c.parport_yieldhNtauh1hhhhhhNhNubh)}(hhh](h)}(h)int parport_yield (struct pardevice *dev)h]h)}(h(int parport_yield(struct pardevice *dev)h](hdesc_sig_keyword_type)}(hinth]hint}(hjQhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jOhjKhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMubhdesc_sig_space)}(h h]h }(hjchhhNhNubah}(h]h ]wah"]h$]h&]uh1jahjKhhhj`hMubh)}(h parport_yieldh]h)}(h parport_yieldh]h parport_yield}(hjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ](hheh"]h$]h&]hhuh1hhjKhhhj`hMubhdesc_parameterlist)}(h(struct pardevice *dev)h]hdesc_parameter)}(hstruct pardevice *devh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubh)}(hhh]h)}(h pardeviceh]h pardevice}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jjxsbc.parport_yieldasbuh1hhjubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjubh)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjKhhhj`hMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjGhhhj`hMubah}(h]jBah ](jjeh"]h$]h&]j j )j huh1hhj`hMhjDhhubj)}(hhh]j()}(h&relinquish a parallel port temporarilyh]h&relinquish a parallel port temporarily}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMhj&hhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj`hMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jAj#jAj$j%j&uh1hhhhhhNhNubj_)}(hX**Parameters** ``struct pardevice *dev`` a device on the parallel port **Description** This function relinquishes the port if it would be helpful to other drivers to do so. Afterwards it tries to reclaim the port using parport_claim(), and the return value is the same as for parport_claim(). If it fails, the port is left unclaimed and it is the driver's responsibility to reclaim the port. The parport_yield() and parport_yield_blocking() functions are for marking points in the driver at which other drivers may claim the port and use their devices. Yielding the port is similar to releasing it and reclaiming it, but is more efficient because no action is taken if there are no other devices needing the port. In fact, nothing is done even if there are other devices waiting but the current device is still within its "timeslice". The default timeslice is half a second, but it can be adjusted via the /proc interface.h](j()}(h**Parameters**h]ji)}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjIubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMhjEubj)}(hhh]j)}(h8``struct pardevice *dev`` a device on the parallel port h](j)}(h``struct pardevice *dev``h]j.)}(hjjh]hstruct pardevice *dev}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjhubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMhjdubj)}(hhh]j()}(ha device on the parallel porth]ha device on the parallel port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubah}(h]h ]h"]h$]h&]uh1j~hjEubj()}(h**Description**h]ji)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMhjEubj()}(hX2This function relinquishes the port if it would be helpful to other drivers to do so. Afterwards it tries to reclaim the port using parport_claim(), and the return value is the same as for parport_claim(). If it fails, the port is left unclaimed and it is the driver's responsibility to reclaim the port.h]hX4This function relinquishes the port if it would be helpful to other drivers to do so. Afterwards it tries to reclaim the port using parport_claim(), and the return value is the same as for parport_claim(). If it fails, the port is left unclaimed and it is the driver’s responsibility to reclaim the port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMhjEubj()}(hXThe parport_yield() and parport_yield_blocking() functions are for marking points in the driver at which other drivers may claim the port and use their devices. Yielding the port is similar to releasing it and reclaiming it, but is more efficient because no action is taken if there are no other devices needing the port. In fact, nothing is done even if there are other devices waiting but the current device is still within its "timeslice". The default timeslice is half a second, but it can be adjusted via the /proc interface.h]hXThe parport_yield() and parport_yield_blocking() functions are for marking points in the driver at which other drivers may claim the port and use their devices. Yielding the port is similar to releasing it and reclaiming it, but is more efficient because no action is taken if there are no other devices needing the port. In fact, nothing is done even if there are other devices waiting but the current device is still within its “timeslice”. The default timeslice is half a second, but it can be adjusted via the /proc interface.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ#parport_yield_blocking (C function)c.parport_yield_blockinghNtauh1hhhhhhNhNubh)}(hhh](h)}(h2int parport_yield_blocking (struct pardevice *dev)h]h)}(h1int parport_yield_blocking(struct pardevice *dev)h](jP)}(hinth]hint}(hjhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjhhhjhMubh)}(hparport_yield_blockingh]h)}(hparport_yield_blockingh]hparport_yield_blocking}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](hheh"]h$]h&]hhuh1hhjhhhjhMubj)}(h(struct pardevice *dev)h]j)}(hstruct pardevice *devh](j)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubjb)}(h h]h }(hjChhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj2ubh)}(hhh]h)}(h pardeviceh]h pardevice}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]j)}jjsbc.parport_yield_blockingasbuh1hhj2ubjb)}(h h]h }(hjthhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj2ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj.ubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1hhjhMhjhhubj)}(hhh]j()}(h&relinquish a parallel port temporarilyh]h&relinquish a parallel port temporarily}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jj#jj$j%j&uh1hhhhhhNhNubj_)}(hX<**Parameters** ``struct pardevice *dev`` a device on the parallel port **Description** This function relinquishes the port if it would be helpful to other drivers to do so. Afterwards it tries to reclaim the port using parport_claim_or_block(), and the return value is the same as for parport_claim_or_block().h](j()}(h**Parameters**h]ji)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMhjubj)}(hhh]j)}(h8``struct pardevice *dev`` a device on the parallel port h](j)}(h``struct pardevice *dev``h]j.)}(hjh]hstruct pardevice *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMhjubj)}(hhh]j()}(ha device on the parallel porth]ha device on the parallel port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1j~hjubj()}(h**Description**h]ji)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj3ubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMhjubj()}(hThis function relinquishes the port if it would be helpful to other drivers to do so. Afterwards it tries to reclaim the port using parport_claim_or_block(), and the return value is the same as for parport_claim_or_block().h]hThis function relinquishes the port if it would be helpful to other drivers to do so. Afterwards it tries to reclaim the port using parport_claim_or_block(), and the return value is the same as for parport_claim_or_block().}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČparport_wait_event (C function)c.parport_wait_eventhNtauh1hhhhhhNhNubh)}(hhh](h)}(hBint parport_wait_event (struct parport *port, signed long timeout)h]h)}(hAint parport_wait_event(struct parport *port, signed long timeout)h](jP)}(hinth]hint}(hjzhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjvhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chK?ubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjvhhhjhK?ubh)}(hparport_wait_eventh]h)}(hparport_wait_eventh]hparport_wait_event}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](hheh"]h$]h&]hhuh1hhjvhhhjhK?ubj)}(h+(struct parport *port, signed long timeout)h](j)}(hstruct parport *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubh)}(hhh]h)}(hparporth]hparport}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.parport_wait_eventasbuh1hhjubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hporth]hport}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hsigned long timeouth](jP)}(hsignedh]hsigned}(hj)hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj%ubjb)}(h h]h }(hj7hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj%ubjP)}(hlongh]hlong}(hjEhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj%ubjb)}(h h]h }(hjShhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj%ubh)}(htimeouth]htimeout}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjvhhhjhK?ubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjrhhhjhK?ubah}(h]jmah ](jjeh"]h$]h&]j j )j huh1hhjhK?hjohhubj)}(hhh]j()}(h$wait for an event on a parallel porth]h$wait for an event on a parallel port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chK1hjhhubah}(h]h ]h"]h$]h&]uh1jhjohhhjhK?ubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jj#jj$j%j&uh1hhhhhhNhNubj_)}(hX9**Parameters** ``struct parport *port`` port to wait on ``signed long timeout`` time to wait (in jiffies) This function waits for up to **timeout** jiffies for an interrupt to occur on a parallel port. If the port timeout is set to zero, it returns immediately. If an interrupt occurs before the timeout period elapses, this function returns zero immediately. If it times out, it returns one. An error code less than zero indicates an error (most likely a pending signal), and the calling code should finish what it's doing as soon as it can.h](j()}(h**Parameters**h]ji)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chK5hjubj)}(hhh](j)}(h)``struct parport *port`` port to wait on h](j)}(h``struct parport *port``h]j.)}(hjh]hstruct parport *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chK2hjubj)}(hhh]j()}(hport to wait onh]hport to wait on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjhK2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK2hjubj)}(hX``signed long timeout`` time to wait (in jiffies) This function waits for up to **timeout** jiffies for an interrupt to occur on a parallel port. If the port timeout is set to zero, it returns immediately. If an interrupt occurs before the timeout period elapses, this function returns zero immediately. If it times out, it returns one. An error code less than zero indicates an error (most likely a pending signal), and the calling code should finish what it's doing as soon as it can.h](j)}(h``signed long timeout``h]j.)}(hjh]hsigned long timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chK hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj: ubjb)}(h h]h }(hjL hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj: ubjP)}(hcharh]hchar}(hjZ hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj: ubjb)}(h h]h }(hjh hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj: ubh)}(hmaskh]hmask}(hjv hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj: ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hunsigned char resulth](jP)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj ubjb)}(h h]h }(hj hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj ubjP)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj ubjb)}(h h]h }(hj hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj ubh)}(hresulth]hresult}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1hhjhKhjhhubj)}(hhh]j()}(h'wait for status lines to change in 35msh]h'wait for status lines to change in 35ms}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chKhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j j#j j$j%j&uh1hhhhhhNhNubj_)}(hX**Parameters** ``struct parport *port`` port to watch ``unsigned char mask`` status lines to watch ``unsigned char result`` desired values of chosen status lines This function waits until the masked status lines have the desired values, or until 35ms have elapsed (see IEEE 1284-1994 page 24 to 25 for why this value in particular is hardcoded). The **mask** and **result** parameters are bitmasks, with the bits defined by the constants in parport.h: ``PARPORT_STATUS_BUSY``, and so on. The port is polled quickly to start off with, in anticipation of a fast response from the peripheral. This fast polling time is configurable (using /proc), and defaults to 500usec. If the timeout for this port (see parport_set_timeout()) is zero, the fast polling time is 35ms, and this function does not call schedule(). If the timeout for this port is non-zero, after the fast polling fails it uses parport_wait_event() to wait for up to 10ms, waking up if an interrupt occurs.h](j()}(h**Parameters**h]ji)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj ubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chKhj ubj)}(hhh](j)}(h'``struct parport *port`` port to watch h](j)}(h``struct parport *port``h]j.)}(hj2 h]hstruct parport *port}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj0 ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chKhj, ubj)}(hhh]j()}(h port to watchh]h port to watch}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjG hKhjH ubah}(h]h ]h"]h$]h&]uh1jhj, ubeh}(h]h ]h"]h$]h&]uh1jhjG hKhj) ubj)}(h-``unsigned char mask`` status lines to watch h](j)}(h``unsigned char mask``h]j.)}(hjk h]hunsigned char mask}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hji ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chKhje ubj)}(hhh]j()}(hstatus lines to watchh]hstatus lines to watch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj hKhj ubah}(h]h ]h"]h$]h&]uh1jhje ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj) ubj)}(hXh``unsigned char result`` desired values of chosen status lines This function waits until the masked status lines have the desired values, or until 35ms have elapsed (see IEEE 1284-1994 page 24 to 25 for why this value in particular is hardcoded). The **mask** and **result** parameters are bitmasks, with the bits defined by the constants in parport.h: ``PARPORT_STATUS_BUSY``, and so on. The port is polled quickly to start off with, in anticipation of a fast response from the peripheral. This fast polling time is configurable (using /proc), and defaults to 500usec. If the timeout for this port (see parport_set_timeout()) is zero, the fast polling time is 35ms, and this function does not call schedule(). If the timeout for this port is non-zero, after the fast polling fails it uses parport_wait_event() to wait for up to 10ms, waking up if an interrupt occurs.h](j)}(h``unsigned char result``h]j.)}(hj h]hunsigned char result}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chKhj ubj)}(hhh](j()}(h%desired values of chosen status linesh]h%desired values of chosen status lines}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chKhj ubj()}(hXEThis function waits until the masked status lines have the desired values, or until 35ms have elapsed (see IEEE 1284-1994 page 24 to 25 for why this value in particular is hardcoded). The **mask** and **result** parameters are bitmasks, with the bits defined by the constants in parport.h: ``PARPORT_STATUS_BUSY``, and so on.h](hThis function waits until the masked status lines have the desired values, or until 35ms have elapsed (see IEEE 1284-1994 page 24 to 25 for why this value in particular is hardcoded). The }(hj hhhNhNubji)}(h**mask**h]hmask}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj ubh and }(hj hhhNhNubji)}(h **result**h]hresult}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj ubhO parameters are bitmasks, with the bits defined by the constants in parport.h: }(hj hhhNhNubj.)}(h``PARPORT_STATUS_BUSY``h]hPARPORT_STATUS_BUSY}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj ubh , and so on.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chKhj ubj()}(hXBThe port is polled quickly to start off with, in anticipation of a fast response from the peripheral. This fast polling time is configurable (using /proc), and defaults to 500usec. If the timeout for this port (see parport_set_timeout()) is zero, the fast polling time is 35ms, and this function does not call schedule().h]hXBThe port is polled quickly to start off with, in anticipation of a fast response from the peripheral. This fast polling time is configurable (using /proc), and defaults to 500usec. If the timeout for this port (see parport_set_timeout()) is zero, the fast polling time is 35ms, and this function does not call schedule().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chKhj ubj()}(hIf the timeout for this port is non-zero, after the fast polling fails it uses parport_wait_event() to wait for up to 10ms, waking up if an interrupt occurs.h]hIf the timeout for this port is non-zero, after the fast polling fails it uses parport_wait_event() to wait for up to 10ms, waking up if an interrupt occurs.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chKhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj) ubeh}(h]h ]h"]h$]h&]uh1j~hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČparport_negotiate (C function)c.parport_negotiatehNtauh1hhhhhhNhNubh)}(hhh](h)}(h6int parport_negotiate (struct parport *port, int mode)h]h)}(h5int parport_negotiate(struct parport *port, int mode)h](jP)}(hinth]hint}(hja hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj] hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chM<ubjb)}(h h]h }(hjp hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj] hhhjo hM<ubh)}(hparport_negotiateh]h)}(hparport_negotiateh]hparport_negotiate}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ ubah}(h]h ](hheh"]h$]h&]hhuh1hhj] hhhjo hM<ubj)}(h (struct parport *port, int mode)h](j)}(hstruct parport *porth](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjb)}(h h]h }(hj hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj ubh)}(hhh]h)}(hparporth]hparport}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jj sbc.parport_negotiateasbuh1hhj ubjb)}(h h]h }(hj hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hporth]hport}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(hint modeh](jP)}(hinth]hint}(hj hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj ubjb)}(h h]h }(hj hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj ubh)}(hmodeh]hmode}(hj, hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubeh}(h]h ]h"]h$]h&]hhuh1jhj] hhhjo hM<ubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjY hhhjo hM<ubah}(h]jT ah ](jjeh"]h$]h&]j j )j huh1hhjo hM<hjV hhubj)}(hhh]j()}(hnegotiate an IEEE 1284 modeh]hnegotiate an IEEE 1284 mode}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chM/hjS hhubah}(h]h ]h"]h$]h&]uh1jhjV hhhjo hM<ubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jn j#jn j$j%j&uh1hhhhhhNhNubj_)}(hX**Parameters** ``struct parport *port`` port to use ``int mode`` mode to negotiate to Use this to negotiate to a particular IEEE 1284 transfer mode. The **mode** parameter should be one of the constants in parport.h starting ``IEEE1284_MODE_xxx``. The return value is 0 if the peripheral has accepted the negotiation to the mode specified, -1 if the peripheral is not IEEE 1284 compliant (or not present), or 1 if the peripheral has rejected the negotiation.h](j()}(h**Parameters**h]ji)}(hjx h]h Parameters}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjv ubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chM3hjr ubj)}(hhh](j)}(h%``struct parport *port`` port to use h](j)}(h``struct parport *port``h]j.)}(hj h]hstruct parport *port}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chM0hj ubj)}(hhh]j()}(h port to useh]h port to use}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj hM0hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM0hj ubj)}(hX``int mode`` mode to negotiate to Use this to negotiate to a particular IEEE 1284 transfer mode. The **mode** parameter should be one of the constants in parport.h starting ``IEEE1284_MODE_xxx``. The return value is 0 if the peripheral has accepted the negotiation to the mode specified, -1 if the peripheral is not IEEE 1284 compliant (or not present), or 1 if the peripheral has rejected the negotiation.h](j)}(h ``int mode``h]j.)}(hj h]hint mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chM9hj ubj)}(hhh](j()}(hmode to negotiate toh]hmode to negotiate to}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chM1hj ubj()}(hUse this to negotiate to a particular IEEE 1284 transfer mode. The **mode** parameter should be one of the constants in parport.h starting ``IEEE1284_MODE_xxx``.h](hCUse this to negotiate to a particular IEEE 1284 transfer mode. The }(hj hhhNhNubji)}(h**mode**h]hmode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj ubh@ parameter should be one of the constants in parport.h starting }(hj hhhNhNubj.)}(h``IEEE1284_MODE_xxx``h]hIEEE1284_MODE_xxx}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chM3hj ubj()}(hThe return value is 0 if the peripheral has accepted the negotiation to the mode specified, -1 if the peripheral is not IEEE 1284 compliant (or not present), or 1 if the peripheral has rejected the negotiation.h]hThe return value is 0 if the peripheral has accepted the negotiation to the mode specified, -1 if the peripheral is not IEEE 1284 compliant (or not present), or 1 if the peripheral has rejected the negotiation.}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chM7hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM9hj ubeh}(h]h ]h"]h$]h&]uh1j~hjr ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČparport_write (C function)c.parport_writehNtauh1hhhhhhNhNubh)}(hhh](h)}(hLssize_t parport_write (struct parport *port, const void *buffer, size_t len)h]h)}(hKssize_t parport_write(struct parport *port, const void *buffer, size_t len)h](h)}(hhh]h)}(hssize_th]hssize_t}(hjo hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjl ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjq modnameN classnameNjj)}j]j)}j parport_writesbc.parport_writeasbuh1hhjh hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMFubjb)}(h h]h }(hj hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjh hhhj hMFubh)}(h parport_writeh]h)}(hj h]h parport_write}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](hheh"]h$]h&]hhuh1hhjh hhhj hMFubj)}(h6(struct parport *port, const void *buffer, size_t len)h](j)}(hstruct parport *porth](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjb)}(h h]h }(hj hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj ubh)}(hhh]h)}(hparporth]hparport}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.parport_writeasbuh1hhj ubjb)}(h h]h }(hj hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hporth]hport}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(hconst void *bufferh](j)}(hconsth]hconst}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubjb)}(h h]h }(hj<hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj*ubjP)}(hvoidh]hvoid}(hjJhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj*ubjb)}(h h]h }(hjXhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj*ubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hbufferh]hbuffer}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(h size_t lenh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.parport_writeasbuh1hhjubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubh)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubeh}(h]h ]h"]h$]h&]hhuh1jhjh hhhj hMFubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjd hhhj hMFubah}(h]j_ ah ](jjeh"]h$]h&]j j )j huh1hhj hMFhja hhubj)}(hhh]j()}(h(write a block of data to a parallel porth]h(write a block of data to a parallel port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chM6hjhhubah}(h]h ]h"]h$]h&]uh1jhja hhhj hMFubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jj#jj$j%j&uh1hhhhhhNhNubj_)}(hXl**Parameters** ``struct parport *port`` port to write to ``const void *buffer`` data buffer (in kernel space) ``size_t len`` number of bytes of data to transfer This will write up to **len** bytes of **buffer** to the port specified, using the IEEE 1284 transfer mode most recently negotiated to (using parport_negotiate()), as long as that mode supports forward transfers (host to peripheral). It is the caller's responsibility to ensure that the first **len** bytes of **buffer** are valid. This function returns the number of bytes transferred (if zero or positive), or else an error code.h](j()}(h**Parameters**h]ji)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chM:hjubj)}(hhh](j)}(h*``struct parport *port`` port to write to h](j)}(h``struct parport *port``h]j.)}(hj&h]hstruct parport *port}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj$ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chM7hj ubj)}(hhh]j()}(hport to write toh]hport to write to}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj;hM7hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hM7hjubj)}(h5``const void *buffer`` data buffer (in kernel space) h](j)}(h``const void *buffer``h]j.)}(hj_h]hconst void *buffer}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj]ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chM8hjYubj)}(hhh]j()}(hdata buffer (in kernel space)h]hdata buffer (in kernel space)}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjthM8hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthM8hjubj)}(hX``size_t len`` number of bytes of data to transfer This will write up to **len** bytes of **buffer** to the port specified, using the IEEE 1284 transfer mode most recently negotiated to (using parport_negotiate()), as long as that mode supports forward transfers (host to peripheral). It is the caller's responsibility to ensure that the first **len** bytes of **buffer** are valid. This function returns the number of bytes transferred (if zero or positive), or else an error code.h](j)}(h``size_t len``h]j.)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMChjubj)}(hhh](j()}(h#number of bytes of data to transferh]h#number of bytes of data to transfer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chM9hjubj()}(hThis will write up to **len** bytes of **buffer** to the port specified, using the IEEE 1284 transfer mode most recently negotiated to (using parport_negotiate()), as long as that mode supports forward transfers (host to peripheral).h](hThis will write up to }(hjhhhNhNubji)}(h**len**h]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubh bytes of }(hjhhhNhNubji)}(h **buffer**h]hbuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubh to the port specified, using the IEEE 1284 transfer mode most recently negotiated to (using parport_negotiate()), as long as that mode supports forward transfers (host to peripheral).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chM;hjubj()}(haIt is the caller's responsibility to ensure that the first **len** bytes of **buffer** are valid.h](h=It is the caller’s responsibility to ensure that the first }(hjhhhNhNubji)}(h**len**h]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubh bytes of }(hjhhhNhNubji)}(h **buffer**h]hbuffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubh are valid.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chM@hjubj()}(hcThis function returns the number of bytes transferred (if zero or positive), or else an error code.h]hcThis function returns the number of bytes transferred (if zero or positive), or else an error code.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjhMChjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMChjubeh}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČparport_read (C function)c.parport_readhNtauh1hhhhhhNhNubh)}(hhh](h)}(hEssize_t parport_read (struct parport *port, void *buffer, size_t len)h]h)}(hDssize_t parport_read(struct parport *port, void *buffer, size_t len)h](h)}(hhh]h)}(hssize_th]hssize_t}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]j)}j parport_readsbc.parport_readasbuh1hhjbhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjbhhhjhMubh)}(h parport_readh]h)}(hjh]h parport_read}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](hheh"]h$]h&]hhuh1hhjbhhhjhMubj)}(h0(struct parport *port, void *buffer, size_t len)h](j)}(hstruct parport *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubh)}(hhh]h)}(hparporth]hparport}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.parport_readasbuh1hhjubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hporth]hport}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h void *bufferh](jP)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj$ubjb)}(h h]h }(hj6hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj$ubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hbufferh]hbuffer}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h size_t lenh](h)}(hhh]h)}(hsize_th]hsize_t}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]jc.parport_readasbuh1hhjfubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjfubh)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjbhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj^hhhjhMubah}(h]jYah ](jjeh"]h$]h&]j j )j huh1hhjhMhj[hhubj)}(hhh]j()}(h)read a block of data from a parallel porth]h)read a block of data from a parallel port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj[hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jj#jj$j%j&uh1hhhhhhNhNubj_)}(hXv**Parameters** ``struct parport *port`` port to read from ``void *buffer`` data buffer (in kernel space) ``size_t len`` number of bytes of data to transfer This will read up to **len** bytes of **buffer** to the port specified, using the IEEE 1284 transfer mode most recently negotiated to (using parport_negotiate()), as long as that mode supports reverse transfers (peripheral to host). It is the caller's responsibility to ensure that the first **len** bytes of **buffer** are available to write to. This function returns the number of bytes transferred (if zero or positive), or else an error code.h](j()}(h**Parameters**h]ji)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMhjubj)}(hhh](j)}(h+``struct parport *port`` port to read from h](j)}(h``struct parport *port``-h]j.)}(hjh]hstruct parport *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMhjubj)}(hhh]j()}(hport to read fromh]hport to read from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h/``void *buffer`` data buffer (in kernel space) h](j)}(h``void *buffer``h]j.)}(hj=h]h void *buffer}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj;ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMhj7ubj)}(hhh]j()}(hdata buffer (in kernel space)h]hdata buffer (in kernel space)}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjRhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjubj)}(hX``size_t len`` number of bytes of data to transfer This will read up to **len** bytes of **buffer** to the port specified, using the IEEE 1284 transfer mode most recently negotiated to (using parport_negotiate()), as long as that mode supports reverse transfers (peripheral to host). It is the caller's responsibility to ensure that the first **len** bytes of **buffer** are available to write to. This function returns the number of bytes transferred (if zero or positive), or else an error code.h](j)}(h``size_t len``h]j.)}(hjvh]h size_t len}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjtubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMhjpubj)}(hhh](j()}(h#number of bytes of data to transferh]h#number of bytes of data to transfer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMhjubj()}(hThis will read up to **len** bytes of **buffer** to the port specified, using the IEEE 1284 transfer mode most recently negotiated to (using parport_negotiate()), as long as that mode supports reverse transfers (peripheral to host).h](hThis will read up to }(hjhhhNhNubji)}(h**len**h]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubh bytes of }(hjhhhNhNubji)}(h **buffer**h]hbuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubh to the port specified, using the IEEE 1284 transfer mode most recently negotiated to (using parport_negotiate()), as long as that mode supports reverse transfers (peripheral to host).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMhjubj()}(hqIt is the caller's responsibility to ensure that the first **len** bytes of **buffer** are available to write to.h](h=It is the caller’s responsibility to ensure that the first }(hjhhhNhNubji)}(h**len**h]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubh bytes of }(hjhhhNhNubji)}(h **buffer**h]hbuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubh are available to write to.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMhjubj()}(hcThis function returns the number of bytes transferred (if zero or positive), or else an error code.h]hcThis function returns the number of bytes transferred (if zero or positive), or else an error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ parport_set_timeout (C function)c.parport_set_timeouthNtauh1hhhhhhNhNubh)}(hhh](h)}(hAlong parport_set_timeout (struct pardevice *dev, long inactivity)h]h)}(h@long parport_set_timeout(struct pardevice *dev, long inactivity)h](jP)}(hlongh]hlong}(hjDhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj@hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMubjb)}(h h]h }(hjShhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj@hhhjRhMubh)}(hparport_set_timeouth]h)}(hparport_set_timeouth]hparport_set_timeout}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ](hheh"]h$]h&]hhuh1hhj@hhhjRhMubj)}(h((struct pardevice *dev, long inactivity)h](j)}(hstruct pardevice *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj}ubh)}(hhh]h)}(h pardeviceh]h pardevice}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjgsbc.parport_set_timeoutasbuh1hhj}ubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj}ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjyubj)}(hlong inactivityh](jP)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubh)}(h inactivityh]h inactivity}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjyubeh}(h]h ]h"]h$]h&]hhuh1jhj@hhhjRhMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj<hhhjRhMubah}(h]j7ah ](jjeh"]h$]h&]j j )j huh1hhjRhMhj9hhubj)}(hhh]j()}(h'set the inactivity timeout for a deviceh]h'set the inactivity timeout for a device}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMhj6hhubah}(h]h ]h"]h$]h&]uh1jhj9hhhjRhMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jQj#jQj$j%j&uh1hhhhhhNhNubj_)}(hX**Parameters** ``struct pardevice *dev`` device on a port ``long inactivity`` inactivity timeout (in jiffies) This sets the inactivity timeout for a particular device on a port. This affects functions like parport_wait_peripheral(). The special value 0 means not to call schedule() while dealing with this device. The return value is the previous inactivity timeout. Any callers of parport_wait_event() for this device are woken up.h](j()}(h**Parameters**h]ji)}(hj[h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjYubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMhjUubj)}(hhh](j)}(h+``struct pardevice *dev`` device on a port h](j)}(h``struct pardevice *dev``h]j.)}(hjzh]hstruct pardevice *dev}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjxubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMhjtubj)}(hhh]j()}(hdevice on a porth]hdevice on a port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhMhjqubj)}(hXz``long inactivity`` inactivity timeout (in jiffies) This sets the inactivity timeout for a particular device on a port. This affects functions like parport_wait_peripheral(). The special value 0 means not to call schedule() while dealing with this device. The return value is the previous inactivity timeout. Any callers of parport_wait_event() for this device are woken up.h](j)}(h``long inactivity``h]j.)}(hjh]hlong inactivity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMhjubj)}(hhh](j()}(hinactivity timeout (in jiffies)h]hinactivity timeout (in jiffies)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMhjubj()}(hThis sets the inactivity timeout for a particular device on a port. This affects functions like parport_wait_peripheral(). The special value 0 means not to call schedule() while dealing with this device.h]hThis sets the inactivity timeout for a particular device on a port. This affects functions like parport_wait_peripheral(). The special value 0 means not to call schedule() while dealing with this device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMhjubj()}(h4The return value is the previous inactivity timeout.h]h4The return value is the previous inactivity timeout.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.chMhjubj()}(hAAny callers of parport_wait_event() for this device are woken up.h]hAAny callers of parport_wait_event() for this device are woken up.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjqubeh}(h]h ]h"]h$]h&]uh1j~hjUubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ&__parport_register_driver (C function)c.__parport_register_driverhNtauh1hhhhhhNhNubh)}(hhh](h)}(hfint __parport_register_driver (struct parport_driver *drv, struct module *owner, const char *mod_name)h]h)}(heint __parport_register_driver(struct parport_driver *drv, struct module *owner, const char *mod_name)h](jP)}(hinth]hint}(hj9hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj5hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM ubjb)}(h h]h }(hjHhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj5hhhjGhM ubh)}(h__parport_register_driverh]h)}(h__parport_register_driverh]h__parport_register_driver}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ](hheh"]h$]h&]hhuh1hhj5hhhjGhM ubj)}(hH(struct parport_driver *drv, struct module *owner, const char *mod_name)h](j)}(hstruct parport_driver *drvh](j)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjrubh)}(hhh]h)}(hparport_driverh]hparport_driver}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj\sbc.__parport_register_driverasbuh1hhjrubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjrubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hdrvh]hdrv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjnubj)}(hstruct module *ownerh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubh)}(hhh]h)}(hmoduleh]hmodule}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.__parport_register_driverasbuh1hhjubjb)}(h h]h }(hj$hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hownerh]howner}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjnubj)}(hconst char *mod_nameh](j)}(hj0h]hconst}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubjb)}(h h]h }(hjehhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjTubjP)}(hcharh]hchar}(hjshhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjTubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjTubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hmod_nameh]hmod_name}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjnubeh}(h]h ]h"]h$]h&]hhuh1jhj5hhhjGhM ubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj1hhhjGhM ubah}(h]j,ah ](jjeh"]h$]h&]j j )j huh1hhjGhM hj.hhubj)}(hhh]j()}(h®ister a parallel port device driverh]h®ister a parallel port device driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj.hhhjGhM ubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jj#jj$j%j&uh1hhhhhhNhNubj_)}(hX**Parameters** ``struct parport_driver *drv`` structure describing the driver ``struct module *owner`` owner module of drv ``const char *mod_name`` module name string This can be called by a parallel port device driver in order to receive notifications about ports being found in the system, as well as ports no longer available. If devmodel is true then the new device model is used for registration. The **drv** structure is allocated by the caller and must not be deallocated until after calling parport_unregister_driver(). If using the non device model: The driver's attach() function may block. The port that attach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so. Calling parport_register_device() on that port will do this for you. The driver's detach() function may block. The port that detach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so. Returns 0 on success. The non device model will always succeeds. but the new device model can fail and will return the error code.h](j()}(h**Parameters**h]ji)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chKhjubj)}(hhh](j)}(h?``struct parport_driver *drv`` structure describing the driver h](j)}(h``struct parport_driver *drv``h]j.)}(hjh]hstruct parport_driver *drv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chKhjubj)}(hhh]j()}(hstructure describing the driverh]hstructure describing the driver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h-``struct module *owner`` owner module of drv h](j)}(h``struct module *owner``h]j.)}(hj@h]hstruct module *owner}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj>ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chKhj:ubj)}(hhh]j()}(howner module of drvh]howner module of drv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjUhKhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhKhjubj)}(hX9``const char *mod_name`` module name string This can be called by a parallel port device driver in order to receive notifications about ports being found in the system, as well as ports no longer available. If devmodel is true then the new device model is used for registration. The **drv** structure is allocated by the caller and must not be deallocated until after calling parport_unregister_driver(). If using the non device model: The driver's attach() function may block. The port that attach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so. Calling parport_register_device() on that port will do this for you. The driver's detach() function may block. The port that detach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so. Returns 0 on success. The non device model will always succeeds. but the new device model can fail and will return the error code.h](j)}(h``const char *mod_name``h]j.)}(hjyh]hconst char *mod_name}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjwubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM hjsubj)}(hhh](j()}(hmodule name stringh]hmodule name string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chKhjubj()}(hThis can be called by a parallel port device driver in order to receive notifications about ports being found in the system, as well as ports no longer available.h]hThis can be called by a parallel port device driver in order to receive notifications about ports being found in the system, as well as ports no longer available.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chKhjubj()}(hGIf devmodel is true then the new device model is used for registration.h]hGIf devmodel is true then the new device model is used for registration.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chKhjubj()}(h}The **drv** structure is allocated by the caller and must not be deallocated until after calling parport_unregister_driver().h](hThe }(hjhhhNhNubji)}(h**drv**h]hdrv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubhr structure is allocated by the caller and must not be deallocated until after calling parport_unregister_driver().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chKhjubj()}(hX?If using the non device model: The driver's attach() function may block. The port that attach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so. Calling parport_register_device() on that port will do this for you.h]hXAIf using the non device model: The driver’s attach() function may block. The port that attach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so. Calling parport_register_device() on that port will do this for you.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chKhjubj()}(hThe driver's detach() function may block. The port that detach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so.h]hThe driver’s detach() function may block. The port that detach() is given will be valid for the duration of the callback, but if the driver wants to take a copy of the pointer it must call parport_get_port() to do so.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhjubj()}(hReturns 0 on success. The non device model will always succeeds. but the new device model can fail and will return the error code.h]hReturns 0 on success. The non device model will always succeeds. but the new device model can fail and will return the error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ&parport_unregister_driver (C function)c.parport_unregister_driverhNtauh1hhhhhhNhNubh)}(hhh](h)}(h;void parport_unregister_driver (struct parport_driver *drv)h]h)}(h:void parport_unregister_driver(struct parport_driver *drv)h](jP)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj:hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMIubjb)}(h h]h }(hjMhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj:hhhjLhMIubh)}(hparport_unregister_driverh]h)}(hparport_unregister_driverh]hparport_unregister_driver}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ](hheh"]h$]h&]hhuh1hhj:hhhjLhMIubj)}(h(struct parport_driver *drv)h]j)}(hstruct parport_driver *drvh](j)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjwubh)}(hhh]h)}(hparport_driverh]hparport_driver}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjasbc.parport_unregister_driverasbuh1hhjwubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hdrvh]hdrv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjsubah}(h]h ]h"]h$]h&]hhuh1jhj:hhhjLhMIubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj6hhhjLhMIubah}(h]j1ah ](jjeh"]h$]h&]j j )j huh1hhjLhMIhj3hhubj)}(hhh]j()}(h(deregister a parallel port device driverh]h(deregister a parallel port device driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM:hjhhubah}(h]h ]h"]h$]h&]uh1jhj3hhhjLhMIubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jj#jj$j%j&uh1hhhhhhNhNubj_)}(hXa**Parameters** ``struct parport_driver *drv`` structure describing the driver that was given to parport_register_driver() This should be called by a parallel port device driver that has registered itself using parport_register_driver() when it is about to be unloaded. When it returns, the driver's attach() routine will no longer be called, and for each port that attach() was called for, the detach() routine will have been called. All the driver's attach() and detach() calls are guaranteed to have finished by the time this function returns.h](j()}(h**Parameters**h]ji)}(hj h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM>hjubj)}(hhh]j)}(hX=``struct parport_driver *drv`` structure describing the driver that was given to parport_register_driver() This should be called by a parallel port device driver that has registered itself using parport_register_driver() when it is about to be unloaded. When it returns, the driver's attach() routine will no longer be called, and for each port that attach() was called for, the detach() routine will have been called. All the driver's attach() and detach() calls are guaranteed to have finished by the time this function returns.h](j)}(h``struct parport_driver *drv``h]j.)}(hj?h]hstruct parport_driver *drv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj=ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMFhj9ubj)}(hhh](j()}(hKstructure describing the driver that was given to parport_register_driver()h]hKstructure describing the driver that was given to parport_register_driver()}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM;hjUubjD)}(hXThis should be called by a parallel port device driver that has registered itself using parport_register_driver() when it is about to be unloaded. When it returns, the driver's attach() routine will no longer be called, and for each port that attach() was called for, the detach() routine will have been called. All the driver's attach() and detach() calls are guaranteed to have finished by the time this function returns.h](j()}(hThis should be called by a parallel port device driver that has registered itself using parport_register_driver() when it is about to be unloaded.h]hThis should be called by a parallel port device driver that has registered itself using parport_register_driver() when it is about to be unloaded.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM>hjgubj()}(hWhen it returns, the driver's attach() routine will no longer be called, and for each port that attach() was called for, the detach() routine will have been called.h]hWhen it returns, the driver’s attach() routine will no longer be called, and for each port that attach() was called for, the detach() routine will have been called.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMBhjgubj()}(hoAll the driver's attach() and detach() calls are guaranteed to have finished by the time this function returns.h]hqAll the driver’s attach() and detach() calls are guaranteed to have finished by the time this function returns.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjThMFhjgubeh}(h]h ]h"]h$]h&]uh1jChjyhM>hjUubeh}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMFhj6ubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČparport_get_port (C function)c.parport_get_porthNtauh1hhhhhhNhNubh)}(hhh](h)}(h8struct parport * parport_get_port (struct parport *port)h]h)}(h6struct parport *parport_get_port(struct parport *port)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMmubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjhhhjhMmubh)}(hhh]h)}(hparporth]hparport}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jparport_get_portsbc.parport_get_portasbuh1hhjhhhjhMmubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjhhhjhMmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMmubh)}(hparport_get_porth]h)}(hj h]hparport_get_port}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ](hheh"]h$]h&]hhuh1hhjhhhjhMmubj)}(h(struct parport *port)h]j)}(hstruct parport *porth](j)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubjb)}(h h]h }(hjVhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjEubh)}(hhh]h)}(hparporth]hparport}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]j c.parport_get_portasbuh1hhjEubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjEubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hporth]hport}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjAubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMmubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjhhhjhMmubah}(h]jah ](jjeh"]h$]h&]j j )j huh1hhjhMmhjhhubj)}(hhh]j()}(h"increment a port's reference counth]h$increment a port’s reference count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMghjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMmubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jj#jj$j%j&uh1hhhhhhNhNubj_)}(h**Parameters** ``struct parport *port`` the port This ensures that a struct parport pointer remains valid until the matching parport_put_port() call.h](j()}(h**Parameters**h]ji)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMkhjubj)}(hhh]j)}(h``struct parport *port`` the port This ensures that a struct parport pointer remains valid until the matching parport_put_port() call.h](j)}(h``struct parport *port``h]j.)}(hj h]hstruct parport *port}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMjhjubj)}(hhh](j()}(hthe porth]hthe port}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhhj!ubj()}(hdThis ensures that a struct parport pointer remains valid until the matching parport_put_port() call.h]hdThis ensures that a struct parport pointer remains valid until the matching parport_put_port() call.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj hMjhj!ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMjhjubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČparport_put_port (C function)c.parport_put_porthNtauh1hhhhhhNhNubh)}(hhh](h)}(h,void parport_put_port (struct parport *port)h]h)}(h+void parport_put_port(struct parport *port)h](jP)}(hvoidh]hvoid}(hjshhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjohhh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjohhhjhMubh)}(hparport_put_porth]h)}(hparport_put_porth]hparport_put_port}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](hheh"]h$]h&]hhuh1hhjohhhjhMubj)}(h(struct parport *port)h]j)}(hstruct parport *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubh)}(hhh]h)}(hparporth]hparport}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.parport_put_portasbuh1hhjubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hporth]hport}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjohhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjkhhhjhMubah}(h]jfah ](jjeh"]h$]h&]j j )j huh1hhjhMhjhhhubj)}(hhh]j()}(h"decrement a port's reference counth]h$decrement a port’s reference count}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM}hj0hhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jKj#jKj$j%j&uh1hhhhhhNhNubj_)}(h**Parameters** ``struct parport *port`` the port This should be called once for each call to parport_get_port(), once the port is no longer needed. When the reference count reaches zero (port is no longer used), free_port is called.h](j()}(h**Parameters**h]ji)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjSubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhjOubj)}(hhh]j)}(h``struct parport *port`` the port This should be called once for each call to parport_get_port(), once the port is no longer needed. When the reference count reaches zero (port is no longer used), free_port is called.h](j)}(h``struct parport *port``h]j.)}(hjth]hstruct parport *port}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjrubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhjnubj)}(hhh](j()}(hthe porth]hthe port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM~hjubj()}(hThis should be called once for each call to parport_get_port(), once the port is no longer needed. When the reference count reaches zero (port is no longer used), free_port is called.h]hThis should be called once for each call to parport_get_port(), once the port is no longer needed. When the reference count reaches zero (port is no longer used), free_port is called.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubah}(h]h ]h"]h$]h&]uh1j~hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ"parport_register_port (C function)c.parport_register_porthNtauh1hhhhhhNhNubh)}(hhh](h)}(hmstruct parport * parport_register_port (unsigned long base, int irq, int dma, struct parport_operations *ops)h]h)}(hkstruct parport *parport_register_port(unsigned long base, int irq, int dma, struct parport_operations *ops)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjhhhjhMubh)}(hhh]h)}(hparporth]hparport}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jparport_register_portsbc.parport_register_portasbuh1hhjhhhjhMubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjhhhjhMubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hparport_register_porth]h)}(hjh]hparport_register_port}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ](hheh"]h$]h&]hhuh1hhjhhhjhMubj)}(hF(unsigned long base, int irq, int dma, struct parport_operations *ops)h](j)}(hunsigned long baseh](jP)}(hunsignedh]hunsigned}(hjWhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjSubjb)}(h h]h }(hjehhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjSubjP)}(hlongh]hlong}(hjshhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjSubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjSubh)}(hbaseh]hbase}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjOubj)}(hint irqh](jP)}(hinth]hint}(hjhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubh)}(hirqh]hirq}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjOubj)}(hint dmah](jP)}(hinth]hint}(hjhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubh)}(hdmah]hdma}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjOubj)}(hstruct parport_operations *opsh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjb)}(h h]h }(hjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubh)}(hhh]h)}(hparport_operationsh]hparport_operations}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]jc.parport_register_portasbuh1hhjubjb)}(h h]h }(hjNhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hopsh]hops}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjOubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1hhjhMhjhhubj)}(hhh]j()}(hregister a parallel porth]hregister a parallel port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jj#jj$j%j&uh1hhhhhhNhNubj_)}(hX**Parameters** ``unsigned long base`` base I/O address ``int irq`` IRQ line ``int dma`` DMA channel ``struct parport_operations *ops`` pointer to the port driver's port operations structure When a parallel port (lowlevel) driver finds a port that should be made available to parallel port device drivers, it should call parport_register_port(). The **base**, **irq**, and **dma** parameters are for the convenience of port drivers, and for ports where they aren't meaningful needn't be set to anything special. They can be altered afterwards by adjusting the relevant members of the parport structure that is returned and represents the port. They should not be tampered with after calling parport_announce_port, however. If there are parallel port device drivers in the system that have registered themselves using parport_register_driver(), they are not told about the port at this time; that is done by parport_announce_port(). The **ops** structure is allocated by the caller, and must not be deallocated before calling parport_remove_port(). If there is no memory to allocate a new parport structure, this function will return ``NULL``.h](j()}(h**Parameters**h]ji)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhjubj)}(hhh](j)}(h(``unsigned long base`` base I/O address h](j)}(h``unsigned long base``h]j.)}(hjh]hunsigned long base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhjubj)}(hhh]j()}(hbase I/O addressh]hbase I/O address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``int irq`` IRQ line h](j)}(h ``int irq``h]j.)}(hj h]hint irq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhjubj)}(hhh]j()}(hIRQ lineh]hIRQ line}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hMhjubj)}(h``int dma`` DMA channel h](j)}(h ``int dma``h]j.)}(hjFh]hint dma}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjDubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj@ubj)}(hhh]j()}(h DMA channelh]h DMA channel}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhjubj)}(hX``struct parport_operations *ops`` pointer to the port driver's port operations structure When a parallel port (lowlevel) driver finds a port that should be made available to parallel port device drivers, it should call parport_register_port(). The **base**, **irq**, and **dma** parameters are for the convenience of port drivers, and for ports where they aren't meaningful needn't be set to anything special. They can be altered afterwards by adjusting the relevant members of the parport structure that is returned and represents the port. They should not be tampered with after calling parport_announce_port, however. If there are parallel port device drivers in the system that have registered themselves using parport_register_driver(), they are not told about the port at this time; that is done by parport_announce_port(). The **ops** structure is allocated by the caller, and must not be deallocated before calling parport_remove_port(). If there is no memory to allocate a new parport structure, this function will return ``NULL``.h](j)}(h"``struct parport_operations *ops``h]j.)}(hjh]hstruct parport_operations *ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj}ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhjyubj)}(hhh](j()}(h6pointer to the port driver's port operations structureh]h8pointer to the port driver’s port operations structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhjubj()}(hXWhen a parallel port (lowlevel) driver finds a port that should be made available to parallel port device drivers, it should call parport_register_port(). The **base**, **irq**, and **dma** parameters are for the convenience of port drivers, and for ports where they aren't meaningful needn't be set to anything special. They can be altered afterwards by adjusting the relevant members of the parport structure that is returned and represents the port. They should not be tampered with after calling parport_announce_port, however.h](hWhen a parallel port (lowlevel) driver finds a port that should be made available to parallel port device drivers, it should call parport_register_port(). The }(hjhhhNhNubji)}(h**base**h]hbase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubh, }(hjhhhNhNubji)}(h**irq**h]hirq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubh, and }(hjhhhNhNubji)}(h**dma**h]hdma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubhX\ parameters are for the convenience of port drivers, and for ports where they aren’t meaningful needn’t be set to anything special. They can be altered afterwards by adjusting the relevant members of the parport structure that is returned and represents the port. They should not be tampered with after calling parport_announce_port, however.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhjubj()}(hIf there are parallel port device drivers in the system that have registered themselves using parport_register_driver(), they are not told about the port at this time; that is done by parport_announce_port().h]hIf there are parallel port device drivers in the system that have registered themselves using parport_register_driver(), they are not told about the port at this time; that is done by parport_announce_port().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhjubj()}(hsThe **ops** structure is allocated by the caller, and must not be deallocated before calling parport_remove_port().h](hThe }(hjhhhNhNubji)}(h**ops**h]hops}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjubhh structure is allocated by the caller, and must not be deallocated before calling parport_remove_port().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhjubj()}(h^If there is no memory to allocate a new parport structure, this function will return ``NULL``.h](hUIf there is no memory to allocate a new parport structure, this function will return }(hj hhhNhNubj.)}(h``NULL``h]hNULL}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ"parport_announce_port (C function)c.parport_announce_porthNtauh1hhhhhhNhNubh)}(hhh](h)}(h1void parport_announce_port (struct parport *port)h]h)}(h0void parport_announce_port(struct parport *port)h](jP)}(hvoidh]hvoid}(hjn hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjj hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMubjb)}(h h]h }(hj} hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjj hhhj| hMubh)}(hparport_announce_porth]h)}(hparport_announce_porth]hparport_announce_port}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](hheh"]h$]h&]hhuh1hhjj hhhj| hMubj)}(h(struct parport *port)h]j)}(hstruct parport *porth](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjb)}(h h]h }(hj hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj ubh)}(hhh]h)}(hparporth]hparport}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jj sbc.parport_announce_portasbuh1hhj ubjb)}(h h]h }(hj hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hporth]hport}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhjj hhhj| hMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjf hhhj| hMubah}(h]ja ah ](jjeh"]h$]h&]j j )j huh1hhj| hMhjc hhubj)}(hhh]j()}(h)tell device drivers about a parallel porth]h)tell device drivers about a parallel port}(hj.!hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj+!hhubah}(h]h ]h"]h$]h&]uh1jhjc hhhj| hMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jF!j#jF!j$j%j&uh1hhhhhhNhNubj_)}(hX**Parameters** ``struct parport *port`` parallel port to announce After a port driver has registered a parallel port with parport_register_port, and performed any necessary initialisation or adjustments, it should call parport_announce_port() in order to notify all device drivers that have called parport_register_driver(). Their attach() functions will be called, with **port** as the parameter.h](j()}(h**Parameters**h]ji)}(hjP!h]h Parameters}(hjR!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjN!ubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhjJ!ubj)}(hhh]j)}(hX``struct parport *port`` parallel port to announce After a port driver has registered a parallel port with parport_register_port, and performed any necessary initialisation or adjustments, it should call parport_announce_port() in order to notify all device drivers that have called parport_register_driver(). Their attach() functions will be called, with **port** as the parameter.h](j)}(h``struct parport *port``h]j.)}(hjo!h]hstruct parport *port}(hjq!hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjm!ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhji!ubj)}(hhh](j()}(hparallel port to announceh]hparallel port to announce}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj!ubj()}(hXLAfter a port driver has registered a parallel port with parport_register_port, and performed any necessary initialisation or adjustments, it should call parport_announce_port() in order to notify all device drivers that have called parport_register_driver(). Their attach() functions will be called, with **port** as the parameter.h](hX2After a port driver has registered a parallel port with parport_register_port, and performed any necessary initialisation or adjustments, it should call parport_announce_port() in order to notify all device drivers that have called parport_register_driver(). Their attach() functions will be called, with }(hj!hhhNhNubji)}(h**port**h]hport}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj!ubh as the parameter.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj!ubeh}(h]h ]h"]h$]h&]uh1jhji!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjf!ubah}(h]h ]h"]h$]h&]uh1j~hjJ!ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ parport_remove_port (C function)c.parport_remove_porthNtauh1hhhhhhNhNubh)}(hhh](h)}(h/void parport_remove_port (struct parport *port)h]h)}(h.void parport_remove_port(struct parport *port)h](jP)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj!hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM-ubjb)}(h h]h }(hj!hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj!hhhj!hM-ubh)}(hparport_remove_porth]h)}(hparport_remove_porth]hparport_remove_port}(hj "hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ](hheh"]h$]h&]hhuh1hhj!hhhj!hM-ubj)}(h(struct parport *port)h]j)}(hstruct parport *porth](j)}(hjh]hstruct}(hj'"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#"ubjb)}(h h]h }(hj4"hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj#"ubh)}(hhh]h)}(hparporth]hparport}(hjE"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjB"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjG"modnameN classnameNjj)}j]j)}jj "sbc.parport_remove_portasbuh1hhj#"ubjb)}(h h]h }(hje"hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj#"ubj)}(hjh]h*}(hjs"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#"ubh)}(hporth]hport}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj"ubah}(h]h ]h"]h$]h&]hhuh1jhj!hhhj!hM-ubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj!hhhj!hM-ubah}(h]j!ah ](jjeh"]h$]h&]j j )j huh1hhj!hM-hj!hhubj)}(hhh]j()}(hderegister a parallel porth]hderegister a parallel port}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj"hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj!hM-ubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j"j#j"j$j%j&uh1hhhhhhNhNubj_)}(hX**Parameters** ``struct parport *port`` parallel port to deregister When a parallel port driver is forcibly unloaded, or a parallel port becomes inaccessible, the port driver must call this function in order to deal with device drivers that still want to use it. The parport structure associated with the port has its operations structure replaced with one containing 'null' operations that return errors or just don't do anything. Any drivers that have registered themselves using parport_register_driver() are notified that the port is no longer accessible by having their detach() routines called with **port** as the parameter.h](j()}(h**Parameters**h]ji)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj"ubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM hj"ubj)}(hhh]j)}(hXk``struct parport *port`` parallel port to deregister When a parallel port driver is forcibly unloaded, or a parallel port becomes inaccessible, the port driver must call this function in order to deal with device drivers that still want to use it. The parport structure associated with the port has its operations structure replaced with one containing 'null' operations that return errors or just don't do anything. Any drivers that have registered themselves using parport_register_driver() are notified that the port is no longer accessible by having their detach() routines called with **port** as the parameter.h](j)}(h``struct parport *port``h]j.)}(hj"h]hstruct parport *port}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj"ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM*hj"ubj)}(hhh](j()}(hparallel port to deregisterh]hparallel port to deregister}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj#ubj()}(hWhen a parallel port driver is forcibly unloaded, or a parallel port becomes inaccessible, the port driver must call this function in order to deal with device drivers that still want to use it.h]hWhen a parallel port driver is forcibly unloaded, or a parallel port becomes inaccessible, the port driver must call this function in order to deal with device drivers that still want to use it.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj#ubj()}(hThe parport structure associated with the port has its operations structure replaced with one containing 'null' operations that return errors or just don't do anything.h]hThe parport structure associated with the port has its operations structure replaced with one containing ‘null’ operations that return errors or just don’t do anything.}(hj"#hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM$hj#ubj()}(hAny drivers that have registered themselves using parport_register_driver() are notified that the port is no longer accessible by having their detach() routines called with **port** as the parameter.h](hAny drivers that have registered themselves using parport_register_driver() are notified that the port is no longer accessible by having their detach() routines called with }(hj1#hhhNhNubji)}(h**port**h]hport}(hj9#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj1#ubh as the parameter.}(hj1#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM(hj#ubeh}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj#hM*hj"ubah}(h]h ]h"]h$]h&]uh1j~hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ'parport_register_dev_model (C function)c.parport_register_dev_modelhNtauh1hhhhhhNhNubh)}(hhh](h)}(hstruct pardevice * parport_register_dev_model (struct parport *port, const char *name, const struct pardev_cb *par_dev_cb, int id)h]h)}(hstruct pardevice *parport_register_dev_model(struct parport *port, const char *name, const struct pardev_cb *par_dev_cb, int id)h](j)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMubjb)}(h h]h }(hj#hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj#hhhj#hMubh)}(hhh]h)}(h pardeviceh]h pardevice}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#modnameN classnameNjj)}j]j)}jparport_register_dev_modelsbc.parport_register_dev_modelasbuh1hhj#hhhj#hMubjb)}(h h]h }(hj#hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj#hhhj#hMubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj#hMubh)}(hparport_register_dev_modelh]h)}(hj#h]hparport_register_dev_model}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ](hheh"]h$]h&]hhuh1hhj#hhhj#hMubj)}(hT(struct parport *port, const char *name, const struct pardev_cb *par_dev_cb, int id)h](j)}(hstruct parport *porth](j)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjb)}(h h]h }(hj $hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj#ubh)}(hhh]h)}(hparporth]hparport}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j#c.parport_register_dev_modelasbuh1hhj#ubjb)}(h h]h }(hj:$hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj#ubj)}(hjh]h*}(hjH$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hporth]hport}(hjU$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#ubj)}(hconst char *nameh](j)}(hj0h]hconst}(hjn$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj$ubjb)}(h h]h }(hj{$hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjj$ubjP)}(hcharh]hchar}(hj$hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjj$ubjb)}(h h]h }(hj$hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjj$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj$ubh)}(hnameh]hname}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#ubj)}(h"const struct pardev_cb *par_dev_cbh](j)}(hj0h]hconst}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjb)}(h h]h }(hj$hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj$ubj)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjb)}(h h]h }(hj$hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj$ubh)}(hhh]h)}(h pardev_cbh]h pardev_cb}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj)}j]j#c.parport_register_dev_modelasbuh1hhj$ubjb)}(h h]h }(hj"%hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj$ubj)}(hjh]h*}(hj0%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(h par_dev_cbh]h par_dev_cb}(hj=%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#ubj)}(hint idh](jP)}(hinth]hint}(hjV%hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjR%ubjb)}(h h]h }(hjd%hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjR%ubh)}(hidh]hid}(hjr%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR%ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#ubeh}(h]h ]h"]h$]h&]hhuh1jhj#hhhj#hMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj|#hhhj#hMubah}(h]jw#ah ](jjeh"]h$]h&]j j )j huh1hhj#hMhjy#hhubj)}(hhh]j()}(h$register a device on a parallel porth]h$register a device on a parallel port}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMbhj%hhubah}(h]h ]h"]h$]h&]uh1jhjy#hhhj#hMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j%j#j%j$j%j&uh1hhhhhhNhNubj_)}(hX; **Parameters** ``struct parport *port`` port to which the device is attached ``const char *name`` a name to refer to the device ``const struct pardev_cb *par_dev_cb`` struct containing callbacks ``int id`` device number to be given to the device This function, called by parallel port device drivers, declares that a device is connected to a port, and tells the system all it needs to know. The struct pardev_cb contains pointer to callbacks. preemption callback function, **preempt**, is called when this device driver has claimed access to the port but another device driver wants to use it. It is given, **private**, as its parameter, and should return zero if it is willing for the system to release the port to another driver on its behalf. If it wants to keep control of the port it should return non-zero, and no action will be taken. It is good manners for the driver to try to release the port at the earliest opportunity after its preemption callback rejects a preemption attempt. Note that if a preemption callback is happy for preemption to go ahead, there is no need to release the port; it is done automatically. This function may not block, as it may be called from interrupt context. If the device driver does not support preemption, **preempt** can be ``NULL``. The wake-up ("kick") callback function, **wakeup**, is called when the port is available to be claimed for exclusive access; that is, parport_claim() is guaranteed to succeed when called from inside the wake-up callback function. If the driver wants to claim the port it should do so; otherwise, it need not take any action. This function may not block, as it may be called from interrupt context. If the device driver does not want to be explicitly invited to claim the port in this way, **wakeup** can be ``NULL``. The interrupt handler, **irq_func**, is called when an interrupt arrives from the parallel port. Note that if a device driver wants to use interrupts it should use parport_enable_irq(), and can also check the irq member of the parport structure representing the port. The parallel port (lowlevel) driver is the one that has called request_irq() and whose interrupt handler is called first. This handler does whatever needs to be done to the hardware to acknowledge the interrupt (for PC-style ports there is nothing special to be done). It then tells the IEEE 1284 code about the interrupt, which may involve reacting to an IEEE 1284 event depending on the current IEEE 1284 phase. After this, it calls **irq_func**. Needless to say, **irq_func** will be called from interrupt context, and may not block. The ``PARPORT_DEV_EXCL`` flag is for preventing port sharing, and so should only be used when sharing the port with other device drivers is impossible and would lead to incorrect behaviour. Use it sparingly! Normally, **flags** will be zero. This function returns a pointer to a structure that represents the device on the port, or ``NULL`` if there is not enough memory to allocate space for that structure.h](j()}(h**Parameters**h]ji)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj%ubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMfhj%ubj)}(hhh](j)}(h>``struct parport *port`` port to which the device is attached h](j)}(h``struct parport *port``h]j.)}(hj%h]hstruct parport *port}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj%ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMchj%ubj)}(hhh]j()}(h$port to which the device is attachedh]h$port to which the device is attached}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj%hMchj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMchj%ubj)}(h3``const char *name`` a name to refer to the device h](j)}(h``const char *name``h]j.)}(hj&h]hconst char *name}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj&ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMdhj&ubj)}(hhh]j()}(ha name to refer to the deviceh]ha name to refer to the device}(hj/&hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj+&hMdhj,&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj+&hMdhj%ubj)}(hC``const struct pardev_cb *par_dev_cb`` struct containing callbacks h](j)}(h&``const struct pardev_cb *par_dev_cb``h]j.)}(hjO&h]h"const struct pardev_cb *par_dev_cb}(hjQ&hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjM&ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMehjI&ubj)}(hhh]j()}(hstruct containing callbacksh]hstruct containing callbacks}(hjh&hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjd&hMehje&ubah}(h]h ]h"]h$]h&]uh1jhjI&ubeh}(h]h ]h"]h$]h&]uh1jhjd&hMehj%ubj)}(hX ``int id`` device number to be given to the device This function, called by parallel port device drivers, declares that a device is connected to a port, and tells the system all it needs to know. The struct pardev_cb contains pointer to callbacks. preemption callback function, **preempt**, is called when this device driver has claimed access to the port but another device driver wants to use it. It is given, **private**, as its parameter, and should return zero if it is willing for the system to release the port to another driver on its behalf. If it wants to keep control of the port it should return non-zero, and no action will be taken. It is good manners for the driver to try to release the port at the earliest opportunity after its preemption callback rejects a preemption attempt. Note that if a preemption callback is happy for preemption to go ahead, there is no need to release the port; it is done automatically. This function may not block, as it may be called from interrupt context. If the device driver does not support preemption, **preempt** can be ``NULL``. The wake-up ("kick") callback function, **wakeup**, is called when the port is available to be claimed for exclusive access; that is, parport_claim() is guaranteed to succeed when called from inside the wake-up callback function. If the driver wants to claim the port it should do so; otherwise, it need not take any action. This function may not block, as it may be called from interrupt context. If the device driver does not want to be explicitly invited to claim the port in this way, **wakeup** can be ``NULL``. The interrupt handler, **irq_func**, is called when an interrupt arrives from the parallel port. Note that if a device driver wants to use interrupts it should use parport_enable_irq(), and can also check the irq member of the parport structure representing the port. The parallel port (lowlevel) driver is the one that has called request_irq() and whose interrupt handler is called first. This handler does whatever needs to be done to the hardware to acknowledge the interrupt (for PC-style ports there is nothing special to be done). It then tells the IEEE 1284 code about the interrupt, which may involve reacting to an IEEE 1284 event depending on the current IEEE 1284 phase. After this, it calls **irq_func**. Needless to say, **irq_func** will be called from interrupt context, and may not block. The ``PARPORT_DEV_EXCL`` flag is for preventing port sharing, and so should only be used when sharing the port with other device drivers is impossible and would lead to incorrect behaviour. Use it sparingly! Normally, **flags** will be zero. This function returns a pointer to a structure that represents the device on the port, or ``NULL`` if there is not enough memory to allocate space for that structure.h](j)}(h ``int id``h]j.)}(hj&h]hint id}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj&ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj&ubj)}(hhh](j()}(h'device number to be given to the deviceh]h'device number to be given to the device}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMfhj&ubj()}(hThis function, called by parallel port device drivers, declares that a device is connected to a port, and tells the system all it needs to know.h]hThis function, called by parallel port device drivers, declares that a device is connected to a port, and tells the system all it needs to know.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhhj&ubj()}(hXxThe struct pardev_cb contains pointer to callbacks. preemption callback function, **preempt**, is called when this device driver has claimed access to the port but another device driver wants to use it. It is given, **private**, as its parameter, and should return zero if it is willing for the system to release the port to another driver on its behalf. If it wants to keep control of the port it should return non-zero, and no action will be taken. It is good manners for the driver to try to release the port at the earliest opportunity after its preemption callback rejects a preemption attempt. Note that if a preemption callback is happy for preemption to go ahead, there is no need to release the port; it is done automatically. This function may not block, as it may be called from interrupt context. If the device driver does not support preemption, **preempt** can be ``NULL``.h](hRThe struct pardev_cb contains pointer to callbacks. preemption callback function, }(hj&hhhNhNubji)}(h **preempt**h]hpreempt}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj&ubh|, is called when this device driver has claimed access to the port but another device driver wants to use it. It is given, }(hj&hhhNhNubji)}(h **private**h]hprivate}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj&ubhXx, as its parameter, and should return zero if it is willing for the system to release the port to another driver on its behalf. If it wants to keep control of the port it should return non-zero, and no action will be taken. It is good manners for the driver to try to release the port at the earliest opportunity after its preemption callback rejects a preemption attempt. Note that if a preemption callback is happy for preemption to go ahead, there is no need to release the port; it is done automatically. This function may not block, as it may be called from interrupt context. If the device driver does not support preemption, }(hj&hhhNhNubji)}(h **preempt**h]hpreempt}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj&ubh can be }(hj&hhhNhNubj.)}(h``NULL``h]hNULL}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj&ubh.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMlhj&ubj()}(hXThe wake-up ("kick") callback function, **wakeup**, is called when the port is available to be claimed for exclusive access; that is, parport_claim() is guaranteed to succeed when called from inside the wake-up callback function. If the driver wants to claim the port it should do so; otherwise, it need not take any action. This function may not block, as it may be called from interrupt context. If the device driver does not want to be explicitly invited to claim the port in this way, **wakeup** can be ``NULL``.h](h,The wake-up (“kick”) callback function, }(hj'hhhNhNubji)}(h **wakeup**h]hwakeup}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj'ubhX, is called when the port is available to be claimed for exclusive access; that is, parport_claim() is guaranteed to succeed when called from inside the wake-up callback function. If the driver wants to claim the port it should do so; otherwise, it need not take any action. This function may not block, as it may be called from interrupt context. If the device driver does not want to be explicitly invited to claim the port in this way, }(hj'hhhNhNubji)}(h **wakeup**h]hwakeup}(hj0'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj'ubh can be }(hj'hhhNhNubj.)}(h``NULL``h]hNULL}(hjB'hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj'ubh.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM{hj&ubj()}(hX The interrupt handler, **irq_func**, is called when an interrupt arrives from the parallel port. Note that if a device driver wants to use interrupts it should use parport_enable_irq(), and can also check the irq member of the parport structure representing the port.h](hThe interrupt handler, }(hj['hhhNhNubji)}(h **irq_func**h]hirq_func}(hjc'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj['ubh, is called when an interrupt arrives from the parallel port. Note that if a device driver wants to use interrupts it should use parport_enable_irq(), and can also check the irq member of the parport structure representing the port.}(hj['hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj&ubj()}(hXThe parallel port (lowlevel) driver is the one that has called request_irq() and whose interrupt handler is called first. This handler does whatever needs to be done to the hardware to acknowledge the interrupt (for PC-style ports there is nothing special to be done). It then tells the IEEE 1284 code about the interrupt, which may involve reacting to an IEEE 1284 event depending on the current IEEE 1284 phase. After this, it calls **irq_func**. Needless to say, **irq_func** will be called from interrupt context, and may not block.h](hXThe parallel port (lowlevel) driver is the one that has called request_irq() and whose interrupt handler is called first. This handler does whatever needs to be done to the hardware to acknowledge the interrupt (for PC-style ports there is nothing special to be done). It then tells the IEEE 1284 code about the interrupt, which may involve reacting to an IEEE 1284 event depending on the current IEEE 1284 phase. After this, it calls }(hj|'hhhNhNubji)}(h **irq_func**h]hirq_func}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj|'ubh. Needless to say, }(hj|'hhhNhNubji)}(h **irq_func**h]hirq_func}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj|'ubh: will be called from interrupt context, and may not block.}(hj|'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj&ubj()}(hThe ``PARPORT_DEV_EXCL`` flag is for preventing port sharing, and so should only be used when sharing the port with other device drivers is impossible and would lead to incorrect behaviour. Use it sparingly! Normally, **flags** will be zero.h](hThe }(hj'hhhNhNubj.)}(h``PARPORT_DEV_EXCL``h]hPARPORT_DEV_EXCL}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj'ubh flag is for preventing port sharing, and so should only be used when sharing the port with other device drivers is impossible and would lead to incorrect behaviour. Use it sparingly! Normally, }(hj'hhhNhNubji)}(h **flags**h]hflags}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj'ubh will be zero.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj&ubj()}(hThis function returns a pointer to a structure that represents the device on the port, or ``NULL`` if there is not enough memory to allocate space for that structure.h](hZThis function returns a pointer to a structure that represents the device on the port, or }(hj'hhhNhNubj.)}(h``NULL``h]hNULL}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj'ubhD if there is not enough memory to allocate space for that structure.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj%ubeh}(h]h ]h"]h$]h&]uh1j~hj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ&parport_unregister_device (C function)c.parport_unregister_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h6void parport_unregister_device (struct pardevice *dev)h]h)}(h5void parport_unregister_device(struct pardevice *dev)h](jP)}(hvoidh]hvoid}(hj5(hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj1(hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM2ubjb)}(h h]h }(hjD(hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj1(hhhjC(hM2ubh)}(hparport_unregister_deviceh]h)}(hparport_unregister_deviceh]hparport_unregister_device}(hjV(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR(ubah}(h]h ](hheh"]h$]h&]hhuh1hhj1(hhhjC(hM2ubj)}(h(struct pardevice *dev)h]j)}(hstruct pardevice *devh](j)}(hjh]hstruct}(hjr(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn(ubjb)}(h h]h }(hj(hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjn(ubh)}(hhh]h)}(h pardeviceh]h pardevice}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j)}jjX(sbc.parport_unregister_deviceasbuh1hhjn(ubjb)}(h h]h }(hj(hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjn(ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn(ubh)}(hdevh]hdev}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjn(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjj(ubah}(h]h ]h"]h$]h&]hhuh1jhj1(hhhjC(hM2ubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj-(hhhjC(hM2ubah}(h]j((ah ](jjeh"]h$]h&]j j )j huh1hhjC(hM2hj*(hhubj)}(hhh]j()}(h&deregister a device on a parallel porth]h&deregister a device on a parallel port}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM-hj(hhubah}(h]h ]h"]h$]h&]uh1jhj*(hhhjC(hM2ubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j )j#j )j$j%j&uh1hhhhhhNhNubj_)}(h**Parameters** ``struct pardevice *dev`` pointer to structure representing device This undoes the effect of parport_register_device().h](j()}(h**Parameters**h]ji)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj)ubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM1hj)ubj)}(hhh]j)}(hx``struct pardevice *dev`` pointer to structure representing device This undoes the effect of parport_register_device().h](j)}(h``struct pardevice *dev``h]j.)}(hj6)h]hstruct pardevice *dev}(hj8)hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj4)ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM/hj0)ubj)}(hhh](j()}(h(pointer to structure representing deviceh]h(pointer to structure representing device}(hjO)hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM.hjL)ubj()}(h4This undoes the effect of parport_register_device().h]h4This undoes the effect of parport_register_device().}(hj^)hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM0hjL)ubeh}(h]h ]h"]h$]h&]uh1jhj0)ubeh}(h]h ]h"]h$]h&]uh1jhjK)hM/hj-)ubah}(h]h ]h"]h$]h&]uh1j~hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ parport_find_number (C function)c.parport_find_numberhNtauh1hhhhhhNhNubh)}(hhh](h)}(h1struct parport * parport_find_number (int number)h]h)}(h/struct parport *parport_find_number(int number)h](j)}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM}ubjb)}(h h]h }(hj)hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj)hhhj)hM}ubh)}(hhh]h)}(hparporth]hparport}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j)}jparport_find_numbersbc.parport_find_numberasbuh1hhj)hhhj)hM}ubjb)}(h h]h }(hj)hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj)hhhj)hM}ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj)hM}ubh)}(hparport_find_numberh]h)}(hj)h]hparport_find_number}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ](hheh"]h$]h&]hhuh1hhj)hhhj)hM}ubj)}(h (int number)h]j)}(h int numberh](jP)}(hinth]hint}(hj*hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj*ubjb)}(h h]h }(hj'*hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj*ubh)}(hnumberh]hnumber}(hj5*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj*ubah}(h]h ]h"]h$]h&]hhuh1jhj)hhhj)hM}ubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj)hhhj)hM}ubah}(h]j)ah ](jjeh"]h$]h&]j j )j huh1hhj)hM}hj)hhubj)}(hhh]j()}(hfind a parallel port by numberh]hfind a parallel port by number}(hj_*hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMshj\*hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj)hM}ubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jw*j#jw*j$j%j&uh1hhhhhhNhNubj_)}(hX5**Parameters** ``int number`` parallel port number This returns the parallel port with the specified number, or ``NULL`` if there is none. There is an implicit parport_get_port() done already; to throw away the reference to the port that parport_find_number() gives you, use parport_put_port().h](j()}(h**Parameters**h]ji)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj*ubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMwhj{*ubj)}(hhh]j)}(hX``int number`` parallel port number This returns the parallel port with the specified number, or ``NULL`` if there is none. There is an implicit parport_get_port() done already; to throw away the reference to the port that parport_find_number() gives you, use parport_put_port().h](j)}(h``int number``h]j.)}(hj*h]h int number}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj*ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMzhj*ubj)}(hhh](j()}(hparallel port numberh]hparallel port number}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMthj*ubj()}(hWThis returns the parallel port with the specified number, or ``NULL`` if there is none.h](h=This returns the parallel port with the specified number, or }(hj*hhhNhNubj.)}(h``NULL``h]hNULL}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj*ubh if there is none.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMvhj*ubj()}(hThere is an implicit parport_get_port() done already; to throw away the reference to the port that parport_find_number() gives you, use parport_put_port().h]hThere is an implicit parport_get_port() done already; to throw away the reference to the port that parport_find_number() gives you, use parport_put_port().}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMyhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMzhj*ubah}(h]h ]h"]h$]h&]uh1j~hj{*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČparport_find_base (C function)c.parport_find_basehNtauh1hhhhhhNhNubh)}(hhh](h)}(h7struct parport * parport_find_base (unsigned long base)h]h)}(h5struct parport *parport_find_base(unsigned long base)h](j)}(hjh]hstruct}(hj*+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&+hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMubjb)}(h h]h }(hj8+hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj&+hhhj7+hMubh)}(hhh]h)}(hparporth]hparport}(hjI+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjF+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjK+modnameN classnameNjj)}j]j)}jparport_find_basesbc.parport_find_baseasbuh1hhj&+hhhj7+hMubjb)}(h h]h }(hjj+hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj&+hhhj7+hMubj)}(hjh]h*}(hjx+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&+hhhj7+hMubh)}(hparport_find_baseh]h)}(hjg+h]hparport_find_base}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ](hheh"]h$]h&]hhuh1hhj&+hhhj7+hMubj)}(h(unsigned long base)h]j)}(hunsigned long baseh](jP)}(hunsignedh]hunsigned}(hj+hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj+ubjb)}(h h]h }(hj+hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj+ubjP)}(hlongh]hlong}(hj+hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj+ubjb)}(h h]h }(hj+hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj+ubh)}(hbaseh]hbase}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj+ubah}(h]h ]h"]h$]h&]hhuh1jhj&+hhhj7+hMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj"+hhhj7+hMubah}(h]j+ah ](jjeh"]h$]h&]j j )j huh1hhj7+hMhj+hhubj)}(hhh]j()}(h$find a parallel port by base addressh]h$find a parallel port by base address}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj,hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj7+hMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j,j#j,j$j%j&uh1hhhhhhNhNubj_)}(hX=**Parameters** ``unsigned long base`` base I/O address This returns the parallel port with the specified base address, or ``NULL`` if there is none. There is an implicit parport_get_port() done already; to throw away the reference to the port that parport_find_base() gives you, use parport_put_port().h](j()}(h**Parameters**h]ji)}(hj(,h]h Parameters}(hj*,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj&,ubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj",ubj)}(hhh]j)}(hX!``unsigned long base`` base I/O address This returns the parallel port with the specified base address, or ``NULL`` if there is none. There is an implicit parport_get_port() done already; to throw away the reference to the port that parport_find_base() gives you, use parport_put_port().h](j)}(h``unsigned long base``h]j.)}(hjG,h]hunsigned long base}(hjI,hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjE,ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhjA,ubj)}(hhh](j()}(hbase I/O addressh]hbase I/O address}(hj`,hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj],ubj()}(h]This returns the parallel port with the specified base address, or ``NULL`` if there is none.h](hCThis returns the parallel port with the specified base address, or }(hjo,hhhNhNubj.)}(h``NULL``h]hNULL}(hjw,hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjo,ubh if there is none.}(hjo,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj],ubj()}(hThere is an implicit parport_get_port() done already; to throw away the reference to the port that parport_find_base() gives you, use parport_put_port().h]hThere is an implicit parport_get_port() done already; to throw away the reference to the port that parport_find_base() gives you, use parport_put_port().}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj],ubeh}(h]h ]h"]h$]h&]uh1jhjA,ubeh}(h]h ]h"]h$]h&]uh1jhj\,hMhj>,ubah}(h]h ]h"]h$]h&]uh1j~hj",ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČparport_claim (C function)c.parport_claimhNtauh1hhhhhhNhNubh)}(hhh](h)}(h)int parport_claim (struct pardevice *dev)h]h)}(h(int parport_claim(struct pardevice *dev)h](jP)}(hinth]hint}(hj,hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj,hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMubjb)}(h h]h }(hj,hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj,hhhj,hMubh)}(h parport_claimh]h)}(h parport_claimh]h parport_claim}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ](hheh"]h$]h&]hhuh1hhj,hhhj,hMubj)}(h(struct pardevice *dev)h]j)}(hstruct pardevice *devh](j)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj -ubjb)}(h h]h }(hj-hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj -ubh)}(hhh]h)}(h pardeviceh]h pardevice}(hj,-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.-modnameN classnameNjj)}j]j)}jj,sbc.parport_claimasbuh1hhj -ubjb)}(h h]h }(hjL-hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj -ubj)}(hjh]h*}(hjZ-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj -ubh)}(hdevh]hdev}(hjg-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj -ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj-ubah}(h]h ]h"]h$]h&]hhuh1jhj,hhhj,hMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj,hhhj,hMubah}(h]j,ah ](jjeh"]h$]h&]j j )j huh1hhj,hMhj,hhubj)}(hhh]j()}(h&claim access to a parallel port deviceh]h&claim access to a parallel port device}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj-hhubah}(h]h ]h"]h$]h&]uh1jhj,hhhj,hMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j-j#j-j$j%j&uh1hhhhhhNhNubj_)}(hX**Parameters** ``struct pardevice *dev`` pointer to structure representing a device on the port This function will not block and so can be used from interrupt context. If parport_claim() succeeds in claiming access to the port it returns zero and the port is available to use. It may fail (returning non-zero) if the port is in use by another driver and that driver is not willing to relinquish control of the port.h](j()}(h**Parameters**h]ji)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj-ubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj-ubj)}(hhh]j)}(hX``struct pardevice *dev`` pointer to structure representing a device on the port This function will not block and so can be used from interrupt context. If parport_claim() succeeds in claiming access to the port it returns zero and the port is available to use. It may fail (returning non-zero) if the port is in use by another driver and that driver is not willing to relinquish control of the port.h](j)}(h``struct pardevice *dev``h]j.)}(hj-h]hstruct pardevice *dev}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj-ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj-ubj)}(hhh](j()}(h6pointer to structure representing a device on the porth]h6pointer to structure representing a device on the port}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj-ubj()}(hXAThis function will not block and so can be used from interrupt context. If parport_claim() succeeds in claiming access to the port it returns zero and the port is available to use. It may fail (returning non-zero) if the port is in use by another driver and that driver is not willing to relinquish control of the port.h]hXAThis function will not block and so can be used from interrupt context. If parport_claim() succeeds in claiming access to the port it returns zero and the port is available to use. It may fail (returning non-zero) if the port is in use by another driver and that driver is not willing to relinquish control of the port.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1j~hj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ#parport_claim_or_block (C function)c.parport_claim_or_blockhNtauh1hhhhhhNhNubh)}(hhh](h)}(h2int parport_claim_or_block (struct pardevice *dev)h]h)}(h1int parport_claim_or_block(struct pardevice *dev)h](jP)}(hinth]hint}(hj;.hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj7.hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM-ubjb)}(h h]h }(hjJ.hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj7.hhhjI.hM-ubh)}(hparport_claim_or_blockh]h)}(hparport_claim_or_blockh]hparport_claim_or_block}(hj\.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjX.ubah}(h]h ](hheh"]h$]h&]hhuh1hhj7.hhhjI.hM-ubj)}(h(struct pardevice *dev)h]j)}(hstruct pardevice *devh](j)}(hjh]hstruct}(hjx.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt.ubjb)}(h h]h }(hj.hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjt.ubh)}(hhh]h)}(h pardeviceh]h pardevice}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j)}jj^.sbc.parport_claim_or_blockasbuh1hhjt.ubjb)}(h h]h }(hj.hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjt.ubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt.ubh)}(hdevh]hdev}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjt.ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjp.ubah}(h]h ]h"]h$]h&]hhuh1jhj7.hhhjI.hM-ubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj3.hhhjI.hM-ubah}(h]j..ah ](jjeh"]h$]h&]j j )j huh1hhjI.hM-hj0.hhubj)}(hhh]j()}(h&claim access to a parallel port deviceh]h&claim access to a parallel port device}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM%hj.hhubah}(h]h ]h"]h$]h&]uh1jhj0.hhhjI.hM-ubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j/j#j/j$j%j&uh1hhhhhhNhNubj_)}(hXW**Parameters** ``struct pardevice *dev`` pointer to structure representing a device on the port This behaves like parport_claim(), but will block if necessary to wait for the port to be free. A return value of 1 indicates that it slept; 0 means that it succeeded without needing to sleep. A negative error code indicates failure.h](j()}(h**Parameters**h]ji)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj/ubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM)hj/ubj)}(hhh]j)}(hX=``struct pardevice *dev`` pointer to structure representing a device on the port This behaves like parport_claim(), but will block if necessary to wait for the port to be free. A return value of 1 indicates that it slept; 0 means that it succeeded without needing to sleep. A negative error code indicates failure.h](j)}(h``struct pardevice *dev``h]j.)}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj:/ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM*hj6/ubj)}(hhh](j()}(h6pointer to structure representing a device on the porth]h6pointer to structure representing a device on the port}(hjU/hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM&hjR/ubj()}(hThis behaves like parport_claim(), but will block if necessary to wait for the port to be free. A return value of 1 indicates that it slept; 0 means that it succeeded without needing to sleep. A negative error code indicates failure.h]hThis behaves like parport_claim(), but will block if necessary to wait for the port to be free. A return value of 1 indicates that it slept; 0 means that it succeeded without needing to sleep. A negative error code indicates failure.}(hjd/hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chM(hjR/ubeh}(h]h ]h"]h$]h&]uh1jhj6/ubeh}(h]h ]h"]h$]h&]uh1jhjQ/hM*hj3/ubah}(h]h ]h"]h$]h&]uh1j~hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČparport_release (C function)c.parport_releasehNtauh1hhhhhhNhNubh)}(hhh](h)}(h,void parport_release (struct pardevice *dev)h]h)}(h+void parport_release(struct pardevice *dev)h](jP)}(hvoidh]hvoid}(hj/hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj/hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMnubjb)}(h h]h }(hj/hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj/hhhj/hMnubh)}(hparport_releaseh]h)}(hparport_releaseh]hparport_release}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ](hheh"]h$]h&]hhuh1hhj/hhhj/hMnubj)}(h(struct pardevice *dev)h]j)}(hstruct pardevice *devh](j)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubjb)}(h h]h }(hj/hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj/ubh)}(hhh]h)}(h pardeviceh]h pardevice}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j)}jj/sbc.parport_releaseasbuh1hhj/ubjb)}(h h]h }(hj 0hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj/ubj)}(hjh]h*}(hj.0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hdevh]hdev}(hj;0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj/ubah}(h]h ]h"]h$]h&]hhuh1jhj/hhhj/hMnubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj/hhhj/hMnubah}(h]j/ah ](jjeh"]h$]h&]j j )j huh1hhj/hMnhj/hhubj)}(hhh]j()}(h(give up access to a parallel port deviceh]h(give up access to a parallel port device}(hje0hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMghjb0hhubah}(h]h ]h"]h$]h&]uh1jhj/hhhj/hMnubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j}0j#j}0j$j%j&uh1hhhhhhNhNubj_)}(hX **Parameters** ``struct pardevice *dev`` pointer to structure representing parallel port device This function cannot fail, but it should not be called without the port claimed. Similarly, if the port is already claimed you should not try claiming it again.h](j()}(h**Parameters**h]ji)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj0ubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMkhj0ubj)}(hhh]j)}(h``struct pardevice *dev`` pointer to structure representing parallel port device This function cannot fail, but it should not be called without the port claimed. Similarly, if the port is already claimed you should not try claiming it again.h](j)}(h``struct pardevice *dev``h]j.)}(hj0h]hstruct pardevice *dev}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj0ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMkhj0ubj)}(hhh](j()}(h6pointer to structure representing parallel port deviceh]h6pointer to structure representing parallel port device}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMhhj0ubj()}(hThis function cannot fail, but it should not be called without the port claimed. Similarly, if the port is already claimed you should not try claiming it again.h]hThis function cannot fail, but it should not be called without the port claimed. Similarly, if the port is already claimed you should not try claiming it again.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.chMjhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMkhj0ubah}(h]h ]h"]h$]h&]uh1j~hj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČparport_open (C function)c.parport_openhNtauh1hhhhhhNhNubh)}(hhh](h)}(h>struct pardevice * parport_open (int devnum, const char *name)h]h)}(h3hM%ubh)}(h parport_closeh]h)}(h parport_closeh]h parport_close}(hjQ3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjM3ubah}(h]h ](hheh"]h$]h&]hhuh1hhj,3hhhj>3hM%ubj)}(h(struct pardevice *dev)h]j)}(hstruct pardevice *devh](j)}(hjh]hstruct}(hjm3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji3ubjb)}(h h]h }(hjz3hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahji3ubh)}(hhh]h)}(h pardeviceh]h pardevice}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j)}jjS3sbc.parport_closeasbuh1hhji3ubjb)}(h h]h }(hj3hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahji3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji3ubh)}(hdevh]hdev}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhji3ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhje3ubah}(h]h ]h"]h$]h&]hhuh1jhj,3hhhj>3hM%ubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj(3hhhj>3hM%ubah}(h]j#3ah ](jjeh"]h$]h&]j j )j huh1hhj>3hM%hj%3hhubj)}(hhh]j()}(h)close a device opened with parport_open()h]h)close a device opened with parport_open()}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:13: ./drivers/parport/daisy.chMhj3hhubah}(h]h ]h"]h$]h&]uh1jhj%3hhhj>3hM%ubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j4j#j4j$j%j&uh1hhhhhhNhNubj_)}(h**Parameters** ``struct pardevice *dev`` device to close This is to parport_open() as parport_unregister_device() is to parport_register_device().h](j()}(h**Parameters**h]ji)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj4ubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:13: ./drivers/parport/daisy.chM#hj 4ubj)}(hhh]j)}(h``struct pardevice *dev`` device to close This is to parport_open() as parport_unregister_device() is to parport_register_device().h](j)}(h``struct pardevice *dev``h]j.)}(hj14h]hstruct pardevice *dev}(hj34hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj/4ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:13: ./drivers/parport/daisy.chM"hj+4ubj)}(hhh](j()}(hdevice to closeh]hdevice to close}(hjJ4hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:13: ./drivers/parport/daisy.chM hjG4ubj()}(hYThis is to parport_open() as parport_unregister_device() is to parport_register_device().h]hYThis is to parport_open() as parport_unregister_device() is to parport_register_device().}(hjY4hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjF4hM"hjG4ubeh}(h]h ]h"]h$]h&]uh1jhj+4ubeh}(h]h ]h"]h$]h&]uh1jhjF4hM"hj(4ubah}(h]h ]h"]h$]h&]uh1j~hj 4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hhhhhNhNubeh}(h]parallel-port-devicesah ]h"]parallel port devicesah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h16x50 UART Driverh]h16x50 UART Driver}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ serial8250_get_port (C function)c.serial8250_get_porthNtauh1hhj4hhhNhNubh)}(hhh](h)}(h6struct uart_8250_port * serial8250_get_port (int line)h]h)}(h4struct uart_8250_port *serial8250_get_port(int line)h](j)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMJubjb)}(h h]h }(hj4hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj4hhhj4hMJubh)}(hhh]h)}(huart_8250_porth]huart_8250_port}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j)}jserial8250_get_portsbc.serial8250_get_portasbuh1hhj4hhhj4hMJubjb)}(h h]h }(hj4hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj4hhhj4hMJubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj4hMJubh)}(hserial8250_get_porth]h)}(hj4h]hserial8250_get_port}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj 5ubah}(h]h ](hheh"]h$]h&]hhuh1hhj4hhhj4hMJubj)}(h (int line)h]j)}(hint lineh](jP)}(hinth]hint}(hj,5hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj(5ubjb)}(h h]h }(hj:5hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj(5ubh)}(hlineh]hline}(hjH5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(5ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj$5ubah}(h]h ]h"]h$]h&]hhuh1jhj4hhhj4hMJubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj4hhhj4hMJubah}(h]j4ah ](jjeh"]h$]h&]j j )j huh1hhj4hMJhj4hhubj)}(hhh]j()}(hretrieve struct uart_8250_porth]hretrieve struct uart_8250_port}(hjr5hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chM?hjo5hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhj4hMJubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j5j#j5j$j%j&uh1hhhhj4hNhNubj_)}(hX**Parameters** ``int line`` serial line number **Description** This function retrieves struct uart_8250_port for the specific line. This struct *must* *not* be used to perform a 8250 or serial core operation which is not accessible otherwise. Its only purpose is to make the struct accessible to the runtime-pm callbacks for context suspend/restore. The lock assumption made here is none because runtime-pm suspend/resume callbacks should not be invoked if there is any operation performed on the port.h](j()}(h**Parameters**h]ji)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj5ubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMChj5ubj)}(hhh]j)}(h ``int line`` serial line number h](j)}(h ``int line``h]j.)}(hj5h]hint line}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chM@hj5ubj)}(hhh]j()}(hserial line numberh]hserial line number}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj5hM@hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hM@hj5ubah}(h]h ]h"]h$]h&]uh1j~hj5ubj()}(h**Description**h]ji)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj5ubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMBhj5ubj()}(hXThis function retrieves struct uart_8250_port for the specific line. This struct *must* *not* be used to perform a 8250 or serial core operation which is not accessible otherwise. Its only purpose is to make the struct accessible to the runtime-pm callbacks for context suspend/restore. The lock assumption made here is none because runtime-pm suspend/resume callbacks should not be invoked if there is any operation performed on the port.h](hQThis function retrieves struct uart_8250_port for the specific line. This struct }(hj6hhhNhNubhemphasis)}(h*must*h]hmust}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j 6hj6ubh }(hj6hhhNhNubj 6)}(h*not*h]hnot}(hj 6hhhNhNubah}(h]h ]h"]h$]h&]uh1j 6hj6ubhXZ be used to perform a 8250 or serial core operation which is not accessible otherwise. Its only purpose is to make the struct accessible to the runtime-pm callbacks for context suspend/restore. The lock assumption made here is none because runtime-pm suspend/resume callbacks should not be invoked if there is any operation performed on the port.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMBhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj4hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ$serial8250_suspend_port (C function)c.serial8250_suspend_porthNtauh1hhj4hhhNhNubh)}(hhh](h)}(h'void serial8250_suspend_port (int line)h]h)}(h&void serial8250_suspend_port(int line)h](jP)}(hvoidh]hvoid}(hjY6hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjU6hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMDubjb)}(h h]h }(hjh6hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjU6hhhjg6hMDubh)}(hserial8250_suspend_porth]h)}(hserial8250_suspend_porth]hserial8250_suspend_port}(hjz6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv6ubah}(h]h ](hheh"]h$]h&]hhuh1hhjU6hhhjg6hMDubj)}(h (int line)h]j)}(hint lineh](jP)}(hinth]hint}(hj6hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj6ubjb)}(h h]h }(hj6hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj6ubh)}(hlineh]hline}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj6ubah}(h]h ]h"]h$]h&]hhuh1jhjU6hhhjg6hMDubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjQ6hhhjg6hMDubah}(h]jL6ah ](jjeh"]h$]h&]j j )j huh1hhjg6hMDhjN6hhubj)}(hhh]j()}(hsuspend one serial porth]hsuspend one serial port}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chM?hj6hhubah}(h]h ]h"]h$]h&]uh1jhjN6hhhjg6hMDubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j6j#j6j$j%j&uh1hhhhj4hNhNubj_)}(hM**Parameters** ``int line`` serial line number Suspend one serial port.h](j()}(h**Parameters**h]ji)}(hj6h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj6ubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMChj6ubj)}(hhh]j)}(h9``int line`` serial line number Suspend one serial port.h](j)}(h ``int line``h]j.)}(hj7h]hint line}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMAhj7ubj)}(hhh](j()}(hserial line numberh]hserial line number}(hj67hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chM@hj37ubj()}(hSuspend one serial port.h]hSuspend one serial port.}(hjE7hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMBhj37ubeh}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj27hMAhj7ubah}(h]h ]h"]h$]h&]uh1j~hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj4hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ#serial8250_resume_port (C function)c.serial8250_resume_porthNtauh1hhj4hhhNhNubh)}(hhh](h)}(h&void serial8250_resume_port (int line)h]h)}(h%void serial8250_resume_port(int line)h](jP)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj7hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chM\ubjb)}(h h]h }(hj7hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj7hhhj7hM\ubh)}(hserial8250_resume_porth]h)}(hserial8250_resume_porth]hserial8250_resume_port}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ](hheh"]h$]h&]hhuh1hhj7hhhj7hM\ubj)}(h (int line)h]j)}(hint lineh](jP)}(hinth]hint}(hj7hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj7ubjb)}(h h]h }(hj7hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj7ubh)}(hlineh]hline}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj7ubah}(h]h ]h"]h$]h&]hhuh1jhj7hhhj7hM\ubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj~7hhhj7hM\ubah}(h]jy7ah ](jjeh"]h$]h&]j j )j huh1hhj7hM\hj{7hhubj)}(hhh]j()}(hresume one serial porth]hresume one serial port}(hj 8hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMWhj8hhubah}(h]h ]h"]h$]h&]uh1jhj{7hhhj7hM\ubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j!8j#j!8j$j%j&uh1hhhhj4hNhNubj_)}(hL**Parameters** ``int line`` serial line number Resume one serial port.h](j()}(h**Parameters**h]ji)}(hj+8h]h Parameters}(hj-8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj)8ubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chM[hj%8ubj)}(hhh]j)}(h8``int line`` serial line number Resume one serial port.h](j)}(h ``int line``h]j.)}(hjJ8h]hint line}(hjL8hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjH8ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMYhjD8ubj)}(hhh](j()}(hserial line numberh]hserial line number}(hjc8hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMXhj`8ubj()}(hResume one serial port.h]hResume one serial port.}(hjr8hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMZhj`8ubeh}(h]h ]h"]h$]h&]uh1jhjD8ubeh}(h]h ]h"]h$]h&]uh1jhj_8hMYhjA8ubah}(h]h ]h"]h$]h&]uh1j~hj%8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj4hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ*serial8250_register_8250_port (C function)c.serial8250_register_8250_porthNtauh1hhj4hhhNhNubh)}(hhh](h)}(hCint serial8250_register_8250_port (const struct uart_8250_port *up)h]h)}(hBint serial8250_register_8250_port(const struct uart_8250_port *up)h](jP)}(hinth]hint}(hj8hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj8hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMubjb)}(h h]h }(hj8hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj8hhhj8hMubh)}(hserial8250_register_8250_porth]h)}(hserial8250_register_8250_porth]hserial8250_register_8250_port}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ](hheh"]h$]h&]hhuh1hhj8hhhj8hMubj)}(h!(const struct uart_8250_port *up)h]j)}(hconst struct uart_8250_port *uph](j)}(hj0h]hconst}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjb)}(h h]h }(hj8hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj8ubj)}(hjh]hstruct}(hj 9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjb)}(h h]h }(hj9hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj8ubh)}(hhh]h)}(huart_8250_porth]huart_8250_port}(hj)9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+9modnameN classnameNjj)}j]j)}jj8sbc.serial8250_register_8250_portasbuh1hhj8ubjb)}(h h]h }(hjI9hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj8ubj)}(hjh]h*}(hjW9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(huph]hup}(hjd9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj8ubah}(h]h ]h"]h$]h&]hhuh1jhj8hhhj8hMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj8hhhj8hMubah}(h]j8ah ](jjeh"]h$]h&]j j )j huh1hhj8hMhj8hhubj)}(hhh]j()}(hregister a serial porth]hregister a serial port}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMhj9hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj8hMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j9j#j9j$j%j&uh1hhhhj4hNhNubj_)}(hX**Parameters** ``const struct uart_8250_port *up`` serial port template Configure the serial port specified by the request. If the port exists and is in use, it is hung up and unregistered first. The port is then probed and if necessary the IRQ is autodetected If this fails an error is returned. On success the port is ready to use and the line number is returned.h](j()}(h**Parameters**h]ji)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj9ubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMhj9ubj)}(hhh]j)}(hXa``const struct uart_8250_port *up`` serial port template Configure the serial port specified by the request. If the port exists and is in use, it is hung up and unregistered first. The port is then probed and if necessary the IRQ is autodetected If this fails an error is returned. On success the port is ready to use and the line number is returned.h](j)}(h#``const struct uart_8250_port *up``h]j.)}(hj9h]hconst struct uart_8250_port *up}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMhj9ubj)}(hhh](j()}(hserial port templateh]hserial port template}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMhj9ubj()}(h{Configure the serial port specified by the request. If the port exists and is in use, it is hung up and unregistered first.h]h{Configure the serial port specified by the request. If the port exists and is in use, it is hung up and unregistered first.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMhj9ubj()}(hdThe port is then probed and if necessary the IRQ is autodetected If this fails an error is returned.h]hdThe port is then probed and if necessary the IRQ is autodetected If this fails an error is returned.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMhj9ubj()}(hDOn success the port is ready to use and the line number is returned.h]hDOn success the port is ready to use and the line number is returned.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1j~hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj4hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ'serial8250_unregister_port (C function)c.serial8250_unregister_porthNtauh1hhj4hhhNhNubh)}(hhh](h)}(h*void serial8250_unregister_port (int line)h]h)}(h)void serial8250_unregister_port(int line)h](jP)}(hvoidh]hvoid}(hjV:hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjR:hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMgubjb)}(h h]h }(hje:hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjR:hhhjd:hMgubh)}(hserial8250_unregister_porth]h)}(hserial8250_unregister_porth]hserial8250_unregister_port}(hjw:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjs:ubah}(h]h ](hheh"]h$]h&]hhuh1hhjR:hhhjd:hMgubj)}(h (int line)h]j)}(hint lineh](jP)}(hinth]hint}(hj:hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj:ubjb)}(h h]h }(hj:hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj:ubh)}(hlineh]hline}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj:ubah}(h]h ]h"]h$]h&]hhuh1jhjR:hhhjd:hMgubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjN:hhhjd:hMgubah}(h]jI:ah ](jjeh"]h$]h&]j j )j huh1hhjd:hMghjK:hhubj)}(hhh]j()}(h%remove a 16x50 serial port at runtimeh]h%remove a 16x50 serial port at runtime}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMahj:hhubah}(h]h ]h"]h$]h&]uh1jhjK:hhhjd:hMgubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j:j#j:j$j%j&uh1hhhhj4hNhNubj_)}(h**Parameters** ``int line`` serial line number Remove one serial port. This may not be called from interrupt context. We hand the port back to the our control.h](j()}(h**Parameters**h]ji)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj:ubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMehj:ubj)}(hhh]j)}(h``int line`` serial line number Remove one serial port. This may not be called from interrupt context. We hand the port back to the our control.h](j)}(h ``int line``h]j.)}(hj;h]hint line}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj;ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMdhj;ubj)}(hhh](j()}(hserial line numberh]hserial line number}(hj3;hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.chMbhj0;ubj()}(hrRemove one serial port. This may not be called from interrupt context. We hand the port back to the our control.h]hrRemove one serial port. This may not be called from interrupt context. We hand the port back to the our control.}(hjB;hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj/;hMdhj0;ubeh}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj/;hMdhj;ubah}(h]h ]h"]h$]h&]uh1j~hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj4hhhNhNubj()}(h'See serial/driver.rst for related APIs.h]h'See serial/driver.rst for related APIs.}(hji;hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hhhKhj4hhubeh}(h]x50-uart-driverah ]h"]16x50 uart driverah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hPulse-Width Modulation (PWM)h]hPulse-Width Modulation (PWM)}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hhhhhKubj()}(hpPulse-width modulation is a modulation technique primarily used to control power supplied to electrical devices.h]hpPulse-width modulation is a modulation technique primarily used to control power supplied to electrical devices.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hhhKhj;hhubj()}(hXNThe PWM framework provides an abstraction for providers and consumers of PWM signals. A controller that provides one or more PWM signals is registered as :c:type:`struct pwm_chip `. Providers are expected to embed this structure in a driver-specific structure. This structure contains fields that describe a particular chip.h](hThe PWM framework provides an abstraction for providers and consumers of PWM signals. A controller that provides one or more PWM signals is registered as }(hj;hhhNhNubh)}(h$:c:type:`struct pwm_chip `h]j.)}(hj;h]hstruct pwm_chip}(hj;hhhNhNubah}(h]h ](xrefjc-typeeh"]h$]h&]uh1j-hj;ubah}(h]h ]h"]h$]h&]refdocdriver-api/miscellaneous refdomainjreftypetype refexplicitrefwarnjj)}j]sb reftargetpwm_chipuh1hhhhKhj;ubh. Providers are expected to embed this structure in a driver-specific structure. This structure contains fields that describe a particular chip.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'hhhKhj;hhubj()}(hA chip exposes one or more PWM signal sources, each of which exposed as a :c:type:`struct pwm_device `. Operations can be performed on PWM devices to control the period, duty cycle, polarity and active state of the signal.h](hJA chip exposes one or more PWM signal sources, each of which exposed as a }(hj;hhhNhNubh)}(h(:c:type:`struct pwm_device `h]j.)}(hj;h]hstruct pwm_device}(hj;hhhNhNubah}(h]h ](j;jc-typeeh"]h$]h&]uh1j-hj;ubah}(h]h ]h"]h$]h&]refdocj; refdomainjreftypetype refexplicitrefwarnjj;j; pwm_deviceuh1hhhhK$hj;ubhx. Operations can be performed on PWM devices to control the period, duty cycle, polarity and active state of the signal.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'hhhK$hj;hhubj()}(hfNote that PWM devices are exclusive resources: they can always only be used by one consumer at a time.h]hfNote that PWM devices are exclusive resources: they can always only be used by one consumer at a time.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hhhK)hj;hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČpwm_polarity (C enum)c.pwm_polarityhNtauh1hhj;hhhNhNubh)}(hhh](h)}(h pwm_polarityh]h)}(henum pwm_polarityh](j)}(henumh]henum}(hj-<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)<hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKubjb)}(h h]h }(hj<<hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj)<hhhj;<hKubh)}(h pwm_polarityh]h)}(hj'<h]h pwm_polarity}(hjN<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJ<ubah}(h]h ](hheh"]h$]h&]hhuh1hhj)<hhhj;<hKubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj%<hhhj;<hKubah}(h]j <ah ](jjeh"]h$]h&]j j )j huh1hhj;<hKhj"<hhubj)}(hhh]j()}(hpolarity of a PWM signalh]hpolarity of a PWM signal}(hjp<hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjm<hhubah}(h]h ]h"]h$]h&]uh1jhj"<hhhj;<hKubeh}(h]h ](jenumeh"]h$]h&]j!jj"j<j#j<j$j%j&uh1hhhhj;hNhNubj_)}(hX1**Constants** ``PWM_POLARITY_NORMAL`` a high signal for the duration of the duty- cycle, followed by a low signal for the remainder of the pulse period ``PWM_POLARITY_INVERSED`` a low signal for the duration of the duty- cycle, followed by a high signal for the remainder of the pulse periodh](j()}(h **Constants**h]ji)}(hj<h]h Constants}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj<ubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhj<ubj)}(hhh](j)}(h``PWM_POLARITY_NORMAL`` a high signal for the duration of the duty- cycle, followed by a low signal for the remainder of the pulse period h](j)}(h``PWM_POLARITY_NORMAL``h]j.)}(hj<h]hPWM_POLARITY_NORMAL}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj<ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhj<ubj)}(hhh]j()}(hqa high signal for the duration of the duty- cycle, followed by a low signal for the remainder of the pulse periodh]hqa high signal for the duration of the duty- cycle, followed by a low signal for the remainder of the pulse period}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hKhj<ubj)}(h``PWM_POLARITY_INVERSED`` a low signal for the duration of the duty- cycle, followed by a high signal for the remainder of the pulse periodh](j)}(h``PWM_POLARITY_INVERSED``h]j.)}(hj<h]hPWM_POLARITY_INVERSED}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj<ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhj<ubj)}(hhh]j()}(hqa low signal for the duration of the duty- cycle, followed by a high signal for the remainder of the pulse periodh]hqa low signal for the duration of the duty- cycle, followed by a high signal for the remainder of the pulse period}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhj=ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj=hKhj<ubeh}(h]h ]h"]h$]h&]uh1j~hj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČpwm_args (C struct) c.pwm_argshNtauh1hhj;hhhNhNubh)}(hhh](h)}(hpwm_argsh]h)}(hstruct pwm_argsh](j)}(hjh]hstruct}(hjE=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA=hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK$ubjb)}(h h]h }(hjS=hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjA=hhhjR=hK$ubh)}(hpwm_argsh]h)}(hj?=h]hpwm_args}(hje=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhja=ubah}(h]h ](hheh"]h$]h&]hhuh1hhjA=hhhjR=hK$ubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj==hhhjR=hK$ubah}(h]j8=ah ](jjeh"]h$]h&]j j )j huh1hhjR=hK$hj:=hhubj)}(hhh]j()}(hboard-dependent PWM argumentsh]hboard-dependent PWM arguments}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhj=hhubah}(h]h ]h"]h$]h&]uh1jhj:=hhhjR=hK$ubeh}(h]h ](jstructeh"]h$]h&]j!jj"j=j#j=j$j%j&uh1hhhhj;hNhNubj_)}(h**Definition**:: struct pwm_args { u64 period; enum pwm_polarity polarity; }; **Members** ``period`` reference period ``polarity`` reference polarityh](j()}(h**Definition**::h](ji)}(h**Definition**h]h Definition}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj=ubh:}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK"hj=ubh literal_block)}(hDstruct pwm_args { u64 period; enum pwm_polarity polarity; };h]hDstruct pwm_args { u64 period; enum pwm_polarity polarity; };}hj=sbah}(h]h ]h"]h$]h&]hhuh1j=h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK$hj=ubj()}(h **Members**h]ji)}(hj=h]hMembers}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj=ubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK)hj=ubj)}(hhh](j)}(h``period`` reference period h](j)}(h ``period``h]j.)}(hj=h]hperiod}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj=ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK hj=ubj)}(hhh]j()}(hreference periodh]hreference period}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj >hK hj >ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj >hK hj=ubj)}(h``polarity`` reference polarityh](j)}(h ``polarity``h]j.)}(hj/>h]hpolarity}(hj1>hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj->ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK hj)>ubj)}(hhh]j()}(hreference polarityh]hreference polarity}(hjH>hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK!hjE>ubah}(h]h ]h"]h$]h&]uh1jhj)>ubeh}(h]h ]h"]h$]h&]uh1jhjD>hK hj=ubeh}(h]h ]h"]h$]h&]uh1j~hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubj()}(h**Description**h]ji)}(hjr>h]h Description}(hjt>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjp>ubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK$hj;hhubj()}(hThis structure describes board-dependent arguments attached to a PWM device. These arguments are usually retrieved from the PWM lookup table or device tree.h]hThis structure describes board-dependent arguments attached to a PWM device. These arguments are usually retrieved from the PWM lookup table or device tree.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK"hj;hhubj()}(hDo not confuse this with the PWM state: PWM arguments represent the initial configuration that users want to use on this PWM device rather than the current PWM hardware state.h]hDo not confuse this with the PWM state: PWM arguments represent the initial configuration that users want to use on this PWM device rather than the current PWM hardware state.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK&hj;hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČpwm_waveform (C struct)c.pwm_waveformhNtauh1hhj;hhhNhNubh)}(hhh](h)}(h pwm_waveformh]h)}(hstruct pwm_waveformh](j)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK-ubjb)}(h h]h }(hj>hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj>hhhj>hK-ubh)}(h pwm_waveformh]h)}(hj>h]h pwm_waveform}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ](hheh"]h$]h&]hhuh1hhj>hhhj>hK-ubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj>hhhj>hK-ubah}(h]j>ah ](jjeh"]h$]h&]j j )j huh1hhj>hK-hj>hhubj)}(hhh]j()}(hdescription of a PWM waveformh]hdescription of a PWM waveform}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK5hj>hhubah}(h]h ]h"]h$]h&]uh1jhj>hhhj>hK-ubeh}(h]h ](jstructeh"]h$]h&]j!jj"j?j#j?j$j%j&uh1hhhhj;hNhNubj_)}(hX**Definition**:: struct pwm_waveform { u64 period_length_ns; u64 duty_length_ns; u64 duty_offset_ns; }; **Members** ``period_length_ns`` PWM period ``duty_length_ns`` PWM duty cycle ``duty_offset_ns`` offset of the rising edge from the period's starth](j()}(h**Definition**::h](ji)}(h**Definition**h]h Definition}(hj%?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj!?ubh:}(hj!?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK9hj?ubj=)}(hbstruct pwm_waveform { u64 period_length_ns; u64 duty_length_ns; u64 duty_offset_ns; };h]hbstruct pwm_waveform { u64 period_length_ns; u64 duty_length_ns; u64 duty_offset_ns; };}hj>?sbah}(h]h ]h"]h$]h&]hhuh1j=h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK;hj?ubj()}(h **Members**h]ji)}(hjO?h]hMembers}(hjQ?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjM?ubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKAhj?ubj)}(hhh](j)}(h ``period_length_ns`` PWM period h](j)}(h``period_length_ns``h]j.)}(hjn?h]hperiod_length_ns}(hjp?hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjl?ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK7hjh?ubj)}(hhh]j()}(h PWM periodh]h PWM period}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj?hK7hj?ubah}(h]h ]h"]h$]h&]uh1jhjh?ubeh}(h]h ]h"]h$]h&]uh1jhj?hK7hje?ubj)}(h"``duty_length_ns`` PWM duty cycle h](j)}(h``duty_length_ns``h]j.)}(hj?h]hduty_length_ns}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj?ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK8hj?ubj)}(hhh]j()}(hPWM duty cycleh]hPWM duty cycle}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj?hK8hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hK8hje?ubj)}(hD``duty_offset_ns`` offset of the rising edge from the period's starth](j)}(h``duty_offset_ns``h]j.)}(hj?h]hduty_offset_ns}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj?ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK8hj?ubj)}(hhh]j()}(h1offset of the rising edge from the period's starth]h3offset of the rising edge from the period’s start}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhK9hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hK8hje?ubeh}(h]h ]h"]h$]h&]uh1j~hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubj()}(h**Description**h]ji)}(hj#@h]h Description}(hj%@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj!@ubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKprepare a new state to be applied with pwm_apply_might_sleep()h]h>prepare a new state to be applied with pwm_apply_might_sleep()}(hjnFhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjkFhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhj1EhKubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jFj#jFj$j%j&uh1hhhhj;hNhNubj_)}(hX0**Parameters** ``const struct pwm_device *pwm`` PWM device ``struct pwm_state *state`` state to fill with the prepared PWM state **Description** This functions prepares a state that can later be tweaked and applied to the PWM device with pwm_apply_might_sleep(). This is a convenient function that first retrieves the current PWM state and the replaces the period and polarity fields with the reference values defined in pwm->args. Once the function returns, you can adjust the ->enabled and ->duty_cycle fields according to your needs before calling pwm_apply_might_sleep(). ->duty_cycle is initially set to zero to avoid cases where the current ->duty_cycle value exceed the pwm_args->period one, which would trigger an error if the user calls pwm_apply_might_sleep() without adjusting ->duty_cycle first.h](j()}(h**Parameters**h]ji)}(hjFh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjFubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjFubj)}(hhh](j)}(h,``const struct pwm_device *pwm`` PWM device h](j)}(h ``const struct pwm_device *pwm``h]j.)}(hjFh]hconst struct pwm_device *pwm}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjFubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjFubj)}(hhh]j()}(h PWM deviceh]h PWM device}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjFhKhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhKhjFubj)}(hF``struct pwm_state *state`` state to fill with the prepared PWM state h](j)}(h``struct pwm_state *state``h]j.)}(hjFh]hstruct pwm_state *state}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjFubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjFubj)}(hhh]j()}(h)state to fill with the prepared PWM stateh]h)state to fill with the prepared PWM state}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjFhKhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhKhjFubeh}(h]h ]h"]h$]h&]uh1j~hjFubj()}(h**Description**h]ji)}(hj#Gh]h Description}(hj%GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj!Gubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjFubj()}(hXThis functions prepares a state that can later be tweaked and applied to the PWM device with pwm_apply_might_sleep(). This is a convenient function that first retrieves the current PWM state and the replaces the period and polarity fields with the reference values defined in pwm->args. Once the function returns, you can adjust the ->enabled and ->duty_cycle fields according to your needs before calling pwm_apply_might_sleep().h]hXThis functions prepares a state that can later be tweaked and applied to the PWM device with pwm_apply_might_sleep(). This is a convenient function that first retrieves the current PWM state and the replaces the period and polarity fields with the reference values defined in pwm->args. Once the function returns, you can adjust the ->enabled and ->duty_cycle fields according to your needs before calling pwm_apply_might_sleep().}(hj9GhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjFubj()}(h->duty_cycle is initially set to zero to avoid cases where the current ->duty_cycle value exceed the pwm_args->period one, which would trigger an error if the user calls pwm_apply_might_sleep() without adjusting ->duty_cycle first.h]h->duty_cycle is initially set to zero to avoid cases where the current ->duty_cycle value exceed the pwm_args->period one, which would trigger an error if the user calls pwm_apply_might_sleep() without adjusting ->duty_cycle first.}(hjHGhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ(pwm_get_relative_duty_cycle (C function)c.pwm_get_relative_duty_cyclehNtauh1hhj;hhhNhNubh)}(hhh](h)}(h\unsigned int pwm_get_relative_duty_cycle (const struct pwm_state *state, unsigned int scale)h]h)}(h[unsigned int pwm_get_relative_duty_cycle(const struct pwm_state *state, unsigned int scale)h](jP)}(hunsignedh]hunsigned}(hjwGhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjsGhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKubjb)}(h h]h }(hjGhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjsGhhhjGhKubjP)}(hinth]hint}(hjGhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjsGhhhjGhKubjb)}(h h]h }(hjGhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjsGhhhjGhKubh)}(hpwm_get_relative_duty_cycleh]h)}(hpwm_get_relative_duty_cycleh]hpwm_get_relative_duty_cycle}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ](hheh"]h$]h&]hhuh1hhjsGhhhjGhKubj)}(h3(const struct pwm_state *state, unsigned int scale)h](j)}(hconst struct pwm_state *stateh](j)}(hj0h]hconst}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjb)}(h h]h }(hjGhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjGubj)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjb)}(h h]h }(hjGhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjGubh)}(hhh]h)}(h pwm_stateh]h pwm_state}(hj HhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj HmodnameN classnameNjj)}j]j)}jjGsbc.pwm_get_relative_duty_cycleasbuh1hhjGubjb)}(h h]h }(hj)HhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjGubj)}(hjh]h*}(hj7HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(hstateh]hstate}(hjDHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjGubj)}(hunsigned int scaleh](jP)}(hunsignedh]hunsigned}(hj]HhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjYHubjb)}(h h]h }(hjkHhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjYHubjP)}(hinth]hint}(hjyHhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjYHubjb)}(h h]h }(hjHhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjYHubh)}(hscaleh]hscale}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYHubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjGubeh}(h]h ]h"]h$]h&]hhuh1jhjsGhhhjGhKubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjoGhhhjGhKubah}(h]jjGah ](jjeh"]h$]h&]j j )j huh1hhjGhKhjlGhhubj)}(hhh]j()}(hGet a relative duty cycle valueh]hGet a relative duty cycle value}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjHhhubah}(h]h ]h"]h$]h&]uh1jhjlGhhhjGhKubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jHj#jHj$j%j&uh1hhhhj;hNhNubj_)}(hX**Parameters** ``const struct pwm_state *state`` PWM state to extract the duty cycle from ``unsigned int scale`` target scale of the relative duty cycle **Description** This functions converts the absolute duty cycle stored in **state** (expressed in nanosecond) into a value relative to the period. For example if you want to get the duty_cycle expressed in percent, call: pwm_get_state(pwm, :c:type:`state`); duty = pwm_get_relative_duty_cycle(:c:type:`state`, 100);h](j()}(h**Parameters**h]ji)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjHubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjHubj)}(hhh](j)}(hK``const struct pwm_state *state`` PWM state to extract the duty cycle from h](j)}(h!``const struct pwm_state *state``h]j.)}(hjIh]hconst struct pwm_state *state}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjHubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjHubj)}(hhh]j()}(h(PWM state to extract the duty cycle fromh]h(PWM state to extract the duty cycle from}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjIhKhjIubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjIhKhjHubj)}(h?``unsigned int scale`` target scale of the relative duty cycle h](j)}(h``unsigned int scale``h]j.)}(hj9Ih]hunsigned int scale}(hj;IhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj7Iubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhj3Iubj)}(hhh]j()}(h'target scale of the relative duty cycleh]h'target scale of the relative duty cycle}(hjRIhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjNIhKhjOIubah}(h]h ]h"]h$]h&]uh1jhj3Iubeh}(h]h ]h"]h$]h&]uh1jhjNIhKhjHubeh}(h]h ]h"]h$]h&]uh1j~hjHubj()}(h**Description**h]ji)}(hjtIh]h Description}(hjvIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjrIubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjHubj()}(hThis functions converts the absolute duty cycle stored in **state** (expressed in nanosecond) into a value relative to the period.h](h:This functions converts the absolute duty cycle stored in }(hjIhhhNhNubji)}(h **state**h]hstate}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjIubh? (expressed in nanosecond) into a value relative to the period.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjHubj()}(hIFor example if you want to get the duty_cycle expressed in percent, call:h]hIFor example if you want to get the duty_cycle expressed in percent, call:}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjHubj()}(h^pwm_get_state(pwm, :c:type:`state`); duty = pwm_get_relative_duty_cycle(:c:type:`state`, 100);h](hpwm_get_state(pwm, }(hjIhhhNhNubh)}(h:c:type:`state`h]j.)}(hjIh]hstate}(hjIhhhNhNubah}(h]h ](j;jc-typeeh"]h$]h&]uh1j-hjIubah}(h]h ]h"]h$]h&]refdocj; refdomainjreftypetype refexplicitrefwarnjj;j;stateuh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjIubh&); duty = pwm_get_relative_duty_cycle(}(hjIhhhNhNubh)}(h:c:type:`state`h]j.)}(hjIh]hstate}(hjIhhhNhNubah}(h]h ](j;jc-typeeh"]h$]h&]uh1j-hjIubah}(h]h ]h"]h$]h&]refdocj; refdomainjreftypetype refexplicitrefwarnjj;j;stateuh1hhjIhKhjIubh, 100);}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'hjIhKhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ(pwm_set_relative_duty_cycle (C function)c.pwm_set_relative_duty_cyclehNtauh1hhj;hhhNhNubh)}(hhh](h)}(hfint pwm_set_relative_duty_cycle (struct pwm_state *state, unsigned int duty_cycle, unsigned int scale)h]h)}(heint pwm_set_relative_duty_cycle(struct pwm_state *state, unsigned int duty_cycle, unsigned int scale)h](jP)}(hinth]hint}(hj/JhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj+Jhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKubjb)}(h h]h }(hj>JhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj+Jhhhj=JhKubh)}(hpwm_set_relative_duty_cycleh]h)}(hpwm_set_relative_duty_cycleh]hpwm_set_relative_duty_cycle}(hjPJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLJubah}(h]h ](hheh"]h$]h&]hhuh1hhj+Jhhhj=JhKubj)}(hF(struct pwm_state *state, unsigned int duty_cycle, unsigned int scale)h](j)}(hstruct pwm_state *stateh](j)}(hjh]hstruct}(hjlJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhJubjb)}(h h]h }(hjyJhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjhJubh)}(hhh]h)}(h pwm_stateh]h pwm_state}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]j)}jjRJsbc.pwm_set_relative_duty_cycleasbuh1hhjhJubjb)}(h h]h }(hjJhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjhJubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhJubh)}(hstateh]hstate}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhJubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjdJubj)}(hunsigned int duty_cycleh](jP)}(hunsignedh]hunsigned}(hjJhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjJubjb)}(h h]h }(hjJhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjJubjP)}(hinth]hint}(hjJhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjJubjb)}(h h]h }(hjKhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjJubh)}(h duty_cycleh]h duty_cycle}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjdJubj)}(hunsigned int scaleh](jP)}(hunsignedh]hunsigned}(hj/KhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj+Kubjb)}(h h]h }(hj=KhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj+KubjP)}(hinth]hint}(hjKKhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj+Kubjb)}(h h]h }(hjYKhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj+Kubh)}(hscaleh]hscale}(hjgKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+Kubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjdJubeh}(h]h ]h"]h$]h&]hhuh1jhj+Jhhhj=JhKubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj'Jhhhj=JhKubah}(h]j"Jah ](jjeh"]h$]h&]j j )j huh1hhj=JhKhj$Jhhubj)}(hhh]j()}(hSet a relative duty cycle valueh]hSet a relative duty cycle value}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjKhhubah}(h]h ]h"]h$]h&]uh1jhj$Jhhhj=JhKubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jKj#jKj$j%j&uh1hhhhj;hNhNubj_)}(hX**Parameters** ``struct pwm_state *state`` PWM state to fill ``unsigned int duty_cycle`` relative duty cycle value ``unsigned int scale`` scale in which **duty_cycle** is expressed **Description** This functions converts a relative into an absolute duty cycle (expressed in nanoseconds), and puts the result in state->duty_cycle. For example if you want to configure a 50% duty cycle, call: pwm_init_state(pwm, :c:type:`state`); pwm_set_relative_duty_cycle(:c:type:`state`, 50, 100); pwm_apply_might_sleep(pwm, :c:type:`state`); This functions returns -EINVAL if **duty_cycle** and/or **scale** are inconsistent (**scale** == 0 or **duty_cycle** > **scale**).h](j()}(h**Parameters**h]ji)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjKubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjKubj)}(hhh](j)}(h.``struct pwm_state *state`` PWM state to fill h](j)}(h``struct pwm_state *state``h]j.)}(hjKh]hstruct pwm_state *state}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjKubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjKubj)}(hhh]j()}(hPWM state to fillh]hPWM state to fill}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjKhKhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhKhjKubj)}(h6``unsigned int duty_cycle`` relative duty cycle value h](j)}(h``unsigned int duty_cycle``h]j.)}(hj Lh]hunsigned int duty_cycle}(hj LhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj Lubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjLubj)}(hhh]j()}(hrelative duty cycle valueh]hrelative duty cycle value}(hj$LhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj LhKhj!Lubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhj LhKhjKubj)}(hB``unsigned int scale`` scale in which **duty_cycle** is expressed h](j)}(h``unsigned int scale``h]j.)}(hjDLh]hunsigned int scale}(hjFLhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjBLubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhj>Lubj)}(hhh]j()}(h*scale in which **duty_cycle** is expressedh](hscale in which }(hj]LhhhNhNubji)}(h**duty_cycle**h]h duty_cycle}(hjeLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj]Lubh is expressed}(hj]LhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'hjYLhKhjZLubah}(h]h ]h"]h$]h&]uh1jhj>Lubeh}(h]h ]h"]h$]h&]uh1jhjYLhKhjKubeh}(h]h ]h"]h$]h&]uh1j~hjKubj()}(h**Description**h]ji)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjLubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjKubj()}(hThis functions converts a relative into an absolute duty cycle (expressed in nanoseconds), and puts the result in state->duty_cycle.h]hThis functions converts a relative into an absolute duty cycle (expressed in nanoseconds), and puts the result in state->duty_cycle.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjKubj()}(h **scale**).h](h"This functions returns -EINVAL if }(hj=MhhhNhNubji)}(h**duty_cycle**h]h duty_cycle}(hjEMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj=Mubh and/or }(hj=MhhhNhNubji)}(h **scale**h]hscale}(hjWMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj=Mubh are inconsistent (}(hj=MhhhNhNubji)}(h **scale**h]hscale}(hjiMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj=Mubh == 0 or }(hj=MhhhNhNubji)}(h**duty_cycle**h]h duty_cycle}(hj{MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj=Mubh > }(hj=MhhhNhNubji)}(h **scale**h]hscale}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj=Mubh).}(hj=MhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČpwm_capture (C struct) c.pwm_capturehNtauh1hhj;hhhNhNubh)}(hhh](h)}(h pwm_captureh]h)}(hstruct pwm_captureh](j)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhKubjb)}(h h]h }(hjMhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjMhhhjMhKubh)}(h pwm_captureh]h)}(hjMh]h pwm_capture}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ](hheh"]h$]h&]hhuh1hhjMhhhjMhKubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjMhhhjMhKubah}(h]jMah ](jjeh"]h$]h&]j j )j huh1hhjMhKhjMhhubj)}(hhh]j()}(hPWM capture datah]hPWM capture data}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM hjNhhubah}(h]h ]h"]h$]h&]uh1jhjMhhhjMhKubeh}(h]h ](jstructeh"]h$]h&]j!jj"j Nj#j Nj$j%j&uh1hhhhj;hNhNubj_)}(h**Definition**:: struct pwm_capture { unsigned int period; unsigned int duty_cycle; }; **Members** ``period`` period of the PWM signal (in nanoseconds) ``duty_cycle`` duty cycle of the PWM signal (in nanoseconds)h](j()}(h**Definition**::h](ji)}(h**Definition**h]h Definition}(hj,NhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj(Nubh:}(hj(NhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM hj$Nubj=)}(hMstruct pwm_capture { unsigned int period; unsigned int duty_cycle; };h]hMstruct pwm_capture { unsigned int period; unsigned int duty_cycle; };}hjENsbah}(h]h ]h"]h$]h&]hhuh1j=h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhj$Nubj()}(h **Members**h]ji)}(hjVNh]hMembers}(hjXNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjTNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhj$Nubj)}(hhh](j)}(h5``period`` period of the PWM signal (in nanoseconds) h](j)}(h ``period``h]j.)}(hjuNh]hperiod}(hjwNhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjsNubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM hjoNubj)}(hhh]j()}(h)period of the PWM signal (in nanoseconds)h]h)period of the PWM signal (in nanoseconds)}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjNhM hjNubah}(h]h ]h"]h$]h&]uh1jhjoNubeh}(h]h ]h"]h$]h&]uh1jhjNhM hjlNubj)}(h<``duty_cycle`` duty cycle of the PWM signal (in nanoseconds)h](j)}(h``duty_cycle``h]j.)}(hjNh]h duty_cycle}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjNubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM hjNubj)}(hhh]j()}(h-duty cycle of the PWM signal (in nanoseconds)h]h-duty cycle of the PWM signal (in nanoseconds)}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM hjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhM hjlNubeh}(h]h ]h"]h$]h&]uh1j~hj$Nubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČpwm_ops (C struct) c.pwm_opshNtauh1hhj;hhhNhNubh)}(hhh](h)}(hpwm_opsh]h)}(hstruct pwm_opsh](j)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMubjb)}(h h]h }(hjOhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjOhhhjOhMubh)}(hpwm_opsh]h)}(hjOh]hpwm_ops}(hj(OhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$Oubah}(h]h ](hheh"]h$]h&]hhuh1hhjOhhhjOhMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjOhhhjOhMubah}(h]jNah ](jjeh"]h$]h&]j j )j huh1hhjOhMhjNhhubj)}(hhh]j()}(hPWM controller operationsh]hPWM controller operations}(hjJOhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjGOhhubah}(h]h ]h"]h$]h&]uh1jhjNhhhjOhMubeh}(h]h ](jstructeh"]h$]h&]j!jj"jbOj#jbOj$j%j&uh1hhhhj;hNhNubj_)}(hXL**Definition**:: struct pwm_ops { int (*request)(struct pwm_chip *chip, struct pwm_device *pwm); void (*free)(struct pwm_chip *chip, struct pwm_device *pwm); int (*capture)(struct pwm_chip *chip, struct pwm_device *pwm, struct pwm_capture *result, unsigned long timeout); size_t sizeof_wfhw; int (*round_waveform_tohw)(struct pwm_chip *chip, struct pwm_device *pwm, const struct pwm_waveform *wf, void *wfhw); int (*round_waveform_fromhw)(struct pwm_chip *chip, struct pwm_device *pwm, const void *wfhw, struct pwm_waveform *wf); int (*read_waveform)(struct pwm_chip *chip, struct pwm_device *pwm, void *wfhw); int (*write_waveform)(struct pwm_chip *chip, struct pwm_device *pwm, const void *wfhw); int (*apply)(struct pwm_chip *chip, struct pwm_device *pwm, const struct pwm_state *state); int (*get_state)(struct pwm_chip *chip, struct pwm_device *pwm, struct pwm_state *state); }; **Members** ``request`` optional hook for requesting a PWM ``free`` optional hook for freeing a PWM ``capture`` capture and report PWM signal ``sizeof_wfhw`` size (in bytes) of driver specific waveform presentation ``round_waveform_tohw`` convert a struct pwm_waveform to driver specific presentation ``round_waveform_fromhw`` convert a driver specific waveform presentation to struct pwm_waveform ``read_waveform`` read driver specific waveform presentation from hardware ``write_waveform`` write driver specific waveform presentation to hardware ``apply`` atomically apply a new PWM config ``get_state`` get the current PWM state.h](j()}(h**Definition**::h](ji)}(h**Definition**h]h Definition}(hjnOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjjOubh:}(hjjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjfOubj=)}(hXstruct pwm_ops { int (*request)(struct pwm_chip *chip, struct pwm_device *pwm); void (*free)(struct pwm_chip *chip, struct pwm_device *pwm); int (*capture)(struct pwm_chip *chip, struct pwm_device *pwm, struct pwm_capture *result, unsigned long timeout); size_t sizeof_wfhw; int (*round_waveform_tohw)(struct pwm_chip *chip, struct pwm_device *pwm, const struct pwm_waveform *wf, void *wfhw); int (*round_waveform_fromhw)(struct pwm_chip *chip, struct pwm_device *pwm, const void *wfhw, struct pwm_waveform *wf); int (*read_waveform)(struct pwm_chip *chip, struct pwm_device *pwm, void *wfhw); int (*write_waveform)(struct pwm_chip *chip, struct pwm_device *pwm, const void *wfhw); int (*apply)(struct pwm_chip *chip, struct pwm_device *pwm, const struct pwm_state *state); int (*get_state)(struct pwm_chip *chip, struct pwm_device *pwm, struct pwm_state *state); };h]hXstruct pwm_ops { int (*request)(struct pwm_chip *chip, struct pwm_device *pwm); void (*free)(struct pwm_chip *chip, struct pwm_device *pwm); int (*capture)(struct pwm_chip *chip, struct pwm_device *pwm, struct pwm_capture *result, unsigned long timeout); size_t sizeof_wfhw; int (*round_waveform_tohw)(struct pwm_chip *chip, struct pwm_device *pwm, const struct pwm_waveform *wf, void *wfhw); int (*round_waveform_fromhw)(struct pwm_chip *chip, struct pwm_device *pwm, const void *wfhw, struct pwm_waveform *wf); int (*read_waveform)(struct pwm_chip *chip, struct pwm_device *pwm, void *wfhw); int (*write_waveform)(struct pwm_chip *chip, struct pwm_device *pwm, const void *wfhw); int (*apply)(struct pwm_chip *chip, struct pwm_device *pwm, const struct pwm_state *state); int (*get_state)(struct pwm_chip *chip, struct pwm_device *pwm, struct pwm_state *state); };}hjOsbah}(h]h ]h"]h$]h&]hhuh1j=h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjfOubj()}(h **Members**h]ji)}(hjOh]hMembers}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjOubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM&hjfOubj)}(hhh](j)}(h/``request`` optional hook for requesting a PWM h](j)}(h ``request``h]j.)}(hjOh]hrequest}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjOubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjOubj)}(hhh]j()}(h"optional hook for requesting a PWMh]h"optional hook for requesting a PWM}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjOubj)}(h)``free`` optional hook for freeing a PWM h](j)}(h``free``h]j.)}(hjOh]hfree}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjOubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjOubj)}(hhh]j()}(hoptional hook for freeing a PWMh]hoptional hook for freeing a PWM}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjOubj)}(h*``capture`` capture and report PWM signal h](j)}(h ``capture``h]j.)}(hj)Ph]hcapture}(hj+PhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj'Pubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhj#Pubj)}(hhh]j()}(hcapture and report PWM signalh]hcapture and report PWM signal}(hjBPhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj>PhMhj?Pubah}(h]h ]h"]h$]h&]uh1jhj#Pubeh}(h]h ]h"]h$]h&]uh1jhj>PhMhjOubj)}(hI``sizeof_wfhw`` size (in bytes) of driver specific waveform presentation h](j)}(h``sizeof_wfhw``h]j.)}(hjbPh]h sizeof_wfhw}(hjdPhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj`Pubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhj\Pubj)}(hhh]j()}(h8size (in bytes) of driver specific waveform presentationh]h8size (in bytes) of driver specific waveform presentation}(hj{PhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjwPhMhjxPubah}(h]h ]h"]h$]h&]uh1jhj\Pubeh}(h]h ]h"]h$]h&]uh1jhjwPhMhjOubj)}(hV``round_waveform_tohw`` convert a struct pwm_waveform to driver specific presentation h](j)}(h``round_waveform_tohw``h]j.)}(hjPh]hround_waveform_tohw}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjPubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjPubj)}(hhh]j()}(h=convert a struct pwm_waveform to driver specific presentationh]h=convert a struct pwm_waveform to driver specific presentation}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjOubj)}(ha``round_waveform_fromhw`` convert a driver specific waveform presentation to struct pwm_waveform h](j)}(h``round_waveform_fromhw``h]j.)}(hjPh]hround_waveform_fromhw}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjPubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjPubj)}(hhh]j()}(hFconvert a driver specific waveform presentation to struct pwm_waveformh]hFconvert a driver specific waveform presentation to struct pwm_waveform}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjOubj)}(hK``read_waveform`` read driver specific waveform presentation from hardware h](j)}(h``read_waveform``h]j.)}(hj Qh]h read_waveform}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj Qubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjQubj)}(hhh]j()}(h8read driver specific waveform presentation from hardwareh]h8read driver specific waveform presentation from hardware}(hj&QhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj"QhMhj#Qubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhj"QhMhjOubj)}(hK``write_waveform`` write driver specific waveform presentation to hardware h](j)}(h``write_waveform``h]j.)}(hjFQh]hwrite_waveform}(hjHQhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjDQubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhj@Qubj)}(hhh]j()}(h7write driver specific waveform presentation to hardwareh]h7write driver specific waveform presentation to hardware}(hj_QhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj[QhMhj\Qubah}(h]h ]h"]h$]h&]uh1jhj@Qubeh}(h]h ]h"]h$]h&]uh1jhj[QhMhjOubj)}(h,``apply`` atomically apply a new PWM config h](j)}(h ``apply``h]j.)}(hjQh]happly}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj}Qubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjyQubj)}(hhh]j()}(h!atomically apply a new PWM configh]h!atomically apply a new PWM config}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjyQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjOubj)}(h(``get_state`` get the current PWM state.h](j)}(h ``get_state``h]j.)}(hjQh]h get_state}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjQubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjQubj)}(hhh]j()}(hget the current PWM state.h]hget the current PWM state.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjOubeh}(h]h ]h"]h$]h&]uh1j~hjfOubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČpwm_chip (C struct) c.pwm_chiphNtauh1hhj;hhhNhNubh)}(hhh](h)}(hpwm_chiph]h)}(hstruct pwm_chiph](j)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM$ubjb)}(h h]h }(hj RhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjRhhhjRhM$ubh)}(hpwm_chiph]h)}(hj Rh]hpwm_chip}(hj2RhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.Rubah}(h]h ](hheh"]h$]h&]hhuh1hhjRhhhjRhM$ubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj RhhhjRhM$ubah}(h]jRah ](jjeh"]h$]h&]j j )j huh1hhjRhM$hjRhhubj)}(hhh]j()}(habstract a PWM controllerh]habstract a PWM controller}(hjTRhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM6hjQRhhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjRhM$ubeh}(h]h ](jstructeh"]h$]h&]j!jj"jlRj#jlRj$j%j&uh1hhhhj;hNhNubj_)}(hX**Definition**:: struct pwm_chip { struct device dev; const struct pwm_ops *ops; struct module *owner; unsigned int id; unsigned int npwm; struct pwm_device * (*of_xlate)(struct pwm_chip *chip, const struct of_phandle_args *args); bool atomic; bool uses_pwmchip_alloc; bool operational; union { struct mutex nonatomic_lock; spinlock_t atomic_lock; }; struct pwm_device pwms[] ; }; **Members** ``dev`` device providing the PWMs ``ops`` callbacks for this PWM controller ``owner`` module providing this chip ``id`` unique number of this PWM chip ``npwm`` number of PWMs controlled by this chip ``of_xlate`` request a PWM device given a device tree PWM specifier ``atomic`` can the driver's ->apply() be called in atomic context ``uses_pwmchip_alloc`` signals if pwmchip_allow was used to allocate this chip ``operational`` signals if the chip can be used (or is already deregistered) ``{unnamed_union}`` anonymous ``nonatomic_lock`` mutex for nonatomic chips ``atomic_lock`` mutex for atomic chips ``pwms`` array of PWM devices allocated by the frameworkh](j()}(h**Definition**::h](ji)}(h**Definition**h]h Definition}(hjxRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjtRubh:}(hjtRhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM:hjpRubj=)}(hXstruct pwm_chip { struct device dev; const struct pwm_ops *ops; struct module *owner; unsigned int id; unsigned int npwm; struct pwm_device * (*of_xlate)(struct pwm_chip *chip, const struct of_phandle_args *args); bool atomic; bool uses_pwmchip_alloc; bool operational; union { struct mutex nonatomic_lock; spinlock_t atomic_lock; }; struct pwm_device pwms[] ; };h]hXstruct pwm_chip { struct device dev; const struct pwm_ops *ops; struct module *owner; unsigned int id; unsigned int npwm; struct pwm_device * (*of_xlate)(struct pwm_chip *chip, const struct of_phandle_args *args); bool atomic; bool uses_pwmchip_alloc; bool operational; union { struct mutex nonatomic_lock; spinlock_t atomic_lock; }; struct pwm_device pwms[] ; };}hjRsbah}(h]h ]h"]h$]h&]hhuh1j=h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM<hjpRubj()}(h **Members**h]ji)}(hjRh]hMembers}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjRubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMMhjpRubj)}(hhh](j)}(h"``dev`` device providing the PWMs h](j)}(h``dev``h]j.)}(hjRh]hdev}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjRubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM8hjRubj)}(hhh]j()}(hdevice providing the PWMsh]hdevice providing the PWMs}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjRhM8hjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhM8hjRubj)}(h*``ops`` callbacks for this PWM controller h](j)}(h``ops``h]j.)}(hjRh]hops}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjRubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM9hjRubj)}(hhh]j()}(h!callbacks for this PWM controllerh]h!callbacks for this PWM controller}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjShM9hjSubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjShM9hjRubj)}(h%``owner`` module providing this chip h](j)}(h ``owner``h]j.)}(hj3Sh]howner}(hj5ShhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj1Subah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM:hj-Subj)}(hhh]j()}(hmodule providing this chiph]hmodule providing this chip}(hjLShhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjHShM:hjISubah}(h]h ]h"]h$]h&]uh1jhj-Subeh}(h]h ]h"]h$]h&]uh1jhjHShM:hjRubj)}(h&``id`` unique number of this PWM chip h](j)}(h``id``h]j.)}(hjlSh]hid}(hjnShhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjjSubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM;hjfSubj)}(hhh]j()}(hunique number of this PWM chiph]hunique number of this PWM chip}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjShM;hjSubah}(h]h ]h"]h$]h&]uh1jhjfSubeh}(h]h ]h"]h$]h&]uh1jhjShM;hjRubj)}(h0``npwm`` number of PWMs controlled by this chip h](j)}(h``npwm``h]j.)}(hjSh]hnpwm}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjSubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM<hjSubj)}(hhh]j()}(h&number of PWMs controlled by this chiph]h&number of PWMs controlled by this chip}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjShM<hjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShM<hjRubj)}(hD``of_xlate`` request a PWM device given a device tree PWM specifier h](j)}(h ``of_xlate``h]j.)}(hjSh]hof_xlate}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjSubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM=hjSubj)}(hhh]j()}(h6request a PWM device given a device tree PWM specifierh]h6request a PWM device given a device tree PWM specifier}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjShM=hjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShM=hjRubj)}(hB``atomic`` can the driver's ->apply() be called in atomic context h](j)}(h ``atomic``h]j.)}(hjTh]hatomic}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjTubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM>hjTubj)}(hhh]j()}(h6can the driver's ->apply() be called in atomic contexth]h8can the driver’s ->apply() be called in atomic context}(hj0ThhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj,ThM>hj-Tubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhj,ThM>hjRubj)}(hO``uses_pwmchip_alloc`` signals if pwmchip_allow was used to allocate this chip h](j)}(h``uses_pwmchip_alloc``h]j.)}(hjPTh]huses_pwmchip_alloc}(hjRThhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjNTubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM?hjJTubj)}(hhh]j()}(h7signals if pwmchip_allow was used to allocate this chiph]h7signals if pwmchip_allow was used to allocate this chip}(hjiThhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjeThM?hjfTubah}(h]h ]h"]h$]h&]uh1jhjJTubeh}(h]h ]h"]h$]h&]uh1jhjeThM?hjRubj)}(hM``operational`` signals if the chip can be used (or is already deregistered) h](j)}(h``operational``h]j.)}(hjTh]h operational}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjTubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhM@hjTubj)}(hhh]j()}(hYhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj:YhMhj;Yubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhj:YhMhjXubeh}(h]h ]h"]h$]h&]uh1j~hjXubj()}(h **Return**h]ji)}(hj`Yh]hReturn}(hjbYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj^Yubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjXubj()}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjvYhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČpwm_enable (C function) c.pwm_enablehNtauh1hhj;hhhNhNubh)}(hhh](h)}(h'int pwm_enable (struct pwm_device *pwm)h]h)}(h&int pwm_enable(struct pwm_device *pwm)h](jP)}(hinth]hint}(hjYhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjYhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMubjb)}(h h]h }(hjYhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjYhhhjYhMubh)}(h pwm_enableh]h)}(h pwm_enableh]h pwm_enable}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ](hheh"]h$]h&]hhuh1hhjYhhhjYhMubj)}(h(struct pwm_device *pwm)h]j)}(hstruct pwm_device *pwmh](j)}(hjh]hstruct}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubjb)}(h h]h }(hjYhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjYubh)}(hhh]h)}(h pwm_deviceh]h pwm_device}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]j)}jjYsb c.pwm_enableasbuh1hhjYubjb)}(h h]h }(hj ZhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjYubj)}(hjh]h*}(hj.ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hpwmh]hpwm}(hj;ZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjYubah}(h]h ]h"]h$]h&]hhuh1jhjYhhhjYhMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjYhhhjYhMubah}(h]jYah ](jjeh"]h$]h&]j j )j huh1hhjYhMhjYhhubj)}(hhh]j()}(hstart a PWM output togglingh]hstart a PWM output toggling}(hjeZhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjbZhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjYhMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j}Zj#j}Zj$j%j&uh1hhhhj;hNhNubj_)}(hv**Parameters** ``struct pwm_device *pwm`` PWM device **Return** 0 on success or a negative error code on failure.h](j()}(h**Parameters**h]ji)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjZubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjZubj)}(hhh]j)}(h&``struct pwm_device *pwm`` PWM device h](j)}(h``struct pwm_device *pwm``h]j.)}(hjZh]hstruct pwm_device *pwm}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjZubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjZubj)}(hhh]j()}(h PWM deviceh]h PWM device}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjZhMhjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjZubah}(h]h ]h"]h$]h&]uh1j~hjZubj()}(h **Return**h]ji)}(hjZh]hReturn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjZubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjZubj()}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČpwm_disable (C function) c.pwm_disablehNtauh1hhj;hhhNhNubh)}(hhh](h)}(h)void pwm_disable (struct pwm_device *pwm)h]h)}(h(void pwm_disable(struct pwm_device *pwm)h](jP)}(hvoidh]hvoid}(hj&[hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj"[hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMubjb)}(h h]h }(hj5[hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj"[hhhj4[hMubh)}(h pwm_disableh]h)}(h pwm_disableh]h pwm_disable}(hjG[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjC[ubah}(h]h ](hheh"]h$]h&]hhuh1hhj"[hhhj4[hMubj)}(h(struct pwm_device *pwm)h]j)}(hstruct pwm_device *pwmh](j)}(hjh]hstruct}(hjc[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_[ubjb)}(h h]h }(hjp[hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj_[ubh)}(hhh]h)}(h pwm_deviceh]h pwm_device}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]j)}jjI[sb c.pwm_disableasbuh1hhj_[ubjb)}(h h]h }(hj[hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj_[ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_[ubh)}(hpwmh]hpwm}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_[ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj[[ubah}(h]h ]h"]h$]h&]hhuh1jhj"[hhhj4[hMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj[hhhj4[hMubah}(h]j[ah ](jjeh"]h$]h&]j j )j huh1hhj4[hMhjhubj)}(hhh]j()}(hstop a PWM output togglingh]hstop a PWM output toggling}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhj[hhubah}(h]h ]h"]h$]h&]uh1jhjhhj4[hMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j[j#j[j$j%j&uh1hhhhj;hNhNubj_)}(h7**Parameters** ``struct pwm_device *pwm`` PWM deviceh](j()}(h**Parameters**h]ji)}(hj\h]h Parameters}(hj \hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj\ubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhj\ubj)}(hhh]j)}(h%``struct pwm_device *pwm`` PWM deviceh](j)}(h``struct pwm_device *pwm``h]j.)}(hj'\h]hstruct pwm_device *pwm}(hj)\hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj%\ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhj!\ubj)}(hhh]j()}(h PWM deviceh]h PWM device}(hj@\hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhj=\ubah}(h]h ]h"]h$]h&]uh1jhj!\ubeh}(h]h ]h"]h$]h&]uh1jhj<\hMhj\ubah}(h]h ]h"]h$]h&]uh1j~hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČpwm_might_sleep (C function)c.pwm_might_sleephNtauh1hhj;hhhNhNubh)}(hhh](h)}(h-bool pwm_might_sleep (struct pwm_device *pwm)h]h)}(h,bool pwm_might_sleep(struct pwm_device *pwm)h](jP)}(hjUh]hbool}(hj\hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj}\hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMubjb)}(h h]h }(hj\hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj}\hhhj\hMubh)}(hpwm_might_sleeph]h)}(hpwm_might_sleeph]hpwm_might_sleep}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ](hheh"]h$]h&]hhuh1hhj}\hhhj\hMubj)}(h(struct pwm_device *pwm)h]j)}(hstruct pwm_device *pwmh](j)}(hjh]hstruct}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubjb)}(h h]h }(hj\hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj\ubh)}(hhh]h)}(h pwm_deviceh]h pwm_device}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]j)}jj\sbc.pwm_might_sleepasbuh1hhj\ubjb)}(h h]h }(hj\hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj\ubj)}(hjh]h*}(hj ]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hpwmh]hpwm}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj\ubah}(h]h ]h"]h$]h&]hhuh1jhj}\hhhj\hMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjy\hhhj\hMubah}(h]jt\ah ](jjeh"]h$]h&]j j )j huh1hhj\hMhjv\hhubj)}(hhh]j()}(h is pwm_apply_atomic() supported?h]h is pwm_apply_atomic() supported?}(hj@]hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhj=]hhubah}(h]h ]h"]h$]h&]uh1jhjv\hhhj\hMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jX]j#jX]j$j%j&uh1hhhhj;hNhNubj_)}(h**Parameters** ``struct pwm_device *pwm`` PWM device **Return** false if pwm_apply_atomic() can be called from atomic context.h](j()}(h**Parameters**h]ji)}(hjb]h]h Parameters}(hjd]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj`]ubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhj\]ubj)}(hhh]j)}(h&``struct pwm_device *pwm`` PWM device h](j)}(h``struct pwm_device *pwm``h]j.)}(hj]h]hstruct pwm_device *pwm}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj]ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhj{]ubj)}(hhh]j()}(h PWM deviceh]h PWM device}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jhj{]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhjx]ubah}(h]h ]h"]h$]h&]uh1j~hj\]ubj()}(h **Return**h]ji)}(hj]h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj]ubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhj\]ubj()}(h>false if pwm_apply_atomic() can be called from atomic context.h]h>false if pwm_apply_atomic() can be called from atomic context.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.hhMhj\]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ+pwm_round_waveform_might_sleep (C function) c.pwm_round_waveform_might_sleephNtauh1hhj;hhhNhNubh)}(hhh](h)}(hTint pwm_round_waveform_might_sleep (struct pwm_device *pwm, struct pwm_waveform *wf)h]h)}(hSint pwm_round_waveform_might_sleep(struct pwm_device *pwm, struct pwm_waveform *wf)h](jP)}(hinth]hint}(hj^hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj]hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chKubjb)}(h h]h }(hj^hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj]hhhj^hKubh)}(hpwm_round_waveform_might_sleeph]h)}(hpwm_round_waveform_might_sleeph]hpwm_round_waveform_might_sleep}(hj"^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ](hheh"]h$]h&]hhuh1hhj]hhhj^hKubj)}(h1(struct pwm_device *pwm, struct pwm_waveform *wf)h](j)}(hstruct pwm_device *pwmh](j)}(hjh]hstruct}(hj>^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:^ubjb)}(h h]h }(hjK^hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj:^ubh)}(hhh]h)}(h pwm_deviceh]h pwm_device}(hj\^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjY^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^^modnameN classnameNjj)}j]j)}jj$^sb c.pwm_round_waveform_might_sleepasbuh1hhj:^ubjb)}(h h]h }(hj|^hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj:^ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:^ubh)}(hpwmh]hpwm}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:^ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj6^ubj)}(hstruct pwm_waveform *wfh](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubjb)}(h h]h }(hj^hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj^ubh)}(hhh]h)}(h pwm_waveformh]h pwm_waveform}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]jx^ c.pwm_round_waveform_might_sleepasbuh1hhj^ubjb)}(h h]h }(hj^hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj^ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hwfh]hwf}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj6^ubeh}(h]h ]h"]h$]h&]hhuh1jhj]hhhj^hKubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj]hhhj^hKubah}(h]j]ah ](jjeh"]h$]h&]j j )j huh1hhj^hKhj]hhubj)}(hhh]j()}(h=Query hardware capabilities Cannot be used in atomic context.h]h=Query hardware capabilities Cannot be used in atomic context.}(hj1_hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chKhj._hhubah}(h]h ]h"]h$]h&]uh1jhj]hhhj^hKubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jI_j#jI_j$j%j&uh1hhhhj;hNhNubj_)}(hX**Parameters** ``struct pwm_device *pwm`` PWM device ``struct pwm_waveform *wf`` waveform to round and output parameter **Description** Typically a given waveform cannot be implemented exactly by hardware, e.g. because hardware only supports coarse period resolution or no duty_offset. This function returns the actually implemented waveform if you pass wf to pwm_set_waveform_might_sleep now. Note however that the world doesn't stop turning when you call it, so when doing pwm_round_waveform_might_sleep(mypwm, :c:type:`wf`); pwm_set_waveform_might_sleep(mypwm, :c:type:`wf`, true); the latter might fail, e.g. because an input clock changed its rate between these two calls and the waveform determined by pwm_round_waveform_might_sleep() cannot be implemented any more. Returns 0 on success, 1 if there is no valid hardware configuration matching the input waveform under the PWM rounding rules or a negative errno.h](j()}(h**Parameters**h]ji)}(hjS_h]h Parameters}(hjU_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjQ_ubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chKhjM_ubj)}(hhh](j)}(h&``struct pwm_device *pwm`` PWM device h](j)}(h``struct pwm_device *pwm``h]j.)}(hjr_h]hstruct pwm_device *pwm}(hjt_hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjp_ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chKhjl_ubj)}(hhh]j()}(h PWM deviceh]h PWM device}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj_hKhj_ubah}(h]h ]h"]h$]h&]uh1jhjl_ubeh}(h]h ]h"]h$]h&]uh1jhj_hKhji_ubj)}(hC``struct pwm_waveform *wf`` waveform to round and output parameter h](j)}(h``struct pwm_waveform *wf``h]j.)}(hj_h]hstruct pwm_waveform *wf}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj_ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chKhj_ubj)}(hhh]j()}(h&waveform to round and output parameterh]h&waveform to round and output parameter}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj_hKhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hKhji_ubeh}(h]h ]h"]h$]h&]uh1j~hjM_ubj()}(h**Description**h]ji)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj_ubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chKhjM_ubj()}(hXTypically a given waveform cannot be implemented exactly by hardware, e.g. because hardware only supports coarse period resolution or no duty_offset. This function returns the actually implemented waveform if you pass wf to pwm_set_waveform_might_sleep now.h]hXTypically a given waveform cannot be implemented exactly by hardware, e.g. because hardware only supports coarse period resolution or no duty_offset. This function returns the actually implemented waveform if you pass wf to pwm_set_waveform_might_sleep now.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chKhjM_ubj()}(hPNote however that the world doesn't stop turning when you call it, so when doingh]hRNote however that the world doesn’t stop turning when you call it, so when doing}(hj `hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chKhjM_ubjD)}(hnpwm_round_waveform_might_sleep(mypwm, :c:type:`wf`); pwm_set_waveform_might_sleep(mypwm, :c:type:`wf`, true); h]j()}(hmpwm_round_waveform_might_sleep(mypwm, :c:type:`wf`); pwm_set_waveform_might_sleep(mypwm, :c:type:`wf`, true);h](h&pwm_round_waveform_might_sleep(mypwm, }(hj`hhhNhNubh)}(h :c:type:`wf`h]j.)}(hj(`h]hwf}(hj*`hhhNhNubah}(h]h ](j;jc-typeeh"]h$]h&]uh1j-hj&`ubah}(h]h ]h"]h$]h&]refdocj; refdomainjreftypetype refexplicitrefwarnjj;j;wfuh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chKhj`ubh'); pwm_set_waveform_might_sleep(mypwm, }(hj`hhhNhNubh)}(h :c:type:`wf`h]j.)}(hjL`h]hwf}(hjN`hhhNhNubah}(h]h ](j;jc-typeeh"]h$]h&]uh1j-hjJ`ubah}(h]h ]h"]h$]h&]refdocj; refdomainjreftypetype refexplicitrefwarnjj;j;wfuh1hhjE`hKhj`ubh, true);}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j'hjE`hKhj`ubah}(h]h ]h"]h$]h&]uh1jChjE`hKhjM_ubj()}(hthe latter might fail, e.g. because an input clock changed its rate between these two calls and the waveform determined by pwm_round_waveform_might_sleep() cannot be implemented any more.h]hthe latter might fail, e.g. because an input clock changed its rate between these two calls and the waveform determined by pwm_round_waveform_might_sleep() cannot be implemented any more.}(hjy`hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chKhjM_ubj()}(hReturns 0 on success, 1 if there is no valid hardware configuration matching the input waveform under the PWM rounding rules or a negative errno.h]hReturns 0 on success, 1 if there is no valid hardware configuration matching the input waveform under the PWM rounding rules or a negative errno.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chKhjM_ubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ)pwm_get_waveform_might_sleep (C function)c.pwm_get_waveform_might_sleephNtauh1hhj;hhhNhNubh)}(hhh](h)}(hRint pwm_get_waveform_might_sleep (struct pwm_device *pwm, struct pwm_waveform *wf)h]h)}(hQint pwm_get_waveform_might_sleep(struct pwm_device *pwm, struct pwm_waveform *wf)h](jP)}(hinth]hint}(hj`hhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj`hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chM#ubjb)}(h h]h }(hj`hhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj`hhhj`hM#ubh)}(hpwm_get_waveform_might_sleeph]h)}(hpwm_get_waveform_might_sleeph]hpwm_get_waveform_might_sleep}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ](hheh"]h$]h&]hhuh1hhj`hhhj`hM#ubj)}(h1(struct pwm_device *pwm, struct pwm_waveform *wf)h](j)}(hstruct pwm_device *pwmh](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjb)}(h h]h }(hjahhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj`ubh)}(hhh]h)}(h pwm_deviceh]h pwm_device}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]j)}jj`sbc.pwm_get_waveform_might_sleepasbuh1hhj`ubjb)}(h h]h }(hj2ahhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj`ubj)}(hjh]h*}(hj@ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hpwmh]hpwm}(hjMahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj`ubj)}(hstruct pwm_waveform *wfh](j)}(hjh]hstruct}(hjfahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbaubjb)}(h h]h }(hjsahhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjbaubh)}(hhh]h)}(h pwm_waveformh]h pwm_waveform}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]j.ac.pwm_get_waveform_might_sleepasbuh1hhjbaubjb)}(h h]h }(hjahhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjbaubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbaubh)}(hwfh]hwf}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbaubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj`ubeh}(h]h ]h"]h$]h&]hhuh1jhj`hhhj`hM#ubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj`hhhj`hM#ubah}(h]j`ah ](jjeh"]h$]h&]j j )j huh1hhj`hM#hj`hhubj)}(hhh]j()}(hLQuery hardware about current configuration Cannot be used in atomic context.h]hLQuery hardware about current configuration Cannot be used in atomic context.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjahhubah}(h]h ]h"]h$]h&]uh1jhj`hhhj`hM#ubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jaj#jaj$j%j&uh1hhhhj;hNhNubj_)}(hX**Parameters** ``struct pwm_device *pwm`` PWM device ``struct pwm_waveform *wf`` output parameter **Description** Stores the current configuration of the PWM in **wf**. Note this is the equivalent of pwm_get_state_hw() (and not pwm_get_state()) for pwm_waveform.h](j()}(h**Parameters**h]ji)}(hj bh]h Parameters}(hj bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjbubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjbubj)}(hhh](j)}(h&``struct pwm_device *pwm`` PWM device h](j)}(h``struct pwm_device *pwm``h]j.)}(hj(bh]hstruct pwm_device *pwm}(hj*bhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj&bubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj"bubj)}(hhh]j()}(h PWM deviceh]h PWM device}(hjAbhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj=bhMhj>bubah}(h]h ]h"]h$]h&]uh1jhj"bubeh}(h]h ]h"]h$]h&]uh1jhj=bhMhjbubj)}(h-``struct pwm_waveform *wf`` output parameter h](j)}(h``struct pwm_waveform *wf``h]j.)}(hjabh]hstruct pwm_waveform *wf}(hjcbhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj_bubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj[bubj)}(hhh]j()}(houtput parameterh]houtput parameter}(hjzbhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjvbhMhjwbubah}(h]h ]h"]h$]h&]uh1jhj[bubeh}(h]h ]h"]h$]h&]uh1jhjvbhMhjbubeh}(h]h ]h"]h$]h&]uh1j~hjbubj()}(h**Description**h]ji)}(hjbh]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjbubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chM hjbubj()}(hStores the current configuration of the PWM in **wf**. Note this is the equivalent of pwm_get_state_hw() (and not pwm_get_state()) for pwm_waveform.h](h/Stores the current configuration of the PWM in }(hjbhhhNhNubji)}(h**wf**h]hwf}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjbubh_. Note this is the equivalent of pwm_get_state_hw() (and not pwm_get_state()) for pwm_waveform.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chM hjbubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ)pwm_set_waveform_might_sleep (C function)c.pwm_set_waveform_might_sleephNtauh1hhj;hhhNhNubh)}(hhh](h)}(hdint pwm_set_waveform_might_sleep (struct pwm_device *pwm, const struct pwm_waveform *wf, bool exact)h]h)}(hcint pwm_set_waveform_might_sleep(struct pwm_device *pwm, const struct pwm_waveform *wf, bool exact)h](jP)}(hinth]hint}(hjbhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjbhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMubjb)}(h h]h }(hjchhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjbhhhjchMubh)}(hpwm_set_waveform_might_sleeph]h)}(hpwm_set_waveform_might_sleeph]hpwm_set_waveform_might_sleep}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ](hheh"]h$]h&]hhuh1hhjbhhhjchMubj)}(hC(struct pwm_device *pwm, const struct pwm_waveform *wf, bool exact)h](j)}(hstruct pwm_device *pwmh](j)}(hjh]hstruct}(hj0chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,cubjb)}(h h]h }(hj=chhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj,cubh)}(hhh]h)}(h pwm_deviceh]h pwm_device}(hjNchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPcmodnameN classnameNjj)}j]j)}jjcsbc.pwm_set_waveform_might_sleepasbuh1hhj,cubjb)}(h h]h }(hjnchhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj,cubj)}(hjh]h*}(hj|chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,cubh)}(hpwmh]hpwm}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,cubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj(cubj)}(hconst struct pwm_waveform *wfh](j)}(hj0h]hconst}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubjb)}(h h]h }(hjchhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjcubj)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubjb)}(h h]h }(hjchhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjcubh)}(hhh]h)}(h pwm_waveformh]h pwm_waveform}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj)}j]jjcc.pwm_set_waveform_might_sleepasbuh1hhjcubjb)}(h h]h }(hjchhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjcubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hwfh]hwf}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj(cubj)}(h bool exacth](jP)}(hjUh]hbool}(hj-dhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj)dubjb)}(h h]h }(hj:dhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj)dubh)}(hexacth]hexact}(hjHdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)dubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj(cubeh}(h]h ]h"]h$]h&]hhuh1jhjbhhhjchMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjbhhhjchMubah}(h]jbah ](jjeh"]h$]h&]j j )j huh1hhjchMhjbhhubj)}(hhh]j()}(h6Apply a new waveform Cannot be used in atomic context.h]h6Apply a new waveform Cannot be used in atomic context.}(hjrdhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjodhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjchMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jdj#jdj$j%j&uh1hhhhj;hNhNubj_)}(hX**Parameters** ``struct pwm_device *pwm`` PWM device ``const struct pwm_waveform *wf`` The waveform to apply ``bool exact`` If true no rounding is allowed **Description** Typically a requested waveform cannot be implemented exactly, e.g. because you requested .period_length_ns = 100 ns, but the hardware can only set periods that are a multiple of 8.5 ns. With that hardware passing exact = true results in pwm_set_waveform_might_sleep() failing and returning 1. If exact = false you get a period of 93.5 ns (i.e. the biggest period not bigger than the requested value). Note that even with exact = true, some rounding by less than 1 is possible/needed. In the above example requesting .period_length_ns = 94 and exact = true, you get the hardware configured with period = 93.5 ns.h](j()}(h**Parameters**h]ji)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjdubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjdubj)}(hhh](j)}(h&``struct pwm_device *pwm`` PWM device h](j)}(h``struct pwm_device *pwm``h]j.)}(hjdh]hstruct pwm_device *pwm}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjdubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjdubj)}(hhh]j()}(h PWM deviceh]h PWM device}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjdubj)}(h8``const struct pwm_waveform *wf`` The waveform to apply h](j)}(h!``const struct pwm_waveform *wf``h]j.)}(hjdh]hconst struct pwm_waveform *wf}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjdubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjdubj)}(hhh]j()}(hThe waveform to applyh]hThe waveform to apply}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjehMhjdubj)}(h.``bool exact`` If true no rounding is allowed h](j)}(h``bool exact``h]j.)}(hj%eh]h bool exact}(hj'ehhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj#eubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjeubj)}(hhh]j()}(hIf true no rounding is allowedh]hIf true no rounding is allowed}(hj>ehhhNhNubah}(h]h ]h"]h$]h&]uh1j'hj:ehMhj;eubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhj:ehMhjdubeh}(h]h ]h"]h$]h&]uh1j~hjdubj()}(h**Description**h]ji)}(hj`eh]h Description}(hjbehhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj^eubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjdubj()}(hXcTypically a requested waveform cannot be implemented exactly, e.g. because you requested .period_length_ns = 100 ns, but the hardware can only set periods that are a multiple of 8.5 ns. With that hardware passing exact = true results in pwm_set_waveform_might_sleep() failing and returning 1. If exact = false you get a period of 93.5 ns (i.e. the biggest period not bigger than the requested value). Note that even with exact = true, some rounding by less than 1 is possible/needed. In the above example requesting .period_length_ns = 94 and exact = true, you get the hardware configured with period = 93.5 ns.h]hXcTypically a requested waveform cannot be implemented exactly, e.g. because you requested .period_length_ns = 100 ns, but the hardware can only set periods that are a multiple of 8.5 ns. With that hardware passing exact = true results in pwm_set_waveform_might_sleep() failing and returning 1. If exact = false you get a period of 93.5 ns (i.e. the biggest period not bigger than the requested value). Note that even with exact = true, some rounding by less than 1 is possible/needed. In the above example requesting .period_length_ns = 94 and exact = true, you get the hardware configured with period = 93.5 ns.}(hjvehhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČ"pwm_apply_might_sleep (C function)c.pwm_apply_might_sleephNtauh1hhj;hhhNhNubh)}(hhh](h)}(hQint pwm_apply_might_sleep (struct pwm_device *pwm, const struct pwm_state *state)h]h)}(hPint pwm_apply_might_sleep(struct pwm_device *pwm, const struct pwm_state *state)h](jP)}(hinth]hint}(hjehhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjehhh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMubjb)}(h h]h }(hjehhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjehhhjehMubh)}(hpwm_apply_might_sleeph]h)}(hpwm_apply_might_sleeph]hpwm_apply_might_sleep}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ](hheh"]h$]h&]hhuh1hhjehhhjehMubj)}(h7(struct pwm_device *pwm, const struct pwm_state *state)h](j)}(hstruct pwm_device *pwmh](j)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjb)}(h h]h }(hjehhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjeubh)}(hhh]h)}(h pwm_deviceh]h pwm_device}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]j)}jjesbc.pwm_apply_might_sleepasbuh1hhjeubjb)}(h h]h }(hj fhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjeubj)}(hjh]h*}(hj.fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hpwmh]hpwm}(hj;fhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjeubj)}(hconst struct pwm_state *stateh](j)}(hj0h]hconst}(hjTfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPfubjb)}(h h]h }(hjafhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjPfubj)}(hjh]hstruct}(hjofhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPfubjb)}(h h]h }(hj|fhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjPfubh)}(hhh]h)}(h pwm_stateh]h pwm_state}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]jfc.pwm_apply_might_sleepasbuh1hhjPfubjb)}(h h]h }(hjfhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjPfubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPfubh)}(hstateh]hstate}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPfubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjeubeh}(h]h ]h"]h$]h&]hhuh1jhjehhhjehMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjehhhjehMubah}(h]jeah ](jjeh"]h$]h&]j j )j huh1hhjehMhjehhubj)}(hhh]j()}(hNatomically apply a new state to a PWM device Cannot be used in atomic context.h]hNatomically apply a new state to a PWM device Cannot be used in atomic context.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjfhhubah}(h]h ]h"]h$]h&]uh1jhjehhhjehMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jgj#jgj$j%j&uh1hhhhj;hNhNubj_)}(ho**Parameters** ``struct pwm_device *pwm`` PWM device ``const struct pwm_state *state`` new state to applyh](j()}(h**Parameters**h]ji)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjgubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj gubj)}(hhh](j)}(h&``struct pwm_device *pwm`` PWM device h](j)}(h``struct pwm_device *pwm``h]j.)}(hj1gh]hstruct pwm_device *pwm}(hj3ghhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj/gubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj+gubj)}(hhh]j()}(h PWM deviceh]h PWM device}(hjJghhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjFghMhjGgubah}(h]h ]h"]h$]h&]uh1jhj+gubeh}(h]h ]h"]h$]h&]uh1jhjFghMhj(gubj)}(h4``const struct pwm_state *state`` new state to applyh](j)}(h!``const struct pwm_state *state``h]j.)}(hjjgh]hconst struct pwm_state *state}(hjlghhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjhgubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjdgubj)}(hhh]j()}(hnew state to applyh]hnew state to apply}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjgubah}(h]h ]h"]h$]h&]uh1jhjdgubeh}(h]h ]h"]h$]h&]uh1jhjghMhj(gubeh}(h]h ]h"]h$]h&]uh1j~hj gubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČpwm_apply_atomic (C function)c.pwm_apply_atomichNtauh1hhj;hhhNhNubh)}(hhh](h)}(hLint pwm_apply_atomic (struct pwm_device *pwm, const struct pwm_state *state)h]h)}(hKint pwm_apply_atomic(struct pwm_device *pwm, const struct pwm_state *state)h](jP)}(hinth]hint}(hjghhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjghhh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMubjb)}(h h]h }(hjghhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjghhhjghMubh)}(hpwm_apply_atomich]h)}(hpwm_apply_atomich]hpwm_apply_atomic}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ](hheh"]h$]h&]hhuh1hhjghhhjghMubj)}(h7(struct pwm_device *pwm, const struct pwm_state *state)h](j)}(hstruct pwm_device *pwmh](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjb)}(h h]h }(hjhhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjgubh)}(hhh]h)}(h pwm_deviceh]h pwm_device}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!hmodnameN classnameNjj)}j]j)}jjgsbc.pwm_apply_atomicasbuh1hhjgubjb)}(h h]h }(hj?hhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjgubj)}(hjh]h*}(hjMhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hpwmh]hpwm}(hjZhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjgubj)}(hconst struct pwm_state *stateh](j)}(hj0h]hconst}(hjshhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohubjb)}(h h]h }(hjhhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjohubj)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohubjb)}(h h]h }(hjhhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjohubh)}(hhh]h)}(h pwm_stateh]h pwm_state}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]j;hc.pwm_apply_atomicasbuh1hhjohubjb)}(h h]h }(hjhhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjohubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohubh)}(hstateh]hstate}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjohubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjgubeh}(h]h ]h"]h$]h&]hhuh1jhjghhhjghMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjghhhjghMubah}(h]jgah ](jjeh"]h$]h&]j j )j huh1hhjghMhjghhubj)}(hhh]j()}(h~apply a new state to a PWM device from atomic context Not all PWM devices support this function, check with pwm_might_sleep().h]h~apply a new state to a PWM device from atomic context Not all PWM devices support this function, check with pwm_might_sleep().}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj ihhubah}(h]h ]h"]h$]h&]uh1jhjghhhjghMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j'ij#j'ij$j%j&uh1hhhhj;hNhNubj_)}(ho**Parameters** ``struct pwm_device *pwm`` PWM device ``const struct pwm_state *state`` new state to applyh](j()}(h**Parameters**h]ji)}(hj1ih]h Parameters}(hj3ihhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj/iubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj+iubj)}(hhh](j)}(h&``struct pwm_device *pwm`` PWM device h](j)}(h``struct pwm_device *pwm``h]j.)}(hjPih]hstruct pwm_device *pwm}(hjRihhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjNiubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjJiubj)}(hhh]j()}(h PWM deviceh]h PWM device}(hjiihhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjeihMhjfiubah}(h]h ]h"]h$]h&]uh1jhjJiubeh}(h]h ]h"]h$]h&]uh1jhjeihMhjGiubj)}(h4``const struct pwm_state *state`` new state to applyh](j)}(h!``const struct pwm_state *state``h]j.)}(hjih]hconst struct pwm_state *state}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjiubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjiubj)}(hhh]j()}(hnew state to applyh]hnew state to apply}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMhjGiubeh}(h]h ]h"]h$]h&]uh1j~hj+iubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČpwm_get_state_hw (C function)c.pwm_get_state_hwhNtauh1hhj;hhhNhNubh)}(hhh](h)}(hFint pwm_get_state_hw (struct pwm_device *pwm, struct pwm_state *state)h]h)}(hEint pwm_get_state_hw(struct pwm_device *pwm, struct pwm_state *state)h](jP)}(hinth]hint}(hjihhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjihhh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMubjb)}(h h]h }(hjihhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjihhhjihMubh)}(hpwm_get_state_hwh]h)}(hpwm_get_state_hwh]hpwm_get_state_hw}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ](hheh"]h$]h&]hhuh1hhjihhhjihMubj)}(h1(struct pwm_device *pwm, struct pwm_state *state)h](j)}(hstruct pwm_device *pwmh](j)}(hjh]hstruct}(hj jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubjb)}(h h]h }(hj-jhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjjubh)}(hhh]h)}(h pwm_deviceh]h pwm_device}(hj>jhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;jubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@jmodnameN classnameNjj)}j]j)}jjjsbc.pwm_get_state_hwasbuh1hhjjubjb)}(h h]h }(hj^jhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjjubj)}(hjh]h*}(hjljhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hpwmh]hpwm}(hjyjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjjubj)}(hstruct pwm_state *stateh](j)}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubjb)}(h h]h }(hjjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjjubh)}(hhh]h)}(h pwm_stateh]h pwm_state}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]jZjc.pwm_get_state_hwasbuh1hhjjubjb)}(h h]h }(hjjhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hstateh]hstate}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjjubeh}(h]h ]h"]h$]h&]hhuh1jhjihhhjihMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjihhhjihMubah}(h]jiah ](jjeh"]h$]h&]j j )j huh1hhjihMhjihhubj)}(hhh]j()}(h'get the current PWM state from hardwareh]h'get the current PWM state from hardware}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjkhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjihMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j+kj#j+kj$j%j&uh1hhhhj;hNhNubj_)}(hXR**Parameters** ``struct pwm_device *pwm`` PWM device ``struct pwm_state *state`` state to fill with the current PWM state **Description** Similar to pwm_get_state() but reads the current PWM state from hardware instead of the requested state. **Return** 0 on success or a negative error code on failure. **Context** May sleep.h](j()}(h**Parameters**h]ji)}(hj5kh]h Parameters}(hj7khhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj3kubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj/kubj)}(hhh](j)}(h&``struct pwm_device *pwm`` PWM device h](j)}(h``struct pwm_device *pwm``h]j.)}(hjTkh]hstruct pwm_device *pwm}(hjVkhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjRkubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjNkubj)}(hhh]j()}(h PWM deviceh]h PWM device}(hjmkhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjikhMhjjkubah}(h]h ]h"]h$]h&]uh1jhjNkubeh}(h]h ]h"]h$]h&]uh1jhjikhMhjKkubj)}(hE``struct pwm_state *state`` state to fill with the current PWM state h](j)}(h``struct pwm_state *state``h]j.)}(hjkh]hstruct pwm_state *state}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjkubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjkubj)}(hhh]j()}(h(state to fill with the current PWM stateh]h(state to fill with the current PWM state}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjKkubeh}(h]h ]h"]h$]h&]uh1j~hj/kubj()}(h**Description**h]ji)}(hjkh]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjkubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj/kubj()}(hhSimilar to pwm_get_state() but reads the current PWM state from hardware instead of the requested state.h]hhSimilar to pwm_get_state() but reads the current PWM state from hardware instead of the requested state.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj/kubj()}(h **Return**h]ji)}(hjkh]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjkubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj/kubj()}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj/kubj()}(h **Context**h]ji)}(hjlh]hContext}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjlubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj/kubj()}(h May sleep.h]h May sleep.}(hj,lhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj/kubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČpwm_adjust_config (C function)c.pwm_adjust_confighNtauh1hhj;hhhNhNubh)}(hhh](h)}(h.int pwm_adjust_config (struct pwm_device *pwm)h]h)}(h-int pwm_adjust_config(struct pwm_device *pwm)h](jP)}(hinth]hint}(hj[lhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjWlhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMubjb)}(h h]h }(hjjlhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjWlhhhjilhMubh)}(hpwm_adjust_configh]h)}(hpwm_adjust_configh]hpwm_adjust_config}(hj|lhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxlubah}(h]h ](hheh"]h$]h&]hhuh1hhjWlhhhjilhMubj)}(h(struct pwm_device *pwm)h]j)}(hstruct pwm_device *pwmh](j)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjb)}(h h]h }(hjlhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjlubh)}(hhh]h)}(h pwm_deviceh]h pwm_device}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjlmodnameN classnameNjj)}j]j)}jj~lsbc.pwm_adjust_configasbuh1hhjlubjb)}(h h]h }(hjlhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjlubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hpwmh]hpwm}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjlubah}(h]h ]h"]h$]h&]hhuh1jhjWlhhhjilhMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjSlhhhjilhMubah}(h]jNlah ](jjeh"]h$]h&]j j )j huh1hhjilhMhjPlhhubj)}(hhh]j()}(h2adjust the current PWM config to the PWM argumentsh]h2adjust the current PWM config to the PWM arguments}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjmhhubah}(h]h ]h"]h$]h&]uh1jhjPlhhhjilhMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"j3mj#j3mj$j%j&uh1hhhhj;hNhNubj_)}(h**Parameters** ``struct pwm_device *pwm`` PWM device **Description** This function will adjust the PWM config to the PWM arguments provided by the DT or PWM lookup table. This is particularly useful to adapt the bootloader config to the Linux one.h](j()}(h**Parameters**h]ji)}(hj=mh]h Parameters}(hj?mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj;mubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj7mubj)}(hhh]j)}(h&``struct pwm_device *pwm`` PWM device h](j)}(h``struct pwm_device *pwm``h]j.)}(hj\mh]hstruct pwm_device *pwm}(hj^mhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjZmubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjVmubj)}(hhh]j()}(h PWM deviceh]h PWM device}(hjumhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjqmhMhjrmubah}(h]h ]h"]h$]h&]uh1jhjVmubeh}(h]h ]h"]h$]h&]uh1jhjqmhMhjSmubah}(h]h ]h"]h$]h&]uh1j~hj7mubj()}(h**Description**h]ji)}(hjmh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjmubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj7mubj()}(hThis function will adjust the PWM config to the PWM arguments provided by the DT or PWM lookup table. This is particularly useful to adapt the bootloader config to the Linux one.h]hThis function will adjust the PWM config to the PWM arguments provided by the DT or PWM lookup table. This is particularly useful to adapt the bootloader config to the Linux one.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj7mubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČpwm_get (C function) c.pwm_gethNtauh1hhj;hhhNhNubh)}(hhh](h)}(hDstruct pwm_device * pwm_get (struct device *dev, const char *con_id)h]h)}(hBstruct pwm_device *pwm_get(struct device *dev, const char *con_id)h](j)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chM;ubjb)}(h h]h }(hjmhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjmhhhjmhM;ubh)}(hhh]h)}(h pwm_deviceh]h pwm_device}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j)}jpwm_getsb c.pwm_getasbuh1hhjmhhhjmhM;ubjb)}(h h]h }(hjnhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjmhhhjmhM;ubj)}(hjh]h*}(hj*nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhjmhM;ubh)}(hpwm_geth]h)}(hjnh]hpwm_get}(hj;nhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7nubah}(h]h ](hheh"]h$]h&]hhuh1hhjmhhhjmhM;ubj)}(h((struct device *dev, const char *con_id)h](j)}(hstruct device *devh](j)}(hjh]hstruct}(hjVnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRnubjb)}(h h]h }(hjcnhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjRnubh)}(hhh]h)}(hdeviceh]hdevice}(hjtnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvnmodnameN classnameNjj)}j]jn c.pwm_getasbuh1hhjRnubjb)}(h h]h }(hjnhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjRnubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRnubh)}(hdevh]hdev}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRnubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjNnubj)}(hconst char *con_idh](j)}(hj0h]hconst}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubjb)}(h h]h }(hjnhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjnubjP)}(hcharh]hchar}(hjnhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjnubjb)}(h h]h }(hjnhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjnubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hcon_idh]hcon_id}(hj ohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjNnubeh}(h]h ]h"]h$]h&]hhuh1jhjmhhhjmhM;ubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjmhhhjmhM;ubah}(h]jmah ](jjeh"]h$]h&]j j )j huh1hhjmhM;hjmhhubj)}(hhh]j()}(h look up and request a PWM deviceh]h look up and request a PWM device}(hj4ohhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chM-hj1ohhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjmhM;ubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jLoj#jLoj$j%j&uh1hhhhj;hNhNubj_)}(hX**Parameters** ``struct device *dev`` device for PWM consumer ``const char *con_id`` consumer name **Description** Lookup is first attempted using DT. If the device was not instantiated from a device tree, a PWM chip and a relative index is looked up via a table supplied by board setup code (see pwm_add_table()). Once a PWM chip has been found the specified PWM device will be requested and is ready to be used. **Return** A pointer to the requested PWM device or an ERR_PTR()-encoded error code on failure.h](j()}(h**Parameters**h]ji)}(hjVoh]h Parameters}(hjXohhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjToubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chM1hjPoubj)}(hhh](j)}(h/``struct device *dev`` device for PWM consumer h](j)}(h``struct device *dev``h]j.)}(hjuoh]hstruct device *dev}(hjwohhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjsoubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chM.hjooubj)}(hhh]j()}(hdevice for PWM consumerh]hdevice for PWM consumer}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjohM.hjoubah}(h]h ]h"]h$]h&]uh1jhjooubeh}(h]h ]h"]h$]h&]uh1jhjohM.hjloubj)}(h%``const char *con_id`` consumer name h](j)}(h``const char *con_id``h]j.)}(hjoh]hconst char *con_id}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjoubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chM/hjoubj)}(hhh]j()}(h consumer nameh]h consumer name}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjohM/hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohM/hjloubeh}(h]h ]h"]h$]h&]uh1j~hjPoubj()}(h**Description**h]ji)}(hjoh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjoubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chM1hjPoubj()}(hLookup is first attempted using DT. If the device was not instantiated from a device tree, a PWM chip and a relative index is looked up via a table supplied by board setup code (see pwm_add_table()).h]hLookup is first attempted using DT. If the device was not instantiated from a device tree, a PWM chip and a relative index is looked up via a table supplied by board setup code (see pwm_add_table()).}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chM1hjPoubj()}(hbOnce a PWM chip has been found the specified PWM device will be requested and is ready to be used.h]hbOnce a PWM chip has been found the specified PWM device will be requested and is ready to be used.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chM5hjPoubj()}(h **Return**h]ji)}(hjph]hReturn}(hj!phhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjpubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chM8hjPoubj()}(hTA pointer to the requested PWM device or an ERR_PTR()-encoded error code on failure.h]hTA pointer to the requested PWM device or an ERR_PTR()-encoded error code on failure.}(hj5phhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chM8hjPoubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČpwm_put (C function) c.pwm_puthNtauh1hhj;hhhNhNubh)}(hhh](h)}(h%void pwm_put (struct pwm_device *pwm)h]h)}(h$void pwm_put(struct pwm_device *pwm)h](jP)}(hvoidh]hvoid}(hjdphhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhj`phhh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMubjb)}(h h]h }(hjsphhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahj`phhhjrphMubh)}(hpwm_puth]h)}(hpwm_puth]hpwm_put}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ](hheh"]h$]h&]hhuh1hhj`phhhjrphMubj)}(h(struct pwm_device *pwm)h]j)}(hstruct pwm_device *pwmh](j)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubjb)}(h h]h }(hjphhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjpubh)}(hhh]h)}(h pwm_deviceh]h pwm_device}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]j)}jjpsb c.pwm_putasbuh1hhjpubjb)}(h h]h }(hjphhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjpubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hpwmh]hpwm}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjpubah}(h]h ]h"]h$]h&]hhuh1jhj`phhhjrphMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhj\phhhjrphMubah}(h]jWpah ](jjeh"]h$]h&]j j )j huh1hhjrphMhjYphhubj)}(hhh]j()}(hrelease a PWM deviceh]hrelease a PWM device}(hj$qhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhj!qhhubah}(h]h ]h"]h$]h&]uh1jhjYphhhjrphMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jint __pwmchip_add(struct pwm_chip *chip, struct module *owner)h](jP)}(hinth]hint}(hjZwhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjVwhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMubjb)}(h h]h }(hjiwhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjVwhhhjhwhMubh)}(h __pwmchip_addh]h)}(h __pwmchip_addh]h __pwmchip_add}(hj{whhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwwubah}(h]h ](hheh"]h$]h&]hhuh1hhjVwhhhjhwhMubj)}(h-(struct pwm_chip *chip, struct module *owner)h](j)}(hstruct pwm_chip *chiph](j)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjb)}(h h]h }(hjwhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjwubh)}(hhh]h)}(hpwm_chiph]hpwm_chip}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]j)}jj}wsbc.__pwmchip_addasbuh1hhjwubjb)}(h h]h }(hjwhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjwubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hchiph]hchip}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjwubj)}(hstruct module *ownerh](j)}(hjh]hstruct}(hj xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubjb)}(h h]h }(hjxhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjxubh)}(hhh]h)}(hmoduleh]hmodule}(hj'xhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$xubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)xmodnameN classnameNjj)}j]jwc.__pwmchip_addasbuh1hhjxubjb)}(h h]h }(hjExhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjxubj)}(hjh]h*}(hjSxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hownerh]howner}(hj`xhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjwubeh}(h]h ]h"]h$]h&]hhuh1jhjVwhhhjhwhMubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjRwhhhjhwhMubah}(h]jMwah ](jjeh"]h$]h&]j j )j huh1hhjhwhMhjOwhhubj)}(hhh]j()}(hregister a new PWM chiph]hregister a new PWM chip}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjxhhubah}(h]h ]h"]h$]h&]uh1jhjOwhhhjhwhMubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jxj#jxj$j%j&uh1hhhhj;hNhNubj_)}(hXH**Parameters** ``struct pwm_chip *chip`` the PWM chip to add ``struct module *owner`` reference to the module providing the chip. **Description** Register a new PWM chip. **owner** is supposed to be THIS_MODULE, use the pwmchip_add wrapper to do this right. **Return** 0 on success or a negative error code on failure.h](j()}(h**Parameters**h]ji)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjxubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjxubj)}(hhh](j)}(h.``struct pwm_chip *chip`` the PWM chip to add h](j)}(h``struct pwm_chip *chip``h]j.)}(hjxh]hstruct pwm_chip *chip}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjxubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjxubj)}(hhh]j()}(hthe PWM chip to addh]hthe PWM chip to add}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjxubj)}(hE``struct module *owner`` reference to the module providing the chip. h](j)}(h``struct module *owner``h]j.)}(hjyh]hstruct module *owner}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjyubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjxubj)}(hhh]j()}(h+reference to the module providing the chip.h]h+reference to the module providing the chip.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjxubeh}(h]h ]h"]h$]h&]uh1j~hjxubj()}(h**Description**h]ji)}(hj?yh]h Description}(hjAyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj=yubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjxubj()}(hoRegister a new PWM chip. **owner** is supposed to be THIS_MODULE, use the pwmchip_add wrapper to do this right.h](hRegister a new PWM chip. }(hjUyhhhNhNubji)}(h **owner**h]howner}(hj]yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjUyubhM is supposed to be THIS_MODULE, use the pwmchip_add wrapper to do this right.}(hjUyhhhNhNubeh}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjxubj()}(h **Return**h]ji)}(hjxyh]hReturn}(hjzyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjvyubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjxubj()}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hČpwmchip_remove (C function)c.pwmchip_removehNtauh1hhj;hhhNhNubh)}(hhh](h)}(h+void pwmchip_remove (struct pwm_chip *chip)h]h)}(h*void pwmchip_remove(struct pwm_chip *chip)h](jP)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]j\ah"]h$]h&]uh1jOhjyhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chM[ubjb)}(h h]h }(hjyhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjyhhhjyhM[ubh)}(hpwmchip_removeh]h)}(hpwmchip_removeh]hpwmchip_remove}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ](hheh"]h$]h&]hhuh1hhjyhhhjyhM[ubj)}(h(struct pwm_chip *chip)h]j)}(hstruct pwm_chip *chiph](j)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubjb)}(h h]h }(hjzhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjyubh)}(hhh]h)}(hpwm_chiph]hpwm_chip}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]j)}jjysbc.pwmchip_removeasbuh1hhjyubjb)}(h h]h }(hj8zhhhNhNubah}(h]h ]jnah"]h$]h&]uh1jahjyubj)}(hjh]h*}(hjFzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hchiph]hchip}(hjSzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjyubah}(h]h ]h"]h$]h&]hhuh1jhjyhhhjyhM[ubeh}(h]h ]h"]h$]h&]hhjuh1hjjhjyhhhjyhM[ubah}(h]jyah ](jjeh"]h$]h&]j j )j huh1hhjyhM[hjyhhubj)}(hhh]j()}(hremove a PWM chiph]hremove a PWM chip}(hj}zhhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMVhjzzhhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjyhM[ubeh}(h]h ](jfunctioneh"]h$]h&]j!jj"jzj#jzj$j%j&uh1hhhhj;hNhNubj_)}(hh**Parameters** ``struct pwm_chip *chip`` the PWM chip to remove **Description** Removes a PWM chip.h](j()}(h**Parameters**h]ji)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjzubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMZhjzubj)}(hhh]j)}(h1``struct pwm_chip *chip`` the PWM chip to remove h](j)}(h``struct pwm_chip *chip``h]j.)}(hjzh]hstruct pwm_chip *chip}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjzubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMWhjzubj)}(hhh]j()}(hthe PWM chip to removeh]hthe PWM chip to remove}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j'hjzhMWhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMWhjzubah}(h]h ]h"]h$]h&]uh1j~hjzubj()}(h**Description**h]ji)}(hjzh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjzubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMYhjzubj()}(hRemoves a PWM chip.h]hRemoves a PWM chip.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j'h[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.chMYhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1j^hj;hhhNhNubeh}(h]pulse-width-modulation-pwmah ]h"]pulse-width modulation (pwm)ah$]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_handlerjP{error_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}substitution_names}refnames}refids}nameids}(j4j4j|;jy;j*{j'{u nametypes}(j4j|;j*{uh}(j4hhhj8j=jBjGjjjmjrjjjT jY j_ jd jYj^j7j<j,j1j1j6jjjfjkjjja jf j!j!jw#j|#j((j-(j)j)j+j"+j,j,j..j3.j/j/j1j1j#3j(3jy;j4j4j4jL6jQ6jy7j~7j8j8jI:jN:j'{j;j <j%<j8=j==j>j>jr@jw@jBjBjEjEjjGjoGj"Jj'JjMjMjNjOjRj RjUjUj;Wj@WjYjYj[j[jt\jy\j]j]j`j`jbjbjejejgjgjijijNljSljmjmjWpj\pjqjqj+tj0tjMwjRwjyjyu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.