sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget4/translations/zh_CN/driver-api/i3c/device-driver-apimodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget4/translations/zh_TW/driver-api/i3c/device-driver-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget4/translations/it_IT/driver-api/i3c/device-driver-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget4/translations/ja_JP/driver-api/i3c/device-driver-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget4/translations/ko_KR/driver-api/i3c/device-driver-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget4/translations/sp_SP/driver-api/i3c/device-driver-apimodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhN/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api.rsthKubhsection)}(hhh](htitle)}(hI3C device driver APIh]hI3C device driver API}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlei3c_error_code (C enum)c.i3c_error_codehNtauh1hhhhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhNubhdesc)}(hhh](hdesc_signature)}(hi3c_error_codeh]hdesc_signature_line)}(henum i3c_error_codeh](hdesc_sig_keyword)}(henumh]henum}(hhhhhNhNubah}(h]h ]kah"]h$]h&]uh1hhhhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1hhhhhhhhKubh desc_name)}(hi3c_error_codeh]h desc_sig_name)}(hhh]hi3c_error_code}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhhhhhhhKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1hsphinx_line_type declaratorhhhhhhhKubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1hhhhKhhhhubh desc_content)}(hhh]h paragraph)}(hI3C error codesh]hI3C error codes}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjChhubah}(h]h ]h"]h$]h&]uh1jAhhhhhhhKubeh}(h]h ](cenumeh"]h$]h&]domainj`objtypejadesctypejanoindex noindexentrynocontentsentryuh1hhhhhhhhNubh container)}(h**Constants** ``I3C_ERROR_UNKNOWN`` unknown error, usually means the error is not I3C related ``I3C_ERROR_M0`` M0 error ``I3C_ERROR_M1`` M1 error ``I3C_ERROR_M2`` M2 errorh](jG)}(h **Constants**h]hstrong)}(hjsh]h Constants}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjmubhdefinition_list)}(hhh](hdefinition_list_item)}(hP``I3C_ERROR_UNKNOWN`` unknown error, usually means the error is not I3C related h](hterm)}(h``I3C_ERROR_UNKNOWN``h]hliteral)}(hjh]hI3C_ERROR_UNKNOWN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjubh definition)}(hhh]jG)}(h9unknown error, usually means the error is not I3C relatedh]h9unknown error, usually means the error is not I3C related}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``I3C_ERROR_M0`` M0 error h](j)}(h``I3C_ERROR_M0``h]j)}(hjh]h I3C_ERROR_M0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjubj)}(hhh]jG)}(hM0 errorh]hM0 error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``I3C_ERROR_M1`` M1 error h](j)}(h``I3C_ERROR_M1``h]j)}(hjh]h I3C_ERROR_M1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhK!hj ubj)}(hhh]jG)}(hM1 errorh]hM1 error}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj&hK!hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hK!hjubj)}(h``I3C_ERROR_M2`` M2 errorh](j)}(h``I3C_ERROR_M2``h]j)}(hjJh]h I3C_ERROR_M2}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhK#hjDubj)}(hhh]jG)}(hM2 errorh]hM2 error}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhK$hj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hK#hjubeh}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhhhNubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhK'hhhhubjG)}(hXRThese are the standard error codes as defined by the I3C specification. When -EIO is returned by the i3c_device_do_priv_xfers() or i3c_device_send_hdr_cmds() one can check the error code in :c:type:`struct_i3c_priv_xfer.err ` or :c:type:`struct i3c_hdr_cmd `.err to get a better idea of what went wrong.h](hThese are the standard error codes as defined by the I3C specification. When -EIO is returned by the i3c_device_do_priv_xfers() or i3c_device_send_hdr_cmds() one can check the error code in }(hjhhhNhNubh)}(h9:c:type:`struct_i3c_priv_xfer.err `h]j)}(hjh]hstruct_i3c_priv_xfer.err}(hjhhhNhNubah}(h]h ](xrefj`c-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdoc driver-api/i3c/device-driver-api refdomainj`reftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sb reftargetstruct_i3c_priv_xferuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjubh or }(hjhhhNhNubh)}(h*:c:type:`struct i3c_hdr_cmd `h]j)}(hjh]hstruct i3c_hdr_cmd}(hjhhhNhNubah}(h]h ](jj`c-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainj`reftypetype refexplicitrefwarnjjj i3c_hdr_cmduh1hhjhKhjubh-.err to get a better idea of what went wrong.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhjhKhhhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌i3c_hdr_mode (C enum)c.i3c_hdr_modehNtauh1hhhhhhhhNubh)}(hhh](h)}(h i3c_hdr_modeh]h)}(henum i3c_hdr_modeh](h)}(hhh]henum}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhK$ubh)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj)hK$ubj)}(h i3c_hdr_modeh]j)}(hjh]h i3c_hdr_mode}(hj<hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj8ubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjhhhj)hK$ubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjhhhj)hK$ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj)hK$hjhhubjB)}(hhh]jG)}(h HDR mode idsh]h HDR mode ids}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhK*hj[hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj)hK$ubeh}(h]h ](j`enumeh"]h$]h&]jej`jfjvjgjvjhjijjuh1hhhhhhhhNubjl)}(ha**Constants** ``I3C_HDR_DDR`` DDR mode ``I3C_HDR_TSP`` TSP mode ``I3C_HDR_TSL`` TSL modeh](jG)}(h **Constants**h]jv)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhK.hjzubj)}(hhh](j)}(h``I3C_HDR_DDR`` DDR mode h](j)}(h``I3C_HDR_DDR``h]j)}(hjh]h I3C_HDR_DDR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhK1hjubj)}(hhh]jG)}(hDDR modeh]hDDR mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhK1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK1hjubj)}(h``I3C_HDR_TSP`` TSP mode h](j)}(h``I3C_HDR_TSP``h]j)}(hjh]h I3C_HDR_TSP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhK4hjubj)}(hhh]jG)}(hTSP modeh]hTSP mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhK4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK4hjubj)}(h``I3C_HDR_TSL`` TSL modeh](j)}(h``I3C_HDR_TSL``h]j)}(hjh]h I3C_HDR_TSL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhK6hj ubj)}(hhh]jG)}(hTSL modeh]hTSL mode}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhK7hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hK6hjubeh}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌i3c_priv_xfer (C struct)c.i3c_priv_xferhNtauh1hhhhhhhhNubh)}(hhh](h)}(h i3c_priv_xferh]h)}(hstruct i3c_priv_xferh](h)}(hstructh]hstruct}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjghhhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhK=ubh)}(h h]h }(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjghhhjyhK=ubj)}(h i3c_priv_xferh]j)}(hjeh]h i3c_priv_xfer}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjghhhjyhK=ubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjchhhjyhK=ubah}(h]j^ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjyhK=hj`hhubjB)}(hhh]jG)}(hI3C SDR private transferh]hI3C SDR private transfer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhK6hjhhubah}(h]h ]h"]h$]h&]uh1jAhj`hhhjyhK=ubeh}(h]h ](j`structeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhhhNubjl)}(hX\**Definition**:: struct i3c_priv_xfer { u8 rnw; u16 len; u16 actual_len; union { void *in; const void *out; } data; enum i3c_error_code err; }; **Members** ``rnw`` encodes the transfer direction. true for a read, false for a write ``len`` transfer length in bytes of the transfer ``actual_len`` actual length in bytes are transferred by the controller ``data`` input/output buffer ``data.in`` input buffer. Must point to a DMA-able buffer ``data.out`` output buffer. Must point to a DMA-able buffer ``err`` I3C error codeh](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhK:hjubh literal_block)}(hstruct i3c_priv_xfer { u8 rnw; u16 len; u16 actual_len; union { void *in; const void *out; } data; enum i3c_error_code err; };h]hstruct i3c_priv_xfer { u8 rnw; u16 len; u16 actual_len; union { void *in; const void *out; } data; enum i3c_error_code err; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhK=hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌i3c_dcr (C enum) c.i3c_dcrhNtauh1hhhhhhhhNubh)}(hhh](h)}(hi3c_dcrh]h)}(h enum i3c_dcrh](h)}(hhh]henum}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKDubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKDubj)}(hi3c_dcrh]j)}(hjh]hi3c_dcr}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjhhhjhKDubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjhhhjhKDubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKDhjhhubjB)}(hhh]jG)}(hI3C DCR valuesh]hI3C DCR values}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKKhj hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKDubeh}(h]h ](j`enumeh"]h$]h&]jej`jfj'jgj'jhjijjuh1hhhhhhhhNubjl)}(h>**Constants** ``I3C_DCR_GENERIC_DEVICE`` generic I3C deviceh](jG)}(h **Constants**h]jv)}(hj1h]h Constants}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKOhj+ubj)}(hhh]j)}(h-``I3C_DCR_GENERIC_DEVICE`` generic I3C deviceh](j)}(h``I3C_DCR_GENERIC_DEVICE``h]j)}(hjPh]hI3C_DCR_GENERIC_DEVICE}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKQhjJubj)}(hhh]jG)}(hgeneric I3C deviceh]hgeneric I3C device}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKRhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehKQhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌i3c_device_info (C struct)c.i3c_device_infohNtauh1hhhhhhhhNubh)}(hhh](h)}(hi3c_device_infoh]h)}(hstruct i3c_device_infoh](h)}(hjmh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKXubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKXubj)}(hi3c_device_infoh]j)}(hjh]hi3c_device_info}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjhhhjhKXubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjhhhjhKXubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKXhjhhubjB)}(hhh]jG)}(hI3C device informationh]hI3C device information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKdhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKXubeh}(h]h ](j`structeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhhhNubjl)}(hXM**Definition**:: struct i3c_device_info { u64 pid; u8 bcr; u8 dcr; u8 static_addr; u8 dyn_addr; u8 hdr_cap; u8 max_read_ds; u8 max_write_ds; u8 max_ibi_len; u32 max_read_turnaround; u16 max_read_len; u16 max_write_len; }; **Members** ``pid`` Provisioned ID ``bcr`` Bus Characteristic Register ``dcr`` Device Characteristic Register ``static_addr`` static/I2C address ``dyn_addr`` dynamic address ``hdr_cap`` supported HDR modes ``max_read_ds`` max read speed information ``max_write_ds`` max write speed information ``max_ibi_len`` max IBI payload length ``max_read_turnaround`` max read turn-around time in micro-seconds ``max_read_len`` max private SDR read length in bytes ``max_write_len`` max private SDR write length in bytesh](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&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhhjubj)}(hstruct i3c_device_info { u64 pid; u8 bcr; u8 dcr; u8 static_addr; u8 dyn_addr; u8 hdr_cap; u8 max_read_ds; u8 max_write_ds; u8 max_ibi_len; u32 max_read_turnaround; u16 max_read_len; u16 max_write_len; };h]hstruct i3c_device_info { u64 pid; u8 bcr; u8 dcr; u8 static_addr; u8 dyn_addr; u8 hdr_cap; u8 max_read_ds; u8 max_write_ds; u8 max_ibi_len; u32 max_read_turnaround; u16 max_read_len; u16 max_write_len; };}hj)sbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKjhjubjG)}(h **Members**h]jv)}(hj:h]hMembers}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKyhjubj)}(hhh](j)}(h``pid`` Provisioned ID h](j)}(h``pid``h]j)}(hjYh]hpid}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKfhjSubj)}(hhh]jG)}(hProvisioned IDh]hProvisioned ID}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjnhKfhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhKfhjPubj)}(h$``bcr`` Bus Characteristic Register h](j)}(h``bcr``h]j)}(hjh]hbcr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKghjubj)}(hhh]jG)}(hBus Characteristic Registerh]hBus Characteristic Register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKghjPubj)}(h'``dcr`` Device Characteristic Register h](j)}(h``dcr``h]j)}(hjh]hdcr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhhjubj)}(hhh]jG)}(hDevice Characteristic Registerh]hDevice Characteristic Register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhhjPubj)}(h#``static_addr`` static/I2C address h](j)}(h``static_addr``h]j)}(hj h]h static_addr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKihjubj)}(hhh]jG)}(hstatic/I2C addressh]hstatic/I2C address}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hKihj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKihjPubj)}(h``dyn_addr`` dynamic address h](j)}(h ``dyn_addr``h]j)}(hj= h]hdyn_addr}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj; ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKjhj7 ubj)}(hhh]jG)}(hdynamic addressh]hdynamic address}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjR hKjhjS ubah}(h]h ]h"]h$]h&]uh1jhj7 ubeh}(h]h ]h"]h$]h&]uh1jhjR hKjhjPubj)}(h ``hdr_cap`` supported HDR modes h](j)}(h ``hdr_cap``h]j)}(hjv h]hhdr_cap}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKkhjp ubj)}(hhh]jG)}(hsupported HDR modesh]hsupported HDR modes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hKkhj ubah}(h]h ]h"]h$]h&]uh1jhjp ubeh}(h]h ]h"]h$]h&]uh1jhj hKkhjPubj)}(h+``max_read_ds`` max read speed information h](j)}(h``max_read_ds``h]j)}(hj h]h max_read_ds}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKlhj ubj)}(hhh]jG)}(hmax read speed informationh]hmax read speed information}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hKlhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKlhjPubj)}(h-``max_write_ds`` max write speed information h](j)}(h``max_write_ds``h]j)}(hj h]h max_write_ds}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKmhj ubj)}(hhh]jG)}(hmax write speed informationh]hmax write speed information}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hKmhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKmhjPubj)}(h'``max_ibi_len`` max IBI payload length h](j)}(h``max_ibi_len``h]j)}(hj! h]h max_ibi_len}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKnhj ubj)}(hhh]jG)}(hmax IBI payload lengthh]hmax IBI payload length}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj6 hKnhj7 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj6 hKnhjPubj)}(hC``max_read_turnaround`` max read turn-around time in micro-seconds h](j)}(h``max_read_turnaround``h]j)}(hjZ h]hmax_read_turnaround}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKohjT ubj)}(hhh]jG)}(h*max read turn-around time in micro-secondsh]h*max read turn-around time in micro-seconds}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjo hKohjp ubah}(h]h ]h"]h$]h&]uh1jhjT ubeh}(h]h ]h"]h$]h&]uh1jhjo hKohjPubj)}(h6``max_read_len`` max private SDR read length in bytes h](j)}(h``max_read_len``h]j)}(hj h]h max_read_len}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKphj ubj)}(hhh]jG)}(h$max private SDR read length in bytesh]h$max private SDR read length in bytes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hKphj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKphjPubj)}(h7``max_write_len`` max private SDR write length in bytesh](j)}(h``max_write_len``h]j)}(hj h]h max_write_len}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKphj ubj)}(hhh]jG)}(h%max private SDR write length in bytesh]h%max private SDR write length in bytes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKqhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKphjPubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhhhNubjG)}(h**Description**h]jv)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKthhhhubjG)}(hX-These are all basic information that should be advertised by an I3C device. Some of them are optional depending on the device type and device capabilities. For each I3C slave attached to a master with i3c_master_add_i3c_dev_locked(), the core will send the relevant CCC command to retrieve these data.h]hX-These are all basic information that should be advertised by an I3C device. Some of them are optional depending on the device type and device capabilities. For each I3C slave attached to a master with i3c_master_add_i3c_dev_locked(), the core will send the relevant CCC command to retrieve these data.}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKrhhhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌i3c_driver (C struct) c.i3c_driverhNtauh1hhhhhhhhNubh)}(hhh](h)}(h i3c_driverh]h)}(hstruct i3c_driverh](h)}(hjmh]hstruct}(hjM hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjI hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhK|ubh)}(h h]h }(hj[ hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjI hhhjZ hK|ubj)}(h i3c_driverh]j)}(hjG h]h i3c_driver}(hjm hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhji ubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjI hhhjZ hK|ubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjE hhhjZ hK|ubah}(h]j@ ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjZ hK|hjB hhubjB)}(hhh]jG)}(hI3C device driverh]hI3C device driver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhj hhubah}(h]h ]h"]h$]h&]uh1jAhjB hhhjZ hK|ubeh}(h]h ](j`structeh"]h$]h&]jej`jfj jgj jhjijjuh1hhhhhhhhNubjl)}(hX**Definition**:: struct i3c_driver { struct device_driver driver; int (*probe)(struct i3c_device *dev); void (*remove)(struct i3c_device *dev); const struct i3c_device_id *id_table; }; **Members** ``driver`` inherit from device_driver ``probe`` I3C device probe method ``remove`` I3C device remove method ``id_table`` I3C device match table. Will be used by the framework to decide which device to bind to this driverh](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&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhj ubj)}(hstruct i3c_driver { struct device_driver driver; int (*probe)(struct i3c_device *dev); void (*remove)(struct i3c_device *dev); const struct i3c_device_id *id_table; };h]hstruct i3c_driver { struct device_driver driver; int (*probe)(struct i3c_device *dev); void (*remove)(struct i3c_device *dev); const struct i3c_device_id *id_table; };}hj sbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhj ubjG)}(h **Members**h]jv)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhj ubj)}(hhh](j)}(h&``driver`` inherit from device_driver h](j)}(h ``driver``h]j)}(hj h]hdriver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhj ubj)}(hhh]jG)}(hinherit from device_driverh]hinherit from device_driver}(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"``probe`` I3C device probe method h](j)}(h ``probe``h]j)}(hj5 h]hprobe}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3 ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhj/ ubj)}(hhh]jG)}(hI3C device probe methodh]hI3C device probe method}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjJ hKhjK ubah}(h]h ]h"]h$]h&]uh1jhj/ ubeh}(h]h ]h"]h$]h&]uh1jhjJ hKhj ubj)}(h$``remove`` I3C device remove method h](j)}(h ``remove``h]j)}(hjn h]hremove}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjh ubj)}(hhh]jG)}(hI3C device remove methodh]hI3C device remove method}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjh ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(hp``id_table`` I3C device match table. Will be used by the framework to decide which device to bind to this driverh](j)}(h ``id_table``h]j)}(hj h]hid_table}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhj ubj)}(hhh]jG)}(hcI3C device match table. Will be used by the framework to decide which device to bind to this driverh]hcI3C device match table. Will be used by the framework to decide which device to bind to this driver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hKhj 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&]uh1jkhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌dev_to_i3cdev (C macro)c.dev_to_i3cdevhNtauh1hhhhhhhhNubh)}(hhh](h)}(h dev_to_i3cdevh]h)}(h dev_to_i3cdevh]j)}(h dev_to_i3cdevh]j)}(hj h]h dev_to_i3cdev}(hj hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj ubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhj hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKubah}(h]h ]h"]h$]h&]hhj3uh1hj4j5hj 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`jfj0 jgj0 jhjijjuh1hhhhhhhhNubjG)}(h``dev_to_i3cdev (__dev)``h]j)}(hj6 h]hdev_to_i3cdev (__dev)}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4 ubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhhhhubh block_quote)}(h*Returns the I3C device containing **dev** h]jG)}(h)Returns the I3C device containing **dev**h](h"Returns the I3C device containing }(hjR hhhNhNubjv)}(h**dev**h]hdev}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjR ubeh}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjN ubah}(h]h ]h"]h$]h&]uh1jL hjn hKhhhhubjl)}(hY**Parameters** ``__dev`` device object **Return** a pointer to an I3C device object.h](jG)}(h**Parameters**h]jv)}(hj{ h]h Parameters}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjy ubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhju ubj)}(hhh]j)}(h``__dev`` device object h](j)}(h ``__dev``h]j)}(hj h]h__dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhj ubj)}(hhh]jG)}(h device objecth]h device object}(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&]uh1jhju ubjG)}(h **Return**h]jv)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhju ubjG)}(h"a pointer to an I3C device object.h]h"a pointer to an I3C device object.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhju ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌module_i3c_driver (C macro)c.module_i3c_driverhNtauh1hhhhhhhhNubh)}(hhh](h)}(hmodule_i3c_driverh]h)}(hmodule_i3c_driverh]j)}(hmodule_i3c_driverh]j)}(hjh]hmodule_i3c_driver}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKubah}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjhhhj1hKubah}(h]j ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj1hKhjhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhjhhhj1hKubeh}(h]h ](j`macroeh"]h$]h&]jej`jfjJjgjJjhjijjuh1hhhhhhhhNubjG)}(h``module_i3c_driver (__drv)``h]j)}(hjPh]hmodule_i3c_driver (__drv)}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhhhhubjM )}(h*Register a module providing an I3C driver h]jG)}(h)Register a module providing an I3C driverh]h)Register a module providing an I3C driver}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjfubah}(h]h ]h"]h$]h&]uh1jL hjxhKhhhhubjl)}(h**Parameters** ``__drv`` the I3C driver to register **Description** Provide generic init/exit functions that simply register/unregister an I3C driver. Should be used by any driver that does not require extra init/cleanup steps.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjubj)}(hhh]j)}(h%``__drv`` the I3C driver to register h](j)}(h ``__drv``h]j)}(hjh]h__drv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjubj)}(hhh]jG)}(hthe I3C driver to registerh]hthe I3C driver to register}(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&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjubjG)}(hProvide generic init/exit functions that simply register/unregister an I3C driver. Should be used by any driver that does not require extra init/cleanup steps.h]hProvide generic init/exit functions that simply register/unregister an I3C driver. Should be used by any driver that does not require extra init/cleanup steps.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌$i3c_i2c_driver_register (C function)c.i3c_i2c_driver_registerhNtauh1hhhhhhhhNubh)}(hhh](h)}(hRint i3c_i2c_driver_register (struct i3c_driver *i3cdrv, struct i2c_driver *i2cdrv)h]h)}(hQint i3c_i2c_driver_register(struct i3c_driver *i3cdrv, struct i2c_driver *i2cdrv)h](hdesc_sig_keyword_type)}(hinth]hint}(hj&hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j$hj hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKubh)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj hhhj5hKubj)}(hi3c_i2c_driver_registerh]j)}(hi3c_i2c_driver_registerh]hi3c_i2c_driver_register}(hjHhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjDubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhj hhhj5hKubhdesc_parameterlist)}(h6(struct i3c_driver *i3cdrv, struct i2c_driver *i2cdrv)h](hdesc_parameter)}(hstruct i3c_driver *i3cdrvh](h)}(hjmh]hstruct}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubh)}(h h]h }(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjdubh)}(hhh]j)}(h i3c_driverh]h i3c_driver}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftype identifier reftargetjmodnameN classnameNjj)}j]j ASTIdentifier)}jjJsbc.i3c_i2c_driver_registerasbuh1hhjdubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjdubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjdubj)}(hi3cdrvh]hi3cdrv}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhj^ubjc)}(hstruct i2c_driver *i2cdrvh](h)}(hjmh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h i2c_driverh]h i2c_driver}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetjmodnameN classnameNjj)}j]jc.i3c_i2c_driver_registerasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hi2cdrvh]hi2cdrv}(hj8hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhj^ubeh}(h]h ]h"]h$]h&]hhuh1j\hj hhhj5hKubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjhhhj5hKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj5hKhjhhubjB)}(hhh]jG)}(h!Register an i2c and an i3c driverh]h!Register an i2c and an i3c driver}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhj_hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj5hKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjzjgjzjhjijjuh1hhhhhhhhNubjl)}(hX**Parameters** ``struct i3c_driver *i3cdrv`` the I3C driver to register ``struct i2c_driver *i2cdrv`` the I2C driver to register **Description** This function registers both **i2cdev** and **i3cdev**, and fails if one of these registrations fails. This is mainly useful for devices that support both I2C and I3C modes. Note that when CONFIG_I3C is not enabled, this function only registers the I2C driver. **Return** 0 if both registrations succeeds, a negative error code otherwise.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhj~ubj)}(hhh](j)}(h9``struct i3c_driver *i3cdrv`` the I3C driver to register h](j)}(h``struct i3c_driver *i3cdrv``h]j)}(hjh]hstruct i3c_driver *i3cdrv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjubj)}(hhh]jG)}(hthe I3C driver to registerh]hthe I3C driver to register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h9``struct i2c_driver *i2cdrv`` the I2C driver to register h](j)}(h``struct i2c_driver *i2cdrv``h]j)}(hjh]hstruct i2c_driver *i2cdrv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhjubj)}(hhh]jG)}(hthe I2C driver to registerh]hthe I2C driver to register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(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&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhj~ubjG)}(hXThis function registers both **i2cdev** and **i3cdev**, and fails if one of these registrations fails. This is mainly useful for devices that support both I2C and I3C modes. Note that when CONFIG_I3C is not enabled, this function only registers the I2C driver.h](hThis function registers both }(hj-hhhNhNubjv)}(h **i2cdev**h]hi2cdev}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh and }(hj-hhhNhNubjv)}(h **i3cdev**h]hi3cdev}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubh, and fails if one of these registrations fails. This is mainly useful for devices that support both I2C and I3C modes. Note that when CONFIG_I3C is not enabled, this function only registers the I2C driver.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhj~ubjG)}(h **Return**h]jv)}(hjbh]hReturn}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhj~ubjG)}(hB0 if both registrations succeeds, a negative error code otherwise.h]hB0 if both registrations succeeds, a negative error code otherwise.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhKhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌&i3c_i2c_driver_unregister (C function)c.i3c_i2c_driver_unregisterhNtauh1hhhhhhhhNubh)}(hhh](h)}(hUvoid i3c_i2c_driver_unregister (struct i3c_driver *i3cdrv, struct i2c_driver *i2cdrv)h]h)}(hTvoid i3c_i2c_driver_unregister(struct i3c_driver *i3cdrv, struct i2c_driver *i2cdrv)h](j%)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j$hjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(hi3c_i2c_driver_unregisterh]j)}(hi3c_i2c_driver_unregisterh]hi3c_i2c_driver_unregister}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjhhhjhMubj])}(h6(struct i3c_driver *i3cdrv, struct i2c_driver *i2cdrv)h](jc)}(hstruct i3c_driver *i3cdrvh](h)}(hjmh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h i3c_driverh]h i3c_driver}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.i3c_i2c_driver_unregisterasbuh1hhjubh)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hi3cdrvh]hi3cdrv}(hj=hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhjubjc)}(hstruct i2c_driver *i2cdrvh](h)}(hjmh]hstruct}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubh)}(h h]h }(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjRubh)}(hhh]j)}(h i2c_driverh]h i2c_driver}(hjthhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetjvmodnameN classnameNjj)}j]jc.i3c_i2c_driver_unregisterasbuh1hhjRubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hi2cdrvh]hi2cdrv}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhjubeh}(h]h ]h"]h$]h&]hhuh1j\hjhhhjhMubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]jG)}(h#Unregister an i2c and an i3c driverh]h#Unregister an i2c and an i3c driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhhhNubjl)}(hX+**Parameters** ``struct i3c_driver *i3cdrv`` the I3C driver to register ``struct i2c_driver *i2cdrv`` the I2C driver to register **Description** This function unregisters both **i3cdrv** and **i2cdrv**. Note that when CONFIG_I3C is not enabled, this function only unregisters the **i2cdrv**.h](jG)}(h**Parameters**h]jv)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM hjubj)}(hhh](j)}(h9``struct i3c_driver *i3cdrv`` the I3C driver to register h](j)}(h``struct i3c_driver *i3cdrv``h]j)}(hjh]hstruct i3c_driver *i3cdrv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM hjubj)}(hhh]jG)}(hthe I3C driver to registerh]hthe I3C driver to register}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj-hM hj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hM hjubj)}(h9``struct i2c_driver *i2cdrv`` the I2C driver to register h](j)}(h``struct i2c_driver *i2cdrv``h]j)}(hjQh]hstruct i2c_driver *i2cdrv}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM hjKubj)}(hhh]jG)}(hthe I2C driver to registerh]hthe I2C driver to register}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjfhM hjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhM 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&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM hjubjG)}(hThis function unregisters both **i3cdrv** and **i2cdrv**. Note that when CONFIG_I3C is not enabled, this function only unregisters the **i2cdrv**.h](hThis function unregisters both }(hjhhhNhNubjv)}(h **i3cdrv**h]hi3cdrv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh and }(hjhhhNhNubjv)}(h **i2cdrv**h]hi2cdrv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhO. Note that when CONFIG_I3C is not enabled, this function only unregisters the }(hjhhhNhNubjv)}(h **i2cdrv**h]hi2cdrv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌module_i3c_i2c_driver (C macro)c.module_i3c_i2c_driverhNtauh1hhhhhhhhNubh)}(hhh](h)}(hmodule_i3c_i2c_driverh]h)}(hmodule_i3c_i2c_driverh]j)}(hmodule_i3c_i2c_driverh]j)}(hjh]hmodule_i3c_i2c_driver}(hj hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM&ubah}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjhhhjhM&ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM&hjhhubjB)}(hhh]h}(h]h ]h"]h$]h&]uh1jAhjhhhjhM&ubeh}(h]h ](j`macroeh"]h$]h&]jej`jfj7jgj7jhjijjuh1hhhhhhhhNubjG)}(h.``module_i3c_i2c_driver (__i3cdrv, __i2cdrv)``h]j)}(hj=h]h*module_i3c_i2c_driver (__i3cdrv, __i2cdrv)}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM(hhhhubjM )}(h5Register a module providing an I3C and an I2C driver h]jG)}(h4Register a module providing an I3C and an I2C driverh]h4Register a module providing an I3C and an I2C driver}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhMhjSubah}(h]h ]h"]h$]h&]uh1jL hjehMhhhhubjl)}(hX**Parameters** ``__i3cdrv`` the I3C driver to register ``__i2cdrv`` the I2C driver to register **Description** Provide generic init/exit functions that simply register/unregister an I3C and an I2C driver. This macro can be used even if CONFIG_I3C is disabled, in this case, only the I2C driver will be registered. Should be used by any driver that does not require extra init/cleanup steps.h](jG)}(h**Parameters**h]jv)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhMhjlubj)}(hhh](j)}(h(``__i3cdrv`` the I3C driver to register h](j)}(h ``__i3cdrv``h]j)}(hjh]h__i3cdrv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhMhjubj)}(hhh]jG)}(hthe I3C driver to registerh]hthe I3C driver to register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``__i2cdrv`` the I2C driver to register h](j)}(h ``__i2cdrv``h]j)}(hjh]h__i2cdrv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhMhjubj)}(hhh]jG)}(hthe I2C driver to registerh]hthe I2C driver 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&]uh1jhjlubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM hjlubjG)}(hXProvide generic init/exit functions that simply register/unregister an I3C and an I2C driver. This macro can be used even if CONFIG_I3C is disabled, in this case, only the I2C driver will be registered. Should be used by any driver that does not require extra init/cleanup steps.h]hXProvide generic init/exit functions that simply register/unregister an I3C and an I2C driver. This macro can be used even if CONFIG_I3C is disabled, in this case, only the I2C driver will be registered. Should be used by any driver that does not require extra init/cleanup steps.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌i3c_ibi_setup (C struct)c.i3c_ibi_setuphNtauh1hhhhhhhhNubh)}(hhh](h)}(h i3c_ibi_setuph]h)}(hstruct i3c_ibi_setuph](h)}(hjmh]hstruct}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM)ubh)}(h h]h }(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjFhhhjWhM)ubj)}(h i3c_ibi_setuph]j)}(hjDh]h i3c_ibi_setup}(hjjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjfubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjFhhhjWhM)ubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjBhhhjWhM)ubah}(h]j=ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjWhM)hj?hhubjB)}(hhh]jG)}(hIBI setup objecth]hIBI setup object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM:hjhhubah}(h]h ]h"]h$]h&]uh1jAhj?hhhjWhM)ubeh}(h]h ](j`structeh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhhhNubjl)}(hXZ**Definition**:: struct i3c_ibi_setup { unsigned int max_payload_len; unsigned int num_slots; void (*handler)(struct i3c_device *dev, const struct i3c_ibi_payload *payload); }; **Members** ``max_payload_len`` maximum length of the payload associated to an IBI. If one IBI appears to have a payload that is bigger than this number, the IBI will be rejected. ``num_slots`` number of pre-allocated IBI slots. This should be chosen so that the system never runs out of IBI slots, otherwise you'll lose IBIs. ``handler`` IBI handler, every time an IBI is received. This handler is called in a workqueue context. It is allowed to sleep and send new messages on the bus, though it's recommended to keep the processing done there as fast as possible to avoid delaying processing of other queued on the same workqueue.h](jG)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM>hjubj)}(hstruct i3c_ibi_setup { unsigned int max_payload_len; unsigned int num_slots; void (*handler)(struct i3c_device *dev, const struct i3c_ibi_payload *payload); };h]hstruct i3c_ibi_setup { unsigned int max_payload_len; unsigned int num_slots; void (*handler)(struct i3c_device *dev, const struct i3c_ibi_payload *payload); };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM@hjubjG)}(h **Members**h]jv)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhMFhjubj)}(hhh](j)}(h``max_payload_len`` maximum length of the payload associated to an IBI. If one IBI appears to have a payload that is bigger than this number, the IBI will be rejected. h](j)}(h``max_payload_len``h]j)}(hjh]hmax_payload_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM>hjubj)}(hhh]jG)}(hmaximum length of the payload associated to an IBI. If one IBI appears to have a payload that is bigger than this number, the IBI will be rejected.h]hmaximum length of the payload associated to an IBI. If one IBI appears to have a payload that is bigger than this number, the IBI will be rejected.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM>hjubj)}(h``num_slots`` number of pre-allocated IBI slots. This should be chosen so that the system never runs out of IBI slots, otherwise you'll lose IBIs. h](j)}(h ``num_slots``h]j)}(hj3h]h num_slots}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhMAhj-ubj)}(hhh]jG)}(hnumber of pre-allocated IBI slots. This should be chosen so that the system never runs out of IBI slots, otherwise you'll lose IBIs.h]hnumber of pre-allocated IBI slots. This should be chosen so that the system never runs out of IBI slots, otherwise you’ll lose IBIs.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhM?hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMAhjubj)}(hX1``handler`` IBI handler, every time an IBI is received. This handler is called in a workqueue context. It is allowed to sleep and send new messages on the bus, though it's recommended to keep the processing done there as fast as possible to avoid delaying processing of other queued on the same workqueue.h](j)}(h ``handler``h]j)}(hjmh]hhandler}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhMEhjgubj)}(hhh]jG)}(hX%IBI handler, every time an IBI is received. This handler is called in a workqueue context. It is allowed to sleep and send new messages on the bus, though it's recommended to keep the processing done there as fast as possible to avoid delaying processing of other queued on the same workqueue.h]hX'IBI handler, every time an IBI is received. This handler is called in a workqueue context. It is allowed to sleep and send new messages on the bus, though it’s recommended to keep the processing done there as fast as possible to avoid delaying processing of other queued on the same workqueue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhMBhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMEhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhhhNubjG)}(h**Description**h]jv)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhMIhhhhubjG)}(hTemporary structure used to pass information to i3c_device_request_ibi(). This object can be allocated on the stack since i3c_device_request_ibi() copies every bit of information and do not use it after i3c_device_request_ibi() has returned.h]hTemporary structure used to pass information to i3c_device_request_ibi(). This object can be allocated on the stack since i3c_device_request_ibi() copies every bit of information and do not use it after i3c_device_request_ibi() has returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:7: ./include/linux/i3c/device.hhMGhhhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌%i3c_device_do_priv_xfers (C function)c.i3c_device_do_priv_xfershNtauh1hhhhhhNhNubh)}(hhh](h)}(h^int i3c_device_do_priv_xfers (struct i3c_device *dev, struct i3c_priv_xfer *xfers, int nxfers)h]h)}(h]int i3c_device_do_priv_xfers(struct i3c_device *dev, struct i3c_priv_xfer *xfers, int nxfers)h](j%)}(hinth]hint}(hjhhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j$hjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chK#ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhK#ubj)}(hi3c_device_do_priv_xfersh]j)}(hi3c_device_do_priv_xfersh]hi3c_device_do_priv_xfers}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj ubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjhhhjhK#ubj])}(hA(struct i3c_device *dev, struct i3c_priv_xfer *xfers, int nxfers)h](jc)}(hstruct i3c_device *devh](h)}(hjmh]hstruct}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubh)}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubh)}(hhh]j)}(h i3c_deviceh]h i3c_device}(hjIhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetjKmodnameN classnameNjj)}j]j)}jjsbc.i3c_device_do_priv_xfersasbuh1hhj'ubh)}(h h]h }(hjihhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhj#ubjc)}(hstruct i3c_priv_xfer *xfersh](h)}(hjmh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h i3c_priv_xferh]h i3c_priv_xfer}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetjmodnameN classnameNjj)}j]jec.i3c_device_do_priv_xfersasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hxfersh]hxfers}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhj#ubjc)}(h int nxfersh](j%)}(hinth]hint}(hj hhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j$hj ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj)}(hnxfersh]hnxfers}(hj)hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhj#ubeh}(h]h ]h"]h$]h&]hhuh1j\hjhhhjhK#ubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjhhhjhK#ubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhK#hjhhubjB)}(hhh]jG)}(h:do I3C SDR private transfers directed to a specific deviceh]h:do I3C SDR private transfers directed to a specific device}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjPhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhK#ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjkjgjkjhjijjuh1hhhhhhNhNubjl)}(hX**Parameters** ``struct i3c_device *dev`` device with which the transfers should be done ``struct i3c_priv_xfer *xfers`` array of transfers ``int nxfers`` number of transfers **Description** Initiate one or several private SDR transfers with **dev**. This function can sleep and thus cannot be called in atomic context. **Return** 0 in case of success, a negative error core otherwise. -EAGAIN: controller lost address arbitration. Target (IBI, HJ or controller role request) win the bus. Client driver needs to resend the 'xfers' some time later. See I3C spec ver 1.1.1 09-Jun-2021. Section: 5.1.2.2.3.h](jG)}(h**Parameters**h]jv)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjoubj)}(hhh](j)}(hJ``struct i3c_device *dev`` device with which the transfers should be done h](j)}(h``struct i3c_device *dev``h]j)}(hjh]hstruct i3c_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjubj)}(hhh]jG)}(h.device with which the transfers should be doneh]h.device with which the transfers should be done}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h3``struct i3c_priv_xfer *xfers`` array of transfers h](j)}(h``struct i3c_priv_xfer *xfers``h]j)}(hjh]hstruct i3c_priv_xfer *xfers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjubj)}(hhh]jG)}(harray of transfersh]harray of transfers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h#``int nxfers`` number of transfers h](j)}(h``int nxfers``h]j)}(hjh]h int nxfers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjubj)}(hhh]jG)}(hnumber of transfersh]hnumber of transfers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjoubjG)}(h**Description**h]jv)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjoubjG)}(h;Initiate one or several private SDR transfers with **dev**.h](h3Initiate one or several private SDR transfers with }(hjWhhhNhNubjv)}(h**dev**h]hdev}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubh.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjoubjG)}(hDThis function can sleep and thus cannot be called in atomic context.h]hDThis function can sleep and thus cannot be called in atomic context.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjoubjG)}(h **Return**h]jv)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjoubj)}(hhh]j)}(hX+0 in case of success, a negative error core otherwise. -EAGAIN: controller lost address arbitration. Target (IBI, HJ or controller role request) win the bus. Client driver needs to resend the 'xfers' some time later. See I3C spec ver 1.1.1 09-Jun-2021. Section: 5.1.2.2.3.h](j)}(h60 in case of success, a negative error core otherwise.h]h60 in case of success, a negative error core otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chK hjubj)}(hhh]j)}(hhh]j)}(h-EAGAIN: controller lost address arbitration. Target (IBI, HJ or controller role request) win the bus. Client driver needs to resend the 'xfers' some time later. See I3C spec ver 1.1.1 09-Jun-2021. Section: 5.1.2.2.3.h](j)}(h4-EAGAIN: controller lost address arbitration. Targeth]h4-EAGAIN: controller lost address arbitration. Target}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhK hjubj)}(hhh]jG)}(h(IBI, HJ or controller role request) win the bus. Client driver needs to resend the 'xfers' some time later. See I3C spec ver 1.1.1 09-Jun-2021. Section: 5.1.2.2.3.h]h(IBI, HJ or controller role request) win the bus. Client driver needs to resend the ‘xfers’ some time later. See I3C spec ver 1.1.1 09-Jun-2021. Section: 5.1.2.2.3.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK hjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK hjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌"i3c_device_do_setdasa (C function)c.i3c_device_do_setdasahNtauh1hhhhhhNhNubh)}(hhh](h)}(h2int i3c_device_do_setdasa (struct i3c_device *dev)h]h)}(h1int i3c_device_do_setdasa(struct i3c_device *dev)h](j%)}(hinth]hint}(hj#hhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j$hjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKAubh)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj1hKAubj)}(hi3c_device_do_setdasah]j)}(hi3c_device_do_setdasah]hi3c_device_do_setdasa}(hjDhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj@ubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjhhhj1hKAubj])}(h(struct i3c_device *dev)h]jc)}(hstruct i3c_device *devh](h)}(hjmh]hstruct}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubh)}(h h]h }(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj\ubh)}(hhh]j)}(h i3c_deviceh]h i3c_device}(hj~hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetjmodnameN classnameNjj)}j]j)}jjFsbc.i3c_device_do_setdasaasbuh1hhj\ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj\ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhjXubah}(h]h ]h"]h$]h&]hhuh1j\hjhhhj1hKAubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjhhhj1hKAubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj1hKAhjhhubjB)}(hhh]jG)}(h6do I3C dynamic address assignement with static addressh]h6do I3C dynamic address assignement with static address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chK:hjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj1hKAubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhNhNubjl)}(h**Parameters** ``struct i3c_device *dev`` device with which the DAA should be done **Return** 0 in case of success, a negative error core otherwise.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/i3c/device-driver-api:9: ./drivers/i3c/device.chK>hjubj)}(hhh]j)}(hD``struct i3c_device *dev`` device with which the DAA should be done h](j)}(h``struct i3c_device *dev``h]j)}(hj$h]hstruct i3c_device *dev}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chK=hjubj)}(hhh]jG)}(h(device with which the DAA should be doneh]h(device with which the DAA should be done}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj9hK=hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hK=hjubah}(h]h ]h"]h$]h&]uh1jhjubjG)}(h **Return**h]jv)}(hj_h]hReturn}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chK?hjubjG)}(h60 in case of success, a negative error core otherwise.h]h60 in case of success, a negative error core otherwise.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chK?hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌ i3c_device_get_info (C function)c.i3c_device_get_infohNtauh1hhhhhhNhNubh)}(hhh](h)}(hUvoid i3c_device_get_info (const struct i3c_device *dev, struct i3c_device_info *info)h]h)}(hTvoid i3c_device_get_info(const struct i3c_device *dev, struct i3c_device_info *info)h](j%)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j$hjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKUubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKUubj)}(hi3c_device_get_infoh]j)}(hi3c_device_get_infoh]hi3c_device_get_info}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjhhhjhKUubj])}(h<(const struct i3c_device *dev, struct i3c_device_info *info)h](jc)}(hconst struct i3c_device *devh](h)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hjmh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h i3c_deviceh]h i3c_device}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.i3c_device_get_infoasbuh1hhjubh)}(h h]h }(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjVhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhjubjc)}(hstruct i3c_device_info *infoh](h)}(hjmh]hstruct}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubh)}(h h]h }(hj|hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkubh)}(hhh]j)}(hi3c_device_infoh]hi3c_device_info}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetjmodnameN classnameNjj)}j]j7c.i3c_device_get_infoasbuh1hhjkubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hinfoh]hinfo}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhjubeh}(h]h ]h"]h$]h&]hhuh1j\hjhhhjhKUubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjhhhjhKUubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKUhjhhubjB)}(hhh]jG)}(hget I3C device informationh]hget I3C device information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKNhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKUubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhNhNubjl)}(h**Parameters** ``const struct i3c_device *dev`` device we want information on ``struct i3c_device_info *info`` the information object to fill in **Description** Retrieve I3C dev info.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/i3c/device-driver-api:9: ./drivers/i3c/device.chKRhj ubj)}(hhh](j)}(h?``const struct i3c_device *dev`` device we want information on h](j)}(h ``const struct i3c_device *dev``h]j)}(hj1h]hconst struct i3c_device *dev}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKPhj+ubj)}(hhh]jG)}(hdevice we want information onh]hdevice we want information on}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjFhKPhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhKPhj(ubj)}(hC``struct i3c_device_info *info`` the information object to fill in h](j)}(h ``struct i3c_device_info *info``h]j)}(hjjh]hstruct i3c_device_info *info}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKQhjdubj)}(hhh]jG)}(h!the information object to fill inh]h!the information object to fill in}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKQhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhKQhj(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&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKShj ubjG)}(hRetrieve I3C dev info.h]hRetrieve I3C dev info.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKShj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌#i3c_device_disable_ibi (C function)c.i3c_device_disable_ibihNtauh1hhhhhhNhNubh)}(hhh](h)}(h3int i3c_device_disable_ibi (struct i3c_device *dev)h]h)}(h2int i3c_device_disable_ibi(struct i3c_device *dev)h](j%)}(hinth]hint}(hjhhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j$hjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKkubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKkubj)}(hi3c_device_disable_ibih]j)}(hi3c_device_disable_ibih]hi3c_device_disable_ibi}(hj hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjhhhjhKkubj])}(h(struct i3c_device *dev)h]jc)}(hstruct i3c_device *devh](h)}(hjmh]hstruct}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubh)}(h h]h }(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#ubh)}(hhh]j)}(h i3c_deviceh]h i3c_device}(hjEhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetjGmodnameN classnameNjj)}j]j)}jj sbc.i3c_device_disable_ibiasbuh1hhj#ubh)}(h h]h }(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#ubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhjubah}(h]h ]h"]h$]h&]hhuh1j\hjhhhjhKkubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjhhhjhKkubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKkhjhhubjB)}(hhh]jG)}(h*Disable IBIs coming from a specific deviceh]h*Disable IBIs coming from a specific device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKchjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKkubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjjgjjhjijjuh1hhhhhhNhNubjl)}(hX**Parameters** ``struct i3c_device *dev`` device on which IBIs should be disabled **Description** This function disable IBIs coming from a specific device and wait for all pending IBIs to be processed. **Return** 0 in case of success, a negative error core otherwise.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/i3c/device-driver-api:9: ./drivers/i3c/device.chKghjubj)}(hhh]j)}(hC``struct i3c_device *dev`` device on which IBIs should be disabled h](j)}(h``struct i3c_device *dev``h]j)}(hjh]hstruct i3c_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKdhjubj)}(hhh]jG)}(h'device on which IBIs should be disabledh]h'device on which IBIs should be disabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjhKdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKdhjubah}(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&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKfhjubjG)}(hgThis function disable IBIs coming from a specific device and wait for all pending IBIs to be processed.h]hgThis function disable IBIs coming from a specific device and wait for all pending IBIs to be processed.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKfhjubjG)}(h **Return**h]jv)}(hjMh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKihjubjG)}(h60 in case of success, a negative error core otherwise.h]h60 in case of success, a negative error core otherwise.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKihjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌"i3c_device_enable_ibi (C function)c.i3c_device_enable_ibihNtauh1hhhhhhNhNubh)}(hhh](h)}(h2int i3c_device_enable_ibi (struct i3c_device *dev)h]h)}(h1int i3c_device_enable_ibi(struct i3c_device *dev)h](j%)}(hinth]hint}(hjhhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j$hjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj)}(hi3c_device_enable_ibih]j)}(hi3c_device_enable_ibih]hi3c_device_enable_ibi}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjhhhjhKubj])}(h(struct i3c_device *dev)h]jc)}(hstruct i3c_device *devh](h)}(hjmh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h i3c_deviceh]h i3c_device}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.i3c_device_enable_ibiasbuh1hhjubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hj( hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhjubah}(h]h ]h"]h$]h&]hhuh1j\hjhhhjhKubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]jG)}(h)Enable IBIs coming from a specific deviceh]h)Enable IBIs coming from a specific device}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chK|hjO hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfjj jgjj jhjijjuh1hhhhhhNhNubjl)}(hX**Parameters** ``struct i3c_device *dev`` device on which IBIs should be enabled **Description** This function enable IBIs coming from a specific device and wait for all pending IBIs to be processed. This should be called on a device where i3c_device_request_ibi() has succeeded. Note that IBIs from this device might be received before this function returns to its caller. **Return** 0 in case of success, a negative error core otherwise.h](jG)}(h**Parameters**h]jv)}(hjt h]h Parameters}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjr ubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjn ubj)}(hhh]j)}(hB``struct i3c_device *dev`` device on which IBIs should be enabled h](j)}(h``struct i3c_device *dev``h]j)}(hj h]hstruct i3c_device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chK}hj ubj)}(hhh]jG)}(h&device on which IBIs should be enabledh]h&device on which IBIs should be enabled}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj hK}hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK}hj ubah}(h]h ]h"]h$]h&]uh1jhjn ubjG)}(h**Description**h]jv)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjn ubjG)}(hThis function enable IBIs coming from a specific device and wait for all pending IBIs to be processed. This should be called on a device where i3c_device_request_ibi() has succeeded.h]hThis function enable IBIs coming from a specific device and wait for all pending IBIs to be processed. This should be called on a device where i3c_device_request_ibi() has succeeded.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjn ubjG)}(h]Note that IBIs from this device might be received before this function returns to its caller.h]h]Note that IBIs from this device might be received before this function returns to its caller.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjn ubjG)}(h **Return**h]jv)}(hj!h]hReturn}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!ubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjn ubjG)}(h60 in case of success, a negative error core otherwise.h]h60 in case of success, a negative error core otherwise.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjn ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌#i3c_device_request_ibi (C function)c.i3c_device_request_ibihNtauh1hhhhhhNhNubh)}(hhh](h)}(hTint i3c_device_request_ibi (struct i3c_device *dev, const struct i3c_ibi_setup *req)h]h)}(hSint i3c_device_request_ibi(struct i3c_device *dev, const struct i3c_ibi_setup *req)h](j%)}(hinth]hint}(hjI!hhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j$hjE!hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKubh)}(h h]h }(hjX!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjE!hhhjW!hKubj)}(hi3c_device_request_ibih]j)}(hi3c_device_request_ibih]hi3c_device_request_ibi}(hjj!hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjf!ubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjE!hhhjW!hKubj])}(h9(struct i3c_device *dev, const struct i3c_ibi_setup *req)h](jc)}(hstruct i3c_device *devh](h)}(hjmh]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 i3c_deviceh]h i3c_device}(hj!hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetj!modnameN classnameNjj)}j]j)}jjl!sbc.i3c_device_request_ibiasbuh1hhj!ubh)}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!ubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hdevh]hdev}(hj!hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhj~!ubjc)}(hconst struct i3c_ibi_setup *reqh](h)}(hjh]hconst}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubh)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!ubh)}(hjmh]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 i3c_ibi_setuph]h i3c_ibi_setup}(hj1"hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj."ubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetj3"modnameN classnameNjj)}j]j!c.i3c_device_request_ibiasbuh1hhj!ubh)}(h h]h }(hjO"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!ubj)}(hjh]h*}(hj]"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hreqh]hreq}(hjj"hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhj~!ubeh}(h]h ]h"]h$]h&]hhuh1j\hjE!hhhjW!hKubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hjA!hhhjW!hKubah}(h]jj?)j@huh1hhjW!hKhj>!hhubjB)}(hhh]jG)}(hRequest an IBIh]hRequest an IBI}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj"hhubah}(h]h ]h"]h$]h&]uh1jAhj>!hhhjW!hKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj"jgj"jhjijjuh1hhhhhhNhNubjl)}(hX**Parameters** ``struct i3c_device *dev`` device for which we should enable IBIs ``const struct i3c_ibi_setup *req`` setup requested for this IBI **Description** This function is responsible for pre-allocating all resources needed to process IBIs coming from **dev**. When this function returns, the IBI is not enabled until i3c_device_enable_ibi() is called. **Return** 0 in case of success, a negative error core otherwise.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/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj"ubj)}(hhh](j)}(hB``struct i3c_device *dev`` device for which we should enable IBIs h](j)}(h``struct i3c_device *dev``h]j)}(hj"h]hstruct i3c_device *dev}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj"ubj)}(hhh]jG)}(h&device for which we should enable IBIsh]h&device for which we should enable IBIs}(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)}(hA``const struct i3c_ibi_setup *req`` setup requested for this IBI h](j)}(h#``const struct i3c_ibi_setup *req``h]j)}(hj#h]hconst struct i3c_ibi_setup *req}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj #ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj#ubj)}(hhh]jG)}(hsetup requested for this IBIh]hsetup requested for this IBI}(hj'#hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj##hKhj$#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj##hKhj"ubeh}(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&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj"ubjG)}(hThis function is responsible for pre-allocating all resources needed to process IBIs coming from **dev**. When this function returns, the IBI is not enabled until i3c_device_enable_ibi() is called.h](haThis function is responsible for pre-allocating all resources needed to process IBIs coming from }(hj_#hhhNhNubjv)}(h**dev**h]hdev}(hjg#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_#ubh]. When this function returns, the IBI is not enabled until i3c_device_enable_ibi() is called.}(hj_#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj"ubjG)}(h **Return**h]jv)}(hj#h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj"ubjG)}(h60 in case of success, a negative error core otherwise.h]h60 in case of success, a negative error core otherwise.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌ i3c_device_free_ibi (C function)c.i3c_device_free_ibihNtauh1hhhhhhNhNubh)}(hhh](h)}(h1void i3c_device_free_ibi (struct i3c_device *dev)h]h)}(h0void i3c_device_free_ibi(struct i3c_device *dev)h](j%)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j$hj#hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKubh)}(h h]h }(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#hhhj#hKubj)}(hi3c_device_free_ibih]j)}(hi3c_device_free_ibih]hi3c_device_free_ibi}(hj#hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj#ubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhj#hhhj#hKubj])}(h(struct i3c_device *dev)h]jc)}(hstruct i3c_device *devh](h)}(hjmh]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 i3c_deviceh]h i3c_device}(hj"$hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetj$$modnameN classnameNjj)}j]j)}jj#sbc.i3c_device_free_ibiasbuh1hhj$ubh)}(h h]h }(hjB$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj$ubj)}(hjh]h*}(hjP$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hdevh]hdev}(hj]$hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhj#ubah}(h]h ]h"]h$]h&]hhuh1j\hj#hhhj#hKubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hj#hhhj#hKubah}(h]j#ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj#hKhj#hhubjB)}(hhh]jG)}(h*Free all resources needed for IBI handlingh]h*Free all resources needed for IBI handling}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj$hhubah}(h]h ]h"]h$]h&]uh1jAhj#hhhj#hKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj$jgj$jhjijjuh1hhhhhhNhNubjl)}(hX#**Parameters** ``struct i3c_device *dev`` device on which you want to release IBI resources **Description** This function is responsible for de-allocating resources previously allocated by i3c_device_request_ibi(). It should be called after disabling IBIs with i3c_device_disable_ibi().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/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj$ubj)}(hhh]j)}(hM``struct i3c_device *dev`` device on which you want to release IBI resources h](j)}(h``struct i3c_device *dev``h]j)}(hj$h]hstruct i3c_device *dev}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj$ubj)}(hhh]jG)}(h1device on which you want to release IBI resourcesh]h1device on which you want to release IBI resources}(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&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj$ubjG)}(hThis function is responsible for de-allocating resources previously allocated by i3c_device_request_ibi(). It should be called after disabling IBIs with i3c_device_disable_ibi().h]hThis function is responsible for de-allocating resources previously allocated by i3c_device_request_ibi(). It should be called after disabling IBIs with i3c_device_disable_ibi().}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌i3cdev_to_dev (C function)c.i3cdev_to_devhNtauh1hhhhhhNhNubh)}(hhh](h)}(h9struct device * i3cdev_to_dev (struct i3c_device *i3cdev)h]h)}(h7struct device *i3cdev_to_dev(struct i3c_device *i3cdev)h](h)}(hjmh]hstruct}(hjH%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjD%hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKubh)}(h h]h }(hjV%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjD%hhhjU%hKubh)}(hhh]j)}(hdeviceh]hdevice}(hjg%hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjd%ubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetji%modnameN classnameNjj)}j]j)}j i3cdev_to_devsbc.i3cdev_to_devasbuh1hhjD%hhhjU%hKubh)}(h h]h }(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjD%hhhjU%hKubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD%hhhjU%hKubj)}(h i3cdev_to_devh]j)}(hj%h]h i3cdev_to_dev}(hj%hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj%ubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhjD%hhhjU%hKubj])}(h(struct i3c_device *i3cdev)h]jc)}(hstruct i3c_device *i3cdevh](h)}(hjmh]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 i3c_deviceh]h i3c_device}(hj%hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetj%modnameN classnameNjj)}j]j%c.i3cdev_to_devasbuh1hhj%ubh)}(h h]h }(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj%ubj)}(hjh]h*}(hj &hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hi3cdevh]hi3cdev}(hj&hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhj%ubah}(h]h ]h"]h$]h&]hhuh1j\hjD%hhhjU%hKubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hj@%hhhjU%hKubah}(h]j;%ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjU%hKhj=%hhubjB)}(hhh]jG)}(h)Returns the device embedded in **i3cdev**h](hReturns the device embedded in }(hjC&hhhNhNubjv)}(h **i3cdev**h]hi3cdev}(hjK&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjC&ubeh}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj@&hhubah}(h]h ]h"]h$]h&]uh1jAhj=%hhhjU%hKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfji&jgji&jhjijjuh1hhhhhhNhNubjl)}(he**Parameters** ``struct i3c_device *i3cdev`` I3C device **Return** a pointer to a device object.h](jG)}(h**Parameters**h]jv)}(hjs&h]h Parameters}(hju&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjq&ubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjm&ubj)}(hhh]j)}(h)``struct i3c_device *i3cdev`` I3C device h](j)}(h``struct i3c_device *i3cdev``h]j)}(hj&h]hstruct i3c_device *i3cdev}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj&ubj)}(hhh]jG)}(h I3C deviceh]h I3C 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&ubah}(h]h ]h"]h$]h&]uh1jhjm&ubjG)}(h **Return**h]jv)}(hj&h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjm&ubjG)}(ha pointer to a device object.h]ha pointer to a device object.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhjm&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌ i3c_device_match_id (C function)c.i3c_device_match_idhNtauh1hhhhhhNhNubh)}(hhh](h)}(hrconst struct i3c_device_id * i3c_device_match_id (struct i3c_device *i3cdev, const struct i3c_device_id *id_table)h]h)}(hpconst struct i3c_device_id *i3c_device_match_id(struct i3c_device *i3cdev, const struct i3c_device_id *id_table)h](h)}(hjh]hconst}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKubh)}(h h]h }(hj 'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'hhhj'hKubh)}(hjmh]hstruct}(hj.'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'hhhj'hKubh)}(h h]h }(hj;'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'hhhj'hKubh)}(hhh]j)}(h i3c_device_idh]h i3c_device_id}(hjL'hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjI'ubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetjN'modnameN classnameNjj)}j]j)}ji3c_device_match_idsbc.i3c_device_match_idasbuh1hhj'hhhj'hKubh)}(h h]h }(hjm'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'hhhj'hKubj)}(hjh]h*}(hj{'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj'hKubj)}(hi3c_device_match_idh]j)}(hjj'h]hi3c_device_match_id}(hj'hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj'ubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhj'hhhj'hKubj])}(hA(struct i3c_device *i3cdev, const struct i3c_device_id *id_table)h](jc)}(hstruct i3c_device *i3cdevh](h)}(hjmh]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 i3c_deviceh]h i3c_device}(hj'hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetj'modnameN classnameNjj)}j]jh'c.i3c_device_match_idasbuh1hhj'ubh)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hi3cdevh]hi3cdev}(hj'hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhj'ubjc)}(h$const struct i3c_device_id *id_tableh](h)}(hjh]hconst}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubh)}(h h]h }(hj$(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj(ubh)}(hjmh]hstruct}(hj2(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubh)}(h h]h }(hj?(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj(ubh)}(hhh]j)}(h i3c_device_idh]h i3c_device_id}(hjP(hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjM(ubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetjR(modnameN classnameNjj)}j]jh'c.i3c_device_match_idasbuh1hhj(ubh)}(h h]h }(hjn(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj(ubj)}(hjh]h*}(hj|(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hid_tableh]hid_table}(hj(hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$~B]h&]noemphhhuh1jbhj'ubeh}(h]h ]h"]h$]h&]hhuh1j\hj'hhhj'hKubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hj 'hhhj'hKubah}(h]j'ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj'hKhj'hhubjB)}(hhh]jG)}(h3Returns the i3c_device_id entry matching **i3cdev**h](h)Returns the i3c_device_id entry matching }(hj(hhhNhNubjv)}(h **i3cdev**h]hi3cdev}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubeh}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj(hhubah}(h]h ]h"]h$]h&]uh1jAhj'hhhj'hKubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj(jgj(jhjijjuh1hhhhhhNhNubjl)}(h**Parameters** ``struct i3c_device *i3cdev`` I3C device ``const struct i3c_device_id *id_table`` I3C device match table **Return** a pointer to an i3c_device_id object or NULL if there's no 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/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj(ubj)}(hhh](j)}(h)``struct i3c_device *i3cdev`` I3C device h](j)}(h``struct i3c_device *i3cdev``h]j)}(hj)h]hstruct i3c_device *i3cdev}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj(ubj)}(hhh]jG)}(h I3C deviceh]h I3C 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@``const struct i3c_device_id *id_table`` I3C device match table h](j)}(h(``const struct i3c_device_id *id_table``h]j)}(hj;)h]h$const struct i3c_device_id *id_table}(hj=)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9)ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj5)ubj)}(hhh]jG)}(hI3C device match tableh]hI3C device match table}(hjT)hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjP)hKhjQ)ubah}(h]h ]h"]h$]h&]uh1jhj5)ubeh}(h]h ]h"]h$]h&]uh1jhjP)hKhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(ubjG)}(h **Return**h]jv)}(hjv)h]hReturn}(hjx)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjt)ubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj(ubjG)}(hAa pointer to an i3c_device_id object or NULL if there's no match.h]hCa pointer to an i3c_device_id object or NULL if there’s no match.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chKhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌+i3c_driver_register_with_owner (C function) c.i3c_driver_register_with_ownerhNtauh1hhhhhhNhNubh)}(hhh](h)}(hQint i3c_driver_register_with_owner (struct i3c_driver *drv, struct module *owner)h]h)}(hPint i3c_driver_register_with_owner(struct i3c_driver *drv, struct module *owner)h](j%)}(hinth]hint}(hj)hhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j$hj)hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chMubh)}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj)hhhj)hMubj)}(hi3c_driver_register_with_ownerh]j)}(hi3c_driver_register_with_ownerh]hi3c_driver_register_with_owner}(hj)hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj)ubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhj)hhhj)hMubj])}(h.(struct i3c_driver *drv, struct module *owner)h](jc)}(hstruct i3c_driver *drvh](h)}(hjmh]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 i3c_driverh]h i3c_driver}(hj*hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetj*modnameN classnameNjj)}j]j)}jj)sb c.i3c_driver_register_with_ownerasbuh1hhj)ubh)}(h h]h }(hj6*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj)ubj)}(hjh]h*}(hjD*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hdrvh]hdrv}(hjQ*hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhj)ubjc)}(hstruct module *ownerh](h)}(hjmh]hstruct}(hjj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjf*ubh)}(h h]h }(hjw*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjf*ubh)}(hhh]j)}(hmoduleh]hmodule}(hj*hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetj*modnameN classnameNjj)}j]j2* c.i3c_driver_register_with_ownerasbuh1hhjf*ubh)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjf*ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf*ubj)}(hownerh]howner}(hj*hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjf*ubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhj)ubeh}(h]h ]h"]h$]h&]hhuh1j\hj)hhhj)hMubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hj)hhhj)hMubah}(h]j)ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj)hMhj)hhubjB)}(hhh]jG)}(hregister an I3C device driverh]hregister an I3C device driver}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chMhj*hhubah}(h]h ]h"]h$]h&]uh1jAhj)hhhj)hMubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj+jgj+jhjijjuh1hhhhhhNhNubjl)}(h**Parameters** ``struct i3c_driver *drv`` driver to register ``struct module *owner`` module that owns this driver **Description** Register **drv** to the core. **Return** 0 in case of success, a negative error core otherwise.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/i3c/device-driver-api:9: ./drivers/i3c/device.chM hj+ubj)}(hhh](j)}(h.``struct i3c_driver *drv`` driver to register h](j)}(h``struct i3c_driver *drv``h]j)}(hj,+h]hstruct i3c_driver *drv}(hj.+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*+ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chM hj&+ubj)}(hhh]jG)}(hdriver to registerh]hdriver to register}(hjE+hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjA+hM hjB+ubah}(h]h ]h"]h$]h&]uh1jhj&+ubeh}(h]h ]h"]h$]h&]uh1jhjA+hM hj#+ubj)}(h6``struct module *owner`` module that owns this driver h](j)}(h``struct module *owner``h]j)}(hje+h]hstruct module *owner}(hjg+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc+ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chM hj_+ubj)}(hhh]jG)}(hmodule that owns this driverh]hmodule that owns this driver}(hj~+hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjz+hM hj{+ubah}(h]h ]h"]h$]h&]uh1jhj_+ubeh}(h]h ]h"]h$]h&]uh1jhjz+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&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chM hj+ubjG)}(hRegister **drv** to the core.h](h Register }(hj+hhhNhNubjv)}(h**drv**h]hdrv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh to the core.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chM hj+ubjG)}(h **Return**h]jv)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chMhj+ubjG)}(h60 in case of success, a negative error core otherwise.h]h60 in case of success, a negative error core otherwise.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chMhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h֌"i3c_driver_unregister (C function)c.i3c_driver_unregisterhNtauh1hhhhhhNhNubh)}(hhh](h)}(h3void i3c_driver_unregister (struct i3c_driver *drv)h]h)}(h2void i3c_driver_unregister(struct i3c_driver *drv)h](j%)}(hvoidh]hvoid}(hj,hhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j$hj,hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chM%ubh)}(h h]h }(hj-,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj,hhhj,,hM%ubj)}(hi3c_driver_unregisterh]j)}(hi3c_driver_unregisterh]hi3c_driver_unregister}(hj?,hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhj;,ubah}(h]h ](j(j)eh"]h$]h&]hhuh1jhj,hhhj,,hM%ubj])}(h(struct i3c_driver *drv)h]jc)}(hstruct i3c_driver *drvh](h)}(hjmh]hstruct}(hj[,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW,ubh)}(h h]h }(hjh,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjW,ubh)}(hhh]j)}(h i3c_driverh]h i3c_driver}(hjy,hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjv,ubah}(h]h ]h"]h$]h&] refdomainj`reftypej reftargetj{,modnameN classnameNjj)}j]j)}jjA,sbc.i3c_driver_unregisterasbuh1hhjW,ubh)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjW,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW,ubj)}(hdrvh]hdrv}(hj,hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjW,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jbhjS,ubah}(h]h ]h"]h$]h&]hhuh1j\hj,hhhj,,hM%ubeh}(h]h ]h"]h$]h&]hhj3uh1hj4j5hj,hhhj,,hM%ubah}(h]j,ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj,,hM%hj,hhubjB)}(hhh]jG)}(hunregister an I3C device driverh]hunregister an I3C device driver}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chMhj,hhubah}(h]h ]h"]h$]h&]uh1jAhj,hhhj,,hM%ubeh}(h]h ](j`functioneh"]h$]h&]jej`jfj,jgj,jhjijjuh1hhhhhhNhNubjl)}(hg**Parameters** ``struct i3c_driver *drv`` driver to unregister **Description** Unregister **drv**.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/i3c/device-driver-api:9: ./drivers/i3c/device.chM#hj,ubj)}(hhh]j)}(h0``struct i3c_driver *drv`` driver to unregister h](j)}(h``struct i3c_driver *drv``h]j)}(hj-h]hstruct i3c_driver *drv}(hj!-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chM!hj-ubj)}(hhh]jG)}(hdriver to unregisterh]hdriver to unregister}(hj8-hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj4-hM!hj5-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj4-hM!hj-ubah}(h]h ]h"]h$]h&]uh1jhj,ubjG)}(h**Description**h]jv)}(hjZ-h]h Description}(hj\-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjX-ubah}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chM#hj,ubjG)}(hUnregister **drv**.h](h Unregister }(hjp-hhhNhNubjv)}(h**drv**h]hdrv}(hjx-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjp-ubh.}(hjp-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jFhd/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/device-driver-api:9: ./drivers/i3c/device.chM#hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubeh}(h]i3c-device-driver-apiah ]h"]i3c device driver apiah$]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_handlerj-error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}j-j-s nametypes}j-sh}(j-hhhjjj^jcjjjjj@ jE j j j jjjjjjjj=jBjjjjjjjjjjj