€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ(/translations/zh_CN/driver-api/component”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/zh_TW/driver-api/component”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/it_IT/driver-api/component”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ja_JP/driver-api/component”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ko_KR/driver-api/component”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/pt_BR/driver-api/component”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/sp_SP/driver-api/component”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒtarget”“”)�”}”(hŒ.. _component:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œ component”uh1hµh´Khhh²hh³ŒB/var/lib/git/docbuild/linux/Documentation/driver-api/component.rst”ubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ&Component Helper for Aggregate Drivers”h]”hŒ&Component Helper for Aggregate Drivers”…”�”}”(hhËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhhÆh²hh³hÃh´KubhŒ paragraph”“”)�”}”(hX«The component helper allows drivers to collect a pile of sub-devices, including their bound drivers, into an aggregate driver. Various subsystems already provide functions to get hold of such components, e.g. of_clk_get_by_name(). The component helper can be used when such a subsystem-specific way to find a device is not available: The component helper fills the niche of aggregate drivers for specific hardware, where further standardization into a subsystem would not be practical. The common example is when a logical device (e.g. a DRM display driver) is spread around the SoC on various components (scanout engines, blending blocks, transcoders for various outputs and so on).”h]”hX«The component helper allows drivers to collect a pile of sub-devices, including their bound drivers, into an aggregate driver. Various subsystems already provide functions to get hold of such components, e.g. of_clk_get_by_name(). The component helper can be used when such a subsystem-specific way to find a device is not available: The component helper fills the niche of aggregate drivers for specific hardware, where further standardization into a subsystem would not be practical. The common example is when a logical device (e.g. a DRM display driver) is spread around the SoC on various components (scanout engines, blending blocks, transcoders for various outputs and so on).”…”�”}”(hhÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/component:7: ./drivers/base/component.c”h´KhhÆh²hubhÚ)�”}”(hŒ—The component helper also doesn't solve runtime dependencies, e.g. for system suspend and resume operations. See also :ref:`device links`.”h]”(hŒxThe component helper also doesn’t solve runtime dependencies, e.g. for system suspend and resume operations. See also ”…”�”}”(hhêh²hh³Nh´Nubh)�”}”(hŒ :ref:`device links`”h]”hŒinline”“”)�”}”(hhôh]”hŒ device links”…”�”}”(hhøh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1höhhòubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œdriver-api/component”Œ refdomain”jŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œ device_link”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/component:7: ./drivers/base/component.c”h´KhhêubhŒ.”…”�”}”(hhêh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jh´KhhÆh²hubhÚ)�”}”(hŒ�Components are registered using component_add() and unregistered with component_del(), usually from the driver's probe and disconnect functions.”h]”hŒ’Components are registered using component_add() and unregistered with component_del(), usually from the driver’s probe and disconnect functions.”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/component:7: ./drivers/base/component.c”h´KhhÆh²hubhÚ)�”}”(hŒíAggregate drivers first assemble a component match list of what they need using component_match_add(). This is then registered as an aggregate driver using component_master_add_with_match(), and unregistered using component_master_del().”h]”hŒíAggregate drivers first assemble a component match list of what they need using component_match_add(). This is then registered as an aggregate driver using component_master_add_with_match(), and unregistered using component_master_del().”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/component:7: ./drivers/base/component.c”h´KhhÆh²hubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒAPI”h]”hŒAPI”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj@h²hh³hÃh´K ubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œcomponent_ops (C struct)”Œc.component_ops”hNt”auh1jQhj@h²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ component_ops”h]”hŒdesc_signature_line”“”)�”}”(hŒstruct component_ops”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jshjoh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j…hjoh²hh³j„h´KubhŒ desc_name”“”)�”}”(hŒ component_ops”h]”hŒ desc_sig_name”“”)�”}”(hjkh]”hŒ component_ops”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jœhj˜ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j–hjoh²hh³j„h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j´jµŒ add_permalink”ˆuh1jmŒsphinx_line_type”Œ declarator”hjih²hh³j„h´Kubah}”(h]”j`ah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jgh³j„h´Khjdh²hubhŒ desc_content”“”)�”}”(hhh]”hÚ)�”}”(hŒcallbacks for component drivers”h]”hŒcallbacks for component drivers”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´K hjÌh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjdh²hh³j„h´Kubeh}”(h]”h ]”(Œc”Œstruct”eh"]”h$]”h&]”Œdomain”jçŒobjtype”jèŒdesctype”jèŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jbh²hhj@h³Nh´NubhŒ container”“”)�”}”(hX3**Definition**:: struct component_ops { int (*bind)(struct device *comp, struct device *master, void *master_data); void (*unbind)(struct device *comp, struct device *master, void *master_data); }; **Members** ``bind`` Called through component_bind_all() when the aggregate driver is ready to bind the overall driver. ``unbind`` Called through component_unbind_all() when the aggregate driver is ready to bind the overall driver, or when component_bind_all() fails part-ways through and needs to unbind some already bound components.”h]”(hÚ)�”}”(hŒ**Definition**::”h]”(hŒstrong”“”)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjøubhŒ:”…”�”}”(hjøh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KhjôubhŒ literal_block”“”)�”}”(hŒ¼struct component_ops { int (*bind)(struct device *comp, struct device *master, void *master_data); void (*unbind)(struct device *comp, struct device *master, void *master_data); };”h]”hŒ¼struct component_ops { int (*bind)(struct device *comp, struct device *master, void *master_data); void (*unbind)(struct device *comp, struct device *master, void *master_data); };”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j´jµuh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KhjôubhÚ)�”}”(hŒ **Members**”h]”jý)�”}”(hj*h]”hŒMembers”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KhjôubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒl``bind`` Called through component_bind_all() when the aggregate driver is ready to bind the overall driver. ”h]”(hŒterm”“”)�”}”(hŒ``bind``”h]”hŒliteral”“”)�”}”(hjOh]”hŒbind”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KhjGubhŒ definition”“”)�”}”(hhh]”hÚ)�”}”(hŒbCalled through component_bind_all() when the aggregate driver is ready to bind the overall driver.”h]”hŒbCalled through component_bind_all() when the aggregate driver is ready to bind the overall driver.”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´Khjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jfh´KhjBubjF)�”}”(hŒ×``unbind`` Called through component_unbind_all() when the aggregate driver is ready to bind the overall driver, or when component_bind_all() fails part-ways through and needs to unbind some already bound components.”h]”(jL)�”}”(hŒ ``unbind``”h]”jR)�”}”(hj�h]”hŒunbind”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´Khj‡ubjh)�”}”(hhh]”hÚ)�”}”(hŒÌCalled through component_unbind_all() when the aggregate driver is ready to bind the overall driver, or when component_bind_all() fails part-ways through and needs to unbind some already bound components.”h]”hŒÌCalled through component_unbind_all() when the aggregate driver is ready to bind the overall driver, or when component_bind_all() fails part-ways through and needs to unbind some already bound components.”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´Khj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j¢h´KhjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hjôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´NubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hjÐh]”hŒ Description”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´K hj@h²hubhÚ)�”}”(hŒUComponents are registered with component_add() and unregistered with component_del().”h]”hŒUComponents are registered with component_add() and unregistered with component_del().”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´K hj@h²hubjR)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j^Œcomponent_master_ops (C struct)”Œc.component_master_ops”hNt”auh1jQhj@h²hh³Nh´Nubjc)�”}”(hhh]”(jh)�”}”(hŒcomponent_master_ops”h]”jn)�”}”(hŒstruct component_master_ops”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshj h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´Kubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj h²hh³jh´Kubj—)�”}”(hŒcomponent_master_ops”h]”j�)�”}”(hjh]”hŒcomponent_master_ops”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj*ubah}”(h]”h ]”(j¯j°eh"]”h$]”h&]”j´jµuh1j–hj h²hh³jh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j´jµj¼ˆuh1jmj½j¾hjh²hh³jh´Kubah}”(h]”jah ]”(jÂjÃeh"]”h$]”h&]”jLjjÈ)jÉhuh1jgh³jh´Khjh²hubjË)�”}”(hhh]”hÚ)�”}”(hŒ!callback for the aggregate driver”h]”hŒ!callback for the aggregate driver”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´K/hjMh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjh²hh³jh´Kubeh}”(h]”h ]”(jçŒstruct”eh"]”h$]”h&]”jìjçjíjhjîjhjï‰jð‰jñ‰uh1jbh²hhj@h³Nh´Nubjó)�”}”(hXH**Definition**:: struct component_master_ops { int (*bind)(struct device *master); void (*unbind)(struct device *master); }; **Members** ``bind`` Called when all components or the aggregate driver, as specified in the match list passed to component_master_add_with_match(), are ready. Usually there are 3 steps to bind an aggregate driver: 1. Allocate a structure for the aggregate driver. 2. Bind all components to the aggregate driver by calling component_bind_all() with the aggregate driver structure as opaque pointer data. 3. Register the aggregate driver with the subsystem to publish its interfaces. Note that the lifetime of the aggregate driver does not align with any of the underlying :c:type:`struct device ` instances. Therefore devm cannot be used and all resources acquired or allocated in this callback must be explicitly released in the **unbind** callback. ``unbind`` Called when either the aggregate driver, using component_master_del(), or one of its components, using component_del(), is unregistered.”h]”(hÚ)�”}”(hŒ**Definition**::”h]”(jý)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjpubhŒ:”…”�”}”(hjph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´K3hjlubj)�”}”(hŒsstruct component_master_ops { int (*bind)(struct device *master); void (*unbind)(struct device *master); };”h]”hŒsstruct component_master_ops { int (*bind)(struct device *master); void (*unbind)(struct device *master); };”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”j´jµuh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´K5hjlubhÚ)�”}”(hŒ **Members**”h]”jý)�”}”(hjžh]”hŒMembers”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjœubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´K:hjlubjA)�”}”(hhh]”(jF)�”}”(hXø``bind`` Called when all components or the aggregate driver, as specified in the match list passed to component_master_add_with_match(), are ready. Usually there are 3 steps to bind an aggregate driver: 1. Allocate a structure for the aggregate driver. 2. Bind all components to the aggregate driver by calling component_bind_all() with the aggregate driver structure as opaque pointer data. 3. Register the aggregate driver with the subsystem to publish its interfaces. Note that the lifetime of the aggregate driver does not align with any of the underlying :c:type:`struct device ` instances. Therefore devm cannot be used and all resources acquired or allocated in this callback must be explicitly released in the **unbind** callback. ”h]”(jL)�”}”(hŒ``bind``”h]”jR)�”}”(hj½h]”hŒbind”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KGhj·ubjh)�”}”(hhh]”(hÚ)�”}”(hŒÁCalled when all components or the aggregate driver, as specified in the match list passed to component_master_add_with_match(), are ready. Usually there are 3 steps to bind an aggregate driver:”h]”hŒÁCalled when all components or the aggregate driver, as specified in the match list passed to component_master_add_with_match(), are ready. Usually there are 3 steps to bind an aggregate driver:”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´K7hjÓubhŒenumerated_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ/Allocate a structure for the aggregate driver. ”h]”hÚ)�”}”(hŒ.Allocate a structure for the aggregate driver.”h]”hŒ.Allocate a structure for the aggregate driver.”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´K;hjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjçubjë)�”}”(hŒˆBind all components to the aggregate driver by calling component_bind_all() with the aggregate driver structure as opaque pointer data. ”h]”hÚ)�”}”(hŒ‡Bind all components to the aggregate driver by calling component_bind_all() with the aggregate driver structure as opaque pointer data.”h]”hŒ‡Bind all components to the aggregate driver by calling component_bind_all() with the aggregate driver structure as opaque pointer data.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´K=hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjçubjë)�”}”(hŒLRegister the aggregate driver with the subsystem to publish its interfaces. ”h]”hÚ)�”}”(hŒKRegister the aggregate driver with the subsystem to publish its interfaces.”h]”hŒKRegister the aggregate driver with the subsystem to publish its interfaces.”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KAhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjçubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1jåhjÓubhÚ)�”}”(hXNote that the lifetime of the aggregate driver does not align with any of the underlying :c:type:`struct device ` instances. Therefore devm cannot be used and all resources acquired or allocated in this callback must be explicitly released in the **unbind** callback.”h]”(hŒYNote that the lifetime of the aggregate driver does not align with any of the underlying ”…”�”}”(hjBh²hh³Nh´Nubh)�”}”(hŒ :c:type:`struct device `”h]”jR)�”}”(hjLh]”hŒ struct device”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”(jjçŒc-type”eh"]”h$]”h&]”uh1jQhjJubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰Œ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”sbjŒdevice”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KDhjBubhŒ† instances. Therefore devm cannot be used and all resources acquired or allocated in this callback must be explicitly released in the ”…”�”}”(hjBh²hh³Nh´Nubjý)�”}”(hŒ **unbind**”h]”hŒunbind”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjBubhŒ callback.”…”�”}”(hjBh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jqh´KDhjÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jghj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jÒh´KGhj´ubjF)�”}”(hŒ“``unbind`` Called when either the aggregate driver, using component_master_del(), or one of its components, using component_del(), is unregistered.”h]”(jL)�”}”(hŒ ``unbind``”h]”jR)�”}”(hj h]”hŒunbind”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KNhjšubjh)�”}”(hhh]”hÚ)�”}”(hŒˆCalled when either the aggregate driver, using component_master_del(), or one of its components, using component_del(), is unregistered.”h]”hŒˆCalled when either the aggregate driver, using component_master_del(), or one of its components, using component_del(), is unregistered.”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KMhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jµh´KNhj´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hjlubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´NubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hjãh]”hŒ Description”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjáubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KRhj@h²hubhÚ)�”}”(hŒuAggregate drivers are registered with component_master_add_with_match() and unregistered with component_master_del().”h]”hŒuAggregate drivers are registered with component_master_add_with_match() and unregistered with component_master_del().”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´K0hj@h²hubjR)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j^Œ component_match_add (C function)”Œc.component_match_add”hNt”auh1jQhj@h²hh³Nh´Nubjc)�”}”(hhh]”(jh)�”}”(hŒ�void component_match_add (struct device *parent, struct component_match **matchptr, int (*compare)(struct device *, void *), void *compare_data)”h]”jn)�”}”(hŒ�void component_match_add(struct device *parent, struct component_match **matchptr, int (*compare)(struct device*, void*), void *compare_data)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j!hjh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´Kmubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjh²hh³j2h´Kmubj—)�”}”(hŒcomponent_match_add”h]”j�)�”}”(hŒcomponent_match_add”h]”hŒcomponent_match_add”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjAubah}”(h]”h ]”(j¯j°eh"]”h$]”h&]”j´jµuh1j–hjh²hh³j2h´KmubhŒdesc_parameterlist”“”)�”}”(hŒu(struct device *parent, struct component_match **matchptr, int (*compare)(struct device*, void*), void *compare_data)”h]”(hŒdesc_parameter”“”)�”}”(hŒstruct device *parent”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjaubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjaubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj€ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”Œ identifier”Œ reftarget”j…Œmodname”NŒ classname”Njhjk)�”}”jn]”jiŒ ASTIdentifier”“”)�”}”j™jGsbŒc.component_match_add”†”asbuh1hhjaubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjaubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j´hjaubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj[ubj`)�”}”(hŒ!struct component_match **matchptr”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjÚubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjÚubh)�”}”(hhh]”j�)�”}”(hŒcomponent_match”h]”hŒcomponent_match”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jþŒmodname”NŒ classname”Njhjk)�”}”jn]”j¢Œc.component_match_add”†”asbuh1hhjÚubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjÚubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÚubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÚubj�)�”}”(hŒmatchptr”h]”hŒmatchptr”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjÚubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj[ubj`)�”}”(hŒ%int (*compare)(struct device*, void*)”h]”(j")�”}”(hŒint”h]”hŒint”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjWubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjWubjµ)�”}”(hŒ(”h]”hŒ(”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjWubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjWubj�)�”}”(hŒcompare”h]”hŒcompare”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjWubjµ)�”}”(hŒ)”h]”hŒ)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjWubjµ)�”}”(hjyh]”hŒ(”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjWubjt)�”}”(hjwh]”hŒstruct”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjWubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjWubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jÛŒmodname”NŒ classname”Njhjk)�”}”jn]”j¢Œc.component_match_add”†”asbuh1hhjWubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjWubjµ)�”}”(hŒ,”h]”hŒ,”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjWubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjWubj")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjWubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjWubjµ)�”}”(hj¢h]”hŒ)”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj[ubj`)�”}”(hŒvoid *compare_data”h]”(j")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjOubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjOubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjOubj�)�”}”(hŒ compare_data”h]”hŒ compare_data”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj[ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµuh1jYhjh²hh³j2h´Kmubeh}”(h]”h ]”h"]”h$]”h&]”j´jµj¼ˆuh1jmj½j¾hjh²hh³j2h´Kmubah}”(h]”jah ]”(jÂjÃeh"]”h$]”h&]”jLjjÈ)jÉhuh1jgh³j2h´Kmhjh²hubjË)�”}”(hhh]”hÚ)�”}”(hŒadd a component match entry”h]”hŒadd a component match entry”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´Kmhj£h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjh²hh³j2h´Kmubeh}”(h]”h ]”(jçŒfunction”eh"]”h$]”h&]”jìjçjíj¾jîj¾jï‰jð‰jñ‰uh1jbh²hhj@h³Nh´Nubjó)�”}”(hX***Parameters** ``struct device *parent`` device with the aggregate driver ``struct component_match **matchptr`` pointer to the list of component matches ``int (*compare)(struct device *, void *)`` compare function to match against all components ``void *compare_data`` opaque pointer passed to the **compare** function **Description** Adds a new component match to the list stored in **matchptr**, which the **parent** aggregate driver needs to function. The list of component matches pointed to by **matchptr** must be initialized to NULL before adding the first match. This only matches against components added with component_add(). The allocated match list in **matchptr** is automatically released using devm actions. See also component_match_add_release() and component_match_add_typed().”h]”(hÚ)�”}”(hŒ**Parameters**”h]”jý)�”}”(hjÈh]”hŒ Parameters”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KqhjÂubjA)�”}”(hhh]”(jF)�”}”(hŒ;``struct device *parent`` device with the aggregate driver ”h]”(jL)�”}”(hŒ``struct device *parent``”h]”jR)�”}”(hjçh]”hŒstruct device *parent”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´Knhjáubjh)�”}”(hhh]”hÚ)�”}”(hŒ device with the aggregate driver”h]”hŒ device with the aggregate driver”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jüh´Knhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjáubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jüh´KnhjÞubjF)�”}”(hŒO``struct component_match **matchptr`` pointer to the list of component matches ”h]”(jL)�”}”(hŒ%``struct component_match **matchptr``”h]”jR)�”}”(hj h]”hŒ!struct component_match **matchptr”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´Kohjubjh)�”}”(hhh]”hÚ)�”}”(hŒ(pointer to the list of component matches”h]”hŒ(pointer to the list of component matches”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j5h´Kohj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j5h´KohjÞubjF)�”}”(hŒ]``int (*compare)(struct device *, void *)`` compare function to match against all components ”h]”(jL)�”}”(hŒ+``int (*compare)(struct device *, void *)``”h]”jR)�”}”(hjYh]”hŒ'int (*compare)(struct device *, void *)”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KphjSubjh)�”}”(hhh]”hÚ)�”}”(hŒ0compare function to match against all components”h]”hŒ0compare function to match against all components”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jnh´Kphjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jnh´KphjÞubjF)�”}”(hŒI``void *compare_data`` opaque pointer passed to the **compare** function ”h]”(jL)�”}”(hŒ``void *compare_data``”h]”jR)�”}”(hj’h]”hŒvoid *compare_data”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KqhjŒubjh)�”}”(hhh]”hÚ)�”}”(hŒ1opaque pointer passed to the **compare** function”h]”(hŒopaque pointer passed to the ”…”�”}”(hj«h²hh³Nh´Nubjý)�”}”(hŒ **compare**”h]”hŒcompare”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj«ubhŒ function”…”�”}”(hj«h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j§h´Kqhj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j§h´KqhjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÂubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hjßh]”hŒ Description”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KshjÂubhÚ)�”}”(hX,Adds a new component match to the list stored in **matchptr**, which the **parent** aggregate driver needs to function. The list of component matches pointed to by **matchptr** must be initialized to NULL before adding the first match. This only matches against components added with component_add().”h]”(hŒ1Adds a new component match to the list stored in ”…”�”}”(hjõh²hh³Nh´Nubjý)�”}”(hŒ **matchptr**”h]”hŒmatchptr”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjõubhŒ , which the ”…”�”}”(hjõh²hh³Nh´Nubjý)�”}”(hŒ **parent**”h]”hŒparent”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjõubhŒQ aggregate driver needs to function. The list of component matches pointed to by ”…”�”}”(hjõh²hh³Nh´Nubjý)�”}”(hŒ **matchptr**”h]”hŒmatchptr”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjõubhŒ| must be initialized to NULL before adding the first match. This only matches against components added with component_add().”…”�”}”(hjõh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KrhjÂubhÚ)�”}”(hŒVThe allocated match list in **matchptr** is automatically released using devm actions.”h]”(hŒThe allocated match list in ”…”�”}”(hj: h²hh³Nh´Nubjý)�”}”(hŒ **matchptr**”h]”hŒmatchptr”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj: ubhŒ. is automatically released using devm actions.”…”�”}”(hj: h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KwhjÂubhÚ)�”}”(hŒGSee also component_match_add_release() and component_match_add_typed().”h]”hŒGSee also component_match_add_release() and component_match_add_typed().”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.h”h´KzhjÂubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´NubjR)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j^Œ!component_compare_of (C function)”Œc.component_compare_of”hNt”auh1jQhj@h²hh³Nh´Nubjc)�”}”(hhh]”(jh)�”}”(hŒ9int component_compare_of (struct device *dev, void *data)”h]”jn)�”}”(hŒ8int component_compare_of(struct device *dev, void *data)”h]”(j")�”}”(hŒint”h]”hŒint”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj† h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj† h²hh³j˜ h´M ubj—)�”}”(hŒcomponent_compare_of”h]”j�)�”}”(hŒcomponent_compare_of”h]”hŒcomponent_compare_of”…”�”}”(hj« h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj§ ubah}”(h]”h ]”(j¯j°eh"]”h$]”h&]”j´jµuh1j–hj† h²hh³j˜ h´M ubjZ)�”}”(hŒ (struct device *dev, void *data)”h]”(j`)�”}”(hŒstruct device *dev”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjà ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjà ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjâ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jç Œmodname”NŒ classname”Njhjk)�”}”jn]”j¡)�”}”j™j­ sbŒc.component_compare_of”†”asbuh1hhjà ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjà ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjà ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjà ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj¿ ubj`)�”}”(hŒ void *data”h]”(j")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj9 h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj5 ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj5 ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj5 ubj�)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj5 ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj¿ ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµuh1jYhj† h²hh³j˜ h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµj¼ˆuh1jmj½j¾hj‚ h²hh³j˜ h´M ubah}”(h]”j} ah ]”(jÂjÃeh"]”h$]”h&]”jLjjÈ)jÉhuh1jgh³j˜ h´M hj h²hubjË)�”}”(hhh]”hÚ)�”}”(hŒ/A common component compare function for of_node”h]”hŒ/A common component compare function for of_node”…”�”}”(hjŒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.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ñ‰uh1jbh²hhj@h³Nh´Nubjó)�”}”(hXP**Parameters** ``struct device *dev`` component device ``void *data`` **compare_data** from component_match_add_release() **Description** A common compare function when compare_data is device of_node. e.g. component_match_add_release(masterdev, :c:type:`match`, component_release_of, component_compare_of, component_dev_of_node)”h]”(hÚ)�”}”(hŒ**Parameters**”h]”jý)�”}”(hj® h]”hŒ Parameters”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj¬ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M$hj¨ ubjA)�”}”(hhh]”(jF)�”}”(hŒ(``struct device *dev`` component device ”h]”(jL)�”}”(hŒ``struct device *dev``”h]”jR)�”}”(hjÍ h]”hŒstruct device *dev”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjË ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M!hjÇ ubjh)�”}”(hhh]”hÚ)�”}”(hŒcomponent device”h]”hŒcomponent device”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jâ h´M!hjã ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjÇ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jâ h´M!hjÄ ubjF)�”}”(hŒC``void *data`` **compare_data** from component_match_add_release() ”h]”(jL)�”}”(hŒ``void *data``”h]”jR)�”}”(hj h]”hŒ void *data”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M"hj ubjh)�”}”(hhh]”hÚ)�”}”(hŒ3**compare_data** from component_match_add_release()”h]”(jý)�”}”(hŒ**compare_data**”h]”hŒ compare_data”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj ubhŒ# from component_match_add_release()”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j h´M"hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j h´M"hjÄ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hj¨ ubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hjO h]”hŒ Description”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjM ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M$hj¨ ubhÚ)�”}”(hŒ¾A common compare function when compare_data is device of_node. e.g. component_match_add_release(masterdev, :c:type:`match`, component_release_of, component_compare_of, component_dev_of_node)”h]”(hŒkA common compare function when compare_data is device of_node. e.g. component_match_add_release(masterdev, ”…”�”}”(hje h²hh³Nh´Nubh)�”}”(hŒ:c:type:`match`”h]”jR)�”}”(hjo h]”hŒmatch”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”(jjçŒc-type”eh"]”h$]”h&]”uh1jQhjm ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jçŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jhjljŒmatch”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M#hje ubhŒD, component_release_of, component_compare_of, component_dev_of_node)”…”�”}”(hje h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jŒ h´M#hj¨ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´NubjR)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j^Œ!component_release_of (C function)”Œc.component_release_of”hNt”auh1jQhj@h²hh³Nh´Nubjc)�”}”(hhh]”(jh)�”}”(hŒ:void component_release_of (struct device *dev, void *data)”h]”jn)�”}”(hŒ9void component_release_of(struct device *dev, void *data)”h]”(j")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj· h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj³ h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M/ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj³ h²hh³jÅ h´M/ubj—)�”}”(hŒcomponent_release_of”h]”j�)�”}”(hŒcomponent_release_of”h]”hŒcomponent_release_of”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjÔ ubah}”(h]”h ]”(j¯j°eh"]”h$]”h&]”j´jµuh1j–hj³ h²hh³jÅ h´M/ubjZ)�”}”(hŒ (struct device *dev, void *data)”h]”(j`)�”}”(hŒstruct device *dev”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjð ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjð ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”j Œmodname”NŒ classname”Njhjk)�”}”jn]”j¡)�”}”j™jÚ sbŒc.component_release_of”†”asbuh1hhjð ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjð ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjð ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjM h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjð ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hjì ubj`)�”}”(hŒ void *data”h]”(j")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjb ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjb ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjb ubj�)�”}”(hŒdata”h]”hŒdata”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjb ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hjì ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµuh1jYhj³ h²hh³jÅ h´M/ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµj¼ˆuh1jmj½j¾hj¯ h²hh³jÅ h´M/ubah}”(h]”jª ah ]”(jÂjÃeh"]”h$]”h&]”jLjjÈ)jÉhuh1jgh³jÅ h´M/hj¬ h²hubjË)�”}”(hhh]”hÚ)�”}”(hŒ/A common component release function for of_node”h]”hŒ/A common component release function for of_node”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.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ñ‰uh1jbh²hhj@h³Nh´Nubjó)�”}”(hŒÇ**Parameters** ``struct device *dev`` component device ``void *data`` **compare_data** from component_match_add_release() **Description** About the example, Please see component_compare_of().”h]”(hÚ)�”}”(hŒ**Parameters**”h]”jý)�”}”(hjÛ h]”hŒ Parameters”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjÙ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M3hjÕ ubjA)�”}”(hhh]”(jF)�”}”(hŒ(``struct device *dev`` component device ”h]”(jL)�”}”(hŒ``struct device *dev``”h]”jR)�”}”(hjú h]”hŒstruct device *dev”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjø ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M0hjô ubjh)�”}”(hhh]”hÚ)�”}”(hŒcomponent device”h]”hŒcomponent device”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j h´M0hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjô ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j h´M0hjñ ubjF)�”}”(hŒC``void *data`` **compare_data** from component_match_add_release() ”h]”(jL)�”}”(hŒ``void *data``”h]”jR)�”}”(hj3 h]”hŒ void *data”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj1 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M1hj- ubjh)�”}”(hhh]”hÚ)�”}”(hŒ3**compare_data** from component_match_add_release()”h]”(jý)�”}”(hŒ**compare_data**”h]”hŒ compare_data”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjL ubhŒ# from component_match_add_release()”…”�”}”(hjL h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jH h´M1hjI ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj- ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jH h´M1hjñ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hjÕ ubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hj| h]”hŒ Description”…”�”}”(hj~ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjz ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M3hjÕ ubhÚ)�”}”(hŒ5About the example, Please see component_compare_of().”h]”hŒ5About the example, Please see component_compare_of().”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M2hjÕ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´NubjR)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j^Œ"component_compare_dev (C function)”Œc.component_compare_dev”hNt”auh1jQhj@h²hh³Nh´Nubjc)�”}”(hhh]”(jh)�”}”(hŒ:int component_compare_dev (struct device *dev, void *data)”h]”jn)�”}”(hŒ9int component_compare_dev(struct device *dev, void *data)”h]”(j")�”}”(hŒint”h]”hŒint”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj½ h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M<ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj½ h²hh³jÏ h´M<ubj—)�”}”(hŒcomponent_compare_dev”h]”j�)�”}”(hŒcomponent_compare_dev”h]”hŒcomponent_compare_dev”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjÞ ubah}”(h]”h ]”(j¯j°eh"]”h$]”h&]”j´jµuh1j–hj½ h²hh³jÏ h´M<ubjZ)�”}”(hŒ (struct device *dev, void *data)”h]”(j`)�”}”(hŒstruct device *dev”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hjþ h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjú ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjú ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jŒmodname”NŒ classname”Njhjk)�”}”jn]”j¡)�”}”j™jä sbŒc.component_compare_dev”†”asbuh1hhjú ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjú ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjú ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjú ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hjö ubj`)�”}”(hŒ void *data”h]”(j")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjlubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjlubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjlubj�)�”}”(hŒdata”h]”hŒdata”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hjö ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµuh1jYhj½ h²hh³jÏ h´M<ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµj¼ˆuh1jmj½j¾hj¹ h²hh³jÏ h´M<ubah}”(h]”j´ ah ]”(jÂjÃeh"]”h$]”h&]”jLjjÈ)jÉhuh1jgh³jÏ h´M<hj¶ h²hubjË)�”}”(hhh]”hÚ)�”}”(hŒ+A common component compare function for dev”h]”hŒ+A common component compare function for dev”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.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ñ‰uh1jbh²hhj@h³Nh´Nubjó)�”}”(hX***Parameters** ``struct device *dev`` component device ``void *data`` **compare_data** from component_match_add_release() **Description** A common compare function when compare_data is struce device. e.g. component_match_add(masterdev, :c:type:`match`, component_compare_dev, component_dev)”h]”(hÚ)�”}”(hŒ**Parameters**”h]”jý)�”}”(hjåh]”hŒ Parameters”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjãubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M@hjßubjA)�”}”(hhh]”(jF)�”}”(hŒ(``struct device *dev`` component device ”h]”(jL)�”}”(hŒ``struct device *dev``”h]”jR)�”}”(hjh]”hŒstruct device *dev”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M=hjþubjh)�”}”(hhh]”hÚ)�”}”(hŒcomponent device”h]”hŒcomponent device”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jh´M=hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjþubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jh´M=hjûubjF)�”}”(hŒC``void *data`` **compare_data** from component_match_add_release() ”h]”(jL)�”}”(hŒ``void *data``”h]”jR)�”}”(hj=h]”hŒ void *data”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M>hj7ubjh)�”}”(hhh]”hÚ)�”}”(hŒ3**compare_data** from component_match_add_release()”h]”(jý)�”}”(hŒ**compare_data**”h]”hŒ compare_data”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjVubhŒ# from component_match_add_release()”…”�”}”(hjVh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jRh´M>hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jRh´M>hjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hjßubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hj†h]”hŒ Description”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M@hjßubhÚ)�”}”(hŒ˜A common compare function when compare_data is struce device. e.g. component_match_add(masterdev, :c:type:`match`, component_compare_dev, component_dev)”h]”(hŒbA common compare function when compare_data is struce device. e.g. component_match_add(masterdev, ”…”�”}”(hjœh²hh³Nh´Nubh)�”}”(hŒ:c:type:`match`”h]”jR)�”}”(hj¦h]”hŒmatch”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”(jjçŒc-type”eh"]”h$]”h&]”uh1jQhj¤ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jçŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jhjljŒmatch”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M?hjœubhŒ', component_compare_dev, component_dev)”…”�”}”(hjœh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÃh´M?hjßubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´NubjR)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j^Œ'component_compare_dev_name (C function)”Œc.component_compare_dev_name”hNt”auh1jQhj@h²hh³Nh´Nubjc)�”}”(hhh]”(jh)�”}”(hŒ?int component_compare_dev_name (struct device *dev, void *data)”h]”jn)�”}”(hŒ>int component_compare_dev_name(struct device *dev, void *data)”h]”(j")�”}”(hŒint”h]”hŒint”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjêh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MJubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjêh²hh³jüh´MJubj—)�”}”(hŒcomponent_compare_dev_name”h]”j�)�”}”(hŒcomponent_compare_dev_name”h]”hŒcomponent_compare_dev_name”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj ubah}”(h]”h ]”(j¯j°eh"]”h$]”h&]”j´jµuh1j–hjêh²hh³jüh´MJubjZ)�”}”(hŒ (struct device *dev, void *data)”h]”(j`)�”}”(hŒstruct device *dev”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshj'ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj'ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jKŒmodname”NŒ classname”Njhjk)�”}”jn]”j¡)�”}”j™jsbŒc.component_compare_dev_name”†”asbuh1hhj'ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj'ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj'ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj#ubj`)�”}”(hŒ void *data”h]”(j")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj™ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj™ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj™ubj�)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj#ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµuh1jYhjêh²hh³jüh´MJubeh}”(h]”h ]”h"]”h$]”h&]”j´jµj¼ˆuh1jmj½j¾hjæh²hh³jüh´MJubah}”(h]”jáah ]”(jÂjÃeh"]”h$]”h&]”jLjjÈ)jÉhuh1jgh³jüh´MJhjãh²hubjË)�”}”(hhh]”hÚ)�”}”(hŒ3A common component compare function for device name”h]”hŒ3A common component compare function for device name”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MJhjíh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjãh²hh³jüh´MJubeh}”(h]”h ]”(jçŒfunction”eh"]”h$]”h&]”jìjçjíjjîjjï‰jð‰jñ‰uh1jbh²hhj@h³Nh´Nubjó)�”}”(hX;**Parameters** ``struct device *dev`` component device ``void *data`` **compare_data** from component_match_add_release() **Description** A common compare function when compare_data is device name string. e.g. component_match_add(masterdev, :c:type:`match`, component_compare_dev_name, "component_dev_name")”h]”(hÚ)�”}”(hŒ**Parameters**”h]”jý)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MNhj ubjA)�”}”(hhh]”(jF)�”}”(hŒ(``struct device *dev`` component device ”h]”(jL)�”}”(hŒ``struct device *dev``”h]”jR)�”}”(hj1h]”hŒstruct device *dev”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MKhj+ubjh)�”}”(hhh]”hÚ)�”}”(hŒcomponent device”h]”hŒcomponent device”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jFh´MKhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jFh´MKhj(ubjF)�”}”(hŒC``void *data`` **compare_data** from component_match_add_release() ”h]”(jL)�”}”(hŒ``void *data``”h]”jR)�”}”(hjjh]”hŒ void *data”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MLhjdubjh)�”}”(hhh]”hÚ)�”}”(hŒ3**compare_data** from component_match_add_release()”h]”(jý)�”}”(hŒ**compare_data**”h]”hŒ compare_data”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjƒubhŒ# from component_match_add_release()”…”�”}”(hjƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jh´MLhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jh´MLhj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hj ubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hj³h]”hŒ Description”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MNhj ubhÚ)�”}”(hŒ©A common compare function when compare_data is device name string. e.g. component_match_add(masterdev, :c:type:`match`, component_compare_dev_name, "component_dev_name")”h]”(hŒgA common compare function when compare_data is device name string. e.g. component_match_add(masterdev, ”…”�”}”(hjÉh²hh³Nh´Nubh)�”}”(hŒ:c:type:`match`”h]”jR)�”}”(hjÓh]”hŒmatch”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”(jjçŒc-type”eh"]”h$]”h&]”uh1jQhjÑubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jçŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jhjljŒmatch”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MMhjÉubhŒ7, component_compare_dev_name, “component_dev_nameâ€�)”…”�”}”(hjÉh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jðh´MMhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´NubjR)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j^Œ(component_match_add_release (C function)”Œc.component_match_add_release”hNt”auh1jQhj@h²hh³Nh´Nubjc)�”}”(hhh]”(jh)�”}”(hŒÂvoid component_match_add_release (struct device *parent, struct component_match **matchptr, void (*release)(struct device *, void *), int (*compare)(struct device *, void *), void *compare_data)”h]”jn)�”}”(hŒ½void component_match_add_release(struct device *parent, struct component_match **matchptr, void (*release)(struct device*, void*), int (*compare)(struct device*, void*), void *compare_data)”h]”(j")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mªubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjh²hh³j)h´Mªubj—)�”}”(hŒcomponent_match_add_release”h]”j�)�”}”(hŒcomponent_match_add_release”h]”hŒcomponent_match_add_release”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj8ubah}”(h]”h ]”(j¯j°eh"]”h$]”h&]”j´jµuh1j–hjh²hh³j)h´MªubjZ)�”}”(hŒ�(struct device *parent, struct component_match **matchptr, void (*release)(struct device*, void*), int (*compare)(struct device*, void*), void *compare_data)”h]”(j`)�”}”(hŒstruct device *parent”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjTubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjTubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jxŒmodname”NŒ classname”Njhjk)�”}”jn]”j¡)�”}”j™j>sbŒc.component_match_add_release”†”asbuh1hhjTubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjTubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjTubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hjPubj`)�”}”(hŒ!struct component_match **matchptr”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjÆubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjÆubh)�”}”(hhh]”j�)�”}”(hŒcomponent_match”h]”hŒcomponent_match”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjåubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jêŒmodname”NŒ classname”Njhjk)�”}”jn]”j’Œc.component_match_add_release”†”asbuh1hhjÆubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjÆubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÆubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÆubj�)�”}”(hŒmatchptr”h]”hŒmatchptr”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjÆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hjPubj`)�”}”(hŒ&void (*release)(struct device*, void*)”h]”(j")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjCubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjCubjµ)�”}”(hjyh]”hŒ(”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjCubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjCubj�)�”}”(hŒrelease”h]”hŒrelease”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjCubjµ)�”}”(hj¢h]”hŒ)”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjCubjµ)�”}”(hjyh]”hŒ(”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjCubjt)�”}”(hjwh]”hŒstruct”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjCubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjCubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjÀubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jÅŒmodname”NŒ classname”Njhjk)�”}”jn]”j’Œc.component_match_add_release”†”asbuh1hhjCubjµ)�”}”(•hj¸h]”hŒ*”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjCubjµ)�”}”(hjh]”hŒ,”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjCubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjCubj")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjCubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjCubjµ)�”}”(hj¢h]”hŒ)”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hjPubj`)�”}”(hŒ%int (*compare)(struct device*, void*)”h]”(j")�”}”(hŒint”h]”hŒint”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj8ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj8ubjµ)�”}”(hjyh]”hŒ(”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj8ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj8ubj�)�”}”(hŒcompare”h]”hŒcompare”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj8ubjµ)�”}”(hj¢h]”hŒ)”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj8ubjµ)�”}”(hjyh]”hŒ(”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj8ubjt)�”}”(hjwh]”hŒstruct”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshj8ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj8ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjµubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jºŒmodname”NŒ classname”Njhjk)�”}”jn]”j’Œc.component_match_add_release”†”asbuh1hhj8ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj8ubjµ)�”}”(hjh]”hŒ,”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj8ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj8ubj")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj8ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj8ubjµ)�”}”(hj¢h]”hŒ)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hjPubj`)�”}”(hŒvoid *compare_data”h]”(j")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj-ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj-ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj-ubj�)�”}”(hŒ compare_data”h]”hŒ compare_data”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hjPubeh}”(h]”h ]”h"]”h$]”h&]”j´jµuh1jYhjh²hh³j)h´Mªubeh}”(h]”h ]”h"]”h$]”h&]”j´jµj¼ˆuh1jmj½j¾hjh²hh³j)h´Mªubah}”(h]”jah ]”(jÂjÃeh"]”h$]”h&]”jLjjÈ)jÉhuh1jgh³j)h´Mªhjh²hubjË)�”}”(hhh]”hÚ)�”}”(hŒ1add a component match entry with release callback”h]”hŒ1add a component match entry with release callback”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mªhj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjh²hh³j)h´Mªubeh}”(h]”h ]”(jçŒfunction”eh"]”h$]”h&]”jìjçjíjœjîjœjï‰jð‰jñ‰uh1jbh²hhj@h³Nh´Nubjó)�”}”(hX)**Parameters** ``struct device *parent`` parent device of the aggregate driver ``struct component_match **matchptr`` pointer to the list of component matches ``void (*release)(struct device *, void *)`` release function for **compare_data** ``int (*compare)(struct device *, void *)`` compare function to match against all components ``void *compare_data`` opaque pointer passed to the **compare** function **Description** Adds a new component match to the list stored in **matchptr**, which the aggregate driver needs to function. The list of component matches pointed to by **matchptr** must be initialized to NULL before adding the first match. This only matches against components added with component_add(). The allocated match list in **matchptr** is automatically released using devm actions, where upon **release** will be called to free any references held by **compare_data**, e.g. when **compare_data** is a :c:type:`device_node` that must be released with of_node_put(). See also component_match_add() and component_match_add_typed().”h]”(hÚ)�”}”(hŒ**Parameters**”h]”jý)�”}”(hj¦h]”hŒ Parameters”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M®hj ubjA)�”}”(hhh]”(jF)�”}”(hŒ@``struct device *parent`` parent device of the aggregate driver ”h]”(jL)�”}”(hŒ``struct device *parent``”h]”jR)�”}”(hjÅh]”hŒstruct device *parent”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M«hj¿ubjh)�”}”(hhh]”hÚ)�”}”(hŒ%parent device of the aggregate driver”h]”hŒ%parent device of the aggregate driver”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÚh´M«hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jÚh´M«hj¼ubjF)�”}”(hŒO``struct component_match **matchptr`` pointer to the list of component matches ”h]”(jL)�”}”(hŒ%``struct component_match **matchptr``”h]”jR)�”}”(hjþh]”hŒ!struct component_match **matchptr”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M¬hjøubjh)�”}”(hhh]”hÚ)�”}”(hŒ(pointer to the list of component matches”h]”hŒ(pointer to the list of component matches”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jh´M¬hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jh´M¬hj¼ubjF)�”}”(hŒS``void (*release)(struct device *, void *)`` release function for **compare_data** ”h]”(jL)�”}”(hŒ,``void (*release)(struct device *, void *)``”h]”jR)�”}”(hj7h]”hŒ(void (*release)(struct device *, void *)”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M­hj1ubjh)�”}”(hhh]”hÚ)�”}”(hŒ%release function for **compare_data**”h]”(hŒrelease function for ”…”�”}”(hjPh²hh³Nh´Nubjý)�”}”(hŒ**compare_data**”h]”hŒ compare_data”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jLh´M­hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jLh´M­hj¼ubjF)�”}”(hŒ]``int (*compare)(struct device *, void *)`` compare function to match against all components ”h]”(jL)�”}”(hŒ+``int (*compare)(struct device *, void *)``”h]”jR)�”}”(hj~h]”hŒ'int (*compare)(struct device *, void *)”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M®hjxubjh)�”}”(hhh]”hÚ)�”}”(hŒ0compare function to match against all components”h]”hŒ0compare function to match against all components”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j“h´M®hj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j“h´M®hj¼ubjF)�”}”(hŒI``void *compare_data`` opaque pointer passed to the **compare** function ”h]”(jL)�”}”(hŒ``void *compare_data``”h]”jR)�”}”(hj·h]”hŒvoid *compare_data”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M¯hj±ubjh)�”}”(hhh]”hÚ)�”}”(hŒ1opaque pointer passed to the **compare** function”h]”(hŒopaque pointer passed to the ”…”�”}”(hjÐh²hh³Nh´Nubjý)�”}”(hŒ **compare**”h]”hŒcompare”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjÐubhŒ function”…”�”}”(hjÐh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÌh´M¯hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jÌh´M¯hj¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hj ubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M±hj ubhÚ)�”}”(hX!Adds a new component match to the list stored in **matchptr**, which the aggregate driver needs to function. The list of component matches pointed to by **matchptr** must be initialized to NULL before adding the first match. This only matches against components added with component_add().”h]”(hŒ1Adds a new component match to the list stored in ”…”�”}”(hjh²hh³Nh´Nubjý)�”}”(hŒ **matchptr**”h]”hŒmatchptr”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjubhŒ\, which the aggregate driver needs to function. The list of component matches pointed to by ”…”�”}”(hjh²hh³Nh´Nubjý)�”}”(hŒ **matchptr**”h]”hŒmatchptr”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjubhŒ| must be initialized to NULL before adding the first match. This only matches against components added with component_add().”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M°hj ubhÚ)�”}”(hX The allocated match list in **matchptr** is automatically released using devm actions, where upon **release** will be called to free any references held by **compare_data**, e.g. when **compare_data** is a :c:type:`device_node` that must be released with of_node_put().”h]”(hŒThe allocated match list in ”…”�”}”(hjMh²hh³Nh´Nubjý)�”}”(hŒ **matchptr**”h]”hŒmatchptr”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjMubhŒ: is automatically released using devm actions, where upon ”…”�”}”(hjMh²hh³Nh´Nubjý)�”}”(hŒ **release**”h]”hŒrelease”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjMubhŒ/ will be called to free any references held by ”…”�”}”(hjMh²hh³Nh´Nubjý)�”}”(hŒ**compare_data**”h]”hŒ compare_data”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjMubhŒ , e.g. when ”…”�”}”(hjMh²hh³Nh´Nubjý)�”}”(hŒ**compare_data**”h]”hŒ compare_data”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjMubhŒ is a ”…”�”}”(hjMh²hh³Nh´Nubh)�”}”(hŒ:c:type:`device_node`”h]”jR)�”}”(hjŸh]”hŒ device_node”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”(jjçŒc-type”eh"]”h$]”h&]”uh1jQhj�ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jçŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jhjljŒ device_node”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MµhjMubhŒ* that must be released with of_node_put().”…”�”}”(hjMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¼h´Mµhj ubhÚ)�”}”(hŒ?See also component_match_add() and component_match_add_typed().”h]”hŒ?See also component_match_add() and component_match_add_typed().”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mºhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´NubjR)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j^Œ&component_match_add_typed (C function)”Œc.component_match_add_typed”hNt”auh1jQhj@h²hh³Nh´Nubjc)�”}”(hhh]”(jh)�”}”(hŒ¡void component_match_add_typed (struct device *parent, struct component_match **matchptr, int (*compare_typed)(struct device *, int, void *), void *compare_data)”h]”jn)�”}”(hŒžvoid component_match_add_typed(struct device *parent, struct component_match **matchptr, int (*compare_typed)(struct device*, int, void*), void *compare_data)”h]”(j")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjòh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MÈubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjòh²hh³jh´MÈubj—)�”}”(hŒcomponent_match_add_typed”h]”j�)�”}”(hŒcomponent_match_add_typed”h]”hŒcomponent_match_add_typed”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjubah}”(h]”h ]”(j¯j°eh"]”h$]”h&]”j´jµuh1j–hjòh²hh³jh´MÈubjZ)�”}”(hŒ€(struct device *parent, struct component_match **matchptr, int (*compare_typed)(struct device*, int, void*), void *compare_data)”h]”(j`)�”}”(hŒstruct device *parent”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshj/ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj/ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jSŒmodname”NŒ classname”Njhjk)�”}”jn]”j¡)�”}”j™jsbŒc.component_match_add_typed”†”asbuh1hhj/ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj/ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj/ubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj+ubj`)�”}”(hŒ!struct component_match **matchptr”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshj¡ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj¡ubh)�”}”(hhh]”j�)�”}”(hŒcomponent_match”h]”hŒcomponent_match”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjÀubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jÅŒmodname”NŒ classname”Njhjk)�”}”jn]”jmŒc.component_match_add_typed”†”asbuh1hhj¡ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj¡ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¡ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¡ubj�)�”}”(hŒmatchptr”h]”hŒmatchptr”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj+ubj`)�”}”(hŒ0int (*compare_typed)(struct device*, int, void*)”h]”(j")�”}”(hŒint”h]”hŒint”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjubjµ)�”}”(hjyh]”hŒ(”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubj�)�”}”(hŒ compare_typed”h]”hŒ compare_typed”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjubjµ)�”}”(hj¢h]”hŒ)”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubjµ)�”}”(hjyh]”hŒ(”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubjt)�”}”(hjwh]”hŒstruct”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”j Œmodname”NŒ classname”Njhjk)�”}”jn]”jmŒc.component_match_add_typed”†”asbuh1hhjubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubjµ)�”}”(hjh]”hŒ,”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjubj")�”}”(hŒint”h]”hŒint”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjubjµ)�”}”(hjh]”hŒ,”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjubj")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubjµ)�”}”(hj¢h]”hŒ)”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj+ubj`)�”}”(hŒvoid *compare_data”h]”(j")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj<ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj<ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj<ubj�)�”}”(hŒ compare_data”h]”hŒ compare_data”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj+ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµuh1jYhjòh²hh³jh´MÈubeh}”(h]”h ]”h"]”h$]”h&]”j´jµj¼ˆuh1jmj½j¾hjîh²hh³jh´MÈubah}”(h]”jéah ]”(jÂjÃeh"]”h$]”h&]”jLjjÈ)jÉhuh1jgh³jh´MÈhjëh²hubjË)�”}”(hhh]”hÚ)�”}”(hŒ1add a component match entry for a typed component”h]”hŒ1add a component match entry for a typed component”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MÈhj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjëh²hh³jh´MÈubeh}”(h]”h ]”(jçŒfunction”eh"]”h$]”h&]”jìjçjíj«jîj«jï‰jð‰jñ‰uh1jbh²hhj@h³Nh´Nubjó)�”}”(hX;**Parameters** ``struct device *parent`` parent device of the aggregate driver ``struct component_match **matchptr`` pointer to the list of component matches ``int (*compare_typed)(struct device *, int, void *)`` compare function to match against all typed components ``void *compare_data`` opaque pointer passed to the **compare** function **Description** Adds a new component match to the list stored in **matchptr**, which the aggregate driver needs to function. The list of component matches pointed to by **matchptr** must be initialized to NULL before adding the first match. This only matches against components added with component_add_typed(). The allocated match list in **matchptr** is automatically released using devm actions. See also component_match_add_release() and component_match_add_typed().”h]”(hÚ)�”}”(hŒ**Parameters**”h]”jý)�”}”(hjµh]”hŒ Parameters”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MÌhj¯ubjA)�”}”(hhh]”(jF)�”}”(hŒ@``struct device *parent`` parent device of the aggregate driver ”h]”(jL)�”}”(hŒ``struct device *parent``”h]”jR)�”}”(hjÔh]”hŒstruct device *parent”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MÉhjÎubjh)�”}”(hhh]”hÚ)�”}”(hŒ%parent device of the aggregate driver”h]”hŒ%parent device of the aggregate driver”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jéh´MÉhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jéh´MÉhjËubjF)�”}”(hŒO``struct component_match **matchptr`` pointer to the list of component matches ”h]”(jL)�”}”(hŒ%``struct component_match **matchptr``”h]”jR)�”}”(hj h]”hŒ!struct component_match **matchptr”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MÊhjubjh)�”}”(hhh]”hÚ)�”}”(hŒ(pointer to the list of component matches”h]”hŒ(pointer to the list of component matches”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j"h´MÊhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j"h´MÊhjËubjF)�”}”(hŒn``int (*compare_typed)(struct device *, int, void *)`` compare function to match against all typed components ”h]”(jL)�”}”(hŒ6``int (*compare_typed)(struct device *, int, void *)``”h]”jR)�”}”(hjFh]”hŒ2int (*compare_typed)(struct device *, int, void *)”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MËhj@ubjh)�”}”(hhh]”hÚ)�”}”(hŒ6compare function to match against all typed components”h]”hŒ6compare function to match against all typed components”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j[h´MËhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j[h´MËhjËubjF)�”}”(hŒI``void *compare_data`` opaque pointer passed to the **compare** function ”h]”(jL)�”}”(hŒ``void *compare_data``”h]”jR)�”}”(hjh]”hŒvoid *compare_data”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MÌhjyubjh)�”}”(hhh]”hÚ)�”}”(hŒ1opaque pointer passed to the **compare** function”h]”(hŒopaque pointer passed to the ”…”�”}”(hj˜h²hh³Nh´Nubjý)�”}”(hŒ **compare**”h]”hŒcompare”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj˜ubhŒ function”…”�”}”(hj˜h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j”h´MÌhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j”h´MÌhjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hj¯ubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hjÌh]”hŒ Description”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MÎhj¯ubhÚ)�”}”(hX'Adds a new component match to the list stored in **matchptr**, which the aggregate driver needs to function. The list of component matches pointed to by **matchptr** must be initialized to NULL before adding the first match. This only matches against components added with component_add_typed().”h]”(hŒ1Adds a new component match to the list stored in ”…”�”}”(hjâh²hh³Nh´Nubjý)�”}”(hŒ **matchptr**”h]”hŒmatchptr”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjâubhŒ\, which the aggregate driver needs to function. The list of component matches pointed to by ”…”�”}”(hjâh²hh³Nh´Nubjý)�”}”(hŒ **matchptr**”h]”hŒmatchptr”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjâubhŒ‚ must be initialized to NULL before adding the first match. This only matches against components added with component_add_typed().”…”�”}”(hjâh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MÍhj¯ubhÚ)�”}”(hŒVThe allocated match list in **matchptr** is automatically released using devm actions.”h]”(hŒThe allocated match list in ”…”�”}”(hjh²hh³Nh´Nubjý)�”}”(hŒ **matchptr**”h]”hŒmatchptr”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjubhŒ. is automatically released using devm actions.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MÒhj¯ubhÚ)�”}”(hŒGSee also component_match_add_release() and component_match_add_typed().”h]”hŒGSee also component_match_add_release() and component_match_add_typed().”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MÕhj¯ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´NubjR)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j^Œ,component_master_add_with_match (C function)”Œ!c.component_master_add_with_match”hNt”auh1jQhj@h²hh³Nh´Nubjc)�”}”(hhh]”(jh)�”}”(hŒ‚int component_master_add_with_match (struct device *parent, const struct component_master_ops *ops, struct component_match *match)”h]”jn)�”}”(hŒ�int component_master_add_with_match(struct device *parent, const struct component_master_ops *ops, struct component_match *match)”h]”(j")�”}”(hŒint”h]”hŒint”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjah²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mõubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjah²hh³jsh´Mõubj—)�”}”(hŒcomponent_master_add_with_match”h]”j�)�”}”(hŒcomponent_master_add_with_match”h]”hŒcomponent_master_add_with_match”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj‚ubah}”(h]”h ]”(j¯j°eh"]”h$]”h&]”j´jµuh1j–hjah²hh³jsh´MõubjZ)�”}”(hŒ^(struct device *parent, const struct component_master_ops *ops, struct component_match *match)”h]”(j`)�”}”(hŒstruct device *parent”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjžubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjžubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jÂŒmodname”NŒ classname”Njhjk)�”}”jn]”j¡)�”}”j™jˆsbŒ!c.component_master_add_with_match”†”asbuh1hhjžubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjžubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjžubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hjšubj`)�”}”(hŒ&const struct component_master_ops *ops”h]”(jt)�”}”(hŒconst”h]”hŒconst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjubjt)�”}”(hjwh]”hŒstruct”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjubh)�”}”(hhh]”j�)�”}”(hŒcomponent_master_ops”h]”hŒcomponent_master_ops”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jPŒmodname”NŒ classname”Njhjk)�”}”jn]”jÜŒ!c.component_master_add_with_match”†”asbuh1hhjubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubj�)�”}”(hŒops”h]”hŒops”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hjšubj`)�”}”(hŒstruct component_match *match”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjœubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjœubh)�”}”(hhh]”j�)�”}”(hŒcomponent_match”h]”hŒcomponent_match”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jÀŒmodname”NŒ classname”Njhjk)�”}”jn]”jÜŒ!c.component_master_add_with_match”†”asbuh1hhjœubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjœubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjœubj�)�”}”(hŒmatch”h]”hŒmatch”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hjšubeh}”(h]”h ]”h"]”h$]”h&]”j´jµuh1jYhjah²hh³jsh´Mõubeh}”(h]”h ]”h"]”h$]”h&]”j´jµj¼ˆuh1jmj½j¾hj]h²hh³jsh´Mõubah}”(h]”jXah ]”(jÂjÃeh"]”h$]”h&]”jLjjÈ)jÉhuh1jgh³jsh´MõhjZh²hubjË)�”}”(hhh]”hÚ)�”}”(hŒregister an aggregate driver”h]”hŒregister an aggregate driver”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mõhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjZh²hh³jsh´Mõubeh}”(h]”h ]”(jçŒfunction”eh"]”h$]”h&]”jìjçjíj9jîj9jï‰jð‰jñ‰uh1jbh²hhj@h³Nh´Nubjó)�”}”(hX`**Parameters** ``struct device *parent`` parent device of the aggregate driver ``const struct component_master_ops *ops`` callbacks for the aggregate driver ``struct component_match *match`` component match list for the aggregate driver **Description** Registers a new aggregate driver consisting of the components added to **match** by calling one of the component_match_add() functions. Once all components in **match** are available, it will be assembled by calling :c:type:`component_master_ops.bind ` from **ops**. Must be unregistered by calling component_master_del().”h]”(hÚ)�”}”(hŒ**Parameters**”h]”jý)�”}”(hjCh]”hŒ Parameters”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjAubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mùhj=ubjA)�”}”(hhh]”(jF)�”}”(hŒ@``struct device *parent`` parent device of the aggregate driver ”h]”(jL)�”}”(hŒ``struct device *parent``”h]”jR)�”}”(hjbh]”hŒstruct device *parent”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Möhj\ubjh)�”}”(hhh]”hÚ)�”}”(hŒ%parent device of the aggregate driver”h]”hŒ%parent device of the aggregate driver”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jwh´Möhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jwh´MöhjYubjF)�”}”(hŒN``const struct component_master_ops *ops`` callbacks for the aggregate driver ”h]”(jL)�”}”(hŒ*``const struct component_master_ops *ops``”h]”jR)�”}”(hj›h]”hŒ&const struct component_master_ops *ops”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M÷hj•ubjh)�”}”(hhh]”hÚ)�”}”(hŒ"callbacks for the aggregate driver”h]”hŒ"callbacks for the aggregate driver”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j°h´M÷hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j°h´M÷hjYubjF)�”}”(hŒP``struct component_match *match`` component match list for the aggregate driver ”h]”(jL)�”}”(hŒ!``struct component_match *match``”h]”jR)�”}”(hjÔh]”hŒstruct component_match *match”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MøhjÎubjh)�”}”(hhh]”hÚ)�”}”(hŒ-component match list for the aggregate driver”h]”hŒ-component match list for the aggregate driver”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jéh´Møhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jéh´MøhjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hj=ubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Múhj=ubhÚ)�”}”(hXXRegisters a new aggregate driver consisting of the components added to **match** by calling one of the component_match_add() functions. Once all components in **match** are available, it will be assembled by calling :c:type:`component_master_ops.bind ` from **ops**. Must be unregistered by calling component_master_del().”h]”(hŒGRegisters a new aggregate driver consisting of the components added to ”…”�”}”(hj%h²hh³Nh´Nubjý)�”}”(hŒ **match**”h]”hŒmatch”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj%ubhŒO by calling one of the component_match_add() functions. Once all components in ”…”�”}”(hj%h²hh³Nh´Nubjý)�”}”(hŒ **match**”h]”hŒmatch”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj%ubhŒ0 are available, it will be assembled by calling ”…”�”}”(hj%h²hh³Nh´Nubh)�”}”(hŒ::c:type:`component_master_ops.bind `”h]”jR)�”}”(hjSh]”hŒcomponent_master_ops.bind”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”(jjçŒc-type”eh"]”h$]”h&]”uh1jQhjQubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jhjljŒcomponent_master_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mùhj%ubhŒ from ”…”�”}”(hj%h²hh³Nh´Nubjý)�”}”(hŒ**ops**”h]”hŒops”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj%ubhŒ9. Must be unregistered by calling component_master_del().”…”�”}”(hj%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jph´Mùhj=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´NubjR)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j^Œ!component_master_del (C function)”Œc.component_master_del”hNt”auh1jQhj@h²hh³Nh´Nubjc)�”}”(hhh]”(jh)�”}”(hŒYvoid component_master_del (struct device *parent, const struct component_master_ops *ops)”h]”jn)�”}”(hŒXvoid component_master_del(struct device *parent, const struct component_master_ops *ops)”h]”(j")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj©h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M%ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj©h²hh³j»h´M%ubj—)�”}”(hŒcomponent_master_del”h]”j�)�”}”(hŒcomponent_master_del”h]”hŒcomponent_master_del”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjÊubah}”(h]”h ]”(j¯j°eh"]”h$]”h&]”j´jµuh1j–hj©h²hh³j»h´M%ubjZ)�”}”(hŒ?(struct device *parent, const struct component_master_ops *ops)”h]”(j`)�”}”(hŒstruct device *parent”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjæubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjæubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”j Œmodname”NŒ classname”Njhjk)�”}”jn]”j¡)�”}”j™jÐsbŒc.component_master_del”†”asbuh1hhjæubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjæubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjæubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hjâubj`)�”}”(hŒ&const struct component_master_ops *ops”h]”(jt)�”}”(hjh]”hŒconst”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjX ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjX ubjt)�”}”(hjwh]”hŒstruct”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjX ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjX ubh)�”}”(hhh]”j�)�”}”(hŒcomponent_master_ops”h]”hŒcomponent_master_ops”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj’ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”j— Œmodname”NŒ classname”Njhjk)�”}”jn]”j$ Œc.component_master_del”†”asbuh1hhjX ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjX ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjX ubj�)�”}”(hŒops”h]”hŒops”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjX ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hjâubeh}”(h]”h ]”h"]”h$]”h&]”j´jµuh1jYhj©h²hh³j»h´M%ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµj¼ˆuh1jmj½j¾hj¥h²hh³j»h´M%ubah}”(h]”j ah ]”(jÂjÃeh"]”h$]”h&]”jLjjÈ)jÉhuh1jgh³j»h´M%hj¢h²hubjË)�”}”(hhh]”hÚ)�”}”(hŒunregister an aggregate driver”h]”hŒunregister an aggregate driver”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.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ñ‰uh1jbh²hhj@h³Nh´Nubjó)�”}”(hX•**Parameters** ``struct device *parent`` parent device of the aggregate driver ``const struct component_master_ops *ops`` callbacks for the aggregate driver **Description** Unregisters an aggregate driver registered with component_master_add_with_match(). If necessary the aggregate driver is first disassembled by calling :c:type:`component_master_ops.unbind ` from **ops**.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”jý)�”}”(hj!h]”hŒ Parameters”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M)hj!ubjA)�”}”(hhh]”(jF)�”}”(hŒ@``struct device *parent`` parent device of the aggregate driver ”h]”(jL)�”}”(hŒ``struct device *parent``”h]”jR)�”}”(hj9!h]”hŒstruct device *parent”…”�”}”(hj;!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj7!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M&hj3!ubjh)�”}”(hhh]”hÚ)�”}”(hŒ%parent device of the aggregate driver”h]”hŒ%parent device of the aggregate driver”…”�”}”(hjR!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jN!h´M&hjO!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj3!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jN!h´M&hj0!ubjF)�”}”(hŒN``const struct component_master_ops *ops`` callbacks for the aggregate driver ”h]”(jL)�”}”(hŒ*``const struct component_master_ops *ops``”h]”jR)�”}”(hjr!h]”hŒ&const struct component_master_ops *ops”…”�”}”(hjt!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjp!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M'hjl!ubjh)�”}”(hhh]”hÚ)�”}”(hŒ"callbacks for the aggregate driver”h]”hŒ"callbacks for the aggregate driver”…”�”}”(hj‹!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j‡!h´M'hjˆ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjl!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j‡!h´M'hj0!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hj!ubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hj­!h]”hŒ Description”…”�”}”(hj¯!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj«!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M)hj!ubhÚ)�”}”(hŒàUnregisters an aggregate driver registered with component_master_add_with_match(). If necessary the aggregate driver is first disassembled by calling :c:type:`component_master_ops.unbind ` from **ops**.”h]”(hŒ–Unregisters an aggregate driver registered with component_master_add_with_match(). If necessary the aggregate driver is first disassembled by calling ”…”�”}”(hjÃ!h²hh³Nh´Nubh)�”}”(hŒ<:c:type:`component_master_ops.unbind `”h]”jR)�”}”(hjÍ!h]”hŒcomponent_master_ops.unbind”…”�”}”(hjÏ!h²hh³Nh´Nubah}”(h]”h ]”(jjçŒc-type”eh"]”h$]”h&]”uh1jQhjË!ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jhjljŒcomponent_master_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M(hjÃ!ubhŒ from ”…”�”}”(hjÃ!h²hh³Nh´Nubjý)�”}”(hŒ**ops**”h]”hŒops”…”�”}”(hjï!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjÃ!ubhŒ.”…”�”}”(hjÃ!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jê!h´M(hj!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´NubjR)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j^Œ!component_unbind_all (C function)”Œc.component_unbind_all”hNt”auh1jQhj@h²hh³Nh´Nubjc)�”}”(hhh]”(jh)�”}”(hŒ=void component_unbind_all (struct device *parent, void *data)”h]”jn)�”}”(hŒ` functions. Should be called from :c:type:`component_master_ops.unbind `.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”jý)�”}”(hjK#h]”hŒ Parameters”…”�”}”(hjM#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjI#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M`hjE#ubjA)�”}”(hhh]”(jF)�”}”(hŒ@``struct device *parent`` parent device of the aggregate driver ”h]”(jL)�”}”(hŒ``struct device *parent``”h]”jR)�”}”(hjj#h]”hŒstruct device *parent”…”�”}”(hjl#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjh#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M]hjd#ubjh)�”}”(hhh]”hÚ)�”}”(hŒ%parent device of the aggregate driver”h]”hŒ%parent device of the aggregate driver”…”�”}”(hjƒ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j#h´M]hj€#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjd#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j#h´M]hja#ubjF)�”}”(hŒ8``void *data`` opaque pointer, passed to all components ”h]”(jL)�”}”(hŒ``void *data``”h]”jR)�”}”(hj£#h]”hŒ void *data”…”�”}”(hj¥#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj¡#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M^hj�#ubjh)�”}”(hhh]”hÚ)�”}”(hŒ(opaque pointer, passed to all components”h]”hŒ(opaque pointer, passed to all components”…”�”}”(hj¼#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¸#h´M^hj¹#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj�#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j¸#h´M^hja#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hjE#ubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hjÞ#h]”hŒ Description”…”�”}”(hjà#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjÜ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M`hjE#ubhÚ)�”}”(hŒÙUnbinds all components of the aggregate device by passing **data** to their :c:type:`component_ops.unbind ` functions. Should be called from :c:type:`component_master_ops.unbind `.”h]”(hŒ:Unbinds all components of the aggregate device by passing ”…”�”}”(hjô#h²hh³Nh´Nubjý)�”}”(hŒ**data**”h]”hŒdata”…”�”}”(hjü#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjô#ubhŒ to their ”…”�”}”(hjô#h²hh³Nh´Nubh)�”}”(hŒ.:c:type:`component_ops.unbind `”h]”jR)�”}”(hj$h]”hŒcomponent_ops.unbind”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”(jjçŒc-type”eh"]”h$]”h&]”uh1jQhj$ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jhjljŒ component_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M_hjô#ubhŒ" functions. Should be called from ”…”�”}”(hjô#h²hh³Nh´Nubh)�”}”(hŒ<:c:type:`component_master_ops.unbind `”h]”jR)�”}”(hj4$h]”hŒcomponent_master_ops.unbind”…”�”}”(hj6$h²hh³Nh´Nubah}”(h]”h ]”(jjçŒc-type”eh"]”h$]”h&]”uh1jQhj2$ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jhjljŒcomponent_master_ops”uh1hh³j-$h´M_hjô#ubhŒ.”…”�”}”(hjô#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j-$h´M_hjE#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´NubjR)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j^Œcomponent_bind_all (C function)”Œc.component_bind_all”hNt”auh1jQhj@h²hh³Nh´Nubjc)�”}”(hhh]”(jh)�”}”(hŒ:int component_bind_all (struct device *parent, void *data)”h]”jn)�”}”(hŒ9int component_bind_all(struct device *parent, void *data)”h]”(j")�”}”(hŒint”h]”hŒint”…”�”}”(hj{$h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjw$h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M¯ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ$h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjw$h²hh³j‰$h´M¯ubj—)�”}”(hŒcomponent_bind_all”h]”j�)�”}”(hŒcomponent_bind_all”h]”hŒcomponent_bind_all”…”�”}”(hjœ$h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj˜$ubah}”(h]”h ]”(j¯j°eh"]”h$]”h&]”j´jµuh1j–hjw$h²hh³j‰$h´M¯ubjZ)�”}”(hŒ#(struct device *parent, void *data)”h]”(j`)�”}”(hŒstruct device *parent”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hj¸$h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshj´$ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ$h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj´$ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÖ$h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjÓ$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jØ$Œmodname”NŒ classname”Njhjk)�”}”jn]”j¡)�”}”j™jž$sbŒc.component_bind_all”†”asbuh1hhj´$ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö$h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj´$ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj´$ubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj´$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj°$ubj`)�”}”(hŒ void *data”h]”(j")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj*%h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj&%ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8%h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj&%ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjF%h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj&%ubj�)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjS%h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj&%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj°$ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµuh1jYhjw$h²hh³j‰$h´M¯ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµj¼ˆuh1jmj½j¾hjs$h²hh³j‰$h´M¯ubah}”(h]”jn$ah ]”(jÂjÃeh"]”h$]”h&]”jLjjÈ)jÉhuh1jgh³j‰$h´M¯hjp$h²hubjË)�”}”(hhh]”hÚ)�”}”(hŒ*bind all components of an aggregate driver”h]”hŒ*bind all components of an aggregate driver”…”�”}”(hj}%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M¯hjz%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhjp$h²hh³j‰$h´M¯ubeh}”(h]”h ]”(jçŒfunction”eh"]”h$]”h&]”jìjçjíj•%jîj•%jï‰jð‰jñ‰uh1jbh²hhj@h³Nh´Nubjó)�”}”(hXs**Parameters** ``struct device *parent`` parent device of the aggregate driver ``void *data`` opaque pointer, passed to all components **Description** Binds all components of the aggregate **dev** by passing **data** to their :c:type:`component_ops.bind ` functions. Should be called from :c:type:`component_master_ops.bind `.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”jý)�”}”(hjŸ%h]”hŒ Parameters”…”�”}”(hj¡%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj�%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M³hj™%ubjA)�”}”(hhh]”(jF)�”}”(hŒ@``struct device *parent`` parent device of the aggregate driver ”h]”(jL)�”}”(hŒ``struct device *parent``”h]”jR)�”}”(hj¾%h]”hŒstruct device *parent”…”�”}”(hjÀ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj¼%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M°hj¸%ubjh)�”}”(hhh]”hÚ)�”}”(hŒ%parent device of the aggregate driver”h]”hŒ%parent device of the aggregate driver”…”�”}”(hj×%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÓ%h´M°hjÔ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj¸%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jÓ%h´M°hjµ%ubjF)�”}”(hŒ8``void *data`` opaque pointer, passed to all components ”h]”(jL)�”}”(hŒ``void *data``”h]”jR)�”}”(hj÷%h]”hŒ void *data”…”�”}”(hjù%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjõ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M±hjñ%ubjh)�”}”(hhh]”hÚ)�”}”(hŒ(opaque pointer, passed to all components”h]”hŒ(opaque pointer, passed to all components”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j &h´M±hj &ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjñ%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j &h´M±hjµ%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hj™%ubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hj2&h]”hŒ Description”…”�”}”(hj4&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj0&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M³hj™%ubhÚ)�”}”(hŒÔBinds all components of the aggregate **dev** by passing **data** to their :c:type:`component_ops.bind ` functions. Should be called from :c:type:`component_master_ops.bind `.”h]”(hŒ&Binds all components of the aggregate ”…”�”}”(hjH&h²hh³Nh´Nubjý)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjP&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjH&ubhŒ by passing ”…”�”}”(hjH&h²hh³Nh´Nubjý)�”}”(hŒ**data**”h]”hŒdata”…”�”}”(hjb&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjH&ubhŒ to their ”…”�”}”(hjH&h²hh³Nh´Nubh)�”}”(hŒ,:c:type:`component_ops.bind `”h]”jR)�”}”(hjv&h]”hŒcomponent_ops.bind”…”�”}”(hjx&h²hh³Nh´Nubah}”(h]”h ]”(jjçŒc-type”eh"]”h$]”h&]”uh1jQhjt&ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jhjljŒ component_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M²hjH&ubhŒ" functions. Should be called from ”…”�”}”(hjH&h²hh³Nh´Nubh)�”}”(hŒ::c:type:`component_master_ops.bind `”h]”jR)�”}”(hjš&h]”hŒcomponent_master_ops.bind”…”�”}”(hjœ&h²hh³Nh´Nubah}”(h]”h ]”(jjçŒc-type”eh"]”h$]”h&]”uh1jQhj˜&ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jhjljŒcomponent_master_ops”uh1hh³j“&h´M²hjH&ubhŒ.”…”�”}”(hjH&h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j“&h´M²hj™%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´NubjR)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j^Œ component_add_typed (C function)”Œc.component_add_typed”hNt”auh1jQhj@h²hh³Nh´Nubjc)�”}”(hhh]”(jh)�”}”(hŒ_int component_add_typed (struct device *dev, const struct component_ops *ops, int subcomponent)”h]”jn)�”}”(hŒ^int component_add_typed(struct device *dev, const struct component_ops *ops, int subcomponent)”h]”(j")�”}”(hŒint”h]”hŒint”…”�”}”(hjá&h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÝ&h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Múubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð&h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjÝ&h²hh³jï&h´Múubj—)�”}”(hŒcomponent_add_typed”h]”j�)�”}”(hŒcomponent_add_typed”h]”hŒcomponent_add_typed”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjþ&ubah}”(h]”h ]”(j¯j°eh"]”h$]”h&]”j´jµuh1j–hjÝ&h²hh³jï&h´MúubjZ)�”}”(hŒG(struct device *dev, const struct component_ops *ops, int subcomponent)”h]”(j`)�”}”(hŒstruct device *dev”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshj'ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+'h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj'ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj<'h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj9'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”j>'Œmodname”NŒ classname”Njhjk)�”}”jn]”j¡)�”}”j™j'sbŒc.component_add_typed”†”asbuh1hhj'ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\'h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj'ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjj'h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj'ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjw'h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj'ubj`)�”}”(hŒconst struct component_ops *ops”h]”(jt)�”}”(hjh]”hŒconst”…”�”}”(hj�'h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjŒ'ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�'h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjŒ'ubjt)�”}”(hjwh]”hŒstruct”…”�”}”(hj«'h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjŒ'ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸'h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjŒ'ubh)�”}”(hhh]”j�)�”}”(hŒ component_ops”h]”hŒ component_ops”…”�”}”(hjÉ'h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjÆ'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”jË'Œmodname”NŒ classname”Njhjk)�”}”jn]”jX'Œc.component_add_typed”†”asbuh1hhjŒ'ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç'h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjŒ'ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjõ'h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjŒ'ubj�)�”}”(hŒops”h]”hŒops”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjŒ'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj'ubj`)�”}”(hŒint subcomponent”h]”(j")�”}”(hŒint”h]”hŒint”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj(ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)(h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj(ubj�)�”}”(hŒ subcomponent”h]”hŒ subcomponent”…”�”}”(hj7(h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj'ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµuh1jYhjÝ&h²hh³jï&h´Múubeh}”(h]”h ]”h"]”h$]”h&]”j´jµj¼ˆuh1jmj½j¾hjÙ&h²hh³jï&h´Múubah}”(h]”jÔ&ah ]”(jÂjÃeh"]”h$]”h&]”jLjjÈ)jÉhuh1jgh³jï&h´MúhjÖ&h²hubjË)�”}”(hhh]”hÚ)�”}”(hŒregister a component”h]”hŒregister a component”…”�”}”(hja(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.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íjy(jîjy(jï‰jð‰jñ‰uh1jbh²hhj@h³Nh´Nubjó)�”}”(hXÞ**Parameters** ``struct device *dev`` component device ``const struct component_ops *ops`` component callbacks ``int subcomponent`` nonzero identifier for subcomponents **Description** Register a new component for **dev**. Functions in **ops** will be call when the aggregate driver is ready to bind the overall driver by calling component_bind_all(). See also :c:type:`struct component_ops `. **subcomponent** must be nonzero and is used to differentiate between multiple components registered on the same device **dev**. These components are match using component_match_add_typed(). The component needs to be unregistered at driver unload/disconnect by calling component_del(). See also component_add().”h]”(hÚ)�”}”(hŒ**Parameters**”h]”jý)�”}”(hjƒ(h]”hŒ Parameters”…”�”}”(hj…(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj�(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mþhj}(ubjA)�”}”(hhh]”(jF)�”}”(hŒ(``struct device *dev`` component device ”h]”(jL)�”}”(hŒ``struct device *dev``”h]”jR)�”}”(hj¢(h]”hŒstruct device *dev”…”�”}”(hj¤(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj (ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mûhjœ(ubjh)�”}”(hhh]”hÚ)�”}”(hŒcomponent device”h]”hŒcomponent device”…”�”}”(hj»(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j·(h´Mûhj¸(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjœ(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j·(h´Mûhj™(ubjF)�”}”(hŒ8``const struct component_ops *ops`` component callbacks ”h]”(jL)�”}”(hŒ#``const struct component_ops *ops``”h]”jR)�”}”(hjÛ(h]”hŒconst struct component_ops *ops”…”�”}”(hjÝ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjÙ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´MühjÕ(ubjh)�”}”(hhh]”hÚ)�”}”(hŒcomponent callbacks”h]”hŒcomponent callbacks”…”�”}”(hjô(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jð(h´Mühjñ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjÕ(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jð(h´Mühj™(ubjF)�”}”(hŒ:``int subcomponent`` nonzero identifier for subcomponents ”h]”(jL)�”}”(hŒ``int subcomponent``”h]”jR)�”}”(hj)h]”hŒint subcomponent”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mýhj)ubjh)�”}”(hhh]”hÚ)�”}”(hŒ$nonzero identifier for subcomponents”h]”hŒ$nonzero identifier for subcomponents”…”�”}”(hj-)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j))h´Mýhj*)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j))h´Mýhj™(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hj}(ubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hjO)h]”hŒ Description”…”�”}”(hjQ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjM)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mÿhj}(ub•ÂOhÚ)�”}”(hŒßRegister a new component for **dev**. Functions in **ops** will be call when the aggregate driver is ready to bind the overall driver by calling component_bind_all(). See also :c:type:`struct component_ops `.”h]”(hŒRegister a new component for ”…”�”}”(hje)h²hh³Nh´Nubjý)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjm)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühje)ubhŒ. Functions in ”…”�”}”(hje)h²hh³Nh´Nubjý)�”}”(hŒ**ops**”h]”hŒops”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühje)ubhŒv will be call when the aggregate driver is ready to bind the overall driver by calling component_bind_all(). See also ”…”�”}”(hje)h²hh³Nh´Nubh)�”}”(hŒ.:c:type:`struct component_ops `”h]”jR)�”}”(hj“)h]”hŒstruct component_ops”…”�”}”(hj•)h²hh³Nh´Nubah}”(h]”h ]”(jjçŒc-type”eh"]”h$]”h&]”uh1jQhj‘)ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jhjljŒ component_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mþhje)ubhŒ.”…”�”}”(hje)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j°)h´Mþhj}(ubhÚ)�”}”(hŒ¾**subcomponent** must be nonzero and is used to differentiate between multiple components registered on the same device **dev**. These components are match using component_match_add_typed().”h]”(jý)�”}”(hŒ**subcomponent**”h]”hŒ subcomponent”…”�”}”(hj¿)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj»)ubhŒh must be nonzero and is used to differentiate between multiple components registered on the same device ”…”�”}”(hj»)h²hh³Nh´Nubjý)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjÑ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj»)ubhŒ?. These components are match using component_match_add_typed().”…”�”}”(hj»)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mhj}(ubhÚ)�”}”(hŒ^The component needs to be unregistered at driver unload/disconnect by calling component_del().”h]”hŒ^The component needs to be unregistered at driver unload/disconnect by calling component_del().”…”�”}”(hjê)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mhj}(ubhÚ)�”}”(hŒSee also component_add().”h]”hŒSee also component_add().”…”�”}”(hjù)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M hj}(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´NubjR)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j^Œcomponent_add (C function)”Œc.component_add”hNt”auh1jQhj@h²hh³Nh´Nubjc)�”}”(hhh]”(jh)�”}”(hŒGint component_add (struct device *dev, const struct component_ops *ops)”h]”jn)�”}”(hŒFint component_add(struct device *dev, const struct component_ops *ops)”h]”(j")�”}”(hŒint”h]”hŒint”…”�”}”(hj(*h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj$*h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7*h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj$*h²hh³j6*h´Mubj—)�”}”(hŒ component_add”h]”j�)�”}”(hŒ component_add”h]”hŒ component_add”…”�”}”(hjI*h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjE*ubah}”(h]”h ]”(j¯j°eh"]”h$]”h&]”j´jµuh1j–hj$*h²hh³j6*h´MubjZ)�”}”(hŒ5(struct device *dev, const struct component_ops *ops)”h]”(j`)�”}”(hŒstruct device *dev”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hje*h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshja*ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr*h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hja*ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjƒ*h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj€*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”j…*Œmodname”NŒ classname”Njhjk)�”}”jn]”j¡)�”}”j™jK*sbŒc.component_add”†”asbuh1hhja*ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£*h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hja*ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj±*h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hja*ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj¾*h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhja*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj]*ubj`)�”}”(hŒconst struct component_ops *ops”h]”(jt)�”}”(hjh]”hŒconst”…”�”}”(hj×*h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjÓ*ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä*h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjÓ*ubjt)�”}”(hjwh]”hŒstruct”…”�”}”(hjò*h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshjÓ*ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ*h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjÓ*ubh)�”}”(hhh]”j�)�”}”(hŒ component_ops”h]”hŒ component_ops”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj +ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”j+Œmodname”NŒ classname”Njhjk)�”}”jn]”jŸ*Œc.component_add”†”asbuh1hhjÓ*ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.+h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjÓ*ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj<+h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÓ*ubj�)�”}”(hŒops”h]”hŒops”…”�”}”(hjI+h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjÓ*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj]*ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµuh1jYhj$*h²hh³j6*h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j´jµj¼ˆuh1jmj½j¾hj *h²hh³j6*h´Mubah}”(h]”j*ah ]”(jÂjÃeh"]”h$]”h&]”jLjjÈ)jÉhuh1jgh³j6*h´Mhj*h²hubjË)�”}”(hhh]”hÚ)�”}”(hŒregister a component”h]”hŒregister a component”…”�”}”(hjs+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mhjp+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊhj*h²hh³j6*h´Mubeh}”(h]”h ]”(jçŒfunction”eh"]”h$]”h&]”jìjçjíj‹+jîj‹+jï‰jð‰jñ‰uh1jbh²hhj@h³Nh´Nubjó)�”}”(hX4**Parameters** ``struct device *dev`` component device ``const struct component_ops *ops`` component callbacks **Description** Register a new component for **dev**. Functions in **ops** will be called when the aggregate driver is ready to bind the overall driver by calling component_bind_all(). See also :c:type:`struct component_ops `. The component needs to be unregistered at driver unload/disconnect by calling component_del(). See also component_add_typed() for a variant that allows multiple different components on the same device.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”jý)�”}”(hj•+h]”hŒ Parameters”…”�”}”(hj—+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj“+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mhj�+ubjA)�”}”(hhh]”(jF)�”}”(hŒ(``struct device *dev`` component device ”h]”(jL)�”}”(hŒ``struct device *dev``”h]”jR)�”}”(hj´+h]”hŒstruct device *dev”…”�”}”(hj¶+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj²+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mhj®+ubjh)�”}”(hhh]”hÚ)�”}”(hŒcomponent device”h]”hŒcomponent device”…”�”}”(hjÍ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÉ+h´MhjÊ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj®+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³jÉ+h´Mhj«+ubjF)�”}”(hŒ8``const struct component_ops *ops`` component callbacks ”h]”(jL)�”}”(hŒ#``const struct component_ops *ops``”h]”jR)�”}”(hjí+h]”hŒconst struct component_ops *ops”…”�”}”(hjï+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjë+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mhjç+ubjh)�”}”(hhh]”hÚ)�”}”(hŒcomponent callbacks”h]”hŒcomponent callbacks”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j,h´Mhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjç+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j,h´Mhj«+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hj�+ubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hj(,h]”hŒ Description”…”�”}”(hj*,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj&,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mhj�+ubhÚ)�”}”(hŒáRegister a new component for **dev**. Functions in **ops** will be called when the aggregate driver is ready to bind the overall driver by calling component_bind_all(). See also :c:type:`struct component_ops `.”h]”(hŒRegister a new component for ”…”�”}”(hj>,h²hh³Nh´Nubjý)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjF,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj>,ubhŒ. Functions in ”…”�”}”(hj>,h²hh³Nh´Nubjý)�”}”(hŒ**ops**”h]”hŒops”…”�”}”(hjX,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj>,ubhŒx will be called when the aggregate driver is ready to bind the overall driver by calling component_bind_all(). See also ”…”�”}”(hj>,h²hh³Nh´Nubh)�”}”(hŒ.:c:type:`struct component_ops `”h]”jR)�”}”(hjl,h]”hŒstruct component_ops”…”�”}”(hjn,h²hh³Nh´Nubah}”(h]”h ]”(jjçŒc-type”eh"]”h$]”h&]”uh1jQhjj,ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jhjljŒ component_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mhj>,ubhŒ.”…”�”}”(hj>,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j‰,h´Mhj�+ubhÚ)�”}”(hŒ^The component needs to be unregistered at driver unload/disconnect by calling component_del().”h]”hŒ^The component needs to be unregistered at driver unload/disconnect by calling component_del().”…”�”}”(hj”,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´Mhj�+ubhÚ)�”}”(hŒjSee also component_add_typed() for a variant that allows multiple different components on the same device.”h]”hŒjSee also component_add_typed() for a variant that allows multiple different components on the same device.”…”�”}”(hj£,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M!hj�+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´NubjR)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j^Œcomponent_del (C function)”Œc.component_del”hNt”auh1jQhj@h²hh³Nh´Nubjc)�”}”(hhh]”(jh)�”}”(hŒHvoid component_del (struct device *dev, const struct component_ops *ops)”h]”jn)�”}”(hŒGvoid component_del(struct device *dev, const struct component_ops *ops)”h]”(j")�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÒ,h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÎ,h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M,ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá,h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hjÎ,h²hh³jà,h´M,ubj—)�”}”(hŒ component_del”h]”j�)�”}”(hŒ component_del”h]”hŒ component_del”…”�”}”(hjó,h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhjï,ubah}”(h]”h ]”(j¯j°eh"]”h$]”h&]”j´jµuh1j–hjÎ,h²hh³jà,h´M,ubjZ)�”}”(hŒ5(struct device *dev, const struct component_ops *ops)”h]”(j`)�”}”(hŒstruct device *dev”h]”(jt)�”}”(hjwh]”hŒstruct”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshj -ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj -ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj--h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj*-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”j/-Œmodname”NŒ classname”Njhjk)�”}”jn]”j¡)�”}”j™jõ,sbŒc.component_del”†”asbuh1hhj -ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjM-h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj -ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hj[-h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj -ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjh-h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj -ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj-ubj`)�”}”(hŒconst struct component_ops *ops”h]”(jt)�”}”(hjh]”hŒconst”…”�”}”(hj�-h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshj}-ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽ-h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj}-ubjt)�”}”(hjwh]”hŒstruct”…”�”}”(hjœ-h²hh³Nh´Nubah}”(h]”h ]”j€ah"]”h$]”h&]”uh1jshj}-ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©-h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj}-ubh)�”}”(hhh]”j�)�”}”(hŒ component_ops”h]”hŒ component_ops”…”�”}”(hjº-h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj·-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”j™Œ reftarget”j¼-Œmodname”NŒ classname”Njhjk)�”}”jn]”jI-Œc.component_del”†”asbuh1hhj}-ubj†)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØ-h²hh³Nh´Nubah}”(h]”h ]”j’ah"]”h$]”h&]”uh1j…hj}-ubjµ)�”}”(hj¸h]”hŒ*”…”�”}”(hjæ-h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj}-ubj�)�”}”(hŒops”h]”hŒops”…”�”}”(hjó-h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1jœhj}-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj´jµuh1j_hj-ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµuh1jYhjÎ,h²hh³jà,h´M,ubeh}”(h]”h ]”h"]”h$]”h&]”j´jµj¼ˆuh1jmj½j¾hjÊ,h²hh³jà,h´M,ubah}”(h]”jÅ,ah ]”(jÂjÃeh"]”h$]”h&]”jLjjÈ)jÉhuh1jgh³jà,h´M,hjÇ,h²hubjË)�”}”(hhh]”hÚ)�”}”(hŒunregister a component”h]”hŒunregister a component”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.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íj5.jîj5.jï‰jð‰jñ‰uh1jbh²hhj@h³Nh´Nubjó)�”}”(hXG**Parameters** ``struct device *dev`` component device ``const struct component_ops *ops`` component callbacks **Description** Unregister a component added with component_add(). If the component is bound into an aggregate driver, this will force the entire aggregate driver, including all its components, to be unbound.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”jý)�”}”(hj?.h]”hŒ Parameters”…”�”}”(hjA.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühj=.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M0hj9.ubjA)�”}”(hhh]”(jF)�”}”(hŒ(``struct device *dev`` component device ”h]”(jL)�”}”(hŒ``struct device *dev``”h]”jR)�”}”(hj^.h]”hŒstruct device *dev”…”�”}”(hj`.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj\.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M-hjX.ubjh)�”}”(hhh]”hÚ)�”}”(hŒcomponent device”h]”hŒcomponent device”…”�”}”(hjw.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³js.h´M-hjt.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjX.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³js.h´M-hjU.ubjF)�”}”(hŒ8``const struct component_ops *ops`` component callbacks ”h]”(jL)�”}”(hŒ#``const struct component_ops *ops``”h]”jR)�”}”(hj—.h]”hŒconst struct component_ops *ops”…”�”}”(hj™.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj•.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jKh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M.hj‘.ubjh)�”}”(hhh]”hÚ)�”}”(hŒcomponent callbacks”h]”hŒcomponent callbacks”…”�”}”(hj°.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¬.h´M.hj­.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghj‘.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEh³j¬.h´M.hjU.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j@hj9.ubhÚ)�”}”(hŒ**Description**”h]”jý)�”}”(hjÒ.h]”hŒ Description”…”�”}”(hjÔ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jühjÐ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M0hj9.ubhÚ)�”}”(hŒÀUnregister a component added with component_add(). If the component is bound into an aggregate driver, this will force the entire aggregate driver, including all its components, to be unbound.”h]”hŒÀUnregister a component added with component_add(). If the component is bound into an aggregate driver, this will force the entire aggregate driver, including all its components, to be unbound.”…”�”}”(hjè.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.c”h´M/hj9.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jòhj@h²hh³Nh´Nubeh}”(h]”Œapi”ah ]”h"]”Œapi”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´K ubeh}”(h]”(Œ&component-helper-for-aggregate-drivers”hÂeh ]”h"]”(Œ&component helper for aggregate drivers”Œ component”eh$]”h&]”uh1hÄhhh²hh³hÃh´KŒexpect_referenced_by_name”}”j /h·sŒexpect_referenced_by_id”}”hÂh·subeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÃuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÉNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j6/Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÃŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”hÂ]”h·asŒnameids”}”(j /hÂj /j/j/j/uŒ nametypes”}”(j /ˆj /‰j/‰uh}”(hÂhÆj/hÆj/j@j`jijjjjj} j‚ jª j¯ j´ j¹ jájæjjjéjîjXj]j j¥j"j"jn$js$jÔ&jÙ&j*j *jÅ,jÊ,uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”hŒsystem_message”“”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒ/Hyperlink target "component" is not referenced.”…”�”}”hj /sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhj�/ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÃŒline”Kuh1j›/ubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.