€•Œ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´K/hjubeh}”(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´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_maintenance_unlock”h]”j))�”}”(hŒi3c_bus_maintenance_unlock”h]”hŒi3c_bus_maintenance_unlock”…”�”}”(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:ubjB)�”}”(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&]”uh1jMhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²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_maintenance_unlock”†”asbuh1hhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj ubj))�”}”(hŒbus”h]”hŒbus”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjÍ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Œ2Release the bus lock after a maintenance operation”h]”hŒ2Release the bus lock after 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æhjÆh²hh³jßh´K: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 to release the lock on **Description** 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]”(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´K>hj­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´Khj­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´KHubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNh²hh³j`h´KHubj#)�”}”(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´KHubjB)�”}”(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´KHubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjJh²hh³j`h´KHubah}”(h]”jEah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j`h´KHhjGh²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´KHhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjGh²hh³j`h´KHubeh}”(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´KLhj.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´KIhjMubjW)�”}”(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´KIhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jhh´KIhjJubah}”(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´KKhj.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´KJhj.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´KPhj.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´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_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´K]ubjB)�”}”(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´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Œ-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´K]hjŸh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj×h²hh³jðh´K]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 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´Kahj¾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´K^hjÝ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)�”}”(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´K`hj¾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´K_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”…”�”}”(hjch²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Œ ”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_h²hh³jqh´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³jqh´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†j†sbŒc.i3c_master_queue_hotjoin”†”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Æ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Œ+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æ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_master_controller *master`` I3C master object **Description** Queue the hot-join worker on the master's workqueue.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjEh]”hŒ Parameters”…”�”}”(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?ubj0)�”}”(hhh]”j5)�”}”(hŒ;``struct i3c_master_controller *master`` I3C master object ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hjdh]”hŒ$struct i3c_master_controller *master”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjbubah}”(h]”h ]”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”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jyh´Máhjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jyh´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Œ4Queue the hot-join worker on the master's workqueue.”h]”hŒ6Queue the hot-join worker on the master’s workqueue.”…”�”}”(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_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´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjàh²hh³jòh´Mubj#)�”}”(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´MubjB)�”}”(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”jA Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j sbŒ c.i3c_master_send_ccc_cmd_locked”†”asbuh1hhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjm h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj ubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hjz 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_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Œcmd”h]”hŒcmd”…”�”}”(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´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Œ!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´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 ``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)�”}”(hj6 h]”hŒ Parameters”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4 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´Mhj0 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)�”}”(hjU h]”hŒ$struct i3c_master_controller *master”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjS 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´MhjO ubjW)�”}”(hhh]”jì)�”}”(hŒ%master used to send frames on the bus”h]”hŒ%master used to send frames on the bus”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jj h´Mhjk ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjO ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jj h´MhjL ubj5)�”}”(hŒ,``struct i3c_ccc_cmd *cmd`` command to send ”h]”(j;)�”}”(hŒ``struct i3c_ccc_cmd *cmd``”h]”jA)�”}”(hjŽ h]”hŒ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´Mhjˆ ubjW)�”}”(hhh]”jì)�”}”(hŒcommand to send”h]”hŒcommand to send”…”�”}”(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´MhjL ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj0 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´Mhj0 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´Mhj0 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´MVubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj h²hh³j h´MVubj#)�”}”(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´MVubjB)�”}”(hŒ5(struct i3c_master_controller *master, u8 start_addr)”h]”(jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjG ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjG ubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjf ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jk Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j1 sbŒc.i3c_master_get_free_addr”†”asbuh1hhjG ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰ 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Œmaster”h]”hŒmaster”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjG ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjC ubjH)�”}”(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�]”j… Œc.i3c_master_get_free_addr”†”asbuh1hhj¹ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¹ ubj))�”}”(hŒ start_addr”h]”hŒ start_addr”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj¹ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjC ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj h²hh³j h´MVubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj h²hh³j h´MVubah}”(h]”j ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j h´MVhj 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´MVhj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj h²hh³j h´MVubeh}”(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)�”}”(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´MZhj2 ubj0)�”}”(hhh]”(j5)�”}”(hŒ;``struct i3c_master_controller *master`` I3C master object ”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´MWhjQ ubjW)�”}”(hhh]”jì)�”}”(hŒI3C master object”h]”hŒI3C master object”…”�”}”(hjp h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jl h´MWhjm ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjQ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jl h´MWhjN ubj5)�”}”(hŒ+``u8 start_addr`` where to start searching ”h]”(j;)�”}”(hŒ``u8 start_addr``”h]”jA)�”}”(hj� h]”hŒ u8 start_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´MXhjŠ ubjW)�”}”(hhh]”jì)�”}”(hŒwhere to start searching”h]”hŒwhere to start searching”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j¥ h´MXhj¦ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjŠ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j¥ h´MXhjN ubeh}”(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´MZhj2 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´MYhj2 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[hj2 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\hj2 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”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjE 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Œ ”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjE h²hh³jW h´MŸubj#)�”}”(hŒi3c_master_setaasa_locked”h]”j))�”}”(hŒi3c_master_setaasa_locked”h]”hŒi3c_master_setaasa_locked”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjf ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjE h²hh³jW 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†jl sbŒc.i3c_master_setaasa_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Æuh1jAhjE h²hh³jW h´MŸubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjA h²hh³jW h´MŸubah}”(h]”j< ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jW h´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Ÿhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj> h²hh³jW 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 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)�”}”(hjJh]”hŒ$struct i3c_master_controller *master”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjHubah}”(h]”h ]”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 hjDubjW)�”}”(hhh]”jì)�”}”(hŒI3C master object”h]”hŒI3C master object”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j_h´M hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjDubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j_h´M hjAubah}”(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Œ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.”…”�”}”(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Œ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.”…”�”}”(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Œˆ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”…”�”}”(hjh²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Œ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj h²hh³jh´MÌubj#)�”}”(hŒi3c_master_entdaa_locked”h]”j))�”}”(hŒi3c_master_entdaa_locked”h]”hŒi3c_master_entdaa_locked”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj,ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj h²hh³jh´MÌubjB)�”}”(hŒ&(struct i3c_master_controller *master)”h]”jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjHubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jlŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j2sbŒc.i3c_master_entdaa_locked”†”asbuh1hhjHubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjHubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjDubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj h²hh³jh´MÌubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjh²hh³jh´MÌubah}”(h]”jah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jh´MÌhjh²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´MÌhjÌh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjh²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`` 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´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)�”}”(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Î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Îhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjëubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjKh]”hŒ Description”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIubah}”(h]”h ]”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Œ3Send a ENTDAA CCC command to start a DAA procedure.”h]”hŒ3Send a ENTDAA CCC command to start a DAA procedure.”…”�”}”(hjah²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Œ–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.”…”�”}”(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Ñ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.”…”�”}”(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´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_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´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_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´MîubjB)�”}”(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”…”�”}”(hjh²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”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j2Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jøsbŒc.i3c_master_enec_disec_locked”†”asbuh1hhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjubeh}”(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”j‰Œmodname”NŒ classname”NjŠj�)�”}”j�]”jLŒc.i3c_master_enec_disec_locked”†”asbuh1hhj€ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€ubj))�”}”(hŒaddr”h]”hŒaddr”…”�”}”(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 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”…”�”}”(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�]”jLŒ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”…”�”}”(hj0h²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”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjEubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjEubj))�”}”(hŒ suppress_m2”h]”hŒ suppress_m2”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjEubeh}”(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 an ENEC or DISEC CCC command”h]”hŒ!send an ENEC or 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´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 ``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)�”}”(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´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)�”}”(hjh]”hŒu8 addr”…”�”}”(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Œ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³jh´Mðhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jh´MðhjÆubj5)�”}”(hŒ7``bool enable`` true to send ENEC, false to send DISEC ”h]”(j;)�”}”(hŒ``bool enable``”h]”jA)�”}”(hjOh]”hŒ bool enable”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjMubah}”(h]”h ]”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Œ&true to send ENEC, false to send DISEC”h]”hŒ&true to send ENEC, false to send DISEC”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jdh´Mñhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jdh´MñhjÆubj5)�”}”(hŒ(``u8 evts`` events to enable or 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´Mòhj‚ubjW)�”}”(hhh]”jì)�”}”(hŒevents to enable or disable”h]”hŒevents to enable or disable”…”�”}”(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Œ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@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Œ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/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 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 ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ is ”…”�”}”(hjh²hh³Nh´NubjA)�”}”(hŒ``I3C_BROADCAST_ADDR``”h]”hŒI3C_BROADCAST_ADDR”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjubhŒ.”…”�”}”(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ì)�”}”(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 ”…”�”}”(hjEh²hh³Nh´Nubj)�”}”(hŒ**suppress_m2**”h]”hŒ suppress_m2”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjEubhX 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.”…”�”}”(hjEh²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.”…”�”}”(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ªubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjwh]”hŒReturn”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjuubah}”(h]”h ]”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´Mhjªubeh}”(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ÿ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_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"hj¸h²hh³jÊh´MubjB)�”}”(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Œ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(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“)�”}”j†jßsbŒc.i3c_master_disec_locked”†”asbuh1hhjõubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjõubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hjRh²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”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjkubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jpŒmodname”NŒ classname”NjŠj�)�”}”j�]”j3Œc.i3c_master_disec_locked”†”asbuh1hhjgubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgubj))�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjgubeh}”(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�]”j3Œc.i3c_master_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ñubeh}”(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Œ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´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 ``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”…”�”}”(hj0h²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)�”}”(hjMh]”hŒ$struct i3c_master_controller *master”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjKubah}”(h]”h ]”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 hjGubjW)�”}”(hhh]”jì)�”}”(hŒ%master used to send frames on the bus”h]”hŒ%master used to send frames on the bus”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jbh´M hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jbh´M hjDubj5)�”}”(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!hjDubj5)�”}”(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´M"hjÇ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&]”uh1jVhjÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jâh´M"hjDubeh}”(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´M$hj(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 ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ is ”…”�”}”(hjh²hh³Nh´NubjA)�”}”(hŒ``I3C_BROADCAST_ADDR``”h]”hŒI3C_BROADCAST_ADDR”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjubhŒ.”…”�”}”(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Œ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.”…”�”}”(hjQh²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)�”}”(hjbh]”hŒReturn”…”�”}”(hjdh²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.”…”�”}”(hjxh²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_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”…”�”}”(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´M3ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj£h²hh³jµh´M3ubj#)�”}”(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"hj£h²hh³jµh´M3ubjB)�”}”(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”…”�”}”(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“)�”}”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Œ*”…”�”}”(hj0h²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”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjVubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j[Œmodname”NŒ classname”NjŠj�)�”}”j�]”jŒc.i3c_master_enec_locked”†”asbuh1hhjRubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRubj))�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjRubeh}”(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_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Üubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj£h²hh³jµh´M3ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjŸh²hh³jµh´M3ubah}”(h]”jšah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jµh´M3hjœ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´M3hjôh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjœh²hh³jµh´M3ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jj jj ‰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)�”}”(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´M7hjubj0)�”}”(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)�”}”(hj8h]”hŒ$struct i3c_master_controller *master”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M4hj2ubjW)�”}”(hhh]”jì)�”}”(hŒ%master used to send frames on the bus”h]”hŒ%master used to send frames on the bus”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jMh´M4hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jMh´M4hj/ubj5)�”}”(hŒ@``u8 addr`` a valid I3C slave address or ``I3C_BROADCAST_ADDR`` ”h]”(j;)�”}”(hŒ ``u8 addr``”h]”jA)�”}”(hjqh]”hŒu8 addr”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M5hjkubjW)�”}”(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´M5hj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j†h´M5hj/ubj5)�”}”(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´M6hj²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´M6hjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÍh´M6hj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjubjì)�”}”(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´M8hjubjì)�”}”(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”…”�”}”(hjh²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´M7hjubjì)�”}”(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:hjubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjMh]”hŒReturn”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjKubah}”(h]”h ]”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<hjubjì)�”}”(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.”…”�”}”(hjch²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=hjubeh}”(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”…”�”}”(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´MGubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽh²hh³j h´MGubj#)�”}”(hŒi3c_master_defslvs_locked”h]”j))�”}”(hŒi3c_master_defslvs_locked”h]”hŒi3c_master_defslvs_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´MGubjB)�”}”(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†jµ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Œ*”…”�”}”(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Çubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjŽh²hh³j h´MGubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjŠh²hh³j h´MGubah}”(h]”j…ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j h´MGhj‡h²hubjç)�”}”(hhh]”jì)�”}”(hŒsend a DEFSLVS CCC command”h]”hŒsend a DEFSLVS CCC command”…”�”}”(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´MGhjOh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj‡h²hh³j h´MGubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jjj jjj ‰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)�”}”(hjth]”hŒ Parameters”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MKhjnubj0)�”}”(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´MHhj�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´MHhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j¨h´MHhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjnubjì)�”}”(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´MJhjnubjì)�”}”(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´MIhjnubjì)�”}”(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 ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒM:c:type:`i3c_master_controller_ops->bus_init\(\) `”h]”jA)�”}”(hjh]”hŒ%i3c_master_controller_ops->bus_init()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(Œxref”j„Œc-type”eh"]”h$]”h&]”uh1j@hj ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ driver-api/i3c/master-driver-api”Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj�)�”}”j�]”sbŒ reftarget”Œi3c_master_controller_ops”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MMhjubhŒ~. It should also be called if a master ACKed an Hot-Join request and assigned a dynamic address to the device joining the bus.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j2h´MMhjnubjì)�”}”(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´MShjnubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjNh]”hŒReturn”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MUhjnubjì)�”}”(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.”…”�”}”(hjdh²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´MVhjnubeh}”(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”…”�”}”(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´Myubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�h²hh³j¡h´Myubj#)�”}”(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"hj�h²hh³j¡h´MyubjB)�”}”(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Œ ”…”�”}”(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Œ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”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjBubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jGŒmodname”NŒ classname”NjŠj�)�”}”j�]”j Œ$c.i3c_master_reattach_i3c_dev_locked”†”asbuh1hhj>ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>ubj))�”}”(hŒ old_dyn_addr”h]”hŒ old_dyn_addr”…”�”}”(hjqh²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´Myubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj‹h²hh³j¡h´Myubah}”(h]”j†ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j¡h´Myhjˆh²hubjç)�”}”(hhh]”jì)�”}”(hŒ)reattach an I3C device with a new address”h]”hŒ)reattach an I3C device with a new 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´Myhj˜h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjˆh²hh³j¡h´Myubeh}”(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´MzhjÖ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´Mzhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jñh´MzhjÓubj5)�”}”(hŒ;``u8 old_dyn_addr`` previous dynamic address of the device ”h]”(j;)�”}”(hŒ``u8 old_dyn_addr``”h]”jA)�”}”(hjh]”hŒu8 old_dyn_addr”…”�”}”(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Œ&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&]”uh1jVhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j*h´M{hjÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj·ubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjPh]”hŒ Description”…”�”}”(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ì)�”}”(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.”…”�”}”(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·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.”…”�”}”(hjuh²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Œ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).”…”�”}”(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_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”…”�”}”(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´Mgubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇh²hh³jØh´Mgubj#)�”}”(hŒ"i3c_master_has_wakeup_enabled_devs”h]”j))�”}”(hŒ"i3c_master_has_wakeup_enabled_devs”h]”hŒ"i3c_master_has_wakeup_enabled_devs”…”�”}”(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´MgubjB)�”}”(hŒ&(struct i3c_master_controller *master)”h]”jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjh²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_has_wakeup_enabled_devs”†”asbuh1hhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÿubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjÇh²hh³jØh´Mgubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjÃh²hh³jØh´Mgubah}”(h]”j¾ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jØh´MghjÀ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´Mghj‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjÀh²hh³jØh´Mgubeh}”(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´Mkhj¦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@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´MhhjÅubjW)�”}”(hhh]”jì)�”}”(hŒI3C master controller”h]”hŒI3C master controller”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jàh´Mhhjáubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jàh´MhhjÂ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´Mjhj¦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´Mihj¦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´Mlhj¦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´Mqhj¦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.”…”�”}”(hjR 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´Mrhj¦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Œ ”…”�”}”(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_master_dma_map_single”h]”j))�”}”(hj¾ h]”hŒi3c_master_dma_map_single”…”�”}”(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 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&]”uh1jMhj÷ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷ 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”†”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 *buf”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Œbuf”h]”hŒbuf”…”�”}”(hj”!h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjg!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjó ubjH)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j))�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(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Œ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Æuh1jGhjó ubjH)�”}”(hŒbool force_bounce”h]”(j)�”}”(hjÎ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Œ force_bounce”h]”hŒ force_bounce”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjñ!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjó ubjH)�”}”(hŒenum dma_data_direction dir”h]”(jN)�”}”(hŒenum”h]”hŒenum”…”�”}”(hj)"h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj%"ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%"ubh)�”}”(hhh]”j))�”}”(hŒdma_data_direction”h]”hŒdma_data_direction”…”�”}”(hjH"h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjE"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jJ"Œmodname”NŒ classname”NjŠj�)�”}”j�]”j¼ Œc.i3c_master_dma_map_single”†”asbuh1hhj%"ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%"ubj))�”}”(hŒdir”h]”hŒdir”…”�”}”(hjt"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Úhjy h²hh³jŽ h´MŠubah}”(h]”jt ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jŽ h´MŠhjv 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æhjv 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 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”…”�”}”(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 device *dev`` device object of a device doing DMA ”h]”(j;)�”}”(hŒ``struct device *dev``”h]”jA)�”}”(hjß"h]”hŒstruct device *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 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´M‹hjõ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÙ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jô"h´M‹hjÖ"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”…”�”}”(hj1#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Œ"``size_t len`` length of transfer ”h]”(j;)�”}”(hŒ``size_t len``”h]”jA)�”}”(hjQ#h]”hŒ size_t len”…”�”}”(hjS#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjO#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�hjK#ubjW)�”}”(hhh]”jì)�”}”(hŒlength of transfer”h]”hŒlength of transfer”…”�”}”(hjj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jf#h´M�hjg#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjK#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jf#h´M�hjÖ"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Š#h]”hŒbool force_bounce”…”�”}”(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Œ_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£#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�hjÖ"ubj5)�”}”(hŒ.``enum dma_data_direction dir`` DMA direction ”h]”(j;)�”}”(hŒ``enum dma_data_direction dir``”h]”jA)�”}”(hjÄ#h]”hŒenum dma_data_direction dir”…”�”}”(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Œ DMA direction”h]”hŒ DMA direction”…”�”}”(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Œ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$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Œ5I3C DMA transfer descriptor or NULL in case of error.”h]”hŒ5I3C DMA transfer descriptor or NULL in case of error.”…”�”}”(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_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”…”�”}”(hjk$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjg$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&]”uh1jhjg$h²hh³jy$h´M¾ubj#)�”}”(hŒi3c_master_dma_unmap_single”h]”j))�”}”(hŒi3c_master_dma_unmap_single”h]”hŒi3c_master_dma_unmap_single”…”�”}”(hjŒ$h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjˆ$ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjg$h²hh³jy$h´M¾ubjB)�”}”(hŒ(struct i3c_dma *dma_xfer)”h]”jH)�”}”(hŒstruct i3c_dma *dma_xfer”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_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†jŽ$sbŒc.i3c_master_dma_unmap_single”†”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Œdma_xfer”h]”hŒdma_xfer”…”�”}”(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Æuh1jAhjg$h²hh³jy$h´M¾ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjc$h²hh³jy$h´M¾ubah}”(h]”j^$ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jy$h´M¾hj`$h²hubjç)�”}”(hhh]”jì)�”}”(hŒUnmap buffer after DMA”h]”hŒUnmap buffer after DMA”…”�”}”(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³jy$h´M¾ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jC%j jC%j ‰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)�”}”(hjM%h]”hŒ Parameters”…”�”}”(hjO%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjK%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ÂhjG%ubj0)�”}”(hhh]”j5)�”}”(hŒA``struct i3c_dma *dma_xfer`` DMA transfer and mapping descriptor ”h]”(j;)�”}”(hŒ``struct i3c_dma *dma_xfer``”h]”jA)�”}”(hjl%h]”hŒstruct i3c_dma *dma_xfer”…”�”}”(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Œ#DMA transfer and mapping descriptor”h]”hŒ#DMA transfer and mapping descriptor”…”�”}”(hj…%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j�%h´M¿hj‚%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjf%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j�%h´M¿hjc%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjG%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ÁhjG%ubjì)�”}”(hŒ1Unmap buffer and cleanup DMA transfer descriptor.”h]”hŒ1Unmap buffer and cleanup DMA transfer descriptor.”…”�”}”(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ÀhjG%ubeh}”(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”…”�”}”(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_set_info”h]”j))�”}”(hŒi3c_master_set_info”h]”hŒi3c_master_set_info”…”�”}”(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Œ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)&h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj%&ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%&ubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hjG&h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjD&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jI&Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j&sbŒc.i3c_master_set_info”†”asbuh1hhj%&ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%&ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hju&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Œ"const struct i3c_device_info *info”h]”(jN)�”}”(hŒconst”h]”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_device_info”h]”hŒi3c_device_info”…”�”}”(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�]”jc&Œc.i3c_master_set_info”†”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Œinfo”h]”hŒinfo”…”�”}”(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 master device information”h]”hŒset master device information”…”�”}”(hj8'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Òhj5'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 jP'j jP'j ‰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)�”}”(hjZ'h]”hŒ Parameters”…”�”}”(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ÖhjT'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)�”}”(hjy'h]”hŒ$struct i3c_master_controller *master”…”�”}”(hj{'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjw'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Óhjs'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&]”uh1jVhjs'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jŽ'h´MÓhjp'ubj5)�”}”(hŒ>``const struct i3c_device_info *info`` I3C device information ”h]”(j;)�”}”(hŒ&``const struct i3c_device_info *info``”h]”jA)�”}”(hj²'h]”hŒ"const struct i3c_device_info *info”…”�”}”(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 information”h]”hŒI3C device information”…”�”}”(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Ôhjp'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjT'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ÖhjT'ubjì)�”}”(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(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 ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj (ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ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Œ.”…”�”}”(hj(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j*(h´MÕhjT'ubjì)�”}”(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 ”…”�”}”(hj5(h²hh³Nh´Nubh)�”}”(hŒ:c:type:`i3c_device_info`”h]”jA)�”}”(hj?(h]”hŒi3c_device_info”…”�”}”(hjA(h²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj=(ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŠj-j0Œi3c_device_info”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MØhj5(ubhŒd fields are meaningful for a master device. Here is a list of fields that should be properly filled:”…”�”}”(hj5(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j\(h´MØhjT'ubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ5:c:type:`i3c_device_info->dyn_addr `”h]”jì)�”}”(hjp(h]”h)�”}”(hjp(h]”jA)�”}”(hjp(h]”hŒi3c_device_info->dyn_addr”…”�”}”(hjx(h²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hju(ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œi3c_device_info”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MÛhjr(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j“(h´MÛhjn(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jl(hji(ubjm()�”}”(hŒ0:c:type:`i3c_device_info->bcr `”h]”jì)�”}”(hj¢(h]”h)�”}”(hj¢(h]”jA)�”}”(hj¢(h]”hŒi3c_device_info->bcr”…”�”}”(hjª(h²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj§(ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ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¤(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÅ(h´MÜhj (ubah}”(h]”h ]”h"]”h$]”h&]”uh1jl(hji(ubjm()�”}”(hŒ0:c:type:`i3c_device_info->dcr `”h]”jì)�”}”(hjÔ(h]”h)�”}”(hjÔ(h]”jA)�”}”(hjÔ(h]”hŒi3c_device_info->dcr”…”�”}”(hjÜ(h²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hjÙ(ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ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Ö(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j÷(h´MÝhjÒ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jl(hji(ubjm()�”}”(hŒ0:c:type:`i3c_device_info->pid `”h]”jì)�”}”(hj)h]”h)�”}”(hj)h]”jA)�”}”(hj)h]”hŒi3c_device_info->pid”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj )ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ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)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j))h´MÞhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jl(hji(ubjm()�”}”(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@)h]”hŒi3c_device_info->hdr_cap”…”�”}”(hjB)h²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj>)ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ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:)ubhŒ if ”…”�”}”(hj:)h²hh³Nh´NubjA)�”}”(hŒ``I3C_BCR_HDR_CAP``”h]”hŒI3C_BCR_HDR_CAP”…”�”}”(hjb)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj:)ubhŒ bit is set in ”…”�”}”(hj:)h²hh³Nh´Nubh)�”}”(hŒ0:c:type:`i3c_device_info->bcr `”h]”jA)�”}”(hjv)h]”hŒi3c_device_info->bcr”…”�”}”(hjx)h²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hjt)ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œi3c_device_info”uh1hh³j])h´Mßhj:)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j])h´Mßhj6)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jl(hji(ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jg(h³j“(h´MÛhjT'ubjì)�”}”(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§)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âhjT'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ähjT'ubjì)�”}”(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 ”…”�”}”(hjÎ)h²hh³Nh´Nubj)�”}”(hŒ**info**”h]”hŒinfo”…”�”}”(hjÖ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎ)ubhŒj contains valid information (not every piece of information can be checked, but we can at least make sure ”…”�”}”(hjÎ)h²hh³Nh´Nubj)�”}”(hŒ**info->dyn_addr**”h]”hŒinfo->dyn_addr”…”�”}”(hjè)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎ)ubhŒ and ”…”�”}”(hjÎ)h²hh³Nh´Nubj)�”}”(hŒ **info->bcr**”h]”hŒ info->bcr”…”�”}”(hjú)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎ)ubhŒ! are correct), -EINVAL 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åhjT'ubeh}”(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”…”�”}”(hj3*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Œ ”…”�”}”(hjB*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj/*h²hh³jA*h´M, ubj#)�”}”(hŒi3c_master_bus_init”h]”j))�”}”(hŒi3c_master_bus_init”h]”hŒi3c_master_bus_init”…”�”}”(hjT*h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjP*ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj/*h²hh³jA*h´M, ubjB)�”}”(hŒ&(struct i3c_master_controller *master)”h]”jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjp*h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjl*ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl*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†jV*sbŒc.i3c_master_bus_init”†”asbuh1hhjl*ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl*ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj¼*h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjl*ubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hjÉ*h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjl*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjh*ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj/*h²hh³jA*h´M, ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj+*h²hh³jA*h´M, ubah}”(h]”j&*ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jA*h´M, hj(*h²hubjç)�”}”(hhh]”jì)�”}”(hŒinitialize an I3C bus”h]”hŒinitialize an I3C 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³jA*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`` 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+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´M0 hj+ubj0)�”}”(hhh]”j5)�”}”(hŒJ``struct i3c_master_controller *master`` main master initializing the bus ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hj4+h]”hŒ$struct i3c_master_controller *master”…”�”}”(hj6+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj2+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Œ main master initializing the bus”h]”hŒ main master initializing the bus”…”�”}”(hjM+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jI+h´M- hjJ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj.+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jI+h´M- hj++ubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj+ubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjo+h]”hŒ Description”…”�”}”(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Œ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:”…”�”}”(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+ubhŒenumerated_list”“”)�”}”(hhh]”(jm()�”}”(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”…”�”}”(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´M1 hj™+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jl(hj–+ubjm()�”}”(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 ”…”�”}”(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 ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj¾+ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œi3c_master_controller_ops”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M4 hj¶+ubhŒ~ method to initialize the master controller. That’s usually where the bus mode is selected (pure bus or mixed fast/slow bus)”…”�”}”(hj¶+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÝ+h´M4 hj²+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jl(hj–+ubjm()�”}”(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)”…”�”}”(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´M8 hjî+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jl(hj–+ubjm()�”}”(hŒDisable all slave events. ”h]”jì)�”}”(hŒDisable all slave events.”h]”hŒDisable all slave events.”…”�”}”(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&]”uh1jl(hj–+ubjm()�”}”(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$,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&]”uh1jl(hj–+ubjm()�”}”(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=,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´MC hj9,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jl(hj–+ubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1j”+hj+ubjì)�”}”(hŒ``struct i3c_master_controller *master`` master doing the DAA ”h]”(j;)�”}”(hŒ(``struct i3c_master_controller *master``”h]”jA)�”}”(hj‡4h]”hŒ$struct i3c_master_controller *master”…”�”}”(hj‰4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj…4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M6 hj�4ubjW)�”}”(hhh]”jì)�”}”(hŒmaster doing the DAA”h]”hŒmaster doing the DAA”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jœ4h´M6 hj�4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj�4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jœ4h´M6 hj~4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjb4ubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjÂ4h]”hŒ Description”…”�”}”(hjÄ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M8 hjb4ubjì)�”}”(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Ø4h²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´M7 hjb4ubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjé4h]”hŒReturn”…”�”}”(hjë4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjç4ubah}”(h]”h ]”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; hjb4ubjì)�”}”(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ÿ4h²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< hjb4ubeh}”(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”…”�”}”(hj.5h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj*5h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mb ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*5h²hh³j<5h´Mb ubj#)�”}”(hŒi3c_master_queue_ibi”h]”j))�”}”(hŒi3c_master_queue_ibi”h]”hŒi3c_master_queue_ibi”…”�”}”(hjO5h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjK5ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj*5h²hh³j<5h´Mb 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”…”�”}”(hjk5h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjg5ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjg5ubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hj‰5h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj†5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j‹5Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jQ5sbŒc.i3c_master_queue_ibi”†”asbuh1hhjg5ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjg5ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj·5h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjg5ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÄ5h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjg5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjc5ubjH)�”}”(hŒstruct i3c_ibi_slot *slot”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjÝ5h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÙ5ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙ5ubh)�”}”(hhh]”j))�”}”(hŒ i3c_ibi_slot”h]”hŒ i3c_ibi_slot”…”�”}”(hjû5h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjø5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jý5Œmodname”NŒ classname”NjŠj�)�”}”j�]”j¥5Œc.i3c_master_queue_ibi”†”asbuh1hhjÙ5ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙ5ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj'6h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÙ5ubj))�”}”(hŒslot”h]”hŒslot”…”�”}”(hj46h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÙ5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjc5ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj*5h²hh³j<5h´Mb ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj&5h²hh³j<5h´Mb ubah}”(h]”j!5ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j<5h´Mb hj#5h²hubjç)�”}”(hhh]”jì)�”}”(hŒ Queue an IBI”h]”hŒ Queue an IBI”…”�”}”(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´Mb hj[6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj#5h²hh³j<5h´Mb ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jv6j jv6j ‰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€6h]”hŒ Parameters”…”�”}”(hj‚6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj~6ubah}”(h]”h ]”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 hjz6ubj0)�”}”(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Ÿ6h]”hŒstruct i3c_dev_desc *dev”…”�”}”(hj¡6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj�6ubah}”(h]”h ]”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™6ubjW)�”}”(hhh]”jì)�”}”(hŒ"the device this IBI is coming from”h]”hŒ"the device this IBI is coming from”…”�”}”(hj¸6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j´6h´Mc hjµ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj™6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j´6h´Mc hj–6ubj5)�”}”(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Ø6h]”hŒstruct i3c_ibi_slot *slot”…”�”}”(hjÚ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÖ6ubah}”(h]”h ]”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Ò6ubjW)�”}”(hhh]”jì)�”}”(hŒ&the IBI slot used to store the payload”h]”hŒ&the IBI slot used to store the payload”…”�”}”(hjñ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jí6h´Md hjî6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÒ6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jí6h´Md hj–6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjz6ubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj7h]”hŒ Description”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj7ubah}”(h]”h ]”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 hjz6ubjì)�”}”(hŒvQueue an IBI to the controller workqueue. The IBI handler attached to the dev will be called from a workqueue context.”h]”hŒvQueue an IBI to the controller workqueue. The IBI handler attached to the dev will be called from a workqueue context.”…”�”}”(hj)7h²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´Me hjz6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ&i3c_generic_ibi_free_pool (C function)”Œc.i3c_generic_ibi_free_pool”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒBvoid i3c_generic_ibi_free_pool (struct i3c_generic_ibi_pool *pool)”h]”hú)�”}”(hŒAvoid i3c_generic_ibi_free_pool(struct i3c_generic_ibi_pool *pool)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjX7h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjT7h²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Œ ”…”�”}”(hjg7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjT7h²hh³jf7h´MŸ ubj#)�”}”(hŒi3c_generic_ibi_free_pool”h]”j))�”}”(hŒi3c_generic_ibi_free_pool”h]”hŒi3c_generic_ibi_free_pool”…”�”}”(hjy7h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hju7ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjT7h²hh³jf7h´MŸ ubjB)�”}”(hŒ#(struct i3c_generic_ibi_pool *pool)”h]”jH)�”}”(hŒ!struct i3c_generic_ibi_pool *pool”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj•7h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj‘7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘7ubh)�”}”(hhh]”j))�”}”(hŒi3c_generic_ibi_pool”h]”hŒi3c_generic_ibi_pool”…”�”}”(hj³7h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj°7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jµ7Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j{7sbŒc.i3c_generic_ibi_free_pool”†”asbuh1hhj‘7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘7ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjá7h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj‘7ubj))�”}”(hŒpool”h]”hŒpool”…”�”}”(hjî7h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj‘7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj�7ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjT7h²hh³jf7h´MŸ ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjP7h²hh³jf7h´MŸ ubah}”(h]”jK7ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jf7h´MŸ hjM7h²hubjç)�”}”(hhh]”jì)�”}”(hŒFree a generic IBI pool”h]”hŒFree a generic IBI pool”…”�”}”(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Ÿ hj8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjM7h²hh³jf7h´MŸ ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j08j j08j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hŒ�**Parameters** ``struct i3c_generic_ibi_pool *pool`` the IBI pool to free **Description** Free all IBI slots allated by a generic IBI pool.”h]”(jì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj:8h]”hŒ Parameters”…”�”}”(hj<8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj88ubah}”(h]”h ]”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£ hj48ubj0)�”}”(hhh]”j5)�”}”(hŒ;``struct i3c_generic_ibi_pool *pool`` the IBI pool to free ”h]”(j;)�”}”(hŒ%``struct i3c_generic_ibi_pool *pool``”h]”jA)�”}”(hjY8h]”hŒ!struct i3c_generic_ibi_pool *pool”…”�”}”(hj[8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjW8ubah}”(h]”h ]”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  hjS8ubjW)�”}”(hhh]”jì)�”}”(hŒthe IBI pool to free”h]”hŒthe IBI pool to free”…”�”}”(hjr8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jn8h´M  hjo8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjS8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jn8h´M  hjP8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj48ubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj”8h]”hŒ Description”…”�”}”(hj–8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’8ubah}”(h]”h ]”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¢ hj48ubjì)�”}”(hŒ1Free all IBI slots allated by a generic IBI pool.”h]”hŒ1Free all IBI slots allated by a generic IBI pool.”…”�”}”(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¡ hj48ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ'i3c_generic_ibi_alloc_pool (C function)”Œc.i3c_generic_ibi_alloc_pool”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒtstruct i3c_generic_ibi_pool * i3c_generic_ibi_alloc_pool (struct i3c_dev_desc *dev, const struct i3c_ibi_setup *req)”h]”hú)�”}”(hŒrstruct i3c_generic_ibi_pool *i3c_generic_ibi_alloc_pool(struct i3c_dev_desc *dev, const struct i3c_ibi_setup *req)”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjÙ8h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÕ8h²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ç8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕ8h²hh³jæ8h´M¼ ubh)�”}”(hhh]”j))�”}”(hŒi3c_generic_ibi_pool”h]”hŒi3c_generic_ibi_pool”…”�”}”(hjø8h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjõ8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jú8Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†Œi3c_generic_ibi_alloc_pool”sbŒc.i3c_generic_ibi_alloc_pool”†”asbuh1hhjÕ8h²hh³jæ8h´M¼ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕ8h²hh³jæ8h´M¼ ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj'9h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÕ8h²hh³jæ8h´M¼ ubj#)�”}”(hŒi3c_generic_ibi_alloc_pool”h]”j))�”}”(hj9h]”hŒi3c_generic_ibi_alloc_pool”…”�”}”(hj89h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj49ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjÕ8h²hh³jæ8h´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”…”�”}”(hjS9h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjO9ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjO9ubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hjq9h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjn9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”js9Œmodname”NŒ classname”NjŠj�)�”}”j�]”j9Œc.i3c_generic_ibi_alloc_pool”†”asbuh1hhjO9ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjO9ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj�9h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjO9ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjª9h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjO9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjK9ubjH)�”}”(hŒconst struct i3c_ibi_setup *req”h]”(jN)�”}”(hj�&h]”hŒconst”…”�”}”(hjÃ9h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj¿9ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐ9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿9ubjN)�”}”(hjQh]”hŒstruct”…”�”}”(hjÞ9h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj¿9ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿9ubh)�”}”(hhh]”j))�”}”(hŒ i3c_ibi_setup”h]”hŒ i3c_ibi_setup”…”�”}”(hjü9h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjù9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jþ9Œmodname”NŒ classname”NjŠj�)�”}”j�]”j9Œc.i3c_generic_ibi_alloc_pool”†”asbuh1hhj¿9ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿9ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj(:h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¿9ubj))�”}”(hŒreq”h]”hŒreq”…”�”}”(hj5:h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj¿9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjK9ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjÕ8h²hh³jæ8h´M¼ ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjÑ8h²hh³jæ8h´M¼ ubah}”(h]”jÌ8ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jæ8h´M¼ hjÎ8h²hubjç)�”}”(hhh]”jì)�”}”(hŒCreate a generic IBI pool”h]”hŒCreate a generic IBI pool”…”�”}”(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Î8h²hh³jæ8h´M¼ ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jw:j jw:j ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX[**Parameters** ``struct i3c_dev_desc *dev`` the device this pool will be used for ``const struct i3c_ibi_setup *req`` IBI setup request describing what the device driver expects **Description** Create a generic IBI pool based on the information provided in **req**. **Return** a valid IBI pool in case of success, an ERR_PTR() 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ŒC``struct i3c_dev_desc *dev`` the device this pool will be used for ”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Œ%the device this pool will be used for”h]”hŒ%the device this pool will be used for”…”�”}”(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Œ```const struct i3c_ibi_setup *req`` IBI setup request describing what the device driver expects ”h]”(j;)�”}”(hŒ#``const struct i3c_ibi_setup *req``”h]”jA)�”}”(hjÙ:h]”hŒconst struct i3c_ibi_setup *req”…”�”}”(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Œ;IBI setup request describing what the device driver expects”h]”hŒ;IBI setup request describing what the device driver expects”…”�”}”(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ŒGCreate a generic IBI pool based on the information provided in **req**.”h]”(hŒ?Create a generic IBI pool based on the information provided in ”…”�”}”(hj*;h²hh³Nh´Nubj)�”}”(hŒ**req**”h]”hŒreq”…”�”}”(hj2;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj*;ubhŒ.”…”�”}”(hj*;h²h•h³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)�”}”(hjM;h]”hŒReturn”…”�”}”(hjO;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjK;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Œ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_ibi_slot *s”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj$>h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj >ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj >ubh)�”}”(hhh]”j))�”}”(hŒ i3c_ibi_slot”h]”hŒ i3c_ibi_slot”…”�”}”(hjB>h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj?>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jD>Œmodname”NŒ classname”NjŠj�)�”}”j�]”jì=Œc.i3c_generic_ibi_recycle_slot”†”asbuh1hhj >ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj >ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjn>h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj >ubj))�”}”(hŒs”h]”hŒs”…”�”}”(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Æuh1jAhjq=h²hh³jƒ=h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjm=h²hh³jƒ=h´Mubah}”(h]”jh=ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jƒ=h´Mhjj=h²hubjç)�”}”(hhh]”jì)�”}”(hŒ#Return a slot to a generic IBI pool”h]”hŒ#Return a slot to a generic IBI pool”…”�”}”(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æhjj=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_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Ç>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Œ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æ>h]”hŒ!struct i3c_generic_ibi_pool *pool”…”�”}”(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Œ"the pool to return the IBI slot to”h]”hŒ"the pool to return the IBI slot to”…”�”}”(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Œ/``struct i3c_ibi_slot *s`` IBI slot to recycle ”h]”(j;)�”}”(hŒ``struct i3c_ibi_slot *s``”h]”jA)�”}”(hj?h]”hŒstruct i3c_ibi_slot *s”…”�”}”(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ŒIBI slot to recycle”h]”hŒIBI slot to recycle”…”�”}”(hj8?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j4?h´Mhj5?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j4?h´MhjÝ>ubeh}”(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´MhjÁ>ubjì)�”}”(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.”…”�”}”(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´MhjÁ>ubeh}”(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”…”�”}”(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´M5ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj›?h²hh³j­?h´M5ubj#)�”}”(hŒi3c_master_register”h]”j))�”}”(hŒi3c_master_register”h]”hŒi3c_master_register”…”�”}”(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´M5ubjB)�”}”(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Ü?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_register”†”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”…”�”}”(hj5@h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjØ?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÔ?ubjH)�”}”(hŒstruct device *parent”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjN@h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjJ@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJ@ubh)�”}”(hhh]”j))�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjl@h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hji@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jn@Œmodname”NŒ classname”NjŠj�)�”}”j�]”j@Œc.i3c_master_register”†”asbuh1hhjJ@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJ@ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj˜@h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjJ@ubj))�”}”(hŒparent”h]”hŒparent”…”�”}”(hj¥@h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjJ@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÔ?ubjH)�”}”(hŒ+const struct i3c_master_controller_ops *ops”h]”(jN)�”}”(hj�&h]”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_master_controller_ops”h]”hŒi3c_master_controller_ops”…”�”}”(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_register”†”asbuh1hhjº@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjº@ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj#Ah²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjº@ubj))�”}”(hŒops”h]”hŒops”…”�”}”(hj0Ah²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjº@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÔ?ubjH)�”}”(hŒbool secondary”h]”(j)�”}”(hjÎh]”hŒbool”…”�”}”(hjIAh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjEAubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjEAubj))�”}”(hŒ secondary”h]”hŒ secondary”…”�”}”(hjdAh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjEAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÔ?ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj›?h²hh³j­?h´M5ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj—?h²hh³j­?h´M5ubah}”(h]”j’?ah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j­?h´M5hj”?h²hubjç)�”}”(hhh]”jì)�”}”(hŒregister an I3C master”h]”hŒregister an I3C master”…”�”}”(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´M5hj‹Ah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj”?h²hh³j­?h´M5ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j j¦Aj j¦Aj ‰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)�”}”(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´M9hjªAubj0)�”}”(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Ï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´M6hjÉAubjW)�”}”(hhh]”jì)�”}”(hŒ%master used to send frames on the bus”h]”hŒ%master used to send frames on the bus”…”�”}”(hjèAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jäAh´M6hjåAubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÉAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jäAh´M6hjÆAubj5)�”}”(hŒ_``struct device *parent`` the parent device (the one that provides this I3C master controller) ”h]”(j;)�”}”(hŒ``struct device *parent``”h]”jA)�”}”(hjBh]”hŒstruct device *parent”…”�”}”(hj Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M8hjBubjW)�”}”(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!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´M7hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jBh´M8hjÆAubj5)�”}”(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)�”}”(hjBBh]”hŒ+const struct i3c_master_controller_ops *ops”…”�”}”(hjDBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj@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´M9hjhjªAubjì)�”}”(hŒ/This function takes care of everything for you:”h]”hŒ/This function takes care of everything for you:”…”�”}”(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=hjªAubjh()�”}”(hhh]”(jm()�”}”(hŒ#creates and initializes the I3C bus”h]”jì)�”}”(hjáBh]”hŒ#creates and initializes the I3C 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?hjßBubah}”(h]”h ]”h"]”h$]”h&]”uh1jl(hjÜBubjm()�”}”(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ûBh²hh³Nh´Nubj)�”}”(hŒ**parent->of_node**”h]”hŒparent->of_node”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûBubhŒ is not NULL”…”�”}”(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´M@hj÷Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jl(hjÜBubjm()�”}”(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&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´MBhj"Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jl(hjÜBubjm()�”}”(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?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´MDhj;Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jl(hjÜBubeh}”(h]”h ]”h"]”h$]”h&]”j¥)j¦)uh1jg(h³jðBh´M?hjªAubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj\Ch]”hŒReturn”…”�”}”(hj^Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZCubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MFhjªAubjì)�”}”(hŒ60 in case of success, a negative error code otherwise.”h]”hŒ60 in case of success, a negative error code otherwise.”…”�”}”(hjrCh²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´MGhjªAubeh}”(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”…”�”}”(hj¡Ch²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj�Ch²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°Ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Ch²hh³j¯Ch´MÖubj#)�”}”(hŒi3c_master_unregister”h]”j))�”}”(hŒi3c_master_unregister”h]”hŒi3c_master_unregister”…”�”}”(hjÂCh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj¾Cubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj�Ch²hh³j¯Ch´MÖubjB)�”}”(hŒ&(struct i3c_master_controller *master)”h]”jH)�”}”(hŒ$struct i3c_master_controller *master”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjÞCh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÚCubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚCubh)�”}”(hhh]”j))�”}”(hŒi3c_master_controller”h]”hŒi3c_master_controller”…”�”}”(hjüCh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjùCubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jþCŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jÄCsbŒc.i3c_master_unregister”†”asbuh1hhjÚCubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚCubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj*Dh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÚCubj))�”}”(hŒmaster”h]”hŒmaster”…”�”}”(hj7Dh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÚCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjÖCubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj�Ch²hh³j¯Ch´MÖubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj™Ch²hh³j¯Ch´MÖubah}”(h]”j”Cah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j¯Ch´MÖhj–Ch²hubjç)�”}”(hhh]”jì)�”}”(hŒunregister an I3C master”h]”hŒunregister an I3C master”…”�”}”(hjaDh²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^Dh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj–Ch²hh³j¯Ch´MÖubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jyDj jyDj ‰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)�”}”(hjƒDh]”hŒ Parameters”…”�”}”(hj…Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�Dubah}”(h]”h ]”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}Dubj0)�”}”(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¢Dh]”hŒ$struct i3c_master_controller *master”…”�”}”(hj¤Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj Dubah}”(h]”h ]”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œDubjW)�”}”(hhh]”jì)�”}”(hŒ%master used to send frames on the bus”h]”hŒ%master used to send frames on the bus”…”�”}”(hj»Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j·Dh´M×hj¸Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjœDubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j·Dh´M×hj™Dubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj}Dubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjÝDh]”hŒ Description”…”�”}”(hjßDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛDubah}”(h]”h ]”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}Dubjì)�”}”(hŒ8Basically undo everything done in i3c_master_register().”h]”hŒ8Basically undo everything done in i3c_master_register().”…”�”}”(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}Dubeh}”(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"Eh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjEh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1Eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjEh²hh³j0Eh´Mubj#)�”}”(hŒi3c_dev_disable_ibi_locked”h]”j))�”}”(hŒi3c_dev_disable_ibi_locked”h]”hŒi3c_dev_disable_ibi_locked”…”�”}”(hjCEh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj?Eubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjEh²hh³j0Eh´MubjB)�”}”(hŒ(struct i3c_dev_desc *dev)”h]”jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj_Eh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj[Eubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj[Eubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hj}Eh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjzEubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jEŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jEEsbŒc.i3c_dev_disable_ibi_locked”†”asbuh1hhj[Eubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj[Eubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj«Eh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj[Eubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj¸Eh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj[Eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjWEubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjEh²hh³j0Eh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjEh²hh³j0Eh´Mubah}”(h]”jEah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j0Eh´MhjEh²hubjç)�”}”(hhh]”jì)�”}”(hŒ*Disable IBIs coming from a specific device”h]”hŒ*Disable IBIs coming from a specific device”…”�”}”(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´MhjßEh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjEh²hh³j0Eh´Mubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j júEj júEj ‰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)�”}”(hjFh]”hŒ Parameters”…”�”}”(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´MhjþEubj0)�”}”(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#Fh]”hŒstruct i3c_dev_desc *dev”…”�”}”(hj%Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj!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´MhjFubjW)�”}”(hhh]”jì)�”}”(hŒ'device on which IBIs should be disabled”h]”hŒ'device on which IBIs should be disabled”…”�”}”(hjdesc `->ibi_lock) held.”h]”(hŒMust be called with mutex_lock(”…”�”}”(hj›Fh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dev->desc `”h]”jA)�”}”(hj¥Fh]”hŒ dev->desc”…”�”}”(hj§Fh²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj£Fubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œdev”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´Mhj›FubhŒ->ibi_lock) held.”…”�”}”(hj›Fh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÂFh´MhjþEubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjÏFh]”hŒReturn”…”�”}”(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´MhjþEubjì)�”}”(hŒ60 in case of success, a negative error core otherwise.”h]”hŒ60 in case of success, a negative error core 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´MhjþEubeh}”(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”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjGh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M2ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjGh²hh³j"Gh´M2ubj#)�”}”(hŒi3c_dev_enable_ibi_locked”h]”j))�”}”(hŒi3c_dev_enable_ibi_locked”h]”hŒi3c_dev_enable_ibi_locked”…”�”}”(hj5Gh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj1Gubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjGh²hh³j"Gh´M2ubjB)�”}”(hŒ(struct i3c_dev_desc *dev)”h]”jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjQGh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjMGubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^Gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjMGubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hjoGh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjlGubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jqGŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j7GsbŒc.i3c_dev_enable_ibi_locked”†”asbuh1hhjMGubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjMGubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj�Gh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjMGubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjªGh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjMGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjIGubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjGh²hh³j"Gh´M2ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj Gh²hh³j"Gh´M2ubah}”(h]”jGah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j"Gh´M2hj Gh²hubjç)�”}”(hhh]”jì)�”}”(hŒ.Enable IBIs from a specific device (lock held)”h]”hŒ.Enable IBIs from a specific device (lock held)”…”�”}”(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´M2hjÑGh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj Gh²hh³j"Gh´M2ubeh}”(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`` 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)�”}”(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´M6hjðGubj0)�”}”(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)�”}”(hjHh]”hŒstruct i3c_dev_desc *dev”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjHubah}”(h]”h ]”h"]”h$]”h&]”uh1j:h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M3hjHubjW)�”}”(hhh]”jì)�”}”(hŒ&device on which IBIs should be enabled”h]”hŒ&device on which IBIs should be enabled”…”�”}”(hj.Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j*Hh´M3hj+Hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j*Hh´M3hj Hubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjðGubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjPHh]”hŒ Description”…”�”}”(hjRHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNHubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M5hjðGubjì)�”}”(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.”…”�”}”(hjfHh²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´M4hjðGubjì)�”}”(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.”…”�”}”(hjuHh²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´M8hjðGubjì)�”}”(hŒ **Context**”h]”j)�”}”(hj†Hh]”hŒContext”…”�”}”(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ðGubjì)�”}”(hŒIMust be called with mutex_lock(:c:type:`dev->desc `->ibi_lock) held.”h]”(hŒMust be called with mutex_lock(”…”�”}”(hjœHh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dev->desc `”h]”jA)�”}”(hj¦Hh]”hŒ dev->desc”…”�”}”(hj¨Hh²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj¤Hubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œdev”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M<hjœHubhŒ->ibi_lock) held.”…”�”}”(hjœHh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÃHh´M<hjðGubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjÐHh]”hŒReturn”…”�”}”(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ðGubjì)�”}”(hŒ20 on success, or a negative error code on failure.”h]”hŒ20 on success, or a negative error code on failure.”…”�”}”(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ðGubeh}”(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”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjIh²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$Ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIh²hh³j#Ih´MPubj#)�”}”(hŒi3c_dev_request_ibi_locked”h]”j))�”}”(hŒi3c_dev_request_ibi_locked”h]”hŒi3c_dev_request_ibi_locked”…”�”}”(hj6Ih²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj2Iubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjIh²hh³j#Ih´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”…”�”}”(hjRIh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjNIubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_Ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNIubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hjpIh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjmIubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jrIŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j8IsbŒc.i3c_dev_request_ibi_locked”†”asbuh1hhjNIubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNIubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjžIh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjNIubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj«Ih²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjNIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjJIubjH)�”}”(hŒconst struct i3c_ibi_setup *req”h]”(jN)�”}”(hj�&h]”hŒconst”…”�”}”(hjÄIh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÀIubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀIubjN)�”}”(hjQh]”hŒstruct”…”�”}”(hjßIh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÀIubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀIubh)�”}”(hhh]”j))�”}”(hŒ i3c_ibi_setup”h]”hŒ i3c_ibi_setup”…”�”}”(hjýIh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjúIubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jÿIŒmodname”NŒ classname”NjŠj�)�”}”j�]”jŒIŒc.i3c_dev_request_ibi_locked”†”asbuh1hhjÀIubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀIubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj)Jh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÀIubj))�”}”(hŒreq”h]”hŒreq”…”�”}”(hj6Jh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjÀIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjJIubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjIh²hh³j#Ih´MPubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj Ih²hh³j#Ih´MPubah}”(h]”jIah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j#Ih´MPhj Ih²hubjç)�”}”(hhh]”jì)�”}”(hŒRequest an IBI”h]”hŒRequest an IBI”…”�”}”(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´MPhj]Jh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj Ih²hh³j#Ih´MPubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jxJj jxJj ‰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‚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´MThj|Jubj0)�”}”(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¡Jh]”hŒstruct i3c_dev_desc *dev”…”�”}”(hj£Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjŸ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´MQhj›JubjW)�”}”(hhh]”jì)�”}”(hŒ&device for which we should enable IBIs”h]”hŒ&device for which we should enable IBIs”…”�”}”(hjºJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j¶Jh´MQhj·Jubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj›Jubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j¶Jh´MQhj˜Jubj5)�”}”(hŒA``const struct i3c_ibi_setup *req`` setup requested for this IBI ”h]”(j;)�”}”(hŒ#``const struct i3c_ibi_setup *req``”h]”jA)�”}”(hjÚJh]”hŒconst struct i3c_ibi_setup *req”…”�”}”(hjÜJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjØ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´MRhjÔJubjW)�”}”(hhh]”jì)�”}”(hŒsetup requested for this IBI”h]”hŒsetup requested for this IBI”…”�”}”(hjóJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jïJh´MRhjðJubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÔJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jïJh´MRhj˜Jubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj|Jubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjKh]”hŒ Description”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjKubah}”(h]”h ]”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|Jubjì)�”}”(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 ”…”�”}”(hj+Kh²hh³Nh´Nubj)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj3Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+KubhŒ]. When this function returns, the IBI is not enabled until i3c_device_enable_ibi() is called.”…”�”}”(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´MShj|Jubjì)�”}”(hŒ **Context**”h]”j)�”}”(hjNKh]”hŒContext”…”�”}”(hjPKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjLKubah}”(h]”h ]”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|Jubjì)�”}”(hŒIMust be called with mutex_lock(:c:type:`dev->desc `->ibi_lock) held.”h]”(hŒMust be called with mutex_lock(”…”�”}”(hjdKh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dev->desc `”h]”jA)�”}”(hjnKh]”hŒ dev->desc”…”�”}”(hjpKh²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hjlKubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œdev”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´MXhjdKubhŒ->ibi_lock) held.”…”�”}”(hjdKh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j‹Kh´MXhj|Jubjì)�”}”(hŒ **Return**”h]”j)�”}”(hj˜Kh]”hŒReturn”…”�”}”(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´MZhj|Jubjì)�”}”(hŒ60 in case of success, a negative error core otherwise.”h]”hŒ60 in case of success, a negative error core otherwise.”…”�”}”(hj®Kh²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´MYhj|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”…”�”}”(hj8Lh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj5Lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j:LŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jLsbŒc.i3c_dev_free_ibi_locked”†”asbuh1hhjLubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjLubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjfLh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjLubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjsLh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjLubah}”(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”…”�”}”(hjBMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>Mubah}”(h]”h ]”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ŒIMust be called with mutex_lock(:c:type:`dev->desc `->ibi_lock) held.”h]”(hŒMust be called with mutex_lock(”…”�”}”(hjVMh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dev->desc `”h]”jA)�”}”(hj`Mh]”hŒ dev->desc”…”�”}”(hjbMh²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj^Mubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œdev”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:7: ./drivers/i3c/master.c”h´M‹hjVMubhŒ->ibi_lock) held.”…”�”}”(hjVMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j}Mh´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 jNj jNj ‰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&]”uh1jhj NubhŒ:”…”�”}”(hj Nh²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)�”}”(hj:Nh]”hŒMembers”…”�”}”(hjhjŒOh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjBOh²hh³jZOh´K3ubeh}”(h]”h ]”(j„Œstruct”eh"]”h$]”h&]”j j„j j§Oj j§Oj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hXl**Definition**:: struct i2c_dev_boardinfo { struct list_head node; struct i2c_board_info base; u8 lvr; }; **Members** ``node`` used to insert the boardinfo object in the I2C boardinfo list ``base`` regular I2C board information ``lvr`` LVR (Legacy Virtual Register) needed by the I3C core to know about the I2C device limitations”h]”(jì)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj³Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯OubhŒ:”…”�”}”(hj¯Oh²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´KBhj«Oubj(N)�”}”(hŒdstruct i2c_dev_boardinfo { struct list_head node; struct i2c_board_info base; u8 lvr; };”h]”hŒdstruct i2c_dev_boardinfo { struct list_head node; struct i2c_board_info base; u8 lvr; };”…”�”}”hjÌOsbah}”(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´KDhj«Oubjì)�”}”(hŒ **Members**”h]”j)�”}”(hjÝOh]”hŒMembers”…”�”}”(hjßOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛOubah}”(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«Oubj0)�”}”(hhh]”(j5)�”}”(hŒG``node`` used to insert the boardinfo object in the I2C boardinfo list ”h]”(j;)�”}”(hŒ``node``”h]”jA)�”}”(hjüOh]”hŒnode”…”�”}”(hjþOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjúOubah}”(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öOubjW)�”}”(hhh]”jì)�”}”(hŒ=used to insert the boardinfo object in the I2C boardinfo list”h]”hŒ=used to insert the boardinfo object in the I2C boardinfo list”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jPh´K@hjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjöOubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jPh´K@hjóOubj5)�”}”(hŒ'``base`` regular I2C board information ”h]”(j;)�”}”(hŒ``base``”h]”jA)�”}”(hj5Ph]”hŒbase”…”�”}”(hj7Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj3Pubah}”(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´KAhj/PubjW)�”}”(hhh]”jì)�”}”(hŒregular I2C board information”h]”hŒregular I2C board information”…”�”}”(hjNPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jJPh´KAhjKPubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj/Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jJPh´KAhjóOubj5)�”}”(hŒe``lvr`` LVR (Legacy Virtual Register) needed by the I3C core to know about the I2C device limitations”h]”(j;)�”}”(hŒ``lvr``”h]”jA)�”}”(hjnPh]”hŒlvr”…”�”}”(hjpPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjlPubah}”(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´KBhjhPubjW)�”}”(hhh]”jì)�”}”(hŒ]LVR (Legacy Virtual Register) needed by the I3C core to know about the I2C device limitations”h]”hŒ]LVR (Legacy Virtual Register) needed by the I3C core to know about the I2C device limitations”…”�”}”(hj‡Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jƒPh´KBhj„Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjhPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jƒPh´KBhjóOubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj«Oubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´Nubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj°Ph]”hŒ Description”…”�”}”(hj²Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®Pubah}”(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´KFhhÊh²hubjì)�”}”(hŒ„This structure is used to attach board-level information to an I2C device. Each I2C device connected on the I3C bus should have one.”h]”hŒ„This structure is used to attach board-level information to an I2C device. Each I2C device connected on the I3C bus should have one.”…”�”}”(hjÆPh²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´KChhÊh²hubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒi2c_dev_desc (C struct)”Œc.i2c_dev_desc”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ i2c_dev_desc”h]”hú)�”}”(hŒstruct i2c_dev_desc”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hjîPh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjêPh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KIubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüPh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjêPh²hh³jûPh´KIubj#)�”}”(hŒ i2c_dev_desc”h]”j))�”}”(hjèPh]”hŒ i2c_dev_desc”…”�”}”(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´KIubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjæPh²hh³jûPh´KIubah}”(h]”jáPah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jûPh´KIhjãPh²hubjç)�”}”(hhh]”jì)�”}”(hŒI2C device descriptor”h]”hŒI2C device descriptor”…”�”}”(hj0Qh²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´KNhj-Qh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjãPh²hh³jûPh´KIubeh}”(h]”h ]”(j„Œstruct”eh"]”h$]”h&]”j j„j jHQj jHQj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX›**Definition**:: struct i2c_dev_desc { struct i3c_i2c_dev_desc common; struct i2c_client *dev; u16 addr; u8 lvr; }; **Members** ``common`` common part of the I2C device descriptor ``dev`` I2C device object registered to the I2C framework ``addr`` I2C device address ``lvr`` LVR (Legacy Virtual Register) needed by the I3C core to know about the I2C device limitations”h]”(jì)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjTQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPQubhŒ:”…”�”}”(hjPQh²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´KRhjLQubj(N)�”}”(hŒrstruct i2c_dev_desc { struct i3c_i2c_dev_desc common; struct i2c_client *dev; u16 addr; u8 lvr; };”h]”hŒrstruct i2c_dev_desc { struct i3c_i2c_dev_desc common; struct i2c_client *dev; u16 addr; u8 lvr; };”…”�”}”hjmQsbah}”(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´KThjLQubjì)�”}”(hŒ **Members**”h]”j)�”}”(hj~Qh]”hŒMembers”…”�”}”(hj€Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|Qubah}”(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[hjLQubj0)�”}”(hhh]”(j5)�”}”(hŒ4``common`` common part of the I2C device descriptor ”h]”(j;)�”}”(hŒ ``common``”h]”jA)�”}”(hj�Qh]”hŒcommon”…”�”}”(hjŸQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj›Qubah}”(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´KPhj—QubjW)�”}”(hhh]”jì)�”}”(hŒ(common part of the I2C device descriptor”h]”hŒ(common part of the I2C device descriptor”…”�”}”(hj¶Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j²Qh´KPhj³Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj—Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j²Qh´KPhj”Qubj5)�”}”(hŒ:``dev`` I2C device object registered to the I2C framework ”h]”(j;)�”}”(hŒ``dev``”h]”jA)�”}”(hjÖQh]”hŒdev”…”�”}”(hjØQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÔQubah}”(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´KQhjÐQubjW)�”}”(hhh]”jì)�”}”(hŒ1I2C device object registered to the I2C framework”h]”hŒ1I2C device object registered to the I2C framework”…”�”}”(hjïQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jëQh´KQhjìQubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÐQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jëQh´KQhj”Qubj5)�”}”(hŒ``addr`` I2C device address ”h]”(j;)�”}”(hŒ``addr``”h]”jA)�”}”(hjRh]”hŒaddr”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj Rubah}”(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 RubjW)�”}”(hhh]”jì)�”}”(hŒI2C device address”h]”hŒI2C device address”…”�”}”(hj(Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j$Rh´KRhj%Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj Rubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j$Rh´KRhj”Qubj5)�”}”(hŒe``lvr`` LVR (Legacy Virtual Register) needed by the I3C core to know about the I2C device limitations”h]”(j;)�”}”(hŒ``lvr``”h]”jA)�”}”(hjHRh]”hŒlvr”…”�”}”(hjJRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjFRubah}”(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´KShjBRubjW)�”}”(hhh]”jì)�”}”(hŒ]LVR (Legacy Virtual Register) needed by the I3C core to know about the I2C device limitations”h]”hŒ]LVR (Legacy Virtual Register) needed by the I3C core to know about the I2C device limitations”…”�”}”(hjaRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j]Rh´KShj^Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjBRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j]Rh´KShj”Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjLQubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´Nubjì)�”}”(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³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KWhhÊh²hubjì)�”}”(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 :c:type:`struct_i3c_master_controller->ops `->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 ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj¨Rubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ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 ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hjÖRubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ _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 ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hjúRubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ_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”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j:Th´Kihj;Tubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjTubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j:Th´KihjâSubj5)�”}”(hŒ5``len`` length of the payload associated to this IBI ”h]”(j;)�”}”(hŒ``len``”h]”jA)�”}”(hj^Th]”hŒlen”…”�”}”(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´KjhjXTubjW)�”}”(hhh]”jì)�”}”(hŒ,length of the payload associated to this IBI”h]”hŒ,length of the payload associated to this IBI”…”�”}”(hjwTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jsTh´KjhjtTubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjXTubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jsTh´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&]”uh1jMhj#Uh²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Œ ”…”�”}”(hj5Uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj#Uh²hh³j4Uh´Kwubj#)�”}”(hŒi3c_device_ibi_info”h]”j))�”}”(hj!Uh]”hŒi3c_device_ibi_info”…”�”}”(hjGUh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjCUubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj#Uh²hh³j4Uh´Kwubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjUh²hh³j4Uh´Kwubah}”(h]”jUah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j4Uh´KwhjUh²hubjç)�”}”(hhh]”jì)�”}”(hŒ-IBI information attached to a specific device”h]”hŒ-IBI information attached to a specific device”…”�”}”(hjiUh²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}hjfUh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjUh²hh³j4Uh´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�hj…Uubj(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ƒhj…Uubjì)�”}”(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�hj…Uubj0)�”}”(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)�”}”(hjVh]”hŒ pending_ibis”…”�”}”(hjVh²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ƒhj VubjW)�”}”(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&]”uh1jVhj Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j%Vh´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)�”}”(hjJVh]”hŒmax_payload_len”…”�”}”(hjLVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjHVubah}”(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ˆhjDVubjW)�”}”(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”…”�”}”(hjcVh²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&]”uh1jVhjDVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j_Vh´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‰hj~VubjW)�”}”(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&]”uh1jVhj~Vubeh}”(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.”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j Wh´K‹hj Wubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjðVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j Wh´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”…”�”}”(hj1Wh²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”…”�”}”(hjHWh²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ŒhjEWubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj)Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jDWh´K�hjÍUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj…Uubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´Nubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjrWh]”hŒ Description”…”�”}”(hjtWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjpWubah}”(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 ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj�Wubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ_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”…”�”}”(hjXh²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”…”�”}”(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!Xh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj×Wh²hh³jïWh´K�ubeh}”(h]”h ]”(j„Œstruct”eh"]”h$]”h&]”j j„j jYh]”hŒstatic_addr_method”…”�”}”(hj@Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjibi ` ``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()”…”�”}”(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ØZubj5)�”}”(hŒ[``ibi_lock`` lock used to protect the :c:type:`struct_i3c_device->ibi ` ”h]”(j;)�”}”(hŒ ``ibi_lock``”h]”jA)�”}”(hjT[h]”hŒibi_lock”…”�”}”(hjV[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjR[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ÓhjN[ubjW)�”}”(hhh]”jì)�”}”(hŒMlock used to protect the :c:type:`struct_i3c_device->ibi `”h]”(hŒlock used to protect the ”…”�”}”(hjm[h²hh³Nh´Nubh)�”}”(hŒ4:c:type:`struct_i3c_device->ibi `”h]”jA)�”}”(hjw[h]”hŒstruct_i3c_device->ibi”…”�”}”(hjy[h²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hju[ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œstruct_i3c_device”uh1hh³ji[h´KÓhjm[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³ji[h´KÓhjj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjN[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³ji[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”…”�”}”(hj9\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Úhj6\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j5\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)�”}”(hjc\h]”hŒ Description”…”�”}”(hje\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhja\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 (”…”�”}”(hjy\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 ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj�\ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ _i3c_device”uh1hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´KÚhjy\ubhŒ).”…”�”}”(hjy\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; };”…”�”}”hjC]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)�”}”(hjT]h]”hŒMembers”…”�”}”(hjV]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjR]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)�”}”(hjs]h]”hŒdev”…”�”}”(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´Kíhjm]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&]”uh1jVhjm]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jˆ]h´Kíhjj]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ðhjj]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ñhjj]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”…”�”}”(hj8^h²hh³•+Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j4^h´Kòhj5^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j4^h´Kòhjj]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj"]ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´Nubjì)�”}”(hŒ**Description**”h]”j)�”}”(hja^h]”hŒ Description”…”�”}”(hjc^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ì)�”}”(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 ”…”�”}”(hjw^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 ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj^ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ _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óhjw^ubhŒs one. All I3C devs on the I3C bus are represented, including I3C masters. For each of them, we have an instance of ”…”�”}”(hjw^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 ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj£^ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ i3c_device”uh1hh³jž^h´Kóhjw^ubhŒ.”…”�”}”(hjw^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)�”}”(hj+"h]”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´Mhj$_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjÚ^h²hh³jò^h´Kûubeh}”(h]”h ]”(j„Œenum”eh"]”h$]”h&]”j j„j j?_j j?_j ‰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)�”}”(hjI_h]”hŒ Constants”…”�”}”(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´MhjC_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)�”}”(hjh_h]”hŒI3C_BUS_MODE_PURE”…”�”}”(hjj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjf_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´Mhjb_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´Mhj~_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjb_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j}_h´Mhj__ubj5)�”}”(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$hj__ubj5)�”}”(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*hj__ubj5)�”}”(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äaubj0)�”}”(hhh]”(j5)�”}”(hŒ'``I3C_ADDR_SLOT_FREE`` address is free ”h]”(j;)�”}”(hŒ``I3C_ADDR_SLOT_FREE``”h]”jA)�”}”(hj bh]”hŒI3C_ADDR_SLOT_FREE”…”�”}”(hj bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjbubah}”(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´MAhjbubjW)�”}”(hhh]”jì)�”}”(hŒaddress is free”h]”hŒaddress is free”…”�”}”(hj"bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jbh´MAhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jbh´MAhjbubj5)�”}”(hŒ+``I3C_ADDR_SLOT_RSVD`` address is reserved ”h]”(j;)�”}”(hŒ``I3C_ADDR_SLOT_RSVD``”h]”jA)�”}”(hjBbh]”hŒI3C_ADDR_SLOT_RSVD”…”�”}”(hjDbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj@bubah}”(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`) ``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”…”�”}”(hjFdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBdubhŒ:”…”�”}”(hjBdh²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´MZhj>dubj(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; };”…”�”}”hj_dsbah}”(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>dubjì)�”}”(hŒ **Members**”h]”j)�”}”(hjpdh]”hŒMembers”…”�”}”(hjrdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjndubah}”(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>dubj0)�”}”(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�dh]”hŒ cur_master”…”�”}”(hj‘dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj�dubah}”(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‰dubjW)�”}”(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¨dh²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¥dubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj‰dubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j¤dh´M[hj†dubj5)�”}”(hŒ?``id`` bus ID. Assigned by the framework when register the bus ”h]”(j;)�”}”(hŒ``id``”h]”jA)�”}”(hjÉdh]”hŒid”…”�”}”(hjËdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÇdubah}”(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ÃdubjW)�”}”(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âdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÞdh´M\hjßdubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÃdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÞdh´M\hj†dubj5)�”}”(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)�”}”(hjeh]”hŒ addrslots”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjeubah}”(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üdubjW)�”}”(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 ”…”�”}”(hjeh²hh³Nh´Nubh)�”}”(hŒ::c:type:`enum i3c_addr_slot_status `”h]”jA)�”}”(hj%eh]”hŒenum i3c_addr_slot_status”…”�”}”(hj'eh²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj#eubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ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]hjeubhŒ)”…”�”}”(hjeh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jBeh´M]hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjüdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jeh´M_hj†dubj5)�”}”(hŒC``mode`` bus mode (see :c:type:`enum i3c_bus_mode `) ”h]”(j;)�”}”(hŒ``mode``”h]”jA)�”}”(hj_eh]”hŒmode”…”�”}”(hjaeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj]eubah}”(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`hjYeubjW)�”}”(hhh]”jì)�”}”(hŒ9bus mode (see :c:type:`enum i3c_bus_mode `)”h]”(hŒbus mode (see ”…”�”}”(hjxeh²hh³Nh´Nubh)�”}”(hŒ*:c:type:`enum i3c_bus_mode `”h]”jA)�”}”(hj‚eh]”hŒenum i3c_bus_mode”…”�”}”(hj„eh²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hj€eubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ i3c_bus_mode”uh1hh³jteh´M`hjxeubhŒ)”…”�”}”(hjxeh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jteh´M`hjueubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjYeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jteh´M`hj†dubj5)�”}”(hŒ2``scl_rate`` SCL signal rate for I3C and I2C mode ”h]”(j;)�”}”(hŒ ``scl_rate``”h]”jA)�”}”(hj»eh]”hŒscl_rate”…”�”}”(hj½eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj¹eubah}”(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µeubjW)�”}”(hhh]”jì)�”}”(hŒ$SCL signal rate for I3C and I2C mode”h]”hŒ$SCL signal rate for I3C and I2C mode”…”�”}”(hjÔeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÐeh´MdhjÑeubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjµeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÐeh´Mdhj†dubj5)�”}”(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ôeh]”hŒ scl_rate.i3c”…”�”}”(hjöeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjòeubah}”(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îeubjW)�”}”(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 fh²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 fubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjîeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j fh´Mbhj†dubj5)�”}”(hŒL``scl_rate.i2c`` maximum rate for the clock signal when doing I2C transfers ”h]”(j;)�”}”(hŒ``scl_rate.i2c``”h]”jA)�”}”(hj.fh]”hŒ scl_rate.i2c”…”�”}”(hj0fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj,fubah}”(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(fubjW)�”}”(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”…”�”}”(hjGfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jCfh´MchjDfubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj(fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jCfh´Mchj†dubj5)�”}”(hŒE``devs`` 2 lists containing all I3C/I2C devices connected to the bus ”h]”(j;)�”}”(hŒ``devs``”h]”jA)�”}”(hjgfh]”hŒdevs”…”�”}”(hjifh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjefubah}”(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´MkhjafubjW)�”}”(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”…”�”}”(hj€fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j|fh´Mkhj}fubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjafubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j|fh´Mkhj†dubj5)�”}”(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 fh]”hŒdevs.i3c”…”�”}”(hj¢fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjžfubah}”(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šfubjW)�”}”(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¹fh²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¶fubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjšfubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jµfh´Mghj†dubj5)�”}”(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Úfh]”hŒdevs.i2c”…”�”}”(hjÜfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjØfubah}”(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ÔfubjW)�”}”(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ófh²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ðfubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÔfubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jïfh´Mjhj†dubj5)�”}”(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)�”}”(hjgh]”hŒlock”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjgubah}”(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´MthjgubjW)�”}”(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-gh²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*gubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j)gh´Mthj†dubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj>dubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´Nubjì)�”}”(hŒ**Description**”h]”j)�”}”(hjWgh]”hŒ Description”…”�”}”(hjYgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUgubah}”(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.”…”�”}”(hjmgh²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•gh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj‘gh²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£gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘gh²hh³j¢gh´M}ubj#)�”}”(hŒi3c_master_controller_ops”h]”j))�”}”(hj�gh]”hŒi3c_master_controller_ops”…”�”}”(hjµgh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj±gubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj‘gh²hh³j¢gh´M}ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj�gh²hh³j¢gh´M}ubah}”(h]”jˆgah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j¢gh´M}hjŠgh²hubjç)�”}”(hhh]”jì)�”}”(hŒI3C master methods”h]”hŒI3C master methods”…”�”}”(hj×gh²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Ôgh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjŠgh²hh³j¢gh´M}ubeh}”(h]”h ]”(j„Œstruct”eh"]”h$]”h&]”j j„j jïgj jïgj ‰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ûgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj÷gubhŒ:”…”�”}”(hj÷gh²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ógubj(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); };”…”�”}”hjhsbah}”(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ógubjì)�”}”(hŒ **Members**”h]”j)�”}”(hj%hh]”hŒMembers”…”�”}”(hj'hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#hubah}”(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ógubj0)�”}”(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)�”}”(hjDhh]”hŒbus_init”…”�”}”(hjFhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjBhubah}”(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>hubjW)�”}”(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.”…”�”}”(hj]hh²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ŽhjZhubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj>hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jYhh´M‘hj;hubj5)�”}”(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)�”}”(hj~hh]”hŒ bus_cleanup”…”�”}”(hj€hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj|hubah}”(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”hjxhubjW)�”}”(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—hh²hh³Nh´Nubh)�”}”(hŒM:c:type:`i3c_master_controller_ops->bus_init\(\) `”h]”jA)�”}”(hj¡hh]”hŒ%i3c_master_controller_ops->bus_init()”…”�”}”(hj£hh²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hjŸhubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ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—hubhŒ. This method is optional.”…”�”}”(hj—hh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j¾hh´M’hj”hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjxhubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j“hh´M”hj;hubj5)�”}”(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Ûhh]”hŒattach_i3c_dev”…”�”}”(hjÝhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÙhubah}”(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ÕhubjW)�”}”(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ôhh²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ñhubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÕhubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jðhh´M�hj;hubj5)�”}”(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)�”}”(hjih]”hŒreattach_i3c_dev”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjiubah}”(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£hjiubjW)�”}”(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.ih²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+iubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjiubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j*ih´M£hj;hubj5)�”}”(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)�”}”(hjOih]”hŒdetach_i3c_dev”…”�”}”(hjQih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjMiubah}”(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¦hjIiubjW)�”}”(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.”…”�”}”(hjhih²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¤hjeiubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjIiubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jdih´M¦hj;hubj5)�”}”(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‰ih]”hŒdo_daa”…”�”}”(hj‹ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj‡iubah}”(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ƒiubjW)�”}”(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¢ih²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Ÿiubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjƒiubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jžih´M¬hj;hubj5)�”}”(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Ãih]”hŒsupports_ccc_cmd”…”�”}”(hjÅih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÁiubah}”(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½iubjW)�”}”(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Üih²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Ùiubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj½iubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jØih´M°hj;hubj5)�”}”(hŒ>``send_ccc_cmd`` send a CCC command This method is mandatory. ”h]”(j;)�”}”(hŒ``send_ccc_cmd``”h]”jA)�”}”(hjýih]”hŒ send_ccc_cmd”…”�”}”(hjÿih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjûiubah}”(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÷iubjW)�”}”(hhh]”jì)�”}”(hŒ,send a CCC command This method is mandatory.”h]”hŒ,send a CCC command This method is mandatory.”…”�”}”(hjjh²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±hjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj÷iubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jjh´M²hj;hubj5)�”}”(hŒT``i3c_xfers`` do one or several I3C SDR or HDR transfers. This method is mandatory. ”h]”(j;)�”}”(hŒ ``i3c_xfers``”h]”jA)�”}”(hj7jh]”hŒ i3c_xfers”…”�”}”(hj9jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj5jubah}”(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´hj1jubjW)�”}”(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.”…”�”}”(hjPjh²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³hjMjubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj1jubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jLjh´M´hj;hubj5)�”}”(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)�”}”(hjqjh]”hŒattach_i2c_dev”…”�”}”(hjsjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjojubah}”(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¸hjkjubjW)�”}”(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Šjh²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‡jubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjkjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j†jh´M¸hj;hubj5)�”}”(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«jh]”hŒdetach_i2c_dev”…”�”}”(hj­jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj©jubah}”(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¥jubjW)�”}”(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Äjh²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Ájubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¥jubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÀjh´M»hj;hubj5)�”}”(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åjh]”hŒ i2c_xfers”…”�”}”(hjçjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjãjubah}”(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ßjubjW)�”}”(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þjh²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ûjubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjßjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jújh´MÂhj;hubj5)�”}”(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)�”}”(hjkh]”hŒ request_ibi”…”�”}”(hj!kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjkubah}”(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ÉhjkubjW)�”}”(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 -”…”�”}”(hj8kh²hh³Nh´NubjA)�”}”(hŒ ``EBUSY``”h]”hŒEBUSY”…”�”}”(hj@kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj8kubhŒR if there’s no more space for an extra IBI registration This method is optional.”…”�”}”(hj8kh²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Ãhj5kubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j4kh´MÉhj;hubj5)�”}”(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)�”}”(hjkkh]”hŒfree_ibi”…”�”}”(hjmkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjikubah}”(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ÌhjekubjW)�”}”(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„kh²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�kubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjekubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j€kh´MÌhj;hubj5)�”}”(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¥kh]”hŒ enable_ibi”…”�”}”(hj§kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj£kubah}”(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ŸkubjW)�”}”(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¾kh²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»kubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjŸkubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jºkh´MÒhj;hubj5)�”}”(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ßkh]”hŒ disable_ibi”…”�”}”(hjákh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÝkubah}”(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ÙkubjW)�”}”(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økh²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õkubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÙkubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jôkh´MÖhj;hubj5)�”}”(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)�”}”(hjlh]”hŒrecycle_ibi_slot”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjlubah}”(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ÜhjlubjW)�”}”(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.”…”�”}”(hj2lh²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/lubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j.lh´MÜhj;hubj5)�”}”(hŒ1``enable_hotjoin`` enable hot join event detect. ”h]”(j;)�”}”(hŒ``enable_hotjoin``”h]”jA)�”}”(hjSlh]”hŒenable_hotjoin”…”�”}”(hjUlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjQlubah}”(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ÝhjMlubjW)�”}”(hhh]”jì)�”}”(hŒenable hot join event detect.”h]”hŒenable hot join event detect.”…”�”}”(hjllh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jhlh´MÝhjilubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjMlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jhlh´MÝhj;hubj5)�”}”(hŒ3``disable_hotjoin`` disable hot join event detect. ”h]”(j;)�”}”(hŒ``disable_hotjoin``”h]”jA)�”}”(hjŒlh]”hŒdisable_hotjoin”…”�”}”(hjŽlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjŠlubah}”(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†lubjW)�”}”(hhh]”jì)�”}”(hŒdisable hot join event detect.”h]”hŒdisable hot join event detect.”…”�”}”(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;hubj5)�”}”(hŒ1``set_speed`` adjust I3C open drain mode timing. ”h]”(j;)�”}”(hŒ ``set_speed``”h]”jA)�”}”(hjÅlh]”hŒ set_speed”…”�”}”(hjÇlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÃlubah}”(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¿lubjW)�”}”(hhh]”jì)�”}”(hŒ"adjust I3C open drain mode timing.”h]”hŒ"adjust I3C open drain mode timing.”…”�”}”(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;hubj5)�”}”(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þlh]”hŒset_dev_nack_retry”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjülubah}”(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ølubjW)�”}”(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. ``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½mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹mubhŒ:”…”�”}”(hj¹mh²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µmubj(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; 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; struct workqueue_struct *wq; struct work_struct hj_work; struct work_struct reg_work; unsigned int dev_nack_retry_count; };”…”�”}”hjÖmsbah}”(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µmubjì)�”}”(hŒ **Members**”h]”j)�”}”(hjçmh]”hŒMembers”…”�”}”(hjémh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjåmubah}”(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µmubj0)�”}”(hhh]”(j5)�”}”(hŒ4``dev`` device to be registered to the device-model ”h]”(j;)�”}”(hŒ``dev``”h]”jA)�”}”(hjnh]”hŒdev”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjnubah}”(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´MhjnubjW)�”}”(hhh]”jì)�”}”(hŒ+device to be registered to the device-model”h]”hŒ+device to be registered to the device-model”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jnh´Mhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jnh´Mhjýmubj5)�”}”(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)�”}”(hj?nh]”hŒthis”…”�”}”(hjAnh²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´Mhj9nubjW)�”}”(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”…”�”}”(hjXnh²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´MhjUnubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj9nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jTnh´Mhjýmubj5)�”}”(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)�”}”(hjynh]”hŒi2c”…”�”}”(hj{nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjwnubah}”(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 hjsnubjW)�”}”(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’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´Mhj�nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjsnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jŽnh´M hjýmubj5)�”}”(hŒf``ops`` master operations. See :c:type:`struct i3c_master_controller_ops ` ”h]”(j;)�”}”(hŒ``ops``”h]”jA)�”}”(hj³nh]”hŒops”…”�”}”(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´M hj­nubjW)�”}”(hhh]”jì)�”}”(hŒ]master operations. See :c:type:`struct i3c_master_controller_ops `”h]”(hŒmaster operations. See ”…”�”}”(hjÌnh²hh³Nh´Nubh)�”}”(hŒF:c:type:`struct i3c_master_controller_ops `”h]”jA)�”}”(hjÖnh]”hŒ struct i3c_master_controller_ops”…”�”}”(hjØnh²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hjÔnubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œi3c_master_controller_ops”uh1hh³jÈnh´M hjÌnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jÈnh´M hjÉnubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj­nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÈnh´M hjýmubj5)�”}”(hŒ7``secondary`` true if the master is a secondary master ”h]”(j;)�”}”(hŒ ``secondary``”h]”jA)�”}”(hj oh]”hŒ secondary”…”�”}”(hj oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj oubah}”(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 hjoubjW)�”}”(hhh]”jì)�”}”(hŒ(true if the master is a secondary master”h]”hŒ(true if the master is a secondary master”…”�”}”(hj$oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j oh´M hj!oubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j oh´M hjýmubj5)�”}”(hŒ7``init_done`` true when the bus initialization is done ”h]”(j;)�”}”(hŒ ``init_done``”h]”jA)�”}”(hjDoh]”hŒ init_done”…”�”}”(hjFoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjBoubah}”(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>oubjW)�”}”(hhh]”jì)�”}”(hŒ(true when the bus initialization is done”h]”hŒ(true when the bus initialization is done”…”�”}”(hj]oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jYoh´M hjZoubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj>oubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jYoh´M hjýmubj5)�”}”(hŒ/``hotjoin`` true if the master support hotjoin ”h]”(j;)�”}”(hŒ ``hotjoin``”h]”jA)�”}”(hj}oh]”hŒhotjoin”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj{oubah}”(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´MhjwoubjW)�”}”(hhh]”jì)�”}”(hŒ"true if the master support hotjoin”h]”hŒ"true if the master support hotjoin”…”�”}”(hj–oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j’oh´Mhj“oubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjwoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j’oh´Mhjýmubj5)�”}”(hŒ+``rpm_allowed`` true if Runtime PM allowed ”h]”(j;)�”}”(hŒ``rpm_allowed``”h]”jA)�”}”(hj¶oh]”hŒ rpm_allowed”…”�”}”(hj¸oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj´oubah}”(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°oubjW)�”}”(hhh]”jì)�”}”(hŒtrue if Runtime PM allowed”h]”hŒtrue if Runtime PM allowed”…”�”}”(hjÏoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jËoh´MhjÌoubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj°oubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jËoh´Mhjýmubj5)�”}”(hŒM``rpm_ibi_allowed`` true if IBI and Hot-Join allowed while runtime suspended ”h]”(j;)�”}”(hŒ``rpm_ibi_allowed``”h]”jA)�”}”(hjïoh]”hŒrpm_ibi_allowed”…”�”}”(hjñoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjíoubah}”(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éoubjW)�”}”(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”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jph´Mhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjéoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jph´Mhjýmubj5)�”}”(hŒ)``ibi_wakeup`` IBI can wakeup the system ”h]”(j;)�”}”(hŒ``ibi_wakeup``”h]”jA)�”}”(hj(ph]”hŒ ibi_wakeup”…”�”}”(hj*ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj&pubah}”(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"pubjW)�”}”(hhh]”jì)�”}”(hŒIBI can wakeup the system”h]”hŒIBI can wakeup the system”…”�”}”(hjAph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j=ph´Mhj>pubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj"pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j=ph´Mhjýmubj5)�”}”(hŒH``shutting_down`` set to true when master begins shutdown or unregister ”h]”(j;)�”}”(hŒ``shutting_down``”h]”jA)�”}”(hjaph]”hŒ shutting_down”…”�”}”(hjcph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj_pubah}”(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[pubjW)�”}”(hhh]”jì)�”}”(hŒ5set to true when master begins shutdown or unregister”h]”hŒ5set to true when master begins shutdown or unregister”…”�”}”(hjzph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jvph´Mhjwpubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj[pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jvph´Mhjýmubj5)�”}”(hŒO``boardinfo`` board-level information attached to devices connected on the bus ”h]”(j;)�”}”(hŒ ``boardinfo``”h]”jA)�”}”(hjšph]”hŒ boardinfo”…”�”}”(hjœph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj˜pubah}”(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”pubjW)�”}”(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³ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j¯ph´Mhj°pubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj”pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j¯ph´Mhjýmubj5)�”}”(hŒ1``boardinfo.i3c`` list of I3C boardinfo objects ”h]”(j;)�”}”(hŒ``boardinfo.i3c``”h]”jA)�”}”(hjÓph]”hŒ boardinfo.i3c”…”�”}”(hjÕph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÑpubah}”(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ÍpubjW)�”}”(hhh]”jì)�”}”(hŒlist of I3C boardinfo objects”h]”hŒlist of I3C boardinfo objects”…”�”}”(hjìph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jèph´Mhjépubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÍpubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jèph´Mhjýmubj5)�”}”(hŒ0``boardinfo.i2c`` list of I2C boardinfo objects ”h]”(j;)�”}”(hŒ``boardinfo.i2c``”h]”jA)�”}”(hj qh]”hŒ boardinfo.i2c”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj qubah}”(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´MhjqubjW)�”}”(hhh]”jì)�”}”(hŒlist of I2C boardinfo objects”h]”hŒlist of I2C boardinfo objects”…”�”}”(hj%qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j!qh´Mhj"qubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j!qh´Mhjýmubj5)�”}”(hŒ'``bus`` I3C bus exposed by this master ”h]”(j;)�”}”(hŒ``bus``”h]”jA)�”}”(hjEqh]”hŒbus”…”�”}”(hjGqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjCqubah}”(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?qubjW)�”}”(hhh]”jì)�”}”(hŒI3C bus exposed by this master”h]”hŒI3C bus exposed by this master”…”�”}”(hj^qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jZqh´Mhj[qubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj?qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jZqh´Mhjýmubj5)�”}”(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)�”}”(hj~qh]”hŒ addr_method”…”�”}”(hj€qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj|qubah}”(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´MhjxqubjW)�”}”(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—qh²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”qubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjxqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j“qh´Mhjýmubj5)�”}”(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¸qh]”hŒwq”…”�”}”(hjºqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj¶qubah}”(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²qubjW)�”}”(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Ñqh²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Îqubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj²qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jÍqh´M hjýmubj5)�”}”(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òqh]”hŒhj_work”…”�”}”(hjôqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjðqubah}”(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ìqubjW)�”}”(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 rh²hh³Nh´Nubj)�”}”(hŒ**wq**”h]”hŒwq”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj rubhŒ by i3c_master_queue_hotjoin()”…”�”}”(hj rh²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!hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjìqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jrh´M"hjýmubj5)�”}”(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)�”}”(hj>rh]”hŒreg_work”…”�”}”(hj@rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj` 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ãrh²hh³Nh´Nubh)�”}”(hŒ>:c:type:`struct i3c_master_controller `”h]”jA)�”}”(hjírh]”hŒstruct i3c_master_controller”…”�”}”(hjïrh²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hjërubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œ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ãrubhŒR has to be registered to the I3C subsystem through i3c_master_register(). None of ”…”�”}”(hjãrh²hh³Nh´Nubh)�”}”(hŒ>:c:type:`struct i3c_master_controller `”h]”jA)�”}”(hjsh]”hŒstruct i3c_master_controller”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”(jj„Œc-type”eh"]”h$]”h&]”uh1j@hjsubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j'Œ refdomain”j„Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŠj-j0Œi3c_master_controller”uh1hh³j sh´M(hjãrubhŒV fields should be set manually, just pass appropriate values to i3c_master_register().”…”�”}”(hjãrh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j sh´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))�”}”(hjKsh]”hŒi3c_bus_for_each_i2cdev”…”�”}”(hjUsh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjQsubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjMsh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MGubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjIsh²hh³jhsh´MGubah}”(h]”jDsah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jhsh´MGhjFsh²hubjç)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jæhjFsh²hh³jhsh´MGubeh}”(h]”h ]”(j„Œmacro”eh"]”h$]”h&]”j j„j j�sj j�sj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubjì)�”}”(hŒ&``i3c_bus_for_each_i2cdev (bus, dev)``”h]”jA)�”}”(hj‡sh]”hŒ"i3c_bus_for_each_i2cdev (bus, dev)”…”�”}”(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´MIhhÊ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£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´MGhjŸsubah}”(h]”h ]”h"]”h$]”h&]”uh1j�sh³j±sh´MGhhÊ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¾sh]”hŒ Parameters”…”�”}”(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´MKhj¸subj0)�”}”(hhh]”(j5)�”}”(hŒ``bus`` the I3C bus ”h]”(j;)�”}”(hŒ``bus``”h]”jA)�”}”(hjÝsh]”hŒbus”…”�”}”(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´MHhj×subjW)�”}”(hhh]”jì)�”}”(hŒ the I3C bus”h]”hŒ the I3C bus”…”�”}”(hjösh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jòsh´MHhjósubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj×subeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jòsh´MHhjÔsubj5)�”}”(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)�”}”(hjth]”hŒdev”…”�”}”(hjth²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´MJhjtubjW)�”}”(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”…”�”}”(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´MIhj,tubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j+th´MJhjÔsubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj¸subjì)�”}”(hŒ**Description**”h]”j)�”}”(hjRth]”hŒ Description”…”�”}”(hjTth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPtubah}”(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¸subjì)�”}”(hŒ-Iterate over all I2C devs present on the bus.”h]”hŒ-Iterate over all I2C devs present on the bus.”…”�”}”(hjhth²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´MKhj¸subeh}”(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‘th]”hŒi3c_bus_for_each_i3cdev”…”�”}”(hj›th²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj—tubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj“th²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/master-driver-api:9: ./include/linux/i3c/master.h”h´MRubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj�th²hh³j®th´MRubah}”(h]”jŠtah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³j®th´MRhjŒth²hubjç)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jæhjŒth²hh³j®th´MRubeh}”(h]”h ]”(j„Œmacro”eh"]”h$]”h&]”j j„j jÇtj jÇtj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubjì)�”}”(hŒ&``i3c_bus_for_each_i3cdev (bus, dev)``”h]”jA)�”}”(hjÍth]”hŒ"i3c_bus_for_each_i3cdev (bus, dev)”…”�”}”(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´MThhÊh²hubjžs)�”}”(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ç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´MRhjãtubah}”(h]”h ]”h"]”h$]”h&]”uh1j�sh³jõth´MRhhÊ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)�”}”(hjuh]”hŒ Parameters”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjuubah}”(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ütubj0)�”}”(hhh]”(j5)�”}”(hŒ``bus`` the I3C bus ”h]”(j;)�”}”(hŒ``bus``”h]”jA)�”}”(hj!uh]”hŒbus”…”�”}”(hj#uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjuubah}”(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´MShjuubjW)�”}”(hhh]”jì)�”}”(hŒ the I3C bus”h]”hŒ the I3C bus”…”�”}”(hj:uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j6uh´MShj7uubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjuubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j6uh´MShjuubj5)�”}”(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)�”}”(hjZuh]”hŒdev”…”�”}”(hj\uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjXuubah}”(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´MUhjTuubjW)�”}”(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”…”�”}”(hjsuh²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´MThjpuubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjTuubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jouh´MUhjuubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hjütubjì)�”}”(hŒ**Description**”h]”j)�”}”(hj–uh]”hŒ Description”…”�”}”(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´MWhjütubjì)�”}”(hŒ-Iterate over all I3C devs present on the bus.”h]”hŒ-Iterate over all I3C devs present on the bus.”…”�”}”(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´MVhjütubeh}”(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Ûuh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj×uh²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éuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj×uh²hh³jèuh´M[ubj#)�”}”(hŒi3c_dma”h]”j))�”}”(hjÕuh]”hŒi3c_dma”…”�”}”(hjûuh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj÷uubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj×uh²hh³jèuh´M[ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjÓuh²hh³jèuh´M[ubah}”(h]”jÎuah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jèuh´M[hjÐuh²hubjç)�”}”(hhh]”jì)�”}”(hŒ#DMA transfer and mapping descriptor”h]”hŒ#DMA transfer and mapping descriptor”…”�”}”(hjvh²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]hjvh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjÐuh²hh³jèuh´M[ubeh}”(h]”h ]”(j„Œstruct”eh"]”h$]”h&]”j j„j j5vj j5vj ‰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”…”�”}”(hjAvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=vubhŒ:”…”�”}”(hj=vh²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´Mahj9vubj(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; };”…”�”}”hjZvsbah}”(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´Mchj9vubjì)�”}”(hŒ **Members**”h]”j)�”}”(hjkvh]”hŒMembers”…”�”}”(hjmvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjivubah}”(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´Mmhj9vubj0)�”}”(hhh]”(j5)�”}”(hŒ,``dev`` device object of a device doing DMA ”h]”(j;)�”}”(hŒ``dev``”h]”jA)�”}”(hjŠvh]”hŒdev”…”�”}”(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´M_hj„vubjW)�”}”(hhh]”jì)�”}”(hŒ#device object of a device doing DMA”h]”hŒ#device object of a device doing DMA”…”�”}”(hj£vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jŸvh´M_hj vubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj„vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jŸvh´M_hj�vubj5)�”}”(hŒ*``buf`` destination/source buffer for DMA ”h]”(j;)�”}”(hŒ``buf``”h]”jA)�”}”(hjÃvh]”hŒbuf”…”�”}”(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´M`hj½vubjW)�”}”(hhh]”jì)�”}”(hŒ!destination/source buffer for DMA”h]”hŒ!destination/source buffer for DMA”…”�”}”(hjÜvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jØvh´M`hjÙvubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj½vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jØvh´M`hj�vubj5)�”}”(hŒ``len`` length of transfer ”h]”(j;)�”}”(hŒ``len``”h]”jA)�”}”(hjüvh]”hŒlen”…”�”}”(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´MahjövubjW)�”}”(hhh]”jì)�”}”(hŒlength of transfer”h]”hŒlength of transfer”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jwh´Mahjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjövubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jwh´Mahj�vubj5)�”}”(hŒ"``map_len`` length of DMA mapping ”h]”(j;)�”}”(hŒ ``map_len``”h]”jA)�”}”(hj5wh]”hŒmap_len”…”�”}”(hj7wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj3wubah}”(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/wubjW)�”}”(hhh]”jì)�”}”(hŒlength of DMA mapping”h]”hŒlength of DMA mapping”…”�”}”(hjNwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jJwh´MbhjKwubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj/wubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jJwh´Mbhj�vubj5)�”}”(hŒ9``addr`` mapped DMA address for a Host Controller Driver ”h]”(j;)�”}”(hŒ``addr``”h]”jA)�”}”(hjnwh]”hŒaddr”…”�”}”(hjpwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjlwubah}”(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´MchjhwubjW)�”}”(hhh]”jì)�”}”(hŒ/mapped DMA address for a Host Controller Driver”h]”hŒ/mapped DMA address for a Host Controller Driver”…”�”}”(hj‡wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jƒwh´Mchj„wubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjhwubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jƒwh´Mchj�vubj5)�”}”(hŒ``dir`` DMA direction ”h]”(j;)�”}”(hŒ``dir``”h]”jA)�”}”(hj§wh]”hŒdir”…”�”}”(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´Mdhj¡wubjW)�”}”(hhh]”jì)�”}”(hŒ DMA direction”h]”hŒ DMA direction”…”�”}”(hjÀwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³j¼wh´Mdhj½wubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¡wubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³j¼wh´Mdhj�vubj5)�”}”(hŒF``bounce_buf`` an allocated bounce buffer if transfer needs it or NULL”h]”(j;)�”}”(hŒ``bounce_buf``”h]”jA)�”}”(hjàwh]”hŒ bounce_buf”…”�”}”(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´MdhjÚwubjW)�”}”(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ù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´Mehjöwubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÚwubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jõwh´Mdhj�vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/hj9vubeh}”(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”…”�”}”(hj:xh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj6xh²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Œ ”…”�”}”(hjIxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6xh²hh³jHxh´M™ubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjWxh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj6xh²hh³jHxh´M™ubj#)�”}”(hŒi3c_dev_get_master_data”h]”j))�”}”(hŒi3c_dev_get_master_data”h]”hŒi3c_dev_get_master_data”…”�”}”(hjhxh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjdxubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hj6xh²hh³jHxh´M™ubjB)�”}”(hŒ (const struct i3c_dev_desc *dev)”h]”jH)�”}”(hŒconst struct i3c_dev_desc *dev”h]”(jN)�”}”(hj�&h]”hŒconst”…”�”}”(hj„xh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj€xubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€xubjN)�”}”(hjQh]”hŒstruct”…”�”}”(hjŸxh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj€xubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€xubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(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“)�”}”j†jjxsbŒc.i3c_dev_get_master_data”†”asbuh1hhj€xubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€xubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjëxh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj€xubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjøxh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj€xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhj|xubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhj6xh²hh³jHxh´M™ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhj2xh²hh³jHxh´M™ubah}”(h]”j-xah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jHxh´M™hj/xh²hubjç)�”}”(hhh]”jì)�”}”(hŒyubj0)�”}”(hhh]”j5)�”}”(hŒV``const struct i3c_dev_desc *dev`` the I3C device descriptor to get private data from ”h]”(j;)�”}”(hŒ"``const struct i3c_dev_desc *dev``”h]”jA)�”}”(hjcyh]”hŒconst struct i3c_dev_desc *dev”…”�”}”(hjeyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hjayubah}”(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]yubjW)�”}”(hhh]”jì)�”}”(hŒ2the I3C device descriptor to get private data from”h]”hŒ2the I3C device descriptor to get private data from”…”�”}”(hj|yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëh³jxyh´M›hjyyubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj]yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4h³jxyh´M›hjZyubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj>yubjì)�”}”(hŒ **Return**”h]”j)�”}”(hjžyh]”hŒReturn”…”�”}”(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´M�hj>yubjì)�”}”(hŒwthe private data previously attached with i3c_dev_set_master_data() or NULL if no data has been attached to the device.”h]”hŒwthe private data previously attached with i3c_dev_set_master_data() or NULL if no data has been attached to the device.”…”�”}”(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´M�hj>yubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ$i3c_dev_set_master_data (C function)”Œc.i3c_dev_set_master_data”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒCvoid i3c_dev_set_master_data (struct i3c_dev_desc *dev, void *data)”h]”hú)�”}”(hŒBvoid i3c_dev_set_master_data(struct i3c_dev_desc *dev, void *data)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjãyh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjßyh²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òyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjßyh²hh³jñyh´M¦ubj#)�”}”(hŒi3c_dev_set_master_data”h]”j))�”}”(hŒi3c_dev_set_master_data”h]”hŒi3c_dev_set_master_data”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjzubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j"hjßyh²hh³jñyh´M¦ubjB)�”}”(hŒ&(struct i3c_dev_desc *dev, void *data)”h]”(jH)�”}”(hŒstruct i3c_dev_desc *dev”h]”(jN)�”}”(hjQh]”hŒstruct”…”�”}”(hj zh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjzubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjzubh)�”}”(hhh]”j))�”}”(hŒ i3c_dev_desc”h]”hŒ i3c_dev_desc”…”�”}”(hj>zh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj;zubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j@zŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jzsbŒc.i3c_dev_set_master_data”†”asbuh1hhjzubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjzubj§)�”}”(hjªh]”hŒ*”…”�”}”(hjlzh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjzubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjyzh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjzubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjzubjH)�”}”(hŒ void *data”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj’zh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjŽzubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽzubj§)�”}”(hjªh]”hŒ*”…”�”}”(hj®zh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjŽzubj))�”}”(hŒdata”h]”hŒdata”…”�”}”(hj»zh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hjŽzubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jGhjzubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jAhjßyh²hh³jñyh´M¦ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj؈uh1hùjÙjÚhjÛyh²hh³jñyh´M¦ubah}”(h]”jÖyah ]”(jÞjßeh"]”h$]”h&]”jãˆjä)jåhuh1hóh³jñyh´M¦hjØyh²hubjç)�”}”(hhh]”jì)�”}”(hŒ6attach master private data to an I3C device descriptor”h]”hŒ6attach master private data to an I3C device descriptor”…”�”}”(hjåzh²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âzh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjØyh²hh³jñyh´M¦ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j j„j jýzj jýzj ‰j ‰j‰uh1hîh²hhhÊh³Nh´Nubj)�”}”(hX**Parameters** ``struct i3c_dev_desc *dev`` the I3C 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 i3c_dev_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 i3c_dev_desc *dev`` the I3C device descriptor to attach private data to ”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Œ3the I3C device descriptor to attach private data to”h]”hŒ3the I3C 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)�”}”(hj_{h]”hŒ void *data”…”�”}”(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´M©hjY{ubjW)�”}”(hhh]”jì)�”}”(hŒ private data”h]”hŒ private data”…”�”}”(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©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³Œ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 i3c_dev_get_master_data().”h]”hŒ‡This functions allows a master controller to attach per-device private data which can then be retrieved with i3c_dev_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”•Õrh´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_data (C function)”Œc.i2c_dev_get_master_data”hNt”auh1hÝhhÊh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ?void * i2c_dev_get_master_data (const struct i2c_dev_desc *dev)”h]”hú)�”}”(hŒ=void *i2c_dev_get_master_data(const struct i2c_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³Œ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§)�”}”(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_data”h]”j))�”}”(hŒi2c_dev_get_master_data”h]”hŒi2c_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"hjÛ{h²hh³jí{h´MµubjB)�”}”(hŒ (const struct i2c_dev_desc *dev)”h]”jH)�”}”(hŒconst struct i2c_dev_desc *dev”h]”(jN)�”}”(hj�&h]”hŒconst”…”�”}”(hj)|h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj%|ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%|ubjN)�”}”(hjQh]”hŒstruct”…”�”}”(hjD|h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj%|ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%|ubh)�”}”(hhh]”j))�”}”(hŒ i2c_dev_desc”h]”hŒ i2c_dev_desc”…”�”}”(hjb|h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j(hj_|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jd|Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j|sbŒc.i2c_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Æ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Œ