sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget(/translations/zh_CN/driver-api/componentmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/zh_TW/driver-api/componentmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/it_IT/driver-api/componentmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ja_JP/driver-api/componentmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ko_KR/driver-api/componentmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/sp_SP/driver-api/componentmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhtarget)}(h.. _component:h]h}(h]h ]h"]h$]h&]refid componentuh1hhKhhhhhB/var/lib/git/docbuild/linux/Documentation/driver-api/component.rstubhsection)}(hhh](htitle)}(h&Component Helper for Aggregate Driversh]h&Component Helper for Aggregate Drivers}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hXThe 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]hXThe 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).}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/component:7: ./drivers/base/component.chKhhhhubh)}(hThe component helper also doesn't solve runtime dependencies, e.g. for system suspend and resume operations. See also :ref:`device links`.h](hxThe component helper also doesn’t solve runtime dependencies, e.g. for system suspend and resume operations. See also }(hhhhhNhNubh)}(h :ref:`device links`h]hinline)}(hhh]h device links}(hhhhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdocdriver-api/component refdomainhreftyperef refexplicitrefwarn reftarget device_linkuh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/component:7: ./drivers/base/component.chKhhubh.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhhhhubh)}(hComponents are registered using component_add() and unregistered with component_del(), usually from the driver's probe and disconnect functions.h]hComponents are registered using component_add() and unregistered with component_del(), usually from the driver’s probe and disconnect functions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/component:7: ./drivers/base/component.chKhhhhubh)}(hAggregate 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]hAggregate 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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/component:7: ./drivers/base/component.chKhhhhubh)}(hhh](h)}(hAPIh]hAPI}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hhhhhK ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlecomponent_ops (C struct)c.component_opshNtauh1j=hj,hhhNhNubhdesc)}(hhh](hdesc_signature)}(h component_opsh]hdesc_signature_line)}(hstruct component_opsh](hdesc_sig_keyword)}(hstructh]hstruct}(hjahhhNhNubah}(h]h ]kah"]h$]h&]uh1j_hj[hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKubhdesc_sig_space)}(h h]h }(hjshhhNhNubah}(h]h ]wah"]h$]h&]uh1jqhj[hhhjphKubh desc_name)}(h component_opsh]h desc_sig_name)}(hjWh]h component_ops}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1jhj[hhhjphKubeh}(h]h ]h"]h$]h&]jj add_permalinkuh1jYsphinx_line_type declaratorhjUhhhjphKubah}(h]jLah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jShjphKhjPhhubh desc_content)}(hhh]h)}(hcallbacks for component driversh]hcallbacks for component drivers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhK hjhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjphKubeh}(h]h ](cstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jNhhhj,hNhNubh 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](hstrong)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKhjubh literal_block)}(hstruct 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]hstruct 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&]jjuh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKhjubhdefinition_list)}(hhh](hdefinition_list_item)}(hl``bind`` Called through component_bind_all() when the aggregate driver is ready to bind the overall driver. h](hterm)}(h``bind``h]hliteral)}(hj;h]hbind}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj9ubah}(h]h ]h"]h$]h&]uh1j7h^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKhj3ubh definition)}(hhh]h)}(hbCalled through component_bind_all() when the aggregate driver is ready to bind the overall driver.h]hbCalled through component_bind_all() when the aggregate driver is ready to bind the overall driver.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKhjUubah}(h]h ]h"]h$]h&]uh1jShj3ubeh}(h]h ]h"]h$]h&]uh1j1hjRhKhj.ubj2)}(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](j8)}(h ``unbind``h]j>)}(hjyh]hunbind}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjwubah}(h]h ]h"]h$]h&]uh1j7h^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKhjsubjT)}(hhh]h)}(hCalled 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]hCalled 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKhjubah}(h]h ]h"]h$]h&]uh1jShjsubeh}(h]h ]h"]h$]h&]uh1j1hjhKhj.ubeh}(h]h ]h"]h$]h&]uh1j,hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhK hj,hhubh)}(hUComponents are registered with component_add() and unregistered with component_del().h]hUComponents are registered with component_add() and unregistered with component_del().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhK hj,hhubj>)}(hhh]h}(h]h ]h"]h$]h&]entries](jJcomponent_master_ops (C struct)c.component_master_opshNtauh1j=hj,hhhNhNubjO)}(hhh](jT)}(hcomponent_master_opsh]jZ)}(hstruct component_master_opsh](j`)}(hjch]hstruct}(hjhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjhhhjhKubj)}(hcomponent_master_opsh]j)}(hjh]hcomponent_master_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jYjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jShjhKhjhhubj)}(hhh]h)}(h!callback for the aggregate driverh]h!callback for the aggregate driver}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhK/hj9hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjTjjTjjjuh1jNhhhj,hNhNubj)}(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}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh:}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhK3hjXubj)}(hsstruct component_master_ops { int (*bind)(struct device *master); void (*unbind)(struct device *master); };h]hsstruct component_master_ops { int (*bind)(struct device *master); void (*unbind)(struct device *master); };}hjysbah}(h]h ]h"]h$]h&]jjuh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhK5hjXubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhK:hjXubj-)}(hhh](j2)}(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](j8)}(h``bind``h]j>)}(hjh]hbind}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1j7h^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKGhjubjT)}(hhh](h)}(hCalled 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]hCalled 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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhK7hjubhenumerated_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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhK;hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hBind all components to the aggregate driver by calling component_bind_all() with the aggregate driver structure as opaque pointer data. h]h)}(hBind all components to the aggregate driver by calling component_bind_all() with the aggregate driver structure as opaque pointer data.h]hBind all components to the aggregate driver by calling component_bind_all() with the aggregate driver structure as opaque pointer data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhK=hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hLRegister the aggregate driver with the subsystem to publish its interfaces. h]h)}(hKRegister the aggregate driver with the subsystem to publish its interfaces.h]hKRegister the aggregate driver with the subsystem to publish its interfaces.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKAhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jhjubh)}(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](hYNote that the lifetime of the aggregate driver does not align with any of the underlying }(hj.hhhNhNubh)}(h :c:type:`struct device `h]j>)}(hj8h]h struct device}(hj:hhhNhNubah}(h]h ](hjc-typeeh"]h$]h&]uh1j=hj6ubah}(h]h ]h"]h$]h&]refdoch refdomainjreftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sbjdeviceuh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKDhj.ubh instances. Therefore devm cannot be used and all resources acquired or allocated in this callback must be explicitly released in the }(hj.hhhNhNubj)}(h **unbind**h]hunbind}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh callback.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj]hKDhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j1hjhKGhjubj2)}(h``unbind`` Called when either the aggregate driver, using component_master_del(), or one of its components, using component_del(), is unregistered.h](j8)}(h ``unbind``h]j>)}(hjh]hunbind}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1j7h^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKNhjubjT)}(hhh]h)}(hCalled when either the aggregate driver, using component_master_del(), or one of its components, using component_del(), is unregistered.h]hCalled when either the aggregate driver, using component_master_del(), or one of its components, using component_del(), is unregistered.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j1hjhKNhjubeh}(h]h ]h"]h$]h&]uh1j,hjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKRhj,hhubh)}(huAggregate drivers are registered with component_master_add_with_match() and unregistered with component_master_del().h]huAggregate drivers are registered with component_master_add_with_match() and unregistered with component_master_del().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhK0hj,hhubj>)}(hhh]h}(h]h ]h"]h$]h&]entries](jJ component_match_add (C function)c.component_match_addhNtauh1j=hj,hhhNhNubjO)}(hhh](jT)}(hvoid component_match_add (struct device *parent, struct component_match **matchptr, int (*compare)(struct device *, void *), void *compare_data)h]jZ)}(hvoid component_match_add(struct device *parent, struct component_match **matchptr, int (*compare)(struct device*, void*), void *compare_data)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1j hj hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhK}ubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj hhhjhK}ubj)}(hcomponent_match_addh]j)}(hcomponent_match_addh]hcomponent_match_add}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhK}ubhdesc_parameterlist)}(hu(struct device *parent, struct component_match **matchptr, int (*compare)(struct device*, void*), void *compare_data)h](hdesc_parameter)}(hstruct device *parenth](j`)}(hjch]hstruct}(hjQhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjMubjr)}(h h]h }(hj^hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjMubh)}(hhh]j)}(hdeviceh]hdevice}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjqmodnameN classnameNjTjW)}jZ]jU ASTIdentifier)}jj3sbc.component_match_addasbuh1hhjMubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjMubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjMubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjGubjL)}(h!struct component_match **matchptrh](j`)}(hjch]hstruct}(hjhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubh)}(hhh]j)}(hcomponent_matchh]hcomponent_match}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjTjW)}jZ]jc.component_match_addasbuh1hhjubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmatchptrh]hmatchptr}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjGubjL)}(h%int (*compare)(struct device*, void*)h](j)}(hinth]hint}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjCubjr)}(h h]h }(hjUhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjCubj)}(h(h]h(}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hcompareh]hcompare}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h)h]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hjeh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj`)}(hjch]hstruct}(hjhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjCubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjCubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjTjW)}jZ]jc.component_match_addasbuh1hhjCubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h,h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjCubj)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjCubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hjh]h)}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjGubjL)}(hvoid *compare_datah](j)}(hvoidh]hvoid}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;ubjr)}(h h]h }(hjMhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj;ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h compare_datah]h compare_data}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjGubeh}(h]h ]h"]h$]h&]jjuh1jEhj hhhjhK}ubeh}(h]h ]h"]h$]h&]jjjuh1jYjjhjhhhjhK}ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jShjhK}hjhhubj)}(hhh]h)}(hadd a component match entryh]hadd a component match entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKmhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK}ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jNhhhj,hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKqhjubj-)}(hhh](j2)}(h;``struct device *parent`` device with the aggregate driver h](j8)}(h``struct device *parent``h]j>)}(hjh]hstruct device *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1j7h^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKnhjubjT)}(hhh]h)}(h device with the aggregate driverh]h device with the aggregate driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKnhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j1hjhKnhjubj2)}(hO``struct component_match **matchptr`` pointer to the list of component matches h](j8)}(h%``struct component_match **matchptr``h]j>)}(hj h]h!struct component_match **matchptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj ubah}(h]h ]h"]h$]h&]uh1j7h^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKohjubjT)}(hhh]h)}(h(pointer to the list of component matchesh]h(pointer to the list of component matches}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hKohj"ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j1hj!hKohjubj2)}(h]``int (*compare)(struct device *, void *)`` compare function to match against all components h](j8)}(h+``int (*compare)(struct device *, void *)``h]j>)}(hjEh]h'int (*compare)(struct device *, void *)}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjCubah}(h]h ]h"]h$]h&]uh1j7h^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKphj?ubjT)}(hhh]h)}(h0compare function to match against all componentsh]h0compare function to match against all components}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhKphj[ubah}(h]h ]h"]h$]h&]uh1jShj?ubeh}(h]h ]h"]h$]h&]uh1j1hjZhKphjubj2)}(hI``void *compare_data`` opaque pointer passed to the **compare** function h](j8)}(h``void *compare_data``h]j>)}(hj~h]hvoid *compare_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj|ubah}(h]h ]h"]h$]h&]uh1j7h^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKqhjxubjT)}(hhh]h)}(h1opaque pointer passed to the **compare** functionh](hopaque pointer passed to the }(hjhhhNhNubj)}(h **compare**h]hcompare}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh function}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKqhjubah}(h]h ]h"]h$]h&]uh1jShjxubeh}(h]h ]h"]h$]h&]uh1j1hjhKqhjubeh}(h]h ]h"]h$]h&]uh1j,hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKshjubh)}(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](h1Adds a new component match to the list stored in }(hjhhhNhNubj)}(h **matchptr**h]hmatchptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh , which the }(hjhhhNhNubj)}(h **parent**h]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhQ aggregate driver needs to function. The list of component matches pointed to by }(hjhhhNhNubj)}(h **matchptr**h]hmatchptr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh| must be initialized to NULL before adding the first match. This only matches against components added with component_add().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKshjubh)}(hVThe allocated match list in **matchptr** is automatically released using devm actions.h](hThe allocated match list in }(hj& hhhNhNubj)}(h **matchptr**h]hmatchptr}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj& ubh. is automatically released using devm actions.}(hj& hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhKxhjubh)}(hGSee also component_match_add_release() and component_match_add_typed().h]hGSee also component_match_add_release() and component_match_add_typed().}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/component:14: ./include/linux/component.hhK{hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj>)}(hhh]h}(h]h ]h"]h$]h&]entries](jJ!component_compare_of (C function)c.component_compare_ofhNtauh1j=hj,hhhNhNubjO)}(hhh](jT)}(h9int component_compare_of (struct device *dev, void *data)h]jZ)}(h8int component_compare_of(struct device *dev, void *data)h](j)}(hinth]hint}(hjv hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjr hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM(ubjr)}(h h]h }(hj hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjr hhhj hM(ubj)}(hcomponent_compare_ofh]j)}(hcomponent_compare_ofh]hcomponent_compare_of}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjr hhhj hM(ubjF)}(h (struct device *dev, void *data)h](jL)}(hstruct device *devh](j`)}(hjch]hstruct}(hj hhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hj ubjr)}(h h]h }(hj hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj ubh)}(hhh]j)}(hdeviceh]hdevice}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjTjW)}jZ]j)}jj sbc.component_compare_ofasbuh1hhj ubjr)}(h h]h }(hj hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj ubjL)}(h void *datah](j)}(hvoidh]hvoid}(hj% hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj! ubjr)}(h h]h }(hj3 hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj! ubj)}(hjh]h*}(hjA hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj! ubj)}(hdatah]hdata}(hjN hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj! ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj ubeh}(h]h ]h"]h$]h&]jjuh1jEhjr hhhj hM(ubeh}(h]h ]h"]h$]h&]jjjuh1jYjjhjn hhhj hM(ubah}(h]ji ah ](jjeh"]h$]h&]jj)jhuh1jShj hM(hjk hhubj)}(hhh]h)}(h/A common component compare function for of_nodeh]h/A common component compare function for of_node}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM hju hhubah}(h]h ]h"]h$]h&]uh1jhjk hhhj hM(ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jNhhhj,hNhNubj)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM$hj ubj-)}(hhh](j2)}(h(``struct device *dev`` component device h](j8)}(h``struct device *dev``h]j>)}(hj h]hstruct device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM!hj ubjT)}(hhh]h)}(hcomponent deviceh]hcomponent device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM!hj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j1hj hM!hj ubj2)}(hC``void *data`` **compare_data** from component_match_add_release() h](j8)}(h``void *data``h]j>)}(hj h]h void *data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM"hj ubjT)}(hhh]h)}(h3**compare_data** from component_match_add_release()h](j)}(h**compare_data**h]h compare_data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh# from component_match_add_release()}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hM"hj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j1hj hM"hj ubeh}(h]h ]h"]h$]h&]uh1j,hj ubh)}(h**Description**h]j)}(hj; h]h Description}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9 ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM$hj ubh)}(hA 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](hkA common compare function when compare_data is device of_node. e.g. component_match_add_release(masterdev, }(hjQ hhhNhNubh)}(h:c:type:`match`h]j>)}(hj[ h]hmatch}(hj] hhhNhNubah}(h]h ](hjc-typeeh"]h$]h&]uh1j=hjY ubah}(h]h ]h"]h$]h&]refdoch refdomainjreftypetype refexplicitrefwarnjTjXjmatchuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM$hjQ ubhD, component_release_of, component_compare_of, component_dev_of_node)}(hjQ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjx hM$hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj>)}(hhh]h}(h]h ]h"]h$]h&]entries](jJ!component_release_of (C function)c.component_release_ofhNtauh1j=hj,hhhNhNubjO)}(hhh](jT)}(h:void component_release_of (struct device *dev, void *data)h]jZ)}(h9void component_release_of(struct device *dev, void *data)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM5ubjr)}(h h]h }(hj hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj hhhj hM5ubj)}(hcomponent_release_ofh]j)}(hcomponent_release_ofh]hcomponent_release_of}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hM5ubjF)}(h (struct device *dev, void *data)h](jL)}(hstruct device *devh](j`)}(hjch]hstruct}(hj hhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hj ubjr)}(h h]h }(hj hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj ubh)}(hhh]j)}(hdeviceh]hdevice}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjTjW)}jZ]j)}jj sbc.component_release_ofasbuh1hhj ubjr)}(h h]h }(hj hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj ubj)}(hjh]h*}(hj, hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hdevh]hdev}(hj9 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj ubjL)}(h void *datah](j)}(hvoidh]hvoid}(hjR hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjN ubjr)}(h h]h }(hj` hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjN ubj)}(hjh]h*}(hjn hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN ubj)}(hdatah]hdata}(hj{ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj ubeh}(h]h ]h"]h$]h&]jjuh1jEhj hhhj hM5ubeh}(h]h ]h"]h$]h&]jjjuh1jYjjhj hhhj hM5ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jShj hM5hj hhubj)}(hhh]h)}(h/A common component release function for of_nodeh]h/A common component release function for of_node}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM/hj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM5ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jNhhhj,hNhNubj)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM3hj ubj-)}(hhh](j2)}(h(``struct device *dev`` component device h](j8)}(h``struct device *dev``h]j>)}(hj h]hstruct device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM0hj ubjT)}(hhh]h)}(hcomponent deviceh]hcomponent device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM0hj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j1hj hM0hj ubj2)}(hC``void *data`` **compare_data** from component_match_add_release() h](j8)}(h``void *data``h]j>)}(hj h]h void *data}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM1hj ubjT)}(hhh]h)}(h3**compare_data** from component_match_add_release()h](j)}(h**compare_data**h]h compare_data}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8 ubh# from component_match_add_release()}(hj8 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4 hM1hj5 ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j1hj4 hM1hj ubeh}(h]h ]h"]h$]h&]uh1j,hj ubh)}(h**Description**h]j)}(hjh h]h Description}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM3hj ubh)}(h5About the example, Please see component_compare_of().h]h5About the example, Please see component_compare_of().}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM3hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj>)}(hhh]h}(h]h ]h"]h$]h&]entries](jJ"component_compare_dev (C function)c.component_compare_devhNtauh1j=hj,hhhNhNubjO)}(hhh](jT)}(h:int component_compare_dev (struct device *dev, void *data)h]jZ)}(h9int component_compare_dev(struct device *dev, void *data)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMCubjr)}(h h]h }(hj hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj hhhj hMCubj)}(hcomponent_compare_devh]j)}(hcomponent_compare_devh]hcomponent_compare_dev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hMCubjF)}(h (struct device *dev, void *data)h](jL)}(hstruct device *devh](j`)}(hjch]hstruct}(hj hhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hj ubjr)}(h h]h }(hj hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj ubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjTjW)}jZ]j)}jj sbc.component_compare_devasbuh1hhj ubjr)}(h h]h }(hj(hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hdevh]hdev}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj ubjL)}(h void *datah](j)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXubjr)}(h h]h }(hjjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjXubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj ubeh}(h]h ]h"]h$]h&]jjuh1jEhj hhhj hMCubeh}(h]h ]h"]h$]h&]jjjuh1jYjjhj hhhj hMCubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jShj hMChj hhubj)}(hhh]h)}(h+A common component compare function for devh]h+A common component compare function for dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM<hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMCubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jNhhhj,hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM@hjubj-)}(hhh](j2)}(h(``struct device *dev`` component device h](j8)}(h``struct device *dev``h]j>)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM=hjubjT)}(hhh]h)}(hcomponent deviceh]hcomponent device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j1hjhM=hjubj2)}(hC``void *data`` **compare_data** from component_match_add_release() h](j8)}(h``void *data``h]j>)}(hj)h]h void *data}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj'ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM>hj#ubjT)}(hhh]h)}(h3**compare_data** from component_match_add_release()h](j)}(h**compare_data**h]h compare_data}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh# from component_match_add_release()}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj>hM>hj?ubah}(h]h ]h"]h$]h&]uh1jShj#ubeh}(h]h ]h"]h$]h&]uh1j1hj>hM>hjubeh}(h]h ]h"]h$]h&]uh1j,hjubh)}(h**Description**h]j)}(hjrh]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM@hjubh)}(hA common compare function when compare_data is struce device. e.g. component_match_add(masterdev, :c:type:`match`, component_compare_dev, component_dev)h](hbA common compare function when compare_data is struce device. e.g. component_match_add(masterdev, }(hjhhhNhNubh)}(h:c:type:`match`h]j>)}(hjh]hmatch}(hjhhhNhNubah}(h]h ](hjc-typeeh"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]refdoch refdomainjreftypetype refexplicitrefwarnjTjXjmatchuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM@hjubh', component_compare_dev, component_dev)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM@hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj>)}(hhh]h}(h]h ]h"]h$]h&]entries](jJ'component_compare_dev_name (C function)c.component_compare_dev_namehNtauh1j=hj,hhhNhNubjO)}(hhh](jT)}(h?int component_compare_dev_name (struct device *dev, void *data)h]jZ)}(h>int component_compare_dev_name(struct device *dev, void *data)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMRubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjhhhjhMRubj)}(hcomponent_compare_dev_nameh]j)}(hcomponent_compare_dev_nameh]hcomponent_compare_dev_name}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMRubjF)}(h (struct device *dev, void *data)h](jL)}(hstruct device *devh](j`)}(hjch]hstruct}(hjhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjubjr)}(h h]h }(hj$hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubh)}(hhh]j)}(hdeviceh]hdevice}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjTjW)}jZ]j)}jjsbc.component_compare_dev_nameasbuh1hhjubjr)}(h h]h }(hjUhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjubjL)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjubeh}(h]h ]h"]h$]h&]jjuh1jEhjhhhjhMRubeh}(h]h ]h"]h$]h&]jjjuh1jYjjhjhhhjhMRubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jShjhMRhjhhubj)}(hhh]h)}(h3A common component compare function for device nameh]h3A common component compare function for device name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMJhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMRubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jNhhhj,hNhNubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMNhjubj-)}(hhh](j2)}(h(``struct device *dev`` component device h](j8)}(h``struct device *dev``h]j>)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMKhjubjT)}(hhh]h)}(hcomponent deviceh]hcomponent device}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMKhj3ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j1hj2hMKhjubj2)}(hC``void *data`` **compare_data** from component_match_add_release() h](j8)}(h``void *data``h]j>)}(hjVh]h void *data}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjTubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMLhjPubjT)}(hhh]h)}(h3**compare_data** from component_match_add_release()h](j)}(h**compare_data**h]h compare_data}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh# from component_match_add_release()}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjkhMLhjlubah}(h]h ]h"]h$]h&]uh1jShjPubeh}(h]h ]h"]h$]h&]uh1j1hjkhMLhjubeh}(h]h ]h"]h$]h&]uh1j,hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMNhjubh)}(hA 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](hgA common compare function when compare_data is device name string. e.g. component_match_add(masterdev, }(hjhhhNhNubh)}(h:c:type:`match`h]j>)}(hjh]hmatch}(hjhhhNhNubah}(h]h ](hjc-typeeh"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]refdoch refdomainjreftypetype refexplicitrefwarnjTjXjmatchuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMNhjubh7, component_compare_dev_name, “component_dev_name”)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMNhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj>)}(hhh]h}(h]h ]h"]h$]h&]entries](jJ(component_match_add_release (C function)c.component_match_add_releasehNtauh1j=hj,hhhNhNubjO)}(hhh](jT)}(hvoid 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]jZ)}(hvoid 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)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjhhhjhMubj)}(hcomponent_match_add_releaseh]j)}(hcomponent_match_add_releaseh]hcomponent_match_add_release}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubjF)}(h(struct device *parent, struct component_match **matchptr, void (*release)(struct device*, void*), int (*compare)(struct device*, void*), void *compare_data)h](jL)}(hstruct device *parenth](j`)}(hjch]hstruct}(hjDhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hj@ubjr)}(h h]h }(hjQhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj@ubh)}(hhh]j)}(hdeviceh]hdevice}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdmodnameN classnameNjTjW)}jZ]j)}jj*sbc.component_match_add_releaseasbuh1hhj@ubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj@ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj<ubjL)}(h!struct component_match **matchptrh](j`)}(hjch]hstruct}(hjhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubh)}(hhh]j)}(hcomponent_matchh]hcomponent_match}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjTjW)}jZ]j~c.component_match_add_releaseasbuh1hhjubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmatchptrh]hmatchptr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj<ubjL)}(h&void (*release)(struct device*, void*)h](j)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubjr)}(h h]h }(hjAhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj/ubj)}(hjeh]h(}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hreleaseh]hrelease}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]h)}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjeh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj`)}(hjch]hstruct}(hjhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hj/ubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj/ubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjTjW)}jZ]j~c.component_match_add_releaseasbuh1hhj/ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj/ubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj<ubjL)}(h%int (*compare)(struct device*, void*)h](j)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubjr)}(h h]h }(hj6hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj$ubj)}(hjeh]h(}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hcompareh]hcompare}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]h)}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjeh]h(}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj`)}(hjch]hstruct}(hjhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hj$ubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj$ubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjTjW)}jZ]j~c.component_match_add_releaseasbuh1hhj$ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj$ubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj<ubjL)}(hvoid *compare_datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubjr)}(h h]h }(hj+hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h compare_datah]h compare_data}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj<ubeh}(h]h ]h"]h$]h&]jjuh1jEhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jYjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jShjhMhjhhubj)}(hhh]h)}(h1add a component match entry with release callbackh]h1add a component match entry with release callback}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjmhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jNhhhj,hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubj-)}(hhh](j2)}(h@``struct device *parent`` parent device of the aggregate driver h](j8)}(h``struct device *parent``h]j>)}(hjh]hstruct device *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubjT)}(hhh]h)}(h%parent device of the aggregate driverh]h%parent device of the aggregate driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j1hjhMhjubj2)}(hO``struct component_match **matchptr`` pointer to the list of component matches h](j8)}(h%``struct component_match **matchptr``h]j>)}(hjh]h!struct component_match **matchptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubjT)}(hhh]h)}(h(pointer to the list of component matchesh]h(pointer to the list of component matches}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j1hjhMhjubj2)}(hS``void (*release)(struct device *, void *)`` release function for **compare_data** h](j8)}(h,``void (*release)(struct device *, void *)``h]j>)}(hj#h]h(void (*release)(struct device *, void *)}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj!ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubjT)}(hhh]h)}(h%release function for **compare_data**h](hrelease function for }(hj<hhhNhNubj)}(h**compare_data**h]h compare_data}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1hhj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j1hj8hMhjubj2)}(h]``int (*compare)(struct device *, void *)`` compare function to match against all components h](j8)}(h+``int (*compare)(struct device *, void *)``h]j>)}(hjjh]h'int (*compare)(struct device *, void *)}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjhubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjdubjT)}(hhh]h)}(h0compare function to match against all componentsh]h0compare function to match against all components}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjdubeh}(h]h ]h"]h$]h&]uh1j1hjhMhjubj2)}(hI``void *compare_data`` opaque pointer passed to the **compare** function h](j8)}(h``void *compare_data``h]j>)}(hjh]hvoid *compare_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubjT)}(hhh]h)}(h1opaque pointer passed to the **compare** functionh](hopaque pointer passed to the }(hjhhhNhNubj)}(h **compare**h]hcompare}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh function}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j1hjhMhjubeh}(h]h ]h"]h$]h&]uh1j,hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubh)}(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](h1Adds a new component match to the list stored in }(hjhhhNhNubj)}(h **matchptr**h]hmatchptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh\, which the aggregate driver needs to function. The list of component matches pointed to by }(hjhhhNhNubj)}(h **matchptr**h]hmatchptr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh| must be initialized to NULL before adding the first match. This only matches against components added with component_add().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubh)}(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](hThe allocated match list in }(hj9hhhNhNubj)}(h **matchptr**h]hmatchptr}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh: is automatically released using devm actions, where upon }(hj9hhhNhNubj)}(h **release**h]hrelease}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh/ will be called to free any references held by }(hj9hhhNhNubj)}(h**compare_data**h]h compare_data}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh , e.g. when }(hj9hhhNhNubj)}(h**compare_data**h]h compare_data}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh is a }(hj9hhhNhNubh)}(h:c:type:`device_node`h]j>)}(hjh]h device_node}(hjhhhNhNubah}(h]h ](hjc-typeeh"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]refdoch refdomainjreftypetype refexplicitrefwarnjTjXj device_nodeuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj9ubh* that must be released with of_node_put().}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h?See also component_match_add() and component_match_add_typed().h]h?See also component_match_add() and component_match_add_typed().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj>)}(hhh]h}(h]h ]h"]h$]h&]entries](jJ&component_match_add_typed (C function)c.component_match_add_typedhNtauh1j=hj,hhhNhNubjO)}(hhh](jT)}(hvoid component_match_add_typed (struct device *parent, struct component_match **matchptr, int (*compare_typed)(struct device *, int, void *), void *compare_data)h]jZ)}(hvoid component_match_add_typed(struct device *parent, struct component_match **matchptr, int (*compare_typed)(struct device*, int, void*), void *compare_data)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjhhhjhMubj)}(hcomponent_match_add_typedh]j)}(hcomponent_match_add_typedh]hcomponent_match_add_typed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubjF)}(h(struct device *parent, struct component_match **matchptr, int (*compare_typed)(struct device*, int, void*), void *compare_data)h](jL)}(hstruct device *parenth](j`)}(hjch]hstruct}(hjhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjubjr)}(h h]h }(hj,hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubh)}(hhh]j)}(hdeviceh]hdevice}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjTjW)}jZ]j)}jjsbc.component_match_add_typedasbuh1hhjubjr)}(h h]h }(hj]hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hparenth]hparent}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjubjL)}(h!struct component_match **matchptrh](j`)}(hjch]hstruct}(hjhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubh)}(hhh]j)}(hcomponent_matchh]hcomponent_match}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjTjW)}jZ]jYc.component_match_add_typedasbuh1hhjubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmatchptrh]hmatchptr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjubjL)}(h0int (*compare_typed)(struct device*, int, void*)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj ubj)}(hjeh]h(}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h compare_typedh]h compare_typed}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h)}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjeh]h(}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj`)}(hjch]hstruct}(hjlhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hj ubjr)}(h h]h }(hjyhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj ubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjTjW)}jZ]jYc.component_match_add_typedasbuh1hhj ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(hjh]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj ubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjubjL)}(hvoid *compare_datah](j)}(hvoidh]hvoid}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubjr)}(h h]h }(hj:hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj(ubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h compare_datah]h compare_data}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjubeh}(h]h ]h"]h$]h&]jjuh1jEhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jYjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jShjhMhjhhubj)}(hhh]h)}(h1add a component match entry for a typed componenth]h1add a component match entry for a typed component}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj|hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jNhhhj,hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubj-)}(hhh](j2)}(h@``struct device *parent`` parent device of the aggregate driver h](j8)}(h``struct device *parent``h]j>)}(hjh]hstruct device *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubjT)}(hhh]h)}(h%parent device of the aggregate driverh]h%parent device of the aggregate driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j1hjhMhjubj2)}(hO``struct component_match **matchptr`` pointer to the list of component matches h](j8)}(h%``struct component_match **matchptr``h]j>)}(hjh]h!struct component_match **matchptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubjT)}(hhh]h)}(h(pointer to the list of component matchesh]h(pointer to the list of component matches}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j1hjhMhjubj2)}(hn``int (*compare_typed)(struct device *, int, void *)`` compare function to match against all typed components h](j8)}(h6``int (*compare_typed)(struct device *, int, void *)``h]j>)}(hj2h]h2int (*compare_typed)(struct device *, int, void *)}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj0ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj,ubjT)}(hhh]h)}(h6compare function to match against all typed componentsh]h6compare function to match against all typed components}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jShj,ubeh}(h]h ]h"]h$]h&]uh1j1hjGhMhjubj2)}(hI``void *compare_data`` opaque pointer passed to the **compare** function h](j8)}(h``void *compare_data``h]j>)}(hjkh]hvoid *compare_data}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjiubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjeubjT)}(hhh]h)}(h1opaque pointer passed to the **compare** functionh](hopaque pointer passed to the }(hjhhhNhNubj)}(h **compare**h]hcompare}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh function}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjeubeh}(h]h ]h"]h$]h&]uh1j1hjhMhjubeh}(h]h ]h"]h$]h&]uh1j,hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubh)}(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](h1Adds a new component match to the list stored in }(hjhhhNhNubj)}(h **matchptr**h]hmatchptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh\, which the aggregate driver needs to function. The list of component matches pointed to by }(hjhhhNhNubj)}(h **matchptr**h]hmatchptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh must be initialized to NULL before adding the first match. This only matches against components added with component_add_typed().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubh)}(hVThe allocated match list in **matchptr** is automatically released using devm actions.h](hThe allocated match list in }(hjhhhNhNubj)}(h **matchptr**h]hmatchptr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. is automatically released using devm actions.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubh)}(hGSee also component_match_add_release() and component_match_add_typed().h]hGSee also component_match_add_release() and component_match_add_typed().}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj>)}(hhh]h}(h]h ]h"]h$]h&]entries](jJ,component_master_add_with_match (C function)!c.component_master_add_with_matchhNtauh1j=hj,hhhNhNubjO)}(hhh](jT)}(hint component_master_add_with_match (struct device *parent, const struct component_master_ops *ops, struct component_match *match)h]jZ)}(hint component_master_add_with_match(struct device *parent, const struct component_master_ops *ops, struct component_match *match)h](j)}(hinth]hint}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMubjr)}(h h]h }(hj`hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjMhhhj_hMubj)}(hcomponent_master_add_with_matchh]j)}(hcomponent_master_add_with_matchh]hcomponent_master_add_with_match}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ](jjeh"]h$]h&]jjuh1jhjMhhhj_hMubjF)}(h^(struct device *parent, const struct component_master_ops *ops, struct component_match *match)h](jL)}(hstruct device *parenth](j`)}(hjch]hstruct}(hjhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjTjW)}jZ]j)}jjtsb!c.component_master_add_with_matchasbuh1hhjubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjubjL)}(h&const struct component_master_ops *opsh](j`)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj`)}(hjch]hstruct}(hjhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjubjr)}(h h]h }(hj)hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubh)}(hhh]j)}(hcomponent_master_opsh]hcomponent_master_ops}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjTjW)}jZ]j!c.component_master_add_with_matchasbuh1hhjubjr)}(h h]h }(hjXhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hopsh]hops}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjubjL)}(hstruct component_match *matchh](j`)}(hjch]hstruct}(hjhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubh)}(hhh]j)}(hcomponent_matchh]hcomponent_match}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjTjW)}jZ]j!c.component_master_add_with_matchasbuh1hhjubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjubeh}(h]h ]h"]h$]h&]jjuh1jEhjMhhhj_hMubeh}(h]h ]h"]h$]h&]jjjuh1jYjjhjIhhhj_hMubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1jShj_hMhjFhhubj)}(hhh]h)}(hregister an aggregate driverh]hregister an aggregate driver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjFhhhj_hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%jj%jjjuh1jNhhhj,hNhNubj)}(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)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj)ubj-)}(hhh](j2)}(h@``struct device *parent`` parent device of the aggregate driver h](j8)}(h``struct device *parent``h]j>)}(hjNh]hstruct device *parent}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjLubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjHubjT)}(hhh]h)}(h%parent device of the aggregate driverh]h%parent device of the aggregate driver}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjdubah}(h]h ]h"]h$]h&]uh1jShjHubeh}(h]h ]h"]h$]h&]uh1j1hjchMhjEubj2)}(hN``const struct component_master_ops *ops`` callbacks for the aggregate driver h](j8)}(h*``const struct component_master_ops *ops``h]j>)}(hjh]h&const struct component_master_ops *ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubjT)}(hhh]h)}(h"callbacks for the aggregate driverh]h"callbacks for the aggregate driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j1hjhMhjEubj2)}(hP``struct component_match *match`` component match list for the aggregate driver h](j8)}(h!``struct component_match *match``h]j>)}(hjh]hstruct component_match *match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubjT)}(hhh]h)}(h-component match list for the aggregate driverh]h-component match list for the aggregate driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j1hjhMhjEubeh}(h]h ]h"]h$]h&]uh1j,hj)ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj)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](hGRegisters a new aggregate driver consisting of the components added to }(hjhhhNhNubj)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhO by calling one of the component_match_add() functions. Once all components in }(hjhhhNhNubj)}(h **match**h]hmatch}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh0 are available, it will be assembled by calling }(hjhhhNhNubh)}(h::c:type:`component_master_ops.bind `h]j>)}(hj?h]hcomponent_master_ops.bind}(hjAhhhNhNubah}(h]h ](hjc-typeeh"]h$]h&]uh1j=hj=ubah}(h]h ]h"]h$]h&]refdoch refdomainjreftypetype refexplicitrefwarnjTjXjcomponent_master_opsuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjubh from }(hjhhhNhNubj)}(h**ops**h]hops}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh9. Must be unregistered by calling component_master_del().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj\hMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj>)}(hhh]h}(h]h ]h"]h$]h&]entries](jJ!component_master_del (C function)c.component_master_delhNtauh1j=hj,hhhNhNubjO)}(hhh](jT)}(hYvoid component_master_del (struct device *parent, const struct component_master_ops *ops)h]jZ)}(hXvoid component_master_del(struct device *parent, const struct component_master_ops *ops)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM-ubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjhhhjhM-ubj)}(hcomponent_master_delh]j)}(hcomponent_master_delh]hcomponent_master_del}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM-ubjF)}(h?(struct device *parent, const struct component_master_ops *ops)h](jL)}(hstruct device *parenth](j`)}(hjch]hstruct}(hjhhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjubjr)}(h h]h }(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjTjW)}jZ]j)}jjsbc.component_master_delasbuh1hhjubjr)}(h h]h }(hj hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(hjh]h*}(hj" hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hparenth]hparent}(hj/ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjubjL)}(h&const struct component_master_ops *opsh](j`)}(hjh]hconst}(hjH hhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjD ubjr)}(h h]h }(hjU hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjD ubj`)}(hjch]hstruct}(hjc hhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjD ubjr)}(h h]h }(hjp hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjD ubh)}(hhh]j)}(hcomponent_master_opsh]hcomponent_master_ops}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjTjW)}jZ]j c.component_master_delasbuh1hhjD ubjr)}(h h]h }(hj hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjD ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD ubj)}(hopsh]hops}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjubeh}(h]h ]h"]h$]h&]jjuh1jEhjhhhjhM-ubeh}(h]h ]h"]h$]h&]jjjuh1jYjjhjhhhjhM-ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jShjhM-hjhhubj)}(hhh]h)}(hunregister an aggregate driverh]hunregister an aggregate driver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM%hj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM-ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jNhhhj,hNhNubj)}(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!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM)hj!ubj-)}(hhh](j2)}(h@``struct device *parent`` parent device of the aggregate driver h](j8)}(h``struct device *parent``h]j>)}(hj%!h]hstruct device *parent}(hj'!hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj#!ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM&hj!ubjT)}(hhh]h)}(h%parent device of the aggregate driverh]h%parent device of the aggregate driver}(hj>!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:!hM&hj;!ubah}(h]h ]h"]h$]h&]uh1jShj!ubeh}(h]h ]h"]h$]h&]uh1j1hj:!hM&hj!ubj2)}(hN``const struct component_master_ops *ops`` callbacks for the aggregate driver h](j8)}(h*``const struct component_master_ops *ops``h]j>)}(hj^!h]h&const struct component_master_ops *ops}(hj`!hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj\!ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM'hjX!ubjT)}(hhh]h)}(h"callbacks for the aggregate driverh]h"callbacks for the aggregate driver}(hjw!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs!hM'hjt!ubah}(h]h ]h"]h$]h&]uh1jShjX!ubeh}(h]h ]h"]h$]h&]uh1j1hjs!hM'hj!ubeh}(h]h ]h"]h$]h&]uh1j,hj!ubh)}(h**Description**h]j)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM)hj!ubh)}(hUnregisters 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](hUnregisters an aggregate driver registered with component_master_add_with_match(). If necessary the aggregate driver is first disassembled by calling }(hj!hhhNhNubh)}(h<:c:type:`component_master_ops.unbind `h]j>)}(hj!h]hcomponent_master_ops.unbind}(hj!hhhNhNubah}(h]h ](hjc-typeeh"]h$]h&]uh1j=hj!ubah}(h]h ]h"]h$]h&]refdoch refdomainjreftypetype refexplicitrefwarnjTjXjcomponent_master_opsuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM)hj!ubh from }(hj!hhhNhNubj)}(h**ops**h]hops}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!hM)hj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj>)}(hhh]h}(h]h ]h"]h$]h&]entries](jJ!component_unbind_all (C function)c.component_unbind_allhNtauh1j=hj,hhhNhNubjO)}(hhh](jT)}(h=void component_unbind_all (struct device *parent, void *data)h]jZ)}(h` functions. Should be called from :c:type:`component_master_ops.unbind `.h](h)}(h**Parameters**h]j)}(hj7#h]h Parameters}(hj9#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5#ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM_hj1#ubj-)}(hhh](j2)}(h@``struct device *parent`` parent device of the aggregate driver h](j8)}(h``struct device *parent``h]j>)}(hjV#h]hstruct device *parent}(hjX#hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjT#ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM\hjP#ubjT)}(hhh]h)}(h%parent device of the aggregate driverh]h%parent device of the aggregate driver}(hjo#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk#hM\hjl#ubah}(h]h ]h"]h$]h&]uh1jShjP#ubeh}(h]h ]h"]h$]h&]uh1j1hjk#hM\hjM#ubj2)}(h8``void *data`` opaque pointer, passed to all components h](j8)}(h``void *data``h]j>)}(hj#h]h void *data}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj#ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM]hj#ubjT)}(hhh]h)}(h(opaque pointer, passed to all componentsh]h(opaque pointer, passed to all components}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hM]hj#ubah}(h]h ]h"]h$]h&]uh1jShj#ubeh}(h]h ]h"]h$]h&]uh1j1hj#hM]hjM#ubeh}(h]h ]h"]h$]h&]uh1j,hj1#ubh)}(h**Description**h]j)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM_hj1#ubh)}(hUnbinds 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#hhhNhNubj)}(h**data**h]hdata}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh to their }(hj#hhhNhNubh)}(h.:c:type:`component_ops.unbind `h]j>)}(hj#h]hcomponent_ops.unbind}(hj#hhhNhNubah}(h]h ](hjc-typeeh"]h$]h&]uh1j=hj#ubah}(h]h ]h"]h$]h&]refdoch refdomainjreftypetype refexplicitrefwarnjTjXj component_opsuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM_hj#ubh" functions. Should be called from }(hj#hhhNhNubh)}(h<:c:type:`component_master_ops.unbind `h]j>)}(hj $h]hcomponent_master_ops.unbind}(hj"$hhhNhNubah}(h]h ](hjc-typeeh"]h$]h&]uh1j=hj$ubah}(h]h ]h"]h$]h&]refdoch refdomainjreftypetype refexplicitrefwarnjTjXjcomponent_master_opsuh1hhj$hM_hj#ubh.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hM_hj1#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj>)}(hhh]h}(h]h ]h"]h$]h&]entries](jJcomponent_bind_all (C function)c.component_bind_allhNtauh1j=hj,hhhNhNubjO)}(hhh](jT)}(h:int component_bind_all (struct device *parent, void *data)h]jZ)}(h9int component_bind_all(struct device *parent, void *data)h](j)}(hinth]hint}(hjg$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjc$hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMubjr)}(h h]h }(hjv$hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjc$hhhju$hMubj)}(hcomponent_bind_allh]j)}(hcomponent_bind_allh]hcomponent_bind_all}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjc$hhhju$hMubjF)}(h#(struct device *parent, void *data)h](jL)}(hstruct device *parenth](j`)}(hjch]hstruct}(hj$hhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hj$ubjr)}(h h]h }(hj$hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj$ubh)}(hhh]j)}(hdeviceh]hdevice}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjTjW)}jZ]j)}jj$sbc.component_bind_allasbuh1hhj$ubjr)}(h h]h }(hj$hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hparenth]hparent}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj$ubjL)}(h void *datah](j)}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubjr)}(h h]h }(hj$%hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj%ubj)}(hjh]h*}(hj2%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hdatah]hdata}(hj?%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj$ubeh}(h]h ]h"]h$]h&]jjuh1jEhjc$hhhju$hMubeh}(h]h ]h"]h$]h&]jjjuh1jYjjhj_$hhhju$hMubah}(h]jZ$ah ](jjeh"]h$]h&]jj)jhuh1jShju$hMhj\$hhubj)}(hhh]h)}(h*bind all components of an aggregate driverh]h*bind all components of an aggregate driver}(hji%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjf%hhubah}(h]h ]h"]h$]h&]uh1jhj\$hhhju$hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%jj%jjjuh1jNhhhj,hNhNubj)}(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%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj%ubj-)}(hhh](j2)}(h@``struct device *parent`` parent device of the aggregate driver h](j8)}(h``struct device *parent``h]j>)}(hj%h]hstruct device *parent}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj%ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj%ubjT)}(hhh]h)}(h%parent device of the aggregate driverh]h%parent device of the aggregate driver}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jShj%ubeh}(h]h ]h"]h$]h&]uh1j1hj%hMhj%ubj2)}(h8``void *data`` opaque pointer, passed to all components h](j8)}(h``void *data``h]j>)}(hj%h]h void *data}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj%ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj%ubjT)}(hhh]h)}(h(opaque pointer, passed to all componentsh]h(opaque pointer, passed to all components}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jShj%ubeh}(h]h ]h"]h$]h&]uh1j1hj%hMhj%ubeh}(h]h ]h"]h$]h&]uh1j,hj%ubh)}(h**Description**h]j)}(hj&h]h Description}(hj &hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj%ubh)}(hBinds 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 }(hj4&hhhNhNubj)}(h**dev**h]hdev}(hj<&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4&ubh by passing }(hj4&hhhNhNubj)}(h**data**h]hdata}(hjN&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4&ubh to their }(hj4&hhhNhNubh)}(h,:c:type:`component_ops.bind `h]j>)}(hjb&h]hcomponent_ops.bind}(hjd&hhhNhNubah}(h]h ](hjc-typeeh"]h$]h&]uh1j=hj`&ubah}(h]h ]h"]h$]h&]refdoch refdomainjreftypetype refexplicitrefwarnjTjXj component_opsuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj4&ubh" functions. Should be called from }(hj4&hhhNhNubh)}(h::c:type:`component_master_ops.bind `h]j>)}(hj&h]hcomponent_master_ops.bind}(hj&hhhNhNubah}(h]h ](hjc-typeeh"]h$]h&]uh1j=hj&ubah}(h]h ]h"]h$]h&]refdoch refdomainjreftypetype refexplicitrefwarnjTjXjcomponent_master_opsuh1hhj&hMhj4&ubh.}(hj4&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj>)}(hhh]h}(h]h ]h"]h$]h&]entries](jJ component_add_typed (C function)c.component_add_typedhNtauh1j=hj,hhhNhNubjO)}(hhh](jT)}(h_int component_add_typed (struct device *dev, const struct component_ops *ops, int subcomponent)h]jZ)}(h^int component_add_typed(struct device *dev, const struct component_ops *ops, int subcomponent)h](j)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM ubjr)}(h h]h }(hj&hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj&hhhj&hM ubj)}(hcomponent_add_typedh]j)}(hcomponent_add_typedh]hcomponent_add_typed}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&hhhj&hM ubjF)}(hG(struct device *dev, const struct component_ops *ops, int subcomponent)h](jL)}(hstruct device *devh](j`)}(hjch]hstruct}(hj 'hhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hj'ubjr)}(h h]h }(hj'hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj'ubh)}(hhh]j)}(hdeviceh]hdevice}(hj('hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*'modnameN classnameNjTjW)}jZ]j)}jj&sbc.component_add_typedasbuh1hhj'ubjr)}(h h]h }(hjH'hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj'ubj)}(hjh]h*}(hjV'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hdevh]hdev}(hjc'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj'ubjL)}(hconst struct component_ops *opsh](j`)}(hjh]hconst}(hj|'hhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjx'ubjr)}(h h]h }(hj'hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjx'ubj`)}(hjch]hstruct}(hj'hhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjx'ubjr)}(h h]h }(hj'hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjx'ubh)}(hhh]j)}(h component_opsh]h component_ops}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjTjW)}jZ]jD'c.component_add_typedasbuh1hhjx'ubjr)}(h h]h }(hj'hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjx'ubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx'ubj)}(hopsh]hops}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj'ubjL)}(hint subcomponenth](j)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubjr)}(h h]h }(hj(hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj(ubj)}(h subcomponenth]h subcomponent}(hj#(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj'ubeh}(h]h ]h"]h$]h&]jjuh1jEhj&hhhj&hM ubeh}(h]h ]h"]h$]h&]jjjuh1jYjjhj&hhhj&hM ubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1jShj&hM hj&hhubj)}(hhh]h)}(hregister a componenth]hregister a component}(hjM(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjJ(hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj&hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjje(jje(jjjuh1jNhhhj,hNhNubj)}(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)}(hjo(h]h Parameters}(hjq(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm(ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhji(ubj-)}(hhh](j2)}(h(``struct device *dev`` component device h](j8)}(h``struct device *dev``h]j>)}(hj(h]hstruct device *dev}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj(ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj(ubjT)}(hhh]h)}(hcomponent deviceh]hcomponent device}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jShj(ubeh}(h]h ]h"]h$]h&]uh1j1hj(hMhj(ubj2)}(h8``const struct component_ops *ops`` component callbacks h](j8)}(h#``const struct component_ops *ops``h]j>)}(hj(h]hconst struct component_ops *ops}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj(ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj(ubjT)}(hhh]h)}(hcomponent callbacksh]hcomponent callbacks}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jShj(ubeh}(h]h ]h"]h$]h&]uh1j1hj(hMhj(ubj2)}(h:``int subcomponent`` nonzero identifier for subcomponents h](j8)}(h``int subcomponent``h]j>)}(hj)h]hint subcomponent}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj(ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj(ubjT)}(hhh]h)}(h$nonzero identifier for subcomponentsh]h$nonzero identifier for subcomponents}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jShj(ubeh}(h]h ]h"]h$]h&]uh1j1hj)hMhj(ubeh}(h]h ]h"]h$]h&]uh1j,hji(ubh)}(h**Description**h]j)}(hj;)h]h Description}(hj=)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9)ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhji(ubh)}(hRegister 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](hRegister a new component for N}(hjQ)hhhNhNubj)}(h**dev**h]hdev}(hjY)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ)ubh. Functions in }(hjQ)hhhNhNubj)}(h**ops**h]hops}(hjk)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ)ubhv will be call when the aggregate driver is ready to bind the overall driver by calling component_bind_all(). See also }(hjQ)hhhNhNubh)}(h.:c:type:`struct component_ops `h]j>)}(hj)h]hstruct component_ops}(hj)hhhNhNubah}(h]h ](hjc-typeeh"]h$]h&]uh1j=hj})ubah}(h]h ]h"]h$]h&]refdoch refdomainjreftypetype refexplicitrefwarnjTjXj component_opsuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhjQ)ubh.}(hjQ)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hMhji(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)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubhh must be nonzero and is used to differentiate between multiple components registered on the same device }(hj)hhhNhNubj)}(h**dev**h]hdev}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh?. These components are match using component_match_add_typed().}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhji(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)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhji(ubh)}(hSee also component_add().h]hSee also component_add().}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM hji(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj>)}(hhh]h}(h]h ]h"]h$]h&]entries](jJcomponent_add (C function)c.component_addhNtauh1j=hj,hhhNhNubjO)}(hhh](jT)}(hGint component_add (struct device *dev, const struct component_ops *ops)h]jZ)}(hFint component_add(struct device *dev, const struct component_ops *ops)h](j)}(hinth]hint}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM$ubjr)}(h h]h }(hj#*hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj*hhhj"*hM$ubj)}(h component_addh]j)}(h component_addh]h component_add}(hj5*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1*ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj*hhhj"*hM$ubjF)}(h5(struct device *dev, const struct component_ops *ops)h](jL)}(hstruct device *devh](j`)}(hjch]hstruct}(hjQ*hhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hjM*ubjr)}(h h]h }(hj^*hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjM*ubh)}(hhh]j)}(hdeviceh]hdevice}(hjo*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjq*modnameN classnameNjTjW)}jZ]j)}jj7*sbc.component_addasbuh1hhjM*ubjr)}(h h]h }(hj*hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjM*ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM*ubj)}(hdevh]hdev}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjI*ubjL)}(hconst struct component_ops *opsh](j`)}(hjh]hconst}(hj*hhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hj*ubjr)}(h h]h }(hj*hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj*ubj`)}(hjch]hstruct}(hj*hhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hj*ubjr)}(h h]h }(hj*hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj*ubh)}(hhh]j)}(h component_opsh]h component_ops}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjTjW)}jZ]j*c.component_addasbuh1hhj*ubjr)}(h h]h }(hj+hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj*ubj)}(hjh]h*}(hj(+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hopsh]hops}(hj5+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhjI*ubeh}(h]h ]h"]h$]h&]jjuh1jEhj*hhhj"*hM$ubeh}(h]h ]h"]h$]h&]jjjuh1jYjjhj *hhhj"*hM$ubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1jShj"*hM$hj *hhubj)}(hhh]h)}(hregister a componenth]hregister a component}(hj_+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj\+hhubah}(h]h ]h"]h$]h&]uh1jhj *hhhj"*hM$ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjw+jjw+jjjuh1jNhhhj,hNhNubj)}(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+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj{+ubj-)}(hhh](j2)}(h(``struct device *dev`` component device h](j8)}(h``struct device *dev``h]j>)}(hj+h]hstruct device *dev}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj+ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj+ubjT)}(hhh]h)}(hcomponent deviceh]hcomponent device}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMhj+ubah}(h]h ]h"]h$]h&]uh1jShj+ubeh}(h]h ]h"]h$]h&]uh1j1hj+hMhj+ubj2)}(h8``const struct component_ops *ops`` component callbacks h](j8)}(h#``const struct component_ops *ops``h]j>)}(hj+h]hconst struct component_ops *ops}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj+ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj+ubjT)}(hhh]h)}(hcomponent callbacksh]hcomponent callbacks}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMhj+ubah}(h]h ]h"]h$]h&]uh1jShj+ubeh}(h]h ]h"]h$]h&]uh1j1hj+hMhj+ubeh}(h]h ]h"]h$]h&]uh1j,hj{+ubh)}(h**Description**h]j)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj{+ubh)}(hRegister 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](hRegister a new component for }(hj*,hhhNhNubj)}(h**dev**h]hdev}(hj2,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*,ubh. Functions in }(hj*,hhhNhNubj)}(h**ops**h]hops}(hjD,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*,ubhx will be called when the aggregate driver is ready to bind the overall driver by calling component_bind_all(). See also }(hj*,hhhNhNubh)}(h.:c:type:`struct component_ops `h]j>)}(hjX,h]hstruct component_ops}(hjZ,hhhNhNubah}(h]h ](hjc-typeeh"]h$]h&]uh1j=hjV,ubah}(h]h ]h"]h$]h&]refdoch refdomainjreftypetype refexplicitrefwarnjTjXj component_opsuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj*,ubh.}(hj*,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhju,hMhj{+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,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chMhj{+ubh)}(hjSee also component_add_typed() for a variant that allows multiple different components on the same device.h]hjSee also component_add_typed() for a variant that allows multiple different components on the same device.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM!hj{+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj>)}(hhh]h}(h]h ]h"]h$]h&]entries](jJcomponent_del (C function)c.component_delhNtauh1j=hj,hhhNhNubjO)}(hhh](jT)}(hHvoid component_del (struct device *dev, const struct component_ops *ops)h]jZ)}(hGvoid component_del(struct device *dev, const struct component_ops *ops)h](j)}(hvoidh]hvoid}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM3ubjr)}(h h]h }(hj,hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj,hhhj,hM3ubj)}(h component_delh]j)}(h component_delh]h component_del}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj,hhhj,hM3ubjF)}(h5(struct device *dev, const struct component_ops *ops)h](jL)}(hstruct device *devh](j`)}(hjch]hstruct}(hj,hhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hj,ubjr)}(h h]h }(hj-hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj,ubh)}(hhh]j)}(hdeviceh]hdevice}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjTjW)}jZ]j)}jj,sbc.component_delasbuh1hhj,ubjr)}(h h]h }(hj9-hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj,ubj)}(hjh]h*}(hjG-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hdevh]hdev}(hjT-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj,ubjL)}(hconst struct component_ops *opsh](j`)}(hjh]hconst}(hjm-hhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hji-ubjr)}(h h]h }(hjz-hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhji-ubj`)}(hjch]hstruct}(hj-hhhNhNubah}(h]h ]jlah"]h$]h&]uh1j_hji-ubjr)}(h h]h }(hj-hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhji-ubh)}(hhh]j)}(h component_opsh]h component_ops}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjTjW)}jZ]j5-c.component_delasbuh1hhji-ubjr)}(h h]h }(hj-hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhji-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji-ubj)}(hopsh]hops}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jKhj,ubeh}(h]h ]h"]h$]h&]jjuh1jEhj,hhhj,hM3ubeh}(h]h ]h"]h$]h&]jjjuh1jYjjhj,hhhj,hM3ubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1jShj,hM3hj,hhubj)}(hhh]h)}(hunregister a componenth]hunregister a component}(hj .hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM+hj.hhubah}(h]h ]h"]h$]h&]uh1jhj,hhhj,hM3ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj!.jj!.jjjuh1jNhhhj,hNhNubj)}(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}(hj-.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj).ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM/hj%.ubj-)}(hhh](j2)}(h(``struct device *dev`` component device h](j8)}(h``struct device *dev``h]j>)}(hjJ.h]hstruct device *dev}(hjL.hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjH.ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM,hjD.ubjT)}(hhh]h)}(hcomponent deviceh]hcomponent device}(hjc.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_.hM,hj`.ubah}(h]h ]h"]h$]h&]uh1jShjD.ubeh}(h]h ]h"]h$]h&]uh1j1hj_.hM,hjA.ubj2)}(h8``const struct component_ops *ops`` component callbacks h](j8)}(h#``const struct component_ops *ops``h]j>)}(hj.h]hconst struct component_ops *ops}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj.ubah}(h]h ]h"]h$]h&]uh1j7h]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM-hj}.ubjT)}(hhh]h)}(hcomponent callbacksh]hcomponent callbacks}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hM-hj.ubah}(h]h ]h"]h$]h&]uh1jShj}.ubeh}(h]h ]h"]h$]h&]uh1j1hj.hM-hjA.ubeh}(h]h ]h"]h$]h&]uh1j,hj%.ubh)}(h**Description**h]j)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM/hj%.ubh)}(hUnregister 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]hUnregister 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.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/component:17: ./drivers/base/component.chM/hj%.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubeh}(h]apiah ]h"]apiah$]h&]uh1hhhhhhhhK ubeh}(h](&component-helper-for-aggregate-driversheh ]h"](&component helper for aggregate drivers componenteh$]h&]uh1hhhhhhhhKexpect_referenced_by_name}j.hsexpect_referenced_by_id}hhsubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj"/error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}h]hasnameids}(j.hj.j.j.j.u nametypes}(j.j.j.uh}(hhj.hj.j,jLjUjjjjji jn j j j j jjjjjjjDjIjjj"j "jZ$j_$j&j&j*j *j,j,u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h/Hyperlink target "component" is not referenced.}hj/sbah}(h]h ]h"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1j/uba transformerN include_log] decorationNhhub.