€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ,/translations/zh_CN/driver-api/miscellaneous”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/zh_TW/driver-api/miscellaneous”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/it_IT/driver-api/miscellaneous”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/ja_JP/driver-api/miscellaneous”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/ko_KR/driver-api/miscellaneous”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/pt_BR/driver-api/miscellaneous”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/sp_SP/driver-api/miscellaneous”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒParallel Port Devices”h]”hŒParallel Port Devices”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒF/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous.rst”h´KubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œ!parport_register_driver (C macro)”Œc.parport_register_driver”hNt”auh1hËhh·h²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒparport_register_driver”h]”hŒdesc_signature_line”“”)�”}”(hŒparport_register_driver”h]”hŒ desc_name”“”)�”}”(hŒparport_register_driver”h]”hŒ desc_sig_name”“”)�”}”(hhåh]”hŒparport_register_driver”…”�”}”(hhõh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1hóhhïubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”Œ xml:space”Œpreserve”uh1híhhéh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M'ubah}”(h]”h ]”h"]”h$]”h&]”j j Œ add_permalink”ˆuh1hçŒsphinx_line_type”Œ declarator”hhãh²hh³j h´M'ubah}”(h]”hÚah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1háh³j h´M'hhÞh²hubhŒ desc_content”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j"hhÞh²hh³j h´M'ubeh}”(h]”h ]”(Œc”Œmacro”eh"]”h$]”h&]”Œdomain”j0Œobjtype”j1Œdesctype”j1Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1hÜh²hhh·h³Nh´NubhŒ paragraph”“”)�”}”(hŒ$``parport_register_driver (driver)``”h]”hŒliteral”“”)�”}”(hj?h]”hŒ parport_register_driver (driver)”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M)hh·h²hubhŒ block_quote”“”)�”}”(hŒ'register a parallel port device driver ”h]”j<)�”}”(hŒ®ister a parallel port device driver”h]”hŒ®ister a parallel port device driver”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M'hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jWh³jkh´M'hh·h²hubhŒ container”“”)�”}”(hXj**Parameters** ``driver`` structure describing the driver **Description** 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]”hŒstrong”“”)�”}”(hjzh]”hŒ Parameters”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M+hjtubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ+``driver`` structure describing the driver ”h]”(hŒterm”“”)�”}”(hŒ ``driver``”h]”jB)�”}”(hj¡h]”hŒdriver”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M(hj™ubhŒ definition”“”)�”}”(hhh]”j<)�”}”(hŒstructure describing the driver”h]”hŒstructure describing the driver”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j¶h´M(hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j¶h´M(hj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hjtubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjÞh]”hŒ Description”…”�”}”(hjàh²hh³Nh´Nubah}”(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.h”h´M*hjtubjX)�”}”(hXÆ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Œ¢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.”h]”hŒ¢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.”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M)hjôubj<)�”}”(hŒ€The **driver** structure is allocated by the caller and must not be deallocated until after calling parport_unregister_driver().”h]”(hŒThe ”…”�”}”(hjh²hh³Nh´Nubj})�”}”(hŒ **driver**”h]”hŒdriver”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjubhŒr structure is allocated by the caller and must not be deallocated until after calling parport_unregister_driver().”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M-hjôubj<)�”}”(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.”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M0hjôubj<)�”}”(hŒÚ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.”h]”hŒÜ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.”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M7hjôubj<)�”}”(hŒ‚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]”hŒ‚Returns 0 on success. The non device model will always succeeds. but the new device model can fail and will return the error code.”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M=hjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³jh´M)hjtubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒmodule_parport_driver (C macro)”Œc.module_parport_driver”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒmodule_parport_driver”h]”hè)�”}”(hŒmodule_parport_driver”h]”hî)�”}”(hŒmodule_parport_driver”h]”hô)�”}”(hjuh]”hŒmodule_parport_driver”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj{ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjwh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´MHubah}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjsh²hh³j’h´MHubah}”(h]”jnah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³j’h´MHhjph²hubj#)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j"hjph²hh³j’h´MHubeh}”(h]”h ]”(j0Œmacro”eh"]”h$]”h&]”j5j0j6j«j7j«j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubj<)�”}”(hŒ,``module_parport_driver (__parport_driver)``”h]”jB)�”}”(hj±h]”hŒ(module_parport_driver (__parport_driver)”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´MJhh·h²hubjX)�”}”(hŒ6Helper macro for registering a modular parport driver ”h]”j<)�”}”(hŒ5Helper macro for registering a modular parport driver”h]”hŒ5Helper macro for registering a modular parport driver”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´MHhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jWh³jÙh´MHhh·h²hubjs)�”}”(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]”j})�”}”(hjæh]”hŒ Parameters”…”�”}”(hjèh²hh³Nh´Nubah}”(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.h”h´MLhjàubj“)�”}”(hhh]”j˜)�”}”(hŒ6``__parport_driver`` struct parport_driver to be used ”h]”(jž)�”}”(hŒ``__parport_driver``”h]”jB)�”}”(hjh]”hŒ__parport_driver”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´MIhjÿubj¸)�”}”(hhh]”j<)�”}”(hŒ struct parport_driver to be used”h]”hŒ struct parport_driver to be used”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jh´MIhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jh´MIhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hjàubj<)�”}”(hŒ**Description**”h]”j})�”}”(hj@h]”hŒ Description”…”�”}”(hjBh²hh³Nh´Nubah}”(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.h”h´MKhjàubj<)�”}”(hŒã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]”hŒã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().”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´MJhjàubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒparport_yield (C function)”Œc.parport_yield”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ)int parport_yield (struct pardevice *dev)”h]”hè)�”}”(hŒ(int parport_yield(struct pardevice *dev)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒint”h]”hŒint”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j…hj�h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´MˆubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j—hj�h²hh³j–h´Mˆubhî)�”}”(hŒ parport_yield”h]”hô)�”}”(hŒ parport_yield”h]”hŒ parport_yield”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj¨ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj�h²hh³j–h´MˆubhŒdesc_parameterlist”“”)�”}”(hŒ(struct pardevice *dev)”h]”hŒdesc_parameter”“”)�”}”(hŒstruct pardevice *dev”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jÌhjÈubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÈubh)�”}”(hhh]”hô)�”}”(hŒ pardevice”h]”hŒ pardevice”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjëubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”Œ identifier”Œ reftarget”jðŒmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”j Œ ASTIdentifier”“”)�”}”jj®sbŒc.parport_yield”†”asbuh1hhjÈubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÈubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j$hjÈubhô)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjÈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjÂubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj�h²hh³j–h´Mˆubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj}h²hh³j–h´Mˆubah}”(h]”jxah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³j–h´Mˆhjzh²hubj#)�”}”(hhh]”j<)�”}”(hŒ&relinquish a parallel port temporarily”h]”hŒ&relinquish a parallel port temporarily”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´Mˆhj\h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjzh²hh³j–h´Mˆubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jwj7jwj8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(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]”j})�”}”(hj�h]”hŒ Parameters”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´MŒhj{ubj“)�”}”(hhh]”j˜)�”}”(hŒ8``struct pardevice *dev`` a device on the parallel port ”h]”(jž)�”}”(hŒ``struct pardevice *dev``”h]”jB)�”}”(hj h]”hŒstruct pardevice *dev”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M‰hjšubj¸)�”}”(hhh]”j<)�”}”(hŒa device on the parallel port”h]”hŒa device on the parallel port”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jµh´M‰hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jµh´M‰hj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hj{ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjÛh]”hŒ Description”…”�”}”(hjÝh²hh³Nh´Nubah}”(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.h”h´M‹hj{ubj<)�”}”(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.”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´MŠhj{ubj<)�”}”(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.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M�hj{ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ#parport_yield_blocking (C function)”Œc.parport_yield_blocking”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ2int parport_yield_blocking (struct pardevice *dev)”h]”hè)�”}”(hŒ1int parport_yield_blocking(struct pardevice *dev)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj+h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M¥ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj+h²hh³j=h´M¥ubhî)�”}”(hŒparport_yield_blocking”h]”hô)�”}”(hŒparport_yield_blocking”h]”hŒparport_yield_blocking”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjLubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj+h²hh³j=h´M¥ubjÁ)�”}”(hŒ(struct pardevice *dev)”h]”jÇ)�”}”(hŒstruct pardevice *dev”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjhubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjhubh)�”}”(hhh]”hô)�”}”(hŒ pardevice”h]”hŒ pardevice”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj‡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jŒŒmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjRsbŒc.parport_yield_blocking”†”asbuh1hhjhubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjhubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjhubhô)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjhubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjdubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj+h²hh³j=h´M¥ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj'h²hh³j=h´M¥ubah}”(h]”j"ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³j=h´M¥hj$h²hubj#)�”}”(hhh]”j<)�”}”(hŒ&relinquish a parallel port temporarily”h]”hŒ&relinquish a parallel port temporarily”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M¥hjìh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj$h²hh³j=h´M¥ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jj7jj8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(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]”j})�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M©hj ubj“)�”}”(hhh]”j˜)�”}”(hŒ8``struct pardevice *dev`` a device on the parallel port ”h]”(jž)�”}”(hŒ``struct pardevice *dev``”h]”jB)�”}”(hj0h]”hŒstruct pardevice *dev”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M¦hj*ubj¸)�”}”(hhh]”j<)�”}”(hŒa device on the parallel port”h]”hŒa device on the parallel port”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jEh´M¦hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jEh´M¦hj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hj ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjkh]”hŒ Description”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M¨hj ubj<)�”}”(hŒà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]”hŒà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().”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:4: ./include/linux/parport.h”h´M§hj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒparport_wait_event (C function)”Œc.parport_wait_event”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒBint parport_wait_event (struct parport *port, signed long timeout)”h]”hè)�”}”(hŒAint parport_wait_event(struct parport *port, signed long timeout)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj¬h²hh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K1ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj¬h²hh³j¾h´K1ubhî)�”}”(hŒparport_wait_event”h]”hô)�”}”(hŒparport_wait_event”h]”hŒparport_wait_event”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjÍubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj¬h²hh³j¾h´K1ubjÁ)�”}”(hŒ+(struct parport *port, signed long timeout)”h]”(jÇ)�”}”(hŒstruct parport *port”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjéubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjéubh)�”}”(hhh]”hô)�”}”(hŒparport”h]”hŒparport”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjÓsbŒc.parport_wait_event”†”asbuh1hhjéubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjéubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjéubhô)�”}”(hŒport”h]”hŒport”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjéubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjåubjÇ)�”}”(hŒsigned long timeout”h]”(j†)�”}”(hŒsigned”h]”hŒsigned”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj[ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj[ubj†)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj[ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj[ubhô)�”}”(hŒtimeout”h]”hŒtimeout”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjåubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj¬h²hh³j¾h´K1ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj¨h²hh³j¾h´K1ubah}”(h]”j£ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³j¾h´K1hj¥h²hubj#)�”}”(hhh]”j<)�”}”(hŒ$wait for an event on a parallel port”h]”hŒ$wait for an event on a parallel port”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K1hj¾h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¥h²hh³j¾h´K1ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jÙj7jÙj8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hXb**Parameters** ``struct parport *port`` port to wait on ``signed long timeout`` time to wait (in jiffies) **Description** 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]”j})�”}”(hjãh]”hŒ Parameters”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K5hjÝubj“)�”}”(hhh]”(j˜)�”}”(hŒ)``struct parport *port`` port to wait on ”h]”(jž)�”}”(hŒ``struct parport *port``”h]”jB)�”}”(hjh]”hŒstruct parport *port”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K2hjüubj¸)�”}”(hhh]”j<)�”}”(hŒport to wait on”h]”hŒport to wait on”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jh´K2hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjüubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jh´K2hjùubj˜)�”}”(hŒ2``signed long timeout`` time to wait (in jiffies) ”h]”(jž)�”}”(hŒ``signed long timeout``”h]”jB)�”}”(hj;h]”hŒsigned long timeout”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K3hj5ubj¸)�”}”(hhh]”j<)�”}”(hŒtime to wait (in jiffies)”h]”hŒtime to wait (in jiffies)”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jPh´K3hjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jPh´K3hjùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hjÝubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjvh]”hŒ Description”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K5hjÝubjX)�”}”(hX¸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Œœ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.”h]”(hŒThis function waits for up to ”…”�”}”(hj�h²hh³Nh´Nubj})�”}”(hŒ **timeout**”h]”hŒtimeout”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj�ubhŒs jiffies for an interrupt to occur on a parallel port. If the port timeout is set to zero, it returns immediately.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K4hjŒubj<)�”}”(hXIf 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]”hXIf 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.”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K8hjŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³j°h´K4hjÝubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ$parport_wait_peripheral (C function)”Œc.parport_wait_peripheral”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ\int parport_wait_peripheral (struct parport *port, unsigned char mask, unsigned char result)”h]”hè)�”}”(hŒ[int parport_wait_peripheral(struct parport *port, unsigned char mask, unsigned char result)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjâh²hh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K„ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjâh²hh³jôh´K„ubhî)�”}”(hŒparport_wait_peripheral”h]”hô)�”}”(hŒparport_wait_peripheral”h]”hŒparport_wait_peripheral”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjâh²hh³jôh´K„ubjÁ)�”}”(hŒ@(struct parport *port, unsigned char mask, unsigned char result)”h]”(jÇ)�”}”(hŒstruct parport *port”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj ubh)�”}”(hhh]”hô)�”}”(hŒparport”h]”hŒparport”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj> ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jC Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jj sbŒc.parport_wait_peripheral”†”asbuh1hhj ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hj ubhô)�”}”(hŒport”h]”hŒport”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj ubjÇ)�”}”(hŒunsigned char mask”h]”(j†)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj‘ ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£ h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj‘ ubj†)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj‘ ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿ h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj‘ ubhô)�”}”(hŒmask”h]”hŒmask”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj‘ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj ubjÇ)�”}”(hŒunsigned char result”h]”(j†)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjâ ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjâ ubj†)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjâ ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjâ ubhô)�”}”(hŒresult”h]”hŒresult”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjâ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj ubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjâh²hh³jôh´K„ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjÞh²hh³jôh´K„ubah}”(h]”jÙah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jôh´K„hjÛh²hubj#)�”}”(hhh]”j<)�”}”(hŒ'wait for status lines to change in 35ms”h]”hŒ'wait for status lines to change in 35ms”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K„hjE h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÛh²hh³jôh´K„ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j` j7j` j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hX0**Parameters** ``struct parport *port`` port to watch ``unsigned char mask`` status lines to watch ``unsigned char result`` desired values of chosen status lines **Description** 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]”j})�”}”(hjj h]”hŒ Parameters”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjh ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´Kˆhjd ubj“)�”}”(hhh]”(j˜)�”}”(hŒ'``struct parport *port`` port to watch ”h]”(jž)�”}”(hŒ``struct parport *port``”h]”jB)�”}”(hj‰ h]”hŒstruct parport *port”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj‡ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K…hjƒ ubj¸)�”}”(hhh]”j<)�”}”(hŒ port to watch”h]”hŒ port to watch”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jž h´K…hjŸ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjƒ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jž h´K…hj€ ubj˜)�”}”(hŒ-``unsigned char mask`` status lines to watch ”h]”(jž)�”}”(hŒ``unsigned char mask``”h]”jB)�”}”(hj h]”hŒunsigned char mask”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÀ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K†hj¼ ubj¸)�”}”(hhh]”j<)�”}”(hŒstatus lines to watch”h]”hŒstatus lines to watch”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j× h´K†hjØ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj¼ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j× h´K†hj€ ubj˜)�”}”(hŒ?``unsigned char result`` desired values of chosen status lines ”h]”(jž)�”}”(hŒ``unsigned char result``”h]”jB)�”}”(hjû h]”hŒunsigned char result”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjù ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K‡hjõ ubj¸)�”}”(hhh]”j<)�”}”(hŒ%desired values of chosen status lines”h]”hŒ%desired values of chosen status lines”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j h´K‡hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjõ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j h´K‡hj€ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hjd ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hj6 h]”hŒ Description”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj4 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K‰hjd ubjX)�”}”(hX(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<)�”}”(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]”(hŒ¼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 ”…”�”}”(hjP h²hh³Nh´Nubj})�”}”(hŒ**mask**”h]”hŒmask”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjP ubhŒ and ”…”�”}”(hjP h²hh³Nh´Nubj})�”}”(hŒ **result**”h]”hŒresult”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjP ubhŒO parameters are bitmasks, with the bits defined by the constants in parport.h: ”…”�”}”(hjP h²hh³Nh´NubjB)�”}”(hŒ``PARPORT_STATUS_BUSY``”h]”hŒPARPORT_STATUS_BUSY”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjP ubhŒ , and so on.”…”�”}”(hjP h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´KˆhjL 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• h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K�hjL ubj<)�”}”(hŒ�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]”hŒ�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.”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´K–hjL ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³j” h´Kˆhjd ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒparport_negotiate (C function)”Œc.parport_negotiate”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ6int parport_negotiate (struct parport *port, int mode)”h]”hè)�”}”(hŒ5int parport_negotiate(struct parport *port, int mode)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hjÙ h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjÕ h²hh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M/ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÕ h²hh³jç h´M/ubhî)�”}”(hŒparport_negotiate”h]”hô)�”}”(hŒparport_negotiate”h]”hŒparport_negotiate”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjö ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjÕ h²hh³jç h´M/ubjÁ)�”}”(hŒ (struct parport *port, int mode)”h]”(jÇ)�”}”(hŒstruct parport *port”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj ubh)�”}”(hhh]”hô)�”}”(hŒparport”h]”hŒparport”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj1 ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j6 Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjü sbŒc.parport_negotiate”†”asbuh1hhj ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hj ubhô)�”}”(hŒport”h]”hŒport”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj ubjÇ)�”}”(hŒint mode”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj„ ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj– h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj„ ubhô)�”}”(hŒmode”h]”hŒmode”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj„ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj ubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjÕ h²hh³jç h´M/ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjÑ h²hh³jç h´M/ubah}”(h]”jÌ ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jç h´M/hjÎ h²hubj#)�”}”(hhh]”j<)�”}”(hŒnegotiate an IEEE 1284 mode”h]”hŒnegotiate an IEEE 1284 mode”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M/hjË h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÎ h²hh³jç h´M/ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jæ j7jæ j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hX**Parameters** ``struct parport *port`` port to use ``int mode`` mode to negotiate to **Description** 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]”j})�”}”(hjð h]”hŒ Parameters”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjî ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M3hjê ubj“)�”}”(hhh]”(j˜)�”}”(hŒ%``struct parport *port`` port to use ”h]”(jž)�”}”(hŒ``struct parport *port``”h]”jB)�”}”(hj h]”hŒstruct parport *port”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M0hj ubj¸)�”}”(hhh]”j<)�”}”(hŒ port to use”h]”hŒ port to use”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j$ h´M0hj% ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j$ h´M0hj ubj˜)�”}”(hŒ"``int mode`` mode to negotiate to ”h]”(jž)�”}”(hŒ ``int mode``”h]”jB)�”}”(hjH h]”hŒint mode”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjF ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M1hjB ubj¸)�”}”(hhh]”j<)�”}”(hŒmode to negotiate to”h]”hŒmode to negotiate to”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j] h´M1hj^ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjB ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j] h´M1hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hjê ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjƒ h]”hŒ Description”…”�”}”(hj… h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M3hjê ubjX)�”}”(hXuUse 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Œ¡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``.”h]”(hŒCUse this to negotiate to a particular IEEE 1284 transfer mode. The ”…”�”}”(hj� h²hh³Nh´Nubj})�”}”(hŒ**mode**”h]”hŒmode”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj� ubhŒ@ parameter should be one of the constants in parport.h starting ”…”�”}”(hj� h²hh³Nh´NubjB)�”}”(hŒ``IEEE1284_MODE_xxx``”h]”hŒIEEE1284_MODE_xxx”…”�”}”(hj· h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj� ubhŒ.”…”�”}”(hj� h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M2hj™ ubj<)�”}”(hŒÒ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]”hŒÒ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.”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M6hj™ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³jÏ h´M2hjê ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒparport_write (C function)”Œc.parport_write”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒLssize_t parport_write (struct parport *port, const void *buffer, size_t len)”h]”hè)�”}”(hŒKssize_t parport_write(struct parport *port, const void *buffer, size_t len)”h]”(h)�”}”(hhh]”hô)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jŒ parport_write”sbŒc.parport_write”†”asbuh1hhjh²hh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M6ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjh²hh³j)h´M6ubhî)�”}”(hŒ parport_write”h]”hô)�”}”(hj&h]”hŒ parport_write”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj8ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjh²hh³j)h´M6ubjÁ)�”}”(hŒ6(struct parport *port, const void *buffer, size_t len)”h]”(jÇ)�”}”(hŒstruct parport *port”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjSubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjSubh)�”}”(hhh]”hô)�”}”(hŒparport”h]”hŒparport”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jwŒmodname”NŒ classname”Njj )�”}”j]”j$Œc.parport_write”†”asbuh1hhjSubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjSubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjSubhô)�”}”(hŒport”h]”hŒport”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjOubjÇ)�”}”(hŒconst void *buffer”h]”(jÍ)�”}”(hŒconst”h]”hŒconst”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjÃubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÃubj†)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjÃubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÃubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjÃubhô)�”}”(hŒbuffer”h]”hŒbuffer”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjÃubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjOubjÇ)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”hô)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j*Œmodname”NŒ classname”Njj )�”}”j]”j$Œc.parport_write”†”asbuh1hhj!ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj!ubhô)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjOubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjh²hh³j)h´M6ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjý h²hh³j)h´M6ubah}”(h]”jø ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³j)h´M6hjú h²hubj#)�”}”(hhh]”j<)�”}”(hŒ(write a block of data to a parallel port”h]”hŒ(write a block of data to a parallel port”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M6hj{h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjú h²hh³j)h´M6ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j–j7j–j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hX•**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 **Description** 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]”j})�”}”(hj h]”hŒ Parameters”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjžubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M:hjšubj“)�”}”(hhh]”(j˜)�”}”(hŒ*``struct parport *port`` port to write to ”h]”(jž)�”}”(hŒ``struct parport *port``”h]”jB)�”}”(hj¿h]”hŒstruct parport *port”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M7hj¹ubj¸)�”}”(hhh]”j<)�”}”(hŒport to write to”h]”hŒport to write to”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jÔh´M7hjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jÔh´M7hj¶ubj˜)�”}”(hŒ5``const void *buffer`` data buffer (in kernel space) ”h]”(jž)�”}”(hŒ``const void *buffer``”h]”jB)�”}”(hjøh]”hŒconst void *buffer”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M8hjòubj¸)�”}”(hhh]”j<)�”}”(hŒdata buffer (in kernel space)”h]”hŒdata buffer (in kernel space)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j h´M8hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjòubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j h´M8hj¶ubj˜)�”}”(hŒ3``size_t len`` number of bytes of data to transfer ”h]”(jž)�”}”(hŒ``size_t len``”h]”jB)�”}”(hj1h]”hŒ size_t len”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M9hj+ubj¸)�”}”(hhh]”j<)�”}”(hŒ#number of bytes of data to transfer”h]”hŒ#number of bytes of data to transfer”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jFh´M9hjGubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jFh´M9hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hjšubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjlh]”hŒ Description”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjjubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M;hjšubjX)�”}”(hX±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Œé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).”h]”(hŒThis will write up to ”…”�”}”(hj†h²hh³Nh´Nubj})�”}”(hŒ**len**”h]”hŒlen”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj†ubhŒ bytes of ”…”�”}”(hj†h²hh³Nh´Nubj})�”}”(hŒ **buffer**”h]”hŒbuffer”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj†ubhŒ¸ 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).”…”�”}”(hj†h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M:hj‚ubj<)�”}”(hŒaIt 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 ”…”�”}”(hj¹h²hh³Nh´Nubj})�”}”(hŒ**len**”h]”hŒlen”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¹ubhŒ bytes of ”…”�”}”(hj¹h²hh³Nh´Nubj})�”}”(hŒ **buffer**”h]”hŒbuffer”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¹ubhŒ are valid.”…”�”}”(hj¹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M?hj‚ubj<)�”}”(hŒcThis function returns the number of bytes transferred (if zero or positive), or else an error code.”h]”hŒcThis function returns the number of bytes transferred (if zero or positive), or else an error code.”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´MBhj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³j¸h´M:hjšubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒparport_read (C function)”Œc.parport_read”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒEssize_t parport_read (struct parport *port, void *buffer, size_t len)”h]”hè)�”}”(hŒDssize_t parport_read(struct parport *port, void *buffer, size_t len)”h]”(h)�”}”(hhh]”hô)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j&Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jŒ parport_read”sbŒc.parport_read”†”asbuh1hhjh²hh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M‘ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjh²hh³jEh´M‘ubhî)�”}”(hŒ parport_read”h]”hô)�”}”(hjBh]”hŒ parport_read”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjTubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjh²hh³jEh´M‘ubjÁ)�”}”(hŒ0(struct parport *port, void *buffer, size_t len)”h]”(jÇ)�”}”(hŒstruct parport *port”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjoubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjoubh)�”}”(hhh]”hô)�”}”(hŒparport”h]”hŒparport”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjŽubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j“Œmodname”NŒ classname”Njj )�”}”j]”j@Œc.parport_read”†”asbuh1hhjoubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjoubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjoubhô)�”}”(hŒport”h]”hŒport”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjkubjÇ)�”}”(hŒ void *buffer”h]”(j†)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjßubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjßubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjßubhô)�”}”(hŒbuffer”h]”hŒbuffer”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjßubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjkubjÇ)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”hô)�”}”(hŒsize_t”•h]”hŒsize_t”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j*Œmodname”NŒ classname”Njj )�”}”j]”j@Œc.parport_read”†”asbuh1hhj!ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj!ubhô)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjkubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjh²hh³jEh´M‘ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjh²hh³jEh´M‘ubah}”(h]”jah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jEh´M‘hjh²hubj#)�”}”(hhh]”j<)�”}”(hŒ)read a block of data from a parallel port”h]”hŒ)read a block of data from a parallel port”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M‘hj{h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjh²hh³jEh´M‘ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j–j7j–j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hXŸ**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 **Description** 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]”j})�”}”(hj h]”hŒ Parameters”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjžubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M•hjšubj“)�”}”(hhh]”(j˜)�”}”(hŒ+``struct parport *port`` port to read from ”h]”(jž)�”}”(hŒ``struct parport *port``”h]”jB)�”}”(hj¿h]”hŒstruct parport *port”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M’hj¹ubj¸)�”}”(hhh]”j<)�”}”(hŒport to read from”h]”hŒport to read from”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jÔh´M’hjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jÔh´M’hj¶ubj˜)�”}”(hŒ/``void *buffer`` data buffer (in kernel space) ”h]”(jž)�”}”(hŒ``void *buffer``”h]”jB)�”}”(hjøh]”hŒ void *buffer”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M“hjòubj¸)�”}”(hhh]”j<)�”}”(hŒdata buffer (in kernel space)”h]”hŒdata buffer (in kernel space)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j h´M“hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjòubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j h´M“hj¶ubj˜)�”}”(hŒ3``size_t len`` number of bytes of data to transfer ”h]”(jž)�”}”(hŒ``size_t len``”h]”jB)�”}”(hj1h]”hŒ size_t len”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M”hj+ubj¸)�”}”(hhh]”j<)�”}”(hŒ#number of bytes of data to transfer”h]”hŒ#number of bytes of data to transfer”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jFh´M”hjGubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jFh´M”hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hjšubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjlh]”hŒ Description”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjjubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M–hjšubjX)�”}”(hXÀ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Œè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).”h]”(hŒThis will read up to ”…”�”}”(hj†h²hh³Nh´Nubj})�”}”(hŒ**len**”h]”hŒlen”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj†ubhŒ bytes of ”…”�”}”(hj†h²hh³Nh´Nubj})�”}”(hŒ **buffer**”h]”hŒbuffer”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj†ubhŒ¸ 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).”…”�”}”(hj†h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M•hj‚ubj<)�”}”(hŒqIt 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 ”…”�”}”(hj¹h²hh³Nh´Nubj})�”}”(hŒ**len**”h]”hŒlen”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¹ubhŒ bytes of ”…”�”}”(hj¹h²hh³Nh´Nubj})�”}”(hŒ **buffer**”h]”hŒbuffer”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¹ubhŒ are available to write to.”…”�”}”(hj¹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´Mšhj‚ubj<)�”}”(hŒcThis function returns the number of bytes transferred (if zero or positive), or else an error code.”h]”hŒcThis function returns the number of bytes transferred (if zero or positive), or else an error code.”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´M�hj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³j¸h´M•hjšubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ parport_set_timeout (C function)”Œc.parport_set_timeout”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒAlong parport_set_timeout (struct pardevice *dev, long inactivity)”h]”hè)�”}”(hŒ@long parport_set_timeout(struct pardevice *dev, long inactivity)”h]”(j†)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjh²hh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´Mòubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjh²hh³j/h´Mòubhî)�”}”(hŒparport_set_timeout”h]”hô)�”}”(hŒparport_set_timeout”h]”hŒparport_set_timeout”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj>ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjh²hh³j/h´MòubjÁ)�”}”(hŒ((struct pardevice *dev, long inactivity)”h]”(jÇ)�”}”(hŒstruct pardevice *dev”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjZubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjZubh)�”}”(hhh]”hô)�”}”(hŒ pardevice”h]”hŒ pardevice”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjyubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j~Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjDsbŒc.parport_set_timeout”†”asbuh1hhjZubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjZubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjZubhô)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjVubjÇ)�”}”(hŒlong inactivity”h]”(j†)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjÌubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÌubhô)�”}”(hŒ inactivity”h]”hŒ inactivity”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjÌubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjVubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjh²hh³j/h´Mòubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjh²hh³j/h´Mòubah}”(h]”jah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³j/h´Mòhjh²hubj#)�”}”(hhh]”j<)�”}”(hŒ'set the inactivity timeout for a device”h]”hŒ'set the inactivity timeout for a device”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´Mòhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjh²hh³j/h´Mòubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j.j7j.j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hXî**Parameters** ``struct pardevice *dev`` device on a port ``long inactivity`` inactivity timeout (in jiffies) **Description** 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]”j})�”}”(hj8h]”hŒ Parameters”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´Möhj2ubj“)�”}”(hhh]”(j˜)�”}”(hŒ+``struct pardevice *dev`` device on a port ”h]”(jž)�”}”(hŒ``struct pardevice *dev``”h]”jB)�”}”(hjWh]”hŒstruct pardevice *dev”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´MóhjQubj¸)�”}”(hhh]”j<)�”}”(hŒdevice on a port”h]”hŒdevice on a port”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jlh´Móhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jlh´MóhjNubj˜)�”}”(hŒ4``long inactivity`` inactivity timeout (in jiffies) ”h]”(jž)�”}”(hŒ``long inactivity``”h]”jB)�”}”(hj�h]”hŒlong inactivity”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´MôhjŠubj¸)�”}”(hhh]”j<)�”}”(hŒinactivity timeout (in jiffies)”h]”hŒinactivity timeout (in jiffies)”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j¥h´Môhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j¥h´MôhjNubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hj2ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjËh]”hŒ Description”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´Möhj2ubjX)�”}”(hXEThis 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ŒÌ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.”h]”hŒÌ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.”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´Mõhjáubj<)�”}”(hŒ4The return value is the previous inactivity timeout.”h]”hŒ4The return value is the previous inactivity timeout.”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´Múhjáubj<)�”}”(hŒAAny callers of parport_wait_event() for this device are woken up.”h]”hŒAAny callers of parport_wait_event() for this device are woken up.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:7: ./drivers/parport/ieee1284.c”h´Mühjáubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³jóh´Mõhj2ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ&__parport_register_driver (C function)”Œc.__parport_register_driver”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒfint __parport_register_driver (struct parport_driver *drv, struct module *owner, const char *mod_name)”h]”hè)�”}”(hŒeint __parport_register_driver(struct parport_driver *drv, struct module *owner, const char *mod_name)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj4h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Kñubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj4h²hh³jFh´Kñubhî)�”}”(hŒ__parport_register_driver”h]”hô)�”}”(hŒ__parport_register_driver”h]”hŒ__parport_register_driver”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjUubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj4h²hh³jFh´KñubjÁ)�”}”(hŒH(struct parport_driver *drv, struct module *owner, const char *mod_name)”h]”(jÇ)�”}”(hŒstruct parport_driver *drv”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjqubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjqubh)�”}”(hhh]”hô)�”}”(hŒparport_driver”h]”hŒparport_driver”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j•Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jj[sbŒc.__parport_register_driver”†”asbuh1hhjqubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjqubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjqubhô)�”}”(hŒdrv”h]”hŒdrv”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjqubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjmubjÇ)�”}”(hŒstruct module *owner”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjãubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjãubh)�”}”(hhh]”hô)�”}”(hŒmodule”h]”hŒmodule”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jŒmodname”NŒ classname”Njj )�”}”j]”j¯Œc.__parport_register_driver”†”asbuh1hhjãubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjãubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjãubhô)�”}”(hŒowner”h]”hŒowner”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjmubjÇ)�”}”(hŒconst char *mod_name”h]”(jÍ)�”}”(hjÉh]”hŒconst”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjSubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjSubj†)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjSubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjSubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjSubhô)�”}”(hŒmod_name”h]”hŒmod_name”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjmubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj4h²hh³jFh´Kñubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj0h²hh³jFh´Kñubah}”(h]”j+ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jFh´Kñhj-h²hubj#)�”}”(hhh]”j<)�”}”(hŒ®ister a parallel port device driver”h]”hŒ®ister a parallel port device driver”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´KñhjÂh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj-h²hh³jFh´Kñubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jÝj7jÝj8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hX-**Parameters** ``struct parport_driver *drv`` structure describing the driver ``struct module *owner`` owner module of drv ``const char *mod_name`` module name string **Description** 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]”j})�”}”(hjçh]”hŒ Parameters”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjåubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Kõhjáubj“)�”}”(hhh]”(j˜)�”}”(hŒ?``struct parport_driver *drv`` structure describing the driver ”h]”(jž)�”}”(hŒ``struct parport_driver *drv``”h]”jB)�”}”(hjh]”hŒstruct parport_driver *drv”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Kòhjubj¸)�”}”(hhh]”j<)�”}”(hŒstructure describing the driver”h]”hŒstructure describing the driver”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jh´Kòhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jh´Kòhjýubj˜)�”}”(hŒ-``struct module *owner`` owner module of drv ”h]”(jž)�”}”(hŒ``struct module *owner``”h]”jB)�”}”(hj?h]”hŒstruct module *owner”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Kóhj9ubj¸)�”}”(hhh]”j<)�”}”(hŒowner module of drv”h]”hŒowner module of drv”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jTh´KóhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jTh´Kóhjýubj˜)�”}”(hŒ,``const char *mod_name`` module name string ”h]”(jž)�”}”(hŒ``const char *mod_name``”h]”jB)�”}”(hjxh]”hŒconst char *mod_name”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Kôhjrubj¸)�”}”(hhh]”j<)�”}”(hŒmodule name string”h]”hŒmodule name string”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j�h´KôhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjrubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j�h´Kôhjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hjáubj<)�”}”(hŒ**Description**”h]”j})�”}”(hj³h]”hŒ Description”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´KöhjáubjX)�”}”(hX 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Œ¢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.”h]”hŒ¢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.”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´KõhjÉubj<)�”}”(hŒGIf devmodel is true then the new device model is used for registration.”h]”hŒGIf devmodel is true then the new device model is used for registration.”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´KùhjÉubj<)�”}”(hŒ}The **drv** structure is allocated by the caller and must not be deallocated until after calling parport_unregister_driver().”h]”(hŒThe ”…”�”}”(hjëh²hh³Nh´Nubj})�”}”(hŒ**drv**”h]”hŒdrv”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjëubhŒr structure is allocated by the caller and must not be deallocated until after calling parport_unregister_driver().”…”�”}”(hjëh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´KühjÉubj<)�”}”(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.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´KÿhjÉubj<)�”}”(hŒÚ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.”h]”hŒÜ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.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´MhjÉubj<)�”}”(hŒ‚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]”hŒ‚Returns 0 on success. The non device model will always succeeds. but the new device model can fail and will return the error code.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M hjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³jÛh´Kõhjáubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ&parport_unregister_driver (C function)”Œc.parport_unregister_driver”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ;void parport_unregister_driver (struct parport_driver *drv)”h]”hè)�”}”(hŒ:void parport_unregister_driver(struct parport_driver *drv)”h]”(j†)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj[h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M>ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj[h²hh³jmh´M>ubhî)�”}”(hŒparport_unregister_driver”h]”hô)�”}”(hŒparport_unregister_driver”h]”hŒparport_unregister_driver”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj|ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj[h²hh³jmh´M>ubjÁ)�”}”(hŒ(struct parport_driver *drv)”h]”jÇ)�”}”(hŒstruct parport_driver *drv”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj˜ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj˜ubh)�”}”(hhh]”hô)�”}”(hŒparport_driver”h]”hŒparport_driver”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj·ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j¼Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jj‚sbŒc.parport_unregister_driver”†”asbuh1hhj˜ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj˜ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hj˜ubhô)�”}”(hŒdrv”h]”hŒdrv”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj˜ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj”ubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj[h²hh³jmh´M>ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjWh²hh³jmh´M>ubah}”(h]”jRah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jmh´M>hjTh²hubj#)�”}”(hhh]”j<)�”}”(hŒ(deregister a parallel port device driver”h]”hŒ(deregister a parallel port device driver”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M>hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjTh²hh³jmh´M>ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j7j7j7j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hXb**Parameters** ``struct parport_driver *drv`` structure describing the driver that was given to parport_register_driver() **Description** 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]”j})�”}”(hjAh]”hŒ Parameters”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´MBhj;ubj“)�”}”(hhh]”j˜)�”}”(hŒk``struct parport_driver *drv`` structure describing the driver that was given to parport_register_driver() ”h]”(jž)�”}”(hŒ``struct parport_driver *drv``”h]”jB)�”}”(hj`h]”hŒstruct parport_driver *drv”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M@hjZubj¸)�”}”(hhh]”j<)�”}”(hŒKstructure describing the driver that was given to parport_register_driver()”h]”hŒKstructure describing the driver that was given to parport_register_driver()”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M?hjvubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³juh´M@hjWubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hj;ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjœh]”hŒ Description”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjšubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´MBhj;ubjX)�”}”(hX©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Œ’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.”h]”hŒ’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.”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´MAhj²ubj<)�”}”(hŒ¤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.”h]”hŒ¦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.”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´MEhj²ubj<)�”}”(hŒoAll the driver's attach() and detach() calls are guaranteed to have finished by the time this function returns.”h]”hŒqAll the driver’s attach() and detach() calls are guaranteed to have finished by the time this function returns.”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´MIhj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³jÄh´MAhj;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒparport_get_port (C function)”Œc.parport_get_port”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ8struct parport * parport_get_port (struct parport *port)”h]”hè)�”}”(hŒ6struct parport *parport_get_port(struct parport *port)”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjh²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mkubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjh²hh³jh´Mkubh)�”}”(hhh]”hô)�”}”(hŒparport”h]”hŒparport”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j*Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jŒparport_get_port”sbŒc.parport_get_port”†”asbuh1hhjh²hh³jh´Mkubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjh²hh³jh´Mkubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjh²hh³jh´Mkubhî)�”}”(hŒparport_get_port”h]”hô)�”}”(hjFh]”hŒparport_get_port”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjdubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjh²hh³jh´MkubjÁ)�”}”(hŒ(struct parport *port)”h]”jÇ)�”}”(hŒstruct parport *port”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjubh)�”}”(hhh]”hô)�”}”(hŒparport”h]”hŒparport”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j£Œmodname”NŒ classname”Njj )�”}”j]”jDŒc.parport_get_port”†”asbuh1hhjubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjubhô)�”}”(hŒport”h]”hŒport”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj{ubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjh²hh³jh´Mkubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjh²hh³jh´Mkubah}”(h]”jüah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jh´Mkhjþh²hubj#)�”}”(hhh]”j<)�”}”(hŒ"increment a port's reference count”h]”hŒ$increment a port’s reference count”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mkhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjþh²hh³jh´Mkubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jj7jj8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hŒ´**Parameters** ``struct parport *port`` the port **Description** This ensures that a struct parport pointer remains valid until the matching parport_put_port() call.”h]”(j<)�”}”(hŒ**Parameters**”h]”j})�”}”(hj&h]”hŒ Parameters”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mohj ubj“)�”}”(hhh]”j˜)�”}”(hŒ"``struct parport *port`` the port ”h]”(jž)�”}”(hŒ``struct parport *port``”h]”jB)�”}”(hjEh]”hŒstruct parport *port”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mlhj?ubj¸)�”}”(hhh]”j<)�”}”(hŒthe port”h]”hŒthe port”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jZh´Mlhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jZh´Mlhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hj ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hj€h]”hŒ Description”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mnhj ubjX)�”}”(hŒdThis ensures that a struct parport pointer remains valid until the matching parport_put_port() call.”h]”j<)�”}”(hŒdThis ensures that a struct parport pointer remains valid until the matching parport_put_port() call.”h]”hŒdThis ensures that a struct parport pointer remains valid until the matching parport_put_port() call.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mmhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jWh³j¨h´Mmhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒparport_put_port (C function)”Œc.parport_put_port”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ,void parport_put_port (struct parport *port)”h]”hè)�”}”(hŒ+void parport_put_port(struct parport *port)”h]”(j†)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjËh²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M�ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjËh²hh³jÝh´M�ubhî)�”}”(hŒparport_put_port”h]”hô)�”}”(hŒparport_put_port”h]”hŒparport_put_port”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjìubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjËh²hh³jÝh´M�ubjÁ)�”}”(hŒ(struct parport *port)”h]”jÇ)�”}”(hŒstruct parport *port”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjubh)�”}”(hhh]”hô)�”}”(hŒparport”h]”hŒparport”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j,Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjòsbŒc.parport_put_port”†”asbuh1hhjubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjubhô)�”}”(hŒport”h]”hŒport”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjËh²hh³jÝh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjÇh²hh³jÝh´M�ubah}”(h]”jÂah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jÝh´M�hjÄh²hubj#)�”}”(hhh]”j<)�”}”(hŒ"decrement a port's reference count”h]”hŒ$decrement a port’s reference count”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M�hjŒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÄh²hh³jÝh´M�ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j§j7j§j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hX **Parameters** ``struct parport *port`` the port **Description** 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]”j})�”}”(hj±h]”hŒ Parameters”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M…hj«ubj“)�”}”(hhh]”j˜)�”}”(hŒ"``struct parport *port`` the port ”h]”(jž)�”}”(hŒ``struct parport *port``”h]”jB)�”}”(hjÐh]”hŒstruct parport *port”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M‚hjÊubj¸)�”}”(hhh]”j<)�”}”(hŒthe port”h]”hŒthe port”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jåh´M‚hjæubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jåh´M‚hjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hj«ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hj h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M„hj«ubjX)�”}”(hŒ·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Œ·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]”hŒ·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.”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mƒhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jWh³j3h´Mƒhj«ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ"parport_register_port (C function)”Œc.parport_register_port”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒmstruct parport * parport_register_port (unsigned long base, int irq, int dma, struct parport_operations *ops)”h]”hè)�”}”(hŒkstruct parport *parport_register_port(unsigned long base, int irq, int dma, struct parport_operations *ops)”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjVh²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M�ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjVh²hh³jgh´M�ubh)�”}”(hhh]”hô)�”}”(hŒparport”h]”hŒparport”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjvubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j{Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jŒparport_register_port”sbŒc.parport_register_port”†”asbuh1hhjVh²hh³jgh´M�ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjVh²hh³jgh´M�ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjVh²hh³jgh´M�ubhî)�”}”(hŒparport_register_port”h]”hô)�”}”(hj—h]”hŒparport_register_port”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjµubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjVh²hh³jgh´M�ubjÁ)�”}”(hŒF(unsigned long base, int irq, int dma, struct parport_operations *ops)”h]”(jÇ)�”}”(hŒunsigned long base”h]”(j†)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjÐubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÐubj†)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjÐubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÐubhô)�”}”(hŒbase”h]”hŒbase”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjÐubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjÌubjÇ)�”}”(hŒint irq”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj!ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj!ubhô)�”}”(hŒirq”h]”hŒirq”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjÌubjÇ)�”}”(hŒint dma”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjVubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjVubhô)�”}”(hŒdma”h]”hŒdma”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjVubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjÌubjÇ)�”}”(hŒstruct parport_operations *ops”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj‹ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj‹ubh)�”}”(hhh]”hô)�”}”(hŒparport_operations”h]”hŒparport_operations”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j¯Œmodname”NŒ classname”Njj )�”}”j]”j•Œc.parport_register_port”†”asbuh1hhj‹ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj‹ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hj‹ubhô)�”}”(hŒops”h]”hŒops”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj‹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjÌubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjVh²hh³jgh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjRh²hh³jgh´M�ubah}”(h]”jMah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jgh´M�hjOh²hubj#)�”}”(hhh]”j<)�”}”(hŒregister a parallel port”h]”hŒregister a parallel port”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M�hj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjOh²hh³jgh´M�ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j( j7j( j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(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 **Description** 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]”j})�”}”(hj2 h]”hŒ Parameters”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj0 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M”hj, ubj“)�”}”(hhh]”(j˜)�”}”(hŒ(``unsigned long base`` base I/O address ”h]”(jž)�”}”(hŒ``unsigned long base``”h]”jB)�”}”(hjQ h]”hŒunsigned long base”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjO ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M‘hjK ubj¸)�”}”(hhh]”j<)�”}”(hŒbase I/O address”h]”hŒbase I/O address”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jf h´M‘hjg ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjK ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jf h´M‘hjH ubj˜)�”}”(hŒ``int irq`` IRQ line ”h]”(jž)�”}”(hŒ ``int irq``”h]”jB)�”}”(hjŠ h]”hŒint irq”…”�”}”(hjŒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjˆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M’hj„ ubj¸)�”}”(hhh]”j<)�”}”(hŒIRQ line”h]”hŒIRQ line”…”�”}”(hj£ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jŸ h´M’hj  ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj„ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jŸ h´M’hjH ubj˜)�”}”(hŒ``int dma`` DMA channel ”h]”(jž)�”}”(hŒ ``int dma``”h]”jB)�”}”(hjà h]”hŒint dma”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÁ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M“hj½ ubj¸)�”}”(hhh]”j<)�”}”(hŒ DMA channel”h]”hŒ DMA channel”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jØ h´M“hjÙ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj½ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jØ h´M“hjH ubj˜)�”}”(hŒZ``struct parport_operations *ops`` pointer to the port driver's port operations structure ”h]”(jž)�”}”(hŒ"``struct parport_operations *ops``”h]”jB)�”}”(hjü h]”hŒstruct parport_operations *ops”…”�”}”(hjþ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjú ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M”hjö ubj¸)�”}”(hhh]”j<)�”}”(hŒ6pointer to the port driver's port operations structure”h]”hŒ8pointer to the port driver’s port operations structure”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j!h´M”hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjö ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j!h´M”hjH ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hj, ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hj7!h]”hŒ Description”…”�”}”(hj9!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj5!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M–hj, ubjX)�”}”(hX½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<)�”}”(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]”(hŒ 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 ”…”�”}”(hjQ!h²hh³Nh´Nubj})�”}”(hŒ**base**”h]”hŒbase”…”�”}”(hjY!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjQ!ubhŒ, ”…”�”}”(hjQ!h²hh³Nh´Nubj})�”}”(hŒ**irq**”h]”hŒirq”…”�”}”(hjk!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjQ!ubhŒ, and ”…”�”}”(hjQ!h²hh³Nh´Nubj})�”}”(hŒ**dma**”h]”hŒdma”…”�”}”(hj}!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjQ!ubhX\ 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.”…”�”}”(hjQ!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M•hjM!ubj<)�”}”(hŒÐ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().”h]”hŒÐ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().”…”�”}”(hj–!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´MŸhjM!ubj<)�”}”(hŒsThe **ops** structure is allocated by the caller, and must not be deallocated before calling parport_remove_port().”h]”(hŒThe ”…”�”}”(hj¥!h²hh³Nh´Nubj})�”}”(hŒ**ops**”h]”hŒops”…”�”}”(hj­!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¥!ubhŒh structure is allocated by the caller, and must not be deallocated before calling parport_remove_port().”…”�”}”(hj¥!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M¤hjM!ubj<)�”}”(hŒ^If there is no memory to allocate a new parport structure, this function will return ``NULL``.”h]”(hŒUIf there is no memory to allocate a new parport structure, this function will return ”…”�”}”(hjÆ!h²hh³Nh´NubjB)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjÎ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÆ!ubhŒ.”…”�”}”(hjÆ!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M§hjM!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³j•!h´M•hj, ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ"parport_announce_port (C function)”Œc.parport_announce_port”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ1void parport_announce_port (struct parport *port)”h]”hè)�”}”(hŒ0void parport_announce_port(struct parport *port)”h]”(j†)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj "h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj "h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mñubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj "h²hh³j"h´Mñubhî)�”}”(hŒparport_announce_port”h]”hô)�”}”(hŒparport_announce_port”h]”hŒparport_announce_port”…”�”}”(hj."h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj*"ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj "h²hh³j"h´MñubjÁ)�”}”(hŒ(struct parport *port)”h]”jÇ)�”}”(hŒstruct parport *port”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjJ"h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjF"ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW"h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjF"ubh)�”}”(hhh]”hô)�”}”(hŒparport”h]”hŒparport”…”�”}”(hjh"h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhje"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jj"Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jj0"sbŒc.parport_announce_port”†”asbuh1hhjF"ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ"h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjF"ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj–"h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjF"ubhô)�”}”(hŒport”h]”hŒport”…”�”}”(hj£"h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjF"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjB"ubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj "h²hh³j"h´Mñubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj"h²hh³j"h´Mñubah}”(h]”j"ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³j"h´Mñhj"h²hubj#)�”}”(hhh]”j<)�”}”(hŒ)tell device drivers about a parallel port”h]”hŒ)tell device drivers about a parallel port”…”�”}”(hjÍ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´MñhjÊ"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj"h²hh³j"h´Mñubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jå"j7jå"j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hXÁ**Parameters** ``struct parport *port`` parallel port to announce **Description** 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]”j})�”}”(hjï"h]”hŒ Parameters”…”�”}”(hjñ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjí"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mõhjé"ubj“)�”}”(hhh]”j˜)�”}”(hŒ3``struct parport *port`` parallel port to announce ”h]”(jž)�”}”(hŒ``struct parport *port``”h]”jB)�”}”(hj#h]”hŒstruct parport *port”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj #ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mòhj#ubj¸)�”}”(hhh]”j<)�”}”(hŒparallel port to announce”h]”hŒparallel port to announce”…”�”}”(hj'#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j##h´Mòhj$#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j##h´Mòhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hjé"ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjI#h]”hŒ Description”…”�”}”(hjK#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjG#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Môhjé"ubjX)�”}”(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]”j<)�”}”(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 ”…”�”}”(hjc#h²hh³Nh´Nubj})�”}”(hŒ**port**”h]”hŒport”…”�”}”(hjk#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjc#ubhŒ as the parameter.”…”�”}”(hjc#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Móhj_#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jWh³jƒ#h´Móhjé"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ parport_remove_port (C function)”Œc.parport_remove_port”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ/void parport_remove_port (struct parport *port)”h]”hè)�”}”(hŒ.void parport_remove_port(struct parport *port)”h]”(j†)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjª#h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj¦#h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M!ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹#h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj¦#h²hh³j¸#h´M!ubhî)�”}”(hŒparport_remove_port”h]”hô)�”}”(hŒparport_remove_port”h]”hŒparport_remove_port”…”�”}”(hjË#h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjÇ#ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj¦#h²hh³j¸#h´M!ubjÁ)�”}”(hŒ(struct parport *port)”h]”jÇ)�”}”(hŒstruct parport *port”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjç#h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjã#ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô#h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjã#ubh)�”}”(hhh]”hô)�”}”(hŒparport”h]”hŒparport”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j$Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjÍ#sbŒc.parport_remove_port”†”asbuh1hhjã#ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%$h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjã#ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj3$h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjã#ubhô)�”}”(hŒport”h]”hŒport”…”�”}”(hj@$h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjã#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjß#ubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj¦#h²hh³j¸#h´M!ubeh}”(h]”h ]”h"]”•h$]”h&]”j j jˆuh1hçjjhj¢#h²hh³j¸#h´M!ubah}”(h]”j�#ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³j¸#h´M!hjŸ#h²hubj#)�”}”(hhh]”j<)�”}”(hŒderegister a parallel port”h]”hŒderegister a parallel port”…”�”}”(hjj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M!hjg$h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjŸ#h²hh³j¸#h´M!ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j‚$j7j‚$j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hXÅ**Parameters** ``struct parport *port`` parallel port to deregister **Description** 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]”j})�”}”(hjŒ$h]”hŒ Parameters”…”�”}”(hjŽ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjŠ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M%hj†$ubj“)�”}”(hhh]”j˜)�”}”(hŒ5``struct parport *port`` parallel port to deregister ”h]”(jž)�”}”(hŒ``struct parport *port``”h]”jB)�”}”(hj«$h]”hŒstruct parport *port”…”�”}”(hj­$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj©$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M"hj¥$ubj¸)�”}”(hhh]”j<)�”}”(hŒparallel port to deregister”h]”hŒparallel port to deregister”…”�”}”(hjÄ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jÀ$h´M"hjÁ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj¥$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jÀ$h´M"hj¢$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hj†$ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjæ$h]”hŒ Description”…”�”}”(hjè$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjä$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M$hj†$ubjX)�”}”(hX5When 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ŒÂ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.”h]”hŒÂ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.”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M#hjü$ubj<)�”}”(hŒ¨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.”h]”hŒ®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.”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M(hjü$ubj<)�”}”(hŒÇ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]”(hŒ­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 ”…”�”}”(hj%h²hh³Nh´Nubj})�”}”(hŒ**port**”h]”hŒport”…”�”}”(hj&%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj%ubhŒ as the parameter.”…”�”}”(hj%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M,hjü$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³j%h´M#hj†$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ'parport_register_dev_model (C function)”Œc.parport_register_dev_model”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ‚struct pardevice * parport_register_dev_model (struct parport *port, const char *name, const struct pardev_cb *par_dev_cb, int id)”h]”hè)�”}”(hŒ€struct pardevice *parport_register_dev_model(struct parport *port, const char *name, const struct pardev_cb *par_dev_cb, int id)”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hje%h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhja%h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Miubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs%h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hja%h²hh³jr%h´Miubh)�”}”(hhh]”hô)�”}”(hŒ pardevice”h]”hŒ pardevice”…”�”}”(hj„%h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj�%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j†%Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jŒparport_register_dev_model”sbŒc.parport_register_dev_model”†”asbuh1hhja%h²hh³jr%h´Miubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥%h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hja%h²hh³jr%h´Miubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj³%h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hja%h²hh³jr%h´Miubhî)�”}”(hŒparport_register_dev_model”h]”hô)�”}”(hj¢%h]”hŒparport_register_dev_model”…”�”}”(hjÄ%h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjÀ%ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhja%h²hh³jr%h´MiubjÁ)�”}”(hŒT(struct parport *port, const char *name, const struct pardev_cb *par_dev_cb, int id)”h]”(jÇ)�”}”(hŒstruct parport *port”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjß%h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjÛ%ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì%h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÛ%ubh)�”}”(hhh]”hô)�”}”(hŒparport”h]”hŒparport”…”�”}”(hjý%h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjú%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jÿ%Œmodname”NŒ classname”Njj )�”}”j]”j %Œc.parport_register_dev_model”†”asbuh1hhjÛ%ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÛ%ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj)&h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjÛ%ubhô)�”}”(hŒport”h]”hŒport”…”�”}”(hj6&h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjÛ%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj×%ubjÇ)�”}”(hŒconst char *name”h]”(jÍ)�”}”(hjÉh]”hŒconst”…”�”}”(hjO&h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjK&ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\&h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjK&ubj†)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjj&h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjK&ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx&h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjK&ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj†&h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjK&ubhô)�”}”(hŒname”h]”hŒname”…”�”}”(hj“&h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjK&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj×%ubjÇ)�”}”(hŒ"const struct pardev_cb *par_dev_cb”h]”(jÍ)�”}”(hjÉh]”hŒconst”…”�”}”(hj¬&h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj¨&ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹&h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj¨&ubjÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjÇ&h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj¨&ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ&h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj¨&ubh)�”}”(hhh]”hô)�”}”(hŒ pardev_cb”h]”hŒ pardev_cb”…”�”}”(hjå&h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjâ&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jç&Œmodname”NŒ classname”Njj )�”}”j]”j %Œc.parport_register_dev_model”†”asbuh1hhj¨&ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj¨&ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hj¨&ubhô)�”}”(hŒ par_dev_cb”h]”hŒ par_dev_cb”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj¨&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj×%ubjÇ)�”}”(hŒint id”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hj7'h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj3'ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE'h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj3'ubhô)�”}”(hŒid”h]”hŒid”…”�”}”(hjS'h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj3'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj×%ubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhja%h²hh³jr%h´Miubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj]%h²hh³jr%h´Miubah}”(h]”jX%ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jr%h´MihjZ%h²hubj#)�”}”(hhh]”j<)�”}”(hŒ$register a device on a parallel port”h]”hŒ$register a device on a parallel port”…”�”}”(hj}'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mihjz'h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjZ%h²hh³jr%h´Miubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j•'j7j•'j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(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 **Description** 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]”j})�”}”(hjŸ'h]”hŒ Parameters”…”�”}”(hj¡'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj�'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mmhj™'ubj“)�”}”(hhh]”(j˜)�”}”(hŒ>``struct parport *port`` port to which the device is attached ”h]”(jž)�”}”(hŒ``struct parport *port``”h]”jB)�”}”(hj¾'h]”hŒstruct parport *port”…”�”}”(hjÀ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¼'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mjhj¸'ubj¸)�”}”(hhh]”j<)�”}”(hŒ$port to which the device is attached”h]”hŒ$port to which the device is attached”…”�”}”(hj×'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jÓ'h´MjhjÔ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj¸'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jÓ'h´Mjhjµ'ubj˜)�”}”(hŒ3``const char *name`` a name to refer to the device ”h]”(jž)�”}”(hŒ``const char *name``”h]”jB)�”}”(hj÷'h]”hŒconst char *name”…”�”}”(hjù'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjõ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mkhjñ'ubj¸)�”}”(hhh]”j<)�”}”(hŒa name to refer to the device”h]”hŒa name to refer to the device”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j (h´Mkhj (ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjñ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j (h´Mkhjµ'ubj˜)�”}”(hŒC``const struct pardev_cb *par_dev_cb`` struct containing callbacks ”h]”(jž)�”}”(hŒ&``const struct pardev_cb *par_dev_cb``”h]”jB)�”}”(hj0(h]”hŒ"const struct pardev_cb *par_dev_cb”…”�”}”(hj2(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj.(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mlhj*(ubj¸)�”}”(hhh]”j<)�”}”(hŒstruct containing callbacks”h]”hŒstruct containing callbacks”…”�”}”(hjI(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jE(h´MlhjF(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj*(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jE(h´Mlhjµ'ubj˜)�”}”(hŒ3``int id`` device number to be given to the device ”h]”(jž)�”}”(hŒ ``int id``”h]”jB)�”}”(hji(h]”hŒint id”…”�”}”(hjk(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjg(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mmhjc(ubj¸)�”}”(hhh]”j<)�”}”(hŒ'device number to be given to the device”h]”hŒ'device number to be given to the device”…”�”}”(hj‚(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j~(h´Mmhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjc(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j~(h´Mmhjµ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hj™'ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hj¤(h]”hŒ Description”…”�”}”(hj¦(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¢(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mohj™'ubjX)�”}”(hXÚ 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Œ�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.”h]”hŒ�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.”…”�”}”(hj¾(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mnhjº(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]”(hŒRThe struct pardev_cb contains pointer to callbacks. preemption callback function, ”…”�”}”(hjÍ(h²hh³Nh´Nubj})�”}”(hŒ **preempt**”h]”hŒpreempt”…”�”}”(hjÕ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjÍ(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Í(h²hh³Nh´Nubj})�”}”(hŒ **private**”h]”hŒprivate”…”�”}”(hjç(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjÍ(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Í(h²hh³Nh´Nubj})�”}”(hŒ **preempt**”h]”hŒpreempt”…”�”}”(hjù(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjÍ(ubhŒ can be ”…”�”}”(hjÍ(h²hh³Nh´NubjB)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj )h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÍ(ubhŒ.”…”�”}”(hjÍ(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mrhjº(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$)h²hh³Nh´Nubj})�”}”(hŒ **wakeup**”h]”hŒwakeup”…”�”}”(hj,)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj$)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$)h²hh³Nh´Nubj})�”}”(hŒ **wakeup**”h]”hŒwakeup”…”�”}”(hj>)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj$)ubhŒ can be ”…”�”}”(hj$)h²hh³Nh´NubjB)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjP)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj$)ubhŒ.”…”�”}”(hj$)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M�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]”(hŒThe interrupt handler, ”…”�”}”(hji)h²hh³Nh´Nubj})�”}”(hŒ **irq_func**”h]”hŒirq_func”…”�”}”(hjq)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hji)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.”…”�”}”(hji)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M‹hjº(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]”(hXµ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 ”…”�”}”(hjŠ)h²hh³Nh´Nubj})�”}”(hŒ **irq_func**”h]”hŒirq_func”…”�”}”(hj’)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjŠ)ubhŒ. Needless to say, ”…”�”}”(hjŠ)h²hh³Nh´Nubj})�”}”(hŒ **irq_func**”h]”hŒirq_func”…”�”}”(hj¤)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjŠ)ubhŒ: will be called from interrupt context, and may not block.”…”�”}”(hjŠ)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M‘hjº(ubj<)�”}”(hŒò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.”h]”(hŒThe ”…”�”}”(hj½)h²hh³Nh´NubjB)�”}”(hŒ``PARPORT_DEV_EXCL``”h]”hŒPARPORT_DEV_EXCL”…”�”}”(hjÅ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj½)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½)h²hh³Nh´Nubj})�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj×)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj½)ubhŒ will be zero.”…”�”}”(hj½)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M›hjº(ubj<)�”}”(hŒ¦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]”(hŒZThis function returns a pointer to a structure that represents the device on the port, or ”…”�”}”(hjð)h²hh³Nh´NubjB)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjø)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjð)ubhŒD if there is not enough memory to allocate space for that structure.”…”�”}”(hjð)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M hjº(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³jÌ(h´Mnhj™'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ&parport_unregister_device (C function)”Œc.parport_unregister_device”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ6void parport_unregister_device (struct pardevice *dev)”h]”hè)�”}”(hŒ5void parport_unregister_device(struct pardevice *dev)”h]”(j†)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj7*h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj3*h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M4ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF*h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj3*h²hh³jE*h´M4ubhî)�”}”(hŒparport_unregister_device”h]”hô)�”}”(hŒparport_unregister_device”h]”hŒparport_unregister_device”…”�”}”(hjX*h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjT*ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj3*h²hh³jE*h´M4ubjÁ)�”}”(hŒ(struct pardevice *dev)”h]”jÇ)�”}”(hŒstruct pardevice *dev”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjt*h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjp*ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�*h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjp*ubh)�”}”(hhh]”hô)�”}”(hŒ pardevice”h]”hŒ pardevice”…”�”}”(hj’*h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj�*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j”*Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjZ*sbŒc.parport_unregister_device”†”asbuh1hhjp*ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²*h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjp*ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjÀ*h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjp*ubhô)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÍ*h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjp*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjl*ubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj3*h²hh³jE*h´M4ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj/*h²hh³jE*h´M4ubah}”(h]”j**ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jE*h´M4hj,*h²hubj#)�”}”(hhh]”j<)�”}”(hŒ&deregister a device on a parallel port”h]”hŒ&deregister a device on a parallel port”…”�”}”(hj÷*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M4hjô*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj,*h²hh³jE*h´M4ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j+j7j+j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hŒ **Parameters** ``struct pardevice *dev`` pointer to structure representing device **Description** This undoes the effect of parport_register_device().”h]”(j<)�”}”(hŒ**Parameters**”h]”j})�”}”(hj+h]”hŒ Parameters”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M8hj+ubj“)�”}”(hhh]”j˜)�”}”(hŒC``struct pardevice *dev`` pointer to structure representing device ”h]”(jž)�”}”(hŒ``struct pardevice *dev``”h]”jB)�”}”(hj8+h]”hŒstruct pardevice *dev”…”�”}”(hj:+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj6+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M5hj2+ubj¸)�”}”(hhh]”j<)�”}”(hŒ(pointer to structure representing device”h]”hŒ(pointer to structure representing device”…”�”}”(hjQ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jM+h´M5hjN+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj2+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jM+h´M5hj/+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hj+ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjs+h]”hŒ Description”…”�”}”(hju+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjq+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M7hj+ubjX)�”}”(hŒ4This undoes the effect of parport_register_device().”h]”j<)�”}”(hj‹+h]”hŒ4This undoes the effect of parport_register_device().”…”�”}”(hj�+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M6hj‰+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jWh³jš+h´M6hj+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ parport_find_number (C function)”Œc.parport_find_number”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ1struct parport * parport_find_number (int number)”h]”hè)�”}”(hŒ/struct parport *parport_find_number(int number)”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjÁ+h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj½+h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mzubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏ+h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj½+h²hh³jÎ+h´Mzubh)�”}”(hhh]”hô)�”}”(hŒparport”h]”hŒparport”…”�”}”(hjà+h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjÝ+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jâ+Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jŒparport_find_number”sbŒc.parport_find_number”†”asbuh1hhj½+h²hh³jÎ+h´Mzubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj½+h²hh³jÎ+h´Mzubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hj½+h²hh³jÎ+h´Mzubhî)�”}”(hŒparport_find_number”h]”hô)�”}”(hjþ+h]”hŒparport_find_number”…”�”}”(hj ,h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj,ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj½+h²hh³jÎ+h´MzubjÁ)�”}”(hŒ (int number)”h]”jÇ)�”}”(hŒ int number”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hj;,h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj7,ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI,h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj7,ubhô)�”}”(hŒnumber”h]”hŒnumber”…”�”}”(hjW,h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj7,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj3,ubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj½+h²hh³jÎ+h´Mzubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj¹+h²hh³jÎ+h´Mzubah}”(h]”j´+ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jÎ+h´Mzhj¶+h²hubj#)�”}”(hhh]”j<)�”}”(hŒfind a parallel port by number”h]”hŒfind a parallel port by number”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mzhj~,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¶+h²hh³jÎ+h´Mzubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j™,j7j™,j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hXU**Parameters** ``int number`` parallel port number **Description** 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]”j})�”}”(hj£,h]”hŒ Parameters”…”�”}”(hj¥,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¡,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M~hj�,ubj“)�”}”(hhh]”j˜)�”}”(hŒ$``int number`` parallel port number ”h]”(jž)�”}”(hŒ``int number``”h]”jB)�”}”(hjÂ,h]”hŒ int number”…”�”}”(hjÄ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÀ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M{hj¼,ubj¸)�”}”(hhh]”j<)�”}”(hŒparallel port number”h]”hŒparallel port number”…”�”}”(hjÛ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j×,h´M{hjØ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj¼,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j×,h´M{hj¹,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hj�,ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjý,h]”hŒ Description”…”�”}”(hjÿ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjû,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M}hj�,ubjX)�”}”(hŒô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ŒWThis 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-h²hh³Nh´NubjB)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj-ubhŒ if there is none.”…”�”}”(hj-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M|hj-ubj<)�”}”(hŒ›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]”hŒ›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().”…”�”}”(hj8-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mhj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³j7-h´M|hj�,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒparport_find_base (C function)”Œc.parport_find_base”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ7struct parport * parport_find_base (unsigned long base)”h]”hè)�”}”(hŒ5struct parport *parport_find_base(unsigned long base)”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjm-h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhji-h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M™ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{-h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hji-h²hh³jz-h´M™ubh)�”}”(hhh]”hô)�”}”(hŒparport”h]”hŒparport”…”�”}”(hjŒ-h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj‰-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jŽ-Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jŒparport_find_base”sbŒc.parport_find_base”†”asbuh1hhji-h²hh³jz-h´M™ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­-h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hji-h²hh³jz-h´M™ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj»-h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hji-h²hh³jz-h´M™ubhî)�”}”(hŒparport_find_base”h]”hô)�”}”(hjª-h]”hŒparport_find_base”…”�”}”(hjÌ-h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjÈ-ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhji-h²hh³jz-h´M™ubjÁ)�”}”(hŒ(unsigned long base)”h]”jÇ)�”}”(hŒunsigned long base”h]”(j†)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjç-h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjã-ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ-h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjã-ubj†)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjã-ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjã-ubhô)�”}”(hŒbase”h]”hŒbase”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjã-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjß-ubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhji-h²hh³jz-h´M™ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhje-h²hh³jz-h´M™ubah}”(h]”j`-ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jz-h´M™hjb-h²hubj#)�”}”(hhh]”j<)�”}”(hŒ$find a parallel port by base address”h]”hŒ$find a parallel port by base address”…”�”}”(hjI.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M™hjF.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjb-h²hh³jz-h´M™ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6ja.j7ja.j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hX]**Parameters** ``unsigned long base`` base I/O address **Description** 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]”j})�”}”(hjk.h]”hŒ Parameters”…”�”}”(hjm.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hji.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M�hje.ubj“)�”}”(hhh]”j˜)�”}”(hŒ(``unsigned long base`` base I/O address ”h]”(jž)�”}”(hŒ``unsigned long base``”h]”jB)�”}”(hjŠ.h]”hŒunsigned long base”…”�”}”(hjŒ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjˆ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mšhj„.ubj¸)�”}”(hhh]”j<)�”}”(hŒbase I/O address”h]”hŒbase I/O address”…”�”}”(hj£.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jŸ.h´Mšhj .ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj„.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jŸ.h´Mšhj�.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hje.ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjÅ.h]”hŒ Description”…”�”}”(hjÇ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjÃ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mœhje.ubjX)�”}”(hŒø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Œ]This returns the parallel port with the specified base address, or ``NULL`` if there is none.”h]”(hŒCThis returns the parallel port with the specified base address, or ”…”�”}”(hjß.h²hh³Nh´NubjB)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjç.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjß.ubhŒ if there is none.”…”�”}”(hjß.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M›hjÛ.ubj<)�”}”(hŒ™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]”hŒ™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().”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´MžhjÛ.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³jÿ.h´M›hje.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒparport_claim (C function)”Œc.parport_claim”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ)int parport_claim (struct pardevice *dev)”h]”hè)�”}”(hŒ(int parport_claim(struct pardevice *dev)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hj5/h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj1/h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M¸ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD/h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj1/h²hh³jC/h´M¸ubhî)�”}”(hŒ parport_claim”h]”hô)�”}”(hŒ parport_claim”h]”hŒ parport_claim”…”�”}”(hjV/h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjR/ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj1/h²hh³jC/h´M¸ubjÁ)�”}”(hŒ(struct pardevice *dev)”h]”jÇ)�”}”(hŒstruct pardevice *dev”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjr/h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjn/ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjn/ubh)�”}”(hhh]”hô)�”}”(hŒ pardevice”h]”hŒ pardevice”…”�”}”(hj�/h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj�/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j’/Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjX/sbŒc.parport_claim”†”asbuh1hhjn/ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°/h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjn/ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj¾/h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjn/ubhô)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjË/h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjn/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjj/ubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj1/h²hh³jC/h´M¸ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj-/h²hh³jC/h´M¸ubah}”(h]”j(/ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jC/h´M¸hj*/h²hubj#)�”}”(hhh]”j<)�”}”(hŒ&claim access to a parallel port device”h]”hŒ&claim access to a parallel port device”…”�”}”(hjõ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M¸hjò/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj*/h²hh³jC/h´M¸ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j 0j7j 0j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hXÔ**Parameters** ``struct pardevice *dev`` pointer to structure representing a device on the port **Description** 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]”j})�”}”(hj0h]”hŒ Parameters”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M¼hj0ubj“)�”}”(hhh]”j˜)�”}”(hŒQ``struct pardevice *dev`` pointer to structure representing a device on the port ”h]”(jž)�”}”(hŒ``struct pardevice *dev``”h]”jB)�”}”(hj60h]”hŒstruct pardevice *dev”…”�”}”(hj80h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj40ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M¹hj00ubj¸)�”}”(hhh]”j<)�”}”(hŒ6pointer to structure representing a device on the port”h]”hŒ6pointer to structure representing a device on the port”…”�”}”(hjO0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jK0h´M¹hjL0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj00ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jK0h´M¹hj-0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hj0ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjq0h]”hŒ Description”…”�”}”(hjs0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjo0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M»hj0ubjX)�”}”(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]”j<)�”}”(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‹0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mºhj‡0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jWh³j™0h´Mºhj0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ#parport_claim_or_block (C function)”Œc.parport_claim_or_block”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ2int parport_claim_or_block (struct pardevice *dev)”h]”hè)�”}”(hŒ1int parport_claim_or_block(struct pardevice *dev)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hjÀ0h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj¼0h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M,ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏ0h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj¼0h²hh³jÎ0h´M,ubhî)�”}”(hŒparport_claim_or_block”h]”hô)�”}”(hŒparport_claim_or_block”h]”hŒparport_claim_or_block”…”�”}”(hjá0h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjÝ0ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj¼0h²hh³jÎ0h´M,ubjÁ)�”}”(hŒ(struct pardevice *dev)”h]”jÇ)�”}”(hŒstruct pardevice *dev”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjý0h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjù0ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjù0ubh)�”}”(hhh]”hô)�”}”(hŒ pardevice”h]”hŒ pardevice”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j1Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjã0sbŒc.parport_claim_or_block”†”asbuh1hhjù0ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;1h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjù0ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjI1h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjù0ubhô)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjV1h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjù0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjõ0ubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj¼0h²hh³jÎ0h´M,ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj¸0h²hh³jÎ0h´M,ubah}”(h]”j³0ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jÎ0h´M,hjµ0h²hubj#)�”}”(hhh]”j<)�”}”(hŒ&claim access to a parallel port device”h]”hŒ&claim access to a parallel port device”…”�”}”(hj€1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M,hj}1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjµ0h²hh³jÎ0h´M,ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j˜1j7j˜1j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hXt**Parameters** ``struct pardevice *dev`` pointer to structure representing a device on the port **Description** 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]”j})�”}”(hj¢1h]”hŒ Parameters”…”�”}”(hj¤1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj 1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M0hjœ1ubj“)�”}”(hhh]”j˜)�”}”(hŒQ``struct pardevice *dev`` pointer to structure representing a device on the port ”h]”(jž)�”}”(hŒ``struct pardevice *dev``”h]”jB)�”}”(hjÁ1h]”hŒstruct pardevice *dev”…”�”}”(hjÃ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¿1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M-hj»1ubj¸)�”}”(hhh]”j<)�”}”(hŒ6pointer to structure representing a device on the port”h]”hŒ6pointer to structure representing a device on the port”…”�”}”(hjÚ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jÖ1h´M-hj×1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj»1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jÖ1h´M-hj¸1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hjœ1ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjü1h]”hŒ Description”…”�”}”(hjþ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjú1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M/hjœ1ubjX)�”}”(hŒë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Œë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]”hŒë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.”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´M.hj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jWh³j$2h´M.hjœ1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒparport_release (C function)”Œc.parport_release”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ,void parport_release (struct pardevice *dev)”h]”hè)�”}”(hŒ+void parport_release(struct pardevice *dev)”h]”(j†)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjK2h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjG2h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mnubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ2h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjG2h²hh³jY2h´Mnubhî)�”}”(hŒparport_release”h]”hô)�”}”(hŒparport_release”h]”hŒparport_release”…”�”}”(hjl2h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjh2ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjG2h²hh³jY2h´MnubjÁ)�”}”(hŒ(struct pardevice *dev)”h]”jÇ)�”}”(hŒstruct pardevice *dev”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjˆ2h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj„2ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•2h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj„2ubh)�”}”(hhh]”hô)�”}”(hŒ pardevice”h]”hŒ pardevice”…”�”}”(hj¦2h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj£2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j¨2Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjn2sbŒc.parport_release”†”asbuh1hhj„2ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ2h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj„2ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjÔ2h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hj„2ubhô)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjá2h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj„2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj€2ubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjG2h²hh³jY2h´Mnubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjC2h²hh³jY2h´Mnubah}”(h]”j>2ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jY2h´Mnhj@2h²hubj#)�”}”(hhh]”j<)�”}”(hŒ(give up access to a parallel port device”h]”hŒ(give up access to a parallel port device”…”�”}”(hj 3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mnhj3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj@2h²hh³jY2h´Mnubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j#3j7j#3j8‰j9‰j:‰uh1hÜh²hhh·h³Nh´Nubjs)�”}”(hX%**Parameters** ``struct pardevice *dev`` pointer to structure representing parallel port device **Description** 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]”j})�”}”(hj-3h]”hŒ Parameters”…”�”}”(hj/3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj+3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mrhj'3ubj“)�”}”(hhh]”j˜)�”}”(hŒQ``struct pardevice *dev`` pointer to structure representing parallel port device ”h]”(jž)�”}”(hŒ``struct pardevice *dev``”h]”jB)�”}”(hjL3h]”hŒstruct pardevice *dev”…”�”}”(hjN3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjJ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´MohjF3ubj¸)�”}”(hhh]”j<)�”}”(hŒ6pointer to structure representing parallel port device”h]”hŒ6pointer to structure representing parallel port device”…”�”}”(hje3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³ja3h´Mohjb3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjF3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³ja3h´MohjC3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hj'3ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hj‡3h]”hŒ Description”…”�”}”(hj‰3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj…3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mqhj'3ubjX)�”}”(hŒ¡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Œ¡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]”hŒ¡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.”…”�”}”(hj¡3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:10: ./drivers/parport/share.c”h´Mphj�3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jWh³j¯3h´Mphj'3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhh·h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒparport_open (C function)”Œc.parport_open”hNt”auh1hËhh·h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ>struct pardevice * parport_open (int devnum, const char *name)”h]”hè)�”}”(hŒh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjú=ubhô)�”}”(hŒline”h]”hŒline”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjú=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjö=ubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj½=h²hh³jÏ=h´M“ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj¹=h²hh³jÏ=h´M“ubah}”(h]”j´=ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jÏ=h´M“hj¶=h²hubj#)�”}”(hhh]”j<)�”}”(hŒ%remove a 16x50 serial port at runtime”h]”hŒ%remove a 16x50 serial port at runtime”…”�”}”(hjD>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.c”h´M“hjA>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¶=h²hh³jÏ=h´M“ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j\>j7j\>j8‰j9‰j:‰uh1hÜh²hhj’7h³Nh´Nubjs)�”}”(hŒÀ**Parameters** ``int line`` serial line number **Description** 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]”j})�”}”(hjf>h]”hŒ Parameters”…”�”}”(hjh>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjd>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.c”h´M—hj`>ubj“)�”}”(hhh]”j˜)�”}”(hŒ ``int line`` serial line number ”h]”(jž)�”}”(hŒ ``int line``”h]”jB)�”}”(hj…>h]”hŒint line”…”�”}”(hj‡>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjƒ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.c”h´M”hj>ubj¸)�”}”(hhh]”j<)�”}”(hŒserial line number”h]”hŒserial line number”…”�”}”(hjž>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jš>h´M”hj›>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jš>h´M”hj|>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hj`>ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjÀ>h]”hŒ Description”…”�”}”(hjÂ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¾>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.c”h´M–hj`>ubjX)�”}”(hŒrRemove one serial port. This may not be called from interrupt context. We hand the port back to the our control.”h]”j<)�”}”(hŒrRemove one serial port. This may not be called from interrupt context. We hand the port back to the our control.”h]”hŒrRemove one serial port. This may not be called from interrupt context. We hand the port back to the our control.”…”�”}”(hjÚ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œl/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:19: ./drivers/tty/serial/8250/8250_core.c”h´M•hjÖ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jWh³jè>h´M•hj`>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj’7h²hh³Nh´Nubj<)�”}”(hŒ'See serial/driver.rst for related APIs.”h]”hŒ'See serial/driver.rst for related APIs.”…”�”}”(hjö>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³hÊh´Khj’7h²hubeh}”(h]”Œx50-uart-driver”ah ]”h"]”Œ16x50 uart driver”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒPulse-Width Modulation (PWM)”h]”hŒPulse-Width Modulation (PWM)”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj ?h²hh³hÊh´Kubj<)�”}”(hŒpPulse-width modulation is a modulation technique primarily used to control power supplied to electrical devices.”h]”hŒpPulse-width modulation is a modulation technique primarily used to control power supplied to electrical devices.”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³hÊh´Khj ?h²hubj<)�”}”(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]”(hŒšThe 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+?h²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct pwm_chip `”h]”jB)�”}”(hj5?h]”hŒstruct pwm_chip”…”�”}”(hj7?h²hh³Nh´Nubah}”(h]”h ]”(Œxref”j0Œc-type”eh"]”h$]”h&]”uh1jAhj3?ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œdriver-api/miscellaneous”Œ refdomain”j0Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jj )�”}”j]”sbŒ reftarget”Œpwm_chip”uh1hh³hÊh´Khj+?ubhŒ�. Providers are expected to embed this structure in a driver-specific structure. This structure contains fields that describe a particular chip.”…”�”}”(hj+?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³hÊh´Khj ?h²hubj<)�”}”(hŒêA 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]”(hŒJA chip exposes one or more PWM signal sources, each of which exposed as a ”…”�”}”(hjb?h²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct pwm_device `”h]”jB)�”}”(hjl?h]”hŒstruct pwm_device”…”�”}”(hjn?h²hh³Nh´Nubah}”(h]”h ]”(jA?j0Œc-type”eh"]”h$]”h&]”uh1jAhjj?ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jM?Œ refdomain”j0Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jjS?jV?Œ pwm_device”uh1hh³hÊh´K$hjb?ubhŒx. Operations can be performed on PWM devices to control the period, duty cycle, polarity and active state of the signal.”…”�”}”(hjb?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³hÊh´K$hj ?h²hubj<)�”}”(hŒfNote that PWM devices are exclusive resources: they can always only be used by one consumer at a time.”h]”hŒfNote that PWM devices are exclusive resources: they can always only be used by one consumer at a time.”…”�”}”(hj“?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³hÊh´K)hj ?h²hubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒpwm_polarity (C enum)”Œc.pwm_polarity”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ pwm_polarity”h]”hè)�”}”(hŒenum pwm_polarity”h]”(jÍ)�”}”(hŒenum”h]”hŒenum”…”�”}”(hjº?h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj¶?h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Kubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ?h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj¶?h²hh³jÈ?h´Kubhî)�”}”(hŒ pwm_polarity”h]”hô)�”}”(hj´?h]”hŒ pwm_polarity”…”�”}”(hjÛ?h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj×?ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj¶?h²hh³jÈ?h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj²?h²hh³jÈ?h´Kubah}”(h]”j­?ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jÈ?h´Khj¯?h²hubj#)�”}”(hhh]”j<)�”}”(hŒpolarity of a PWM signal”h]”hŒpolarity of a PWM signal”…”�”}”(hjý?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Khjú?h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¯?h²hh³jÈ?h´Kubeh}”(h]”h ]”(j0Œenum”eh"]”h$]”h&]”j5j0j6j@j7j@j8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(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 period”h]”(j<)�”}”(hŒ **Constants**”h]”j})�”}”(hj@h]”hŒ Constants”…”�”}”(hj!@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Khj@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]”jB)�”}”(hj>@h]”hŒPWM_POLARITY_NORMAL”…”�”}”(hj@@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj<@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Khj8@ubj¸)�”}”(hhh]”j<)�”}”(hŒqa high signal for the duration of the duty- cycle, followed by a low signal for the remainder of the pulse period”h]”hŒqa high signal for the duration of the duty- cycle, followed by a low signal for the remainder of the pulse period”…”�”}”(hjW@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KhjT@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj8@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jS@h´Khj5@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 period”h]”(jž)�”}”(hŒ``PWM_POLARITY_INVERSED``”h]”jB)�”}”(hjx@h]”hŒPWM_POLARITY_INVERSED”…”�”}”(hjz@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjv@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Khjr@ubj¸)�”}”(hhh]”j<)�”}”(hŒqa low signal for the duration of the duty- cycle, followed by a high signal for the remainder of the pulse period”h]”hŒqa low signal for the duration of the duty- cycle, followed by a high signal for the remainder of the pulse period”…”�”}”(hj‘@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KhjŽ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjr@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j�@h´Khj5@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hj@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒpwm_args (C struct)”Œ c.pwm_args”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒpwm_args”h]”hè)�”}”(hŒstruct pwm_args”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjÒ@h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjÎ@h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´K%ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà@h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÎ@h²hh³jß@h´K%ubhî)�”}”(hŒpwm_args”h]”hô)�”}”(hjÌ@h]”hŒpwm_args”…”�”}”(hjò@h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjî@ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjÎ@h²hh³jß@h´K%ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjÊ@h²hh³jß@h´K%ubah}”(h]”jÅ@ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jß@h´K%hjÇ@h²hubj#)�”}”(hhh]”j<)�”}”(hŒboard-dependent PWM arguments”h]”hŒboard-dependent PWM arguments”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´K hjAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÇ@h²hh³jß@h´K%ubeh}”(h]”h ]”(j0Œstruct”eh"]”h$]”h&]”j5j0j6j,Aj7j,Aj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(hX **Definition**:: struct pwm_args { u64 period; enum pwm_polarity polarity; }; **Members** ``period`` reference period ``polarity`` reference polarity **Description** This structure describes board-dependent arguments attached to a PWM device. These arguments are usually retrieved from the PWM lookup table or device tree. Do 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]”(jX)�”}”(hŒc**Definition**:: struct pwm_args { u64 period; enum pwm_polarity polarity; }; ”h]”(j<)�”}”(hŒ**Definition**::”h]”(j})�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjhj´Bubj<)�”}”(hX-This is a representation of a PWM waveform alternative to struct pwm_state below. It's more expressive than struct pwm_state as it contains a duty_offset_ns and so can represent offsets other than zero (with .polarity = PWM_POLARITY_NORMAL) and period - duty_cycle (.polarity = PWM_POLARITY_INVERSED).”h]”hX/This is a representation of a PWM waveform alternative to struct pwm_state below. It’s more expressive than struct pwm_state as it contains a duty_offset_ns and so can represent offsets other than zero (with .polarity = PWM_POLARITY_NORMAL) and period - duty_cycle (.polarity = PWM_POLARITY_INVERSED).”…”�”}”(hjÓCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´K;hj´Bubj<)�”}”(hX#Note there is no explicit bool for enabled. A "disabled" PWM is represented by .period_length_ns = 0. Note further that the behaviour of a "disabled" PWM is undefined. Depending on the hardware's capabilities it might drive the active or inactive level, go high-z or even continue to toggle.”h]”hX-Note there is no explicit bool for enabled. A “disabledâ€� PWM is represented by .period_length_ns = 0. Note further that the behaviour of a “disabledâ€� PWM is undefined. Depending on the hardware’s capabilities it might drive the active or inactive level, go high-z or even continue to toggle.”…”�”}”(hjâCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KAhj´Bubj<)�”}”(hŒ.The unit for all three members is nanoseconds.”h]”hŒ.The unit for all three members is nanoseconds.”…”�”}”(hjñCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KFhj´Bubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒpwm_device (C struct)”Œ c.pwm_device”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ pwm_device”h]”hè)�”}”(hŒstruct pwm_device”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj Dh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjDh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KKubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Dh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjDh²hh³j-Dh´KKubhî)�”}”(hŒ pwm_device”h]”hô)�”}”(hjDh]”hŒ pwm_device”…”�”}”(hj@Dh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjprepare 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()”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´K²hjJh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÃHh²hh³jÜHh´K²ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j1Jj7j1Jj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(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]”j})�”}”(hj;Jh]”hŒ Parameters”…”�”}”(hj=Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj9Jubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´K¶hj5Jubj“)�”}”(hhh]”(j˜)�”}”(hŒ,``const struct pwm_device *pwm`` PWM device ”h]”(jž)�”}”(hŒ ``const struct pwm_device *pwm``”h]”jB)�”}”(hjZJh]”hŒconst struct pwm_device *pwm”…”�”}”(hj\Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjXJubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´K³hjTJubj¸)�”}”(hhh]”j<)�”}”(hŒ PWM device”h]”hŒ PWM device”…”�”}”(hjsJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³joJh´K³hjpJubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjTJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³joJh´K³hjQJubj˜)�”}”(hŒF``struct pwm_state *state`` state to fill with the prepared PWM state ”h]”(jž)�”}”(hŒ``struct pwm_state *state``”h]”jB)�”}”(hj“Jh]”hŒstruct pwm_state *state”…”�”}”(hj•Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj‘Jubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´K´hj�Jubj¸)�”}”(hhh]”j<)�”}”(hŒ)state to fill with the prepared PWM state”h]”hŒ)state to fill with the prepared PWM state”…”�”}”(hj¬Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j¨Jh´K´hj©Jubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj�Jubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j¨Jh´K´hjQJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hj5Jubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjÎJh]”hŒ Description”…”�”}”(hjÐJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjÌJubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´K¶hj5Jubj<)�”}”(hX®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().”h]”hX®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().”…”�”}”(hjäJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Kµhj5Jubj<)�”}”(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.”…”�”}”(hjóJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´K¼hj5Jubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ(pwm_get_relative_duty_cycle (C function)”Œc.pwm_get_relative_duty_cycle”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(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]”(j†)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj"Kh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjKh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KÔubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1Kh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjKh²hh³j0Kh´KÔubj†)�”}”(hŒint”h]”hŒint”…”�”}”(hj?Kh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjKh²hh³j0Kh´KÔubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMKh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjKh²hh³j0Kh´KÔubhî)�”}”(hŒpwm_get_relative_duty_cycle”h]”hô)�”}”(hŒpwm_get_relative_duty_cycle”h]”hŒpwm_get_relative_duty_cycle”…”�”}”(hj_Kh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj[Kubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjKh²hh³j0Kh´KÔubjÁ)�”}”(hŒ3(const struct pwm_state *state, unsigned int scale)”h]”(jÇ)�”}”(hŒconst struct pwm_state *state”h]”(jÍ)�”}”(hjÉh]”hŒconst”…”�”}”(hj{Kh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjwKubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆKh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjwKubjÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj–Kh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjwKubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£Kh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjwKubh)�”}”(hhh]”hô)�”}”(hŒ pwm_state”h]”hŒ pwm_state”…”�”}”(hj´Kh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj±Kubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j¶KŒmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjaKsbŒc.pwm_get_relative_duty_cycle”†”asbuh1hhjwKubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔKh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjwKubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjâKh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjwKubhô)�”}”(hŒstate”h]”hŒstate”…”�”}”(hjïKh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjwKubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjsKubjÇ)�”}”(hŒunsigned int scale”h]”(j†)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjLubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjLubj†)�”}”(hŒint”h]”hŒint”…”�”}”(hj$Lh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjLubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2Lh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjLubhô)�”}”(hŒscale”h]”hŒscale”…”�”}”(hj@Lh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjsKubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjKh²hh³j0Kh´KÔubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjKh²hh³j0Kh´KÔubah}”(h]”jKah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³j0Kh´KÔhjKh²hubj#)�”}”(hhh]”j<)�”}”(hŒGet a relative duty cycle value”h]”hŒGet a relative duty cycle value”…”�”}”(hjjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KÔhjgLh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjKh²hh³j0Kh´KÔubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j‚Lj7j‚Lj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(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); **Return** rounded relative duty cycle multiplied by **scale**”h]”(j<)�”}”(hŒ**Parameters**”h]”j})�”}”(hjŒLh]”hŒ Parameters”…”�”}”(hjŽLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjŠLubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KØhj†Lubj“)�”}”(hhh]”(j˜)�”}”(hŒK``const struct pwm_state *state`` PWM state to extract the duty cycle from ”h]”(jž)�”}”(hŒ!``const struct pwm_state *state``”h]”jB)�”}”(hj«Lh]”hŒconst struct pwm_state *state”…”�”}”(hj­Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj©Lubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KÕhj¥Lubj¸)�”}”(hhh]”j<)�”}”(hŒ(PWM state to extract the duty cycle from”h]”hŒ(PWM state to extract the duty cycle from”…”�”}”(hjÄLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jÀLh´KÕhjÁLubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj¥Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jÀLh´KÕhj¢Lubj˜)�”}”(hŒ?``unsigned int scale`` target scale of the relative duty cycle ”h]”(jž)�”}”(hŒ``unsigned int scale``”h]”jB)�”}”(hjäLh]”hŒunsigned int scale”…”�”}”(hjæLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjâLubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KÖhjÞLubj¸)�”}”(hhh]”j<)�”}”(hŒ'target scale of the relative duty cycle”h]”hŒ'target scale of the relative duty cycle”…”�”}”(hjýLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jùLh´KÖhjúLubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjÞLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jùLh´KÖhj¢Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hj†Lubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjMh]”hŒ Description”…”�”}”(hj!Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KØhj†Lubj<)�”}”(hŒ‚This 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 ”…”�”}”(hj5Mh²hh³Nh´Nubj})�”}”(hŒ **state**”h]”hŒstate”…”�”}”(hj=Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj5MubhŒ? (expressed in nanosecond) into a value relative to the period.”…”�”}”(hj5Mh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´K×hj†Lubj<)�”}”(hŒIFor example if you want to get the duty_cycle expressed in percent, call:”h]”hŒIFor example if you want to get the duty_cycle expressed in percent, call:”…”�”}”(hjVMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KÚhj†Lubj<)�”}”(hŒ^pwm_get_state(pwm, :c:type:`state`); duty = pwm_get_relative_duty_cycle(:c:type:`state`, 100);”h]”(hŒpwm_get_state(pwm, ”…”�”}”(hjeMh²hh³Nh´Nubh)�”}”(hŒ:c:type:`state`”h]”jB)�”}”(hjoMh]”hŒstate”…”�”}”(hjqMh²hh³Nh´Nubah}”(h]”h ]”(jA?j0Œc-type”eh"]”h$]”h&]”uh1jAhjmMubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jM?Œ refdomain”j0Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jjS?jV?Œstate”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KÜhjeMubhŒ&); duty = pwm_get_relative_duty_cycle(”…”�”}”(hjeMh²hh³Nh´Nubh)�”}”(hŒ:c:type:`state`”h]”jB)�”}”(hj“Mh]”hŒstate”…”�”}”(hj•Mh²hh³Nh´Nubah}”(h]”h ]”(jA?j0Œc-type”eh"]”h$]”h&]”uh1jAhj‘Mubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jM?Œ refdomain”j0Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jjS?jV?Œstate”uh1hh³jŒMh´KÜhjeMubhŒ, 100);”…”�”}”(hjeMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jŒMh´KÜhj†Lubj<)�”}”(hŒ **Return**”h]”j})�”}”(hj¼Mh]”hŒReturn”…”�”}”(hj¾Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjºMubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Kßhj†Lubj<)�”}”(hŒ3rounded relative duty cycle multiplied by **scale**”h]”(hŒ*rounded relative duty cycle multiplied by ”…”�”}”(hjÒMh²hh³Nh´Nubj})�”}”(hŒ **scale**”h]”hŒscale”…”�”}”(hjÚMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjÒMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Kàhj†Lubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ(pwm_set_relative_duty_cycle (C function)”Œc.pwm_set_relative_duty_cycle”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒfint pwm_set_relative_duty_cycle (struct pwm_state *state, unsigned int duty_cycle, unsigned int scale)”h]”hè)�”}”(hŒeint pwm_set_relative_duty_cycle(struct pwm_state *state, unsigned int duty_cycle, unsigned int scale)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj Nh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Kíubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj Nh²hh³jNh´Kíubhî)�”}”(hŒpwm_set_relative_duty_cycle”h]”hô)�”}”(hŒpwm_set_relative_duty_cycle”h]”hŒpwm_set_relative_duty_cycle”…”�”}”(hj0Nh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj,Nubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj Nh²hh³jNh´KíubjÁ)�”}”(hŒF(struct pwm_state *state, unsigned int duty_cycle, unsigned int scale)”h]”(jÇ)�”}”(hŒstruct pwm_state *state”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjLNh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjHNubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYNh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjHNubh)�”}”(hhh]”hô)�”}”(hŒ pwm_state”h]”hŒ pwm_state”…”�”}”(hjjNh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjgNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jlNŒmodname”NŒ classname”Njj )�”}”j]”j)�”}”jj2NsbŒc.pwm_set_relative_duty_cycle”†”asbuh1hhjHNubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠNh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjHNubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj˜Nh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjHNubhô)�”}”(hŒstate”h]”hŒstate”…”�”}”(hj¥Nh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjHNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjDNubjÇ)�”}”(hŒunsigned int duty_cycle”h]”(j†)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¾Nh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjºNubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌNh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjºNubj†)�”}”(hŒint”h]”hŒint”…”�”}”(hjÚNh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjºNubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèNh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjºNubhô)�”}”(hŒ duty_cycle”h]”hŒ duty_cycle”…”�”}”(hjöNh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjºNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjDNubjÇ)�”}”(hŒunsigned int scale”h]”(j†)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj Oubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj Oubj†)�”}”(hŒint”h]”hŒint”…”�”}”(hj+Oh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj Oubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9Oh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj Oubhô)�”}”(hŒscale”h]”hŒscale”…”�”}”(hjGOh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj Oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjDNubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj Nh²hh³jNh´Kíubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjNh²hh³jNh´Kíubah}”(h]”jNah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jNh´KíhjNh²hubj#)�”}”(hhh]”j<)�”}”(hŒSet a relative duty cycle value”h]”hŒSet a relative duty cycle value”…”�”}”(hjqOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KíhjnOh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjNh²hh³jNh´Kíubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j‰Oj7j‰Oj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(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`); **Return** 0 on success or ``-EINVAL`` if **duty_cycle** and/or **scale** are inconsistent (**scale** == 0 or **duty_cycle** > **scale**)”h]”(j<)�”}”(hŒ**Parameters**”h]”j})�”}”(hj“Oh]”hŒ Parameters”…”�”}”(hj•Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj‘Oubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Kñhj�Oubj“)�”}”(hhh]”(j˜)�”}”(hŒ.``struct pwm_state *state`` PWM state to fill ”h]”(jž)�”}”(hŒ``struct pwm_state *state``”h]”jB)�”}”(hj²Oh]”hŒstruct pwm_state *state”…”�”}”(hj´Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj°Oubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Kîhj¬Oubj¸)�”}”(hhh]”j<)�”}”(hŒPWM state to fill”h]”hŒPWM state to fill”…”�”}”(hjËOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jÇOh´KîhjÈOubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj¬Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jÇOh´Kîhj©Oubj˜)�”}”(hŒ6``unsigned int duty_cycle`` relative duty cycle value ”h]”(jž)�”}”(hŒ``unsigned int duty_cycle``”h]”jB)�”}”(hjëOh]”hŒunsigned int duty_cycle”…”�”}”(hjíOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjéOubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KïhjåOubj¸)�”}”(hhh]”j<)�”}”(hŒrelative duty cycle value”h]”hŒrelative duty cycle value”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jPh´KïhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjåOubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jPh´Kïhj©Oubj˜)�”}”(hŒB``unsigned int scale`` scale in which **duty_cycle** is expressed ”h]”(jž)�”}”(hŒ``unsigned int scale``”h]”jB)�”}”(hj$Ph]”hŒunsigned int scale”…”�”}”(hj&Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj"Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´KðhjPubj¸)�”}”(hhh]”j<)�”}”(hŒ*scale in which **duty_cycle** is expressed”h]”(hŒscale in which ”…”�”}”(hj=Ph²hh³Nh´Nubj})�”}”(hŒ**duty_cycle**”h]”hŒ duty_cycle”…”�”}”(hjEPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj=PubhŒ is expressed”…”�”}”(hj=Ph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j9Ph´Kðhj:Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j9Ph´Kðhj©Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hj�Oubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjqPh]”hŒ Description”…”�”}”(hjsPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjoPubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Kòhj�Oubj<)�”}”(hŒ„This functions converts a relative into an absolute duty cycle (expressed in nanoseconds), and puts the result in state->duty_cycle.”h]”hŒ„This functions converts a relative into an absolute duty cycle (expressed in nanoseconds), and puts the result in state->duty_cycle.”…”�”}”(hj‡Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Kñhj�Oubj<)�”}”(hŒ **scale**)”h]”(hŒ0 on success or ”…”�”}”(hj5Qh²hh³Nh´NubjB)�”}”(hŒ ``-EINVAL``”h]”hŒ-EINVAL”…”�”}”(hj=Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj5QubhŒ if ”…”�”}”(hj5Qh²hh³Nh´Nubj})�”}”(hŒ**duty_cycle**”h]”hŒ duty_cycle”…”�”}”(hjOQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj5QubhŒ and/or ”…”�”}”(hj5Qh²hh³Nh´Nubj})�”}”(hŒ **scale**”h]”hŒscale”…”�”}”(hjaQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj5QubhŒ are inconsistent (”…”�”}”(hj5Qh²hh³Nh´Nubj})�”}”(hŒ **scale**”h]”hŒscale”…”�”}”(hjsQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj5QubhŒ == 0 or ”…”�”}”(hj5Qh²hh³Nh´Nubj})�”}”(hŒ**duty_cycle**”h]”hŒ duty_cycle”…”�”}”(hj…Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj5QubhŒ > ”…”�”}”(hj5Qh²hh³Nh´Nubj})�”}”(hŒ **scale**”h]”hŒscale”…”�”}”(hj—Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj5QubhŒ)”…”�”}”(hj5Qh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Kûhj�Oubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒpwm_capture (C struct)”Œ c.pwm_capture”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ pwm_capture”h]”hè)�”}”(hŒstruct pwm_capture”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjÐQh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjÌQh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Mubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞQh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÌQh²hh³jÝQh´Mubhî)�”}”(hŒ pwm_capture”h]”hô)�”}”(hjÊQh]”hŒ pwm_capture”…”�”}”(hjðQh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjìQubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjÌQh²hh³jÝQh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjÈQh²hh³jÝQh´Mubah}”(h]”jÃQah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jÝQh´MhjÅQh²hubj#)�”}”(hhh]”j<)�”}”(hŒPWM capture data”h]”hŒPWM capture data”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´M hjRh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÅQh²hh³jÝQh´Mubeh}”(h]”h ]”(j0Œstruct”eh"]”h$]”h&]”j5j0j6j*Rj7j*Rj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(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]”(jX)�”}”(hŒl**Definition**:: struct pwm_capture { unsigned int period; unsigned int duty_cycle; }; ”h]”(j<)�”}”(hŒ**Definition**::”h]”(j})�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj:Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj6RubhŒ:”…”�”}”(hj6Rh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Mhj2RubjVA)�”}”(hŒQstruct pwm_capture { unsigned int period; unsigned int duty_cycle; };”h]”hŒQstruct pwm_capture { unsigned int period; unsigned int duty_cycle; };”…”�”}”hjSRsbah}”(h]”h ]”h"]”h$]”h&]”j j uh1jUAh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Mhj2Rubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³jRRh´Mhj.Rubj<)�”}”(hŒ **Members**”h]”j})�”}”(hjjRh]”hŒMembers”…”�”}”(hjlRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjhRubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Mhj.Rubj“)�”}”(hhh]”(j˜)�”}”(hŒ5``period`` period of the PWM signal (in nanoseconds) ”h]”(jž)�”}”(hŒ ``period``”h]”jB)�”}”(hj‰Rh]”hŒperiod”…”�”}”(hj‹Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj‡Rubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´MhjƒRubj¸)�”}”(hhh]”j<)�”}”(hŒ)period of the PWM signal (in nanoseconds)”h]”hŒ)period of the PWM signal (in nanoseconds)”…”�”}”(hj¢Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jžRh´MhjŸRubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjƒRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jžRh´Mhj€Rubj˜)�”}”(hŒ<``duty_cycle`` duty cycle of the PWM signal (in nanoseconds)”h]”(jž)�”}”(hŒ``duty_cycle``”h]”jB)�”}”(hjÂRh]”hŒ duty_cycle”…”�”}”(hjÄRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÀRubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Mhj¼Rubj¸)�”}”(hhh]”j<)�”}”(hŒ-duty cycle of the PWM signal (in nanoseconds)”h]”hŒ-duty cycle of the PWM signal (in nanoseconds)”…”�”}”(hjÛRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´MhjØRubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj¼Rubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j×Rh´Mhj€Rubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hj.Rubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒpwm_ops (C struct)”Œ c.pwm_ops”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒpwm_ops”h]”hè)�”}”(hŒstruct pwm_ops”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjSh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´Mubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Sh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjSh²hh³j)Sh´Mubhî)�”}”(hŒpwm_ops”h]”hô)�”}”(hjSh]”hŒpwm_ops”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj,Vh²hh³j=Vh´M*ubhî)�”}”(hŒpwm_chip”h]”hô)�”}”(hj*Vh]”hŒpwm_chip”…”�”}”(hjPVh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjLVubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj,Vh²hh³j=Vh´M*ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj(Vh²hh³j=Vh´M*ubah}”(h]”j#Vah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³j=Vh´M*hj%Vh²hubj#)�”}”(hhh]”j<)�”}”(hŒabstract a PWM controller”h]”hŒabstract a PWM controller”…”�”}”(hjrVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´M<hjoVh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj%Vh²hh³j=Vh´M*ubeh}”(h]”h ]”(j0Œstruct”eh"]”h$]”h&]”j5j0j6jŠVj7jŠVj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(hX· **Definition**:: struct pwm_chip { struct device dev; struct cdev cdev; 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; struct gpio_chip gpio; 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 ``cdev`` :c:type:`struct cdev ` for this device ``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 ``gpio`` :c:type:`struct gpio_chip ` to operate this PWM chip's lines as GPO ``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 framework”h]”(jX)�”}”(hX6**Definition**:: struct pwm_chip { struct device dev; struct cdev cdev; 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; struct gpio_chip gpio; bool uses_pwmchip_alloc; bool operational; union { struct mutex nonatomic_lock; spinlock_t atomic_lock; }; struct pwm_device pwms[]; }; ”h]”(j<)�”}”(hŒ**Definition**::”h]”(j})�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjšVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj–VubhŒ:”…”�”}”(hj–Vh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´M@hj’VubjVA)�”}”(hXÿstruct pwm_chip { struct device dev; struct cdev cdev; 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; struct gpio_chip gpio; bool uses_pwmchip_alloc; bool operational; union { struct mutex nonatomic_lock; spinlock_t atomic_lock; }; struct pwm_device pwms[]; };”h]”hXÿstruct pwm_chip { struct device dev; struct cdev cdev; 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; struct gpio_chip gpio; bool uses_pwmchip_alloc; bool operational; union { struct mutex nonatomic_lock; spinlock_t atomic_lock; }; struct pwm_device pwms[]; };”…”�”}”hj³Vsbah}”(h]”h ]”h"]”h$]”h&]”j j uh1jUAh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´MBhj’Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jWh³j²Vh´M@hjŽVubj<)�”}”(hŒ **Members**”h]”j})�”}”(hjÊVh]”hŒMembers”…”�”}”(hjÌVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjÈVubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´MUhjŽVubj“)�”}”(hhh]”(j˜)�”}”(hŒ"``dev`` device providing the PWMs ”h]”(jž)�”}”(hŒ``dev``”h]”jB)�”}”(hjéVh]”hŒdev”…”�”}”(hjëVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjçVubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´M>hjãVubj¸)�”}”(hhh]”j<)�”}”(hŒdevice providing the PWMs”h]”hŒdevice providing the PWMs”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jþVh´M>hjÿVubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjãVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jþVh´M>hjàVubj˜)�”}”(hŒ6``cdev`` :c:type:`struct cdev ` for this device ”h]”(jž)�”}”(hŒ``cdev``”h]”jB)�”}”(hj"Wh]”hŒcdev”…”�”}”(hj$Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´M?hjWubj¸)�”}”(hhh]”j<)�”}”(hŒ,:c:type:`struct cdev ` for this device”h]”(h)�”}”(hŒ:c:type:`struct cdev `”h]”jB)�”}”(hjAWh]”hŒ struct cdev”…”�”}”(hjCWh²hh³Nh´Nubah}”(h]”h ]”(jA?j0Œc-type”eh"]”h$]”h&]”uh1jAhj?Wubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jM?Œ refdomain”j0Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jjS?jV?Œcdev”uh1hh³j7Wh´M?hj;WubhŒ for this device”…”�”}”(hj;Wh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j7Wh´M?hj8Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjWubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j7Wh´M?hjàVubj˜)�”}”(hŒ*``ops`` callbacks for this PWM controller ”h]”(jž)�”}”(hŒ``ops``”h]”jB)�”}”(hjzWh]”hŒops”…”�”}”(hj|Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjxWubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´M@hjtWubj¸)�”}”(hhh]”j<)�”}”(hŒ!callbacks for this PWM controller”h]”hŒ!callbacks for this PWM controller”…”�”}”(hj“Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j�Wh´M@hj�Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjtWubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j�Wh´M@hjàVubj˜)�”}”(hŒ%``owner`` module providing this chip ”h]”(jž)�”}”(hŒ ``owner``”h]”jB)�”}”(hj³Wh]”hŒowner”…”�”}”(hjµWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj±Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´MAhj­Wubj¸)�”}”(hhh]”j<)�”}”(hŒmodule providing this chip”h]”hŒmodule providing this chip”…”�”}”(hjÌWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jÈWh´MAhjÉWubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj­Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jÈWh´MAhjàVubj˜)�”}”(hŒ&``id`` unique number of this PWM chip ”h]”(jž)�”}”(hŒ``id``”h]”jB)�”}”(hjìWh]”hŒid”…”�”}”(hjîWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjêWubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´MBhjæWubj¸)�”}”(hhh]”j<)�”}”(hŒunique number of this PWM chip”h]”hŒunique number of this PWM chip”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jXh´MBhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjæWubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jXh´MBhjàVubj˜)�”}”(hŒ0``npwm`` number of PWMs controlled by this chip ”h]”(jž)�”}”(hŒ``npwm``”h]”jB)�”}”(hj%Xh]”hŒnpwm”…”�”}”(hj'Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj#Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´MChjXubj¸)�”}”(hhh]”j<)�”}”(hŒ&number of PWMs controlled by this chip”h]”hŒ&number of PWMs controlled by this chip”…”�”}”(hj>Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j:Xh´MChj;Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j:Xh´MChjàVubj˜)�”}”(hŒD``of_xlate`` request a PWM device given a device tree PWM specifier ”h]”(jž)�”}”(hŒ ``of_xlate``”h]”jB)�”}”(hj^Xh]”hŒof_xlate”…”�”}”(hj`Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj\Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´MDhjXXubj¸)�”}”(hhh]”j<)�”}”(hŒ6request a PWM device given a device tree PWM specifier”h]”hŒ6request a PWM device given a device tree PWM specifier”…”�”}”(hjwXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jsXh´MDhjtXubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjXXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jsXh´MDhjàVubj˜)�”}”(hŒB``atomic`` can the driver's ->apply() be called in atomic context ”h]”(jž)�”}”(hŒ ``atomic``”h]”jB)�”}”(hj—Xh]”hŒatomic”…”�”}”(hj™Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj•Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´MEhj‘Xubj¸)�”}”(hhh]”j<)�”}”(hŒ6can the driver's ->apply() be called in atomic context”h]”hŒ8can the driver’s ->apply() be called in atomic context”…”�”}”(hj°Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j¬Xh´MEhj­Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj‘Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j¬Xh´MEhjàVubj˜)�”}”(hŒX``gpio`` :c:type:`struct gpio_chip ` to operate this PWM chip's lines as GPO ”h]”(jž)�”}”(hŒ``gpio``”h]”jB)�”}”(hjÐXh]”hŒgpio”…”�”}”(hjÒXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÎXubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´MFhjÊXubj¸)�”}”(hhh]”j<)�”}”(hŒN:c:type:`struct gpio_chip ` to operate this PWM chip's lines as GPO”h]”(h)�”}”(hŒ&:c:type:`struct gpio_chip `”h]”jB)�”}”(hjïXh]”hŒstruct gpio_chip”…”�”}”(hjñXh²hh³Nh´Nubah}”(h]”h ]”(jA?j0Œc-type”eh"]”h$]”h&]”uh1jAhjíXubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jM?Œ refdomain”j0Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jjS?jV?Œ gpio_chip”uh1hh³jåXh´MFhjéXubhŒ* to operate this PWM chip’s lines as GPO”…”�”}”(hjéXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jåXh´MFhjæXubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjÊXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jåXh´MFhjàVubj˜)�”}”(hŒO``uses_pwmchip_alloc`` signals if pwmchip_allow was used to allocate this chip ”h]”(jž)�”}”(hŒ``uses_pwmchip_alloc``”h]”jB)�”}”(hj(Yh]”hŒuses_pwmchip_alloc”…”�”}”(hj*Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj&Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´MGhj"Yubj¸)�”}”(hhh]”j<)�”}”(hŒ7signals if pwmchip_allow was used to allocate this chip”h]”hŒ7signals if pwmchip_allow was used to allocate this chip”…”�”}”(hjAYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j=Yh´MGhj>Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj"Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j=Yh´MGhjàVubj˜)�”}”(hŒM``operational`` signals if the chip can be used (or is already deregistered) ”h]”(jž)�”}”(hŒ``operational``”h]”jB)�”}”(hjaYh]”hŒ operational”…”�”}”(hjcYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj_Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´MHhj[Yubj¸)�”}”(hhh]”j<)�”}”(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ªbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:44: ./include/linux/pwm.h”h´MÛhj4bubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ+pwm_round_waveform_might_sleep (C function)”Œ c.pwm_round_waveform_might_sleep”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒTint pwm_round_waveform_might_sleep (struct pwm_device *pwm, struct pwm_waveform *wf)”h]”hè)�”}”(hŒSint pwm_round_waveform_might_sleep(struct pwm_device *pwm, struct pwm_waveform *wf)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hjÙbh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjÕbh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´KÖubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèbh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÕbh²hh³jçbh´KÖubhî)�”}”(hŒpwm_round_waveform_might_sleep”h]”hô)�”}”(hŒpwm_round_waveform_might_sleep”h]”hŒpwm_round_waveform_might_sleep”…”�”}”(hjúbh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjöbubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjÕbh²hh³jçbh´KÖubjÁ)�”}”(hŒ1(struct pwm_device *pwm, struct pwm_waveform *wf)”h]”(jÇ)�”}”(hŒstruct pwm_device *pwm”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjcubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#ch²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjcubh)�”}”(hhh]”hô)�”}”(hŒ pwm_device”h]”hŒ pwm_device”…”�”}”(hj4ch²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj1cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j6cŒmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjübsbŒ c.pwm_round_waveform_might_sleep”†”asbuh1hhjcubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTch²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjcubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjbch²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjcubhô)�”}”(hŒpwm”h]”hŒpwm”…”�”}”(hjoch²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjcubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjcubjÇ)�”}”(hŒstruct pwm_waveform *wf”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjˆch²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj„cubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•ch²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj„cubh)�”}”(hhh]”hô)�”}”(hŒ pwm_waveform”h]”hŒ pwm_waveform”…”�”}”(hj¦ch²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj£cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j¨cŒmodname”NŒ classname”Njj )�”}”j]”jPcŒ c.pwm_round_waveform_might_sleep”†”asbuh1hhj„cubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄch²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj„cubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjÒch²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hj„cubhô)�”}”(hŒwf”h]”hŒwf”…”�”}”(hjßch²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj„cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjcubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjÕbh²hh³jçbh´KÖubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjÑbh²hh³jçbh´KÖubah}”(h]”jÌbah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jçbh´KÖhjÎbh²hubj#)�”}”(hhh]”j<)�”}”(hŒ=Query hardware capabilities Cannot be used in atomic context.”h]”hŒ=Query hardware capabilities Cannot be used in atomic context.”…”�”}”(hj dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´KÖhjdh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÎbh²hh³jçbh´KÖubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j!dj7j!dj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(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, &wf); pwm_set_waveform_might_sleep(mypwm, &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. Usually all values passed in **wf** are rounded down to the nearest possible value (in the order period_length_ns, duty_length_ns and then duty_offset_ns). Only if this isn't possible, a value might grow. See the documentation for pwm_set_waveform_might_sleep() for a more formal description. **Return** 0 on success, 1 if at least one value had to be rounded up or a negative errno. **Context** May sleep.”h]”(j<)�”}”(hŒ**Parameters**”h]”j})�”}”(hj+dh]”hŒ Parameters”…”�”}”(hj-dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj)dubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´KÚhj%dubj“)�”}”(hhh]”(j˜)�”}”(hŒ&``struct pwm_device *pwm`` PWM device ”h]”(jž)�”}”(hŒ``struct pwm_device *pwm``”h]”jB)�”}”(hjJdh]”hŒstruct pwm_device *pwm”…”�”}”(hjLdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjHdubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´KØhjDdubj¸)�”}”(hhh]”j<)�”}”(hŒ PWM device”h]”hŒ PWM device”…”�”}”(hjcdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j_dh´KØhj`dubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjDdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j_dh´KØhjAdubj˜)�”}”(hŒC``struct pwm_waveform *wf`` waveform to round and output parameter ”h]”(jž)�”}”(hŒ``struct pwm_waveform *wf``”h]”jB)�”}”(hjƒdh]”hŒstruct pwm_waveform *wf”…”�”}”(hj…dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj�dubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´KÙhj}dubj¸)�”}”(hhh]”j<)�”}”(hŒ&waveform to round and output parameter”h]”hŒ&waveform to round and output parameter”…”�”}”(hjœdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j˜dh´KÙhj™dubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj}dubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j˜dh´KÙhjAdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hj%dubj<)�”}”(hŒ**Description**”h]”j})�”}”(hj¾dh]”hŒ Description”…”�”}”(hjÀdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¼dubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´KÛhj%dubj<)�”}”(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]”(hŒÚ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 ”…”�”}”(hjÔdh²hh³Nh´Nubj})�”}”(hŒ**wf**”h]”hŒwf”…”�”}”(hjÜdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjÔdubhŒ' to pwm_set_waveform_might_sleep() now.”…”�”}”(hjÔdh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´KÚhj%dubj<)�”}”(hŒRNote however that the world doesn't stop turning when you call it, so when doing::”h]”hŒSNote however that the world doesn’t stop turning when you call it, so when doing:”…”�”}”(hjõdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Kßhj%dubjVA)�”}”(hŒ[pwm_round_waveform_might_sleep(mypwm, &wf); pwm_set_waveform_might_sleep(mypwm, &wf, true);”h]”hŒ[pwm_round_waveform_might_sleep(mypwm, &wf); pwm_set_waveform_might_sleep(mypwm, &wf, true);”…”�”}”hjesbah}”(h]”h ]”h"]”h$]”h&]”j j uh1jUAh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Kâhj%dubj<)�”}”(hŒ»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.”h]”hŒ»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.”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Kåhj%dubj<)�”}”(hX$Usually all values passed in **wf** are rounded down to the nearest possible value (in the order period_length_ns, duty_length_ns and then duty_offset_ns). Only if this isn't possible, a value might grow. See the documentation for pwm_set_waveform_might_sleep() for a more formal description.”h]”(hŒUsually all values passed in ”…”�”}”(hj"eh²hh³Nh´Nubj})�”}”(hŒ**wf**”h]”hŒwf”…”�”}”(hj*eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj"eubhX are rounded down to the nearest possible value (in the order period_length_ns, duty_length_ns and then duty_offset_ns). Only if this isn’t possible, a value might grow. See the documentation for pwm_set_waveform_might_sleep() for a more formal description.”…”�”}”(hj"eh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Kéhj%dubj<)�”}”(hŒ **Return**”h]”j})�”}”(hjEeh]”hŒReturn”…”�”}”(hjGeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjCeubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Kïhj%dubj<)�”}”(hŒO0 on success, 1 if at least one value had to be rounded up or a negative errno.”h]”hŒO0 on success, 1 if at least one value had to be rounded up or a negative errno.”…”�”}”(hj[eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Kðhj%dubj<)�”}”(hŒ **Context**”h]”j})�”}”(hjleh]”hŒContext”…”�”}”(hjneh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjjeubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Kóhj%dubj<)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hj‚eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Kòhj%dubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ)pwm_get_waveform_might_sleep (C function)”Œc.pwm_get_waveform_might_sleep”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒRint pwm_get_waveform_might_sleep (struct pwm_device *pwm, struct pwm_waveform *wf)”h]”hè)�”}”(hŒQint pwm_get_waveform_might_sleep(struct pwm_device *pwm, struct pwm_waveform *wf)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hj±eh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj­eh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M$ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀeh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj­eh²hh³j¿eh´M$ubhî)�”}”(hŒpwm_get_waveform_might_sleep”h]”hô)�”}”(hŒpwm_get_waveform_might_sleep”h]”hŒpwm_get_waveform_might_sleep”…”�”}”(hjÒeh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjÎeubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj­eh²hh³j¿eh´M$ubjÁ)�”}”(hŒ1(struct pwm_device *pwm, struct pwm_waveform *wf)”h]”(jÇ)�”}”(hŒstruct pwm_device *pwm”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjîeh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjêeubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûeh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjêeubh)�”}”(hhh]”hô)�”}”(hŒ pwm_device”h]”hŒ pwm_device”…”�”}”(hj fh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jfŒmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjÔesbŒc.pwm_get_waveform_might_sleep”†”asbuh1hhjêeubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,fh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjêeubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj:fh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjêeubhô)�”}”(hŒpwm”h]”hŒpwm”…”�”}”(hjGfh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjêeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjæeubjÇ)�”}”(hŒstruct pwm_waveform *wf”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj`fh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj\fubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmfh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj\fubh)�”}”(hhh]”hô)�”}”(hŒ pwm_waveform”h]”hŒ pwm_waveform”…”�”}”(hj~fh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj{fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j€fŒmodname”NŒ classname”Njj )�”}”j]”j(fŒc.pwm_get_waveform_might_sleep”†”asbuh1hhj\fubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœfh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj\fubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjªfh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hj\fubhô)�”}”(hŒwf”h]”hŒwf”…”�”}”(hj·fh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj\fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjæeubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj­eh²hh³j¿eh´M$ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj©eh²hh³j¿eh´M$ubah}”(h]”j¤eah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³j¿eh´M$hj¦eh²hubj#)�”}”(hhh]”j<)�”}”(hŒLQuery hardware about current configuration Cannot be used in atomic context.”h]”hŒLQuery hardware about current configuration Cannot be used in atomic context.”…”�”}”(hjáfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M$hjÞfh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¦eh²hh³j¿eh´M$ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jùfj7jùfj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(hXU**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. **Return** 0 on success or a negative errno **Context** May sleep.”h]”(j<)�”}”(hŒ**Parameters**”h]”j})�”}”(hjgh]”hŒ Parameters”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjgubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M(hjýfubj“)�”}”(hhh]”(j˜)�”}”(hŒ&``struct pwm_device *pwm`` PWM device ”h]”(jž)�”}”(hŒ``struct pwm_device *pwm``”h]”jB)�”}”(hj"gh]”hŒstruct pwm_device *pwm”…”�”}”(hj$gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj gubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M&hjgubj¸)�”}”(hhh]”j<)�”}”(hŒ PWM device”h]”hŒ PWM device”…”�”}”(hj;gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j7gh´M&hj8gubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j7gh´M&hjgubj˜)�”}”(hŒ-``struct pwm_waveform *wf`` output parameter ”h]”(jž)�”}”(hŒ``struct pwm_waveform *wf``”h]”jB)�”}”(hj[gh]”hŒstruct pwm_waveform *wf”…”�”}”(hj]gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjYgubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M'hjUgubj¸)�”}”(hhh]”j<)�”}”(hŒoutput parameter”h]”hŒoutput parameter”…”�”}”(hjtgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jpgh´M'hjqgubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjUgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jpgh´M'hjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hjýfubj<)�”}”(hŒ**Description**”h]”j})�”}”(hj–gh]”hŒ Description”…”�”}”(hj˜gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj”gubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M)hjýfubj<)�”}”(hŒ”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]”(hŒ/Stores the current configuration of the PWM in ”…”�”}”(hj¬gh²hh³Nh´Nubj})�”}”(hŒ**wf**”h]”hŒwf”…”�”}”(hj´gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¬gubhŒ_. Note this is the equivalent of pwm_get_state_hw() (and not pwm_get_state()) for pwm_waveform.”…”�”}”(hj¬gh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M(hjýfubj<)�”}”(hŒ **Return**”h]”j})�”}”(hjÏgh]”hŒReturn”…”�”}”(hjÑgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjÍgubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M+hjýfubj<)�”}”(hŒ 0 on success or a negative errno”h]”hŒ 0 on success or a negative errno”…”�”}”(hjågh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M,hjýfubj<)�”}”(hŒ **Context**”h]”j})�”}”(hjögh]”hŒContext”…”�”}”(hjøgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjôgubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M.hjýfubj<)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hj hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M-hjýfubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ)pwm_set_waveform_might_sleep (C function)”Œc.pwm_set_waveform_might_sleep”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒdint pwm_set_waveform_might_sleep (struct pwm_device *pwm, const struct pwm_waveform *wf, bool exact)”h]”hè)�”}”(hŒcint pwm_set_waveform_might_sleep(struct pwm_device *pwm, const struct pwm_waveform *wf, bool exact)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hj;hh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj7hh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M’ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJhh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj7hh²hh³jIhh´M’ubhî)�”}”(hŒpwm_set_waveform_might_sleep”h]”hô)�”}”(hŒpwm_set_waveform_might_sleep”h]”hŒpwm_set_waveform_might_sleep”…”�”}”(hj\hh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjXhubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj7hh²hh³jIhh´M’ubjÁ)�”}”(hŒC(struct pwm_device *pwm, const struct pwm_waveform *wf, bool exact)”h]”(jÇ)�”}”(hŒstruct pwm_device *pwm”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjxhh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjthubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…hh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjthubh)�”}”(hhh]”hô)�”}”(hŒ pwm_device”h]”hŒ pwm_device”…”�”}”(hj–hh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj“hubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j˜hŒmodname”NŒ classname”Njj )�”}”j]”j)�”}”jj^hsbŒc.pwm_set_waveform_might_sleep”†”asbuh1hhjthubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶hh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjthubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjÄhh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjthubhô)�”}”(hŒpwm”h]”hŒpwm”…”�”}”(hjÑhh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjthubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjphubjÇ)�”}”(hŒconst struct pwm_waveform *wf”h]”(jÍ)�”}”(hjÉh]”hŒconst”…”�”}”(hjêhh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjæhubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷hh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjæhubjÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjæhubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjæhubh)�”}”(hhh]”hô)�”}”(hŒ pwm_waveform”h]”hŒ pwm_waveform”…”�”}”(hj#ih²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj iubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j%iŒmodname”NŒ classname”Njj )�”}”j]”j²hŒc.pwm_set_waveform_might_sleep”†”asbuh1hhjæhubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAih²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjæhubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjOih²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjæhubhô)�”}”(hŒwf”h]”hŒwf”…”�”}”(hj\ih²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjæhubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjphubjÇ)�”}”(hŒ bool exact”h]”(j†)�”}”(hj¡Zh]”hŒbool”…”�”}”(hjuih²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjqiubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚ih²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjqiubhô)�”}”(hŒexact”h]”hŒexact”…”�”}”(hj�ih²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjqiubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjphubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj7hh²hh³jIhh´M’ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj3hh²hh³jIhh´M’ubah}”(h]”j.hah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jIhh´M’hj0hh²hubj#)�”}”(hhh]”j<)�”}”(hŒ6Apply a new waveform Cannot be used in atomic context.”h]”hŒ6Apply a new waveform Cannot be used in atomic context.”…”�”}”(hjºih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M’hj·ih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj0hh²hh³jIhh´M’ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jÒij7jÒij8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(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 -EDOM. 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 ns 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. Let C be the set of possible hardware configurations for a given PWM device, consisting of tuples (p, d, o) where p is the period length, d is the duty length and o the duty offset. The following algorithm is implemented to pick the hardware setting (p, d, o) ∈ C for a given request (p', d', o') with **exact** = false:: p = max( { á¹— | ∃ ḋ, ȯ : (á¹—, ḋ, ȯ) ∈ C ∧ á¹— ≤ p' } ∪ { min({ á¹— | ∃ ḋ, ȯ : (á¹—, ḋ, ȯ) ∈ C }) }) d = max( { ḋ | ∃ ȯ : (p, ḋ, ȯ) ∈ C ∧ ḋ ≤ d' } ∪ { min({ ḋ | ∃ ȯ : (p, ḋ, ȯ) ∈ C }) }) o = max( { ȯ | (p, d, ȯ) ∈ C ∧ ȯ ≤ o' } ∪ { min({ ȯ | (p, d, ȯ) ∈ C }) }) In words: The chosen period length is the maximal possible period length not bigger than the requested period length and if that doesn't exist, the minimal period length. The chosen duty length is the maximal possible duty length that is compatible with the chosen period length and isn't bigger than the requested duty length. Again if such a value doesn't exist, the minimal duty length compatible with the chosen period is picked. After that the duty offset compatible with the chosen period and duty length is chosen in the same way. **Return** 0 on success, -EDOM if setting failed due to the exact waveform not being possible (if **exact**), or a different negative errno on failure. **Context** May sleep.”h]”(j<)�”}”(hŒ**Parameters**”h]”j})�”}”(hjÜih]”hŒ Parameters”…”�”}”(hjÞih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjÚiubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M–hjÖiubj“)�”}”(hhh]”(j˜)�”}”(hŒ&``struct pwm_device *pwm`` PWM device ”h]”(jž)�”}”(hŒ``struct pwm_device *pwm``”h]”jB)�”}”(hjûih]”hŒstruct pwm_device *pwm”…”�”}”(hjýih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjùiubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M”hjõiubj¸)�”}”(hhh]”j<)�”}”(hŒ PWM device”h]”hŒ PWM device”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jjh´M”hjjubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjõiubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jjh´M”hjòiubj˜)�”}”(hŒ8``const struct pwm_waveform *wf`` The waveform to apply ”h]”(jž)�”}”(hŒ!``const struct pwm_waveform *wf``”h]”jB)�”}”(hj4jh]”hŒconst struct pwm_waveform *wf”…”�”}”(hj6jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj2jubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M•hj.jubj¸)�”}”(hhh]”j<)�”}”(hŒThe waveform to apply”h]”hŒThe waveform to apply”…”�”}”(hjMjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jIjh´M•hjJjubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj.jubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jIjh´M•hjòiubj˜)�”}”(hŒ.``bool exact`` If true no rounding is allowed ”h]”(jž)�”}”(hŒ``bool exact``”h]”jB)�”}”(hjmjh]”hŒ bool exact”…”�”}”(hjojh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjkjubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M–hjgjubj¸)�”}”(hhh]”j<)�”}”(hŒIf true no rounding is allowed”h]”hŒIf true no rounding is allowed”…”�”}”(hj†jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j‚jh´M–hjƒjubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjgjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j‚jh´M–hjòiubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hjÖiubj<)�”}”(hŒ**Description**”h]”j})�”}”(hj¨jh]”hŒ Description”…”�”}”(hjªjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¦jubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M˜hjÖiubj<)�”}”(hXzTypically 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 -EDOM. 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 ns 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]”(hŒÕ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 ”…”�”}”(hj¾jh²hh³Nh´Nubj})�”}”(hŒ **exact**”h]”hŒexact”…”�”}”(hjÆjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¾jubhŒR = true results in pwm_set_waveform_might_sleep() failing and returning -EDOM. If ”…”�”}”(hj¾jh²hh³Nh´Nubj})�”}”(hŒ **exact**”h]”hŒexact”…”�”}”(hjØjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¾jubhŒx = false you get a period of 93.5 ns (i.e. the biggest period not bigger than the requested value). Note that even with ”…”�”}”(hj¾jh²hh³Nh´Nubj})�”}”(hŒ **exact**”h]”hŒexact”…”�”}”(hjêjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¾jubhŒx = true, some rounding by less than 1 ns is possible/needed. In the above example requesting .period_length_ns = 94 and ”…”�”}”(hj¾jh²hh³Nh´Nubj})�”}”(hŒ **exact**”h]”hŒexact”…”�”}”(hjüjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj¾jubhŒ? = true, you get the hardware configured with period = 93.5 ns.”…”�”}”(hj¾jh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M—hjÖiubj<)�”}”(hŒµLet C be the set of possible hardware configurations for a given PWM device, consisting of tuples (p, d, o) where p is the period length, d is the duty length and o the duty offset.”h]”hŒµLet C be the set of possible hardware configurations for a given PWM device, consisting of tuples (p, d, o) where p is the period length, d is the duty length and o the duty offset.”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M¡hjÖiubj<)�”}”(hŒ�The following algorithm is implemented to pick the hardware setting (p, d, o) ∈ C for a given request (p', d', o') with **exact** = false::”h]”(hŒ€The following algorithm is implemented to pick the hardware setting (p, d, o) ∈ C for a given request (p’, d’, o’) with ”…”�”}”(hj$kh²hh³Nh´Nubj})�”}”(hŒ **exact**”h]”hŒexact”…”�”}”(hj,kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj$kubhŒ = false:”…”�”}”(hj$kh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M¥hjÖiubjVA)�”}”(hXJp = max( { á¹— | ∃ ḋ, ȯ : (á¹—, ḋ, ȯ) ∈ C ∧ á¹— ≤ p' } ∪ { min({ á¹— | ∃ ḋ, ȯ : (á¹—, ḋ, ȯ) ∈ C }) }) d = max( { ḋ | ∃ ȯ : (p, ḋ, ȯ) ∈ C ∧ ḋ ≤ d' } ∪ { min({ ḋ | ∃ ȯ : (p, ḋ, ȯ) ∈ C }) }) o = max( { ȯ | (p, d, ȯ) ∈ C ∧ ȯ ≤ o' } ∪ { min({ ȯ | (p, d, ȯ) ∈ C }) })”h]”hXJp = max( { á¹— | ∃ ḋ, ȯ : (á¹—, ḋ, ȯ) ∈ C ∧ á¹— ≤ p' } ∪ { min({ á¹— | ∃ ḋ, ȯ : (á¹—, ḋ, ȯ) ∈ C }) }) d = max( { ḋ | ∃ ȯ : (p, ḋ, ȯ) ∈ C ∧ ḋ ≤ d' } ∪ { min({ ḋ | ∃ ȯ : (p, ḋ, ȯ) ∈ C }) }) o = max( { ȯ | (p, d, ȯ) ∈ C ∧ ȯ ≤ o' } ∪ { min({ ȯ | (p, d, ȯ) ∈ C }) })”…”�”}”hjEksbah}”(h]”h ]”h"]”h$]”h&]”j j uh1jUAh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M¨hjÖiubj<)�”}”(hXIn words: The chosen period length is the maximal possible period length not bigger than the requested period length and if that doesn't exist, the minimal period length. The chosen duty length is the maximal possible duty length that is compatible with the chosen period length and isn't bigger than the requested duty length. Again if such a value doesn't exist, the minimal duty length compatible with the chosen period is picked. After that the duty offset compatible with the chosen period and duty length is chosen in the same way.”h]”hXIn words: The chosen period length is the maximal possible period length not bigger than the requested period length and if that doesn’t exist, the minimal period length. The chosen duty length is the maximal possible duty length that is compatible with the chosen period length and isn’t bigger than the requested duty length. Again if such a value doesn’t exist, the minimal duty length compatible with the chosen period is picked. After that the duty offset compatible with the chosen period and duty length is chosen in the same way.”…”�”}”(hjTkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M¬hjÖiubj<)�”}”(hŒ **Return**”h]”j})�”}”(hjekh]”hŒReturn”…”�”}”(hjgkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjckubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MµhjÖiubj<)�”}”(hŒŒ0 on success, -EDOM if setting failed due to the exact waveform not being possible (if **exact**), or a different negative errno on failure.”h]”(hŒW0 on success, -EDOM if setting failed due to the exact waveform not being possible (if ”…”�”}”(hj{kh²hh³Nh´Nubj})�”}”(hŒ **exact**”h]”hŒexact”…”�”}”(hjƒkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj{kubhŒ,), or a different negative errno on failure.”…”�”}”(hj{kh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M¶hjÖiubj<)�”}”(hŒ **Context**”h]”j})�”}”(hjžkh]”hŒContext”…”�”}”(hj kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjœkubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M¹hjÖiubj<)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hj´kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M¸hjÖiubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ"pwm_apply_might_sleep (C function)”Œc.pwm_apply_might_sleep”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒQint pwm_apply_might_sleep (struct pwm_device *pwm, const struct pwm_state *state)”h]”hè)�”}”(hŒPint pwm_apply_might_sleep(struct pwm_device *pwm, const struct pwm_state *state)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hjãkh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjßkh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MÕubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòkh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjßkh²hh³jñkh´MÕubhî)�”}”(hŒpwm_apply_might_sleep”h]”hô)�”}”(hŒpwm_apply_might_sleep”h]”hŒpwm_apply_might_sleep”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjlubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjßkh²hh³jñkh´MÕubjÁ)�”}”(hŒ7(struct pwm_device *pwm, const struct pwm_state *state)”h]”(jÇ)�”}”(hŒstruct pwm_device *pwm”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj lh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjlubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-lh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjlubh)�”}”(hhh]”hô)�”}”(hŒ pwm_device”h]”hŒ pwm_device”…”�”}”(hj>lh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj;lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j@lŒmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjlsbŒc.pwm_apply_might_sleep”†”asbuh1hhjlubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^lh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjlubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjllh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjlubhô)�”}”(hŒpwm”h]”hŒpwm”…”�”}”(hjylh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjlubjÇ)�”}”(hŒconst struct pwm_state *state”h]”(jÍ)�”}”(hjÉh]”hŒconst”…”�”}”(hj’lh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjŽlubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸlh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjŽlubjÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj­lh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjŽlubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºlh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjŽlubh)�”}”(hhh]”hô)�”}”(hŒ pwm_state”h]”hŒ pwm_state”…”�”}”(hjËlh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjÈlubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jÍlŒmodname”NŒ classname”Njj )�”}”j]”jZlŒc.pwm_apply_might_sleep”†”asbuh1hhjŽlubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjélh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjŽlubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj÷lh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjŽlubhô)�”}”(hŒstate”h]”hŒstate”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjŽlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjlubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjßkh²hh³jñkh´MÕubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjÛkh²hh³jñkh´MÕubah}”(h]”jÖkah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jñkh´MÕhjØkh²hubj#)�”}”(hhh]”j<)�”}”(hŒNatomically apply a new state to a PWM device Cannot be used in atomic context.”h]”hŒNatomically apply a new state to a PWM device Cannot be used in atomic context.”…”�”}”(hj.mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MÕhj+mh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjØkh²hh³jñkh´MÕubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jFmj7jFmj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(hŒ·**Parameters** ``struct pwm_device *pwm`` PWM device ``const struct pwm_state *state`` new state to apply **Return** 0 on success, or a negative errno **Context** May sleep.”h]”(j<)�”}”(hŒ**Parameters**”h]”j})�”}”(hjPmh]”hŒ Parameters”…”�”}”(hjRmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjNmubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MÙhjJmubj“)�”}”(hhh]”(j˜)�”}”(hŒ&``struct pwm_device *pwm`` PWM device ”h]”(jž)�”}”(hŒ``struct pwm_device *pwm``”h]”jB)�”}”(hjomh]”hŒstruct pwm_device *pwm”…”�”}”(hjqmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjmmubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M×hjimubj¸)�”}”(hhh]”j<)�”}”(hŒ PWM device”h]”hŒ PWM device”…”�”}”(hjˆmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j„mh´M×hj…mubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjimubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j„mh´M×hjfmubj˜)�”}”(hŒ5``const struct pwm_state *state`` new state to apply ”h]”(jž)�”}”(hŒ!``const struct pwm_state *state``”h]”jB)�”}”(hj¨mh]”hŒconst struct pwm_state *state”…”�”}”(hjªmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj¦mubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MØhj¢mubj¸)�”}”(hhh]”j<)�”}”(hŒnew state to apply”h]”hŒnew state to apply”…”�”}”(hjÁmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j½mh´MØhj¾mubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj¢mubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j½mh´MØhjfmubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hjJmubj<)�”}”(hŒ **Return**”h]”j})�”}”(hjãmh]”hŒReturn”…”�”}”(hjåmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjámubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MÚhjJmubj<)�”}”(hŒ!0 on success, or a negative errno”h]”hŒ!0 on success, or a negative errno”…”�”}”(hjùmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MÚhjJmubj<)�”}”(hŒ **Context**”h]”j})�”}”(hj nh]”hŒContext”…”�”}”(hj nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjnubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MÜhjJmubj<)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hj nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MÛhjJmubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒpwm_apply_atomic (C function)”Œc.pwm_apply_atomic”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒLint pwm_apply_atomic (struct pwm_device *pwm, const struct pwm_state *state)”h]”hè)�”}”(hŒKint pwm_apply_atomic(struct pwm_device *pwm, const struct pwm_state *state)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hjOnh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjKnh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^nh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjKnh²hh³j]nh´Mubhî)�”}”(hŒpwm_apply_atomic”h]”hô)�”}”(hŒpwm_apply_atomic”h]”hŒpwm_apply_atomic”…”�”}”(hjpnh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjlnubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjKnh²hh³j]nh´MubjÁ)�”}”(hŒ7(struct pwm_device *pwm, const struct pwm_state *state)”h]”(jÇ)�”}”(hŒstruct pwm_device *pwm”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjŒnh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjˆnubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™nh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjˆnubh)�”}”(hhh]”hô)�”}”(hŒ pwm_device”h]”hŒ pwm_device”…”�”}”(hjªnh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj§nubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”•Uëj0Œreftype”jŒ reftarget”j¬nŒmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjrnsbŒc.pwm_apply_atomic”†”asbuh1hhjˆnubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊnh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjˆnubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjØnh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjˆnubhô)�”}”(hŒpwm”h]”hŒpwm”…”�”}”(hjånh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjˆnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj„nubjÇ)�”}”(hŒconst struct pwm_state *state”h]”(jÍ)�”}”(hjÉh]”hŒconst”…”�”}”(hjþnh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjúnubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj oh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjúnubjÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjúnubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&oh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjúnubh)�”}”(hhh]”hô)�”}”(hŒ pwm_state”h]”hŒ pwm_state”…”�”}”(hj7oh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj4oubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j9oŒmodname”NŒ classname”Njj )�”}”j]”jÆnŒc.pwm_apply_atomic”†”asbuh1hhjúnubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUoh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjúnubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjcoh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjúnubhô)�”}”(hŒstate”h]”hŒstate”…”�”}”(hjpoh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjúnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj„nubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjKnh²hh³j]nh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjGnh²hh³j]nh´Mubah}”(h]”jBnah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³j]nh´MhjDnh²hubj#)�”}”(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().”…”�”}”(hjšoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhj—oh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjDnh²hh³j]nh´Mubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j²oj7j²oj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(hŒ°**Parameters** ``struct pwm_device *pwm`` PWM device ``const struct pwm_state *state`` new state to apply **Return** 0 on success, or a negative errno **Context** Any”h]”(j<)�”}”(hŒ**Parameters**”h]”j})�”}”(hj¼oh]”hŒ Parameters”…”�”}”(hj¾oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjºoubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhj¶oubj“)�”}”(hhh]”(j˜)�”}”(hŒ&``struct pwm_device *pwm`` PWM device ”h]”(jž)�”}”(hŒ``struct pwm_device *pwm``”h]”jB)�”}”(hjÛoh]”hŒstruct pwm_device *pwm”…”�”}”(hjÝoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÙoubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MhjÕoubj¸)�”}”(hhh]”j<)�”}”(hŒ PWM device”h]”hŒ PWM device”…”�”}”(hjôoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jðoh´Mhjñoubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjÕoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jðoh´MhjÒoubj˜)�”}”(hŒ5``const struct pwm_state *state`` new state to apply ”h]”(jž)�”}”(hŒ!``const struct pwm_state *state``”h]”jB)�”}”(hjph]”hŒconst struct pwm_state *state”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhjpubj¸)�”}”(hhh]”j<)�”}”(hŒnew state to apply”h]”hŒnew state to apply”…”�”}”(hj-ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j)ph´Mhj*pubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjpubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j)ph´MhjÒoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hj¶oubj<)�”}”(hŒ **Return**”h]”j})�”}”(hjOph]”hŒReturn”…”�”}”(hjQph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjMpubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhj¶oubj<)�”}”(hŒ!0 on success, or a negative errno”h]”hŒ!0 on success, or a negative errno”…”�”}”(hjeph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhj¶oubj<)�”}”(hŒ **Context**”h]”j})�”}”(hjvph]”hŒContext”…”�”}”(hjxph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjtpubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhj¶oubj<)�”}”(hŒAny”h]”hŒAny”…”�”}”(hjŒph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhj¶oubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒpwm_get_state_hw (C function)”Œc.pwm_get_state_hw”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒFint pwm_get_state_hw (struct pwm_device *pwm, struct pwm_state *state)”h]”hè)�”}”(hŒEint pwm_get_state_hw(struct pwm_device *pwm, struct pwm_state *state)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hj»ph²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj·ph²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊph²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj·ph²hh³jÉph´Mubhî)�”}”(hŒpwm_get_state_hw”h]”hô)�”}”(hŒpwm_get_state_hw”h]”hŒpwm_get_state_hw”…”�”}”(hjÜph²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjØpubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj·ph²hh³jÉph´MubjÁ)�”}”(hŒ1(struct pwm_device *pwm, struct pwm_state *state)”h]”(jÇ)�”}”(hŒstruct pwm_device *pwm”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjøph²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjôpubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjôpubh)�”}”(hhh]”hô)�”}”(hŒ pwm_device”h]”hŒ pwm_device”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjqubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jqŒmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjÞpsbŒc.pwm_get_state_hw”†”asbuh1hhjôpubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6qh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjôpubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjDqh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjôpubhô)�”}”(hŒpwm”h]”hŒpwm”…”�”}”(hjQqh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjôpubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjðpubjÇ)�”}”(hŒstruct pwm_state *state”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjjqh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjfqubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwqh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjfqubh)�”}”(hhh]”hô)�”}”(hŒ pwm_state”h]”hŒ pwm_state”…”�”}”(hjˆqh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj…qubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jŠqŒmodname”NŒ classname”Njj )�”}”j]”j2qŒc.pwm_get_state_hw”†”asbuh1hhjfqubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦qh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjfqubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj´qh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjfqubhô)�”}”(hŒstate”h]”hŒstate”…”�”}”(hjÁqh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjfqubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjðpubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj·ph²hh³jÉph´Mubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj³ph²hh³jÉph´Mubah}”(h]”j®pah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jÉph´Mhj°ph²hubj#)�”}”(hhh]”j<)�”}”(hŒ'get the current PWM state from hardware”h]”hŒ'get the current PWM state from hardware”…”�”}”(hjëqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhjèqh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj°ph²hh³jÉph´Mubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jrj7jrj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(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]”j})�”}”(hj rh]”hŒ Parameters”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj rubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhjrubj“)�”}”(hhh]”(j˜)�”}”(hŒ&``struct pwm_device *pwm`` PWM device ”h]”(jž)�”}”(hŒ``struct pwm_device *pwm``”h]”jB)�”}”(hj,rh]”hŒstruct pwm_device *pwm”…”�”}”(hj.rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj*rubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhj&rubj¸)�”}”(hhh]”j<)�”}”(hŒ PWM device”h]”hŒ PWM device”…”�”}”(hjErh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jArh´MhjBrubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj&rubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jArh´Mhj#rubj˜)�”}”(hŒE``struct pwm_state *state`` state to fill with the current PWM state ”h]”(jž)�”}”(hŒ``struct pwm_state *state``”h]”jB)�”}”(hjerh]”hŒstruct pwm_state *state”…”�”}”(hjgrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjcrubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhj_rubj¸)�”}”(hhh]”j<)�”}”(hŒ(state to fill with the current PWM state”h]”hŒ(state to fill with the current PWM state”…”�”}”(hj~rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jzrh´Mhj{rubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj_rubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jzrh´Mhj#rubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hjrubj<)�”}”(hŒ**Description**”h]”j})�”}”(hj rh]”hŒ Description”…”�”}”(hj¢rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjžrubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhjrubj<)�”}”(hŒhSimilar to pwm_get_state() but reads the current PWM state from hardware instead of the requested state.”h]”hŒhSimilar to pwm_get_state() but reads the current PWM state from hardware instead of the requested state.”…”�”}”(hj¶rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhjrubj<)�”}”(hŒ **Return**”h]”j})�”}”(hjÇrh]”hŒReturn”…”�”}”(hjÉrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjÅrubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M hjrubj<)�”}”(hŒ10 on success or a negative error code on failure.”h]”hŒ10 on success or a negative error code on failure.”…”�”}”(hjÝrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M!hjrubj<)�”}”(hŒ **Context**”h]”j})�”}”(hjîrh]”hŒContext”…”�”}”(hjðrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjìrubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M#hjrubj<)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M"hjrubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒpwm_adjust_config (C function)”Œc.pwm_adjust_config”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ.int pwm_adjust_config (struct pwm_device *pwm)”h]”hè)�”}”(hŒ-int pwm_adjust_config(struct pwm_device *pwm)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hj3sh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj/sh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MKubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBsh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj/sh²hh³jAsh´MKubhî)�”}”(hŒpwm_adjust_config”h]”hô)�”}”(hŒpwm_adjust_config”h]”hŒpwm_adjust_config”…”�”}”(hjTsh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjPsubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj/sh²hh³jAsh´MKubjÁ)�”}”(hŒ(struct pwm_device *pwm)”h]”jÇ)�”}”(hŒstruct pwm_device *pwm”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjpsh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjlsubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}sh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjlsubh)�”}”(hhh]”hô)�”}”(hŒ pwm_device”h]”hŒ pwm_device”…”�”}”(hjŽsh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj‹subah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j�sŒmodname”NŒ classname”Njj )�”}”j]”j)�”}”jjVssbŒc.pwm_adjust_config”†”asbuh1hhjlsubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®sh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjlsubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj¼sh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjlsubhô)�”}”(hŒpwm”h]”hŒpwm”…”�”}”(hjÉsh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjlsubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjhsubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj/sh²hh³jAsh´MKubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj+sh²hh³jAsh´MKubah}”(h]”j&sah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jAsh´MKhj(sh²hubj#)�”}”(hhh]”j<)�”}”(hŒ2adjust the current PWM config to the PWM arguments”h]”hŒ2adjust the current PWM config to the PWM arguments”…”�”}”(hjósh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MKhjðsh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj(sh²hh³jAsh´MKubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j tj7j tj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(hXT**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. **Return** 0 on success or a negative error code on failure. **Context** May sleep.”h]”(j<)�”}”(hŒ**Parameters**”h]”j})�”}”(hjth]”hŒ Parameters”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MOhjtubj“)�”}”(hhh]”j˜)�”}”(hŒ&``struct pwm_device *pwm`` PWM device ”h]”(jž)�”}”(hŒ``struct pwm_device *pwm``”h]”jB)�”}”(hj4th]”hŒstruct pwm_device *pwm”…”�”}”(hj6th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj2tubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MLhj.tubj¸)�”}”(hhh]”j<)�”}”(hŒ PWM device”h]”hŒ PWM device”…”�”}”(hjMth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jIth´MLhjJtubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj.tubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jIth´MLhj+tubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hjtubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjoth]”hŒ Description”…”�”}”(hjqth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjmtubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MNhjtubj<)�”}”(hŒ²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]”hŒ²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.”…”�”}”(hj…th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MMhjtubj<)�”}”(hŒ **Return**”h]”j})�”}”(hj–th]”hŒReturn”…”�”}”(hj˜th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj”tubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MQhjtubj<)�”}”(hŒ10 on success or a negative error code on failure.”h]”hŒ10 on success or a negative error code on failure.”…”�”}”(hj¬th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MRhjtubj<)�”}”(hŒ **Context**”h]”j})�”}”(hj½th]”hŒContext”…”�”}”(hj¿th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj»tubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MThjtubj<)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hjÓth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MShjtubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒpwm_get (C function)”Œ c.pwm_get”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒDstruct pwm_device * pwm_get (struct device *dev, const char *con_id)”h]”hè)�”}”(hŒBstruct pwm_device *pwm_get(struct device *dev, const char *con_id)”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjþth²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mjubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjþth²hh³juh´Mjubh)�”}”(hhh]”hô)�”}”(hŒ pwm_device”h]”hŒ pwm_device”…”�”}”(hj!uh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjuubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j#uŒmodname”NŒ classname”Njj )�”}”j]”j)�”}”jŒpwm_get”sbŒ c.pwm_get”†”asbuh1hhjþth²hh³juh´Mjubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBuh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjþth²hh³juh´Mjubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjPuh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjþth²hh³juh´Mjubhî)�”}”(hŒpwm_get”h]”hô)�”}”(hj?uh]”hŒpwm_get”…”�”}”(hjauh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj]uubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjþth²hh³juh´MjubjÁ)�”}”(hŒ((struct device *dev, const char *con_id)”h]”(jÇ)�”}”(hŒstruct device *dev”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj|uh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjxuubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰uh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjxuubh)�”}”(hhh]”hô)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjšuh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj—uubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jœuŒmodname”NŒ classname”Njj )�”}”j]”j=uŒ c.pwm_get”†”asbuh1hhjxuubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸uh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjxuubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjÆuh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjxuubhô)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÓuh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjxuubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjtuubjÇ)�”}”(hŒconst char *con_id”h]”(jÍ)�”}”(hjÉh]”hŒconst”…”�”}”(hjìuh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjèuubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùuh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjèuubj†)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjèuubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjèuubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj#vh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjèuubhô)�”}”(hŒcon_id”h]”hŒcon_id”…”�”}”(hj0vh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjèuubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjtuubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjþth²hh³juh´Mjubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjúth²hh³juh´Mjubah}”(h]”jõtah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³juh´Mjhj÷th²hubj#)�”}”(hhh]”j<)�”}”(hŒ look up and request a PWM device”h]”hŒ look up and request a PWM device”…”�”}”(hjZvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MjhjWvh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj÷th²hh³juh´Mjubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jrvj7jrvj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(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]”j})�”}”(hj|vh]”hŒ Parameters”…”�”}”(hj~vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjzvubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mnhjvvubj“)�”}”(hhh]”(j˜)�”}”(hŒ/``struct device *dev`` device for PWM consumer ”h]”(jž)�”}”(hŒ``struct device *dev``”h]”jB)�”}”(hj›vh]”hŒstruct device *dev”…”�”}”(hj�vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj™vubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mkhj•vubj¸)�”}”(hhh]”j<)�”}”(hŒdevice for PWM consumer”h]”hŒdevice for PWM consumer”…”�”}”(hj´vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j°vh´Mkhj±vubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj•vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j°vh´Mkhj’vubj˜)�”}”(hŒ%``const char *con_id`` consumer name ”h]”(jž)�”}”(hŒ``const char *con_id``”h]”jB)�”}”(hjÔvh]”hŒconst char *con_id”…”�”}”(hjÖvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÒvubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MlhjÎvubj¸)�”}”(hhh]”j<)�”}”(hŒ consumer name”h]”hŒ consumer name”…”�”}”(hjívh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jévh´Mlhjêvubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjÎvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jévh´Mlhj’vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hjvvubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjwh]”hŒ Description”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj wubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mnhjvvubj<)�”}”(hŒÇ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()).”h]”hŒÇ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()).”…”�”}”(hj%wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mmhjvvubj<)�”}”(hŒbOnce a PWM chip has been found the specified PWM device will be requested and is ready to be used.”h]”hŒbOnce a PWM chip has been found the specified PWM device will be requested and is ready to be used.”…”�”}”(hj4wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mqhjvvubj<)�”}”(hŒ **Return**”h]”j})�”}”(hjEwh]”hŒReturn”…”�”}”(hjGwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjCwubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mthjvvubj<)�”}”(hŒTA pointer to the requested PWM device or an ERR_PTR()-encoded error code on failure.”h]”hŒTA pointer to the requested PWM device or an ERR_PTR()-encoded error code on failure.”…”�”}”(hj[wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Muhjvvubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒpwm_put (C function)”Œ c.pwm_put”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ%void pwm_put (struct pwm_device *pwm)”h]”hè)�”}”(hŒ$void pwm_put(struct pwm_device *pwm)”h]”(j†)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŠwh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj†wh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mýubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™wh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj†wh²hh³j˜wh´Mýubhî)�”}”(hŒpwm_put”h]”hô)�”}”(hŒpwm_put”h]”hŒpwm_put”…”�”}”(hj«wh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj§wubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj†wh²hh³j˜wh´MýubjÁ)�”}”(hŒ(struct pwm_device *pwm)”h]”jÇ)�”}”(hŒstruct pwm_device *pwm”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjÇwh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjÃwubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔwh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÃwubh)�”}”(hhh]”hô)�”}”(hŒ pwm_device”h]”hŒ pwm_device”…”�”}”(hjåwh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjâwubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jçwŒmodname”NŒ classname”Njj )�”}”j]”j)�”}”jj­wsbŒ c.pwm_put”†”asbuh1hhjÃwubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÃwubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjÃwubhô)�”}”(hŒpwm”h]”hŒpwm”…”�”}”(hj xh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjÃwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj¿wubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj†wh²hh³j˜wh´Mýubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhj‚wh²hh³j˜wh´Mýubah}”(h]”j}wah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³j˜wh´Mýhjwh²hubj#)�”}”(hhh]”j<)�”}”(hŒrelease a PWM device”h]”hŒrelease a PWM device”…”�”}”(hjJxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MýhjGxh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjwh²hh³j˜wh´Mýubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jbxj7jbxj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(hŒ7**Parameters** ``struct pwm_device *pwm`` PWM device”h]”(j<)�”}”(hŒ**Parameters**”h]”j})�”}”(hjlxh]”hŒ Parameters”…”�”}”(hjnxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjjxubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhjfxubj“)�”}”(hhh]”j˜)�”}”(hŒ%``struct pwm_device *pwm`` PWM device”h]”(jž)�”}”(hŒ``struct pwm_device *pwm``”h]”jB)�”}”(hj‹xh]”hŒstruct pwm_device *pwm”…”�”}”(hj�xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj‰xubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhj…xubj¸)�”}”(hhh]”j<)�”}”(hŒ PWM device”h]”hŒ PWM device”…”�”}”(hj¤xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mþhj¡xubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj…xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j xh´Mhj‚xubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hjfxubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒdevm_pwm_get (C function)”Œc.devm_pwm_get”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒIstruct pwm_device * devm_pwm_get (struct device *dev, const char *con_id)”h]”hè)�”}”(hŒGstruct pwm_device *devm_pwm_get(struct device *dev, const char *con_id)”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjåxh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjáxh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóxh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjáxh²hh³jòxh´Mubh)�”}”(hhh]”hô)�”}”(hŒ pwm_device”h]”hŒ pwm_device”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjyubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jyŒmodname”NŒ classname”Njj )�”}”j]”j)�”}”jŒ devm_pwm_get”sbŒc.devm_pwm_get”†”asbuh1hhjáxh²hh³jòxh´Mubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%yh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjáxh²hh³jòxh´Mubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj3yh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjáxh²hh³jòxh´Mubhî)�”}”(hŒ devm_pwm_get”h]”hô)�”}”(hj"yh]”hŒ devm_pwm_get”…”�”}”(hjDyh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj@yubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjáxh²hh³jòxh´MubjÁ)�”}”(hŒ((struct device *dev, const char *con_id)”h]”(jÇ)�”}”(hŒstruct device *dev”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj_yh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj[yubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlyh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj[yubh)�”}”(hhh]”hô)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj}yh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjzyubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jyŒmodname”NŒ classname”Njj )�”}”j]”j yŒc.devm_pwm_get”†”asbuh1hhj[yubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›yh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj[yubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj©yh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hj[yubhô)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj¶yh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj[yubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjWyubjÇ)�”}”(hŒconst char *con_id”h]”(jÍ)�”}”(hjÉh]”hŒconst”…”�”}”(hjÏyh²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjËyubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜyh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjËyubj†)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjêyh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjËyubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøyh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjËyubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjËyubhô)�”}”(hŒcon_id”h]”hŒcon_id”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjËyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjWyubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjáxh²hh³jòxh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjÝxh²hh³jòxh´Mubah}”(h]”jØxah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jòxh´MhjÚxh²hubj#)�”}”(hhh]”j<)�”}”(hŒresource managed pwm_get()”h]”hŒresource managed pwm_get()”…”�”}”(hj=zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhj:zh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÚxh²hh³jòxh´Mubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jUzj7jUzj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(hXO**Parameters** ``struct device *dev`` device for PWM consumer ``const char *con_id`` consumer name **Description** This function performs like pwm_get() but the acquired PWM device will automatically be released on driver detach. **Return** A pointer to the requested PWM device or an ERR_PTR()-encoded error code on failure.”h]”(j<)�”}”(hŒ**Parameters**”h]”j})�”}”(hj_zh]”hŒ Parameters”…”�”}”(hjazh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj]zubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MhjYzubj“)�”}”(hhh]”(j˜)�”}”(hŒ/``struct device *dev`` device for PWM consumer ”h]”(jž)�”}”(hŒ``struct device *dev``”h]”jB)�”}”(hj~zh]”hŒstruct device *dev”…”�”}”(hj€zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj|zubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhjxzubj¸)�”}”(hhh]”j<)�”}”(hŒdevice for PWM consumer”h]”hŒdevice for PWM consumer”…”�”}”(hj—zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j“zh´Mhj”zubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjxzubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j“zh´Mhjuzubj˜)�”}”(hŒ%``const char *con_id`` consumer name ”h]”(jž)�”}”(hŒ``const char *con_id``”h]”jB)�”}”(hj·zh]”hŒconst char *con_id”…”�”}”(hj¹zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjµzubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mhj±zubj¸)�”}”(hhh]”j<)�”}”(hŒ consumer name”h]”hŒ consumer name”…”�”}”(hjÐzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jÌzh´MhjÍzubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj±zubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jÌzh´Mhjuzubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hjYzubj<)�”}”(hŒ**Description**”h]”j})�”}”(hjòzh]”hŒ Description”…”�”}”(hjôzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjðzubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MhjYzubj<)�”}”(hŒrThis function performs like pwm_get() but the acquired PWM device will automatically be released on driver detach.”h]”hŒrThis function performs like pwm_get() but the acquired PWM device will automatically be released on driver detach.”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MhjYzubj<)�”}”(hŒ **Return**”h]”j})�”}”(hj{h]”hŒReturn”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MhjYzubj<)�”}”(hŒTA pointer to the requested PWM device or an ERR_PTR()-encoded error code on failure.”h]”hŒTA pointer to the requested PWM device or an ERR_PTR()-encoded error code on failure.”…”�”}”(hj/{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MhjYzubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ devm_fwnode_pwm_get (C function)”Œc.devm_fwnode_pwm_get”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒnstruct pwm_device * devm_fwnode_pwm_get (struct device *dev, struct fwnode_handle *fwnode, const char *con_id)”h]”hè)�”}”(hŒlstruct pwm_device *devm_fwnode_pwm_get(struct device *dev, struct fwnode_handle *fwnode, const char *con_id)”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj^{h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjZ{h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M-ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl{h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjZ{h²hh³jk{h´M-ubh)�”}”(hhh]”hô)�”}”(hŒ pwm_device”h]”hŒ pwm_device”…”�”}”(hj}{h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjz{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j{Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jŒdevm_fwnode_pwm_get”sbŒc.devm_fwnode_pwm_get”†”asbuh1hhjZ{h²hh³jk{h´M-ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž{h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjZ{h²hh³jk{h´M-ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj¬{h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjZ{h²hh³jk{h´M-ubhî)�”}”(hŒdevm_fwnode_pwm_get”h]”hô)�”}”(hj›{h]”hŒdevm_fwnode_pwm_get”…”�”}”(hj½{h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj¹{ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhjZ{h²hh³jk{h´M-ubjÁ)�”}”(hŒF(struct device *dev, struct fwnode_handle *fwnode, const char *con_id)”h]”(jÇ)�”}”(hŒstruct device *dev”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjØ{h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjÔ{ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå{h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÔ{ubh)�”}”(hhh]”hô)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjö{h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjó{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jø{Œmodname”NŒ classname”Njj )�”}”j]”j™{Œc.devm_fwnode_pwm_get”†”asbuh1hhjÔ{ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjÔ{ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj"|h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjÔ{ubhô)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj/|h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjÔ{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjÐ{ubjÇ)�”}”(hŒstruct fwnode_handle *fwnode”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hjH|h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhjD|ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU|h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjD|ubh)�”}”(hhh]”hô)�”}”(hŒ fwnode_handle”h]”hŒ fwnode_handle”…”�”}”(hjf|h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjc|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jh|Œmodname”NŒ classname”Njj )�”}”j]”j™{Œc.devm_fwnode_pwm_get”†”asbuh1hhjD|ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„|h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hjD|ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj’|h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hjD|ubhô)�”}”(hŒfwnode”h]”hŒfwnode”…”�”}”(hjŸ|h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjD|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjÐ{ubjÇ)�”}”(hŒconst char *con_id”h]”(jÍ)�”}”(hjÉh]”hŒconst”…”�”}”(hj¸|h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj´|ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ|h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj´|ubj†)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÓ|h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj´|ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá|h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj´|ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjï|h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hj´|ubhô)�”}”(hŒcon_id”h]”hŒcon_id”…”�”}”(hjü|h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj´|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjÐ{ubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhjZ{h²hh³jk{h´M-ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjV{h²hh³jk{h´M-ubah}”(h]”jQ{ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jk{h´M-hjS{h²hubj#)�”}”(hhh]”j<)�”}”(hŒ1request a resource managed PWM from firmware node”h]”hŒ1request a resource managed PWM from firmware node”…”�”}”(hj&}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M-hj#}h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjS{h²hh³jk{h´M-ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j>}j7j>}j8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(hX˜**Parameters** ``struct device *dev`` device for PWM consumer ``struct fwnode_handle *fwnode`` firmware node to get the PWM from ``const char *con_id`` consumer name **Description** Returns the PWM device parsed from the firmware node. See of_pwm_get() and acpi_pwm_get() for a detailed description. **Return** A pointer to the requested PWM device or an ERR_PTR()-encoded error code on failure.”h]”(j<)�”}”(hŒ**Parameters**”h]”j})�”}”(hjH}h]”hŒ Parameters”…”�”}”(hjJ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjF}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M1hjB}ubj“)�”}”(hhh]”(j˜)�”}”(hŒ/``struct device *dev`` device for PWM consumer ”h]”(jž)�”}”(hŒ``struct device *dev``”h]”jB)�”}”(hjg}h]”hŒstruct device *dev”…”�”}”(hji}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhje}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M.hja}ubj¸)�”}”(hhh]”j<)�”}”(hŒdevice for PWM consumer”h]”hŒdevice for PWM consumer”…”�”}”(hj€}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j|}h´M.hj}}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hja}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j|}h´M.hj^}ubj˜)�”}”(hŒC``struct fwnode_handle *fwnode`` firmware node to get the PWM from ”h]”(jž)�”}”(hŒ ``struct fwnode_handle *fwnode``”h]”jB)�”}”(hj }h]”hŒstruct fwnode_handle *fwnode”…”�”}”(hj¢}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjž}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M/hjš}ubj¸)�”}”(hhh]”j<)�”}”(hŒ!firmware node to get the PWM from”h]”hŒ!firmware node to get the PWM from”…”�”}”(hj¹}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jµ}h´M/hj¶}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjš}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jµ}h´M/hj^}ubj˜)�”}”(hŒ%``const char *con_id`` consumer name ”h]”(jž)�”}”(hŒ``const char *con_id``”h]”jB)�”}”(hjÙ}h]”hŒconst char *con_id”…”�”}”(hjÛ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj×}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M0hjÓ}ubj¸)�”}”(hhh]”j<)�”}”(hŒ consumer name”h]”hŒ consumer name”…”�”}”(hjò}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jî}h´M0hjï}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjÓ}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jî}h´M0hj^}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hjB}ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hj~h]”hŒ Description”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M2hjB}ubj<)�”}”(hŒuReturns the PWM device parsed from the firmware node. See of_pwm_get() and acpi_pwm_get() for a detailed description.”h]”hŒuReturns the PWM device parsed from the firmware node. See of_pwm_get() and acpi_pwm_get() for a detailed description.”…”�”}”(hj*~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M1hjB}ubj<)�”}”(hŒ **Return**”h]”j})�”}”(hj;~h]”hŒReturn”…”�”}”(hj=~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj9~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M4hjB}ubj<)�”}”(hŒTA pointer to the requested PWM device or an ERR_PTR()-encoded error code on failure.”h]”hŒTA pointer to the requested PWM device or an ERR_PTR()-encoded error code on failure.”…”�”}”(hjQ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M5hjB}ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒ__pwmchip_add (C function)”Œc.__pwmchip_add”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ?int __pwmchip_add (struct pwm_chip *chip, struct module *owner)”h]”hè)�”}”(hŒ>int __pwmchip_add(struct pwm_chip *chip, struct module *owner)”h]”(j†)�”}”(hŒint”h]”hŒint”…”�”}”(hj€~h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj|~h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MŠ ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�~h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj|~h²hh³jŽ~h´MŠ ubhî)�”}”(hŒ __pwmchip_add”h]”hô)�”}”(hŒ __pwmchip_add”h]”hŒ __pwmchip_add”…”�”}”(hj¡~h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj�~ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj|~h²hh³jŽ~h´MŠ ubjÁ)�”}”(hŒ-(struct pwm_chip *chip, struct module *owner)”h]”(jÇ)�”}”(hŒstruct pwm_chip *chip”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj½~h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj¹~ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ~h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj¹~ubh)�”}”(hhh]”hô)�”}”(hŒpwm_chip”h]”hŒpwm_chip”…”�”}”(hjÛ~h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjØ~ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jÝ~Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jj£~sbŒc.__pwmchip_add”†”asbuh1hhj¹~ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû~h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj¹~ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hj¹~ubhô)�”}”(hŒchip”h]”hŒchip”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj¹~ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjµ~ubjÇ)�”}”(hŒstruct module *owner”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj+ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj+ubh)�”}”(hhh]”hô)�”}”(hŒmodule”h]”hŒmodule”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhjJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jOŒmodname”NŒ classname”Njj )�”}”j]”j÷~Œc.__pwmchip_add”†”asbuh1hhj+ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj+ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hj+ubhô)�”}”(hŒowner”h]”hŒowner”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhjµ~ubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj|~h²hh³jŽ~h´MŠ ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjx~h²hh³jŽ~h´MŠ ubah}”(h]”js~ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jŽ~h´MŠ hju~h²hubj#)�”}”(hhh]”j<)�”}”(hŒregister a new PWM chip”h]”hŒregister a new PWM chip”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MŠ hj­h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hju~h²hh³jŽ~h´MŠ ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jÈj7jÈj8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(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]”j})�”}”(hjÒh]”hŒ Parameters”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MŽ hjÌubj“)�”}”(hhh]”(j˜)�”}”(hŒ.``struct pwm_chip *chip`` the PWM chip to add ”h]”(jž)�”}”(hŒ``struct pwm_chip *chip``”h]”jB)�”}”(hjñh]”hŒstruct pwm_chip *chip”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M‹ hjëubj¸)�”}”(hhh]”j<)�”}”(hŒthe PWM chip to add”h]”hŒthe PWM chip to add”…”�”}”(hj €h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j€h´M‹ hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j€h´M‹ hjèubj˜)�”}”(hŒE``struct module *owner`` reference to the module providing the chip. ”h]”(jž)�”}”(hŒ``struct module *owner``”h]”jB)�”}”(hj*€h]”hŒstruct module *owner”…”�”}”(hj,€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj(€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MŒ hj$€ubj¸)�”}”(hhh]”j<)�”}”(hŒ+reference to the module providing the chip.”h]”hŒ+reference to the module providing the chip.”…”�”}”(hjC€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³j?€h´MŒ hj@€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj$€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³j?€h´MŒ hjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j’hjÌubj<)�”}”(hŒ**Description**”h]”j})�”}”(hje€h]”hŒ Description”…”�”}”(hjg€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjc€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´MŽ hjÌubj<)�”}”(hŒoRegister a new PWM chip. **owner** is supposed to be THIS_MODULE, use the pwmchip_add wrapper to do this right.”h]”(hŒRegister a new PWM chip. ”…”�”}”(hj{€h²hh³Nh´Nubj})�”}”(hŒ **owner**”h]”hŒowner”…”�”}”(hjƒ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj{€ubhŒM is supposed to be THIS_MODULE, use the pwmchip_add wrapper to do this right.”…”�”}”(hj{€h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M� hjÌubj<)�”}”(hŒ **Return**”h]”j})�”}”(hjž€h]”hŒReturn”…”�”}”(hj €h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjœ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M� hjÌubj<)�”}”(hŒ10 on success or a negative error code on failure.”h]”hŒ10 on success or a negative error code on failure.”…”�”}”(hj´€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M‘ hjÌubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´NubhÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hØŒpwmchip_remove (C function)”Œc.pwmchip_remove”hNt”auh1hËhj ?h²hh³Nh´NubhÝ)�”}”(hhh]”(hâ)�”}”(hŒ+void pwmchip_remove (struct pwm_chip *chip)”h]”hè)�”}”(hŒ*void pwmchip_remove(struct pwm_chip *chip)”h]”(j†)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjã€h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj߀h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mó ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò€h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj߀h²hh³jñ€h´Mó ubhî)�”}”(hŒpwmchip_remove”h]”hô)�”}”(hŒpwmchip_remove”h]”hŒpwmchip_remove”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”j j uh1híhj߀h²hh³jñ€h´Mó ubjÁ)�”}”(hŒ(struct pwm_chip *chip)”h]”jÇ)�”}”(hŒstruct pwm_chip *chip”h]”(jÍ)�”}”(hjÐh]”hŒstruct”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”jÙah"]”h$]”h&]”uh1jÌhj�ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-�h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj�ubh)�”}”(hhh]”hô)�”}”(hŒpwm_chip”h]”hŒpwm_chip”…”�”}”(hj>�h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj;�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j@�Œmodname”NŒ classname”Njj )�”}”j]”j)�”}”jj�sbŒc.pwmchip_remove”†”asbuh1hhj�ubj˜)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^�h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j—hj�ubj%)�”}”(hj(h]”hŒ*”…”�”}”(hjl�h²hh³Nh´Nubah}”(h]”h ]”j1ah"]”h$]”h&]”uh1j$hj�ubhô)�”}”(hŒchip”h]”hŒchip”…”�”}”(hjy�h²hh³Nh´Nubah}”(h]”h ]”hÿah"]”h$]”h&]”uh1hóhj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj j uh1jÆhj�ubah}”(h]”h ]”h"]”h$]”h&]”j j uh1jÀhj߀h²hh³jñ€h´Mó ubeh}”(h]”h ]”h"]”h$]”h&]”j j jˆuh1hçjjhjÛ€h²hh³jñ€h´Mó ubah}”(h]”jÖ€ah ]”(jjeh"]”h$]”h&]”jˆj )j!huh1háh³jñ€h´Mó hjØ€h²hubj#)�”}”(hhh]”j<)�”}”(hŒremove a PWM chip”h]”hŒremove a PWM chip”…”�”}”(hj£�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mó hj �h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjØ€h²hh³jñ€h´Mó ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j»�j7j»�j8‰j9‰j:‰uh1hÜh²hhj ?h³Nh´Nubjs)�”}”(hŒh**Parameters** ``struct pwm_chip *chip`` the PWM chip to remove **Description** Removes a PWM chip.”h]”(j<)�”}”(hŒ**Parameters**”h]”j})�”}”(hjÅ�h]”hŒ Parameters”…”�”}”(hjÇ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjÃ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´M÷ hj¿�ubj“)�”}”(hhh]”j˜)�”}”(hŒ1``struct pwm_chip *chip`` the PWM chip to remove ”h]”(jž)�”}”(hŒ``struct pwm_chip *chip``”h]”jB)�”}”(hjä�h]”hŒstruct pwm_chip *chip”…”�”}”(hjæ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjâ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mô hjÞ�ubj¸)�”}”(hhh]”j<)�”}”(hŒthe PWM chip to remove”h]”hŒthe PWM chip to remove”…”�”}”(hjý�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³jù�h´Mô hjú�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hjÞ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—h³jù�h´Mô hjÛ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j’hj¿�ubj<)�”}”(hŒ**Description**”h]”j})�”}”(hj‚h]”hŒ Description”…”�”}”(hj!‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mö hj¿�ubj<)�”}”(hŒRemoves a PWM chip.”h]”hŒRemoves a PWM chip.”…”�”}”(hj5‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j;h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/miscellaneous:47: ./drivers/pwm/core.c”h´Mõ hj¿�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jrhj ?h²hh³Nh´Nubeh}”(h]”Œpulse-width-modulation-pwm”ah ]”h"]”Œpulse-width modulation (pwm)”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jv‚Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j�7jŒ7j ?j?jP‚jM‚uŒ nametypes”}”(j�7‰j ?‰jP‚‰uh}”(jŒ7h·hÚhãjnjsjxj}j"j'j£j¨jÙjÞjÌ jÑ jø jý jjjjj+j0jRjWjüjjÂjÇjMjRj"j"j�#j¢#jX%j]%j**j/*j´+j¹+j`-je-j(/j-/j³0j¸0j>2jC2jÉ3jÎ3j 6j6j?j’7j¯7j´7jV9j[9j£:j¨:jð;jõ;j´=j¹=jM‚j ?j­?j²?jÅ@jÊ@jIBjNBjDjDj|Fj�FjÁHjÆHjKjKjNjNjÃQjÈQjSjSj#Vj(Vj’Zj—Zj\j\jp^ju^jñ_jö_jLajQajÌbjÑbj¤ej©ej.hj3hjÖkjÛkjBnjGnj®pj³pj&sj+sjõtjútj}wj‚wjØxjÝxjQ{jV{js~jx~jÖ€jÛ€uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.