€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ4/translations/zh_CN/driver-api/i3c/master-driver-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/zh_TW/driver-api/i3c/master-driver-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/it_IT/driver-api/i3c/master-driver-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/ja_JP/driver-api/i3c/master-driver-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/ko_KR/driver-api/i3c/master-driver-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/pt_BR/driver-api/i3c/master-driver-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/sp_SP/driver-api/i3c/master-driver-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ I3C master controller driver API”h]”hŒ I3C master controller driver API”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œ%i3c_bus_maintenance_lock (C function)”Œc.i3c_bus_maintenance_lock”hNt”auh1hÝhhÊh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ3void i3c_bus_maintenance_lock (struct i3c_bus *bus)”h]”hŒdesc_signature_line”“”)�”}”(hŒ2void i3c_bus_maintenance_lock(struct i3c_bus *bus)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1hÿhhûh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´K&ubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jhhûh²hh³jh´K&ubhŒ desc_name”“”)�”}”(hŒi3c_bus_maintenance_lock”h]”hŒ desc_sig_name”“”)�”}”(hŒi3c_bus_maintenance_lock”h]”hŒi3c_bus_maintenance_lock”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j(hj$ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1j"hhûh²hh³jh´K&ubhŒdesc_parameterlist”“”)�”}”(hŒ(struct i3c_bus *bus)”h]”hŒdesc_parameter”“”)�”}”(hŒstruct i3c_bus *bus”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jMhjIubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIubh)�”}”(hhh]”j))�”}”(hŒi3c_bus”h]”hŒi3c_bus”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjlubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”Œc”Œreftype”Œ identifier”Œ reftarget”jqŒmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”j‹Œ ASTIdentifier”“”)�”}”j†j,sbŒc.i3c_bus_maintenance_lock”†”asbuh1hhjIubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j¦hjIubj))�”}”(hŒbus”h]”hŒbus”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjCubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhhûh²hh³jh´K&ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1hùŒsphinx_line_type”Œ declarator”hhõh²hh³jh´K&ubah}”(h]”hìah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1hóh³jh´K&hhðh²hubhŒ desc_content”“”)�”}”(hhh]”hŒ paragraph”“”)�”}”(hŒ(Lock the bus for a maintenance operation”h]”hŒ(Lock the bus for a maintenance operation”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´K&hjèh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhhðh²hh³jh´K&ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”Œdomain”j„Œobjtype”jŒdesctype”jŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1hîh²hhhÊh³Nh´NubhŒ container”“”)�”}”(hX**Parameters** ``struct i3c_bus *bus`` I3C bus to take the lock on **Description** This function takes the bus lock so that no other operations can occur on the bus. This is needed for all kind of bus maintenance operation, like - enabling/disabling slave events - re-triggering DAA - changing the dynamic address of a device - relinquishing mastership - ... The reason for this kind of locking is that we don't want drivers and core logic to rely on I3C device information that could be changed behind their back.”h]”(jì)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´K*hjubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ4``struct i3c_bus *bus`` I3C bus to take the lock on ”h]”(hŒterm”“”)�”}”(hŒ``struct i3c_bus *bus``”h]”hŒliteral”“”)�”}”(hj>h]”hŒstruct i3c_bus *bus”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´K'hj6ubhŒ definition”“”)�”}”(hhh]”jì)�”}”(hŒI3C bus to take the lock on”h]”hŒI3C bus to take the lock on”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jUh´K'hjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jUh´K'hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj}h]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´K)hjubjì)�”}”(hXThis function takes the bus lock so that no other operations can occur on the bus. This is needed for all kind of bus maintenance operation, like - enabling/disabling slave events - re-triggering DAA - changing the dynamic address of a device - relinquishing mastership - ...”h]”hXThis function takes the bus lock so that no other operations can occur on the bus. This is needed for all kind of bus maintenance operation, like - enabling/disabling slave events - re-triggering DAA - changing the dynamic address of a device - relinquishing mastership - ...”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´K(hjubjì)�”}”(hŒ›The reason for this kind of locking is that we don't want drivers and core logic to rely on I3C device information that could be changed behind their back.”h]”hŒ�The reason for this kind of locking is that we don’t want drivers and core logic to rely on I3C device information that could be changed behind their back.”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´K0hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ'i3c_bus_maintenance_unlock (C function)”Œc.i3c_bus_maintenance_unlock”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ5void i3c_bus_maintenance_unlock (struct i3c_bus *bus)”h]”hú)�”}”(hŒ4void i3c_bus_maintenance_unlock(struct i3c_bus *bus)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjÍh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´KhjÌubjW)�”}”(hhh]”jì)�”}”(hŒI3C bus to release the lock on”h]”hŒI3C bus to release the lock on”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jçh´K>hjèubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jçh´K>hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj­ubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj h]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´K@hj­ubjì)�”}”(hŒ–Should be called when the bus maintenance operation is done. See i3c_bus_maintenance_lock() for more details on what these maintenance operations are.”h]”hŒ–Should be called when the bus maintenance operation is done. See i3c_bus_maintenance_lock() for more details on what these maintenance operations are.”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´K?hj­ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ#i3c_bus_normaluse_lock (C function)”Œc.i3c_bus_normaluse_lock”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ1void i3c_bus_normaluse_lock (struct i3c_bus *bus)”h]”hú)�”}”(hŒ0void i3c_bus_normaluse_lock(struct i3c_bus *bus)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjNh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´KKubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNh²hh³j`h´KKubj#)�”}”(hŒi3c_bus_normaluse_lock”h]”j))�”}”(hŒi3c_bus_normaluse_lock”h]”hŒi3c_bus_normaluse_lock”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjoubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjNh²hh³j`h´KKubjB)�”}”(hŒ(struct i3c_bus *bus)”h]”jH)�”}”(hŒstruct i3c_bus *bus”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj‹ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹ubh)�”}”(hhh]”j))�”}”(hŒi3c_bus”h]”hŒi3c_bus”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j¯Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jusbŒc.i3c_bus_normaluse_lock”†”asbuh1hhj‹ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj‹ubj))�”}”(hŒbus”h]”hŒbus”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj‹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj‡ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjNh²hh³j`h´KKubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjJh²hh³j`h´KKubah}”(h]”jEah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j`h´KKhjGh²hubjç)�”}”(hhh]”jì)�”}”(hŒ#Lock the bus for a normal operation”h]”hŒ#Lock the bus for a normal operation”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´KKhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjGh²hh³j`h´KKubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j*j j*j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX**Parameters** ``struct i3c_bus *bus`` I3C bus to take the lock on **Description** This function takes the bus lock for any operation that is not a maintenance operation (see i3c_bus_maintenance_lock() for a non-exhaustive list of maintenance operations). Basically all communications with I3C devices are normal operations (HDR, SDR transfers or CCC commands that do not change bus state or I3C dynamic address). Note that this lock is not guaranteeing serialization of normal operations. In other words, transfer requests passed to the I3C master can be submitted in parallel and I3C master drivers have to use their own locking to make sure two different communications are not inter-mixed, or access to the output/input queue is not done while the engine is busy.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj4h]”hŒ Parameters”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´KOhj.ubj0)�”}”(hhh]”j5)�”}”(hŒ4``struct i3c_bus *bus`` I3C bus to take the lock on ”h]”(j;)�”}”(hŒ``struct i3c_bus *bus``”h]”jA)�”}”(hjSh]”hŒstruct i3c_bus *bus”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´KLhjMubjW)�”}”(hhh]”jì)�”}”(hŒI3C bus to take the lock on”h]”hŒI3C bus to take the lock on”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jhh´KLhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jhh´KLhjJubah}”(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&]”uh1jhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´KNhj.ubjì)�”}”(hXJThis function takes the bus lock for any operation that is not a maintenance operation (see i3c_bus_maintenance_lock() for a non-exhaustive list of maintenance operations). Basically all communications with I3C devices are normal operations (HDR, SDR transfers or CCC commands that do not change bus state or I3C dynamic address).”h]”hXJThis function takes the bus lock for any operation that is not a maintenance operation (see i3c_bus_maintenance_lock() for a non-exhaustive list of maintenance operations). Basically all communications with I3C devices are normal operations (HDR, SDR transfers or CCC commands that do not change bus state or I3C dynamic address).”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´KMhj.ubjì)�”}”(hXaNote that this lock is not guaranteeing serialization of normal operations. In other words, transfer requests passed to the I3C master can be submitted in parallel and I3C master drivers have to use their own locking to make sure two different communications are not inter-mixed, or access to the output/input queue is not done while the engine is busy.”h]”hXaNote that this lock is not guaranteeing serialization of normal operations. In other words, transfer requests passed to the I3C master can be submitted in parallel and I3C master drivers have to use their own locking to make sure two different communications are not inter-mixed, or access to the output/input queue is not done while the engine is busy.”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´KShj.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ%i3c_bus_normaluse_unlock (C function)”Œc.i3c_bus_normaluse_unlock”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ3void i3c_bus_normaluse_unlock (struct i3c_bus *bus)”h]”hú)�”}”(hŒ2void i3c_bus_normaluse_unlock(struct i3c_bus *bus)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjÞh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Kaubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞh²hh³jðh´Kaubj#)�”}”(hŒi3c_bus_normaluse_unlock”h]”j))�”}”(hŒi3c_bus_normaluse_unlock”h]”hŒi3c_bus_normaluse_unlock”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÿubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjÞh²hh³jðh´KaubjB)�”}”(hŒ(struct i3c_bus *bus)”h]”jH)�”}”(hŒstruct i3c_bus *bus”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubh)�”}”(hhh]”j))�”}”(hŒi3c_bus”h]”hŒi3c_bus”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j?Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jsbŒc.i3c_bus_normaluse_unlock”†”asbuh1hhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjubj))�”}”(hŒbus”h]”hŒbus”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjÞh²hh³jðh´Kaubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjÚh²hh³jðh´Kaubah}”(h]”jÕah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jðh´Kahj×h²hubjç)�”}”(hhh]”jì)�”}”(hŒ-Release the bus lock after a normal operation”h]”hŒ-Release the bus lock after a normal operation”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´KahjŸh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj×h²hh³jðh´Kaubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jºj jºj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hŒß**Parameters** ``struct i3c_bus *bus`` I3C bus to release the lock on **Description** Should be called when a normal operation is done. See i3c_bus_normaluse_lock() for more details on what these normal operations are.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÄh]”hŒ Parameters”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Kehj¾ubj0)�”}”(hhh]”j5)�”}”(hŒ7``struct i3c_bus *bus`` I3C bus to release the lock on ”h]”(j;)�”}”(hŒ``struct i3c_bus *bus``”h]”jA)�”}”(hjãh]”hŒstruct i3c_bus *bus”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´KbhjÝubjW)�”}”(hhh]”jì)�”}”(hŒI3C bus to release the lock on”h]”hŒI3C bus to release the lock on”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jøh´Kbhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jøh´KbhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj¾ubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjh]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Kdhj¾ubjì)�”}”(hŒ„Should be called when a normal operation is done. See i3c_bus_normaluse_lock() for more details on what these normal operations are.”h]”hŒ„Should be called when a normal operation is done. See i3c_bus_normaluse_lock() for more details on what these normal operations are.”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Kchj¾ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ)i3c_bus_get_addr_slot_status (C function)”Œc.i3c_bus_get_addr_slot_status”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒVenum i3c_addr_slot_status i3c_bus_get_addr_slot_status (struct i3c_bus *bus, u16 addr)”h]”hú)�”}”(hŒUenum i3c_addr_slot_status i3c_bus_get_addr_slot_status(struct i3c_bus *bus, u16 addr)”h]”(jN)�”}”(hŒenum”h]”hŒenum”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj_h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M›ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_h²hh³jqh´M›ubh)�”}”(hhh]”j))�”}”(hŒi3c_addr_slot_status”h]”hŒi3c_addr_slot_status”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj€ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j…Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†Œi3c_bus_get_addr_slot_status”sbŒc.i3c_bus_get_addr_slot_status”†”asbuh1hhj_h²hh³jqh´M›ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_h²hh³jqh´M›ubj#)�”}”(hŒi3c_bus_get_addr_slot_status”h]”j))�”}”(hj¡h]”hŒi3c_bus_get_addr_slot_status”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj²ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj_h²hh³jqh´M›ubjB)�”}”(hŒ(struct i3c_bus *bus, u16 addr)”h]”(jH)�”}”(hŒstruct i3c_bus *bus”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÍubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÍubh)�”}”(hhh]”j))�”}”(hŒi3c_bus”h]”hŒi3c_bus”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jñŒmodname”NŒ classname”NjŠj�)�”}”j�]”jŸŒc.i3c_bus_get_addr_slot_status”†”asbuh1hhjÍubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÍubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÍubj))�”}”(hŒbus”h]”hŒbus”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÍubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÉubjH)�”}”(hŒu16 addr”h]”(h)�”}”(hhh]”j))�”}”(hŒu16”h]”hŒu16”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjAubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jFŒmodname”NŒ classname”NjŠj�)�”}”j�]”jŸŒc.i3c_bus_get_addr_slot_status”†”asbuh1hhj=ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj=ubj))�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÉubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj_h²hh³jqh´M›ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj[h²hh³jqh´M›ubah}”(h]”jVah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jqh´M›hjXh²hubjç)�”}”(hhh]”jì)�”}”(hŒGet I3C bus address slot status”h]”hŒGet I3C bus address slot status”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M›hj—h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjXh²hh³jqh´M›ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j²j j²j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hŒ‡**Parameters** ``struct i3c_bus *bus`` I3C bus. ``u16 addr`` I3C address to query. **Return** Address slot status for **addr**.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¼h]”hŒ Parameters”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MŸhj¶ubj0)�”}”(hhh]”(j5)�”}”(hŒ!``struct i3c_bus *bus`` I3C bus. ”h]”(j;)�”}”(hŒ``struct i3c_bus *bus``”h]”jA)�”}”(hjÛh]”hŒstruct i3c_bus *bus”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MœhjÕubjW)�”}”(hhh]”jì)�”}”(hŒI3C bus.”h]”hŒI3C bus.”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jðh´Mœhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jðh´MœhjÒubj5)�”}”(hŒ#``u16 addr`` I3C address to query. ”h]”(j;)�”}”(hŒ ``u16 addr``”h]”jA)�”}”(hj h]”hŒu16 addr”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M�hj ubjW)�”}”(hhh]”jì)�”}”(hŒI3C address to query.”h]”hŒI3C address to query.”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j) h´M�hj* ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j) h´M�hjÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj¶ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjO h]”hŒReturn”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjM ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MŸhj¶ubjì)�”}”(hŒ!Address slot status for **addr**.”h]”(hŒAddress slot status for ”…”�”}”(hje h²hh³Nh´Nubj)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjm h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhje ubhŒ.”…”�”}”(hje h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MŸhj¶ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ)i3c_bus_set_addr_slot_status (C function)”Œc.i3c_bus_set_addr_slot_status”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒcvoid i3c_bus_set_addr_slot_status (struct i3c_bus *bus, u16 addr, enum i3c_addr_slot_status status)”h]”hú)�”}”(hŒbvoid i3c_bus_set_addr_slot_status(struct i3c_bus *bus, u16 addr, enum i3c_addr_slot_status status)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj¢ h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M·ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢ h²hh³j´ h´M·ubj#)�”}”(hŒi3c_bus_set_addr_slot_status”h]”j))�”}”(hŒi3c_bus_set_addr_slot_status”h]”hŒi3c_bus_set_addr_slot_status”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjà ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj¢ h²hh³j´ h´M·ubjB)�”}”(hŒA(struct i3c_bus *bus, u16 addr, enum i3c_addr_slot_status status)”h]”(jH)�”}”(hŒstruct i3c_bus *bus”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjã h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjß ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjß ubh)�”}”(hhh]”j))�”}”(hŒi3c_bus”h]”hŒi3c_bus”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjþ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jÉ sbŒc.i3c_bus_set_addr_slot_status”†”asbuh1hhjß ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjß ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjß ubj))�”}”(hŒbus”h]”hŒbus”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjß ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÛ ubjH)�”}”(hŒu16 addr”h]”(h)�”}”(hhh]”j))�”}”(hŒu16”h]”hŒu16”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjU ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jZ Œmodname”NŒ classname”NjŠj�)�”}”j�]”j Œc.i3c_bus_set_addr_slot_status”†”asbuh1hhjQ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQ ubj))�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjQ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÛ ubjH)�”}”(hŒ enum i3c_addr_slot_status status”h]”(jN)�”}”(hjeh]”hŒenum”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj™ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™ ubh)�”}”(hhh]”j))�”}”(hŒi3c_addr_slot_status”h]”hŒi3c_addr_slot_status”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj¸ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j½ Œmodname”NŒ classname”NjŠj�)�”}”j�]”j Œc.i3c_bus_set_addr_slot_status”†”asbuh1hhj™ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™ ubj))�”}”(hŒstatus”h]”hŒstatus”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj™ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÛ ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj¢ h²hh³j´ h´M·ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjž h²hh³j´ h´M·ubah}”(h]”j™ ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j´ h´M·hj› h²hubjç)�”}”(hhh]”jì)�”}”(hŒSet I3C bus address slot status”h]”hŒSet I3C bus address slot status”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M·hj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj› h²hh³j´ h´M·ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j) j j) j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hŒ�**Parameters** ``struct i3c_bus *bus`` I3C bus. ``u16 addr`` I3C address to update. ``enum i3c_addr_slot_status status`` Address slot status to set.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj3 h]”hŒ Parameters”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M»hj- ubj0)�”}”(hhh]”(j5)�”}”(hŒ!``struct i3c_bus *bus`` I3C bus. ”h]”(j;)�”}”(hŒ``struct i3c_bus *bus``”h]”jA)�”}”(hjR h]”hŒstruct i3c_bus *bus”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjP ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¸hjL ubjW)�”}”(hhh]”jì)�”}”(hŒI3C bus.”h]”hŒI3C bus.”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jg h´M¸hjh ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjL ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jg h´M¸hjI ubj5)�”}”(hŒ$``u16 addr`` I3C address to update. ”h]”(j;)�”}”(hŒ ``u16 addr``”h]”jA)�”}”(hj‹ h]”hŒu16 addr”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj‰ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¹hj… ubjW)�”}”(hhh]”jì)�”}”(hŒI3C address to update.”h]”hŒI3C address to update.”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j  h´M¹hj¡ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj… ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j  h´M¹hjI ubj5)�”}”(hŒ@``enum i3c_addr_slot_status status`` Address slot status to set.”h]”(j;)�”}”(hŒ$``enum i3c_addr_slot_status status``”h]”jA)�”}”(hjÄ h]”hŒ enum i3c_addr_slot_status status”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M»hj¾ ubjW)�”}”(hhh]”jì)�”}”(hŒAddress slot status to set.”h]”hŒAddress slot status to set.”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MºhjÚ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¾ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÙ h´M»hjI ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj- ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ%i3c_master_queue_hotjoin (C function)”Œc.i3c_master_queue_hotjoin”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒDvoid i3c_master_queue_hotjoin (struct i3c_master_controller *master)”h]”hú)�”}”(hŒCvoid i3c_master_queue_hotjoin(struct i3c_master_controller *master)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Môubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj h²hh³j, h´Môubj#)�”}”(hŒi3c_master_queue_hotjoin”h]”j))�”}”(hŒi3c_master_queue_hotjoin”h]”hŒi3c_master_queue_hotjoin”…”�”}”(hj? h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj; ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj h²hh³j, h´MôubjB)�”}”(hŒ&(struct i3c_master_controller *master)”h]”jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjW ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjW ubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjv ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j{ Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jA sbŒc.i3c_master_queue_hotjoin”†”asbuh1hhjW ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjW ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjW ubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjW ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjS ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj h²hh³j, h´Môubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj h²hh³j, h´Môubah}”(h]”j ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j, h´Môhj h²hubjç)�”}”(hhh]”jì)�”}”(hŒ+Queue DAA processing after a Hot-Join event”h]”hŒ+Queue DAA processing after a Hot-Join event”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MôhjÛ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj h²hh³j, h´Môubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jö j jö j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hŒ“**Parameters** ``struct i3c_master_controller *master`` I3C master object **Description** Queue the hot-join worker on the master's workqueue.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Møhjú ubj0)�”}”(hhh]”j5)�”}”(hŒ;``struct i3c_master_controller *master`` I3C master object ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hj h]”hŒ$struct i3c_master_controller *master”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mõhj ubjW)�”}”(hhh]”jì)�”}”(hŒI3C master object”h]”hŒI3C master object”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j4 h´Mõhj5 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j4 h´Mõhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjú ubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjZ h]”hŒ Description”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjX ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M÷hjú ubjì)�”}”(hŒ4Queue the hot-join worker on the master's workqueue.”h]”hŒ6Queue the hot-join worker on the master’s workqueue.”…”�”}”(hjp h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Möhjú ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ0i3c_dev_supported_xfer_modes_locked (C function)”Œ%c.i3c_dev_supported_xfer_modes_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒBu32 i3c_dev_supported_xfer_modes_locked (struct i3c_dev_desc *dev)”h]”hú)�”}”(hŒAu32 i3c_dev_supported_xfer_modes_locked(struct i3c_dev_desc *dev)”h]”(h)�”}”(hhh]”j))�”}”(hŒu32”h]”hŒu32”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjŸ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j¤ Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†Œ#i3c_dev_supported_xfer_modes_locked”sbŒ%c.i3c_dev_supported_xfer_modes_locked”†”asbuh1hhj› h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mßubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj› h²hh³jà h´Mßubj#)�”}”(hŒ#i3c_dev_supported_xfer_modes_locked”h]”j))�”}”(hjÀ h]”hŒ#i3c_dev_supported_xfer_modes_locked”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÒ ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj› h²hh³jà h´MßubjB)�”}”(hŒ(struct i3c_dev_desc *dev)”h]”jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjí ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjí ubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jŒmodname”NŒ classname”NjŠj�)�”}”j�]”j¾ Œ%c.i3c_dev_supported_xfer_modes_locked”†”asbuh1hhjí ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjí ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjí ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjí ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjé ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj› h²hh³jà h´Mßubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj— h²hh³jà h´Mßubah}”(h]”j’ ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jà h´Mßhj” h²hubjç)�”}”(hhh]”jì)�”}”(hŒ+Get the transfer modes usable with a device”h]”hŒ+Get the transfer modes usable with a device”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mßhjoh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj” h²hh³jà h´Mßubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jŠj jŠj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXX**Parameters** ``struct i3c_dev_desc *dev`` I3C device descriptor **Description** The HDR Modes the controller and **dev** both support, restricted to those the bus configuration allows. SDR is always supported. The bus lock must be held in normal use mode. **Return** a bit mask of :c:type:`enum i3c_xfer_mode ` values.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj”h]”hŒ Parameters”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MãhjŽubj0)�”}”(hhh]”j5)�”}”(hŒ3``struct i3c_dev_desc *dev`` I3C device descriptor ”h]”(j;)�”}”(hŒ``struct i3c_dev_desc *dev``”h]”jA)�”}”(hj³h]”hŒstruct i3c_dev_desc *dev”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Máhj­ubjW)�”}”(hhh]”jì)�”}”(hŒI3C device descriptor”h]”hŒI3C device descriptor”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÈh´MáhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³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&]”uh1jhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MãhjŽubjì)�”}”(hŒ‚The HDR Modes the controller and **dev** both support, restricted to those the bus configuration allows. SDR is always supported.”h]”(hŒ!The HDR Modes the controller and ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒZ both support, restricted to those the bus configuration allows. SDR is always supported.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MâhjŽubjì)�”}”(hŒ-The bus lock must be held in normal use mode.”h]”hŒ-The bus lock must be held in normal use mode.”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MåhjŽubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj6h]”hŒReturn”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MçhjŽubjì)�”}”(hŒBa bit mask of :c:type:`enum i3c_xfer_mode ` values.”h]”(hŒa bit mask of ”…”�”}”(hjLh²hh³Nh´Nubh)�”}”(hŒ,:c:type:`enum i3c_xfer_mode `”h]”jA)�”}”(hjVh]”hŒenum i3c_xfer_mode”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”(Œxref”j„Œc-type”eh"]”h$]”h&]”uh1j@hjTubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ driver-api/i3c/master-driver-api”Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj�)�”}”j�]”sbŒ reftarget”Œ i3c_xfer_mode”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MèhjLubhŒ values.”…”�”}”(hjLh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jyh´MèhjŽubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ+i3c_master_send_ccc_cmd_locked (C function)”Œ c.i3c_master_send_ccc_cmd_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒbint i3c_master_send_ccc_cmd_locked (struct i3c_master_controller *master, struct i3c_ccc_cmd *cmd)”h]”hú)�”}”(hŒaint i3c_master_send_ccc_cmd_locked(struct i3c_master_controller *master, struct i3c_ccc_cmd *cmd)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M^ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj h²hh³j²h´M^ubj#)�”}”(hŒi3c_master_send_ccc_cmd_locked”h]”j))�”}”(hŒi3c_master_send_ccc_cmd_locked”h]”hŒi3c_master_send_ccc_cmd_locked”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÁubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj h²hh³j²h´M^ubjB)�”}”(hŒ?(struct i3c_master_controller *master, struct i3c_ccc_cmd *cmd)”h]”(jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÝubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjüubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jÇsbŒ c.i3c_master_send_ccc_cmd_locked”†”asbuh1hhjÝubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÝubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÙubjH)�”}”(hŒstruct i3c_ccc_cmd *cmd”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjOubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjOubh)�”}”(hhh]”j))�”}”(hŒ i3c_ccc_cmd”h]”hŒ i3c_ccc_cmd”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjnubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jsŒmodname”NŒ classname”NjŠj�)�”}”j�]”jŒ c.i3c_master_send_ccc_cmd_locked”†”asbuh1hhjOubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjOubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjOubj))�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÙubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj h²hh³j²h´M^ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjœh²hh³j²h´M^ubah}”(h]”j—ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j²h´M^hj™h²hubjç)�”}”(hhh]”jì)�”}”(hŒ!send a CCC (Common Command Codes)”h]”hŒ!send a CCC (Common Command Codes)”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M^hjÑh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj™h²hh³j²h´M^ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jìj jìj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX**Parameters** ``struct i3c_master_controller *master`` master used to send frames on the bus ``struct i3c_ccc_cmd *cmd`` command to send **Return** 0 in case of success, or a negative error code otherwise. I3C Mx error codes are stored in cmd->err.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjöh]”hŒ Parameters”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mbhjðubj0)�”}”(hhh]”(j5)�”}”(hŒO``struct i3c_master_controller *master`` master used to send frames on the bus ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hjh]”hŒ$struct i3c_master_controller *master”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M_hjubjW)�”}”(hhh]”jì)�”}”(hŒ%master used to send frames on the bus”h]”hŒ%master used to send frames on the bus”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j*h´M_hj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j*h´M_hj ubj5)�”}”(hŒ,``struct i3c_ccc_cmd *cmd`` command to send ”h]”(j;)�”}”(hŒ``struct i3c_ccc_cmd *cmd``”h]”jA)�”}”(hjNh]”hŒstruct i3c_ccc_cmd *cmd”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M`hjHubjW)�”}”(hhh]”jì)�”}”(hŒcommand to send”h]”hŒcommand to send”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jch´M`hjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jch´M`hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjðubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj‰h]”hŒReturn”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mbhjðubjì)�”}”(hŒd0 in case of success, or a negative error code otherwise. I3C Mx error codes are stored in cmd->err.”h]”hŒd0 in case of success, or a negative error code otherwise. I3C Mx error codes are stored in cmd->err.”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mbhjðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ%i3c_master_get_free_addr (C function)”Œc.i3c_master_get_free_addr”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒRint i3c_master_get_free_addr (struct i3c_master_controller *master, u8 start_addr)”h]”hú)�”}”(hŒQint i3c_master_get_free_addr(struct i3c_master_controller *master, u8 start_addr)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjÊh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¡ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊh²hh³jÜh´M¡ubj#)�”}”(hŒi3c_master_get_free_addr”h]”j))�”}”(hŒi3c_master_get_free_addr”h]”hŒi3c_master_get_free_addr”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjëubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjÊh²hh³jÜh´M¡ubjB)�”}”(hŒ5(struct i3c_master_controller *master, u8 start_addr)”h]”(jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j+Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jñsbŒc.i3c_master_get_free_addr”†”asbuh1hhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjubjH)�”}”(hŒ u8 start_addr”h]”(h)�”}”(hhh]”j))�”}”(hŒu8”h]”hŒu8”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j‚Œmodname”NŒ classname”NjŠj�)�”}”j�]”jEŒc.i3c_master_get_free_addr”†”asbuh1hhjyubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyubj))�”}”(hŒ start_addr”h]”hŒ start_addr”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjÊh²hh³jÜh´M¡ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjÆh²hh³jÜh´M¡ubah}”(h]”jÁah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jÜh´M¡hjÃh²hubjç)�”}”(hhh]”jì)�”}”(hŒget a free address on the bus”h]”hŒget a free address on the bus”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¡hjÓh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjÃh²hh³jÜh´M¡ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jîj jîj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXJ**Parameters** ``struct i3c_master_controller *master`` I3C master object ``u8 start_addr`` where to start searching **Description** This function must be called with the bus lock held in write mode. **Return** the first free address starting at **start_addr** (included) or -ENOMEM if there's no more address available.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjøh]”hŒ Parameters”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¥hjòubj0)�”}”(hhh]”(j5)�”}”(hŒ;``struct i3c_master_controller *master`` I3C master object ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hjh]”hŒ$struct i3c_master_controller *master”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¢hjubjW)�”}”(hhh]”jì)�”}”(hŒI3C master object”h]”hŒI3C master object”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j,h´M¢hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j,h´M¢hjubj5)�”}”(hŒ+``u8 start_addr`` where to start searching ”h]”(j;)�”}”(hŒ``u8 start_addr``”h]”jA)�”}”(hjPh]”hŒ u8 start_addr”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M£hjJubjW)�”}”(hhh]”jì)�”}”(hŒwhere to start searching”h]”hŒwhere to start searching”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jeh´M£hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jeh´M£hjubeh}”(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&]”uh1jhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¥hjòubjì)�”}”(hŒBThis function must be called with the bus lock held in write mode.”h]”hŒBThis function must be called with the bus lock held in write mode.”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¤hjòubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj²h]”hŒReturn”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¦hjòubjì)�”}”(hŒmthe first free address starting at **start_addr** (included) or -ENOMEM if there's no more address available.”h]”(hŒ#the first free address starting at ”…”�”}”(hjÈh²hh³Nh´Nubj)�”}”(hŒ**start_addr**”h]”hŒ start_addr”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÈubhŒ> (included) or -ENOMEM if there’s no more address available.”…”�”}”(hjÈh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M§hjòubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ&i3c_master_setaasa_locked (C function)”Œc.i3c_master_setaasa_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒDint i3c_master_setaasa_locked (struct i3c_master_controller *master)”h]”hú)�”}”(hŒCint i3c_master_setaasa_locked(struct i3c_master_controller *master)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mêubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh²hh³jh´Mêubj#)�”}”(hŒi3c_master_setaasa_locked”h]”j))�”}”(hŒi3c_master_setaasa_locked”h]”hŒi3c_master_setaasa_locked”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj&ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjh²hh³jh´MêubjB)�”}”(hŒ&(struct i3c_master_controller *master)”h]”jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjBubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjBubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjaubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jfŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j,sbŒc.i3c_master_setaasa_locked”†”asbuh1hhjBubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjBubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjBubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj>ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjh²hh³jh´Mêubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjh²hh³jh´Mêubah}”(h]”jüah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jh´Mêhjþh²hubjç)�”}”(hhh]”jì)�”}”(hŒ?start a SETAASA procedure (Set All Addresses to Static Address)”h]”hŒ?start a SETAASA procedure (Set All Addresses to Static Address)”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MêhjÆh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjþh²hh³jh´Mêubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jáj jáj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXä**Parameters** ``struct i3c_master_controller *master`` I3C master object **Description** Send a SETAASA CCC command to set all attached I3C devices' dynamic addresses to their static address. This function must be called with the bus lock held in write mode. First, the SETHID CCC command is sent, followed by the SETAASA CCC. **Return** 0 in case of success, a positive I3C error code if the error is one of the official Mx error codes, and a negative error code otherwise.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjëh]”hŒ Parameters”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$•®]”h&]”uh1jhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mîhjåubj0)�”}”(hhh]”j5)�”}”(hŒ;``struct i3c_master_controller *master`` I3C master object ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hj h]”hŒ$struct i3c_master_controller *master”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MëhjubjW)�”}”(hhh]”jì)�”}”(hŒI3C master object”h]”hŒI3C master object”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jh´Mëhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jh´Mëhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjåubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjEh]”hŒ Description”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Míhjåubjì)�”}”(hŒfSend a SETAASA CCC command to set all attached I3C devices' dynamic addresses to their static address.”h]”hŒhSend a SETAASA CCC command to set all attached I3C devices’ dynamic addresses to their static address.”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mìhjåubjì)�”}”(hŒBThis function must be called with the bus lock held in write mode.”h]”hŒBThis function must be called with the bus lock held in write mode.”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mïhjåubjì)�”}”(hŒCFirst, the SETHID CCC command is sent, followed by the SETAASA CCC.”h]”hŒCFirst, the SETHID CCC command is sent, followed by the SETAASA CCC.”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mñhjåubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjŠh]”hŒReturn”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Móhjåubjì)�”}”(hŒˆ0 in case of success, a positive I3C error code if the error is one of the official Mx error codes, and a negative error code otherwise.”h]”hŒˆ0 in case of success, a positive I3C error code if the error is one of the official Mx error codes, and a negative error code otherwise.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Môhjåubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ%i3c_master_entdaa_locked (C function)”Œc.i3c_master_entdaa_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒCint i3c_master_entdaa_locked (struct i3c_master_controller *master)”h]”hú)�”}”(hŒBint i3c_master_entdaa_locked(struct i3c_master_controller *master)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjËh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjËh²hh³jÝh´Mubj#)�”}”(hŒi3c_master_entdaa_locked”h]”j))�”}”(hŒi3c_master_entdaa_locked”h]”hŒi3c_master_entdaa_locked”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjìubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjËh²hh³jÝh´MubjB)�”}”(hŒ&(struct i3c_master_controller *master)”h]”jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j,Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jòsbŒc.i3c_master_entdaa_locked”†”asbuh1hhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjËh²hh³jÝh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjÇh²hh³jÝh´Mubah}”(h]”jÂah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jÝh´MhjÄh²hubjç)�”}”(hhh]”jì)�”}”(hŒ2start a DAA (Dynamic Address Assignment) procedure”h]”hŒ2start a DAA (Dynamic Address Assignment) procedure”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MhjŒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjÄh²hh³jÝh´Mubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j§j j§j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXÉ**Parameters** ``struct i3c_master_controller *master`` master used to send frames on the bus **Description** Send a ENTDAA CCC command to start a DAA procedure. Note that this function only sends the ENTDAA CCC command, all the logic behind dynamic address assignment has to be handled in the I3C master driver. This function must be called with the bus lock held in write mode. **Return** 0 in case of success, or a negative error code otherwise.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj±h]”hŒ Parameters”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj«ubj0)�”}”(hhh]”j5)�”}”(hŒO``struct i3c_master_controller *master`` master used to send frames on the bus ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hjÐh]”hŒ$struct i3c_master_controller *master”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MhjÊubjW)�”}”(hhh]”jì)�”}”(hŒ%master used to send frames on the bus”h]”hŒ%master used to send frames on the bus”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jåh´Mhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jåh´MhjÇ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&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj«ubjì)�”}”(hŒ3Send a ENTDAA CCC command to start a DAA procedure.”h]”hŒ3Send a ENTDAA CCC command to start a DAA procedure.”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj«ubjì)�”}”(hŒ–Note that this function only sends the ENTDAA CCC command, all the logic behind dynamic address assignment has to be handled in the I3C master driver.”h]”hŒ–Note that this function only sends the ENTDAA CCC command, all the logic behind dynamic address assignment has to be handled in the I3C master driver.”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj«ubjì)�”}”(hŒBThis function must be called with the bus lock held in write mode.”h]”hŒBThis function must be called with the bus lock held in write mode.”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj«ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjPh]”hŒReturn”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M"hj«ubjì)�”}”(hŒ90 in case of success, or a negative error code otherwise.”h]”hŒ90 in case of success, or a negative error code otherwise.”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M#hj«ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ)i3c_master_enec_disec_locked (C function)”Œc.i3c_master_enec_disec_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒxint i3c_master_enec_disec_locked (struct i3c_master_controller *master, u8 addr, bool enable, u8 evts, bool suppress_m2)”h]”hú)�”}”(hŒwint i3c_master_enec_disec_locked(struct i3c_master_controller *master, u8 addr, bool enable, u8 evts, bool suppress_m2)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj‘h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M9ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘h²hh³j£h´M9ubj#)�”}”(hŒi3c_master_enec_disec_locked”h]”j))�”}”(hŒi3c_master_enec_disec_locked”h]”hŒi3c_master_enec_disec_locked”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj²ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj‘h²hh³j£h´M9ubjB)�”}”(hŒW(struct i3c_master_controller *master, u8 addr, bool enable, u8 evts, bool suppress_m2)”h]”(jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÎubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÎubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjíubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jòŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j¸sbŒc.i3c_master_enec_disec_locked”†”asbuh1hhjÎubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÎubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÎubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÎubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÊubjH)�”}”(hŒu8 addr”h]”(h)�”}”(hhh]”j))�”}”(hŒu8”h]”hŒu8”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjDubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jIŒmodname”NŒ classname”NjŠj�)�”}”j�]”j Œc.i3c_master_enec_disec_locked”†”asbuh1hhj@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@ubj))�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÊubjH)�”}”(hŒ bool enable”h]”(j)�”}”(hŒbool”h]”hŒbool”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjˆubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆubj))�”}”(hŒenable”h]”hŒenable”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÊubjH)�”}”(hŒu8 evts”h]”(h)�”}”(hhh]”j))�”}”(hŒu8”h]”hŒu8”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÁubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jÆŒmodname”NŒ classname”NjŠj�)�”}”j�]”j Œc.i3c_master_enec_disec_locked”†”asbuh1hhj½ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½ubj))�”}”(hŒevts”h]”hŒevts”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÊubjH)�”}”(hŒbool suppress_m2”h]”(j)�”}”(hjŽh]”hŒbool”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubj))�”}”(hŒ suppress_m2”h]”hŒ suppress_m2”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÊubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj‘h²hh³j£h´M9ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj�h²hh³j£h´M9ubah}”(h]”jˆah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j£h´M9hjŠh²hubjç)�”}”(hhh]”jì)�”}”(hŒ!send an ENEC or DISEC CCC command”h]”hŒ!send an ENEC or DISEC CCC command”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M9hjKh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjŠh²hh³j£h´M9ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jfj jfj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX²**Parameters** ``struct i3c_master_controller *master`` master used to send frames on the bus ``u8 addr`` a valid I3C slave address or ``I3C_BROADCAST_ADDR`` ``bool enable`` true to send ENEC, false to send DISEC ``u8 evts`` events to enable or disable ``bool suppress_m2`` if true, treat an M2 (NACK) error from the CCC as success **Description** Send an ENEC or DISEC CCC command to enable or disable some or all events coming from a specific slave, or all devices if **addr** is ``I3C_BROADCAST_ADDR``. When **suppress_m2** is true, a NACK of the broadcast (which can happen when no devices are present on the bus) is not reported as an error. This is useful for callers that want to configure event reporting unconditionally, regardless of whether any devices are currently on the bus. This function must be called with the bus lock held in write mode. **Return** 0 in case of success, or a negative error code otherwise.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjph]”hŒ Parameters”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M=hjjubj0)�”}”(hhh]”(j5)�”}”(hŒO``struct i3c_master_controller *master`` master used to send frames on the bus ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hj�h]”hŒ$struct i3c_master_controller *master”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M:hj‰ubjW)�”}”(hhh]”jì)�”}”(hŒ%master used to send frames on the bus”h]”hŒ%master used to send frames on the bus”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j¤h´M:hj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j¤h´M:hj†ubj5)�”}”(hŒ@``u8 addr`` a valid I3C slave address or ``I3C_BROADCAST_ADDR`` ”h]”(j;)�”}”(hŒ ``u8 addr``”h]”jA)�”}”(hjÈh]”hŒu8 addr”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M;hjÂubjW)�”}”(hhh]”jì)�”}”(hŒ3a valid I3C slave address or ``I3C_BROADCAST_ADDR``”h]”(hŒa valid I3C slave address or ”…”�”}”(hjáh²hh³Nh´NubjA)�”}”(hŒ``I3C_BROADCAST_ADDR``”h]”hŒI3C_BROADCAST_ADDR”…”�”}”(hjéh²hh³Nh´Nubah}”(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&]”uh1jVhjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÝh´M;hj†ubj5)�”}”(hŒ7``bool enable`` true to send ENEC, false to send DISEC ”h]”(j;)�”}”(hŒ``bool enable``”h]”jA)�”}”(hjh]”hŒ bool enable”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M<hj ubjW)�”}”(hhh]”jì)�”}”(hŒ&true to send ENEC, false to send DISEC”h]”hŒ&true to send ENEC, false to send DISEC”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j$h´M<hj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j$h´M<hj†ubj5)�”}”(hŒ(``u8 evts`` events to enable or disable ”h]”(j;)�”}”(hŒ ``u8 evts``”h]”jA)�”}”(hjHh]”hŒu8 evts”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M=hjBubjW)�”}”(hhh]”jì)�”}”(hŒevents to enable or disable”h]”hŒevents to enable or disable”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j]h´M=hj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j]h´M=hj†ubj5)�”}”(hŒO``bool suppress_m2`` if true, treat an M2 (NACK) error from the CCC as success ”h]”(j;)�”}”(hŒ``bool suppress_m2``”h]”jA)�”}”(hj�h]”hŒbool suppress_m2”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M>hj{ubjW)�”}”(hhh]”jì)�”}”(hŒ9if true, treat an M2 (NACK) error from the CCC as success”h]”hŒ9if true, treat an M2 (NACK) error from the CCC as success”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j–h´M>hj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j–h´M>hj†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjjubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj¼h]”hŒ Description”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M@hjjubjì)�”}”(hŒ�Send an ENEC or DISEC CCC command to enable or disable some or all events coming from a specific slave, or all devices if **addr** is ``I3C_BROADCAST_ADDR``.”h]”(hŒzSend an ENEC or DISEC CCC command to enable or disable some or all events coming from a specific slave, or all devices if ”…”�”}”(hjÒh²hh³Nh´Nubj)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÒubhŒ is ”…”�”}”(hjÒh²hh³Nh´NubjA)�”}”(hŒ``I3C_BROADCAST_ADDR``”h]”hŒI3C_BROADCAST_ADDR”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÒubhŒ.”…”�”}”(hjÒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M?hjjubjì)�”}”(hXWhen **suppress_m2** is true, a NACK of the broadcast (which can happen when no devices are present on the bus) is not reported as an error. This is useful for callers that want to configure event reporting unconditionally, regardless of whether any devices are currently on the bus.”h]”(hŒWhen ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ**suppress_m2**”h]”hŒ suppress_m2”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhX is true, a NACK of the broadcast (which can happen when no devices are present on the bus) is not reported as an error. This is useful for callers that want to configure event reporting unconditionally, regardless of whether any devices are currently on the bus.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MChjjubjì)�”}”(hŒBThis function must be called with the bus lock held in write mode.”h]”hŒBThis function must be called with the bus lock held in write mode.”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MHhjjubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj7h]”hŒReturn”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MJhjjubjì)�”}”(hŒ90 in case of success, or a negative error code otherwise.”h]”hŒ90 in case of success, or a negative error code otherwise.”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MKhjjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ$i3c_master_disec_locked (C function)”Œc.i3c_master_disec_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒTint i3c_master_disec_locked (struct i3c_master_controller *master, u8 addr, u8 evts)”h]”hú)�”}”(hŒSint i3c_master_disec_locked(struct i3c_master_controller *master, u8 addr, u8 evts)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjxh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjxh²hh³jŠh´Mjubj#)�”}”(hŒi3c_master_disec_locked”h]”j))�”}”(hŒi3c_master_disec_locked”h]”hŒi3c_master_disec_locked”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj™ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjxh²hh³jŠh´MjubjB)�”}”(hŒ8(struct i3c_master_controller *master, u8 addr, u8 evts)”h]”(jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjµubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjµubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÔubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jÙŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jŸsbŒc.i3c_master_disec_locked”†”asbuh1hhjµubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjµubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjµubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjµubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj±ubjH)�”}”(hŒu8 addr”h]”(h)�”}”(hhh]”j))�”}”(hŒu8”h]”hŒu8”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j0Œmodname”NŒ classname”NjŠj�)�”}”j�]”jóŒc.i3c_master_disec_locked”†”asbuh1hhj'ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'ubj))�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj±ubjH)�”}”(hŒu8 evts”h]”(h)�”}”(hhh]”j))�”}”(hŒu8”h]”hŒu8”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jxŒmodname”NŒ classname”NjŠj�)�”}”j�]”jóŒc.i3c_master_disec_locked”†”asbuh1hhjoubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjoubj))�”}”(hŒevts”h]”hŒevts”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj±ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjxh²hh³jŠh´Mjubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjth²hh³jŠh´Mjubah}”(h]”joah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jŠh´Mjhjqh²hubjç)�”}”(hhh]”jì)�”}”(hŒsend a DISEC CCC command”h]”hŒsend a DISEC CCC command”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MjhjÉh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjqh²hh³jŠh´Mjubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jäj jäj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXì**Parameters** ``struct i3c_master_controller *master`` master used to send frames on the bus ``u8 addr`` a valid I3C slave address or ``I3C_BROADCAST_ADDR`` ``u8 evts`` events to disable **Description** Send a DISEC CCC command to disable some or all events coming from a specific slave, or all devices if **addr** is ``I3C_BROADCAST_ADDR``. This function must be called with the bus lock held in write mode. **Return** 0 in case of success, or a negative error code otherwise.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjîh]”hŒ Parameters”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mnhjèubj0)�”}”(hhh]”(j5)�”}”(hŒO``struct i3c_master_controller *master`` master used to send frames on the bus ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hj h]”hŒ$struct i3c_master_controller *master”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MkhjubjW)�”}”(hhh]”jì)�”}”(hŒ%master used to send frames on the bus”h]”hŒ%master used to send frames on the bus”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j"h´Mkhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j"h´Mkhjubj5)�”}”(hŒ@``u8 addr`` a valid I3C slave address or ``I3C_BROADCAST_ADDR`` ”h]”(j;)�”}”(hŒ ``u8 addr``”h]”jA)�”}”(hjFh]”hŒu8 addr”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mlhj@ubjW)�”}”(hhh]”jì)�”}”(hŒ3a valid I3C slave address or ``I3C_BROADCAST_ADDR``”h]”(hŒa valid I3C slave address or ”…”�”}”(hj_h²hh³Nh´NubjA)�”}”(hŒ``I3C_BROADCAST_ADDR``”h]”hŒI3C_BROADCAST_ADDR”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j[h´Mlhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j[h´Mlhjubj5)�”}”(hŒ``u8 evts`` events to disable ”h]”(j;)�”}”(hŒ ``u8 evts``”h]”jA)�”}”(hj�h]”hŒu8 evts”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mmhj‡ubjW)�”}”(hhh]”jì)�”}”(hŒevents to disable”h]”hŒevents to disable”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j¢h´Mmhj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j¢h´Mmhjubeh}”(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&]”uh1jhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mohjèubjì)�”}”(hŒŠSend a DISEC CCC command to disable some or all events coming from a specific slave, or all devices if **addr** is ``I3C_BROADCAST_ADDR``.”h]”(hŒgSend a DISEC CCC command to disable some or all events coming from a specific slave, or all devices if ”…”�”}”(hjÞh²hh³Nh´Nubj)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞubhŒ is ”…”�”}”(hjÞh²hh³Nh´NubjA)�”}”(hŒ``I3C_BROADCAST_ADDR``”h]”hŒI3C_BROADCAST_ADDR”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÞubhŒ.”…”�”}”(hjÞh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mnhjèubjì)�”}”(hŒBThis function must be called with the bus lock held in write mode.”h]”hŒBThis function must be called with the bus lock held in write mode.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mqhjèubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj"h]”hŒReturn”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mshjèubjì)�”}”(hŒ90 in case of success, or a negative error code otherwise.”h]”hŒ90 in case of success, or a negative error code otherwise.”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mthjèubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ#i3c_master_enec_locked (C function)”Œc.i3c_master_enec_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒSint i3c_master_enec_locked (struct i3c_master_controller *master, u8 addr, u8 evts)”h]”hú)�”}”(hŒRint i3c_master_enec_locked(struct i3c_master_controller *master, u8 addr, u8 evts)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjch²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M~ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjch²hh³juh´M~ubj#)�”}”(hŒi3c_master_enec_locked”h]”j))�”}”(hŒi3c_master_enec_locked”h]”hŒi3c_master_enec_locked”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj„ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjch²hh³juh´M~ubjB)�”}”(hŒ8(struct i3c_master_controller *master, u8 addr, u8 evts)”h]”(jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jÄŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jŠsbŒc.i3c_master_enec_locked”†”asbuh1hhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj ubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjœubjH)�”}”(hŒu8 addr”h]”(h)�”}”(hhh]”j))�”}”(hŒu8”h]”hŒu8”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jŒmodname”NŒ classname”NjŠj�)�”}”j�]”jÞŒc.i3c_master_enec_locked”†”asbuh1hhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubj))�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjœubjH)�”}”(hŒu8 evts”h]”(h)�”}”(hhh]”j))�”}”(hŒu8”h]”hŒu8”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jcŒmodname”NŒ classname”NjŠj�)�”}”j�]”jÞŒc.i3c_master_enec_locked”†”asbuh1hhjZubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZubj))�”}”(hŒevts”h]”hŒevts”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjœubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjch²hh³juh´M~ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj_h²hh³juh´M~ubah}”(h]”jZah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³juh´M~hj\h²hubjç)�”}”(hhh]”jì)�”}”(hŒsend an ENEC CCC command”h]”hŒsend an ENEC CCC command”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M~hj´h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj\h²hh³juh´M~ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jÏj jÏj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXì**Parameters** ``struct i3c_master_controller *master`` master used to send frames on the bus ``u8 addr`` a valid I3C slave address or ``I3C_BROADCAST_ADDR`` ``u8 evts`` events to disable **Description** Sends an ENEC CCC command to enable some or all events coming from a specific slave, or all devices if **addr** is ``I3C_BROADCAST_ADDR``. This function must be called with the bus lock held in write mode. **Return** 0 in case of success, or a negative error code otherwise.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÙh]”hŒ Parameters”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M‚hjÓubj0)�”}”(hhh]”(j5)�”}”(hŒO``struct i3c_master_controller *master`` master used to send frames on the bus ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hjøh]”hŒ$struct i3c_master_controller *master”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjöubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MhjòubjW)�”}”(hhh]”jì)�”}”(hŒ%master used to send frames on the bus”h]”hŒ%master used to send frames on the bus”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j h´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjòubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j h´Mhjïubj5)�”}”(hŒ@``u8 addr`` a valid I3C slave address or ``I3C_BROADCAST_ADDR`` ”h]”(j;)�”}”(hŒ ``u8 addr``”h]”jA)�”}”(hj1 h]”hŒu8 addr”…”�”}”(hj3 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj/ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M€hj+ ubjW)�”}”(hhh]”jì)�”}”(hŒ3a valid I3C slave address or ``I3C_BROADCAST_ADDR``”h]”(hŒa valid I3C slave address or ”…”�”}”(hjJ h²hh³Nh´NubjA)�”}”(hŒ``I3C_BROADCAST_ADDR``”h]”hŒI3C_BROADCAST_ADDR”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjJ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jF h´M€hjG ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj+ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jF h´M€hjïubj5)�”}”(hŒ``u8 evts`` events to disable ”h]”(j;)�”}”(hŒ ``u8 evts``”h]”jA)�”}”(hjx h]”hŒu8 evts”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjv ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M�hjr ubjW)�”}”(hhh]”jì)�”}”(hŒevents to disable”h]”hŒevents to disable”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j� h´M�hjŽ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjr ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j� h´M�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&]”uh1jhj± ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MƒhjÓubjì)�”}”(hŒŠSends an ENEC CCC command to enable some or all events coming from a specific slave, or all devices if **addr** is ``I3C_BROADCAST_ADDR``.”h]”(hŒgSends an ENEC CCC command to enable some or all events coming from a specific slave, or all devices if ”…”�”}”(hjÉ h²hh³Nh´Nubj)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉ ubhŒ is ”…”�”}”(hjÉ h²hh³Nh´NubjA)�”}”(hŒ``I3C_BROADCAST_ADDR``”h]”hŒI3C_BROADCAST_ADDR”…”�”}”(hjã h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÉ ubhŒ.”…”�”}”(hjÉ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M‚hjÓubjì)�”}”(hŒBThis function must be called with the bus lock held in write mode.”h]”hŒBThis function must be called with the bus lock held in write mode.”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M…hjÓubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj !h]”hŒReturn”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj !ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M‡hjÓubjì)�”}”(hŒ90 in case of success, or a negative error code otherwise.”h]”hŒ90 in case of success, or a negative error code otherwise.”…”�”}”(hj#!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MˆhjÓubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ&i3c_master_defslvs_locked (C function)”Œc.i3c_master_defslvs_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒDint i3c_master_defslvs_locked (struct i3c_master_controller *master)”h]”hú)�”}”(hŒCint i3c_master_defslvs_locked(struct i3c_master_controller *master)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjR!h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjN!h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M’ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjN!h²hh³j`!h´M’ubj#)�”}”(hŒi3c_master_defslvs_locked”h]”j))�”}”(hŒi3c_master_defslvs_locked”h]”hŒi3c_master_defslvs_locked”…”�”}”(hjs!h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjo!ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjN!h²hh³j`!h´M’ubjB)�”}”(hŒ&(struct i3c_master_controller *master)”h]”jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj�!h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj‹!ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœ!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹!ubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hj­!h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjª!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j¯!Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†ju!sbŒc.i3c_master_defslvs_locked”†”asbuh1hhj‹!ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹!ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjÛ!h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj‹!ubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hjè!h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj‹!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj‡!ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjN!h²hh³j`!h´M’ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjJ!h²hh³j`!h´M’ubah}”(h]”jE!ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j`!h´M’hjG!h²hubjç)�”}”(hhh]”jì)�”}”(hŒsend a DEFSLVS CCC command”h]”hŒsend a DEFSLVS CCC command”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M’hj"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjG!h²hh³j`!h´M’ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j*"j j*"j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX**Parameters** ``struct i3c_master_controller *master`` master used to send frames on the bus **Description** Send a DEFSLVS CCC command containing all the devices known to the **master**. This is useful when you have secondary masters on the bus to propagate device information. This should be called after all I3C devices have been discovered (in other words, after the DAA procedure has finished) and instantiated in :c:type:`i3c_master_controller_ops->bus_init\(\) `. It should also be called if a master ACKed an Hot-Join request and assigned a dynamic address to the device joining the bus. This function must be called with the bus lock held in write mode. **Return** 0 in case of success, or a negative error code otherwise.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj4"h]”hŒ Parameters”…”�”}”(hj6"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M–hj."ubj0)�”}”(hhh]”j5)�”}”(hŒO``struct i3c_master_controller *master`` master used to send frames on the bus ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hjS"h]”hŒ$struct i3c_master_controller *master”…”�”}”(hjU"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjQ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M“hjM"ubjW)�”}”(hhh]”jì)�”}”(hŒ%master used to send frames on the bus”h]”hŒ%master used to send frames on the bus”…”�”}”(hjl"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jh"h´M“hji"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjM"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jh"h´M“hjJ"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&]”uh1jhjŒ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M•hj."ubjì)�”}”(hŒ©Send a DEFSLVS CCC command containing all the devices known to the **master**. This is useful when you have secondary masters on the bus to propagate device information.”h]”(hŒCSend a DEFSLVS CCC command containing all the devices known to the ”…”�”}”(hj¤"h²hh³Nh´Nubj)�”}”(hŒ **master**”h]”hŒmaster”…”�”}”(hj¬"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤"ubhŒ\. This is useful when you have secondary masters on the bus to propagate device information.”…”�”}”(hj¤"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M”hj."ubjì)�”}”(hXWThis should be called after all I3C devices have been discovered (in other words, after the DAA procedure has finished) and instantiated in :c:type:`i3c_master_controller_ops->bus_init\(\) `. It should also be called if a master ACKed an Hot-Join request and assigned a dynamic address to the device joining the bus.”h]”(hŒŒThis should be called after all I3C devices have been discovered (in other words, after the DAA procedure has finished) and instantiated in ”…”�”}”(hjÅ"h²hh³Nh´Nubh)�”}”(hŒM:c:type:`i3c_master_controller_ops->bus_init\(\) `”h]”jA)�”}”(hjÏ"h]”hŒ%i3c_master_controller_ops->bus_init()”…”�”}”(hjÑ"h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hjÍ"ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒi3c_master_controller_ops”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M˜hjÅ"ubhŒ~. It should also be called if a master ACKed an Hot-Join request and assigned a dynamic address to the device joining the bus.”…”�”}”(hjÅ"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jì"h´M˜hj."ubjì)�”}”(hŒBThis function must be called with the bus lock held in write mode.”h]”hŒBThis function must be called with the bus lock held in write mode.”…”�”}”(hj÷"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mžhj."ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj#h]”hŒReturn”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj."ubjì)�”}”(hŒ90 in case of success, or a negative error code otherwise.”h]”hŒ90 in case of success, or a negative error code otherwise.”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¡hj."ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ8i3c_master_attach_i3c_dev_controller_locked (C function)”Œ-c.i3c_master_attach_i3c_dev_controller_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒJint i3c_master_attach_i3c_dev_controller_locked (struct i3c_dev_desc *dev)”h]”hú)�”}”(hŒIint i3c_master_attach_i3c_dev_controller_locked(struct i3c_dev_desc *dev)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjM#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjI#h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¡ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjI#h²hh³j[#h´M¡ubj#)�”}”(hŒ+i3c_master_attach_i3c_dev_controller_locked”h]”j))�”}”(hŒ+i3c_master_attach_i3c_dev_controller_locked”h]”hŒ+i3c_master_attach_i3c_dev_controller_locked”…”�”}”(hjn#h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjj#ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjI#h²hh³j[#h´M¡ubjB)�”}”(hŒ(struct i3c_dev_desc *dev)”h]”jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjŠ#h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj†#ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†#ubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hj¨#h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj¥#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jª#Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jp#sbŒ-c.i3c_master_attach_i3c_dev_controller_locked”†”asbuh1hhj†#ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈ#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†#ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjÖ#h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj†#ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjã#h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj†#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj‚#ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjI#h²hh³j[#h´M¡ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjE#h²hh³j[#h´M¡ubah}”(h]”j@#ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j[#h´M¡hjB#h²hubjç)�”}”(hhh]”jì)�”}”(hŒ!Attach device state to controller”h]”hŒ!Attach device state to controller”…”�”}”(hj $h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¡hj $h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjB#h²hh³j[#h´M¡ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j%$j j%$j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXa**Parameters** ``struct i3c_dev_desc *dev`` I3C device descriptor **Description** Invoke the current controller's attach callback without changing address slot state or adding the device to the controller's device list. **Context** The caller must hold the bus lock. **Return** 0 on success, or a negative error code returned by the controller.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj/$h]”hŒ Parameters”…”�”}”(hj1$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¥hj)$ubj0)�”}”(hhh]”j5)�”}”(hŒ3``struct i3c_dev_desc *dev`` I3C device descriptor ”h]”(j;)�”}”(hŒ``struct i3c_dev_desc *dev``”h]”jA)�”}”(hjN$h]”hŒstruct i3c_dev_desc *dev”…”�”}”(hjP$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjL$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M£hjH$ubjW)�”}”(hhh]”jì)�”}”(hŒI3C device descriptor”h]”hŒI3C device descriptor”…”�”}”(hjg$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jc$h´M£hjd$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjH$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jc$h´M£hjE$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&]”uh1jhj‡$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¥hj)$ubjì)�”}”(hŒ‰Invoke the current controller's attach callback without changing address slot state or adding the device to the controller's device list.”h]”hŒ�Invoke the current controller’s attach callback without changing address slot state or adding the device to the controller’s device list.”…”�”}”(hjŸ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¤hj)$ubjì)�”}”(hŒ **Context**”h]”j)�”}”(hj°$h]”hŒContext”…”�”}”(hj²$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M§hj)$ubjì)�”}”(hŒ"The caller must hold the bus lock.”h]”hŒ"The caller must hold the bus lock.”…”�”}”(hjÆ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¨hj)$ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj×$h]”hŒReturn”…”�”}”(hjÙ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mªhj)$ubjì)�”}”(hŒB0 on success, or a negative error code returned by the controller.”h]”hŒB0 on success, or a negative error code returned by the controller.”…”�”}”(hjí$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mªhj)$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ:i3c_master_reattach_i3c_dev_controller_locked (C function)”Œ/c.i3c_master_reattach_i3c_dev_controller_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ]int i3c_master_reattach_i3c_dev_controller_locked (struct i3c_dev_desc *dev, u8 old_dyn_addr)”h]”hú)�”}”(hŒ\int i3c_master_reattach_i3c_dev_controller_locked(struct i3c_dev_desc *dev, u8 old_dyn_addr)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj%h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÕubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%h²hh³j*%h´MÕubj#)�”}”(hŒ-i3c_master_reattach_i3c_dev_controller_locked”h]”j))�”}”(hŒ-i3c_master_reattach_i3c_dev_controller_locked”h]”hŒ-i3c_master_reattach_i3c_dev_controller_locked”…”�”}”(hj=%h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj9%ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj%h²hh³j*%h´MÕubjB)�”}”(hŒ+(struct i3c_dev_desc *dev, u8 old_dyn_addr)”h]”(jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjY%h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjU%ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjU%ubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hjw%h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjt%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jy%Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j?%sbŒ/c.i3c_master_reattach_i3c_dev_controller_locked”†”asbuh1hhjU%ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjU%ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj¥%h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjU%ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj²%h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjU%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjQ%ubjH)�”}”(hŒu8 old_dyn_addr”h]”(h)�”}”(hhh]”j))�”}”(hŒu8”h]”hŒu8”…”�”}”(hjÎ%h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjË%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jÐ%Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“%Œ/c.i3c_master_reattach_i3c_dev_controller_locked”†”asbuh1hhjÇ%ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇ%ubj))�”}”(hŒ old_dyn_addr”h]”hŒ old_dyn_addr”…”�”}”(hjú%h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÇ%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjQ%ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj%h²hh³j*%h´MÕubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj%h²hh³j*%h´MÕubah}”(h]”j%ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j*%h´MÕhj%h²hubjç)�”}”(hhh]”jì)�”}”(hŒ Reattach controller device state”h]”hŒ Reattach controller device state”…”�”}”(hj$&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÕhj!&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj%h²hh³j*%h´MÕubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j<&j j<&j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXp**Parameters** ``struct i3c_dev_desc *dev`` I3C device descriptor ``u8 old_dyn_addr`` Previous dynamic address **Description** Invoke the current controller's reattach callback without modifying the controller's address-slot state. **Context** The caller must hold the bus lock. **Return** 0 on success, or a negative error code returned by the controller.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjF&h]”hŒ Parameters”…”�”}”(hjH&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjD&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÙhj@&ubj0)�”}”(hhh]”(j5)�”}”(hŒ3``struct i3c_dev_desc *dev`` I3C device descriptor ”h]”(j;)�”}”(hŒ``struct i3c_dev_desc *dev``”h]”jA)�”}”(hje&h]”hŒstruct i3c_dev_desc *dev”…”�”}”(hjg&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjc&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M×hj_&ubjW)�”}”(hhh]”jì)�”}”(hŒI3C device descriptor”h]”hŒI3C device descriptor”…”�”}”(hj~&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jz&h´M×hj{&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj_&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jz&h´M×hj\&ubj5)�”}”(hŒ-``u8 old_dyn_addr`` Previous dynamic address ”h]”(j;)�”}”(hŒ``u8 old_dyn_addr``”h]”jA)�”}”(hjž&h]”hŒu8 old_dyn_addr”…”�”}”(hj &h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjœ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MØhj˜&ubjW)�”}”(hhh]”jì)�”}”(hŒPrevious dynamic address”h]”hŒPrevious dynamic address”…”�”}”(hj·&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j³&h´MØhj´&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj˜&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j³&h´MØ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&]”uh1jhj×&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÚhj@&ubjì)�”}”(hŒhInvoke the current controller's reattach callback without modifying the controller's address-slot state.”h]”hŒlInvoke the current controller’s reattach callback without modifying the controller’s address-slot state.”…”�”}”(hjï&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÙhj@&ubjì)�”}”(hŒ **Context**”h]”j)�”}”(hj'h]”hŒContext”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÜhj@&ubjì)�”}”(hŒ"The caller must hold the bus lock.”h]”hŒ"The caller must hold the bus lock.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÝhj@&ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj''h]”hŒReturn”…”�”}”(hj)'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mßhj@&ubjì)�”}”(hŒB0 on success, or a negative error code returned by the controller.”h]”hŒB0 on success, or a negative error code returned by the controller.”…”�”}”(hj='h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mßhj@&ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ/i3c_master_reattach_i3c_dev_locked (C function)”Œ$c.i3c_master_reattach_i3c_dev_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒRint i3c_master_reattach_i3c_dev_locked (struct i3c_dev_desc *dev, u8 old_dyn_addr)”h]”hú)�”}”(hŒQint i3c_master_reattach_i3c_dev_locked(struct i3c_dev_desc *dev, u8 old_dyn_addr)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjl'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjh'h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mîubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh'h²hh³jz'h´Mîubj#)�”}”(hŒ"i3c_master_reattach_i3c_dev_locked”h]”j))�”}”(hŒ"i3c_master_reattach_i3c_dev_locked”h]”hŒ"i3c_master_reattach_i3c_dev_locked”…”�”}”(hj�'h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj‰'ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjh'h²hh³jz'h´MîubjB)�”}”(hŒ+(struct i3c_dev_desc *dev, u8 old_dyn_addr)”h]”(jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj©'h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj¥'ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥'ubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hjÇ'h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÄ'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jÉ'Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j�'sbŒ$c.i3c_master_reattach_i3c_dev_locked”†”asbuh1hhj¥'ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥'ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjõ'h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¥'ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj¥'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj¡'ubjH)�”}”(hŒu8 old_dyn_addr”h]”(h)�”}”(hhh]”j))�”}”(hŒu8”h]”hŒu8”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j (Œmodname”NŒ classname”NjŠj�)�”}”j�]”jã'Œ$c.i3c_master_reattach_i3c_dev_locked”†”asbuh1hhj(ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(ubj))�”}”(hŒ old_dyn_addr”h]”hŒ old_dyn_addr”…”�”}”(hjJ(h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj¡'ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjh'h²hh³jz'h´Mîubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjd'h²hh³jz'h´Mîubah}”(h]”j_'ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jz'h´Mîhja'h²hubjç)�”}”(hhh]”jì)�”}”(hŒ)reattach an I3C device with a new address”h]”hŒ)reattach an I3C device with a new address”…”�”}”(hjt(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mîhjq(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhja'h²hh³jz'h´Mîubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jŒ(j jŒ(j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXh**Parameters** ``struct i3c_dev_desc *dev`` I3C device descriptor to reattach ``u8 old_dyn_addr`` previous dynamic address of the device **Description** This function reattaches an existing I3C device to the bus when its dynamic address has changed. It updates the bus address slot status accordingly: - Marks the new dynamic address as occupied by an I3C device. - Frees the old dynamic address slot if applicable. This function must be called with the bus lock held in write mode. **Return** 0 on success, or a negative error code if reattachment fails (e.g. -EBUSY if the new address slot is not free).”•h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj–(h]”hŒ Parameters”…”�”}”(hj˜(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj”(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mòhj�(ubj0)�”}”(hhh]”(j5)�”}”(hŒ?``struct i3c_dev_desc *dev`` I3C device descriptor to reattach ”h]”(j;)�”}”(hŒ``struct i3c_dev_desc *dev``”h]”jA)�”}”(hjµ(h]”hŒstruct i3c_dev_desc *dev”…”�”}”(hj·(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj³(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mïhj¯(ubjW)�”}”(hhh]”jì)�”}”(hŒ!I3C device descriptor to reattach”h]”hŒ!I3C device descriptor to reattach”…”�”}”(hjÎ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÊ(h´MïhjË(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¯(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÊ(h´Mïhj¬(ubj5)�”}”(hŒ;``u8 old_dyn_addr`` previous dynamic address of the device ”h]”(j;)�”}”(hŒ``u8 old_dyn_addr``”h]”jA)�”}”(hjî(h]”hŒu8 old_dyn_addr”…”�”}”(hjð(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjì(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mðhjè(ubjW)�”}”(hhh]”jì)�”}”(hŒ&previous dynamic address of the device”h]”hŒ&previous dynamic address of the device”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j)h´Mðhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjè(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j)h´Mð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&]”uh1jhj')ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mòhj�(ubjì)�”}”(hXThis function reattaches an existing I3C device to the bus when its dynamic address has changed. It updates the bus address slot status accordingly: - Marks the new dynamic address as occupied by an I3C device. - Frees the old dynamic address slot if applicable.”h]”hXThis function reattaches an existing I3C device to the bus when its dynamic address has changed. It updates the bus address slot status accordingly: - Marks the new dynamic address as occupied by an I3C device. - Frees the old dynamic address slot if applicable.”…”�”}”(hj?)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mñhj�(ubjì)�”}”(hŒBThis function must be called with the bus lock held in write mode.”h]”hŒBThis function must be called with the bus lock held in write mode.”…”�”}”(hjN)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Möhj�(ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj_)h]”hŒReturn”…”�”}”(hja)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj])ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Møhj�(ubjì)�”}”(hŒo0 on success, or a negative error code if reattachment fails (e.g. -EBUSY if the new address slot is not free).”h]”hŒo0 on success, or a negative error code if reattachment fails (e.g. -EBUSY if the new address slot is not free).”…”�”}”(hju)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mùhj�(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ8i3c_master_detach_i3c_dev_controller_locked (C function)”Œ-c.i3c_master_detach_i3c_dev_controller_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒKvoid i3c_master_detach_i3c_dev_controller_locked (struct i3c_dev_desc *dev)”h]”hú)�”}”(hŒJvoid i3c_master_detach_i3c_dev_controller_locked(struct i3c_dev_desc *dev)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¤)h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj )h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj )h²hh³j²)h´Mubj#)�”}”(hŒ+i3c_master_detach_i3c_dev_controller_locked”h]”j))�”}”(hŒ+i3c_master_detach_i3c_dev_controller_locked”h]”hŒ+i3c_master_detach_i3c_dev_controller_locked”…”�”}”(hjÅ)h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÁ)ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj )h²hh³j²)h´MubjB)�”}”(hŒ(struct i3c_dev_desc *dev)”h]”jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjá)h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÝ)ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝ)ubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hjÿ)h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjü)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j*Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jÇ)sbŒ-c.i3c_master_detach_i3c_dev_controller_locked”†”asbuh1hhjÝ)ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝ)ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj-*h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÝ)ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj:*h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÝ)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÙ)ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj )h²hh³j²)h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjœ)h²hh³j²)h´Mubah}”(h]”j—)ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j²)h´Mhj™)h²hubjç)�”}”(hhh]”jì)�”}”(hŒ#Detach device state from controller”h]”hŒ#Detach device state from controller”…”�”}”(hjd*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhja*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj™)h²hh³j²)h´Mubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j|*j j|*j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX**Parameters** ``struct i3c_dev_desc *dev`` I3C device descriptor **Description** Invoke the current controller's detach callback without releasing address slots or removing the device from the controller's device list. **Context** The caller must hold the bus lock.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj†*h]”hŒ Parameters”…”�”}”(hjˆ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj€*ubj0)�”}”(hhh]”j5)�”}”(hŒ3``struct i3c_dev_desc *dev`` I3C device descriptor ”h]”(j;)�”}”(hŒ``struct i3c_dev_desc *dev``”h]”jA)�”}”(hj¥*h]”hŒstruct i3c_dev_desc *dev”…”�”}”(hj§*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj£*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MhjŸ*ubjW)�”}”(hhh]”jì)�”}”(hŒI3C device descriptor”h]”hŒI3C device descriptor”…”�”}”(hj¾*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jº*h´Mhj»*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjŸ*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jº*h´Mhjœ*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&]”uh1jhjÞ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj€*ubjì)�”}”(hŒ‰Invoke the current controller's detach callback without releasing address slots or removing the device from the controller's device list.”h]”hŒ�Invoke the current controller’s detach callback without releasing address slots or removing the device from the controller’s device list.”…”�”}”(hjö*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj€*ubjì)�”}”(hŒ **Context**”h]”j)�”}”(hj+h]”hŒContext”…”�”}”(hj +h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj€*ubjì)�”}”(hŒ"The caller must hold the bus lock.”h]”hŒ"The caller must hold the bus lock.”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj€*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ/i3c_master_has_wakeup_enabled_devs (C function)”Œ$c.i3c_master_has_wakeup_enabled_devs”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒNbool i3c_master_has_wakeup_enabled_devs (struct i3c_master_controller *master)”h]”hú)�”}”(hŒMbool i3c_master_has_wakeup_enabled_devs(struct i3c_master_controller *master)”h]”(j)�”}”(hjŽh]”hŒbool”…”�”}”(hjL+h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjH+h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mêubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjH+h²hh³jY+h´Mêubj#)�”}”(hŒ"i3c_master_has_wakeup_enabled_devs”h]”j))�”}”(hŒ"i3c_master_has_wakeup_enabled_devs”h]”hŒ"i3c_master_has_wakeup_enabled_devs”…”�”}”(hjl+h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjh+ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjH+h²hh³jY+h´MêubjB)�”}”(hŒ&(struct i3c_master_controller *master)”h]”jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjˆ+h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj„+ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj„+ubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hj¦+h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj£+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j¨+Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jn+sbŒ$c.i3c_master_has_wakeup_enabled_devs”†”asbuh1hhj„+ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj„+ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjÔ+h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj„+ubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hjá+h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj„+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj€+ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjH+h²hh³jY+h´Mêubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjD+h²hh³jY+h´Mêubah}”(h]”j?+ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jY+h´MêhjA+h²hubjç)�”}”(hhh]”jì)�”}”(hŒ'check if any device can wake the system”h]”hŒ'check if any device can wake the system”…”�”}”(hj ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mêhj,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjA+h²hh³jY+h´Mêubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j#,j j#,j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX **Parameters** ``struct i3c_master_controller *master`` I3C master controller **Description** Iterate over devices on the bus and return true if any device has system wakeup enabled and IBI enabled. Whether a device is enabled for system wakeup is user space policy, settable at any time through the device's power/wakeup sysfs attribute, so the answer is only stable once user space is frozen. Call this from a system suspend callback. **Return** true if any device may wake the system via IBI, false otherwise.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj-,h]”hŒ Parameters”…”�”}”(hj/,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mîhj',ubj0)�”}”(hhh]”j5)�”}”(hŒ?``struct i3c_master_controller *master`` I3C master controller ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hjL,h]”hŒ$struct i3c_master_controller *master”…”�”}”(hjN,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjJ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MëhjF,ubjW)�”}”(hhh]”jì)�”}”(hŒI3C master controller”h]”hŒI3C master controller”…”�”}”(hje,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³ja,h´Mëhjb,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjF,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³ja,h´MëhjC,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&]”uh1jhj…,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Míhj',ubjì)�”}”(hŒhIterate over devices on the bus and return true if any device has system wakeup enabled and IBI enabled.”h]”hŒhIterate over devices on the bus and return true if any device has system wakeup enabled and IBI enabled.”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mìhj',ubjì)�”}”(hŒîWhether a device is enabled for system wakeup is user space policy, settable at any time through the device's power/wakeup sysfs attribute, so the answer is only stable once user space is frozen. Call this from a system suspend callback.”h]”hŒðWhether a device is enabled for system wakeup is user space policy, settable at any time through the device’s power/wakeup sysfs attribute, so the answer is only stable once user space is frozen. Call this from a system suspend callback.”…”�”}”(hj¬,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mïhj',ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj½,h]”hŒReturn”…”�”}”(hj¿,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj»,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Môhj',ubjì)�”}”(hŒ@true if any device may wake the system via IBI, false otherwise.”h]”hŒ@true if any device may wake the system via IBI, false otherwise.”…”�”}”(hjÓ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mõhj',ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ&i3c_master_dma_map_single (C function)”Œc.i3c_master_dma_map_single”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ†struct i3c_dma * i3c_master_dma_map_single (struct device *dev, void *buf, size_t len, bool force_bounce, enum dma_data_direction dir)”h]”hú)�”}”(hŒ„struct i3c_dma *i3c_master_dma_map_single(struct device *dev, void *buf, size_t len, bool force_bounce, enum dma_data_direction dir)”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjþ,h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþ,h²hh³j-h´M ubh)�”}”(hhh]”j))�”}”(hŒi3c_dma”h]”hŒi3c_dma”…”�”}”(hj!-h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j#-Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†Œi3c_master_dma_map_single”sbŒc.i3c_master_dma_map_single”†”asbuh1hhjþ,h²hh³j-h´M ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþ,h²hh³j-h´M ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjP-h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjþ,h²hh³j-h´M ubj#)�”}”(hŒi3c_master_dma_map_single”h]”j))�”}”(hj?-h]”hŒi3c_master_dma_map_single”…”�”}”(hja-h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj]-ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjþ,h²hh³j-h´M ubjB)�”}”(hŒ[(struct device *dev, void *buf, size_t len, bool force_bounce, enum dma_data_direction dir)”h]”(jH)�”}”(hŒstruct device *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj|-h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjx-ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjx-ubh)�”}”(hhh]”j))�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjš-h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj—-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jœ-Œmodname”NŒ classname”NjŠj�)�”}”j�]”j=-Œc.i3c_master_dma_map_single”†”asbuh1hhjx-ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjx-ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjÆ-h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjx-ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÓ-h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjx-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjt-ubjH)�”}”(hŒ void *buf”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjì-h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjè-ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjè-ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjè-ubj))�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjè-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjt-ubjH)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j))�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj1.h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj..ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j3.Œmodname”NŒ classname”NjŠj�)�”}”j�]”j=-Œc.i3c_master_dma_map_single”†”asbuh1hhj*.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*.ubj))�”}”(hŒlen”h]”hŒlen”…”�”}”(hj].h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj*.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjt-ubjH)�”}”(hŒbool force_bounce”h]”(j)�”}”(hjŽh]”hŒbool”…”�”}”(hjv.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjr.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjr.ubj))�”}”(hŒ force_bounce”h]”hŒ force_bounce”…”�”}”(hj‘.h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjr.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjt-ubjH)�”}”(hŒenum dma_data_direction dir”h]”(jN)�”}”(hjeh]”hŒenum”…”�”}”(hjª.h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj¦.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦.ubh)�”}”(hhh]”j))�”}”(hŒdma_data_direction”h]”hŒdma_data_direction”…”�”}”(hjÈ.h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÅ.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jÊ.Œmodname”NŒ classname”NjŠj�)�”}”j�]”j=-Œc.i3c_master_dma_map_single”†”asbuh1hhj¦.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦.ubj))�”}”(hŒdir”h]”hŒdir”…”�”}”(hjô.h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj¦.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjt-ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjþ,h²hh³j-h´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjú,h²hh³j-h´M ubah}”(h]”jõ,ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j-h´M hj÷,h²hubjç)�”}”(hhh]”jì)�”}”(hŒ"Map buffer for single DMA transfer”h]”hŒ"Map buffer for single DMA transfer”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj÷,h²hh³j-h´M ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j6/j j6/j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXí**Parameters** ``struct device *dev`` device object of a device doing DMA ``void *buf`` destination/source buffer for DMA ``size_t len`` length of transfer ``bool force_bounce`` true, force to use a bounce buffer, false, function will auto check is a bounce buffer required ``enum dma_data_direction dir`` DMA direction **Description** Map buffer for a DMA transfer and allocate a bounce buffer if required. **Return** I3C DMA transfer descriptor or NULL in case of error.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj@/h]”hŒ Parameters”…”�”}”(hjB/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj:/ubj0)�”}”(hhh]”(j5)�”}”(hŒ;``struct device *dev`` device object of a device doing DMA ”h]”(j;)�”}”(hŒ``struct device *dev``”h]”jA)�”}”(hj_/h]”hŒstruct device *dev”…”�”}”(hja/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj]/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hjY/ubjW)�”}”(hhh]”jì)�”}”(hŒ#device object of a device doing DMA”h]”hŒ#device object of a device doing DMA”…”�”}”(hjx/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jt/h´M hju/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjY/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jt/h´M hjV/ubj5)�”}”(hŒ0``void *buf`` destination/source buffer for DMA ”h]”(j;)�”}”(hŒ ``void *buf``”h]”jA)�”}”(hj˜/h]”hŒ void *buf”…”�”}”(hjš/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj–/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj’/ubjW)�”}”(hhh]”jì)�”}”(hŒ!destination/source buffer for DMA”h]”hŒ!destination/source buffer for DMA”…”�”}”(hj±/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j­/h´M hj®/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj’/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j­/h´M hjV/ubj5)�”}”(hŒ"``size_t len`` length of transfer ”h]”(j;)�”}”(hŒ``size_t len``”h]”jA)�”}”(hjÑ/h]”hŒ size_t len”…”�”}”(hjÓ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÏ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hjË/ubjW)�”}”(hhh]”jì)�”}”(hŒlength of transfer”h]”hŒlength of transfer”…”�”}”(hjê/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jæ/h´M hjç/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjË/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jæ/h´M hjV/ubj5)�”}”(hŒv``bool force_bounce`` true, force to use a bounce buffer, false, function will auto check is a bounce buffer required ”h]”(j;)�”}”(hŒ``bool force_bounce``”h]”jA)�”}”(hj 0h]”hŒbool force_bounce”…”�”}”(hj 0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj0ubjW)�”}”(hhh]”jì)�”}”(hŒ_true, force to use a bounce buffer, false, function will auto check is a bounce buffer required”h]”hŒ_true, force to use a bounce buffer, false, function will auto check is a bounce buffer required”…”�”}”(hj#0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj 0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j0h´M hjV/ubj5)�”}”(hŒ.``enum dma_data_direction dir`` DMA direction ”h]”(j;)�”}”(hŒ``enum dma_data_direction dir``”h]”jA)�”}”(hjD0h]”hŒenum dma_data_direction dir”…”�”}”(hjF0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjB0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj>0ubjW)�”}”(hhh]”jì)�”}”(hŒ DMA direction”h]”hŒ DMA direction”…”�”}”(hj]0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jY0h´M hjZ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj>0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jY0h´M hjV/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj:/ubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj0h]”hŒ Description”…”�”}”(hj�0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj:/ubjì)�”}”(hŒGMap buffer for a DMA transfer and allocate a bounce buffer if required.”h]”hŒGMap buffer for a DMA transfer and allocate a bounce buffer if required.”…”�”}”(hj•0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj:/ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj¦0h]”hŒReturn”…”�”}”(hj¨0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj:/ubjì)�”}”(hŒ5I3C DMA transfer descriptor or NULL in case of error.”h]”hŒ5I3C DMA transfer descriptor or NULL in case of error.”…”�”}”(hj¼0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj:/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ(i3c_master_dma_unmap_single (C function)”Œc.i3c_master_dma_unmap_single”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ;void i3c_master_dma_unmap_single (struct i3c_dma *dma_xfer)”h]”hú)�”}”(hŒ:void i3c_master_dma_unmap_single(struct i3c_dma *dma_xfer)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjë0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjç0h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M@ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjç0h²hh³jù0h´M@ ubj#)�”}”(hŒi3c_master_dma_unmap_single”h]”j))�”}”(hŒi3c_master_dma_unmap_single”h]”hŒi3c_master_dma_unmap_single”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj1ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjç0h²hh³jù0h´M@ ubjB)�”}”(hŒ(struct i3c_dma *dma_xfer)”h]”jH)�”}”(hŒstruct i3c_dma *dma_xfer”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj(1h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj$1ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj51h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$1ubh)�”}”(hhh]”j))�”}”(hŒi3c_dma”h]”hŒi3c_dma”…”�”}”(hjF1h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjC1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jH1Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j1sbŒc.i3c_master_dma_unmap_single”†”asbuh1hhj$1ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$1ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjt1h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj$1ubj))�”}”(hŒdma_xfer”h]”hŒdma_xfer”…”�”}”(hj�1h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj$1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj 1ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjç0h²hh³jù0h´M@ ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjã0h²hh³jù0h´M@ ubah}”(h]”jÞ0ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jù0h´M@ hjà0h²hubjç)�”}”(hhh]”jì)�”}”(hŒUnmap buffer after DMA”h]”hŒUnmap buffer after DMA”…”�”}”(hj«1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M@ hj¨1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjà0h²hh³jù0h´M@ ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jÃ1j jÃ1j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hŒ–**Parameters** ``struct i3c_dma *dma_xfer`` DMA transfer and mapping descriptor **Description** Unmap buffer and cleanup DMA transfer descriptor.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÍ1h]”hŒ Parameters”…”�”}”(hjÏ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjË1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MD hjÇ1ubj0)�”}”(hhh]”j5)�”}”(hŒA``struct i3c_dma *dma_xfer`` DMA transfer and mapping descriptor ”h]”(j;)�”}”(hŒ``struct i3c_dma *dma_xfer``”h]”jA)�”}”(hjì1h]”hŒstruct i3c_dma *dma_xfer”…”�”}”(hjî1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjê1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MA hjæ1ubjW)�”}”(hhh]”jì)�”}”(hŒ#DMA transfer and mapping descriptor”h]”hŒ#DMA transfer and mapping descriptor”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j2h´MA hj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjæ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j2h´MA hjã1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÇ1ubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj'2h]”hŒ Description”…”�”}”(hj)2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MC hjÇ1ubjì)�”}”(hŒ1Unmap buffer and cleanup DMA transfer descriptor.”h]”hŒ1Unmap buffer and cleanup DMA transfer descriptor.”…”�”}”(hj=2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MB hjÇ1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ i3c_master_set_info (C function)”Œc.i3c_master_set_info”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒbint i3c_master_set_info (struct i3c_master_controller *master, const struct i3c_device_info *info)”h]”hú)�”}”(hŒaint i3c_master_set_info(struct i3c_master_controller *master, const struct i3c_device_info *info)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjl2h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjh2h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MT ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh2h²hh³jz2h´MT ubj#)�”}”(hŒi3c_master_set_info”h]”j))�”}”(hŒi3c_master_set_info”h]”hŒi3c_master_set_info”…”�”}”(hj�2h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj‰2ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjh2h²hh³jz2h´MT ubjB)�”}”(hŒJ(struct i3c_master_controller *master, const struct i3c_device_info *info)”h]”(jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj©2h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj¥2ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥2ubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hjÇ2h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÄ2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jÉ2Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j�2sbŒc.i3c_master_set_info”†”asbuh1hhj¥2ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥2ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjõ2h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¥2ubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj¥2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj¡2ubjH)�”}”(hŒ"const struct i3c_device_info *info”h]”(jN)�”}”(hŒconst”h]”hŒconst”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj3ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3ubjN)�”}”(hjQh]”hŒstruct”…”�”}”(hj73h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj3ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3ubh)�”}”(hhh]”j))�”}”(hŒi3c_device_info”h]”hŒi3c_device_info”…”�”}”(hjU3h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjR3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jW3Œmodname”NŒ classname”NjŠj�)�”}”j�]”jã2Œc.i3c_master_set_info”†”asbuh1hhj3ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj�3h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj3ubj))�”}”(hŒinfo”h]”hŒinfo”…”�”}”(hjŽ3h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj¡2ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjh2h²hh³jz2h´MT ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjd2h²hh³jz2h´MT ubah}”(h]”j_2ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jz2h´MT hja2h²hubjç)�”}”(hhh]”jì)�”}”(hŒset master device information”h]”hŒset master device information”…”�”}”(hj¸3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MT hjµ3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhja2h²hh³jz2h´MT ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jÐ3j jÐ3j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX1**Parameters** ``struct i3c_master_controller *master`` master used to send frames on the bus ``const struct i3c_device_info *info`` I3C device information **Description** Set master device info. This should be called from :c:type:`i3c_master_controller_ops->bus_init\(\) `. Not all :c:type:`i3c_device_info` fields are meaningful for a master device. Here is a list of fields that should be properly filled: - :c:type:`i3c_device_info->dyn_addr ` - :c:type:`i3c_device_info->bcr ` - :c:type:`i3c_device_info->dcr ` - :c:type:`i3c_device_info->pid ` - :c:type:`i3c_device_info->hdr_cap ` if ``I3C_BCR_HDR_CAP`` bit is set in :c:type:`i3c_device_info->bcr ` This function must be called with the bus lock held in maintenance mode. **Return** 0 if **info** contains valid information (not every piece of information can be checked, but we can at least make sure **info->dyn_addr** and **info->bcr** are correct), -EINVAL otherwise.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÚ3h]”hŒ Parameters”…”�”}”(hjÜ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MX hjÔ3ubj0)�”}”(hhh]”(j5)�”}”(hŒO``struct i3c_master_controller *master`` master used to send frames on the bus ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hjù3h]”hŒ$struct i3c_master_controller *master”…”�”}”(hjû3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj÷3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MU hjó3ubjW)�”}”(hhh]”jì)�”}”(hŒ%master used to send frames on the bus”h]”hŒ%master used to send frames on the bus”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j4h´MU hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjó3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j4h´MU hjð3ubj5)�”}”(hŒ>``const struct i3c_device_info *info`` I3C device information ”h]”(j;)�”}”(hŒ&``const struct i3c_device_info *info``”h]”jA)�”}”(hj24h]”hŒ"const struct i3c_device_info *info”…”�”}”(hj44h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj04ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MV hj,4ubjW)�”}”(hhh]”jì)�”}”(hŒI3C device information”h]”hŒI3C device information”…”�”}”(hjK4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jG4h´MV hjH4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj,4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jG4h´MV hjð3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÔ3ubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjm4h]”hŒ Description”…”�”}”(hjo4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjk4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MX hjÔ3ubjì)�”}”(hŒ�Set master device info. This should be called from :c:type:`i3c_master_controller_ops->bus_init\(\) `.”h]”(hŒ3Set master device info. This should be called from ”…”�”}”(hjƒ4h²hh³Nh´Nubh)�”}”(hŒM:c:type:`i3c_master_controller_ops->bus_init\(\) `”h]”jA)�”}”(hj�4h]”hŒ%i3c_master_controller_ops->bus_init()”…”�”}”(hj�4h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hj‹4ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒi3c_master_controller_ops”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MW hjƒ4ubhŒ.”…”�”}”(hjƒ4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jª4h´MW hjÔ3ubjì)�”}”(hŒ…Not all :c:type:`i3c_device_info` fields are meaningful for a master device. Here is a list of fields that should be properly filled:”h]”(hŒNot all ”…”�”}”(hjµ4h²hh³Nh´Nubh)�”}”(hŒ:c:type:`i3c_device_info`”h]”jA)�”}”(hj¿4h]”hŒi3c_device_info”…”�”}”(hjÁ4h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hj½4ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŠjtjwŒi3c_device_info”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MZ hjµ4ubhŒd fields are meaningful for a master device. Here is a list of fields that should be properly filled:”…”�”}”(hjµ4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÜ4h´MZ hjÔ3ubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ5:c:type:`i3c_device_info->dyn_addr `”h]”jì)�”}”(hjð4h]”h)�”}”(hjð4h]”jA)�”}”(hjð4h]”hŒi3c_device_info->dyn_addr”…”�”}”(hjø4h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hjõ4ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒi3c_device_info”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M] hjò4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j5h´M] hjî4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jì4hjé4ubjí4)�”}”(hŒ0:c:type:`i3c_device_info->bcr `”h]”jì)�”}”(hj"5h]”h)�”}”(hj"5h]”jA)�”}”(hj"5h]”hŒi3c_device_info->bcr”…”�”}”(hj*5h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hj'5ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒi3c_device_info”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M^ hj$5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jE5h´M^ hj 5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jì4hjé4ubjí4)�”}”(hŒ0:c:type:`i3c_device_info->dcr `”h]”jì)�”}”(hjT5h]”h)�”}”(hjT5h]”jA)�”}”(hjT5h]”hŒi3c_device_info->dcr”…”�”}”(hj\5h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hjY5ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒi3c_device_info”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M_ hjV5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jw5h´M_ hjR5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jì4hjé4ubjí4)�”}”(hŒ0:c:type:`i3c_device_info->pid `”h]”jì)�”}”(hj†5h]”h)�”}”(hj†5h]”jA)�”}”(hj†5h]”hŒi3c_device_info->pid”…”�”}”(hjŽ5h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hj‹5ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒi3c_device_info”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M` hjˆ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j©5h´M` hj„5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jì4hjé4ubjí4)�”}”(hŒ‹:c:type:`i3c_device_info->hdr_cap ` if ``I3C_BCR_HDR_CAP`` bit is set in :c:type:`i3c_device_info->bcr ` ”h]”jì)�”}”(hŒŠ:c:type:`i3c_device_info->hdr_cap ` if ``I3C_BCR_HDR_CAP`` bit is set in :c:type:`i3c_device_info->bcr `”h]”(h)�”}”(hŒ4:c:type:`i3c_device_info->hdr_cap `”h]”jA)�”}”(hjÀ5h]”hŒi3c_device_info->hdr_cap”…”�”}”(hjÂ5h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hj¾5ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒi3c_device_info”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Ma hjº5ubhŒ if ”…”�”}”(hjº5h²hh³Nh´NubjA)�”}”(hŒ``I3C_BCR_HDR_CAP``”h]”hŒI3C_BCR_HDR_CAP”…”�”}”(hjâ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjº5ubhŒ bit is set in ”…”�”}”(hjº5h²hh³Nh´Nubh)�”}”(hŒ0:c:type:`i3c_device_info->bcr `”h]”jA)�”}”(hjö5h]”hŒi3c_device_info->bcr”…”�”}”(hjø5h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hjô5ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒi3c_device_info”uh1hh³jÝ5h´Ma hjº5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÝ5h´Ma hj¶5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jì4hjé4ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jç4h³j5h´M] hjÔ3ubjì)�”}”(hŒHThis function must be called with the bus lock held in maintenance mode.”h]”hŒHThis function must be called with the bus lock held in maintenance mode.”…”�”}”(hj'6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Md hjÔ3ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj86h]”hŒReturn”…”�”}”(hj:6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj66ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mf hjÔ3ubjì)�”}”(hŒ¼0 if **info** contains valid information (not every piece of information can be checked, but we can at least make sure **info->dyn_addr** and **info->bcr** are correct), -EINVAL otherwise.”h]”(hŒ0 if ”…”�”}”(hjN6h²hh³Nh´Nubj)�”}”(hŒ**info**”h]”hŒinfo”…”�”}”(hjV6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjN6ubhŒj contains valid information (not every piece of information can be checked, but we can at least make sure ”…”�”}”(hjN6h²hh³Nh´Nubj)�”}”(hŒ**info->dyn_addr**”h]”hŒinfo->dyn_addr”…”�”}”(hjh6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjN6ubhŒ and ”…”�”}”(hjN6h²hh³Nh´Nubj)�”}”(hŒ **info->bcr**”h]”hŒ info->bcr”…”�”}”(hjz6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjN6ubhŒ! are correct), -EINVAL otherwise.”…”�”}”(hjN6h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mg hjÔ3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ i3c_master_bus_init (C function)”Œc.i3c_master_bus_init”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ>int i3c_master_bus_init (struct i3c_master_controller *master)”h]”hú)�”}”(hŒ=int i3c_master_bus_init(struct i3c_master_controller *master)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj³6h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj¯6h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M® ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂ6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯6h²hh³jÁ6h´M® ubj#)�”}”(hŒi3c_master_bus_init”h]”j))�”}”(hŒi3c_master_bus_init”h]”hŒi3c_master_bus_init”…”�”}”(hjÔ6h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÐ6ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj¯6h²hh³jÁ6h´M® ubjB)�”}”(hŒ&(struct i3c_master_controller *master)”h]”jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjð6h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjì6ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjì6ubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj 7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j7Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jÖ6sbŒc.i3c_master_bus_init”†”asbuh1hhjì6ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjì6ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj<7h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjì6ubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hjI7h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjì6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjè6ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj¯6h²hh³jÁ6h´M® ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj«6h²hh³jÁ6h´M® ubah}”(h]”j¦6ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jÁ6h´M® hj¨6h²hubjç)�”}”(hhh]”jì)�”}”(hŒinitialize an I3C bus”h]”hŒinitialize an I3C bus”…”�”}”(hjs7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M® hjp7h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj¨6h²hh³jÁ6h´M® ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j‹7j j‹7j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXÅ**Parameters** ``struct i3c_master_controller *master`` main master initializing the bus **Description** This function is following all initialisation steps described in the I3C specification: 1. Attach I2C devs to the master so that the master can fill its internal device table appropriately 2. Call :c:type:`i3c_master_controller_ops->bus_init\(\) ` method to initialize the master controller. That's usually where the bus mode is selected (pure bus or mixed fast/slow bus) 3. Instruct all devices on the bus to drop their dynamic address. This is particularly important when the bus was previously configured by someone else (for example the bootloader) 4. Disable all slave events. 5. Reserve address slots for I3C devices with init_dyn_addr. And if devices also have static_addr, try to pre-assign dynamic addresses requested by the FW with SETDASA and attach corresponding statically defined I3C devices to the master. 6. Do a DAA (Dynamic Address Assignment) to assign dynamic addresses to all remaining I3C devices Once this is done, all I3C and I2C devices should be usable. **Return** a 0 in case of success, an negative error code otherwise.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj•7h]”hŒ Parameters”…”�”}”(hj—7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M² hj�7ubj0)�”}”(hhh]”j5)�”}”(hŒJ``struct i3c_master_controller *master`` main master initializing the bus ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hj´7h]”hŒ$struct i3c_master_controller *master”…”�”}”(hj¶7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj²7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¯ hj®7ubjW)�”}”(hhh]”jì)�”}”(hŒ main master initializing the bus”h]”hŒ main master initializing the bus”…”�”}”(hjÍ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÉ7h´M¯ hjÊ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj®7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÉ7h´M¯ hj«7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj�7ubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjï7h]”hŒ Description”…”�”}”(hjñ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjí7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M± hj�7ubjì)�”}”(hŒWThis function is following all initialisation steps described in the I3C specification:”h]”hŒWThis function is following all initialisation steps described in the I3C specification:”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M° hj�7ubhŒenumerated_list”“”)�”}”(hhh]”(jí4)�”}”(hŒbAttach I2C devs to the master so that the master can fill its internal device table appropriately ”h]”jì)�”}”(hŒaAttach I2C devs to the master so that the master can fill its internal device table appropriately”h]”hŒaAttach I2C devs to the master so that the master can fill its internal device table appropriately”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M³ hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jì4hj8ubjí4)�”}”(hŒÏCall :c:type:`i3c_master_controller_ops->bus_init\(\) ` method to initialize the master controller. That's usually where the bus mode is selected (pure bus or mixed fast/slow bus) ”h]”jì)�”}”(hŒÎCall :c:type:`i3c_master_controller_ops->bus_init\(\) ` method to initialize the master controller. That's usually where the bus mode is selected (pure bus or mixed fast/slow bus)”h]”(hŒCall ”…”�”}”(hj68h²hh³Nh´Nubh)�”}”(hŒM:c:type:`i3c_master_controller_ops->bus_init\(\) `”h]”jA)�”}”(hj@8h]”hŒ%i3c_master_controller_ops->bus_init()”…”�”}”(hjB8h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hj>8ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒi3c_master_controller_ops”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¶ hj68ubhŒ~ method to initialize the master controller. That’s usually where the bus mode is selected (pure bus or mixed fast/slow bus)”…”�”}”(hj68h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j]8h´M¶ hj28ubah}”(h]”h ]”h"]”h$]”h&]”uh1jì4hj8ubjí4)�”}”(hŒ²Instruct all devices on the bus to drop their dynamic address. This is particularly important when the bus was previously configured by someone else (for example the bootloader) ”h]”jì)�”}”(hŒ±Instruct all devices on the bus to drop their dynamic address. This is particularly important when the bus was previously configured by someone else (for example the bootloader)”h]”hŒ±Instruct all devices on the bus to drop their dynamic address. This is particularly important when the bus was previously configured by someone else (for example the bootloader)”…”�”}”(hjr8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mº hjn8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jì4hj8ubjí4)�”}”(hŒDisable all slave events. ”h]”jì)�”}”(hŒDisable all slave events.”h]”hŒDisable all slave events.”…”�”}”(hj‹8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¾ hj‡8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jì4hj8ubjí4)�”}”(hŒìReserve address slots for I3C devices with init_dyn_addr. And if devices also have static_addr, try to pre-assign dynamic addresses requested by the FW with SETDASA and attach corresponding statically defined I3C devices to the master. ”h]”jì)�”}”(hŒëReserve address slots for I3C devices with init_dyn_addr. And if devices also have static_addr, try to pre-assign dynamic addresses requested by the FW with SETDASA and attach corresponding statically defined I3C devices to the master.”h]”hŒëReserve address slots for I3C devices with init_dyn_addr. And if devices also have static_addr, try to pre-assign dynamic addresses requested by the FW with SETDASA and attach corresponding statically defined I3C devices to the master.”…”�”}”(hj¤8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÀ hj 8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jì4hj8ubjí4)�”}”(hŒ_Do a DAA (Dynamic Address Assignment) to assign dynamic addresses to all remaining I3C devices ”h]”jì)�”}”(hŒ^Do a DAA (Dynamic Address Assignment) to assign dynamic addresses to all remaining I3C devices”h]”hŒ^Do a DAA (Dynamic Address Assignment) to assign dynamic addresses to all remaining I3C devices”…”�”}”(hj½8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÅ hj¹8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jì4hj8ubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1j8hj�7ubjì)�”}”(hŒh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj>ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>ubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hj*>h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj'>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j,>Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jò=sbŒc.i3c_master_supports_ccc_cmd”†”asbuh1hhj>ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjX>h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj>ubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hje>h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj>ubjH)�”}”(hŒconst struct i3c_ccc_cmd *cmd”h]”(jN)�”}”(hj3h]”hŒconst”…”�”}”(hj~>h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjz>ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjz>ubjN)�”}”(hjQh]”hŒstruct”…”�”}”(hj™>h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjz>ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjz>ubh)�”}”(hhh]”j))�”}”(hŒ i3c_ccc_cmd”h]”hŒ i3c_ccc_cmd”…”�”}”(hj·>h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj´>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j¹>Œmodname”NŒ classname”NjŠj�)�”}”j�]”jF>Œc.i3c_master_supports_ccc_cmd”†”asbuh1hhjz>ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕ>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjz>ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjã>h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjz>ubj))�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hjð>h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjz>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj>ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjÌ=h²hh³jÝ=h´M‚ ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjÈ=h²hh³jÝ=h´M‚ ubah}”(h]”jÃ=ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jÝ=h´M‚ hjÅ=h²hubjç)�”}”(hhh]”jì)�”}”(hŒcheck CCC command support”h]”hŒcheck CCC command support”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M‚ hj?h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjÅ=h²hh³jÝ=h´M‚ ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j2?j j2?j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hŒÇ**Parameters** ``struct i3c_master_controller *master`` I3C master controller ``const struct i3c_ccc_cmd *cmd`` CCC command to verify **Return** true if **cmd** is supported, false otherwise.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M† hj6?ubj0)�”}”(hhh]”(j5)�”}”(hŒ?``struct i3c_master_controller *master`` I3C master controller ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hj[?h]”hŒ$struct i3c_master_controller *master”…”�”}”(hj]?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjY?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mƒ hjU?ubjW)�”}”(hhh]”jì)�”}”(hŒI3C master controller”h]”hŒI3C master controller”…”�”}”(hjt?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jp?h´Mƒ hjq?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjU?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jp?h´Mƒ hjR?ubj5)�”}”(hŒ8``const struct i3c_ccc_cmd *cmd`` CCC command to verify ”h]”(j;)�”}”(hŒ!``const struct i3c_ccc_cmd *cmd``”h]”jA)�”}”(hj”?h]”hŒconst struct i3c_ccc_cmd *cmd”…”�”}”(hj–?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj’?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M„ hjŽ?ubjW)�”}”(hhh]”jì)�”}”(hŒCCC command to verify”h]”hŒCCC command to verify”…”�”}”(hj­?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j©?h´M„ hjª?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjŽ?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j©?h´M„ hjR?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj6?ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjÏ?h]”hŒReturn”…”�”}”(hjÑ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M† hj6?ubjì)�”}”(hŒ.true if **cmd** is supported, false otherwise.”h]”(hŒtrue if ”…”�”}”(hjå?h²hh³Nh´Nubj)�”}”(hŒ**cmd**”h]”hŒcmd”…”�”}”(hjí?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjå?ubhŒ is supported, false otherwise.”…”�”}”(hjå?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M† hj6?ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ$i3c_master_send_ccc_cmd (C function)”Œc.i3c_master_send_ccc_cmd”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ[int i3c_master_send_ccc_cmd (struct i3c_master_controller *master, struct i3c_ccc_cmd *cmd)”h]”hú)�”}”(hŒZint i3c_master_send_ccc_cmd(struct i3c_master_controller *master, struct i3c_ccc_cmd *cmd)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj&@h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj"@h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M™ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj"@h²hh³j4@h´M™ ubj#)�”}”(hŒi3c_master_send_ccc_cmd”h]”j))�”}”(hŒi3c_master_send_ccc_cmd”h]”hŒi3c_master_send_ccc_cmd”…”�”}”(hjG@h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjC@ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj"@h²hh³j4@h´M™ ubjB)�”}”(hŒ?(struct i3c_master_controller *master, struct i3c_ccc_cmd *cmd)”h]”(jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjc@h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj_@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_@ubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hj�@h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj~@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jƒ@Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jI@sbŒc.i3c_master_send_ccc_cmd”†”asbuh1hhj_@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_@ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj¯@h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj_@ubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hj¼@h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj_@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj[@ubjH)�”}”(hŒstruct i3c_ccc_cmd *cmd”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjÕ@h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÑ@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑ@ubh)�”}”(hhh]”j))�”}”(hŒ i3c_ccc_cmd”h]”hŒ i3c_ccc_cmd”…”�”}”(hjó@h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjð@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jõ@Œmodname”NŒ classname”NjŠj�)�”}”j�]”j�@Œc.i3c_master_send_ccc_cmd”†”asbuh1hhjÑ@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑ@ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÑ@ubj))�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hj,Ah²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÑ@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj[@ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj"@h²hh³j4@h´M™ ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj@h²hh³j4@h´M™ ubah}”(h]”j@ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j4@h´M™ hj@h²hubjç)�”}”(hhh]”jì)�”}”(hŒsend a CCC command”h]”hŒsend a CCC command”…”�”}”(hjVAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M™ hjSAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj@h²hh³j4@h´M™ ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jnAj jnAj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX¸**Parameters** ``struct i3c_master_controller *master`` I3C master controller issuing the command ``struct i3c_ccc_cmd *cmd`` CCC command to be sent **Description** This function sends a Common Command Code (CCC) command to devices on the I3C bus. It acquires the bus maintenance lock, executes the command, and then releases the lock to ensure safe access to the bus. **Return** 0 on success, or a negative error code on failure.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjxAh]”hŒ Parameters”…”�”}”(hjzAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjvAubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M� hjrAubj0)�”}”(hhh]”(j5)�”}”(hŒS``struct i3c_master_controller *master`` I3C master controller issuing the command ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hj—Ah]”hŒ$struct i3c_master_controller *master”…”�”}”(hj™Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj•Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mš hj‘AubjW)�”}”(hhh]”jì)�”}”(hŒ)I3C master controller issuing the command”h]”hŒ)I3C master controller issuing the command”…”�”}”(hj°Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j¬Ah´Mš hj­Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj‘Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j¬Ah´Mš hjŽAubj5)�”}”(hŒ3``struct i3c_ccc_cmd *cmd`` CCC command to be sent ”h]”(j;)�”}”(hŒ``struct i3c_ccc_cmd *cmd``”h]”jA)�”}”(hjÐAh]”hŒstruct i3c_ccc_cmd *cmd”…”�”}”(hjÒAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÎAubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M› hjÊAubjW)�”}”(hhh]”jì)�”}”(hŒCCC command to be sent”h]”hŒCCC command to be sent”…”�”}”(hjéAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jåAh´M› hjæAubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÊAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jåAh´M› hjŽAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjrAubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj Bh]”hŒ Description”…”�”}”(hj Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M� hjrAubjì)�”}”(hŒËThis function sends a Common Command Code (CCC) command to devices on the I3C bus. It acquires the bus maintenance lock, executes the command, and then releases the lock to ensure safe access to the bus.”h]”hŒËThis function sends a Common Command Code (CCC) command to devices on the I3C bus. It acquires the bus maintenance lock, executes the command, and then releases the lock to ensure safe access to the bus.”…”�”}”(hj!Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mœ hjrAubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj2Bh]”hŒReturn”…”�”}”(hj4Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M  hjrAubjì)�”}”(hŒ20 on success, or a negative error code on failure.”h]”hŒ20 on success, or a negative error code on failure.”…”�”}”(hjHBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¡ hjrAubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ"i3c_master_do_daa_ext (C function)”Œc.i3c_master_do_daa_ext”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒMint i3c_master_do_daa_ext (struct i3c_master_controller *master, bool rstdaa)”h]”hú)�”}”(hŒLint i3c_master_do_daa_ext(struct i3c_master_controller *master, bool rstdaa)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjwBh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjsBh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M· ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsBh²hh³j…Bh´M· ubj#)�”}”(hŒi3c_master_do_daa_ext”h]”j))�”}”(hŒi3c_master_do_daa_ext”h]”hŒi3c_master_do_daa_ext”…”�”}”(hj˜Bh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj”Bubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjsBh²hh³j…Bh´M· ubjB)�”}”(hŒ3(struct i3c_master_controller *master, bool rstdaa)”h]”(jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj´Bh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj°Bubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj°Bubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hjÒBh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÏBubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jÔBŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jšBsbŒc.i3c_master_do_daa_ext”†”asbuh1hhj°Bubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj°Bubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj°Bubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hj Ch²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj°Bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj¬BubjH)�”}”(hŒ bool rstdaa”h]”(j)�”}”(hjŽh]”hŒbool”…”�”}”(hj&Ch²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj"Cubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3Ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj"Cubj))�”}”(hŒrstdaa”h]”hŒrstdaa”…”�”}”(hjACh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj"Cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj¬Bubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjsBh²hh³j…Bh´M· ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjoBh²hh³j…Bh´M· ubah}”(h]”jjBah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j…Bh´M· hjlBh²hubjç)�”}”(hhh]”jì)�”}”(hŒ-Dynamic Address Assignment (extended version)”h]”hŒ-Dynamic Address Assignment (extended version)”…”�”}”(hjkCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M· hjhCh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjlBh²hh³j…Bh´M· ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jƒCj jƒCj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXŸ**Parameters** ``struct i3c_master_controller *master`` controller ``bool rstdaa`` whether to first perform Reset of Dynamic Addresses (RSTDAA) **Description** Perform Dynamic Address Assignment with optional support for System Hibernation (**rstdaa** is true). After System Hibernation, Dynamic Addresses can have been reassigned at boot time to different values. A simple strategy is followed to handle that. Perform a Reset of Dynamic Addresses (RSTDAA) followed by the normal DAA procedure which has provision for reassigning addresses that differ from the previously recorded addresses. **Return** a 0 in case of success, an negative error code otherwise.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj�Ch]”hŒ Parameters”…”�”}”(hj�Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M» hj‡Cubj0)�”}”(hhh]”(j5)�”}”(hŒ4``struct i3c_master_controller *master`` controller ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hj¬Ch]”hŒ$struct i3c_master_controller *master”…”�”}”(hj®Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjªCubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¸ hj¦CubjW)�”}”(hhh]”jì)�”}”(hŒ controller”h]”hŒ controller”…”�”}”(hjÅCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÁCh´M¸ hjÂCubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¦Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÁCh´M¸ hj£Cubj5)�”}”(hŒM``bool rstdaa`` whether to first perform Reset of Dynamic Addresses (RSTDAA) ”h]”(j;)�”}”(hŒ``bool rstdaa``”h]”jA)�”}”(hjåCh]”hŒ bool rstdaa”…”�”}”(hjçCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjãCubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¹ hjßCubjW)�”}”(hhh]”jì)�”}”(hŒDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6DubhŒ is true).”…”�”}”(hj6Dh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mº hj‡Cubjì)�”}”(hXIAfter System Hibernation, Dynamic Addresses can have been reassigned at boot time to different values. A simple strategy is followed to handle that. Perform a Reset of Dynamic Addresses (RSTDAA) followed by the normal DAA procedure which has provision for reassigning addresses that differ from the previously recorded addresses.”h]”hXIAfter System Hibernation, Dynamic Addresses can have been reassigned at boot time to different values. A simple strategy is followed to handle that. Perform a Reset of Dynamic Addresses (RSTDAA) followed by the normal DAA procedure which has provision for reassigning addresses that differ from the previously recorded addresses.”…”�”}”(hjWDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M½ hj‡Cubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjhDh]”hŒReturn”…”�”}”(hjjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfDubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mà hj‡Cubjì)�”}”(hŒ9a 0 in case of success, an negative error code otherwise.”h]”hŒ9a 0 in case of success, an negative error code otherwise.”…”�”}”(hj~Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÄ hj‡Cubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒi3c_master_do_daa (C function)”Œc.i3c_master_do_daa”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ``struct i3c_master_controller *master`` master doing the DAA ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hj®Eh]”hŒ$struct i3c_master_controller *master”…”�”}”(hj°Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj¬Eubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mí hj¨EubjW)�”}”(hhh]”jì)�”}”(hŒmaster doing the DAA”h]”hŒmaster doing the DAA”…”�”}”(hjÇEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÃEh´Mí hjÄEubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¨Eubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÃEh´Mí hj¥Eubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj‰Eubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjéEh]”hŒ Description”…”�”}”(hjëEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjçEubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mï hj‰Eubjì)�”}”(hŒ¢This function instantiates I3C device objects and adds them to the I3C device list. All device information is automatically retrieved using standard CCC commands.”h]”hŒ¢This function instantiates I3C device objects and adds them to the I3C device list. All device information is automatically retrieved using standard CCC commands.”…”�”}”(hjÿEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mî hj‰Eubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjFh]”hŒReturn”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mò hj‰Eubjì)�”}”(hŒ9a 0 in case of success, an negative error code otherwise.”h]”hŒ9a 0 in case of success, an negative error code otherwise.”…”�”}”(hj&Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mó hj‰Eubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ!i3c_master_queue_ibi (C function)”Œc.i3c_master_queue_ibi”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒOvoid i3c_master_queue_ibi (struct i3c_dev_desc *dev, struct i3c_ibi_slot *slot)”h]”hú)�”}”(hŒNvoid i3c_master_queue_ibi(struct i3c_dev_desc *dev, struct i3c_ibi_slot *slot)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjUFh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjQFh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M'ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQFh²hh³jcFh´M'ubj#)�”}”(hŒi3c_master_queue_ibi”h]”j))�”}”(hŒi3c_master_queue_ibi”h]”hŒi3c_master_queue_ibi”…”�”}”(hjvFh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjrFubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjQFh²hh³jcFh´M'ubjB)�”}”(hŒ5(struct i3c_dev_desc *dev, struct i3c_ibi_slot *slot)”h]”(jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj’Fh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjŽFubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽFubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hj°Fh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj­Fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j²FŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jxFsbŒc.i3c_master_queue_ibi”†”asbuh1hhjŽFubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽFubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjÞFh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjŽFubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjëFh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjŽFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjŠFubjH)�”}”(hŒstruct i3c_ibi_slot *slot”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjGubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjGubh)�”}”(hhh]”j))�”}”(hŒ i3c_ibi_slot”h]”hŒ i3c_ibi_slot”…”�”}”(hj"Gh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjGubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j$GŒmodname”NŒ classname”NjŠj�)�”}”j�]”jÌFŒc.i3c_master_queue_ibi”†”asbuh1hhjGubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@Gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjGubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjNGh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjGubj))�”}”(hŒslot”h]”hŒslot”…”�”}”(hj[Gh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjŠFubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjQFh²hh³jcFh´M'ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjMFh²hh³jcFh´M'ubah}”(h]”jHFah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jcFh´M'hjJFh²hubjç)�”}”(hhh]”jì)�”}”(hŒ Queue an IBI”h]”hŒ Queue an IBI”…”�”}”(hj…Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M'hj‚Gh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjJFh²hh³jcFh´M'ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j�Gj j�Gj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX"**Parameters** ``struct i3c_dev_desc *dev`` the device this IBI is coming from ``struct i3c_ibi_slot *slot`` the IBI slot used to store the payload **Description** Queue an IBI to the controller workqueue. The IBI handler attached to the dev will be called from a workqueue context.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj§Gh]”hŒ Parameters”…”�”}”(hj©Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥Gubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M+hj¡Gubj0)�”}”(hhh]”(j5)�”}”(hŒ@``struct i3c_dev_desc *dev`` the device this IBI is coming from ”h]”(j;)�”}”(hŒ``struct i3c_dev_desc *dev``”h]”jA)�”}”(hjÆGh]”hŒstruct i3c_dev_desc *dev”…”�”}”(hjÈGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÄGubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M(hjÀGubjW)�”}”(hhh]”jì)�”}”(hŒ"the device this IBI is coming from”h]”hŒ"the device this IBI is coming from”…”�”}”(hjßGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÛGh´M(hjÜGubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÀGubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÛGh´M(hj½Gubj5)�”}”(hŒE``struct i3c_ibi_slot *slot`` the IBI slot used to store the payload ”h]”(j;)�”}”(hŒ``struct i3c_ibi_slot *slot``”h]”jA)�”}”(hjÿGh]”hŒstruct i3c_ibi_slot *slot”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjýGubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M)hjùGubjW)�”}”(hhh]”jì)�”}”(hŒ&the IBI slot used to store the payload”h]”hŒ&the IBI slot used to store the payload”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jHh´M)hjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjùGubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jHh´M)hj½Gubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj¡Gubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj:Hh]”hŒ Description”…”�”}”(hjInvoke the current controller’s IBI slot recycling callback.”…”�”}”(hj´Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¼hjNubjì)�”}”(hŒ **Context**”h]”j)�”}”(hjÅNh]”hŒContext”…”�”}”(hjÇNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÃNubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¾hjNubjì)�”}”(hŒäCalled from the generic IBI work handler in workqueue context. No bus lock is taken here: the controller owns its IBI pool and is responsible for synchronizing access to it. The generic pool implementation uses its own spinlock.”h]”hŒäCalled from the generic IBI work handler in workqueue context. No bus lock is taken here: the controller owns its IBI pool and is responsible for synchronizing access to it. The generic pool implementation uses its own spinlock.”…”�”}”(hjÛNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¿hjNubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ*i3c_generic_ibi_get_free_slot (C function)”Œc.i3c_generic_ibi_get_free_slot”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒWstruct i3c_ibi_slot * i3c_generic_ibi_get_free_slot (struct i3c_generic_ibi_pool *pool)”h]”hú)�”}”(hŒUstruct i3c_ibi_slot *i3c_generic_ibi_get_free_slot(struct i3c_generic_ibi_pool *pool)”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj Oh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjOh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÏubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjOh²hh³jOh´MÏubh)�”}”(hhh]”j))�”}”(hŒ i3c_ibi_slot”h]”hŒ i3c_ibi_slot”…”�”}”(hj)Oh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj&Oubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j+OŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†Œi3c_generic_ibi_get_free_slot”sbŒc.i3c_generic_ibi_get_free_slot”†”asbuh1hhjOh²hh³jOh´MÏubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjOh²hh³jOh´MÏubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjXOh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjOh²hh³jOh´MÏubj#)�”}”(hŒi3c_generic_ibi_get_free_slot”h]”j))�”}”(hjGOh]”hŒi3c_generic_ibi_get_free_slot”…”�”}”(hjiOh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjeOubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjOh²hh³jOh´MÏubjB)�”}”(hŒ#(struct i3c_generic_ibi_pool *pool)”h]”jH)�”}”(hŒ!struct i3c_generic_ibi_pool *pool”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj„Oh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj€Oubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘Oh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€Oubh)�”}”(hhh]”j))�”}”(hŒi3c_generic_ibi_pool”h]”hŒi3c_generic_ibi_pool”…”�”}”(hj¢Oh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjŸOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j¤OŒmodname”NŒ classname”NjŠj�)�”}”j�]”jEOŒc.i3c_generic_ibi_get_free_slot”†”asbuh1hhj€Oubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€Oubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjÎOh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj€Oubj))�”}”(hŒpool”h]”hŒpool”…”�”}”(hjÛOh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj€Oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj|Oubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjOh²hh³jOh´MÏubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjOh²hh³jOh´MÏubah}”(h]”jýNah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jOh´MÏhjÿNh²hubjç)�”}”(hhh]”jì)�”}”(hŒ'Get a free slot from a generic IBI pool”h]”hŒ'Get a free slot from a generic IBI pool”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÏhjPh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjÿNh²hh³jOh´MÏubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jPj jPj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXS**Parameters** ``struct i3c_generic_ibi_pool *pool`` the pool to query an IBI slot on **Description** Search for a free slot in a generic IBI pool. The slot should be returned to the pool using i3c_generic_ibi_recycle_slot() when it's no longer needed. **Return** a pointer to a free slot, or NULL if there's no free slot available.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj'Ph]”hŒ Parameters”…”�”}”(hj)Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÓhj!Pubj0)�”}”(hhh]”j5)�”}”(hŒG``struct i3c_generic_ibi_pool *pool`` the pool to query an IBI slot on ”h]”(j;)�”}”(hŒ%``struct i3c_generic_ibi_pool *pool``”h]”jA)�”}”(hjFPh]”hŒ!struct i3c_generic_ibi_pool *pool”…”�”}”(hjHPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjDPubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÐhj@PubjW)�”}”(hhh]”jì)�”}”(hŒ the pool to query an IBI slot on”h]”hŒ the pool to query an IBI slot on”…”�”•}”(hj_Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j[Ph´MÐhj\Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj@Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j[Ph´MÐhj=Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj!Pubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj�Ph]”hŒ Description”…”�”}”(hjƒPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÒhj!Pubjì)�”}”(hŒ–Search for a free slot in a generic IBI pool. The slot should be returned to the pool using i3c_generic_ibi_recycle_slot() when it's no longer needed.”h]”hŒ˜Search for a free slot in a generic IBI pool. The slot should be returned to the pool using i3c_generic_ibi_recycle_slot() when it’s no longer needed.”…”�”}”(hj—Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÑhj!Pubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj¨Ph]”hŒReturn”…”�”}”(hjªPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÕhj!Pubjì)�”}”(hŒDa pointer to a free slot, or NULL if there's no free slot available.”h]”hŒFa pointer to a free slot, or NULL if there’s no free slot available.”…”�”}”(hj¾Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÖhj!Pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ)i3c_generic_ibi_recycle_slot (C function)”Œc.i3c_generic_ibi_recycle_slot”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ]void i3c_generic_ibi_recycle_slot (struct i3c_generic_ibi_pool *pool, struct i3c_ibi_slot *s)”h]”hú)�”}”(hŒ\void i3c_generic_ibi_recycle_slot(struct i3c_generic_ibi_pool *pool, struct i3c_ibi_slot *s)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjíPh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjéPh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mêubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüPh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjéPh²hh³jûPh´Mêubj#)�”}”(hŒi3c_generic_ibi_recycle_slot”h]”j))�”}”(hŒi3c_generic_ibi_recycle_slot”h]”hŒi3c_generic_ibi_recycle_slot”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj Qubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjéPh²hh³jûPh´MêubjB)�”}”(hŒ;(struct i3c_generic_ibi_pool *pool, struct i3c_ibi_slot *s)”h]”(jH)�”}”(hŒ!struct i3c_generic_ibi_pool *pool”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj*Qh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj&Qubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7Qh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&Qubh)�”}”(hhh]”j))�”}”(hŒi3c_generic_ibi_pool”h]”hŒi3c_generic_ibi_pool”…”�”}”(hjHQh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjEQubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jJQŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jQsbŒc.i3c_generic_ibi_recycle_slot”†”asbuh1hhj&Qubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhQh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&Qubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjvQh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj&Qubj))�”}”(hŒpool”h]”hŒpool”…”�”}”(hjƒQh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj&Qubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj"QubjH)�”}”(hŒstruct i3c_ibi_slot *s”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjœQh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj˜Qubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©Qh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˜Qubh)�”}”(hhh]”j))�”}”(hŒ i3c_ibi_slot”h]”hŒ i3c_ibi_slot”…”�”}”(hjºQh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj·Qubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j¼QŒmodname”NŒ classname”NjŠj�)�”}”j�]”jdQŒc.i3c_generic_ibi_recycle_slot”†”asbuh1hhj˜Qubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØQh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˜Qubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjæQh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj˜Qubj))�”}”(hŒs”h]”hŒs”…”�”}”(hjóQh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj˜Qubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj"Qubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjéPh²hh³jûPh´Mêubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjåPh²hh³jûPh´Mêubah}”(h]”jàPah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jûPh´MêhjâPh²hubjç)�”}”(hhh]”jì)�”}”(hŒ#Return a slot to a generic IBI pool”h]”hŒ#Return a slot to a generic IBI pool”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MêhjRh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjâPh²hh³jûPh´Mêubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j5Rj j5Rj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX(**Parameters** ``struct i3c_generic_ibi_pool *pool`` the pool to return the IBI slot to ``struct i3c_ibi_slot *s`` IBI slot to recycle **Description** Add an IBI slot back to its generic IBI pool. Should be called from the master driver struct_master_controller_ops->recycle_ibi() method.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj?Rh]”hŒ Parameters”…”�”}”(hjARh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mîhj9Rubj0)�”}”(hhh]”(j5)�”}”(hŒI``struct i3c_generic_ibi_pool *pool`` the pool to return the IBI slot to ”h]”(j;)�”}”(hŒ%``struct i3c_generic_ibi_pool *pool``”h]”jA)�”}”(hj^Rh]”hŒ!struct i3c_generic_ibi_pool *pool”…”�”}”(hj`Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj\Rubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MëhjXRubjW)�”}”(hhh]”jì)�”}”(hŒ"the pool to return the IBI slot to”h]”hŒ"the pool to return the IBI slot to”…”�”}”(hjwRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jsRh´MëhjtRubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjXRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jsRh´MëhjURubj5)�”}”(hŒ/``struct i3c_ibi_slot *s`` IBI slot to recycle ”h]”(j;)�”}”(hŒ``struct i3c_ibi_slot *s``”h]”jA)�”}”(hj—Rh]”hŒstruct i3c_ibi_slot *s”…”�”}”(hj™Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj•Rubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mìhj‘RubjW)�”}”(hhh]”jì)�”}”(hŒIBI slot to recycle”h]”hŒIBI slot to recycle”…”�”}”(hj°Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j¬Rh´Mìhj­Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj‘Rubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j¬Rh´MìhjURubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj9Rubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjÒRh]”hŒ Description”…”�”}”(hjÔRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÐRubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mîhj9Rubjì)�”}”(hŒ‰Add an IBI slot back to its generic IBI pool. Should be called from the master driver struct_master_controller_ops->recycle_ibi() method.”h]”hŒ‰Add an IBI slot back to its generic IBI pool. Should be called from the master driver struct_master_controller_ops->recycle_ibi() method.”…”�”}”(hjèRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Míhj9Rubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ'i3c_master_register_fwnode (C function)”Œc.i3c_master_register_fwnode”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ·int i3c_master_register_fwnode (struct i3c_master_controller *master, struct device *parent, struct fwnode_handle *fwnode, const struct i3c_master_controller_ops *ops, bool secondary)”h]”hú)�”}”(hŒ¶int i3c_master_register_fwnode(struct i3c_master_controller *master, struct device *parent, struct fwnode_handle *fwnode, const struct i3c_master_controller_ops *ops, bool secondary)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjSh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&Sh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSh²hh³j%Sh´Mubj#)�”}”(hŒi3c_master_register_fwnode”h]”j))�”}”(hŒi3c_master_register_fwnode”h]”hŒi3c_master_register_fwnode”…”�”}”(hj8Sh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj4Subah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjSh²hh³j%Sh´MubjB)�”}”(hŒ˜(struct i3c_master_controller *master, struct device *parent, struct fwnode_handle *fwnode, const struct i3c_master_controller_ops *ops, bool secondary)”h]”(jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjTSh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjPSubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaSh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPSubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hjrSh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjoSubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jtSŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j:SsbŒc.i3c_master_register_fwnode”†”asbuh1hhjPSubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’Sh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPSubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj Sh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjPSubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hj­Sh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjPSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjLSubjH)�”}”(hŒstruct device *parent”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjÆSh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÂSubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓSh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂSubh)�”}”(hhh]”j))�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjäSh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjáSubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jæSŒmodname”NŒ classname”NjŠj�)�”}”j�]”jŽSŒc.i3c_master_register_fwnode”†”asbuh1hhjÂSubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂSubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÂSubj))�”}”(hŒparent”h]”hŒparent”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÂSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjLSubjH)�”}”(hŒstruct fwnode_handle *fwnode”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj6Th²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj2Tubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2Tubh)�”}”(hhh]”j))�”}”(hŒ fwnode_handle”h]”hŒ fwnode_handle”…”�”}”(hjTTh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjQTubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jVTŒmodname”NŒ classname”NjŠj�)�”}”j�]”jŽSŒc.i3c_master_register_fwnode”†”asbuh1hhj2Tubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2Tubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj€Th²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj2Tubj))�”}”(hŒfwnode”h]”hŒfwnode”…”�”}”(hj�Th²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj2Tubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjLSubjH)�”}”(hŒ+const struct i3c_master_controller_ops *ops”h]”(jN)�”}”(hj3h]”hŒconst”…”�”}”(hj¦Th²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj¢Tubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³Th²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢TubjN)�”}”(hjQh]”hŒstruct”…”�”}”(hjÁTh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj¢Tubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢Tubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller_ops”h]”hŒi3c_master_controller_ops”…”�”}”(hjßTh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÜTubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jáTŒmodname”NŒ classname”NjŠj�)�”}”j�]”jŽSŒc.i3c_master_register_fwnode”†”asbuh1hhj¢Tubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢Tubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj Uh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¢Tubj))�”}”(hŒops”h]”hŒops”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj¢Tubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjLSubjH)�”}”(hŒbool secondary”h]”(j)�”}”(hjŽh]”hŒbool”…”�”}”(hj1Uh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj-Uubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>Uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj-Uubj))�”}”(hŒ secondary”h]”hŒ secondary”…”�”}”(hjLUh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj-Uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjLSubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjSh²hh³j%Sh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjSh²hh³j%Sh´Mubah}”(h]”j Sah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j%Sh´Mhj Sh²hubjç)�”}”(hhh]”jì)�”}”(hŒ+register an I3C master with a custom fwnode”h]”hŒ+register an I3C master with a custom fwnode”…”�”}”(hjvUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MhjsUh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj Sh²hh³j%Sh´Mubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jŽUj jŽUj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX_**Parameters** ``struct i3c_master_controller *master`` master used to send frames on the bus ``struct device *parent`` the parent device providing this I3C master controller ``struct fwnode_handle *fwnode`` firmware node describing this I3C bus, or NULL ``const struct i3c_master_controller_ops *ops`` the master controller operations ``bool secondary`` true if registering a secondary master **Description** This helper is useful for virtual I3C masters whose firmware node is not the same as **parent**'s firmware node. **Return** 0 in case of success, a negative error code otherwise.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj˜Uh]”hŒ Parameters”…”�”}”(hjšUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj’Uubj0)�”}”(hhh]”(j5)�”}”(hŒO``struct i3c_master_controller *master`` master used to send frames on the bus ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hj·Uh]”hŒ$struct i3c_master_controller *master”…”�”}”(hj¹Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjµUubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj±UubjW)�”}”(hhh]”jì)�”}”(hŒ%master used to send frames on the bus”h]”hŒ%master used to send frames on the bus”…”�”}”(hjÐUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÌUh´MhjÍUubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj±Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÌUh´Mhj®Uubj5)�”}”(hŒQ``struct device *parent`` the parent device providing this I3C master controller ”h]”(j;)�”}”(hŒ``struct device *parent``”h]”jA)�”}”(hjðUh]”hŒstruct device *parent”…”�”}”(hjòUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjîUubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MhjêUubjW)�”}”(hhh]”jì)�”}”(hŒ6the parent device providing this I3C master controller”h]”hŒ6the parent device providing this I3C master controller”…”�”}”(hj Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jVh´MhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjêUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jVh´Mhj®Uubj5)�”}”(hŒP``struct fwnode_handle *fwnode`` firmware node describing this I3C bus, or NULL ”h]”(j;)�”}”(hŒ ``struct fwnode_handle *fwnode``”h]”jA)�”}”(hj)Vh]”hŒstruct fwnode_handle *fwnode”…”�”}”(hj+Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj'Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj#VubjW)�”}”(hhh]”jì)�”}”(hŒ.firmware node describing this I3C bus, or NULL”h]”hŒ.firmware node describing this I3C bus, or NULL”…”�”}”(hjBVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j>Vh´Mhj?Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj#Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j>Vh´Mhj®Uubj5)�”}”(hŒQ``const struct i3c_master_controller_ops *ops`` the master controller operations ”h]”(j;)�”}”(hŒ/``const struct i3c_master_controller_ops *ops``”h]”jA)�”}”(hjbVh]”hŒ+const struct i3c_master_controller_ops *ops”…”�”}”(hjdVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj`Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj\VubjW)�”}”(hhh]”jì)�”}”(hŒ the master controller operations”h]”hŒ the master controller operations”…”�”}”(hj{Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jwVh´MhjxVubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj\Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jwVh´Mhj®Uubj5)�”}”(hŒ:``bool secondary`` true if registering a secondary master ”h]”(j;)�”}”(hŒ``bool secondary``”h]”jA)�”}”(hj›Vh]”hŒbool secondary”…”�”}”(hj�Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj™Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj•VubjW)�”}”(hhh]”jì)�”}”(hŒ&true if registering a secondary master”h]”hŒ&true if registering a secondary master”…”�”}”(hj´Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j°Vh´Mhj±Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj•Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j°Vh´Mhj®Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj’Uubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjÖVh]”hŒ Description”…”�”}”(hjØVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔVubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj’Uubjì)�”}”(hŒpThis helper is useful for virtual I3C masters whose firmware node is not the same as **parent**'s firmware node.”h]”(hŒUThis helper is useful for virtual I3C masters whose firmware node is not the same as ”…”�”}”(hjìVh²hh³Nh´Nubj)�”}”(hŒ **parent**”h]”hŒparent”…”�”}”(hjôVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjìVubhŒ’s firmware node.”…”�”}”(hjìVh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj’Uubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjWh]”hŒReturn”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Wubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj’Uubjì)�”}”(hŒ60 in case of success, a negative error code otherwise.”h]”hŒ60 in case of success, a negative error code otherwise.”…”�”}”(hj%Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj’Uubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ i3c_master_register (C function)”Œc.i3c_master_register”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ’int i3c_master_register (struct i3c_master_controller *master, struct device *parent, const struct i3c_master_controller_ops *ops, bool secondary)”h]”hú)�”}”(hŒ‘int i3c_master_register(struct i3c_master_controller *master, struct device *parent, const struct i3c_master_controller_ops *ops, bool secondary)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjTWh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjPWh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mªubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPWh²hh³jbWh´Mªubj#)�”}”(hŒi3c_master_register”h]”j))�”}”(hŒi3c_master_register”h]”hŒi3c_master_register”…”�”}”(hjuWh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjqWubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjPWh²hh³jbWh´MªubjB)�”}”(hŒz(struct i3c_master_controller *master, struct device *parent, const struct i3c_master_controller_ops *ops, bool secondary)”h]”(jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj‘Wh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj�Wubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Wubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hj¯Wh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj¬Wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j±WŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jwWsbŒc.i3c_master_register”†”asbuh1hhj�Wubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Wubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjÝWh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj�Wubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hjêWh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj�Wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj‰WubjH)�”}”(hŒstruct device *parent”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÿWubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿWubh)�”}”(hhh]”j))�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj!Xh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjXubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j#XŒmodname”NŒ classname”NjŠj�)�”}”j�]”jËWŒc.i3c_master_register”†”asbuh1hhjÿWubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿWubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjMXh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÿWubj))�”}”(hŒparent”h]”hŒparent”…”�”}”(hjZXh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÿWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj‰WubjH)�”}”(hŒ+const struct i3c_master_controller_ops *ops”h]”(jN)�”}”(hj3h]”hŒconst”…”�”}”(hjsXh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjoXubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjoXubjN)�”}”(hjQh]”hŒstruct”…”�”}”(hjŽXh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjoXubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjoXubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller_ops”h]”hŒi3c_master_controller_ops”…”�”}”(hj¬Xh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj©Xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j®XŒmodname”NŒ classname”NjŠj�)�”}”j�]”jËWŒc.i3c_master_register”†”asbuh1hhjoXubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjoXubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjØXh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjoXubj))�”}”(hŒops”h]”hŒops”…”�”}”(hjåXh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjoXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj‰WubjH)�”}”(hŒbool secondary”h]”(j)�”}”(hjŽh]”hŒbool”…”�”}”(hjþXh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjúXubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Yh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjúXubj))�”}”(hŒ secondary”h]”hŒ secondary”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjúXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj‰Wubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjPWh²hh³jbWh´Mªubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjLWh²hh³jbWh´Mªubah}”(h]”jGWah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jbWh´MªhjIWh²hubjç)�”}”(hhh]”jì)�”}”(hŒregister an I3C master”h]”hŒregister an I3C master”…”�”}”(hjCYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mªhj@Yh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjIWh²hh³jbWh´Mªubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j[Yj j[Yj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX2**Parameters** ``struct i3c_master_controller *master`` master used to send frames on the bus ``struct device *parent`` the parent device (the one that provides this I3C master controller) ``const struct i3c_master_controller_ops *ops`` the master controller operations ``bool secondary`` true if you are registering a secondary master. Will return -EOPNOTSUPP if set to true since secondary masters are not yet supported **Description** This function takes care of everything for you: - creates and initializes the I3C bus - populates the bus with static I2C devs if **parent->of_node** is not NULL - registers all I3C devices added by the controller during bus initialization - registers the I2C adapter and all I2C devices **Return** 0 in case of success, a negative error code otherwise.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjeYh]”hŒ Parameters”…”�”}”(hjgYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjcYubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M®hj_Yubj0)�”}”(hhh]”(j5)�”}”(hŒO``struct i3c_master_controller *master`` master used to send frames on the bus ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hj„Yh]”hŒ$struct i3c_master_controller *master”…”�”}”(hj†Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj‚Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M«hj~YubjW)�”}”(hhh]”jì)�”}”(hŒ%master used to send frames on the bus”h]”hŒ%master used to send frames on the bus”…”�”}”(hj�Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j™Yh´M«hjšYubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj~Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j™Yh´M«hj{Yubj5)�”}”(hŒ_``struct device *parent`` the parent device (the one that provides this I3C master controller) ”h]”(j;)�”}”(hŒ``struct device *parent``”h]”jA)�”}”(hj½Yh]”hŒstruct device *parent”…”�”}”(hj¿Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj»Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M­hj·YubjW)�”}”(hhh]”jì)�”}”(hŒDthe parent device (the one that provides this I3C master controller)”h]”hŒDthe parent device (the one that provides this I3C master controller)”…”�”}”(hjÖYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¬hjÓYubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj·Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÒYh´M­hj{Yubj5)�”}”(hŒQ``const struct i3c_master_controller_ops *ops`` the master controller operations ”h]”(j;)�”}”(hŒ/``const struct i3c_master_controller_ops *ops``”h]”jA)�”}”(hj÷Yh]”hŒ+const struct i3c_master_controller_ops *ops”…”�”}”(hjùYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjõYubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M®hjñYubjW)�”}”(hhh]”jì)�”}”(hŒ the master controller operations”h]”hŒ the master controller operations”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j Zh´M®hj Zubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjñYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j Zh´M®hj{Yubj5)�”}”(hŒ˜``bool secondary`` true if you are registering a secondary master. Will return -EOPNOTSUPP if set to true since secondary masters are not yet supported ”h]”(j;)�”}”(hŒ``bool secondary``”h]”jA)�”}”(hj0Zh]”hŒbool secondary”…”�”}”(hj2Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj.Zubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M±hj*ZubjW)�”}”(hhh]”jì)�”}”(hŒ„true if you are registering a secondary master. Will return -EOPNOTSUPP if set to true since secondary masters are not yet supported”h]”hŒ„true if you are registering a secondary master. Will return -EOPNOTSUPP if set to true since secondary masters are not yet supported”…”�”}”(hjIZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¯hjFZubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj*Zubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jEZh´M±hj{Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj_Yubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjlZh]”hŒ Description”…”�”}”(hjnZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M³hj_Yubjì)�”}”(hŒ/This function takes care of everything for you:”h]”hŒ/This function takes care of everything for you:”…”�”}”(hj‚Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M²hj_Yubjè4)�”}”(hhh]”(jí4)�”}”(hŒ#creates and initializes the I3C bus”h]”jì)�”}”(hj–Zh]”hŒ#creates and initializes the I3C bus”…”�”}”(hj˜Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M´hj”Zubah}”(h]”h ]”h"]”h$]”h&]”uh1jì4hj‘Zubjí4)�”}”(hŒIpopulates the bus with static I2C devs if **parent->of_node** is not NULL”h]”jì)�”}”(hŒIpopulates the bus with static I2C devs if **parent->of_node** is not NULL”h]”(hŒ*populates the bus with static I2C devs if ”…”�”}”(hj°Zh²hh³Nh´Nubj)�”}”(hŒ**parent->of_node**”h]”hŒparent->of_node”…”�”}”(hj¸Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°ZubhŒ is not NULL”…”�”}”(hj°Zh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mµhj¬Zubah}”(h]”h ]”h"]”h$]”h&]”uh1jì4hj‘Zubjí4)�”}”(hŒKregisters all I3C devices added by the controller during bus initialization”h]”jì)�”}”(hŒKregisters all I3C devices added by the controller during bus initialization”h]”hŒKregisters all I3C devices added by the controller during bus initialization”…”�”}”(hjÛZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M·hj×Zubah}”(h]”h ]”h"]”h$]”h&]”uh1jì4hj‘Zubjí4)�”}”(hŒ.registers the I2C adapter and all I2C devices ”h]”jì)�”}”(hŒ-registers the I2C adapter and all I2C devices”h]”hŒ-registers the I2C adapter and all I2C devices”…”�”}”(hjôZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¹hjðZubah}”(h]”h ]”h"]”h$]”h&]”uh1jì4hj‘Zubeh}”(h]”h ]”h"]”h$]”h&]”j%6j&6uh1jç4h³j¥Zh´M´hj_Yubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj[h]”hŒReturn”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M»hj_Yubjì)�”}”(hŒ60 in case of success, a negative error code otherwise.”h]”hŒ60 in case of success, a negative error code otherwise.”…”�”}”(hj'[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M¼hj_Yubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ"i3c_master_unregister (C function)”Œc.i3c_master_unregister”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒAvoid i3c_master_unregister (struct i3c_master_controller *master)”h]”hú)�”}”(hŒ@void i3c_master_unregister(struct i3c_master_controller *master)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjV[h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjR[h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÊubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjR[h²hh³jd[h´MÊubj#)�”}”(hŒi3c_master_unregister”h]”j))�”}”(hŒi3c_master_unregister”h]”hŒi3c_master_unregister”…”�”}”(hjw[h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjs[ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjR[h²hh³jd[h´MÊubjB)�”}”(hŒ&(struct i3c_master_controller *master)”h]”jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj“[h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj�[ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj [h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�[ubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hj±[h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj®[ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j³[Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jy[sbŒc.i3c_master_unregister”†”asbuh1hhj�[ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�[ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjß[h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj�[ubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hjì[h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj�[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj‹[ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjR[h²hh³jd[h´MÊubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjN[h²hh³jd[h´MÊubah}”(h]”jI[ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jd[h´MÊhjK[h²hubjç)�”}”(hhh]”jì)�”}”(hŒunregister an I3C master”h]”hŒunregister an I3C master”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÊhj\h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjK[h²hh³jd[h´MÊubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j.\j j.\j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hŒ«**Parameters** ``struct i3c_master_controller *master`` master used to send frames on the bus **Description** Basically undo everything done in i3c_master_register().”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj8\h]”hŒ Parameters”…”�”}”(hj:\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÎhj2\ubj0)�”}”(hhh]”j5)�”}”(hŒO``struct i3c_master_controller *master`` master used to send frames on the bus ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hjW\h]”hŒ$struct i3c_master_controller *master”…”�”}”(hjY\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjU\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MËhjQ\ubjW)�”}”(hhh]”jì)�”}”(hŒ%master used to send frames on the bus”h]”hŒ%master used to send frames on the bus”…”�”}”(hjp\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jl\h´MËhjm\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjQ\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jl\h´MËhjN\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj2\ubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj’\h]”hŒ Description”…”�”}”(hj”\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÍhj2\ubjì)�”}”(hŒ8Basically undo everything done in i3c_master_register().”h]”hŒ8Basically undo everything done in i3c_master_register().”…”�”}”(hj¨\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÌhj2\ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ2i3c_dev_disable_ibi_controller_locked (C function)”Œ'c.i3c_dev_disable_ibi_controller_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒDint i3c_dev_disable_ibi_controller_locked (struct i3c_dev_desc *dev)”h]”hú)�”}”(hŒCint i3c_dev_disable_ibi_controller_locked(struct i3c_dev_desc *dev)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj×\h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjÓ\h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ\h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓ\h²hh³jå\h´Mubj#)�”}”(hŒ%i3c_dev_disable_ibi_controller_locked”h]”j))�”}”(hŒ%i3c_dev_disable_ibi_controller_locked”h]”hŒ%i3c_dev_disable_ibi_controller_locked”…”�”}”(hjø\h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjô\ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjÓ\h²hh³jå\h´MubjB)�”}”(hŒ(struct i3c_dev_desc *dev)”h]”jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj]ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj]ubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hj2]h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj/]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j4]Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jú\sbŒ'c.i3c_dev_disable_ibi_controller_locked”†”asbuh1hhj]ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj]ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj`]h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj]ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjm]h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj ]ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjÓ\h²hh³jå\h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjÏ\h²hh³jå\h´Mubah}”(h]”jÊ\ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jå\h´MhjÌ\h²hubjç)�”}”(hhh]”jì)�”}”(hŒDisable IBI in the controller”h]”hŒDisable IBI in the controller”…”�”}”(hj—]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj”]h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjÌ\h²hh³jå\h´Mubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j¯]j j¯]j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXj**Parameters** ``struct i3c_dev_desc *dev`` I3C device descriptor **Description** Invoke the current controller's IBI disable callback without waiting for pending IBIs or updating the generic IBI enabled state. **Context** The caller must serialize access to **dev->ibi** and the generic IBI lifecycle. **Return** 0 on success, or a negative error code.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¹]h]”hŒ Parameters”…”�”}”(hj»]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj³]ubj0)�”}”(hhh]”j5)�”}”(hŒ3``struct i3c_dev_desc *dev`` I3C device descriptor ”h]”(j;)�”}”(hŒ``struct i3c_dev_desc *dev``”h]”jA)�”}”(hjØ]h]”hŒstruct i3c_dev_desc *dev”…”�”}”(hjÚ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÖ]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MhjÒ]ubjW)�”}”(hhh]”jì)�”}”(hŒI3C device descriptor”h]”hŒI3C device descriptor”…”�”}”(hjñ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jí]h´Mhjî]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÒ]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jí]h´MhjÏ]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&]”uh1jhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj³]ubjì)�”}”(hŒ€Invoke the current controller's IBI disable callback without waiting for pending IBIs or updating the generic IBI enabled state.”h]”hŒ‚Invoke the current controller’s IBI disable callback without waiting for pending IBIs or updating the generic IBI enabled state.”…”�”}”(hj)^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj³]ubjì)�”}”(hŒ **Context**”h]”j)�”}”(hj:^h]”hŒContext”…”�”}”(hj<^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj³]ubjì)�”}”(hŒOThe caller must serialize access to **dev->ibi** and the generic IBI lifecycle.”h]”(hŒ$The caller must serialize access to ”…”�”}”(hjP^h²hh³Nh´Nubj)�”}”(hŒ **dev->ibi**”h]”hŒdev->ibi”…”�”}”(hjX^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjP^ubhŒ and the generic IBI lifecycle.”…”�”}”(hjP^h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hj³]ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjs^h]”hŒReturn”…”�”}”(hju^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjq^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj³]ubjì)�”}”(hŒ'0 on success, or a negative error code.”h]”hŒ'0 on success, or a negative error code.”…”�”}”(hj‰^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj³]ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ'i3c_dev_disable_ibi_locked (C function)”Œc.i3c_dev_disable_ibi_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ9int i3c_dev_disable_ibi_locked (struct i3c_dev_desc *dev)”h]”hú)�”}”(hŒ8int i3c_dev_disable_ibi_locked(struct i3c_dev_desc *dev)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj¸^h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj´^h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´^h²hh³jÆ^h´M ubj#)�”}”(hŒi3c_dev_disable_ibi_locked”h]”j))�”}”(hŒi3c_dev_disable_ibi_locked”h]”hŒi3c_dev_disable_ibi_locked”…”�”}”(hjÙ^h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÕ^ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj´^h²hh³jÆ^h´M ubjB)�”}”(hŒ(struct i3c_dev_desc *dev)”h]”jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjõ^h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjñ^ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñ^ubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j_Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jÛ^sbŒc.i3c_dev_disable_ibi_locked”†”asbuh1hhjñ^ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñ^ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjA_h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjñ^ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjN_h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjñ^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjí^ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj´^h²hh³jÆ^h´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj°^h²hh³jÆ^h´M ubah}”(h]”j«^ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jÆ^h´M hj­^h²hubjç)�”}”(hhh]”jì)�”}”(hŒ*Disable IBIs coming from a specific device”h]”hŒ*Disable IBIs coming from a specific device”…”�”}”(hjx_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M hju_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj­^h²hh³jÆ^h´M ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j�_j j�_j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXl**Parameters** ``struct i3c_dev_desc *dev`` device on which IBIs should be disabled **Description** This function disable IBIs coming from a specific device and wait for all pending IBIs to be processed. **Context** Must be called with mutex_lock(:c:type:`dev->desc `->ibi_lock) held. **Return** 0 in case of success, a negative error core otherwise.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjš_h]”hŒ Parameters”…”�”}”(hjœ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj˜_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M$hj”_ubj0)�”}”(hhh]”j5)�”}”(hŒE``struct i3c_dev_desc *dev`` device on which IBIs should be disabled ”h]”(j;)�”}”(hŒ``struct i3c_dev_desc *dev``”h]”jA)�”}”(hj¹_h]”hŒstruct i3c_dev_desc *dev”…”�”}”(hj»_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj·_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M!hj³_ubjW)�”}”(hhh]”jì)�”}”(hŒ'device on which IBIs should be disabled”h]”hŒ'device on which IBIs should be disabled”…”�”}”(hjÒ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÎ_h´M!hjÏ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj³_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³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&]”uh1jhjò_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M#hj”_ubjì)�”}”(hŒgThis function disable IBIs coming from a specific device and wait for all pending IBIs to be processed.”h]”hŒgThis function disable IBIs coming from a specific device and wait for all pending IBIs to be processed.”…”�”}”(hj `h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M"hj”_ubjì)�”}”(hŒ **Context**”h]”j)�”}”(hj`h]”hŒContext”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M%hj”_ubjì)�”}”(hŒIMust be called with mutex_lock(:c:type:`dev->desc `->ibi_lock) held.”h]”(hŒMust be called with mutex_lock(”…”�”}”(hj1`h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dev->desc `”h]”jA)�”}”(hj;`h]”hŒ dev->desc”…”�”}”(hj=`h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hj9`ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒdev”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M&hj1`ubhŒ->ibi_lock) held.”…”�”}”(hj1`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jX`h´M&hj”_ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hje`h]”hŒReturn”…”�”}”(hjg`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjc`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M(hj”_ubjì)�”}”(hŒ60 in case of success, a negative error core otherwise.”h]”hŒ60 in case of success, a negative error core otherwise.”…”�”}”(hj{`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M'hj”_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ1i3c_dev_enable_ibi_controller_locked (C function)”Œ&c.i3c_dev_enable_ibi_controller_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒCint i3c_dev_enable_ibi_controller_locked (struct i3c_dev_desc *dev)”h]”hú)�”}”(hŒBint i3c_dev_enable_ibi_controller_locked(struct i3c_dev_desc *dev)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjª`h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj¦`h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M<ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦`h²hh³j¸`h´M<ubj#)�”}”(hŒ$i3c_dev_enable_ibi_controller_locked”h]”j))�”}”(hŒ$i3c_dev_enable_ibi_controller_locked”h]”hŒ$i3c_dev_enable_ibi_controller_locked”…”�”}”(hjË`h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÇ`ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj¦`h²hh³j¸`h´M<ubjB)�”}”(hŒ(struct i3c_dev_desc *dev)”h]”jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjç`h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjã`ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjã`ubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjaubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jaŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jÍ`sbŒ&c.i3c_dev_enable_ibi_controller_locked”†”asbuh1hhjã`ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjã`ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj3ah²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjã`ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj@ah²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjã`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjß`ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj¦`h²hh³j¸`h´M<ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj¢`h²hh³j¸`h´M<ubah}”(h]”j�`ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j¸`h´M<hjŸ`h²hubjç)�”}”(hhh]”jì)�”}”(hŒEnable controller IBI resources”h]”hŒEnable controller IBI resources”…”�”}”(hjjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M<hjgah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjŸ`h²hh³j¸`h´M<ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j‚aj j‚aj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXM**Parameters** ``struct i3c_dev_desc *dev`` I3C device descriptor **Description** Invoke the current controller's IBI enable callback without updating the generic IBI enabled state. **Context** The caller must serialize access to **dev->ibi** and the generic IBI lifecycle. **Return** 0 on success, or a negative error code.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjŒah]”hŒ Parameters”…”�”}”(hjŽah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠaubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M@hj†aubj0)�”}”(hhh]”j5)�”}”(hŒ3``struct i3c_dev_desc *dev`` I3C device descriptor ”h]”(j;)�”}”(hŒ``struct i3c_dev_desc *dev``”h]”jA)�”}”(hj«ah]”hŒstruct i3c_dev_desc *dev”…”�”}”(hj­ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj©aubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M=hj¥aubjW)�”}”(hhh]”jì)�”}”(hŒI3C device descriptor”h]”hŒI3C device descriptor”…”�”}”(hjÄah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÀah´M=hjÁaubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¥aubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÀah´M=hj¢aubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj†aubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjæah]”hŒ Description”…”�”}”(hjèah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjäaubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M?hj†aubjì)�”}”(hŒcInvoke the current controller's IBI enable callback without updating the generic IBI enabled state.”h]”hŒeInvoke the current controller’s IBI enable callback without updating the generic IBI enabled state.”…”�”}”(hjüah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M>hj†aubjì)�”}”(hŒ **Context**”h]”j)�”}”(hj bh]”hŒContext”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj bubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MAhj†aubjì)�”}”(hŒOThe caller must serialize access to **dev->ibi** and the generic IBI lifecycle.”h]”(hŒ$The caller must serialize access to ”…”�”}”(hj#bh²hh³Nh´Nubj)�”}”(hŒ **dev->ibi**”h]”hŒdev->ibi”…”�”}”(hj+bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#bubhŒ and the generic IBI lifecycle.”…”�”}”(hj#bh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MBhj†aubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjFbh]”hŒReturn”…”�”}”(hjHbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjDbubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MEhj†aubjì)�”}”(hŒ'0 on success, or a negative error code.”h]”hŒ'0 on success, or a negative error code.”…”�”}”(hj\bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MEhj†aubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ&i3c_dev_enable_ibi_locked (C function)”Œc.i3c_dev_enable_ibi_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ8int i3c_dev_enable_ibi_locked (struct i3c_dev_desc *dev)”h]”hú)�”}”(hŒ7int i3c_dev_enable_ibi_locked(struct i3c_dev_desc *dev)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj‹bh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj‡bh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MVubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‡bh²hh³j™bh´MVubj#)�”}”(hŒi3c_dev_enable_ibi_locked”h]”j))�”}”(hŒi3c_dev_enable_ibi_locked”h]”hŒi3c_dev_enable_ibi_locked”…”�”}”(hj¬bh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj¨bubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj‡bh²hh³j™bh´MVubjB)�”}”(hŒ(struct i3c_dev_desc *dev)”h]”jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjÈbh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÄbubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÄbubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hjæbh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjãbubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jèbŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j®bsbŒc.i3c_dev_enable_ibi_locked”†”asbuh1hhjÄbubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÄbubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÄbubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj!ch²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÄbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÀbubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj‡bh²hh³j™bh´MVubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjƒbh²hh³j™bh´MVubah}”(h]”j~bah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j™bh´MVhj€bh²hubjç)�”}”(hhh]”jì)�”}”(hŒ.Enable IBIs from a specific device (lock held)”h]”hŒ.Enable IBIs from a specific device (lock held)”…”�”}”(hjKch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MVhjHch²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj€bh²hh³j™bh´MVubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jccj jccj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX**Parameters** ``struct i3c_dev_desc *dev`` device on which IBIs should be enabled **Description** This function enable IBIs coming from a specific device and wait for all pending IBIs to be processed. This should be called on a device where i3c_device_request_ibi() has succeeded. Note that IBIs from this device might be received before this function returns to its caller. **Context** Must be called with mutex_lock(:c:type:`dev->desc `->ibi_lock) held. **Return** 0 on success, or a negative error code on failure.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjmch]”hŒ Parameters”…”�”}”(hjoch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkcubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MZhjgcubj0)�”}”(hhh]”j5)�”}”(hŒD``struct i3c_dev_desc *dev`` device on which IBIs should be enabled ”h]”(j;)�”}”(hŒ``struct i3c_dev_desc *dev``”h]”jA)�”}”(hjŒch]”hŒstruct i3c_dev_desc *dev”…”�”}”(hjŽch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjŠcubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MWhj†cubjW)�”}”(hhh]”jì)�”}”(hŒ&device on which IBIs should be enabled”h]”hŒ&device on which IBIs should be enabled”…”�”}”(hj¥ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j¡ch´MWhj¢cubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj†cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j¡ch´MWhjƒcubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjgcubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjÇch]”hŒ Description”…”�”}”(hjÉch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÅcubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MYhjgcubjì)�”}”(hŒ¶This function enable IBIs coming from a specific device and wait for all pending IBIs to be processed. This should be called on a device where i3c_device_request_ibi() has succeeded.”h]”hŒ¶This function enable IBIs coming from a specific device and wait for all pending IBIs to be processed. This should be called on a device where i3c_device_request_ibi() has succeeded.”…”�”}”(hjÝch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MXhjgcubjì)�”}”(hŒ]Note that IBIs from this device might be received before this function returns to its caller.”h]”hŒ]Note that IBIs from this device might be received before this function returns to its caller.”…”�”}”(hjìch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M\hjgcubjì)�”}”(hŒ **Context**”h]”j)�”}”(hjých]”hŒContext”…”�”}”(hjÿch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûcubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M_hjgcubjì)�”}”(hŒIMust be called with mutex_lock(:c:type:`dev->desc `->ibi_lock) held.”h]”(hŒMust be called with mutex_lock(”…”�”}”(hjdh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dev->desc `”h]”jA)�”}”(hjdh]”hŒ dev->desc”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hjdubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒdev”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M`hjdubhŒ->ibi_lock) held.”…”�”}”(hjdh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j:dh´M`hjgcubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjGdh]”hŒReturn”…”�”}”(hjIdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjEdubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mbhjgcubjì)�”}”(hŒ20 on success, or a negative error code on failure.”h]”hŒ20 on success, or a negative error code on failure.”…”�”}”(hj]dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mahjgcubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ2i3c_dev_request_ibi_controller_locked (C function)”Œ'c.i3c_dev_request_ibi_controller_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒeint i3c_dev_request_ibi_controller_locked (struct i3c_dev_desc *dev, const struct i3c_ibi_setup *req)”h]”hú)�”}”(hŒdint i3c_dev_request_ibi_controller_locked(struct i3c_dev_desc *dev, const struct i3c_ibi_setup *req)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjŒdh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjˆdh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”•h´Mpubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆdh²hh³jšdh´Mpubj#)�”}”(hŒ%i3c_dev_request_ibi_controller_locked”h]”j))�”}”(hŒ%i3c_dev_request_ibi_controller_locked”h]”hŒ%i3c_dev_request_ibi_controller_locked”…”�”}”(hj­dh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj©dubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjˆdh²hh³jšdh´MpubjB)�”}”(hŒ;(struct i3c_dev_desc *dev, const struct i3c_ibi_setup *req)”h]”(jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjÉdh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÅdubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅdubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hjçdh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjädubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jédŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j¯dsbŒ'c.i3c_dev_request_ibi_controller_locked”†”asbuh1hhjÅdubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅdubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÅdubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj"eh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÅdubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÁdubjH)�”}”(hŒconst struct i3c_ibi_setup *req”h]”(jN)�”}”(hj3h]”hŒconst”…”�”}”(hj;eh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj7eubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7eubjN)�”}”(hjQh]”hŒstruct”…”�”}”(hjVeh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj7eubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjceh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7eubh)�”}”(hhh]”j))�”}”(hŒ i3c_ibi_setup”h]”hŒ i3c_ibi_setup”…”�”}”(hjteh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjqeubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jveŒmodname”NŒ classname”NjŠj�)�”}”j�]”jeŒ'c.i3c_dev_request_ibi_controller_locked”†”asbuh1hhj7eubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7eubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj eh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj7eubj))�”}”(hŒreq”h]”hŒreq”…”�”}”(hj­eh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj7eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÁdubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjˆdh²hh³jšdh´Mpubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj„dh²hh³jšdh´Mpubah}”(h]”jdah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jšdh´Mphj�dh²hubjç)�”}”(hhh]”jì)�”}”(hŒ Request controller IBI resources”h]”hŒ Request controller IBI resources”…”�”}”(hj×eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MphjÔeh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj�dh²hh³jšdh´Mpubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jïej jïej ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXÖ**Parameters** ``struct i3c_dev_desc *dev`` I3C device descriptor ``const struct i3c_ibi_setup *req`` IBI setup request **Description** Invoke the current controller's IBI request callback without allocating the generic IBI object or workqueue. The caller must ensure that **dev->ibi** has already been initialized. **Context** The caller must serialize access to **dev->ibi** and the generic IBI lifecycle. **Return** 0 on success, or a negative error code.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjùeh]”hŒ Parameters”…”�”}”(hjûeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj÷eubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mthjóeubj0)�”}”(hhh]”(j5)�”}”(hŒ3``struct i3c_dev_desc *dev`` I3C device descriptor ”h]”(j;)�”}”(hŒ``struct i3c_dev_desc *dev``”h]”jA)�”}”(hjfh]”hŒstruct i3c_dev_desc *dev”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MqhjfubjW)�”}”(hhh]”jì)�”}”(hŒI3C device descriptor”h]”hŒI3C device descriptor”…”�”}”(hj1fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j-fh´Mqhj.fubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjfubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j-fh´Mqhjfubj5)�”}”(hŒ6``const struct i3c_ibi_setup *req`` IBI setup request ”h]”(j;)�”}”(hŒ#``const struct i3c_ibi_setup *req``”h]”jA)�”}”(hjQfh]”hŒconst struct i3c_ibi_setup *req”…”�”}”(hjSfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjOfubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MrhjKfubjW)�”}”(hhh]”jì)�”}”(hŒIBI setup request”h]”hŒIBI setup request”…”�”}”(hjjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jffh´Mrhjgfubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjKfubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jffh´Mrhjfubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjóeubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjŒfh]”hŒ Description”…”�”}”(hjŽfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠfubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mthjóeubjì)�”}”(hŒ³Invoke the current controller's IBI request callback without allocating the generic IBI object or workqueue. The caller must ensure that **dev->ibi** has already been initialized.”h]”(hŒ‹Invoke the current controller’s IBI request callback without allocating the generic IBI object or workqueue. The caller must ensure that ”…”�”}”(hj¢fh²hh³Nh´Nubj)�”}”(hŒ **dev->ibi**”h]”hŒdev->ibi”…”�”}”(hjªfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¢fubhŒ has already been initialized.”…”�”}”(hj¢fh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mshjóeubjì)�”}”(hŒ **Context**”h]”j)�”}”(hjÅfh]”hŒContext”…”�”}”(hjÇfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÃfubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mwhjóeubjì)�”}”(hŒOThe caller must serialize access to **dev->ibi** and the generic IBI lifecycle.”h]”(hŒ$The caller must serialize access to ”…”�”}”(hjÛfh²hh³Nh´Nubj)�”}”(hŒ **dev->ibi**”h]”hŒdev->ibi”…”�”}”(hjãfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛfubhŒ and the generic IBI lifecycle.”…”�”}”(hjÛfh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mxhjóeubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjþfh]”hŒReturn”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjüfubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M{hjóeubjì)�”}”(hŒ'0 on success, or a negative error code.”h]”hŒ'0 on success, or a negative error code.”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M{hjóeubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ'i3c_dev_request_ibi_locked (C function)”Œc.i3c_dev_request_ibi_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒZint i3c_dev_request_ibi_locked (struct i3c_dev_desc *dev, const struct i3c_ibi_setup *req)”h]”hú)�”}”(hŒYint i3c_dev_request_ibi_locked(struct i3c_dev_desc *dev, const struct i3c_ibi_setup *req)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjCgh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj?gh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?gh²hh³jQgh´M�ubj#)�”}”(hŒi3c_dev_request_ibi_locked”h]”j))�”}”(hŒi3c_dev_request_ibi_locked”h]”hŒi3c_dev_request_ibi_locked”…”�”}”(hjdgh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj`gubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj?gh²hh³jQgh´M�ubjB)�”}”(hŒ;(struct i3c_dev_desc *dev, const struct i3c_ibi_setup *req)”h]”(jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj€gh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj|gubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|gubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hjžgh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj›gubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j gŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jfgsbŒc.i3c_dev_request_ibi_locked”†”asbuh1hhj|gubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|gubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjÌgh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj|gubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÙgh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj|gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjxgubjH)�”}”(hŒconst struct i3c_ibi_setup *req”h]”(jN)�”}”(hj3h]”hŒconst”…”�”}”(hjògh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjîgubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîgubjN)�”}”(hjQh]”hŒstruct”…”�”}”(hj hh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjîgubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîgubh)�”}”(hhh]”j))�”}”(hŒ i3c_ibi_setup”h]”hŒ i3c_ibi_setup”…”�”}”(hj+hh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj(hubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j-hŒmodname”NŒ classname”NjŠj�)�”}”j�]”jºgŒc.i3c_dev_request_ibi_locked”†”asbuh1hhjîgubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIhh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîgubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjWhh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjîgubj))�”}”(hŒreq”h]”hŒreq”…”�”}”(hjdhh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjîgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjxgubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj?gh²hh³jQgh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj;gh²hh³jQgh´M�ubah}”(h]”j6gah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jQgh´M�hj8gh²hubjç)�”}”(hhh]”jì)�”}”(hŒRequest an IBI”h]”hŒRequest an IBI”…”�”}”(hjŽhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M�hj‹hh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj8gh²hh³jQgh´M�ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j¦hj j¦hj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX **Parameters** ``struct i3c_dev_desc *dev`` device for which we should enable IBIs ``const struct i3c_ibi_setup *req`` setup requested for this IBI **Description** This function is responsible for pre-allocating all resources needed to process IBIs coming from **dev**. When this function returns, the IBI is not enabled until i3c_device_enable_ibi() is called. **Context** Must be called with mutex_lock(:c:type:`dev->desc `->ibi_lock) held. **Return** 0 in case of success, a negative error core otherwise.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj°hh]”hŒ Parameters”…”�”}”(hj²hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®hubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M‘hjªhubj0)�”}”(hhh]”(j5)�”}”(hŒD``struct i3c_dev_desc *dev`` device for which we should enable IBIs ”h]”(j;)�”}”(hŒ``struct i3c_dev_desc *dev``”h]”jA)�”}”(hjÏhh]”hŒstruct i3c_dev_desc *dev”…”�”}”(hjÑhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÍhubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MŽhjÉhubjW)�”}”(hhh]”jì)�”}”(hŒ&device for which we should enable IBIs”h]”hŒ&device for which we should enable IBIs”…”�”}”(hjèhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jähh´MŽhjåhubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÉhubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jähh´MŽhjÆhubj5)�”}”(hŒA``const struct i3c_ibi_setup *req`` setup requested for this IBI ”h]”(j;)�”}”(hŒ#``const struct i3c_ibi_setup *req``”h]”jA)�”}”(hjih]”hŒconst struct i3c_ibi_setup *req”…”�”}”(hj ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M�hjiubjW)�”}”(hhh]”jì)�”}”(hŒsetup requested for this IBI”h]”hŒsetup requested for this IBI”…”�”}”(hj!ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jih´M�hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjiubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jih´M�hjÆhubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjªhubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjCih]”hŒ Description”…”�”}”(hjEih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjAiubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M‘hjªhubjì)�”}”(hŒÅThis function is responsible for pre-allocating all resources needed to process IBIs coming from **dev**. When this function returns, the IBI is not enabled until i3c_device_enable_ibi() is called.”h]”(hŒaThis function is responsible for pre-allocating all resources needed to process IBIs coming from ”…”�”}”(hjYih²hh³Nh´Nubj)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjaih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjYiubhŒ]. When this function returns, the IBI is not enabled until i3c_device_enable_ibi() is called.”…”�”}”(hjYih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M�hjªhubjì)�”}”(hŒ **Context**”h]”j)�”}”(hj|ih]”hŒContext”…”�”}”(hj~ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjziubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M”hjªhubjì)�”}”(hŒIMust be called with mutex_lock(:c:type:`dev->desc `->ibi_lock) held.”h]”(hŒMust be called with mutex_lock(”…”�”}”(hj’ih²hh³Nh´Nubh)�”}”(hŒ:c:type:`dev->desc `”h]”jA)�”}”(hjœih]”hŒ dev->desc”…”�”}”(hjžih²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hjšiubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒdev”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M•hj’iubhŒ->ibi_lock) held.”…”�”}”(hj’ih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j¹ih´M•hjªhubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjÆih]”hŒReturn”…”�”}”(hjÈih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄiubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M—hjªhubjì)�”}”(hŒ60 in case of success, a negative error core otherwise.”h]”hŒ60 in case of success, a negative error core otherwise.”…”�”}”(hjÜih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M–hjªhubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ/i3c_dev_free_ibi_controller_locked (C function)”Œ$c.i3c_dev_free_ibi_controller_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒBvoid i3c_dev_free_ibi_controller_locked (struct i3c_dev_desc *dev)”h]”hú)�”}”(hŒAvoid i3c_dev_free_ibi_controller_locked(struct i3c_dev_desc *dev)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj jh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjjh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÉubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjjh²hh³jjh´MÉubj#)�”}”(hŒ"i3c_dev_free_ibi_controller_locked”h]”j))�”}”(hŒ"i3c_dev_free_ibi_controller_locked”h]”hŒ"i3c_dev_free_ibi_controller_locked”…”�”}”(hj,jh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj(jubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjjh²hh³jjh´MÉubjB)�”}”(hŒ(struct i3c_dev_desc *dev)”h]”jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjHjh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjDjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjDjubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hjfjh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjcjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jhjŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j.jsbŒ$c.i3c_dev_free_ibi_controller_locked”†”asbuh1hhjDjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjDjubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj”jh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjDjubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj¡jh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjDjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj@jubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjjh²hh³jjh´MÉubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjjh²hh³jjh´MÉubah}”(h]”jþiah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jjh´MÉhjjh²hubjç)�”}”(hhh]”jì)�”}”(hŒFree controller IBI resources”h]”hŒFree controller IBI resources”…”�”}”(hjËjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÉhjÈjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjjh²hh³jjh´MÉubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jãjj jãjj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX,**Parameters** ``struct i3c_dev_desc *dev`` I3C device descriptor **Description** Invoke the current controller's IBI free callback without destroying the generic IBI workqueue or freeing **dev->ibi**. **Context** The caller must serialize access to **dev->ibi** and the generic IBI lifecycle.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjíjh]”hŒ Parameters”…”�”}”(hjïjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjëjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÍhjçjubj0)�”}”(hhh]”j5)�”}”(hŒ3``struct i3c_dev_desc *dev`` I3C device descriptor ”h]”(j;)�”}”(hŒ``struct i3c_dev_desc *dev``”h]”jA)�”}”(hj kh]”hŒstruct i3c_dev_desc *dev”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj kubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÊhjkubjW)�”}”(hhh]”jì)�”}”(hŒI3C device descriptor”h]”hŒI3C device descriptor”…”�”}”(hj%kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j!kh´MÊhj"kubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j!kh´MÊhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjçjubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjGkh]”hŒ Description”…”�”}”(hjIkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjEkubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÌhjçjubjì)�”}”(hŒwInvoke the current controller's IBI free callback without destroying the generic IBI workqueue or freeing **dev->ibi**.”h]”(hŒlInvoke the current controller’s IBI free callback without destroying the generic IBI workqueue or freeing ”…”�”}”(hj]kh²hh³Nh´Nubj)�”}”(hŒ **dev->ibi**”h]”hŒdev->ibi”…”�”}”(hjekh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj]kubhŒ.”…”�”}”(hj]kh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MËhjçjubjì)�”}”(hŒ **Context**”h]”j)�”}”(hj€kh]”hŒContext”…”�”}”(hj‚kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj~kubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÎhjçjubjì)�”}”(hŒOThe caller must serialize access to **dev->ibi** and the generic IBI lifecycle.”h]”(hŒ$The caller must serialize access to ”…”�”}”(hj–kh²hh³Nh´Nubj)�”}”(hŒ **dev->ibi**”h]”hŒdev->ibi”…”�”}”(hjžkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–kubhŒ and the generic IBI lifecycle.”…”�”}”(hj–kh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÏhjçjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ$i3c_dev_free_ibi_locked (C function)”Œc.i3c_dev_free_ibi_locked”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ7void i3c_dev_free_ibi_locked (struct i3c_dev_desc *dev)”h]”hú)�”}”(hŒ6void i3c_dev_free_ibi_locked(struct i3c_dev_desc *dev)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj×kh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjÓkh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÞubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjækh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓkh²hh³jåkh´MÞubj#)�”}”(hŒi3c_dev_free_ibi_locked”h]”j))�”}”(hŒi3c_dev_free_ibi_locked”h]”hŒi3c_dev_free_ibi_locked”…”�”}”(hjøkh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjôkubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjÓkh²hh³jåkh´MÞubjB)�”}”(hŒ(struct i3c_dev_desc *dev)”h]”jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjlubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjlubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hj2lh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj/lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j4lŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†júksbŒc.i3c_dev_free_ibi_locked”†”asbuh1hhjlubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRlh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjlubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj`lh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjlubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjmlh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj lubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjÓkh²hh³jåkh´MÞubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjÏkh²hh³jåkh´MÞubah}”(h]”jÊkah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jåkh´MÞhjÌkh²hubjç)�”}”(hhh]”jì)�”}”(hŒ*Free all resources needed for IBI handling”h]”hŒ*Free all resources needed for IBI handling”…”�”}”(hj—lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÞhj”lh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjÌkh²hh³jåkh´MÞubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j¯lj j¯lj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX}**Parameters** ``struct i3c_dev_desc *dev`` device on which you want to release IBI resources **Description** This function is responsible for de-allocating resources previously allocated by i3c_device_request_ibi(). It should be called after disabling IBIs with i3c_device_disable_ibi(). **Context** Must be called with mutex_lock(:c:type:`dev->desc `->ibi_lock) held.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¹lh]”hŒ Parameters”…”�”}”(hj»lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·lubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mâhj³lubj0)�”}”(hhh]”j5)�”}”(hŒO``struct i3c_dev_desc *dev`` device on which you want to release IBI resources ”h]”(j;)�”}”(hŒ``struct i3c_dev_desc *dev``”h]”jA)�”}”(hjØlh]”hŒstruct i3c_dev_desc *dev”…”�”}”(hjÚlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÖlubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MßhjÒlubjW)�”}”(hhh]”jì)�”}”(hŒ1device on which you want to release IBI resources”h]”hŒ1device on which you want to release IBI resources”…”�”}”(hjñlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jílh´Mßhjîlubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÒlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jílh´MßhjÏlubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj³lubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjmh]”hŒ Description”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Máhj³lubjì)�”}”(hŒ²This function is responsible for de-allocating resources previously allocated by i3c_device_request_ibi(). It should be called after disabling IBIs with i3c_device_disable_ibi().”h]”hŒ²This function is responsible for de-allocating resources previously allocated by i3c_device_request_ibi(). It should be called after disabling IBIs with i3c_device_disable_ibi().”…”�”}”(hj)mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Màhj³lubjì)�”}”(hŒ **Context**”h]”j)�”}”(hj:mh]”hŒContext”…”�”}”(hjdesc `->ibi_lock) held.”h]”(hŒMust be called with mutex_lock(”…”�”}”(hjPmh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dev->desc `”h]”jA)�”}”(hjZmh]”hŒ dev->desc”…”�”}”(hj\mh²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hjXmubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒdev”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MåhjPmubhŒ->ibi_lock) held.”…”�”}”(hjPmh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jwmh´Måhj³lubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒi3c_i2c_dev_desc (C struct)”Œc.i3c_i2c_dev_desc”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒi3c_i2c_dev_desc”h]”hú)�”}”(hŒstruct i3c_i2c_dev_desc”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj¢mh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjžmh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°mh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjžmh²hh³j¯mh´Kubj#)�”}”(hŒi3c_i2c_dev_desc”h]”j))�”}”(hjœmh]”hŒi3c_i2c_dev_desc”…”�”}”(hjÂmh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj¾mubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjžmh²hh³j¯mh´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjšmh²hh³j¯mh´Kubah}”(h]”j•mah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j¯mh´Khj—mh²hubjç)�”}”(hhh]”jì)�”}”(hŒ,Common part of the I3C/I2C device descriptor”h]”hŒ,Common part of the I3C/I2C device descriptor”…”�”}”(hjämh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K'hjámh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj—mh²hh³j¯mh´Kubeh}”(h]”h ]”(j„Œstruct”eh"]”h$]”h&]”j j„j jümj jümj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXÃ**Definition**:: struct i3c_i2c_dev_desc { struct list_head node; struct i3c_master_controller *master; void *master_priv; }; **Members** ``node`` node element used to insert the slot into the I2C or I3C device list ``master`` I3C master that instantiated this device. Will be used to do I2C/I3C transfers ``master_priv`` master private data assigned to the device. Can be used to add master specific information”h]”(jì)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjnubhŒ:”…”�”}”(hjnh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K+hjnubhŒ literal_block”“”)�”}”(hŒxstruct i3c_i2c_dev_desc { struct list_head node; struct i3c_master_controller *master; void *master_priv; };”h]”hŒxstruct i3c_i2c_dev_desc { struct list_head node; struct i3c_master_controller *master; void *master_priv; };”…”�”}”hj#nsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j!nh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K-hjnubjì)�”}”(hŒ **Members**”h]”j)�”}”(hj4nh]”hŒMembers”…”�”}”(hj6nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K3hjnubj0)�”}”(hhh]”(j5)�”}”(hŒN``node`` node element used to insert the slot into the I2C or I3C device list ”h]”(j;)�”}”(hŒ``node``”h]”jA)�”}”(hjSnh]”hŒnode”…”�”}”(hjUnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjQnubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K*hjMnubjW)�”}”(hhh]”jì)�”}”(hŒDnode element used to insert the slot into the I2C or I3C device list”h]”hŒDnode element used to insert the slot into the I2C or I3C device list”…”�”}”(hjlnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K)hjinubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjMnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jhnh´K*hjJnubj5)�”}”(hŒZ``master`` I3C master that instantiated this device. Will be used to do I2C/I3C transfers ”h]”(j;)�”}”(hŒ ``master``”h]”jA)�”}”(hj�nh]”hŒmaster”…”�”}”(hj�nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj‹nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K,hj‡nubjW)�”}”(hhh]”jì)�”}”(hŒNI3C master that instantiated this device. Will be used to do I2C/I3C transfers”h]”hŒNI3C master that instantiated this device. Will be used to do I2C/I3C transfers”…”�”}”(hj¦nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K+hj£nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj‡nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j¢nh´K,hjJnubj5)�”}”(hŒj``master_priv`` master private data assigned to the device. Can be used to add master specific information”h]”(j;)�”}”(hŒ``master_priv``”h]”jA)�”}”(hjÇnh]”hŒ master_priv”…”�”}”(hjÉnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÅnubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K-hjÁnubjW)�”}”(hhh]”jì)�”}”(hŒZmaster private data assigned to the device. Can be used to add master specific information”h]”hŒZmaster private data assigned to the device. Can be used to add master specific information”…”�”}”(hjành²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÜnh´K-hjÝnubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÁnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÜnh´K-hjJnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjnubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´Nubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj oh]”hŒ Description”…”�”}”(hj oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K1hhÊh²hubjì)�”}”(hŒhj†oh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjops `->attach_i2c_dev().”h]”(hŒŽEach I2C device connected on the bus will have an i2c_dev_desc. This object is created by the core and later attached to the controller using ”…”�”}”(hjšrh²hh³Nh´Nubh)�”}”(hŒJ:c:type:`struct_i3c_master_controller->ops `”h]”jA)�”}”(hj¤rh]”hŒ!struct_i3c_master_controller->ops”…”�”}”(hj¦rh²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hj¢rubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒstruct_i3c_master_controller”uh1hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KThjšrubhŒ->attach_i2c_dev().”…”�”}”(hjšrh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÁrh´KThhÊh²hubjì)�”}”(hŒç:c:type:`struct_i2c_dev_desc <_i2c_dev_desc>` is the internal representation of an I2C device connected on an I3C bus. This object is also passed to all :c:type:`struct_i3c_master_controller_ops <_i3c_master_controller_ops>` hooks.”h]”(h)�”}”(hŒ-:c:type:`struct_i2c_dev_desc <_i2c_dev_desc>`”h]”jA)�”}”(hjÒrh]”hŒstruct_i2c_dev_desc”…”�”}”(hjÔrh²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hjÐrubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒ _i2c_dev_desc”uh1hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KXhjÌrubhŒl is the internal representation of an I2C device connected on an I3C bus. This object is also passed to all ”…”�”}”(hjÌrh²hh³Nh´Nubh)�”}”(hŒG:c:type:`struct_i3c_master_controller_ops <_i3c_master_controller_ops>`”h]”jA)�”}”(hjörh]”hŒ struct_i3c_master_controller_ops”…”�”}”(hjørh²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hjôrubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒ_i3c_master_controller_ops”uh1hh³jïrh´KXhjÌrubhŒ hooks.”…”�”}”(hjÌrh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jïrh´KXhhÊh²hubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒi3c_ibi_slot (C struct)”Œc.i3c_ibi_slot”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ i3c_ibi_slot”h]”hú)�”}”(hŒstruct i3c_ibi_slot”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj6sh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj2sh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K_ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2sh²hh³jCsh´K_ubj#)�”}”(hŒ i3c_ibi_slot”h]”j))�”}”(hj0sh]”hŒ i3c_ibi_slot”…”�”}”(hjVsh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjRsubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj2sh²hh³jCsh´K_ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj.sh²hh³jCsh´K_ubah}”(h]”j)sah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jCsh´K_hj+sh²hubjç)�”}”(hhh]”jì)�”}”(hŒ I3C IBI (In-Band Interrupt) slot”h]”hŒ I3C IBI (In-Band Interrupt) slot”…”�”}”(hjxsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kehjush²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj+sh²hh³jCsh´K_ubeh}”(h]”h ]”(j„Œstruct”eh"]”h$]”h&]”j j„j j�sj j�sj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXƒ**Definition**:: struct i3c_ibi_slot { struct work_struct work; struct i3c_dev_desc *dev; unsigned int len; void *data; }; **Members** ``work`` work associated to this slot. The IBI handler will be called from there ``dev`` the I3C device that has generated this IBI ``len`` length of the payload associated to this IBI ``data`` payload buffer”h]”(jì)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjœsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj˜subhŒ:”…”�”}”(hj˜sh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kihj”subj"n)�”}”(hŒystruct i3c_ibi_slot { struct work_struct work; struct i3c_dev_desc *dev; unsigned int len; void *data; };”h]”hŒystruct i3c_ibi_slot { struct work_struct work; struct i3c_dev_desc *dev; unsigned int len; void *data; };”…”�”}”hjµssbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j!nh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kkhj”subjì)�”}”(hŒ **Members**”h]”j)�”}”(hjÆsh]”hŒMembers”…”�”}”(hjÈsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄsubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Krhj”subj0)�”}”(hhh]”(j5)�”}”(hŒQ``work`` work associated to this slot. The IBI handler will be called from there ”h]”(j;)�”}”(hŒ``work``”h]”jA)�”}”(hjåsh]”hŒwork”…”�”}”(hjçsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjãsubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KhhjßsubjW)�”}”(hhh]”jì)�”}”(hŒGwork associated to this slot. The IBI handler will be called from there”h]”hŒGwork associated to this slot. The IBI handler will be called from there”…”�”}”(hjþsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kghjûsubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjßsubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³júsh´KhhjÜsubj5)�”}”(hŒ3``dev`` the I3C device that has generated this IBI ”h]”(j;)�”}”(hŒ``dev``”h]”jA)�”}”(hjth]”hŒdev”…”�”}”(hj!th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KihjtubjW)�”}”(hhh]”jì)�”}”(hŒ*the I3C device that has generated this IBI”h]”hŒ*the I3C device that has generated this IBI”…”�”}”(hj8th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j4th´Kihj5tubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j4th´KihjÜsubj5)�”}”(hŒ5``len`` length of the payload associated to this IBI ”h]”(j;)�”}”(hŒ``len``”h]”jA)�”}”(hjXth]”hŒlen”…”�”}”(hjZth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjVtubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KjhjRtubjW)�”}”(hhh]”jì)�”}”(hŒ,length of the payload associated to this IBI”h]”hŒ,length of the payload associated to this IBI”…”�”}”(hjqth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jmth´Kjhjntubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjRtubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jmth´KjhjÜsubj5)�”}”(hŒ``data`` payload buffer”h]”(j;)�”}”(hŒ``data``”h]”jA)�”}”(hj‘th]”hŒdata”…”�”}”(hj“th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj�tubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kjhj‹tubjW)�”}”(hhh]”jì)�”}”(hŒpayload buffer”h]”hŒpayload buffer”…”�”}”(hjªth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kkhj§tubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj‹tubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j¦th´KjhjÜsubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj”subeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´Nubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjÔth]”hŒ Description”…”�”}”(hjÖth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÒtubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KnhhÊh²hubjì)�”}”(hXAn IBI slot is an object pre-allocated by the controller and used when an IBI comes in. Every time an IBI comes in, the I3C master driver should find a free IBI slot in its IBI slot pool, retrieve the IBI payload and queue the IBI using i3c_master_queue_ibi().”h]”hXAn IBI slot is an object pre-allocated by the controller and used when an IBI comes in. Every time an IBI comes in, the I3C master driver should find a free IBI slot in its IBI slot pool, retrieve the IBI payload and queue the IBI using i3c_master_queue_ibi().”…”�”}”(hjêth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KkhhÊh²hubjì)�”}”(hŒ‘How IBI slots are allocated is left to the I3C master driver, though, for simple kmalloc-based allocation, the generic IBI slot pool can be used.”h]”hŒ‘How IBI slots are allocated is left to the I3C master driver, though, for simple kmalloc-based allocation, the generic IBI slot pool can be used.”…”�”}”(hjùth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KqhhÊh²hubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒi3c_device_ibi_info (C struct)”Œc.i3c_device_ibi_info”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒi3c_device_ibi_info”h]”hú)�”}”(hŒstruct i3c_device_ibi_info”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj!uh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjuh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kwubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjuh²hh³j.uh´Kwubj#)�”}”(hŒi3c_device_ibi_info”h]”j))�”}”(hjuh]”hŒi3c_device_ibi_info”…”�”}”(hjAuh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj=uubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjuh²hh³j.uh´Kwubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjuh²hh³j.uh´Kwubah}”(h]”juah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j.uh´Kwhjuh²hubjç)�”}”(hhh]”jì)�”}”(hŒ-IBI information attached to a specific device”h]”hŒ-IBI information attached to a specific device”…”�”}”(hjcuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K}hj`uh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjuh²hh³j.uh´Kwubeh}”(h]”h ]”(j„Œstruct”eh"]”h$]”h&]”j j„j j{uj j{uj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX‡**Definition**:: struct i3c_device_ibi_info { struct completion all_ibis_handled; atomic_t pending_ibis; unsigned int max_payload_len; unsigned int num_slots; unsigned int enabled; struct workqueue_struct *wq; void (*handler)(struct i3c_device *dev, const struct i3c_ibi_payload *payload); }; **Members** ``all_ibis_handled`` used to be informed when no more IBIs are waiting to be processed. Used by i3c_device_disable_ibi() to wait for all IBIs to be dequeued ``pending_ibis`` count the number of pending IBIs. Each pending IBI has its work element queued to the controller workqueue ``max_payload_len`` maximum payload length for an IBI coming from this device. this value is specified when calling i3c_device_request_ibi() and should not change at run time. All messages IBIs exceeding this limit should be rejected by the master ``num_slots`` number of IBI slots reserved for this device ``enabled`` reflect the IBI status ``wq`` workqueue used to execute IBI handlers. ``handler`` IBI handler specified at i3c_device_request_ibi() call time. This handler will be called from the controller workqueue, and as such is allowed to sleep (though it is recommended to process the IBI as fast as possible to not stall processing of other IBIs queued on the same workqueue). New I3C messages can be sent from the IBI handler”h]”(jì)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj‡uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƒuubhŒ:”…”�”}”(hjƒuh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K�hjuubj"n)�”}”(hX/struct i3c_device_ibi_info { struct completion all_ibis_handled; atomic_t pending_ibis; unsigned int max_payload_len; unsigned int num_slots; unsigned int enabled; struct workqueue_struct *wq; void (*handler)(struct i3c_device *dev, const struct i3c_ibi_payload *payload); };”h]”hX/struct i3c_device_ibi_info { struct completion all_ibis_handled; atomic_t pending_ibis; unsigned int max_payload_len; unsigned int num_slots; unsigned int enabled; struct workqueue_struct *wq; void (*handler)(struct i3c_device *dev, const struct i3c_ibi_payload *payload); };”…”�”}”hj usbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j!nh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kƒhjuubjì)�”}”(hŒ **Members**”h]”j)�”}”(hj±uh]”hŒMembers”…”�”}”(hj³uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯uubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K�hjuubj0)�”}”(hhh]”(j5)�”}”(hŒ�``all_ibis_handled`` used to be informed when no more IBIs are waiting to be processed. Used by i3c_device_disable_ibi() to wait for all IBIs to be dequeued ”h]”(j;)�”}”(hŒ``all_ibis_handled``”h]”jA)�”}”(hjÐuh]”hŒall_ibis_handled”…”�”}”(hjÒuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÎuubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K�hjÊuubjW)�”}”(hhh]”jì)�”}”(hŒ‡used to be informed when no more IBIs are waiting to be processed. Used by i3c_device_disable_ibi() to wait for all IBIs to be dequeued”h]”hŒ‡used to be informed when no more IBIs are waiting to be processed. Used by i3c_device_disable_ibi() to wait for all IBIs to be dequeued”…”�”}”(hjéuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Khjæuubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÊuubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jåuh´K�hjÇuubj5)�”}”(hŒ|``pending_ibis`` count the number of pending IBIs. Each pending IBI has its work element queued to the controller workqueue ”h]”(j;)�”}”(hŒ``pending_ibis``”h]”jA)�”}”(hj vh]”hŒ pending_ibis”…”�”}”(hj vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjvubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KƒhjvubjW)�”}”(hhh]”jì)�”}”(hŒjcount the number of pending IBIs. Each pending IBI has its work element queued to the controller workqueue”h]”hŒjcount the number of pending IBIs. Each pending IBI has its work element queued to the controller workqueue”…”�”}”(hj#vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K‚hj vubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jvh´KƒhjÇuubj5)�”}”(hŒø``max_payload_len`` maximum payload length for an IBI coming from this device. this value is specified when calling i3c_device_request_ibi() and should not change at run time. All messages IBIs exceeding this limit should be rejected by the master ”h]”(j;)�”}”(hŒ``max_payload_len``”h]”jA)�”}”(hjDvh]”hŒmax_payload_len”…”�”}”(hjFvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjBvubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kˆhj>vubjW)�”}”(hhh]”jì)�”}”(hŒãmaximum payload length for an IBI coming from this device. this value is specified when calling i3c_device_request_ibi() and should not change at run time. All messages IBIs exceeding this limit should be rejected by the master”h]”hŒãmaximum payload length for an IBI coming from this device. this value is specified when calling i3c_device_request_ibi() and should not change at run time. All messages IBIs exceeding this limit should be rejected by the master”…”�”}”(hj]vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K„hjZvubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj>vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jYvh´KˆhjÇuubj5)�”}”(hŒ;``num_slots`` number of IBI slots reserved for this device ”h]”(j;)�”}”(hŒ ``num_slots``”h]”jA)�”}”(hj~vh]”hŒ num_slots”…”�”}”(hj€vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj|vubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K‰hjxvubjW)�”}”(hhh]”jì)�”}”(hŒ,number of IBI slots reserved for this device”h]”hŒ,number of IBI slots reserved for this device”…”�”}”(hj—vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j“vh´K‰hj”vubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjxvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j“vh´K‰hjÇuubj5)�”}”(hŒ#``enabled`` reflect the IBI status ”h]”(j;)�”}”(hŒ ``enabled``”h]”jA)�”}”(hj·vh]”hŒenabled”…”�”}”(hj¹vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjµvubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KŠhj±vubjW)�”}”(hhh]”jì)�”}”(hŒreflect the IBI status”h]”hŒreflect the IBI status”…”�”•}”(hjÐvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÌvh´KŠhjÍvubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj±vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÌvh´KŠhjÇuubj5)�”}”(hŒ/``wq`` workqueue used to execute IBI handlers. ”h]”(j;)�”}”(hŒ``wq``”h]”jA)�”}”(hjðvh]”hŒwq”…”�”}”(hjòvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjîvubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K‹hjêvubjW)�”}”(hhh]”jì)�”}”(hŒ'workqueue used to execute IBI handlers.”h]”hŒ'workqueue used to execute IBI handlers.”…”�”}”(hj wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jwh´K‹hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjêvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jwh´K‹hjÇuubj5)�”}”(hX[``handler`` IBI handler specified at i3c_device_request_ibi() call time. This handler will be called from the controller workqueue, and as such is allowed to sleep (though it is recommended to process the IBI as fast as possible to not stall processing of other IBIs queued on the same workqueue). New I3C messages can be sent from the IBI handler”h]”(j;)�”}”(hŒ ``handler``”h]”jA)�”}”(hj)wh]”hŒhandler”…”�”}”(hj+wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj'wubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K�hj#wubjW)�”}”(hhh]”jì)�”}”(hXOIBI handler specified at i3c_device_request_ibi() call time. This handler will be called from the controller workqueue, and as such is allowed to sleep (though it is recommended to process the IBI as fast as possible to not stall processing of other IBIs queued on the same workqueue). New I3C messages can be sent from the IBI handler”h]”hXOIBI handler specified at i3c_device_request_ibi() call time. This handler will be called from the controller workqueue, and as such is allowed to sleep (though it is recommended to process the IBI as fast as possible to not stall processing of other IBIs queued on the same workqueue). New I3C messages can be sent from the IBI handler”…”�”}”(hjBwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KŒhj?wubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj#wubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j>wh´K�hjÇuubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjuubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´Nubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjlwh]”hŒ Description”…”�”}”(hjnwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K”hhÊh²hubjì)�”}”(hŒäThe :c:type:`struct_i3c_device_ibi_info <_i3c_device_ibi_info>` object is allocated when i3c_device_request_ibi() is called and attached to a specific device. This object is here to manage IBIs coming from a specific I3C device.”h]”(hŒThe ”…”�”}”(hj‚wh²hh³Nh´Nubh)�”}”(hŒ;:c:type:`struct_i3c_device_ibi_info <_i3c_device_ibi_info>`”h]”jA)�”}”(hjŒwh]”hŒstruct_i3c_device_ibi_info”…”�”}”(hjŽwh²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hjŠwubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒ_i3c_device_ibi_info”uh1hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K‘hj‚wubhŒ¥ object is allocated when i3c_device_request_ibi() is called and attached to a specific device. This object is here to manage IBIs coming from a specific I3C device.”…”�”}”(hj‚wh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j©wh´K‘hhÊh²hubjì)�”}”(hŒÖNote that this structure is the generic view of the IBI management infrastructure. I3C master drivers may have their own internal representation which they can associate to the device using controller-private data.”h]”hŒÖNote that this structure is the generic view of the IBI management infrastructure. I3C master drivers may have their own internal representation which they can associate to the device using controller-private data.”…”�”}”(hj´wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K•hhÊh²hubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒi3c_dev_boardinfo (C struct)”Œc.i3c_dev_boardinfo”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒi3c_dev_boardinfo”h]”hú)�”}”(hŒstruct i3c_dev_boardinfo”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjÜwh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjØwh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjØwh²hh³jéwh´K�ubj#)�”}”(hŒi3c_dev_boardinfo”h]”j))�”}”(hjÖwh]”hŒi3c_dev_boardinfo”…”�”}”(hjüwh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjøwubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjØwh²hh³jéwh´K�ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjÔwh²hh³jéwh´K�ubah}”(h]”jÏwah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jéwh´K�hjÑwh²hubjç)�”}”(hhh]”jì)�”}”(hŒI3C device board information”h]”hŒI3C device board information”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K§hjxh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjÑwh²hh³jéwh´K�ubeh}”(h]”h ]”(j„Œstruct”eh"]”h$]”h&]”j j„j j6xj j6xj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX**Definition**:: struct i3c_dev_boardinfo { struct list_head node; u8 init_dyn_addr; u8 static_addr; u8 static_addr_method; u64 pid; struct fwnode_handle *fwnode; }; **Members** ``node`` used to insert the boardinfo object in the I3C boardinfo list ``init_dyn_addr`` initial dynamic address requested by the FW. We provide no guarantee that the device will end up using this address, but try our best to assign this specific address to the device ``static_addr`` static address the I3C device listen on before it's been assigned a dynamic address by the master. Will be used during bus initialization to assign it a specific dynamic address before starting DAA (Dynamic Address Assignment) ``static_addr_method`` Bitmap describing which methods of Dynamic Address Assignment from a Static Address are supported by this I3C Target. A value of 1 in a bit position indicates that the I3C target supports that method, and a value of 0 indicates that the I3C target does not support that method. Bit 0: SETDASA Bit 1: SETAASA All other bits are reserved. ``pid`` I3C Provisioned ID exposed by the device. This is a unique identifier that may be used to attach boardinfo to i3c_dev_desc when the device does not have a static address ``fwnode`` Firmware node (DT or ACPI) in case the device has been described in firmware”h]”(jì)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjBxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>xubhŒ:”…”�”}”(hj>xh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K«hj:xubj"n)�”}”(hŒ¬struct i3c_dev_boardinfo { struct list_head node; u8 init_dyn_addr; u8 static_addr; u8 static_addr_method; u64 pid; struct fwnode_handle *fwnode; };”h]”hŒ¬struct i3c_dev_boardinfo { struct list_head node; u8 init_dyn_addr; u8 static_addr; u8 static_addr_method; u64 pid; struct fwnode_handle *fwnode; };”…”�”}”hj[xsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j!nh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K­hj:xubjì)�”}”(hŒ **Members**”h]”j)�”}”(hjlxh]”hŒMembers”…”�”}”(hjnxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K¶hj:xubj0)�”}”(hhh]”(j5)�”}”(hŒG``node`` used to insert the boardinfo object in the I3C boardinfo list ”h]”(j;)�”}”(hŒ``node``”h]”jA)�”}”(hj‹xh]”hŒnode”…”�”}”(hj�xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj‰xubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K©hj…xubjW)�”}”(hhh]”jì)�”}”(hŒ=used to insert the boardinfo object in the I3C boardinfo list”h]”hŒ=used to insert the boardinfo object in the I3C boardinfo list”…”�”}”(hj¤xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j xh´K©hj¡xubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj…xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j xh´K©hj‚xubj5)�”}”(hŒÆ``init_dyn_addr`` initial dynamic address requested by the FW. We provide no guarantee that the device will end up using this address, but try our best to assign this specific address to the device ”h]”(j;)�”}”(hŒ``init_dyn_addr``”h]”jA)�”}”(hjÄxh]”hŒ init_dyn_addr”…”�”}”(hjÆxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÂxubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K­hj¾xubjW)�”}”(hhh]”jì)�”}”(hŒ³initial dynamic address requested by the FW. We provide no guarantee that the device will end up using this address, but try our best to assign this specific address to the device”h]”hŒ³initial dynamic address requested by the FW. We provide no guarantee that the device will end up using this address, but try our best to assign this specific address to the device”…”�”}”(hjÝxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KªhjÚxubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¾xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÙxh´K­hj‚xubj5)�”}”(hŒó``static_addr`` static address the I3C device listen on before it's been assigned a dynamic address by the master. Will be used during bus initialization to assign it a specific dynamic address before starting DAA (Dynamic Address Assignment) ”h]”(j;)�”}”(hŒ``static_addr``”h]”jA)�”}”(hjþxh]”hŒ static_addr”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjüxubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K±hjøxubjW)�”}”(hhh]”jì)�”}”(hŒâstatic address the I3C device listen on before it's been assigned a dynamic address by the master. Will be used during bus initialization to assign it a specific dynamic address before starting DAA (Dynamic Address Assignment)”h]”hŒästatic address the I3C device listen on before it’s been assigned a dynamic address by the master. Will be used during bus initialization to assign it a specific dynamic address before starting DAA (Dynamic Address Assignment)”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K®hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjøxubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jyh´K±hj‚xubj5)�”}”(hXh``static_addr_method`` Bitmap describing which methods of Dynamic Address Assignment from a Static Address are supported by this I3C Target. A value of 1 in a bit position indicates that the I3C target supports that method, and a value of 0 indicates that the I3C target does not support that method. Bit 0: SETDASA Bit 1: SETAASA All other bits are reserved. ”h]”(j;)�”}”(hŒ``static_addr_method``”h]”jA)�”}”(hj8yh]”hŒstatic_addr_method”…”�”}”(hj:yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj6yubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K¹hj2yubjW)�”}”(hhh]”jì)�”}”(hXPBitmap describing which methods of Dynamic Address Assignment from a Static Address are supported by this I3C Target. A value of 1 in a bit position indicates that the I3C target supports that method, and a value of 0 indicates that the I3C target does not support that method. Bit 0: SETDASA Bit 1: SETAASA All other bits are reserved.”h]”hXPBitmap describing which methods of Dynamic Address Assignment from a Static Address are supported by this I3C Target. A value of 1 in a bit position indicates that the I3C target supports that method, and a value of 0 indicates that the I3C target does not support that method. Bit 0: SETDASA Bit 1: SETAASA All other bits are reserved.”…”�”}”(hjQyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K²hjNyubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj2yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jMyh´K¹hj‚xubj5)�”}”(hŒ²``pid`` I3C Provisioned ID exposed by the device. This is a unique identifier that may be used to attach boardinfo to i3c_dev_desc when the device does not have a static address ”h]”(j;)�”}”(hŒ``pid``”h]”jA)�”}”(hjryh]”hŒpid”…”�”}”(hjtyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjpyubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K¼hjlyubjW)�”}”(hhh]”jì)�”}”(hŒ©I3C Provisioned ID exposed by the device. This is a unique identifier that may be used to attach boardinfo to i3c_dev_desc when the device does not have a static address”h]”hŒ©I3C Provisioned ID exposed by the device. This is a unique identifier that may be used to attach boardinfo to i3c_dev_desc when the device does not have a static address”…”�”}”(hj‹yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kºhjˆyubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjlyubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j‡yh´K¼hj‚xubj5)�”}”(hŒW``fwnode`` Firmware node (DT or ACPI) in case the device has been described in firmware”h]”(j;)�”}”(hŒ ``fwnode``”h]”jA)�”}”(hj¬yh]”hŒfwnode”…”�”}”(hj®yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjªyubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K½hj¦yubjW)�”}”(hhh]”jì)�”}”(hŒLFirmware node (DT or ACPI) in case the device has been described in firmware”h]”hŒLFirmware node (DT or ACPI) in case the device has been described in firmware”…”�”}”(hjÅyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÁyh´K½hjÂyubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¦yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÁyh´K½hj‚xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj:xubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´Nubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjîyh]”hŒ Description”…”�”}”(hjðyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjìyubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÁhhÊh²hubjì)�”}”(hŒöThis structure is used to attach board-level information to an I3C device. Not all I3C devices connected on the bus will have a boardinfo. It's only needed if you want to attach extra resources to a device or assign it a specific dynamic address.”h]”hŒøThis structure is used to attach board-level information to an I3C device. Not all I3C devices connected on the bus will have a boardinfo. It’s only needed if you want to attach extra resources to a device or assign it a specific dynamic address.”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´K¾hhÊh²hubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒi3c_dev_desc (C struct)”Œc.i3c_dev_desc”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ i3c_dev_desc”h]”hú)�”}”(hŒstruct i3c_dev_desc”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj,zh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj(zh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÆubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(zh²hh³j9zh´KÆubj#)�”}”(hŒ i3c_dev_desc”h]”j))�”}”(hj&zh]”hŒ i3c_dev_desc”…”�”}”(hjLzh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjHzubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj(zh²hh³j9zh´KÆubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj$zh²hh³j9zh´KÆubah}”(h]”jzah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j9zh´KÆhj!zh²hubjç)�”}”(hhh]”jì)�”}”(hŒI3C device descriptor”h]”hŒI3C device descriptor”…”�”}”(hjnzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÎhjkzh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj!zh²hh³j9zh´KÆubeh}”(h]”h ]”(j„Œstruct”eh"]”h$]”h&]”j j„j j†zj j†zj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXå**Definition**:: struct i3c_dev_desc { struct i3c_i2c_dev_desc common; struct i3c_device_info info; struct mutex ibi_lock; struct i3c_device_ibi_info *ibi; struct i3c_device *dev; const struct i3c_dev_boardinfo *boardinfo; }; **Members** ``common`` common part of the I3C device descriptor ``info`` I3C device information. Will be automatically filled when you create your device with i3c_master_add_i3c_dev_locked() ``ibi_lock`` lock used to protect the :c:type:`struct_i3c_device->ibi ` ``ibi`` IBI info attached to a device. Should be NULL until i3c_device_request_ibi() is called ``dev`` pointer to the I3C device object exposed to I3C device drivers. This should never be accessed from I3C master controller drivers. Only core code should manipulate it in when updating the dev <-> desc link or when propagating IBI events to the driver ``boardinfo`` pointer to the boardinfo attached to this I3C device”h]”(jì)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj’zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽzubhŒ:”…”�”}”(hjŽzh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÒhjŠzubj"n)�”}”(hŒèstruct i3c_dev_desc { struct i3c_i2c_dev_desc common; struct i3c_device_info info; struct mutex ibi_lock; struct i3c_device_ibi_info *ibi; struct i3c_device *dev; const struct i3c_dev_boardinfo *boardinfo; };”h]”hŒèstruct i3c_dev_desc { struct i3c_i2c_dev_desc common; struct i3c_device_info info; struct mutex ibi_lock; struct i3c_device_ibi_info *ibi; struct i3c_device *dev; const struct i3c_dev_boardinfo *boardinfo; };”…”�”}”hj«zsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j!nh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÔhjŠzubjì)�”}”(hŒ **Members**”h]”j)�”}”(hj¼zh]”hŒMembers”…”�”}”(hj¾zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjºzubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÝhjŠzubj0)�”}”(hhh]”(j5)�”}”(hŒ4``common`` common part of the I3C device descriptor ”h]”(j;)�”}”(hŒ ``common``”h]”jA)�”}”(hjÛzh]”hŒcommon”…”�”}”(hjÝzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÙzubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÐhjÕzubjW)�”}”(hhh]”jì)�”}”(hŒ(common part of the I3C device descriptor”h]”hŒ(common part of the I3C device descriptor”…”�”}”(hjôzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jðzh´KÐhjñzubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÕzubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jðzh´KÐhjÒzubj5)�”}”(hŒ``info`` I3C device information. Will be automatically filled when you create your device with i3c_master_add_i3c_dev_locked() ”h]”(j;)�”}”(hŒ``info``”h]”jA)�”}”(hj{h]”hŒinfo”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÒhj{ubjW)�”}”(hhh]”jì)�”}”(hŒuI3C device information. Will be automatically filled when you create your device with i3c_master_add_i3c_dev_locked()”h]”hŒuI3C device information. Will be automatically filled when you create your device with i3c_master_add_i3c_dev_locked()”…”�”}”(hj-{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÑhj*{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j){h´KÒhjÒzubj5)�”}”(hŒ[``ibi_lock`` lock used to protect the :c:type:`struct_i3c_device->ibi ` ”h]”(j;)�”}”(hŒ ``ibi_lock``”h]”jA)�”}”(hjN{h]”hŒibi_lock”…”�”}”(hjP{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjL{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÓhjH{ubjW)�”}”(hhh]”jì)�”}”(hŒMlock used to protect the :c:type:`struct_i3c_device->ibi `”h]”(hŒlock used to protect the ”…”�”}”(hjg{h²hh³Nh´Nubh)�”}”(hŒ4:c:type:`struct_i3c_device->ibi `”h]”jA)�”}”(hjq{h]”hŒstruct_i3c_device->ibi”…”�”}”(hjs{h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hjo{ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒstruct_i3c_device”uh1hh³jc{h´KÓhjg{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jc{h´KÓhjd{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjH{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jc{h´KÓhjÒzubj5)�”}”(hŒ_``ibi`` IBI info attached to a device. Should be NULL until i3c_device_request_ibi() is called ”h]”(j;)�”}”(hŒ``ibi``”h]”jA)�”}”(hj¦{h]”hŒibi”…”�”}”(hj¨{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj¤{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÕhj {ubjW)�”}”(hhh]”jì)�”}”(hŒVIBI info attached to a device. Should be NULL until i3c_device_request_ibi() is called”h]”hŒVIBI info attached to a device. Should be NULL until i3c_device_request_ibi() is called”…”�”}”(hj¿{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÔhj¼{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj {ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j»{h´KÕhjÒzubj5)�”}”(hX``dev`` pointer to the I3C device object exposed to I3C device drivers. This should never be accessed from I3C master controller drivers. Only core code should manipulate it in when updating the dev <-> desc link or when propagating IBI events to the driver ”h]”(j;)�”}”(hŒ``dev``”h]”jA)�”}”(hjà{h]”hŒdev”…”�”}”(hjâ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÞ{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÙhjÚ{ubjW)�”}”(hhh]”jì)�”}”(hŒùpointer to the I3C device object exposed to I3C device drivers. This should never be accessed from I3C master controller drivers. Only core code should manipulate it in when updating the dev <-> desc link or when propagating IBI events to the driver”h]”hŒùpointer to the I3C device object exposed to I3C device drivers. This should never be accessed from I3C master controller drivers. Only core code should manipulate it in when updating the dev <-> desc link or when propagating IBI events to the driver”…”�”}”(hjù{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÖhjö{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÚ{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jõ{h´KÙhjÒzubj5)�”}”(hŒB``boardinfo`` pointer to the boardinfo attached to this I3C device”h]”(j;)�”}”(hŒ ``boardinfo``”h]”jA)�”}”(hj|h]”hŒ boardinfo”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÙhj|ubjW)�”}”(hhh]”jì)�”}”(hŒ4pointer to the boardinfo attached to this I3C device”h]”hŒ4pointer to the boardinfo attached to this I3C device”…”�”}”(hj3|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÚhj0|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j/|h´KÙhjÒzubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjŠzubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´Nubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj]|h]”hŒ Description”…”�”}”(hj_|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÝhhÊh²hubjì)�”}”(hXXInternal representation of an I3C device. This object is only used by the core and passed to I3C master controller drivers when they're requested to do some operations on the device. The core maintains the link between the internal I3C dev descriptor and the object exposed to the I3C device drivers (:c:type:`struct_i3c_device <_i3c_device>`).”h]”(hX/Internal representation of an I3C device. This object is only used by the core and passed to I3C master controller drivers when they’re requested to do some operations on the device. The core maintains the link between the internal I3C dev descriptor and the object exposed to the I3C device drivers (”…”�”}”(hjs|h²hh³Nh´Nubh)�”}”(hŒ):c:type:`struct_i3c_device <_i3c_device>`”h]”jA)�”}”(hj}|h]”hŒstruct_i3c_device”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hj{|ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒ _i3c_device”uh1hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÚhjs|ubhŒ).”…”�”}”(hjs|h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jš|h´KÚhhÊh²hubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒi3c_device (C struct)”Œ c.i3c_device”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ i3c_device”h]”hú)�”}”(hŒstruct i3c_device”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj¾|h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjº|h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kãubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjº|h²hh³jË|h´Kãubj#)�”}”(hŒ i3c_device”h]”j))�”}”(hj¸|h]”hŒ i3c_device”…”�”}”(hjÞ|h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÚ|ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjº|h²hh³jË|h´Kãubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj¶|h²hh³jË|h´Kãubah}”(h]”j±|ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jË|h´Kãhj³|h²hubjç)�”}”(hhh]”jì)�”}”(hŒI3C device object”h]”hŒI3C device object”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Këhjý|h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj³|h²hh³jË|h´Kãubeh}”(h]”h ]”(j„Œstruct”eh"]”h$]”h&]”j j„j j}j j}j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXB**Definition**:: struct i3c_device { struct device dev; struct i3c_dev_desc *desc; struct i3c_bus *bus; struct list_head node; }; **Members** ``dev`` device object to register the I3C dev to the device model ``desc`` pointer to an i3c device descriptor object. This link is updated every time the I3C device is rediscovered with a different dynamic address assigned ``bus`` I3C bus this device is attached to ``node`` unregistered device list node, only for use by i3c_master_register_new_i3c_devs(), it is not protected by a lock”h]”(jì)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj$}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj }ubhŒ:”…”�”}”(hj }h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kïhj}ubj"n)�”}”(hŒ€struct i3c_device { struct device dev; struct i3c_dev_desc *desc; struct i3c_bus *bus; struct list_head node; };”h]”hŒ€struct i3c_device { struct device dev; struct i3c_dev_desc *desc; struct i3c_bus *bus; struct list_head node; };”…”�”}”hj=}sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j!nh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kñhj}ubjì)�”}”(hŒ **Members**”h]”j)�”}”(hjN}h]”hŒMembers”…”�”}”(hjP}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjL}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Køhj}ubj0)�”}”(hhh]”(j5)�”}”(hŒB``dev`` device object to register the I3C dev to the device model ”h]”(j;)�”}”(hŒ``dev``”h]”jA)�”}”(hjm}h]”hŒdev”…”�”}”(hjo}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjk}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kíhjg}ubjW)�”}”(hhh]”jì)�”}”(hŒ9device object to register the I3C dev to the device model”h]”hŒ9device object to register the I3C dev to the device model”…”�”}”(hj†}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j‚}h´Kíhjƒ}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjg}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j‚}h´Kíhjd}ubj5)�”}”(hŒž``desc`` pointer to an i3c device descriptor object. This link is updated every time the I3C device is rediscovered with a different dynamic address assigned ”h]”(j;)�”}”(hŒ``desc``”h]”jA)�”}”(hj¦}h]”hŒdesc”…”�”}”(hj¨}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj¤}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kðhj }ubjW)�”}”(hhh]”jì)�”}”(hŒ”pointer to an i3c device descriptor object. This link is updated every time the I3C device is rediscovered with a different dynamic address assigned”h]”hŒ”pointer to an i3c device descriptor object. This link is updated every time the I3C device is rediscovered with a different dynamic address assigned”…”�”}”(hj¿}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kîhj¼}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj }ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j»}h´Kðhjd}ubj5)�”}”(hŒ+``bus`` I3C bus this device is attached to ”h]”(j;)�”}”(hŒ``bus``”h]”jA)�”}”(hjà}h]”hŒbus”…”�”}”(hjâ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÞ}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KñhjÚ}ubjW)�”}”(hhh]”jì)�”}”(hŒ"I3C bus this device is attached to”h]”hŒ"I3C bus this device is attached to”…”�”}”(hjù}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jõ}h´Kñhjö}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÚ}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jõ}h´Kñhjd}ubj5)�”}”(hŒy``node`` unregistered device list node, only for use by i3c_master_register_new_i3c_devs(), it is not protected by a lock”h]”(j;)�”}”(hŒ``node``”h]”jA)�”}”(hj~h]”hŒnode”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kòhj~ubjW)�”}”(hhh]”jì)�”}”(hŒpunregistered device list node, only for use by i3c_master_register_new_i3c_devs(), it is not protected by a lock”h]”hŒpunregistered device list node, only for use by i3c_master_register_new_i3c_devs(), it is not protected by a lock”…”�”}”(hj2~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j.~h´Kòhj/~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j.~h´Kòhjd}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj}ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´Nubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj[~h]”hŒ Description”…”�”}”(hj]~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjY~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KöhhÊh²hubjì)�”}”(hX0I3C device object exposed to I3C device drivers. The takes care of linking this object to the relevant :c:type:`struct_i3c_dev_desc <_i3c_dev_desc>` one. All I3C devs on the I3C bus are represented, including I3C masters. For each of them, we have an instance of :c:type:`struct i3c_device `.”h]”(hŒgI3C device object exposed to I3C device drivers. The takes care of linking this object to the relevant ”…”�”}”(hjq~h²hh³Nh´Nubh)�”}”(hŒ-:c:type:`struct_i3c_dev_desc <_i3c_dev_desc>`”h]”jA)�”}”(hj{~h]”hŒstruct_i3c_dev_desc”…”�”}”(hj}~h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hjy~ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒ _i3c_dev_desc”uh1hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kóhjq~ubhŒs one. All I3C devs on the I3C bus are represented, including I3C masters. For each of them, we have an instance of ”…”�”}”(hjq~h²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct i3c_device `”h]”jA)�”}”(hjŸ~h]”hŒstruct i3c_device”…”�”}”(hj¡~h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hj�~ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒ i3c_device”uh1hh³j˜~h´Kóhjq~ubhŒ.”…”�”}”(hjq~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j˜~h´KóhhÊh²hubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒi3c_bus_mode (C enum)”Œc.i3c_bus_mode”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ i3c_bus_mode”h]”hú)�”}”(hŒenum i3c_bus_mode”h]”(jN)�”}”(hjeh]”hŒenum”…”�”}”(hjß~h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÛ~h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Kûubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÛ~h²hh³jì~h´Kûubj#)�”}”(hŒ i3c_bus_mode”h]”j))�”}”(hjÙ~h]”hŒ i3c_bus_mode”…”�”}”(hjÿ~h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjû~ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjÛ~h²hh³jì~h´Kûubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj×~h²hh³jì~h´Kûubah}”(h]”jÒ~ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jì~h´KûhjÔ~h²hubjç)�”}”(hhh]”jì)�”}”(hŒ I3C bus mode”h]”hŒ I3C bus mode”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjÔ~h²hh³jì~h´Kûubeh}”(h]”h ]”(j„Œenum”eh"]”h$]”h&]”j j„j j9j j9j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXX**Constants** ``I3C_BUS_MODE_PURE`` only I3C devices are connected to the bus. No limitation expected ``I3C_BUS_MODE_MIXED_FAST`` I2C devices with 50ns spike filter are present on the bus. The only impact in this mode is that the high SCL pulse has to stay below 50ns to trick I2C devices when transmitting I3C frames ``I3C_BUS_MODE_MIXED_LIMITED`` I2C devices without 50ns spike filter are present on the bus. However they allow compliance up to the maximum SDR SCL clock frequency. ``I3C_BUS_MODE_MIXED_SLOW`` I2C devices without 50ns spike filter are present on the bus”h]”(jì)�”}”(hŒ **Constants**”h]”j)�”}”(hjCh]”hŒ Constants”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhj=ubj0)�”}”(hhh]”(j5)�”}”(hŒX``I3C_BUS_MODE_PURE`` only I3C devices are connected to the bus. No limitation expected ”h]”(j;)�”}”(hŒ``I3C_BUS_MODE_PURE``”h]”jA)�”}”(hjbh]”hŒI3C_BUS_MODE_PURE”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhj\ubjW)�”}”(hhh]”jì)�”}”(hŒAonly I3C devices are connected to the bus. No limitation expected”h]”hŒAonly I3C devices are connected to the bus. No limitation expected”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jwh´MhjYubj5)�”}”(hŒØ``I3C_BUS_MODE_MIXED_FAST`` I2C devices with 50ns spike filter are present on the bus. The only impact in this mode is that the high SCL pulse has to stay below 50ns to trick I2C devices when transmitting I3C frames ”h]”(j;)�”}”(hŒ``I3C_BUS_MODE_MIXED_FAST``”h]”jA)�”}”(hjœh]”hŒI3C_BUS_MODE_MIXED_FAST”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjšubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M$hj–ubjW)�”}”(hhh]”jì)�”}”(hŒ»I2C devices with 50ns spike filter are present on the bus. The only impact in this mode is that the high SCL pulse has to stay below 50ns to trick I2C devices when transmitting I3C frames”h]”hŒ»I2C devices with 50ns spike filter are present on the bus. The only impact in this mode is that the high SCL pulse has to stay below 50ns to trick I2C devices when transmitting I3C frames”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M!hj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j±h´M$hjYubj5)�”}”(hŒ¦``I3C_BUS_MODE_MIXED_LIMITED`` I2C devices without 50ns spike filter are present on the bus. However they allow compliance up to the maximum SDR SCL clock frequency. ”h]”(j;)�”}”(hŒ``I3C_BUS_MODE_MIXED_LIMITED``”h]”jA)�”}”(hjÖh]”hŒI3C_BUS_MODE_MIXED_LIMITED”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M*hjÐubjW)�”}”(hhh]”jì)�”}”(hŒ†I2C devices without 50ns spike filter are present on the bus. However they allow compliance up to the maximum SDR SCL clock frequency.”h]”hŒ†I2C devices without 50ns spike filter are present on the bus. However they allow compliance up to the maximum SDR SCL clock frequency.”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M'hjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jëh´M*hjYubj5)�”}”(hŒX``I3C_BUS_MODE_MIXED_SLOW`` I2C devices without 50ns spike filter are present on the bus”h]”(j;)�”}”(hŒ``I3C_BUS_MODE_MIXED_SLOW``”h]”jA)�”}”(hj€h]”hŒI3C_BUS_MODE_MIXED_SLOW”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M-hj €ubjW)�”}”(hhh]”jì)�”}”(hŒhjÞ�ubj0)�”}”(hhh]”(j5)�”}”(hŒ'``I3C_ADDR_SLOT_FREE`` address is free ”h]”(j;)�”}”(hŒ``I3C_ADDR_SLOT_FREE``”h]”jA)�”}”(hj‚h]”hŒI3C_ADDR_SLOT_FREE”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MAhjý�ubjW)�”}”(hhh]”jì)�”}”(hŒaddress is free”h]”hŒaddress is free”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j‚h´MAhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjý�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j‚h´MAhjú�ubj5)�”}”(hŒ+``I3C_ADDR_SLOT_RSVD`` address is reserved ”h]”(j;)�”}”(hŒ``I3C_ADDR_SLOT_RSVD``”h]”jA)�”}”(hj<‚h]”hŒI3C_ADDR_SLOT_RSVD”…”�”}”(hj>‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj:‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MDhj6‚ubjW)�”}”(hhh]”jì)�”}”(hŒaddress is reserved”h]”hŒaddress is reserved”…”�”}”(hjU‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jQ‚h´MDhjR‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj6‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jQ‚h´MDhjú�ubj5)�”}”(hŒ?``I3C_ADDR_SLOT_I2C_DEV`` address is assigned to an I2C device ”h]”(j;)�”}”(hŒ``I3C_ADDR_SLOT_I2C_DEV``”h]”jA)�”}”(hju‚h]”hŒI3C_ADDR_SLOT_I2C_DEV”…”�”}”(hjw‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjs‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MGhjo‚ubjW)�”}”(hhh]”jì)�”}”(hŒ$address is assigned to an I2C device”h]”hŒ$address is assigned to an I2C device”…”�”}”(hjŽ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jŠ‚h´MGhj‹‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjo‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jŠ‚h´MGhjú�ubj5)�”}”(hŒ?``I3C_ADDR_SLOT_I3C_DEV`` address is assigned to an I3C device ”h]”(j;)�”}”(hŒ``I3C_ADDR_SLOT_I3C_DEV``”h]”jA)�”}”(hj®‚h]”hŒI3C_ADDR_SLOT_I3C_DEV”…”�”}”(hj°‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj¬‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MJhj¨‚ubjW)�”}”(hhh]”jì)�”}”(hŒ$address is assigned to an I3C device”h]”hŒ$address is assigned to an I3C device”…”�”}”(hjÇ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÂh´MJhjÄ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¨‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÂh´MJhjú�ubj5)�”}”(hŒ0``I3C_ADDR_SLOT_STATUS_MASK`` address slot mask ”h]”(j;)�”}”(hŒ``I3C_ADDR_SLOT_STATUS_MASK``”h]”jA)�”}”(hjç‚h]”hŒI3C_ADDR_SLOT_STATUS_MASK”…”�”}”(hjé‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjå‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MMhjá‚ubjW)�”}”(hhh]”jì)�”}”(hŒaddress slot mask”h]”hŒaddress slot mask”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jü‚h´MMhjý‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjá‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jü‚h´MMhjú�ubj5)�”}”(hŒN``I3C_ADDR_SLOT_EXT_STATUS_MASK`` address slot mask with extended information ”h]”(j;)�”}”(hŒ!``I3C_ADDR_SLOT_EXT_STATUS_MASK``”h]”jA)�”}”(hj ƒh]”hŒI3C_ADDR_SLOT_EXT_STATUS_MASK”…”�”}”(hj"ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MPhjƒubjW)�”}”(hhh]”jì)�”}”(hŒ+address slot mask with extended information”h]”hŒ+address slot mask with extended information”…”�”}”(hj9ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j5ƒh´MPhj6ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j5ƒh´MPhjú�ubj5)�”}”(hX/``I3C_ADDR_SLOT_EXT_DESIRED`` the bitmask represents addresses that are preferred by some devices, such as the "assigned-address" property in a device tree source. On an I3C bus, addresses are assigned dynamically, and we need to know which addresses are free to use and which ones are already assigned.”h]”(j;)�”}”(hŒ``I3C_ADDR_SLOT_EXT_DESIRED``”h]”jA)�”}”(hjYƒh]”hŒI3C_ADDR_SLOT_EXT_DESIRED”…”�”}”(hj[ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjWƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MUhjSƒubjW)�”}”(hhh]”jì)�”}”(hXthe bitmask represents addresses that are preferred by some devices, such as the "assigned-address" property in a device tree source. On an I3C bus, addresses are assigned dynamically, and we need to know which addresses are free to use and which ones are already assigned.”h]”hXthe bitmask represents addresses that are preferred by some devices, such as the “assigned-addressâ€� property in a device tree source. On an I3C bus, addresses are assigned dynamically, and we need to know which addresses are free to use and which ones are already assigned.”…”�”}”(hjrƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MShjoƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjSƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jnƒh´MUhjú�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÞ�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´Nubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjœƒh]”hŒ Description”…”�”}”(hjžƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjšƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MXhhÊh²hubjì)�”}”(hŒ]Addresses marked as reserved are those reserved by the I3C protocol (broadcast address, ...).”h]”hŒ]Addresses marked as reserved are those reserved by the I3C protocol (broadcast address, ...).”…”�”}”(hj²ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MEhhÊh²hubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒi3c_bus (C struct)”Œ c.i3c_bus”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒi3c_bus”h]”hú)�”}”(hŒstruct i3c_bus”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjÚƒh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÖƒh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MKubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖƒh²hh³jçƒh´MKubj#)�”}”(hŒi3c_bus”h]”j))�”}”(hjÔƒh]”hŒi3c_bus”…”�”}”(hjúƒh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjöƒubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjÖƒh²hh³jçƒh´MKubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjÒƒh²hh³jçƒh´MKubah}”(h]”j̓ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jçƒh´MKhjσh²hubjç)�”}”(hhh]”jì)�”}”(hŒI3C bus object”h]”hŒI3C bus object”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MVhj„h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjσh²hh³jçƒh´MKubeh}”(h]”h ]”(j„Œstruct”eh"]”h$]”h&]”j j„j j4„j j4„j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX£**Definition**:: struct i3c_bus { struct i3c_dev_desc *cur_master; int id; unsigned long addrslots[((I2C_MAX_ADDR + 1) * I3C_ADDR_SLOT_STATUS_BITS) / BITS_PER_LONG]; enum i3c_bus_mode mode; struct { unsigned long i3c; unsigned long i2c; } scl_rate; struct { struct list_head i3c; struct list_head i2c; } devs; struct rw_semaphore lock; }; **Members** ``cur_master`` I3C master currently driving the bus. Since I3C is multi-master this can change over the time. Will be used to let a master know whether it needs to request bus ownership before sending a frame or not ``id`` bus ID. Assigned by the framework when register the bus ``addrslots`` a bitmap with 2-bits per-slot to encode the address status and ease the DAA (Dynamic Address Assignment) procedure (see :c:type:`enum i3c_addr_slot_status `) ``mode`` bus mode (see :c:type:`enum i3c_bus_mode `) ``scl_rate`` SCL signal rate for I3C and I2C mode ``scl_rate.i3c`` maximum rate for the clock signal when doing I3C SDR/priv transfers ``scl_rate.i2c`` maximum rate for the clock signal when doing I2C transfers ``devs`` 2 lists containing all I3C/I2C devices connected to the bus ``devs.i3c`` contains a list of I3C device descriptors representing I3C devices connected on the bus and successfully attached to the I3C master ``devs.i2c`` contains a list of I2C device descriptors representing I2C devices connected on the bus and successfully attached to the I3C master ``lock`` read/write lock on the bus. This is needed to protect against operations that have an impact on the whole bus and the devices connected to it. For example, when asking slaves to drop their dynamic address (RSTDAA CCC), we need to make sure no one is trying to send I3C frames to these devices. Note that this lock does not protect against concurrency between devices: several drivers can send different I3C/I2C frames through the same master in parallel. This is the responsibility of the master to guarantee that frames are actually sent sequentially and not interlaced”h]”(jì)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj@„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj<„ubhŒ:”…”�”}”(hj<„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MZhj8„ubj"n)�”}”(hX…struct i3c_bus { struct i3c_dev_desc *cur_master; int id; unsigned long addrslots[((I2C_MAX_ADDR + 1) * I3C_ADDR_SLOT_STATUS_BITS) / BITS_PER_LONG]; enum i3c_bus_mode mode; struct { unsigned long i3c; unsigned long i2c; } scl_rate; struct { struct list_head i3c; struct list_head i2c; } devs; struct rw_semaphore lock; };”h]”hX…struct i3c_bus { struct i3c_dev_desc *cur_master; int id; unsigned long addrslots[((I2C_MAX_ADDR + 1) * I3C_ADDR_SLOT_STATUS_BITS) / BITS_PER_LONG]; enum i3c_bus_mode mode; struct { unsigned long i3c; unsigned long i2c; } scl_rate; struct { struct list_head i3c; struct list_head i2c; } devs; struct rw_semaphore lock; };”…”�”}”hjY„sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j!nh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M\hj8„ubjì)�”}”(hŒ **Members**”h]”j)�”}”(hjj„h]”hŒMembers”…”�”}”(hjl„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mlhj8„ubj0)�”}”(hhh]”(j5)�”}”(hŒØ``cur_master`` I3C master currently driving the bus. Since I3C is multi-master this can change over the time. Will be used to let a master know whether it needs to request bus ownership before sending a frame or not ”h]”(j;)�”}”(hŒ``cur_master``”h]”jA)�”}”(hj‰„h]”hŒ cur_master”…”�”}”(hj‹„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj‡„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M[hjƒ„ubjW)�”}”(hhh]”jì)�”}”(hŒÈI3C master currently driving the bus. Since I3C is multi-master this can change over the time. Will be used to let a master know whether it needs to request bus ownership before sending a frame or not”h]”hŒÈI3C master currently driving the bus. Since I3C is multi-master this can change over the time. Will be used to let a master know whether it needs to request bus ownership before sending a frame or not”…”�”}”(hj¢„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MXhjŸ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjƒ„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jž„h´M[hj€„ubj5)�”}”(hŒ?``id`` bus ID. Assigned by the framework when register the bus ”h]”(j;)�”}”(hŒ``id``”h]”jA)�”}”(hjÄh]”hŒid”…”�”}”(hjÅ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÁ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M\hj½„ubjW)�”}”(hhh]”jì)�”}”(hŒ7bus ID. Assigned by the framework when register the bus”h]”hŒ7bus ID. Assigned by the framework when register the bus”…”�”}”(hjÜ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jØ„h´M\hjÙ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj½„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jØ„h´M\hj€„ubj5)�”}”(hŒÂ``addrslots`` a bitmap with 2-bits per-slot to encode the address status and ease the DAA (Dynamic Address Assignment) procedure (see :c:type:`enum i3c_addr_slot_status `) ”h]”(j;)�”}”(hŒ ``addrslots``”h]”jA)�”}”(hjü„h]”hŒ addrslots”…”�”}”(hjþ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjú„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M_hjö„ubjW)�”}”(hhh]”jì)�”}”(hŒ³a bitmap with 2-bits per-slot to encode the address status and ease the DAA (Dynamic Address Assignment) procedure (see :c:type:`enum i3c_addr_slot_status `)”h]”(hŒxa bitmap with 2-bits per-slot to encode the address status and ease the DAA (Dynamic Address Assignment) procedure (see ”…”�”}”(hj…h²hh³Nh´Nubh)�”}”(hŒ::c:type:`enum i3c_addr_slot_status `”h]”jA)�”}”(hj…h]”hŒenum i3c_addr_slot_status”…”�”}”(hj!…h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hj…ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒi3c_addr_slot_status”uh1hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M]hj…ubhŒ)”…”�”}”(hj…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j<…h´M]hj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjö„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j…h´M_hj€„ubj5)�”}”(hŒC``mode`` bus mode (see :c:type:`enum i3c_bus_mode `) ”h]”(j;)�”}”(hŒ``mode``”h]”jA)�”}”(hjY…h]”hŒmode”…”�”}”(hj[…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjW…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M`hjS…ubjW)�”}”(hhh]”jì)�”}”(hŒ9bus mode (see :c:type:`enum i3c_bus_mode `)”h]”(hŒbus mode (see ”…”�”}”(hjr…h²hh³Nh´Nubh)�”}”(hŒ*:c:type:`enum i3c_bus_mode `”h]”jA)�”}”(hj|…h]”hŒenum i3c_bus_mode”…”�”}”(hj~…h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hjz…ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”•‰jŠjtjwŒ i3c_bus_mode”uh1hh³jn…h´M`hjr…ubhŒ)”…”�”}”(hjr…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jn…h´M`hjo…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjS…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jn…h´M`hj€„ubj5)�”}”(hŒ2``scl_rate`` SCL signal rate for I3C and I2C mode ”h]”(j;)�”}”(hŒ ``scl_rate``”h]”jA)�”}”(hjµ…h]”hŒscl_rate”…”�”}”(hj·…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj³…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mdhj¯…ubjW)�”}”(hhh]”jì)�”}”(hŒ$SCL signal rate for I3C and I2C mode”h]”hŒ$SCL signal rate for I3C and I2C mode”…”�”}”(hjÎ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÊ…h´MdhjË…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¯…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÊ…h´Mdhj€„ubj5)�”}”(hŒU``scl_rate.i3c`` maximum rate for the clock signal when doing I3C SDR/priv transfers ”h]”(j;)�”}”(hŒ``scl_rate.i3c``”h]”jA)�”}”(hjî…h]”hŒ scl_rate.i3c”…”�”}”(hjð…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjì…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mbhjè…ubjW)�”}”(hhh]”jì)�”}”(hŒCmaximum rate for the clock signal when doing I3C SDR/priv transfers”h]”hŒCmaximum rate for the clock signal when doing I3C SDR/priv transfers”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mahj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjè…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j†h´Mbhj€„ubj5)�”}”(hŒL``scl_rate.i2c`` maximum rate for the clock signal when doing I2C transfers ”h]”(j;)�”}”(hŒ``scl_rate.i2c``”h]”jA)�”}”(hj(†h]”hŒ scl_rate.i2c”…”�”}”(hj*†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj&†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mchj"†ubjW)�”}”(hhh]”jì)�”}”(hŒ:maximum rate for the clock signal when doing I2C transfers”h]”hŒ:maximum rate for the clock signal when doing I2C transfers”…”�”}”(hjA†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j=†h´Mchj>†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj"†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j=†h´Mchj€„ubj5)�”}”(hŒE``devs`` 2 lists containing all I3C/I2C devices connected to the bus ”h]”(j;)�”}”(hŒ``devs``”h]”jA)�”}”(hja†h]”hŒdevs”…”�”}”(hjc†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj_†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mkhj[†ubjW)�”}”(hhh]”jì)�”}”(hŒ;2 lists containing all I3C/I2C devices connected to the bus”h]”hŒ;2 lists containing all I3C/I2C devices connected to the bus”…”�”}”(hjz†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jv†h´Mkhjw†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj[†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jv†h´Mkhj€„ubj5)�”}”(hŒ‘``devs.i3c`` contains a list of I3C device descriptors representing I3C devices connected on the bus and successfully attached to the I3C master ”h]”(j;)�”}”(hŒ ``devs.i3c``”h]”jA)�”}”(hjš†h]”hŒdevs.i3c”…”�”}”(hjœ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj˜†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mghj”†ubjW)�”}”(hhh]”jì)�”}”(hŒƒcontains a list of I3C device descriptors representing I3C devices connected on the bus and successfully attached to the I3C master”h]”hŒƒcontains a list of I3C device descriptors representing I3C devices connected on the bus and successfully attached to the I3C master”…”�”}”(hj³†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mehj°†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj”†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j¯†h´Mghj€„ubj5)�”}”(hŒ‘``devs.i2c`` contains a list of I2C device descriptors representing I2C devices connected on the bus and successfully attached to the I3C master ”h]”(j;)�”}”(hŒ ``devs.i2c``”h]”jA)�”}”(hjÔ†h]”hŒdevs.i2c”…”�”}”(hjÖ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÒ†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MjhjΆubjW)�”}”(hhh]”jì)�”}”(hŒƒcontains a list of I2C device descriptors representing I2C devices connected on the bus and successfully attached to the I3C master”h]”hŒƒcontains a list of I2C device descriptors representing I2C devices connected on the bus and successfully attached to the I3C master”…”�”}”(hjí†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhhjê†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjΆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jé†h´Mjhj€„ubj5)�”}”(hXC``lock`` read/write lock on the bus. This is needed to protect against operations that have an impact on the whole bus and the devices connected to it. For example, when asking slaves to drop their dynamic address (RSTDAA CCC), we need to make sure no one is trying to send I3C frames to these devices. Note that this lock does not protect against concurrency between devices: several drivers can send different I3C/I2C frames through the same master in parallel. This is the responsibility of the master to guarantee that frames are actually sent sequentially and not interlaced”h]”(j;)�”}”(hŒ``lock``”h]”jA)�”}”(hj‡h]”hŒlock”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mthj‡ubjW)�”}”(hhh]”jì)�”}”(hX:read/write lock on the bus. This is needed to protect against operations that have an impact on the whole bus and the devices connected to it. For example, when asking slaves to drop their dynamic address (RSTDAA CCC), we need to make sure no one is trying to send I3C frames to these devices. Note that this lock does not protect against concurrency between devices: several drivers can send different I3C/I2C frames through the same master in parallel. This is the responsibility of the master to guarantee that frames are actually sent sequentially and not interlaced”h]”hX:read/write lock on the bus. This is needed to protect against operations that have an impact on the whole bus and the devices connected to it. For example, when asking slaves to drop their dynamic address (RSTDAA CCC), we need to make sure no one is trying to send I3C frames to these devices. Note that this lock does not protect against concurrency between devices: several drivers can send different I3C/I2C frames through the same master in parallel. This is the responsibility of the master to guarantee that frames are actually sent sequentially and not interlaced”…”�”}”(hj'‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mlhj$‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j#‡h´Mthj€„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj8„ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´Nubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjQ‡h]”hŒ Description”…”�”}”(hjS‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjO‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MxhhÊh²hubjì)�”}”(hŒøThe I3C bus is represented with its own object and not implicitly described by the I3C master to cope with the multi-master functionality, where one bus can be shared amongst several masters, each of them requesting bus ownership when they need to.”h]”hŒøThe I3C bus is represented with its own object and not implicitly described by the I3C master to cope with the multi-master functionality, where one bus can be shared amongst several masters, each of them requesting bus ownership when they need to.”…”�”}”(hjg‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MuhhÊh²hubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ$i3c_master_controller_ops (C struct)”Œc.i3c_master_controller_ops”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒi3c_master_controller_ops”h]”hú)�”}”(hŒ struct i3c_master_controller_ops”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj�‡h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj‹‡h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M}ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�‡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹‡h²hh³jœ‡h´M}ubj#)�”}”(hŒi3c_master_controller_ops”h]”j))�”}”(hj‰‡h]”hŒi3c_master_controller_ops”…”�”}”(hj¯‡h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj«‡ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj‹‡h²hh³jœ‡h´M}ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj‡‡h²hh³jœ‡h´M}ubah}”(h]”j‚‡ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jœ‡h´M}hj„‡h²hubjç)�”}”(hhh]”jì)�”}”(hŒI3C master methods”h]”hŒI3C master methods”…”�”}”(hjчh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MŒhj·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj„‡h²hh³jœ‡h´M}ubeh}”(h]”h ]”(j„Œstruct”eh"]”h$]”h&]”j j„j jé‡j jé‡j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXZ**Definition**:: struct i3c_master_controller_ops { int (*bus_init)(struct i3c_master_controller *master); void (*bus_cleanup)(struct i3c_master_controller *master); int (*attach_i3c_dev)(struct i3c_dev_desc *dev); int (*reattach_i3c_dev)(struct i3c_dev_desc *dev, u8 old_dyn_addr); void (*detach_i3c_dev)(struct i3c_dev_desc *dev); int (*do_daa)(struct i3c_master_controller *master); bool (*supports_ccc_cmd)(struct i3c_master_controller *master, const struct i3c_ccc_cmd *cmd); int (*send_ccc_cmd)(struct i3c_master_controller *master, struct i3c_ccc_cmd *cmd); int (*i3c_xfers)(struct i3c_dev_desc *dev, struct i3c_xfer *xfers, int nxfers, enum i3c_xfer_mode mode); int (*attach_i2c_dev)(struct i2c_dev_desc *dev); void (*detach_i2c_dev)(struct i2c_dev_desc *dev); int (*i2c_xfers)(struct i2c_dev_desc *dev, struct i2c_msg *xfers, int nxfers); int (*request_ibi)(struct i3c_dev_desc *dev, const struct i3c_ibi_setup *req); void (*free_ibi)(struct i3c_dev_desc *dev); int (*enable_ibi)(struct i3c_dev_desc *dev); int (*disable_ibi)(struct i3c_dev_desc *dev); void (*recycle_ibi_slot)(struct i3c_dev_desc *dev, struct i3c_ibi_slot *slot); int (*enable_hotjoin)(struct i3c_master_controller *master); int (*disable_hotjoin)(struct i3c_master_controller *master); int (*set_speed)(struct i3c_master_controller *master, enum i3c_open_drain_speed speed); int (*set_dev_nack_retry)(struct i3c_master_controller *master, unsigned int dev_nack_retry_cnt); }; **Members** ``bus_init`` hook responsible for the I3C bus initialization. You should at least call master_set_info() from there and set the bus mode. You can also put controller specific initialization in there. This method is mandatory. ``bus_cleanup`` cleanup everything done in :c:type:`i3c_master_controller_ops->bus_init\(\) `. This method is optional. ``attach_i3c_dev`` called every time an I3C device is attached to the bus. It can be after a DAA or when a device is statically declared by the FW, in which case it will only have a static address and the dynamic address will be 0. When this function is called, device information have not been retrieved yet. This is a good place to attach master controller specific data to I3C devices. This method is optional. ``reattach_i3c_dev`` called every time an I3C device has its addressed changed. It can be because the device has been powered down and has lost its address, or it can happen when a device had a static address and has been assigned a dynamic address with SETDASA. This method is optional. ``detach_i3c_dev`` called when an I3C device is detached from the bus. Usually happens when the master device is unregistered. This method is optional. ``do_daa`` do a DAA (Dynamic Address Assignment) procedure. This is procedure should send an ENTDAA CCC command and then add all devices discovered sure the DAA using i3c_master_add_i3c_dev_locked(). Add devices added with i3c_master_add_i3c_dev_locked() will then be attached or re-attached to the controller. This method is mandatory. ``supports_ccc_cmd`` should return true if the CCC command is supported, false otherwise. This method is optional, if not provided the core assumes all CCC commands are supported. ``send_ccc_cmd`` send a CCC command This method is mandatory. ``i3c_xfers`` do one or several I3C SDR or HDR transfers. This method is mandatory. ``attach_i2c_dev`` called every time an I2C device is attached to the bus. This is a good place to attach master controller specific data to I2C devices. This method is optional. ``detach_i2c_dev`` called when an I2C device is detached from the bus. Usually happens when the master device is unregistered. This method is optional. ``i2c_xfers`` do one or several I2C transfers. Note that, unlike i3c transfers, the core does not guarantee that buffers attached to the transfers are DMA-safe. If drivers want to have DMA-safe buffers, they should use the i2c_get_dma_safe_msg_buf() and i2c_put_dma_safe_msg_buf() helpers provided by the I2C framework. This method is mandatory. ``request_ibi`` attach an IBI handler to an I3C device. This implies defining an IBI handler and the constraints of the IBI (maximum payload length and number of pre-allocated slots). Some controllers support less IBI-capable devices than regular devices, so this method might return -``EBUSY`` if there's no more space for an extra IBI registration This method is optional. ``free_ibi`` free an IBI previously requested with ->request_ibi(). The IBI should have been disabled with ->disable_irq() prior to that This method is mandatory only if ->request_ibi is not NULL. ``enable_ibi`` enable the IBI. Only valid if ->request_ibi() has been called prior to ->enable_ibi(). The controller should first enable the IBI on the controller end (for example, unmask the hardware IRQ) and then send the ENEC CCC command (with the IBI flag set) to the I3C device. This method is mandatory only if ->request_ibi is not NULL. ``disable_ibi`` disable an IBI. First send the DISEC CCC command with the IBI flag set and then deactivate the hardware IRQ on the controller end. This method is mandatory only if ->request_ibi is not NULL. ``recycle_ibi_slot`` recycle an IBI slot. Called every time an IBI has been processed by its handler. The IBI slot should be put back in the IBI slot pool so that the controller can re-use it for a future IBI This method is mandatory only if ->request_ibi is not NULL. ``enable_hotjoin`` enable hot join event detect. ``disable_hotjoin`` disable hot join event detect. ``set_speed`` adjust I3C open drain mode timing. ``set_dev_nack_retry`` configure device NACK retry count for the master controller.”h]”(jì)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjõ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñ‡ubhŒ:”…”�”}”(hjñ‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M�hjí‡ubj"n)�”}”(hXðstruct i3c_master_controller_ops { int (*bus_init)(struct i3c_master_controller *master); void (*bus_cleanup)(struct i3c_master_controller *master); int (*attach_i3c_dev)(struct i3c_dev_desc *dev); int (*reattach_i3c_dev)(struct i3c_dev_desc *dev, u8 old_dyn_addr); void (*detach_i3c_dev)(struct i3c_dev_desc *dev); int (*do_daa)(struct i3c_master_controller *master); bool (*supports_ccc_cmd)(struct i3c_master_controller *master, const struct i3c_ccc_cmd *cmd); int (*send_ccc_cmd)(struct i3c_master_controller *master, struct i3c_ccc_cmd *cmd); int (*i3c_xfers)(struct i3c_dev_desc *dev, struct i3c_xfer *xfers, int nxfers, enum i3c_xfer_mode mode); int (*attach_i2c_dev)(struct i2c_dev_desc *dev); void (*detach_i2c_dev)(struct i2c_dev_desc *dev); int (*i2c_xfers)(struct i2c_dev_desc *dev, struct i2c_msg *xfers, int nxfers); int (*request_ibi)(struct i3c_dev_desc *dev, const struct i3c_ibi_setup *req); void (*free_ibi)(struct i3c_dev_desc *dev); int (*enable_ibi)(struct i3c_dev_desc *dev); int (*disable_ibi)(struct i3c_dev_desc *dev); void (*recycle_ibi_slot)(struct i3c_dev_desc *dev, struct i3c_ibi_slot *slot); int (*enable_hotjoin)(struct i3c_master_controller *master); int (*disable_hotjoin)(struct i3c_master_controller *master); int (*set_speed)(struct i3c_master_controller *master, enum i3c_open_drain_speed speed); int (*set_dev_nack_retry)(struct i3c_master_controller *master, unsigned int dev_nack_retry_cnt); };”h]”hXðstruct i3c_master_controller_ops { int (*bus_init)(struct i3c_master_controller *master); void (*bus_cleanup)(struct i3c_master_controller *master); int (*attach_i3c_dev)(struct i3c_dev_desc *dev); int (*reattach_i3c_dev)(struct i3c_dev_desc *dev, u8 old_dyn_addr); void (*detach_i3c_dev)(struct i3c_dev_desc *dev); int (*do_daa)(struct i3c_master_controller *master); bool (*supports_ccc_cmd)(struct i3c_master_controller *master, const struct i3c_ccc_cmd *cmd); int (*send_ccc_cmd)(struct i3c_master_controller *master, struct i3c_ccc_cmd *cmd); int (*i3c_xfers)(struct i3c_dev_desc *dev, struct i3c_xfer *xfers, int nxfers, enum i3c_xfer_mode mode); int (*attach_i2c_dev)(struct i2c_dev_desc *dev); void (*detach_i2c_dev)(struct i2c_dev_desc *dev); int (*i2c_xfers)(struct i2c_dev_desc *dev, struct i2c_msg *xfers, int nxfers); int (*request_ibi)(struct i3c_dev_desc *dev, const struct i3c_ibi_setup *req); void (*free_ibi)(struct i3c_dev_desc *dev); int (*enable_ibi)(struct i3c_dev_desc *dev); int (*disable_ibi)(struct i3c_dev_desc *dev); void (*recycle_ibi_slot)(struct i3c_dev_desc *dev, struct i3c_ibi_slot *slot); int (*enable_hotjoin)(struct i3c_master_controller *master); int (*disable_hotjoin)(struct i3c_master_controller *master); int (*set_speed)(struct i3c_master_controller *master, enum i3c_open_drain_speed speed); int (*set_dev_nack_retry)(struct i3c_master_controller *master, unsigned int dev_nack_retry_cnt); };”…”�”}”hjˆsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j!nh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M’hjí‡ubjì)�”}”(hŒ **Members**”h]”j)�”}”(hjˆh]”hŒMembers”…”�”}”(hj!ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mªhjí‡ubj0)�”}”(hhh]”(j5)�”}”(hŒâ``bus_init`` hook responsible for the I3C bus initialization. You should at least call master_set_info() from there and set the bus mode. You can also put controller specific initialization in there. This method is mandatory. ”h]”(j;)�”}”(hŒ ``bus_init``”h]”jA)�”}”(hj>ˆh]”hŒbus_init”…”�”}”(hj@ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj<ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M‘hj8ˆubjW)�”}”(hhh]”jì)�”}”(hŒÔhook responsible for the I3C bus initialization. You should at least call master_set_info() from there and set the bus mode. You can also put controller specific initialization in there. This method is mandatory.”h]”hŒÔhook responsible for the I3C bus initialization. You should at least call master_set_info() from there and set the bus mode. You can also put controller specific initialization in there. This method is mandatory.”…”�”}”(hjWˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MŽhjTˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj8ˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jSˆh´M‘hj5ˆubj5)�”}”(hŒ“``bus_cleanup`` cleanup everything done in :c:type:`i3c_master_controller_ops->bus_init\(\) `. This method is optional. ”h]”(j;)�”}”(hŒ``bus_cleanup``”h]”jA)�”}”(hjxˆh]”hŒ bus_cleanup”…”�”}”(hjzˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjvˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M”hjrˆubjW)�”}”(hhh]”jì)�”}”(hŒ‚cleanup everything done in :c:type:`i3c_master_controller_ops->bus_init\(\) `. This method is optional.”h]”(hŒcleanup everything done in ”…”�”}”(hj‘ˆh²hh³Nh´Nubh)�”}”(hŒM:c:type:`i3c_master_controller_ops->bus_init\(\) `”h]”jA)�”}”(hj›ˆh]”hŒ%i3c_master_controller_ops->bus_init()”…”�”}”(hj�ˆh²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hj™ˆubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒi3c_master_controller_ops”uh1hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M’hj‘ˆubhŒ. This method is optional.”…”�”}”(hj‘ˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j¸ˆh´M’hjŽˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjrˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j�ˆh´M”hj5ˆubj5)�”}”(hXž``attach_i3c_dev`` called every time an I3C device is attached to the bus. It can be after a DAA or when a device is statically declared by the FW, in which case it will only have a static address and the dynamic address will be 0. When this function is called, device information have not been retrieved yet. This is a good place to attach master controller specific data to I3C devices. This method is optional. ”h]”(j;)�”}”(hŒ``attach_i3c_dev``”h]”jA)�”}”(hjÕˆh]”hŒattach_i3c_dev”…”�”}”(hj׈h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÓˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M�hjψubjW)�”}”(hhh]”jì)�”}”(hXŠcalled every time an I3C device is attached to the bus. It can be after a DAA or when a device is statically declared by the FW, in which case it will only have a static address and the dynamic address will be 0. When this function is called, device information have not been retrieved yet. This is a good place to attach master controller specific data to I3C devices. This method is optional.”h]”hXŠcalled every time an I3C device is attached to the bus. It can be after a DAA or when a device is statically declared by the FW, in which case it will only have a static address and the dynamic address will be 0. When this function is called, device information have not been retrieved yet. This is a good place to attach master controller specific data to I3C devices. This method is optional.”…”�”}”(hjîˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M•hjëˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjψubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jêˆh´M�hj5ˆubj5)�”}”(hX ``reattach_i3c_dev`` called every time an I3C device has its addressed changed. It can be because the device has been powered down and has lost its address, or it can happen when a device had a static address and has been assigned a dynamic address with SETDASA. This method is optional. ”h]”(j;)�”}”(hŒ``reattach_i3c_dev``”h]”jA)�”}”(hj‰h]”hŒreattach_i3c_dev”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj ‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M£hj ‰ubjW)�”}”(hhh]”jì)�”}”(hX called every time an I3C device has its addressed changed. It can be because the device has been powered down and has lost its address, or it can happen when a device had a static address and has been assigned a dynamic address with SETDASA. This method is optional.”h]”hX called every time an I3C device has its addressed changed. It can be because the device has been powered down and has lost its address, or it can happen when a device had a static address and has been assigned a dynamic address with SETDASA. This method is optional.”…”�”}”(hj(‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mžhj%‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj ‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j$‰h´M£hj5ˆubj5)�”}”(hŒ˜``detach_i3c_dev`` called when an I3C device is detached from the bus. Usually happens when the master device is unregistered. This method is optional. ”h]”(j;)�”}”(hŒ``detach_i3c_dev``”h]”jA)�”}”(hjI‰h]”hŒdetach_i3c_dev”…”�”}”(hjK‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjG‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M¦hjC‰ubjW)�”}”(hhh]”jì)�”}”(hŒ„called when an I3C device is detached from the bus. Usually happens when the master device is unregistered. This method is optional.”h]”hŒ„called when an I3C device is detached from the bus. Usually happens when the master device is unregistered. This method is optional.”…”�”}”(hjb‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M¤hj_‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjC‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j^‰h´M¦hj5ˆubj5)�”}”(hXQ``do_daa`` do a DAA (Dynamic Address Assignment) procedure. This is procedure should send an ENTDAA CCC command and then add all devices discovered sure the DAA using i3c_master_add_i3c_dev_locked(). Add devices added with i3c_master_add_i3c_dev_locked() will then be attached or re-attached to the controller. This method is mandatory. ”h]”(j;)�”}”(hŒ ``do_daa``”h]”jA)�”}”(hjƒ‰h]”hŒdo_daa”…”�”}”(hj…‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj�‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M¬hj}‰ubjW)�”}”(hhh]”jì)�”}”(hXEdo a DAA (Dynamic Address Assignment) procedure. This is procedure should send an ENTDAA CCC command and then add all devices discovered sure the DAA using i3c_master_add_i3c_dev_locked(). Add devices added with i3c_master_add_i3c_dev_locked() will then be attached or re-attached to the controller. This method is mandatory.”h]”hXEdo a DAA (Dynamic Address Assignment) procedure. This is procedure should send an ENTDAA CCC command and then add all devices discovered sure the DAA using i3c_master_add_i3c_dev_locked(). Add devices added with i3c_master_add_i3c_dev_locked() will then be attached or re-attached to the controller. This method is mandatory.”…”�”}”(hjœ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M§hj™‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj}‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j˜‰h´M¬hj5ˆubj5)�”}”(hŒ´``supports_ccc_cmd`` should return true if the CCC command is supported, false otherwise. This method is optional, if not provided the core assumes all CCC commands are supported. ”h]”(j;)�”}”(hŒ``supports_ccc_cmd``”h]”jA)�”}”(hj½‰h]”hŒsupports_ccc_cmd”…”�”}”(hj¿‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj»‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M°hj·‰ubjW)�”}”(hhh]”jì)�”}”(hŒžshould return true if the CCC command is supported, false otherwise. This method is optional, if not provided the core assumes all CCC commands are supported.”h]”hŒžshould return true if the CCC command is supported, false otherwise. This method is optional, if not provided the core assumes all CCC commands are supported.”…”�”}”(hjÖ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M­hjÓ‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj·‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÒ‰h´M°hj5ˆubj5)�”}”(hŒ>``send_ccc_cmd`` send a CCC command This method is mandatory. ”h]”(j;)�”}”(hŒ``send_ccc_cmd``”h]”jA)�”}”(hj÷‰h]”hŒ send_ccc_cmd”…”�”}”(hjù‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjõ‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M²hjñ‰ubjW)�”}”(hhh]”jì)�”}”(hŒ,send a CCC command This method is mandatory.”h]”hŒ,send a CCC command This method is mandatory.”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M±hj Šubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjñ‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j Šh´M²hj5ˆubj5)�”}”(hŒT``i3c_xfers`` do one or several I3C SDR or HDR transfers. This method is mandatory. ”h]”(j;)�”}”(hŒ ``i3c_xfers``”h]”jA)�”}”(hj1Šh]”hŒ i3c_xfers”…”�”}”(hj3Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj/Šubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M´hj+ŠubjW)�”}”(hhh]”jì)�”}”(hŒEdo one or several I3C SDR or HDR transfers. This method is mandatory.”h]”hŒEdo one or several I3C SDR or HDR transfers. This method is mandatory.”…”�”}”(hjJŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M³hjGŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj+Šubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jFŠh´M´hj5ˆubj5)�”}”(hŒ³``attach_i2c_dev`` called every time an I2C device is attached to the bus. This is a good place to attach master controller specific data to I2C devices. This method is optional. ”h]”(j;)�”}”(hŒ``attach_i2c_dev``”h]”jA)�”}”(hjkŠh]”hŒattach_i2c_dev”…”�”}”(hjmŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjiŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M¸hjeŠubjW)�”}”(hhh]”jì)�”}”(hŒŸcalled every time an I2C device is attached to the bus. This is a good place to attach master controller specific data to I2C devices. This method is optional.”h]”hŒŸcalled every time an I2C device is attached to the bus. This is a good place to attach master controller specific data to I2C devices. This method is optional.”…”�”}”(hj„Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mµhj�Šubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjeŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j€Šh´M¸hj5ˆubj5)�”}”(hŒ˜``detach_i2c_dev`` called when an I2C device is detached from the bus. Usually happens when the master device is unregistered. This method is optional. ”h]”(j;)�”}”(hŒ``detach_i2c_dev``”h]”jA)�”}”(hj¥Šh]”hŒdetach_i2c_dev”…”�”}”(hj§Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj£Šubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M»hjŸŠubjW)�”}”(hhh]”jì)�”}”(hŒ„called when an I2C device is detached from the bus. Usually happens when the master device is unregistered. This method is optional.”h]”hŒ„called when an I2C device is detached from the bus. Usually happens when the master device is unregistered. This method is optional.”…”�”}”(hj¾Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M¹hj»Šubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjŸŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jºŠh´M»hj5ˆubj5)�”}”(hXZ``i2c_xfers`` do one or several I2C transfers. Note that, unlike i3c transfers, the core does not guarantee that buffers attached to the transfers are DMA-safe. If drivers want to have DMA-safe buffers, they should use the i2c_get_dma_safe_msg_buf() and i2c_put_dma_safe_msg_buf() helpers provided by the I2C framework. This method is mandatory. ”h]”(j;)�”}”(hŒ ``i2c_xfers``”h]”jA)�”}”(hjߊh]”hŒ i2c_xfers”…”�”}”(hjáŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÝŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÂhjÙŠubjW)�”}”(hhh]”jì)�”}”(hXKdo one or several I2C transfers. Note that, unlike i3c transfers, the core does not guarantee that buffers attached to the transfers are DMA-safe. If drivers want to have DMA-safe buffers, they should use the i2c_get_dma_safe_msg_buf() and i2c_put_dma_safe_msg_buf() helpers provided by the I2C framework. This method is mandatory.”h]”hXKdo one or several I2C transfers. Note that, unlike i3c transfers, the core does not guarantee that buffers attached to the transfers are DMA-safe. If drivers want to have DMA-safe buffers, they should use the i2c_get_dma_safe_msg_buf() and i2c_put_dma_safe_msg_buf() helpers provided by the I2C framework. This method is mandatory.”…”�”}”(hjøŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M¼hjõŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÙŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jôŠh´MÂhj5ˆubj5)�”}”(hXw``request_ibi`` attach an IBI handler to an I3C device. This implies defining an IBI handler and the constraints of the IBI (maximum payload length and number of pre-allocated slots). Some controllers support less IBI-capable devices than regular devices, so this method might return -``EBUSY`` if there's no more space for an extra IBI registration This method is optional. ”h]”(j;)�”}”(hŒ``request_ibi``”h]”jA)�”}”(hj‹h]”hŒ request_ibi”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÉhj‹ubjW)�”}”(hhh]”jì)�”}”(hXfattach an IBI handler to an I3C device. This implies defining an IBI handler and the constraints of the IBI (maximum payload length and number of pre-allocated slots). Some controllers support less IBI-capable devices than regular devices, so this method might return -``EBUSY`` if there's no more space for an extra IBI registration This method is optional.”h]”(hX attach an IBI handler to an I3C device. This implies defining an IBI handler and the constraints of the IBI (maximum payload length and number of pre-allocated slots). Some controllers support less IBI-capable devices than regular devices, so this method might return -”…”�”}”(hj2‹h²hh³Nh´NubjA)�”}”(hŒ ``EBUSY``”h]”hŒEBUSY”…”�”}”(hj:‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj2‹ubhŒR if there’s no more space for an extra IBI registration This method is optional.”…”�”}”(hj2‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÃhj/‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j.‹h´MÉhj5ˆubj5)�”}”(hŒÅ``free_ibi`` free an IBI previously requested with ->request_ibi(). The IBI should have been disabled with ->disable_irq() prior to that This method is mandatory only if ->request_ibi is not NULL. ”h]”(j;)�”}”(hŒ ``free_ibi``”h]”jA)�”}”(hje‹h]”hŒfree_ibi”…”�”}”(hjg‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjc‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÌhj_‹ubjW)�”}”(hhh]”jì)�”}”(hŒ·free an IBI previously requested with ->request_ibi(). The IBI should have been disabled with ->disable_irq() prior to that This method is mandatory only if ->request_ibi is not NULL.”h]”hŒ·free an IBI previously requested with ->request_ibi(). The IBI should have been disabled with ->disable_irq() prior to that This method is mandatory only if ->request_ibi is not NULL.”…”�”}”(hj~‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÊhj{‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj_‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jz‹h´MÌhj5ˆubj5)�”}”(hXX``enable_ibi`` enable the IBI. Only valid if ->request_ibi() has been called prior to ->enable_ibi(). The controller should first enable the IBI on the controller end (for example, unmask the hardware IRQ) and then send the ENEC CCC command (with the IBI flag set) to the I3C device. This method is mandatory only if ->request_ibi is not NULL. ”h]”(j;)�”}”(hŒ``enable_ibi``”h]”jA)�”}”(hjŸ‹h]”hŒ enable_ibi”…”�”}”(hj¡‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj�‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÒhj™‹ubjW)�”}”(hhh]”jì)�”}”(hXHenable the IBI. Only valid if ->request_ibi() has been called prior to ->enable_ibi(). The controller should first enable the IBI on the controller end (for example, unmask the hardware IRQ) and then send the ENEC CCC command (with the IBI flag set) to the I3C device. This method is mandatory only if ->request_ibi is not NULL.”h]”hXHenable the IBI. Only valid if ->request_ibi() has been called prior to ->enable_ibi(). The controller should first enable the IBI on the controller end (for example, unmask the hardware IRQ) and then send the ENEC CCC command (with the IBI flag set) to the I3C device. This method is mandatory only if ->request_ibi is not NULL.”…”�”}”(hj¸‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÍhjµ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj™‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j´‹h´MÒhj5ˆubj5)�”}”(hŒÏ``disable_ibi`` disable an IBI. First send the DISEC CCC command with the IBI flag set and then deactivate the hardware IRQ on the controller end. This method is mandatory only if ->request_ibi is not NULL. ”h]”(j;)�”}”(hŒ``disable_ibi``”h]”jA)�”}”(hjÙ‹h]”hŒ disable_ibi”…”�”}”(hjÛ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj׋ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÖhjÓ‹ubjW)�”}”(hhh]”jì)�”}”(hŒ¾disable an IBI. First send the DISEC CCC command with the IBI flag set and then deactivate the hardware IRQ on the controller end. This method is mandatory only if ->request_ibi is not NULL.”h]”hŒ¾disable an IBI. First send the DISEC CCC command with the IBI flag set and then deactivate the hardware IRQ on the controller end. This method is mandatory only if ->request_ibi is not NULL.”…”�”}”(hjò‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÓhjï‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÓ‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jî‹h´MÖhj5ˆubj5)�”}”(hX ``recycle_ibi_slot`` recycle an IBI slot. Called every time an IBI has been processed by its handler. The IBI slot should be put back in the IBI slot pool so that the controller can re-use it for a future IBI This method is mandatory only if ->request_ibi is not NULL. ”h]”(j;)�”}”(hŒ``recycle_ibi_slot``”h]”jA)�”}”(hjŒh]”hŒrecycle_ibi_slot”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÜhj ŒubjW)�”}”(hhh]”jì)�”}”(hŒ÷recycle an IBI slot. Called every time an IBI has been processed by its handler. The IBI slot should be put back in the IBI slot pool so that the controller can re-use it for a future IBI This method is mandatory only if ->request_ibi is not NULL.”h]”hŒ÷recycle an IBI slot. Called every time an IBI has been processed by its handler. The IBI slot should be put back in the IBI slot pool so that the controller can re-use it for a future IBI This method is mandatory only if ->request_ibi is not NULL.”…”�”}”(hj,Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M×hj)Œubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj Œubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j(Œh´MÜhj5ˆubj5)�”}”(hŒ1``enable_hotjoin`` enable hot join event detect. ”h]”(j;)�”}”(hŒ``enable_hotjoin``”h]”jA)�”}”(hjMŒh]”hŒenable_hotjoin”…”�”}”(hjOŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjKŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÝhjGŒubjW)�”}”(hhh]”jì)�”}”(hŒenable hot join event detect.”h]”hŒenable hot join event detect.”…”�”}”(hjfŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jbŒh´MÝhjcŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjGŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jbŒh´MÝhj5ˆubj5)�”}”(hŒ3``disable_hotjoin`` disable hot join event detect. ”h]”(j;)�”}”(hŒ``disable_hotjoin``”h]”jA)�”}”(hj†Œh]”hŒdisable_hotjoin”…”�”}”(hjˆŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj„Œubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÞhj€ŒubjW)�”}”(hhh]”jì)�”}”(hŒdisable hot join event detect.”h]”hŒdisable hot join event detect.”…”�”}”(hjŸŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j›Œh´MÞhjœŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj€Œubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j›Œh´MÞhj5ˆubj5)�”}”(hŒ1``set_speed`` adjust I3C open drain mode timing. ”h]”(j;)�”}”(hŒ ``set_speed``”h]”jA)�”}”(hj¿Œh]”hŒ set_speed”…”�”}”(hjÁŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj½Œubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mßhj¹ŒubjW)�”}”(hhh]”jì)�”}”(hŒ"adjust I3C open drain mode timing.”h]”hŒ"adjust I3C open drain mode timing.”…”�”}”(hjØŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÔŒh´MßhjÕŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¹Œubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÔŒh´Mßhj5ˆubj5)�”}”(hŒS``set_dev_nack_retry`` configure device NACK retry count for the master controller.”h]”(j;)�”}”(hŒ``set_dev_nack_retry``”h]”jA)�”}”(hjøŒh]”hŒset_dev_nack_retry”…”�”}”(hjúŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjöŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MàhjòŒubjW)�”}”(hhh]”jì)�”}”(hŒ` ``secondary`` true if the master is a secondary master ``init_done`` true when the bus initialization is done ``hotjoin`` true if the master support hotjoin ``rpm_allowed`` true if Runtime PM allowed ``rpm_ibi_allowed`` true if IBI and Hot-Join allowed while runtime suspended ``ibi_wakeup`` IBI can wakeup the system ``shutting_down`` set to true when master begins shutdown or unregister ``boardinfo`` board-level information attached to devices connected on the bus ``boardinfo.i3c`` list of I3C boardinfo objects ``boardinfo.i2c`` list of I2C boardinfo objects ``bus`` I3C bus exposed by this master ``addr_method`` Bitmap describing which methods of Address Assignment required to be run for discovering all the devices on the bus. Bit 0: SETDASA Bit 1: SETAASA All other bits are reserved. ``instance`` Zero-based instance number of the Bus Controller as defined by the DisCo specification I3C Target Address (_ADR) Encoding ``wq`` freezable workqueue which can be used by master drivers if they need to postpone operations that need to take place in a thread context. Typical examples are Hot Join processing which requires taking the bus lock in maintenance, which in turn, can only be done from a sleep-able context ``hj_work`` work item used to run DAA after a Hot-Join event is detected. Queued to **wq** by i3c_master_queue_hotjoin() ``reg_work`` work item used to register newly discovered I3C devices with the driver model. Queued to **wq** by i3c_master_do_daa_ext() so that device registration is deferred out of the DAA caller's context (notably the resume path), and is skipped if the controller is shutting down ``dev_nack_retry_count`` retry count when slave device nack”h]”(jì)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj·�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³�ubhŒ:”…”�”}”(hj³�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhj¯�ubj"n)�”}”(hXŸstruct i3c_master_controller { struct device dev; struct i3c_dev_desc *this; struct i2c_adapter i2c; const struct i3c_master_controller_ops *ops; unsigned int secondary : 1; unsigned int init_done : 1; unsigned int hotjoin: 1; unsigned int rpm_allowed: 1; unsigned int rpm_ibi_allowed: 1; unsigned int ibi_wakeup: 1; bool shutting_down; struct { struct list_head i3c; struct list_head i2c; } boardinfo; struct i3c_bus bus; u8 addr_method; u8 instance; struct workqueue_struct *wq; struct work_struct hj_work; struct work_struct reg_work; unsigned int dev_nack_retry_count; };”h]”hXŸstruct i3c_master_controller { struct device dev; struct i3c_dev_desc *this; struct i2c_adapter i2c; const struct i3c_master_controller_ops *ops; unsigned int secondary : 1; unsigned int init_done : 1; unsigned int hotjoin: 1; unsigned int rpm_allowed: 1; unsigned int rpm_ibi_allowed: 1; unsigned int ibi_wakeup: 1; bool shutting_down; struct { struct list_head i3c; struct list_head i2c; } boardinfo; struct i3c_bus bus; u8 addr_method; u8 instance; struct workqueue_struct *wq; struct work_struct hj_work; struct work_struct reg_work; unsigned int dev_nack_retry_count; };”…”�”}”hjÐ�sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j!nh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M hj¯�ubjì)�”}”(hŒ **Members**”h]”j)�”}”(hjá�h]”hŒMembers”…”�”}”(hjã�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjß�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M"hj¯�ubj0)�”}”(hhh]”(j5)�”}”(hŒ4``dev`` device to be registered to the device-model ”h]”(j;)�”}”(hŒ``dev``”h]”jA)�”}”(hjŽh]”hŒdev”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjþ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhjú�ubjW)�”}”(hhh]”jì)�”}”(hŒ+device to be registered to the device-model”h]”hŒ+device to be registered to the device-model”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jŽh´MhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjú�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jŽh´Mhj÷�ubj5)�”}”(hŒ``this`` an I3C device object representing this master. This device will be added to the list of I3C devs available on the bus ”h]”(j;)�”}”(hŒ``this``”h]”jA)�”}”(hj9Žh]”hŒthis”…”�”}”(hj;Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj7Žubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhj3ŽubjW)�”}”(hhh]”jì)�”}”(hŒuan I3C device object representing this master. This device will be added to the list of I3C devs available on the bus”h]”hŒuan I3C device object representing this master. This device will be added to the list of I3C devs available on the bus”…”�”}”(hjRŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MhjOŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj3Žubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jNŽh´Mhj÷�ubj5)�”}”(hŒž``i2c`` I2C adapter used for backward compatibility. This adapter is registered to the I2C subsystem to be as transparent as possible to existing I2C drivers ”h]”(j;)�”}”(hŒ``i2c``”h]”jA)�”}”(hjsŽh]”hŒi2c”…”�”}”(hjuŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjqŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M hjmŽubjW)�”}”(hhh]”jì)�”}”(hŒ•I2C adapter used for backward compatibility. This adapter is registered to the I2C subsystem to be as transparent as possible to existing I2C drivers”h]”hŒ•I2C adapter used for backward compatibility. This adapter is registered to the I2C subsystem to be as transparent as possible to existing I2C drivers”…”�”}”(hjŒŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhj‰Žubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjmŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jˆŽh´M hj÷�ubj5)�”}”(hŒf``ops`` master operations. See :c:type:`struct i3c_master_controller_ops ` ”h]”(j;)�”}”(hŒ``ops``”h]”jA)�”}”(hj­Žh]”hŒops”…”�”}”(hj¯Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj«Žubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M hj§ŽubjW)�”}”(hhh]”jì)�”}”(hŒ]master operations. See :c:type:`struct i3c_master_controller_ops `”h]”(hŒmaster operations. See ”…”�”}”(hjÆŽh²hh³Nh´Nubh)�”}”(hŒF:c:type:`struct i3c_master_controller_ops `”h]”jA)�”}”(hjÐŽh]”hŒ struct i3c_master_controller_ops”…”�”}”(hjÒŽh²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hjÎŽubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒi3c_master_controller_ops”uh1hh³jÂŽh´M hjÆŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÂŽh´M hjÃŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj§Žubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÂŽh´M hj÷�ubj5)�”}”(hŒ7``secondary`` true if the master is a secondary master ”h]”(j;)�”}”(hŒ ``secondary``”h]”jA)�”}”(hj�h]”hŒ secondary”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M hjÿŽubjW)�”}”(hhh]”jì)�”}”(hŒ(true if the master is a secondary master”h]”hŒ(true if the master is a secondary master”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j�h´M hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÿŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j�h´M hj÷�ubj5)�”}”(hŒ7``init_done`` true when the bus initialization is done ”h]”(j;)�”}”(hŒ ``init_done``”h]”jA)�”}”(hj>�h]”hŒ init_done”…”�”}”(hj@�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj<�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M hj8�ubjW)�”}”(hhh]”jì)�”}”(hŒ(true when the bus initialization is done”h]”hŒ(true when the bus initialization is done”…”�”}”(hjW�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jS�h´M hjT�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj8�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jS�h´M hj÷�ubj5)�”}”(hŒ/``hotjoin`` true if the master support hotjoin ”h]”(j;)�”}”(hŒ ``hotjoin``”h]”jA)�”}”(hjw�h]”hŒhotjoin”…”�”}”(hjy�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hju�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhjq�ubjW)�”}”(hhh]”jì)�”}”(hŒ"true if the master support hotjoin”h]”hŒ"true if the master support hotjoin”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jŒ�h´Mhj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjq�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jŒ�h´Mhj÷�ubj5)�”}”(hŒ+``rpm_allowed`` true if Runtime PM allowed ”h]”(j;)�”}”(hŒ``rpm_allowed``”h]”jA)�”}”(hj°�h]”hŒ rpm_allowed”…”�”}”(hj²�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj®�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhjª�ubjW)�”}”(hhh]”jì)�”}”(hŒtrue if Runtime PM allowed”h]”hŒtrue if Runtime PM allowed”…”�”}”(hjÉ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÅ�h´MhjÆ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjª�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÅ�h´Mhj÷�ubj5)�”}”(hŒM``rpm_ibi_allowed`` true if IBI and Hot-Join allowed while runtime suspended ”h]”(j;)�”}”(hŒ``rpm_ibi_allowed``”h]”jA)�”}”(hjé�h]”hŒrpm_ibi_allowed”…”�”}”(hjë�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjç�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhjã�ubjW)�”}”(hhh]”jì)�”}”(hŒ8true if IBI and Hot-Join allowed while runtime suspended”h]”hŒ8true if IBI and Hot-Join allowed while runtime suspended”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jþ�h´Mhjÿ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjã�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jþ�h´Mhj÷�ubj5)�”}”(hŒ)``ibi_wakeup`` IBI can wakeup the system ”h]”(j;)�”}”(hŒ``ibi_wakeup``”h]”jA)�”}”(hj"�h]”hŒ ibi_wakeup”…”�”}”(hj$�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj �ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhj�ubjW)�”}”(hhh]”jì)�”}”(hŒIBI can wakeup the system”h]”hŒIBI can wakeup the system”…”�”}”(hj;�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j7�h´Mhj8�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j7�h´Mhj÷�ubj5)�”}”(hŒH``shutting_down`` set to true when master begins shutdown or unregister ”h]”(j;)�”}”(hŒ``shutting_down``”h]”jA)�”}”(hj[�h]”hŒ shutting_down”…”�”}”(hj]�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjY�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MhjU�ubjW)�”}”(hhh]”jì)�”}”(hŒ5set to true when master begins shutdown or unregister”h]”hŒ5set to true when master begins shutdown or unregister”…”�”}”(hjt�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jp�h´Mhjq�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjU�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jp�h´Mhj÷�ubj5)�”}”(hŒO``boardinfo`` board-level information attached to devices connected on the bus ”h]”(j;)�”}”(hŒ ``boardinfo``”h]”jA)�”}”(hj”�h]”hŒ boardinfo”…”�”}”(hj–�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj’�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MhjŽ�ubjW)�”}”(hhh]”jì)�”}”(hŒ@board-level information attached to devices connected on the bus”h]”hŒ@board-level information attached to devices connected on the bus”…”�”}”(hj­�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j©�h´Mhjª�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjŽ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j©�h´Mhj÷�ubj5)�”}”(hŒ1``boardinfo.i3c`` list of I3C boardinfo objects ”h]”(j;)�”}”(hŒ``boardinfo.i3c``”h]”jA)�”}”(hjÍ�h]”hŒ boardinfo.i3c”…”�”}”(hjÏ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjË�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MhjÇ�ubjW)�”}”(hhh]”jì)�”}”(hŒlist of I3C boardinfo objects”h]”hŒlist of I3C boardinfo objects”…”�”}”(hjæ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jâ�h´Mhjã�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÇ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jâ�h´Mhj÷�ubj5)�”}”(hŒ0``boardinfo.i2c`` list of I2C boardinfo objects ”h]”(j;)�”}”(hŒ``boardinfo.i2c``”h]”jA)�”}”(hj‘h]”hŒ boardinfo.i2c”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhj‘ubjW)�”}”(hhh]”jì)�”}”(hŒlist of I2C boardinfo objects”h]”hŒlist of I2C boardinfo objects”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j‘h´Mhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j‘h´Mhj÷�ubj5)�”}”(hŒ'``bus`` I3C bus exposed by this master ”h]”(j;)�”}”(hŒ``bus``”h]”jA)�”}”(hj?‘h]”hŒbus”…”�”}”(hjA‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj=‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhj9‘ubjW)�”}”(hhh]”jì)�”}”(hŒI3C bus exposed by this master”h]”hŒI3C bus exposed by this master”…”�”}”(hjX‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jT‘h´MhjU‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj9‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jT‘h´Mhj÷�ubj5)�”}”(hŒÀ``addr_method`` Bitmap describing which methods of Address Assignment required to be run for discovering all the devices on the bus. Bit 0: SETDASA Bit 1: SETAASA All other bits are reserved. ”h]”(j;)�”}”(hŒ``addr_method``”h]”jA)�”}”(hjx‘h]”hŒ addr_method”…”�”}”(hjz‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjv‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhjr‘ubjW)�”}”(hhh]”jì)�”}”(hŒ¯Bitmap describing which methods of Address Assignment required to be run for discovering all the devices on the bus. Bit 0: SETDASA Bit 1: SETAASA All other bits are reserved.”h]”hŒ¯Bitmap describing which methods of Address Assignment required to be run for discovering all the devices on the bus. Bit 0: SETDASA Bit 1: SETAASA All other bits are reserved.”…”�”}”(hj‘‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MhjŽ‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjr‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j�‘h´Mhj÷�ubj5)�”}”(hŒ‡``instance`` Zero-based instance number of the Bus Controller as defined by the DisCo specification I3C Target Address (_ADR) Encoding ”h]”(j;)�”}”(hŒ ``instance``”h]”jA)�”}”(hj²‘h]”hŒinstance”…”�”}”(hj´‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj°‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”•[þh´Mhj¬‘ubjW)�”}”(hhh]”jì)�”}”(hŒyZero-based instance number of the Bus Controller as defined by the DisCo specification I3C Target Address (_ADR) Encoding”h]”hŒyZero-based instance number of the Bus Controller as defined by the DisCo specification I3C Target Address (_ADR) Encoding”…”�”}”(hjË‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MhjÈ‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¬‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÇ‘h´Mhj÷�ubj5)�”}”(hX&``wq`` freezable workqueue which can be used by master drivers if they need to postpone operations that need to take place in a thread context. Typical examples are Hot Join processing which requires taking the bus lock in maintenance, which in turn, can only be done from a sleep-able context ”h]”(j;)�”}”(hŒ``wq``”h]”jA)�”}”(hjì‘h]”hŒwq”…”�”}”(hjî‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjê‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M"hjæ‘ubjW)�”}”(hhh]”jì)�”}”(hXfreezable workqueue which can be used by master drivers if they need to postpone operations that need to take place in a thread context. Typical examples are Hot Join processing which requires taking the bus lock in maintenance, which in turn, can only be done from a sleep-able context”h]”hXfreezable workqueue which can be used by master drivers if they need to postpone operations that need to take place in a thread context. Typical examples are Hot Join processing which requires taking the bus lock in maintenance, which in turn, can only be done from a sleep-able context”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjæ‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j’h´M"hj÷�ubj5)�”}”(hŒy``hj_work`` work item used to run DAA after a Hot-Join event is detected. Queued to **wq** by i3c_master_queue_hotjoin() ”h]”(j;)�”}”(hŒ ``hj_work``”h]”jA)�”}”(hj&’h]”hŒhj_work”…”�”}”(hj(’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj$’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M$hj ’ubjW)�”}”(hhh]”jì)�”}”(hŒlwork item used to run DAA after a Hot-Join event is detected. Queued to **wq** by i3c_master_queue_hotjoin()”h]”(hŒHwork item used to run DAA after a Hot-Join event is detected. Queued to ”…”�”}”(hj?’h²hh³Nh´Nubj)�”}”(hŒ**wq**”h]”hŒwq”…”�”}”(hjG’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?’ubhŒ by i3c_master_queue_hotjoin()”…”�”}”(hj?’h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M#hj<’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj ’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j;’h´M$hj÷�ubj5)�”}”(hX``reg_work`` work item used to register newly discovered I3C devices with the driver model. Queued to **wq** by i3c_master_do_daa_ext() so that device registration is deferred out of the DAA caller's context (notably the resume path), and is skipped if the controller is shutting down ”h]”(j;)�”}”(hŒ ``reg_work``”h]”jA)�”}”(hjr’h]”hŒreg_work”…”�”}”(hjt’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjp’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M)hjl’ubjW)�”}”(hhh]”jì)�”}”(hXwork item used to register newly discovered I3C devices with the driver model. Queued to **wq** by i3c_master_do_daa_ext() so that device registration is deferred out of the DAA caller's context (notably the resume path), and is skipped if the controller is shutting down”h]”(hŒYwork item used to register newly discovered I3C devices with the driver model. Queued to ”…”�”}”(hj‹’h²hh³Nh´Nubj)�”}”(hŒ**wq**”h]”hŒwq”…”�”}”(hj“’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹’ubhŒ² by i3c_master_do_daa_ext() so that device registration is deferred out of the DAA caller’s context (notably the resume path), and is skipped if the controller is shutting down”…”�”}”(hj‹’h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M%hjˆ’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjl’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j‡’h´M)hj÷�ubj5)�”}”(hŒ;``dev_nack_retry_count`` retry count when slave device nack”h]”(j;)�”}”(hŒ``dev_nack_retry_count``”h]”jA)�”}”(hj¾’h]”hŒdev_nack_retry_count”…”�”}”(hjÀ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj¼’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M)hj¸’ubjW)�”}”(hhh]”jì)�”}”(hŒ"retry count when slave device nack”h]”hŒ"retry count when slave device nack”…”�”}”(hj×’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M*hjÔ’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¸’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÓ’h´M)hj÷�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj¯�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´Nubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj“h]”hŒ Description”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿ’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M-hhÊh²hubjì)�”}”(hX&A :c:type:`struct i3c_master_controller ` has to be registered to the I3C subsystem through i3c_master_register(). None of :c:type:`struct i3c_master_controller ` fields should be set manually, just pass appropriate values to i3c_master_register().”h]”(hŒA ”…”�”}”(hj“h²hh³Nh´Nubh)�”}”(hŒ>:c:type:`struct i3c_master_controller `”h]”jA)�”}”(hj!“h]”hŒstruct i3c_master_controller”…”�”}”(hj#“h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hj“ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒi3c_master_controller”uh1hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M*hj“ubhŒR has to be registered to the I3C subsystem through i3c_master_register(). None of ”…”�”}”(hj“h²hh³Nh´Nubh)�”}”(hŒ>:c:type:`struct i3c_master_controller `”h]”jA)�”}”(hjE“h]”hŒstruct i3c_master_controller”…”�”}”(hjG“h²hh³Nh´Nubah}”(h]”h ]”(jbj„Œc-type”eh"]”h$]”h&]”uh1j@hjC“ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jnŒ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠjtjwŒi3c_master_controller”uh1hh³j>“h´M*hj“ubhŒV fields should be set manually, just pass appropriate values to i3c_master_register().”…”�”}”(hj“h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j>“h´M*hhÊh²hubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ!i3c_bus_for_each_i2cdev (C macro)”Œc.i3c_bus_for_each_i2cdev”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒi3c_bus_for_each_i2cdev”h]”hú)�”}”(hŒi3c_bus_for_each_i2cdev”h]”j#)�”}”(hŒi3c_bus_for_each_i2cdev”h]”j))�”}”(hj“h]”hŒi3c_bus_for_each_i2cdev”…”�”}”(hj‰“h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj…“ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj�“h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MJubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj}“h²hh³jœ“h´MJubah}”(h]”jx“ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jœ“h´MJhjz“h²hubjç)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jæhjz“h²hh³jœ“h´MJubeh}”(h]”h ]”(j„Œmacro”eh"]”h$]”h&]”j j„j jµ“j jµ“j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubjì)�”}”(hŒ&``i3c_bus_for_each_i2cdev (bus, dev)``”h]”jA)�”}”(hj»“h]”hŒ"i3c_bus_for_each_i2cdev (bus, dev)”…”�”}”(hj½“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj¹“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MLhhÊh²hubhŒ block_quote”“”)�”}”(hŒ0iterate over all I2C devices present on the bus ”h]”jì)�”}”(hŒ/iterate over all I2C devices present on the bus”h]”hŒ/iterate over all I2C devices present on the bus”…”�”}”(hjדh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MJhjÓ“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑ“h³jå“h´MJhhÊh²hubj)�”}”(hŒÖ**Parameters** ``bus`` the I3C bus ``dev`` an I2C device descriptor pointer updated to point to the current slot at each iteration of the loop **Description** Iterate over all I2C devs present on the bus.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjò“h]”hŒ Parameters”…”�”}”(hjô“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjð“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MNhjì“ubj0)�”}”(hhh]”(j5)�”}”(hŒ``bus`` the I3C bus ”h]”(j;)�”}”(hŒ``bus``”h]”jA)�”}”(hj”h]”hŒbus”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MKhj ”ubjW)�”}”(hhh]”jì)�”}”(hŒ the I3C bus”h]”hŒ the I3C bus”…”�”}”(hj*”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j&”h´MKhj'”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj ”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j&”h´MKhj”ubj5)�”}”(hŒl``dev`` an I2C device descriptor pointer updated to point to the current slot at each iteration of the loop ”h]”(j;)�”}”(hŒ``dev``”h]”jA)�”}”(hjJ”h]”hŒdev”…”�”}”(hjL”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjH”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MMhjD”ubjW)�”}”(hhh]”jì)�”}”(hŒcan I2C device descriptor pointer updated to point to the current slot at each iteration of the loop”h]”hŒcan I2C device descriptor pointer updated to point to the current slot at each iteration of the loop”…”�”}”(hjc”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MLhj`”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjD”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³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&]”uh1jhj„”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MOhjì“ubjì)�”}”(hŒ-Iterate over all I2C devs present on the bus.”h]”hŒ-Iterate over all I2C devs present on the bus.”…”�”}”(hjœ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MNhjì“ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ!i3c_bus_for_each_i3cdev (C macro)”Œc.i3c_bus_for_each_i3cdev”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒi3c_bus_for_each_i3cdev”h]”hú)�”}”(hŒi3c_bus_for_each_i3cdev”h]”j#)�”}”(hŒi3c_bus_for_each_i3cdev”h]”j))�”}”(hjÅ”h]”hŒi3c_bus_for_each_i3cdev”…”�”}”(hjÏ”h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjË”ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjÇ”h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MUubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjÔh²hh³jâ”h´MUubah}”(h]”j¾”ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jâ”h´MUhjÀ”h²hubjç)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jæhjÀ”h²hh³jâ”h´MUubeh}”(h]”h ]”(j„Œmacro”eh"]”h$]”h&]”j j„j jû”j jû”j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubjì)�”}”(hŒ&``i3c_bus_for_each_i3cdev (bus, dev)``”h]”jA)�”}”(hj•h]”hŒ"i3c_bus_for_each_i3cdev (bus, dev)”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÿ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MWhhÊh²hubjÒ“)�”}”(hŒ0iterate over all I3C devices present on the bus ”h]”jì)�”}”(hŒ/iterate over all I3C devices present on the bus”h]”hŒ/iterate over all I3C devices present on the bus”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MUhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑ“h³j)•h´MUhhÊh²hubj)�”}”(hŒ×**Parameters** ``bus`` the I3C bus ``dev`` and I3C device descriptor pointer updated to point to the current slot at each iteration of the loop **Description** Iterate over all I3C devs present on the bus.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj6•h]”hŒ Parameters”…”�”}”(hj8•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MYhj0•ubj0)�”}”(hhh]”(j5)�”}”(hŒ``bus`` the I3C bus ”h]”(j;)�”}”(hŒ``bus``”h]”jA)�”}”(hjU•h]”hŒbus”…”�”}”(hjW•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjS•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MVhjO•ubjW)�”}”(hhh]”jì)�”}”(hŒ the I3C bus”h]”hŒ the I3C bus”…”�”}”(hjn•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jj•h´MVhjk•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjO•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jj•h´MVhjL•ubj5)�”}”(hŒm``dev`` and I3C device descriptor pointer updated to point to the current slot at each iteration of the loop ”h]”(j;)�”}”(hŒ``dev``”h]”jA)�”}”(hjŽ•h]”hŒdev”…”�”}”(hj�•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjŒ•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MXhjˆ•ubjW)�”}”(hhh]”jì)�”}”(hŒdand I3C device descriptor pointer updated to point to the current slot at each iteration of the loop”h]”hŒdand I3C device descriptor pointer updated to point to the current slot at each iteration of the loop”…”�”}”(hj§•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MWhj¤•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjˆ•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j£•h´MXhjL•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj0•ubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjÊ•h]”hŒ Description”…”�”}”(hjÌ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÈ•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MZhj0•ubjì)�”}”(hŒ-Iterate over all I3C devs present on the bus.”h]”hŒ-Iterate over all I3C devs present on the bus.”…”�”}”(hjà•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MYhj0•ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒi3c_dma (C struct)”Œ c.i3c_dma”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒi3c_dma”h]”hú)�”}”(hŒstruct i3c_dma”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj –h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M^ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj –h²hh³j–h´M^ubj#)�”}”(hŒi3c_dma”h]”j))�”}”(hj –h]”hŒi3c_dma”…”�”}”(hj/–h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj+–ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj –h²hh³j–h´M^ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj–h²hh³j–h´M^ubah}”(h]”j–ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j–h´M^hj–h²hubjç)�”}”(hhh]”jì)�”}”(hŒ#DMA transfer and mapping descriptor”h]”hŒ#DMA transfer and mapping descriptor”…”�”}”(hjQ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M`hjN–h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj–h²hh³j–h´M^ubeh}”(h]”h ]”(j„Œstruct”eh"]”h$]”h&]”j j„j ji–j ji–j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX**Definition**:: struct i3c_dma { struct device *dev; void *buf; size_t len; size_t map_len; dma_addr_t addr; enum dma_data_direction dir; void *bounce_buf; }; **Members** ``dev`` device object of a device doing DMA ``buf`` destination/source buffer for DMA ``len`` length of transfer ``map_len`` length of DMA mapping ``addr`` mapped DMA address for a Host Controller Driver ``dir`` DMA direction ``bounce_buf`` an allocated bounce buffer if transfer needs it or NULL”h]”(jì)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hju–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjq–ubhŒ:”…”�”}”(hjq–h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mdhjm–ubj"n)�”}”(hŒªstruct i3c_dma { struct device *dev; void *buf; size_t len; size_t map_len; dma_addr_t addr; enum dma_data_direction dir; void *bounce_buf; };”h]”hŒªstruct i3c_dma { struct device *dev; void *buf; size_t len; size_t map_len; dma_addr_t addr; enum dma_data_direction dir; void *bounce_buf; };”…”�”}”hjŽ–sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j!nh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mfhjm–ubjì)�”}”(hŒ **Members**”h]”j)�”}”(hjŸ–h]”hŒMembers”…”�”}”(hj¡–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mphjm–ubj0)�”}”(hhh]”(j5)�”}”(hŒ,``dev`` device object of a device doing DMA ”h]”(j;)�”}”(hŒ``dev``”h]”jA)�”}”(hj¾–h]”hŒdev”…”�”}”(hjÀ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj¼–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mbhj¸–ubjW)�”}”(hhh]”jì)�”}”(hŒ#device object of a device doing DMA”h]”hŒ#device object of a device doing DMA”…”�”}”(hj×–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÓ–h´MbhjÔ–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¸–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÓ–h´Mbhjµ–ubj5)�”}”(hŒ*``buf`` destination/source buffer for DMA ”h]”(j;)�”}”(hŒ``buf``”h]”jA)�”}”(hj÷–h]”hŒbuf”…”�”}”(hjù–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjõ–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mchjñ–ubjW)�”}”(hhh]”jì)�”}”(hŒ!destination/source buffer for DMA”h]”hŒ!destination/source buffer for DMA”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j —h´Mchj —ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjñ–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j —h´Mchjµ–ubj5)�”}”(hŒ``len`` length of transfer ”h]”(j;)�”}”(hŒ``len``”h]”jA)�”}”(hj0—h]”hŒlen”…”�”}”(hj2—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj.—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mdhj*—ubjW)�”}”(hhh]”jì)�”}”(hŒlength of transfer”h]”hŒlength of transfer”…”�”}”(hjI—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jE—h´MdhjF—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj*—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jE—h´Mdhjµ–ubj5)�”}”(hŒ"``map_len`` length of DMA mapping ”h]”(j;)�”}”(hŒ ``map_len``”h]”jA)�”}”(hji—h]”hŒmap_len”…”�”}”(hjk—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjg—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mehjc—ubjW)�”}”(hhh]”jì)�”}”(hŒlength of DMA mapping”h]”hŒlength of DMA mapping”…”�”}”(hj‚—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j~—h´Mehj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjc—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j~—h´Mehjµ–ubj5)�”}”(hŒ9``addr`` mapped DMA address for a Host Controller Driver ”h]”(j;)�”}”(hŒ``addr``”h]”jA)�”}”(hj¢—h]”hŒaddr”…”�”}”(hj¤—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj —ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mfhjœ—ubjW)�”}”(hhh]”jì)�”}”(hŒ/mapped DMA address for a Host Controller Driver”h]”hŒ/mapped DMA address for a Host Controller Driver”…”�”}”(hj»—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j·—h´Mfhj¸—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjœ—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j·—h´Mfhjµ–ubj5)�”}”(hŒ``dir`` DMA direction ”h]”(j;)�”}”(hŒ``dir``”h]”jA)�”}”(hjÛ—h]”hŒdir”…”�”}”(hjÝ—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÙ—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MghjÕ—ubjW)�”}”(hhh]”jì)�”}”(hŒ DMA direction”h]”hŒ DMA direction”…”�”}”(hjô—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jð—h´Mghjñ—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÕ—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jð—h´Mghjµ–ubj5)�”}”(hŒF``bounce_buf`` an allocated bounce buffer if transfer needs it or NULL”h]”(j;)�”}”(hŒ``bounce_buf``”h]”jA)�”}”(hj˜h]”hŒ bounce_buf”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mghj˜ubjW)�”}”(hhh]”jì)�”}”(hŒ7an allocated bounce buffer if transfer needs it or NULL”h]”hŒ7an allocated bounce buffer if transfer needs it or NULL”…”�”}”(hj-˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mhhj*˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j)˜h´Mghjµ–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjm–ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ$i3c_dev_get_master_data (C function)”Œc.i3c_dev_get_master_data”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ?void * i3c_dev_get_master_data (const struct i3c_dev_desc *dev)”h]”hú)�”}”(hŒ=void *i3c_dev_get_master_data(const struct i3c_dev_desc *dev)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjn˜h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjj˜h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´M¥ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj˜h²hh³j|˜h´M¥ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj‹˜h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjj˜h²hh³j|˜h´M¥ubj#)�”}”(hŒi3c_dev_get_master_data”h]”j))�”}”(hŒi3c_dev_get_master_data”h]”hŒi3c_dev_get_master_data”…”�”}”(hjœ˜h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj˜˜ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjj˜h²hh³j|˜h´M¥ubjB)�”}”(hŒ (const struct i3c_dev_desc *dev)”h]”jH)�”}”(hŒconst struct i3c_dev_desc *dev”h]”(jN)�”}”(hj3h]”hŒconst”…”�”}”(hj¸˜h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj´˜ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŘh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´˜ubjN)�”}”(hjQh]”hŒstruct”…”�”}”(hjÓ˜h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj´˜ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´˜ubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hjñ˜h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjî˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jó˜Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jž˜sbŒc.i3c_dev_get_master_data”†”asbuh1hhj´˜ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´˜ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj´˜ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj,™h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj´˜ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj°˜ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjj˜h²hh³j|˜h´M¥ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjf˜h²hh³j|˜h´M¥ubah}”(h]”ja˜ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j|˜h´M¥hjc˜h²hubjç)�”}”(hhh]”jì)�”}”(hŒ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj:�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÃhj6�ubjW)�”}”(hhh]”jì)�”}”(hŒ2the I2C device descriptor to get private data from”h]”hŒ2the I2C device descriptor to get private data from”…”�”}”(hjU�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jQ�h´MÃhjR�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj6�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jQ�h´MÃhj3�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj�ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjw�h]”hŒReturn”…”�”}”(hjy�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhju�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÅhj�ubjì)�”}”(hŒwthe private data previously attached with i2c_dev_set_master_data() or NULL if no data has been attached to the device.”h]”hŒwthe private data previously attached with i2c_dev_set_master_data() or NULL if no data has been attached to the device.”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÅhj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ$i2c_dev_set_master_data (C function)”Œc.i2c_dev_set_master_data”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒCvoid i2c_dev_set_master_data (struct i2c_dev_desc *dev, void *data)”h]”hú)�”}”(hŒBvoid i2c_dev_set_master_data(struct i2c_dev_desc *dev, void *data)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¼�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj¸�h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÎubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjË�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸�h²hh³jÊ�h´MÎubj#)�”}”(hŒi2c_dev_set_master_data”h]”j))�”}”(hŒi2c_dev_set_master_data”h]”hŒi2c_dev_set_master_data”…”�”}”(hjÝ�h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÙ�ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj¸�h²hh³jÊ�h´MÎubjB)�”}”(hŒ&(struct i2c_dev_desc *dev, void *data)”h]”(jH)�”}”(hŒstruct i2c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjù�h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjõ�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõ�ubh)�”}”(hhh]”j))�”}”(hŒ i2c_dev_desc”h]”hŒ i2c_dev_desc”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jžŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jß�sbŒc.i2c_dev_set_master_data”†”asbuh1hhjõ�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõ�ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjEžh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjõ�ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjRžh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjõ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjñ�ubjH)�”}”(hŒ void *data”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjkžh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjgžubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgžubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj‡žh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjgžubj))�”}”(hŒdata”h]”hŒdata”…”�”}”(hj”žh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjgžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjñ�ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj¸�h²hh³jÊ�h´MÎubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj´�h²hh³jÊ�h´MÎubah}”(h]”j¯�ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jÊ�h´MÎhj±�h²hubjç)�”}”(hhh]”jì)�”}”(hŒ6attach master private data to an I2C device descriptor”h]”hŒ6attach master private data to an I2C device descriptor”…”�”}”(hj¾žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÎhj»žh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj±�h²hh³jÊ�h´MÎubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jÖžj jÖžj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX**Parameters** ``struct i2c_dev_desc *dev`` the I2C device descriptor to attach private data to ``void *data`` private data **Description** This functions allows a master controller to attach per-device private data which can then be retrieved with i2c_device_get_master_data().”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjàžh]”hŒ Parameters”…”�”}”(hjâžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞžubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÒhjÚžubj0)�”}”(hhh]”(j5)�”}”(hŒQ``struct i2c_dev_desc *dev`` the I2C device descriptor to attach private data to ”h]”(j;)�”}”(hŒ``struct i2c_dev_desc *dev``”h]”jA)�”}”(hjÿžh]”hŒstruct i2c_dev_desc *dev”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjýžubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÐhjùžubjW)�”}”(hhh]”jì)�”}”(hŒ3the I2C device descriptor to attach private data to”h]”hŒ3the I2C device descriptor to attach private data to”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jŸh´MÐhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjùžubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jŸh´MÐhjöžubj5)�”}”(hŒ``void *data`` private data ”h]”(j;)�”}”(hŒ``void *data``”h]”jA)�”}”(hj8Ÿh]”hŒ void *data”…”�”}”(hj:Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj6Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÑhj2ŸubjW)�”}”(hhh]”jì)�”}”(hŒ private data”h]”hŒ private data”…”�”}”(hjQŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jMŸh´MÑhjNŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj2Ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jMŸh´MÑhjöžubeh}”(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&]”uh1jhjqŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÓhjÚžubjì)�”}”(hŒŠThis functions allows a master controller to attach per-device private data which can then be retrieved with i2c_device_get_master_data().”h]”hŒŠThis functions allows a master controller to attach per-device private data which can then be retrieved with i2c_device_get_master_data().”…”�”}”(hj‰Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÒhjÚžubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒi3c_dev_get_master (C function)”Œc.i3c_dev_get_master”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒLstruct i3c_master_controller * i3c_dev_get_master (struct i3c_dev_desc *dev)”h]”hú)�”}”(hŒJstruct i3c_master_controller *i3c_dev_get_master(struct i3c_dev_desc *dev)”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj¸Ÿh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj´Ÿh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÝubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆŸh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´Ÿh²hh³jÅŸh´MÝubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hjןh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÔŸubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jÙŸŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†Œi3c_dev_get_master”sbŒc.i3c_dev_get_master”†”asbuh1hhj´Ÿh²hh³jÅŸh´MÝubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøŸh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´Ÿh²hh³jÅŸh´MÝubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj´Ÿh²hh³jÅŸh´MÝubj#)�”}”(hŒi3c_dev_get_master”h]”j))�”}”(hjõŸh]”hŒi3c_dev_get_master”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj´Ÿh²hh³jÅŸh´MÝubjB)�”}”(hŒ(struct i3c_dev_desc *dev)”h]”jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj. ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj? h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj. ubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjM ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jR Œmodname”NŒ classname”NjŠj�)�”}”j�]”jóŸŒc.i3c_dev_get_master”†”asbuh1hhj. ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj. ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj. ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj. ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj* ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj´Ÿh²hh³jÅŸh´MÝubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj°Ÿh²hh³jÅŸh´MÝubah}”(h]”j«Ÿah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jÅŸh´MÝhj­Ÿh²hubjç)�”}”(hhh]”jì)�”}”(hŒ,get master used to communicate with a device”h]”hŒ,get master used to communicate with a device”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÝhj° h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj­Ÿh²hh³jÅŸh´MÝubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jË j jË j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hŒi**Parameters** ``struct i3c_dev_desc *dev`` I3C dev **Return** the master controller driving **dev**”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÕ h]”hŒ Parameters”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MáhjÏ ubj0)�”}”(hhh]”j5)�”}”(hŒ%``struct i3c_dev_desc *dev`` I3C dev ”h]”(j;)�”}”(hŒ``struct i3c_dev_desc *dev``”h]”jA)�”}”(hjô h]”hŒstruct i3c_dev_desc *dev”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjò ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MÞhjî ubjW)�”}”(hhh]”jì)�”}”(hŒI3C dev”h]”hŒI3C dev”…”�”}”(hj ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j ¡h´MÞhj ¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjî ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j ¡h´MÞhjë ubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÏ ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj/¡h]”hŒReturn”…”�”}”(hj1¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MàhjÏ ubjì)�”}”(hŒ%the master controller driving **dev**”h]”(hŒthe master controller driving ”…”�”}”(hjE¡h²hh³Nh´Nubj)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjM¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjE¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MàhjÏ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒi2c_dev_get_master (C function)”Œc.i2c_dev_get_master”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒLstruct i3c_master_controller * i2c_dev_get_master (struct i2c_dev_desc *dev)”h]”hú)�”}”(hŒJstruct i3c_master_controller *i2c_dev_get_master(struct i2c_dev_desc *dev)”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj‚¡h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj~¡h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Méubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~¡h²hh³j�¡h´Méubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hj¡¡h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjž¡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j£¡Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†Œi2c_dev_get_master”sbŒc.i2c_dev_get_master”†”asbuh1hhj~¡h²hh³j�¡h´Méubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~¡h²hh³j�¡h´Méubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjСh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj~¡h²hh³j�¡h´Méubj#)�”}”(hŒi2c_dev_get_master”h]”j))�”}”(hj¿¡h]”hŒi2c_dev_get_master”…”�”}”(hjá¡h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÝ¡ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj~¡h²hh³j�¡h´MéubjB)�”}”(hŒ(struct i2c_dev_desc *dev)”h]”jH)�”}”(hŒstruct i2c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjü¡h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjø¡ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjø¡ubh)�”}”(hhh]”j))�”}”(hŒ i2c_dev_desc”h]”hŒ i2c_dev_desc”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j¢Œmodname”NŒ classname”NjŠj�)�”}”j�]”j½¡Œc.i2c_dev_get_master”†”asbuh1hhjø¡ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjø¡ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjF¢h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjø¡ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjS¢h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjø¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjô¡ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj~¡h²hh³j�¡h´Méubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjz¡h²hh³j�¡h´Méubah}”(h]”ju¡ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j�¡h´Méhjw¡h²hubjç)�”}”(hhh]”jì)�”}”(hŒ,get master used to communicate with a device”h]”hŒ,get master used to communicate with a device”…”�”}”(hj}¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Méhjz¢h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjw¡h²hh³j�¡h´Méubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j•¢j j•¢j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hŒi**Parameters** ``struct i2c_dev_desc *dev`` I2C dev **Return** the master controller driving **dev**”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjŸ¢h]”hŒ Parameters”…”�”}”(hj¡¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Míhj™¢ubj0)�”}”(hhh]”j5)�”}”(hŒ%``struct i2c_dev_desc *dev`` I2C dev ”h]”(j;)�”}”(hŒ``struct i2c_dev_desc *dev``”h]”jA)�”}”(hj¾¢h]”hŒstruct i2c_dev_desc *dev”…”�”}”(hjÀ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj¼¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mêhj¸¢ubjW)�”}”(hhh]”jì)�”}”(hŒI2C dev”h]”hŒI2C dev”…”�”}”(hj×¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÓ¢h´MêhjÔ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¸¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÓ¢h´Mêhjµ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj™¢ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjù¢h]”hŒReturn”…”�”}”(hjû¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj÷¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mìhj™¢ubjì)�”}”(hŒ%the master controller driving **dev**”h]”(hŒthe master controller driving ”…”�”}”(hj£h²hh³Nh´Nubj)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mìhj™¢ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒi3c_master_get_bus (C function)”Œc.i3c_master_get_bus”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒJstruct i3c_bus * i3c_master_get_bus (struct i3c_master_controller *master)”h]”hú)�”}”(hŒHstruct i3c_bus *i3c_master_get_bus(struct i3c_master_controller *master)”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjL£h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjH£h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mõubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjH£h²hh³jY£h´Mõubh)�”}”(hhh]”j))�”}”(hŒi3c_bus”h]”hŒi3c_bus”…”�”}”(hjk£h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjh£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jm£Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†Œi3c_master_get_bus”sbŒc.i3c_master_get_bus”†”asbuh1hhjH£h²hh³jY£h´Mõubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjH£h²hh³jY£h´Mõubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjš£h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjH£h²hh³jY£h´Mõubj#)�”}”(hŒi3c_master_get_bus”h]”j))�”}”(hj‰£h]”hŒi3c_master_get_bus”…”�”}”(hj«£h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj§£ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjH£h²hh³jY£h´MõubjB)�”}”(hŒ&(struct i3c_master_controller *master)”h]”jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjÆ£h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj£ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj£ubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hjä£h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjá£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j棌modname”NŒ classname”NjŠj�)�”}”j�]”j‡£Œc.i3c_master_get_bus”†”asbuh1hhj£ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj£ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj£ubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj¾£ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjH£h²hh³jY£h´Mõubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjD£h²hh³jY£h´Mõubah}”(h]”j?£ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jY£h´MõhjA£h²hubjç)�”}”(hhh]”jì)�”}”(hŒ get the bus attached to a master”h]”hŒ get the bus attached to a master”…”�”}”(hjG¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MõhjD¤h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjA£h²hh³jY£h´Mõubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j_¤j j_¤j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hŒ|**Parameters** ``struct i3c_master_controller *master`` master object **Return** the I3C bus **master** is connected to”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hji¤h]”hŒ Parameters”…”�”}”(hjk¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjg¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Mùhjc¤ubj0)�”}”(hhh]”j5)�”}”(hŒ7``struct i3c_master_controller *master`` master object ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hjˆ¤h]”hŒ$struct i3c_master_controller *master”…”�”}”(hjФh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj†¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Möhj‚¤ubjW)�”}”(hhh]”jì)�”}”(hŒ master object”h]”hŒ master object”…”�”}”(hj¡¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j�¤h´Möhjž¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj‚¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j�¤h´Möhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjc¤ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjäh]”hŒReturn”…”�”}”(hjŤh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁ¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Møhjc¤ubjì)�”}”(hŒ&the I3C bus **master** is connected to”h]”(hŒ the I3C bus ”…”�”}”(hjÙ¤h²hh³Nh´Nubj)�”}”(hŒ **master**”h]”hŒmaster”…”�”}”(hjá¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙ¤ubhŒ is connected to”…”�”}”(hjÙ¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´Møhjc¤ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´Nubeh}”(h]”Œ i3c-master-controller-driver-api”ah ]”h"]”Œ i3c master controller driver api”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”j,¥Œ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¥j¥sŒ nametypes”}”j¥‰sh}”(j¥hÊhìhõjÄjÉjEjJjÕjÚjVj[j™ jž j j j’ j— j—jœjÁjÆjüjjÂjÇjˆj�jojtjZj_jE!jJ!j@#jE#j%j%j_'jd'j—)jœ)j?+jD+jõ,jú,jÞ0jã0j_2jd2j¦6j«6j&9j+9j²;j·;jÃ=jÈ=j@j@jjBjoBj Dj¥DjHFjMFjrHjwHjóIjøIj¬Lj±LjýNjOjàPjåPj SjSjGWjLWjI[jN[jÊ\jÏ\j«^j°^j�`j¢`j~bjƒbjdj„dj6gj;gjþijjjÊkjÏkj•mjšmj:oj?ojÛpjàpj)sj.sjujujÏwjÔwjzj$zj±|j¶|jÒ~j×~j\€ja€js�jx�j̓jÒƒj‚‡j‡‡jD�jI�jx“j}“j¾”jÔj–j–ja˜jf˜j šjšjœj œj¯�j´�j«Ÿj°Ÿju¡jz¡j?£jD£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.