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/infrastructuremodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/zh_TW/driver-api/infrastructuremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/it_IT/driver-api/infrastructuremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ja_JP/driver-api/infrastructuremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ko_KR/driver-api/infrastructuremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/sp_SP/driver-api/infrastructuremodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hDevice drivers infrastructureh]hDevice drivers infrastructure}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhG/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure.rsthKubh)}(hhh](h)}(h(The Basic Device Driver-Model Structuresh]h(The Basic Device Driver-Model Structures}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlesubsys_interface (C struct)c.subsys_interfacehNtauh1hhhhhhNhNubhdesc)}(hhh](hdesc_signature)}(hsubsys_interfaceh]hdesc_signature_line)}(hstruct subsys_interfaceh](hdesc_sig_keyword)}(hstructh]hstruct}(hhhhhNhNubah}(h]h ]kah"]h$]h&]uh1hhhhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKubhdesc_sig_space)}(h h]h }(hhhhhNhNubah}(h]h ]wah"]h$]h&]uh1hhhhhhhhKubh desc_name)}(hsubsys_interfaceh]h desc_sig_name)}(hhh]hsubsys_interface}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1j hhhhhhhKubeh}(h]h ]h"]h$]h&]j+j, add_permalinkuh1hsphinx_line_type declaratorhhhhhhhKubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1hhhhKhhhhubh desc_content)}(hhh]h paragraph)}(hinterfaces to device functionsh]hinterfaces to device functions}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhK3hjChhubah}(h]h ]h"]h$]h&]uh1jAhhhhhhhKubeh}(h]h ](cstructeh"]h$]h&]domainj`objtypejadesctypejanoindex noindexentrynocontentsentryuh1hhhhhhNhNubh container)}(hX:**Definition**:: struct subsys_interface { const char *name; const struct bus_type *subsys; struct list_head node; int (*add_dev)(struct device *dev, struct subsys_interface *sif); void (*remove_dev)(struct device *dev, struct subsys_interface *sif); }; **Members** ``name`` name of the device function ``subsys`` subsystem of the devices to attach to ``node`` the list of functions registered at the subsystem ``add_dev`` device hookup to device function handler ``remove_dev`` device hookup to device function handlerh](jG)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubh:}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhK7hjmubh literal_block)}(hXstruct subsys_interface { const char *name; const struct bus_type *subsys; struct list_head node; int (*add_dev)(struct device *dev, struct subsys_interface *sif); void (*remove_dev)(struct device *dev, struct subsys_interface *sif); };h]hXstruct subsys_interface { const char *name; const struct bus_type *subsys; struct list_head node; int (*add_dev)(struct device *dev, struct subsys_interface *sif); void (*remove_dev)(struct device *dev, struct subsys_interface *sif); };}hjsbah}(h]h ]h"]h$]h&]j+j,uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhK9hjmubjG)}(h **Members**h]jv)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKAhjmubhdefinition_list)}(hhh](hdefinition_list_item)}(h%``name`` name of the device function h](hterm)}(h``name``h]hliteral)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhK5hjubh definition)}(hhh]jG)}(hname of the device functionh]hname of the device function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhK5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK5hjubj)}(h1``subsys`` subsystem of the devices to attach to h](j)}(h ``subsys``h]j)}(hjh]hsubsys}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhK6hjubj)}(hhh]jG)}(h%subsystem of the devices to attach toh]h%subsystem of the devices to attach to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhK6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK6hjubj)}(h;``node`` the list of functions registered at the subsystem h](j)}(h``node``h]j)}(hj>h]hnode}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhK7hj8ubj)}(hhh]jG)}(h1the list of functions registered at the subsystemh]h1the list of functions registered at the subsystem}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjShK7hjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShK7hjubj)}(h5``add_dev`` device hookup to device function handler h](j)}(h ``add_dev``h]j)}(hjwh]hadd_dev}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhK8hjqubj)}(hhh]jG)}(h(device hookup to device function handlerh]h(device hookup to device function handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhK8hjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhK8hjubj)}(h7``remove_dev`` device hookup to device function handlerh](j)}(h``remove_dev``h]j)}(hjh]h remove_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhK8hjubj)}(hhh]jG)}(h(device hookup to device function handlerh]h(device hookup to device function handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhK9hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK8hjubeh}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhKBubj)}(hdevice_attributeh]j)}(hj+h]hdevice_attribute}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj-hhhj>hKBubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj)hhhj>hKBubah}(h]j$ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj>hKBhj&hhubjB)}(hhh]jG)}(h*Interface for exporting device attributes.h]h*Interface for exporting device attributes.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKdhjphhubah}(h]h ]h"]h$]h&]uh1jAhj&hhhj>hKBubeh}(h]h ](j`structeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhNhNubjl)}(hX**Definition**:: struct device_attribute { struct attribute attr; ssize_t (*show)(struct device *dev, struct device_attribute *attr, char *buf); ssize_t (*store)(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); }; **Members** ``attr`` sysfs attribute definition. ``show`` Show handler. ``store`` Store handler.h](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhhjubj)}(hstruct device_attribute { struct attribute attr; ssize_t (*show)(struct device *dev, struct device_attribute *attr, char *buf); ssize_t (*store)(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); };h]hstruct device_attribute { struct attribute attr; ssize_t (*show)(struct device *dev, struct device_attribute *attr, char *buf); ssize_t (*store)(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); };}hjsbah}(h]h ]h"]h$]h&]j+j,uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKjhjubjG)}(h **Members**h]jv)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKphjubj)}(hhh](j)}(h%``attr`` sysfs attribute definition. h](j)}(h``attr``h]j)}(hjh]hattr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKfhjubj)}(hhh]jG)}(hsysfs attribute definition.h]hsysfs attribute definition.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKfhjubj)}(h``show`` Show handler. h](j)}(h``show``h]j)}(hjh]hshow}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKghjubj)}(hhh]jG)}(h Show handler.h]h Show handler.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj.hKghj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hKghjubj)}(h``store`` Store handler.h](j)}(h ``store``h]j)}(hjRh]hstore}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKghjLubj)}(hhh]jG)}(hStore handler.h]hStore handler.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghKghjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdev_ext_attribute (C struct)c.dev_ext_attributehNtauh1hhhhhhNhNubh)}(hhh](h)}(hdev_ext_attributeh]h)}(hstruct dev_ext_attributeh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKnubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKnubj)}(hdev_ext_attributeh]j)}(hjh]hdev_ext_attribute}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKnubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKnubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKnhjhhubjB)}(hhh]jG)}(h-Exported device attribute with extra context.h]h-Exported device attribute with extra context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKrhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKnubeh}(h]h ](j`structeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhNhNubjl)}(h**Definition**:: struct dev_ext_attribute { struct device_attribute attr; void *var; }; **Members** ``attr`` Exported device attribute. ``var`` Pointer to context.h](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKvhj ubj)}(hNstruct dev_ext_attribute { struct device_attribute attr; void *var; };h]hNstruct dev_ext_attribute { struct device_attribute attr; void *var; };}hj+sbah}(h]h ]h"]h$]h&]j+j,uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKxhj ubjG)}(h **Members**h]jv)}(hj<h]hMembers}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhK}hj ubj)}(hhh](j)}(h$``attr`` Exported device attribute. h](j)}(h``attr``h]j)}(hj[h]hattr}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKthjUubj)}(hhh]jG)}(hExported device attribute.h]hExported device attribute.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjphKthjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphKthjRubj)}(h``var`` Pointer to context.h](j)}(h``var``h]j)}(hjh]hvar}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKthjubj)}(hhh]jG)}(hPointer to context.h]hPointer to context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKthjRubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌDEVICE_ATTR (C macro) c.DEVICE_ATTRhNtauh1hhhhhhNhNubh)}(hhh](h)}(h DEVICE_ATTRh]h)}(h DEVICE_ATTRh]j)}(h DEVICE_ATTRh]j)}(hjh]h DEVICE_ATTR}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j`macroeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhNhNubjG)}(h-``DEVICE_ATTR (_name, _mode, _show, _store)``h]j)}(hj$h]h)DEVICE_ATTR (_name, _mode, _show, _store)}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhhhhubh block_quote)}(hDefine a device attribute. h]jG)}(hDefine a device attribute.h]hDefine a device attribute.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj<ubah}(h]h ]h"]h$]h&]uh1j:hjNhKhhhhubjl)}(hX;**Parameters** ``_name`` Attribute name. ``_mode`` File mode. ``_show`` Show handler. Optional, but mandatory if attribute is readable. ``_store`` Store handler. Optional, but mandatory if attribute is writable. **Description** Convenience macro for defining a struct device_attribute. For example, ``DEVICE_ATTR(foo, 0644, foo_show, foo_store);`` expands to: .. code-block:: c struct device_attribute dev_attr_foo = { .attr = { .name = "foo", .mode = 0644 }, .show = foo_show, .store = foo_store, };h](jG)}(h**Parameters**h]jv)}(hj[h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjUubj)}(hhh](j)}(h``_name`` Attribute name. h](j)}(h ``_name``h]j)}(hjzh]h_name}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjtubj)}(hhh]jG)}(hAttribute name.h]hAttribute name.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhKhjqubj)}(h``_mode`` File mode. h](j)}(h ``_mode``h]j)}(hjh]h_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubj)}(hhh]jG)}(h File mode.h]h File mode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjqubj)}(hJ``_show`` Show handler. Optional, but mandatory if attribute is readable. h](j)}(h ``_show``h]j)}(hjh]h_show}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubj)}(hhh]jG)}(h?Show handler. Optional, but mandatory if attribute is readable.h]h?Show handler. Optional, but mandatory if attribute is readable.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjqubj)}(hL``_store`` Store handler. Optional, but mandatory if attribute is writable. h](j)}(h ``_store``h]j)}(hj%h]h_store}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubj)}(hhh]jG)}(h@Store handler. Optional, but mandatory if attribute is writable.h]h@Store handler. Optional, but mandatory if attribute is writable.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj:hKhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hKhjqubeh}(h]h ]h"]h$]h&]uh1jhjUubjG)}(h**Description**h]jv)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjUubjG)}(h9Convenience macro for defining a struct device_attribute.h]h9Convenience macro for defining a struct device_attribute.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjUubjG)}(hIFor example, ``DEVICE_ATTR(foo, 0644, foo_show, foo_store);`` expands to:h](h For example, }(hjhhhNhNubj)}(h0``DEVICE_ATTR(foo, 0644, foo_show, foo_store);``h]h,DEVICE_ATTR(foo, 0644, foo_show, foo_store);}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh expands to:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjUubj)}(hstruct device_attribute dev_attr_foo = { .attr = { .name = "foo", .mode = 0644 }, .show = foo_show, .store = foo_store, };h]hstruct device_attribute dev_attr_foo = { .attr = { .name = "foo", .mode = 0644 }, .show = foo_show, .store = foo_store, };}hjsbah}(h]h ]h"]h$]h&]j+j,forcelanguagej`highlight_args}uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌDEVICE_ATTR_PREALLOC (C macro)c.DEVICE_ATTR_PREALLOChNtauh1hhhhhhNhNubh)}(hhh](h)}(hDEVICE_ATTR_PREALLOCh]h)}(hDEVICE_ATTR_PREALLOCh]j)}(hDEVICE_ATTR_PREALLOCh]j)}(hjh]hDEVICE_ATTR_PREALLOC}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j`macroeh"]h$]h&]jej`jfj jgj jhjijjuh1hhhhhhNhNubjG)}(h6``DEVICE_ATTR_PREALLOC (_name, _mode, _show, _store)``h]j)}(hjh]h2DEVICE_ATTR_PREALLOC (_name, _mode, _show, _store)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhhhhubj;)}(h(Define a preallocated device attribute. h]jG)}(h'Define a preallocated device attribute.h]h'Define a preallocated device attribute.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj%ubah}(h]h ]h"]h$]h&]uh1j:hj7hKhhhhubjl)}(hX1**Parameters** ``_name`` Attribute name. ``_mode`` File mode. ``_show`` Show handler. Optional, but mandatory if attribute is readable. ``_store`` Store handler. Optional, but mandatory if attribute is writable. **Description** Like DEVICE_ATTR(), but ``SYSFS_PREALLOC`` is set on **_mode**.h](jG)}(h**Parameters**h]jv)}(hjDh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj>ubj)}(hhh](j)}(h``_name`` Attribute name. h](j)}(h ``_name``h]j)}(hjch]h_name}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj]ubj)}(hhh]jG)}(hAttribute name.h]hAttribute name.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjxhKhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhKhjZubj)}(h``_mode`` File mode. h](j)}(h ``_mode``h]j)}(hjh]h_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubj)}(hhh]jG)}(h File mode.h]h File mode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(hJ``_show`` Show handler. Optional, but mandatory if attribute is readable. h](j)}(h ``_show``h]j)}(hjh]h_show}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubj)}(hhh]jG)}(h?Show handler. Optional, but mandatory if attribute is readable.h]h?Show handler. Optional, but mandatory if attribute is readable.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(hL``_store`` Store handler. Optional, but mandatory if attribute is writable. h](j)}(h ``_store``h]j)}(hj h]h_store}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj ubj)}(hhh]jG)}(h@Store handler. Optional, but mandatory if attribute is writable.h]h@Store handler. Optional, but mandatory if attribute is writable.}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj# hKhj$ ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj# hKhjZubeh}(h]h ]h"]h$]h&]uh1jhj>ubjG)}(h**Description**h]jv)}(hjI h]h Description}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjG ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj>ubjG)}(h?Like DEVICE_ATTR(), but ``SYSFS_PREALLOC`` is set on **_mode**.h](hLike DEVICE_ATTR(), but }(hj_ hhhNhNubj)}(h``SYSFS_PREALLOC``h]hSYSFS_PREALLOC}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ ubh is set on }(hj_ hhhNhNubjv)}(h **_mode**h]h_mode}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ ubh.}(hj_ hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌDEVICE_ATTR_RW (C macro)c.DEVICE_ATTR_RWhNtauh1hhhhhhNhNubh)}(hhh](h)}(hDEVICE_ATTR_RWh]h)}(hDEVICE_ATTR_RWh]j)}(hDEVICE_ATTR_RWh]j)}(hj h]hDEVICE_ATTR_RW}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj hhhj hKubah}(h]j ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj hKhj hhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhj hhhj hKubeh}(h]h ](j`macroeh"]h$]h&]jej`jfj jgj jhjijjuh1hhhhhhNhNubjG)}(h``DEVICE_ATTR_RW (_name)``h]j)}(hj h]hDEVICE_ATTR_RW (_name)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhhhhubj;)}(h&Define a read-write device attribute. h]jG)}(h%Define a read-write device attribute.h]h%Define a read-write device attribute.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj ubah}(h]h ]h"]h$]h&]uh1j:hj hKhhhhubjl)}(h**Parameters** ``_name`` Attribute name. **Description** Like DEVICE_ATTR(), but **_mode** is 0644, **_show** is <_name>_show, and **_store** is <_name>_store.h](jG)}(h**Parameters**h]jv)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj ubj)}(hhh]j)}(h``_name`` Attribute name. h](j)}(h ``_name``h]j)}(hj< h]h_name}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj: ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj6 ubj)}(hhh]jG)}(hAttribute name.h]hAttribute name.}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjQ hKhjR ubah}(h]h ]h"]h$]h&]uh1jhj6 ubeh}(h]h ]h"]h$]h&]uh1jhjQ hKhj3 ubah}(h]h ]h"]h$]h&]uh1jhj ubjG)}(h**Description**h]jv)}(hjw h]h Description}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1juhju ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj ubjG)}(hfLike DEVICE_ATTR(), but **_mode** is 0644, **_show** is <_name>_show, and **_store** is <_name>_store.h](hLike DEVICE_ATTR(), but }(hj hhhNhNubjv)}(h **_mode**h]h_mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh is 0644, }(hj hhhNhNubjv)}(h **_show**h]h_show}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh is <_name>_show, and }(hj hhhNhNubjv)}(h **_store**h]h_store}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh is <_name>_store.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌDEVICE_ATTR_ADMIN_RW (C macro)c.DEVICE_ATTR_ADMIN_RWhNtauh1hhhhhhNhNubh)}(hhh](h)}(hDEVICE_ATTR_ADMIN_RWh]h)}(hDEVICE_ATTR_ADMIN_RWh]j)}(hDEVICE_ATTR_ADMIN_RWh]j)}(hj h]hDEVICE_ATTR_ADMIN_RW}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj hhhj hKubah}(h]j ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj hKhj hhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhj hhhj hKubeh}(h]h ](j`macroeh"]h$]h&]jej`jfj" jgj" jhjijjuh1hhhhhhNhNubjG)}(h ``DEVICE_ATTR_ADMIN_RW (_name)``h]j)}(hj( h]hDEVICE_ATTR_ADMIN_RW (_name)}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj& ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhhhhubj;)}(h2Define an admin-only read-write device attribute. h]jG)}(h1Define an admin-only read-write device attribute.h]h1Define an admin-only read-write device attribute.}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj> ubah}(h]h ]h"]h$]h&]uh1j:hjP hKhhhhubjl)}(hk**Parameters** ``_name`` Attribute name. **Description** Like DEVICE_ATTR_RW(), but **_mode** is 0600.h](jG)}(h**Parameters**h]jv)}(hj] h]h Parameters}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjW ubj)}(hhh]j)}(h``_name`` Attribute name. h](j)}(h ``_name``h]j)}(hj| h]h_name}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjv ubj)}(hhh]jG)}(hAttribute name.h]hAttribute name.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjv ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjs ubah}(h]h ]h"]h$]h&]uh1jhjW ubjG)}(h**Description**h]jv)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjW ubjG)}(h-Like DEVICE_ATTR_RW(), but **_mode** is 0600.h](hLike DEVICE_ATTR_RW(), but }(hj hhhNhNubjv)}(h **_mode**h]h_mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh is 0600.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjW ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌDEVICE_ATTR_RO (C macro)c.DEVICE_ATTR_ROhNtauh1hhhhhhNhNubh)}(hhh](h)}(hDEVICE_ATTR_ROh]h)}(hDEVICE_ATTR_ROh]j)}(hDEVICE_ATTR_ROh]j)}(hj h]hDEVICE_ATTR_RO}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj hhhj% hKubah}(h]j ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj% hKhj hhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhj hhhj% hKubeh}(h]h ](j`macroeh"]h$]h&]jej`jfj> jgj> jhjijjuh1hhhhhhNhNubjG)}(h``DEVICE_ATTR_RO (_name)``h]j)}(hjD h]hDEVICE_ATTR_RO (_name)}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhhhhubj;)}(h$Define a readable device attribute. h]jG)}(h#Define a readable device attribute.h]h#Define a readable device attribute.}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjZ ubah}(h]h ]h"]h$]h&]uh1j:hjl hKhhhhubjl)}(h**Parameters** ``_name`` Attribute name. **Description** Like DEVICE_ATTR(), but **_mode** is 0444 and **_show** is <_name>_show.h](jG)}(h**Parameters**h]jv)}(hjy h]h Parameters}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjw ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjs ubj)}(hhh]j)}(h``_name`` Attribute name. h](j)}(h ``_name``h]j)}(hj h]h_name}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj ubj)}(hhh]jG)}(hAttribute name.h]hAttribute name.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjs ubjG)}(h**Description**h]jv)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjs ubjG)}(hHLike DEVICE_ATTR(), but **_mode** is 0444 and **_show** is <_name>_show.h](hLike DEVICE_ATTR(), but }(hj hhhNhNubjv)}(h **_mode**h]h_mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh is 0444 and }(hj hhhNhNubjv)}(h **_show**h]h_show}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh is <_name>_show.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjs ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌDEVICE_ATTR_ADMIN_RO (C macro)c.DEVICE_ATTR_ADMIN_ROhNtauh1hhhhhhNhNubh)}(hhh](h)}(hDEVICE_ATTR_ADMIN_ROh]h)}(hDEVICE_ATTR_ADMIN_ROh]j)}(hDEVICE_ATTR_ADMIN_ROh]j)}(hj6 h]hDEVICE_ATTR_ADMIN_RO}(hj@ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj< ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj8 hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj4 hhhjS hKubah}(h]j/ ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjS hKhj1 hhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhj1 hhhjS hKubeh}(h]h ](j`macroeh"]h$]h&]jej`jfjl jgjl jhjijjuh1hhhhhhNhNubjG)}(h ``DEVICE_ATTR_ADMIN_RO (_name)``h]j)}(hjr h]hDEVICE_ATTR_ADMIN_RO (_name)}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhhhhubj;)}(h0Define an admin-only readable device attribute. h]jG)}(h/Define an admin-only readable device attribute.h]h/Define an admin-only readable device attribute.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj ubah}(h]h ]h"]h$]h&]uh1j:hj hKhhhhubjl)}(hk**Parameters** ``_name`` Attribute name. **Description** Like DEVICE_ATTR_RO(), but **_mode** is 0400.h](jG)}(h**Parameters**h]jv)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj ubj)}(hhh]j)}(h``_name`` Attribute name. h](j)}(h ``_name``h]j)}(hj h]h_name}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj ubj)}(hhh]jG)}(hAttribute name.h]hAttribute name.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj ubjG)}(h-Like DEVICE_ATTR_RO(), but **_mode** is 0400.h](hLike DEVICE_ATTR_RO(), but }(hjhhhNhNubjv)}(h **_mode**h]h_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is 0400.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌDEVICE_ATTR_WO (C macro)c.DEVICE_ATTR_WOhNtauh1hhhhhhNhNubh)}(hhh](h)}(hDEVICE_ATTR_WOh]h)}(hDEVICE_ATTR_WOh]j)}(hDEVICE_ATTR_WOh]j)}(hjRh]hDEVICE_ATTR_WO}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjThhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjPhhhjohKubah}(h]jKah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjohKhjMhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhjMhhhjohKubeh}(h]h ](j`macroeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhNhNubjG)}(h``DEVICE_ATTR_WO (_name)``h]j)}(hjh]hDEVICE_ATTR_WO (_name)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhhhhubj;)}(h0Define an admin-only writable device attribute. h]jG)}(h/Define an admin-only writable device attribute.h]h/Define an admin-only writable device attribute.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubah}(h]h ]h"]h$]h&]uh1j:hjhKhhhhubjl)}(h**Parameters** ``_name`` Attribute name. **Description** Like DEVICE_ATTR(), but **_mode** is 0200 and **_store** is <_name>_store.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubj)}(hhh]j)}(h``_name`` Attribute name. h](j)}(h ``_name``h]j)}(hjh]h_name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubj)}(hhh]jG)}(hAttribute name.h]hAttribute name.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubjG)}(hJLike DEVICE_ATTR(), but **_mode** is 0200 and **_store** is <_name>_store.h](hLike DEVICE_ATTR(), but }(hj3hhhNhNubjv)}(h **_mode**h]h_mode}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubh is 0200 and }(hj3hhhNhNubjv)}(h **_store**h]h_store}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubh is <_name>_store.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌDEVICE_ULONG_ATTR (C macro)c.DEVICE_ULONG_ATTRhNtauh1hhhhhhNhNubh)}(hhh](h)}(hDEVICE_ULONG_ATTRh]h)}(hDEVICE_ULONG_ATTRh]j)}(hDEVICE_ULONG_ATTRh]j)}(hjh]hDEVICE_ULONG_ATTR}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj~hhhjhKubah}(h]jyah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhj{hhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhj{hhhjhKubeh}(h]h ](j`macroeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhNhNubjG)}(h*``DEVICE_ULONG_ATTR (_name, _mode, _var)``h]j)}(hjh]h&DEVICE_ULONG_ATTR (_name, _mode, _var)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhhhhubj;)}(h6Define a device attribute backed by an unsigned long. h]jG)}(h5Define a device attribute backed by an unsigned long.h]h5Define a device attribute backed by an unsigned long.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubah}(h]h ]h"]h$]h&]uh1j:hjhKhhhhubjl)}(hX**Parameters** ``_name`` Attribute name. ``_mode`` File mode. ``_var`` Identifier of unsigned long. **Description** Like DEVICE_ATTR(), but **_show** and **_store** are automatically provided such that reads and writes to the attribute from userspace affect **_var**.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubj)}(hhh](j)}(h``_name`` Attribute name. h](j)}(h ``_name``h]j)}(hjh]h_name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj ubj)}(hhh]jG)}(hAttribute name.h]hAttribute name.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj%hKhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hKhjubj)}(h``_mode`` File mode. h](j)}(h ``_mode``h]j)}(hjIh]h_mode}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjCubj)}(hhh]jG)}(h File mode.h]h File mode.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj^hKhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hKhjubj)}(h&``_var`` Identifier of unsigned long. h](j)}(h``_var``h]j)}(hjh]h_var}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj|ubj)}(hhh]jG)}(hIdentifier of unsigned long.h]hIdentifier of unsigned long.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubjG)}(hLike DEVICE_ATTR(), but **_show** and **_store** are automatically provided such that reads and writes to the attribute from userspace affect **_var**.h](hLike DEVICE_ATTR(), but }(hjhhhNhNubjv)}(h **_show**h]h_show}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh and }(hjhhhNhNubjv)}(h **_store**h]h_store}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh^ are automatically provided such that reads and writes to the attribute from userspace affect }(hjhhhNhNubjv)}(h**_var**h]h_var}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌDEVICE_INT_ATTR (C macro)c.DEVICE_INT_ATTRhNtauh1hhhhhhNhNubh)}(hhh](h)}(hDEVICE_INT_ATTRh]h)}(hDEVICE_INT_ATTRh]j)}(hDEVICE_INT_ATTRh]j)}(hj2h]hDEVICE_INT_ATTR}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj4hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj0hhhjOhKubah}(h]j+ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjOhKhj-hhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhj-hhhjOhKubeh}(h]h ](j`macroeh"]h$]h&]jej`jfjhjgjhjhjijjuh1hhhhhhNhNubjG)}(h(``DEVICE_INT_ATTR (_name, _mode, _var)``h]j)}(hjnh]h$DEVICE_INT_ATTR (_name, _mode, _var)}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhhhhubj;)}(h,Define a device attribute backed by an int. h]jG)}(h+Define a device attribute backed by an int.h]h+Define a device attribute backed by an int.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubah}(h]h ]h"]h$]h&]uh1j:hjhKhhhhubjl)}(h**Parameters** ``_name`` Attribute name. ``_mode`` File mode. ``_var`` Identifier of int. **Description** Like DEVICE_ULONG_ATTR(), but **_var** is an int.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubj)}(hhh](j)}(h``_name`` Attribute name. h](j)}(h ``_name``h]j)}(hjh]h_name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubj)}(hhh]jG)}(hAttribute name.h]hAttribute name.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``_mode`` File mode. h](j)}(h ``_mode``h]j)}(hjh]h_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubj)}(hhh]jG)}(h File mode.h]h File mode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``_var`` Identifier of int. h](j)}(h``_var``h]j)}(hj4h]h_var}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj.ubj)}(hhh]jG)}(hIdentifier of int.h]hIdentifier of int.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjIhKhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjoh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubjG)}(h1Like DEVICE_ULONG_ATTR(), but **_var** is an int.h](hLike DEVICE_ULONG_ATTR(), but }(hjhhhNhNubjv)}(h**_var**h]h_var}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is an int.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌDEVICE_BOOL_ATTR (C macro)c.DEVICE_BOOL_ATTRhNtauh1hhhhhhNhNubh)}(hhh](h)}(hDEVICE_BOOL_ATTRh]h)}(hDEVICE_BOOL_ATTRh]j)}(hDEVICE_BOOL_ATTRh]j)}(hjh]hDEVICE_BOOL_ATTR}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j`macroeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhNhNubjG)}(h)``DEVICE_BOOL_ATTR (_name, _mode, _var)``h]j)}(hjh]h%DEVICE_BOOL_ATTR (_name, _mode, _var)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhhhhubj;)}(h,Define a device attribute backed by a bool. h]jG)}(h+Define a device attribute backed by a bool.h]h+Define a device attribute backed by a bool.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubah}(h]h ]h"]h$]h&]uh1j:hj$hKhhhhubjl)}(h**Parameters** ``_name`` Attribute name. ``_mode`` File mode. ``_var`` Identifier of bool. **Description** Like DEVICE_ULONG_ATTR(), but **_var** is a bool.h](jG)}(h**Parameters**h]jv)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj+ubj)}(hhh](j)}(h``_name`` Attribute name. h](j)}(h ``_name``h]j)}(hjPh]h_name}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjJubj)}(hhh]jG)}(hAttribute name.h]hAttribute name.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjehKhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehKhjGubj)}(h``_mode`` File mode. h](j)}(h ``_mode``h]j)}(hjh]h_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubj)}(hhh]jG)}(h File mode.h]h File mode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjGubj)}(h``_var`` Identifier of bool. h](j)}(h``_var``h]j)}(hjh]h_var}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhjubj)}(hhh]jG)}(hIdentifier of bool.h]hIdentifier of bool.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjGubeh}(h]h ]h"]h$]h&]uh1jhj+ubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj+ubjG)}(h1Like DEVICE_ULONG_ATTR(), but **_var** is a bool.h](hLike DEVICE_ULONG_ATTR(), but }(hjhhhNhNubjv)}(h**_var**h]h_var}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is a bool.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhKhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌDEVICE_STRING_ATTR_RO (C macro)c.DEVICE_STRING_ATTR_ROhNtauh1hhhhhhNhNubh)}(hhh](h)}(hDEVICE_STRING_ATTR_ROh]h)}(hDEVICE_STRING_ATTR_ROh]j)}(hDEVICE_STRING_ATTR_ROh]j)}(hjNh]hDEVICE_STRING_ATTR_RO}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjPhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM ubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjLhhhjkhM ubah}(h]jGah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjkhM hjIhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhjIhhhjkhM ubeh}(h]h ](j`macroeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhNhNubjG)}(h.``DEVICE_STRING_ATTR_RO (_name, _mode, _var)``h]j)}(hjh]h*DEVICE_STRING_ATTR_RO (_name, _mode, _var)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM hhhhubj;)}(h2Define a device attribute backed by a r/o string. h]jG)}(h1Define a device attribute backed by a r/o string.h]h1Define a device attribute backed by a r/o string.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubah}(h]h ]h"]h$]h&]uh1j:hjhMhhhhubjl)}(hX**Parameters** ``_name`` Attribute name. ``_mode`` File mode. ``_var`` Identifier of string. **Description** Like DEVICE_ULONG_ATTR(), but **_var** is a string. Because the length of the string allocation is unknown, the attribute must be read-only.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubj)}(hhh](j)}(h``_name`` Attribute name. h](j)}(h ``_name``h]j)}(hjh]h_name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubj)}(hhh]jG)}(hAttribute name.h]hAttribute name.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``_mode`` File mode. h](j)}(h ``_mode``h]j)}(hjh]h_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubj)}(hhh]jG)}(h File mode.h]h File mode.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubj)}(h``_var`` Identifier of string. h](j)}(h``_var``h]j)}(hjPh]h_var}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjJubj)}(hhh]jG)}(hIdentifier of string.h]hIdentifier of string.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubjG)}(hLike DEVICE_ULONG_ATTR(), but **_var** is a string. Because the length of the string allocation is unknown, the attribute must be read-only.h](hLike DEVICE_ULONG_ATTR(), but }(hjhhhNhNubjv)}(h**_var**h]h_var}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhf is a string. Because the length of the string allocation is unknown, the attribute must be read-only.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_remove_action (C function)c.devm_remove_actionhNtauh1hhhhhhNhNubh)}(hhh](h)}(hPvoid devm_remove_action (struct device *dev, void (*action)(void *), void *data)h]h)}(hNvoid devm_remove_action(struct device *dev, void (*action)(void*), void *data)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM(ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM(ubj)}(hdevm_remove_actionh]j)}(hdevm_remove_actionh]hdevm_remove_action}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhM(ubhdesc_parameterlist)}(h7(struct device *dev, void (*action)(void*), void *data)h](hdesc_parameter)}(hstruct device *devh](h)}(hhh]hstruct}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubh)}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj"ubh)}(hhh]j)}(hdeviceh]hdevice}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainj`reftype identifier reftargetjFmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j_ ASTIdentifier)}jZjsbc.devm_remove_actionasbuh1hhj"ubh)}(h h]h }(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj"ubhdesc_sig_punctuation)}(h*h]h*}(hj|hhhNhNubah}(h]h ]pah"]h$]h&]uh1jzhj"ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hvoid (*action)(void*)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(h(h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hactionh]haction}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj{)}(h)h]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj{)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj{)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(h void *datah](j)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(h h]h }(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj3ubj{)}(hj~h]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj3ubj)}(hdatah]hdata}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhM(ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhM(ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM(hjhhubjB)}(hhh]jG)}(h&removes previously added custom actionh]h&removes previously added custom action}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhM(ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhNhNubjl)}(hX`**Parameters** ``struct device *dev`` Device that owns the action ``void (*action)(void *)`` Function implementing the action ``void *data`` Pointer to data passed to **action** implementation **Description** Removes instance of **action** previously added by devm_add_action(). Both action and data should match one of the existing entries.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM$hjubj)}(hhh](j)}(h3``struct device *dev`` Device that owns the action h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM!hjubj)}(hhh]jG)}(hDevice that owns the actionh]hDevice that owns the action}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjubj)}(h<``void (*action)(void *)`` Function implementing the action h](j)}(h``void (*action)(void *)``h]j)}(hjh]hvoid (*action)(void *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM"hjubj)}(hhh]jG)}(h Function implementing the actionh]h Function implementing the action}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubj)}(hC``void *data`` Pointer to data passed to **action** implementation h](j)}(h``void *data``h]j)}(hj=h]h void *data}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM#hj7ubj)}(hhh]jG)}(h3Pointer to data passed to **action** implementationh](hPointer to data passed to }(hjVhhhNhNubjv)}(h **action**h]haction}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubh implementation}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhjRhM#hjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhM#hjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM%hjubjG)}(hRemoves instance of **action** previously added by devm_add_action(). Both action and data should match one of the existing entries.h](hRemoves instance of }(hjhhhNhNubjv)}(h **action**h]haction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhf previously added by devm_add_action(). Both action and data should match one of the existing entries.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_alloc_percpu (C macro)c.devm_alloc_percpuhNtauh1hhhhhhNhNubh)}(hhh](h)}(hdevm_alloc_percpuh]h)}(hdevm_alloc_percpuh]j)}(hdevm_alloc_percpuh]j)}(hjh]hdevm_alloc_percpu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMMubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMMhjhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhjhhhjhMMubeh}(h]h ](j`macroeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhNhNubjG)}(h!``devm_alloc_percpu (dev, type)``h]j)}(hjh]hdevm_alloc_percpu (dev, type)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMOhhhhubj;)}(hResource-managed alloc_percpu h]jG)}(hResource-managed alloc_percpuh]hResource-managed alloc_percpu}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMChj-ubah}(h]h ]h"]h$]h&]uh1j:hj?hMChhhhubjl)}(hX2**Parameters** ``dev`` Device to allocate per-cpu memory for ``type`` Type to allocate per-cpu memory for **Description** Managed alloc_percpu. Per-cpu memory allocated with this function is automatically freed on driver detach. **Return** Pointer to allocated memory on success, NULL on failure.h](jG)}(h**Parameters**h]jv)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMGhjFubj)}(hhh](j)}(h.``dev`` Device to allocate per-cpu memory for h](j)}(h``dev``h]j)}(hjkh]hdev}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMDhjeubj)}(hhh]jG)}(h%Device to allocate per-cpu memory forh]h%Device to allocate per-cpu memory for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMDhjbubj)}(h-``type`` Type to allocate per-cpu memory for h](j)}(h``type``h]j)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMEhjubj)}(hhh]jG)}(h#Type to allocate per-cpu memory forh]h#Type to allocate per-cpu memory for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMEhjbubeh}(h]h ]h"]h$]h&]uh1jhjFubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMGhjFubjG)}(hjManaged alloc_percpu. Per-cpu memory allocated with this function is automatically freed on driver detach.h]hjManaged alloc_percpu. Per-cpu memory allocated with this function is automatically freed on driver detach.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMGhjFubjG)}(h **Return**h]jv)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMJhjFubjG)}(h8Pointer to allocated memory on success, NULL on failure.h]h8Pointer to allocated memory on success, NULL on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMJhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdl_dev_state (C enum)c.dl_dev_statehNtauh1hhhhhhNhNubh)}(hhh](h)}(h dl_dev_stateh]h)}(henum dl_dev_stateh](h)}(henumh]henum}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMOubh)}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjGhhhjYhMOubj)}(h dl_dev_stateh]j)}(hjEh]h dl_dev_state}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjGhhhjYhMOubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjChhhjYhMOubah}(h]j>ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjYhMOhj@hhubjB)}(hhh]jG)}(h,Device driver presence tracking information.h]h,Device driver presence tracking information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jAhj@hhhjYhMOubeh}(h]h ](j`enumeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhNhNubjl)}(hX**Constants** ``DL_DEV_NO_DRIVER`` There is no driver attached to the device. ``DL_DEV_PROBING`` A driver is probing. ``DL_DEV_DRIVER_BOUND`` The driver has been bound to the device. ``DL_DEV_UNBINDING`` The driver is unbinding from the device.h](jG)}(h **Constants**h]jv)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubj)}(hhh](j)}(h@``DL_DEV_NO_DRIVER`` There is no driver attached to the device. h](j)}(h``DL_DEV_NO_DRIVER``h]j)}(hjh]hDL_DEV_NO_DRIVER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubj)}(hhh]jG)}(h*There is no driver attached to the device.h]h*There is no driver attached to the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``DL_DEV_PROBING`` A driver is probing. h](j)}(h``DL_DEV_PROBING``h]j)}(hjh]hDL_DEV_PROBING}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubj)}(hhh]jG)}(hA driver is probing.h]hA driver is probing.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hA``DL_DEV_DRIVER_BOUND`` The driver has been bound to the device. h](j)}(h``DL_DEV_DRIVER_BOUND``h]j)}(hjAh]hDL_DEV_DRIVER_BOUND}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj;ubj)}(hhh]jG)}(h(The driver has been bound to the device.h]h(The driver has been bound to the device.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjubj)}(h=``DL_DEV_UNBINDING`` The driver is unbinding from the device.h](j)}(h``DL_DEV_UNBINDING``h]j)}(hjzh]hDL_DEV_UNBINDING}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjtubj)}(hhh]jG)}(h(The driver is unbinding from the device.h]h(The driver is unbinding from the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_removable (C enum)c.device_removablehNtauh1hhhhhhNhNubh)}(hhh](h)}(hdevice_removableh]h)}(henum device_removableh](h)}(hjMh]henum}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(hdevice_removableh]j)}(hjh]hdevice_removable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(hWhether the device is removable. The criteria for a device to be classified as removable is determined by its subsystem or bus.h]hWhether the device is removable. The criteria for a device to be classified as removable is determined by its subsystem or bus.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`enumeh"]h$]h&]jej`jfj.jgj.jhjijjuh1hhhhhhNhNubjl)}(hX**Constants** ``DEVICE_REMOVABLE_NOT_SUPPORTED`` This attribute is not supported for this device (default). ``DEVICE_REMOVABLE_UNKNOWN`` Device location is Unknown. ``DEVICE_FIXED`` Device is not removable by the user. ``DEVICE_REMOVABLE`` Device is removable by the user.h](jG)}(h **Constants**h]jv)}(hj8h]h Constants}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj2ubj)}(hhh](j)}(h^``DEVICE_REMOVABLE_NOT_SUPPORTED`` This attribute is not supported for this device (default). h](j)}(h"``DEVICE_REMOVABLE_NOT_SUPPORTED``h]j)}(hjWh]hDEVICE_REMOVABLE_NOT_SUPPORTED}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjQubj)}(hhh]jG)}(h:This attribute is not supported for this device (default).h]h:This attribute is not supported for this device (default).}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjNubj)}(h9``DEVICE_REMOVABLE_UNKNOWN`` Device location is Unknown. h](j)}(h``DEVICE_REMOVABLE_UNKNOWN``h]j)}(hjh]hDEVICE_REMOVABLE_UNKNOWN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubj)}(hhh]jG)}(hDevice location is Unknown.h]hDevice location is Unknown.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjNubj)}(h6``DEVICE_FIXED`` Device is not removable by the user. h](j)}(h``DEVICE_FIXED``h]j)}(hjh]h DEVICE_FIXED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubj)}(hhh]jG)}(h$Device is not removable by the user.h]h$Device is not removable by the user.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjNubj)}(h5``DEVICE_REMOVABLE`` Device is removable by the user.h](j)}(h``DEVICE_REMOVABLE``h]j)}(hjh]hDEVICE_REMOVABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubj)}(hhh]jG)}(h Device is removable by the user.h]h Device is removable by the user.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjNubeh}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdev_links_info (C struct)c.dev_links_infohNtauh1hhhhhhNhNubh)}(hhh](h)}(hdev_links_infoh]h)}(hstruct dev_links_infoh](h)}(hhh]hstruct}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMubh)}(h h]h }(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjYhhhjjhMubj)}(hdev_links_infoh]j)}(hjWh]hdev_links_info}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjYhhhjjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjUhhhjjhMubah}(h]jPah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjjhMhjRhhubjB)}(hhh]jG)}(h$Device data related to device links.h]h$Device data related to device links.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjRhhhjjhMubeh}(h]h ](j`structeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhNhNubjl)}(hX**Definition**:: struct dev_links_info { struct list_head suppliers; struct list_head consumers; struct list_head defer_sync; enum dl_dev_state status; }; **Members** ``suppliers`` List of links to supplier devices. ``consumers`` List of links to consumer devices. ``defer_sync`` Hook to global list of devices that have deferred sync_state. ``status`` Driver status information.h](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubj)}(hstruct dev_links_info { struct list_head suppliers; struct list_head consumers; struct list_head defer_sync; enum dl_dev_state status; };h]hstruct dev_links_info { struct list_head suppliers; struct list_head consumers; struct list_head defer_sync; enum dl_dev_state status; };}hjsbah}(h]h ]h"]h$]h&]j+j,uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubjG)}(h **Members**h]jv)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubj)}(hhh](j)}(h1``suppliers`` List of links to supplier devices. h](j)}(h ``suppliers``h]j)}(hj h]h suppliers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubj)}(hhh]jG)}(h"List of links to supplier devices.h]h"List of links to supplier devices.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjubj)}(h1``consumers`` List of links to consumer devices. h](j)}(h ``consumers``h]j)}(hjEh]h consumers}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj?ubj)}(hhh]jG)}(h"List of links to consumer devices.h]h"List of links to consumer devices.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjubj)}(hM``defer_sync`` Hook to global list of devices that have deferred sync_state. h](j)}(h``defer_sync``h]j)}(hj~h]h defer_sync}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjxubj)}(hhh]jG)}(h=Hook to global list of devices that have deferred sync_state.h]h=Hook to global list of devices that have deferred sync_state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h%``status`` Driver status information.h](j)}(h ``status``h]j)}(hjh]hstatus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubj)}(hhh]jG)}(hDriver status information.h]hDriver status information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdev_msi_info (C struct)c.dev_msi_infohNtauh1hhhhhhNhNubh)}(hhh](h)}(h dev_msi_infoh]h)}(hstruct dev_msi_infoh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj hhhjhMubj)}(h dev_msi_infoh]j)}(hj h]h dev_msi_info}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj hhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj hhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(hDevice data related to MSIh]hDevice data related to MSI}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjPhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`structeh"]h$]h&]jej`jfjkjgjkjhjijjuh1hhhhhhNhNubjl)}(hX**Definition**:: struct dev_msi_info { #ifdef CONFIG_GENERIC_MSI_IRQ; struct irq_domain *domain; struct msi_device_data *data; #endif; }; **Members** ``domain`` The MSI interrupt domain associated to the device ``data`` Pointer to MSI device datah](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubh:}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjoubj)}(hstruct dev_msi_info { #ifdef CONFIG_GENERIC_MSI_IRQ; struct irq_domain *domain; struct msi_device_data *data; #endif; };h]hstruct dev_msi_info { #ifdef CONFIG_GENERIC_MSI_IRQ; struct irq_domain *domain; struct msi_device_data *data; #endif; };}hjsbah}(h]h ]h"]h$]h&]j+j,uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjoubjG)}(h **Members**h]jv)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjoubj)}(hhh](j)}(h=``domain`` The MSI interrupt domain associated to the device h](j)}(h ``domain``h]j)}(hjh]hdomain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubj)}(hhh]jG)}(h1The MSI interrupt domain associated to the deviceh]h1The MSI interrupt domain associated to the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h#``data`` Pointer to MSI device datah](j)}(h``data``h]j)}(hjh]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjubj)}(hhh]jG)}(hPointer to MSI device datah]hPointer to MSI device data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubeh}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'device_physical_location_panel (C enum) c.device_physical_location_panelhNtauh1hhhhhhNhNubh)}(hhh](h)}(hdevice_physical_location_panelh]h)}(h#enum device_physical_location_panelh](h)}(hjMh]henum}(hjS hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjO hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMubh)}(h h]h }(hja hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjO hhhj` hMubj)}(hdevice_physical_location_panelh]j)}(hjM h]hdevice_physical_location_panel}(hjs hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjO hhhj` hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjK hhhj` hMubah}(h]jF ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj` hMhjH hhubjB)}(hhh]jG)}(h]Describes which panel surface of the system's housing the device connection point resides on.h]h_Describes which panel surface of the system’s housing the device connection point resides on.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jAhjH hhhj` hMubeh}(h]h ](j`enumeh"]h$]h&]jej`jfj jgj jhjijjuh1hhhhhhNhNubjl)}(hX **Constants** ``DEVICE_PANEL_TOP`` Device connection point is on the top panel. ``DEVICE_PANEL_BOTTOM`` Device connection point is on the bottom panel. ``DEVICE_PANEL_LEFT`` Device connection point is on the left panel. ``DEVICE_PANEL_RIGHT`` Device connection point is on the right panel. ``DEVICE_PANEL_FRONT`` Device connection point is on the front panel. ``DEVICE_PANEL_BACK`` Device connection point is on the back panel. ``DEVICE_PANEL_UNKNOWN`` The panel with device connection point is unknown.h](jG)}(h **Constants**h]jv)}(hj h]h Constants}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj ubj)}(hhh](j)}(hB``DEVICE_PANEL_TOP`` Device connection point is on the top panel. h](j)}(h``DEVICE_PANEL_TOP``h]j)}(hj h]hDEVICE_PANEL_TOP}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj ubj)}(hhh]jG)}(h,Device connection point is on the top panel.h]h,Device connection point is on the top panel.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(hH``DEVICE_PANEL_BOTTOM`` Device connection point is on the bottom panel. h](j)}(h``DEVICE_PANEL_BOTTOM``h]j)}(hj!h]hDEVICE_PANEL_BOTTOM}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj !ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj !ubj)}(hhh]jG)}(h/Device connection point is on the bottom panel.h]h/Device connection point is on the bottom panel.}(hj(!hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj$!hMhj%!ubah}(h]h ]h"]h$]h&]uh1jhj !ubeh}(h]h ]h"]h$]h&]uh1jhj$!hMhj ubj)}(hD``DEVICE_PANEL_LEFT`` Device connection point is on the left panel. h](j)}(h``DEVICE_PANEL_LEFT``h]j)}(hjH!h]hDEVICE_PANEL_LEFT}(hjJ!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF!ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjB!ubj)}(hhh]jG)}(h-Device connection point is on the left panel.h]h-Device connection point is on the left panel.}(hja!hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj]!hMhj^!ubah}(h]h ]h"]h$]h&]uh1jhjB!ubeh}(h]h ]h"]h$]h&]uh1jhj]!hMhj ubj)}(hF``DEVICE_PANEL_RIGHT`` Device connection point is on the right panel. h](j)}(h``DEVICE_PANEL_RIGHT``h]j)}(hj!h]hDEVICE_PANEL_RIGHT}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj{!ubj)}(hhh]jG)}(h.Device connection point is on the right panel.h]h.Device connection point is on the right panel.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jhj{!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhj ubj)}(hF``DEVICE_PANEL_FRONT`` Device connection point is on the front panel. h](j)}(h``DEVICE_PANEL_FRONT``h]j)}(hj!h]hDEVICE_PANEL_FRONT}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj!ubj)}(hhh]jG)}(h.Device connection point is on the front panel.h]h.Device connection point is on the front panel.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhj ubj)}(hD``DEVICE_PANEL_BACK`` Device connection point is on the back panel. h](j)}(h``DEVICE_PANEL_BACK``h]j)}(hj!h]hDEVICE_PANEL_BACK}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj!ubj)}(hhh]jG)}(h-Device connection point is on the back panel.h]h-Device connection point is on the back panel.}(hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj"hMhj "ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj ubj)}(hK``DEVICE_PANEL_UNKNOWN`` The panel with device connection point is unknown.h](j)}(h``DEVICE_PANEL_UNKNOWN``h]j)}(hj,"h]hDEVICE_PANEL_UNKNOWN}(hj."hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*"ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj&"ubj)}(hhh]jG)}(h2The panel with device connection point is unknown.h]h2The panel with device connection point is unknown.}(hjE"hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjB"ubah}(h]h ]h"]h$]h&]uh1jhj&"ubeh}(h]h ]h"]h$]h&]uh1jhjA"hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ3device_physical_location_vertical_position (C enum),c.device_physical_location_vertical_positionhNtauh1hhhhhhNhNubh)}(hhh](h)}(h*device_physical_location_vertical_positionh]h)}(h/enum device_physical_location_vertical_positionh](h)}(hjMh]henum}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMubh)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj"hhhj"hMubj)}(h*device_physical_location_vertical_positionh]j)}(hj"h]h*device_physical_location_vertical_position}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj"hhhj"hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj~"hhhj"hMubah}(h]jy"ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj"hMhj{"hhubjB)}(hhh]jG)}(hPDescribes vertical position of the device connection point on the panel surface.h]hPDescribes vertical position of the device connection point on the panel surface.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj"hhubah}(h]h ]h"]h$]h&]uh1jAhj{"hhhj"hMubeh}(h]h ](j`enumeh"]h$]h&]jej`jfj"jgj"jhjijjuh1hhhhhhNhNubjl)}(h**Constants** ``DEVICE_VERT_POS_UPPER`` Device connection point is at upper part of panel. ``DEVICE_VERT_POS_CENTER`` Device connection point is at center part of panel. ``DEVICE_VERT_POS_LOWER`` Device connection point is at lower part of panel.h](jG)}(h **Constants**h]jv)}(hj"h]h Constants}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj"ubj)}(hhh](j)}(hM``DEVICE_VERT_POS_UPPER`` Device connection point is at upper part of panel. h](j)}(h``DEVICE_VERT_POS_UPPER``h]j)}(hj #h]hDEVICE_VERT_POS_UPPER}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj#ubj)}(hhh]jG)}(h2Device connection point is at upper part of panel.h]h2Device connection point is at upper part of panel.}(hj"#hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj#ubj)}(hO``DEVICE_VERT_POS_CENTER`` Device connection point is at center part of panel. h](j)}(h``DEVICE_VERT_POS_CENTER``h]j)}(hjB#h]hDEVICE_VERT_POS_CENTER}(hjD#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@#ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj<#ubj)}(hhh]jG)}(h3Device connection point is at center part of panel.h]h3Device connection point is at center part of panel.}(hj[#hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjW#hMhjX#ubah}(h]h ]h"]h$]h&]uh1jhj<#ubeh}(h]h ]h"]h$]h&]uh1jhjW#hMhj#ubj)}(hL``DEVICE_VERT_POS_LOWER`` Device connection point is at lower part of panel.h](j)}(h``DEVICE_VERT_POS_LOWER``h]j)}(hj{#h]hDEVICE_VERT_POS_LOWER}(hj}#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy#ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhju#ubj)}(hhh]jG)}(h2Device connection point is at lower part of panel.h]h2Device connection point is at lower part of panel.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj#ubah}(h]h ]h"]h$]h&]uh1jhju#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj#ubeh}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ5device_physical_location_horizontal_position (C enum).c.device_physical_location_horizontal_positionhNtauh1hhhhhhNhNubh)}(hhh](h)}(h,device_physical_location_horizontal_positionh]h)}(h1enum device_physical_location_horizontal_positionh](h)}(hjMh]henum}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMubh)}(h h]h }(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#hhhj#hMubj)}(h,device_physical_location_horizontal_positionh]j)}(hj#h]h,device_physical_location_horizontal_position}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj#hhhj#hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj#hhhj#hMubah}(h]j#ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj#hMhj#hhubjB)}(hhh]jG)}(hRDescribes horizontal position of the device connection point on the panel surface.h]hRDescribes horizontal position of the device connection point on the panel surface.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj$hhubah}(h]h ]h"]h$]h&]uh1jAhj#hhhj#hMubeh}(h]h ](j`enumeh"]h$]h&]jej`jfj/$jgj/$jhjijjuh1hhhhhhNhNubjl)}(h**Constants** ``DEVICE_HORI_POS_LEFT`` Device connection point is at left part of panel. ``DEVICE_HORI_POS_CENTER`` Device connection point is at center part of panel. ``DEVICE_HORI_POS_RIGHT`` Device connection point is at right part of panel.h](jG)}(h **Constants**h]jv)}(hj9$h]h Constants}(hj;$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7$ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj3$ubj)}(hhh](j)}(hK``DEVICE_HORI_POS_LEFT`` Device connection point is at left part of panel. h](j)}(h``DEVICE_HORI_POS_LEFT``h]j)}(hjX$h]hDEVICE_HORI_POS_LEFT}(hjZ$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV$ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjR$ubj)}(hhh]jG)}(h1Device connection point is at left part of panel.h]h1Device connection point is at left part of panel.}(hjq$hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjm$hMhjn$ubah}(h]h ]h"]h$]h&]uh1jhjR$ubeh}(h]h ]h"]h$]h&]uh1jhjm$hMhjO$ubj)}(hO``DEVICE_HORI_POS_CENTER`` Device connection point is at center part of panel. h](j)}(h``DEVICE_HORI_POS_CENTER``h]j)}(hj$h]hDEVICE_HORI_POS_CENTER}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj$ubj)}(hhh]jG)}(h3Device connection point is at center part of panel.h]h3Device connection point is at center part of panel.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjO$ubj)}(hL``DEVICE_HORI_POS_RIGHT`` Device connection point is at right part of panel.h](j)}(h``DEVICE_HORI_POS_RIGHT``h]j)}(hj$h]hDEVICE_HORI_POS_RIGHT}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj$ubj)}(hhh]jG)}(h2Device connection point is at right part of panel.h]h2Device connection point is at right part of panel.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjO$ubeh}(h]h ]h"]h$]h&]uh1jhj3$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#device_physical_location (C struct)c.device_physical_locationhNtauh1hhhhhhNhNubh)}(hhh](h)}(hdevice_physical_locationh]h)}(hstruct device_physical_locationh](h)}(hhh]hstruct}(hj$%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj %hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMubh)}(h h]h }(hj2%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj %hhhj1%hMubj)}(hdevice_physical_locationh]j)}(hj%h]hdevice_physical_location}(hjD%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@%ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj %hhhj1%hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj%hhhj1%hMubah}(h]j%ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj1%hMhj%hhubjB)}(hhh]jG)}(hHDevice data related to physical location of the device connection point.h]hHDevice data related to physical location of the device connection point.}(hjf%hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjc%hhubah}(h]h ]h"]h$]h&]uh1jAhj%hhhj1%hMubeh}(h]h ](j`structeh"]h$]h&]jej`jfj~%jgj~%jhjijjuh1hhhhhhNhNubjl)}(hX **Definition**:: struct device_physical_location { enum device_physical_location_panel panel; enum device_physical_location_vertical_position vertical_position; enum device_physical_location_horizontal_position horizontal_position; bool dock; bool lid; }; **Members** ``panel`` Panel surface of the system's housing that the device connection point resides on. ``vertical_position`` Vertical position of the device connection point within the panel. ``horizontal_position`` Horizontal position of the device connection point within the panel. ``dock`` Set if the device connection point resides in a docking station or port replicator. ``lid`` Set if this device connection point resides on the lid of laptop system.h](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh:}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj%ubj)}(hXstruct device_physical_location { enum device_physical_location_panel panel; enum device_physical_location_vertical_position vertical_position; enum device_physical_location_horizontal_position horizontal_position; bool dock; bool lid; };h]hXstruct device_physical_location { enum device_physical_location_panel panel; enum device_physical_location_vertical_position vertical_position; enum device_physical_location_horizontal_position horizontal_position; bool dock; bool lid; };}hj%sbah}(h]h ]h"]h$]h&]j+j,uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj%ubjG)}(h **Members**h]jv)}(hj%h]hMembers}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj%ubj)}(hhh](j)}(h]``panel`` Panel surface of the system's housing that the device connection point resides on. h](j)}(h ``panel``h]j)}(hj%h]hpanel}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj%ubj)}(hhh]jG)}(hRPanel surface of the system's housing that the device connection point resides on.h]hTPanel surface of the system’s housing that the device connection point resides on.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj%ubj)}(hY``vertical_position`` Vertical position of the device connection point within the panel. h](j)}(h``vertical_position``h]j)}(hj &h]hvertical_position}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj &ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj&ubj)}(hhh]jG)}(hBVertical position of the device connection point within the panel.h]hBVertical position of the device connection point within the panel.}(hj&&hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj#&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj"&hMhj%ubj)}(h]``horizontal_position`` Horizontal position of the device connection point within the panel. h](j)}(h``horizontal_position``h]j)}(hjG&h]hhorizontal_position}(hjI&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE&ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjA&ubj)}(hhh]jG)}(hDHorizontal position of the device connection point within the panel.h]hDHorizontal position of the device connection point within the panel.}(hj`&hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj]&ubah}(h]h ]h"]h$]h&]uh1jhjA&ubeh}(h]h ]h"]h$]h&]uh1jhj\&hMhj%ubj)}(h]``dock`` Set if the device connection point resides in a docking station or port replicator. h](j)}(h``dock``h]j)}(hj&h]hdock}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj{&ubj)}(hhh]jG)}(hSSet if the device connection point resides in a docking station or port replicator.h]hSSet if the device connection point resides in a docking station or port replicator.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj&ubah}(h]h ]h"]h$]h&]uh1jhj{&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj%ubj)}(hP``lid`` Set if this device connection point resides on the lid of laptop system.h](j)}(h``lid``h]j)}(hj&h]hlid}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj&ubj)}(hhh]jG)}(hHSet if this device connection point resides on the lid of laptop system.h]hHSet if this device connection point resides on the lid of laptop system.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice (C struct)c.devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(hdeviceh]h)}(h struct deviceh](h)}(hhh]hstruct}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMubh)}(h h]h }(hj"'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'hhhj!'hMubj)}(hdeviceh]j)}(hj'h]hdevice}(hj4'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0'ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj'hhhj!'hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj 'hhhj!'hMubah}(h]j'ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj!'hMhj 'hhubjB)}(hhh]jG)}(hThe basic device structureh]hThe basic device structure}(hjV'hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjS'hhubah}(h]h ]h"]h$]h&]uh1jAhj 'hhhj!'hMubeh}(h]h ](j`structeh"]h$]h&]jej`jfjn'jgjn'jhjijjuh1hhhhhhNhNubjl)}(hX**Definition**:: struct device { struct kobject kobj; struct device *parent; struct device_private *p; const char *init_name; const struct device_type *type; const struct bus_type *bus; struct device_driver *driver; void *platform_data; void *driver_data; struct mutex mutex; struct dev_links_info links; struct dev_pm_info power; struct dev_pm_domain *pm_domain; #ifdef CONFIG_ENERGY_MODEL; struct em_perf_domain *em_pd; #endif; #ifdef CONFIG_PINCTRL; struct dev_pin_info *pins; #endif; struct dev_msi_info msi; #ifdef CONFIG_ARCH_HAS_DMA_OPS; const struct dma_map_ops *dma_ops; #endif; u64 *dma_mask; u64 coherent_dma_mask; u64 bus_dma_limit; const struct bus_dma_region *dma_range_map; struct device_dma_parameters *dma_parms; struct list_head dma_pools; #ifdef CONFIG_DMA_DECLARE_COHERENT; struct dma_coherent_mem *dma_mem; #endif; #ifdef CONFIG_DMA_CMA; struct cma *cma_area; #endif; #ifdef CONFIG_SWIOTLB; struct io_tlb_mem *dma_io_tlb_mem; #endif; #ifdef CONFIG_SWIOTLB_DYNAMIC; struct list_head dma_io_tlb_pools; spinlock_t dma_io_tlb_lock; bool dma_uses_io_tlb; #endif; struct dev_archdata archdata; struct device_node *of_node; struct fwnode_handle *fwnode; #ifdef CONFIG_NUMA; int numa_node; #endif; dev_t devt; u32 id; spinlock_t devres_lock; struct list_head devres_head; const struct class *class; const struct attribute_group **groups; void (*release)(struct device *dev); struct iommu_group *iommu_group; struct dev_iommu *iommu; struct device_physical_location *physical_location; enum device_removable removable; bool offline_disabled:1; bool offline:1; bool of_node_reused:1; bool state_synced:1; bool can_match:1; #if defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE) || defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU) || defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL); bool dma_coherent:1; #endif; #ifdef CONFIG_DMA_OPS_BYPASS; bool dma_ops_bypass : 1; #endif; #ifdef CONFIG_DMA_NEED_SYNC; bool dma_skip_sync:1; #endif; #ifdef CONFIG_IOMMU_DMA; bool dma_iommu:1; #endif; }; **Members** ``kobj`` A top-level, abstract class from which other classes are derived. ``parent`` The device's "parent" device, the device to which it is attached. In most cases, a parent device is some sort of bus or host controller. If parent is NULL, the device, is a top-level device, which is not usually what you want. ``p`` Holds the private data of the driver core portions of the device. See the comment of the struct device_private for detail. ``init_name`` Initial name of the device. ``type`` The type of device. This identifies the device type and carries type-specific information. ``bus`` Type of bus device is on. ``driver`` Which driver has allocated this ``platform_data`` Platform data specific to the device. ``driver_data`` Private pointer for driver specific info. ``mutex`` Mutex to synchronize calls to its driver. ``links`` Links to suppliers and consumers of this device. ``power`` For device power management. See Documentation/driver-api/pm/devices.rst for details. ``pm_domain`` Provide callbacks that are executed during system suspend, hibernation, system resume and during runtime PM transitions along with subsystem-level and driver-level callbacks. ``em_pd`` device's energy model performance domain ``pins`` For device pin management. See Documentation/driver-api/pin-control.rst for details. ``msi`` MSI related data ``dma_ops`` DMA mapping operations for this device. ``dma_mask`` Dma mask (if dma'ble device). ``coherent_dma_mask`` Like dma_mask, but for alloc_coherent mapping as not all hardware supports 64-bit addresses for consistent allocations such descriptors. ``bus_dma_limit`` Limit of an upstream bridge or bus which imposes a smaller DMA limit than the device itself supports. ``dma_range_map`` map for DMA memory ranges relative to that of RAM ``dma_parms`` A low level driver may set these to teach IOMMU code about segment limitations. ``dma_pools`` Dma pools (if dma'ble device). ``dma_mem`` Internal for coherent mem override. ``cma_area`` Contiguous memory area for dma allocations ``dma_io_tlb_mem`` Software IO TLB allocator. Not for driver use. ``dma_io_tlb_pools`` List of transient swiotlb memory pools. ``dma_io_tlb_lock`` Protects changes to the list of active pools. ``dma_uses_io_tlb`` ``true`` if device has used the software IO TLB. ``archdata`` For arch-specific additions. ``of_node`` Associated device tree node. ``fwnode`` Associated device node supplied by platform firmware. ``numa_node`` NUMA node this device is close to. ``devt`` For creating the sysfs "dev". ``id`` device instance ``devres_lock`` Spinlock to protect the resource of the device. ``devres_head`` The resources list of the device. ``class`` The class of the device. ``groups`` Optional attribute groups. ``release`` Callback to free the device after all references have gone away. This should be set by the allocator of the device (i.e. the bus driver that discovered the device). ``iommu_group`` IOMMU group the device belongs to. ``iommu`` Per device generic IOMMU runtime data ``physical_location`` Describes physical location of the device connection point in the system housing. ``removable`` Whether the device can be removed from the system. This should be set by the subsystem / bus driver that discovered the device. ``offline_disabled`` If set, the device is permanently online. ``offline`` Set after successful invocation of bus type's .offline(). ``of_node_reused`` Set if the device-tree node is shared with an ancestor device. ``state_synced`` The hardware state of this device has been synced to match the software state of this device by calling the driver/bus sync_state() callback. ``can_match`` The device has matched with a driver at least once or it is in a bus (like AMBA) which can't check for matching drivers until other devices probe successfully. ``dma_coherent`` this particular device is dma coherent, even if the architecture supports non-coherent devices. ``dma_ops_bypass`` If set to ``true`` then the dma_ops are bypassed for the streaming DMA operations (->map_* / ->unmap_* / ->sync_*), and optionall (if the coherent mask is large enough) also for dma allocations. This flag is managed by the dma ops instance from ->dma_supported. ``dma_skip_sync`` DMA sync operations can be skipped for coherent buffers. ``dma_iommu`` Device is using default IOMMU implementation for DMA and doesn't rely on dma_ops structure.Ch](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hjz'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjv'ubh:}(hjv'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM hjr'ubj)}(hXstruct device { struct kobject kobj; struct device *parent; struct device_private *p; const char *init_name; const struct device_type *type; const struct bus_type *bus; struct device_driver *driver; void *platform_data; void *driver_data; struct mutex mutex; struct dev_links_info links; struct dev_pm_info power; struct dev_pm_domain *pm_domain; #ifdef CONFIG_ENERGY_MODEL; struct em_perf_domain *em_pd; #endif; #ifdef CONFIG_PINCTRL; struct dev_pin_info *pins; #endif; struct dev_msi_info msi; #ifdef CONFIG_ARCH_HAS_DMA_OPS; const struct dma_map_ops *dma_ops; #endif; u64 *dma_mask; u64 coherent_dma_mask; u64 bus_dma_limit; const struct bus_dma_region *dma_range_map; struct device_dma_parameters *dma_parms; struct list_head dma_pools; #ifdef CONFIG_DMA_DECLARE_COHERENT; struct dma_coherent_mem *dma_mem; #endif; #ifdef CONFIG_DMA_CMA; struct cma *cma_area; #endif; #ifdef CONFIG_SWIOTLB; struct io_tlb_mem *dma_io_tlb_mem; #endif; #ifdef CONFIG_SWIOTLB_DYNAMIC; struct list_head dma_io_tlb_pools; spinlock_t dma_io_tlb_lock; bool dma_uses_io_tlb; #endif; struct dev_archdata archdata; struct device_node *of_node; struct fwnode_handle *fwnode; #ifdef CONFIG_NUMA; int numa_node; #endif; dev_t devt; u32 id; spinlock_t devres_lock; struct list_head devres_head; const struct class *class; const struct attribute_group **groups; void (*release)(struct device *dev); struct iommu_group *iommu_group; struct dev_iommu *iommu; struct device_physical_location *physical_location; enum device_removable removable; bool offline_disabled:1; bool offline:1; bool of_node_reused:1; bool state_synced:1; bool can_match:1; #if defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE) || defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU) || defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL); bool dma_coherent:1; #endif; #ifdef CONFIG_DMA_OPS_BYPASS; bool dma_ops_bypass : 1; #endif; #ifdef CONFIG_DMA_NEED_SYNC; bool dma_skip_sync:1; #endif; #ifdef CONFIG_IOMMU_DMA; bool dma_iommu:1; #endif; };h]hXstruct device { struct kobject kobj; struct device *parent; struct device_private *p; const char *init_name; const struct device_type *type; const struct bus_type *bus; struct device_driver *driver; void *platform_data; void *driver_data; struct mutex mutex; struct dev_links_info links; struct dev_pm_info power; struct dev_pm_domain *pm_domain; #ifdef CONFIG_ENERGY_MODEL; struct em_perf_domain *em_pd; #endif; #ifdef CONFIG_PINCTRL; struct dev_pin_info *pins; #endif; struct dev_msi_info msi; #ifdef CONFIG_ARCH_HAS_DMA_OPS; const struct dma_map_ops *dma_ops; #endif; u64 *dma_mask; u64 coherent_dma_mask; u64 bus_dma_limit; const struct bus_dma_region *dma_range_map; struct device_dma_parameters *dma_parms; struct list_head dma_pools; #ifdef CONFIG_DMA_DECLARE_COHERENT; struct dma_coherent_mem *dma_mem; #endif; #ifdef CONFIG_DMA_CMA; struct cma *cma_area; #endif; #ifdef CONFIG_SWIOTLB; struct io_tlb_mem *dma_io_tlb_mem; #endif; #ifdef CONFIG_SWIOTLB_DYNAMIC; struct list_head dma_io_tlb_pools; spinlock_t dma_io_tlb_lock; bool dma_uses_io_tlb; #endif; struct dev_archdata archdata; struct device_node *of_node; struct fwnode_handle *fwnode; #ifdef CONFIG_NUMA; int numa_node; #endif; dev_t devt; u32 id; spinlock_t devres_lock; struct list_head devres_head; const struct class *class; const struct attribute_group **groups; void (*release)(struct device *dev); struct iommu_group *iommu_group; struct dev_iommu *iommu; struct device_physical_location *physical_location; enum device_removable removable; bool offline_disabled:1; bool offline:1; bool of_node_reused:1; bool state_synced:1; bool can_match:1; #if defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE) || defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU) || defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL); bool dma_coherent:1; #endif; #ifdef CONFIG_DMA_OPS_BYPASS; bool dma_ops_bypass : 1; #endif; #ifdef CONFIG_DMA_NEED_SYNC; bool dma_skip_sync:1; #endif; #ifdef CONFIG_IOMMU_DMA; bool dma_iommu:1; #endif; };}hj'sbah}(h]h ]h"]h$]h&]j+j,uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM hjr'ubjG)}(h **Members**h]jv)}(hj'h]hMembers}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM]hjr'ubj)}(hhh](j)}(hK``kobj`` A top-level, abstract class from which other classes are derived. h](j)}(h``kobj``h]j)}(hj'h]hkobj}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj'ubj)}(hhh]jG)}(hAA top-level, abstract class from which other classes are derived.h]hAA top-level, abstract class from which other classes are derived.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj'ubj)}(h``parent`` The device's "parent" device, the device to which it is attached. In most cases, a parent device is some sort of bus or host controller. If parent is NULL, the device, is a top-level device, which is not usually what you want. h](j)}(h ``parent``h]j)}(hj'h]hparent}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM hj'ubj)}(hhh]jG)}(hThe device's "parent" device, the device to which it is attached. In most cases, a parent device is some sort of bus or host controller. If parent is NULL, the device, is a top-level device, which is not usually what you want.h]hThe device’s “parent” device, the device to which it is attached. In most cases, a parent device is some sort of bus or host controller. If parent is NULL, the device, is a top-level device, which is not usually what you want.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM hj(ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj(hM hj'ubj)}(h``p`` Holds the private data of the driver core portions of the device. See the comment of the struct device_private for detail. h](j)}(h``p``h]j)}(hj6(h]hp}(hj8(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4(ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj0(ubj)}(hhh]jG)}(hzHolds the private data of the driver core portions of the device. See the comment of the struct device_private for detail.h]hzHolds the private data of the driver core portions of the device. See the comment of the struct device_private for detail.}(hjO(hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM hjL(ubah}(h]h ]h"]h$]h&]uh1jhj0(ubeh}(h]h ]h"]h$]h&]uh1jhjK(hMhj'ubj)}(h*``init_name`` Initial name of the device. h](j)}(h ``init_name``h]j)}(hjp(h]h init_name}(hjr(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn(ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjj(ubj)}(hhh]jG)}(hInitial name of the device.h]hInitial name of the device.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhjj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj'ubj)}(hd``type`` The type of device. This identifies the device type and carries type-specific information. h](j)}(h``type``h]j)}(hj(h]htype}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj(ubj)}(hhh]jG)}(hZThe type of device. This identifies the device type and carries type-specific information.h]hZThe type of device. This identifies the device type and carries type-specific information.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj'ubj)}(h"``bus`` Type of bus device is on. h](j)}(h``bus``h]j)}(hj(h]hbus}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj(ubj)}(hhh]jG)}(hType of bus device is on.h]hType of bus device is on.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj'ubj)}(h+``driver`` Which driver has allocated this h](j)}(h ``driver``h]j)}(hj)h]hdriver}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj)ubj)}(hhh]jG)}(hWhich driver has allocated thish]hWhich driver has allocated this}(hj5)hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj1)hMhj2)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj1)hMhj'ubj)}(h8``platform_data`` Platform data specific to the device. h](j)}(h``platform_data``h]j)}(hjU)h]h platform_data}(hjW)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS)ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjO)ubj)}(hhh]jG)}(h%Platform data specific to the device.h]h%Platform data specific to the device.}(hjn)hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjj)hMhjk)ubah}(h]h ]h"]h$]h&]uh1jhjO)ubeh}(h]h ]h"]h$]h&]uh1jhjj)hMhj'ubj)}(h:``driver_data`` Private pointer for driver specific info. h](j)}(h``driver_data``h]j)}(hj)h]h driver_data}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj)ubj)}(hhh]jG)}(h)Private pointer for driver specific info.h]h)Private pointer for driver specific info.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj'ubj)}(h4``mutex`` Mutex to synchronize calls to its driver. h](j)}(h ``mutex``h]j)}(hj)h]hmutex}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj)ubj)}(hhh]jG)}(h)Mutex to synchronize calls to its driver.h]h)Mutex to synchronize calls to its driver.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj'ubj)}(h;``links`` Links to suppliers and consumers of this device. h](j)}(h ``links``h]j)}(hj*h]hlinks}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM hj)ubj)}(hhh]jG)}(h0Links to suppliers and consumers of this device.h]h0Links to suppliers and consumers of this device.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj*hM hj*ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj*hM hj'ubj)}(h```power`` For device power management. See Documentation/driver-api/pm/devices.rst for details. h](j)}(h ``power``h]j)}(hj9*h]hpower}(hj;*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7*ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM"hj3*ubj)}(hhh]jG)}(hUFor device power management. See Documentation/driver-api/pm/devices.rst for details.h]hUFor device power management. See Documentation/driver-api/pm/devices.rst for details.}(hjR*hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM!hjO*ubah}(h]h ]h"]h$]h&]uh1jhj3*ubeh}(h]h ]h"]h$]h&]uh1jhjN*hM"hj'ubj)}(h``pm_domain`` Provide callbacks that are executed during system suspend, hibernation, system resume and during runtime PM transitions along with subsystem-level and driver-level callbacks. h](j)}(h ``pm_domain``h]j)}(hjs*h]h pm_domain}(hju*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq*ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM%hjm*ubj)}(hhh]jG)}(hProvide callbacks that are executed during system suspend, hibernation, system resume and during runtime PM transitions along with subsystem-level and driver-level callbacks.h]hProvide callbacks that are executed during system suspend, hibernation, system resume and during runtime PM transitions along with subsystem-level and driver-level callbacks.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM#hj*ubah}(h]h ]h"]h$]h&]uh1jhjm*ubeh}(h]h ]h"]h$]h&]uh1jhj*hM%hj'ubj)}(h3``em_pd`` device's energy model performance domain h](j)}(h ``em_pd``h]j)}(hj*h]hem_pd}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM&hj*ubj)}(hhh]jG)}(h(device's energy model performance domainh]h*device’s energy model performance domain}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj*hM&hj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hM&hj'ubj)}(h^``pins`` For device pin management. See Documentation/driver-api/pin-control.rst for details. h](j)}(h``pins``h]j)}(hj*h]hpins}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM(hj*ubj)}(hhh]jG)}(hTFor device pin management. See Documentation/driver-api/pin-control.rst for details.h]hTFor device pin management. See Documentation/driver-api/pin-control.rst for details.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM'hj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hM(hj'ubj)}(h``msi`` MSI related data h](j)}(h``msi``h]j)}(hj +h]hmsi}(hj"+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM)hj+ubj)}(hhh]jG)}(hMSI related datah]hMSI related data}(hj9+hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj5+hM)hj6+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj5+hM)hj'ubj)}(h4``dma_ops`` DMA mapping operations for this device. h](j)}(h ``dma_ops``h]j)}(hjY+h]hdma_ops}(hj[+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW+ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM+hjS+ubj)}(hhh]jG)}(h'DMA mapping operations for this device.h]h'DMA mapping operations for this device.}(hjr+hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjn+hM+hjo+ubah}(h]h ]h"]h$]h&]uh1jhjS+ubeh}(h]h ]h"]h$]h&]uh1jhjn+hM+hj'ubj)}(h+``dma_mask`` Dma mask (if dma'ble device). h](j)}(h ``dma_mask``h]j)}(hj+h]hdma_mask}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM,hj+ubj)}(hhh]jG)}(hDma mask (if dma'ble device).h]hDma mask (if dma’ble device).}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj+hM,hj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hM,hj'ubj)}(h``coherent_dma_mask`` Like dma_mask, but for alloc_coherent mapping as not all hardware supports 64-bit addresses for consistent allocations such descriptors. h](j)}(h``coherent_dma_mask``h]j)}(hj+h]hcoherent_dma_mask}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM/hj+ubj)}(hhh]jG)}(hLike dma_mask, but for alloc_coherent mapping as not all hardware supports 64-bit addresses for consistent allocations such descriptors.h]hLike dma_mask, but for alloc_coherent mapping as not all hardware supports 64-bit addresses for consistent allocations such descriptors.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM-hj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hM/hj'ubj)}(hx``bus_dma_limit`` Limit of an upstream bridge or bus which imposes a smaller DMA limit than the device itself supports. h](j)}(h``bus_dma_limit``h]j)}(hj,h]h bus_dma_limit}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM1hj+ubj)}(hhh]jG)}(heLimit of an upstream bridge or bus which imposes a smaller DMA limit than the device itself supports.h]heLimit of an upstream bridge or bus which imposes a smaller DMA limit than the device itself supports.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM0hj,ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj,hM1hj'ubj)}(hD``dma_range_map`` map for DMA memory ranges relative to that of RAM h](j)}(h``dma_range_map``h]j)}(hj?,h]h dma_range_map}(hjA,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=,ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM2hj9,ubj)}(hhh]jG)}(h1map for DMA memory ranges relative to that of RAMh]h1map for DMA memory ranges relative to that of RAM}(hjX,hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjT,hM2hjU,ubah}(h]h ]h"]h$]h&]uh1jhj9,ubeh}(h]h ]h"]h$]h&]uh1jhjT,hM2hj'ubj)}(h^``dma_parms`` A low level driver may set these to teach IOMMU code about segment limitations. h](j)}(h ``dma_parms``h]j)}(hjx,h]h dma_parms}(hjz,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv,ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM4hjr,ubj)}(hhh]jG)}(hOA low level driver may set these to teach IOMMU code about segment limitations.h]hOA low level driver may set these to teach IOMMU code about segment limitations.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM3hj,ubah}(h]h ]h"]h$]h&]uh1jhjr,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM4hj'ubj)}(h-``dma_pools`` Dma pools (if dma'ble device). h](j)}(h ``dma_pools``h]j)}(hj,h]h dma_pools}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM5hj,ubj)}(hhh]jG)}(hDma pools (if dma'ble device).h]h Dma pools (if dma’ble device).}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj,hM5hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM5hj'ubj)}(h0``dma_mem`` Internal for coherent mem override. h](j)}(h ``dma_mem``h]j)}(hj,h]hdma_mem}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM6hj,ubj)}(hhh]jG)}(h#Internal for coherent mem override.h]h#Internal for coherent mem override.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj-hM6hj-ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj-hM6hj'ubj)}(h8``cma_area`` Contiguous memory area for dma allocations h](j)}(h ``cma_area``h]j)}(hj$-h]hcma_area}(hj&-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"-ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM7hj-ubj)}(hhh]jG)}(h*Contiguous memory area for dma allocationsh]h*Contiguous memory area for dma allocations}(hj=-hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj9-hM7hj:-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj9-hM7hj'ubj)}(hC``dma_io_tlb_mem`` Software IO TLB allocator. Not for driver use. h](j)}(h``dma_io_tlb_mem``h]j)}(hj]-h]hdma_io_tlb_mem}(hj_-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[-ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM8hjW-ubj)}(hhh]jG)}(h/Software IO TLB allocator. Not for driver use.h]h/Software IO TLB allocator. Not for driver use.}(hjv-hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjr-hM8hjs-ubah}(h]h ]h"]h$]h&]uh1jhjW-ubeh}(h]h ]h"]h$]h&]uh1jhjr-hM8hj'ubj)}(h=``dma_io_tlb_pools`` List of transient swiotlb memory pools. h](j)}(h``dma_io_tlb_pools``h]j)}(hj-h]hdma_io_tlb_pools}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM9hj-ubj)}(hhh]jG)}(h'List of transient swiotlb memory pools.h]h'List of transient swiotlb memory pools.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj-hM9hj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hM9hj'ubj)}(hB``dma_io_tlb_lock`` Protects changes to the list of active pools. h](j)}(h``dma_io_tlb_lock``h]j)}(hj-h]hdma_io_tlb_lock}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM:hj-ubj)}(hhh]jG)}(h-Protects changes to the list of active pools.h]h-Protects changes to the list of active pools.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj-hM:hj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hM:hj'ubj)}(hE``dma_uses_io_tlb`` ``true`` if device has used the software IO TLB. h](j)}(h``dma_uses_io_tlb``h]j)}(hj.h]hdma_uses_io_tlb}(hj .hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM;hj.ubj)}(hhh]jG)}(h0``true`` if device has used the software IO TLB.h](j)}(h``true``h]htrue}(hj%.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!.ubh( if device has used the software IO TLB.}(hj!.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhj.hM;hj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hM;hj'ubj)}(h*``archdata`` For arch-specific additions. h](j)}(h ``archdata``h]j)}(hjO.h]harchdata}(hjQ.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM.ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM<hjI.ubj)}(hhh]jG)}(hFor arch-specific additions.h]hFor arch-specific additions.}(hjh.hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjd.hM<hje.ubah}(h]h ]h"]h$]h&]uh1jhjI.ubeh}(h]h ]h"]h$]h&]uh1jhjd.hM<hj'ubj)}(h)``of_node`` Associated device tree node. h](j)}(h ``of_node``h]j)}(hj.h]hof_node}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM=hj.ubj)}(hhh]jG)}(hAssociated device tree node.h]hAssociated device tree node.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj.hM=hj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hM=hj'ubj)}(hA``fwnode`` Associated device node supplied by platform firmware. h](j)}(h ``fwnode``h]j)}(hj.h]hfwnode}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM>hj.ubj)}(hhh]jG)}(h5Associated device node supplied by platform firmware.h]h5Associated device node supplied by platform firmware.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj.hM>hj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hM>hj'ubj)}(h1``numa_node`` NUMA node this device is close to. h](j)}(h ``numa_node``h]j)}(hj.h]h numa_node}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM*hj.ubj)}(hhh]jG)}(h"NUMA node this device is close to.h]h"NUMA node this device is close to.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/hM*hj/ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj/hM*hj'ubj)}(h'``devt`` For creating the sysfs "dev". h](j)}(h``devt``h]j)}(hj3/h]hdevt}(hj5/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1/ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM?hj-/ubj)}(hhh]jG)}(hFor creating the sysfs "dev".h]h!For creating the sysfs “dev”.}(hjL/hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjH/hM?hjI/ubah}(h]h ]h"]h$]h&]uh1jhj-/ubeh}(h]h ]h"]h$]h&]uh1jhjH/hM?hj'ubj)}(h``id`` device instance h](j)}(h``id``h]j)}(hjl/h]hid}(hjn/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj/ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM@hjf/ubj)}(hhh]jG)}(hdevice instanceh]hdevice instance}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/hM@hj/ubah}(h]h ]h"]h$]h&]uh1jhjf/ubeh}(h]h ]h"]h$]h&]uh1jhj/hM@hj'ubj)}(h@``devres_lock`` Spinlock to protect the resource of the device. h](j)}(h``devres_lock``h]j)}(hj/h]h devres_lock}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMAhj/ubj)}(hhh]jG)}(h/Spinlock to protect the resource of the device.h]h/Spinlock to protect the resource of the device.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/hMAhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMAhj'ubj)}(h2``devres_head`` The resources list of the device. h](j)}(h``devres_head``h]j)}(hj/h]h devres_head}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMBhj/ubj)}(hhh]jG)}(h!The resources list of the device.h]h!The resources list of the device.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/hMBhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMBhj'ubj)}(h#``class`` The class of the device. h](j)}(h ``class``h]j)}(hj0h]hclass}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMChj0ubj)}(hhh]jG)}(hThe class of the device.h]hThe class of the device.}(hj00hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj,0hMChj-0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj,0hMChj'ubj)}(h&``groups`` Optional attribute groups. h](j)}(h ``groups``h]j)}(hjP0h]hgroups}(hjR0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN0ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMDhjJ0ubj)}(hhh]jG)}(hOptional attribute groups.h]hOptional attribute groups.}(hji0hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhje0hMDhjf0ubah}(h]h ]h"]h$]h&]uh1jhjJ0ubeh}(h]h ]h"]h$]h&]uh1jhje0hMDhj'ubj)}(h``release`` Callback to free the device after all references have gone away. This should be set by the allocator of the device (i.e. the bus driver that discovered the device). h](j)}(h ``release``h]j)}(hj0h]hrelease}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMGhj0ubj)}(hhh]jG)}(hCallback to free the device after all references have gone away. This should be set by the allocator of the device (i.e. the bus driver that discovered the device).h]hCallback to free the device after all references have gone away. This should be set by the allocator of the device (i.e. the bus driver that discovered the device).}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMEhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMGhj'ubj)}(h3``iommu_group`` IOMMU group the device belongs to. h](j)}(h``iommu_group``h]j)}(hj0h]h iommu_group}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMHhj0ubj)}(hhh]jG)}(h"IOMMU group the device belongs to.h]h"IOMMU group the device belongs to.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj0hMHhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMHhj'ubj)}(h0``iommu`` Per device generic IOMMU runtime data h](j)}(h ``iommu``h]j)}(hj0h]hiommu}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMIhj0ubj)}(hhh]jG)}(h%Per device generic IOMMU runtime datah]h%Per device generic IOMMU runtime data}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj1hMIhj1ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj1hMIhj'ubj)}(hh``physical_location`` Describes physical location of the device connection point in the system housing. h](j)}(h``physical_location``h]j)}(hj51h]hphysical_location}(hj71hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj31ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMKhj/1ubj)}(hhh]jG)}(hQDescribes physical location of the device connection point in the system housing.h]hQDescribes physical location of the device connection point in the system housing.}(hjN1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMJhjK1ubah}(h]h ]h"]h$]h&]uh1jhj/1ubeh}(h]h ]h"]h$]h&]uh1jhjJ1hMKhj'ubj)}(h``removable`` Whether the device can be removed from the system. This should be set by the subsystem / bus driver that discovered the device. h](j)}(h ``removable``h]j)}(hjo1h]h removable}(hjq1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm1ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMNhji1ubj)}(hhh]jG)}(hWhether the device can be removed from the system. This should be set by the subsystem / bus driver that discovered the device.h]hWhether the device can be removed from the system. This should be set by the subsystem / bus driver that discovered the device.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMLhj1ubah}(h]h ]h"]h$]h&]uh1jhji1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMNhj'ubj)}(h?``offline_disabled`` If set, the device is permanently online. h](j)}(h``offline_disabled``h]j)}(hj1h]hoffline_disabled}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMPhj1ubj)}(hhh]jG)}(h)If set, the device is permanently online.h]h)If set, the device is permanently online.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj1hMPhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMPhj'ubj)}(hF``offline`` Set after successful invocation of bus type's .offline(). h](j)}(h ``offline``h]j)}(hj1h]hoffline}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMQhj1ubj)}(hhh]jG)}(h9Set after successful invocation of bus type's .offline().h]h;Set after successful invocation of bus type’s .offline().}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj1hMQhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMQhj'ubj)}(hR``of_node_reused`` Set if the device-tree node is shared with an ancestor device. h](j)}(h``of_node_reused``h]j)}(hj2h]hof_node_reused}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMShj2ubj)}(hhh]jG)}(h>Set if the device-tree node is shared with an ancestor device.h]h>Set if the device-tree node is shared with an ancestor device.}(hj42hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMRhj12ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj02hMShj'ubj)}(h``state_synced`` The hardware state of this device has been synced to match the software state of this device by calling the driver/bus sync_state() callback. h](j)}(h``state_synced``h]j)}(hjU2h]h state_synced}(hjW2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS2ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMVhjO2ubj)}(hhh]jG)}(hThe hardware state of this device has been synced to match the software state of this device by calling the driver/bus sync_state() callback.h]hThe hardware state of this device has been synced to match the software state of this device by calling the driver/bus sync_state() callback.}(hjn2hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMThjk2ubah}(h]h ]h"]h$]h&]uh1jhjO2ubeh}(h]h ]h"]h$]h&]uh1jhjj2hMVhj'ubj)}(h``can_match`` The device has matched with a driver at least once or it is in a bus (like AMBA) which can't check for matching drivers until other devices probe successfully. h](j)}(h ``can_match``h]j)}(hj2h]h can_match}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMYhj2ubj)}(hhh]jG)}(hThe device has matched with a driver at least once or it is in a bus (like AMBA) which can't check for matching drivers until other devices probe successfully.h]hThe device has matched with a driver at least once or it is in a bus (like AMBA) which can’t check for matching drivers until other devices probe successfully.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMWhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMYhj'ubj)}(hq``dma_coherent`` this particular device is dma coherent, even if the architecture supports non-coherent devices. h](j)}(h``dma_coherent``h]j)}(hj2h]h dma_coherent}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM[hj2ubj)}(hhh]jG)}(h_this particular device is dma coherent, even if the architecture supports non-coherent devices.h]h_this particular device is dma coherent, even if the architecture supports non-coherent devices.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMZhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM[hj'ubj)}(hX``dma_ops_bypass`` If set to ``true`` then the dma_ops are bypassed for the streaming DMA operations (->map_* / ->unmap_* / ->sync_*), and optionall (if the coherent mask is large enough) also for dma allocations. This flag is managed by the dma ops instance from ->dma_supported. h](j)}(h``dma_ops_bypass``h]j)}(hj3h]hdma_ops_bypass}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM`hj2ubj)}(hhh]jG)}(hXIf set to ``true`` then the dma_ops are bypassed for the streaming DMA operations (->map_* / ->unmap_* / ->sync_*), and optionall (if the coherent mask is large enough) also for dma allocations. This flag is managed by the dma ops instance from ->dma_supported.h](h If set to }(hj3hhhNhNubj)}(h``true``h]htrue}(hj$3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh then the dma_ops are bypassed for the streaming DMA operations (->map_* / ->unmap_* / ->sync_*), and optionall (if the coherent mask is large enough) also for dma allocations. This flag is managed by the dma ops instance from ->dma_supported.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM\hj3ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj3hM`hj'ubj)}(hK``dma_skip_sync`` DMA sync operations can be skipped for coherent buffers. h](j)}(h``dma_skip_sync``h]j)}(hjO3h]h dma_skip_sync}(hjQ3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM3ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMahjI3ubj)}(hhh]jG)}(h8DMA sync operations can be skipped for coherent buffers.h]h8DMA sync operations can be skipped for coherent buffers.}(hjh3hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjd3hMahje3ubah}(h]h ]h"]h$]h&]uh1jhjI3ubeh}(h]h ]h"]h$]h&]uh1jhjd3hMahj'ubj)}(hi``dma_iommu`` Device is using default IOMMU implementation for DMA and doesn't rely on dma_ops structure.h](j)}(h ``dma_iommu``h]j)}(hj3h]h dma_iommu}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMbhj3ubj)}(hhh]jG)}(h[Device is using default IOMMU implementation for DMA and doesn't rely on dma_ops structure.h]h]Device is using default IOMMU implementation for DMA and doesn’t rely on dma_ops structure.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj3hMbhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMbhj'ubeh}(h]h ]h"]h$]h&]uh1jhjr'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubjG)}(h **Example**h]jv)}(hj3h]hExample}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMfhhhhubj)}(hhh]j)}(hXFor devices on custom boards, as typical of embedded and SOC based hardware, Linux often uses platform_data to point to board-specific structures describing devices and how they are wired. That can include what ports are available, chip variants, which GPIO pins act in what additional roles, and so on. This shrinks the "Board Support Packages" (BSPs) and minimizes board-specific #ifdefs in drivers. h](j)}(h4For devices on custom boards, as typical of embeddedh]h4For devices on custom boards, as typical of embedded}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj3ubj)}(hhh]jG)}(hX^and SOC based hardware, Linux often uses platform_data to point to board-specific structures describing devices and how they are wired. That can include what ports are available, chip variants, which GPIO pins act in what additional roles, and so on. This shrinks the "Board Support Packages" (BSPs) and minimizes board-specific #ifdefs in drivers.h]hXband SOC based hardware, Linux often uses platform_data to point to board-specific structures describing devices and how they are wired. That can include what ports are available, chip variants, which GPIO pins act in what additional roles, and so on. This shrinks the “Board Support Packages” (BSPs) and minimizes board-specific #ifdefs in drivers.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhhhhhNhNubjG)}(h**Description**h]jv)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhhhhubjG)}(hXAt the lowest level, every device in a Linux system is represented by an instance of struct device. The device structure contains the information that the device model core needs to model the system. Most subsystems, however, track additional information about the devices they host. As a result, it is rare for devices to be represented by bare device structures; instead, that structure, like kobject structures, is usually embedded within a higher-level representation of the device.h]hXAt the lowest level, every device in a Linux system is represented by an instance of struct device. The device structure contains the information that the device model core needs to model the system. Most subsystems, however, track additional information about the devices they host. As a result, it is rare for devices to be represented by bare device structures; instead, that structure, like kobject structures, is usually embedded within a higher-level representation of the device.}(hj24hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMdhhhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_link (C struct) c.device_linkhNtauh1hhhhhhNhNubh)}(hhh](h)}(h device_linkh]h)}(hstruct device_linkh](h)}(hhh]hstruct}(hjZ4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjV4hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMoubh)}(h h]h }(hjh4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjV4hhhjg4hMoubj)}(h device_linkh]j)}(hjT4h]h device_link}(hjz4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv4ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjV4hhhjg4hMoubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjR4hhhjg4hMoubah}(h]jM4ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjg4hMohjO4hhubjB)}(hhh]jG)}(hDevice link representation.h]hDevice link representation.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj4hhubah}(h]h ]h"]h$]h&]uh1jAhjO4hhhjg4hMoubeh}(h]h ](j`structeh"]h$]h&]jej`jfj4jgj4jhjijjuh1hhhhhhNhNubjl)}(hX<**Definition**:: struct device_link { struct device *supplier; struct list_head s_node; struct device *consumer; struct list_head c_node; struct device link_dev; enum device_link_state status; u32 flags; refcount_t rpm_active; struct kref kref; struct work_struct rm_work; bool supplier_preactivated; }; **Members** ``supplier`` The device on the supplier end of the link. ``s_node`` Hook to the supplier device's list of links to consumers. ``consumer`` The device on the consumer end of the link. ``c_node`` Hook to the consumer device's list of links to suppliers. ``link_dev`` device used to expose link details in sysfs ``status`` The state of the link (with respect to the presence of drivers). ``flags`` Link flags. ``rpm_active`` Whether or not the consumer device is runtime-PM-active. ``kref`` Count repeated addition of the same link. ``rm_work`` Work structure used for removing the link. ``supplier_preactivated`` Supplier has been made active before consumer probe.h](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubh:}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj4ubj)}(hXJstruct device_link { struct device *supplier; struct list_head s_node; struct device *consumer; struct list_head c_node; struct device link_dev; enum device_link_state status; u32 flags; refcount_t rpm_active; struct kref kref; struct work_struct rm_work; bool supplier_preactivated; };h]hXJstruct device_link { struct device *supplier; struct list_head s_node; struct device *consumer; struct list_head c_node; struct device link_dev; enum device_link_state status; u32 flags; refcount_t rpm_active; struct kref kref; struct work_struct rm_work; bool supplier_preactivated; };}hj4sbah}(h]h ]h"]h$]h&]j+j,uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj4ubjG)}(h **Members**h]jv)}(hj4h]hMembers}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj4ubj)}(hhh](j)}(h9``supplier`` The device on the supplier end of the link. h](j)}(h ``supplier``h]j)}(hj 5h]hsupplier}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj5ubj)}(hhh]jG)}(h+The device on the supplier end of the link.h]h+The device on the supplier end of the link.}(hj"5hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj5ubj)}(hE``s_node`` Hook to the supplier device's list of links to consumers. h](j)}(h ``s_node``h]j)}(hjB5h]hs_node}(hjD5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@5ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj<5ubj)}(hhh]jG)}(h9Hook to the supplier device's list of links to consumers.h]h;Hook to the supplier device’s list of links to consumers.}(hj[5hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjW5hMhjX5ubah}(h]h ]h"]h$]h&]uh1jhj<5ubeh}(h]h ]h"]h$]h&]uh1jhjW5hMhj5ubj)}(h9``consumer`` The device on the consumer end of the link. h](j)}(h ``consumer``h]j)}(hj{5h]hconsumer}(hj}5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy5ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhju5ubj)}(hhh]jG)}(h+The device on the consumer end of the link.h]h+The device on the consumer end of the link.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhju5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj5ubj)}(hE``c_node`` Hook to the consumer device's list of links to suppliers. h](j)}(h ``c_node``h]j)}(hj5h]hc_node}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj5ubj)}(hhh]jG)}(h9Hook to the consumer device's list of links to suppliers.h]h;Hook to the consumer device’s list of links to suppliers.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj5ubj)}(h9``link_dev`` device used to expose link details in sysfs h](j)}(h ``link_dev``h]j)}(hj5h]hlink_dev}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj5ubj)}(hhh]jG)}(h+device used to expose link details in sysfsh]h+device used to expose link details in sysfs}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj5ubj)}(hL``status`` The state of the link (with respect to the presence of drivers). h](j)}(h ``status``h]j)}(hj&6h]hstatus}(hj(6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$6ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj 6ubj)}(hhh]jG)}(h@The state of the link (with respect to the presence of drivers).h]h@The state of the link (with respect to the presence of drivers).}(hj?6hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj;6hMhj<6ubah}(h]h ]h"]h$]h&]uh1jhj 6ubeh}(h]h ]h"]h$]h&]uh1jhj;6hMhj5ubj)}(h``flags`` Link flags. h](j)}(h ``flags``h]j)}(hj_6h]hflags}(hja6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]6ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjY6ubj)}(hhh]jG)}(h Link flags.h]h Link flags.}(hjx6hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjt6hMhju6ubah}(h]h ]h"]h$]h&]uh1jhjY6ubeh}(h]h ]h"]h$]h&]uh1jhjt6hMhj5ubj)}(hH``rpm_active`` Whether or not the consumer device is runtime-PM-active. h](j)}(h``rpm_active``h]j)}(hj6h]h rpm_active}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj6ubj)}(hhh]jG)}(h8Whether or not the consumer device is runtime-PM-active.h]h8Whether or not the consumer device is runtime-PM-active.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj5ubj)}(h3``kref`` Count repeated addition of the same link. h](j)}(h``kref``h]j)}(hj6h]hkref}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj6ubj)}(hhh]jG)}(h)Count repeated addition of the same link.h]h)Count repeated addition of the same link.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj5ubj)}(h7``rm_work`` Work structure used for removing the link. h](j)}(h ``rm_work``h]j)}(hj 7h]hrm_work}(hj 7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj7ubj)}(hhh]jG)}(h*Work structure used for removing the link.h]h*Work structure used for removing the link.}(hj#7hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj7hMhj 7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj5ubj)}(hN``supplier_preactivated`` Supplier has been made active before consumer probe.h](j)}(h``supplier_preactivated``h]j)}(hjC7h]hsupplier_preactivated}(hjE7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA7ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj=7ubj)}(hhh]jG)}(h4Supplier has been made active before consumer probe.h]h4Supplier has been made active before consumer probe.}(hj\7hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjY7ubah}(h]h ]h"]h$]h&]uh1jhj=7ubeh}(h]h ]h"]h$]h&]uh1jhjX7hMhj5ubeh}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ device_iommu_mapped (C function)c.device_iommu_mappedhNtauh1hhhhhhNhNubh)}(hhh](h)}(h-bool device_iommu_mapped (struct device *dev)h]h)}(h,bool device_iommu_mapped(struct device *dev)h](j)}(hboolh]hbool}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMubh)}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7hhhj7hMubj)}(hdevice_iommu_mappedh]j)}(hdevice_iommu_mappedh]hdevice_iommu_mapped}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj7hhhj7hMubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubh)}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7ubh)}(hhh]j)}(hdeviceh]hdevice}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj7modnameN classnameNj^ja)}jd]jg)}jZj7sbc.device_iommu_mappedasbuh1hhj7ubh)}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7ubj{)}(hj~h]h*}(hj&8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj7ubj)}(hdevh]hdev}(hj38hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj7ubah}(h]h ]h"]h$]h&]j+j,uh1jhj7hhhj7hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj7hhhj7hMubah}(h]j7ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj7hMhj7hhubjB)}(hhh]jG)}(h:Returns true when the device DMA is translated by an IOMMUh]h:Returns true when the device DMA is translated by an IOMMU}(hj]8hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjZ8hhubah}(h]h ]h"]h$]h&]uh1jAhj7hhhj7hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfju8jgju8jhjijjuh1hhhhhhNhNubjl)}(hG**Parameters** ``struct device *dev`` Device to perform the check onh](jG)}(h**Parameters**h]jv)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}8ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjy8ubj)}(hhh]j)}(h5``struct device *dev`` Device to perform the check onh](j)}(h``struct device *dev``h]j)}(hj8h]hstruct device *dev}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.h?hMhj8ubj)}(hhh]jG)}(hDevice to perform the check onh]hDevice to perform the check on}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjy8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdev_name (C function) c.dev_namehNtauh1hhhhhhNhNubh)}(hhh](h)}(h0const char * dev_name (const struct device *dev)h]h)}(h.const char *dev_name(const struct device *dev)h](h)}(hconsth]hconst}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM ubh)}(h h]h }(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8hhhj9hM ubj)}(hcharh]hchar}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj9hM ubh)}(h h]h }(hj#9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8hhhj9hM ubj{)}(hj~h]h*}(hj19hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj8hhhj9hM ubj)}(hdev_nameh]j)}(hdev_nameh]hdev_name}(hjB9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>9ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj8hhhj9hM ubj)}(h(const struct device *dev)h]j!)}(hconst struct device *devh](h)}(hj8h]hconst}(hj^9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZ9ubh)}(h h]h }(hjk9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjZ9ubh)}(hhh]hstruct}(hjy9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZ9ubh)}(h h]h }(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjZ9ubh)}(hhh]j)}(hdeviceh]hdevice}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj9modnameN classnameNj^ja)}jd]jg)}jZjD9sb c.dev_nameasbuh1hhjZ9ubh)}(h h]h }(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjZ9ubj{)}(hj~h]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjZ9ubj)}(hdevh]hdev}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ9ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjV9ubah}(h]h ]h"]h$]h&]j+j,uh1jhj8hhhj9hM ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj8hhhj9hM ubah}(h]j8ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj9hM hj8hhubjB)}(hhh]jG)}(hReturn a device's name.h]hReturn a device’s name.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj9hhubah}(h]h ]h"]h$]h&]uh1jAhj8hhhj9hM ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj:jgj:jhjijjuh1hhhhhhNhNubjl)}(h**Parameters** ``const struct device *dev`` Device with name to get. **Return** The kobject name of the device, or its initial name if unavailable.h](jG)}(h**Parameters**h]jv)}(hj:h]h Parameters}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM hj:ubj)}(hhh]j)}(h6``const struct device *dev`` Device with name to get. h](j)}(h``const struct device *dev``h]j)}(hj=:h]hconst struct device *dev}(hj?:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;:ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj7:ubj)}(hhh]jG)}(hDevice with name to get.h]hDevice with name to get.}(hjV:hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjR:hMhjS:ubah}(h]h ]h"]h$]h&]uh1jhj7:ubeh}(h]h ]h"]h$]h&]uh1jhjR:hMhj4:ubah}(h]h ]h"]h$]h&]uh1jhj:ubjG)}(h **Return**h]jv)}(hjx:h]hReturn}(hjz:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjv:ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM hj:ubjG)}(hCThe kobject name of the device, or its initial name if unavailable.h]hCThe kobject name of the device, or its initial name if unavailable.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdev_bus_name (C function)c.dev_bus_namehNtauh1hhhhhhNhNubh)}(hhh](h)}(h4const char * dev_bus_name (const struct device *dev)h]h)}(h2const char *dev_bus_name(const struct device *dev)h](h)}(hj8h]hconst}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMubh)}(h h]h }(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj:hhhj:hMubj)}(hcharh]hchar}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhj:hMubh)}(h h]h }(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj:hhhj:hMubj{)}(hj~h]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj:hhhj:hMubj)}(h dev_bus_nameh]j)}(h dev_bus_nameh]h dev_bus_name}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj:hhhj:hMubj)}(h(const struct device *dev)h]j!)}(hconst struct device *devh](h)}(hj8h]hconst}(hj";hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubh)}(h h]h }(hj/;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj;ubh)}(hhh]hstruct}(hj=;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubh)}(h h]h }(hjJ;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj;ubh)}(hhh]j)}(hdeviceh]hdevice}(hj[;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX;ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj];modnameN classnameNj^ja)}jd]jg)}jZj;sbc.dev_bus_nameasbuh1hhj;ubh)}(h h]h }(hj{;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj;ubj{)}(hj~h]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj;ubj)}(hdevh]hdev}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj;ubah}(h]h ]h"]h$]h&]j+j,uh1jhj:hhhj:hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj:hhhj:hMubah}(h]j:ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj:hMhj:hhubjB)}(hhh]jG)}(h4Return a device's bus/class name, if at all possibleh]h6Return a device’s bus/class name, if at all possible}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj;hhubah}(h]h ]h"]h$]h&]uh1jAhj:hhhj:hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj;jgj;jhjijjuh1hhhhhhNhNubjl)}(h**Parameters** ``const struct device *dev`` struct device to get the bus/class name of **Description** Will return the name of the bus/class the device is attached to. If it is not attached to a bus/class, an empty string will be returned.h](jG)}(h**Parameters**h]jv)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj;ubj)}(hhh]j)}(hH``const struct device *dev`` struct device to get the bus/class name of h](j)}(h``const struct device *dev``h]j)}(hj<h]hconst struct device *dev}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj;ubj)}(hhh]jG)}(h*struct device to get the bus/class name ofh]h*struct device to get the bus/class name of}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubjG)}(h**Description**h]jv)}(hj<<h]h Description}(hj><hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:<ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj;ubjG)}(hWill return the name of the bus/class the device is attached to. If it is not attached to a bus/class, an empty string will be returned.h]hWill return the name of the bus/class the device is attached to. If it is not attached to a bus/class, an empty string will be returned.}(hjR<hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&device_find_child_by_name (C function)c.device_find_child_by_namehNtauh1hhhhhhNhNubh)}(hhh](h)}(hSstruct device * device_find_child_by_name (struct device *parent, const char *name)h]h)}(hQstruct device *device_find_child_by_name(struct device *parent, const char *name)h](h)}(hhh]hstruct}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}<hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMubh)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj}<hhhj<hMubh)}(hhh]j)}(hdeviceh]hdevice}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj<modnameN classnameNj^ja)}jd]jg)}jZdevice_find_child_by_namesbc.device_find_child_by_nameasbuh1hhj}<hhhj<hMubh)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj}<hhhj<hMubj{)}(hj~h]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj}<hhhj<hMubj)}(hdevice_find_child_by_nameh]j)}(hj<h]hdevice_find_child_by_name}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj}<hhhj<hMubj)}(h)(struct device *parent, const char *name)h](j!)}(hstruct device *parenth](h)}(hhh]hstruct}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubh)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj<ubh)}(hhh]j)}(hdeviceh]hdevice}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj=modnameN classnameNj^ja)}jd]j<c.device_find_child_by_nameasbuh1hhj<ubh)}(h h]h }(hj7=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj<ubj{)}(hj~h]h*}(hjE=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj<ubj)}(hparenth]hparent}(hjR=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj<ubj!)}(hconst char *nameh](h)}(hj8h]hconst}(hjk=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjg=ubh)}(h h]h }(hjx=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjg=ubj)}(hcharh]hchar}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg=ubh)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjg=ubj{)}(hj~h]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjg=ubj)}(hnameh]hname}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg=ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj<ubeh}(h]h ]h"]h$]h&]j+j,uh1jhj}<hhhj<hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjy<hhhj<hMubah}(h]jt<ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj<hMhjv<hhubjB)}(hhh]jG)}(h,device iterator for locating a child device.h]h,device iterator for locating a child device.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj=hhubah}(h]h ]h"]h$]h&]uh1jAhjv<hhhj<hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj=jgj=jhjijjuh1hhhhhhNhNubjl)}(hXM**Parameters** ``struct device *parent`` parent struct device ``const char *name`` name of the child device **Description** This is similar to the device_find_child() function above, but it returns a reference to a device that has the name **name**. **NOTE** you will need to drop the reference with put_device() after use.h](jG)}(h**Parameters**h]jv)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj=ubj)}(hhh](j)}(h/``struct device *parent`` parent struct device h](j)}(h``struct device *parent``h]j)}(hj>h]hstruct device *parent}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj>ubj)}(hhh]jG)}(hparent struct deviceh]hparent struct device}(hj3>hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/>hMhj0>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj/>hMhj>ubj)}(h.``const char *name`` name of the child device h](j)}(h``const char *name``h]j)}(hjS>h]hconst char *name}(hjU>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ>ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjM>ubj)}(hhh]jG)}(hname of the child deviceh]hname of the child device}(hjl>hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjh>hMhji>ubah}(h]h ]h"]h$]h&]uh1jhjM>ubeh}(h]h ]h"]h$]h&]uh1jhjh>hMhj>ubeh}(h]h ]h"]h$]h&]uh1jhj=ubjG)}(h**Description**h]jv)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj=ubjG)}(h}This is similar to the device_find_child() function above, but it returns a reference to a device that has the name **name**.h](htThis is similar to the device_find_child() function above, but it returns a reference to a device that has the name }(hj>hhhNhNubjv)}(h**name**h]hname}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj=ubjG)}(h**NOTE**h]jv)}(hj>h]hNOTE}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj=ubjG)}(h@you will need to drop the reference with put_device() after use.h]h@you will need to drop the reference with put_device() after use.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"device_find_any_child (C function)c.device_find_any_childhNtauh1hhhhhhNhNubh)}(hhh](h)}(h=struct device * device_find_any_child (struct device *parent)h]h)}(h;struct device *device_find_any_child(struct device *parent)h](h)}(hhh]hstruct}(hj ?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj?hhhj?hMubh)}(hhh]j)}(hdeviceh]hdevice}(hj+?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(?ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj-?modnameN classnameNj^ja)}jd]jg)}jZdevice_find_any_childsbc.device_find_any_childasbuh1hhj?hhhj?hMubh)}(h h]h }(hjL?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj?hhhj?hMubj{)}(hj~h]h*}(hjZ?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj?hhhj?hMubj)}(hdevice_find_any_childh]j)}(hjI?h]hdevice_find_any_child}(hjk?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg?ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj?hhhj?hMubj)}(h(struct device *parent)h]j!)}(hstruct device *parenth](h)}(hhh]hstruct}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj?ubh)}(hhh]j)}(hdeviceh]hdevice}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj?modnameN classnameNj^ja)}jd]jG?c.device_find_any_childasbuh1hhj?ubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj?ubj{)}(hj~h]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj?ubj)}(hparenth]hparent}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj~?ubah}(h]h ]h"]h$]h&]j+j,uh1jhj?hhhj?hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj?hhhj?hMubah}(h]j>ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj?hMhj?hhubjB)}(hhh]jG)}(h4device iterator for locating a child device, if any.h]h4device iterator for locating a child device, if any.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj@hhubah}(h]h ]h"]h$]h&]uh1jAhj?hhhj?hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj@jgj@jhjijjuh1hhhhhhNhNubjl)}(hX**Parameters** ``struct device *parent`` parent struct device **Description** This is similar to the device_find_child() function above, but it returns a reference to a child device, if any. **NOTE** you will need to drop the reference with put_device() after use.h](jG)}(h**Parameters**h]jv)}(hj)@h]h Parameters}(hj+@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'@ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj#@ubj)}(hhh]j)}(h/``struct device *parent`` parent struct device h](j)}(h``struct device *parent``h]j)}(hjH@h]hstruct device *parent}(hjJ@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF@ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjB@ubj)}(hhh]jG)}(hparent struct deviceh]hparent struct device}(hja@hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj]@hMhj^@ubah}(h]h ]h"]h$]h&]uh1jhjB@ubeh}(h]h ]h"]h$]h&]uh1jhj]@hMhj?@ubah}(h]h ]h"]h$]h&]uh1jhj#@ubjG)}(h**Description**h]jv)}(hj@h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj#@ubjG)}(hpThis is similar to the device_find_child() function above, but it returns a reference to a child device, if any.h]hpThis is similar to the device_find_child() function above, but it returns a reference to a child device, if any.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj#@ubjG)}(h**NOTE**h]jv)}(hj@h]hNOTE}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj#@ubjG)}(h@you will need to drop the reference with put_device() after use.h]h@you will need to drop the reference with put_device() after use.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj#@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_lock_set_class (C macro)c.device_lock_set_classhNtauh1hhhhhhNhNubh)}(hhh](h)}(hdevice_lock_set_classh]h)}(hdevice_lock_set_classh]j)}(hdevice_lock_set_classh]j)}(hj@h]hdevice_lock_set_class}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj@hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj@hhhjAhMubah}(h]j@ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjAhMhj@hhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhj@hhhjAhMubeh}(h]h ](j`macroeh"]h$]h&]jej`jfjAjgjAjhjijjuh1hhhhhhNhNubjG)}(h$``device_lock_set_class (dev, key)``h]j)}(hj%Ah]h device_lock_set_class (dev, key)}(hj'AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#Aubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhhhhubj;)}(hFSpecify a temporary lock class while a device is attached to a driver h]jG)}(hESpecify a temporary lock class while a device is attached to a driverh]hESpecify a temporary lock class while a device is attached to a driver}(hj?AhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhj;Aubah}(h]h ]h"]h$]h&]uh1j:hjMAhMhhhhubjl)}(h**Parameters** ``dev`` device to modify ``key`` lock class key data **Description** This must be called with the device_lock() already held, for example from driver ->probe(). Take care to only override the default lockdep_no_validate class.h](jG)}(h**Parameters**h]jv)}(hjZAh]h Parameters}(hj\AhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXAubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjTAubj)}(hhh](j)}(h``dev`` device to modify h](j)}(h``dev``h]j)}(hjyAh]hdev}(hj{AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwAubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjsAubj)}(hhh]jG)}(hdevice to modifyh]hdevice to modify}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjsAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjpAubj)}(h``key`` lock class key data h](j)}(h``key``h]j)}(hjAh]hkey}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjAubj)}(hhh]jG)}(hlock class key datah]hlock class key data}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjpAubeh}(h]h ]h"]h$]h&]uh1jhjTAubjG)}(h**Description**h]jv)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjTAubjG)}(hThis must be called with the device_lock() already held, for example from driver ->probe(). Take care to only override the default lockdep_no_validate class.h]hThis must be called with the device_lock() already held, for example from driver ->probe(). Take care to only override the default lockdep_no_validate class.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhMhjTAubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!device_lock_reset_class (C macro)c.device_lock_reset_classhNtauh1hhhhhhNhNubh)}(hhh](h)}(hdevice_lock_reset_classh]h)}(hdevice_lock_reset_classh]j)}(hdevice_lock_reset_classh]j)}(hj,Bh]hdevice_lock_reset_class}(hj6BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Bubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj.Bhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM.ubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj*BhhhjIBhM.ubah}(h]j%Bah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjIBhM.hj'BhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhj'BhhhjIBhM.ubeh}(h]h ](j`macroeh"]h$]h&]jej`jfjbBjgjbBjhjijjuh1hhhhhhNhNubjG)}(h!``device_lock_reset_class (dev)``h]j)}(hjhBh]hdevice_lock_reset_class (dev)}(hjjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfBubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM0hhhhubj;)}(h8Return a device to the default lockdep novalidate state h]jG)}(h7Return a device to the default lockdep novalidate stateh]h7Return a device to the default lockdep novalidate state}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM(hj~Bubah}(h]h ]h"]h$]h&]uh1j:hjBhM(hhhhubjl)}(h**Parameters** ``dev`` device to modify **Description** This must be called with the device_lock() already held, for example from driver ->remove().h](jG)}(h**Parameters**h]jv)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM,hjBubj)}(hhh]j)}(h``dev`` device to modify h](j)}(h``dev``h]j)}(hjBh]hdev}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM)hjBubj)}(hhh]jG)}(hdevice to modifyh]hdevice to modify}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjBhM)hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM)hjBubah}(h]h ]h"]h$]h&]uh1jhjBubjG)}(h**Description**h]jv)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM+hjBubjG)}(h\This must be called with the device_lock() already held, for example from driver ->remove().h]h\This must be called with the device_lock() already held, for example from driver ->remove().}(hj ChhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:7: ./include/linux/device.hhM+hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌbus_type (C struct) c.bus_typehNtauh1hhhhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhNubh)}(hhh](h)}(hbus_typeh]h)}(hstruct bus_typeh](h)}(hhh]hstruct}(hj=ChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9Chhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhKubh)}(h h]h }(hjKChhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj9ChhhjJChKubj)}(hbus_typeh]j)}(hj7Ch]hbus_type}(hj]ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYCubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj9ChhhjJChKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj5ChhhjJChKubah}(h]j/Cah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjJChKhj2ChhubjB)}(hhh]jG)}(hThe bus type of the deviceh]hThe bus type of the device}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhKhj|Chhubah}(h]h ]h"]h$]h&]uh1jAhj2ChhhjJChKubeh}(h]h ](j`structeh"]h$]h&]jej`jfjCjgjCjhjijjuh1hhhhhhj1ChNubjl)}(hXa **Definition**:: struct bus_type { const char *name; const char *dev_name; const struct attribute_group **bus_groups; const struct attribute_group **dev_groups; const struct attribute_group **drv_groups; int (*match)(struct device *dev, const struct device_driver *drv); int (*uevent)(const struct device *dev, struct kobj_uevent_env *env); int (*probe)(struct device *dev); void (*sync_state)(struct device *dev); void (*remove)(struct device *dev); void (*shutdown)(struct device *dev); const struct cpumask *(*irq_get_affinity)(struct device *dev, unsigned int irq_vec); int (*online)(struct device *dev); int (*offline)(struct device *dev); int (*suspend)(struct device *dev, pm_message_t state); int (*resume)(struct device *dev); int (*num_vf)(struct device *dev); int (*dma_configure)(struct device *dev); void (*dma_cleanup)(struct device *dev); const struct dev_pm_ops *pm; bool need_parent_lock; }; **Members** ``name`` The name of the bus. ``dev_name`` Used for subsystems to enumerate devices like ("foo``u``", dev->id). ``bus_groups`` Default attributes of the bus. ``dev_groups`` Default attributes of the devices on the bus. ``drv_groups`` Default attributes of the device drivers on the bus. ``match`` Called, perhaps multiple times, whenever a new device or driver is added for this bus. It should return a positive value if the given device can be handled by the given driver and zero otherwise. It may also return error code if determining that the driver supports the device is not possible. In case of -EPROBE_DEFER it will queue the device for deferred probing. ``uevent`` Called when a device is added, removed, or a few other things that generate uevents to add the environment variables. ``probe`` Called when a new device or driver add to this bus, and callback the specific driver's probe to initial the matched device. ``sync_state`` Called to sync device state to software state after all the state tracking consumers linked to this device (present at the time of late_initcall) have successfully bound to a driver. If the device has no consumers, this function will be called at late_initcall_sync level. If the device has consumers that are never bound to a driver, this function will never get called until they do. ``remove`` Called when a device removed from this bus. ``shutdown`` Called at shut-down time to quiesce the device. ``irq_get_affinity`` Get IRQ affinity mask for the device on this bus. ``online`` Called to put the device back online (after offlining it). ``offline`` Called to put the device offline for hot-removal. May fail. ``suspend`` Called when a device on this bus wants to go to sleep mode. ``resume`` Called to bring a device on this bus out of sleep mode. ``num_vf`` Called to find out how many virtual functions a device on this bus supports. ``dma_configure`` Called to setup DMA configuration on a device on this bus. ``dma_cleanup`` Called to cleanup DMA configuration on a device on this bus. ``pm`` Power management operations of this bus, callback the specific device driver's pm-ops. ``need_parent_lock`` When probing or removing a device on this bus, the device core should lock the device's parent.h](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubh:}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhKhjCubj)}(hXstruct bus_type { const char *name; const char *dev_name; const struct attribute_group **bus_groups; const struct attribute_group **dev_groups; const struct attribute_group **drv_groups; int (*match)(struct device *dev, const struct device_driver *drv); int (*uevent)(const struct device *dev, struct kobj_uevent_env *env); int (*probe)(struct device *dev); void (*sync_state)(struct device *dev); void (*remove)(struct device *dev); void (*shutdown)(struct device *dev); const struct cpumask *(*irq_get_affinity)(struct device *dev, unsigned int irq_vec); int (*online)(struct device *dev); int (*offline)(struct device *dev); int (*suspend)(struct device *dev, pm_message_t state); int (*resume)(struct device *dev); int (*num_vf)(struct device *dev); int (*dma_configure)(struct device *dev); void (*dma_cleanup)(struct device *dev); const struct dev_pm_ops *pm; bool need_parent_lock; };h]hXstruct bus_type { const char *name; const char *dev_name; const struct attribute_group **bus_groups; const struct attribute_group **dev_groups; const struct attribute_group **drv_groups; int (*match)(struct device *dev, const struct device_driver *drv); int (*uevent)(const struct device *dev, struct kobj_uevent_env *env); int (*probe)(struct device *dev); void (*sync_state)(struct device *dev); void (*remove)(struct device *dev); void (*shutdown)(struct device *dev); const struct cpumask *(*irq_get_affinity)(struct device *dev, unsigned int irq_vec); int (*online)(struct device *dev); int (*offline)(struct device *dev); int (*suspend)(struct device *dev, pm_message_t state); int (*resume)(struct device *dev); int (*num_vf)(struct device *dev); int (*dma_configure)(struct device *dev); void (*dma_cleanup)(struct device *dev); const struct dev_pm_ops *pm; bool need_parent_lock; };}hjCsbah}(h]h ]h"]h$]h&]j+j,uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhKhjCubjG)}(h **Members**h]jv)}(hjCh]hMembers}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK7hjCubj)}(hhh](j)}(h``name`` The name of the bus. h](j)}(h``name``h]j)}(hjCh]hname}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhKhjCubj)}(hhh]jG)}(hThe name of the bus.h]hThe name of the bus.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjDhKhjDubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjDhKhjCubj)}(hR``dev_name`` Used for subsystems to enumerate devices like ("foo``u``", dev->id). h](j)}(h ``dev_name``h]j)}(hj%Dh]hdev_name}(hj'DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#Dubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhKhjDubj)}(hhh]jG)}(hDUsed for subsystems to enumerate devices like ("foo``u``", dev->id).h]hHUsed for subsystems to enumerate devices like (“foo``u``”, dev->id).}(hj>DhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj:DhKhj;Dubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj:DhKhjCubj)}(h.``bus_groups`` Default attributes of the bus. h](j)}(h``bus_groups``h]j)}(hj^Dh]h bus_groups}(hj`DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Dubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhKhjXDubj)}(hhh]jG)}(hDefault attributes of the bus.h]hDefault attributes of the bus.}(hjwDhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjsDhKhjtDubah}(h]h ]h"]h$]h&]uh1jhjXDubeh}(h]h ]h"]h$]h&]uh1jhjsDhKhjCubj)}(h=``dev_groups`` Default attributes of the devices on the bus. h](j)}(h``dev_groups``h]j)}(hjDh]h dev_groups}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhKhjDubj)}(hhh]jG)}(h-Default attributes of the devices on the bus.h]h-Default attributes of the devices on the bus.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjDhKhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhKhjCubj)}(hD``drv_groups`` Default attributes of the device drivers on the bus. h](j)}(h``drv_groups``h]j)}(hjDh]h drv_groups}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK hjDubj)}(hhh]jG)}(h4Default attributes of the device drivers on the bus.h]h4Default attributes of the device drivers on the bus.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjDhK hjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhK hjCubj)}(hXx``match`` Called, perhaps multiple times, whenever a new device or driver is added for this bus. It should return a positive value if the given device can be handled by the given driver and zero otherwise. It may also return error code if determining that the driver supports the device is not possible. In case of -EPROBE_DEFER it will queue the device for deferred probing. h](j)}(h ``match``h]j)}(hj Eh]hmatch}(hj EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK&hjEubj)}(hhh]jG)}(hXmCalled, perhaps multiple times, whenever a new device or driver is added for this bus. It should return a positive value if the given device can be handled by the given driver and zero otherwise. It may also return error code if determining that the driver supports the device is not possible. In case of -EPROBE_DEFER it will queue the device for deferred probing.h]hXmCalled, perhaps multiple times, whenever a new device or driver is added for this bus. It should return a positive value if the given device can be handled by the given driver and zero otherwise. It may also return error code if determining that the driver supports the device is not possible. In case of -EPROBE_DEFER it will queue the device for deferred probing.}(hj"EhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK!hjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhK&hjCubj)}(h``uevent`` Called when a device is added, removed, or a few other things that generate uevents to add the environment variables. h](j)}(h ``uevent``h]j)}(hjCEh]huevent}(hjEEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAEubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK(hj=Eubj)}(hhh]jG)}(huCalled when a device is added, removed, or a few other things that generate uevents to add the environment variables.h]huCalled when a device is added, removed, or a few other things that generate uevents to add the environment variables.}(hj\EhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK'hjYEubah}(h]h ]h"]h$]h&]uh1jhj=Eubeh}(h]h ]h"]h$]h&]uh1jhjXEhK(hjCubj)}(h``probe`` Called when a new device or driver add to this bus, and callback the specific driver's probe to initial the matched device. h](j)}(h ``probe``h]j)}(hj}Eh]hprobe}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{Eubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK*hjwEubj)}(hhh]jG)}(h{Called when a new device or driver add to this bus, and callback the specific driver's probe to initial the matched device.h]h}Called when a new device or driver add to this bus, and callback the specific driver’s probe to initial the matched device.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK)hjEubah}(h]h ]h"]h$]h&]uh1jhjwEubeh}(h]h ]h"]h$]h&]uh1jhjEhK*hjCubj)}(hX``sync_state`` Called to sync device state to software state after all the state tracking consumers linked to this device (present at the time of late_initcall) have successfully bound to a driver. If the device has no consumers, this function will be called at late_initcall_sync level. If the device has consumers that are never bound to a driver, this function will never get called until they do. h](j)}(h``sync_state``h]j)}(hjEh]h sync_state}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK1hjEubj)}(hhh]jG)}(hXCalled to sync device state to software state after all the state tracking consumers linked to this device (present at the time of late_initcall) have successfully bound to a driver. If the device has no consumers, this function will be called at late_initcall_sync level. If the device has consumers that are never bound to a driver, this function will never get called until they do.h]hXCalled to sync device state to software state after all the state tracking consumers linked to this device (present at the time of late_initcall) have successfully bound to a driver. If the device has no consumers, this function will be called at late_initcall_sync level. If the device has consumers that are never bound to a driver, this function will never get called until they do.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK+hjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhK1hjCubj)}(h7``remove`` Called when a device removed from this bus. h](j)}(h ``remove``h]j)}(hjEh]hremove}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK2hjEubj)}(hhh]jG)}(h+Called when a device removed from this bus.h]h+Called when a device removed from this bus.}(hj FhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjFhK2hjFubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjFhK2hjCubj)}(h=``shutdown`` Called at shut-down time to quiesce the device. h](j)}(h ``shutdown``h]j)}(hj*Fh]hshutdown}(hj,FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(Fubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK3hj$Fubj)}(hhh]jG)}(h/Called at shut-down time to quiesce the device.h]h/Called at shut-down time to quiesce the device.}(hjCFhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj?FhK3hj@Fubah}(h]h ]h"]h$]h&]uh1jhj$Fubeh}(h]h ]h"]h$]h&]uh1jhj?FhK3hjCubj)}(hG``irq_get_affinity`` Get IRQ affinity mask for the device on this bus. h](j)}(h``irq_get_affinity``h]j)}(hjcFh]hirq_get_affinity}(hjeFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaFubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK4hj]Fubj)}(hhh]jG)}(h1Get IRQ affinity mask for the device on this bus.h]h1Get IRQ affinity mask for the device on this bus.}(hj|FhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjxFhK4hjyFubah}(h]h ]h"]h$]h&]uh1jhj]Fubeh}(h]h ]h"]h$]h&]uh1jhjxFhK4hjCubj)}(hF``online`` Called to put the device back online (after offlining it). h](j)}(h ``online``h]j)}(hjFh]honline}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK6hjFubj)}(hhh]jG)}(h:Called to put the device back online (after offlining it).h]h:Called to put the device back online (after offlining it).}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjFhK6hjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhK6hjCubj)}(hH``offline`` Called to put the device offline for hot-removal. May fail. h](j)}(h ``offline``h]j)}(hjFh]hoffline}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK7hjFubj)}(hhh]jG)}(h;Called to put the device offline for hot-removal. May fail.h]h;Called to put the device offline for hot-removal. May fail.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjFhK7hjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhK7hjCubj)}(hH``suspend`` Called when a device on this bus wants to go to sleep mode. h](j)}(h ``suspend``h]j)}(hjGh]hsuspend}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Gubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK9hjGubj)}(hhh]jG)}(h;Called when a device on this bus wants to go to sleep mode.h]h;Called when a device on this bus wants to go to sleep mode.}(hj'GhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj#GhK9hj$Gubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhj#GhK9hjCubj)}(hC``resume`` Called to bring a device on this bus out of sleep mode. h](j)}(h ``resume``h]j)}(hjGGh]hresume}(hjIGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEGubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK:hjAGubj)}(hhh]jG)}(h7Called to bring a device on this bus out of sleep mode.h]h7Called to bring a device on this bus out of sleep mode.}(hj`GhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj\GhK:hj]Gubah}(h]h ]h"]h$]h&]uh1jhjAGubeh}(h]h ]h"]h$]h&]uh1jhj\GhK:hjCubj)}(hX``num_vf`` Called to find out how many virtual functions a device on this bus supports. h](j)}(h ``num_vf``h]j)}(hjGh]hnum_vf}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~Gubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhKhjGubj)}(hhh]jG)}(h:Called to setup DMA configuration on a device on this bus.h]h:Called to setup DMA configuration on a device on this bus.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK=hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhK>hjCubj)}(hM``dma_cleanup`` Called to cleanup DMA configuration on a device on this bus. h](j)}(h``dma_cleanup``h]j)}(hjGh]h dma_cleanup}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhK@hjGubj)}(hhh]jG)}(hj?)j@huh1hhjHhKhjHhhubjB)}(hhh]jG)}(h&Bus Notifier events that have happenedh]h&Bus Notifier events that have happened}(hj*IhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhKhj'Ihhubah}(h]h ]h"]h$]h&]uh1jAhjHhhhjHhKubeh}(h]h ](j`enumeh"]h$]h&]jej`jfjBIjgjBIjhjijjuh1hhhhhhj1ChNubjl)}(hX**Constants** ``BUS_NOTIFY_ADD_DEVICE`` device is added to this bus ``BUS_NOTIFY_DEL_DEVICE`` device is about to be removed from this bus ``BUS_NOTIFY_REMOVED_DEVICE`` device is successfully removed from this bus ``BUS_NOTIFY_BIND_DRIVER`` a driver is about to be bound to this device on this bus ``BUS_NOTIFY_BOUND_DRIVER`` a driver is successfully bound to this device on this bus ``BUS_NOTIFY_UNBIND_DRIVER`` a driver is about to be unbound from this device on this bus ``BUS_NOTIFY_UNBOUND_DRIVER`` a driver is successfully unbound from this device on this bus ``BUS_NOTIFY_DRIVER_NOT_BOUND`` a driver failed to be bound to this device on this bush](jG)}(h **Constants**h]jv)}(hjLIh]h Constants}(hjNIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJIubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhMhjFIubj)}(hhh](j)}(h6``BUS_NOTIFY_ADD_DEVICE`` device is added to this bus h](j)}(h``BUS_NOTIFY_ADD_DEVICE``h]j)}(hjkIh]hBUS_NOTIFY_ADD_DEVICE}(hjmIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiIubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhMhjeIubj)}(hhh]jG)}(hdevice is added to this bush]hdevice is added to this bus}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjeIubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjbIubj)}(hF``BUS_NOTIFY_DEL_DEVICE`` device is about to be removed from this bus h](j)}(h``BUS_NOTIFY_DEL_DEVICE``h]j)}(hjIh]hBUS_NOTIFY_DEL_DEVICE}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhMhjIubj)}(hhh]jG)}(h+device is about to be removed from this bush]h+device is about to be removed from this bus}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjbIubj)}(hK``BUS_NOTIFY_REMOVED_DEVICE`` device is successfully removed from this bus h](j)}(h``BUS_NOTIFY_REMOVED_DEVICE``h]j)}(hjIh]hBUS_NOTIFY_REMOVED_DEVICE}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhM hjIubj)}(hhh]jG)}(h,device is successfully removed from this bush]h,device is successfully removed from this bus}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjIhM hjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM hjbIubj)}(hT``BUS_NOTIFY_BIND_DRIVER`` a driver is about to be bound to this device on this bus h](j)}(h``BUS_NOTIFY_BIND_DRIVER``h]j)}(hjJh]hBUS_NOTIFY_BIND_DRIVER}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhMhjJubj)}(hhh]jG)}(h8a driver is about to be bound to this device on this bush]h8a driver is about to be bound to this device on this bus}(hj/JhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj+JhMhj,Jubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhj+JhMhjbIubj)}(hV``BUS_NOTIFY_BOUND_DRIVER`` a driver is successfully bound to this device on this bus h](j)}(h``BUS_NOTIFY_BOUND_DRIVER``h]j)}(hjOJh]hBUS_NOTIFY_BOUND_DRIVER}(hjQJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMJubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhMhjIJubj)}(hhh]jG)}(h9a driver is successfully bound to this device on this bush]h9a driver is successfully bound to this device on this bus}(hjhJhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjdJhMhjeJubah}(h]h ]h"]h$]h&]uh1jhjIJubeh}(h]h ]h"]h$]h&]uh1jhjdJhMhjbIubj)}(hZ``BUS_NOTIFY_UNBIND_DRIVER`` a driver is about to be unbound from this device on this bus h](j)}(h``BUS_NOTIFY_UNBIND_DRIVER``h]j)}(hjJh]hBUS_NOTIFY_UNBIND_DRIVER}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:11: ./include/linux/device/bus.hhMhjJubj)}(hhh]jG)}(hj?)j@huh1hhjKhKhjKhhubjB)}(hhh]jG)}(hdevice classesh]hdevice classes}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhKhjKhhubah}(h]h ]h"]h$]h&]uh1jAhjKhhhjKhKubeh}(h]h ](j`structeh"]h$]h&]jej`jfjKjgjKjhjijjuh1hhhhhhjKhNubjl)}(hXG**Definition**:: struct class { const char *name; const struct attribute_group **class_groups; const struct attribute_group **dev_groups; int (*dev_uevent)(const struct device *dev, struct kobj_uevent_env *env); char *(*devnode)(const struct device *dev, umode_t *mode); void (*class_release)(const struct class *class); void (*dev_release)(struct device *dev); int (*shutdown_pre)(struct device *dev); const struct kobj_ns_type_operations *ns_type; const void *(*namespace)(const struct device *dev); void (*get_ownership)(const struct device *dev, kuid_t *uid, kgid_t *gid); const struct dev_pm_ops *pm; }; **Members** ``name`` Name of the class. ``class_groups`` Default attributes of this class. ``dev_groups`` Default attributes of the devices that belong to the class. ``dev_uevent`` Called when a device is added, removed from this class, or a few other things that generate uevents to add the environment variables. ``devnode`` Callback to provide the devtmpfs. ``class_release`` Called to release this class. ``dev_release`` Called to release the device. ``shutdown_pre`` Called at shut-down time before driver shutdown. ``ns_type`` Callbacks so sysfs can detemine namespaces. ``namespace`` Namespace of the device belongs to this class. ``get_ownership`` Allows class to specify uid/gid of the sysfs directories for the devices belonging to the class. Usually tied to device's namespace. ``pm`` The default device power management operations of this class.h](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubh:}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhKhjKubj)}(hXstruct class { const char *name; const struct attribute_group **class_groups; const struct attribute_group **dev_groups; int (*dev_uevent)(const struct device *dev, struct kobj_uevent_env *env); char *(*devnode)(const struct device *dev, umode_t *mode); void (*class_release)(const struct class *class); void (*dev_release)(struct device *dev); int (*shutdown_pre)(struct device *dev); const struct kobj_ns_type_operations *ns_type; const void *(*namespace)(const struct device *dev); void (*get_ownership)(const struct device *dev, kuid_t *uid, kgid_t *gid); const struct dev_pm_ops *pm; };h]hXstruct class { const char *name; const struct attribute_group **class_groups; const struct attribute_group **dev_groups; int (*dev_uevent)(const struct device *dev, struct kobj_uevent_env *env); char *(*devnode)(const struct device *dev, umode_t *mode); void (*class_release)(const struct class *class); void (*dev_release)(struct device *dev); int (*shutdown_pre)(struct device *dev); const struct kobj_ns_type_operations *ns_type; const void *(*namespace)(const struct device *dev); void (*get_ownership)(const struct device *dev, kuid_t *uid, kgid_t *gid); const struct dev_pm_ops *pm; };}hjLsbah}(h]h ]h"]h$]h&]j+j,uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhK hjKubjG)}(h **Members**h]jv)}(hj*Lh]hMembers}(hj,LhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(Lubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhK/hjKubj)}(hhh](j)}(h``name`` Name of the class. h](j)}(h``name``h]j)}(hjILh]hname}(hjKLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGLubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhKhjCLubj)}(hhh]jG)}(hName of the class.h]hName of the class.}(hjbLhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj^LhKhj_Lubah}(h]h ]h"]h$]h&]uh1jhjCLubeh}(h]h ]h"]h$]h&]uh1jhj^LhKhj@Lubj)}(h3``class_groups`` Default attributes of this class. h](j)}(h``class_groups``h]j)}(hjLh]h class_groups}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhKhj|Lubj)}(hhh]jG)}(h!Default attributes of this class.h]h!Default attributes of this class.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjLhKhjLubah}(h]h ]h"]h$]h&]uh1jhj|Lubeh}(h]h ]h"]h$]h&]uh1jhjLhKhj@Lubj)}(hK``dev_groups`` Default attributes of the devices that belong to the class. h](j)}(h``dev_groups``h]j)}(hjLh]h dev_groups}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhKhjLubj)}(hhh]jG)}(h;Default attributes of the devices that belong to the class.h]h;Default attributes of the devices that belong to the class.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjLhKhjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhKhj@Lubj)}(h``dev_uevent`` Called when a device is added, removed from this class, or a few other things that generate uevents to add the environment variables. h](j)}(h``dev_uevent``h]j)}(hjLh]h dev_uevent}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhK!hjLubj)}(hhh]jG)}(hCalled when a device is added, removed from this class, or a few other things that generate uevents to add the environment variables.h]hCalled when a device is added, removed from this class, or a few other things that generate uevents to add the environment variables.}(hj MhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhKhj Mubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhj MhK!hj@Lubj)}(h.``devnode`` Callback to provide the devtmpfs. h](j)}(h ``devnode``h]j)}(hj.Mh]hdevnode}(hj0MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Mubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhK"hj(Mubj)}(hhh]jG)}(h!Callback to provide the devtmpfs.h]h!Callback to provide the devtmpfs.}(hjGMhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjCMhK"hjDMubah}(h]h ]h"]h$]h&]uh1jhj(Mubeh}(h]h ]h"]h$]h&]uh1jhjCMhK"hj@Lubj)}(h0``class_release`` Called to release this class. h](j)}(h``class_release``h]j)}(hjgMh]h class_release}(hjiMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeMubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhK#hjaMubj)}(hhh]jG)}(hCalled to release this class.h]hCalled to release this class.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj|MhK#hj}Mubah}(h]h ]h"]h$]h&]uh1jhjaMubeh}(h]h ]h"]h$]h&]uh1jhj|MhK#hj@Lubj)}(h.``dev_release`` Called to release the device. h](j)}(h``dev_release``h]j)}(hjMh]h dev_release}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhK$hjMubj)}(hhh]jG)}(hCalled to release the device.h]hCalled to release the device.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjMhK$hjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhK$hj@Lubj)}(hB``shutdown_pre`` Called at shut-down time before driver shutdown. h](j)}(h``shutdown_pre``h]j)}(hjMh]h shutdown_pre}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhK%hjMubj)}(hhh]jG)}(h0Called at shut-down time before driver shutdown.h]h0Called at shut-down time before driver shutdown.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjMhK%hjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhK%hj@Lubj)}(h8``ns_type`` Callbacks so sysfs can detemine namespaces. h](j)}(h ``ns_type``h]j)}(hjNh]hns_type}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhK&hj Nubj)}(hhh]jG)}(h+Callbacks so sysfs can detemine namespaces.h]h+Callbacks so sysfs can detemine namespaces.}(hj+NhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj'NhK&hj(Nubah}(h]h ]h"]h$]h&]uh1jhj Nubeh}(h]h ]h"]h$]h&]uh1jhj'NhK&hj@Lubj)}(h=``namespace`` Namespace of the device belongs to this class. h](j)}(h ``namespace``h]j)}(hjKNh]h namespace}(hjMNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjINubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhK'hjENubj)}(hhh]jG)}(h.Namespace of the device belongs to this class.h]h.Namespace of the device belongs to this class.}(hjdNhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj`NhK'hjaNubah}(h]h ]h"]h$]h&]uh1jhjENubeh}(h]h ]h"]h$]h&]uh1jhj`NhK'hj@Lubj)}(h``get_ownership`` Allows class to specify uid/gid of the sysfs directories for the devices belonging to the class. Usually tied to device's namespace. h](j)}(h``get_ownership``h]j)}(hjNh]h get_ownership}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhK*hj~Nubj)}(hhh]jG)}(hAllows class to specify uid/gid of the sysfs directories for the devices belonging to the class. Usually tied to device's namespace.h]hAllows class to specify uid/gid of the sysfs directories for the devices belonging to the class. Usually tied to device’s namespace.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhK(hjNubah}(h]h ]h"]h$]h&]uh1jhj~Nubeh}(h]h ]h"]h$]h&]uh1jhjNhK*hj@Lubj)}(hD``pm`` The default device power management operations of this class.h](j)}(h``pm``h]j)}(hjNh]hpm}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhK*hjNubj)}(hhh]jG)}(h=The default device power management operations of this class.h]h=The default device power management operations of this class.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhK+hjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhK*hj@Lubeh}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhjKhNubjG)}(h**Description**h]jv)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhK.hhhhubjG)}(hX9A class is a higher-level view of a device that abstracts out low-level implementation details. Drivers may see a SCSI disk or an ATA disk, but, at the class level, they are all simply disks. Classes allow user space to work with devices based on what they do, rather than how they are connected or how they work.h]hX9A class is a higher-level view of a device that abstracts out low-level implementation details. Drivers may see a SCSI disk or an ATA disk, but, at the class level, they are all simply disks. Classes allow user space to work with devices based on what they do, rather than how they are connected or how they work.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:14: ./include/linux/device/class.hhK,hhhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌprobe_type (C enum) c.probe_typehNtauh1hhhhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhNubh)}(hhh](h)}(h probe_typeh]h)}(henum probe_typeh](h)}(hjMh]henum}(hj@OhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjj?)j@huh1hhjMOhKhj5OhhubjB)}(hhh]jG)}(hdevice driver probe type to try Device drivers may opt in for special handling of their respective probe routines. This tells the core what to expect and prefer.h]hdevice driver probe type to try Device drivers may opt in for special handling of their respective probe routines. This tells the core what to expect and prefer.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKhjOhhubah}(h]h ]h"]h$]h&]uh1jAhj5OhhhjMOhKubeh}(h]h ](j`enumeh"]h$]h&]jej`jfjOjgjOjhjijjuh1hhhhhhj4OhNubjl)}(hX4**Constants** ``PROBE_DEFAULT_STRATEGY`` Used by drivers that work equally well whether probed synchronously or asynchronously. ``PROBE_PREFER_ASYNCHRONOUS`` Drivers for "slow" devices which probing order is not essential for booting the system may opt into executing their probes asynchronously. ``PROBE_FORCE_SYNCHRONOUS`` Use this to annotate drivers that need their probe routines to run synchronously with driver and device registration (with the exception of -EPROBE_DEFER handling - re-probing always ends up being done asynchronously).h](jG)}(h **Constants**h]jv)}(hjOh]h Constants}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKhjOubj)}(hhh](j)}(hr``PROBE_DEFAULT_STRATEGY`` Used by drivers that work equally well whether probed synchronously or asynchronously. h](j)}(h``PROBE_DEFAULT_STRATEGY``h]j)}(hjOh]hPROBE_DEFAULT_STRATEGY}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK hjOubj)}(hhh]jG)}(hVUsed by drivers that work equally well whether probed synchronously or asynchronously.h]hVUsed by drivers that work equally well whether probed synchronously or asynchronously.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhK hjOubj)}(h``PROBE_PREFER_ASYNCHRONOUS`` Drivers for "slow" devices which probing order is not essential for booting the system may opt into executing their probes asynchronously. h](j)}(h``PROBE_PREFER_ASYNCHRONOUS``h]j)}(hjOh]hPROBE_PREFER_ASYNCHRONOUS}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK%hjOubj)}(hhh]jG)}(hDrivers for "slow" devices which probing order is not essential for booting the system may opt into executing their probes asynchronously.h]hDrivers for “slow” devices which probing order is not essential for booting the system may opt into executing their probes asynchronously.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK#hjPubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjPhK%hjOubj)}(h``PROBE_FORCE_SYNCHRONOUS`` Use this to annotate drivers that need their probe routines to run synchronously with driver and device registration (with the exception of -EPROBE_DEFER handling - re-probing always ends up being done asynchronously).h](j)}(h``PROBE_FORCE_SYNCHRONOUS``h]j)}(hj7Ph]hPROBE_FORCE_SYNCHRONOUS}(hj9PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5Pubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK*hj1Pubj)}(hhh]jG)}(hUse this to annotate drivers that need their probe routines to run synchronously with driver and device registration (with the exception of -EPROBE_DEFER handling - re-probing always ends up being done asynchronously).h]hUse this to annotate drivers that need their probe routines to run synchronously with driver and device registration (with the exception of -EPROBE_DEFER handling - re-probing always ends up being done asynchronously).}(hjPPhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK(hjMPubah}(h]h ]h"]h$]h&]uh1jhj1Pubeh}(h]h ]h"]h$]h&]uh1jhjLPhK*hjOubeh}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhj4OhNubjG)}(h**Description**h]jv)}(hjzPh]h Description}(hj|PhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxPubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK.hhhhubjG)}(hNote that the end goal is to switch the kernel to use asynchronous probing by default, so annotating drivers with ``PROBE_PREFER_ASYNCHRONOUS`` is a temporary measure that allows us to speed up boot process while we are validating the rest of the drivers.h](hrNote that the end goal is to switch the kernel to use asynchronous probing by default, so annotating drivers with }(hjPhhhNhNubj)}(h``PROBE_PREFER_ASYNCHRONOUS``h]hPROBE_PREFER_ASYNCHRONOUS}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubhp is a temporary measure that allows us to speed up boot process while we are validating the rest of the drivers.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK'hhhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_driver (C struct)c.device_driverhNtauh1hhhhhhj4OhNubh)}(hhh](h)}(h device_driverh]h)}(hstruct device_driverh](h)}(hhh]hstruct}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK0ubh)}(h h]h }(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjPhhhjPhK0ubj)}(h device_driverh]j)}(hjPh]h device_driver}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjPhhhjPhK0ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjPhhhjPhK0ubah}(h]jPah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjPhK0hjPhhubjB)}(hhh]jG)}(h!The basic device driver structureh]h!The basic device driver structure}(hj QhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK4hj Qhhubah}(h]h ]h"]h$]h&]uh1jAhjPhhhjPhK0ubeh}(h]h ](j`structeh"]h$]h&]jej`jfj$Qjgj$Qjhjijjuh1hhhhhhj4OhNubjl)}(hX[ **Definition**:: struct device_driver { const char *name; const struct bus_type *bus; struct module *owner; const char *mod_name; bool suppress_bind_attrs; enum probe_type probe_type; const struct of_device_id *of_match_table; const struct acpi_device_id *acpi_match_table; int (*probe) (struct device *dev); void (*sync_state)(struct device *dev); int (*remove) (struct device *dev); void (*shutdown) (struct device *dev); int (*suspend) (struct device *dev, pm_message_t state); int (*resume) (struct device *dev); const struct attribute_group **groups; const struct attribute_group **dev_groups; const struct dev_pm_ops *pm; void (*coredump) (struct device *dev); struct driver_private *p; }; **Members** ``name`` Name of the device driver. ``bus`` The bus which the device of this driver belongs to. ``owner`` The module owner. ``mod_name`` Used for built-in modules. ``suppress_bind_attrs`` Disables bind/unbind via sysfs. ``probe_type`` Type of the probe (synchronous or asynchronous) to use. ``of_match_table`` The open firmware table. ``acpi_match_table`` The ACPI match table. ``probe`` Called to query the existence of a specific device, whether this driver can work with it, and bind the driver to a specific device. ``sync_state`` Called to sync device state to software state after all the state tracking consumers linked to this device (present at the time of late_initcall) have successfully bound to a driver. If the device has no consumers, this function will be called at late_initcall_sync level. If the device has consumers that are never bound to a driver, this function will never get called until they do. ``remove`` Called when the device is removed from the system to unbind a device from this driver. ``shutdown`` Called at shut-down time to quiesce the device. ``suspend`` Called to put the device to sleep mode. Usually to a low power state. ``resume`` Called to bring a device from sleep mode. ``groups`` Default attributes that get created by the driver core automatically. ``dev_groups`` Additional attributes attached to device instance once it is bound to the driver. ``pm`` Power management operations of the device which matched this driver. ``coredump`` Called when sysfs entry is written to. The device driver is expected to call the dev_coredump API resulting in a uevent. ``p`` Driver core's private data, no one other than the driver core can touch this.h](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hj0QhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,Qubh:}(hj,QhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK8hj(Qubj)}(hX"struct device_driver { const char *name; const struct bus_type *bus; struct module *owner; const char *mod_name; bool suppress_bind_attrs; enum probe_type probe_type; const struct of_device_id *of_match_table; const struct acpi_device_id *acpi_match_table; int (*probe) (struct device *dev); void (*sync_state)(struct device *dev); int (*remove) (struct device *dev); void (*shutdown) (struct device *dev); int (*suspend) (struct device *dev, pm_message_t state); int (*resume) (struct device *dev); const struct attribute_group **groups; const struct attribute_group **dev_groups; const struct dev_pm_ops *pm; void (*coredump) (struct device *dev); struct driver_private *p; };h]hX"struct device_driver { const char *name; const struct bus_type *bus; struct module *owner; const char *mod_name; bool suppress_bind_attrs; enum probe_type probe_type; const struct of_device_id *of_match_table; const struct acpi_device_id *acpi_match_table; int (*probe) (struct device *dev); void (*sync_state)(struct device *dev); int (*remove) (struct device *dev); void (*shutdown) (struct device *dev); int (*suspend) (struct device *dev, pm_message_t state); int (*resume) (struct device *dev); const struct attribute_group **groups; const struct attribute_group **dev_groups; const struct dev_pm_ops *pm; void (*coredump) (struct device *dev); struct driver_private *p; };}hjIQsbah}(h]h ]h"]h$]h&]j+j,uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK:hj(QubjG)}(h **Members**h]jv)}(hjZQh]hMembers}(hj\QhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXQubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKPhj(Qubj)}(hhh](j)}(h$``name`` Name of the device driver. h](j)}(h``name``h]j)}(hjyQh]hname}(hj{QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwQubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK6hjsQubj)}(hhh]jG)}(hName of the device driver.h]hName of the device driver.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjQhK6hjQubah}(h]h ]h"]h$]h&]uh1jhjsQubeh}(h]h ]h"]h$]h&]uh1jhjQhK6hjpQubj)}(h<``bus`` The bus which the device of this driver belongs to. h](j)}(h``bus``h]j)}(hjQh]hbus}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK7hjQubj)}(hhh]jG)}(h3The bus which the device of this driver belongs to.h]h3The bus which the device of this driver belongs to.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjQhK7hjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhK7hjpQubj)}(h``owner`` The module owner. h](j)}(h ``owner``h]j)}(hjQh]howner}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK8hjQubj)}(hhh]jG)}(hThe module owner.h]hThe module owner.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjRhK8hjRubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjRhK8hjpQubj)}(h(``mod_name`` Used for built-in modules. h](j)}(h ``mod_name``h]j)}(hj$Rh]hmod_name}(hj&RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"Rubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK9hjRubj)}(hhh]jG)}(hUsed for built-in modules.h]hUsed for built-in modules.}(hj=RhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj9RhK9hj:Rubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhj9RhK9hjpQubj)}(h8``suppress_bind_attrs`` Disables bind/unbind via sysfs. h](j)}(h``suppress_bind_attrs``h]j)}(hj]Rh]hsuppress_bind_attrs}(hj_RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Rubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK:hjWRubj)}(hhh]jG)}(hDisables bind/unbind via sysfs.h]hDisables bind/unbind via sysfs.}(hjvRhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjrRhK:hjsRubah}(h]h ]h"]h$]h&]uh1jhjWRubeh}(h]h ]h"]h$]h&]uh1jhjrRhK:hjpQubj)}(hG``probe_type`` Type of the probe (synchronous or asynchronous) to use. h](j)}(h``probe_type``h]j)}(hjRh]h probe_type}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK;hjRubj)}(hhh]jG)}(h7Type of the probe (synchronous or asynchronous) to use.h]h7Type of the probe (synchronous or asynchronous) to use.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjRhK;hjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhK;hjpQubj)}(h,``of_match_table`` The open firmware table. h](j)}(h``of_match_table``h]j)}(hjRh]hof_match_table}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKhjWSubah}(h]h ]h"]h$]h&]uh1jhj;Subeh}(h]h ]h"]h$]h&]uh1jhjVShK@hjpQubj)}(hX``sync_state`` Called to sync device state to software state after all the state tracking consumers linked to this device (present at the time of late_initcall) have successfully bound to a driver. If the device has no consumers, this function will be called at late_initcall_sync level. If the device has consumers that are never bound to a driver, this function will never get called until they do. h](j)}(h``sync_state``h]j)}(hj{Sh]h sync_state}(hj}ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjySubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKGhjuSubj)}(hhh]jG)}(hXCalled to sync device state to software state after all the state tracking consumers linked to this device (present at the time of late_initcall) have successfully bound to a driver. If the device has no consumers, this function will be called at late_initcall_sync level. If the device has consumers that are never bound to a driver, this function will never get called until they do.h]hXCalled to sync device state to software state after all the state tracking consumers linked to this device (present at the time of late_initcall) have successfully bound to a driver. If the device has no consumers, this function will be called at late_initcall_sync level. If the device has consumers that are never bound to a driver, this function will never get called until they do.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKAhjSubah}(h]h ]h"]h$]h&]uh1jhjuSubeh}(h]h ]h"]h$]h&]uh1jhjShKGhjpQubj)}(hb``remove`` Called when the device is removed from the system to unbind a device from this driver. h](j)}(h ``remove``h]j)}(hjSh]hremove}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKIhjSubj)}(hhh]jG)}(hVCalled when the device is removed from the system to unbind a device from this driver.h]hVCalled when the device is removed from the system to unbind a device from this driver.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKHhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShKIhjpQubj)}(h=``shutdown`` Called at shut-down time to quiesce the device. h](j)}(h ``shutdown``h]j)}(hjSh]hshutdown}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKJhjSubj)}(hhh]jG)}(h/Called at shut-down time to quiesce the device.h]h/Called at shut-down time to quiesce the device.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjThKJhjTubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjThKJhjpQubj)}(hR``suspend`` Called to put the device to sleep mode. Usually to a low power state. h](j)}(h ``suspend``h]j)}(hj(Th]hsuspend}(hj*ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Tubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKLhj"Tubj)}(hhh]jG)}(hECalled to put the device to sleep mode. Usually to a low power state.h]hECalled to put the device to sleep mode. Usually to a low power state.}(hjAThhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKKhj>Tubah}(h]h ]h"]h$]h&]uh1jhj"Tubeh}(h]h ]h"]h$]h&]uh1jhj=ThKLhjpQubj)}(h5``resume`` Called to bring a device from sleep mode. h](j)}(h ``resume``h]j)}(hjbTh]hresume}(hjdThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`Tubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKMhj\Tubj)}(hhh]jG)}(h)Called to bring a device from sleep mode.h]h)Called to bring a device from sleep mode.}(hj{ThhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjwThKMhjxTubah}(h]h ]h"]h$]h&]uh1jhj\Tubeh}(h]h ]h"]h$]h&]uh1jhjwThKMhjpQubj)}(hQ``groups`` Default attributes that get created by the driver core automatically. h](j)}(h ``groups``h]j)}(hjTh]hgroups}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKOhjTubj)}(hhh]jG)}(hEDefault attributes that get created by the driver core automatically.h]hEDefault attributes that get created by the driver core automatically.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKNhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThKOhjpQubj)}(ha``dev_groups`` Additional attributes attached to device instance once it is bound to the driver. h](j)}(h``dev_groups``h]j)}(hjTh]h dev_groups}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKQhjTubj)}(hhh]jG)}(hQAdditional attributes attached to device instance once it is bound to the driver.h]hQAdditional attributes attached to device instance once it is bound to the driver.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKPhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThKQhjpQubj)}(hL``pm`` Power management operations of the device which matched this driver. h](j)}(h``pm``h]j)}(hjUh]hpm}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Uubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKShj Uubj)}(hhh]jG)}(hDPower management operations of the device which matched this driver.h]hDPower management operations of the device which matched this driver.}(hj(UhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKRhj%Uubah}(h]h ]h"]h$]h&]uh1jhj Uubeh}(h]h ]h"]h$]h&]uh1jhj$UhKShjpQubj)}(h``coredump`` Called when sysfs entry is written to. The device driver is expected to call the dev_coredump API resulting in a uevent. h](j)}(h ``coredump``h]j)}(hjIUh]hcoredump}(hjKUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGUubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKVhjCUubj)}(hhh]jG)}(hxCalled when sysfs entry is written to. The device driver is expected to call the dev_coredump API resulting in a uevent.h]hxCalled when sysfs entry is written to. The device driver is expected to call the dev_coredump API resulting in a uevent.}(hjbUhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKThj_Uubah}(h]h ]h"]h$]h&]uh1jhjCUubeh}(h]h ]h"]h$]h&]uh1jhj^UhKVhjpQubj)}(hS``p`` Driver core's private data, no one other than the driver core can touch this.h](j)}(h``p``h]j)}(hjUh]hp}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKWhj}Uubj)}(hhh]jG)}(hMDriver core's private data, no one other than the driver core can touch this.h]hODriver core’s private data, no one other than the driver core can touch this.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjUhKWhjUubah}(h]h ]h"]h$]h&]uh1jhj}Uubeh}(h]h ]h"]h$]h&]uh1jhjUhKWhjpQubeh}(h]h ]h"]h$]h&]uh1jhj(Qubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhj4OhNubjG)}(h**Description**h]jv)}(hjUh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhK[hhhhubjG)}(hXThe device driver-model tracks all of the drivers known to the system. The main reason for this tracking is to enable the driver core to match up drivers with new devices. Once drivers are known objects within the system, however, a number of other things become possible. Device drivers can export information and configuration variables that are independent of any specific device.h]hXThe device driver-model tracks all of the drivers known to the system. The main reason for this tracking is to enable the driver core to match up drivers with new devices. Once drivers are known objects within the system, however, a number of other things become possible. Device drivers can export information and configuration variables that are independent of any specific device.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:17: ./include/linux/device/driver.hhKYhhhhubeh}(h](the-basic-device-driver-model-structuresah ]h"](the basic device driver-model structuresah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hDevice Drivers Baseh]hDevice Drivers Base}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdriver_init (C function) c.driver_inithNtauh1hhjUhhhNhNubh)}(hhh](h)}(hvoid driver_init (void)h]h)}(hvoid driver_init(void)h](j)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:23: ./drivers/base/init.chKubh)}(h h]h }(hj+VhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjVhhhj*VhKubj)}(h driver_inith]j)}(h driver_inith]h driver_init}(hj=VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Vubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjVhhhj*VhKubj)}(h(void)h]j!)}(hvoidh]j)}(hvoidh]hvoid}(hjYVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUVubah}(h]h ]h"]h$]h&]noemphj+j,uh1j hjQVubah}(h]h ]h"]h$]h&]j+j,uh1jhjVhhhj*VhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjVhhhj*VhKubah}(h]jVah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj*VhKhjVhhubjB)}(hhh]jG)}(hinitialize driver model.h]hinitialize driver model.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:23: ./drivers/base/init.chKhjVhhubah}(h]h ]h"]h$]h&]uh1jAhjVhhhj*VhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjVjgjVjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``void`` no arguments **Description** Call the driver model init functions to initialize their subsystems. Called early from init/main.c.h](jG)}(h**Parameters**h]jv)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:23: ./drivers/base/init.chKhjVubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hjVh]hvoid}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:23: ./drivers/base/init.chKhjVubj)}(hhh]jG)}(h no argumentsh]h no arguments}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjVhKhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhKhjVubah}(h]h ]h"]h$]h&]uh1jhjVubjG)}(h**Description**h]jv)}(hjVh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:23: ./drivers/base/init.chKhjVubjG)}(hcCall the driver model init functions to initialize their subsystems. Called early from init/main.c.h]hcCall the driver model init functions to initialize their subsystems. Called early from init/main.c.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:23: ./drivers/base/init.chKhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'driver_find_device_by_name (C function)c.driver_find_device_by_namehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h^struct device * driver_find_device_by_name (const struct device_driver *drv, const char *name)h]h)}(h\struct device *driver_find_device_by_name(const struct device_driver *drv, const char *name)h](h)}(hhh]hstruct}(hjDWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@Whhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKubh)}(h h]h }(hjRWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@WhhhjQWhKubh)}(hhh]j)}(hdeviceh]hdevice}(hjcWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Wubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjeWmodnameN classnameNj^ja)}jd]jg)}jZdriver_find_device_by_namesbc.driver_find_device_by_nameasbuh1hhj@WhhhjQWhKubh)}(h h]h }(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@WhhhjQWhKubj{)}(hj~h]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj@WhhhjQWhKubj)}(hdriver_find_device_by_nameh]j)}(hjWh]hdriver_find_device_by_name}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj@WhhhjQWhKubj)}(h3(const struct device_driver *drv, const char *name)h](j!)}(hconst struct device_driver *drvh](h)}(hj8h]hconst}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubh)}(h h]h }(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjWubh)}(hhh]hstruct}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubh)}(h h]h }(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjWubh)}(hhh]j)}(h device_driverh]h device_driver}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjWmodnameN classnameNj^ja)}jd]jWc.driver_find_device_by_nameasbuh1hhjWubh)}(h h]h }(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjWubj{)}(hj~h]h*}(hj#XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjWubj)}(hdrvh]hdrv}(hj0XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjWubj!)}(hconst char *nameh](h)}(hj8h]hconst}(hjIXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEXubh)}(h h]h }(hjVXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjEXubj)}(hcharh]hchar}(hjdXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEXubh)}(h h]h }(hjrXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjEXubj{)}(hj~h]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjEXubj)}(hnameh]hname}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEXubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjWubeh}(h]h ]h"]h$]h&]j+j,uh1jhj@WhhhjQWhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjj?)j@huh1hhjQWhKhj9WhhubjB)}(hhh]jG)}(hDdevice iterator for locating a particular device of a specific name.h]hDdevice iterator for locating a particular device of a specific name.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjXhhubah}(h]h ]h"]h$]h&]uh1jAhj9WhhhjQWhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjXjgjXjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``const struct device_driver *drv`` the driver we're iterating ``const char *name`` name of the device to matchh](jG)}(h**Parameters**h]jv)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjXubj)}(hhh](j)}(h?``const struct device_driver *drv`` the driver we're iterating h](j)}(h#``const struct device_driver *drv``h]j)}(hjXh]hconst struct device_driver *drv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjXubj)}(hhh]jG)}(hthe driver we're iteratingh]hthe driver we’re iterating}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj YhKhjYubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhj YhKhjXubj)}(h0``const char *name`` name of the device to matchh](j)}(h``const char *name``h]j)}(hj1Yh]hconst char *name}(hj3YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/Yubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhj+Yubj)}(hhh]jG)}(hname of the device to matchh]hname of the device to match}(hjJYhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjGYubah}(h]h ]h"]h$]h&]uh1jhj+Yubeh}(h]h ]h"]h$]h&]uh1jhjFYhKhjXubeh}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*driver_find_device_by_of_node (C function)c.driver_find_device_by_of_nodehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hmstruct device * driver_find_device_by_of_node (const struct device_driver *drv, const struct device_node *np)h]h)}(hkstruct device *driver_find_device_by_of_node(const struct device_driver *drv, const struct device_node *np)h](h)}(hhh]hstruct}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKubh)}(h h]h }(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjYhhhjYhKubh)}(hhh]j)}(hdeviceh]hdevice}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjYmodnameN classnameNj^ja)}jd]jg)}jZdriver_find_device_by_of_nodesbc.driver_find_device_by_of_nodeasbuh1hhjYhhhjYhKubh)}(h h]h }(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjYhhhjYhKubj{)}(hj~h]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjYhhhjYhKubj)}(hdriver_find_device_by_of_nodeh]j)}(hjYh]hdriver_find_device_by_of_node}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjYhhhjYhKubj)}(h?(const struct device_driver *drv, const struct device_node *np)h](j!)}(hconst struct device_driver *drvh](h)}(hj8h]hconst}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubh)}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjZubh)}(hhh]hstruct}(hj ZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubh)}(h h]h }(hj-ZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjZubh)}(hhh]j)}(h device_driverh]h device_driver}(hj>ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Zubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj@ZmodnameN classnameNj^ja)}jd]jYc.driver_find_device_by_of_nodeasbuh1hhjZubh)}(h h]h }(hj\ZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjZubj{)}(hj~h]h*}(hjjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjZubj)}(hdrvh]hdrv}(hjwZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjYubj!)}(hconst struct device_node *nph](h)}(hj8h]hconst}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubh)}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjZubh)}(hhh]hstruct}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubh)}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjZubh)}(hhh]j)}(h device_nodeh]h device_node}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjZmodnameN classnameNj^ja)}jd]jYc.driver_find_device_by_of_nodeasbuh1hhjZubh)}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjZubj{)}(hj~h]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjZubj)}(hnph]hnp}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjYubeh}(h]h ]h"]h$]h&]j+j,uh1jhjYhhhjYhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjYhhhjYhKubah}(h]j~Yah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjYhKhjYhhubjB)}(hhh]jG)}(hDdevice iterator for locating a particular device by of_node pointer.h]hDdevice iterator for locating a particular device by of_node pointer.}(hj,[hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhj)[hhubah}(h]h ]h"]h$]h&]uh1jAhjYhhhjYhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjD[jgjD[jhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``const struct device_driver *drv`` the driver we're iterating ``const struct device_node *np`` of_node pointer to match.h](jG)}(h**Parameters**h]jv)}(hjN[h]h Parameters}(hjP[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjL[ubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjH[ubj)}(hhh](j)}(h?``const struct device_driver *drv`` the driver we're iterating h](j)}(h#``const struct device_driver *drv``h]j)}(hjm[h]hconst struct device_driver *drv}(hjo[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk[ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjg[ubj)}(hhh]jG)}(hthe driver we're iteratingh]hthe driver we’re iterating}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj[hKhj[ubah}(h]h ]h"]h$]h&]uh1jhjg[ubeh}(h]h ]h"]h$]h&]uh1jhj[hKhjd[ubj)}(h:``const struct device_node *np`` of_node pointer to match.h](j)}(h ``const struct device_node *np``h]j)}(hj[h]hconst struct device_node *np}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhj[ubj)}(hhh]jG)}(hof_node pointer to match.h]hof_node pointer to match.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hKhjd[ubeh}(h]h ]h"]h$]h&]uh1jhjH[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)driver_find_device_by_fwnode (C function)c.driver_find_device_by_fwnodehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hlstruct device * driver_find_device_by_fwnode (struct device_driver *drv, const struct fwnode_handle *fwnode)h]h)}(hjstruct device *driver_find_device_by_fwnode(struct device_driver *drv, const struct fwnode_handle *fwnode)h](h)}(hhh]hstruct}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKubh)}(h h]h }(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj[hhhj \hKubh)}(hhh]j)}(hdeviceh]hdevice}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj!\modnameN classnameNj^ja)}jd]jg)}jZdriver_find_device_by_fwnodesbc.driver_find_device_by_fwnodeasbuh1hhj[hhhj \hKubh)}(h h]h }(hj@\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj[hhhj \hKubj{)}(hj~h]h*}(hjN\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj[hhhj \hKubj)}(hdriver_find_device_by_fwnodeh]j)}(hj=\h]hdriver_find_device_by_fwnode}(hj_\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[\ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj[hhhj \hKubj)}(h?(struct device_driver *drv, const struct fwnode_handle *fwnode)h](j!)}(hstruct device_driver *drvh](h)}(hhh]hstruct}(hjz\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv\ubh)}(h h]h }(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjv\ubh)}(hhh]j)}(h device_driverh]h device_driver}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj\modnameN classnameNj^ja)}jd]j;\c.driver_find_device_by_fwnodeasbuh1hhjv\ubh)}(h h]h }(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjv\ubj{)}(hj~h]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjv\ubj)}(hdrvh]hdrv}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv\ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjr\ubj!)}(h"const struct fwnode_handle *fwnodeh](h)}(hj8h]hconst}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubh)}(h h]h }(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj\ubh)}(hhh]hstruct}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubh)}(h h]h }(hj]hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj\ubh)}(hhh]j)}(h fwnode_handleh]h fwnode_handle}(hj#]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ]ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj%]modnameN classnameNj^ja)}jd]j;\c.driver_find_device_by_fwnodeasbuh1hhj\ubh)}(h h]h }(hjA]hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj\ubj{)}(hj~h]h*}(hjO]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj\ubj)}(hfwnodeh]hfwnode}(hj\]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjr\ubeh}(h]h ]h"]h$]h&]j+j,uh1jhj[hhhj \hKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj[hhhj \hKubah}(h]j[ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj \hKhj[hhubjB)}(hhh]jG)}(hCdevice iterator for locating a particular device by fwnode pointer.h]hCdevice iterator for locating a particular device by fwnode pointer.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhj]hhubah}(h]h ]h"]h$]h&]uh1jAhj[hhhj \hKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj]jgj]jhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct device_driver *drv`` the driver we're iterating ``const struct fwnode_handle *fwnode`` fwnode pointer to match.h](jG)}(h**Parameters**h]jv)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhj]ubj)}(hhh](j)}(h9``struct device_driver *drv`` the driver we're iterating h](j)}(h``struct device_driver *drv``h]j)}(hj]h]hstruct device_driver *drv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhj]ubj)}(hhh]jG)}(hthe driver we're iteratingh]hthe driver we’re iterating}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj]hKhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hKhj]ubj)}(h?``const struct fwnode_handle *fwnode`` fwnode pointer to match.h](j)}(h&``const struct fwnode_handle *fwnode``h]j)}(hj^h]h"const struct fwnode_handle *fwnode}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhj]ubj)}(hhh]jG)}(hfwnode pointer to match.h]hfwnode pointer to match.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhj^ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj^hKhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'driver_find_device_by_devt (C function)c.driver_find_device_by_devthNtauh1hhjUhhhNhNubh)}(hhh](h)}(hXstruct device * driver_find_device_by_devt (const struct device_driver *drv, dev_t devt)h]h)}(hVstruct device *driver_find_device_by_devt(const struct device_driver *drv, dev_t devt)h](h)}(hhh]hstruct}(hjZ^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjV^hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKubh)}(h h]h }(hjh^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjV^hhhjg^hKubh)}(hhh]j)}(hdeviceh]hdevice}(hjy^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv^ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj{^modnameN classnameNj^ja)}jd]jg)}jZdriver_find_device_by_devtsbc.driver_find_device_by_devtasbuh1hhjV^hhhjg^hKubh)}(h h]h }(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjV^hhhjg^hKubj{)}(hj~h]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjV^hhhjg^hKubj)}(hdriver_find_device_by_devth]j)}(hj^h]hdriver_find_device_by_devt}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjV^hhhjg^hKubj)}(h-(const struct device_driver *drv, dev_t devt)h](j!)}(hconst struct device_driver *drvh](h)}(hj8h]hconst}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubh)}(h h]h }(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj^ubh)}(hhh]hstruct}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubh)}(h h]h }(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj^ubh)}(hhh]j)}(h device_driverh]h device_driver}(hj _hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj _ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj_modnameN classnameNj^ja)}jd]j^c.driver_find_device_by_devtasbuh1hhj^ubh)}(h h]h }(hj+_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj^ubj{)}(hj~h]h*}(hj9_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj^ubj)}(hdrvh]hdrv}(hjF_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj^ubj!)}(h dev_t devth](h)}(hhh]j)}(hdev_th]hdev_t}(hjb_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj__ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjd_modnameN classnameNj^ja)}jd]j^c.driver_find_device_by_devtasbuh1hhj[_ubh)}(h h]h }(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj[_ubj)}(hdevth]hdevt}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[_ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj^ubeh}(h]h ]h"]h$]h&]j+j,uh1jhjV^hhhjg^hKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjR^hhhjg^hKubah}(h]jM^ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjg^hKhjO^hhubjB)}(hhh]jG)}(h9device iterator for locating a particular device by devt.h]h9device iterator for locating a particular device by devt.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhj_hhubah}(h]h ]h"]h$]h&]uh1jAhjO^hhhjg^hKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj_jgj_jhjijjuh1hhhhjUhNhNubjl)}(hy**Parameters** ``const struct device_driver *drv`` the driver we're iterating ``dev_t devt`` devt pointer to match.h](jG)}(h**Parameters**h]jv)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhj_ubj)}(hhh](j)}(h?``const struct device_driver *drv`` the driver we're iterating h](j)}(h#``const struct device_driver *drv``h]j)}(hj_h]hconst struct device_driver *drv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhj_ubj)}(hhh]jG)}(hthe driver we're iteratingh]hthe driver we’re iterating}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj`hKhj`ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj`hKhj_ubj)}(h%``dev_t devt`` devt pointer to match.h](j)}(h``dev_t devt``h]j)}(hj2`h]h dev_t devt}(hj4`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0`ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhj,`ubj)}(hhh]jG)}(hdevt pointer to match.h]hdevt pointer to match.}(hjK`hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjH`ubah}(h]h ]h"]h$]h&]uh1jhj,`ubeh}(h]h ]h"]h$]h&]uh1jhjG`hKhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+driver_find_device_by_acpi_dev (C function) c.driver_find_device_by_acpi_devhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hpstruct device * driver_find_device_by_acpi_dev (const struct device_driver *drv, const struct acpi_device *adev)h]h)}(hnstruct device *driver_find_device_by_acpi_dev(const struct device_driver *drv, const struct acpi_device *adev)h](h)}(hhh]hstruct}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKubh)}(h h]h }(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj`hhhj`hKubh)}(hhh]j)}(hdeviceh]hdevice}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj`modnameN classnameNj^ja)}jd]jg)}jZdriver_find_device_by_acpi_devsb c.driver_find_device_by_acpi_devasbuh1hhj`hhhj`hKubh)}(h h]h }(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj`hhhj`hKubj{)}(hj~h]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj`hhhj`hKubj)}(hdriver_find_device_by_acpi_devh]j)}(hj`h]hdriver_find_device_by_acpi_dev}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj`hhhj`hKubj)}(hA(const struct device_driver *drv, const struct acpi_device *adev)h](j!)}(hconst struct device_driver *drvh](h)}(hj8h]hconst}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubh)}(h h]h }(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjaubh)}(hhh]hstruct}(hj!ahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubh)}(h h]h }(hj.ahhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjaubh)}(hhh]j)}(h device_driverh]h device_driver}(hj?ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj?)j@huh1hhj`hKhj`hhubjB)}(hhh]jG)}(hTdevice iterator for locating a particular device matching the ACPI_COMPANION device.h]hTdevice iterator for locating a particular device matching the ACPI_COMPANION device.}(hj-bhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhj*bhhubah}(h]h ]h"]h$]h&]uh1jAhj`hhhj`hKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjEbjgjEbjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``const struct device_driver *drv`` the driver we're iterating ``const struct acpi_device *adev`` ACPI_COMPANION device to match.h](jG)}(h**Parameters**h]jv)}(hjObh]h Parameters}(hjQbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMbubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjIbubj)}(hhh](j)}(h?``const struct device_driver *drv`` the driver we're iterating h](j)}(h#``const struct device_driver *drv``h]j)}(hjnbh]hconst struct device_driver *drv}(hjpbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlbubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjhbubj)}(hhh]jG)}(hthe driver we're iteratingh]hthe driver we’re iterating}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjbhKhjbubah}(h]h ]h"]h$]h&]uh1jhjhbubeh}(h]h ]h"]h$]h&]uh1jhjbhKhjebubj)}(hB``const struct acpi_device *adev`` ACPI_COMPANION device to match.h](j)}(h"``const struct acpi_device *adev``h]j)}(hjbh]hconst struct acpi_device *adev}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjbubj)}(hhh]jG)}(hACPI_COMPANION device to match.h]hACPI_COMPANION device to match.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhKhjebubeh}(h]h ]h"]h$]h&]uh1jhjIbubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmodule_driver (C macro)c.module_driverhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h module_driverh]h)}(h module_driverh]j)}(h module_driverh]j)}(hjbh]h module_driver}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjbhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhMubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjbhhhjchMubah}(h]jbah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjchMhjbhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhjbhhhjchMubeh}(h]h ](j`macroeh"]h$]h&]jej`jfj1cjgj1cjhjijjuh1hhhhjUhNhNubjG)}(h;``module_driver (__driver, __register, __unregister, ...)``h]j)}(hj7ch]h7module_driver (__driver, __register, __unregister, ...)}(hj9chhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5cubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhMhjUhhubj;)}(hHelper macro for drivers that don't do anything special in module init/exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it replaces module_init() and module_exit(). h]jG)}(hHelper macro for drivers that don't do anything special in module init/exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it replaces module_init() and module_exit().h]hHelper macro for drivers that don’t do anything special in module init/exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it replaces module_init() and module_exit().}(hjQchhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjMcubah}(h]h ]h"]h$]h&]uh1j:hj_chKhjUhhubjl)}(hXf**Parameters** ``__driver`` driver name ``__register`` register function for this driver type ``__unregister`` unregister function for this driver type ``...`` Additional arguments to be passed to __register and __unregister. **Description** Use this macro to construct bus specific macros for registering drivers, and do not use it on its own.h](jG)}(h**Parameters**h]jv)}(hjlch]h Parameters}(hjnchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjcubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjfcubj)}(hhh](j)}(h``__driver`` driver name h](j)}(h ``__driver``h]j)}(hjch]h__driver}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjcubj)}(hhh]jG)}(h driver nameh]h driver name}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjchKhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchKhjcubj)}(h6``__register`` register function for this driver type h](j)}(h``__register``h]j)}(hjch]h __register}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjcubj)}(hhh]jG)}(h®ister function for this driver typeh]h®ister function for this driver type}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjchKhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchKhjcubj)}(h:``__unregister`` unregister function for this driver type h](j)}(h``__unregister``h]j)}(hjch]h __unregister}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjcubj)}(hhh]jG)}(h(unregister function for this driver typeh]h(unregister function for this driver type}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjdhKhjdubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjdhKhjcubj)}(hJ``...`` Additional arguments to be passed to __register and __unregister. h](j)}(h``...``h]j)}(hj6dh]h...}(hj8dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4dubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhj0dubj)}(hhh]jG)}(hAAdditional arguments to be passed to __register and __unregister.h]hAAdditional arguments to be passed to __register and __unregister.}(hjOdhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjKdhKhjLdubah}(h]h ]h"]h$]h&]uh1jhj0dubeh}(h]h ]h"]h$]h&]uh1jhjKdhKhjcubeh}(h]h ]h"]h$]h&]uh1jhjfcubjG)}(h**Description**h]jv)}(hjqdh]h Description}(hjsdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjodubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjfcubjG)}(hfUse this macro to construct bus specific macros for registering drivers, and do not use it on its own.h]hfUse this macro to construct bus specific macros for registering drivers, and do not use it on its own.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhKhjfcubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌbuiltin_driver (C macro)c.builtin_driverhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hbuiltin_driverh]h)}(hbuiltin_driverh]j)}(hbuiltin_driverh]j)}(hjdh]hbuiltin_driver}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjdhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhMubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjdhhhjdhMubah}(h]jdah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjdhMhjdhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhjdhhhjdhMubeh}(h]h ](j`macroeh"]h$]h&]jej`jfjdjgjdjhjijjuh1hhhhjUhNhNubjG)}(h.``builtin_driver (__driver, __register, ...)``h]j)}(hjdh]h*builtin_driver (__driver, __register, ...)}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhMhjUhhubj;)}(hXqHelper macro for drivers that don't do anything special in init and have no exit. This eliminates some boilerplate. Each driver may only use this macro once, and calling it replaces device_initcall (or in some cases, the legacy __initcall). This is meant to be a direct parallel of module_driver() above but without the __exit stuff that is not used for builtin cases. h]jG)}(hXpHelper macro for drivers that don't do anything special in init and have no exit. This eliminates some boilerplate. Each driver may only use this macro once, and calling it replaces device_initcall (or in some cases, the legacy __initcall). This is meant to be a direct parallel of module_driver() above but without the __exit stuff that is not used for builtin cases.h]hXrHelper macro for drivers that don’t do anything special in init and have no exit. This eliminates some boilerplate. Each driver may only use this macro once, and calling it replaces device_initcall (or in some cases, the legacy __initcall). This is meant to be a direct parallel of module_driver() above but without the __exit stuff that is not used for builtin cases.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhMhjeubah}(h]h ]h"]h$]h&]uh1j:hjehMhjUhhubjl)}(hX**Parameters** ``__driver`` driver name ``__register`` register function for this driver type ``...`` Additional arguments to be passed to __register **Description** Use this macro to construct bus specific macros for registering drivers, and do not use it on its own.h](jG)}(h**Parameters**h]jv)}(hj!eh]h Parameters}(hj#ehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhMhjeubj)}(hhh](j)}(h``__driver`` driver name h](j)}(h ``__driver``h]j)}(hj@eh]h__driver}(hjBehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>eubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhMhj:eubj)}(hhh]jG)}(h driver nameh]h driver name}(hjYehhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjUehMhjVeubah}(h]h ]h"]h$]h&]uh1jhj:eubeh}(h]h ]h"]h$]h&]uh1jhjUehMhj7eubj)}(h6``__register`` register function for this driver type h](j)}(h``__register``h]j)}(hjyeh]h __register}(hj{ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjweubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhMhjseubj)}(hhh]jG)}(h®ister function for this driver typeh]h®ister function for this driver type}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjseubeh}(h]h ]h"]h$]h&]uh1jhjehMhj7eubj)}(h8``...`` Additional arguments to be passed to __register h](j)}(h``...``h]j)}(hjeh]h...}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhMhjeubj)}(hhh]jG)}(h/Additional arguments to be passed to __registerh]h/Additional arguments to be passed to __register}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMhj7eubeh}(h]h ]h"]h$]h&]uh1jhjeubjG)}(h**Description**h]jv)}(hjeh]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhMhjeubjG)}(hfUse this macro to construct bus specific macros for registering drivers, and do not use it on its own.h]hfUse this macro to construct bus specific macros for registering drivers, and do not use it on its own.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhg/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:26: ./include/linux/device/driver.hhMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ driver_set_override (C function)c.driver_set_overridehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h^int driver_set_override (struct device *dev, const char **override, const char *s, size_t len)h]h)}(h]int driver_set_override(struct device *dev, const char **override, const char *s, size_t len)h](j)}(hinth]hint}(hj2fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.fhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chK0ubh)}(h h]h }(hjAfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.fhhhj@fhK0ubj)}(hdriver_set_overrideh]j)}(hdriver_set_overrideh]hdriver_set_override}(hjSfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOfubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj.fhhhj@fhK0ubj)}(hF(struct device *dev, const char **override, const char *s, size_t len)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjofhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkfubh)}(h h]h }(hj|fhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkfubh)}(hhh]j)}(hdeviceh]hdevice}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjfmodnameN classnameNj^ja)}jd]jg)}jZjUfsbc.driver_set_overrideasbuh1hhjkfubh)}(h h]h }(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkfubj{)}(hj~h]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjkfubj)}(hdevh]hdev}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkfubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjgfubj!)}(hconst char **overrideh](h)}(hj8h]hconst}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubh)}(h h]h }(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjfubj)}(hcharh]hchar}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(h h]h }(hj ghhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjfubj{)}(hj~h]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjfubj{)}(hj~h]h*}(hj%ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjfubj)}(hoverrideh]hoverride}(hj2ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjgfubj!)}(h const char *sh](h)}(hj8h]hconst}(hjKghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGgubh)}(h h]h }(hjXghhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjGgubj)}(hcharh]hchar}(hjfghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGgubh)}(h h]h }(hjtghhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjGgubj{)}(hj~h]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjGgubj)}(hsh]hs}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGgubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjgfubj!)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjgmodnameN classnameNj^ja)}jd]jfc.driver_set_overrideasbuh1hhjgubh)}(h h]h }(hjghhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjgubj)}(hlenh]hlen}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjgfubeh}(h]h ]h"]h$]h&]j+j,uh1jhj.fhhhj@fhK0ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj*fhhhj@fhK0ubah}(h]j%fah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj@fhK0hj'fhhubjB)}(hhh]jG)}(h'Helper to set or clear driver override.h]h'Helper to set or clear driver override.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chK"hjghhubah}(h]h ]h"]h$]h&]uh1jAhj'fhhhj@fhK0ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjhjgjhjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *dev`` Device to change ``const char **override`` Address of string to change (e.g. :c:type:`device->driver_override `); The contents will be freed and hold newly allocated override. ``const char *s`` NUL-terminated string, new driver name to force a match, pass empty string to clear it ("" or "\n", where the latter is only for sysfs interface). ``size_t len`` length of **s** **Description** Helper to set or clear driver override in a device, intended for the cases when the driver_override field is allocated by driver/bus code. **Return** 0 on success or a negative error code on failure.h](jG)}(h**Parameters**h]jv)}(hj#hh]h Parameters}(hj%hhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!hubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chK&hjhubj)}(hhh](j)}(h(``struct device *dev`` Device to change h](j)}(h``struct device *dev``h]j)}(hjBhh]hstruct device *dev}(hjDhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@hubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chK#hjdriver_override `); The contents will be freed and hold newly allocated override. h](j)}(h``const char **override``h]j)}(hj{hh]hconst char **override}(hj}hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyhubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chK%hjuhubj)}(hhh]jG)}(hAddress of string to change (e.g. :c:type:`device->driver_override `); The contents will be freed and hold newly allocated override.h](h"Address of string to change (e.g. }(hjhhhhNhNubh)}(h*:c:type:`device->driver_override `h]j)}(hjhh]hdevice->driver_override}(hjhhhhNhNubah}(h]h ](xrefj`c-typeeh"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]refdocdriver-api/infrastructure refdomainj`reftypetype refexplicitrefwarnj^ja)}jd]sb reftargetdeviceuh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chK$hjhubh@); The contents will be freed and hold newly allocated override.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhjhhK$hjhubah}(h]h ]h"]h$]h&]uh1jhjuhubeh}(h]h ]h"]h$]h&]uh1jhjhhK%hj9hubj)}(h``const char *s`` NUL-terminated string, new driver name to force a match, pass empty string to clear it ("" or "\n", where the latter is only for sysfs interface). h](j)}(h``const char *s``h]j)}(hjhh]h const char *s}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chK(hjhubj)}(hhh]jG)}(hNUL-terminated string, new driver name to force a match, pass empty string to clear it ("" or "\n", where the latter is only for sysfs interface).h]hNUL-terminated string, new driver name to force a match, pass empty string to clear it (”” or “n”, where the latter is only for sysfs interface).}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chK&hjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhK(hj9hubj)}(h``size_t len`` length of **s** h](j)}(h``size_t len``h]j)}(hjih]h size_t len}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chK)hjiubj)}(hhh]jG)}(hlength of **s**h](h length of }(hj1ihhhNhNubjv)}(h**s**h]hs}(hj9ihhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1iubeh}(h]h ]h"]h$]h&]uh1jFhj-ihK)hj.iubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhj-ihK)hj9hubeh}(h]h ]h"]h$]h&]uh1jhjhubjG)}(h**Description**h]jv)}(hjaih]h Description}(hjcihhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_iubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chK+hjhubjG)}(hHelper to set or clear driver override in a device, intended for the cases when the driver_override field is allocated by driver/bus code.h]hHelper to set or clear driver override in a device, intended for the cases when the driver_override field is allocated by driver/bus code.}(hjwihhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chK+hjhubjG)}(h **Return**h]jv)}(hjih]hReturn}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chK.hjhubjG)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chK.hjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#driver_for_each_device (C function)c.driver_for_each_devicehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hjint driver_for_each_device (struct device_driver *drv, struct device *start, void *data, device_iter_t fn)h]h)}(hiint driver_for_each_device(struct device_driver *drv, struct device *start, void *data, device_iter_t fn)h](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKuubh)}(h h]h }(hjihhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjihhhjihKuubj)}(hdriver_for_each_deviceh]j)}(hdriver_for_each_deviceh]hdriver_for_each_device}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjihhhjihKuubj)}(hO(struct device_driver *drv, struct device *start, void *data, device_iter_t fn)h](j!)}(hstruct device_driver *drvh](h)}(hhh]hstruct}(hj jhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubh)}(h h]h }(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjjubh)}(hhh]j)}(h device_driverh]h device_driver}(hj(jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%jubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj*jmodnameN classnameNj^ja)}jd]jg)}jZjisbc.driver_for_each_deviceasbuh1hhjjubh)}(h h]h }(hjHjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjjubj{)}(hj~h]h*}(hjVjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjjubj)}(hdrvh]hdrv}(hjcjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjjubj!)}(hstruct device *starth](h)}(hhh]hstruct}(hj|jhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxjubh)}(h h]h }(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjxjubh)}(hhh]j)}(hdeviceh]hdevice}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjjmodnameN classnameNj^ja)}jd]jDjc.driver_for_each_deviceasbuh1hhjxjubh)}(h h]h }(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjxjubj{)}(hj~h]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjxjubj)}(hstarth]hstart}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjjubj!)}(h void *datah](j)}(hvoidh]hvoid}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(h h]h }(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjjubj{)}(hj~h]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjjubj)}(hdatah]hdata}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjjubj!)}(hdevice_iter_t fnh](h)}(hhh]j)}(h device_iter_th]h device_iter_t}(hj1khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.kubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj3kmodnameN classnameNj^ja)}jd]jDjc.driver_for_each_deviceasbuh1hhj*kubh)}(h h]h }(hjOkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj*kubj)}(hfnh]hfn}(hj]khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*kubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjihhhjihKuubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjihhhjihKuubah}(h]jiah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjihKuhjihhubjB)}(hhh]jG)}(h'Iterator for devices bound to a driver.h]h'Iterator for devices bound to a driver.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKmhjkhhubah}(h]h ]h"]h$]h&]uh1jAhjihhhjihKuubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjkjgjkjhjijjuh1hhhhjUhNhNubjl)}(hX<**Parameters** ``struct device_driver *drv`` Driver we're iterating. ``struct device *start`` Device to begin with ``void *data`` Data to pass to the callback. ``device_iter_t fn`` Function to call for each device. **Description** Iterate over the **drv**'s list of devices calling **fn** for each one.h](jG)}(h**Parameters**h]jv)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKqhjkubj)}(hhh](j)}(h6``struct device_driver *drv`` Driver we're iterating. h](j)}(h``struct device_driver *drv``h]j)}(hjkh]hstruct device_driver *drv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKnhjkubj)}(hhh]jG)}(hDriver we're iterating.h]hDriver we’re iterating.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjkhKnhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhKnhjkubj)}(h.``struct device *start`` Device to begin with h](j)}(h``struct device *start``h]j)}(hjlh]hstruct device *start}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKohjkubj)}(hhh]jG)}(hDevice to begin withh]hDevice to begin with}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjlhKohjlubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjlhKohjkubj)}(h-``void *data`` Data to pass to the callback. h](j)}(h``void *data``h]j)}(hj:lh]h void *data}(hjj?)j@huh1hhj$mhKhj mhhubjB)}(hhh]jG)}(h1device iterator for locating a particular device.h]h1device iterator for locating a particular device.}(hjBohhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhj?ohhubah}(h]h ]h"]h$]h&]uh1jAhj mhhhj$mhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjZojgjZojhjijjuh1hhhhjUhNhNubjl)}(hXu**Parameters** ``const struct device_driver *drv`` The device's driver ``struct device *start`` Device to begin with ``const void *data`` Data to pass to match function ``device_match_t match`` Callback function to check device **Description** This is similar to the driver_for_each_device() function above, but it returns a reference to a device that is 'found' for later use, as determined by the **match** callback. The callback should return 0 if the device doesn't match and non-zero if it does. If the callback returns non-zero, this function will return to the caller and not iterate over any more devices.h](jG)}(h**Parameters**h]jv)}(hjdoh]h Parameters}(hjfohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjboubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhj^oubj)}(hhh](j)}(h8``const struct device_driver *drv`` The device's driver h](j)}(h#``const struct device_driver *drv``h]j)}(hjoh]hconst struct device_driver *drv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhj}oubj)}(hhh]jG)}(hThe device's driverh]hThe device’s driver}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjohKhjoubah}(h]h ]h"]h$]h&]uh1jhj}oubeh}(h]h ]h"]h$]h&]uh1jhjohKhjzoubj)}(h.``struct device *start`` Device to begin with h](j)}(h``struct device *start``h]j)}(hjoh]hstruct device *start}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhjoubj)}(hhh]jG)}(hDevice to begin withh]hDevice to begin with}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjohKhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohKhjzoubj)}(h4``const void *data`` Data to pass to match function h](j)}(h``const void *data``h]j)}(hjoh]hconst void *data}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhjoubj)}(hhh]jG)}(hData to pass to match functionh]hData to pass to match function}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj phKhj pubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhj phKhjzoubj)}(h;``device_match_t match`` Callback function to check device h](j)}(h``device_match_t match``h]j)}(hj.ph]hdevice_match_t match}(hj0phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,pubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhj(pubj)}(hhh]jG)}(h!Callback function to check deviceh]h!Callback function to check device}(hjGphhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjCphKhjDpubah}(h]h ]h"]h$]h&]uh1jhj(pubeh}(h]h ]h"]h$]h&]uh1jhjCphKhjzoubeh}(h]h ]h"]h$]h&]uh1jhj^oubjG)}(h**Description**h]jv)}(hjiph]h Description}(hjkphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgpubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhj^oubjG)}(hThis is similar to the driver_for_each_device() function above, but it returns a reference to a device that is 'found' for later use, as determined by the **match** callback.h](hThis is similar to the driver_for_each_device() function above, but it returns a reference to a device that is ‘found’ for later use, as determined by the }(hjphhhNhNubjv)}(h **match**h]hmatch}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubh callback.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhj^oubjG)}(hThe callback should return 0 if the device doesn't match and non-zero if it does. If the callback returns non-zero, this function will return to the caller and not iterate over any more devices.h]hThe callback should return 0 if the device doesn’t match and non-zero if it does. If the callback returns non-zero, this function will return to the caller and not iterate over any more devices.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhj^oubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdriver_create_file (C function)c.driver_create_filehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h]int driver_create_file (const struct device_driver *drv, const struct driver_attribute *attr)h]h)}(h\int driver_create_file(const struct device_driver *drv, const struct driver_attribute *attr)h](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKubh)}(h h]h }(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjphhhjphKubj)}(hdriver_create_fileh]j)}(hdriver_create_fileh]hdriver_create_file}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjphhhjphKubj)}(hF(const struct device_driver *drv, const struct driver_attribute *attr)h](j!)}(hconst struct device_driver *drvh](h)}(hj8h]hconst}(hj qhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubh)}(h h]h }(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjqubh)}(hhh]hstruct}(hj'qhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubh)}(h h]h }(hj4qhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjqubh)}(hhh]j)}(h device_driverh]h device_driver}(hjEqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBqubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjGqmodnameN classnameNj^ja)}jd]jg)}jZjpsbc.driver_create_fileasbuh1hhjqubh)}(h h]h }(hjeqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjqubj{)}(hj~h]h*}(hjsqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjqubj)}(hdrvh]hdrv}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjqubj!)}(h#const struct driver_attribute *attrh](h)}(hj8h]hconst}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubh)}(h h]h }(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjqubh)}(hhh]hstruct}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubh)}(h h]h }(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjqubh)}(hhh]j)}(hdriver_attributeh]hdriver_attribute}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjqmodnameN classnameNj^ja)}jd]jaqc.driver_create_fileasbuh1hhjqubh)}(h h]h }(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjqubj{)}(hj~h]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjqubj)}(hattrh]hattr}(hj rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjqubeh}(h]h ]h"]h$]h&]j+j,uh1jhjphhhjphKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjphhhjphKubah}(h]jpah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjphKhjphhubjB)}(hhh]jG)}(hcreate sysfs file for driver.h]hcreate sysfs file for driver.}(hj5rhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhj2rhhubah}(h]h ]h"]h$]h&]uh1jAhjphhhjphKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjMrjgjMrjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``const struct device_driver *drv`` driver. ``const struct driver_attribute *attr`` driver attribute descriptor.h](jG)}(h**Parameters**h]jv)}(hjWrh]h Parameters}(hjYrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUrubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhjQrubj)}(hhh](j)}(h,``const struct device_driver *drv`` driver. h](j)}(h#``const struct device_driver *drv``h]j)}(hjvrh]hconst struct device_driver *drv}(hjxrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtrubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhjprubj)}(hhh]jG)}(hdriver.h]hdriver.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjrhKhjrubah}(h]h ]h"]h$]h&]uh1jhjprubeh}(h]h ]h"]h$]h&]uh1jhjrhKhjmrubj)}(hD``const struct driver_attribute *attr`` driver attribute descriptor.h](j)}(h'``const struct driver_attribute *attr``h]j)}(hjrh]h#const struct driver_attribute *attr}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhjrubj)}(hhh]jG)}(hdriver attribute descriptor.h]hdriver attribute descriptor.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhKhjmrubeh}(h]h ]h"]h$]h&]uh1jhjQrubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdriver_remove_file (C function)c.driver_remove_filehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h^void driver_remove_file (const struct device_driver *drv, const struct driver_attribute *attr)h]h)}(h]void driver_remove_file(const struct device_driver *drv, const struct driver_attribute *attr)h](j)}(hvoidh]hvoid}(hj shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKubh)}(h h]h }(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjshhhjshKubj)}(hdriver_remove_fileh]j)}(hdriver_remove_fileh]hdriver_remove_file}(hj*shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&subah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjshhhjshKubj)}(hF(const struct device_driver *drv, const struct driver_attribute *attr)h](j!)}(hconst struct device_driver *drvh](h)}(hj8h]hconst}(hjFshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBsubh)}(h h]h }(hjSshhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjBsubh)}(hhh]hstruct}(hjashhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBsubh)}(h h]h }(hjnshhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjBsubh)}(hhh]j)}(h device_driverh]h device_driver}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|subah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjsmodnameN classnameNj^ja)}jd]jg)}jZj,ssbc.driver_remove_fileasbuh1hhjBsubh)}(h h]h }(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjBsubj{)}(hj~h]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjBsubj)}(hdrvh]hdrv}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBsubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj>subj!)}(h#const struct driver_attribute *attrh](h)}(hj8h]hconst}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubh)}(h h]h }(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjsubh)}(hhh]hstruct}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubh)}(h h]h }(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjsubh)}(hhh]j)}(hdriver_attributeh]hdriver_attribute}(hj thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj tubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjtmodnameN classnameNj^ja)}jd]jsc.driver_remove_fileasbuh1hhjsubh)}(h h]h }(hj*thhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjsubj{)}(hj~h]h*}(hj8thhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjsubj)}(hattrh]hattr}(hjEthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj>subeh}(h]h ]h"]h$]h&]j+j,uh1jhjshhhjshKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjshhhjshKubah}(h]jrah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjshKhjrhhubjB)}(hhh]jG)}(hremove sysfs file for driver.h]hremove sysfs file for driver.}(hjothhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhjlthhubah}(h]h ]h"]h$]h&]uh1jAhjrhhhjshKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjtjgjtjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``const struct device_driver *drv`` driver. ``const struct driver_attribute *attr`` driver attribute descriptor.h](jG)}(h**Parameters**h]jv)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhjtubj)}(hhh](j)}(h,``const struct device_driver *drv`` driver. h](j)}(h#``const struct device_driver *drv``h]j)}(hjth]hconst struct device_driver *drv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhjtubj)}(hhh]jG)}(hdriver.h]hdriver.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjthKhjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjthKhjtubj)}(hD``const struct driver_attribute *attr`` driver attribute descriptor.h](j)}(h'``const struct driver_attribute *attr``h]j)}(hjth]h#const struct driver_attribute *attr}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhjtubj)}(hhh]jG)}(hdriver attribute descriptor.h]hdriver attribute descriptor.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjthKhjtubeh}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdriver_register (C function)c.driver_registerhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h/int driver_register (struct device_driver *drv)h]h)}(h.int driver_register(struct device_driver *drv)h](j)}(hinth]hint}(hjCuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?uhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKubh)}(h h]h }(hjRuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj?uhhhjQuhKubj)}(hdriver_registerh]j)}(hdriver_registerh]hdriver_register}(hjduhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`uubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj?uhhhjQuhKubj)}(h(struct device_driver *drv)h]j!)}(hstruct device_driver *drvh](h)}(hhh]hstruct}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|uubh)}(h h]h }(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj|uubh)}(hhh]j)}(h device_driverh]h device_driver}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjumodnameN classnameNj^ja)}jd]jg)}jZjfusbc.driver_registerasbuh1hhj|uubh)}(h h]h }(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj|uubj{)}(hj~h]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj|uubj)}(hdrvh]hdrv}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|uubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjxuubah}(h]h ]h"]h$]h&]j+j,uh1jhj?uhhhjQuhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj;uhhhjQuhKubah}(h]j6uah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjQuhKhj8uhhubjB)}(hhh]jG)}(hregister driver with bush]hregister driver with bus}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhjvhhubah}(h]h ]h"]h$]h&]uh1jAhj8uhhhjQuhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjvjgjvjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct device_driver *drv`` driver to register **Description** We pass off most of the work to the bus_add_driver() call, since most of the things we have to do deal with the bus structures.h](jG)}(h**Parameters**h]jv)}(hj%vh]h Parameters}(hj'vhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#vubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhjvubj)}(hhh]j)}(h1``struct device_driver *drv`` driver to register h](j)}(h``struct device_driver *drv``h]j)}(hjDvh]hstruct device_driver *drv}(hjFvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBvubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhj>vubj)}(hhh]jG)}(hdriver to registerh]hdriver to register}(hj]vhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjYvhKhjZvubah}(h]h ]h"]h$]h&]uh1jhj>vubeh}(h]h ]h"]h$]h&]uh1jhjYvhKhj;vubah}(h]h ]h"]h$]h&]uh1jhjvubjG)}(h**Description**h]jv)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}vubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhjvubjG)}(hWe pass off most of the work to the bus_add_driver() call, since most of the things we have to do deal with the bus structures.h]hWe pass off most of the work to the bus_add_driver() call, since most of the things we have to do deal with the bus structures.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chKhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdriver_unregister (C function)c.driver_unregisterhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h2void driver_unregister (struct device_driver *drv)h]h)}(h1void driver_unregister(struct device_driver *drv)h](j)}(hvoidh]hvoid}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chMubh)}(h h]h }(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjvhhhjvhMubj)}(hdriver_unregisterh]j)}(hdriver_unregisterh]hdriver_unregister}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjvhhhjvhMubj)}(h(struct device_driver *drv)h]j!)}(hstruct device_driver *drvh](h)}(hhh]hstruct}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubh)}(h h]h }(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjvubh)}(hhh]j)}(h device_driverh]h device_driver}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj!wmodnameN classnameNj^ja)}jd]jg)}jZjvsbc.driver_unregisterasbuh1hhjvubh)}(h h]h }(hj?whhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjvubj{)}(hj~h]h*}(hjMwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjvubj)}(hdrvh]hdrv}(hjZwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjvubah}(h]h ]h"]h$]h&]j+j,uh1jhjvhhhjvhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjvhhhjvhMubah}(h]jvah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjvhMhjvhhubjB)}(hhh]jG)}(hremove driver from system.h]hremove driver from system.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chM hjwhhubah}(h]h ]h"]h$]h&]uh1jAhjvhhhjvhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjwjgjwjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct device_driver *drv`` driver. **Description** Again, we pass off most of the work to the bus-level call.h](jG)}(h**Parameters**h]jv)}(hjwh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chM hjwubj)}(hhh]j)}(h&``struct device_driver *drv`` driver. h](j)}(h``struct device_driver *drv``h]j)}(hjwh]hstruct device_driver *drv}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chM hjwubj)}(hhh]jG)}(hdriver.h]hdriver.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjwhM hjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhM hjwubah}(h]h ]h"]h$]h&]uh1jhjwubjG)}(h**Description**h]jv)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chM hjwubjG)}(h:Again, we pass off most of the work to the bus-level call.h]h:Again, we pass off most of the work to the bus-level call.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:29: ./drivers/base/driver.chM hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%device_link_wait_removal (C function)c.device_link_wait_removalhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h$void device_link_wait_removal (void)h]h)}(h#void device_link_wait_removal(void)h](j)}(hvoidh]hvoid}(hjExhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAxhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM ubh)}(h h]h }(hjTxhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjAxhhhjSxhM ubj)}(hdevice_link_wait_removalh]j)}(hdevice_link_wait_removalh]hdevice_link_wait_removal}(hjfxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbxubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjAxhhhjSxhM ubj)}(h(void)h]j!)}(hvoidh]j)}(hvoidh]hvoid}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~xubah}(h]h ]h"]h$]h&]noemphj+j,uh1j hjzxubah}(h]h ]h"]h$]h&]j+j,uh1jhjAxhhhjSxhM ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj=xhhhjSxhM ubah}(h]j8xah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjSxhM hj:xhhubjB)}(hhh]jG)}(h2Wait for ongoing devlink removal jobs to terminateh]h2Wait for ongoing devlink removal jobs to terminate}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjxhhubah}(h]h ]h"]h$]h&]uh1jAhj:xhhhjSxhM ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjxjgjxjhjijjuh1hhhhjUhNhNubjl)}(h'**Parameters** ``void`` no argumentsh](jG)}(h**Parameters**h]jv)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM"hjxubj)}(hhh]j)}(h``void`` no argumentsh](j)}(h``void``h]j)}(hjxh]hvoid}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM$hjxubj)}(hhh]jG)}(h no argumentsh]h no arguments}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM%hjyubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjyhM$hjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_link_add (C function)c.device_link_addhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hbstruct device_link * device_link_add (struct device *consumer, struct device *supplier, u32 flags)h]h)}(h`struct device_link *device_link_add(struct device *consumer, struct device *supplier, u32 flags)h](h)}(hhh]hstruct}(hjGyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCyhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hjUyhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjCyhhhjTyhMubh)}(hhh]j)}(h device_linkh]h device_link}(hjfyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcyubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjhymodnameN classnameNj^ja)}jd]jg)}jZdevice_link_addsbc.device_link_addasbuh1hhjCyhhhjTyhMubh)}(h h]h }(hjyhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjCyhhhjTyhMubj{)}(hj~h]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjCyhhhjTyhMubj)}(hdevice_link_addh]j)}(hjyh]hdevice_link_add}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjCyhhhjTyhMubj)}(h=(struct device *consumer, struct device *supplier, u32 flags)h](j!)}(hstruct device *consumerh](h)}(hhh]hstruct}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubh)}(h h]h }(hjyhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjyubh)}(hhh]j)}(hdeviceh]hdevice}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjymodnameN classnameNj^ja)}jd]jyc.device_link_addasbuh1hhjyubh)}(h h]h }(hjyhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjyubj{)}(hj~h]h*}(hj zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjyubj)}(hconsumerh]hconsumer}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjyubj!)}(hstruct device *supplierh](h)}(hhh]hstruct}(hj1zhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-zubh)}(h h]h }(hj>zhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-zubh)}(hhh]j)}(hdeviceh]hdevice}(hjOzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLzubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjQzmodnameN classnameNj^ja)}jd]jyc.device_link_addasbuh1hhj-zubh)}(h h]h }(hjmzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-zubj{)}(hj~h]h*}(hj{zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj-zubj)}(hsupplierh]hsupplier}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-zubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjyubj!)}(h u32 flagsh](h)}(hhh]j)}(hu32h]hu32}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjzmodnameN classnameNj^ja)}jd]jyc.device_link_addasbuh1hhjzubh)}(h h]h }(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjzubj)}(hflagsh]hflags}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjyubeh}(h]h ]h"]h$]h&]j+j,uh1jhjCyhhhjTyhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj?yhhhjTyhMubah}(h]j:yah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjTyhMhjj?)j@huh1hhjd}hMhjK}hhubjB)}(hhh]jG)}(h,Delete a stateless link between two devices.h]h,Delete a stateless link between two devices.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj~hhubah}(h]h ]h"]h$]h&]uh1jAhjK}hhhjd}hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj.~jgj.~jhjijjuh1hhhhjUhNhNubjl)}(hXt**Parameters** ``struct device_link *link`` Device link to delete. **Description** The caller must ensure proper synchronization of this function with runtime PM. If the link was added multiple times, it needs to be deleted as often. Care is required for hotplugged devices: Their links are purged on removal and calling device_link_del() is then no longer allowed.h](jG)}(h**Parameters**h]jv)}(hj8~h]h Parameters}(hj:~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6~ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj2~ubj)}(hhh]j)}(h4``struct device_link *link`` Device link to delete. h](j)}(h``struct device_link *link``h]j)}(hjW~h]hstruct device_link *link}(hjY~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU~ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjQ~ubj)}(hhh]jG)}(hDevice link to delete.h]hDevice link to delete.}(hjp~hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjl~hMhjm~ubah}(h]h ]h"]h$]h&]uh1jhjQ~ubeh}(h]h ]h"]h$]h&]uh1jhjl~hMhjN~ubah}(h]h ]h"]h$]h&]uh1jhj2~ubjG)}(h**Description**h]jv)}(hj~h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj2~ubjG)}(hXThe caller must ensure proper synchronization of this function with runtime PM. If the link was added multiple times, it needs to be deleted as often. Care is required for hotplugged devices: Their links are purged on removal and calling device_link_del() is then no longer allowed.h]hXThe caller must ensure proper synchronization of this function with runtime PM. If the link was added multiple times, it needs to be deleted as often. Care is required for hotplugged devices: Their links are purged on removal and calling device_link_del() is then no longer allowed.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj2~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_link_remove (C function)c.device_link_removehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hAvoid device_link_remove (void *consumer, struct device *supplier)h]h)}(h@void device_link_remove(void *consumer, struct device *supplier)h](j)}(hvoidh]hvoid}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj~hhhj~hMubj)}(hdevice_link_removeh]j)}(hdevice_link_removeh]hdevice_link_remove}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj~hhhj~hMubj)}(h)(void *consumer, struct device *supplier)h](j!)}(hvoid *consumerh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hconsumerh]hconsumer}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubj!)}(hstruct device *supplierh](h)}(hhh]hstruct}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubh)}(h h]h }(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjRubh)}(hhh]j)}(hdeviceh]hdevice}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjvmodnameN classnameNj^ja)}jd]jg)}jZj~sbc.device_link_removeasbuh1hhjRubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjRubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjRubj)}(hsupplierh]hsupplier}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubeh}(h]h ]h"]h$]h&]j+j,uh1jhj~hhhj~hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj~hhhj~hMubah}(h]j~ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj~hMhj~hhubjB)}(hhh]jG)}(h,Delete a stateless link between two devices.h]h,Delete a stateless link between two devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhj~hhhj~hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``void *consumer`` Consumer end of the link. ``struct device *supplier`` Supplier end of the link. **Description** The caller must ensure proper synchronization of this function with runtime PM.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh](j)}(h-``void *consumer`` Consumer end of the link. h](j)}(h``void *consumer``h]j)}(hjh]hvoid *consumer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(hConsumer end of the link.h]hConsumer end of the link.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubj)}(h6``struct device *supplier`` Supplier end of the link. h](j)}(h``struct device *supplier``h]j)}(hjSh]hstruct device *supplier}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjMubj)}(hhh]jG)}(hSupplier end of the link.h]hSupplier end of the link.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubjG)}(hOThe caller must ensure proper synchronization of this function with runtime PM.h]hOThe caller must ensure proper synchronization of this function with runtime PM.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdev_driver_string (C function)c.dev_driver_stringhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h9const char * dev_driver_string (const struct device *dev)h]h)}(h7const char *dev_driver_string(const struct device *dev)h](h)}(hj8h]hconst}(hjӀhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjπhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMa ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjπhhhjhMa ubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjπhhhjhMa ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjπhhhjhMa ubj{)}(hj~h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjπhhhjhMa ubj)}(hdev_driver_stringh]j)}(hdev_driver_stringh]hdev_driver_string}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjπhhhjhMa ubj)}(h(const struct device *dev)h]j!)}(hconst struct device *devh](h)}(hj8h]hconst}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubh)}(h h]h }(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj4ubh)}(hhh]hstruct}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubh)}(h h]h }(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj4ubh)}(hhh]j)}(hdeviceh]hdevice}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjsmodnameN classnameNj^ja)}jd]jg)}jZjsbc.dev_driver_stringasbuh1hhj4ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj4ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj4ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj0ubah}(h]h ]h"]h$]h&]j+j,uh1jhjπhhhjhMa ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjˀhhhjhMa ubah}(h]jƀah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMa hjȀhhubjB)}(hhh]jG)}(h1Return a device's driver name, if at all possibleh]h3Return a device’s driver name, if at all possible}(hjցhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMY hjӁhhubah}(h]h ]h"]h$]h&]uh1jAhjȀhhhjhMa ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hXM**Parameters** ``const struct device *dev`` struct device to get the name of **Description** Will return the device's driver's name if it is bound to a device. If the device is not bound to a driver, it will return the name of the bus it is attached to. If it is not attached to a bus either, an empty string will be returned.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM] hjubj)}(hhh]j)}(h>``const struct device *dev`` struct device to get the name of h](j)}(h``const struct device *dev``h]j)}(hjh]hconst struct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMZ hjubj)}(hhh]jG)}(h struct device to get the name ofh]h struct device to get the name of}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj,hMZ hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMZ hjubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM\ hjubjG)}(hWill return the device's driver's name if it is bound to a device. If the device is not bound to a driver, it will return the name of the bus it is attached to. If it is not attached to a bus either, an empty string will be returned.h]hWill return the device’s driver’s name if it is bound to a device. If the device is not bound to a driver, it will return the name of the bus it is attached to. If it is not attached to a bus either, an empty string will be returned.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM\ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"devm_device_add_group (C function)c.devm_device_add_grouphNtauh1hhjUhhhNhNubh)}(hhh](h)}(hQint devm_device_add_group (struct device *dev, const struct attribute_group *grp)h]h)}(hPint devm_device_add_group(struct device *dev, const struct attribute_group *grp)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM: ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM: ubj)}(hdevm_device_add_grouph]j)}(hdevm_device_add_grouph]hdevm_device_add_group}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhM: ubj)}(h7(struct device *dev, const struct attribute_group *grp)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjԂhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjЂubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjЂubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.devm_device_add_groupasbuh1hhjЂubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjЂubj{)}(hj~h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjЂubj)}(hdevh]hdev}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЂubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hĵubj!)}(h!const struct attribute_group *grph](h)}(hj8h]hconst}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubh)}(h h]h }(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjBubh)}(hhh]hstruct}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubh)}(h h]h }(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjBubh)}(hhh]j)}(hattribute_grouph]hattribute_group}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.devm_device_add_groupasbuh1hhjBubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjBubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjBubj)}(hgrph]hgrp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hĵubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhM: ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhM: ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM: hjhhubjB)}(hhh]jG)}(h0given a device, create a managed attribute grouph]h0given a device, create a managed attribute group}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM1 hj߃hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhM: ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hXd**Parameters** ``struct device *dev`` The device to create the group for ``const struct attribute_group *grp`` The attribute group to create **Description** This function creates a group for the first time. It will explicitly warn and error if any of the attribute files being created already exist. Returns 0 on success or error code on failure.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM5 hjubj)}(hhh](j)}(h:``struct device *dev`` The device to create the group for h](j)}(h``struct device *dev``h]j)}(hj#h]hstruct device *dev}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM2 hjubj)}(hhh]jG)}(h"The device to create the group forh]h"The device to create the group for}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj8hM2 hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hM2 hjubj)}(hD``const struct attribute_group *grp`` The attribute group to create h](j)}(h%``const struct attribute_group *grp``h]j)}(hj\h]h!const struct attribute_group *grp}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM3 hjVubj)}(hhh]jG)}(hThe attribute group to createh]hThe attribute group to create}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjqhM3 hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhM3 hjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM5 hjubjG)}(hThis function creates a group for the first time. It will explicitly warn and error if any of the attribute files being created already exist.h]hThis function creates a group for the first time. It will explicitly warn and error if any of the attribute files being created already exist.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM5 hjubjG)}(h.Returns 0 on success or error code on failure.h]h.Returns 0 on success or error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM8 hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_create_file (C function)c.device_create_filehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hPint device_create_file (struct device *dev, const struct device_attribute *attr)h]h)}(hOint device_create_file(struct device *dev, const struct device_attribute *attr)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM ubj)}(hdevice_create_fileh]j)}(hdevice_create_fileh]hdevice_create_file}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhM ubj)}(h9(struct device *dev, const struct device_attribute *attr)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubh)}(h h]h }(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj$ubh)}(hhh]j)}(hdeviceh]hdevice}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjHmodnameN classnameNj^ja)}jd]jg)}jZjsbc.device_create_fileasbuh1hhj$ubh)}(h h]h }(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj$ubj{)}(hj~h]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj$ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubj!)}(h#const struct device_attribute *attrh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj…hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdevice_attributeh]hdevice_attribute}(hjӅhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЅubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjՅmodnameN classnameNj^ja)}jd]jbc.device_create_fileasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hattrh]hattr}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhM ubah}(h]jބah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM hjhhubjB)}(hhh]jG)}(h'create sysfs attribute file for device.h]h'create sysfs attribute file for device.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hj3hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhM ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjNjgjNjhjijjuh1hhhhjUhNhNubjl)}(hx**Parameters** ``struct device *dev`` device. ``const struct device_attribute *attr`` device attribute descriptor.h](jG)}(h**Parameters**h]jv)}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjRubj)}(hhh](j)}(h``struct device *dev`` device. h](j)}(h``struct device *dev``h]j)}(hjwh]hstruct device *dev}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjqubj)}(hhh]jG)}(hdevice.h]hdevice.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhM hjnubj)}(hD``const struct device_attribute *attr`` device attribute descriptor.h](j)}(h'``const struct device_attribute *attr``h]j)}(hjh]h#const struct device_attribute *attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjubj)}(hhh]jG)}(hdevice attribute descriptor.h]hdevice attribute descriptor.}(hjɆhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjƆubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjņhM hjnubeh}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_remove_file (C function)c.device_remove_filehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hQvoid device_remove_file (struct device *dev, const struct device_attribute *attr)h]h)}(hPvoid device_remove_file(struct device *dev, const struct device_attribute *attr)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM ubj)}(hdevice_remove_fileh]j)}(hdevice_remove_fileh]hdevice_remove_file}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhM ubj)}(h9(struct device *dev, const struct device_attribute *attr)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubh)}(h h]h }(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjCubh)}(hhh]j)}(hdeviceh]hdevice}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjgmodnameN classnameNj^ja)}jd]jg)}jZj-sbc.device_remove_fileasbuh1hhjCubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjCubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjCubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj?ubj!)}(h#const struct device_attribute *attrh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjƇhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjԇhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdevice_attributeh]hdevice_attribute}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.device_remove_fileasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hattrh]hattr}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj?ubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhM ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM hjhhubjB)}(hhh]jG)}(hremove sysfs attribute file.h]hremove sysfs attribute file.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjRhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhM ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjmjgjmjhjijjuh1hhhhjUhNhNubjl)}(hx**Parameters** ``struct device *dev`` device. ``const struct device_attribute *attr`` device attribute descriptor.h](jG)}(h**Parameters**h]jv)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjqubj)}(hhh](j)}(h``struct device *dev`` device. h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjubj)}(hhh]jG)}(hdevice.h]hdevice.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hD``const struct device_attribute *attr`` device attribute descriptor.h](j)}(h'``const struct device_attribute *attr``h]j)}(hjψh]h#const struct device_attribute *attr}(hjшhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͈ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjɈubj)}(hhh]jG)}(hdevice attribute descriptor.h]hdevice attribute descriptor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjubah}(h]h ]h"]h$]h&]uh1jhjɈubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$device_remove_file_self (C function)c.device_remove_file_selfhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hVbool device_remove_file_self (struct device *dev, const struct device_attribute *attr)h]h)}(hUbool device_remove_file_self(struct device *dev, const struct device_attribute *attr)h](j)}(hj7h]hbool}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM ubh)}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj%hhhj6hM ubj)}(hdevice_remove_file_selfh]j)}(hdevice_remove_file_selfh]hdevice_remove_file_self}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj%hhhj6hM ubj)}(h9(struct device *dev, const struct device_attribute *attr)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubh)}(h h]h }(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjaubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjKsbc.device_remove_file_selfasbuh1hhjaubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjaubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjaubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj]ubj!)}(h#const struct device_attribute *attrh](h)}(hj8h]hconst}(hj׉hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjӉubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjӉubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjӉubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjӉubh)}(hhh]j)}(hdevice_attributeh]hdevice_attribute}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.device_remove_file_selfasbuh1hhjӉubh)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjӉubj{)}(hj~h]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjӉubj)}(hattrh]hattr}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӉubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj]ubeh}(h]h ]h"]h$]h&]j+j,uh1jhj%hhhj6hM ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj!hhhj6hM ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj6hM hjhhubjB)}(hhh]jG)}(h0remove sysfs attribute file from its own method.h]h0remove sysfs attribute file from its own method.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjphhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj6hM ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct device *dev`` device. ``const struct device_attribute *attr`` device attribute descriptor. **Description** See kernfs_remove_self() for details.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjubj)}(hhh](j)}(h``struct device *dev`` device. h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjubj)}(hhh]jG)}(hdevice.h]hdevice.}(hj͊hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjɊhM hjʊubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjɊhM hjubj)}(hE``const struct device_attribute *attr`` device attribute descriptor. h](j)}(h'``const struct device_attribute *attr``h]j)}(hjh]h#const struct device_attribute *attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjubj)}(hhh]jG)}(hdevice attribute descriptor.h]hdevice attribute descriptor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjubjG)}(h%See kernfs_remove_self() for details.h]h%See kernfs_remove_self() for details.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#device_create_bin_file (C function)c.device_create_bin_filehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hQint device_create_bin_file (struct device *dev, const struct bin_attribute *attr)h]h)}(hPint device_create_bin_file(struct device *dev, const struct bin_attribute *attr)h](j)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM ubh)}(h h]h }(hj|hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjihhhj{hM ubj)}(hdevice_create_bin_fileh]j)}(hdevice_create_bin_fileh]hdevice_create_bin_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjihhhj{hM ubj)}(h6(struct device *dev, const struct bin_attribute *attr)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjȋhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŋubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjʋmodnameN classnameNj^ja)}jd]jg)}jZjsbc.device_create_bin_fileasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(h const struct bin_attribute *attrh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h bin_attributeh]h bin_attribute}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjWmodnameN classnameNj^ja)}jd]jc.device_create_bin_fileasbuh1hhjubh)}(h h]h }(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hattrh]hattr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjihhhj{hM ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjehhhj{hM ubah}(h]j`ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj{hM hjbhhubjB)}(hhh]jG)}(h.create sysfs binary attribute file for device.h]h.create sysfs binary attribute file for device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjhhubah}(h]h ]h"]h$]h&]uh1jAhjbhhhj{hM ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjЌjgjЌjhjijjuh1hhhhjUhNhNubjl)}(h|**Parameters** ``struct device *dev`` device. ``const struct bin_attribute *attr`` device binary attribute descriptor.h](jG)}(h**Parameters**h]jv)}(hjڌh]h Parameters}(hj܌hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj،ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjԌubj)}(hhh](j)}(h``struct device *dev`` device. h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjubj)}(hhh]jG)}(hdevice.h]hdevice.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hH``const struct bin_attribute *attr`` device binary attribute descriptor.h](j)}(h$``const struct bin_attribute *attr``h]j)}(hj2h]h const struct bin_attribute *attr}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hj,ubj)}(hhh]jG)}(h#device binary attribute descriptor.h]h#device binary attribute descriptor.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhM hjubeh}(h]h ]h"]h$]h&]uh1jhjԌubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#device_remove_bin_file (C function)c.device_remove_bin_filehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hRvoid device_remove_bin_file (struct device *dev, const struct bin_attribute *attr)h]h)}(hQvoid device_remove_bin_file(struct device *dev, const struct bin_attribute *attr)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM+ ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM+ ubj)}(hdevice_remove_bin_fileh]j)}(hdevice_remove_bin_fileh]hdevice_remove_bin_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhM+ ubj)}(h6(struct device *dev, const struct bin_attribute *attr)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjɍhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjōubh)}(h h]h }(hj֍hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjōubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.device_remove_bin_fileasbuh1hhjōubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjōubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjōubj)}(hdevh]hdev}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjōubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(h const struct bin_attribute *attrh](h)}(hj8h]hconst}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubh)}(h h]h }(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7ubh)}(hhh]hstruct}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubh)}(h h]h }(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7ubh)}(hhh]j)}(h bin_attributeh]h bin_attribute}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjvmodnameN classnameNj^ja)}jd]jc.device_remove_bin_fileasbuh1hhj7ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj7ubj)}(hattrh]hattr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhM+ ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhM+ ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM+ hjhhubjB)}(hhh]jG)}(h"remove sysfs binary attribute fileh]h"remove sysfs binary attribute file}(hj׎hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM' hjԎhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhM+ ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h|**Parameters** ``struct device *dev`` device. ``const struct bin_attribute *attr`` device binary attribute descriptor.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM+ hjubj)}(hhh](j)}(h``struct device *dev`` device. h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM( hjubj)}(hhh]jG)}(hdevice.h]hdevice.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj-hM( hj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hM( hjubj)}(hH``const struct bin_attribute *attr`` device binary attribute descriptor.h](j)}(h$``const struct bin_attribute *attr``h]j)}(hjQh]h const struct bin_attribute *attr}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM* hjKubj)}(hhh]jG)}(h#device binary attribute descriptor.h]h#device binary attribute descriptor.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM) hjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhM* hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_initialize (C function)c.device_initializehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h+void device_initialize (struct device *dev)h]h)}(h*void device_initialize(struct device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMW ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMW ubj)}(hdevice_initializeh]j)}(hdevice_initializeh]hdevice_initialize}(hj̏hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȏubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMW ubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjΏsbc.device_initializeasbuh1hhjubh)}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMW ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMW ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMW hjhhubjB)}(hhh]jG)}(hinit device structure.h]hinit device structure.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMD hjhhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMW ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *dev`` device. **Description** This prepares the device for use by other layers by initializing its fields. It is the first half of device_register(), if called by that function, though it can also be called separately, so one may use **dev**'s fields. In particular, get_device()/put_device() may be used for reference counting of **dev** after calling this function. All fields in **dev** must be initialized by the caller to 0, except for those explicitly set to some other value. The simplest approach is to use kzalloc() to allocate the structure containing **dev**. **NOTE** Use put_device() to give up your reference instead of freeing **dev** directly once you have called this function.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMH hjubj)}(hhh]j)}(h``struct device *dev`` device. h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chME hjubj)}(hhh]jG)}(hdevice.h]hdevice.}(hjŐhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhME hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhME hjubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMG hjubjG)}(hXQThis prepares the device for use by other layers by initializing its fields. It is the first half of device_register(), if called by that function, though it can also be called separately, so one may use **dev**'s fields. In particular, get_device()/put_device() may be used for reference counting of **dev** after calling this function.h](hThis prepares the device for use by other layers by initializing its fields. It is the first half of device_register(), if called by that function, though it can also be called separately, so one may use }(hjhhhNhNubjv)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh\’s fields. In particular, get_device()/put_device() may be used for reference counting of }(hjhhhNhNubjv)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh after calling this function.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMG hjubjG)}(hAll fields in **dev** must be initialized by the caller to 0, except for those explicitly set to some other value. The simplest approach is to use kzalloc() to allocate the structure containing **dev**.h](hAll fields in }(hj0hhhNhNubjv)}(h**dev**h]hdev}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubh must be initialized by the caller to 0, except for those explicitly set to some other value. The simplest approach is to use kzalloc() to allocate the structure containing }(hj0hhhNhNubjv)}(h**dev**h]hdev}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubh.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMO hjubjG)}(h**NOTE**h]jv)}(hjeh]hNOTE}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMT hjubjG)}(hrUse put_device() to give up your reference instead of freeing **dev** directly once you have called this function.h](h>Use put_device() to give up your reference instead of freeing }(hj{hhhNhNubjv)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh- directly once you have called this function.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMT hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdev_set_name (C function)c.dev_set_namehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h;int dev_set_name (struct device *dev, const char *fmt, ...)h]h)}(h:int dev_set_name(struct device *dev, const char *fmt, ...)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM ubh)}(h h]h }(hjˑhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjʑhM ubj)}(h dev_set_nameh]j)}(h dev_set_nameh]h dev_set_name}(hjݑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjّubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjʑhM ubj)}(h*(struct device *dev, const char *fmt, ...)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjߑsbc.dev_set_nameasbuh1hhjubh)}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hconst char *fmth](h)}(hj8h]hconst}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubh)}(h h]h }(hjxhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjgubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjgubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjgubj)}(hfmth]hfmt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(h...h]j{)}(h...h]h...}(hjȒhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjĒubah}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjʑhM ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjʑhM ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjʑhM hjhhubjB)}(hhh]jG)}(hset a device nameh]hset a device name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjʑhM ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj jgj jhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct device *dev`` device ``const char *fmt`` format string for the device's name ``...`` variable argumentsh](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjubj)}(hhh](j)}(h``struct device *dev`` device h](j)}(h``struct device *dev``h]j)}(hj3h]hstruct device *dev}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hj-ubj)}(hhh]jG)}(hdeviceh]hdevice}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjHhM hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhM hj*ubj)}(h8``const char *fmt`` format string for the device's name h](j)}(h``const char *fmt``h]j)}(hjlh]hconst char *fmt}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjfubj)}(hhh]jG)}(h#format string for the device's nameh]h%format string for the device’s name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhM hj*ubj)}(h``...`` variable argumentsh](j)}(h``...``h]j)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjubj)}(hhh]jG)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj*ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_add (C function) c.device_addhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h#int device_add (struct device *dev)h]h)}(h"int device_add(struct device *dev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj hM ubj)}(h device_addh]j)}(h device_addh]h device_add}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhj hM ubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubh)}(h h]h }(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8ubh)}(hhh]j)}(hdeviceh]hdevice}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj\modnameN classnameNj^ja)}jd]jg)}jZj"sb c.device_addasbuh1hhj8ubh)}(h h]h }(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj8ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj4ubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhj hM ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhj hM ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj hM hjhhubjB)}(hhh]jG)}(hadd device to device hierarchy.h]hadd device to device hierarchy.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj hM ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjהjgjהjhjijjuh1hhhhjUhNhNubjl)}(hX\**Parameters** ``struct device *dev`` device. **Description** This is part 2 of device_register(), though may be called separately _iff_ device_initialize() has been called separately. This adds **dev** to the kobject hierarchy via kobject_add(), adds it to the global and sibling lists for the device, then adds it to the other relevant subsystems of the driver model. Do not call this routine or device_register() more than once for any device structure. The driver model core is not designed to work with devices that get unregistered and then spring back to life. (Among other things, it's very hard to guarantee that all references to the previous incarnation of **dev** have been dropped.) Allocate and register a fresh new struct device instead. Rule of thumb is: if device_add() succeeds, you should call device_del() when you want to get rid of it. If device_add() has *not* succeeded, use *only* put_device() to drop the reference count. **NOTE** _Never_ directly free **dev** after calling this function, even if it returned an error! Always use put_device() to give up your reference instead.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjߔubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hj۔ubj)}(hhh]j)}(h``struct device *dev`` device. h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hjubj)}(hhh]jG)}(hdevice.h]hdevice.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhj۔ubjG)}(h**Description**h]jv)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hj۔ubjG)}(hzThis is part 2 of device_register(), though may be called separately _iff_ device_initialize() has been called separately.h]hzThis is part 2 of device_register(), though may be called separately _iff_ device_initialize() has been called separately.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hj۔ubjG)}(hThis adds **dev** to the kobject hierarchy via kobject_add(), adds it to the global and sibling lists for the device, then adds it to the other relevant subsystems of the driver model.h](h This adds }(hj`hhhNhNubjv)}(h**dev**h]hdev}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubh to the kobject hierarchy via kobject_add(), adds it to the global and sibling lists for the device, then adds it to the other relevant subsystems of the driver model.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hj۔ubjG)}(hXDo not call this routine or device_register() more than once for any device structure. The driver model core is not designed to work with devices that get unregistered and then spring back to life. (Among other things, it's very hard to guarantee that all references to the previous incarnation of **dev** have been dropped.) Allocate and register a fresh new struct device instead.h](hX-Do not call this routine or device_register() more than once for any device structure. The driver model core is not designed to work with devices that get unregistered and then spring back to life. (Among other things, it’s very hard to guarantee that all references to the previous incarnation of }(hjhhhNhNubjv)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhN have been dropped.) Allocate and register a fresh new struct device instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hj۔ubjG)}(hRule of thumb is: if device_add() succeeds, you should call device_del() when you want to get rid of it. If device_add() has *not* succeeded, use *only* put_device() to drop the reference count.h](h}Rule of thumb is: if device_add() succeeds, you should call device_del() when you want to get rid of it. If device_add() has }(hjhhhNhNubhemphasis)}(h*not*h]hnot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh succeeded, use }(hjhhhNhNubj)}(h*only*h]honly}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh* put_device() to drop the reference count.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hj۔ubjG)}(h**NOTE**h]jv)}(hjٕh]hNOTE}(hjەhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjוubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hj۔ubjG)}(h_Never_ directly free **dev** after calling this function, even if it returned an error! Always use put_device() to give up your reference instead.h](h_Never_ directly free }(hjhhhNhNubjv)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhv after calling this function, even if it returned an error! Always use put_device() to give up your reference instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hj۔ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_register (C function)c.device_registerhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h(int device_register (struct device *dev)h]h)}(h'int device_register(struct device *dev)h](j)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj,hhhj>hMubj)}(hdevice_registerh]j)}(hdevice_registerh]hdevice_register}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj,hhhj>hMubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubh)}(h h]h }(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjiubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjSsbc.device_registerasbuh1hhjiubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjiubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjiubj)}(hdevh]hdev}(hjƖhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjeubah}(h]h ]h"]h$]h&]j+j,uh1jhj,hhhj>hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj(hhhj>hMubah}(h]j#ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj>hMhj%hhubjB)}(hhh]jG)}(h"register a device with the system.h]h"register a device with the system.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhj%hhhj>hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *dev`` pointer to the device structure **Description** This happens in two clean steps - initialize the device and add it to the system. The two steps can be called separately, but this is the easiest and most common. I.e. you should only call the two helpers separately if have a clearly defined need to use and refcount the device before it is added to the hierarchy. For more information, see the kerneldoc for device_initialize() and device_add(). **NOTE** _Never_ directly free **dev** after calling this function, even if it returned an error! Always use put_device() to give up the reference initialized in this function instead.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubj)}(hhh]j)}(h7``struct device *dev`` pointer to the device structure h](j)}(h``struct device *dev``h]j)}(hj1h]hstruct device *dev}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj+ubj)}(hhh]jG)}(hpointer to the device structureh]hpointer to the device structure}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubjG)}(h**Description**h]jv)}(hjlh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubjG)}(hX:This happens in two clean steps - initialize the device and add it to the system. The two steps can be called separately, but this is the easiest and most common. I.e. you should only call the two helpers separately if have a clearly defined need to use and refcount the device before it is added to the hierarchy.h]hX:This happens in two clean steps - initialize the device and add it to the system. The two steps can be called separately, but this is the easiest and most common. I.e. you should only call the two helpers separately if have a clearly defined need to use and refcount the device before it is added to the hierarchy.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubjG)}(hQFor more information, see the kerneldoc for device_initialize() and device_add().h]hQFor more information, see the kerneldoc for device_initialize() and device_add().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubjG)}(h**NOTE**h]jv)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubjG)}(h_Never_ directly free **dev** after calling this function, even if it returned an error! Always use put_device() to give up the reference initialized in this function instead.h](h_Never_ directly free }(hjhhhNhNubjv)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh after calling this function, even if it returned an error! Always use put_device() to give up the reference initialized in this function instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌget_device (C function) c.get_devicehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h/struct device * get_device (struct device *dev)h]h)}(h-struct device *get_device(struct device *dev)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZ get_devicesb c.get_deviceasbuh1hhjhhhjhMubh)}(h h]h }(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj{)}(hj~h]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhjhMubj)}(h get_deviceh]j)}(hj6h]h get_device}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjoubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j4 c.get_deviceasbuh1hhjoubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjoubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjoubj)}(hdevh]hdev}(hjʘhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjkubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(h%increment reference count for device.h]h%increment reference count for device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj jgj jhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct device *dev`` device. **Description** This simply forwards the call to kobject_get(), though we do take care to provide for the case that we get a NULL pointer passed in.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]j)}(h``struct device *dev`` device. h](j)}(h``struct device *dev``h]j)}(hj5h]hstruct device *dev}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj/ubj)}(hhh]jG)}(hdevice.h]hdevice.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubjG)}(hThis simply forwards the call to kobject_get(), though we do take care to provide for the case that we get a NULL pointer passed in.h]hThis simply forwards the call to kobject_get(), though we do take care to provide for the case that we get a NULL pointer passed in.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌput_device (C function) c.put_devicehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h$void put_device (struct device *dev)h]h)}(h#void put_device(struct device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hjęhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjÙhMubj)}(h put_deviceh]j)}(h put_deviceh]h put_device}(hj֙hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҙubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjÙhMubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjؙsb c.put_deviceasbuh1hhjubh)}(h h]h }(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjÙhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjÙhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjÙhMhjhhubjB)}(hhh]jG)}(hdecrement reference count.h]hdecrement reference count.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjrhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjÙhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h<**Parameters** ``struct device *dev`` device in question.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]j)}(h*``struct device *dev`` device in question.h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(hdevice in question.h]hdevice in question.}(hjϚhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj̚ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj˚hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_del (C function) c.device_delhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h$void device_del (struct device *dev)h]h)}(h#void device_del(struct device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj hhhjhMubj)}(h device_delh]j)}(h device_delh]h device_del}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj hhhjhMubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubh)}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjIubh)}(hhh]j)}(hdeviceh]hdevice}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmmodnameN classnameNj^ja)}jd]jg)}jZj3sb c.device_delasbuh1hhjIubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjIubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjIubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjEubah}(h]h ]h"]h$]h&]j+j,uh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(hdelete device from system.h]hdelete device from system.}(hjЛhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj͛hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *dev`` device. **Description** This is the first part of the device unregistration sequence. This removes the device from the lists we control from here, has it removed from the other driver model subsystems it was added to in device_add(), and removes it from the kobject hierarchy. **NOTE** this should be called manually _iff_ device_add() was also called manually.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]j)}(h``struct device *dev`` device. h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubj)}(hhh]jG)}(hdevice.h]hdevice.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubjG)}(hThis is the first part of the device unregistration sequence. This removes the device from the lists we control from here, has it removed from the other driver model subsystems it was added to in device_add(), and removes it from the kobject hierarchy.h]hThis is the first part of the device unregistration sequence. This removes the device from the lists we control from here, has it removed from the other driver model subsystems it was added to in device_add(), and removes it from the kobject hierarchy.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubjG)}(h**NOTE**h]jv)}(hjsh]hNOTE}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubjG)}(hKthis should be called manually _iff_ device_add() was also called manually.h]hKthis should be called manually _iff_ device_add() was also called manually.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_unregister (C function)c.device_unregisterhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h+void device_unregister (struct device *dev)h]h)}(h*void device_unregister(struct device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMOubh)}(h h]h }(hjǜhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjƜhMOubj)}(hdevice_unregisterh]j)}(hdevice_unregisterh]hdevice_unregister}(hjٜhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj՜ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjƜhMOubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjۜsbc.device_unregisterasbuh1hhjubh)}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjƜhMOubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjƜhMOubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjƜhMOhjhhubjB)}(hhh]jG)}(hunregister device from system.h]hunregister device from system.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMEhjuhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjƜhMOubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *dev`` device going away. **Description** We do this in two parts, like we do device_register(). First, we remove it from all the subsystems with device_del(), then we decrement the reference count via put_device(). If that is the final reference count, the device will be cleaned up via device_release() above. Otherwise, the structure will stick around until the final reference to the device is dropped.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMIhjubj)}(hhh]j)}(h*``struct device *dev`` device going away. h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMFhjubj)}(hhh]jG)}(hdevice going away.h]hdevice going away.}(hjҝhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjΝhMFhjϝubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjΝhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMHhjubjG)}(hXlWe do this in two parts, like we do device_register(). First, we remove it from all the subsystems with device_del(), then we decrement the reference count via put_device(). If that is the final reference count, the device will be cleaned up via device_release() above. Otherwise, the structure will stick around until the final reference to the device is dropped.h]hXlWe do this in two parts, like we do device_register(). First, we remove it from all the subsystems with device_del(), then we decrement the reference count via put_device(). If that is the final reference count, the device will be cleaned up via device_release() above. Otherwise, the structure will stick around until the final reference to the device is dropped.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMHhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"device_for_each_child (C function)c.device_for_each_childhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hOint device_for_each_child (struct device *parent, void *data, device_iter_t fn)h]h)}(hNint device_for_each_child(struct device *parent, void *data, device_iter_t fn)h](j)}(hinth]hint}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj5hhhjGhMubj)}(hdevice_for_each_childh]j)}(hdevice_for_each_childh]hdevice_for_each_child}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj5hhhjGhMubj)}(h5(struct device *parent, void *data, device_iter_t fn)h](j!)}(hstruct device *parenth](h)}(hhh]hstruct}(hjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjrubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZj\sbc.device_for_each_childasbuh1hhjrubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjrubj{)}(hj~h]h*}(hjžhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjrubj)}(hparenth]hparent}(hjϞhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjnubj!)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjnubj!)}(hdevice_iter_t fnh](h)}(hhh]j)}(h device_iter_th]h device_iter_t}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj/modnameN classnameNj^ja)}jd]jc.device_for_each_childasbuh1hhj&ubh)}(h h]h }(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj&ubj)}(hfnh]hfn}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjnubeh}(h]h ]h"]h$]h&]j+j,uh1jhj5hhhjGhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj1hhhjGhMubah}(h]j,ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjGhMhj.hhubjB)}(hhh]jG)}(hdevice child iterator.h]hdevice child iterator.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhj.hhhjGhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *parent`` parent struct device. ``void *data`` data for the callback. ``device_iter_t fn`` function to be called for each device. **Description** Iterate over **parent**'s child devices, and call **fn** for each, passing it **data**. We check the return of **fn** each time. If it returns anything other than 0, we break out and return that value.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh](j)}(h0``struct device *parent`` parent struct device. h](j)}(h``struct device *parent``h]j)}(hjğh]hstruct device *parent}(hjƟhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjŸubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(hparent struct device.h]hparent struct device.}(hjݟhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjٟhMhjڟubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjٟhMhjubj)}(h&``void *data`` data for the callback. h](j)}(h``void *data``h]j)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(hdata for the callback.h]hdata for the callback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h<``device_iter_t fn`` function to be called for each device. h](j)}(h``device_iter_t fn``h]j)}(hj6h]hdevice_iter_t fn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj0ubj)}(hhh]jG)}(h&function to be called for each device.h]h&function to be called for each device.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjqh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjoubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubjG)}(hWIterate over **parent**'s child devices, and call **fn** for each, passing it **data**.h](h Iterate over }(hjhhhNhNubjv)}(h **parent**h]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh’s child devices, and call }(hjhhhNhNubjv)}(h**fn**h]hfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh for each, passing it }(hjhhhNhNubjv)}(h**data**h]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubjG)}(hqWe check the return of **fn** each time. If it returns anything other than 0, we break out and return that value.h](hWe check the return of }(hj̠hhhNhNubjv)}(h**fn**h]hfn}(hjԠhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj̠ubhT each time. If it returns anything other than 0, we break out and return that value.}(hj̠hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*device_for_each_child_reverse (C function)c.device_for_each_child_reversehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hWint device_for_each_child_reverse (struct device *parent, void *data, device_iter_t fn)h]h)}(hVint device_for_each_child_reverse(struct device *parent, void *data, device_iter_t fn)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj hhhjhMubj)}(hdevice_for_each_child_reverseh]j)}(hdevice_for_each_child_reverseh]hdevice_for_each_child_reverse}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj hhhjhMubj)}(h5(struct device *parent, void *data, device_iter_t fn)h](j!)}(hstruct device *parenth](h)}(hhh]hstruct}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubh)}(h h]h }(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjFubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjjmodnameN classnameNj^ja)}jd]jg)}jZj0sbc.device_for_each_child_reverseasbuh1hhjFubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjFubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjFubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjBubj!)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjʡhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjءhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjBubj!)}(hdevice_iter_t fnh](h)}(hhh]j)}(h device_iter_th]h device_iter_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.device_for_each_child_reverseasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hfnh]hfn}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjBubeh}(h]h ]h"]h$]h&]j+j,uh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(h(device child iterator in reversed order.h]h(device child iterator in reversed order.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjThhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjojgjojhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *parent`` parent struct device. ``void *data`` data for the callback. ``device_iter_t fn`` function to be called for each device. **Description** Iterate over **parent**'s child devices, and call **fn** for each, passing it **data**. We check the return of **fn** each time. If it returns anything other than 0, we break out and return that value.h](jG)}(h**Parameters**h]jv)}(hjyh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjsubj)}(hhh](j)}(h0``struct device *parent`` parent struct device. h](j)}(h``struct device *parent``h]j)}(hjh]hstruct device *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(hparent struct device.h]hparent struct device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h&``void *data`` data for the callback. h](j)}(h``void *data``h]j)}(hjѢh]h void *data}(hjӢhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjϢubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjˢubj)}(hhh]jG)}(hdata for the callback.h]hdata for the callback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjˢubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h<``device_iter_t fn`` function to be called for each device. h](j)}(h``device_iter_t fn``h]j)}(hj h]hdevice_iter_t fn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(h&function to be called for each device.h]h&function to be called for each device.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjsubjG)}(h**Description**h]jv)}(hjEh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjsubjG)}(hWIterate over **parent**'s child devices, and call **fn** for each, passing it **data**.h](h Iterate over }(hj[hhhNhNubjv)}(h **parent**h]hparent}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubh’s child devices, and call }(hj[hhhNhNubjv)}(h**fn**h]hfn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubh for each, passing it }(hj[hhhNhNubjv)}(h**data**h]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjsubjG)}(hqWe check the return of **fn** each time. If it returns anything other than 0, we break out and return that value.h](hWe check the return of }(hjhhhNhNubjv)}(h**fn**h]hfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhT each time. If it returns anything other than 0, we break out and return that value.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/device_for_each_child_reverse_from (C function)$c.device_for_each_child_reverse_fromhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hqint device_for_each_child_reverse_from (struct device *parent, struct device *from, void *data, device_iter_t fn)h]h)}(hpint device_for_each_child_reverse_from(struct device *parent, struct device *from, void *data, device_iter_t fn)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݣhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjݣhhhjhMubj)}(h"device_for_each_child_reverse_fromh]j)}(h"device_for_each_child_reverse_fromh]h"device_for_each_child_reverse_from}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjݣhhhjhMubj)}(hJ(struct device *parent, struct device *from, void *data, device_iter_t fn)h](j!)}(hstruct device *parenth](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj>modnameN classnameNj^ja)}jd]jg)}jZjsb$c.device_for_each_child_reverse_fromasbuh1hhjubh)}(h h]h }(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hparenth]hparent}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct device *fromh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jX$c.device_for_each_child_reverse_fromasbuh1hhjubh)}(h h]h }(hj̤hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjڤhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hfromh]hfrom}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdatah]hdata}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hdevice_iter_t fnh](h)}(hhh]j)}(h device_iter_th]h device_iter_t}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjGmodnameN classnameNj^ja)}jd]jX$c.device_for_each_child_reverse_fromasbuh1hhj>ubh)}(h h]h }(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj>ubj)}(hfnh]hfn}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjݣhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj٣hhhjhMubah}(h]jԣah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhj֣hhubjB)}(hhh]jG)}(h(device child iterator in reversed order.h]h(device child iterator in reversed order.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhj֣hhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hXf**Parameters** ``struct device *parent`` parent struct device. ``struct device *from`` optional starting point in child list ``void *data`` data for the callback. ``device_iter_t fn`` function to be called for each device. **Description** Iterate over **parent**'s child devices, starting at **from**, and call **fn** for each, passing it **data**. This helper is identical to device_for_each_child_reverse() when **from** is NULL. **fn** is checked each iteration. If it returns anything other than 0, iteration stop and that value is returned to the caller of device_for_each_child_reverse_from();h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh](j)}(h0``struct device *parent`` parent struct device. h](j)}(h``struct device *parent``h]j)}(hjܥh]hstruct device *parent}(hjޥhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڥubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj֥ubj)}(hhh]jG)}(hparent struct device.h]hparent struct device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj֥ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjӥubj)}(h>``struct device *from`` optional starting point in child list h](j)}(h``struct device *from``h]j)}(hjh]hstruct device *from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(h%optional starting point in child listh]h%optional starting point in child list}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjӥubj)}(h&``void *data`` data for the callback. h](j)}(h``void *data``h]j)}(hjNh]h void *data}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjHubj)}(hhh]jG)}(hdata for the callback.h]hdata for the callback.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjӥubj)}(h<``device_iter_t fn`` function to be called for each device. h](j)}(h``device_iter_t fn``h]j)}(hjh]hdevice_iter_t fn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(h&function to be called for each device.h]h&function to be called for each device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjӥubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hj¦h]h Description}(hjĦhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubjG)}(hIterate over **parent**'s child devices, starting at **from**, and call **fn** for each, passing it **data**. This helper is identical to device_for_each_child_reverse() when **from** is NULL.h](h Iterate over }(hjئhhhNhNubjv)}(h **parent**h]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjئubh ’s child devices, starting at }(hjئhhhNhNubjv)}(h**from**h]hfrom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjئubh , and call }(hjئhhhNhNubjv)}(h**fn**h]hfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjئubh for each, passing it }(hjئhhhNhNubjv)}(h**data**h]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjئubhC. This helper is identical to device_for_each_child_reverse() when }(hjئhhhNhNubjv)}(h**from**h]hfrom}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjئubh is NULL.}(hjئhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubjG)}(h**fn** is checked each iteration. If it returns anything other than 0, iteration stop and that value is returned to the caller of device_for_each_child_reverse_from();h](jv)}(h**fn**h]hfn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubh is checked each iteration. If it returns anything other than 0, iteration stop and that value is returned to the caller of device_for_each_child_reverse_from();}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_find_child (C function)c.device_find_childhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hastruct device * device_find_child (struct device *parent, const void *data, device_match_t match)h]h)}(h_struct device *device_find_child(struct device *parent, const void *data, device_match_t match)h](h)}(hhh]hstruct}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjzhhhjhM ubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZdevice_find_childsbc.device_find_childasbuh1hhjzhhhjhM ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjzhhhjhM ubj{)}(hj~h]h*}(hj̧hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjzhhhjhM ubj)}(hdevice_find_childh]j)}(hjh]hdevice_find_child}(hjݧhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj٧ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjzhhhjhM ubj)}(h?(struct device *parent, const void *data, device_match_t match)h](j!)}(hstruct device *parenth](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.device_find_childasbuh1hhjubh)}(h h]h }(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hparenth]hparent}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hconst void *datah](h)}(hj8h]hconst}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubh)}(h h]h }(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjdubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjdubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjdubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hdevice_match_t matchh](h)}(hhh]j)}(hdevice_match_th]hdevice_match_t}(hjȨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŨubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjʨmodnameN classnameNj^ja)}jd]jc.device_find_childasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjzhhhjhM ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjvhhhjhM ubah}(h]jqah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM hjshhubjB)}(hhh]jG)}(h1device iterator for locating a particular device.h]h1device iterator for locating a particular device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjshhhjhM ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj6jgj6jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *parent`` parent struct device ``const void *data`` Data to pass to match function ``device_match_t match`` Callback function to check device **Description** This is similar to the device_for_each_child() function above, but it returns a reference to a device that is 'found' for later use, as determined by the **match** callback. The callback should return 0 if the device doesn't match and non-zero if it does. If the callback returns non-zero and a reference to the current device can be obtained, this function will return to the caller and not iterate over any more devices. **NOTE** you will need to drop the reference with put_device() after use.h](jG)}(h**Parameters**h]jv)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj:ubj)}(hhh](j)}(h/``struct device *parent`` parent struct device h](j)}(h``struct device *parent``h]j)}(hj_h]hstruct device *parent}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjYubj)}(hhh]jG)}(hparent struct deviceh]hparent struct device}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjVubj)}(h4``const void *data`` Data to pass to match function h](j)}(h``const void *data``h]j)}(hjh]hconst void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(hData to pass to match functionh]hData to pass to match function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjVubj)}(h;``device_match_t match`` Callback function to check device h](j)}(h``device_match_t match``h]j)}(hjѩh]hdevice_match_t match}(hjөhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjϩubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj˩ubj)}(hhh]jG)}(h!Callback function to check deviceh]h!Callback function to check device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj˩ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjVubeh}(h]h ]h"]h$]h&]uh1jhj:ubjG)}(h**Description**h]jv)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj:ubjG)}(hThis is similar to the device_for_each_child() function above, but it returns a reference to a device that is 'found' for later use, as determined by the **match** callback.h](hThis is similar to the device_for_each_child() function above, but it returns a reference to a device that is ‘found’ for later use, as determined by the }(hj"hhhNhNubjv)}(h **match**h]hmatch}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubh callback.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj:ubjG)}(hThe callback should return 0 if the device doesn't match and non-zero if it does. If the callback returns non-zero and a reference to the current device can be obtained, this function will return to the caller and not iterate over any more devices.h]hThe callback should return 0 if the device doesn’t match and non-zero if it does. If the callback returns non-zero and a reference to the current device can be obtained, this function will return to the caller and not iterate over any more devices.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj:ubjG)}(h**NOTE**h]jv)}(hjTh]hNOTE}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hj:ubjG)}(h@you will need to drop the reference with put_device() after use.h]h@you will need to drop the reference with put_device() after use.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#__root_device_register (C function)c.__root_device_registerhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hOstruct device * __root_device_register (const char *name, struct module *owner)h]h)}(hMstruct device *__root_device_register(const char *name, struct module *owner)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZ__root_device_registersbc.__root_device_registerasbuh1hhjhhhjhMubh)}(h h]h }(hj٪hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhjhMubj)}(h__root_device_registerh]j)}(hj֪h]h__root_device_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubj)}(h((const char *name, struct module *owner)h](j!)}(hconst char *nameh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hcharh]hchar}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hnameh]hname}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubj!)}(hstruct module *ownerh](h)}(hhh]hstruct}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubh)}(h h]h }(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjlubh)}(hhh]j)}(hmoduleh]hmodule}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jԪc.__root_device_registerasbuh1hhjlubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjlubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjlubj)}(hownerh]howner}(hjǫhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(h#allocate and register a root deviceh]h#allocate and register a root device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj jgj jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``const char *name`` root device name ``struct module *owner`` owner module of the root device, usually THIS_MODULE **Description** This function allocates a root device and registers it using device_register(). In order to free the returned device, use root_device_unregister(). Root devices are dummy devices which allow other devices to be grouped under /sys/devices. Use this function to allocate a root device and then use it as the parent of any device which should appear under /sys/devices/{name} The /sys/devices/{name} directory will also contain a 'module' symlink which points to the **owner** directory in sysfs. Returns :c:type:`struct device ` pointer on success, or ERR_PTR() on error. **Note** You probably want to use root_device_register().h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubj)}(hhh](j)}(h&``const char *name`` root device name h](j)}(h``const char *name``h]j)}(hj2h]hconst char *name}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj,ubj)}(hhh]jG)}(hroot device nameh]hroot device name}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhj)ubj)}(hN``struct module *owner`` owner module of the root device, usually THIS_MODULE h](j)}(h``struct module *owner``h]j)}(hjkh]hstruct module *owner}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjeubj)}(hhh]jG)}(h4owner module of the root device, usually THIS_MODULEh]h4owner module of the root device, usually THIS_MODULE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhj)ubeh}(h]h ]h"]h$]h&]uh1jhj ubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubjG)}(hThis function allocates a root device and registers it using device_register(). In order to free the returned device, use root_device_unregister().h]hThis function allocates a root device and registers it using device_register(). In order to free the returned device, use root_device_unregister().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubjG)}(hRoot devices are dummy devices which allow other devices to be grouped under /sys/devices. Use this function to allocate a root device and then use it as the parent of any device which should appear under /sys/devices/{name}h]hRoot devices are dummy devices which allow other devices to be grouped under /sys/devices. Use this function to allocate a root device and then use it as the parent of any device which should appear under /sys/devices/{name}}(hjˬhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubjG)}(hxThe /sys/devices/{name} directory will also contain a 'module' symlink which points to the **owner** directory in sysfs.h](h_The /sys/devices/{name} directory will also contain a ‘module’ symlink which points to the }(hjڬhhhNhNubjv)}(h **owner**h]howner}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjڬubh directory in sysfs.}(hjڬhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubjG)}(hSReturns :c:type:`struct device ` pointer on success, or ERR_PTR() on error.h](hReturns }(hjhhhNhNubh)}(h :c:type:`struct device `h]j)}(hjh]h struct device}(hjhhhNhNubah}(h]h ](jhj`c-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjh refdomainj`reftypetype refexplicitrefwarnj^jhjhdeviceuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubh+ pointer on success, or ERR_PTR() on error.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhj"hMhj ubjG)}(h**Note**h]jv)}(hj/h]hNote}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubjG)}(h0You probably want to use root_device_register().h]h0You probably want to use root_device_register().}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#root_device_unregister (C function)c.root_device_unregisterhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h0void root_device_unregister (struct device *dev)h]h)}(h/void root_device_unregister(struct device *dev)h](j)}(hvoidh]hvoid}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjphhhjhMubj)}(hroot_device_unregisterh]j)}(hroot_device_unregisterh]hroot_device_unregister}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjphhhjhMubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjϭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̭ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjѭmodnameN classnameNj^ja)}jd]jg)}jZjsbc.root_device_unregisterasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjphhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjlhhhjhMubah}(h]jgah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjihhubjB)}(hhh]jG)}(h!unregister and free a root deviceh]h!unregister and free a root device}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj1hhubah}(h]h ]h"]h$]h&]uh1jAhjihhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjLjgjLjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct device *dev`` device going away **Description** This function unregisters and cleans up a device that was created by root_device_register().h](jG)}(h**Parameters**h]jv)}(hjVh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjPubj)}(hhh]j)}(h)``struct device *dev`` device going away h](j)}(h``struct device *dev``h]j)}(hjuh]hstruct device *dev}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjoubj)}(hhh]jG)}(hdevice going awayh]hdevice going away}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjPubjG)}(h\This function unregisters and cleans up a device that was created by root_device_register().h]h\This function unregisters and cleans up a device that was created by root_device_register().}(hjƮhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_create (C function)c.device_createhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hstruct device * device_create (const struct class *class, struct device *parent, dev_t devt, void *drvdata, const char *fmt, ...)h]h)}(hstruct device *device_create(const struct class *class, struct device *parent, dev_t devt, void *drvdata, const char *fmt, ...)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM6ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM6ubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZ device_createsbc.device_createasbuh1hhjhhhjhM6ubh)}(h h]h }(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM6ubj{)}(hj~h]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhjhM6ubj)}(h device_createh]j)}(hj2h]h device_create}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhM6ubj)}(hc(const struct class *class, struct device *parent, dev_t devt, void *drvdata, const char *fmt, ...)h](j!)}(hconst struct class *classh](h)}(hj8h]hconst}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubh)}(h h]h }(hj|hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkubh)}(hhh]j)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j0c.device_createasbuh1hhjkubh)}(h h]h }(hjƯhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkubj{)}(hj~h]h*}(hjԯhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjkubj)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjgubj!)}(hstruct device *parenth](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j0c.device_createasbuh1hhjubh)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hparenth]hparent}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjgubj!)}(h dev_t devth](h)}(hhh]j)}(hdev_th]hdev_t}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjomodnameN classnameNj^ja)}jd]j0c.device_createasbuh1hhjfubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjfubj)}(hdevth]hdevt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjgubj!)}(h void *drvdatah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjΰhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdrvdatah]hdrvdata}(hj۰hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjgubj!)}(hconst char *fmth](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hfmth]hfmt}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjgubj!)}(h...h]j{)}(hjʒh]h...}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjMubah}(h]h ]h"]h$]h&]noemphj+j,uh1j hjgubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhM6ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhM6ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM6hjhhubjB)}(hhh]jG)}(h,creates a device and registers it with sysfsh]h,creates a device and registers it with sysfs}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM"hjwhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhM6ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``const struct class *class`` pointer to the struct class that this device should be registered to ``struct device *parent`` pointer to the parent struct device of this new device, if any ``dev_t devt`` the dev_t for the char device to be added ``void *drvdata`` the data to be added to the device for callbacks ``const char *fmt`` string for the device's name ``...`` variable arguments **Description** This function can be used by char device classes. A struct device will be created in sysfs, registered to the specified class. A "dev" file will be created, showing the dev_t for the device, if the dev_t is not 0,0. If a pointer to a parent struct device is passed in, the newly created struct device will be a child of that device in sysfs. The pointer to the struct device will be returned from the call. Any further sysfs files that might be required can be created using this pointer. Returns :c:type:`struct device ` pointer on success, or ERR_PTR() on error.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM&hjubj)}(hhh](j)}(hc``const struct class *class`` pointer to the struct class that this device should be registered to h](j)}(h``const struct class *class``h]j)}(hjh]hconst struct class *class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM#hjubj)}(hhh]jG)}(hDpointer to the struct class that this device should be registered toh]hDpointer to the struct class that this device should be registered to}(hjԱhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjбhM#hjѱubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjбhM#hjubj)}(hY``struct device *parent`` pointer to the parent struct device of this new device, if any h](j)}(h``struct device *parent``h]j)}(hjh]hstruct device *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM$hjubj)}(hhh]jG)}(h>pointer to the parent struct device of this new device, if anyh]h>pointer to the parent struct device of this new device, if any}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hM$hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM$hjubj)}(h9``dev_t devt`` the dev_t for the char device to be added h](j)}(h``dev_t devt``h]j)}(hj-h]h dev_t devt}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM%hj'ubj)}(hhh]jG)}(h)the dev_t for the char device to be addedh]h)the dev_t for the char device to be added}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjBhM%hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM%hjubj)}(hC``void *drvdata`` the data to be added to the device for callbacks h](j)}(h``void *drvdata``h]j)}(hjfh]h void *drvdata}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM&hj`ubj)}(hhh]jG)}(h0the data to be added to the device for callbacksh]h0the data to be added to the device for callbacks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj{hM&hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hM&hjubj)}(h1``const char *fmt`` string for the device's name h](j)}(h``const char *fmt``h]j)}(hjh]hconst char *fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM'hjubj)}(hhh]jG)}(hstring for the device's nameh]hstring for the device’s name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjubj)}(h``...`` variable arguments h](j)}(h``...``h]j)}(hjزh]h...}(hjڲhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjֲubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM*hjҲubj)}(hhh]jG)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjҲubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM,hjubjG)}(hThis function can be used by char device classes. A struct device will be created in sysfs, registered to the specified class.h]hThis function can be used by char device classes. A struct device will be created in sysfs, registered to the specified class.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM)hjubjG)}(hXiA "dev" file will be created, showing the dev_t for the device, if the dev_t is not 0,0. If a pointer to a parent struct device is passed in, the newly created struct device will be a child of that device in sysfs. The pointer to the struct device will be returned from the call. Any further sysfs files that might be required can be created using this pointer.h]hXmA “dev” file will be created, showing the dev_t for the device, if the dev_t is not 0,0. If a pointer to a parent struct device is passed in, the newly created struct device will be a child of that device in sysfs. The pointer to the struct device will be returned from the call. Any further sysfs files that might be required can be created using this pointer.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM,hjubjG)}(hSReturns :c:type:`struct device ` pointer on success, or ERR_PTR() on error.h](hReturns }(hjGhhhNhNubh)}(h :c:type:`struct device `h]j)}(hjQh]h struct device}(hjShhhNhNubah}(h]h ](jhj`c-typeeh"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]refdocjh refdomainj`reftypetype refexplicitrefwarnj^jhjhdeviceuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM4hjGubh+ pointer on success, or ERR_PTR() on error.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhjnhM4hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&device_create_with_groups (C function)c.device_create_with_groupshNtauh1hhjUhhhNhNubh)}(hhh](h)}(hstruct device * device_create_with_groups (const struct class *class, struct device *parent, dev_t devt, void *drvdata, const struct attribute_group **groups, const char *fmt, ...)h]h)}(hstruct device *device_create_with_groups(const struct class *class, struct device *parent, dev_t devt, void *drvdata, const struct attribute_group **groups, const char *fmt, ...)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM\ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM\ubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZdevice_create_with_groupssbc.device_create_with_groupsasbuh1hhjhhhjhM\ubh)}(h h]h }(hjٳhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM\ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhjhM\ubj)}(hdevice_create_with_groupsh]j)}(hjֳh]hdevice_create_with_groups}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhM\ubj)}(h(const struct class *class, struct device *parent, dev_t devt, void *drvdata, const struct attribute_group **groups, const char *fmt, ...)h](j!)}(hconst struct class *classh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hclassh]hclass}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjNmodnameN classnameNj^ja)}jd]jԳc.device_create_with_groupsasbuh1hhjubh)}(h h]h }(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubj!)}(hstruct device *parenth](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jԳc.device_create_with_groupsasbuh1hhjubh)}(h h]h }(hjڴhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubj!)}(h dev_t devth](h)}(hhh]j)}(hdev_th]hdev_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jԳc.device_create_with_groupsasbuh1hhj ubh)}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj)}(hdevth]hdevt}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubj!)}(h void *drvdatah](j)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(h h]h }(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjRubj{)}(hj~h]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjRubj)}(hdrvdatah]hdrvdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubj!)}(h%const struct attribute_group **groupsh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hattribute_grouph]hattribute_group}(hjѵhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjεubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjӵmodnameN classnameNj^ja)}jd]jԳc.device_create_with_groupsasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj{)}(hj~h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hgroupsh]hgroups}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubj!)}(hconst char *fmth](h)}(hj8h]hconst}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubh)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj,ubj)}(hcharh]hchar}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(h h]h }(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj,ubj{)}(hj~h]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj,ubj)}(hfmth]hfmt}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubj!)}(h...h]j{)}(hjʒh]h...}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubah}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhM\ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhM\ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM\hjhhubjB)}(hhh]jG)}(h,creates a device and registers it with sysfsh]h,creates a device and registers it with sysfs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMEhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhM\ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjζjgjζjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``const struct class *class`` pointer to the struct class that this device should be registered to ``struct device *parent`` pointer to the parent struct device of this new device, if any ``dev_t devt`` the dev_t for the char device to be added ``void *drvdata`` the data to be added to the device for callbacks ``const struct attribute_group **groups`` NULL-terminated list of attribute groups to be created ``const char *fmt`` string for the device's name ``...`` variable arguments **Description** This function can be used by char device classes. A struct device will be created in sysfs, registered to the specified class. Additional attributes specified in the groups parameter will also be created automatically. A "dev" file will be created, showing the dev_t for the device, if the dev_t is not 0,0. If a pointer to a parent struct device is passed in, the newly created struct device will be a child of that device in sysfs. The pointer to the struct device will be returned from the call. Any further sysfs files that might be required can be created using this pointer. Returns :c:type:`struct device ` pointer on success, or ERR_PTR() on error.h](jG)}(h**Parameters**h]jv)}(hjضh]h Parameters}(hjڶhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjֶubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMIhjҶubj)}(hhh](j)}(hc``const struct class *class`` pointer to the struct class that this device should be registered to h](j)}(h``const struct class *class``h]j)}(hjh]hconst struct class *class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMFhjubj)}(hhh]jG)}(hDpointer to the struct class that this device should be registered toh]hDpointer to the struct class that this device should be registered to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hMFhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMFhjubj)}(hY``struct device *parent`` pointer to the parent struct device of this new device, if any h](j)}(h``struct device *parent``h]j)}(hj0h]hstruct device *parent}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMGhj*ubj)}(hhh]jG)}(h>pointer to the parent struct device of this new device, if anyh]h>pointer to the parent struct device of this new device, if any}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjEhMGhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMGhjubj)}(h9``dev_t devt`` the dev_t for the char device to be added h](j)}(h``dev_t devt``h]j)}(hjih]h dev_t devt}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMHhjcubj)}(hhh]jG)}(h)the dev_t for the char device to be addedh]h)the dev_t for the char device to be added}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj~hMHhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMHhjubj)}(hC``void *drvdata`` the data to be added to the device for callbacks h](j)}(h``void *drvdata``h]j)}(hjh]h void *drvdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMIhjubj)}(hhh]jG)}(h0the data to be added to the device for callbacksh]h0the data to be added to the device for callbacks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjubj)}(ha``const struct attribute_group **groups`` NULL-terminated list of attribute groups to be created h](j)}(h)``const struct attribute_group **groups``h]j)}(hj۷h]h%const struct attribute_group **groups}(hjݷhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjٷubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMJhjշubj)}(hhh]jG)}(h6NULL-terminated list of attribute groups to be createdh]h6NULL-terminated list of attribute groups to be created}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMJhjubah}(h]h ]h"]h$]h&]uh1jhjշubeh}(h]h ]h"]h$]h&]uh1jhjhMJhjubj)}(h1``const char *fmt`` string for the device's name h](j)}(h``const char *fmt``h]j)}(hjh]hconst char *fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMKhjubj)}(hhh]jG)}(hstring for the device's nameh]hstring for the device’s name}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj)hMKhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMKhjubj)}(h``...`` variable arguments h](j)}(h``...``h]j)}(hjMh]h...}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMNhjGubj)}(hhh]jG)}(hvariable argumentsh]hvariable arguments}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjbhMNhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMNhjubeh}(h]h ]h"]h$]h&]uh1jhjҶubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMPhjҶubjG)}(hThis function can be used by char device classes. A struct device will be created in sysfs, registered to the specified class. Additional attributes specified in the groups parameter will also be created automatically.h]hThis function can be used by char device classes. A struct device will be created in sysfs, registered to the specified class. Additional attributes specified in the groups parameter will also be created automatically.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMMhjҶubjG)}(hXiA "dev" file will be created, showing the dev_t for the device, if the dev_t is not 0,0. If a pointer to a parent struct device is passed in, the newly created struct device will be a child of that device in sysfs. The pointer to the struct device will be returned from the call. Any further sysfs files that might be required can be created using this pointer.h]hXmA “dev” file will be created, showing the dev_t for the device, if the dev_t is not 0,0. If a pointer to a parent struct device is passed in, the newly created struct device will be a child of that device in sysfs. The pointer to the struct device will be returned from the call. Any further sysfs files that might be required can be created using this pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMRhjҶubjG)}(hSReturns :c:type:`struct device ` pointer on success, or ERR_PTR() on error.h](hReturns }(hjhhhNhNubh)}(h :c:type:`struct device `h]j)}(hjƸh]h struct device}(hjȸhhhNhNubah}(h]h ](jhj`c-typeeh"]h$]h&]uh1jhjĸubah}(h]h ]h"]h$]h&]refdocjh refdomainj`reftypetype refexplicitrefwarnj^jhjhdeviceuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMZhjubh+ pointer on success, or ERR_PTR() on error.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhjhMZhjҶubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_destroy (C function)c.device_destroyhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h;void device_destroy (const struct class *class, dev_t devt)h]h)}(h:void device_destroy(const struct class *class, dev_t devt)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMuubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj hhhjhMuubj)}(hdevice_destroyh]j)}(hdevice_destroyh]hdevice_destroy}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj hhhjhMuubj)}(h'(const struct class *class, dev_t devt)h](j!)}(hconst struct class *classh](h)}(hj8h]hconst}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubh)}(h h]h }(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjGubh)}(hhh]hstruct}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubh)}(h h]h }(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjGubh)}(hhh]j)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZj1sbc.device_destroyasbuh1hhjGubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjGubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjGubj)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjCubj!)}(h dev_t devth](h)}(hhh]j)}(hdev_th]hdev_t}(hj۹hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjعubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjݹmodnameN classnameNj^ja)}jd]jc.device_destroyasbuh1hhjԹubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjԹubj)}(hdevth]hdevt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԹubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjCubeh}(h]h ]h"]h$]h&]j+j,uh1jhj hhhjhMuubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMuubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMuhjhhubjB)}(hhh]jG)}(h6removes a device that was created with device_create()h]h6removes a device that was created with device_create()}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMnhj.hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMuubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjIjgjIjhjijjuh1hhhhjUhNhNubjl)}(hX)**Parameters** ``const struct class *class`` pointer to the struct class that this device was registered with ``dev_t devt`` the dev_t of the device that was previously registered **Description** This call unregisters and cleans up a device that was created with a call to device_create().h](jG)}(h**Parameters**h]jv)}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMrhjMubj)}(hhh](j)}(h_``const struct class *class`` pointer to the struct class that this device was registered with h](j)}(h``const struct class *class``h]j)}(hjrh]hconst struct class *class}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMohjlubj)}(hhh]jG)}(h@pointer to the struct class that this device was registered withh]h@pointer to the struct class that this device was registered with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMohjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMohjiubj)}(hF``dev_t devt`` the dev_t of the device that was previously registered h](j)}(h``dev_t devt``h]j)}(hjh]h dev_t devt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMphjubj)}(hhh]jG)}(h6the dev_t of the device that was previously registeredh]h6the dev_t of the device that was previously registered}(hjĺhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMphjiubeh}(h]h ]h"]h$]h&]uh1jhjMubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMrhjMubjG)}(h]This call unregisters and cleans up a device that was created with a call to device_create().h]h]This call unregisters and cleans up a device that was created with a call to device_create().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMrhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_rename (C function)c.device_renamehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hj?)j@huh1hhj9hMhj hhubjB)}(hhh]jG)}(hrenames a deviceh]hrenames a device}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjEhhubah}(h]h ]h"]h$]h&]uh1jAhj hhhj9hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj`jgj`jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *dev`` the pointer to the struct device to be renamed ``const char *new_name`` the new name of the device **Description** It is the responsibility of the caller to provide mutual exclusion between two different calls of device_rename on the same device to ensure that new_name is valid and won't conflict with other devices. However, if you're writing new code, do not call this function. The following text from Kay Sievers offers some insight: Renaming devices is racy at many levels, symlinks and other stuff are not replaced atomically, and you get a "move" uevent, but it's not easy to connect the event to the old and new device. Device nodes are not renamed at all, there isn't even support for that in the kernel now. In the meantime, during renaming, your target name might be taken by another driver, creating conflicts. Or the old name is taken directly after you renamed it -- then you get events for the same DEVPATH, before you even see the "move" event. It's just a mess, and nothing new should ever rely on kernel device renaming. Besides that, it's not even implemented now for other things than (driver-core wise very simple) network devices. Make up a "real" name in the driver before you register anything, or add some other attributes for userspace to find the device, or use udev to add symlinks -- but never rename kernel devices later, it's a complete mess. We don't even want to get into that and try to implement the missing pieces in the core. We really have other pieces to fix in the driver core mess. :) **Note** given that some subsystems (networking and infiniband) use this function, with no immediate plans for this to change, we cannot assume or require that this function not be called at all.h](jG)}(h**Parameters**h]jv)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjdubj)}(hhh](j)}(hF``struct device *dev`` the pointer to the struct device to be renamed h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(h.the pointer to the struct device to be renamedh]h.the pointer to the struct device to be renamed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h4``const char *new_name`` the new name of the device h](j)}(h``const char *new_name``h]j)}(hj¼h]hconst char *new_name}(hjļhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(hthe new name of the deviceh]hthe new name of the device}(hjۼhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj׼hMhjؼubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj׼hMhjubeh}(h]h ]h"]h$]h&]uh1jhjdubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjdubjG)}(hIt is the responsibility of the caller to provide mutual exclusion between two different calls of device_rename on the same device to ensure that new_name is valid and won't conflict with other devices.h]hIt is the responsibility of the caller to provide mutual exclusion between two different calls of device_rename on the same device to ensure that new_name is valid and won’t conflict with other devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjdubjG)}(hxHowever, if you're writing new code, do not call this function. The following text from Kay Sievers offers some insight:h]hzHowever, if you’re writing new code, do not call this function. The following text from Kay Sievers offers some insight:}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjdubjG)}(hXRenaming devices is racy at many levels, symlinks and other stuff are not replaced atomically, and you get a "move" uevent, but it's not easy to connect the event to the old and new device. Device nodes are not renamed at all, there isn't even support for that in the kernel now.h]hXRenaming devices is racy at many levels, symlinks and other stuff are not replaced atomically, and you get a “move” uevent, but it’s not easy to connect the event to the old and new device. Device nodes are not renamed at all, there isn’t even support for that in the kernel now.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjdubjG)}(hXIn the meantime, during renaming, your target name might be taken by another driver, creating conflicts. Or the old name is taken directly after you renamed it -- then you get events for the same DEVPATH, before you even see the "move" event. It's just a mess, and nothing new should ever rely on kernel device renaming. Besides that, it's not even implemented now for other things than (driver-core wise very simple) network devices.h]hXIn the meantime, during renaming, your target name might be taken by another driver, creating conflicts. Or the old name is taken directly after you renamed it -- then you get events for the same DEVPATH, before you even see the “move” event. It’s just a mess, and nothing new should ever rely on kernel device renaming. Besides that, it’s not even implemented now for other things than (driver-core wise very simple) network devices.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjdubjG)}(hXtMake up a "real" name in the driver before you register anything, or add some other attributes for userspace to find the device, or use udev to add symlinks -- but never rename kernel devices later, it's a complete mess. We don't even want to get into that and try to implement the missing pieces in the core. We really have other pieces to fix in the driver core mess. :)h]hX|Make up a “real” name in the driver before you register anything, or add some other attributes for userspace to find the device, or use udev to add symlinks -- but never rename kernel devices later, it’s a complete mess. We don’t even want to get into that and try to implement the missing pieces in the core. We really have other pieces to fix in the driver core mess. :)}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjdubjG)}(h**Note**h]jv)}(hj`h]hNote}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjdubjG)}(hgiven that some subsystems (networking and infiniband) use this function, with no immediate plans for this to change, we cannot assume or require that this function not be called at all.h]hgiven that some subsystems (networking and infiniband) use this function, with no immediate plans for this to change, we cannot assume or require that this function not be called at all.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_move (C function) c.device_movehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hYint device_move (struct device *dev, struct device *new_parent, enum dpm_order dpm_order)h]h)}(hXint device_move(struct device *dev, struct device *new_parent, enum dpm_order dpm_order)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(h device_moveh]j)}(h device_moveh]h device_move}(hjƽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj½ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubj)}(hI(struct device *dev, struct device *new_parent, enum dpm_order dpm_order)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj޽ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj޽ubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjȽsb c.device_moveasbuh1hhj޽ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj޽ubj{)}(hj~h]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj޽ubj)}(hdevh]hdev}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj޽ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjڽubj!)}(hstruct device *new_parenth](h)}(hhh]hstruct}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubh)}(h h]h }(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjPubh)}(hhh]j)}(hdeviceh]hdevice}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjtmodnameN classnameNj^ja)}jd]j c.device_moveasbuh1hhjPubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjPubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjPubj)}(h new_parenth]h new_parent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjڽubj!)}(henum dpm_order dpm_orderh](h)}(hjMh]henum}(hjľhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjѾhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h dpm_orderh]h dpm_order}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߾ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j c.device_moveasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h dpm_orderh]h dpm_order}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjڽubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(hmoves a device to a new parenth]hmoves a device to a new parent}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj5hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjPjgjPjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct device *dev`` the pointer to the struct device to be moved ``struct device *new_parent`` the new parent of the device (can be NULL) ``enum dpm_order dpm_order`` how to reorder the dpm_listh](jG)}(h**Parameters**h]jv)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjTubj)}(hhh](j)}(hD``struct device *dev`` the pointer to the struct device to be moved h](j)}(h``struct device *dev``h]j)}(hjyh]hstruct device *dev}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjsubj)}(hhh]jG)}(h,the pointer to the struct device to be movedh]h,the pointer to the struct device to be moved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubj)}(hI``struct device *new_parent`` the new parent of the device (can be NULL) h](j)}(h``struct device *new_parent``h]j)}(hjh]hstruct device *new_parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(h*the new parent of the device (can be NULL)h]h*the new parent of the device (can be NULL)}(hj˿hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjǿhMhjȿubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjǿhMhjpubj)}(h8``enum dpm_order dpm_order`` how to reorder the dpm_listh](j)}(h``enum dpm_order dpm_order``h]j)}(hjh]henum dpm_order dpm_order}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(hhow to reorder the dpm_listh]hhow to reorder the dpm_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubeh}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ device_change_owner (C function)c.device_change_ownerhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hFint device_change_owner (struct device *dev, kuid_t kuid, kgid_t kgid)h]h)}(hEint device_change_owner(struct device *dev, kuid_t kuid, kgid_t kgid)h](j)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMxubh)}(h h]h }(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjAhhhjShMxubj)}(hdevice_change_ownerh]j)}(hdevice_change_ownerh]hdevice_change_owner}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjAhhhjShMxubj)}(h.(struct device *dev, kuid_t kuid, kgid_t kgid)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj~ubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjhsbc.device_change_ownerasbuh1hhj~ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj~ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj~ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjzubj!)}(h kuid_t kuidh](h)}(hhh]j)}(hkuid_th]hkuid_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.device_change_ownerasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hkuidh]hkuid}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjzubj!)}(h kgid_t kgidh](h)}(hhh]j)}(hkgid_th]hkgid_t}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjAmodnameN classnameNj^ja)}jd]jc.device_change_ownerasbuh1hhj8ubh)}(h h]h }(hj]hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8ubj)}(hkgidh]hkgid}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjzubeh}(h]h ]h"]h$]h&]j+j,uh1jhjAhhhjShMxubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj=hhhjShMxubah}(h]j8ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjShMxhj:hhubjB)}(hhh]jG)}(h'change the owner of an existing device.h]h'change the owner of an existing device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMmhjhhubah}(h]h ]h"]h$]h&]uh1jAhj:hhhjShMxubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hX[**Parameters** ``struct device *dev`` device. ``kuid_t kuid`` new owner's kuid ``kgid_t kgid`` new owner's kgid **Description** This changes the owner of **dev** and its corresponding sysfs entries to **kuid**/**kgid**. This function closely mirrors how **dev** was added via driver core. Returns 0 on success or error code on failure.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMqhjubj)}(hhh](j)}(h``struct device *dev`` device. h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMnhjubj)}(hhh]jG)}(hdevice.h]hdevice.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMnhjubj)}(h!``kuid_t kuid`` new owner's kuid h](j)}(h``kuid_t kuid``h]j)}(hjh]h kuid_t kuid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMohj ubj)}(hhh]jG)}(hnew owner's kuidh]hnew owner’s kuid}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj$hMohj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMohjubj)}(h!``kgid_t kgid`` new owner's kgid h](j)}(h``kgid_t kgid``h]j)}(hjHh]h kgid_t kgid}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMphjBubj)}(hhh]jG)}(hnew owner's kgidh]hnew owner’s kgid}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj]hMphj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMphjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMrhjubjG)}(hThis changes the owner of **dev** and its corresponding sysfs entries to **kuid**/**kgid**. This function closely mirrors how **dev** was added via driver core.h](hThis changes the owner of }(hjhhhNhNubjv)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh( and its corresponding sysfs entries to }(hjhhhNhNubjv)}(h**kuid**h]hkuid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh/}(hjhhhNhNubjv)}(h**kgid**h]hkgid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh$. This function closely mirrors how }(hjhhhNhNubjv)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh was added via driver core.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMrhjubjG)}(h.Returns 0 on success or error code on failure.h]h.Returns 0 on success or error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMvhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdev_err_probe (C function)c.dev_err_probehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hKint dev_err_probe (const struct device *dev, int err, const char *fmt, ...)h]h)}(hJint dev_err_probe(const struct device *dev, int err, const char *fmt, ...)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj-hMubj)}(h dev_err_probeh]j)}(h dev_err_probeh]h dev_err_probe}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhj-hMubj)}(h9(const struct device *dev, int err, const char *fmt, ...)h](j!)}(hconst struct device *devh](h)}(hj8h]hconst}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubh)}(h h]h }(hjihhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjXubh)}(hhh]hstruct}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjXubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjBsbc.dev_err_probeasbuh1hhjXubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjXubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjXubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjTubj!)}(hint errh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(herrh]herr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjTubj!)}(hconst char *fmth](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hcharh]hchar}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hfmth]hfmt}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjTubj!)}(h...h]j{)}(hjʒh]h...}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjwubah}(h]h ]h"]h$]h&]noemphj+j,uh1j hjTubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhj-hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhj-hMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj-hMhjhhubjB)}(hhh]jG)}(h probe error check and log helperh]h probe error check and log helper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj-hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hXk**Parameters** ``const struct device *dev`` the pointer to the struct device ``int err`` error value to test ``const char *fmt`` printf-style format string ``...`` arguments as specified in the format string **Description** This helper implements common pattern present in probe functions for error checking: print debug or error message depending if the error value is -EPROBE_DEFER and propagate error upwards. In case of -EPROBE_DEFER it sets also defer probe reason, which can be checked later by reading devices_deferred debugfs attribute. It replaces the following code sequence:: if (err != -EPROBE_DEFER) dev_err(dev, ...); else dev_dbg(dev, ...); return err; with:: return dev_err_probe(dev, err, ...); Using this helper in your probe function is totally fine even if **err** is known to never be -EPROBE_DEFER. The benefit compared to a normal dev_err() is the standardized format of the error code, which is emitted symbolically (i.e. you get "EAGAIN" instead of "-35"), and having the error code returned allows more compact error paths. Returns **err**.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh](j)}(h>``const struct device *dev`` the pointer to the struct device h](j)}(h``const struct device *dev``h]j)}(hjh]hconst struct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(h the pointer to the struct deviceh]h the pointer to the struct device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``int err`` error value to test h](j)}(h ``int err``h]j)}(hjh]hint err}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(herror value to testh]herror value to test}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjubj)}(h/``const char *fmt`` printf-style format string h](j)}(h``const char *fmt``h]j)}(hjWh]hconst char *fmt}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjQubj)}(hhh]jG)}(hprintf-style format stringh]hprintf-style format string}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjlhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjubj)}(h4``...`` arguments as specified in the format string h](j)}(h``...``h]j)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(h+arguments as specified in the format stringh]h+arguments as specified in the format string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubjG)}(hXjThis helper implements common pattern present in probe functions for error checking: print debug or error message depending if the error value is -EPROBE_DEFER and propagate error upwards. In case of -EPROBE_DEFER it sets also defer probe reason, which can be checked later by reading devices_deferred debugfs attribute. It replaces the following code sequence::h]hXiThis helper implements common pattern present in probe functions for error checking: print debug or error message depending if the error value is -EPROBE_DEFER and propagate error upwards. In case of -EPROBE_DEFER it sets also defer probe reason, which can be checked later by reading devices_deferred debugfs attribute. It replaces the following code sequence:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(h`if (err != -EPROBE_DEFER) dev_err(dev, ...); else dev_dbg(dev, ...); return err;h]h`if (err != -EPROBE_DEFER) dev_err(dev, ...); else dev_dbg(dev, ...); return err;}hjsbah}(h]h ]h"]h$]h&]j+j,uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubjG)}(hwith::h]hwith:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(h$return dev_err_probe(dev, err, ...);h]h$return dev_err_probe(dev, err, ...);}hjsbah}(h]h ]h"]h$]h&]j+j,uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubjG)}(hXQUsing this helper in your probe function is totally fine even if **err** is known to never be -EPROBE_DEFER. The benefit compared to a normal dev_err() is the standardized format of the error code, which is emitted symbolically (i.e. you get "EAGAIN" instead of "-35"), and having the error code returned allows more compact error paths.h](hAUsing this helper in your probe function is totally fine even if }(hjhhhNhNubjv)}(h**err**h]herr}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhX is known to never be -EPROBE_DEFER. The benefit compared to a normal dev_err() is the standardized format of the error code, which is emitted symbolically (i.e. you get “EAGAIN” instead of “-35”), and having the error code returned allows more compact error paths.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubjG)}(hReturns **err**.h](hReturns }(hj>hhhNhNubjv)}(h**err**h]herr}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdev_warn_probe (C function)c.dev_warn_probehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hLint dev_warn_probe (const struct device *dev, int err, const char *fmt, ...)h]h)}(hKint dev_warn_probe(const struct device *dev, int err, const char *fmt, ...)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj{hhhjhMubj)}(hdev_warn_probeh]j)}(hdev_warn_probeh]hdev_warn_probe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj{hhhjhMubj)}(h9(const struct device *dev, int err, const char *fmt, ...)h](j!)}(hconst struct device *devh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.dev_warn_probeasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hint errh](j)}(hinth]hint}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(h h]h }(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjEubj)}(herrh]herr}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hconst char *fmth](h)}(hj8h]hconst}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjzubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjzubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjzubj)}(hfmth]hfmt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(h...h]j{)}(hjʒh]h...}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubah}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhj{hhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjwhhhjhMubah}(h]jrah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjthhubjB)}(hhh]jG)}(h probe error check and log helperh]h probe error check and log helper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjthhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hXp**Parameters** ``const struct device *dev`` the pointer to the struct device ``int err`` error value to test ``const char *fmt`` printf-style format string ``...`` arguments as specified in the format string **Description** This helper implements common pattern present in probe functions for error checking: print debug or warning message depending if the error value is -EPROBE_DEFER and propagate error upwards. In case of -EPROBE_DEFER it sets also defer probe reason, which can be checked later by reading devices_deferred debugfs attribute. It replaces the following code sequence:: if (err != -EPROBE_DEFER) dev_warn(dev, ...); else dev_dbg(dev, ...); return err; with:: return dev_warn_probe(dev, err, ...); Using this helper in your probe function is totally fine even if **err** is known to never be -EPROBE_DEFER. The benefit compared to a normal dev_warn() is the standardized format of the error code, which is emitted symbolically (i.e. you get "EAGAIN" instead of "-35"), and having the error code returned allows more compact error paths. Returns **err**.h](jG)}(h**Parameters**h]jv)}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubj)}(hhh](j)}(h>``const struct device *dev`` the pointer to the struct device h](j)}(h``const struct device *dev``h]j)}(hjEh]hconst struct device *dev}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj?ubj)}(hhh]jG)}(h the pointer to the struct deviceh]h the pointer to the struct device}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhj<ubj)}(h ``int err`` error value to test h](j)}(h ``int err``h]j)}(hj~h]hint err}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjxubj)}(hhh]jG)}(herror value to testh]herror value to test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhj<ubj)}(h/``const char *fmt`` printf-style format string h](j)}(h``const char *fmt``h]j)}(hjh]hconst char *fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(hprintf-style format stringh]hprintf-style format string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj<ubj)}(h4``...`` arguments as specified in the format string h](j)}(h``...``h]j)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(h+arguments as specified in the format stringh]h+arguments as specified in the format string}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj<ubeh}(h]h ]h"]h$]h&]uh1jhj ubjG)}(h**Description**h]jv)}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubjG)}(hXlThis helper implements common pattern present in probe functions for error checking: print debug or warning message depending if the error value is -EPROBE_DEFER and propagate error upwards. In case of -EPROBE_DEFER it sets also defer probe reason, which can be checked later by reading devices_deferred debugfs attribute. It replaces the following code sequence::h]hXkThis helper implements common pattern present in probe functions for error checking: print debug or warning message depending if the error value is -EPROBE_DEFER and propagate error upwards. In case of -EPROBE_DEFER it sets also defer probe reason, which can be checked later by reading devices_deferred debugfs attribute. It replaces the following code sequence:}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubj)}(haif (err != -EPROBE_DEFER) dev_warn(dev, ...); else dev_dbg(dev, ...); return err;h]haif (err != -EPROBE_DEFER) dev_warn(dev, ...); else dev_dbg(dev, ...); return err;}hjPsbah}(h]h ]h"]h$]h&]j+j,uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubjG)}(hwith::h]hwith:}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubj)}(h%return dev_warn_probe(dev, err, ...);h]h%return dev_warn_probe(dev, err, ...);}hjnsbah}(h]h ]h"]h$]h&]j+j,uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubjG)}(hXRUsing this helper in your probe function is totally fine even if **err** is known to never be -EPROBE_DEFER. The benefit compared to a normal dev_warn() is the standardized format of the error code, which is emitted symbolically (i.e. you get "EAGAIN" instead of "-35"), and having the error code returned allows more compact error paths.h](hAUsing this helper in your probe function is totally fine even if }(hj}hhhNhNubjv)}(h**err**h]herr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubhX is known to never be -EPROBE_DEFER. The benefit compared to a normal dev_warn() is the standardized format of the error code, which is emitted symbolically (i.e. you get “EAGAIN” instead of “-35”), and having the error code returned allows more compact error paths.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubjG)}(hReturns **err**.h](hReturns }(hjhhhNhNubjv)}(h**err**h]herr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌset_primary_fwnode (C function)c.set_primary_fwnodehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hJvoid set_primary_fwnode (struct device *dev, struct fwnode_handle *fwnode)h]h)}(hIvoid set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(hset_primary_fwnodeh]j)}(hset_primary_fwnodeh]hset_primary_fwnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubj)}(h2(struct device *dev, struct fwnode_handle *fwnode)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj<modnameN classnameNj^ja)}jd]jg)}jZjsbc.set_primary_fwnodeasbuh1hhjubh)}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct fwnode_handle *fwnodeh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h fwnode_handleh]h fwnode_handle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jVc.set_primary_fwnodeasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hfwnodeh]hfwnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(h3Change the primary firmware node of a given device.h]h3Change the primary firmware node of a given device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj'jgj'jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *dev`` Device to handle. ``struct fwnode_handle *fwnode`` New primary firmware node of the device. **Description** Set the device's firmware node pointer to **fwnode**, but if a secondary firmware node of the device is present, preserve it. Valid fwnode cases are: - primary --> secondary --> -ENODEV - primary --> NULL - secondary --> -ENODEV - NULLh](jG)}(h**Parameters**h]jv)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj+ubj)}(hhh](j)}(h)``struct device *dev`` Device to handle. h](j)}(h``struct device *dev``h]j)}(hjPh]hstruct device *dev}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjJubj)}(hhh]jG)}(hDevice to handle.h]hDevice to handle.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjGubj)}(hJ``struct fwnode_handle *fwnode`` New primary firmware node of the device. h](j)}(h ``struct fwnode_handle *fwnode``h]j)}(hjh]hstruct fwnode_handle *fwnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]jG)}(h(New primary firmware node of the device.h]h(New primary firmware node of the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjGubeh}(h]h ]h"]h$]h&]uh1jhj+ubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj+ubjG)}(h}Set the device's firmware node pointer to **fwnode**, but if a secondary firmware node of the device is present, preserve it.h](h,Set the device’s firmware node pointer to }(hjhhhNhNubjv)}(h **fwnode**h]hfwnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhI, but if a secondary firmware node of the device is present, preserve it.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj+ubj)}(hhh]j)}(hmValid fwnode cases are: - primary --> secondary --> -ENODEV - primary --> NULL - secondary --> -ENODEV - NULLh](j)}(hValid fwnode cases are:h]hValid fwnode cases are:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh]h bullet_list)}(hhh](h list_item)}(h!primary --> secondary --> -ENODEVh]jG)}(hjh]h!primary --> secondary --> -ENODEV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hprimary --> NULLh]jG)}(hj5h]hprimary --> NULL}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hsecondary --> -ENODEVh]jG)}(hjMh]hsecondary --> -ENODEV}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjKubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hNULLh]jG)}(hjdh]hNULL}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjbubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhj,hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!set_secondary_fwnode (C function)c.set_secondary_fwnodehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hLvoid set_secondary_fwnode (struct device *dev, struct fwnode_handle *fwnode)h]h)}(hKvoid set_secondary_fwnode(struct device *dev, struct fwnode_handle *fwnode)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMDubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMDubj)}(hset_secondary_fwnodeh]j)}(hset_secondary_fwnodeh]hset_secondary_fwnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMDubj)}(h2(struct device *dev, struct fwnode_handle *fwnode)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.set_secondary_fwnodeasbuh1hhjubh)}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct fwnode_handle *fwnodeh](h)}(hhh]hstruct}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubh)}(h h]h }(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj_ubh)}(hhh]j)}(h fwnode_handleh]h fwnode_handle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j+c.set_secondary_fwnodeasbuh1hhj_ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj_ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj_ubj)}(hfwnodeh]hfwnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMDubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMDubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMDhjhhubjB)}(hhh]jG)}(h5Change the secondary firmware node of a given device.h]h5Change the secondary firmware node of a given device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM<hjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMDubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hX;**Parameters** ``struct device *dev`` Device to handle. ``struct fwnode_handle *fwnode`` New secondary firmware node of the device. **Description** If a primary firmware node of the device is present, set its secondary pointer to **fwnode**. Otherwise, set the device's firmware node pointer to **fwnode**.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM@hjubj)}(hhh](j)}(h)``struct device *dev`` Device to handle. h](j)}(h``struct device *dev``h]j)}(hj%h]hstruct device *dev}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM=hjubj)}(hhh]jG)}(hDevice to handle.h]hDevice to handle.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj:hM=hj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hM=hjubj)}(hL``struct fwnode_handle *fwnode`` New secondary firmware node of the device. h](j)}(h ``struct fwnode_handle *fwnode``h]j)}(hj^h]hstruct fwnode_handle *fwnode}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM>hjXubj)}(hhh]jG)}(h*New secondary firmware node of the device.h]h*New secondary firmware node of the device.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjshM>hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshM>hjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM@hjubjG)}(hIf a primary firmware node of the device is present, set its secondary pointer to **fwnode**. Otherwise, set the device's firmware node pointer to **fwnode**.h](hRIf a primary firmware node of the device is present, set its secondary pointer to }(hjhhhNhNubjv)}(h **fwnode**h]hfwnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:. Otherwise, set the device’s firmware node pointer to }(hjhhhNhNubjv)}(h **fwnode**h]hfwnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chM@hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"device_remove_of_node (C function)c.device_remove_of_nodehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h/void device_remove_of_node (struct device *dev)h]h)}(h.void device_remove_of_node(struct device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMTubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMTubj)}(hdevice_remove_of_nodeh]j)}(hdevice_remove_of_nodeh]hdevice_remove_of_node}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMTubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubh)}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj;ubh)}(hhh]j)}(hdeviceh]hdevice}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj_modnameN classnameNj^ja)}jd]jg)}jZj%sbc.device_remove_of_nodeasbuh1hhj;ubh)}(h h]h }(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj;ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj;ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj7ubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMTubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMTubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMThjhhubjB)}(hhh]jG)}(hRemove an of_node from a deviceh]hRemove an of_node from a device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMQhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMTubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hW**Parameters** ``struct device *dev`` device whose device tree node is being removedh](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMUhjubj)}(hhh]j)}(hE``struct device *dev`` device whose device tree node is being removedh](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMWhjubj)}(hhh]jG)}(h.device whose device tree node is being removedh]h.device whose device tree node is being removed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_add_of_node (C function)c.device_add_of_nodehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hHint device_add_of_node (struct device *dev, struct device_node *of_node)h]h)}(hGint device_add_of_node(struct device *dev, struct device_node *of_node)h](j)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMoubh)}(h h]h }(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjYhhhjkhMoubj)}(hdevice_add_of_nodeh]j)}(hdevice_add_of_nodeh]hdevice_add_of_node}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjYhhhjkhMoubj)}(h1(struct device *dev, struct device_node *of_node)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.device_add_of_nodeasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct device_node *of_nodeh](h)}(hhh]hstruct}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h device_nodeh]h device_node}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj,modnameN classnameNj^ja)}jd]jc.device_add_of_nodeasbuh1hhjubh)}(h h]h }(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hof_nodeh]hof_node}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjYhhhjkhMoubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjUhhhjkhMoubah}(h]jPah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjkhMohjRhhubjB)}(hhh]jG)}(h$Add an of_node to an existing deviceh]h$Add an of_node to an existing device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMihjhhubah}(h]h ]h"]h$]h&]uh1jAhjRhhhjkhMoubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct device *dev`` device whose device tree node is being added ``struct device_node *of_node`` of_node to add **Return** 0 on success or error code on failure.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMmhjubj)}(hhh](j)}(hD``struct device *dev`` device whose device tree node is being added h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMjhjubj)}(hhh]jG)}(h,device whose device tree node is being addedh]h,device whose device tree node is being added}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMjhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMjhjubj)}(h/``struct device_node *of_node`` of_node to add h](j)}(h``struct device_node *of_node``h]j)}(hjh]hstruct device_node *of_node}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMkhjubj)}(hhh]jG)}(hof_node to addh]hof_node to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h **Return**h]jv)}(hjBh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMmhjubjG)}(h&0 on success or error code on failure.h]h&0 on success or error code on failure.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMmhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(device_set_of_node_from_dev (C function)c.device_set_of_node_from_devhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hPvoid device_set_of_node_from_dev (struct device *dev, const struct device *dev2)h]h)}(hOvoid device_set_of_node_from_dev(struct device *dev, const struct device *dev2)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(hdevice_set_of_node_from_devh]j)}(hdevice_set_of_node_from_devh]hdevice_set_of_node_from_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubj)}(h/(struct device *dev, const struct device *dev2)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.device_set_of_node_from_devasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hconst struct device *dev2h](h)}(hj8h]hconst}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubh)}(h h]h }(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj2ubh)}(hhh]hstruct}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubh)}(h h]h }(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj2ubh)}(hhh]j)}(hdeviceh]hdevice}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjqmodnameN classnameNj^ja)}jd]jc.device_set_of_node_from_devasbuh1hhj2ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj2ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj2ubj)}(hdev2h]hdev2}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jzah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhj|hhubjB)}(hhh]jG)}(h(reuse device-tree node of another deviceh]h(reuse device-tree node of another device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhj|hhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hX!**Parameters** ``struct device *dev`` device whose device-tree node is being set ``const struct device *dev2`` device whose device-tree node is being reused **Description** Takes another reference to the new device-tree node after first dropping any reference held to the old node.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubj)}(hhh](j)}(hB``struct device *dev`` device whose device-tree node is being set h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhj ubj)}(hhh]jG)}(h*device whose device-tree node is being seth]h*device whose device-tree node is being set}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj ubj)}(hL``const struct device *dev2`` device whose device-tree node is being reused h](j)}(h``const struct device *dev2``h]j)}(hjLh]hconst struct device *dev2}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjFubj)}(hhh]jG)}(h-device whose device-tree node is being reusedh]h-device whose device-tree node is being reused}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubjG)}(hlTakes another reference to the new device-tree node after first dropping any reference held to the old node.h]hlTakes another reference to the new device-tree node after first dropping any reference held to the old node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:32: ./drivers/base/core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!register_syscore_ops (C function)c.register_syscore_opshNtauh1hhjUhhhNhNubh)}(hhh](h)}(h3void register_syscore_ops (struct syscore_ops *ops)h]h)}(h2void register_syscore_ops(struct syscore_ops *ops)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj)}(hregister_syscore_opsh]j)}(hregister_syscore_opsh]hregister_syscore_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKubj)}(h(struct syscore_ops *ops)h]j!)}(hstruct syscore_ops *opsh](h)}(hhh]hstruct}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h syscore_opsh]h syscore_ops}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj)modnameN classnameNj^ja)}jd]jg)}jZjsbc.register_syscore_opsasbuh1hhjubh)}(h h]h }(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hopsh]hops}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]jG)}(h)Register a set of system core operations.h]h)Register a set of system core operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chKhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hQ**Parameters** ``struct syscore_ops *ops`` System core operations to register.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chKhjubj)}(hhh]j)}(h?``struct syscore_ops *ops`` System core operations to register.h](j)}(h``struct syscore_ops *ops``h]j)}(hjh]hstruct syscore_ops *ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chKhjubj)}(hhh]jG)}(h#System core operations to register.h]h#System core operations to register.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#unregister_syscore_ops (C function)c.unregister_syscore_opshNtauh1hhjUhhhNhNubh)}(hhh](h)}(h5void unregister_syscore_ops (struct syscore_ops *ops)h]h)}(h4void unregister_syscore_ops(struct syscore_ops *ops)h](j)}(hvoidh]hvoid}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chK!ubh)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#hhhj5hK!ubj)}(hunregister_syscore_opsh]j)}(hunregister_syscore_opsh]hunregister_syscore_ops}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj#hhhj5hK!ubj)}(h(struct syscore_ops *ops)h]j!)}(hstruct syscore_ops *opsh](h)}(hhh]hstruct}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubh)}(h h]h }(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj`ubh)}(hhh]j)}(h syscore_opsh]h syscore_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjJsbc.unregister_syscore_opsasbuh1hhj`ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj`ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj`ubj)}(hopsh]hops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj\ubah}(h]h ]h"]h$]h&]j+j,uh1jhj#hhhj5hK!ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhj5hK!ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj5hK!hjhhubjB)}(hhh]jG)}(h+Unregister a set of system core operations.h]h+Unregister a set of system core operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chKhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj5hK!ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hS**Parameters** ``struct syscore_ops *ops`` System core operations to unregister.h](jG)}(h**Parameters**h]jv)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chK"hjubj)}(hhh]j)}(hA``struct syscore_ops *ops`` System core operations to unregister.h](j)}(h``struct syscore_ops *ops``h]j)}(hj(h]hstruct syscore_ops *ops}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chK$hj"ubj)}(hhh]jG)}(h%System core operations to unregister.h]h%System core operations to unregister.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chKhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hK$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsyscore_suspend (C function)c.syscore_suspendhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hint syscore_suspend (void)h]h)}(hint syscore_suspend(void)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chK/ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj~hhhjhK/ubj)}(hsyscore_suspendh]j)}(hsyscore_suspendh]hsyscore_suspend}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj~hhhjhK/ubj)}(h(void)h]j!)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhj~hhhjhK/ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjzhhhjhK/ubah}(h]juah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhK/hjwhhubjB)}(hhh]jG)}(h9Execute all the registered system core suspend callbacks.h]h9Execute all the registered system core suspend callbacks.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chK+hjhhubah}(h]h ]h"]h$]h&]uh1jAhjwhhhjhK/ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``void`` no arguments **Description** This function is executed with one CPU on-line and disabled interrupts.h](jG)}(h**Parameters**h]jv)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chK/hjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hj*h]hvoid}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chK2hj$ubj)}(hhh]jG)}(h no argumentsh]h no arguments}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj?hK2hj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hK2hj!ubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjeh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubah}(h]h ]h"]h$]h&]uh1jFh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chK4hjubjG)}(hGThis function is executed with one CPU on-line and disabled interrupts.h]hGThis function is executed with one CPU on-line and disabled interrupts.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chK,hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsyscore_resume (C function)c.syscore_resumehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hvoid syscore_resume (void)h]h)}(hvoid syscore_resume(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chK[ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhK[ubj)}(hsyscore_resumeh]j)}(hsyscore_resumeh]hsyscore_resume}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhK[ubj)}(h(void)h]j!)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhK[ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhK[ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhK[hjhhubjB)}(hhh]jG)}(h8Execute all the registered system core resume callbacks.h]h8Execute all the registered system core resume callbacks.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chKWhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhK[ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj)jgj)jhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``void`` no arguments **Description** This function is executed with one CPU on-line and disabled interrupts.h](jG)}(h**Parameters**h]jv)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1jFh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chK[hj-ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hjRh]hvoid}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chK^hjLubj)}(hhh]jG)}(h no argumentsh]h no arguments}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjghK^hjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghK^hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chK`hj-ubjG)}(hGThis function is executed with one CPU on-line and disabled interrupts.h]hGThis function is executed with one CPU on-line and disabled interrupts.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh`/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:35: ./drivers/base/syscore.chKXhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&class_find_device_by_name (C function)c.class_find_device_by_namehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hWstruct device * class_find_device_by_name (const struct class *class, const char *name)h]h)}(hUstruct device *class_find_device_by_name(const struct class *class, const char *name)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKhubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKhubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZclass_find_device_by_namesbc.class_find_device_by_nameasbuh1hhjhhhjhKhubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKhubj{)}(hj~h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhjhKhubj)}(hclass_find_device_by_nameh]j)}(hjh]hclass_find_device_by_name}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKhubj)}(h-(const struct class *class, const char *name)h](j!)}(hconst struct class *classh](h)}(hj8h]hconst}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubh)}(h h]h }(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjHubh)}(hhh]hstruct}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubh)}(h h]h }(hjthhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjHubh)}(hhh]j)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j c.class_find_device_by_nameasbuh1hhjHubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjHubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjHubj)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjDubj!)}(hconst char *nameh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjDubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhKhubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKhubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhhjhhubjB)}(hhh]jG)}(hDdevice iterator for locating a particular device of a specific name.h]hDdevice iterator for locating a particular device of a specific name.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKchjBhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKhubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj]jgj]jhjijjuh1hhhhjUhNhNubjl)}(hn**Parameters** ``const struct class *class`` class type ``const char *name`` name of the device to matchh](jG)}(h**Parameters**h]jv)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKghjaubj)}(hhh](j)}(h)``const struct class *class`` class type h](j)}(h``const struct class *class``h]j)}(hjh]hconst struct class *class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKehjubj)}(hhh]jG)}(h class typeh]h class type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKehj}ubj)}(h0``const char *name`` name of the device to matchh](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKghjubj)}(hhh]jG)}(hname of the device to matchh]hname of the device to match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKghj}ubeh}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)class_find_device_by_of_node (C function)c.class_find_device_by_of_nodehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hfstruct device * class_find_device_by_of_node (const struct class *class, const struct device_node *np)h]h)}(hdstruct device *class_find_device_by_of_node(const struct class *class, const struct device_node *np)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKtubh)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj&hKtubh)}(hhh]j)}(hdeviceh]hdevice}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj:modnameN classnameNj^ja)}jd]jg)}jZclass_find_device_by_of_nodesbc.class_find_device_by_of_nodeasbuh1hhjhhhj&hKtubh)}(h h]h }(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj&hKtubj{)}(hj~h]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhj&hKtubj)}(hclass_find_device_by_of_nodeh]j)}(hjVh]hclass_find_device_by_of_node}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhj&hKtubj)}(h9(const struct class *class, const struct device_node *np)h](j!)}(hconst struct class *classh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jTc.class_find_device_by_of_nodeasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hconst struct device_node *nph](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h device_nodeh]h device_node}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjYmodnameN classnameNj^ja)}jd]jTc.class_find_device_by_of_nodeasbuh1hhjubh)}(h h]h }(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hnph]hnp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhj&hKtubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhj&hKtubah}(h]j ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj&hKthjhhubjB)}(hhh]jG)}(hFdevice iterator for locating a particular device matching the of_node.h]hFdevice iterator for locating a particular device matching the of_node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKohjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj&hKtubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h~**Parameters** ``const struct class *class`` class type ``const struct device_node *np`` of_node of the device to match.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKshjubj)}(hhh](j)}(h)``const struct class *class`` class type h](j)}(h``const struct class *class``h]j)}(hjh]hconst struct class *class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKqhjubj)}(hhh]jG)}(h class typeh]h class type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKqhjubj)}(h@``const struct device_node *np`` of_node of the device to match.h](j)}(h ``const struct device_node *np``h]j)}(hj4h]hconst struct device_node *np}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKshj.ubj)}(hhh]jG)}(hof_node of the device to match.h]hof_node of the device to match.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKrhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhKshjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(class_find_device_by_fwnode (C function)c.class_find_device_by_fwnodehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hkstruct device * class_find_device_by_fwnode (const struct class *class, const struct fwnode_handle *fwnode)h]h)}(histruct device *class_find_device_by_fwnode(const struct class *class, const struct fwnode_handle *fwnode)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZclass_find_device_by_fwnodesbc.class_find_device_by_fwnodeasbuh1hhjhhhjhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhjhKubj)}(hclass_find_device_by_fwnodeh]j)}(hjh]hclass_find_device_by_fwnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKubj)}(h?(const struct class *class, const struct fwnode_handle *fwnode)h](j!)}(hconst struct class *classh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hclassh]hclass}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjCmodnameN classnameNj^ja)}jd]jc.class_find_device_by_fwnodeasbuh1hhjubh)}(h h]h }(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hclassh]hclass}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(h"const struct fwnode_handle *fwnodeh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h fwnode_handleh]h fwnode_handle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.class_find_device_by_fwnodeasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hfwnodeh]hfwnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]jG)}(hEdevice iterator for locating a particular device matching the fwnode.h]hEdevice iterator for locating a particular device matching the fwnode.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhK{hj,hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjGjgjGjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``const struct class *class`` class type ``const struct fwnode_handle *fwnode`` fwnode of the device to match.h](jG)}(h**Parameters**h]jv)}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKhjKubj)}(hhh](j)}(h)``const struct class *class`` class type h](j)}(h``const struct class *class``h]j)}(hjph]hconst struct class *class}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhK}hjjubj)}(hhh]jG)}(h class typeh]h class type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhK}hjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhK}hjgubj)}(hE``const struct fwnode_handle *fwnode`` fwnode of the device to match.h](j)}(h&``const struct fwnode_handle *fwnode``h]j)}(hjh]h"const struct fwnode_handle *fwnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKhjubj)}(hhh]jG)}(hfwnode of the device to match.h]hfwnode of the device to match.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhK~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjgubeh}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&class_find_device_by_devt (C function)c.class_find_device_by_devthNtauh1hhjUhhhNhNubh)}(hhh](h)}(hQstruct device * class_find_device_by_devt (const struct class *class, dev_t devt)h]h)}(hOstruct device *class_find_device_by_devt(const struct class *class, dev_t devt)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubh)}(hhh]j)}(hdeviceh]hdevice}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj$modnameN classnameNj^ja)}jd]jg)}jZclass_find_device_by_devtsbc.class_find_device_by_devtasbuh1hhjhhhjhKubh)}(h h]h }(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj{)}(hj~h]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhjhKubj)}(hclass_find_device_by_devth]j)}(hj@h]hclass_find_device_by_devt}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKubj)}(h'(const struct class *class, dev_t devt)h](j!)}(hconst struct class *classh](h)}(hj8h]hconst}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjyubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjyubh)}(hhh]j)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j>c.class_find_device_by_devtasbuh1hhjyubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjyubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjyubj)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjuubj!)}(h dev_t devth](h)}(hhh]j)}(hdev_th]hdev_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj modnameN classnameNj^ja)}jd]j>c.class_find_device_by_devtasbuh1hhjubh)}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hdevth]hdevt}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjuubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]jG)}(hJdevice iterator for locating a particular device matching the device type.h]hJdevice iterator for locating a particular device matching the device type.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKhj^hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjyjgjyjhjijjuh1hhhhjUhNhNubjl)}(hp**Parameters** ``const struct class *class`` class type ``dev_t devt`` device type of the device to match.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKhj}ubj)}(hhh](j)}(h)``const struct class *class`` class type h](j)}(h``const struct class *class``h]j)}(hjh]hconst struct class *class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKhjubj)}(hhh]jG)}(h class typeh]h class type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h2``dev_t devt`` device type of the device to match.h](j)}(h``dev_t devt``h]j)}(hjh]h dev_t devt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKhjubj)}(hhh]jG)}(h#device type of the device to match.h]h#device type of the device to match.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*class_find_device_by_acpi_dev (C function)c.class_find_device_by_acpi_devhNtauh1hhjUhhhNhNubh)}(hhh](h)}(histruct device * class_find_device_by_acpi_dev (const struct class *class, const struct acpi_device *adev)h]h)}(hgstruct device *class_find_device_by_acpi_dev(const struct class *class, const struct acpi_device *adev)h](h)}(hhh]hstruct}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1hhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKubh)}(h h]h }(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1hhhjBhKubh)}(hhh]j)}(hdeviceh]hdevice}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjVmodnameN classnameNj^ja)}jd]jg)}jZclass_find_device_by_acpi_devsbc.class_find_device_by_acpi_devasbuh1hhj1hhhjBhKubh)}(h h]h }(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1hhhjBhKubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj1hhhjBhKubj)}(hclass_find_device_by_acpi_devh]j)}(hjrh]hclass_find_device_by_acpi_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj1hhhjBhKubj)}(h;(const struct class *class, const struct acpi_device *adev)h](j!)}(hconst struct class *classh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jpc.class_find_device_by_acpi_devasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hclassh]hclass}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hconst struct acpi_device *adevh](h)}(hj8h]hconst}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubh)}(h h]h }(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj6ubh)}(hhh]hstruct}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubh)}(h h]h }(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj6ubh)}(hhh]j)}(h acpi_deviceh]h acpi_device}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjumodnameN classnameNj^ja)}jd]jpc.class_find_device_by_acpi_devasbuh1hhj6ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj6ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj6ubj)}(hadevh]hadev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhj1hhhjBhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj-hhhjBhKubah}(h]j(ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjBhKhj*hhubjB)}(hhh]jG)}(hTdevice iterator for locating a particular device matching the ACPI_COMPANION device.h]hTdevice iterator for locating a particular device matching the ACPI_COMPANION device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jAhj*hhhjBhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``const struct class *class`` class type ``const struct acpi_device *adev`` ACPI_COMPANION device to match.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKhjubj)}(hhh](j)}(h)``const struct class *class`` class type h](j)}(h``const struct class *class``h]j)}(hjh]hconst struct class *class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKhjubj)}(hhh]jG)}(h class typeh]h class type}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj,hKhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hKhjubj)}(hB``const struct acpi_device *adev`` ACPI_COMPANION device to match.h](j)}(h"``const struct acpi_device *adev``h]j)}(hjPh]hconst struct acpi_device *adev}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKhjJubj)}(hhh]jG)}(hACPI_COMPANION device to match.h]hACPI_COMPANION device to match.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jFhf/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:38: ./include/linux/device/class.hhKhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌclass_create (C function)c.class_createhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h.struct class * class_create (const char *name)h]h)}(h,struct class *class_create(const char *name)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM ubh)}(hhh]j)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZ class_createsbc.class_createasbuh1hhjhhhjhM ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhjhM ubj)}(h class_createh]j)}(hjh]h class_create}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhM ubj)}(h(const char *name)h]j!)}(hconst char *nameh](h)}(hj8h]hconst}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubh)}(h h]h }(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj)}(hcharh]hchar}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(h h]h }(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj{)}(hj~h]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj ubj)}(hnameh]hname}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhM ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM hjhhubjB)}(hhh]jG)}(hcreate a struct class structureh]hcreate a struct class structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chKhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhM ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``const char *name`` pointer to a string for the name of this class. **Description** This is used to create a struct class pointer that can then be used in calls to device_create(). Returns :c:type:`struct class ` pointer on success, or ERR_PTR() on error. Note, the pointer created here is to be destroyed when finished by making a call to class_destroy().h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubj)}(hhh]j)}(hE``const char *name`` pointer to a string for the name of this class. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubj)}(hhh]jG)}(h/pointer to a string for the name of this class.h]h/pointer to a string for the name of this class.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubjG)}(h`This is used to create a struct class pointer that can then be used in calls to device_create().h]h`This is used to create a struct class pointer that can then be used in calls to device_create().}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubjG)}(hQReturns :c:type:`struct class ` pointer on success, or ERR_PTR() on error.h](hReturns }(hj3hhhNhNubh)}(h:c:type:`struct class `h]j)}(hj=h]h struct class}(hj?hhhNhNubah}(h]h ](jhj`c-typeeh"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]refdocjh refdomainj`reftypetype refexplicitrefwarnj^jhjhclassuh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhj3ubh+ pointer on success, or ERR_PTR() on error.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhjZhMhjubjG)}(hdNote, the pointer created here is to be destroyed when finished by making a call to class_destroy().h]hdNote, the pointer created here is to be destroyed when finished by making a call to class_destroy().}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌclass_destroy (C function)c.class_destroyhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h,void class_destroy (const struct class *cls)h]h)}(h+void class_destroy(const struct class *cls)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM+ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM+ubj)}(h class_destroyh]j)}(h class_destroyh]h class_destroy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhM+ubj)}(h(const struct class *cls)h]j!)}(hconst struct class *clsh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hclassh]hclass}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj modnameN classnameNj^ja)}jd]jg)}jZjsbc.class_destroyasbuh1hhjubh)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hclsh]hcls}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhM+ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhM+ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM+hjhhubjB)}(hhh]jG)}(h!destroys a struct class structureh]h!destroys a struct class structure}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM%hjlhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhM+ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``const struct class *cls`` pointer to the struct class that is to be destroyed **Description** Note, the pointer to be destroyed must have been created with a call to class_create().h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM)hjubj)}(hhh]j)}(hP``const struct class *cls`` pointer to the struct class that is to be destroyed h](j)}(h``const struct class *cls``h]j)}(hjh]hconst struct class *cls}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM&hjubj)}(hhh]jG)}(h3pointer to the struct class that is to be destroyedh]h3pointer to the struct class that is to be destroyed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM(hjubjG)}(hWNote, the pointer to be destroyed must have been created with a call to class_create().h]hWNote, the pointer to be destroyed must have been created with a call to class_create().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM(hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ class_dev_iter_init (C function)c.class_dev_iter_inithNtauh1hhjUhhhNhNubh)}(hhh](h)}(hvoid class_dev_iter_init (struct class_dev_iter *iter, const struct class *class, const struct device *start, const struct device_type *type)h]h)}(hvoid class_dev_iter_init(struct class_dev_iter *iter, const struct class *class, const struct device *start, const struct device_type *type)h](j)}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM@ubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj,hhhj>hM@ubj)}(hclass_dev_iter_inith]j)}(hclass_dev_iter_inith]hclass_dev_iter_init}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj,hhhj>hM@ubj)}(ht(struct class_dev_iter *iter, const struct class *class, const struct device *start, const struct device_type *type)h](j!)}(hstruct class_dev_iter *iterh](h)}(hhh]hstruct}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubh)}(h h]h }(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjiubh)}(hhh]j)}(hclass_dev_iterh]hclass_dev_iter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjSsbc.class_dev_iter_initasbuh1hhjiubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjiubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjiubj)}(hiterh]hiter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjeubj!)}(hconst struct class *classh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.class_dev_iter_initasbuh1hhjubh)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hclassh]hclass}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjeubj!)}(hconst struct device *starth](h)}(hj8h]hconst}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubh)}(h h]h }(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjfubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjfubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.class_dev_iter_initasbuh1hhjfubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjfubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjfubj)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjeubj!)}(hconst struct device_type *typeh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h device_typeh]h device_type}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj0modnameN classnameNj^ja)}jd]jc.class_dev_iter_initasbuh1hhjubh)}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(htypeh]htype}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjeubeh}(h]h ]h"]h$]h&]j+j,uh1jhj,hhhj>hM@ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj(hhhj>hM@ubah}(h]j#ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj>hM@hj%hhubjB)}(hhh]jG)}(h initialize class device iteratorh]h initialize class device iterator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM5hjhhubah}(h]h ]h"]h$]h&]uh1jAhj%hhhj>hM@ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hX(**Parameters** ``struct class_dev_iter *iter`` class iterator to initialize ``const struct class *class`` the class we wanna iterate over ``const struct device *start`` the device to start iterating from, if any ``const struct device_type *type`` device_type of the devices to iterate over, NULL for all **Description** Initialize class iterator **iter** such that it iterates over devices of **class**. If **start** is set, the list iteration will start there, otherwise if it is NULL, the iteration starts at the beginning of the list.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM9hjubj)}(hhh](j)}(h=``struct class_dev_iter *iter`` class iterator to initialize h](j)}(h``struct class_dev_iter *iter``h]j)}(hjh]hstruct class_dev_iter *iter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM6hjubj)}(hhh]jG)}(hclass iterator to initializeh]hclass iterator to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubj)}(h>``const struct class *class`` the class we wanna iterate over h](j)}(h``const struct class *class``h]j)}(hj h]hconst struct class *class}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM7hjubj)}(hhh]jG)}(hthe class we wanna iterate overh]hthe class we wanna iterate over}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hM7hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM7hjubj)}(hJ``const struct device *start`` the device to start iterating from, if any h](j)}(h``const struct device *start``h]j)}(hjDh]hconst struct device *start}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM8hj>ubj)}(hhh]jG)}(h*the device to start iterating from, if anyh]h*the device to start iterating from, if any}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjYhM8hjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhM8hjubj)}(h\``const struct device_type *type`` device_type of the devices to iterate over, NULL for all h](j)}(h"``const struct device_type *type``h]j)}(hj}h]hconst struct device_type *type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM9hjwubj)}(hhh]jG)}(h8device_type of the devices to iterate over, NULL for allh]h8device_type of the devices to iterate over, NULL for all}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM9hjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhM9hjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM;hjubjG)}(hInitialize class iterator **iter** such that it iterates over devices of **class**. If **start** is set, the list iteration will start there, otherwise if it is NULL, the iteration starts at the beginning of the list.h](hInitialize class iterator }(hjhhhNhNubjv)}(h**iter**h]hiter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh' such that it iterates over devices of }(hjhhhNhNubjv)}(h **class**h]hclass}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh. If }(hjhhhNhNubjv)}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhy is set, the list iteration will start there, otherwise if it is NULL, the iteration starts at the beginning of the list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM;hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ class_dev_iter_next (C function)c.class_dev_iter_nexthNtauh1hhjUhhhNhNubh)}(hhh](h)}(hAstruct device * class_dev_iter_next (struct class_dev_iter *iter)h]h)}(h?struct device *class_dev_iter_next(struct class_dev_iter *iter)h](h)}(hhh]hstruct}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMaubh)}(h h]h }(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj/hhhj@hMaubh)}(hhh]j)}(hdeviceh]hdevice}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjTmodnameN classnameNj^ja)}jd]jg)}jZclass_dev_iter_nextsbc.class_dev_iter_nextasbuh1hhj/hhhj@hMaubh)}(h h]h }(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj/hhhj@hMaubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj/hhhj@hMaubj)}(hclass_dev_iter_nexth]j)}(hjph]hclass_dev_iter_next}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj/hhhj@hMaubj)}(h(struct class_dev_iter *iter)h]j!)}(hstruct class_dev_iter *iterh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hclass_dev_iterh]hclass_dev_iter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jnc.class_dev_iter_nextasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hiterh]hiter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhj/hhhj@hMaubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj+hhhj@hMaubah}(h]j&ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj@hMahj(hhubjB)}(hhh]jG)}(hiterate to the next deviceh]hiterate to the next device}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMVhj+hhubah}(h]h ]h"]h$]h&]uh1jAhj(hhhj@hMaubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjFjgjFjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct class_dev_iter *iter`` class iterator to proceed **Description** Proceed **iter** to the next device and return it. Returns NULL if iteration is complete. The returned device is referenced and won't be released till iterator is proceed to the next device or exited. The caller is free to do whatever it wants to do with the device including calling back into class code.h](jG)}(h**Parameters**h]jv)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMZhjJubj)}(hhh]j)}(h:``struct class_dev_iter *iter`` class iterator to proceed h](j)}(h``struct class_dev_iter *iter``h]j)}(hjoh]hstruct class_dev_iter *iter}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMWhjiubj)}(hhh]jG)}(hclass iterator to proceedh]hclass iterator to proceed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMWhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMWhjfubah}(h]h ]h"]h$]h&]uh1jhjJubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMYhjJubjG)}(hZProceed **iter** to the next device and return it. Returns NULL if iteration is complete.h](hProceed }(hjhhhNhNubjv)}(h**iter**h]hiter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhJ to the next device and return it. Returns NULL if iteration is complete.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMYhjJubjG)}(hThe returned device is referenced and won't be released till iterator is proceed to the next device or exited. The caller is free to do whatever it wants to do with the device including calling back into class code.h]hThe returned device is referenced and won’t be released till iterator is proceed to the next device or exited. The caller is free to do whatever it wants to do with the device including calling back into class code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM\hjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ class_dev_iter_exit (C function)c.class_dev_iter_exithNtauh1hhjUhhhNhNubh)}(hhh](h)}(h6void class_dev_iter_exit (struct class_dev_iter *iter)h]h)}(h5void class_dev_iter_exit(struct class_dev_iter *iter)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM{ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj hhhjhM{ubj)}(hclass_dev_iter_exith]j)}(hclass_dev_iter_exith]hclass_dev_iter_exit}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj hhhjhM{ubj)}(h(struct class_dev_iter *iter)h]j!)}(hstruct class_dev_iter *iterh](h)}(hhh]hstruct}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubh)}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjIubh)}(hhh]j)}(hclass_dev_iterh]hclass_dev_iter}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmmodnameN classnameNj^ja)}jd]jg)}jZj3sbc.class_dev_iter_exitasbuh1hhjIubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjIubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjIubj)}(hiterh]hiter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjEubah}(h]h ]h"]h$]h&]j+j,uh1jhj hhhjhM{ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhM{ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM{hjhhubjB)}(hhh]jG)}(hfinish iterationh]hfinish iteration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMuhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhM{ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct class_dev_iter *iter`` class iterator to finish **Description** Finish an iteration. Always call this function after iteration is complete whether the iteration ran till the end or not.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMyhjubj)}(hhh]j)}(h9``struct class_dev_iter *iter`` class iterator to finish h](j)}(h``struct class_dev_iter *iter``h]j)}(hjh]hstruct class_dev_iter *iter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMvhj ubj)}(hhh]jG)}(hclass iterator to finishh]hclass iterator to finish}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj&hMvhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMvhjubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMxhjubjG)}(hzFinish an iteration. Always call this function after iteration is complete whether the iteration ran till the end or not.h]hzFinish an iteration. Always call this function after iteration is complete whether the iteration ran till the end or not.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"class_for_each_device (C function)c.class_for_each_devicehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hoint class_for_each_device (const struct class *class, const struct device *start, void *data, device_iter_t fn)h]h)}(hnint class_for_each_device(const struct class *class, const struct device *start, void *data, device_iter_t fn)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(hclass_for_each_deviceh]j)}(hclass_for_each_deviceh]hclass_for_each_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubj)}(hU(const struct class *class, const struct device *start, void *data, device_iter_t fn)h](j!)}(hconst struct class *classh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj modnameN classnameNj^ja)}jd]jg)}jZjsbc.class_for_each_deviceasbuh1hhjubh)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hclassh]hclass}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hconst struct device *starth](h)}(hj8h]hconst}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubh)}(h h]h }(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjWubh)}(hhh]hstruct}(hjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjWubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j#c.class_for_each_deviceasbuh1hhjWubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjWubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjWubj)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hdevice_iter_t fnh](h)}(hhh]j)}(h device_iter_th]h device_iter_t}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj-modnameN classnameNj^ja)}jd]j#c.class_for_each_deviceasbuh1hhj$ubh)}(h h]h }(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj$ubj)}(hfnh]hfn}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(hdevice iteratorh]hdevice iterator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhj~hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``const struct class *class`` the class we're iterating ``const struct device *start`` the device to start with in the list, if any. ``void *data`` data for the callback ``device_iter_t fn`` function to be called for each device **Description** Iterate over **class**'s list of devices, and call **fn** for each, passing it **data**. If **start** is set, the list iteration will start there, otherwise if it is NULL, the iteration starts at the beginning of the list. We check the return of **fn** each time. If it returns anything other than 0, we break out and return that value. **fn** is allowed to do anything including calling back into class code. There's no locking restriction.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubj)}(hhh](j)}(h8``const struct class *class`` the class we're iterating h](j)}(h``const struct class *class``h]j)}(hjh]hconst struct class *class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubj)}(hhh]jG)}(hthe class we're iteratingh]hthe class we’re iterating}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hM``const struct device *start`` the device to start with in the list, if any. h](j)}(h``const struct device *start``h]j)}(hjh]hconst struct device *start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubj)}(hhh]jG)}(h-the device to start with in the list, if any.h]h-the device to start with in the list, if any.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h%``void *data`` data for the callback h](j)}(h``void *data``h]j)}(hj4h]h void *data}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhj.ubj)}(hhh]jG)}(hdata for the callbackh]hdata for the callback}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjubj)}(h;``device_iter_t fn`` function to be called for each device h](j)}(h``device_iter_t fn``h]j)}(hjmh]hdevice_iter_t fn}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjgubj)}(hhh]jG)}(h%function to be called for each deviceh]h%function to be called for each device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubjG)}(hIterate over **class**'s list of devices, and call **fn** for each, passing it **data**. If **start** is set, the list iteration will start there, otherwise if it is NULL, the iteration starts at the beginning of the list.h](h Iterate over }(hjhhhNhNubjv)}(h **class**h]hclass}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh’s list of devices, and call }(hjhhhNhNubjv)}(h**fn**h]hfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh for each, passing it }(hjhhhNhNubjv)}(h**data**h]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh. If }(hjhhhNhNubjv)}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhy is set, the list iteration will start there, otherwise if it is NULL, the iteration starts at the beginning of the list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubjG)}(hqWe check the return of **fn** each time. If it returns anything other than 0, we break out and return that value.h](hWe check the return of }(hjhhhNhNubjv)}(h**fn**h]hfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhT each time. If it returns anything other than 0, we break out and return that value.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubjG)}(hi**fn** is allowed to do anything including calling back into class code. There's no locking restriction.h](jv)}(h**fn**h]hfn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubhe is allowed to do anything including calling back into class code. There’s no locking restriction.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌclass_find_device (C function)c.class_find_devicehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hstruct device * class_find_device (const struct class *class, const struct device *start, const void *data, device_match_t match)h]h)}(hstruct device *class_find_device(const struct class *class, const struct device *start, const void *data, device_match_t match)h](h)}(hhh]hstruct}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjohhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjohhhjhMubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZclass_find_devicesbc.class_find_deviceasbuh1hhjohhhjhMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjohhhjhMubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjohhhjhMubj)}(hclass_find_deviceh]j)}(hjh]hclass_find_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjohhhjhMubj)}(h_(const struct class *class, const struct device *start, const void *data, device_match_t match)h](j!)}(hconst struct class *classh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hclassh]hclass}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj(modnameN classnameNj^ja)}jd]jc.class_find_deviceasbuh1hhjubh)}(h h]h }(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hclassh]hclass}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hconst struct device *starth](h)}(hj8h]hconst}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjtubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjtubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.class_find_deviceasbuh1hhjtubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjtubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjtubj)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hconst void *datah](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdatah]hdata}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hdevice_match_t matchh](h)}(hhh]j)}(hdevice_match_th]hdevice_match_t}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjemodnameN classnameNj^ja)}jd]jc.class_find_deviceasbuh1hhj\ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj\ubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjohhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjkhhhjhMubah}(h]jfah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhhubjB)}(hhh]jG)}(h0device iterator for locating a particular deviceh]h0device iterator for locating a particular device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hX!**Parameters** ``const struct class *class`` the class we're iterating ``const struct device *start`` Device to begin with ``const void *data`` data for the match function ``device_match_t match`` function to check device **Description** This is similar to the class_for_each_dev() function above, but it returns a reference to a device that is 'found' for later use, as determined by the **match** callback. The callback should return 0 if the device doesn't match and non-zero if it does. If the callback returns non-zero, this function will return to the caller and not iterate over any more devices. Note, you will need to drop the reference with put_device() after use. **match** is allowed to do anything including calling back into class code. There's no locking restriction.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubj)}(hhh](j)}(h8``const struct class *class`` the class we're iterating h](j)}(h``const struct class *class``h]j)}(hjh]hconst struct class *class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubj)}(hhh]jG)}(hthe class we're iteratingh]hthe class we’re iterating}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h4``const struct device *start`` Device to begin with h](j)}(h``const struct device *start``h]j)}(hj3h]hconst struct device *start}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhj-ubj)}(hhh]jG)}(hDevice to begin withh]hDevice to begin with}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjubj)}(h1``const void *data`` data for the match function h](j)}(h``const void *data``h]j)}(hjlh]hconst void *data}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjfubj)}(hhh]jG)}(hdata for the match functionh]hdata for the match function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``device_match_t match`` function to check device h](j)}(h``device_match_t match``h]j)}(hjh]hdevice_match_t match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubj)}(hhh]jG)}(hfunction to check deviceh]hfunction to check device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubjG)}(hThis is similar to the class_for_each_dev() function above, but it returns a reference to a device that is 'found' for later use, as determined by the **match** callback.h](hThis is similar to the class_for_each_dev() function above, but it returns a reference to a device that is ‘found’ for later use, as determined by the }(hjhhhNhNubjv)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubjG)}(hThe callback should return 0 if the device doesn't match and non-zero if it does. If the callback returns non-zero, this function will return to the caller and not iterate over any more devices.h]hThe callback should return 0 if the device doesn’t match and non-zero if it does. If the callback returns non-zero, this function will return to the caller and not iterate over any more devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubjG)}(hFNote, you will need to drop the reference with put_device() after use.h]hFNote, you will need to drop the reference with put_device() after use.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubjG)}(hl**match** is allowed to do anything including calling back into class code. There's no locking restriction.h](jv)}(h **match**h]hmatch}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubhe is allowed to do anything including calling back into class code. There’s no locking restriction.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"class_compat_register (C function)c.class_compat_registerhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h>struct class_compat * class_compat_register (const char *name)h]h)}(hj?)j@huh1hhjhM<hjghhubjB)}(hhh]jG)}(hregister a compatibility classh]hregister a compatibility class}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM6hjWhhubah}(h]h ]h"]h$]h&]uh1jAhjghhhjhM<ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjrjgjrjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``const char *name`` the name of the class **Description** Compatibility class are meant as a temporary user-space compatibility workaround when converting a family of class devices to a bus devices.h](jG)}(h**Parameters**h]jv)}(hj|h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM:hjvubj)}(hhh]j)}(h+``const char *name`` the name of the class h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM7hjubj)}(hhh]jG)}(hthe name of the classh]hthe name of the class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM7hjubah}(h]h ]h"]h$]h&]uh1jhjvubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM9hjvubjG)}(hCompatibility class are meant as a temporary user-space compatibility workaround when converting a family of class devices to a bus devices.h]hCompatibility class are meant as a temporary user-space compatibility workaround when converting a family of class devices to a bus devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM9hjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$class_compat_unregister (C function)c.class_compat_unregisterhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h7void class_compat_unregister (struct class_compat *cls)h]h)}(h6void class_compat_unregister(struct class_compat *cls)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMPubh)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj)hMPubj)}(hclass_compat_unregisterh]j)}(hclass_compat_unregisterh]hclass_compat_unregister}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhj)hMPubj)}(h(struct class_compat *cls)h]j!)}(hstruct class_compat *clsh](h)}(hhh]hstruct}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubh)}(h h]h }(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjTubh)}(hhh]j)}(h class_compath]h class_compat}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjxmodnameN classnameNj^ja)}jd]jg)}jZj>sbc.class_compat_unregisterasbuh1hhjTubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjTubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjTubj)}(hclsh]hcls}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjPubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhj)hMPubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhj)hMPubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj)hMPhjhhubjB)}(hhh]jG)}(h unregister a compatibility classh]h unregister a compatibility class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj)hMPubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hF**Parameters** ``struct class_compat *cls`` the class to unregisterh](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMQhjubj)}(hhh]j)}(h4``struct class_compat *cls`` the class to unregisterh](j)}(h``struct class_compat *cls``h]j)}(hjh]hstruct class_compat *cls}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMShjubj)}(hhh]jG)}(hthe class to unregisterh]hthe class to unregister}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMNhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%class_compat_create_link (C function)c.class_compat_create_linkhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hKint class_compat_create_link (struct class_compat *cls, struct device *dev)h]h)}(hJint class_compat_create_link(struct class_compat *cls, struct device *dev)h](j)}(hinth]hint}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM]ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjrhhhjhM]ubj)}(hclass_compat_create_linkh]j)}(hclass_compat_create_linkh]hclass_compat_create_link}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjrhhhjhM]ubj)}(h.(struct class_compat *cls, struct device *dev)h](j!)}(hstruct class_compat *clsh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h class_compath]h class_compat}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.class_compat_create_linkasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hclsh]hcls}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct device *devh](h)}(hhh]hstruct}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubh)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!ubh)}(hhh]j)}(hdeviceh]hdevice}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjEmodnameN classnameNj^ja)}jd]jc.class_compat_create_linkasbuh1hhj!ubh)}(h h]h }(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!ubj{)}(hj~h]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj!ubj)}(hdevh]hdev}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjrhhhjhM]ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjnhhhjhM]ubah}(h]jiah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM]hjkhhubjB)}(hhh]jG)}(h8create a compatibility class device link to a bus deviceh]h8create a compatibility class device link to a bus device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMXhjhhubah}(h]h ]h"]h$]h&]uh1jAhjkhhhjhM]ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hv**Parameters** ``struct class_compat *cls`` the compatibility class ``struct device *dev`` the target bus deviceh](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM\hjubj)}(hhh](j)}(h5``struct class_compat *cls`` the compatibility class h](j)}(h``struct class_compat *cls``h]j)}(hjh]hstruct class_compat *cls}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMZhjubj)}(hhh]jG)}(hthe compatibility classh]hthe compatibility class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMZhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMZhjubj)}(h,``struct device *dev`` the target bus deviceh](j)}(h``struct device *dev``h]j)}(hj h]hstruct device *dev}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM\hjubj)}(hhh]jG)}(hthe target bus deviceh]hthe target bus device}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM[hj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hM\hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%class_compat_remove_link (C function)c.class_compat_remove_linkhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hLvoid class_compat_remove_link (struct class_compat *cls, struct device *dev)h]h)}(hKvoid class_compat_remove_link(struct class_compat *cls, struct device *dev)h](j)}(hvoidh]hvoid}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMiubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjvhhhjhMiubj)}(hclass_compat_remove_linkh]j)}(hclass_compat_remove_linkh]hclass_compat_remove_link}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjvhhhjhMiubj)}(h.(struct class_compat *cls, struct device *dev)h](j!)}(hstruct class_compat *clsh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h class_compath]h class_compat}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.class_compat_remove_linkasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hclsh]hcls}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct device *devh](h)}(hhh]hstruct}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubh)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj%ubh)}(hhh]j)}(hdeviceh]hdevice}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjImodnameN classnameNj^ja)}jd]jc.class_compat_remove_linkasbuh1hhj%ubh)}(h h]h }(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj%ubj{)}(hj~h]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj%ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjvhhhjhMiubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjrhhhjhMiubah}(h]jmah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMihjohhubjB)}(hhh]jG)}(h8remove a compatibility class device link to a bus deviceh]h8remove a compatibility class device link to a bus device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMdhjhhubah}(h]h ]h"]h$]h&]uh1jAhjohhhjhMiubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hv**Parameters** ``struct class_compat *cls`` the compatibility class ``struct device *dev`` the target bus deviceh](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhhjubj)}(hhh](j)}(h5``struct class_compat *cls`` the compatibility class h](j)}(h``struct class_compat *cls``h]j)}(hjh]hstruct class_compat *cls}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMfhjubj)}(hhh]jG)}(hthe compatibility classh]hthe compatibility class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubj)}(h,``struct device *dev`` the target bus deviceh](j)}(h``struct device *dev``h]j)}(hj$h]hstruct device *dev}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMhhjubj)}(hhh]jG)}(hthe target bus deviceh]hthe target bus device}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMghj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ class_is_registered (C function)c.class_is_registeredhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h4bool class_is_registered (const struct class *class)h]h)}(h3bool class_is_registered(const struct class *class)h](j)}(hj7h]hbool}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chM{ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjzhhhjhM{ubj)}(hclass_is_registeredh]j)}(hclass_is_registeredh]hclass_is_registered}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjzhhhjhM{ubj)}(h(const struct class *class)h]j!)}(hconst struct class *classh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hclassh]hclass}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.class_is_registeredasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hclassh]hclass}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjzhhhjhM{ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjvhhhjhM{ubah}(h]jqah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM{hjshhubjB)}(hhh]jG)}(hUdetermine if at this moment in time, a class is registered in the driver core or not.h]hUdetermine if at this moment in time, a class is registered in the driver core or not.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMphjUhhubah}(h]h ]h"]h$]h&]uh1jAhjshhhjhM{ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjpjgjpjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``const struct class *class`` the class to check **Description** Returns a boolean to state if the class is registered in the driver core or not. Note that the value could switch right after this call is made, so only use this in places where you "know" it is safe to do so (usually to determine if the specific class has been registered yet or not). Be careful in using this.h](jG)}(h**Parameters**h]jv)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMthjtubj)}(hhh]j)}(h1``const struct class *class`` the class to check h](j)}(h``const struct class *class``h]j)}(hjh]hconst struct class *class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMrhjubj)}(hhh]jG)}(hthe class to checkh]hthe class to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjtubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMthjtubjG)}(hXReturns a boolean to state if the class is registered in the driver core or not. Note that the value could switch right after this call is made, so only use this in places where you "know" it is safe to do so (usually to determine if the specific class has been registered yet or not).h]hX"Returns a boolean to state if the class is registered in the driver core or not. Note that the value could switch right after this call is made, so only use this in places where you “know” it is safe to do so (usually to determine if the specific class has been registered yet or not).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMthjtubjG)}(hBe careful in using this.h]hBe careful in using this.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:41: ./drivers/base/class.chMyhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfaux_device (C struct) c.faux_devicehNtauh1hhjUhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhNubh)}(hhh](h)}(h faux_deviceh]h)}(hstruct faux_deviceh](h)}(hhh]hstruct}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhKubh)}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj%hhhj6hKubj)}(h faux_deviceh]j)}(hj#h]h faux_device}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj%hhhj6hKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj!hhhj6hKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj6hKhjhhubjB)}(hhh]jG)}(ha "faux" deviceh]ha “faux” device}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhKhjhhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj6hKubeh}(h]h ](j`structeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhjhNubjl)}(h**Definition**:: struct faux_device { struct device dev; }; **Members** ``dev`` internal struct device of the objecth](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhKhjubj)}(h.struct faux_device { struct device dev; };h]h.struct faux_device { struct device dev; };}hjsbah}(h]h ]h"]h$]h&]j+j,uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhKhjubjG)}(h **Members**h]jv)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhKhjubj)}(hhh]j)}(h,``dev`` internal struct device of the objecth](j)}(h``dev``h]j)}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhKhjubj)}(hhh]jG)}(h$internal struct device of the objecth]h$internal struct device of the object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhjhNubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhKhjUhhubjG)}(hX'A simple faux device that can be created/destroyed. To be used when a driver only needs to have a device to "hang" something off. This can be used for downloading firmware or other basic tasks. Use this instead of a struct platform_device if the device has no resources assigned to it at all.h]hX+A simple faux device that can be created/destroyed. To be used when a driver only needs to have a device to “hang” something off. This can be used for downloading firmware or other basic tasks. Use this instead of a struct platform_device if the device has no resources assigned to it at all.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhKhjUhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfaux_device_ops (C struct)c.faux_device_opshNtauh1hhjUhhhjhNubh)}(hhh](h)}(hfaux_device_opsh]h)}(hstruct faux_device_opsh](h)}(hhh]hstruct}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhK ubh)}(h h]h }(hjghhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjUhhhjfhK ubj)}(hfaux_device_opsh]j)}(hjSh]hfaux_device_ops}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjUhhhjfhK ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjQhhhjfhK ubah}(h]jLah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjfhK hjNhhubjB)}(hhh]jG)}(h+a set of callbacks for a struct faux_deviceh]h+a set of callbacks for a struct faux_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhK#hjhhubah}(h]h ]h"]h$]h&]uh1jAhjNhhhjfhK ubeh}(h]h ](j`structeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhjhNubjl)}(hX**Definition**:: struct faux_device_ops { int (*probe)(struct faux_device *faux_dev); void (*remove)(struct faux_device *faux_dev); }; **Members** ``probe`` called when a faux device is probed by the driver core before the device is fully bound to the internal faux bus code. If probe succeeds, return 0, otherwise return a negative error number to stop the probe sequence from succeeding. ``remove`` called when a faux device is removed from the systemh](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhK'hjubj)}(h}struct faux_device_ops { int (*probe)(struct faux_device *faux_dev); void (*remove)(struct faux_device *faux_dev); };h]h}struct faux_device_ops { int (*probe)(struct faux_device *faux_dev); void (*remove)(struct faux_device *faux_dev); };}hjsbah}(h]h ]h"]h$]h&]j+j,uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhK)hjubjG)}(h **Members**h]jv)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhK.hjubj)}(hhh](j)}(h``probe`` called when a faux device is probed by the driver core before the device is fully bound to the internal faux bus code. If probe succeeds, return 0, otherwise return a negative error number to stop the probe sequence from succeeding. h](j)}(h ``probe``h]j)}(hjh]hprobe}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhK)hjubj)}(hhh]jG)}(hcalled when a faux device is probed by the driver core before the device is fully bound to the internal faux bus code. If probe succeeds, return 0, otherwise return a negative error number to stop the probe sequence from succeeding.h]hcalled when a faux device is probed by the driver core before the device is fully bound to the internal faux bus code. If probe succeeds, return 0, otherwise return a negative error number to stop the probe sequence from succeeding.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhK%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK)hjubj)}(h?``remove`` called when a faux device is removed from the systemh](j)}(h ``remove``h]j)}(hjBh]hremove}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhK)hj<ubj)}(hhh]jG)}(h4called when a faux device is removed from the systemh]h4called when a faux device is removed from the system}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhK*hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhK)hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhjhNubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhK-hjUhhubjG)}(hGBoth **probe** and **remove** are optional, if not needed, set to NULL.h](hBoth }(hjhhhNhNubjv)}(h **probe**h]hprobe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh and }(hjhhhNhNubjv)}(h **remove**h]hremove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh* are optional, if not needed, set to NULL.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:44: ./include/linux/device/faux.hhK+hjUhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+faux_device_create_with_groups (C function) c.faux_device_create_with_groupshNtauh1hhjUhhhNhNubh)}(hhh](h)}(hstruct faux_device * faux_device_create_with_groups (const char *name, struct device *parent, const struct faux_device_ops *faux_ops, const struct attribute_group **groups)h]h)}(hstruct faux_device *faux_device_create_with_groups(const char *name, struct device *parent, const struct faux_device_ops *faux_ops, const struct attribute_group **groups)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKqubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKqubh)}(hhh]j)}(h faux_deviceh]h faux_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZfaux_device_create_with_groupssb c.faux_device_create_with_groupsasbuh1hhjhhhjhKqubh)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKqubj{)}(hj~h]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhjhKqubj)}(hfaux_device_create_with_groupsh]j)}(hj$h]hfaux_device_create_with_groups}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKqubj)}(hx(const char *name, struct device *parent, const struct faux_device_ops *faux_ops, const struct attribute_group **groups)h](j!)}(hconst char *nameh](h)}(hj8h]hconst}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubh)}(h h]h }(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj]ubj)}(hcharh]hchar}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj]ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj]ubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjYubj!)}(hstruct device *parenth](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j" c.faux_device_create_with_groupsasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjYubj!)}(h&const struct faux_device_ops *faux_opsh](h)}(hj8h]hconst}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubh)}(h h]h }(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj*ubh)}(hhh]hstruct}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubh)}(h h]h }(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj*ubh)}(hhh]j)}(hfaux_device_opsh]hfaux_device_ops}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjimodnameN classnameNj^ja)}jd]j" c.faux_device_create_with_groupsasbuh1hhj*ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj*ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj*ubj)}(hfaux_opsh]hfaux_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjYubj!)}(h%const struct attribute_group **groupsh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hattribute_grouph]hattribute_group}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j" c.faux_device_create_with_groupsasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj{)}(hj~h]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hgroupsh]hgroups}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjYubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhKqubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKqubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKqhjhhubjB)}(hhh]jG)}(hwCreate and register with the driver core a faux device and populate the device with an initial set of sysfs attributes.h]hwCreate and register with the driver core a faux device and populate the device with an initial set of sysfs attributes.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKUhj_hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKqubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjzjgjzjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``const char *name`` The name of the device we are adding, must be unique for all faux devices. ``struct device *parent`` Pointer to a potential parent struct device. If set to NULL, the device will be created in the "root" of the faux device tree in sysfs. ``const struct faux_device_ops *faux_ops`` struct faux_device_ops that the new device will call back into, can be NULL. ``const struct attribute_group **groups`` The set of sysfs attributes that will be created for this device when it is registered with the driver core. **Description** Create a new faux device and register it in the driver core properly. If present, callbacks in **faux_ops** will be called with the device that for the caller to do something with at the proper time given the device's lifecycle. Note, when this function is called, the functions specified in struct faux_ops can be called before the function returns, so be prepared for everything to be properly initialized before that point in time. If the probe callback (if one is present) does NOT succeed, the creation of the device will fail and NULL will be returned. **Return** * NULL if an error happened with creating the device * pointer to a valid struct faux_device that is registered with sysfsh](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKYhj~ubj)}(hhh](j)}(h```const char *name`` The name of the device we are adding, must be unique for all faux devices. h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKYhjubj)}(hhh]jG)}(hJThe name of the device we are adding, must be unique for all faux devices.h]hJThe name of the device we are adding, must be unique for all faux devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKYhjubj)}(h``struct device *parent`` Pointer to a potential parent struct device. If set to NULL, the device will be created in the "root" of the faux device tree in sysfs. h](j)}(h``struct device *parent``h]j)}(hjh]hstruct device *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chK\hjubj)}(hhh]jG)}(hPointer to a potential parent struct device. If set to NULL, the device will be created in the "root" of the faux device tree in sysfs.h]hPointer to a potential parent struct device. If set to NULL, the device will be created in the “root” of the faux device tree in sysfs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKZhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK\hjubj)}(hx``const struct faux_device_ops *faux_ops`` struct faux_device_ops that the new device will call back into, can be NULL. h](j)}(h*``const struct faux_device_ops *faux_ops``h]j)}(hjh]h&const struct faux_device_ops *faux_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chK^hjubj)}(hhh]jG)}(hLstruct faux_device_ops that the new device will call back into, can be NULL.h]hLstruct faux_device_ops that the new device will call back into, can be NULL.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chK]hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hK^hjubj)}(h``const struct attribute_group **groups`` The set of sysfs attributes that will be created for this device when it is registered with the driver core. h](j)}(h)``const struct attribute_group **groups``h]j)}(hjQh]h%const struct attribute_group **groups}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chK`hjKubj)}(hhh]jG)}(hlThe set of sysfs attributes that will be created for this device when it is registered with the driver core.h]hlThe set of sysfs attributes that will be created for this device when it is registered with the driver core.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chK_hjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhK`hjubeh}(h]h ]h"]h$]h&]uh1jhj~ubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKbhj~ubjG)}(hCreate a new faux device and register it in the driver core properly. If present, callbacks in **faux_ops** will be called with the device that for the caller to do something with at the proper time given the device's lifecycle.h](h_Create a new faux device and register it in the driver core properly. If present, callbacks in }(hjhhhNhNubjv)}(h **faux_ops**h]hfaux_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh{ will be called with the device that for the caller to do something with at the proper time given the device’s lifecycle.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKbhj~ubjG)}(hXJNote, when this function is called, the functions specified in struct faux_ops can be called before the function returns, so be prepared for everything to be properly initialized before that point in time. If the probe callback (if one is present) does NOT succeed, the creation of the device will fail and NULL will be returned.h]hXJNote, when this function is called, the functions specified in struct faux_ops can be called before the function returns, so be prepared for everything to be properly initialized before that point in time. If the probe callback (if one is present) does NOT succeed, the creation of the device will fail and NULL will be returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKghj~ubjG)}(h **Return**h]jv)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKmhj~ubj)}(hhh](j)}(h2NULL if an error happened with creating the deviceh]jG)}(hjh]h2NULL if an error happened with creating the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKmhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hCpointer to a valid struct faux_device that is registered with sysfsh]jG)}(hjh]hCpointer to a valid struct faux_device that is registered with sysfs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jj~uh1jhjhKmhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfaux_device_create (C function)c.faux_device_createhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hystruct faux_device * faux_device_create (const char *name, struct device *parent, const struct faux_device_ops *faux_ops)h]h)}(hwstruct faux_device *faux_device_create(const char *name, struct device *parent, const struct faux_device_ops *faux_ops)h](h)}(hhh]hstruct}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKubh)}(h h]h }(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@hhhjQhKubh)}(hhh]j)}(h faux_deviceh]h faux_device}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjemodnameN classnameNj^ja)}jd]jg)}jZfaux_device_createsbc.faux_device_createasbuh1hhj@hhhjQhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@hhhjQhKubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj@hhhjQhKubj)}(hfaux_device_createh]j)}(hjh]hfaux_device_create}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj@hhhjQhKubj)}(hQ(const char *name, struct device *parent, const struct faux_device_ops *faux_ops)h](j!)}(hconst char *nameh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hnameh]hname}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct device *parenth](h)}(hhh]hstruct}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubh)}(h h]h }(hj( hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubh)}(hhh]j)}(hdeviceh]hdevice}(hj9 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6 ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj; modnameN classnameNj^ja)}jd]jc.faux_device_createasbuh1hhj ubh)}(h h]h }(hjW hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj{)}(hj~h]h*}(hje hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj ubj)}(hparenth]hparent}(hjr hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(h&const struct faux_device_ops *faux_opsh](h)}(hj8h]hconst}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubh)}(hhh]hstruct}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubh)}(hhh]j)}(hfaux_device_opsh]hfaux_device_ops}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj modnameN classnameNj^ja)}jd]jc.faux_device_createasbuh1hhj ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj{)}(hj~h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj ubj)}(hfaux_opsh]hfaux_ops}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhj@hhhjQhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj<hhhjQhKubah}(h]j7ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjQhKhj9hhubjB)}(hhh]jG)}(h6create and register with the driver core a faux deviceh]h6create and register with the driver core a faux device}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhj$ hhubah}(h]h ]h"]h$]h&]uh1jAhj9hhhjQhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj? jgj? jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``const char *name`` The name of the device we are adding, must be unique for all faux devices. ``struct device *parent`` Pointer to a potential parent struct device. If set to NULL, the device will be created in the "root" of the faux device tree in sysfs. ``const struct faux_device_ops *faux_ops`` struct faux_device_ops that the new device will call back into, can be NULL. **Description** Create a new faux device and register it in the driver core properly. If present, callbacks in **faux_ops** will be called with the device that for the caller to do something with at the proper time given the device's lifecycle. Note, when this function is called, the functions specified in struct faux_ops can be called before the function returns, so be prepared for everything to be properly initialized before that point in time. **Return** * NULL if an error happened with creating the device * pointer to a valid struct faux_device that is registered with sysfsh](jG)}(h**Parameters**h]jv)}(hjI h]h Parameters}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjG ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhjC ubj)}(hhh](j)}(h```const char *name`` The name of the device we are adding, must be unique for all faux devices. h](j)}(h``const char *name``h]j)}(hjh h]hconst char *name}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhjb ubj)}(hhh]jG)}(hJThe name of the device we are adding, must be unique for all faux devices.h]hJThe name of the device we are adding, must be unique for all faux devices.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhj~ ubah}(h]h ]h"]h$]h&]uh1jhjb ubeh}(h]h ]h"]h$]h&]uh1jhj} hKhj_ ubj)}(h``struct device *parent`` Pointer to a potential parent struct device. If set to NULL, the device will be created in the "root" of the faux device tree in sysfs. h](j)}(h``struct device *parent``h]j)}(hj h]hstruct device *parent}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhj ubj)}(hhh]jG)}(hPointer to a potential parent struct device. If set to NULL, the device will be created in the "root" of the faux device tree in sysfs.h]hPointer to a potential parent struct device. If set to NULL, the device will be created in the “root” of the faux device tree in sysfs.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj_ ubj)}(hx``const struct faux_device_ops *faux_ops`` struct faux_device_ops that the new device will call back into, can be NULL. h](j)}(h*``const struct faux_device_ops *faux_ops``h]j)}(hj h]h&const struct faux_device_ops *faux_ops}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhj ubj)}(hhh]jG)}(hLstruct faux_device_ops that the new device will call back into, can be NULL.h]hLstruct faux_device_ops that the new device will call back into, can be NULL.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj_ ubeh}(h]h ]h"]h$]h&]uh1jhjC ubjG)}(h**Description**h]jv)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhjC ubjG)}(hCreate a new faux device and register it in the driver core properly. If present, callbacks in **faux_ops** will be called with the device that for the caller to do something with at the proper time given the device's lifecycle.h](h_Create a new faux device and register it in the driver core properly. If present, callbacks in }(hj. hhhNhNubjv)}(h **faux_ops**h]hfaux_ops}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj. ubh{ will be called with the device that for the caller to do something with at the proper time given the device’s lifecycle.}(hj. hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhjC ubjG)}(hNote, when this function is called, the functions specified in struct faux_ops can be called before the function returns, so be prepared for everything to be properly initialized before that point in time.h]hNote, when this function is called, the functions specified in struct faux_ops can be called before the function returns, so be prepared for everything to be properly initialized before that point in time.}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhjC ubjG)}(h **Return**h]jv)}(hj` h]hReturn}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhjC ubj)}(hhh](j)}(h2NULL if an error happened with creating the deviceh]jG)}(hj{ h]h2NULL if an error happened with creating the device}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhjy ubah}(h]h ]h"]h$]h&]uh1jhjv ubj)}(hCpointer to a valid struct faux_device that is registered with sysfsh]jG)}(hj h]hCpointer to a valid struct faux_device that is registered with sysfs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhj ubah}(h]h ]h"]h$]h&]uh1jhjv ubeh}(h]h ]h"]h$]h&]jj~uh1jhj hKhjC ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ faux_device_destroy (C function)c.faux_device_destroyhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h7void faux_device_destroy (struct faux_device *faux_dev)h]h)}(h6void faux_device_destroy(struct faux_device *faux_dev)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj hhhj hKubj)}(hfaux_device_destroyh]j)}(hfaux_device_destroyh]hfaux_device_destroy}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj hhhj hKubj)}(h(struct faux_device *faux_dev)h]j!)}(hstruct faux_device *faux_devh](h)}(hhh]hstruct}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubh)}(hhh]j)}(h faux_deviceh]h faux_device}(hj* hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj' ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj, modnameN classnameNj^ja)}jd]jg)}jZj sbc.faux_device_destroyasbuh1hhj ubh)}(h h]h }(hjJ hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj{)}(hj~h]h*}(hjX hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj ubj)}(hfaux_devh]hfaux_dev}(hje hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubah}(h]h ]h"]h$]h&]j+j,uh1jhj hhhj hKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj hhhj hKubah}(h]j ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj hKhj hhubjB)}(hhh]jG)}(hdestroy a faux deviceh]hdestroy a faux device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhj hhubah}(h]h ]h"]h$]h&]uh1jAhj hhhj hKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj jgj jhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct faux_device *faux_dev`` faux device to destroy **Description** Unregisters and cleans up a device that was created with a call to faux_device_create()h](jG)}(h**Parameters**h]jv)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhj ubj)}(hhh]j)}(h8``struct faux_device *faux_dev`` faux device to destroy h](j)}(h ``struct faux_device *faux_dev``h]j)}(hj h]hstruct faux_device *faux_dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhj ubj)}(hhh]jG)}(hfaux device to destroyh]hfaux device to destroy}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubjG)}(h**Description**h]jv)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhj ubjG)}(hWUnregisters and cleans up a device that was created with a call to faux_device_create()h]hWUnregisters and cleans up a device that was created with a call to faux_device_create()}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:47: ./drivers/base/faux.chKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌnode_access_nodes (C struct)c.node_access_nodeshNtauh1hhjUhhhNhNubh)}(hhh](h)}(hnode_access_nodesh]h)}(hstruct node_access_nodesh](h)}(hhh]hstruct}(hjP hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjL hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKubh)}(h h]h }(hj^ hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjL hhhj] hKubj)}(hnode_access_nodesh]j)}(hjJ h]hnode_access_nodes}(hjp hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjL hhhj] hKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjH hhhj] hKubah}(h]jC ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj] hKhjE hhubjB)}(hhh]jG)}(hFAccess class device to hold user visible relationships to other nodes.h]hFAccess class device to hold user visible relationships to other nodes.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKHhj hhubah}(h]h ]h"]h$]h&]uh1jAhjE hhhj] hKubeh}(h]h ](j`structeh"]h$]h&]jej`jfj jgj jhjijjuh1hhhhjUhNhNubjl)}(hX**Definition**:: struct node_access_nodes { struct device dev; struct list_head list_node; unsigned int access; #ifdef CONFIG_HMEM_REPORTING; struct access_coordinate coord; #endif; }; **Members** ``dev`` Device for this memory access class ``list_node`` List element in the node's access list ``access`` The access class rank ``coord`` Heterogeneous memory performance coordinatesh](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKLhj ubj)}(hstruct node_access_nodes { struct device dev; struct list_head list_node; unsigned int access; #ifdef CONFIG_HMEM_REPORTING; struct access_coordinate coord; #endif; };h]hstruct node_access_nodes { struct device dev; struct list_head list_node; unsigned int access; #ifdef CONFIG_HMEM_REPORTING; struct access_coordinate coord; #endif; };}hj sbah}(h]h ]h"]h$]h&]j+j,uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKNhj ubjG)}(h **Members**h]jv)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKWhj ubj)}(hhh](j)}(h,``dev`` Device for this memory access class h](j)}(h``dev``h]j)}(hj h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKKhj ubj)}(hhh]jG)}(h#Device for this memory access classh]h#Device for this memory access class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKKhjubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjhKKhj ubj)}(h5``list_node`` List element in the node's access list h](j)}(h ``list_node``h]j)}(hj8h]h list_node}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKLhj2ubj)}(hhh]jG)}(h&List element in the node's access listh]h(List element in the node’s access list}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjMhKLhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhKLhj ubj)}(h!``access`` The access class rank h](j)}(h ``access``h]j)}(hjqh]haccess}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKMhjkubj)}(hhh]jG)}(hThe access class rankh]hThe access class rank}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhKMhj ubj)}(h6``coord`` Heterogeneous memory performance coordinatesh](j)}(h ``coord``h]j)}(hjh]hcoord}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKMhjubj)}(hhh]jG)}(h,Heterogeneous memory performance coordinatesh]h,Heterogeneous memory performance coordinates}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌnode_cache_info (C struct)c.node_cache_infohNtauh1hhjUhhhNhNubh)}(hhh](h)}(hnode_cache_infoh]h)}(hstruct node_cache_infoh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj)}(hnode_cache_infoh]j)}(hjh]hnode_cache_info}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]jG)}(h(Internal tracking for memory node cachesh]h(Internal tracking for memory node caches}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKhjChhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j`structeh"]h$]h&]jej`jfj^jgj^jhjijjuh1hhhhjUhNhNubjl)}(hX2**Definition**:: struct node_cache_info { struct device dev; struct list_head node; struct node_cache_attrs cache_attrs; }; **Members** ``dev`` Device represeting the cache level ``node`` List element for tracking in the node ``cache_attrs`` Attributes for this cache levelh](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh:}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKhjbubj)}(hvstruct node_cache_info { struct device dev; struct list_head node; struct node_cache_attrs cache_attrs; };h]hvstruct node_cache_info { struct device dev; struct list_head node; struct node_cache_attrs cache_attrs; };}hjsbah}(h]h ]h"]h$]h&]j+j,uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKhjbubjG)}(h **Members**h]jv)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKhjbubj)}(hhh](j)}(h+``dev`` Device represeting the cache level h](j)}(h``dev``h]j)}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKhjubj)}(hhh]jG)}(h"Device represeting the cache levelh]h"Device represeting the cache level}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h/``node`` List element for tracking in the node h](j)}(h``node``h]j)}(hjh]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKhjubj)}(hhh]jG)}(h%List element for tracking in the nodeh]h%List element for tracking in the node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h/``cache_attrs`` Attributes for this cache levelh](j)}(h``cache_attrs``h]j)}(hj%h]h cache_attrs}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKhjubj)}(hhh]jG)}(hAttributes for this cache levelh]hAttributes for this cache level}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chKhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hKhjubeh}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌnode_add_cache (C function)c.node_add_cachehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hLvoid node_add_cache (unsigned int nid, struct node_cache_attrs *cache_attrs)h]h)}(hKvoid node_add_cache(unsigned int nid, struct node_cache_attrs *cache_attrs)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chM+ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj{hhhjhM+ubj)}(hnode_add_cacheh]j)}(hnode_add_cacheh]hnode_add_cache}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj{hhhjhM+ubj)}(h8(unsigned int nid, struct node_cache_attrs *cache_attrs)h](j!)}(hunsigned int nidh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hnidh]hnid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(h$struct node_cache_attrs *cache_attrsh](h)}(hhh]hstruct}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubh)}(hhh]j)}(hnode_cache_attrsh]hnode_cache_attrs}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj-modnameN classnameNj^ja)}jd]jg)}jZjsbc.node_add_cacheasbuh1hhj ubh)}(h h]h }(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj{)}(hj~h]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj ubj)}(h cache_attrsh]h cache_attrs}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhj{hhhjhM+ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjwhhhjhM+ubah}(h]jrah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM+hjthhubjB)}(hhh]jG)}(h$add cache attribute to a memory nodeh]h$add cache attribute to a memory node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chM'hjhhubah}(h]h ]h"]h$]h&]uh1jAhjthhhjhM+ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``unsigned int nid`` Node identifier that has new cache attributes ``struct node_cache_attrs *cache_attrs`` Attributes for the cache being addedh](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chM+hjubj)}(hhh](j)}(hC``unsigned int nid`` Node identifier that has new cache attributes h](j)}(h``unsigned int nid``h]j)}(hjh]hunsigned int nid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chM(hjubj)}(hhh]jG)}(h-Node identifier that has new cache attributesh]h-Node identifier that has new cache attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubj)}(hM``struct node_cache_attrs *cache_attrs`` Attributes for the cache being addedh](j)}(h(``struct node_cache_attrs *cache_attrs``h]j)}(hj h]h$struct node_cache_attrs *cache_attrs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chM*hjubj)}(hhh]jG)}(h$Attributes for the cache being addedh]h$Attributes for the cache being added}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chM)hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌunregister_node (C function)c.unregister_nodehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h(void unregister_node (struct node *node)h]h)}(h'void unregister_node(struct node *node)h](j)}(hvoidh]hvoid}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chMubh)}(h h]h }(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj`hhhjrhMubj)}(hunregister_nodeh]j)}(hunregister_nodeh]hunregister_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj`hhhjrhMubj)}(h(struct node *node)h]j!)}(hstruct node *nodeh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.unregister_nodeasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhj`hhhjrhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj\hhhjrhMubah}(h]jWah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjrhMhjYhhubjB)}(hhh]jG)}(hunregister a node deviceh]hunregister a node device}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chM}hj!hhubah}(h]h ]h"]h$]h&]uh1jAhjYhhhjrhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj<jgj<jhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct node *node`` node going away **Description** Unregisters a node device **node**. All the devices on the node must be unregistered before calling this function.h](jG)}(h**Parameters**h]jv)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chMhj@ubj)}(hhh]j)}(h&``struct node *node`` node going away h](j)}(h``struct node *node``h]j)}(hjeh]hstruct node *node}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chM~hj_ubj)}(hhh]jG)}(hnode going awayh]hnode going away}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjzhM~hj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhM~hj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chMhj@ubjG)}(hsUnregisters a node device **node**. All the devices on the node must be unregistered before calling this function.h](hUnregisters a node device }(hjhhhNhNubjv)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhQ. All the devices on the node must be unregistered before calling this function.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ4register_memory_node_under_compute_node (C function))c.register_memory_node_under_compute_nodehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h}int register_memory_node_under_compute_node (unsigned int mem_nid, unsigned int cpu_nid, enum access_coordinate_class access)h]h)}(h|int register_memory_node_under_compute_node(unsigned int mem_nid, unsigned int cpu_nid, enum access_coordinate_class access)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(h'register_memory_node_under_compute_nodeh]j)}(h'register_memory_node_under_compute_nodeh]h'register_memory_node_under_compute_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubj)}(hQ(unsigned int mem_nid, unsigned int cpu_nid, enum access_coordinate_class access)h](j!)}(hunsigned int mem_nidh](j)}(hunsignedh]hunsigned}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(h h]h }(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj0ubj)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(h h]h }(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj0ubj)}(hmem_nidh]hmem_nid}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj,ubj!)}(hunsigned int cpu_nidh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hcpu_nidh]hcpu_nid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj,ubj!)}(h#enum access_coordinate_class accessh](h)}(hjMh]henum}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(haccess_coordinate_classh]haccess_coordinate_class}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsb)c.register_memory_node_under_compute_nodeasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(haccessh]haccess}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj,ubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(h>link memory node to its compute node for a given access class.h]h>link memory node to its compute node for a given access class.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chMhjIhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjdjgjdjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``unsigned int mem_nid`` Memory node number ``unsigned int cpu_nid`` Cpu node number ``enum access_coordinate_class access`` Access class to register **Description** For use with platforms that may have separate memory and compute nodes. This function will export node relationships linking which memory initiator nodes can access memory targets at a given ranked access class.h](jG)}(h**Parameters**h]jv)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chMhjhubj)}(hhh](j)}(h,``unsigned int mem_nid`` Memory node number h](j)}(h``unsigned int mem_nid``h]j)}(hjh]hunsigned int mem_nid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chMhjubj)}(hhh]jG)}(hMemory node numberh]hMemory node number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h*``unsigned int cpu_nid`` Cpu node number h](j)}(h``unsigned int cpu_nid``h]j)}(hjh]hunsigned int cpu_nid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chMhjubj)}(hhh]jG)}(hCpu node numberh]hCpu node number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hA``enum access_coordinate_class access`` Access class to register h](j)}(h'``enum access_coordinate_class access``h]j)}(hjh]h#enum access_coordinate_class access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chMhjubj)}(hhh]jG)}(hAccess class to registerh]hAccess class to register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhubjG)}(h**Description**h]jv)}(hj:h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chMhjhubj;)}(hFor use with platforms that may have separate memory and compute nodes. This function will export node relationships linking which memory initiator nodes can access memory targets at a given ranked access class.h]jG)}(hFor use with platforms that may have separate memory and compute nodes. This function will export node relationships linking which memory initiator nodes can access memory targets at a given ranked access class.h]hFor use with platforms that may have separate memory and compute nodes. This function will export node relationships linking which memory initiator nodes can access memory targets at a given ranked access class.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jFh]/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:50: ./drivers/base/node.chMhjPubah}(h]h ]h"]h$]h&]uh1j:hjbhMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%transport_class_register (C function)c.transport_class_registerhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h=int transport_class_register (struct transport_class *tclass)h]h)}(hj?)j@huh1hhjhK3hj~hhubjB)}(hhh]jG)}(h#register an initial transport classh]h#register an initial transport class}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chK&hjFhhubah}(h]h ]h"]h$]h&]uh1jAhj~hhhjhK3ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjajgjajhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct transport_class *tclass`` a pointer to the transport class structure to be initialised **Description** The transport class contains an embedded class which is used to identify it. The caller should initialise this structure with zeros and then generic class must have been initialised with the actual transport class unique name. There's a macro DECLARE_TRANSPORT_CLASS() to do this (declared classes still must be registered). Returns 0 on success or error on failure.h](jG)}(h**Parameters**h]jv)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chK*hjeubj)}(hhh]j)}(h```struct transport_class *tclass`` a pointer to the transport class structure to be initialised h](j)}(h"``struct transport_class *tclass``h]j)}(hjh]hstruct transport_class *tclass}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chK(hjubj)}(hhh]jG)}(hj?)j@huh1hhj'hKAhjhhubjB)}(hhh]jG)}(h(unregister a previously registered classh]h(unregister a previously registered class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chK:hjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj'hKAubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct transport_class *tclass`` The transport class to unregister **Description** Must be called prior to deallocating the memory for the transport class.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chK>hjubj)}(hhh]j)}(hE``struct transport_class *tclass`` The transport class to unregister h](j)}(h"``struct transport_class *tclass``h]j)}(hjh]hstruct transport_class *tclass}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhjubjG)}(hHMust be called prior to deallocating the memory for the transport class.h]hHMust be called prior to deallocating the memory for the transport class.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chK>hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*anon_transport_class_register (C function)c.anon_transport_class_registerhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hDint anon_transport_class_register (struct anon_transport_class *atc)h]h)}(hCint anon_transport_class_register(struct anon_transport_class *atc)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chK[ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhK[ubj)}(hanon_transport_class_registerh]j)}(hanon_transport_class_registerh]hanon_transport_class_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhK[ubj)}(h"(struct anon_transport_class *atc)h]j!)}(h struct anon_transport_class *atch](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hanon_transport_classh]hanon_transport_class}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.anon_transport_class_registerasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hatch]hatc}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhK[ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhK[ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhK[hjhhubjB)}(hhh]jG)}(hregister an anonymous classh]hregister an anonymous class}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKPhjWhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhK[ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjrjgjrjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct anon_transport_class *atc`` The anon transport class to register **Description** The anonymous transport class contains both a transport class and a container. The idea of an anonymous class is that it never actually has any device attributes associated with it (and thus saves on container storage). So it can only be used for triggering events. Use prezero and then use DECLARE_ANON_TRANSPORT_CLASS() to initialise the anon transport class storage.h](jG)}(h**Parameters**h]jv)}(hj|h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKThjvubj)}(hhh]j)}(hJ``struct anon_transport_class *atc`` The anon transport class to register h](j)}(h$``struct anon_transport_class *atc``h]j)}(hjh]h struct anon_transport_class *atc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKRhjubj)}(hhh]jG)}(h$The anon transport class to registerh]h$The anon transport class to register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKRhjubah}(h]h ]h"]h$]h&]uh1jhjvubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKThjvubjG)}(hXtThe anonymous transport class contains both a transport class and a container. The idea of an anonymous class is that it never actually has any device attributes associated with it (and thus saves on container storage). So it can only be used for triggering events. Use prezero and then use DECLARE_ANON_TRANSPORT_CLASS() to initialise the anon transport class storage.h]hXtThe anonymous transport class contains both a transport class and a container. The idea of an anonymous class is that it never actually has any device attributes associated with it (and thus saves on container storage). So it can only be used for triggering events. Use prezero and then use DECLARE_ANON_TRANSPORT_CLASS() to initialise the anon transport class storage.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKThjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,anon_transport_class_unregister (C function)!c.anon_transport_class_unregisterhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hGvoid anon_transport_class_unregister (struct anon_transport_class *atc)h]h)}(hFvoid anon_transport_class_unregister(struct anon_transport_class *atc)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKqubh)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj)hKqubj)}(hanon_transport_class_unregisterh]j)}(hanon_transport_class_unregisterh]hanon_transport_class_unregister}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhj)hKqubj)}(h"(struct anon_transport_class *atc)h]j!)}(h struct anon_transport_class *atch](h)}(hhh]hstruct}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubh)}(h h]h }(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjTubh)}(hhh]j)}(hanon_transport_classh]hanon_transport_class}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjxmodnameN classnameNj^ja)}jd]jg)}jZj>sb!c.anon_transport_class_unregisterasbuh1hhjTubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjTubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjTubj)}(hatch]hatc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjPubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhj)hKqubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhj)hKqubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj)hKqhjhhubjB)}(hhh]jG)}(hunregister an anon classh]hunregister an anon class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKjhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj)hKqubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct anon_transport_class *atc`` Pointer to the anon transport class to unregister **Description** Must be called prior to deallocating the memory for the anon transport class.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKnhjubj)}(hhh]j)}(hW``struct anon_transport_class *atc`` Pointer to the anon transport class to unregister h](j)}(h$``struct anon_transport_class *atc``h]j)}(hjh]h struct anon_transport_class *atc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKlhjubj)}(hhh]jG)}(h1Pointer to the anon transport class to unregisterh]h1Pointer to the anon transport class to unregister}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj1hKlhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hKlhjubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjWh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKnhjubjG)}(hMMust be called prior to deallocating the memory for the anon transport class.h]hMMust be called prior to deallocating the memory for the anon transport class.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKnhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#transport_setup_device (C function)c.transport_setup_devicehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h0void transport_setup_device (struct device *dev)h]h)}(h/void transport_setup_device(struct device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj)}(htransport_setup_deviceh]j)}(htransport_setup_deviceh]htransport_setup_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.transport_setup_deviceasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]jG)}(hPdeclare a new dev for transport class association but don't make it visible yet.h]hRdeclare a new dev for transport class association but don’t make it visible yet.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhjYhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjtjgjtjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *dev`` the generic device representing the entity being added **Description** Usually, dev represents some component in the HBA system (either the HBA itself or a device remote across the HBA bus). This routine is simply a trigger point to see if any set of transport classes wishes to associate with the added device. This allocates storage for the class device and initialises it, but does not yet add it to the system or add attributes to it (you do this with transport_add_device). If you have no need for a separate setup and add operations, use transport_register_device (see transport_class.h).h](jG)}(h**Parameters**h]jv)}(hj~h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhjxubj)}(hhh]j)}(hN``struct device *dev`` the generic device representing the entity being added h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhjubj)}(hhh]jG)}(h6the generic device representing the entity being addedh]h6the generic device representing the entity being added}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjxubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhjxubjG)}(hXUsually, dev represents some component in the HBA system (either the HBA itself or a device remote across the HBA bus). This routine is simply a trigger point to see if any set of transport classes wishes to associate with the added device. This allocates storage for the class device and initialises it, but does not yet add it to the system or add attributes to it (you do this with transport_add_device). If you have no need for a separate setup and add operations, use transport_register_device (see transport_class.h).h]hXUsually, dev represents some component in the HBA system (either the HBA itself or a device remote across the HBA bus). This routine is simply a trigger point to see if any set of transport classes wishes to associate with the added device. This allocates storage for the class device and initialises it, but does not yet add it to the system or add attributes to it (you do this with transport_add_device). If you have no need for a separate setup and add operations, use transport_register_device (see transport_class.h).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!transport_add_device (C function)c.transport_add_devicehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h-int transport_add_device (struct device *dev)h]h)}(h,int transport_add_device(struct device *dev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKubh)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj+hKubj)}(htransport_add_deviceh]j)}(htransport_add_deviceh]htransport_add_device}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhj+hKubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubh)}(h h]h }(hjghhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjVubh)}(hhh]j)}(hdeviceh]hdevice}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjzmodnameN classnameNj^ja)}jd]jg)}jZj@sbc.transport_add_deviceasbuh1hhjVubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjVubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjVubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjRubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhj+hKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhj+hKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj+hKhjhhubjB)}(hhh]jG)}(h1declare a new dev for transport class associationh]h1declare a new dev for transport class association}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj+hKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hXV**Parameters** ``struct device *dev`` the generic device representing the entity being added **Description** Usually, dev represents some component in the HBA system (either the HBA itself or a device remote across the HBA bus). This routine is simply a trigger point used to add the device to the system and register attributes for it.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhjubj)}(hhh]j)}(hN``struct device *dev`` the generic device representing the entity being added h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhjubj)}(hhh]jG)}(h6the generic device representing the entity being addedh]h6the generic device representing the entity being added}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj3hKhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hKhjubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhjubjG)}(hUsually, dev represents some component in the HBA system (either the HBA itself or a device remote across the HBA bus). This routine is simply a trigger point used to add the device to the system and register attributes for it.h]hUsually, dev represents some component in the HBA system (either the HBA itself or a device remote across the HBA bus). This routine is simply a trigger point used to add the device to the system and register attributes for it.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'transport_configure_device (C function)c.transport_configure_devicehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h4void transport_configure_device (struct device *dev)h]h)}(h3void transport_configure_device(struct device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj)}(htransport_configure_deviceh]j)}(htransport_configure_deviceh]htransport_configure_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.transport_configure_deviceasbuh1hhjubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj' hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hj4 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]jG)}(h"configure an already set up deviceh]h"configure an already set up device}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhj[ hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjv jgjv jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *dev`` generic device representing device to be configured **Description** The idea of configure is simply to provide a point within the setup process to allow the transport class to extract information from a device after it has been setup. This is used in SCSI because we have to have a setup device to begin using the HBA, but after we send the initial inquiry, we use configure to extract the device parameters. The device need not have been added to be configured.h](jG)}(h**Parameters**h]jv)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ ubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhjz ubj)}(hhh]j)}(hK``struct device *dev`` generic device representing device to be configured h](j)}(h``struct device *dev``h]j)}(hj h]hstruct device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhj ubj)}(hhh]jG)}(h3generic device representing device to be configuredh]h3generic device representing device to be configured}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjz ubjG)}(h**Description**h]jv)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhjz ubjG)}(hXThe idea of configure is simply to provide a point within the setup process to allow the transport class to extract information from a device after it has been setup. This is used in SCSI because we have to have a setup device to begin using the HBA, but after we send the initial inquiry, we use configure to extract the device parameters. The device need not have been added to be configured.h]hXThe idea of configure is simply to provide a point within the setup process to allow the transport class to extract information from a device after it has been setup. This is used in SCSI because we have to have a setup device to begin using the HBA, but after we send the initial inquiry, we use configure to extract the device parameters. The device need not have been added to be configured.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhjz ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$transport_remove_device (C function)c.transport_remove_devicehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h1void transport_remove_device (struct device *dev)h]h)}(h0void transport_remove_device(struct device *dev)h](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chM ubh)}(h h]h }(hj.!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!hhhj-!hM ubj)}(htransport_remove_deviceh]j)}(htransport_remove_deviceh]htransport_remove_device}(hj@!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj?)j@huh1hhj-!hM hj!hhubjB)}(hhh]jG)}(h!remove the visibility of a deviceh]h!remove the visibility of a device}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chKhj!hhubah}(h]h ]h"]h$]h&]uh1jAhj!hhhj-!hM ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj!jgj!jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *dev`` generic device to remove **Description** This call removes the visibility of the device (to the user from sysfs), but does not destroy it. To eliminate a device entirely you must also call transport_destroy_device. If you don't need to do remove and destroy as separate operations, use transport_unregister_device() (see transport_class.h) which will perform both calls for you.h](jG)}(h**Parameters**h]jv)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!ubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chMhj!ubj)}(hhh]j)}(h0``struct device *dev`` generic device to remove h](j)}(h``struct device *dev``h]j)}(hj "h]hstruct device *dev}(hj""hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chMhj"ubj)}(hhh]jG)}(hgeneric device to removeh]hgeneric device to remove}(hj9"hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj5"hMhj6"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj5"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj!ubjG)}(h**Description**h]jv)}(hj["h]h Description}(hj]"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjY"ubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chMhj!ubjG)}(hXSThis call removes the visibility of the device (to the user from sysfs), but does not destroy it. To eliminate a device entirely you must also call transport_destroy_device. If you don't need to do remove and destroy as separate operations, use transport_unregister_device() (see transport_class.h) which will perform both calls for you.h]hXUThis call removes the visibility of the device (to the user from sysfs), but does not destroy it. To eliminate a device entirely you must also call transport_destroy_device. If you don’t need to do remove and destroy as separate operations, use transport_unregister_device() (see transport_class.h) which will perform both calls for you.}(hjq"hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%transport_destroy_device (C function)c.transport_destroy_devicehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h2void transport_destroy_device (struct device *dev)h]h)}(h1void transport_destroy_device(struct device *dev)h](j)}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chM'ubh)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj"hhhj"hM'ubj)}(htransport_destroy_deviceh]j)}(htransport_destroy_deviceh]htransport_destroy_device}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj"hhhj"hM'ubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubh)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj"ubh)}(hhh]j)}(hdeviceh]hdevice}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj"modnameN classnameNj^ja)}jd]jg)}jZj"sbc.transport_destroy_deviceasbuh1hhj"ubh)}(h h]h }(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj"ubj{)}(hj~h]h*}(hj)#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj"ubj)}(hdevh]hdev}(hj6#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj"ubah}(h]h ]h"]h$]h&]j+j,uh1jhj"hhhj"hM'ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj"hhhj"hM'ubah}(h]j"ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj"hM'hj"hhubjB)}(hhh]jG)}(hdestroy a removed deviceh]hdestroy a removed device}(hj`#hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chMhj]#hhubah}(h]h ]h"]h$]h&]uh1jAhj"hhhj"hM'ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjx#jgjx#jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *dev`` device to eliminate from the transport class. **Description** This call triggers the elimination of storage associated with the transport classdev. Note: all it really does is relinquish a reference to the classdev. The memory will not be freed until the last reference goes to zero. Note also that the classdev retains a reference count on dev, so dev too will remain for as long as the transport class device remains around.h](jG)}(h**Parameters**h]jv)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chM hj|#ubj)}(hhh]j)}(hE``struct device *dev`` device to eliminate from the transport class. h](j)}(h``struct device *dev``h]j)}(hj#h]hstruct device *dev}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chMhj#ubj)}(hhh]jG)}(h-device to eliminate from the transport class.h]h-device to eliminate from the transport class.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj|#ubjG)}(h**Description**h]jv)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chM hj|#ubjG)}(hXoThis call triggers the elimination of storage associated with the transport classdev. Note: all it really does is relinquish a reference to the classdev. The memory will not be freed until the last reference goes to zero. Note also that the classdev retains a reference count on dev, so dev too will remain for as long as the transport class device remains around.h]hXoThis call triggers the elimination of storage associated with the transport classdev. Note: all it really does is relinquish a reference to the classdev. The memory will not be freed until the last reference goes to zero. Note also that the classdev retains a reference count on dev, so dev too will remain for as long as the transport class device remains around.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhh/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:53: ./drivers/base/transport_class.chM hj|#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.driver_deferred_probe_check_state (C function)#c.driver_deferred_probe_check_statehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h:int driver_deferred_probe_check_state (struct device *dev)h]h)}(h9int driver_deferred_probe_check_state(struct device *dev)h](j)}(hinth]hint}(hj!$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chM ubh)}(h h]h }(hj0$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj$hhhj/$hM ubj)}(h!driver_deferred_probe_check_stateh]j)}(h!driver_deferred_probe_check_stateh]h!driver_deferred_probe_check_state}(hjB$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>$ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj$hhhj/$hM ubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hj^$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZ$ubh)}(h h]h }(hjk$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjZ$ubh)}(hhh]j)}(hdeviceh]hdevice}(hj|$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy$ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj~$modnameN classnameNj^ja)}jd]jg)}jZjD$sb#c.driver_deferred_probe_check_stateasbuh1hhjZ$ubh)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjZ$ubj{)}(hj~h]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjZ$ubj)}(hdevh]hdev}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ$ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjV$ubah}(h]h ]h"]h$]h&]j+j,uh1jhj$hhhj/$hM ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj$hhhj/$hM ubah}(h]j$ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj/$hM hj$hhubjB)}(hhh]jG)}(hCheck deferred probe stateh]hCheck deferred probe state}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj$hhubah}(h]h ]h"]h$]h&]uh1jAhj$hhhj/$hM ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj$jgj$jhjijjuh1hhhhjUhNhNubjl)}(hX|**Parameters** ``struct device *dev`` device to check **Return** * -ENODEV if initcalls have completed and modules are disabled. * -ETIMEDOUT if the deferred probe timeout was set and has expired and modules are enabled. * -EPROBE_DEFER in other cases. **Description** Drivers or subsystems can opt-in to calling this function instead of directly returning -EPROBE_DEFER.h](jG)}(h**Parameters**h]jv)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj$ubj)}(hhh]j)}(h'``struct device *dev`` device to check h](j)}(h``struct device *dev``h]j)}(hj"%h]hstruct device *dev}(hj$%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj %ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj%ubj)}(hhh]jG)}(hdevice to checkh]hdevice to check}(hj;%hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj7%hMhj8%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj7%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj$ubjG)}(h **Return**h]jv)}(hj]%h]hReturn}(hj_%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[%ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj$ubj)}(hhh](j)}(h=-ENODEV if initcalls have completed and modules are disabled.h]jG)}(hjx%h]h=-ENODEV if initcalls have completed and modules are disabled.}(hjz%hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhjv%ubah}(h]h ]h"]h$]h&]uh1jhjs%ubj)}(hY-ETIMEDOUT if the deferred probe timeout was set and has expired and modules are enabled.h]jG)}(hY-ETIMEDOUT if the deferred probe timeout was set and has expired and modules are enabled.h]hY-ETIMEDOUT if the deferred probe timeout was set and has expired and modules are enabled.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj%ubah}(h]h ]h"]h$]h&]uh1jhjs%ubj)}(h-EPROBE_DEFER in other cases. h]jG)}(h-EPROBE_DEFER in other cases.h]h-EPROBE_DEFER in other cases.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj%ubah}(h]h ]h"]h$]h&]uh1jhjs%ubeh}(h]h ]h"]h$]h&]jj~uh1jhj%hMhj$ubjG)}(h**Description**h]jv)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj$ubjG)}(hfDrivers or subsystems can opt-in to calling this function instead of directly returning -EPROBE_DEFER.h]hfDrivers or subsystems can opt-in to calling this function instead of directly returning -EPROBE_DEFER.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_is_bound (C function)c.device_is_boundhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h)bool device_is_bound (struct device *dev)h]h)}(h(bool device_is_bound(struct device *dev)h](j)}(hj7h]hbool}(hj &hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj &hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMubh)}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj &hhhj&hMubj)}(hdevice_is_boundh]j)}(hdevice_is_boundh]hdevice_is_bound}(hj-&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)&ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj &hhhj&hMubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjI&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjE&ubh)}(h h]h }(hjV&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjE&ubh)}(hhh]j)}(hdeviceh]hdevice}(hjg&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd&ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetji&modnameN classnameNj^ja)}jd]jg)}jZj/&sbc.device_is_boundasbuh1hhjE&ubh)}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjE&ubj{)}(hj~h]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjE&ubj)}(hdevh]hdev}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE&ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjA&ubah}(h]h ]h"]h$]h&]j+j,uh1jhj &hhhj&hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj&hhhj&hMubah}(h]j&ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj&hMhj&hhubjB)}(hhh]jG)}(h$Check if device is bound to a driverh]h$Check if device is bound to a driver}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jAhj&hhhj&hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj&jgj&jhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct device *dev`` device to check **Description** Returns true if passed device has already finished probing successfully against a driver. This function must be called with the device lock held.h](jG)}(h**Parameters**h]jv)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj&ubj)}(hhh]j)}(h'``struct device *dev`` device to check h](j)}(h``struct device *dev``h]j)}(hj 'h]hstruct device *dev}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 'ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj'ubj)}(hhh]jG)}(hdevice to checkh]hdevice to check}(hj&'hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj"'hMhj#'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj"'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj&ubjG)}(h**Description**h]jv)}(hjH'h]h Description}(hjJ'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjF'ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj&ubjG)}(hYReturns true if passed device has already finished probing successfully against a driver.h]hYReturns true if passed device has already finished probing successfully against a driver.}(hj^'hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj&ubjG)}(h7This function must be called with the device lock held.h]h7This function must be called with the device lock held.}(hjm'hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_bind_driver (C function)c.device_bind_driverhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h+int device_bind_driver (struct device *dev)h]h)}(h*int device_bind_driver(struct device *dev)h](j)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMubh)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'hhhj'hMubj)}(hdevice_bind_driverh]j)}(hdevice_bind_driverh]hdevice_bind_driver}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj'hhhj'hMubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubh)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubh)}(hhh]j)}(hdeviceh]hdevice}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj'modnameN classnameNj^ja)}jd]jg)}jZj'sbc.device_bind_driverasbuh1hhj'ubh)}(h h]h }(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubj{)}(hj~h]h*}(hj%(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj'ubj)}(hdevh]hdev}(hj2(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj'ubah}(h]h ]h"]h$]h&]j+j,uh1jhj'hhhj'hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj'hhhj'hMubah}(h]j'ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj'hMhj'hhubjB)}(hhh]jG)}(hbind a driver to one device.h]hbind a driver to one device.}(hj\(hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhjY(hhubah}(h]h ]h"]h$]h&]uh1jAhj'hhhj'hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjt(jgjt(jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *dev`` device. **Description** Allow manual attachment of a driver to a device. Caller must have already set **dev->driver**. Note that this does not modify the bus reference count. Please verify that is accounted for before calling this. (It is ok to call with no other effort from a driver's probe() method.) This function must be called with the device lock held. Callers should prefer to use device_driver_attach() instead.h](jG)}(h**Parameters**h]jv)}(hj~(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|(ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhjx(ubj)}(hhh]j)}(h``struct device *dev`` device. h](j)}(h``struct device *dev``h]j)}(hj(h]hstruct device *dev}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj(ubj)}(hhh]jG)}(hdevice.h]hdevice.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhjx(ubjG)}(h**Description**h]jv)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhjx(ubjG)}(h^Allow manual attachment of a driver to a device. Caller must have already set **dev->driver**.h](hNAllow manual attachment of a driver to a device. Caller must have already set }(hj(hhhNhNubjv)}(h**dev->driver**h]h dev->driver}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubh.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhjx(ubjG)}(hNote that this does not modify the bus reference count. Please verify that is accounted for before calling this. (It is ok to call with no other effort from a driver's probe() method.)h]hNote that this does not modify the bus reference count. Please verify that is accounted for before calling this. (It is ok to call with no other effort from a driver’s probe() method.)}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhjx(ubjG)}(h7This function must be called with the device lock held.h]h7This function must be called with the device lock held.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhjx(ubjG)}(hj?)j@huh1hhjj)hMhjQ)hhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhjQ)hhhjj)hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj)jgj)jhjijjuh1hhhhjUhNhNubjl)}(hb**Parameters** ``void`` no arguments **Description** Wait for device probing to be completed.h](jG)}(h**Parameters**h]jv)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj)ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hj)h]hvoid}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj)ubj)}(hhh]jG)}(h no argumentsh]h no arguments}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj *hMhj *ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj *hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubjG)}(h**Description**h]jv)}(hj0*h]h Description}(hj2*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.*ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj)ubjG)}(h(Wait for device probing to be completed.h]h(Wait for device probing to be completed.}(hjF*hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_attach (C function)c.device_attachhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h&int device_attach (struct device *dev)h]h)}(h%int device_attach(struct device *dev)h](j)}(hinth]hint}(hju*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq*hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chM.ubh)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjq*hhhj*hM.ubj)}(h device_attachh]j)}(h device_attachh]h device_attach}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjq*hhhj*hM.ubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubh)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj*ubh)}(hhh]j)}(hdeviceh]hdevice}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj*modnameN classnameNj^ja)}jd]jg)}jZj*sbc.device_attachasbuh1hhj*ubh)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj*ubj{)}(hj~h]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj*ubj)}(hdevh]hdev}(hj +hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj*ubah}(h]h ]h"]h$]h&]j+j,uh1jhjq*hhhj*hM.ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjm*hhhj*hM.ubah}(h]jh*ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj*hM.hjj*hhubjB)}(hhh]jG)}(h!try to attach device to a driver.h]h!try to attach device to a driver.}(hj5+hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chM!hj2+hhubah}(h]h ]h"]h$]h&]uh1jAhjj*hhhj*hM.ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjM+jgjM+jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *dev`` device. **Description** Walk the list of drivers that the bus has and call driver_probe_device() for each pair. If a compatible pair is found, break out and return. Returns 1 if the device was bound to a driver; 0 if no matching driver was found; -ENODEV if the device is not registered. When called for a USB interface, **dev->parent** lock must be held.h](jG)}(h**Parameters**h]jv)}(hjW+h]h Parameters}(hjY+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjU+ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chM%hjQ+ubj)}(hhh]j)}(h``struct device *dev`` device. h](j)}(h``struct device *dev``h]j)}(hjv+h]hstruct device *dev}(hjx+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt+ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chM"hjp+ubj)}(hhh]jG)}(hdevice.h]hdevice.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj+hM"hj+ubah}(h]h ]h"]h$]h&]uh1jhjp+ubeh}(h]h ]h"]h$]h&]uh1jhj+hM"hjm+ubah}(h]h ]h"]h$]h&]uh1jhjQ+ubjG)}(h**Description**h]jv)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chM$hjQ+ubjG)}(hWalk the list of drivers that the bus has and call driver_probe_device() for each pair. If a compatible pair is found, break out and return.h]hWalk the list of drivers that the bus has and call driver_probe_device() for each pair. If a compatible pair is found, break out and return.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chM$hjQ+ubjG)}(hzReturns 1 if the device was bound to a driver; 0 if no matching driver was found; -ENODEV if the device is not registered.h]hzReturns 1 if the device was bound to a driver; 0 if no matching driver was found; -ENODEV if the device is not registered.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chM(hjQ+ubjG)}(hCWhen called for a USB interface, **dev->parent** lock must be held.h](h!When called for a USB interface, }(hj+hhhNhNubjv)}(h**dev->parent**h]h dev->parent}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh lock must be held.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chM,hjQ+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!device_driver_attach (C function)c.device_driver_attachhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hNint device_driver_attach (const struct device_driver *drv, struct device *dev)h]h)}(hMint device_driver_attach(const struct device_driver *drv, struct device *dev)h](j)}(hinth]hint}(hj&,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj",hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMaubh)}(h h]h }(hj5,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj",hhhj4,hMaubj)}(hdevice_driver_attachh]j)}(hdevice_driver_attachh]hdevice_driver_attach}(hjG,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC,ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj",hhhj4,hMaubj)}(h5(const struct device_driver *drv, struct device *dev)h](j!)}(hconst struct device_driver *drvh](h)}(hj8h]hconst}(hjc,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_,ubh)}(h h]h }(hjp,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj_,ubh)}(hhh]hstruct}(hj~,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_,ubh)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj_,ubh)}(hhh]j)}(h device_driverh]h device_driver}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj,modnameN classnameNj^ja)}jd]jg)}jZjI,sbc.device_driver_attachasbuh1hhj_,ubh)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj_,ubj{)}(hj~h]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj_,ubj)}(hdrvh]hdrv}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_,ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj[,ubj!)}(hstruct device *devh](h)}(hhh]hstruct}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubh)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj,ubh)}(hhh]j)}(hdeviceh]hdevice}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj -ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj-modnameN classnameNj^ja)}jd]j,c.device_driver_attachasbuh1hhj,ubh)}(h h]h }(hj,-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj,ubj{)}(hj~h]h*}(hj:-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj,ubj)}(hdevh]hdev}(hjG-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj[,ubeh}(h]h ]h"]h$]h&]j+j,uh1jhj",hhhj4,hMaubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj,hhhj4,hMaubah}(h]j,ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj4,hMahj,hhubjB)}(hhh]jG)}(h-attach a specific driver to a specific deviceh]h-attach a specific driver to a specific device}(hjq-hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMZhjn-hhubah}(h]h ]h"]h$]h&]uh1jAhj,hhhj4,hMaubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj-jgj-jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``const struct device_driver *drv`` Driver to attach ``struct device *dev`` Device to attach it to **Description** Manually attach driver to a device. Will acquire both **dev** lock and **dev->parent** lock if needed. Returns 0 on success, -ERR on failure.h](jG)}(h**Parameters**h]jv)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chM^hj-ubj)}(hhh](j)}(h5``const struct device_driver *drv`` Driver to attach h](j)}(h#``const struct device_driver *drv``h]j)}(hj-h]hconst struct device_driver *drv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chM[hj-ubj)}(hhh]jG)}(hDriver to attachh]hDriver to attach}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj-hM[hj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hM[hj-ubj)}(h.``struct device *dev`` Device to attach it to h](j)}(h``struct device *dev``h]j)}(hj-h]hstruct device *dev}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chM\hj-ubj)}(hhh]jG)}(hDevice to attach it toh]hDevice to attach it to}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj.hM\hj.ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj.hM\hj-ubeh}(h]h ]h"]h$]h&]uh1jhj-ubjG)}(h**Description**h]jv)}(hj&.h]h Description}(hj(.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$.ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chM^hj-ubjG)}(hManually attach driver to a device. Will acquire both **dev** lock and **dev->parent** lock if needed. Returns 0 on success, -ERR on failure.h](h6Manually attach driver to a device. Will acquire both }(hj<.hhhNhNubjv)}(h**dev**h]hdev}(hjD.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<.ubh lock and }(hj<.hhhNhNubjv)}(h**dev->parent**h]h dev->parent}(hjV.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<.ubh7 lock if needed. Returns 0 on success, -ERR on failure.}(hj<.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chM^hj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdriver_attach (C function)c.driver_attachhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h3int driver_attach (const struct device_driver *drv)h]h)}(h2int driver_attach(const struct device_driver *drv)h](j)}(hinth]hint}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMubh)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.hhhj.hMubj)}(h driver_attachh]j)}(h driver_attachh]h driver_attach}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj.hhhj.hMubj)}(h!(const struct device_driver *drv)h]j!)}(hconst struct device_driver *drvh](h)}(hj8h]hconst}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubh)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.ubh)}(hhh]hstruct}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubh)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.ubh)}(hhh]j)}(h device_driverh]h device_driver}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj/modnameN classnameNj^ja)}jd]jg)}jZj.sbc.driver_attachasbuh1hhj.ubh)}(h h]h }(hj%/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.ubj{)}(hj~h]h*}(hj3/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj.ubj)}(hdrvh]hdrv}(hj@/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj.ubah}(h]h ]h"]h$]h&]j+j,uh1jhj.hhhj.hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj.hhhj.hMubah}(h]j.ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj.hMhj.hhubjB)}(hhh]jG)}(htry to bind driver to devices.h]htry to bind driver to devices.}(hjj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhjg/hhubah}(h]h ]h"]h$]h&]uh1jAhj.hhhj.hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj/jgj/jhjijjuh1hhhhjUhNhNubjl)}(hX **Parameters** ``const struct device_driver *drv`` driver. **Description** Walk the list of devices that the bus has on it and try to match the driver with each one. If driver_probe_device() returns 0 and the **dev->driver** is set, we've found a compatible pair.h](jG)}(h**Parameters**h]jv)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj/ubj)}(hhh]j)}(h,``const struct device_driver *drv`` driver. h](j)}(h#``const struct device_driver *drv``h]j)}(hj/h]hconst struct device_driver *drv}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj/ubj)}(hhh]jG)}(hdriver.h]hdriver.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubjG)}(h**Description**h]jv)}(hj/h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj/ubjG)}(hWalk the list of devices that the bus has on it and try to match the driver with each one. If driver_probe_device() returns 0 and the **dev->driver** is set, we've found a compatible pair.h](hWalk the list of devices that the bus has on it and try to match the driver with each one. If driver_probe_device() returns 0 and the }(hj/hhhNhNubjv)}(h**dev->driver**h]h dev->driver}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh) is set, we’ve found a compatible pair.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"device_release_driver (C function)c.device_release_driverhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h/void device_release_driver (struct device *dev)h]h)}(h.void device_release_driver(struct device *dev)h](j)}(hvoidh]hvoid}(hj=0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj90hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMubh)}(h h]h }(hjL0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj90hhhjK0hMubj)}(hdevice_release_driverh]j)}(hdevice_release_driverh]hdevice_release_driver}(hj^0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ0ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj90hhhjK0hMubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjz0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv0ubh)}(h h]h }(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjv0ubh)}(hhh]j)}(hdeviceh]hdevice}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj0modnameN classnameNj^ja)}jd]jg)}jZj`0sbc.device_release_driverasbuh1hhjv0ubh)}(h h]h }(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjv0ubj{)}(hj~h]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjv0ubj)}(hdevh]hdev}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv0ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjr0ubah}(h]h ]h"]h$]h&]j+j,uh1jhj90hhhjK0hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj50hhhjK0hMubah}(h]j00ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjK0hMhj20hhubjB)}(hhh]jG)}(h#manually detach device from driver.h]h#manually detach device from driver.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj0hhubah}(h]h ]h"]h$]h&]uh1jAhj20hhhjK0hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj1jgj1jhjijjuh1hhhhjUhNhNubjl)}(hXj**Parameters** ``struct device *dev`` device. **Description** Manually detach device from driver. When called for a USB interface, **dev->parent** lock must be held. If this function is to be called with **dev->parent** lock held, ensure that the device's consumers are unbound in advance or that their locks can be acquired under the **dev->parent** lock.h](jG)}(h**Parameters**h]jv)}(hj1h]h Parameters}(hj!1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj1ubj)}(hhh]j)}(h``struct device *dev`` device. h](j)}(h``struct device *dev``h]j)}(hj>1h]hstruct device *dev}(hj@1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<1ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj81ubj)}(hhh]jG)}(hdevice.h]hdevice.}(hjW1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjS1hMhjT1ubah}(h]h ]h"]h$]h&]uh1jhj81ubeh}(h]h ]h"]h$]h&]uh1jhjS1hMhj51ubah}(h]h ]h"]h$]h&]uh1jhj1ubjG)}(h**Description**h]jv)}(hjy1h]h Description}(hj{1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjw1ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj1ubjG)}(hgManually detach device from driver. When called for a USB interface, **dev->parent** lock must be held.h](hEManually detach device from driver. When called for a USB interface, }(hj1hhhNhNubjv)}(h**dev->parent**h]h dev->parent}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubh lock must be held.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj1ubjG)}(hIf this function is to be called with **dev->parent** lock held, ensure that the device's consumers are unbound in advance or that their locks can be acquired under the **dev->parent** lock.h](h&If this function is to be called with }(hj1hhhNhNubjv)}(h**dev->parent**h]h dev->parent}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubhv lock held, ensure that the device’s consumers are unbound in advance or that their locks can be acquired under the }(hj1hhhNhNubjv)}(h**dev->parent**h]h dev->parent}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubh lock.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:56: ./drivers/base/dd.chMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.platform_device_register_resndata (C function)#c.platform_device_register_resndatahNtauh1hhjUhhhNhNubh)}(hhh](h)}(hstruct platform_device * platform_device_register_resndata (struct device *parent, const char *name, int id, const struct resource *res, unsigned int num, const void *data, size_t size)h]h)}(hstruct platform_device *platform_device_register_resndata(struct device *parent, const char *name, int id, const struct resource *res, unsigned int num, const void *data, size_t size)h](h)}(hhh]hstruct}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKubh)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1hhhj2hKubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hj"2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj$2modnameN classnameNj^ja)}jd]jg)}jZ!platform_device_register_resndatasb#c.platform_device_register_resndataasbuh1hhj1hhhj2hKubh)}(h h]h }(hjC2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1hhhj2hKubj{)}(hj~h]h*}(hjQ2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj1hhhj2hKubj)}(h!platform_device_register_resndatah]j)}(hj@2h]h!platform_device_register_resndata}(hjb2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^2ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj1hhhj2hKubj)}(h~(struct device *parent, const char *name, int id, const struct resource *res, unsigned int num, const void *data, size_t size)h](j!)}(hstruct device *parenth](h)}(hhh]hstruct}(hj}2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjy2ubh)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjy2ubh)}(hhh]j)}(hdeviceh]hdevice}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj2modnameN classnameNj^ja)}jd]j>2#c.platform_device_register_resndataasbuh1hhjy2ubh)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjy2ubj{)}(hj~h]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjy2ubj)}(hparenth]hparent}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy2ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hju2ubj!)}(hconst char *nameh](h)}(hj8h]hconst}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubh)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj2ubj)}(hcharh]hchar}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj2ubj{)}(hj~h]h*}(hj$3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj2ubj)}(hnameh]hname}(hj13hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hju2ubj!)}(hint idh](j)}(hinth]hint}(hjJ3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF3ubh)}(h h]h }(hjX3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjF3ubj)}(hidh]hid}(hjf3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF3ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hju2ubj!)}(hconst struct resource *resh](h)}(hj8h]hconst}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{3ubh)}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj{3ubh)}(hhh]hstruct}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{3ubh)}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj{3ubh)}(hhh]j)}(hresourceh]hresource}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj3modnameN classnameNj^ja)}jd]j>2#c.platform_device_register_resndataasbuh1hhj{3ubh)}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj{3ubj{)}(hj~h]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj{3ubj)}(hresh]hres}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{3ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hju2ubj!)}(hunsigned int numh](j)}(hunsignedh]hunsigned}(hj 4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh)}(h h]h }(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj4ubj)}(hinth]hint}(hj&4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh)}(h h]h }(hj44hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj4ubj)}(hnumh]hnum}(hjB4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hju2ubj!)}(hconst void *datah](h)}(hj8h]hconst}(hj[4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW4ubh)}(h h]h }(hjh4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjW4ubj)}(hvoidh]hvoid}(hjv4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW4ubh)}(h h]h }(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjW4ubj{)}(hj~h]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjW4ubj)}(hdatah]hdata}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW4ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hju2ubj!)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj4modnameN classnameNj^ja)}jd]j>2#c.platform_device_register_resndataasbuh1hhj4ubh)}(h h]h }(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj4ubj)}(hsizeh]hsize}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hju2ubeh}(h]h ]h"]h$]h&]j+j,uh1jhj1hhhj2hKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj1hhhj2hKubah}(h]j1ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj2hKhj1hhubjB)}(hhh]jG)}(hEadd a platform-level device with resources and platform-specific datah]hEadd a platform-level device with resources and platform-specific data}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj5hhubah}(h]h ]h"]h$]h&]uh1jAhj1hhhj2hKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj)5jgj)5jhjijjuh1hhhhjUhNhNubjl)}(hX'**Parameters** ``struct device *parent`` parent device for the device we're adding ``const char *name`` base name of the device we're adding ``int id`` instance id ``const struct resource *res`` set of resources that needs to be allocated for the device ``unsigned int num`` number of resources ``const void *data`` platform specific data for this platform device ``size_t size`` size of platform specific data **Description** Returns :c:type:`struct platform_device ` pointer on success, or ERR_PTR() on error.h](jG)}(h**Parameters**h]jv)}(hj35h]h Parameters}(hj55hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj15ubah}(h]h ]h"]h$]h&]uh1jFhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj-5ubj)}(hhh](j)}(hD``struct device *parent`` parent device for the device we're adding h](j)}(h``struct device *parent``h]j)}(hjR5h]hstruct device *parent}(hjT5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP5ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhjL5ubj)}(hhh]jG)}(h)parent device for the device we're addingh]h+parent device for the device we’re adding}(hjk5hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjg5hKhjh5ubah}(h]h ]h"]h$]h&]uh1jhjL5ubeh}(h]h ]h"]h$]h&]uh1jhjg5hKhjI5ubj)}(h:``const char *name`` base name of the device we're adding h](j)}(h``const char *name``h]j)}(hj5h]hconst char *name}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj5ubj)}(hhh]jG)}(h$base name of the device we're addingh]h&base name of the device we’re adding}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj5hKhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hKhjI5ubj)}(h``int id`` instance id h](j)}(h ``int id``h]j)}(hj5h]hint id}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj5ubj)}(hhh]jG)}(h instance idh]h instance id}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj5hKhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hKhjI5ubj)}(hZ``const struct resource *res`` set of resources that needs to be allocated for the device h](j)}(h``const struct resource *res``h]j)}(hj5h]hconst struct resource *res}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj5ubj)}(hhh]jG)}(h:set of resources that needs to be allocated for the deviceh]h:set of resources that needs to be allocated for the device}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj6hKhj6ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj6hKhjI5ubj)}(h)``unsigned int num`` number of resources h](j)}(h``unsigned int num``h]j)}(hj66h]hunsigned int num}(hj86hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj46ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj06ubj)}(hhh]jG)}(hnumber of resourcesh]hnumber of resources}(hjO6hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjK6hKhjL6ubah}(h]h ]h"]h$]h&]uh1jhj06ubeh}(h]h ]h"]h$]h&]uh1jhjK6hKhjI5ubj)}(hE``const void *data`` platform specific data for this platform device h](j)}(h``const void *data``h]j)}(hjo6h]hconst void *data}(hjq6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm6ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhji6ubj)}(hhh]jG)}(h/platform specific data for this platform deviceh]h/platform specific data for this platform device}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj6hKhj6ubah}(h]h ]h"]h$]h&]uh1jhji6ubeh}(h]h ]h"]h$]h&]uh1jhj6hKhjI5ubj)}(h/``size_t size`` size of platform specific data h](j)}(h``size_t size``h]j)}(hj6h]h size_t size}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj6ubj)}(hhh]jG)}(hsize of platform specific datah]hsize of platform specific data}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj6hKhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hKhjI5ubeh}(h]h ]h"]h$]h&]uh1jhj-5ubjG)}(h**Description**h]jv)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubah}(h]h ]h"]h$]h&]uh1jFhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj-5ubjG)}(heReturns :c:type:`struct platform_device ` pointer on success, or ERR_PTR() on error.h](hReturns }(hj6hhhNhNubh)}(h2:c:type:`struct platform_device `h]j)}(hj7h]hstruct platform_device}(hj7hhhNhNubah}(h]h ](jhj`c-typeeh"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]refdocjh refdomainj`reftypetype refexplicitrefwarnj^jhjhplatform_deviceuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj6ubh+ pointer on success, or ERR_PTR() on error.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhj 7hKhj-5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,platform_device_register_simple (C function)!c.platform_device_register_simplehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hstruct platform_device * platform_device_register_simple (const char *name, int id, const struct resource *res, unsigned int num)h]h)}(hstruct platform_device *platform_device_register_simple(const char *name, int id, const struct resource *res, unsigned int num)h](h)}(hhh]hstruct}(hjK7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjG7hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKubh)}(h h]h }(hjY7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjG7hhhjX7hKubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hjj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg7ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjl7modnameN classnameNj^ja)}jd]jg)}jZplatform_device_register_simplesb!c.platform_device_register_simpleasbuh1hhjG7hhhjX7hKubh)}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjG7hhhjX7hKubj{)}(hj~h]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjG7hhhjX7hKubj)}(hplatform_device_register_simpleh]j)}(hj7h]hplatform_device_register_simple}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjG7hhhjX7hKubj)}(hH(const char *name, int id, const struct resource *res, unsigned int num)h](j!)}(hconst char *nameh](h)}(hj8h]hconst}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubh)}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7ubj)}(hcharh]hchar}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7ubj{)}(hj~h]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj7ubj)}(hnameh]hname}(hj 8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj7ubj!)}(hint idh](j)}(hinth]hint}(hj"8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(h h]h }(hj08hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8ubj)}(hidh]hid}(hj>8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj7ubj!)}(hconst struct resource *resh](h)}(hj8h]hconst}(hjW8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjS8ubh)}(h h]h }(hjd8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjS8ubh)}(hhh]hstruct}(hjr8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjS8ubh)}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjS8ubh)}(hhh]j)}(hresourceh]hresource}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj8modnameN classnameNj^ja)}jd]j7!c.platform_device_register_simpleasbuh1hhjS8ubh)}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjS8ubj{)}(hj~h]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjS8ubj)}(hresh]hres}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS8ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj7ubj!)}(hunsigned int numh](j)}(hunsignedh]hunsigned}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8ubj)}(hinth]hint}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(h h]h }(hj 9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8ubj)}(hnumh]hnum}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj7ubeh}(h]h ]h"]h$]h&]j+j,uh1jhjG7hhhjX7hKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjC7hhhjX7hKubah}(h]j>7ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjX7hKhj@7hhubjB)}(hhh]jG)}(h-add a platform-level device and its resourcesh]h-add a platform-level device and its resources}(hjD9hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhjA9hhubah}(h]h ]h"]h$]h&]uh1jAhj@7hhhjX7hKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj\9jgj\9jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``const char *name`` base name of the device we're adding ``int id`` instance id ``const struct resource *res`` set of resources that needs to be allocated for the device ``unsigned int num`` number of resources **Description** This function creates a simple platform device that requires minimal resource and memory management. Canned release function freeing memory allocated for the device allows drivers using such devices to be unloaded without waiting for the last reference to the device to be dropped. This interface is primarily intended for use with legacy drivers which probe hardware directly. Because such drivers create sysfs device nodes themselves, rather than letting system infrastructure handle such device enumeration tasks, they don't fully conform to the Linux driver model. In particular, when such drivers are built as modules, they can't be "hotplugged". Returns :c:type:`struct platform_device ` pointer on success, or ERR_PTR() on error.h](jG)}(h**Parameters**h]jv)}(hjf9h]h Parameters}(hjh9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjd9ubah}(h]h ]h"]h$]h&]uh1jFhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj`9ubj)}(hhh](j)}(h:``const char *name`` base name of the device we're adding h](j)}(h``const char *name``h]j)}(hj9h]hconst char *name}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj9ubj)}(hhh]jG)}(h$base name of the device we're addingh]h&base name of the device we’re adding}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj9hKhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hKhj|9ubj)}(h``int id`` instance id h](j)}(h ``int id``h]j)}(hj9h]hint id}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj9ubj)}(hhh]jG)}(h instance idh]h instance id}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj9hKhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hKhj|9ubj)}(hZ``const struct resource *res`` set of resources that needs to be allocated for the device h](j)}(h``const struct resource *res``h]j)}(hj9h]hconst struct resource *res}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj9ubj)}(hhh]jG)}(h:set of resources that needs to be allocated for the deviceh]h:set of resources that needs to be allocated for the device}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj :hKhj :ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj :hKhj|9ubj)}(h)``unsigned int num`` number of resources h](j)}(h``unsigned int num``h]j)}(hj0:h]hunsigned int num}(hj2:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.:ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj*:ubj)}(hhh]jG)}(hnumber of resourcesh]hnumber of resources}(hjI:hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjE:hKhjF:ubah}(h]h ]h"]h$]h&]uh1jhj*:ubeh}(h]h ]h"]h$]h&]uh1jhjE:hKhj|9ubeh}(h]h ]h"]h$]h&]uh1jhj`9ubjG)}(h**Description**h]jv)}(hjk:h]h Description}(hjm:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhji:ubah}(h]h ]h"]h$]h&]uh1jFhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj`9ubjG)}(hXThis function creates a simple platform device that requires minimal resource and memory management. Canned release function freeing memory allocated for the device allows drivers using such devices to be unloaded without waiting for the last reference to the device to be dropped.h]hXThis function creates a simple platform device that requires minimal resource and memory management. Canned release function freeing memory allocated for the device allows drivers using such devices to be unloaded without waiting for the last reference to the device to be dropped.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj`9ubjG)}(hXrThis interface is primarily intended for use with legacy drivers which probe hardware directly. Because such drivers create sysfs device nodes themselves, rather than letting system infrastructure handle such device enumeration tasks, they don't fully conform to the Linux driver model. In particular, when such drivers are built as modules, they can't be "hotplugged".h]hXzThis interface is primarily intended for use with legacy drivers which probe hardware directly. Because such drivers create sysfs device nodes themselves, rather than letting system infrastructure handle such device enumeration tasks, they don’t fully conform to the Linux driver model. In particular, when such drivers are built as modules, they can’t be “hotplugged”.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj`9ubjG)}(heReturns :c:type:`struct platform_device ` pointer on success, or ERR_PTR() on error.h](hReturns }(hj:hhhNhNubh)}(h2:c:type:`struct platform_device `h]j)}(hj:h]hstruct platform_device}(hj:hhhNhNubah}(h]h ](jhj`c-typeeh"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]refdocjh refdomainj`reftypetype refexplicitrefwarnj^jhjhplatform_deviceuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj:ubh+ pointer on success, or ERR_PTR() on error.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhj:hKhj`9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*platform_device_register_data (C function)c.platform_device_register_datahNtauh1hhjUhhhNhNubh)}(hhh](h)}(hstruct platform_device * platform_device_register_data (struct device *parent, const char *name, int id, const void *data, size_t size)h]h)}(hstruct platform_device *platform_device_register_data(struct device *parent, const char *name, int id, const void *data, size_t size)h](h)}(hhh]hstruct}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKubh)}(h h]h }(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj:hhhj:hKubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ;ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj;modnameN classnameNj^ja)}jd]jg)}jZplatform_device_register_datasbc.platform_device_register_dataasbuh1hhj:hhhj:hKubh)}(h h]h }(hj1;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj:hhhj:hKubj{)}(hj~h]h*}(hj?;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj:hhhj:hKubj)}(hplatform_device_register_datah]j)}(hj.;h]hplatform_device_register_data}(hjP;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL;ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj:hhhj:hKubj)}(hP(struct device *parent, const char *name, int id, const void *data, size_t size)h](j!)}(hstruct device *parenth](h)}(hhh]hstruct}(hjk;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjg;ubh)}(h h]h }(hjx;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjg;ubh)}(hhh]j)}(hdeviceh]hdevice}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj;modnameN classnameNj^ja)}jd]j,;c.platform_device_register_dataasbuh1hhjg;ubh)}(h h]h }(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjg;ubj{)}(hj~h]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjg;ubj)}(hparenth]hparent}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg;ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjc;ubj!)}(hconst char *nameh](h)}(hj8h]hconst}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubh)}(h h]h }(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj;ubj)}(hcharh]hchar}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj;ubj{)}(hj~h]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj;ubj)}(hnameh]hname}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjc;ubj!)}(hint idh](j)}(hinth]hint}(hj8<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4<ubh)}(h h]h }(hjF<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj4<ubj)}(hidh]hid}(hjT<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4<ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjc;ubj!)}(hconst void *datah](h)}(hj8h]hconst}(hjm<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhji<ubh)}(h h]h }(hjz<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhji<ubj)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji<ubh)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhji<ubj{)}(hj~h]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhji<ubj)}(hdatah]hdata}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji<ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjc;ubj!)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj<modnameN classnameNj^ja)}jd]j,;c.platform_device_register_dataasbuh1hhj<ubh)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj<ubj)}(hsizeh]hsize}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjc;ubeh}(h]h ]h"]h$]h&]j+j,uh1jhj:hhhj:hKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj:hhhj:hKubah}(h]j:ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj:hKhj:hhubjB)}(hhh]jG)}(h7add a platform-level device with platform-specific datah]h7add a platform-level device with platform-specific data}(hj#=hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj =hhubah}(h]h ]h"]h$]h&]uh1jAhj:hhhj:hKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj;=jgj;=jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct device *parent`` parent device for the device we're adding ``const char *name`` base name of the device we're adding ``int id`` instance id ``const void *data`` platform specific data for this platform device ``size_t size`` size of platform specific data **Description** This function creates a simple platform device that requires minimal resource and memory management. Canned release function freeing memory allocated for the device allows drivers using such devices to be unloaded without waiting for the last reference to the device to be dropped. Returns :c:type:`struct platform_device ` pointer on success, or ERR_PTR() on error.h](jG)}(h**Parameters**h]jv)}(hjE=h]h Parameters}(hjG=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjC=ubah}(h]h ]h"]h$]h&]uh1jFhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj?=ubj)}(hhh](j)}(hD``struct device *parent`` parent device for the device we're adding h](j)}(h``struct device *parent``h]j)}(hjd=h]hstruct device *parent}(hjf=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb=ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj^=ubj)}(hhh]jG)}(h)parent device for the device we're addingh]h+parent device for the device we’re adding}(hj}=hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjy=hKhjz=ubah}(h]h ]h"]h$]h&]uh1jhj^=ubeh}(h]h ]h"]h$]h&]uh1jhjy=hKhj[=ubj)}(h:``const char *name`` base name of the device we're adding h](j)}(h``const char *name``h]j)}(hj=h]hconst char *name}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj=ubj)}(hhh]jG)}(h$base name of the device we're addingh]h&base name of the device we’re adding}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj=hKhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hKhj[=ubj)}(h``int id`` instance id h](j)}(h ``int id``h]j)}(hj=h]hint id}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj=ubj)}(hhh]jG)}(h instance idh]h instance id}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj=hKhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hKhj[=ubj)}(hE``const void *data`` platform specific data for this platform device h](j)}(h``const void *data``h]j)}(hj>h]hconst void *data}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj >ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj >ubj)}(hhh]jG)}(h/platform specific data for this platform deviceh]h/platform specific data for this platform device}(hj(>hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj$>hKhj%>ubah}(h]h ]h"]h$]h&]uh1jhj >ubeh}(h]h ]h"]h$]h&]uh1jhj$>hKhj[=ubj)}(h/``size_t size`` size of platform specific data h](j)}(h``size_t size``h]j)}(hjH>h]h size_t size}(hjJ>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF>ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhjB>ubj)}(hhh]jG)}(hsize of platform specific datah]hsize of platform specific data}(hja>hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj]>hKhj^>ubah}(h]h ]h"]h$]h&]uh1jhjB>ubeh}(h]h ]h"]h$]h&]uh1jhj]>hKhj[=ubeh}(h]h ]h"]h$]h&]uh1jhj?=ubjG)}(h**Description**h]jv)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1jFhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj?=ubjG)}(hXThis function creates a simple platform device that requires minimal resource and memory management. Canned release function freeing memory allocated for the device allows drivers using such devices to be unloaded without waiting for the last reference to the device to be dropped.h]hXThis function creates a simple platform device that requires minimal resource and memory management. Canned release function freeing memory allocated for the device allows drivers using such devices to be unloaded without waiting for the last reference to the device to be dropped.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj?=ubjG)}(heReturns :c:type:`struct platform_device ` pointer on success, or ERR_PTR() on error.h](hReturns }(hj>hhhNhNubh)}(h2:c:type:`struct platform_device `h]j)}(hj>h]hstruct platform_device}(hj>hhhNhNubah}(h]h ](jhj`c-typeeh"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]refdocjh refdomainj`reftypetype refexplicitrefwarnj^jhjhplatform_deviceuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:59: ./include/linux/platform_device.hhKhj>ubh+ pointer on success, or ERR_PTR() on error.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhj>hKhj?=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"platform_get_resource (C function)c.platform_get_resourcehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hjstruct resource * platform_get_resource (struct platform_device *dev, unsigned int type, unsigned int num)h]h)}(hhstruct resource *platform_get_resource(struct platform_device *dev, unsigned int type, unsigned int num)h](h)}(hhh]hstruct}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>hhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chK7ubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj>hhhj?hK7ubh)}(hhh]j)}(hresourceh]hresource}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj?modnameN classnameNj^ja)}jd]jg)}jZplatform_get_resourcesbc.platform_get_resourceasbuh1hhj>hhhj?hK7ubh)}(h h]h }(hj:?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj>hhhj?hK7ubj{)}(hj~h]h*}(hjH?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj>hhhj?hK7ubj)}(hplatform_get_resourceh]j)}(hj7?h]hplatform_get_resource}(hjY?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU?ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj>hhhj?hK7ubj)}(hB(struct platform_device *dev, unsigned int type, unsigned int num)h](j!)}(hstruct platform_device *devh](h)}(hhh]hstruct}(hjt?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjp?ubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjp?ubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj?modnameN classnameNj^ja)}jd]j5?c.platform_get_resourceasbuh1hhjp?ubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjp?ubj{)}(hj~h]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjp?ubj)}(hdevh]hdev}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp?ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjl?ubj!)}(hunsigned int typeh](j)}(hunsignedh]hunsigned}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj?ubj)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj?ubj)}(htypeh]htype}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjl?ubj!)}(hunsigned int numh](j)}(hunsignedh]hunsigned}(hj5@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1@ubh)}(h h]h }(hjC@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1@ubj)}(hinth]hint}(hjQ@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1@ubh)}(h h]h }(hj_@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1@ubj)}(hnumh]hnum}(hjm@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1@ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjl?ubeh}(h]h ]h"]h$]h&]j+j,uh1jhj>hhhj?hK7ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj>hhhj?hK7ubah}(h]j>ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj?hK7hj>hhubjB)}(hhh]jG)}(hget a resource for a deviceh]hget a resource for a device}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chK0hj@hhubah}(h]h ]h"]h$]h&]uh1jAhj>hhhj?hK7ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj@jgj@jhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct platform_device *dev`` platform device ``unsigned int type`` resource type ``unsigned int num`` resource index **Return** a pointer to the resource or NULL on failure.h](jG)}(h**Parameters**h]jv)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chK4hj@ubj)}(hhh](j)}(h0``struct platform_device *dev`` platform device h](j)}(h``struct platform_device *dev``h]j)}(hj@h]hstruct platform_device *dev}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chK1hj@ubj)}(hhh]jG)}(hplatform deviceh]hplatform device}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj@hK1hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hK1hj@ubj)}(h$``unsigned int type`` resource type h](j)}(h``unsigned int type``h]j)}(hjAh]hunsigned int type}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chK2hj Aubj)}(hhh]jG)}(h resource typeh]h resource type}(hj*AhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj&AhK2hj'Aubah}(h]h ]h"]h$]h&]uh1jhj Aubeh}(h]h ]h"]h$]h&]uh1jhj&AhK2hj@ubj)}(h$``unsigned int num`` resource index h](j)}(h``unsigned int num``h]j)}(hjJAh]hunsigned int num}(hjLAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHAubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chK3hjDAubj)}(hhh]jG)}(hresource indexh]hresource index}(hjcAhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj_AhK3hj`Aubah}(h]h ]h"]h$]h&]uh1jhjDAubeh}(h]h ]h"]h$]h&]uh1jhj_AhK3hj@ubeh}(h]h ]h"]h$]h&]uh1jhj@ubjG)}(h **Return**h]jv)}(hjAh]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chK5hj@ubjG)}(h-a pointer to the resource or NULL on failure.h]h-a pointer to the resource or NULL on failure.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chK5hj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ3devm_platform_get_and_ioremap_resource (C function)(c.devm_platform_get_and_ioremap_resourcehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hvoid __iomem * devm_platform_get_and_ioremap_resource (struct platform_device *pdev, unsigned int index, struct resource **res)h]h)}(h}void __iomem *devm_platform_get_and_ioremap_resource(struct platform_device *pdev, unsigned int index, struct resource **res)h](j)}(hvoidh]hvoid}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKbubh)}(h h]h }(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjAhhhjAhKbubh__iomem}(hjAhhhNhNubh)}(h h]h }(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjAhhhjAhKbubj{)}(hj~h]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjAhhhjAhKbubj)}(h&devm_platform_get_and_ioremap_resourceh]j)}(h&devm_platform_get_and_ioremap_resourceh]h&devm_platform_get_and_ioremap_resource}(hj BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjAhhhjAhKbubj)}(hI(struct platform_device *pdev, unsigned int index, struct resource **res)h](j!)}(hstruct platform_device *pdevh](h)}(hhh]hstruct}(hj&BhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"Bubh)}(h h]h }(hj3BhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj"Bubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hjDBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjABubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjFBmodnameN classnameNj^ja)}jd]jg)}jZj Bsb(c.devm_platform_get_and_ioremap_resourceasbuh1hhj"Bubh)}(h h]h }(hjdBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj"Bubj{)}(hj~h]h*}(hjrBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj"Bubj)}(hpdevh]hpdev}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Bubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjBubj!)}(hunsigned int indexh](j)}(hunsignedh]hunsigned}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(h h]h }(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjBubj)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(h h]h }(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjBubj)}(hindexh]hindex}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjBubj!)}(hstruct resource **resh](h)}(hhh]hstruct}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubh)}(h h]h }(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjBubh)}(hhh]j)}(hresourceh]hresource}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj CmodnameN classnameNj^ja)}jd]j`B(c.devm_platform_get_and_ioremap_resourceasbuh1hhjBubh)}(h h]h }(hj%ChhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjBubj{)}(hj~h]h*}(hj3ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjBubj{)}(hj~h]h*}(hj@ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjBubj)}(hresh]hres}(hjMChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjBubeh}(h]h ]h"]h$]h&]j+j,uh1jhjAhhhjAhKbubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjAhhhjAhKbubah}(h]jAah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjAhKbhjAhhubjB)}(hhh]jG)}(hCcall devm_ioremap_resource() for a platform device and get resourceh]hCcall devm_ioremap_resource() for a platform device and get resource}(hjwChhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKWhjtChhubah}(h]h ]h"]h$]h&]uh1jAhjAhhhjAhKbubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjCjgjCjhjijjuh1hhhhjUhNhNubjl)}(hXt**Parameters** ``struct platform_device *pdev`` platform device to use both for memory resource lookup as well as resource management ``unsigned int index`` resource index ``struct resource **res`` optional output parameter to store a pointer to the obtained resource. **Return** a pointer to the remapped memory or an ERR_PTR() encoded error code on failure.h](jG)}(h**Parameters**h]jv)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chK[hjCubj)}(hhh](j)}(hw``struct platform_device *pdev`` platform device to use both for memory resource lookup as well as resource management h](j)}(h ``struct platform_device *pdev``h]j)}(hjCh]hstruct platform_device *pdev}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chK[hjCubj)}(hhh]jG)}(hUplatform device to use both for memory resource lookup as well as resource managementh]hUplatform device to use both for memory resource lookup as well as resource management}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKZhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChK[hjCubj)}(h&``unsigned int index`` resource index h](j)}(h``unsigned int index``h]j)}(hjCh]hunsigned int index}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chK\hjCubj)}(hhh]jG)}(hresource indexh]hresource index}(hj DhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjDhK\hjDubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjDhK\hjCubj)}(ha``struct resource **res`` optional output parameter to store a pointer to the obtained resource. h](j)}(h``struct resource **res``h]j)}(hj+Dh]hstruct resource **res}(hj-DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)Dubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chK]hj%Dubj)}(hhh]jG)}(hFoptional output parameter to store a pointer to the obtained resource.h]hFoptional output parameter to store a pointer to the obtained resource.}(hjDDhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj@DhK]hjADubah}(h]h ]h"]h$]h&]uh1jhj%Dubeh}(h]h ]h"]h$]h&]uh1jhj@DhK]hjCubeh}(h]h ]h"]h$]h&]uh1jhjCubjG)}(h **Return**h]jv)}(hjfDh]hReturn}(hjhDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdDubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chK_hjCubjG)}(hOa pointer to the remapped memory or an ERR_PTR() encoded error code on failure.h]hOa pointer to the remapped memory or an ERR_PTR() encoded error code on failure.}(hj|DhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chK_hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+devm_platform_ioremap_resource (C function) c.devm_platform_ioremap_resourcehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h`void __iomem * devm_platform_ioremap_resource (struct platform_device *pdev, unsigned int index)h]h)}(h^void __iomem *devm_platform_ioremap_resource(struct platform_device *pdev, unsigned int index)h](j)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKzubh)}(h h]h }(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjDhhhjDhKzubh__iomem}(hjDhhhNhNubh)}(h h]h }(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjDhhhjDhKzubj{)}(hj~h]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjDhhhjDhKzubj)}(hdevm_platform_ioremap_resourceh]j)}(hdevm_platform_ioremap_resourceh]hdevm_platform_ioremap_resource}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjDhhhjDhKzubj)}(h2(struct platform_device *pdev, unsigned int index)h](j!)}(hstruct platform_device *pdevh](h)}(hhh]hstruct}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubh)}(h h]h }(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjEubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hj%EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Eubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj'EmodnameN classnameNj^ja)}jd]jg)}jZjDsb c.devm_platform_ioremap_resourceasbuh1hhjEubh)}(h h]h }(hjEEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjEubj{)}(hj~h]h*}(hjSEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjEubj)}(hpdevh]hpdev}(hj`EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjDubj!)}(hunsigned int indexh](j)}(hunsignedh]hunsigned}(hjyEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuEubh)}(h h]h }(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjuEubj)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuEubh)}(h h]h }(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjuEubj)}(hindexh]hindex}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuEubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjDubeh}(h]h ]h"]h$]h&]j+j,uh1jhjDhhhjDhKzubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjDhhhjDhKzubah}(h]jDah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjDhKzhjDhhubjB)}(hhh]jG)}(h2call devm_ioremap_resource() for a platform deviceh]h2call devm_ioremap_resource() for a platform device}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKphjEhhubah}(h]h ]h"]h$]h&]uh1jAhjDhhhjDhKzubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjEjgjEjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct platform_device *pdev`` platform device to use both for memory resource lookup as well as resource management ``unsigned int index`` resource index **Return** a pointer to the remapped memory or an ERR_PTR() encoded error code on failure.h](jG)}(h**Parameters**h]jv)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKthjEubj)}(hhh](j)}(hw``struct platform_device *pdev`` platform device to use both for memory resource lookup as well as resource management h](j)}(h ``struct platform_device *pdev``h]j)}(hjFh]hstruct platform_device *pdev}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKthjFubj)}(hhh]jG)}(hUplatform device to use both for memory resource lookup as well as resource managementh]hUplatform device to use both for memory resource lookup as well as resource management}(hj5FhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKshj2Fubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhj1FhKthjFubj)}(h&``unsigned int index`` resource index h](j)}(h``unsigned int index``h]j)}(hjVFh]hunsigned int index}(hjXFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTFubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKuhjPFubj)}(hhh]jG)}(hresource indexh]hresource index}(hjoFhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjkFhKuhjlFubah}(h]h ]h"]h$]h&]uh1jhjPFubeh}(h]h ]h"]h$]h&]uh1jhjkFhKuhjFubeh}(h]h ]h"]h$]h&]uh1jhjEubjG)}(h **Return**h]jv)}(hjFh]hReturn}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKwhjEubjG)}(hOa pointer to the remapped memory or an ERR_PTR() encoded error code on failure.h]hOa pointer to the remapped memory or an ERR_PTR() encoded error code on failure.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKwhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ2devm_platform_ioremap_resource_byname (C function)'c.devm_platform_ioremap_resource_bynamehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hevoid __iomem * devm_platform_ioremap_resource_byname (struct platform_device *pdev, const char *name)h]h)}(hcvoid __iomem *devm_platform_ioremap_resource_byname(struct platform_device *pdev, const char *name)h](j)}(hvoidh]hvoid}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKubh)}(h h]h }(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjFhhhjFhKubh__iomem}(hjFhhhNhNubh)}(h h]h }(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjFhhhjFhKubj{)}(hj~h]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjFhhhjFhKubj)}(h%devm_platform_ioremap_resource_bynameh]j)}(h%devm_platform_ioremap_resource_bynameh]h%devm_platform_ioremap_resource_byname}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjFhhhjFhKubj)}(h0(struct platform_device *pdev, const char *name)h](j!)}(hstruct platform_device *pdevh](h)}(hhh]hstruct}(hj2GhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.Gubh)}(h h]h }(hj?GhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.Gubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hjPGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMGubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjRGmodnameN classnameNj^ja)}jd]jg)}jZjGsb'c.devm_platform_ioremap_resource_bynameasbuh1hhj.Gubh)}(h h]h }(hjpGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.Gubj{)}(hj~h]h*}(hj~GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj.Gubj)}(hpdevh]hpdev}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Gubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj*Gubj!)}(hconst char *nameh](h)}(hj8h]hconst}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubh)}(h h]h }(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjGubj)}(hcharh]hchar}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(h h]h }(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjGubj{)}(hj~h]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjGubj)}(hnameh]hname}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj*Gubeh}(h]h ]h"]h$]h&]j+j,uh1jhjFhhhjFhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjFhhhjFhKubah}(h]jFah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjFhKhjFhhubjB)}(hhh]jG)}(hOcall devm_ioremap_resource for a platform device, retrieve the resource by nameh]hOcall devm_ioremap_resource for a platform device, retrieve the resource by name}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhjHhhubah}(h]h ]h"]h$]h&]uh1jAhjFhhhjFhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj*Hjgj*Hjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct platform_device *pdev`` platform device to use both for memory resource lookup as well as resource management ``const char *name`` name of the resource **Return** a pointer to the remapped memory or an ERR_PTR() encoded error code on failure.h](jG)}(h**Parameters**h]jv)}(hj4Hh]h Parameters}(hj6HhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2Hubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhj.Hubj)}(hhh](j)}(hw``struct platform_device *pdev`` platform device to use both for memory resource lookup as well as resource management h](j)}(h ``struct platform_device *pdev``h]j)}(hjSHh]hstruct platform_device *pdev}(hjUHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQHubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhjMHubj)}(hhh]jG)}(hUplatform device to use both for memory resource lookup as well as resource managementh]hUplatform device to use both for memory resource lookup as well as resource management}(hjlHhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhjiHubah}(h]h ]h"]h$]h&]uh1jhjMHubeh}(h]h ]h"]h$]h&]uh1jhjhHhKhjJHubj)}(h*``const char *name`` name of the resource h](j)}(h``const char *name``h]j)}(hjHh]hconst char *name}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhjHubj)}(hhh]jG)}(hname of the resourceh]hname of the resource}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjHhKhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhKhjJHubeh}(h]h ]h"]h$]h&]uh1jhj.HubjG)}(h **Return**h]jv)}(hjHh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhj.HubjG)}(hOa pointer to the remapped memory or an ERR_PTR() encoded error code on failure.h]hOa pointer to the remapped memory or an ERR_PTR() encoded error code on failure.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhj.Hubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&platform_get_irq_optional (C function)c.platform_get_irq_optionalhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hMint platform_get_irq_optional (struct platform_device *dev, unsigned int num)h]h)}(hLint platform_get_irq_optional(struct platform_device *dev, unsigned int num)h](j)}(hinth]hint}(hj IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Ihhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKubh)}(h h]h }(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj IhhhjIhKubj)}(hplatform_get_irq_optionalh]j)}(hplatform_get_irq_optionalh]hplatform_get_irq_optional}(hj.IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*Iubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj IhhhjIhKubj)}(h/(struct platform_device *dev, unsigned int num)h](j!)}(hstruct platform_device *devh](h)}(hhh]hstruct}(hjJIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFIubh)}(h h]h }(hjWIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjFIubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hjhIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeIubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjjImodnameN classnameNj^ja)}jd]jg)}jZj0Isbc.platform_get_irq_optionalasbuh1hhjFIubh)}(h h]h }(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjFIubj{)}(hj~h]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjFIubj)}(hdevh]hdev}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFIubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjBIubj!)}(hunsigned int numh](j)}(hunsignedh]hunsigned}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(h h]h }(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjIubj)}(hinth]hint}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(h h]h }(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjIubj)}(hnumh]hnum}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjBIubeh}(h]h ]h"]h$]h&]j+j,uh1jhj IhhhjIhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjIhhhjIhKubah}(h]jIah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjIhKhjIhhubjB)}(hhh]jG)}(h get an optional IRQ for a deviceh]h get an optional IRQ for a device}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhjJhhubah}(h]h ]h"]h$]h&]uh1jAhjIhhhjIhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj6Jjgj6Jjhjijjuh1hhhhjUhNhNubjl)}(hXh**Parameters** ``struct platform_device *dev`` platform device ``unsigned int num`` IRQ number index **Description** Gets an IRQ for a platform device. Device drivers should check the return value for errors so as to not pass a negative integer value to the request_irq() APIs. This is the same as platform_get_irq(), except that it does not print an error message if an IRQ can not be obtained. For example:: int irq = platform_get_irq_optional(pdev, 0); if (irq < 0) return irq; **Return** non-zero IRQ number on success, negative error number on failure.h](jG)}(h**Parameters**h]jv)}(hj@Jh]h Parameters}(hjBJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>Jubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhj:Jubj)}(hhh](j)}(h0``struct platform_device *dev`` platform device h](j)}(h``struct platform_device *dev``h]j)}(hj_Jh]hstruct platform_device *dev}(hjaJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]Jubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhjYJubj)}(hhh]jG)}(hplatform deviceh]hplatform device}(hjxJhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjtJhKhjuJubah}(h]h ]h"]h$]h&]uh1jhjYJubeh}(h]h ]h"]h$]h&]uh1jhjtJhKhjVJubj)}(h&``unsigned int num`` IRQ number index h](j)}(h``unsigned int num``h]j)}(hjJh]hunsigned int num}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhjJubj)}(hhh]jG)}(hIRQ number indexh]hIRQ number index}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjJhKhjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhKhjVJubeh}(h]h ]h"]h$]h&]uh1jhj:JubjG)}(h**Description**h]jv)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhj:JubjG)}(hXGets an IRQ for a platform device. Device drivers should check the return value for errors so as to not pass a negative integer value to the request_irq() APIs. This is the same as platform_get_irq(), except that it does not print an error message if an IRQ can not be obtained.h]hXGets an IRQ for a platform device. Device drivers should check the return value for errors so as to not pass a negative integer value to the request_irq() APIs. This is the same as platform_get_irq(), except that it does not print an error message if an IRQ can not be obtained.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhj:JubjG)}(h For example::h]h For example:}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhj:Jubj)}(hNint irq = platform_get_irq_optional(pdev, 0); if (irq < 0) return irq;h]hNint irq = platform_get_irq_optional(pdev, 0); if (irq < 0) return irq;}hjKsbah}(h]h ]h"]h$]h&]j+j,uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhj:JubjG)}(h **Return**h]jv)}(hjKh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhj:JubjG)}(hAnon-zero IRQ number on success, negative error number on failure.h]hAnon-zero IRQ number on success, negative error number on failure.}(hj.KhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhj:Jubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌplatform_get_irq (C function)c.platform_get_irqhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hDint platform_get_irq (struct platform_device *dev, unsigned int num)h]h)}(hCint platform_get_irq(struct platform_device *dev, unsigned int num)h](j)}(hinth]hint}(hj]KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYKhhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMubh)}(h h]h }(hjlKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjYKhhhjkKhMubj)}(hplatform_get_irqh]j)}(hplatform_get_irqh]hplatform_get_irq}(hj~KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzKubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjYKhhhjkKhMubj)}(h/(struct platform_device *dev, unsigned int num)h](j!)}(hstruct platform_device *devh](h)}(hhh]hstruct}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubh)}(h h]h }(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjKubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjKmodnameN classnameNj^ja)}jd]jg)}jZjKsbc.platform_get_irqasbuh1hhjKubh)}(h h]h }(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjKubj{)}(hj~h]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjKubj)}(hdevh]hdev}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjKubj!)}(hunsigned int numh](j)}(hunsignedh]hunsigned}(hj LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjLubj)}(hinth]hint}(hj(LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(h h]h }(hj6LhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjLubj)}(hnumh]hnum}(hjDLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjKubeh}(h]h ]h"]h$]h&]j+j,uh1jhjYKhhhjkKhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjUKhhhjkKhMubah}(h]jPKah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjkKhMhjRKhhubjB)}(hhh]jG)}(hget an IRQ for a deviceh]hget an IRQ for a device}(hjnLhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhjkLhhubah}(h]h ]h"]h$]h&]uh1jAhjRKhhhjkKhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjLjgjLjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct platform_device *dev`` platform device ``unsigned int num`` IRQ number index **Description** Gets an IRQ for a platform device and prints an error message if finding the IRQ fails. Device drivers should check the return value for errors so as to not pass a negative integer value to the request_irq() APIs. For example:: int irq = platform_get_irq(pdev, 0); if (irq < 0) return irq; **Return** non-zero IRQ number on success, negative error number on failure.h](jG)}(h**Parameters**h]jv)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhjLubj)}(hhh](j)}(h0``struct platform_device *dev`` platform device h](j)}(h``struct platform_device *dev``h]j)}(hjLh]hstruct platform_device *dev}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhjLubj)}(hhh]jG)}(hplatform deviceh]hplatform device}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjLhKhjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhKhjLubj)}(h&``unsigned int num`` IRQ number index h](j)}(h``unsigned int num``h]j)}(hjLh]hunsigned int num}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhjLubj)}(hhh]jG)}(hIRQ number indexh]hIRQ number index}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjLhKhjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhKhjLubeh}(h]h ]h"]h$]h&]uh1jhjLubjG)}(h**Description**h]jv)}(hj#Mh]h Description}(hj%MhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!Mubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhjLubjG)}(hGets an IRQ for a platform device and prints an error message if finding the IRQ fails. Device drivers should check the return value for errors so as to not pass a negative integer value to the request_irq() APIs.h]hGets an IRQ for a platform device and prints an error message if finding the IRQ fails. Device drivers should check the return value for errors so as to not pass a negative integer value to the request_irq() APIs.}(hj9MhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhjLubjG)}(h For example::h]h For example:}(hjHMhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhjLubj)}(hEint irq = platform_get_irq(pdev, 0); if (irq < 0) return irq;h]hEint irq = platform_get_irq(pdev, 0); if (irq < 0) return irq;}hjWMsbah}(h]h ]h"]h$]h&]j+j,uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chKhjLubjG)}(h **Return**h]jv)}(hjhMh]hReturn}(hjjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfMubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjLubjG)}(hAnon-zero IRQ number on success, negative error number on failure.h]hAnon-zero IRQ number on success, negative error number on failure.}(hj~MhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌplatform_irq_count (C function)c.platform_irq_counthNtauh1hhjUhhhNhNubh)}(hhh](h)}(h4int platform_irq_count (struct platform_device *dev)h]h)}(h3int platform_irq_count(struct platform_device *dev)h](j)}(hinth]hint}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMubh)}(h h]h }(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjMhhhjMhMubj)}(hplatform_irq_counth]j)}(hplatform_irq_counth]hplatform_irq_count}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjMhhhjMhMubj)}(h(struct platform_device *dev)h]j!)}(hstruct platform_device *devh](h)}(hhh]hstruct}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubh)}(h h]h }(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjMubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj NmodnameN classnameNj^ja)}jd]jg)}jZjMsbc.platform_irq_countasbuh1hhjMubh)}(h h]h }(hj(NhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjMubj{)}(hj~h]h*}(hj6NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjMubj)}(hdevh]hdev}(hjCNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjMubah}(h]h ]h"]h$]h&]j+j,uh1jhjMhhhjMhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjMhhhjMhMubah}(h]jMah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjMhMhjMhhubjB)}(hhh]jG)}(h/Count the number of IRQs a platform device usesh]h/Count the number of IRQs a platform device uses}(hjmNhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjjNhhubah}(h]h ]h"]h$]h&]uh1jAhjMhhhjMhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjNjgjNjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct platform_device *dev`` platform device **Return** Number of IRQs a platform device uses or EPROBE_DEFERh](jG)}(h**Parameters**h]jv)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjNubj)}(hhh]j)}(h0``struct platform_device *dev`` platform device h](j)}(h``struct platform_device *dev``h]j)}(hjNh]hstruct platform_device *dev}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjNubj)}(hhh]jG)}(hplatform deviceh]hplatform device}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubjG)}(h **Return**h]jv)}(hjNh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjNubjG)}(h5Number of IRQs a platform device uses or EPROBE_DEFERh]h5Number of IRQs a platform device uses or EPROBE_DEFER}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,devm_platform_get_irqs_affinity (C function)!c.devm_platform_get_irqs_affinityhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hint devm_platform_get_irqs_affinity (struct platform_device *dev, struct irq_affinity *affd, unsigned int minvec, unsigned int maxvec, int **irqs)h]h)}(hint devm_platform_get_irqs_affinity(struct platform_device *dev, struct irq_affinity *affd, unsigned int minvec, unsigned int maxvec, int **irqs)h](j)}(hinth]hint}(hj.OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*Ohhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMOubh)}(h h]h }(hj=OhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj*Ohhhjj?)j@huh1hhjj?)j@huh1hhj(ShMhjShhubjB)}(hhh]jG)}(h#get a resource for a device by nameh]h#get a resource for a device by name}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjThhubah}(h]h ]h"]h$]h&]uh1jAhjShhhj(ShMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjTjgjTjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct platform_device *dev`` platform device ``unsigned int type`` resource type ``const char *name`` resource nameh](jG)}(h**Parameters**h]jv)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjTubj)}(hhh](j)}(h0``struct platform_device *dev`` platform device h](j)}(h``struct platform_device *dev``h]j)}(hjUh]hstruct platform_device *dev}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjTubj)}(hhh]jG)}(hplatform deviceh]hplatform device}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjTubj)}(h$``unsigned int type`` resource type h](j)}(h``unsigned int type``h]j)}(hj>Uh]hunsigned int type}(hj@UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj?)j@huh1hhjUhMhjUhhubjB)}(hhh]jG)}(hget an IRQ for a device by nameh]hget an IRQ for a device by name}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjVhhubah}(h]h ]h"]h$]h&]uh1jAhjUhhhjUhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjWjgjWjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct platform_device *dev`` platform device ``const char *name`` IRQ name **Description** Get an IRQ like platform_get_irq(), but then by name rather then by index. **Return** non-zero IRQ number on success, negative error number on failure.h](jG)}(h**Parameters**h]jv)}(hjWh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj Wubj)}(hhh](j)}(h0``struct platform_device *dev`` platform device h](j)}(h``struct platform_device *dev``h]j)}(hj/Wh]hstruct platform_device *dev}(hj1WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-Wubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj)Wubj)}(hhh]jG)}(hplatform deviceh]hplatform device}(hjHWhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjDWhMhjEWubah}(h]h ]h"]h$]h&]uh1jhj)Wubeh}(h]h ]h"]h$]h&]uh1jhjDWhMhj&Wubj)}(h``const char *name`` IRQ name h](j)}(h``const char *name``h]j)}(hjhWh]hconst char *name}(hjjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfWubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjbWubj)}(hhh]jG)}(hIRQ nameh]hIRQ name}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj}WhMhj~Wubah}(h]h ]h"]h$]h&]uh1jhjbWubeh}(h]h ]h"]h$]h&]uh1jhj}WhMhj&Wubeh}(h]h ]h"]h$]h&]uh1jhj WubjG)}(h**Description**h]jv)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj WubjG)}(hJGet an IRQ like platform_get_irq(), but then by name rather then by index.h]hJGet an IRQ like platform_get_irq(), but then by name rather then by index.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj WubjG)}(h **Return**h]jv)}(hjWh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj WubjG)}(hAnon-zero IRQ number on success, negative error number on failure.h]hAnon-zero IRQ number on success, negative error number on failure.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj Wubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-platform_get_irq_byname_optional (C function)"c.platform_get_irq_byname_optionalhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hTint platform_get_irq_byname_optional (struct platform_device *dev, const char *name)h]h)}(hSint platform_get_irq_byname_optional(struct platform_device *dev, const char *name)h](j)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Xhhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMubh)}(h h]h }(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj XhhhjXhMubj)}(h platform_get_irq_byname_optionalh]j)}(h platform_get_irq_byname_optionalh]h platform_get_irq_byname_optional}(hj0XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Xubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj XhhhjXhMubj)}(h/(struct platform_device *dev, const char *name)h](j!)}(hstruct platform_device *devh](h)}(hhh]hstruct}(hjLXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHXubh)}(h h]h }(hjYXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjHXubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hjjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgXubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjlXmodnameN classnameNj^ja)}jd]jg)}jZj2Xsb"c.platform_get_irq_byname_optionalasbuh1hhjHXubh)}(h h]h }(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjHXubj{)}(hj~h]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjHXubj)}(hdevh]hdev}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHXubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjDXubj!)}(hconst char *nameh](h)}(hj8h]hconst}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubh)}(h h]h }(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjXubj)}(hcharh]hchar}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(h h]h }(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjXubj{)}(hj~h]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjXubj)}(hnameh]hname}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjDXubeh}(h]h ]h"]h$]h&]j+j,uh1jhj XhhhjXhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjXhhhjXhMubah}(h]jXah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjXhMhjXhhubjB)}(hhh]jG)}(h(get an optional IRQ for a device by nameh]h(get an optional IRQ for a device by name}(hj,YhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj)Yhhubah}(h]h ]h"]h$]h&]uh1jAhjXhhhjXhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjDYjgjDYjhjijjuh1hhhhjUhNhNubjl)}(hXM**Parameters** ``struct platform_device *dev`` platform device ``const char *name`` IRQ name **Description** Get an optional IRQ by name like platform_get_irq_byname(). Except that it does not print an error message if an IRQ can not be obtained. **Return** non-zero IRQ number on success, negative error number on failure.h](jG)}(h**Parameters**h]jv)}(hjNYh]h Parameters}(hjPYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLYubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjHYubj)}(hhh](j)}(h0``struct platform_device *dev`` platform device h](j)}(h``struct platform_device *dev``h]j)}(hjmYh]hstruct platform_device *dev}(hjoYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkYubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjgYubj)}(hhh]jG)}(hplatform deviceh]hplatform device}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhjgYubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjdYubj)}(h``const char *name`` IRQ name h](j)}(h``const char *name``h]j)}(hjYh]hconst char *name}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjYubj)}(hhh]jG)}(hIRQ nameh]hIRQ name}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjdYubeh}(h]h ]h"]h$]h&]uh1jhjHYubjG)}(h**Description**h]jv)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjHYubjG)}(hGet an optional IRQ by name like platform_get_irq_byname(). Except that it does not print an error message if an IRQ can not be obtained.h]hGet an optional IRQ by name like platform_get_irq_byname(). Except that it does not print an error message if an IRQ can not be obtained.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjHYubjG)}(h **Return**h]jv)}(hjZh]hReturn}(hj ZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjHYubjG)}(hAnon-zero IRQ number on success, negative error number on failure.h]hAnon-zero IRQ number on success, negative error number on failure.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjHYubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!platform_add_devices (C function)c.platform_add_deviceshNtauh1hhjUhhhNhNubh)}(hhh](h)}(hAint platform_add_devices (struct platform_device **devs, int num)h]h)}(h@int platform_add_devices(struct platform_device **devs, int num)h](j)}(hinth]hint}(hjMZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIZhhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMubh)}(h h]h }(hj\ZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjIZhhhj[ZhMubj)}(hplatform_add_devicesh]j)}(hplatform_add_devicesh]hplatform_add_devices}(hjnZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjZubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjIZhhhj[ZhMubj)}(h((struct platform_device **devs, int num)h](j!)}(hstruct platform_device **devsh](h)}(hhh]hstruct}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubh)}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjZubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjZmodnameN classnameNj^ja)}jd]jg)}jZjpZsbc.platform_add_devicesasbuh1hhjZubh)}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjZubj{)}(hj~h]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjZubj{)}(hj~h]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjZubj)}(hdevsh]hdevs}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjZubj!)}(hint numh](j)}(hinth]hint}(hj [hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(h h]h }(hj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj[ubj)}(hnumh]hnum}(hj%[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjZubeh}(h]h ]h"]h$]h&]j+j,uh1jhjIZhhhj[ZhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjEZhhhj[ZhMubah}(h]j@Zah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj[ZhMhjBZhhubjB)}(hhh]jG)}(h!add a numbers of platform devicesh]h!add a numbers of platform devices}(hjO[hhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjL[hhubah}(h]h ]h"]h$]h&]uh1jAhjBZhhhj[ZhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjg[jgjg[jhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct platform_device **devs`` array of platform devices to add ``int num`` number of platform devices in array **Return** 0 on success, negative error number on failure.h](jG)}(h**Parameters**h]jv)}(hjq[h]h Parameters}(hjs[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjo[ubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjk[ubj)}(hhh](j)}(hC``struct platform_device **devs`` array of platform devices to add h](j)}(h!``struct platform_device **devs``h]j)}(hj[h]hstruct platform_device **devs}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj[ubj)}(hhh]jG)}(h array of platform devices to addh]h array of platform devices to add}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj[ubj)}(h0``int num`` number of platform devices in array h](j)}(h ``int num``h]j)}(hj[h]hint num}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj[ubj)}(hhh]jG)}(h#number of platform devices in arrayh]h#number of platform devices in array}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj[ubeh}(h]h ]h"]h$]h&]uh1jhjk[ubjG)}(h **Return**h]jv)}(hj\h]hReturn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjk[ubjG)}(h/0 on success, negative error number on failure.h]h/0 on success, negative error number on failure.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjk[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ platform_device_put (C function)c.platform_device_puthNtauh1hhjUhhhNhNubh)}(hhh](h)}(h7void platform_device_put (struct platform_device *pdev)h]h)}(h6void platform_device_put(struct platform_device *pdev)h](j)}(hvoidh]hvoid}(hjI\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE\hhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM%ubh)}(h h]h }(hjX\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjE\hhhjW\hM%ubj)}(hplatform_device_puth]j)}(hplatform_device_puth]hplatform_device_put}(hjj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf\ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjE\hhhjW\hM%ubj)}(h(struct platform_device *pdev)h]j!)}(hstruct platform_device *pdevh](h)}(hhh]hstruct}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubh)}(h h]h }(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj\ubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj\modnameN classnameNj^ja)}jd]jg)}jZjl\sbc.platform_device_putasbuh1hhj\ubh)}(h h]h }(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj\ubj{)}(hj~h]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj\ubj)}(hpdevh]hpdev}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj~\ubah}(h]h ]h"]h$]h&]j+j,uh1jhjE\hhhjW\hM%ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjA\hhhjW\hM%ubah}(h]j<\ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjW\hM%hj>\hhubjB)}(hhh]jG)}(hdestroy a platform deviceh]hdestroy a platform device}(hj ]hhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj]hhubah}(h]h ]h"]h$]h&]uh1jAhj>\hhhjW\hM%ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj!]jgj!]jhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct platform_device *pdev`` platform device to free **Description** Free all memory associated with a platform device. This function must _only_ be externally called in error cases. All other usage is a bug.h](jG)}(h**Parameters**h]jv)}(hj+]h]h Parameters}(hj-]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)]ubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM#hj%]ubj)}(hhh]j)}(h9``struct platform_device *pdev`` platform device to free h](j)}(h ``struct platform_device *pdev``h]j)}(hjJ]h]hstruct platform_device *pdev}(hjL]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH]ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM hjD]ubj)}(hhh]jG)}(hplatform device to freeh]hplatform device to free}(hjc]hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj_]hM hj`]ubah}(h]h ]h"]h$]h&]uh1jhjD]ubeh}(h]h ]h"]h$]h&]uh1jhj_]hM hjA]ubah}(h]h ]h"]h$]h&]uh1jhj%]ubjG)}(h**Description**h]jv)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM"hj%]ubjG)}(hFree all memory associated with a platform device. This function must _only_ be externally called in error cases. All other usage is a bug.h]hFree all memory associated with a platform device. This function must _only_ be externally called in error cases. All other usage is a bug.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM"hj%]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"platform_device_alloc (C function)c.platform_device_allochNtauh1hhjUhhhNhNubh)}(hhh](h)}(hIstruct platform_device * platform_device_alloc (const char *name, int id)h]h)}(hGstruct platform_device *platform_device_alloc(const char *name, int id)h](h)}(hhh]hstruct}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]hhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMAubh)}(h h]h }(hj]hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj]hhhj]hMAubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj]modnameN classnameNj^ja)}jd]jg)}jZplatform_device_allocsbc.platform_device_allocasbuh1hhj]hhhj]hMAubh)}(h h]h }(hj ^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj]hhhj]hMAubj{)}(hj~h]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj]hhhj]hMAubj)}(hplatform_device_alloch]j)}(hj^h]hplatform_device_alloc}(hj)^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%^ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj]hhhj]hMAubj)}(h(const char *name, int id)h](j!)}(hconst char *nameh](h)}(hj8h]hconst}(hjD^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@^ubh)}(h h]h }(hjQ^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@^ubj)}(hcharh]hchar}(hj_^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@^ubh)}(h h]h }(hjm^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@^ubj{)}(hj~h]h*}(hj{^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj@^ubj)}(hnameh]hname}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@^ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj<^ubj!)}(hint idh](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(h h]h }(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj^ubj)}(hidh]hid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj<^ubeh}(h]h ]h"]h$]h&]j+j,uh1jhj]hhhj]hMAubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj]hhhj]hMAubah}(h]j]ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj]hMAhj]hhubjB)}(hhh]jG)}(hcreate a platform deviceh]hcreate a platform device}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM:hj^hhubah}(h]h ]h"]h$]h&]uh1jAhj]hhhj]hMAubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj^jgj^jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``const char *name`` base name of the device we're adding ``int id`` instance id **Description** Create a platform device object which can have other objects attached to it, and which will have attached objects freed when it is released.h](jG)}(h**Parameters**h]jv)}(hj _h]h Parameters}(hj _hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM>hj_ubj)}(hhh](j)}(h:``const char *name`` base name of the device we're adding h](j)}(h``const char *name``h]j)}(hj(_h]hconst char *name}(hj*_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&_ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM;hj"_ubj)}(hhh]jG)}(h$base name of the device we're addingh]h&base name of the device we’re adding}(hjA_hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj=_hM;hj>_ubah}(h]h ]h"]h$]h&]uh1jhj"_ubeh}(h]h ]h"]h$]h&]uh1jhj=_hM;hj_ubj)}(h``int id`` instance id h](j)}(h ``int id``h]j)}(hja_h]hint id}(hjc_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj__ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM<hj[_ubj)}(hhh]jG)}(h instance idh]h instance id}(hjz_hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjv_hM<hjw_ubah}(h]h ]h"]h$]h&]uh1jhj[_ubeh}(h]h ]h"]h$]h&]uh1jhjv_hM<hj_ubeh}(h]h ]h"]h$]h&]uh1jhj_ubjG)}(h**Description**h]jv)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM>hj_ubjG)}(hCreate a platform device object which can have other objects attached to it, and which will have attached objects freed when it is released.h]hCreate a platform device object which can have other objects attached to it, and which will have attached objects freed when it is released.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM>hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*platform_device_add_resources (C function)c.platform_device_add_resourceshNtauh1hhjUhhhNhNubh)}(hhh](h)}(hnint platform_device_add_resources (struct platform_device *pdev, const struct resource *res, unsigned int num)h]h)}(hmint platform_device_add_resources(struct platform_device *pdev, const struct resource *res, unsigned int num)h](j)}(hinth]hint}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM]ubh)}(h h]h }(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj_hhhj_hM]ubj)}(hplatform_device_add_resourcesh]j)}(hplatform_device_add_resourcesh]hplatform_device_add_resources}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj_hhhj_hM]ubj)}(hL(struct platform_device *pdev, const struct resource *res, unsigned int num)h](j!)}(hstruct platform_device *pdevh](h)}(hhh]hstruct}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubh)}(h h]h }(hj+`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj`ubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hj<`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9`ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj>`modnameN classnameNj^ja)}jd]jg)}jZj`sbc.platform_device_add_resourcesasbuh1hhj`ubh)}(h h]h }(hj\`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj`ubj{)}(hj~h]h*}(hjj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj`ubj)}(hpdevh]hpdev}(hjw`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj`ubj!)}(hconst struct resource *resh](h)}(hj8h]hconst}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubh)}(h h]h }(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj`ubh)}(hhh]hstruct}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubh)}(h h]h }(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj`ubh)}(hhh]j)}(hresourceh]hresource}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj`modnameN classnameNj^ja)}jd]jX`c.platform_device_add_resourcesasbuh1hhj`ubh)}(h h]h }(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj`ubj{)}(hj~h]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj`ubj)}(hresh]hres}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj`ubj!)}(hunsigned int numh](j)}(hunsignedh]hunsigned}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(h h]h }(hj)ahhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjaubj)}(hinth]hint}(hj7ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(h h]h }(hjEahhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjaubj)}(hnumh]hnum}(hjSahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj`ubeh}(h]h ]h"]h$]h&]j+j,uh1jhj_hhhj_hM]ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj_hhhj_hM]ubah}(h]j_ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj_hM]hj_hhubjB)}(hhh]jG)}(h"add resources to a platform deviceh]h"add resources to a platform device}(hj}ahhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMThjzahhubah}(h]h ]h"]h$]h&]uh1jAhj_hhhj_hM]ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjajgjajhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct platform_device *pdev`` platform device allocated by platform_device_alloc to add resources to ``const struct resource *res`` set of resources that needs to be allocated for the device ``unsigned int num`` number of resources **Description** Add a copy of the resources to the platform device. The memory associated with the resources will be freed when the platform device is released.h](jG)}(h**Parameters**h]jv)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMXhjaubj)}(hhh](j)}(hh``struct platform_device *pdev`` platform device allocated by platform_device_alloc to add resources to h](j)}(h ``struct platform_device *pdev``h]j)}(hjah]hstruct platform_device *pdev}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMUhjaubj)}(hhh]jG)}(hFplatform device allocated by platform_device_alloc to add resources toh]hFplatform device allocated by platform_device_alloc to add resources to}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjahMUhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMUhjaubj)}(hZ``const struct resource *res`` set of resources that needs to be allocated for the device h](j)}(h``const struct resource *res``h]j)}(hjah]hconst struct resource *res}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMVhjaubj)}(hhh]jG)}(h:set of resources that needs to be allocated for the deviceh]h:set of resources that needs to be allocated for the device}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj bhMVhj bubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj bhMVhjaubj)}(h)``unsigned int num`` number of resources h](j)}(h``unsigned int num``h]j)}(hj0bh]hunsigned int num}(hj2bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.bubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMWhj*bubj)}(hhh]jG)}(hnumber of resourcesh]hnumber of resources}(hjIbhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjEbhMWhjFbubah}(h]h ]h"]h$]h&]uh1jhj*bubeh}(h]h ]h"]h$]h&]uh1jhjEbhMWhjaubeh}(h]h ]h"]h$]h&]uh1jhjaubjG)}(h**Description**h]jv)}(hjkbh]h Description}(hjmbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjibubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMYhjaubjG)}(hAdd a copy of the resources to the platform device. The memory associated with the resources will be freed when the platform device is released.h]hAdd a copy of the resources to the platform device. The memory associated with the resources will be freed when the platform device is released.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMYhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%platform_device_add_data (C function)c.platform_device_add_datahNtauh1hhjUhhhNhNubh)}(hhh](h)}(hZint platform_device_add_data (struct platform_device *pdev, const void *data, size_t size)h]h)}(hYint platform_device_add_data(struct platform_device *pdev, const void *data, size_t size)h](j)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMyubh)}(h h]h }(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjbhhhjbhMyubj)}(hplatform_device_add_datah]j)}(hplatform_device_add_datah]hplatform_device_add_data}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjbhhhjbhMyubj)}(h=(struct platform_device *pdev, const void *data, size_t size)h](j!)}(hstruct platform_device *pdevh](h)}(hhh]hstruct}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubh)}(h h]h }(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjbubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hj chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj cmodnameN classnameNj^ja)}jd]jg)}jZjbsbc.platform_device_add_dataasbuh1hhjbubh)}(h h]h }(hj+chhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjbubj{)}(hj~h]h*}(hj9chhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjbubj)}(hpdevh]hpdev}(hjFchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjbubj!)}(hconst void *datah](h)}(hj8h]hconst}(hj_chhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[cubh)}(h h]h }(hjlchhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj[cubj)}(hvoidh]hvoid}(hjzchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[cubh)}(h h]h }(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj[cubj{)}(hj~h]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj[cubj)}(hdatah]hdata}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[cubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjbubj!)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjcmodnameN classnameNj^ja)}jd]j'cc.platform_device_add_dataasbuh1hhjcubh)}(h h]h }(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjcubj)}(hsizeh]hsize}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjbubeh}(h]h ]h"]h$]h&]j+j,uh1jhjbhhhjbhMyubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjbhhhjbhMyubah}(h]jbah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjbhMyhjbhhubjB)}(hhh]jG)}(h/add platform-specific data to a platform deviceh]h/add platform-specific data to a platform device}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMphjdhhubah}(h]h ]h"]h$]h&]uh1jAhjbhhhjbhMyubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj-djgj-djhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct platform_device *pdev`` platform device allocated by platform_device_alloc to add resources to ``const void *data`` platform specific data for this platform device ``size_t size`` size of platform specific data **Description** Add a copy of platform specific data to the platform device's platform_data pointer. The memory associated with the platform data will be freed when the platform device is released.h](jG)}(h**Parameters**h]jv)}(hj7dh]h Parameters}(hj9dhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5dubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMthj1dubj)}(hhh](j)}(hh``struct platform_device *pdev`` platform device allocated by platform_device_alloc to add resources to h](j)}(h ``struct platform_device *pdev``h]j)}(hjVdh]hstruct platform_device *pdev}(hjXdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTdubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMqhjPdubj)}(hhh]jG)}(hFplatform device allocated by platform_device_alloc to add resources toh]hFplatform device allocated by platform_device_alloc to add resources to}(hjodhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjkdhMqhjldubah}(h]h ]h"]h$]h&]uh1jhjPdubeh}(h]h ]h"]h$]h&]uh1jhjkdhMqhjMdubj)}(hE``const void *data`` platform specific data for this platform device h](j)}(h``const void *data``h]j)}(hjdh]hconst void *data}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMrhjdubj)}(hhh]jG)}(h/platform specific data for this platform deviceh]h/platform specific data for this platform device}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjdhMrhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMrhjMdubj)}(h/``size_t size`` size of platform specific data h](j)}(h``size_t size``h]j)}(hjdh]h size_t size}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMshjdubj)}(hhh]jG)}(hsize of platform specific datah]hsize of platform specific data}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjdhMshjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMshjMdubeh}(h]h ]h"]h$]h&]uh1jhj1dubjG)}(h**Description**h]jv)}(hjeh]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMuhj1dubjG)}(hAdd a copy of platform specific data to the platform device's platform_data pointer. The memory associated with the platform data will be freed when the platform device is released.h]hAdd a copy of platform specific data to the platform device’s platform_data pointer. The memory associated with the platform data will be freed when the platform device is released.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMuhj1dubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ platform_device_add (C function)c.platform_device_addhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h6int platform_device_add (struct platform_device *pdev)h]h)}(h5int platform_device_add(struct platform_device *pdev)h](j)}(hinth]hint}(hjHehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDehhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMubh)}(h h]h }(hjWehhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjDehhhjVehMubj)}(hplatform_device_addh]j)}(hplatform_device_addh]hplatform_device_add}(hjiehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeeubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjDehhhjVehMubj)}(h(struct platform_device *pdev)h]j!)}(hstruct platform_device *pdevh](h)}(hhh]hstruct}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubh)}(h h]h }(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjeubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjemodnameN classnameNj^ja)}jd]jg)}jZjkesbc.platform_device_addasbuh1hhjeubh)}(h h]h }(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjeubj{)}(hj~h]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjeubj)}(hpdevh]hpdev}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj}eubah}(h]h ]h"]h$]h&]j+j,uh1jhjDehhhjVehMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj@ehhhjVehMubah}(h]j;eah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjVehMhj=ehhubjB)}(hhh]jG)}(h)add a platform device to device hierarchyh]h)add a platform device to device hierarchy}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjfhhubah}(h]h ]h"]h$]h&]uh1jAhj=ehhhjVehMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj fjgj fjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct platform_device *pdev`` platform device we're adding **Description** This is part 2 of platform_device_register(), though may be called separately _iff_ pdev was allocated by platform_device_alloc().h](jG)}(h**Parameters**h]jv)}(hj*fh]h Parameters}(hj,fhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(fubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj$fubj)}(hhh]j)}(h>``struct platform_device *pdev`` platform device we're adding h](j)}(h ``struct platform_device *pdev``h]j)}(hjIfh]hstruct platform_device *pdev}(hjKfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGfubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjCfubj)}(hhh]jG)}(hplatform device we're addingh]hplatform device we’re adding}(hjbfhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj^fhMhj_fubah}(h]h ]h"]h$]h&]uh1jhjCfubeh}(h]h ]h"]h$]h&]uh1jhj^fhMhj@fubah}(h]h ]h"]h$]h&]uh1jhj$fubjG)}(h**Description**h]jv)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj$fubjG)}(hThis is part 2 of platform_device_register(), though may be called separately _iff_ pdev was allocated by platform_device_alloc().h]hThis is part 2 of platform_device_register(), though may be called separately _iff_ pdev was allocated by platform_device_alloc().}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj$fubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ platform_device_del (C function)c.platform_device_delhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h7void platform_device_del (struct platform_device *pdev)h]h)}(h6void platform_device_del(struct platform_device *pdev)h](j)}(hvoidh]hvoid}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMubh)}(h h]h }(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjfhhhjfhMubj)}(hplatform_device_delh]j)}(hplatform_device_delh]hplatform_device_del}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjfhhhjfhMubj)}(h(struct platform_device *pdev)h]j!)}(hstruct platform_device *pdevh](h)}(hhh]hstruct}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubh)}(h h]h }(hjghhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjgubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hj$ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!gubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj&gmodnameN classnameNj^ja)}jd]jg)}jZjfsbc.platform_device_delasbuh1hhjgubh)}(h h]h }(hjDghhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjgubj{)}(hj~h]h*}(hjRghhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjgubj)}(hpdevh]hpdev}(hj_ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjfubah}(h]h ]h"]h$]h&]j+j,uh1jhjfhhhjfhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjfhhhjfhMubah}(h]jfah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjfhMhjfhhubjB)}(hhh]jG)}(hremove a platform-level deviceh]hremove a platform-level device}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjghhubah}(h]h ]h"]h$]h&]uh1jAhjfhhhjfhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjgjgjgjhjijjuh1hhhhjUhNhNubjl)}(hX6**Parameters** ``struct platform_device *pdev`` platform device we're removing **Description** Note that this function will also release all memory- and port-based resources owned by the device (**dev->resource**). This function must _only_ be externally called in error cases. All other usage is a bug.h](jG)}(h**Parameters**h]jv)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjgubj)}(hhh]j)}(h@``struct platform_device *pdev`` platform device we're removing h](j)}(h ``struct platform_device *pdev``h]j)}(hjgh]hstruct platform_device *pdev}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjgubj)}(hhh]jG)}(hplatform device we're removingh]h platform device we’re removing}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjghMhjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghMhjgubah}(h]h ]h"]h$]h&]uh1jhjgubjG)}(h**Description**h]jv)}(hjhh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjgubjG)}(hNote that this function will also release all memory- and port-based resources owned by the device (**dev->resource**). This function must _only_ be externally called in error cases. All other usage is a bug.h](hdNote that this function will also release all memory- and port-based resources owned by the device (}(hjhhhhNhNubjv)}(h**dev->resource**h]h dev->resource}(hj#hhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubh]). This function must _only_ be externally called in error cases. All other usage is a bug.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%platform_device_register (C function)c.platform_device_registerhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h;int platform_device_register (struct platform_device *pdev)h]h)}(h:int platform_device_register(struct platform_device *pdev)h](j)}(hinth]hint}(hj\hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMubh)}(h h]h }(hjkhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjXhhhhjjhhMubj)}(hplatform_device_registerh]j)}(hplatform_device_registerh]hplatform_device_register}(hj}hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjXhhhhjjhhMubj)}(h(struct platform_device *pdev)h]j!)}(hstruct platform_device *pdevh](h)}(hhh]hstruct}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubh)}(h h]h }(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjhmodnameN classnameNj^ja)}jd]jg)}jZjhsbc.platform_device_registerasbuh1hhjhubh)}(h h]h }(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhubj{)}(hj~h]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhubj)}(hpdevh]hpdev}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjhubah}(h]h ]h"]h$]h&]j+j,uh1jhjXhhhhjjhhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjThhhhjjhhMubah}(h]jOhah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjjhhMhjQhhhubjB)}(hhh]jG)}(hadd a platform-level deviceh]hadd a platform-level device}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjihhubah}(h]h ]h"]h$]h&]uh1jAhjQhhhhjjhhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj4ijgj4ijhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct platform_device *pdev`` platform device we're adding **NOTE** _Never_ directly free **pdev** after calling this function, even if it returned an error! Always use platform_device_put() to give up the reference initialised in this function instead.h](jG)}(h**Parameters**h]jv)}(hj>ih]h Parameters}(hj@ihhhNhNubah}(h]h ]h"]h$]h&]uh1juhj``struct platform_device *pdev`` platform device we're adding h](j)}(h ``struct platform_device *pdev``h]j)}(hj]ih]hstruct platform_device *pdev}(hj_ihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[iubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjWiubj)}(hhh]jG)}(hplatform device we're addingh]hplatform device we’re adding}(hjvihhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjrihMhjsiubah}(h]h ]h"]h$]h&]uh1jhjWiubeh}(h]h ]h"]h$]h&]uh1jhjrihMhjTiubah}(h]h ]h"]h$]h&]uh1jhj8iubjG)}(h**NOTE**h]jv)}(hjih]hNOTE}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj8iubjG)}(h_Never_ directly free **pdev** after calling this function, even if it returned an error! Always use platform_device_put() to give up the reference initialised in this function instead.h](h_Never_ directly free }(hjihhhNhNubjv)}(h**pdev**h]hpdev}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubh after calling this function, even if it returned an error! Always use platform_device_put() to give up the reference initialised in this function instead.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj8iubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'platform_device_unregister (C function)c.platform_device_unregisterhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h>void platform_device_unregister (struct platform_device *pdev)h]h)}(h=void platform_device_unregister(struct platform_device *pdev)h](j)}(hvoidh]hvoid}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMubh)}(h h]h }(hjihhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjihhhjihMubj)}(hplatform_device_unregisterh]j)}(hplatform_device_unregisterh]hplatform_device_unregister}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj jubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjihhhjihMubj)}(h(struct platform_device *pdev)h]j!)}(hstruct platform_device *pdevh](h)}(hhh]hstruct}(hj,jhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(jubh)}(h h]h }(hj9jhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj(jubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hjJjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjLjmodnameN classnameNj^ja)}jd]jg)}jZjjsbc.platform_device_unregisterasbuh1hhj(jubh)}(h h]h }(hjjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj(jubj{)}(hj~h]h*}(hjxjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj(jubj)}(hpdevh]hpdev}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(jubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj$jubah}(h]h ]h"]h$]h&]j+j,uh1jhjihhhjihMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjihhhjihMubah}(h]jiah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjihMhjihhubjB)}(hhh]jG)}(h"unregister a platform-level deviceh]h"unregister a platform-level device}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjjhhubah}(h]h ]h"]h$]h&]uh1jAhjihhhjihMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjjgjjjhjijjuh1hhhhjUhNhNubjl)}(hX **Parameters** ``struct platform_device *pdev`` platform device we're unregistering **Description** Unregistration is done in 2 steps. First we release all resources and remove it from the subsystem, then we drop reference count by calling platform_device_put().h](jG)}(h**Parameters**h]jv)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjjubj)}(hhh]j)}(hE``struct platform_device *pdev`` platform device we're unregistering h](j)}(h ``struct platform_device *pdev``h]j)}(hjjh]hstruct platform_device *pdev}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjjubj)}(hhh]jG)}(h#platform device we're unregisteringh]h%platform device we’re unregistering}(hj khhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjjubah}(h]h ]h"]h$]h&]uh1jhjjubjG)}(h**Description**h]jv)}(hj+kh]h Description}(hj-khhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)kubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjjubjG)}(hUnregistration is done in 2 steps. First we release all resources and remove it from the subsystem, then we drop reference count by calling platform_device_put().h]hUnregistration is done in 2 steps. First we release all resources and remove it from the subsystem, then we drop reference count by calling platform_device_put().}(hjAkhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*platform_device_register_full (C function)c.platform_device_register_fullhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hdstruct platform_device * platform_device_register_full (const struct platform_device_info *pdevinfo)h]h)}(hbstruct platform_device *platform_device_register_full(const struct platform_device_info *pdevinfo)h](h)}(hhh]hstruct}(hjpkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlkhhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM&ubh)}(h h]h }(hj~khhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjlkhhhj}khM&ubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjkmodnameN classnameNj^ja)}jd]jg)}jZplatform_device_register_fullsbc.platform_device_register_fullasbuh1hhjlkhhhj}khM&ubh)}(h h]h }(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjlkhhhj}khM&ubj{)}(hj~h]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjlkhhhj}khM&ubj)}(hplatform_device_register_fullh]j)}(hjkh]hplatform_device_register_full}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjlkhhhj}khM&ubj)}(h-(const struct platform_device_info *pdevinfo)h]j!)}(h+const struct platform_device_info *pdevinfoh](h)}(hj8h]hconst}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubh)}(h h]h }(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkubh)}(hhh]hstruct}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubh)}(h h]h }(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkubh)}(hhh]j)}(hplatform_device_infoh]hplatform_device_info}(hj#lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj lubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj%lmodnameN classnameNj^ja)}jd]jkc.platform_device_register_fullasbuh1hhjkubh)}(h h]h }(hjAlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkubj{)}(hj~h]h*}(hjOlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjkubj)}(hpdevinfoh]hpdevinfo}(hj\lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjkubah}(h]h ]h"]h$]h&]j+j,uh1jhjlkhhhj}khM&ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhkhhhj}khM&ubah}(h]jckah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj}khM&hjekhhubjB)}(hhh]jG)}(hEadd a platform-level device with resources and platform-specific datah]hEadd a platform-level device with resources and platform-specific data}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjlhhubah}(h]h ]h"]h$]h&]uh1jAhjekhhhj}khM&ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjljgjljhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``const struct platform_device_info *pdevinfo`` data used to create device **Description** Returns :c:type:`struct platform_device ` pointer on success, or ERR_PTR() on error.h](jG)}(h**Parameters**h]jv)}(hjlh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM#hjlubj)}(hhh]j)}(hK``const struct platform_device_info *pdevinfo`` data used to create device h](j)}(h/``const struct platform_device_info *pdevinfo``h]j)}(hjlh]h+const struct platform_device_info *pdevinfo}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM"hjlubj)}(hhh]jG)}(hdata used to create deviceh]hdata used to create device}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjlhM"hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhM"hjlubah}(h]h ]h"]h$]h&]uh1jhjlubjG)}(h**Description**h]jv)}(hjmh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM$hjlubjG)}(heReturns :c:type:`struct platform_device ` pointer on success, or ERR_PTR() on error.h](hReturns }(hjmhhhNhNubh)}(h2:c:type:`struct platform_device `h]j)}(hj"mh]hstruct platform_device}(hj$mhhhNhNubah}(h]h ](jhj`c-typeeh"]h$]h&]uh1jhj mubah}(h]h ]h"]h$]h&]refdocjh refdomainj`reftypetype refexplicitrefwarnj^jhjhplatform_deviceuh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM$hjmubh+ pointer on success, or ERR_PTR() on error.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhj?mhM$hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'__platform_driver_register (C function)c.__platform_driver_registerhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hRint __platform_driver_register (struct platform_driver *drv, struct module *owner)h]h)}(hQint __platform_driver_register(struct platform_driver *drv, struct module *owner)h](j)}(hinth]hint}(hjjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfmhhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM]ubh)}(h h]h }(hjymhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjfmhhhjxmhM]ubj)}(h__platform_driver_registerh]j)}(h__platform_driver_registerh]h__platform_driver_register}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjfmhhhjxmhM]ubj)}(h3(struct platform_driver *drv, struct module *owner)h](j!)}(hstruct platform_driver *drvh](h)}(hhh]hstruct}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubh)}(h h]h }(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjmubh)}(hhh]j)}(hplatform_driverh]hplatform_driver}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmmodnameN classnameNj^ja)}jd]jg)}jZjmsbc.__platform_driver_registerasbuh1hhjmubh)}(h h]h }(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjmubj{)}(hj~h]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjmubj)}(hdrvh]hdrv}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjmubj!)}(hstruct module *ownerh](h)}(hhh]hstruct}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubh)}(h h]h }(hj&nhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjnubh)}(hhh]j)}(hmoduleh]hmodule}(hj7nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4nubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj9nmodnameN classnameNj^ja)}jd]jmc.__platform_driver_registerasbuh1hhjnubh)}(h h]h }(hjUnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjnubj{)}(hj~h]h*}(hjcnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjnubj)}(hownerh]howner}(hjpnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjmubeh}(h]h ]h"]h$]h&]j+j,uh1jhjfmhhhjxmhM]ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjbmhhhjxmhM]ubah}(h]j]mah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjxmhM]hj_mhhubjB)}(hhh]jG)}(h,register a driver for platform-level devicesh]h,register a driver for platform-level devices}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMYhjnhhubah}(h]h ]h"]h$]h&]uh1jAhj_mhhhjxmhM]ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjnjgjnjhjijjuh1hhhhjUhNhNubjl)}(h|**Parameters** ``struct platform_driver *drv`` platform driver structure ``struct module *owner`` owning module/driverh](jG)}(h**Parameters**h]jv)}(hjnh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM]hjnubj)}(hhh](j)}(h:``struct platform_driver *drv`` platform driver structure h](j)}(h``struct platform_driver *drv``h]j)}(hjnh]hstruct platform_driver *drv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMZhjnubj)}(hhh]jG)}(hplatform driver structureh]hplatform driver structure}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjnhMZhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhMZhjnubj)}(h-``struct module *owner`` owning module/driverh](j)}(h``struct module *owner``h]j)}(hjoh]hstruct module *owner}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM\hjoubj)}(hhh]jG)}(howning module/driverh]howning module/driver}(hj-ohhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM[hj*oubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhj)ohM\hjnubeh}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'platform_driver_unregister (C function)c.platform_driver_unregisterhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h=void platform_driver_unregister (struct platform_driver *drv)h]h)}(hj?)j@huh1hhj|ohMkhjcohhubjB)}(hhh]jG)}(h.unregister a driver for platform-level devicesh]h.unregister a driver for platform-level devices}(hj.phhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhhj+phhubah}(h]h ]h"]h$]h&]uh1jAhjcohhhj|ohMkubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjFpjgjFpjhjijjuh1hhhhjUhNhNubjl)}(hK**Parameters** ``struct platform_driver *drv`` platform driver structureh](jG)}(h**Parameters**h]jv)}(hjPph]h Parameters}(hjRphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNpubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMlhjJpubj)}(hhh]j)}(h9``struct platform_driver *drv`` platform driver structureh](j)}(h``struct platform_driver *drv``h]j)}(hjoph]hstruct platform_driver *drv}(hjqphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmpubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMnhjipubj)}(hhh]jG)}(hplatform driver structureh]hplatform driver structure}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMihjpubah}(h]h ]h"]h$]h&]uh1jhjipubeh}(h]h ]h"]h$]h&]uh1jhjphMnhjfpubah}(h]h ]h"]h$]h&]uh1jhjJpubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$__platform_driver_probe (C function)c.__platform_driver_probehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hxint __platform_driver_probe (struct platform_driver *drv, int (*probe)(struct platform_device *), struct module *module)h]h)}(hvint __platform_driver_probe(struct platform_driver *drv, int (*probe)(struct platform_device*), struct module *module)h](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMubh)}(h h]h }(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjphhhjphMubj)}(h__platform_driver_probeh]j)}(h__platform_driver_probeh]h__platform_driver_probe}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjphhhjphMubj)}(h[(struct platform_driver *drv, int (*probe)(struct platform_device*), struct module *module)h](j!)}(hstruct platform_driver *drvh](h)}(hhh]hstruct}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubh)}(h h]h }(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjqubh)}(hhh]j)}(hplatform_driverh]hplatform_driver}(hj$qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!qubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj&qmodnameN classnameNj^ja)}jd]jg)}jZjpsbc.__platform_driver_probeasbuh1hhjqubh)}(h h]h }(hjDqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjqubj{)}(hj~h]h*}(hjRqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjqubj)}(hdrvh]hdrv}(hj_qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjpubj!)}(h%int (*probe)(struct platform_device*)h](j)}(hinth]hint}(hjxqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtqubh)}(h h]h }(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjtqubj{)}(hjh]h(}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjtqubj{)}(hj~h]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjtqubj)}(hprobeh]hprobe}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtqubj{)}(hjh]h)}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjtqubj{)}(hjh]h(}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjtqubh)}(hhh]hstruct}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtqubh)}(h h]h }(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjtqubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjqmodnameN classnameNj^ja)}jd]j@qc.__platform_driver_probeasbuh1hhjtqubj{)}(hj~h]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjtqubj{)}(hjh]h)}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjtqubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjpubj!)}(hstruct module *moduleh](h)}(hhh]hstruct}(hj7rhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3rubh)}(h h]h }(hjDrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj3rubh)}(hhh]j)}(hmoduleh]hmodule}(hjUrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRrubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjWrmodnameN classnameNj^ja)}jd]j@qc.__platform_driver_probeasbuh1hhj3rubh)}(h h]h }(hjsrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj3rubj{)}(hj~h]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj3rubj)}(hmoduleh]hmodule}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3rubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjpubeh}(h]h ]h"]h$]h&]j+j,uh1jhjphhhjphMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjphhhjphMubah}(h]jpah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjphMhjphhubjB)}(hhh]jG)}(h+register driver for non-hotpluggable deviceh]h+register driver for non-hotpluggable device}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM~hjrhhubah}(h]h ]h"]h$]h&]uh1jAhjphhhjphMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjrjgjrjhjijjuh1hhhhjUhNhNubjl)}(hXn**Parameters** ``struct platform_driver *drv`` platform driver structure ``int (*probe)(struct platform_device *)`` the driver probe routine, probably from an __init section ``struct module *module`` module which will be the owner of the driver **Description** Use this instead of platform_driver_register() when you know the device is not hotpluggable and has already been registered, and you want to remove its run-once probe() infrastructure from memory after the driver has bound to the device. One typical use for this would be with drivers for controllers integrated into system-on-chip processors, where the controller devices have been configured as part of board setup. Note that this is incompatible with deferred probing. Returns zero if the driver registered and bound to a device, else returns a negative error code and with the driver not registered.h](jG)}(h**Parameters**h]jv)}(hjrh]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjrubj)}(hhh](j)}(h:``struct platform_driver *drv`` platform driver structure h](j)}(h``struct platform_driver *drv``h]j)}(hjrh]hstruct platform_driver *drv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjrubj)}(hhh]jG)}(hplatform driver structureh]hplatform driver structure}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjshMhjrubj)}(he``int (*probe)(struct platform_device *)`` the driver probe routine, probably from an __init section h](j)}(h*``int (*probe)(struct platform_device *)``h]j)}(hj2sh]h&int (*probe)(struct platform_device *)}(hj4shhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0subah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj,subj)}(hhh]jG)}(h9the driver probe routine, probably from an __init sectionh]h9the driver probe routine, probably from an __init section}(hjKshhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjGshMhjHsubah}(h]h ]h"]h$]h&]uh1jhj,subeh}(h]h ]h"]h$]h&]uh1jhjGshMhjrubj)}(hG``struct module *module`` module which will be the owner of the driver h](j)}(h``struct module *module``h]j)}(hjksh]hstruct module *module}(hjmshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjisubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjesubj)}(hhh]jG)}(h,module which will be the owner of the driverh]h,module which will be the owner of the driver}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjesubeh}(h]h ]h"]h$]h&]uh1jhjshMhjrubeh}(h]h ]h"]h$]h&]uh1jhjrubjG)}(h**Description**h]jv)}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjrubjG)}(hUse this instead of platform_driver_register() when you know the device is not hotpluggable and has already been registered, and you want to remove its run-once probe() infrastructure from memory after the driver has bound to the device.h]hUse this instead of platform_driver_register() when you know the device is not hotpluggable and has already been registered, and you want to remove its run-once probe() infrastructure from memory after the driver has bound to the device.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjrubjG)}(hOne typical use for this would be with drivers for controllers integrated into system-on-chip processors, where the controller devices have been configured as part of board setup.h]hOne typical use for this would be with drivers for controllers integrated into system-on-chip processors, where the controller devices have been configured as part of board setup.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjrubjG)}(h5Note that this is incompatible with deferred probing.h]h5Note that this is incompatible with deferred probing.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjrubjG)}(hReturns zero if the driver registered and bound to a device, else returns a negative error code and with the driver not registered.h]hReturns zero if the driver registered and bound to a device, else returns a negative error code and with the driver not registered.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%__platform_create_bundle (C function)c.__platform_create_bundlehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hstruct platform_device * __platform_create_bundle (struct platform_driver *driver, int (*probe)(struct platform_device *), struct resource *res, unsigned int n_res, const void *data, size_t size, struct module *module)h]h)}(hstruct platform_device *__platform_create_bundle(struct platform_driver *driver, int (*probe)(struct platform_device*), struct resource *res, unsigned int n_res, const void *data, size_t size, struct module *module)h](h)}(hhh]hstruct}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjthhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMubh)}(h h]h }(hj&thhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjthhhj%thMubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hj7thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4tubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj9tmodnameN classnameNj^ja)}jd]jg)}jZ__platform_create_bundlesbc.__platform_create_bundleasbuh1hhjthhhj%thMubh)}(h h]h }(hjXthhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjthhhj%thMubj{)}(hj~h]h*}(hjfthhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjthhhj%thMubj)}(h__platform_create_bundleh]j)}(hjUth]h__platform_create_bundle}(hjwthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjstubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjthhhj%thMubj)}(h(struct platform_driver *driver, int (*probe)(struct platform_device*), struct resource *res, unsigned int n_res, const void *data, size_t size, struct module *module)h](j!)}(hstruct platform_driver *driverh](h)}(hhh]hstruct}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubh)}(h h]h }(hjthhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjtubh)}(hhh]j)}(hplatform_driverh]hplatform_driver}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjtmodnameN classnameNj^ja)}jd]jStc.__platform_create_bundleasbuh1hhjtubh)}(h h]h }(hjthhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjtubj{)}(hj~h]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjtubj)}(hdriverh]hdriver}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjtubj!)}(h%int (*probe)(struct platform_device*)h](j)}(hinth]hint}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(h h]h }(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjtubj{)}(hjh]h(}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjtubj{)}(hj~h]h*}(hj+uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjtubj)}(hprobeh]hprobe}(hj8uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj{)}(hjh]h)}(hjFuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjtubj{)}(hjh]h(}(hjSuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjtubh)}(hhh]hstruct}(hj`uhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubh)}(h h]h }(hjmuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjtubh)}(hhh]j)}(hplatform_deviceh]hplatform_device}(hj~uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{uubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjumodnameN classnameNj^ja)}jd]jStc.__platform_create_bundleasbuh1hhjtubj{)}(hj~h]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjtubj{)}(hjh]h)}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjtubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjtubj!)}(hstruct resource *resh](h)}(hhh]hstruct}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubh)}(h h]h }(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjuubh)}(hhh]j)}(hresourceh]hresource}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjumodnameN classnameNj^ja)}jd]jStc.__platform_create_bundleasbuh1hhjuubh)}(h h]h }(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjuubj{)}(hj~h]h*}(hj vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjuubj)}(hresh]hres}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjtubj!)}(hunsigned int n_resh](j)}(hunsignedh]hunsigned}(hj1vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-vubh)}(h h]h }(hj?vhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-vubj)}(hinth]hint}(hjMvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-vubh)}(h h]h }(hj[vhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-vubj)}(hn_resh]hn_res}(hjivhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-vubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjtubj!)}(hconst void *datah](h)}(hj8h]hconst}(hjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~vubh)}(h h]h }(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj~vubj)}(hvoidh]hvoid}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~vubh)}(h h]h }(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj~vubj{)}(hj~h]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj~vubj)}(hdatah]hdata}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~vubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjtubj!)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjvmodnameN classnameNj^ja)}jd]jStc.__platform_create_bundleasbuh1hhjvubh)}(h h]h }(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjvubj)}(hsizeh]hsize}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjtubj!)}(hstruct module *moduleh](h)}(hhh]hstruct}(hj'whhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#wubh)}(h h]h }(hj4whhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#wubh)}(hhh]j)}(hmoduleh]hmodule}(hjEwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBwubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjGwmodnameN classnameNj^ja)}jd]jStc.__platform_create_bundleasbuh1hhj#wubh)}(h h]h }(hjcwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#wubj{)}(hj~h]h*}(hjqwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj#wubj)}(hmoduleh]hmodule}(hj~whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#wubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjtubeh}(h]h ]h"]h$]h&]j+j,uh1jhjthhhj%thMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjthhhj%thMubah}(h]j tah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj%thMhj thhubjB)}(hhh]jG)}(h/register driver and create corresponding deviceh]h/register driver and create corresponding device}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjwhhubah}(h]h ]h"]h$]h&]uh1jAhj thhhj%thMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjwjgjwjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct platform_driver *driver`` platform driver structure ``int (*probe)(struct platform_device *)`` the driver probe routine, probably from an __init section ``struct resource *res`` set of resources that needs to be allocated for the device ``unsigned int n_res`` number of resources ``const void *data`` platform specific data for this platform device ``size_t size`` size of platform specific data ``struct module *module`` module which will be the owner of the driver **Description** Use this in legacy-style modules that probe hardware directly and register a single platform device and corresponding platform driver. Returns :c:type:`struct platform_device ` pointer on success, or ERR_PTR() on error.h](jG)}(h**Parameters**h]jv)}(hjwh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjwubj)}(hhh](j)}(h=``struct platform_driver *driver`` platform driver structure h](j)}(h"``struct platform_driver *driver``h]j)}(hjwh]hstruct platform_driver *driver}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjwubj)}(hhh]jG)}(hplatform driver structureh]hplatform driver structure}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjwubj)}(he``int (*probe)(struct platform_device *)`` the driver probe routine, probably from an __init section h](j)}(h*``int (*probe)(struct platform_device *)``h]j)}(hj"xh]h&int (*probe)(struct platform_device *)}(hj$xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj xubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjxubj)}(hhh]jG)}(h9the driver probe routine, probably from an __init sectionh]h9the driver probe routine, probably from an __init section}(hj;xhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj7xhMhj8xubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhj7xhMhjwubj)}(hT``struct resource *res`` set of resources that needs to be allocated for the device h](j)}(h``struct resource *res``h]j)}(hj[xh]hstruct resource *res}(hj]xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYxubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjUxubj)}(hhh]jG)}(h:set of resources that needs to be allocated for the deviceh]h:set of resources that needs to be allocated for the device}(hjtxhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjpxhMhjqxubah}(h]h ]h"]h$]h&]uh1jhjUxubeh}(h]h ]h"]h$]h&]uh1jhjpxhMhjwubj)}(h+``unsigned int n_res`` number of resources h](j)}(h``unsigned int n_res``h]j)}(hjxh]hunsigned int n_res}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjxubj)}(hhh]jG)}(hnumber of resourcesh]hnumber of resources}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjwubj)}(hE``const void *data`` platform specific data for this platform device h](j)}(h``const void *data``h]j)}(hjxh]hconst void *data}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjxubj)}(hhh]jG)}(h/platform specific data for this platform deviceh]h/platform specific data for this platform device}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjwubj)}(h/``size_t size`` size of platform specific data h](j)}(h``size_t size``h]j)}(hjyh]h size_t size}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjyubj)}(hhh]jG)}(hsize of platform specific datah]hsize of platform specific data}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjwubj)}(hG``struct module *module`` module which will be the owner of the driver h](j)}(h``struct module *module``h]j)}(hj?yh]hstruct module *module}(hjAyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=yubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj9yubj)}(hhh]jG)}(h,module which will be the owner of the driverh]h,module which will be the owner of the driver}(hjXyhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjTyhMhjUyubah}(h]h ]h"]h$]h&]uh1jhj9yubeh}(h]h ]h"]h$]h&]uh1jhjTyhMhjwubeh}(h]h ]h"]h$]h&]uh1jhjwubjG)}(h**Description**h]jv)}(hjzyh]h Description}(hj|yhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxyubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjwubjG)}(hUse this in legacy-style modules that probe hardware directly and register a single platform device and corresponding platform driver.h]hUse this in legacy-style modules that probe hardware directly and register a single platform device and corresponding platform driver.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjwubjG)}(heReturns :c:type:`struct platform_device ` pointer on success, or ERR_PTR() on error.h](hReturns }(hjyhhhNhNubh)}(h2:c:type:`struct platform_device `h]j)}(hjyh]hstruct platform_device}(hjyhhhNhNubah}(h]h ](jhj`c-typeeh"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]refdocjh refdomainj`reftypetype refexplicitrefwarnj^jhjhplatform_deviceuh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjyubh+ pointer on success, or ERR_PTR() on error.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhjyhMhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(__platform_register_drivers (C function)c.__platform_register_drivershNtauh1hhjUhhhNhNubh)}(hhh](h)}(hsint __platform_register_drivers (struct platform_driver * const *drivers, unsigned int count, struct module *owner)h]h)}(hqint __platform_register_drivers(struct platform_driver *const *drivers, unsigned int count, struct module *owner)h](j)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMubh)}(h h]h }(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjyhhhjyhMubj)}(h__platform_register_driversh]j)}(h__platform_register_driversh]h__platform_register_drivers}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjyhhhjyhMubj)}(hR(struct platform_driver *const *drivers, unsigned int count, struct module *owner)h](j!)}(h&struct platform_driver *const *driversh](h)}(hhh]hstruct}(hj.zhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*zubh)}(h h]h }(hj;zhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj*zubh)}(hhh]j)}(hplatform_driverh]hplatform_driver}(hjLzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIzubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjNzmodnameN classnameNj^ja)}jd]jg)}jZjzsbc.__platform_register_driversasbuh1hhj*zubh)}(h h]h }(hjlzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj*zubj{)}(hj~h]h*}(hjzzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj*zubh)}(hj8h]hconst}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*zubh)}(h h]h }(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj*zubj{)}(hj~h]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj*zubj)}(hdriversh]hdrivers}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*zubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj&zubj!)}(hunsigned int counth](j)}(hunsignedh]hunsigned}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(h h]h }(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjzubj)}(hinth]hint}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(h h]h }(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjzubj)}(hcounth]hcount}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj&zubj!)}(hstruct module *ownerh](h)}(hhh]hstruct}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubh)}(h h]h }(hj&{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj{ubh)}(hhh]j)}(hmoduleh]hmodule}(hj7{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4{ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj9{modnameN classnameNj^ja)}jd]jhzc.__platform_register_driversasbuh1hhj{ubh)}(h h]h }(hjU{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj{ubj{)}(hj~h]h*}(hjc{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj{ubj)}(hownerh]howner}(hjp{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj&zubeh}(h]h ]h"]h$]h&]j+j,uh1jhjyhhhjyhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjyhhhjyhMubah}(h]jyah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjyhMhjyhhubjB)}(hhh]jG)}(h%register an array of platform driversh]h%register an array of platform drivers}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj{hhubah}(h]h ]h"]h$]h&]uh1jAhjyhhhjyhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj{jgj{jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct platform_driver * const *drivers`` an array of drivers to register ``unsigned int count`` the number of drivers to register ``struct module *owner`` module owning the drivers **Description** Registers platform drivers specified by an array. On failure to register a driver, all previously registered drivers will be unregistered. Callers of this API should use platform_unregister_drivers() to unregister drivers in the reverse order. **Return** 0 on success or a negative error code on failure.h](jG)}(h**Parameters**h]jv)}(hj{h]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj{ubj)}(hhh](j)}(hL``struct platform_driver * const *drivers`` an array of drivers to register h](j)}(h+``struct platform_driver * const *drivers``h]j)}(hj{h]h'struct platform_driver * const *drivers}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj{ubj)}(hhh]jG)}(han array of drivers to registerh]han array of drivers to register}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhj{ubj)}(h9``unsigned int count`` the number of drivers to register h](j)}(h``unsigned int count``h]j)}(hj|h]hunsigned int count}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj|ubj)}(hhh]jG)}(h!the number of drivers to registerh]h!the number of drivers to register}(hj-|hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj)|hMhj*|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj)|hMhj{ubj)}(h3``struct module *owner`` module owning the drivers h](j)}(h``struct module *owner``h]j)}(hjM|h]hstruct module *owner}(hjO|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK|ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjG|ubj)}(hhh]jG)}(hmodule owning the driversh]hmodule owning the drivers}(hjf|hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjb|hMhjc|ubah}(h]h ]h"]h$]h&]uh1jhjG|ubeh}(h]h ]h"]h$]h&]uh1jhjb|hMhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{ubjG)}(h**Description**h]jv)}(hj|h]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj{ubjG)}(hRegisters platform drivers specified by an array. On failure to register a driver, all previously registered drivers will be unregistered. Callers of this API should use platform_unregister_drivers() to unregister drivers in the reverse order.h]hRegisters platform drivers specified by an array. On failure to register a driver, all previously registered drivers will be unregistered. Callers of this API should use platform_unregister_drivers() to unregister drivers in the reverse order.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj{ubjG)}(h **Return**h]jv)}(hj|h]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj{ubjG)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(platform_unregister_drivers (C function)c.platform_unregister_drivershNtauh1hhjUhhhNhNubh)}(hhh](h)}(h^void platform_unregister_drivers (struct platform_driver * const *drivers, unsigned int count)h]h)}(h\void platform_unregister_drivers(struct platform_driver *const *drivers, unsigned int count)h](j)}(hvoidh]hvoid}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM-ubh)}(h h]h }(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj|hhhj}hM-ubj)}(hplatform_unregister_driversh]j)}(hplatform_unregister_driversh]hplatform_unregister_drivers}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj|hhhj}hM-ubj)}(h<(struct platform_driver *const *drivers, unsigned int count)h](j!)}(h&struct platform_driver *const *driversh](h)}(hhh]hstruct}(hj1}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-}ubh)}(h h]h }(hj>}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-}ubh)}(hhh]j)}(hplatform_driverh]hplatform_driver}(hjO}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL}ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjQ}modnameN classnameNj^ja)}jd]jg)}jZj}sbc.platform_unregister_driversasbuh1hhj-}ubh)}(h h]h }(hjo}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-}ubj{)}(hj~h]h*}(hj}}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj-}ubh)}(hj8h]hconst}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-}ubh)}(h h]h }(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-}ubj{)}(hj~h]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj-}ubj)}(hdriversh]hdrivers}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-}ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj)}ubj!)}(hunsigned int counth](j)}(hunsignedh]hunsigned}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(h h]h }(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj}ubj)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(h h]h }(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj}ubj)}(hcounth]hcount}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj)}ubeh}(h]h ]h"]h$]h&]j+j,uh1jhj|hhhj}hM-ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj|hhhj}hM-ubah}(h]j|ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj}hM-hj|hhubjB)}(hhh]jG)}(h'unregister an array of platform driversh]h'unregister an array of platform drivers}(hj-~hhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM%hj*~hhubah}(h]h ]h"]h$]h&]uh1jAhj|hhhj}hM-ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjE~jgjE~jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``struct platform_driver * const *drivers`` an array of drivers to unregister ``unsigned int count`` the number of drivers to unregister **Description** Unregisters platform drivers specified by an array. This is typically used to complement an earlier call to platform_register_drivers(). Drivers are unregistered in the reverse order in which they were registered.h](jG)}(h**Parameters**h]jv)}(hjO~h]h Parameters}(hjQ~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjM~ubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM)hjI~ubj)}(hhh](j)}(hN``struct platform_driver * const *drivers`` an array of drivers to unregister h](j)}(h+``struct platform_driver * const *drivers``h]j)}(hjn~h]h'struct platform_driver * const *drivers}(hjp~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl~ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM&hjh~ubj)}(hhh]jG)}(h!an array of drivers to unregisterh]h!an array of drivers to unregister}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj~hM&hj~ubah}(h]h ]h"]h$]h&]uh1jhjh~ubeh}(h]h ]h"]h$]h&]uh1jhj~hM&hje~ubj)}(h;``unsigned int count`` the number of drivers to unregister h](j)}(h``unsigned int count``h]j)}(hj~h]hunsigned int count}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM'hj~ubj)}(hhh]jG)}(h#the number of drivers to unregisterh]h#the number of drivers to unregister}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj~hM'hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hM'hje~ubeh}(h]h ]h"]h$]h&]uh1jhjI~ubjG)}(h**Description**h]jv)}(hj~h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM)hjI~ubjG)}(hUnregisters platform drivers specified by an array. This is typically used to complement an earlier call to platform_register_drivers(). Drivers are unregistered in the reverse order in which they were registered.h]hUnregisters platform drivers specified by an array. This is typically used to complement an earlier call to platform_register_drivers(). Drivers are unregistered in the reverse order in which they were registered.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chM)hjI~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+platform_find_device_by_driver (C function) c.platform_find_device_by_driverhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hfstruct device * platform_find_device_by_driver (struct device *start, const struct device_driver *drv)h]h)}(hdstruct device *platform_find_device_by_driver(struct device *start, const struct device_driver *drv)h](h)}(hhh]hstruct}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#hhha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMubh)}(h h]h }(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#hhhj4hMubh)}(hhh]j)}(hdeviceh]hdevice}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjHmodnameN classnameNj^ja)}jd]jg)}jZplatform_find_device_by_driversb c.platform_find_device_by_driverasbuh1hhj#hhhj4hMubh)}(h h]h }(hjghhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#hhhj4hMubj{)}(hj~h]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj#hhhj4hMubj)}(hplatform_find_device_by_driverh]j)}(hjdh]hplatform_find_device_by_driver}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj#hhhj4hMubj)}(h7(struct device *start, const struct device_driver *drv)h](j!)}(hstruct device *starth](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jb c.platform_find_device_by_driverasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hconst struct device_driver *drvh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubh)}(hhh]hstruct}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubh)}(h h]h }(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubh)}(hhh]j)}(h device_driverh]h device_driver}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjLmodnameN classnameNj^ja)}jd]jb c.platform_find_device_by_driverasbuh1hhj ubh)}(h h]h }(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj{)}(hj~h]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj ubj)}(hdrvh]hdrv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhj#hhhj4hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhj4hMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj4hMhjhhubjB)}(hhh]jG)}(h+Find a platform device with a given driver.h]h+Find a platform device with a given driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj4hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjŀjgjŀjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``struct device *start`` The device to start the search from. ``const struct device_driver *drv`` The device driver to look for.h](jG)}(h**Parameters**h]jv)}(hjπh]h Parameters}(hjрhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj̀ubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjɀubj)}(hhh](j)}(h>``struct device *start`` The device to start the search from. h](j)}(h``struct device *start``h]j)}(hjh]hstruct device *start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhjubj)}(hhh]jG)}(h$The device to start the search from.h]h$The device to start the search from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hB``const struct device_driver *drv`` The device driver to look for.h](j)}(h#``const struct device_driver *drv``h]j)}(hj'h]hconst struct device_driver *drv}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj!ubj)}(hhh]jG)}(hThe device driver to look for.h]hThe device driver to look for.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jFha/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:62: ./drivers/base/platform.chMhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubeh}(h]h ]h"]h$]h&]uh1jhjɀubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$bus_find_device_by_name (C function)c.bus_find_device_by_namehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hlstruct device * bus_find_device_by_name (const struct bus_type *bus, struct device *start, const char *name)h]h)}(hjstruct device *bus_find_device_by_name(const struct bus_type *bus, struct device *start, const char *name)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj}hhhjhKubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZbus_find_device_by_namesbc.bus_find_device_by_nameasbuh1hhj}hhhjhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj}hhhjhKubj{)}(hj~h]h*}(hjρhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj}hhhjhKubj)}(hbus_find_device_by_nameh]j)}(hjh]hbus_find_device_by_name}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj܁ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj}hhhjhKubj)}(hD(const struct bus_type *bus, struct device *start, const char *name)h](j!)}(hconst struct bus_type *bush](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hbus_typeh]hbus_type}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj6modnameN classnameNj^ja)}jd]jc.bus_find_device_by_nameasbuh1hhjubh)}(h h]h }(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hbush]hbus}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct device *starth](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.bus_find_device_by_nameasbuh1hhjubh)}(h h]h }(hj‚hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjЂhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hstarth]hstart}(hj݂hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hconst char *nameh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hnameh]hname}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhj}hhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjyhhhjhKubah}(h]jtah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjvhhubjB)}(hhh]jG)}(hDdevice iterator for locating a particular device of a specific name.h]hDdevice iterator for locating a particular device of a specific name.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjahhubah}(h]h ]h"]h$]h&]uh1jA<hjvhhhjhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj|jgj|jhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``const struct bus_type *bus`` bus type ``struct device *start`` Device to begin with ``const char *name`` name of the device to matchh](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjubj)}(hhh](j)}(h(``const struct bus_type *bus`` bus type h](j)}(h``const struct bus_type *bus``h]j)}(hjh]hconst struct bus_type *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjubj)}(hhh]jG)}(hbus typeh]hbus type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h.``struct device *start`` Device to begin with h](j)}(h``struct device *start``h]j)}(hjރh]hstruct device *start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj܃ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhj؃ubj)}(hhh]jG)}(hDevice to begin withh]hDevice to begin with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj؃ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h0``const char *name`` name of the device to matchh](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjubj)}(hhh]jG)}(hname of the device to matchh]hname of the device to match}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'bus_find_device_by_of_node (C function)c.bus_find_device_by_of_nodehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hestruct device * bus_find_device_by_of_node (const struct bus_type *bus, const struct device_node *np)h]h)}(hcstruct device *bus_find_device_by_of_node(const struct bus_type *bus, const struct device_node *np)h](h)}(hhh]hstruct}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjmhhhj~hKubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZbus_find_device_by_of_nodesbc.bus_find_device_by_of_nodeasbuh1hhjmhhhj~hKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjmhhhj~hKubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjmhhhj~hKubj)}(hbus_find_device_by_of_nodeh]j)}(hjh]hbus_find_device_by_of_node}(hjЄhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̄ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjmhhhj~hKubj)}(h:(const struct bus_type *bus, const struct device_node *np)h](j!)}(hconst struct bus_type *bush](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hbus_typeh]hbus_type}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj&modnameN classnameNj^ja)}jd]jc.bus_find_device_by_of_nodeasbuh1hhjubh)}(h h]h }(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hbush]hbus}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hconst struct device_node *nph](h)}(hj8h]hconst}(hjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjrubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjrubh)}(hhh]j)}(h device_nodeh]h device_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.bus_find_device_by_of_nodeasbuh1hhjrubh)}(h h]h }(hjͅhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjrubj{)}(hj~h]h*}(hjۅhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjrubj)}(hnph]hnp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjmhhhj~hKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjihhhj~hKubah}(h]jdah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj~hKhjfhhubjB)}(hhh]jG)}(hFdevice iterator for locating a particular device matching the of_node.h]hFdevice iterator for locating a particular device matching the of_node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jAhjfhhhj~hKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj*jgj*jhjijjuh1hhhhjUhNhNubjl)}(h}**Parameters** ``const struct bus_type *bus`` bus type ``const struct device_node *np`` of_node of the device to match.h](jG)}(h**Parameters**h]jv)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhj.ubj)}(hhh](j)}(h(``const struct bus_type *bus`` bus type h](j)}(h``const struct bus_type *bus``h]j)}(hjSh]hconst struct bus_type *bus}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjMubj)}(hhh]jG)}(hbus typeh]hbus type}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhhKhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhKhjJubj)}(h@``const struct device_node *np`` of_node of the device to match.h](j)}(h ``const struct device_node *np``h]j)}(hjh]hconst struct device_node *np}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjubj)}(hhh]jG)}(hof_node of the device to match.h]hof_node of the device to match.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjJubeh}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&bus_find_device_by_fwnode (C function)c.bus_find_device_by_fwnodehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hjstruct device * bus_find_device_by_fwnode (const struct bus_type *bus, const struct fwnode_handle *fwnode)h]h)}(hhstruct device *bus_find_device_by_fwnode(const struct bus_type *bus, const struct fwnode_handle *fwnode)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZbus_find_device_by_fwnodesbc.bus_find_device_by_fwnodeasbuh1hhjhhhjhKubh)}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj{)}(hj~h]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhjhKubj)}(hbus_find_device_by_fwnodeh]j)}(hj#h]hbus_find_device_by_fwnode}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKubj)}(h@(const struct bus_type *bus, const struct fwnode_handle *fwnode)h](j!)}(hconst struct bus_type *bush](h)}(hj8h]hconst}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubh)}(h h]h }(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj\ubh)}(hhh]hstruct}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj\ubh)}(hhh]j)}(hbus_typeh]hbus_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j!c.bus_find_device_by_fwnodeasbuh1hhj\ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj\ubj{)}(hj~h]h*}(hjŇhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj\ubj)}(hbush]hbus}(hj҇hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjXubj!)}(h"const struct fwnode_handle *fwnodeh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h fwnode_handleh]h fwnode_handle}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj&modnameN classnameNj^ja)}jd]j!c.bus_find_device_by_fwnodeasbuh1hhjubh)}(h h]h }(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hfwnodeh]hfwnode}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjXubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjކhhhjhKubah}(h]jنah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjۆhhubjB)}(hhh]jG)}(hEdevice iterator for locating a particular device matching the fwnode.h]hEdevice iterator for locating a particular device matching the fwnode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jAhjۆhhhjhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``const struct bus_type *bus`` bus type ``const struct fwnode_handle *fwnode`` fwnode of the device to match.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjubj)}(hhh](j)}(h(``const struct bus_type *bus`` bus type h](j)}(h``const struct bus_type *bus``h]j)}(hjȈh]hconst struct bus_type *bus}(hjʈhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƈubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjˆubj)}(hhh]jG)}(hbus typeh]hbus type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj݈hKhjވubah}(h]h ]h"]h$]h&]uh1jhjˆubeh}(h]h ]h"]h$]h&]uh1jhj݈hKhjubj)}(hE``const struct fwnode_handle *fwnode`` fwnode of the device to match.h](j)}(h&``const struct fwnode_handle *fwnode``h]j)}(hjh]h"const struct fwnode_handle *fwnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjubj)}(hhh]jG)}(hfwnode of the device to match.h]hfwnode of the device to match.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$bus_find_device_by_devt (C function)c.bus_find_device_by_devthNtauh1hhjUhhhNhNubh)}(hhh](h)}(hPstruct device * bus_find_device_by_devt (const struct bus_type *bus, dev_t devt)h]h)}(hNstruct device *bus_find_device_by_devt(const struct bus_type *bus, dev_t devt)h](h)}(hhh]hstruct}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKubh)}(h h]h }(hjihhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjWhhhjhhKubh)}(hhh]j)}(hdeviceh]hdevice}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj|modnameN classnameNj^ja)}jd]jg)}jZbus_find_device_by_devtsbc.bus_find_device_by_devtasbuh1hhjWhhhjhhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjWhhhjhhKubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjWhhhjhhKubj)}(hbus_find_device_by_devth]j)}(hjh]hbus_find_device_by_devt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjWhhhjhhKubj)}(h((const struct bus_type *bus, dev_t devt)h](j!)}(hconst struct bus_type *bush](h)}(hj8h]hconst}(hjՉhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjщubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjщubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjщubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjщubh)}(hhh]j)}(hbus_typeh]hbus_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.bus_find_device_by_devtasbuh1hhjщubh)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjщubj{)}(hj~h]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjщubj)}(hbush]hbus}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjщubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj͉ubj!)}(h dev_t devth](h)}(hhh]j)}(hdev_th]hdev_t}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjemodnameN classnameNj^ja)}jd]jc.bus_find_device_by_devtasbuh1hhj\ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj\ubj)}(hdevth]hdevt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj͉ubeh}(h]h ]h"]h$]h&]j+j,uh1jhjWhhhjhhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjShhhjhhKubah}(h]jNah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhhKhjPhhubjB)}(hhh]jG)}(hJdevice iterator for locating a particular device matching the device type.h]hJdevice iterator for locating a particular device matching the device type.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jAhjPhhhjhhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjъjgjъjhjijjuh1hhhhjUhNhNubjl)}(ho**Parameters** ``const struct bus_type *bus`` bus type ``dev_t devt`` device type of the device to match.h](jG)}(h**Parameters**h]jv)}(hjۊh]h Parameters}(hj݊hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjيubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjՊubj)}(hhh](j)}(h(``const struct bus_type *bus`` bus type h](j)}(h``const struct bus_type *bus``h]j)}(hjh]hconst struct bus_type *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjubj)}(hhh]jG)}(hbus typeh]hbus type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h2``dev_t devt`` device type of the device to match.h](j)}(h``dev_t devt``h]j)}(hj3h]h dev_t devt}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhj-ubj)}(hhh]jG)}(h#device type of the device to match.h]h#device type of the device to match.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhKhjubeh}(h]h ]h"]h$]h&]uh1jhjՊubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!bus_find_next_device (C function)c.bus_find_next_devicehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hUstruct device * bus_find_next_device (const struct bus_type *bus, struct device *cur)h]h)}(hSstruct device *bus_find_next_device(const struct bus_type *bus, struct device *cur)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZbus_find_next_devicesbc.bus_find_next_deviceasbuh1hhjhhhjhKubh)}(h h]h }(hj͋hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj{)}(hj~h]h*}(hjۋhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhjhKubj)}(hbus_find_next_deviceh]j)}(hjʋh]hbus_find_next_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKubj)}(h0(const struct bus_type *bus, struct device *cur)h](j!)}(hconst struct bus_type *bush](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hbus_typeh]hbus_type}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjBmodnameN classnameNj^ja)}jd]jȋc.bus_find_next_deviceasbuh1hhjubh)}(h h]h }(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hbush]hbus}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct device *curh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jȋc.bus_find_next_deviceasbuh1hhjubh)}(h h]h }(hjΌhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj܌hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hcurh]hcur}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]jG)}(h9Find the next device after a given device in a given bus.h]h9Find the next device after a given device in a given bus.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj+jgj+jhjijjuh1hhhhjUhNhNubjl)}(ht**Parameters** ``const struct bus_type *bus`` bus type ``struct device *cur`` device to begin the search with.h](jG)}(h**Parameters**h]jv)}(hj5h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhj/ubj)}(hhh](j)}(h(``const struct bus_type *bus`` bus type h](j)}(h``const struct bus_type *bus``h]j)}(hjTh]hconst struct bus_type *bus}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjNubj)}(hhh]jG)}(hbus typeh]hbus type}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjihKhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihKhjKubj)}(h7``struct device *cur`` device to begin the search with.h](j)}(h``struct device *cur``h]j)}(hjh]hstruct device *cur}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjubj)}(hhh]jG)}(h device to begin the search with.h]h device to begin the search with.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjKubeh}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(bus_find_device_by_acpi_dev (C function)c.bus_find_device_by_acpi_devhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hhstruct device * bus_find_device_by_acpi_dev (const struct bus_type *bus, const struct acpi_device *adev)h]h)}(hfstruct device *bus_find_device_by_acpi_dev(const struct bus_type *bus, const struct acpi_device *adev)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZbus_find_device_by_acpi_devsbc.bus_find_device_by_acpi_devasbuh1hhjhhhjhKubh)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj{)}(hj~h]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhjhKubj)}(hbus_find_device_by_acpi_devh]j)}(hj$h]hbus_find_device_by_acpi_dev}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKubj)}(h<(const struct bus_type *bus, const struct acpi_device *adev)h](j!)}(hconst struct bus_type *bush](h)}(hj8h]hconst}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubh)}(h h]h }(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj]ubh)}(hhh]hstruct}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj]ubh)}(hhh]j)}(hbus_typeh]hbus_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j"c.bus_find_device_by_acpi_devasbuh1hhj]ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj]ubj{)}(hj~h]h*}(hjƎhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj]ubj)}(hbush]hbus}(hjӎhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjYubj!)}(hconst struct acpi_device *adevh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h acpi_deviceh]h acpi_device}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj'modnameN classnameNj^ja)}jd]j"c.bus_find_device_by_acpi_devasbuh1hhjubh)}(h h]h }(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hadevh]hadev}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjYubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjߍhhhjhKubah}(h]jڍah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhj܍hhubjB)}(hhh]jG)}(hTdevice iterator for locating a particular device matching the ACPI COMPANION device.h]hTdevice iterator for locating a particular device matching the ACPI COMPANION device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jAhj܍hhhjhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``const struct bus_type *bus`` bus type ``const struct acpi_device *adev`` ACPI COMPANION device to match.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjubj)}(hhh](j)}(h(``const struct bus_type *bus`` bus type h](j)}(h``const struct bus_type *bus``h]j)}(hjɏh]hconst struct bus_type *bus}(hjˏhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjǏubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjÏubj)}(hhh]jG)}(hbus typeh]hbus type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjޏhKhjߏubah}(h]h ]h"]h$]h&]uh1jhjÏubeh}(h]h ]h"]h$]h&]uh1jhjޏhKhjubj)}(hB``const struct acpi_device *adev`` ACPI COMPANION device to match.h](j)}(h"``const struct acpi_device *adev``h]j)}(hjh]hconst struct acpi_device *adev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjubj)}(hhh]jG)}(hACPI COMPANION device to match.h]hACPI COMPANION device to match.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:65: ./include/linux/device/bus.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌbus_for_each_dev (C function)c.bus_for_each_devhNtauh1hhjUhhhNhNubh)}(hhh](h)}(heint bus_for_each_dev (const struct bus_type *bus, struct device *start, void *data, device_iter_t fn)h]h)}(hdint bus_for_each_dev(const struct bus_type *bus, struct device *start, void *data, device_iter_t fn)h](j)}(hinth]hint}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMdubh)}(h h]h }(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjXhhhjjhMdubj)}(hbus_for_each_devh]j)}(hbus_for_each_devh]hbus_for_each_dev}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjXhhhjjhMdubj)}(hP(const struct bus_type *bus, struct device *start, void *data, device_iter_t fn)h](j!)}(hconst struct bus_type *bush](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hbus_typeh]hbus_type}(hjҐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϐubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjԐmodnameN classnameNj^ja)}jd]jg)}jZjsbc.bus_for_each_devasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hbush]hbus}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct device *starth](h)}(hhh]hstruct}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubh)}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj"ubh)}(hhh]j)}(hdeviceh]hdevice}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjFmodnameN classnameNj^ja)}jd]jc.bus_for_each_devasbuh1hhj"ubh)}(h h]h }(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj"ubj{)}(hj~h]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj"ubj)}(hstarth]hstart}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hdevice_iter_t fnh](h)}(hhh]j)}(h device_iter_th]h device_iter_t}(hjۑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؑubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjݑmodnameN classnameNj^ja)}jd]jc.bus_for_each_devasbuh1hhjԑubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjԑubj)}(hfnh]hfn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԑubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjXhhhjjhMdubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjThhhjjhMdubah}(h]jOah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjjhMdhjQhhubjB)}(hhh]jG)}(hdevice iterator.h]hdevice iterator.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMRhj.hhubah}(h]h ]h"]h$]h&]uh1jAhjQhhhjjhMdubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjIjgjIjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``const struct bus_type *bus`` bus type. ``struct device *start`` device to start iterating from. ``void *data`` data for the callback. ``device_iter_t fn`` function to be called for each device. **Description** Iterate over **bus**'s list of devices, and call **fn** for each, passing it **data**. If **start** is not NULL, we use that device to begin iterating from. We check the return of **fn** each time. If it returns anything other than 0, we break out and return that value. **NOTE** The device that returns a non-zero value is not retained in any way, nor is its refcount incremented. If the caller needs to retain this data, it should do so, and increment the reference count in the supplied callback.h](jG)}(h**Parameters**h]jv)}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMVhjMubj)}(hhh](j)}(h)``const struct bus_type *bus`` bus type. h](j)}(h``const struct bus_type *bus``h]j)}(hjrh]hconst struct bus_type *bus}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMShjlubj)}(hhh]jG)}(h bus type.h]h bus type.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMShjiubj)}(h9``struct device *start`` device to start iterating from. h](j)}(h``struct device *start``h]j)}(hjh]hstruct device *start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMThjubj)}(hhh]jG)}(hdevice to start iterating from.h]hdevice to start iterating from.}(hjĒhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjiubj)}(h&``void *data`` data for the callback. h](j)}(h``void *data``h]j)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMUhjޒubj)}(hhh]jG)}(hdata for the callback.h]hdata for the callback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjޒubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjiubj)}(h<``device_iter_t fn`` function to be called for each device. h](j)}(h``device_iter_t fn``h]j)}(hjh]hdevice_iter_t fn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMVhjubj)}(hhh]jG)}(h&function to be called for each device.h]h&function to be called for each device.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj2hMVhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMVhjiubeh}(h]h ]h"]h$]h&]uh1jhjMubjG)}(h**Description**h]jv)}(hjXh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMXhjMubjG)}(hIterate over **bus**'s list of devices, and call **fn** for each, passing it **data**. If **start** is not NULL, we use that device to begin iterating from.h](h Iterate over }(hjnhhhNhNubjv)}(h**bus**h]hbus}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh’s list of devices, and call }(hjnhhhNhNubjv)}(h**fn**h]hfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh for each, passing it }(hjnhhhNhNubjv)}(h**data**h]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh. If }(hjnhhhNhNubjv)}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubh9 is not NULL, we use that device to begin iterating from.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMXhjMubjG)}(hqWe check the return of **fn** each time. If it returns anything other than 0, we break out and return that value.h](hWe check the return of }(hjœhhhNhNubjv)}(h**fn**h]hfn}(hj͓hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjœubhT each time. If it returns anything other than 0, we break out and return that value.}(hjœhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM\hjMubjG)}(h**NOTE**h]jv)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM_hjMubjG)}(hThe device that returns a non-zero value is not retained in any way, nor is its refcount incremented. If the caller needs to retain this data, it should do so, and increment the reference count in the supplied callback.h]hThe device that returns a non-zero value is not retained in any way, nor is its refcount incremented. If the caller needs to retain this data, it should do so, and increment the reference count in the supplied callback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM_hjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌbus_find_device (C function)c.bus_find_devicehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hzstruct device * bus_find_device (const struct bus_type *bus, struct device *start, const void *data, device_match_t match)h]h)}(hxstruct device *bus_find_device(const struct bus_type *bus, struct device *start, const void *data, device_match_t match)h](h)}(hhh]hstruct}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMubh)}(h h]h }(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj)hhhj:hMubh)}(hhh]j)}(hdeviceh]hdevice}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjNmodnameN classnameNj^ja)}jd]jg)}jZbus_find_devicesbc.bus_find_deviceasbuh1hhj)hhhj:hMubh)}(h h]h }(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj)hhhj:hMubj{)}(hj~h]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj)hhhj:hMubj)}(hbus_find_deviceh]j)}(hjjh]hbus_find_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj)hhhj:hMubj)}(hZ(const struct bus_type *bus, struct device *start, const void *data, device_match_t match)h](j!)}(hconst struct bus_type *bush](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hj”hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjϔhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hbus_typeh]hbus_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݔubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jhc.bus_find_deviceasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hbush]hbus}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct device *starth](h)}(hhh]hstruct}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.ubh)}(hhh]j)}(hdeviceh]hdevice}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjRmodnameN classnameNj^ja)}jd]jhc.bus_find_deviceasbuh1hhj.ubh)}(h h]h }(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.ubj{)}(hj~h]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj.ubj)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hconst void *datah](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hj˕hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjٕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hdevice_match_t matchh](h)}(hhh]j)}(hdevice_match_th]hdevice_match_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jhc.bus_find_deviceasbuh1hhjubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hmatchh]hmatch}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhj)hhhj:hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj%hhhj:hMubah}(h]j ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj:hMhj"hhubjB)}(hhh]jG)}(h1device iterator for locating a particular device.h]h1device iterator for locating a particular device.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMzhjUhhubah}(h]h ]h"]h$]h&]uh1jAhj"hhhj:hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjpjgjpjhjijjuh1hhhhjUhNhNubjl)}(hX_**Parameters** ``const struct bus_type *bus`` bus type ``struct device *start`` Device to begin with ``const void *data`` Data to pass to match function ``device_match_t match`` Callback function to check device **Description** This is similar to the bus_for_each_dev() function above, but it returns a reference to a device that is 'found' for later use, as determined by the **match** callback. The callback should return 0 if the device doesn't match and non-zero if it does. If the callback returns non-zero, this function will return to the caller and not iterate over any more devices.h](jG)}(h**Parameters**h]jv)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM~hjtubj)}(hhh](j)}(h(``const struct bus_type *bus`` bus type h](j)}(h``const struct bus_type *bus``h]j)}(hjh]hconst struct bus_type *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM{hjubj)}(hhh]jG)}(hbus typeh]hbus type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM{hjubj)}(h.``struct device *start`` Device to begin with h](j)}(h``struct device *start``h]j)}(hjҖh]hstruct device *start}(hjԖhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjЖubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM|hj̖ubj)}(hhh]jG)}(hDevice to begin withh]hDevice to begin with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM|hjubah}(h]h ]h"]h$]h&]uh1jhj̖ubeh}(h]h ]h"]h$]h&]uh1jhjhM|hjubj)}(h4``const void *data`` Data to pass to match function h](j)}(h``const void *data``h]j)}(hj h]hconst void *data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM}hjubj)}(hhh]jG)}(hData to pass to match functionh]hData to pass to match function}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hM}hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM}hjubj)}(h;``device_match_t match`` Callback function to check device h](j)}(h``device_match_t match``h]j)}(hjDh]hdevice_match_t match}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM~hj>ubj)}(hhh]jG)}(h!Callback function to check deviceh]h!Callback function to check device}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjYhM~hjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhM~hjubeh}(h]h ]h"]h$]h&]uh1jhjtubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjtubjG)}(hThis is similar to the bus_for_each_dev() function above, but it returns a reference to a device that is 'found' for later use, as determined by the **match** callback.h](hThis is similar to the bus_for_each_dev() function above, but it returns a reference to a device that is ‘found’ for later use, as determined by the }(hjhhhNhNubjv)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjtubjG)}(hThe callback should return 0 if the device doesn't match and non-zero if it does. If the callback returns non-zero, this function will return to the caller and not iterate over any more devices.h]hThe callback should return 0 if the device doesn’t match and non-zero if it does. If the callback returns non-zero, this function will return to the caller and not iterate over any more devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌbus_for_each_drv (C function)c.bus_for_each_drvhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hint bus_for_each_drv (const struct bus_type *bus, struct device_driver *start, void *data, int (*fn)(struct device_driver *, void *))h]h)}(hint bus_for_each_drv(const struct bus_type *bus, struct device_driver *start, void *data, int (*fn)(struct device_driver*, void*))h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(hbus_for_each_drvh]j)}(hbus_for_each_drvh]hbus_for_each_drv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubj)}(hn(const struct bus_type *bus, struct device_driver *start, void *data, int (*fn)(struct device_driver*, void*))h](j!)}(hconst struct bus_type *bush](h)}(hj8h]hconst}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hbus_typeh]hbus_type}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj]modnameN classnameNj^ja)}jd]jg)}jZjsbc.bus_for_each_drvasbuh1hhjubh)}(h h]h }(hj{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hbush]hbus}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct device_driver *starth](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h device_driverh]h device_driver}(hj͘hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʘubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjϘmodnameN classnameNj^ja)}jd]jwc.bus_for_each_drvasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdatah]hdata}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(h'int (*fn)(struct device_driver*, void*)h](j)}(hinth]hint}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(h h]h }(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj]ubj{)}(hjh]h(}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj]ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj]ubj)}(hfnh]hfn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj{)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj]ubj{)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj]ubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubh)}(h h]h }(hj̙hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj]ubh)}(hhh]j)}(h device_driverh]h device_driver}(hjݙhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڙubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjߙmodnameN classnameNj^ja)}jd]jwc.bus_for_each_drvasbuh1hhj]ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj]ubj{)}(h,h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj]ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj]ubj)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj{)}(hj~h]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj]ubj{)}(hjh]h)}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj]ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjݗhhhjhMubah}(h]jؗah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjڗhhubjB)}(hhh]jG)}(hdriver iteratorh]hdriver iterator}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjehhubah}(h]h ]h"]h$]h&]uh1jAhjڗhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hXS**Parameters** ``const struct bus_type *bus`` bus we're dealing with. ``struct device_driver *start`` driver to start iterating on. ``void *data`` data to pass to the callback. ``int (*fn)(struct device_driver *, void *)`` function to call for each driver. **Description** This is nearly identical to the device iterator above. We iterate over each driver that belongs to **bus**, and call **fn** for each. If **fn** returns anything but 0, we break out and return it. If **start** is not NULL, we use it as the head of the list. **NOTE** we don't return the driver that returns a non-zero value, nor do we leave the reference count incremented for that driver. If the caller needs to know that info, it must set it in the callback. It must also be sure to increment the refcount so it doesn't disappear before returning to the caller.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjubj)}(hhh](j)}(h7``const struct bus_type *bus`` bus we're dealing with. h](j)}(h``const struct bus_type *bus``h]j)}(hjh]hconst struct bus_type *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjubj)}(hhh]jG)}(hbus we're dealing with.h]hbus we’re dealing with.}(hjšhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h>``struct device_driver *start`` driver to start iterating on. h](j)}(h``struct device_driver *start``h]j)}(hjh]hstruct device_driver *start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjܚubj)}(hhh]jG)}(hdriver to start iterating on.h]hdriver to start iterating on.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjܚubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``void *data`` data to pass to the callback. h](j)}(h``void *data``h]j)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjubj)}(hhh]jG)}(hdata to pass to the callback.h]hdata to pass to the callback.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjubj)}(hP``int (*fn)(struct device_driver *, void *)`` function to call for each driver. h](j)}(h-``int (*fn)(struct device_driver *, void *)``h]j)}(hjTh]h)int (*fn)(struct device_driver *, void *)}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjNubj)}(hhh]jG)}(h!function to call for each driver.h]h!function to call for each driver.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjubjG)}(hXThis is nearly identical to the device iterator above. We iterate over each driver that belongs to **bus**, and call **fn** for each. If **fn** returns anything but 0, we break out and return it. If **start** is not NULL, we use it as the head of the list.h](hcThis is nearly identical to the device iterator above. We iterate over each driver that belongs to }(hjhhhNhNubjv)}(h**bus**h]hbus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh , and call }(hjhhhNhNubjv)}(h**fn**h]hfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh for each. If }(hjhhhNhNubjv)}(h**fn**h]hfn}(hjћhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh8 returns anything but 0, we break out and return it. If }(hjhhhNhNubjv)}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh0 is not NULL, we use it as the head of the list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjubjG)}(h**NOTE**h]jv)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjubjG)}(hX(we don't return the driver that returns a non-zero value, nor do we leave the reference count incremented for that driver. If the caller needs to know that info, it must set it in the callback. It must also be sure to increment the refcount so it doesn't disappear before returning to the caller.h]hX,we don’t return the driver that returns a non-zero value, nor do we leave the reference count incremented for that driver. If the caller needs to know that info, it must set it in the callback. It must also be sure to increment the refcount so it doesn’t disappear before returning to the caller.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌbus_rescan_devices (C function)c.bus_rescan_deviceshNtauh1hhjUhhhNhNubh)}(hhh](h)}(h3int bus_rescan_devices (const struct bus_type *bus)h]h)}(h2int bus_rescan_devices(const struct bus_type *bus)h](j)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMubh)}(h h]h }(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj?hhhjQhMubj)}(hbus_rescan_devicesh]j)}(hbus_rescan_devicesh]hbus_rescan_devices}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj?hhhjQhMubj)}(h(const struct bus_type *bus)h]j!)}(hconst struct bus_type *bush](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj|ubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj|ubh)}(hhh]j)}(hbus_typeh]hbus_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjfsbc.bus_rescan_devicesasbuh1hhj|ubh)}(h h]h }(hjٜhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj|ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj|ubj)}(hbush]hbus}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjxubah}(h]h ]h"]h$]h&]j+j,uh1jhj?hhhjQhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj;hhhjQhMubah}(h]j6ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjQhMhj8hhubjB)}(hhh]jG)}(h.rescan devices on the bus for possible driversh]h.rescan devices on the bus for possible drivers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM hjhhubah}(h]h ]h"]h$]h&]uh1jAhj8hhhjQhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj6jgj6jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``const struct bus_type *bus`` the bus to scan. **Description** This function will look for devices on the bus with no driver attached and rescan it against existing drivers to see if it matches any by calling device_attach() for the unbound devices.h](jG)}(h**Parameters**h]jv)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM hj:ubj)}(hhh]j)}(h0``const struct bus_type *bus`` the bus to scan. h](j)}(h``const struct bus_type *bus``h]j)}(hj_h]hconst struct bus_type *bus}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM hjYubj)}(hhh]jG)}(hthe bus to scan.h]hthe bus to scan.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjthM hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthM hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM hj:ubjG)}(hThis function will look for devices on the bus with no driver attached and rescan it against existing drivers to see if it matches any by calling device_attach() for the unbound devices.h]hThis function will look for devices on the bus with no driver attached and rescan it against existing drivers to see if it matches any by calling device_attach() for the unbound devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevice_reprobe (C function)c.device_reprobehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h'int device_reprobe (struct device *dev)h]h)}(h&int device_reprobe(struct device *dev)h](j)}(hinth]hint}(hjߝhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۝hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj۝hhhjhMubj)}(hdevice_reprobeh]j)}(hdevice_reprobeh]hdevice_reprobe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj۝hhhjhMubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj<modnameN classnameNj^ja)}jd]jg)}jZjsbc.device_reprobeasbuh1hhjubh)}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhj۝hhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjםhhhjhMubah}(h]jҝah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjԝhhubjB)}(hhh]jG)}(h5remove driver for a device and probe for a new driverh]h5remove driver for a device and probe for a new driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjԝhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hX@**Parameters** ``struct device *dev`` the device to reprobe **Description** This function detaches the attached driver (if any) for the given device and restarts the driver probing process. It is intended to use if probing criteria changed during a devices lifetime and driver attachment should change accordingly.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjÞhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjubj)}(hhh]j)}(h-``struct device *dev`` the device to reprobe h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjޞubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjڞubj)}(hhh]jG)}(hthe device to reprobeh]hthe device to reprobe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjڞubeh}(h]h ]h"]h$]h&]uh1jhjhMhjמubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjubjG)}(hThis function detaches the attached driver (if any) for the given device and restarts the driver probing process. It is intended to use if probing criteria changed during a devices lifetime and driver attachment should change accordingly.h]hThis function detaches the attached driver (if any) for the given device and restarts the driver probing process. It is intended to use if probing criteria changed during a devices lifetime and driver attachment should change accordingly.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌbus_register (C function)c.bus_registerhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h-int bus_register (const struct bus_type *bus)h]h)}(h,int bus_register(const struct bus_type *bus)h](j)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMXubh)}(h h]h }(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj\hhhjnhMXubj)}(h bus_registerh]j)}(h bus_registerh]h bus_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj\hhhjnhMXubj)}(h(const struct bus_type *bus)h]j!)}(hconst struct bus_type *bush](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjşhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hbus_typeh]hbus_type}(hj֟hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӟubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj؟modnameN classnameNj^ja)}jd]jg)}jZjsbc.bus_registerasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hbush]hbus}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhj\hhhjnhMXubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjXhhhjnhMXubah}(h]jSah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjnhMXhjUhhubjB)}(hhh]jG)}(h register a driver-core subsystemh]h register a driver-core subsystem}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMQhj8hhubah}(h]h ]h"]h$]h&]uh1jAhjUhhhjnhMXubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjSjgjSjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``const struct bus_type *bus`` bus to register **Description** Once we have that, we register the bus with the kobject infrastructure, then register the children subsystems it has: the devices and drivers that belong to the subsystem.h](jG)}(h**Parameters**h]jv)}(hj]h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMUhjWubj)}(hhh]j)}(h/``const struct bus_type *bus`` bus to register h](j)}(h``const struct bus_type *bus``h]j)}(hj|h]hconst struct bus_type *bus}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMRhjvubj)}(hhh]jG)}(hbus to registerh]hbus to register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjsubah}(h]h ]h"]h$]h&]uh1jhjWubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMThjWubjG)}(hOnce we have that, we register the bus with the kobject infrastructure, then register the children subsystems it has: the devices and drivers that belong to the subsystem.h]hOnce we have that, we register the bus with the kobject infrastructure, then register the children subsystems it has: the devices and drivers that belong to the subsystem.}(hj͠hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMThjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌbus_unregister (C function)c.bus_unregisterhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h0void bus_unregister (const struct bus_type *bus)h]h)}(h/void bus_unregister(const struct bus_type *bus)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj hMubj)}(hbus_unregisterh]j)}(hbus_unregisterh]hbus_unregister}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhj hMubj)}(h(const struct bus_type *bus)h]j!)}(hconst struct bus_type *bush](h)}(hj8h]hconst}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubh)}(h h]h }(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj5ubh)}(hhh]hstruct}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubh)}(h h]h }(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj5ubh)}(hhh]j)}(hbus_typeh]hbus_type}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjtmodnameN classnameNj^ja)}jd]jg)}jZjsbc.bus_unregisterasbuh1hhj5ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj5ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj5ubj)}(hbush]hbus}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj1ubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhj hMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj hMhjhhubjB)}(hhh]jG)}(hremove a bus from the systemh]hremove a bus from the system}(hjסhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjԡhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(h**Parameters** ``const struct bus_type *bus`` bus. **Description** Unregister the child subsystems and the bus itself. Finally, we call bus_put() to release the refcounth](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjubj)}(hhh]j)}(h$``const struct bus_type *bus`` bus. h](j)}(h``const struct bus_type *bus``h]j)}(hjh]hconst struct bus_type *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjubj)}(hhh]jG)}(hbus.h]hbus.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjSh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjubjG)}(hfUnregister the child subsystems and the bus itself. Finally, we call bus_put() to release the refcounth]hfUnregister the child subsystems and the bus itself. Finally, we call bus_put() to release the refcount}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#subsys_system_register (C function)c.subsys_system_registerhNtauh1hhjUhhhNhNubh)}(hhh](h)}(haint subsys_system_register (const struct bus_type *subsys, const struct attribute_group **groups)h]h)}(h`int subsys_system_register(const struct bus_type *subsys, const struct attribute_group **groups)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(hsubsys_system_registerh]j)}(hsubsys_system_registerh]hsubsys_system_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubj)}(hF(const struct bus_type *subsys, const struct attribute_group **groups)h](j!)}(hconst struct bus_type *subsysh](h)}(hj8h]hconst}(hjբhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjѢubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjѢubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjѢubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjѢubh)}(hhh]j)}(hbus_typeh]hbus_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.subsys_system_registerasbuh1hhjѢubh)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjѢubj{)}(hj~h]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjѢubj)}(hsubsysh]hsubsys}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѢubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj͢ubj!)}(h%const struct attribute_group **groupsh](h)}(hj8h]hconst}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubh)}(h h]h }(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj^ubh)}(hhh]hstruct}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj^ubh)}(hhh]j)}(hattribute_grouph]hattribute_group}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j*c.subsys_system_registerasbuh1hhj^ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj^ubj{)}(hj~h]h*}(hjǣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj^ubj{)}(hj~h]h*}(hjԣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj^ubj)}(hgroupsh]hgroups}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj͢ubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(h,register a subsystem at /sys/devices/system/h]h,register a subsystem at /sys/devices/system/}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj#jgj#jhjijjuh1hhhhjUhNhNubjl)}(hXS**Parameters** ``const struct bus_type *subsys`` system subsystem ``const struct attribute_group **groups`` default attributes for the root device **Description** All 'system' subsystems have a /sys/devices/system/ root device with the name of the subsystem. The root device can carry subsystem- wide attributes. All registered devices are below this single root device and are named after the subsystem with a simple enumeration number appended. The registered devices are not explicitly named; only 'id' in the device needs to be set. Do not use this interface for anything new, it exists for compatibility with bad ideas only. New subsystems should use plain subsystems; and add the subsystem-wide attributes should be added to the subsystem directory itself and not some create fake root-device placed in /sys/devices/system/.h](jG)}(h**Parameters**h]jv)}(hj-h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhj'ubj)}(hhh](j)}(h3``const struct bus_type *subsys`` system subsystem h](j)}(h!``const struct bus_type *subsys``h]j)}(hjLh]hconst struct bus_type *subsys}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjFubj)}(hhh]jG)}(hsystem subsystemh]hsystem subsystem}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjCubj)}(hQ``const struct attribute_group **groups`` default attributes for the root device h](j)}(h)``const struct attribute_group **groups``h]j)}(hjh]h%const struct attribute_group **groups}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhjubj)}(hhh]jG)}(h&default attributes for the root deviceh]h&default attributes for the root device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjCubeh}(h]h ]h"]h$]h&]uh1jhj'ubjG)}(h**Description**h]jv)}(hjh]h Description}(hj¤hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhj'ubjG)}(hX{All 'system' subsystems have a /sys/devices/system/ root device with the name of the subsystem. The root device can carry subsystem- wide attributes. All registered devices are below this single root device and are named after the subsystem with a simple enumeration number appended. The registered devices are not explicitly named; only 'id' in the device needs to be set.h]hXAll ‘system’ subsystems have a /sys/devices/system/ root device with the name of the subsystem. The root device can carry subsystem- wide attributes. All registered devices are below this single root device and are named after the subsystem with a simple enumeration number appended. The registered devices are not explicitly named; only ‘id’ in the device needs to be set.}(hj֤hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhj'ubjG)}(hX+Do not use this interface for anything new, it exists for compatibility with bad ideas only. New subsystems should use plain subsystems; and add the subsystem-wide attributes should be added to the subsystem directory itself and not some create fake root-device placed in /sys/devices/system/.h]hX+Do not use this interface for anything new, it exists for compatibility with bad ideas only. New subsystems should use plain subsystems; and add the subsystem-wide attributes should be added to the subsystem directory itself and not some create fake root-device placed in /sys/devices/system/.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$subsys_virtual_register (C function)c.subsys_virtual_registerhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hbint subsys_virtual_register (const struct bus_type *subsys, const struct attribute_group **groups)h]h)}(haint subsys_virtual_register(const struct bus_type *subsys, const struct attribute_group **groups)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMubh)}(h h]h }(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj"hMubj)}(hsubsys_virtual_registerh]j)}(hsubsys_virtual_registerh]hsubsys_virtual_register}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhj"hMubj)}(hF(const struct bus_type *subsys, const struct attribute_group **groups)h](j!)}(hconst struct bus_type *subsysh](h)}(hj8h]hconst}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubh)}(h h]h }(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjMubh)}(hhh]hstruct}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubh)}(h h]h }(hjyhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjMubh)}(hhh]j)}(hbus_typeh]hbus_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZj7sbc.subsys_virtual_registerasbuh1hhjMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjMubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjMubj)}(hsubsysh]hsubsys}(hjťhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjIubj!)}(h%const struct attribute_group **groupsh](h)}(hj8h]hconst}(hjޥhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjڥubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjڥubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjڥubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjڥubh)}(hhh]j)}(hattribute_grouph]hattribute_group}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.subsys_virtual_registerasbuh1hhjڥubh)}(h h]h }(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjڥubj{)}(hj~h]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjڥubj{)}(hj~h]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjڥubj)}(hgroupsh]hgroups}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڥubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjIubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhj"hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj hhhj"hMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj"hMhj hhubjB)}(hhh]jG)}(h-register a subsystem at /sys/devices/virtual/h]h-register a subsystem at /sys/devices/virtual/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM hjhhubah}(h]h ]h"]h$]h&]uh1jAhj hhhj"hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``const struct bus_type *subsys`` virtual subsystem ``const struct attribute_group **groups`` default attributes for the root device **Description** All 'virtual' subsystems have a /sys/devices/system/ root device with the name of the subsystem. The root device can carry subsystem-wide attributes. All registered devices are below this single root device. There's no restriction on device naming. This is for kernel software constructs which need sysfs interface.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM hjubj)}(hhh](j)}(h4``const struct bus_type *subsys`` virtual subsystem h](j)}(h!``const struct bus_type *subsys``h]j)}(hjȦh]hconst struct bus_type *subsys}(hjʦhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƦubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM hj¦ubj)}(hhh]jG)}(hvirtual subsystemh]hvirtual subsystem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjݦhM hjަubah}(h]h ]h"]h$]h&]uh1jhj¦ubeh}(h]h ]h"]h$]h&]uh1jhjݦhM hjubj)}(hQ``const struct attribute_group **groups`` default attributes for the root device h](j)}(h)``const struct attribute_group **groups``h]j)}(hjh]h%const struct attribute_group **groups}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM hjubj)}(hhh]jG)}(h&default attributes for the root deviceh]h&default attributes for the root device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hj<h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM hjubjG)}(hXDAll 'virtual' subsystems have a /sys/devices/system/ root device with the name of the subsystem. The root device can carry subsystem-wide attributes. All registered devices are below this single root device. There's no restriction on device naming. This is for kernel software constructs which need sysfs interface.h]hXJAll ‘virtual’ subsystems have a /sys/devices/system/ root device with the name of the subsystem. The root device can carry subsystem-wide attributes. All registered devices are below this single root device. There’s no restriction on device naming. This is for kernel software constructs which need sysfs interface.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdriver_find (C function) c.driver_findhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hQstruct device_driver * driver_find (const char *name, const struct bus_type *bus)h]h)}(hOstruct device_driver *driver_find(const char *name, const struct bus_type *bus)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM,ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj}hhhjhM,ubh)}(hhh]j)}(h device_driverh]h device_driver}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZ driver_findsb c.driver_findasbuh1hhj}hhhjhM,ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj}hhhjhM,ubj{)}(hj~h]h*}(hjϧhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj}hhhjhM,ubj)}(h driver_findh]j)}(hjh]h driver_find}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܧubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj}hhhjhM,ubj)}(h.(const char *name, const struct bus_type *bus)h](j!)}(hconst char *nameh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hnameh]hname}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hconst struct bus_type *bush](h)}(hj8h]hconst}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubh)}(h h]h }(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjTubh)}(hhh]hstruct}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjTubh)}(hhh]j)}(hbus_typeh]hbus_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j c.driver_findasbuh1hhjTubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjTubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjTubj)}(hbush]hbus}(hjʨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhj}hhhjhM,ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjyhhhjhM,ubah}(h]jtah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM,hjvhhubjB)}(hhh]jG)}(h#locate driver on a bus by its name.h]h#locate driver on a bus by its name.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM!hjhhubah}(h]h ]h"]h$]h&]uh1jAhjvhhhjhM,ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj jgj jhjijjuh1hhhhjUhNhNubjl)}(hX**Parameters** ``const char *name`` name of the driver. ``const struct bus_type *bus`` bus to scan for the driver. **Description** Call kset_find_obj() to iterate over list of drivers on a bus to find driver by name. Return driver if found. This routine provides no locking to prevent the driver it returns from being unregistered or unloaded while the caller is using it. The caller is responsible for preventing this.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM%hjubj)}(hhh](j)}(h)``const char *name`` name of the driver. h](j)}(h``const char *name``h]j)}(hj5h]hconst char *name}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM"hj/ubj)}(hhh]jG)}(hname of the driver.h]hname of the driver.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjJhM"hjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhM"hj,ubj)}(h;``const struct bus_type *bus`` bus to scan for the driver. h](j)}(h``const struct bus_type *bus``h]j)}(hjnh]hconst struct bus_type *bus}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM#hjhubj)}(hhh]jG)}(hbus to scan for the driver.h]hbus to scan for the driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhM#hj,ubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM%hjubjG)}(hmCall kset_find_obj() to iterate over list of drivers on a bus to find driver by name. Return driver if found.h]hmCall kset_find_obj() to iterate over list of drivers on a bus to find driver by name. Return driver if found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM%hjubjG)}(hThis routine provides no locking to prevent the driver it returns from being unregistered or unloaded while the caller is using it. The caller is responsible for preventing this.h]hThis routine provides no locking to prevent the driver it returns from being unregistered or unloaded while the caller is using it. The caller is responsible for preventing this.}(hjΩhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM(hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌbus_get_dev_root (C function)c.bus_get_dev_roothNtauh1hhjUhhhNhNubh)}(hhh](h)}(h=struct device * bus_get_dev_root (const struct bus_type *bus)h]h)}(h;struct device *bus_get_dev_root(const struct bus_type *bus)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM^ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj hM^ubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZbus_get_dev_rootsbc.bus_get_dev_rootasbuh1hhjhhhj hM^ubh)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj hM^ubj{)}(hj~h]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhj hM^ubj)}(hbus_get_dev_rooth]j)}(hj:h]hbus_get_dev_root}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhj hM^ubj)}(h(const struct bus_type *bus)h]j!)}(hconst struct bus_type *bush](h)}(hj8h]hconst}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjsubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjsubh)}(hhh]j)}(hbus_typeh]hbus_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j8c.bus_get_dev_rootasbuh1hhjsubh)}(h h]h }(hjΪhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjsubj{)}(hj~h]h*}(hjܪhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjsubj)}(hbush]hbus}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjoubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhj hM^ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhj hM^ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj hM^hjhhubjB)}(hhh]jG)}(h.return a pointer to the "device root" of a bush]h2return a pointer to the “device root” of a bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMShjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj hM^ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj+jgj+jhjijjuh1hhhhjUhNhNubjl)}(hXb**Parameters** ``const struct bus_type *bus`` bus to return the device root of. **Description** If a bus has a "device root" structure, return it, WITH THE REFERENCE COUNT INCREMENTED. Note, when finished with the device, a call to put_device() is required. If the device root is not present (or bus is not a valid pointer), NULL will be returned.h](jG)}(h**Parameters**h]jv)}(hj5h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMWhj/ubj)}(hhh]j)}(hA``const struct bus_type *bus`` bus to return the device root of. h](j)}(h``const struct bus_type *bus``h]j)}(hjTh]hconst struct bus_type *bus}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMThjNubj)}(hhh]jG)}(h!bus to return the device root of.h]h!bus to return the device root of.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjihMThjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMThjKubah}(h]h ]h"]h$]h&]uh1jhj/ubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMVhj/ubjG)}(hXIf a bus has a "device root" structure, return it, WITH THE REFERENCE COUNT INCREMENTED.h]h\If a bus has a “device root” structure, return it, WITH THE REFERENCE COUNT INCREMENTED.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMVhj/ubjG)}(hHNote, when finished with the device, a call to put_device() is required.h]hHNote, when finished with the device, a call to put_device() is required.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chMYhj/ubjG)}(hYIf the device root is not present (or bus is not a valid pointer), NULL will be returned.h]hYIf the device root is not present (or bus is not a valid pointer), NULL will be returned.}(hjëhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:68: ./drivers/base/bus.chM[hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjUhhhNhNubeh}(h]device-drivers-baseah ]h"]device drivers baseah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hDevice Drivers DMA Managementh]hDevice Drivers DMA Management}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKHubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdmam_free_coherent (C function)c.dmam_free_coherenthNtauh1hhjhhhNhNubh)}(hhh](h)}(h]void dmam_free_coherent (struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle)h]h)}(h\void dmam_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKEubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKEubj)}(hdmam_free_coherenth]j)}(hdmam_free_coherenth]hdmam_free_coherent}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKEubj)}(hE(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubh)}(h h]h }(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjDubh)}(hhh]j)}(hdeviceh]hdevice}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjhmodnameN classnameNj^ja)}jd]jg)}jZj.sbc.dmam_free_coherentasbuh1hhjDubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjDubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjDubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj@ubj!)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.dmam_free_coherentasbuh1hhjubh)}(h h]h }(hj۬hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj@ubj!)}(h void *vaddrh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hvaddrh]hvaddr}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj@ubj!)}(hdma_addr_t dma_handleh](h)}(hhh]j)}(h dma_addr_th]h dma_addr_t}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjImodnameN classnameNj^ja)}jd]jc.dmam_free_coherentasbuh1hhj@ubh)}(h h]h }(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@ubj)}(h dma_handleh]h dma_handle}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj@ubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhKEubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKEubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKEhjhhubjB)}(hhh]jG)}(hManaged dma_free_coherent()h]hManaged dma_free_coherent()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chK=hjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKEubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjhNhNubjl)}(hX**Parameters** ``struct device *dev`` Device to free coherent memory for ``size_t size`` Size of allocation ``void *vaddr`` Virtual address of the memory to free ``dma_addr_t dma_handle`` DMA handle of the memory to free **Description** Managed dma_free_coherent().h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKAhjubj)}(hhh](j)}(h:``struct device *dev`` Device to free coherent memory for h](j)}(h``struct device *dev``h]j)}(hjޭh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjܭubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chK>hjحubj)}(hhh]jG)}(h"Device to free coherent memory forh]h"Device to free coherent memory for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhK>hjubah}(h]h ]h"]h$]h&]uh1jhjحubeh}(h]h ]h"]h$]h&]uh1jhjhK>hjխubj)}(h#``size_t size`` Size of allocation h](j)}(h``size_t size``h]j)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chK?hjubj)}(hhh]jG)}(hSize of allocationh]hSize of allocation}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj,hK?hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hK?hjխubj)}(h6``void *vaddr`` Virtual address of the memory to free h](j)}(h``void *vaddr``h]j)}(hjPh]h void *vaddr}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chK@hjJubj)}(hhh]jG)}(h%Virtual address of the memory to freeh]h%Virtual address of the memory to free}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjehK@hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehK@hjխubj)}(h;``dma_addr_t dma_handle`` DMA handle of the memory to free h](j)}(h``dma_addr_t dma_handle``h]j)}(hjh]hdma_addr_t dma_handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKAhjubj)}(hhh]jG)}(h DMA handle of the memory to freeh]h DMA handle of the memory to free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKAhjխubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjĮh]h Description}(hjƮhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj®ubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKChjubjG)}(hManaged dma_free_coherent().h]hManaged dma_free_coherent().}(hjڮhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKChjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdmam_alloc_attrs (C function)c.dmam_alloc_attrshNtauh1hhjhhhNhNubh)}(hhh](h)}(hqvoid * dmam_alloc_attrs (struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs)h]h)}(hovoid *dmam_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chK]ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhK]ubj{)}(hj~h]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhjhK]ubj)}(hdmam_alloc_attrsh]j)}(hdmam_alloc_attrsh]hdmam_alloc_attrs}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhK]ubj)}(hY(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubh)}(h h]h }(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjOubh)}(hhh]j)}(hdeviceh]hdevice}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjsmodnameN classnameNj^ja)}jd]jg)}jZj9sbc.dmam_alloc_attrsasbuh1hhjOubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjOubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjOubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjKubj!)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjȯhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjůubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjʯmodnameN classnameNj^ja)}jd]jc.dmam_alloc_attrsasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjKubj!)}(hdma_addr_t *dma_handleh](h)}(hhh]j)}(h dma_addr_th]h dma_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.dmam_alloc_attrsasbuh1hhj ubh)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj{)}(hj~h]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj ubj)}(h dma_handleh]h dma_handle}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjKubj!)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjgmodnameN classnameNj^ja)}jd]jc.dmam_alloc_attrsasbuh1hhj^ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj^ubj)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjKubj!)}(hunsigned long attrsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hlongh]hlong}(hjưhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hj԰hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hattrsh]hattrs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjKubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhK]ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhK]ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhK]hjhhubjB)}(hhh]jG)}(hManaged dma_alloc_attrs()h]hManaged dma_alloc_attrs()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKPhj hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhK]ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj$jgj$jhjijjuh1hhhhjhNhNubjl)}(hX**Parameters** ``struct device *dev`` Device to allocate non_coherent memory for ``size_t size`` Size of allocation ``dma_addr_t *dma_handle`` Out argument for allocated DMA handle ``gfp_t gfp`` Allocation flags ``unsigned long attrs`` Flags in the DMA_ATTR_* namespace. **Description** Managed dma_alloc_attrs(). Memory allocated using this function will be automatically released on driver detach. **Return** Pointer to allocated memory on success, NULL on failure.h](jG)}(h**Parameters**h]jv)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKThj(ubj)}(hhh](j)}(hB``struct device *dev`` Device to allocate non_coherent memory for h](j)}(h``struct device *dev``h]j)}(hjMh]hstruct device *dev}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKQhjGubj)}(hhh]jG)}(h*Device to allocate non_coherent memory forh]h*Device to allocate non_coherent memory for}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjbhKQhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhKQhjDubj)}(h#``size_t size`` Size of allocation h](j)}(h``size_t size``h]j)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKRhjubj)}(hhh]jG)}(hSize of allocationh]hSize of allocation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKRhjDubj)}(hA``dma_addr_t *dma_handle`` Out argument for allocated DMA handle h](j)}(h``dma_addr_t *dma_handle``h]j)}(hjh]hdma_addr_t *dma_handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKShjubj)}(hhh]jG)}(h%Out argument for allocated DMA handleh]h%Out argument for allocated DMA handle}(hjرhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjԱhKShjձubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjԱhKShjDubj)}(h``gfp_t gfp`` Allocation flags h](j)}(h ``gfp_t gfp``h]j)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKThjubj)}(hhh]jG)}(hAllocation flagsh]hAllocation flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hKThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKThjDubj)}(h;``unsigned long attrs`` Flags in the DMA_ATTR_* namespace. h](j)}(h``unsigned long attrs``h]j)}(hj1h]hunsigned long attrs}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKUhj+ubj)}(hhh]jG)}(h"Flags in the DMA_ATTR_* namespace.h]h"Flags in the DMA_ATTR_* namespace.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjFhKUhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhKUhjDubeh}(h]h ]h"]h$]h&]uh1jhj(ubjG)}(h**Description**h]jv)}(hjlh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKWhj(ubjG)}(hqManaged dma_alloc_attrs(). Memory allocated using this function will be automatically released on driver detach.h]hqManaged dma_alloc_attrs(). Memory allocated using this function will be automatically released on driver detach.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKWhj(ubjG)}(h **Return**h]jv)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKZhj(ubjG)}(h8Pointer to allocated memory on success, NULL on failure.h]h8Pointer to allocated memory on success, NULL on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKZhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdma_map_sg_attrs (C function)c.dma_map_sg_attrshNtauh1hhjhhhNhNubh)}(hhh](h)}(hunsigned int dma_map_sg_attrs (struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, unsigned long attrs)h]h)}(hunsigned int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, unsigned long attrs)h](j)}(hunsignedh]hunsigned}(hjزhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԲhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjԲhhhjhKubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԲhhhjhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjԲhhhjhKubj)}(hdma_map_sg_attrsh]j)}(hdma_map_sg_attrsh]hdma_map_sg_attrs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjԲhhhjhKubj)}(hi(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, unsigned long attrs)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubh)}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubh)}(hhh]j)}(hdeviceh]hdevice}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjQmodnameN classnameNj^ja)}jd]jg)}jZjsbc.dma_map_sg_attrsasbuh1hhj-ubh)}(h h]h }(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubj{)}(hj~h]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj-ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj)ubj!)}(hstruct scatterlist *sgh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h scatterlisth]h scatterlist}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjómodnameN classnameNj^ja)}jd]jkc.dma_map_sg_attrsasbuh1hhjubh)}(h h]h }(hj߳hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hsgh]hsg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj)ubj!)}(h int nentsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hnentsh]hnents}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj)ubj!)}(henum dma_data_direction dirh](h)}(hjMh]henum}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubh)}(h h]h }(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjDubh)}(hhh]j)}(hdma_data_directionh]hdma_data_direction}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjhmodnameN classnameNj^ja)}jd]jkc.dma_map_sg_attrsasbuh1hhjDubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjDubj)}(hdirh]hdir}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj)ubj!)}(hunsigned long attrsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hlongh]hlong}(hjǴhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjմhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hattrsh]hattrs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj)ubeh}(h]h ]h"]h$]h&]j+j,uh1jhjԲhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjвhhhjhKubah}(h]j˲ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjͲhhubjB)}(hhh]jG)}(hMap the given buffer for DMAh]hMap the given buffer for DMA}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKhj hhubah}(h]h ]h"]h$]h&]uh1jAhjͲhhhjhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj%jgj%jhjijjuh1hhhhjhNhNubjl)}(hX**Parameters** ``struct device *dev`` The device for which to perform the DMA operation ``struct scatterlist *sg`` The sg_table object describing the buffer ``int nents`` Number of entries to map ``enum dma_data_direction dir`` DMA direction ``unsigned long attrs`` Optional DMA attributes for the map operation **Description** Maps a buffer described by a scatterlist passed in the sg argument with nents segments for the **dir** DMA operation by the **dev** device. Returns the number of mapped entries (which can be less than nents) on success. Zero is returned for any error. dma_unmap_sg_attrs() should be used to unmap the buffer with the original sg and original nents (not the value returned by this funciton).h](jG)}(h**Parameters**h]jv)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKhj)ubj)}(hhh](j)}(hI``struct device *dev`` The device for which to perform the DMA operation h](j)}(h``struct device *dev``h]j)}(hjNh]hstruct device *dev}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKhjHubj)}(hhh]jG)}(h1The device for which to perform the DMA operationh]h1The device for which to perform the DMA operation}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjchKhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchKhjEubj)}(hE``struct scatterlist *sg`` The sg_table object describing the buffer h](j)}(h``struct scatterlist *sg``h]j)}(hjh]hstruct scatterlist *sg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKhjubj)}(hhh]jG)}(h)The sg_table object describing the bufferh]h)The sg_table object describing the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjEubj)}(h'``int nents`` Number of entries to map h](j)}(h ``int nents``h]j)}(hjh]h int nents}(hjµhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKhjubj)}(hhh]jG)}(hNumber of entries to maph]hNumber of entries to map}(hjٵhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjյhKhjֵubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjյhKhjEubj)}(h.``enum dma_data_direction dir`` DMA direction h](j)}(h``enum dma_data_direction dir``h]j)}(hjh]henum dma_data_direction dir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKhjubj)}(hhh]jG)}(h DMA directionh]h DMA direction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjEubj)}(hF``unsigned long attrs`` Optional DMA attributes for the map operation h](j)}(h``unsigned long attrs``h]j)}(hj2h]hunsigned long attrs}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKhj,ubj)}(hhh]jG)}(h-Optional DMA attributes for the map operationh]h-Optional DMA attributes for the map operation}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjGhKhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhKhjEubeh}(h]h ]h"]h$]h&]uh1jhj)ubjG)}(h**Description**h]jv)}(hjmh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKhj)ubjG)}(hMaps a buffer described by a scatterlist passed in the sg argument with nents segments for the **dir** DMA operation by the **dev** device.h](h_Maps a buffer described by a scatterlist passed in the sg argument with nents segments for the }(hjhhhNhNubjv)}(h**dir**h]hdir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh DMA operation by the }(hjhhhNhNubjv)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh device.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKhj)ubjG)}(hoReturns the number of mapped entries (which can be less than nents) on success. Zero is returned for any error.h]hoReturns the number of mapped entries (which can be less than nents) on success. Zero is returned for any error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKhj)ubjG)}(hdma_unmap_sg_attrs() should be used to unmap the buffer with the original sg and original nents (not the value returned by this funciton).h]hdma_unmap_sg_attrs() should be used to unmap the buffer with the original sg and original nents (not the value returned by this funciton).}(hjŶhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chKhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdma_map_sgtable (C function)c.dma_map_sgtablehNtauh1hhjhhhNhNubh)}(hhh](h)}(hpint dma_map_sgtable (struct device *dev, struct sg_table *sgt, enum dma_data_direction dir, unsigned long attrs)h]h)}(hoint dma_map_sgtable(struct device *dev, struct sg_table *sgt, enum dma_data_direction dir, unsigned long attrs)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chM!ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM!ubj)}(hdma_map_sgtableh]j)}(hdma_map_sgtableh]hdma_map_sgtable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhM!ubj)}(h\(struct device *dev, struct sg_table *sgt, enum dma_data_direction dir, unsigned long attrs)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubh)}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubh)}(hhh]j)}(hdeviceh]hdevice}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjQmodnameN classnameNj^ja)}jd]jg)}jZjsbc.dma_map_sgtableasbuh1hhj-ubh)}(h h]h }(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubj{)}(hj~h]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj-ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj)ubj!)}(hstruct sg_table *sgth](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj÷modnameN classnameNj^ja)}jd]jkc.dma_map_sgtableasbuh1hhjubh)}(h h]h }(hj߷hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hsgth]hsgt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj)ubj!)}(henum dma_data_direction dirh](h)}(hjMh]henum}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdma_data_directionh]hdma_data_direction}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj3modnameN classnameNj^ja)}jd]jkc.dma_map_sgtableasbuh1hhjubh)}(h h]h }(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hdirh]hdir}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj)ubj!)}(hunsigned long attrsh](j)}(hunsignedh]hunsigned}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjrubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjrubj)}(hattrsh]hattrs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj)ubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhM!ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhM!ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM!hjhhubjB)}(hhh]jG)}(hMap the given buffer for DMAh]hMap the given buffer for DMA}(hjظhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjոhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhM!ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjhNhNubjl)}(hX{**Parameters** ``struct device *dev`` The device for which to perform the DMA operation ``struct sg_table *sgt`` The sg_table object describing the buffer ``enum dma_data_direction dir`` DMA direction ``unsigned long attrs`` Optional DMA attributes for the map operation **Description** Maps a buffer described by a scatterlist stored in the given sg_table object for the **dir** DMA operation by the **dev** device. After success, the ownership for the buffer is transferred to the DMA domain. One has to call dma_sync_sgtable_for_cpu() or dma_unmap_sgtable() to move the ownership of the buffer back to the CPU domain before touching the buffer by the CPU. Returns 0 on success or a negative error code on error. The following error codes are supported with the given meaning: -EINVAL An invalid argument, unaligned access or other error in usage. Will not succeed if retried. -ENOMEM Insufficient resources (like memory or IOVA space) to complete the mapping. Should succeed if retried later. -EIO Legacy error code with an unknown meaning. eg. this is returned if a lower level call returned DMA_MAPPING_ERROR. -EREMOTEIO The DMA device cannot access P2PDMA memory specified in the sg_table. This will not succeed if retried.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chM hjubj)}(hhh](j)}(hI``struct device *dev`` The device for which to perform the DMA operation h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjubj)}(hhh]jG)}(h1The device for which to perform the DMA operationh]h1The device for which to perform the DMA operation}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjubj)}(hC``struct sg_table *sgt`` The sg_table object describing the buffer h](j)}(h``struct sg_table *sgt``h]j)}(hjRh]hstruct sg_table *sgt}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chM hjLubj)}(hhh]jG)}(h)The sg_table object describing the bufferh]h)The sg_table object describing the buffer}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjghM hjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghM hjubj)}(h.``enum dma_data_direction dir`` DMA direction h](j)}(h``enum dma_data_direction dir``h]j)}(hjh]henum dma_data_direction dir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chM hjubj)}(hhh]jG)}(h DMA directionh]h DMA direction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hF``unsigned long attrs`` Optional DMA attributes for the map operation h](j)}(h``unsigned long attrs``h]j)}(hjĹh]hunsigned long attrs}(hjƹhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj¹ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chM hjubj)}(hhh]jG)}(h-Optional DMA attributes for the map operationh]h-Optional DMA attributes for the map operation}(hjݹhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjٹhM hjڹubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjٹhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chM hjubjG)}(hXtMaps a buffer described by a scatterlist stored in the given sg_table object for the **dir** DMA operation by the **dev** device. After success, the ownership for the buffer is transferred to the DMA domain. One has to call dma_sync_sgtable_for_cpu() or dma_unmap_sgtable() to move the ownership of the buffer back to the CPU domain before touching the buffer by the CPU.h](hUMaps a buffer described by a scatterlist stored in the given sg_table object for the }(hjhhhNhNubjv)}(h**dir**h]hdir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh DMA operation by the }(hjhhhNhNubjv)}(h**dev**h]hdev}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh device. After success, the ownership for the buffer is transferred to the DMA domain. One has to call dma_sync_sgtable_for_cpu() or dma_unmap_sgtable() to move the ownership of the buffer back to the CPU domain before touching the buffer by the CPU.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chM hjubjG)}(hwReturns 0 on success or a negative error code on error. The following error codes are supported with the given meaning:h]hwReturns 0 on success or a negative error code on error. The following error codes are supported with the given meaning:}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjubj;)}(hXM-EINVAL An invalid argument, unaligned access or other error in usage. Will not succeed if retried. -ENOMEM Insufficient resources (like memory or IOVA space) to complete the mapping. Should succeed if retried later. -EIO Legacy error code with an unknown meaning. eg. this is returned if a lower level call returned DMA_MAPPING_ERROR. -EREMOTEIO The DMA device cannot access P2PDMA memory specified in the sg_table. This will not succeed if retried.h]h option_list)}(hhh](hoption_list_item)}(hhh](h option_group)}(hhh]hoption)}(h-EINVALh](h option_string)}(h-Eh]h-E}hjrsbah}(h]h ]h"]h$]h&]uh1jphjlubhoption_argument)}(hINVALh]hINVAL}(hjhhhNhNubah}(h]h ]h"]h$]h&] delimiterhuh1jhjlubeh}(h]h ]h"]h$]h&]uh1jjhjgubah}(h]h ]h"]h$]h&]uh1jehjbubh description)}(h[An invalid argument, unaligned access or other error in usage. Will not succeed if retried.h]jG)}(h[An invalid argument, unaligned access or other error in usage. Will not succeed if retried.h]h[An invalid argument, unaligned access or other error in usage. Will not succeed if retried.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1j`hj]ubja)}(hhh](jf)}(hhh]jk)}(h-ENOMEMh](jq)}(h-Eh]h-E}hjȺsbah}(h]h ]h"]h$]h&]uh1jphjĺubj)}(hNOMEMh]hNOMEM}(hjֺhhhNhNubah}(h]h ]h"]h$]h&] delimiterhuh1jhjĺubeh}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jehjubj)}(hlInsufficient resources (like memory or IOVA space) to complete the mapping. Should succeed if retried later.h]jG)}(hlInsufficient resources (like memory or IOVA space) to complete the mapping. Should succeed if retried later.h]hlInsufficient resources (like memory or IOVA space) to complete the mapping. Should succeed if retried later.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j`hj]ubja)}(hhh](jf)}(hhh]jk)}(h-EIOh](jq)}(h-Eh]h-E}hjsbah}(h]h ]h"]h$]h&]uh1jphjubj)}(hIOh]hIO}(hj(hhhNhNubah}(h]h ]h"]h$]h&] delimiterhuh1jhjubeh}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jehjubj)}(hqLegacy error code with an unknown meaning. eg. this is returned if a lower level call returned DMA_MAPPING_ERROR.h]jG)}(hqLegacy error code with an unknown meaning. eg. this is returned if a lower level call returned DMA_MAPPING_ERROR.h]hqLegacy error code with an unknown meaning. eg. this is returned if a lower level call returned DMA_MAPPING_ERROR.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjCubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j`hj]ubja)}(hhh](jf)}(hhh]jk)}(h -EREMOTEIOh](jq)}(h-Eh]h-E}hjlsbah}(h]h ]h"]h$]h&]uh1jphjhubj)}(hREMOTEIOh]hREMOTEIO}(hjzhhhNhNubah}(h]h ]h"]h$]h&] delimiterhuh1jhjhubeh}(h]h ]h"]h$]h&]uh1jjhjeubah}(h]h ]h"]h$]h&]uh1jehjbubj)}(hgThe DMA device cannot access P2PDMA memory specified in the sg_table. This will not succeed if retried.h]jG)}(hgThe DMA device cannot access P2PDMA memory specified in the sg_table. This will not succeed if retried.h]hgThe DMA device cannot access P2PDMA memory specified in the sg_table. This will not succeed if retried.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1j`hj]ubeh}(h]h ]h"]h$]h&]uh1j[hjhMhjWubah}(h]h ]h"]h$]h&]uh1j:hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdma_can_mmap (C function)c.dma_can_mmaphNtauh1hhjhhhNhNubh)}(hhh](h)}(h&bool dma_can_mmap (struct device *dev)h]h)}(h%bool dma_can_mmap(struct device *dev)h](j)}(hj7h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܻhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chM ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjܻhhhjhM ubj)}(h dma_can_mmaph]j)}(h dma_can_mmaph]h dma_can_mmap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjܻhhhjhM ubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj<modnameN classnameNj^ja)}jd]jg)}jZjsbc.dma_can_mmapasbuh1hhjubh)}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjܻhhhjhM ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjػhhhjhM ubah}(h]jӻah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM hjջhhubjB)}(hhh]jG)}(h+check if a given device supports dma_mmap_*h]h+check if a given device supports dma_mmap_*}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjջhhhjhM ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjhNhNubjl)}(h**Parameters** ``struct device *dev`` device to check **Description** Returns ``true`` if **dev** supports dma_mmap_coherent() and dma_mmap_attrs() to map DMA allocations to userspace.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjühhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chM hjubj)}(hhh]j)}(h'``struct device *dev`` device to check h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj޼ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjڼubj)}(hhh]jG)}(hdevice to checkh]hdevice to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjڼubeh}(h]h ]h"]h$]h&]uh1jhjhMhj׼ubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chM hjubjG)}(hrReturns ``true`` if **dev** supports dma_mmap_coherent() and dma_mmap_attrs() to map DMA allocations to userspace.h](hReturns }(hj1hhhNhNubj)}(h``true``h]htrue}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh if }(hj1hhhNhNubjv)}(h**dev**h]hdev}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubhW supports dma_mmap_coherent() and dma_mmap_attrs() to map DMA allocations to userspace.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdma_mmap_attrs (C function)c.dma_mmap_attrshNtauh1hhjhhhNhNubh)}(hhh](h)}(hint dma_mmap_attrs (struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, unsigned long attrs)h]h)}(hint dma_mmap_attrs(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, unsigned long attrs)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chM%ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM%ubj)}(hdma_mmap_attrsh]j)}(hdma_mmap_attrsh]hdma_mmap_attrs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhM%ubj)}(hw(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, unsigned long attrs)h](j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjνhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hj߽hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܽubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.dma_mmap_attrsasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct vm_area_struct *vmah](h)}(hhh]hstruct}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubh)}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj/ubh)}(hhh]j)}(hvm_area_structh]hvm_area_struct}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjSmodnameN classnameNj^ja)}jd]jc.dma_mmap_attrsasbuh1hhj/ubh)}(h h]h }(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj/ubj{)}(hj~h]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj/ubj)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hvoid *cpu_addrh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hcpu_addrh]hcpu_addr}(hj̾hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hdma_addr_t dma_addrh](h)}(hhh]j)}(h dma_addr_th]h dma_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jc.dma_mmap_attrsasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hdma_addrh]hdma_addr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj2modnameN classnameNj^ja)}jd]jc.dma_mmap_attrsasbuh1hhj)ubh)}(h h]h }(hjNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj)ubj)}(hsizeh]hsize}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hunsigned long attrsh](j)}(hunsignedh]hunsigned}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjqubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjqubj)}(hattrsh]hattrs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhM%ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj|hhhjhM%ubah}(h]jwah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM%hjyhhubjB)}(hhh]jG)}(h-map a coherent DMA allocation into user spaceh]h-map a coherent DMA allocation into user space}(hj׿hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjԿhhubah}(h]h ]h"]h$]h&]uh1jAhjyhhhjhM%ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjhNhNubjl)}(hX**Parameters** ``struct device *dev`` valid struct device pointer, or NULL for ISA and EISA-like devices ``struct vm_area_struct *vma`` vm_area_struct describing requested user mapping ``void *cpu_addr`` kernel CPU-view address returned from dma_alloc_attrs ``dma_addr_t dma_addr`` device-view address returned from dma_alloc_attrs ``size_t size`` size of memory originally requested in dma_alloc_attrs ``unsigned long attrs`` attributes of mapping properties requested in dma_alloc_attrs **Description** Map a coherent DMA buffer previously allocated by dma_alloc_attrs into user space. The coherent DMA buffer must not be freed by the driver until the user space mapping has been released.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjubj)}(hhh](j)}(hZ``struct device *dev`` valid struct device pointer, or NULL for ISA and EISA-like devices h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjubj)}(hhh]jG)}(hBvalid struct device pointer, or NULL for ISA and EISA-like devicesh]hBvalid struct device pointer, or NULL for ISA and EISA-like devices}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjubj)}(hP``struct vm_area_struct *vma`` vm_area_struct describing requested user mapping h](j)}(h``struct vm_area_struct *vma``h]j)}(hjQh]hstruct vm_area_struct *vma}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjKubj)}(hhh]jG)}(h0vm_area_struct describing requested user mappingh]h0vm_area_struct describing requested user mapping}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjubj)}(hI``void *cpu_addr`` kernel CPU-view address returned from dma_alloc_attrs h](j)}(h``void *cpu_addr``h]j)}(hjh]hvoid *cpu_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjubj)}(hhh]jG)}(h5kernel CPU-view address returned from dma_alloc_attrsh]h5kernel CPU-view address returned from dma_alloc_attrs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hJ``dma_addr_t dma_addr`` device-view address returned from dma_alloc_attrs h](j)}(h``dma_addr_t dma_addr``h]j)}(hjh]hdma_addr_t dma_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjubj)}(hhh]jG)}(h1device-view address returned from dma_alloc_attrsh]h1device-view address returned from dma_alloc_attrs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hG``size_t size`` size of memory originally requested in dma_alloc_attrs h](j)}(h``size_t size``h]j)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjubj)}(hhh]jG)}(h6size of memory originally requested in dma_alloc_attrsh]h6size of memory originally requested in dma_alloc_attrs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hV``unsigned long attrs`` attributes of mapping properties requested in dma_alloc_attrs h](j)}(h``unsigned long attrs``h]j)}(hj5h]hunsigned long attrs}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhj/ubj)}(hhh]jG)}(h=attributes of mapping properties requested in dma_alloc_attrsh]h=attributes of mapping properties requested in dma_alloc_attrs}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chM!hjubjG)}(hMap a coherent DMA buffer previously allocated by dma_alloc_attrs into user space. The coherent DMA buffer must not be freed by the driver until the user space mapping has been released.h]hMap a coherent DMA buffer previously allocated by dma_alloc_attrs into user space. The coherent DMA buffer must not be freed by the driver until the user space mapping has been released.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chM!hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#dma_addressing_limited (C function)c.dma_addressing_limitedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h0bool dma_addressing_limited (struct device *dev)h]h)}(h/bool dma_addressing_limited(struct device *dev)h](j)}(hj7h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(hdma_addressing_limitedh]j)}(hdma_addressing_limitedh]hdma_addressing_limited}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubj)}(h(struct device *dev)h]j!)}(hstruct device *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.dma_addressing_limitedasbuh1hhjubh)}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(h*return if the device is addressing limitedh]h*return if the device is addressing limited}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjqhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjhNhNubjl)}(hX**Parameters** ``struct device *dev`` device to check **Description** Return ``true`` if the devices DMA mask is too small to address all memory in the system, else ``false``. Lack of addressing bits is the prime reason for bounce buffering, but might not be the only one.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjubj)}(hhh]j)}(h'``struct device *dev`` device to check h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjubj)}(hhh]jG)}(hdevice to checkh]hdevice to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjubjG)}(hReturn ``true`` if the devices DMA mask is too small to address all memory in the system, else ``false``. Lack of addressing bits is the prime reason for bounce buffering, but might not be the only one.h](hReturn }(hjhhhNhNubj)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhP if the devices DMA mask is too small to address all memory in the system, else }(hjhhhNhNubj)}(h ``false``h]hfalse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhc. Lack of addressing bits is the prime reason for bounce buffering, but might not be the only one.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:74: ./kernel/dma/mapping.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubeh}(h]device-drivers-dma-managementah ]h"]device drivers dma managementah$]h&]uh1hhhhhhhhKHubh)}(hhh](h)}(hDevice drivers PnP supporth]hDevice drivers PnP support}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhhhhhKNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"pnp_register_protocol (C function)c.pnp_register_protocolhNtauh1hhjHhhhNhNubh)}(hhh](h)}(h9int pnp_register_protocol (struct pnp_protocol *protocol)h]h)}(h8int pnp_register_protocol(struct pnp_protocol *protocol)h](j)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:80: ./drivers/pnp/core.chK/ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjnhhhjhK/ubj)}(hpnp_register_protocolh]j)}(hpnp_register_protocolh]hpnp_register_protocol}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjnhhhjhK/ubj)}(h(struct pnp_protocol *protocol)h]j!)}(hstruct pnp_protocol *protocolh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h pnp_protocolh]h pnp_protocol}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.pnp_register_protocolasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hprotocolh]hprotocol}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjnhhhjhK/ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjjhhhjhK/ubah}(h]jeah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhK/hjghhubjB)}(hhh]jG)}(h$adds a pnp protocol to the pnp layerh]h$adds a pnp protocol to the pnp layer}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:80: ./drivers/pnp/core.chK*hj/hhubah}(h]h ]h"]h$]h&]uh1jAhjghhhjhK/ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjJjgjJjhjijjuh1hhhhjHhNhNubjl)}(h**Parameters** ``struct pnp_protocol *protocol`` pointer to the corresponding pnp_protocol structure Ex protocols: ISAPNP, PNPBIOS, etch](jG)}(h**Parameters**h]jv)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:80: ./drivers/pnp/core.chK.hjNubj)}(hhh]j)}(hy``struct pnp_protocol *protocol`` pointer to the corresponding pnp_protocol structure Ex protocols: ISAPNP, PNPBIOS, etch](j)}(h!``struct pnp_protocol *protocol``h]j)}(hjsh]hstruct pnp_protocol *protocol}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:80: ./drivers/pnp/core.chK,hjmubj)}(hhh](jG)}(h3pointer to the corresponding pnp_protocol structureh]h3pointer to the corresponding pnp_protocol structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:80: ./drivers/pnp/core.chK+hjubjG)}(h"Ex protocols: ISAPNP, PNPBIOS, etch]h"Ex protocols: ISAPNP, PNPBIOS, etc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:80: ./drivers/pnp/core.chK-hjubeh}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhK,hjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$pnp_request_card_device (C function)c.pnp_request_card_devicehNtauh1hhjHhhhNhNubh)}(hhh](h)}(hlstruct pnp_dev * pnp_request_card_device (struct pnp_card_link *clink, const char *id, struct pnp_dev *from)h]h)}(hjstruct pnp_dev *pnp_request_card_device(struct pnp_card_link *clink, const char *id, struct pnp_dev *from)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chM(ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM(ubh)}(hhh]j)}(hpnp_devh]hpnp_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZpnp_request_card_devicesbc.pnp_request_card_deviceasbuh1hhjhhhjhM(ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM(ubj{)}(hj~h]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhjhM(ubj)}(hpnp_request_card_deviceh]j)}(hjh]hpnp_request_card_device}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhM(ubj)}(hC(struct pnp_card_link *clink, const char *id, struct pnp_dev *from)h](j!)}(hstruct pnp_card_link *clinkh](h)}(hhh]hstruct}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubh)}(h h]h }(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjRubh)}(hhh]j)}(h pnp_card_linkh]h pnp_card_link}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjvmodnameN classnameNj^ja)}jd]jc.pnp_request_card_deviceasbuh1hhjRubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjRubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjRubj)}(hclinkh]hclink}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjNubj!)}(hconst char *idh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hidh]hid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjNubj!)}(hstruct pnp_dev *fromh](h)}(hhh]hstruct}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hpnp_devh]hpnp_dev}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjCmodnameN classnameNj^ja)}jd]jc.pnp_request_card_deviceasbuh1hhjubh)}(h h]h }(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hfromh]hfrom}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjNubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhM(ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhM(ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM(hjhhubjB)}(hhh]jG)}(h2Searches for a PnP device under the specified cardh]h2Searches for a PnP device under the specified card}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chM#hjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhM(ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjHhNhNubjl)}(hX"**Parameters** ``struct pnp_card_link *clink`` pointer to the card link, cannot be NULL ``const char *id`` pointer to a PnP ID structure that explains the rules for finding the device ``struct pnp_dev *from`` Starting place to search from. If NULL it will start from the beginning.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chM'hjubj)}(hhh](j)}(hI``struct pnp_card_link *clink`` pointer to the card link, cannot be NULL h](j)}(h``struct pnp_card_link *clink``h]j)}(hjh]hstruct pnp_card_link *clink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chM$hjubj)}(hhh]jG)}(h(pointer to the card link, cannot be NULLh]h(pointer to the card link, cannot be NULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM$hjubj)}(h```const char *id`` pointer to a PnP ID structure that explains the rules for finding the device h](j)}(h``const char *id``h]j)}(hjh]hconst char *id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chM%hjubj)}(hhh]jG)}(hLpointer to a PnP ID structure that explains the rules for finding the deviceh]hLpointer to a PnP ID structure that explains the rules for finding the device}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj3hM%hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hM%hjubj)}(ha``struct pnp_dev *from`` Starting place to search from. If NULL it will start from the beginning.h](j)}(h``struct pnp_dev *from``h]j)}(hjWh]hstruct pnp_dev *from}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chM'hjQubj)}(hhh]jG)}(hHStarting place to search from. If NULL it will start from the beginning.h]hHStarting place to search from. If NULL it will start from the beginning.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chM&hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhM'hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$pnp_release_card_device (C function)c.pnp_release_card_devicehNtauh1hhjHhhhNhNubh)}(hhh](h)}(h2void pnp_release_card_device (struct pnp_dev *dev)h]h)}(h1void pnp_release_card_device(struct pnp_dev *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chMZubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMZubj)}(hpnp_release_card_deviceh]j)}(hpnp_release_card_deviceh]hpnp_release_card_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMZubj)}(h(struct pnp_dev *dev)h]j!)}(hstruct pnp_dev *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hpnp_devh]hpnp_dev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.pnp_release_card_deviceasbuh1hhjubh)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMZubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMZubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMZhjhhubjB)}(hhh]jG)}(h4call this when the driver no longer needs the deviceh]h4call this when the driver no longer needs the device}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chMWhjnhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMZubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjHhNhNubjl)}(hM**Parameters** ``struct pnp_dev *dev`` pointer to the PnP device structureh](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chM[hjubj)}(hhh]j)}(h;``struct pnp_dev *dev`` pointer to the PnP device structureh](j)}(h``struct pnp_dev *dev``h]j)}(hjh]hstruct pnp_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chM]hjubj)}(hhh]jG)}(h#pointer to the PnP device structureh]h#pointer to the PnP device structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chMXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%pnp_register_card_driver (C function)c.pnp_register_card_driverhNtauh1hhjHhhhNhNubh)}(hhh](h)}(h:int pnp_register_card_driver (struct pnp_card_driver *drv)h]h)}(h9int pnp_register_card_driver(struct pnp_card_driver *drv)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(hpnp_register_card_driverh]j)}(hpnp_register_card_driverh]hpnp_register_card_driver}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubj)}(h(struct pnp_card_driver *drv)h]j!)}(hstruct pnp_card_driver *drvh](h)}(hhh]hstruct}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubh)}(h h]h }(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjEubh)}(hhh]j)}(hpnp_card_driverh]hpnp_card_driver}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjimodnameN classnameNj^ja)}jd]jg)}jZj/sbc.pnp_register_card_driverasbuh1hhjEubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjEubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjEubj)}(hdrvh]hdrv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjAubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(h.registers a PnP card driver with the PnP Layerh]h.registers a PnP card driver with the PnP Layer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chM}hjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjHhNhNubjl)}(hS**Parameters** ``struct pnp_card_driver *drv`` pointer to the driver to registerh](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chMhjubj)}(hhh]j)}(hA``struct pnp_card_driver *drv`` pointer to the driver to registerh](j)}(h``struct pnp_card_driver *drv``h]j)}(hj h]hstruct pnp_card_driver *drv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chMhjubj)}(hhh]jG)}(h!pointer to the driver to registerh]h!pointer to the driver to register}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chM~hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'pnp_unregister_card_driver (C function)c.pnp_unregister_card_driverhNtauh1hhjHhhhNhNubh)}(hhh](h)}(h=void pnp_unregister_card_driver (struct pnp_card_driver *drv)h]h)}(hj?)j@huh1hhjuhMhj\hhubjB)}(hhh]jG)}(h0unregisters a PnP card driver from the PnP Layerh]h0unregisters a PnP card driver from the PnP Layer}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chMhj$hhubah}(h]h ]h"]h$]h&]uh1jAhj\hhhjuhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj?jgj?jhjijjuh1hhhhjHhNhNubjl)}(hU**Parameters** ``struct pnp_card_driver *drv`` pointer to the driver to unregisterh](jG)}(h**Parameters**h]jv)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chMhjCubj)}(hhh]j)}(hC``struct pnp_card_driver *drv`` pointer to the driver to unregisterh](j)}(h``struct pnp_card_driver *drv``h]j)}(hjhh]hstruct pnp_card_driver *drv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chMhjbubj)}(hhh]jG)}(h#pointer to the driver to unregisterh]h#pointer to the driver to unregister}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh\/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:83: ./drivers/pnp/card.chMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpnp_add_id (C function) c.pnp_add_idhNtauh1hhjHhhhNhNubh)}(hhh](h)}(h@struct pnp_id * pnp_add_id (struct pnp_dev *dev, const char *id)h]h)}(h>struct pnp_id *pnp_add_id(struct pnp_dev *dev, const char *id)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:86: ./drivers/pnp/driver.chM'ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM'ubh)}(hhh]j)}(hpnp_idh]hpnp_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZ pnp_add_idsb c.pnp_add_idasbuh1hhjhhhjhM'ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM'ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjhhhjhM'ubj)}(h pnp_add_idh]j)}(hjh]h pnp_add_id}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhM'ubj)}(h%(struct pnp_dev *dev, const char *id)h](j!)}(hstruct pnp_dev *devh](h)}(hhh]hstruct}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubh)}(h h]h }(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8ubh)}(hhh]j)}(hpnp_devh]hpnp_dev}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetj\modnameN classnameNj^ja)}jd]j c.pnp_add_idasbuh1hhj8ubh)}(h h]h }(hjxhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj8ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj4ubj!)}(hconst char *idh](h)}(hj8h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hidh]hid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj4ubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhM'ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhM'ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM'hjhhubjB)}(hhh]jG)}(h'adds an EISA id to the specified deviceh]h'adds an EISA id to the specified device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:86: ./drivers/pnp/driver.chM#hjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhM'ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj2jgj2jhjijjuh1hhhhjHhNhNubjl)}(hz**Parameters** ``struct pnp_dev *dev`` pointer to the desired device ``const char *id`` pointer to an EISA id stringh](jG)}(h**Parameters**h]jv)}(hj<h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:86: ./drivers/pnp/driver.chM'hj6ubj)}(hhh](j)}(h6``struct pnp_dev *dev`` pointer to the desired device h](j)}(h``struct pnp_dev *dev``h]j)}(hj[h]hstruct pnp_dev *dev}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:86: ./drivers/pnp/driver.chM$hjUubj)}(hhh]jG)}(hpointer to the desired deviceh]hpointer to the desired device}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjphM$hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphM$hjRubj)}(h/``const char *id`` pointer to an EISA id stringh](j)}(h``const char *id``h]j)}(hjh]hconst char *id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:86: ./drivers/pnp/driver.chM&hjubj)}(hhh]jG)}(hpointer to an EISA id stringh]hpointer to an EISA id string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh^/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:86: ./drivers/pnp/driver.chM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjRubeh}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpnp_start_dev (C function)c.pnp_start_devhNtauh1hhjHhhhNhNubh)}(hhh](h)}(h'int pnp_start_dev (struct pnp_dev *dev)h]h)}(h&int pnp_start_dev(struct pnp_dev *dev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMQubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMQubj)}(h pnp_start_devh]j)}(h pnp_start_devh]h pnp_start_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMQubj)}(h(struct pnp_dev *dev)h]j!)}(hstruct pnp_dev *devh](h)}(hhh]hstruct}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubh)}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubh)}(hhh]j)}(hpnp_devh]hpnp_dev}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjKmodnameN classnameNj^ja)}jd]jg)}jZjsbc.pnp_start_devasbuh1hhj'ubh)}(h h]h }(hjihhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubj{)}(hj~h]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj'ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj#ubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMQubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMQubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMQhjhhubjB)}(hhh]jG)}(h!low-level start of the PnP deviceh]h!low-level start of the PnP device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMLhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMQubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjHhNhNubjl)}(h**Parameters** ``struct pnp_dev *dev`` pointer to the desired device **Description** assumes that resources have already been allocatedh](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMPhjubj)}(hhh]j)}(h6``struct pnp_dev *dev`` pointer to the desired device h](j)}(h``struct pnp_dev *dev``h]j)}(hjh]hstruct pnp_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMMhjubj)}(hhh]jG)}(hpointer to the desired deviceh]hpointer to the desired device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMMhjubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMOhjubjG)}(h2assumes that resources have already been allocatedh]h2assumes that resources have already been allocated}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpnp_stop_dev (C function)c.pnp_stop_devhNtauh1hhjHhhhNhNubh)}(hhh](h)}(h&int pnp_stop_dev (struct pnp_dev *dev)h]h)}(h%int pnp_stop_dev(struct pnp_dev *dev)h](j)}(hinth]hint}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMiubh)}(h h]h }(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkhhhj}hMiubj)}(h pnp_stop_devh]j)}(h pnp_stop_devh]h pnp_stop_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjkhhhj}hMiubj)}(h(struct pnp_dev *dev)h]j!)}(hstruct pnp_dev *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hpnp_devh]hpnp_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.pnp_stop_devasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjkhhhj}hMiubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjghhhj}hMiubah}(h]jbah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj}hMihjdhhubjB)}(hhh]jG)}(h#low-level disable of the PnP deviceh]h#low-level disable of the PnP device}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMdhj,hhubah}(h]h ]h"]h$]h&]uh1jAhjdhhhj}hMiubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjGjgjGjhjijjuh1hhhhjHhNhNubjl)}(hq**Parameters** ``struct pnp_dev *dev`` pointer to the desired device **Description** does not free resourcesh](jG)}(h**Parameters**h]jv)}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMhhjKubj)}(hhh]j)}(h6``struct pnp_dev *dev`` pointer to the desired device h](j)}(h``struct pnp_dev *dev``h]j)}(hjph]hstruct pnp_dev *dev}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMehjjubj)}(hhh]jG)}(hpointer to the desired deviceh]hpointer to the desired device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjgubah}(h]h ]h"]h$]h&]uh1jhjKubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMghjKubjG)}(hdoes not free resourcesh]hdoes not free resources}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMghjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpnp_activate_dev (C function)c.pnp_activate_devhNtauh1hhjHhhhNhNubh)}(hhh](h)}(h*int pnp_activate_dev (struct pnp_dev *dev)h]h)}(h)int pnp_activate_dev(struct pnp_dev *dev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(hpnp_activate_devh]j)}(hpnp_activate_devh]hpnp_activate_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubj)}(h(struct pnp_dev *dev)h]j!)}(hstruct pnp_dev *devh](h)}(hhh]hstruct}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubh)}(h h]h }(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj)ubh)}(hhh]j)}(hpnp_devh]hpnp_dev}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjMmodnameN classnameNj^ja)}jd]jg)}jZjsbc.pnp_activate_devasbuh1hhj)ubh)}(h h]h }(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj)ubj{)}(hj~h]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj)ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj%ubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(hactivates a PnP device for useh]hactivates a PnP device for use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMzhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjHhNhNubjl)}(h**Parameters** ``struct pnp_dev *dev`` pointer to the desired device **Description** does not validate or set resources so be careful.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chM~hjubj)}(hhh]j)}(h6``struct pnp_dev *dev`` pointer to the desired device h](j)}(h``struct pnp_dev *dev``h]j)}(hjh]hstruct pnp_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chM{hjubj)}(hhh]jG)}(hpointer to the desired deviceh]hpointer to the desired device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM{hjubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chM}hjubjG)}(h1does not validate or set resources so be careful.h]h1does not validate or set resources so be careful.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chM}hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpnp_disable_dev (C function)c.pnp_disable_devhNtauh1hhjHhhhNhNubh)}(hhh](h)}(h)int pnp_disable_dev (struct pnp_dev *dev)h]h)}(h(int pnp_disable_dev(struct pnp_dev *dev)h](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjmhhhjhMubj)}(hpnp_disable_devh]j)}(hpnp_disable_devh]hpnp_disable_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjmhhhjhMubj)}(h(struct pnp_dev *dev)h]j!)}(hstruct pnp_dev *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hpnp_devh]hpnp_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.pnp_disable_devasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjmhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjihhhjhMubah}(h]jdah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjfhhubjB)}(hhh]jG)}(hdisables deviceh]hdisables device}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMhj.hhubah}(h]h ]h"]h$]h&]uh1jAhjfhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjIjgjIjhjijjuh1hhhhjHhNhNubjl)}(h**Parameters** ``struct pnp_dev *dev`` pointer to the desired device **Description** inform the correct pnp protocol so that resources can be used by other devicesh](jG)}(h**Parameters**h]jv)}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMhjMubj)}(hhh]j)}(h6``struct pnp_dev *dev`` pointer to the desired device h](j)}(h``struct pnp_dev *dev``h]j)}(hjrh]hstruct pnp_dev *dev}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMhjlubj)}(hhh]jG)}(hpointer to the desired deviceh]hpointer to the desired device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMhjMubjG)}(hNinform the correct pnp protocol so that resources can be used by other devicesh]hNinform the correct pnp protocol so that resources can be used by other devices}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:89: ./drivers/pnp/manager.chMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjHhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpnp_is_active (C function)c.pnp_is_activehNtauh1hhjHhhhNhNubh)}(hhh](h)}(h'int pnp_is_active (struct pnp_dev *dev)h]h)}(h&int pnp_is_active(struct pnp_dev *dev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:92: ./drivers/pnp/support.chKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj)}(h pnp_is_activeh]j)}(h pnp_is_activeh]h pnp_is_active}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKubj)}(h(struct pnp_dev *dev)h]j!)}(hstruct pnp_dev *devh](h)}(hhh]hstruct}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubh)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj+ubh)}(hhh]j)}(hpnp_devh]hpnp_dev}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjOmodnameN classnameNj^ja)}jd]jg)}jZjsbc.pnp_is_activeasbuh1hhj+ubh)}(h h]h }(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj+ubj{)}(hj~h]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj+ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj'ubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]jG)}(h?Determines if a device is active based on its current resourcesh]h?Determines if a device is active based on its current resources}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:92: ./drivers/pnp/support.chKhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhjHhNhNubjl)}(hK**Parameters** ``struct pnp_dev *dev`` pointer to the desired PnP deviceh](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:92: ./drivers/pnp/support.chKhjubj)}(hhh]j)}(h9``struct pnp_dev *dev`` pointer to the desired PnP deviceh](j)}(h``struct pnp_dev *dev``h]j)}(hjh]hstruct pnp_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:92: ./drivers/pnp/support.chKhjubj)}(hhh]jG)}(h!pointer to the desired PnP deviceh]h!pointer to the desired PnP device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh_/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:92: ./drivers/pnp/support.chKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjHhhhNhNubeh}(h]device-drivers-pnp-supportah ]h"]device drivers pnp supportah$]h&]uh1hhhhhhhhKNubh)}(hhh](h)}(hUserspace IO devicesh]hUserspace IO devices}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hhhhhK`ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌuio_event_notify (C function)c.uio_event_notifyhNtauh1hhj<hhhNhNubh)}(hhh](h)}(h-void uio_event_notify (struct uio_info *info)h]h)}(h,void uio_event_notify(struct uio_info *info)h](j)}(hvoidh]hvoid}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMubh)}(h h]h }(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjbhhhjthMubj)}(huio_event_notifyh]j)}(huio_event_notifyh]huio_event_notify}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjbhhhjthMubj)}(h(struct uio_info *info)h]j!)}(hstruct uio_info *infoh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(huio_infoh]huio_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.uio_event_notifyasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hinfoh]hinfo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjbhhhjthMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj^hhhjthMubah}(h]jYah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjthMhj[hhubjB)}(hhh]jG)}(htrigger an interrupt eventh]htrigger an interrupt event}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMhj#hhubah}(h]h ]h"]h$]h&]uh1jAhj[hhhjthMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj>jgj>jhjijjuh1hhhhj<hNhNubjl)}(hC**Parameters** ``struct uio_info *info`` UIO device capabilitiesh](jG)}(h**Parameters**h]jv)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMhjBubj)}(hhh]j)}(h1``struct uio_info *info`` UIO device capabilitiesh](j)}(h``struct uio_info *info``h]j)}(hjgh]hstruct uio_info *info}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMhjaubj)}(hhh]jG)}(hUIO device capabilitiesh]hUIO device capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj<hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"__uio_register_device (C function)c.__uio_register_devicehNtauh1hhj<hhhNhNubh)}(hhh](h)}(h^int __uio_register_device (struct module *owner, struct device *parent, struct uio_info *info)h]h)}(h]int __uio_register_device(struct module *owner, struct device *parent, struct uio_info *info)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(h__uio_register_deviceh]j)}(h__uio_register_deviceh]h__uio_register_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubj)}(hD(struct module *owner, struct device *parent, struct uio_info *info)h](j!)}(hstruct module *ownerh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hmoduleh]hmodule}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.__uio_register_deviceasbuh1hhjubh)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hownerh]howner}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct device *parenth](h)}(hhh]hstruct}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubh)}(h h]h }(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjlubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j8c.__uio_register_deviceasbuh1hhjlubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjlubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjlubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct uio_info *infoh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(huio_infoh]huio_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j8c.__uio_register_deviceasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hinfoh]hinfo}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(h"register a new userspace IO deviceh]h"register a new userspace IO device}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMhj^hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjyjgjyjhjijjuh1hhhhj<hNhNubjl)}(h**Parameters** ``struct module *owner`` module that creates the new device ``struct device *parent`` parent device ``struct uio_info *info`` UIO device capabilities **Description** returns zero on success or a negative error code.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMhj}ubj)}(hhh](j)}(h<``struct module *owner`` module that creates the new device h](j)}(h``struct module *owner``h]j)}(hjh]hstruct module *owner}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMhjubj)}(hhh]jG)}(h"module that creates the new deviceh]h"module that creates the new device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``struct device *parent`` parent device h](j)}(h``struct device *parent``h]j)}(hjh]hstruct device *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMhjubj)}(hhh]jG)}(h parent deviceh]h parent device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``struct uio_info *info`` UIO device capabilities h](j)}(h``struct uio_info *info``h]j)}(hjh]hstruct uio_info *info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMhjubj)}(hhh]jG)}(hUIO device capabilitiesh]hUIO device capabilities}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj)hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjubeh}(h]h ]h"]h$]h&]uh1jhj}ubjG)}(h**Description**h]jv)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMhj}ubjG)}(h1returns zero on success or a negative error code.h]h1returns zero on success or a negative error code.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj<hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'__devm_uio_register_device (C function)c.__devm_uio_register_devicehNtauh1hhj<hhhNhNubh)}(hhh](h)}(hcint __devm_uio_register_device (struct module *owner, struct device *parent, struct uio_info *info)h]h)}(hbint __devm_uio_register_device(struct module *owner, struct device *parent, struct uio_info *info)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chM3ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM3ubj)}(h__devm_uio_register_deviceh]j)}(h__devm_uio_register_deviceh]h__devm_uio_register_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhM3ubj)}(hD(struct module *owner, struct device *parent, struct uio_info *info)h](j!)}(hstruct module *ownerh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hmoduleh]hmodule}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.__devm_uio_register_deviceasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hownerh]howner}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct device *parenth](h)}(hhh]hstruct}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubh)}(h h]h }(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj?ubh)}(hhh]j)}(hdeviceh]hdevice}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjcmodnameN classnameNj^ja)}jd]j c.__devm_uio_register_deviceasbuh1hhj?ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj?ubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhj?ubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj!)}(hstruct uio_info *infoh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(huio_infoh]huio_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]j c.__devm_uio_register_deviceasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hinfoh]hinfo}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhM3ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhM3ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM3hjhhubjB)}(hhh]jG)}(h&Resource managed uio_register_device()h]h&Resource managed uio_register_device()}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chM,hj1hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhM3ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjLjgjLjhjijjuh1hhhhj<hNhNubjl)}(h**Parameters** ``struct module *owner`` module that creates the new device ``struct device *parent`` parent device ``struct uio_info *info`` UIO device capabilities **Description** returns zero on success or a negative error code.h](jG)}(h**Parameters**h]jv)}(hjVh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chM0hjPubj)}(hhh](j)}(h<``struct module *owner`` module that creates the new device h](j)}(h``struct module *owner``h]j)}(hjuh]hstruct module *owner}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chM-hjoubj)}(hhh]jG)}(h"module that creates the new deviceh]h"module that creates the new device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjlubj)}(h(``struct device *parent`` parent device h](j)}(h``struct device *parent``h]j)}(hjh]hstruct device *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chM.hjubj)}(hhh]jG)}(h parent deviceh]h parent device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjlubj)}(h2``struct uio_info *info`` UIO device capabilities h](j)}(h``struct uio_info *info``h]j)}(hjh]hstruct uio_info *info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chM/hjubj)}(hhh]jG)}(hUIO device capabilitiesh]hUIO device capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhM/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM/hjlubeh}(h]h ]h"]h$]h&]uh1jhjPubjG)}(h**Description**h]jv)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chM1hjPubjG)}(h1returns zero on success or a negative error code.h]h1returns zero on success or a negative error code.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chM1hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj<hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"uio_unregister_device (C function)c.uio_unregister_devicehNtauh1hhj<hhhNhNubh)}(hhh](h)}(h2void uio_unregister_device (struct uio_info *info)h]h)}(h1void uio_unregister_device(struct uio_info *info)h](j)}(hvoidh]hvoid}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMQubh)}(h h]h }(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjchhhjuhMQubj)}(huio_unregister_deviceh]j)}(huio_unregister_deviceh]huio_unregister_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjchhhjuhMQubj)}(h(struct uio_info *info)h]j!)}(hstruct uio_info *infoh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(huio_infoh]huio_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypejZ reftargetjmodnameN classnameNj^ja)}jd]jg)}jZjsbc.uio_unregister_deviceasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj{)}(hj~h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jzhjubj)}(hinfoh]hinfo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1jhjchhhjuhMQubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj_hhhjuhMQubah}(h]jZah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjuhMQhj\hhubjB)}(hhh]jG)}(h!unregister a industrial IO deviceh]h!unregister a industrial IO device}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMMhj$hhubah}(h]h ]h"]h$]h&]uh1jAhj\hhhjuhMQubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj?jgj?jhjijjuh1hhhhj<hNhNubjl)}(hC**Parameters** ``struct uio_info *info`` UIO device capabilitiesh](jG)}(h**Parameters**h]jv)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMQhjCubj)}(hhh]j)}(h1``struct uio_info *info`` UIO device capabilitiesh](j)}(h``struct uio_info *info``h]j)}(hjhh]hstruct uio_info *info}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMShjbubj)}(hhh]jG)}(hUIO device capabilitiesh]hUIO device capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFh[/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:98: ./drivers/uio/uio.chMNhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMShj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj<hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌuio_mem (C struct) c.uio_memhNtauh1hhj<hhhNhNubh)}(hhh](h)}(huio_memh]h)}(hstruct uio_memh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj)}(huio_memh]j)}(hjh]huio_mem}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]jG)}(h"description of a UIO memory regionh]h"description of a UIO memory region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j`structeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhj<hNhNubjl)}(hX**Definition**:: struct uio_mem { const char *name; phys_addr_t addr; dma_addr_t dma_addr; unsigned long offs; resource_size_t size; int memtype; void __iomem *internal_addr; struct device *dma_device; struct uio_map *map; }; **Members** ``name`` name of the memory region for identification ``addr`` address of the device's memory rounded to page size (phys_addr is used since addr can be logical, virtual, or physical & phys_addr_t should always be large enough to handle any of the address types) ``dma_addr`` DMA handle set by dma_alloc_coherent, used with UIO_MEM_DMA_COHERENT only (**addr** should be the void * returned from the same dma_alloc_coherent call) ``offs`` offset of device memory within the page ``size`` size of IO (multiple of page size) ``memtype`` type of memory addr points to ``internal_addr`` ioremap-ped version of addr, for driver internal use ``dma_device`` device struct that was passed to dma_alloc_coherent, used with UIO_MEM_DMA_COHERENT only ``map`` for use by the UIO core only.h](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubh:}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhj ubj)}(hX)struct uio_mem { const char *name; phys_addr_t addr; dma_addr_t dma_addr; unsigned long offs; resource_size_t size; int memtype; void __iomem *internal_addr; struct device *dma_device; struct uio_map *map; };h]hX)struct uio_mem { const char *name; phys_addr_t addr; dma_addr_t dma_addr; unsigned long offs; resource_size_t size; int memtype; void __iomem *internal_addr; struct device *dma_device; struct uio_map *map; };}hjAsbah}(h]h ]h"]h$]h&]j+j,uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhj ubjG)}(h **Members**h]jv)}(hjRh]hMembers}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK*hj ubj)}(hhh](j)}(h6``name`` name of the memory region for identification h](j)}(h``name``h]j)}(hjqh]hname}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjkubj)}(hhh]jG)}(h,name of the memory region for identificationh]h,name of the memory region for identification}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhKhjhubj)}(h``addr`` address of the device's memory rounded to page size (phys_addr is used since addr can be logical, virtual, or physical & phys_addr_t should always be large enough to handle any of the address types) h](j)}(h``addr``h]j)}(hjh]haddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjubj)}(hhh]jG)}(haddress of the device's memory rounded to page size (phys_addr is used since addr can be logical, virtual, or physical & phys_addr_t should always be large enough to handle any of the address types)h]haddress of the device’s memory rounded to page size (phys_addr is used since addr can be logical, virtual, or physical & phys_addr_t should always be large enough to handle any of the address types)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjhubj)}(h``dma_addr`` DMA handle set by dma_alloc_coherent, used with UIO_MEM_DMA_COHERENT only (**addr** should be the void * returned from the same dma_alloc_coherent call) h](j)}(h ``dma_addr``h]j)}(hjh]hdma_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK"hjubj)}(hhh]jG)}(hDMA handle set by dma_alloc_coherent, used with UIO_MEM_DMA_COHERENT only (**addr** should be the void * returned from the same dma_alloc_coherent call)h](hKDMA handle set by dma_alloc_coherent, used with UIO_MEM_DMA_COHERENT only (}(hjhhhNhNubjv)}(h**addr**h]haddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhE should be the void * returned from the same dma_alloc_coherent call)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK"hjhubj)}(h1``offs`` offset of device memory within the page h](j)}(h``offs``h]j)}(hj0h]hoffs}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK#hj*ubj)}(hhh]jG)}(h'offset of device memory within the pageh]h'offset of device memory within the page}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjEhK#hjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhK#hjhubj)}(h,``size`` size of IO (multiple of page size) h](j)}(h``size``h]j)}(hjih]hsize}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK$hjcubj)}(hhh]jG)}(h"size of IO (multiple of page size)h]h"size of IO (multiple of page size)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj~hK$hjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hK$hjhubj)}(h*``memtype`` type of memory addr points to h](j)}(h ``memtype``h]j)}(hjh]hmemtype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK%hjubj)}(hhh]jG)}(htype of memory addr points toh]htype of memory addr points to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhK%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK%hjhubj)}(hG``internal_addr`` ioremap-ped version of addr, for driver internal use h](j)}(h``internal_addr``h]j)}(hjh]h internal_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK&hjubj)}(hhh]jG)}(h4ioremap-ped version of addr, for driver internal useh]h4ioremap-ped version of addr, for driver internal use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhK&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK&hjhubj)}(hh``dma_device`` device struct that was passed to dma_alloc_coherent, used with UIO_MEM_DMA_COHERENT only h](j)}(h``dma_device``h]j)}(hjh]h dma_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK(hjubj)}(hhh]jG)}(hXdevice struct that was passed to dma_alloc_coherent, used with UIO_MEM_DMA_COHERENT onlyh]hXdevice struct that was passed to dma_alloc_coherent, used with UIO_MEM_DMA_COHERENT only}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK'hj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hK(hjhubj)}(h%``map`` for use by the UIO core only.h](j)}(h``map``h]j)}(hjNh]hmap}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK(hjHubj)}(hhh]jG)}(hfor use by the UIO core only.h]hfor use by the UIO core only.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK)hjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchK(hjhubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj<hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌuio_port (C struct) c.uio_porthNtauh1hhj<hhhNhNubh)}(hhh](h)}(huio_porth]h)}(hstruct uio_porth](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK/ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhK/ubj)}(huio_porth]j)}(hjh]huio_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhK/ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhK/ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhK/hjhhubjB)}(hhh]jG)}(h description of a UIO port regionh]h description of a UIO port region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK;hjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhK/ubeh}(h]h ](j`structeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhj<hNhNubjl)}(hX**Definition**:: struct uio_port { const char *name; unsigned long start; unsigned long size; int porttype; struct uio_portio *portio; }; **Members** ``name`` name of the port region for identification ``start`` start of port region ``size`` size of port region ``porttype`` type of port (see UIO_PORT_* below) ``portio`` for use by the UIO core only.h](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK?hjubj)}(hstruct uio_port { const char *name; unsigned long start; unsigned long size; int porttype; struct uio_portio *portio; };h]hstruct uio_port { const char *name; unsigned long start; unsigned long size; int porttype; struct uio_portio *portio; };}hj'sbah}(h]h ]h"]h$]h&]j+j,uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKAhjubjG)}(h **Members**h]jv)}(hj8h]hMembers}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKIhjubj)}(hhh](j)}(h4``name`` name of the port region for identification h](j)}(h``name``h]j)}(hjWh]hname}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK=hjQubj)}(hhh]jG)}(h*name of the port region for identificationh]h*name of the port region for identification}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjlhK=hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhK=hjNubj)}(h``start`` start of port region h](j)}(h ``start``h]j)}(hjh]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK>hjubj)}(hhh]jG)}(hstart of port regionh]hstart of port region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhK>hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK>hjNubj)}(h``size`` size of port region h](j)}(h``size``h]j)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK?hjubj)}(hhh]jG)}(hsize of port regionh]hsize of port region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhK?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK?hjNubj)}(h1``porttype`` type of port (see UIO_PORT_* below) h](j)}(h ``porttype``h]j)}(hjh]hporttype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK@hjubj)}(hhh]jG)}(h#type of port (see UIO_PORT_* below)h]h#type of port (see UIO_PORT_* below)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhK@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK@hjNubj)}(h(``portio`` for use by the UIO core only.h](j)}(h ``portio``h]j)}(hj;h]hportio}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK@hj5ubj)}(hhh]jG)}(hfor use by the UIO core only.h]hfor use by the UIO core only.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKAhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhK@hjNubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj<hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌuio_info (C struct) c.uio_infohNtauh1hhj<hhhNhNubh)}(hhh](h)}(huio_infoh]h)}(hstruct uio_infoh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKGubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKGubj)}(huio_infoh]j)}(hjh]huio_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKGubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKGubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKGhjhhubjB)}(hhh]jG)}(hUIO device capabilitiesh]hUIO device capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKZhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKGubeh}(h]h ](j`structeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhj<hNhNubjl)}(hX**Definition**:: struct uio_info { struct uio_device *uio_dev; const char *name; const char *version; struct uio_mem mem[MAX_UIO_MAPS]; struct uio_port port[MAX_UIO_PORT_REGIONS]; long irq; unsigned long irq_flags; void *priv; irqreturn_t (*handler)(int irq, struct uio_info *dev_info); int (*mmap)(struct uio_info *info, struct vm_area_struct *vma); int (*open)(struct uio_info *info, struct inode *inode); int (*release)(struct uio_info *info, struct inode *inode); int (*irqcontrol)(struct uio_info *info, s32 irq_on); }; **Members** ``uio_dev`` the UIO device this info belongs to ``name`` device name ``version`` device driver version ``mem`` list of mappable memory regions, size==0 for end of list ``port`` list of port regions, size==0 for end of list ``irq`` interrupt number or UIO_IRQ_CUSTOM ``irq_flags`` flags for request_irq() ``priv`` optional private data ``handler`` the device's irq handler ``mmap`` mmap operation for this uio device ``open`` open operation for this uio device ``release`` release operation for this uio device ``irqcontrol`` disable/enable irqs when 0/1 is written to /dev/uioXh](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK^hjubj)}(hXjstruct uio_info { struct uio_device *uio_dev; const char *name; const char *version; struct uio_mem mem[MAX_UIO_MAPS]; struct uio_port port[MAX_UIO_PORT_REGIONS]; long irq; unsigned long irq_flags; void *priv; irqreturn_t (*handler)(int irq, struct uio_info *dev_info); int (*mmap)(struct uio_info *info, struct vm_area_struct *vma); int (*open)(struct uio_info *info, struct inode *inode); int (*release)(struct uio_info *info, struct inode *inode); int (*irqcontrol)(struct uio_info *info, s32 irq_on); };h]hXjstruct uio_info { struct uio_device *uio_dev; const char *name; const char *version; struct uio_mem mem[MAX_UIO_MAPS]; struct uio_port port[MAX_UIO_PORT_REGIONS]; long irq; unsigned long irq_flags; void *priv; irqreturn_t (*handler)(int irq, struct uio_info *dev_info); int (*mmap)(struct uio_info *info, struct vm_area_struct *vma); int (*open)(struct uio_info *info, struct inode *inode); int (*release)(struct uio_info *info, struct inode *inode); int (*irqcontrol)(struct uio_info *info, s32 irq_on); };}hjsbah}(h]h ]h"]h$]h&]j+j,uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK`hjubjG)}(h **Members**h]jv)}(hj%h]hMembers}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKphjubj)}(hhh](j)}(h0``uio_dev`` the UIO device this info belongs to h](j)}(h ``uio_dev``h]j)}(hjDh]huio_dev}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK\hj>ubj)}(hhh]jG)}(h#the UIO device this info belongs toh]h#the UIO device this info belongs to}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjYhK\hjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhK\hj;ubj)}(h``name`` device name h](j)}(h``name``h]j)}(hj}h]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK]hjwubj)}(hhh]jG)}(h device nameh]h device name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhK]hjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhK]hj;ubj)}(h"``version`` device driver version h](j)}(h ``version``h]j)}(hjh]hversion}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK^hjubj)}(hhh]jG)}(hdevice driver versionh]hdevice driver version}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhK^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK^hj;ubj)}(hA``mem`` list of mappable memory regions, size==0 for end of list h](j)}(h``mem``h]j)}(hjh]hmem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK_hjubj)}(hhh]jG)}(h8list of mappable memory regions, size==0 for end of listh]h8list of mappable memory regions, size==0 for end of list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhK_hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK_hj;ubj)}(h7``port`` list of port regions, size==0 for end of list h](j)}(h``port``h]j)}(hj(h]hport}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhK`hj"ubj)}(hhh]jG)}(h-list of port regions, size==0 for end of listh]h-list of port regions, size==0 for end of list}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj=hK`hj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hK`hj;ubj)}(h+``irq`` interrupt number or UIO_IRQ_CUSTOM h](j)}(h``irq``h]j)}(hjah]hirq}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKahj[ubj)}(hhh]jG)}(h"interrupt number or UIO_IRQ_CUSTOMh]h"interrupt number or UIO_IRQ_CUSTOM}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjvhKahjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhKahj;ubj)}(h&``irq_flags`` flags for request_irq() h](j)}(h ``irq_flags``h]j)}(hjh]h irq_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKbhjubj)}(hhh]jG)}(hflags for request_irq()h]hflags for request_irq()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKbhj;ubj)}(h``priv`` optional private data h](j)}(h``priv``h]j)}(hjh]hpriv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKchjubj)}(hhh]jG)}(hoptional private datah]hoptional private data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKchjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKchj;ubj)}(h%``handler`` the device's irq handler h](j)}(h ``handler``h]j)}(hj h]hhandler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKdhjubj)}(hhh]jG)}(hthe device's irq handlerh]hthe device’s irq handler}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj!hKdhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hKdhj;ubj)}(h,``mmap`` mmap operation for this uio device h](j)}(h``mmap``h]j)}(hjEh]hmmap}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKehj?ubj)}(hhh]jG)}(h"mmap operation for this uio deviceh]h"mmap operation for this uio device}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjZhKehj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhKehj;ubj)}(h,``open`` open operation for this uio device h](j)}(h``open``h]j)}(hj~h]hopen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKfhjxubj)}(hhh]jG)}(h"open operation for this uio deviceh]h"open operation for this uio device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKfhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhKfhj;ubj)}(h2``release`` release operation for this uio device h](j)}(h ``release``h]j)}(hjh]hrelease}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKghjubj)}(hhh]jG)}(h%release operation for this uio deviceh]h%release operation for this uio device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKghj;ubj)}(hC``irqcontrol`` disable/enable irqs when 0/1 is written to /dev/uioXh](j)}(h``irqcontrol``h]j)}(hjh]h irqcontrol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKghjubj)}(hhh]jG)}(h4disable/enable irqs when 0/1 is written to /dev/uioXh]h4disable/enable irqs when 0/1 is written to /dev/uioX}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKghj;ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj<hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌuio_register_device (C macro)c.uio_register_devicehNtauh1hhj<hhhNhNubh)}(hhh](h)}(huio_register_deviceh]h)}(huio_register_deviceh]j)}(huio_register_deviceh]j)}(hjDh]huio_register_device}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjFhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjBhhhjahKubah}(h]j=ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjahKhj?hhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhj?hhhjahKubeh}(h]h ](j`macroeh"]h$]h&]jej`jfjzjgjzjhjijjuh1hhhhj<hNhNubjG)}(h&``uio_register_device (parent, info)``h]j)}(hjh]h"uio_register_device (parent, info)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhj<hhubj;)}(h#register a new userspace IO device h]jG)}(h"register a new userspace IO deviceh]h"register a new userspace IO device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjubah}(h]h ]h"]h$]h&]uh1j:hjhKhj<hhubjl)}(h**Parameters** ``parent`` parent device ``info`` UIO device capabilities **Description** returns zero on success or a negative error code.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjubj)}(hhh](j)}(h``parent`` parent device h](j)}(h ``parent``h]j)}(hjh]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjubj)}(hhh]jG)}(h parent deviceh]h parent device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h!``info`` UIO device capabilities h](j)}(h``info``h]j)}(hj h]hinfo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjubj)}(hhh]jG)}(hUIO device capabilitiesh]hUIO device capabilities}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj"hKhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjHh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjubjG)}(h1returns zero on success or a negative error code.h]h1returns zero on success or a negative error code.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj<hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"devm_uio_register_device (C macro)c.devm_uio_register_devicehNtauh1hhj<hhhNhNubh)}(hhh](h)}(hdevm_uio_register_deviceh]h)}(hdevm_uio_register_deviceh]j)}(hdevm_uio_register_deviceh]j)}(hjh]hdevm_uio_register_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKubah}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j`macroeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhj<hNhNubjG)}(h+``devm_uio_register_device (parent, info)``h]j)}(hjh]h'devm_uio_register_device (parent, info)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhj<hhubj;)}(h'Resource managed uio_register_device() h]jG)}(h&Resource managed uio_register_device()h]h&Resource managed uio_register_device()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjubah}(h]h ]h"]h$]h&]uh1j:hjhKhj<hhubjl)}(h**Parameters** ``parent`` parent device ``info`` UIO device capabilities **Description** returns zero on success or a negative error code.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjubj)}(hhh](j)}(h``parent`` parent device h](j)}(h ``parent``h]j)}(hjh]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjubj)}(hhh]jG)}(h parent deviceh]h parent device}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj,hKhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hKhjubj)}(h!``info`` UIO device capabilities h](j)}(h``info``h]j)}(hjPh]hinfo}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjJubj)}(hhh]jG)}(hUIO device capabilitiesh]hUIO device capabilities}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjehKhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjubjG)}(h1returns zero on success or a negative error code.h]h1returns zero on success or a negative error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhe/var/lib/git/docbuild/linux/Documentation/driver-api/infrastructure:101: ./include/linux/uio_driver.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj<hhhNhNubeh}(h]userspace-io-devicesah ]h"]userspace io devicesah$]h&]uh1hhhhhhhhK`ubeh}(h]device-drivers-infrastructureah ]h"]device drivers infrastructureah$]h&]uh1hhhhhhhhKubeh}(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_handlerjerror_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}nameids}(jjjUjUjޫj۫jEjBj9j6jju nametypes}(jjUjޫjEj9juh}(jhjUhhhj$j)jjjjjjj j j j j j j/ j4 jKjPjyj~j+j0jjjGjLjjjjj>jCjjjPjUjj jF jK jy"j~"j#j#j%j%j'j 'jM4jR4j7j7j8j8j:j:jt<jy<j>j?j@j@j%Bj*Bj/Cj5CjHjHjKjKj2Oj8OjPjPj۫jUjVjVj7Wj7jC7j:j:j>j>jAjAjDjDjFjFjIjIjPKjUKjMjMj!Oj&OjSjSjUjUjXjXj@ZjEZj<\jA\j]j]j_j_jbjbj;ej@ejfjfjOhjThjijijckjhkj]mjbmjaojfojpjpj tjtjyjyj|j|jjjtjyjdjijنjކjNjSjjjڍjߍjOjTj j%jؗjݗj6j;jҝjםjSjXjjjjjj jtjyjjjBjjjjjj˲jвjjjӻjػjwj|jjj6jHjejjjjjjjjjZj_jjjjjbjgjjjdjijjjj<jYj^jjjjjZj_jjjjjjj=jBjju 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] transformerN include_log] decorationNhhub.