sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget,/translations/zh_CN/driver-api/usb/typec_busmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/zh_TW/driver-api/usb/typec_busmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/it_IT/driver-api/usb/typec_busmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ja_JP/driver-api/usb/typec_busmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ko_KR/driver-api/usb/typec_busmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/sp_SP/driver-api/usb/typec_busmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(h)API for USB Type-C Alternate Mode driversh]h)API for USB Type-C Alternate Mode drivers}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhF/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus.rsthKubh)}(hhh](h)}(h Introductionh]h Introduction}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hX1Alternate modes require communication with the partner using Vendor Defined Messages (VDM) as defined in USB Type-C and USB Power Delivery Specifications. The communication is SVID (Standard or Vendor ID) specific, i.e. specific for every alternate mode, so every alternate mode will need a custom driver.h]hX1Alternate modes require communication with the partner using Vendor Defined Messages (VDM) as defined in USB Type-C and USB Power Delivery Specifications. The communication is SVID (Standard or Vendor ID) specific, i.e. specific for every alternate mode, so every alternate mode will need a custom driver.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hwUSB Type-C bus allows binding a driver to the discovered partner alternate modes by using the SVID and the mode number.h]hwUSB Type-C bus allows binding a driver to the discovered partner alternate modes by using the SVID and the mode number.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hXF:ref:`USB Type-C Connector Class ` provides a device for every alternate mode a port supports, and separate device for every alternate mode the partner supports. The drivers for the alternate modes are bound to the partner alternate mode devices, and the port alternate mode devices must be handled by the port drivers.h](h)}(h):ref:`USB Type-C Connector Class `h]hinline)}(hhh]hUSB Type-C Connector Class}(hhhhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdocdriver-api/usb/typec_bus refdomainhreftyperef refexplicitrefwarn reftargettypecuh1hhhhKhhubhX provides a device for every alternate mode a port supports, and separate device for every alternate mode the partner supports. The drivers for the alternate modes are bound to the partner alternate mode devices, and the port alternate mode devices must be handled by the port drivers.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hXWhen a new partner alternate mode device is registered, it is linked to the alternate mode device of the port that the partner is attached to, that has matching SVID and mode. Communication between the port driver and alternate mode driver will happen using the same API.h]hXWhen a new partner alternate mode device is registered, it is linked to the alternate mode device of the port that the partner is attached to, that has matching SVID and mode. Communication between the port driver and alternate mode driver will happen using the same API.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hX The port alternate mode devices are used as a proxy between the partner and the alternate mode drivers, so the port drivers are only expected to pass the SVID specific commands from the alternate mode drivers to the partner, and from the partners to the alternate mode drivers. No direct SVID specific communication is needed from the port drivers, but the port drivers need to provide the operation callbacks for the port alternate mode devices, just like the alternate mode drivers need to provide them for the partner alternate mode devices.h]hX The port alternate mode devices are used as a proxy between the partner and the alternate mode drivers, so the port drivers are only expected to pass the SVID specific commands from the alternate mode drivers to the partner, and from the partners to the alternate mode drivers. No direct SVID specific communication is needed from the port drivers, but the port drivers need to provide the operation callbacks for the port alternate mode devices, just like the alternate mode drivers need to provide them for the partner alternate mode devices.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hUsage:h]hUsage:}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hhhhhK$ubh)}(hhh](h)}(hGeneralh]hGeneral}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhhhhhK'ubh)}(hX By default, the alternate mode drivers are responsible for entering the mode. It is also possible to leave the decision about entering the mode to the user space (See Documentation/ABI/testing/sysfs-class-typec). Port drivers should not enter any modes on their own.h]hX By default, the alternate mode drivers are responsible for entering the mode. It is also possible to leave the decision about entering the mode to the user space (See Documentation/ABI/testing/sysfs-class-typec). Port drivers should not enter any modes on their own.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjNhhubh)}(hX;``->vdm`` is the most important callback in the operation callbacks vector. It will be used to deliver all the SVID specific commands from the partner to the alternate mode driver, and vice versa in case of port drivers. The drivers send the SVID specific commands to each other using :c:func:`typec_altmode_vdm()`.h](hliteral)}(h ``->vdm``h]h->vdm}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjmubhX is the most important callback in the operation callbacks vector. It will be used to deliver all the SVID specific commands from the partner to the alternate mode driver, and vice versa in case of port drivers. The drivers send the SVID specific commands to each other using }(hjmhhhNhNubh)}(h:c:func:`typec_altmode_vdm()`h]jr)}(hjh]htypec_altmode_vdm()}(hjhhhNhNubah}(h]h ](hcc-funceh"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnj typec_altmode_vdmuh1hhhhK.hjmubh.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK.hjNhhubh)}(hXIf the communication with the partner using the SVID specific commands results in need to reconfigure the pins on the connector, the alternate mode driver needs to notify the bus using :c:func:`typec_altmode_notify()`. The driver passes the negotiated SVID specific pin configuration value to the function as parameter. The bus driver will then configure the mux behind the connector using that value as the state value for the mux.h](hIf the communication with the partner using the SVID specific commands results in need to reconfigure the pins on the connector, the alternate mode driver needs to notify the bus using }(hjhhhNhNubh)}(h :c:func:`typec_altmode_notify()`h]jr)}(hjh]htypec_altmode_notify()}(hjhhhNhNubah}(h]h ](hjc-funceh"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnj typec_altmode_notifyuh1hhhhK3hjubh. The driver passes the negotiated SVID specific pin configuration value to the function as parameter. The bus driver will then configure the mux behind the connector using that value as the state value for the mux.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK3hjNhhubh)}(hX*NOTE: The SVID specific pin configuration values must always start from ``TYPEC_STATE_MODAL``. USB Type-C specification defines two default states for the connector: ``TYPEC_STATE_USB`` and ``TYPEC_STATE_SAFE``. These values are reserved by the bus as the first possible values for the state. When the alternate mode is entered, the bus will put the connector into ``TYPEC_STATE_SAFE`` before sending Enter or Exit Mode command as defined in USB Type-C Specification, and also put the connector back to ``TYPEC_STATE_USB`` after the mode has been exited.h](hHNOTE: The SVID specific pin configuration values must always start from }(hjhhhNhNubjr)}(h``TYPEC_STATE_MODAL``h]hTYPEC_STATE_MODAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubhI. USB Type-C specification defines two default states for the connector: }(hjhhhNhNubjr)}(h``TYPEC_STATE_USB``h]hTYPEC_STATE_USB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh and }(hjhhhNhNubjr)}(h``TYPEC_STATE_SAFE``h]hTYPEC_STATE_SAFE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh. These values are reserved by the bus as the first possible values for the state. When the alternate mode is entered, the bus will put the connector into }(hjhhhNhNubjr)}(h``TYPEC_STATE_SAFE``h]hTYPEC_STATE_SAFE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubhv before sending Enter or Exit Mode command as defined in USB Type-C Specification, and also put the connector back to }(hjhhhNhNubjr)}(h``TYPEC_STATE_USB``h]hTYPEC_STATE_USB}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh after the mode has been exited.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK:hjNhhubh)}(h]An example of working definitions for SVID specific pin configurations would look like this::h]h\An example of working definitions for SVID specific pin configurations would look like this:}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKChjNhhubh literal_block)}(hOenum { ALTMODEX_CONF_A = TYPEC_STATE_MODAL, ALTMODEX_CONF_B, ... };h]hOenum { ALTMODEX_CONF_A = TYPEC_STATE_MODAL, ALTMODEX_CONF_B, ... };}hjXsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jVhhhKFhjNhhubh)}(h7Helper macro ``TYPEC_MODAL_STATE()`` can also be used::h](h Helper macro }(hjhhhhNhNubjr)}(h``TYPEC_MODAL_STATE()``h]hTYPEC_MODAL_STATE()}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjhubh can also be used:}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKLhjNhhubjW)}(h_#define ALTMODEX_CONF_A = TYPEC_MODAL_STATE(0); #define ALTMODEX_CONF_B = TYPEC_MODAL_STATE(1);h]h_#define ALTMODEX_CONF_A = TYPEC_MODAL_STATE(0); #define ALTMODEX_CONF_B = TYPEC_MODAL_STATE(1);}hjsbah}(h]h ]h"]h$]h&]jfjguh1jVhhhKNhjNhhubeh}(h]generalah ]h"]generalah$]h&]uh1hhj=hhhhhK'ubh)}(hhh](h)}(hCable plug alternate modesh]hCable plug alternate modes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKRubh)}(hXThe alternate mode drivers are not bound to cable plug alternate mode devices, only to the partner alternate mode devices. If the alternate mode supports, or requires, a cable that responds to SOP Prime, and optionally SOP Double Prime messages, the driver for that alternate mode must request handle to the cable plug alternate modes using :c:func:`typec_altmode_get_plug()`, and take over their control.h](hXUThe alternate mode drivers are not bound to cable plug alternate mode devices, only to the partner alternate mode devices. If the alternate mode supports, or requires, a cable that responds to SOP Prime, and optionally SOP Double Prime messages, the driver for that alternate mode must request handle to the cable plug alternate modes using }(hjhhhNhNubh)}(h":c:func:`typec_altmode_get_plug()`h]jr)}(hjh]htypec_altmode_get_plug()}(hjhhhNhNubah}(h]h ](hjc-funceh"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnj typec_altmode_get_pluguh1hhhhKThjubh, and take over their control.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKThjhhubeh}(h]cable-plug-alternate-modesah ]h"]cable plug alternate modesah$]h&]uh1hhj=hhhhhKRubeh}(h]usageah ]h"]usage:ah$]h&]uh1hhhhhhhhK$ubh)}(hhh](h)}(h Driver APIh]h Driver API}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK\ubh)}(hhh](h)}(hAlternate mode structsh]hAlternate mode structs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK_ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singletypec_altmode_ops (C struct)c.typec_altmode_opshNtauh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhNubhdesc)}(hhh](hdesc_signature)}(htypec_altmode_opsh]hdesc_signature_line)}(hstruct typec_altmode_opsh](hdesc_sig_keyword)}(hstructh]hstruct}(hj7hhhNhNubah}(h]h ]kah"]h$]h&]uh1j5hj1hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhKubhdesc_sig_space)}(h h]h }(hjIhhhNhNubah}(h]h ]wah"]h$]h&]uh1jGhj1hhhjFhKubh desc_name)}(htypec_altmode_opsh]h desc_sig_name)}(hj-h]htypec_altmode_ops}(hj`hhhNhNubah}(h]h ]nah"]h$]h&]uh1j^hjZubah}(h]h ](sig-namedescnameeh"]h$]h&]jfjguh1jXhj1hhhjFhKubeh}(h]h ]h"]h$]h&]jfjg add_permalinkuh1j/sphinx_line_type declaratorhj+hhhjFhKubah}(h]j!ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j)hjFhKhj&hhubh desc_content)}(hhh]h)}(h)Alternate mode specific operations vectorh]h)Alternate mode specific operations vector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhK3hjhhubah}(h]h ]h"]h$]h&]uh1jhj&hhhjFhKubeh}(h]h ](jstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1j$hhhjhj#hNubh container)}(hX6**Definition**:: struct typec_altmode_ops { int (*enter)(struct typec_altmode *altmode, u32 *vdo); int (*exit)(struct typec_altmode *altmode); void (*attention)(struct typec_altmode *altmode, u32 vdo); int (*vdm)(struct typec_altmode *altmode, const u32 hdr, const u32 *vdo, int cnt); int (*notify)(struct typec_altmode *altmode, unsigned long conf, void *data); int (*activate)(struct typec_altmode *altmode, int activate); }; **Members** ``enter`` Operations to be executed with Enter Mode Command ``exit`` Operations to be executed with Exit Mode Command ``attention`` Callback for Attention Command ``vdm`` Callback for SVID specific commands ``notify`` Communication channel for platform and the alternate mode ``activate`` User callback for Enter/Exit Modeh](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhK7hjubjW)}(hXstruct typec_altmode_ops { int (*enter)(struct typec_altmode *altmode, u32 *vdo); int (*exit)(struct typec_altmode *altmode); void (*attention)(struct typec_altmode *altmode, u32 vdo); int (*vdm)(struct typec_altmode *altmode, const u32 hdr, const u32 *vdo, int cnt); int (*notify)(struct typec_altmode *altmode, unsigned long conf, void *data); int (*activate)(struct typec_altmode *altmode, int activate); };h]hXstruct typec_altmode_ops { int (*enter)(struct typec_altmode *altmode, u32 *vdo); int (*exit)(struct typec_altmode *altmode); void (*attention)(struct typec_altmode *altmode, u32 vdo); int (*vdm)(struct typec_altmode *altmode, const u32 hdr, const u32 *vdo, int cnt); int (*notify)(struct typec_altmode *altmode, unsigned long conf, void *data); int (*activate)(struct typec_altmode *altmode, int activate); };}hjsbah}(h]h ]h"]h$]h&]jfjguh1jVhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhK9hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhKBhjubhdefinition_list)}(hhh](hdefinition_list_item)}(h<``enter`` Operations to be executed with Enter Mode Command h](hterm)}(h ``enter``h]jr)}(hj h]henter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhK5hjubh definition)}(hhh]h)}(h1Operations to be executed with Enter Mode Commandh]h1Operations to be executed with Enter Mode Command}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hK5hj$ubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhj!hK5hjubj)}(h:``exit`` Operations to be executed with Exit Mode Command h](j )}(h``exit``h]jr)}(hjGh]hexit}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjEubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhK6hjAubj#)}(hhh]h)}(h0Operations to be executed with Exit Mode Commandh]h0Operations to be executed with Exit Mode Command}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hK6hj]ubah}(h]h ]h"]h$]h&]uh1j"hjAubeh}(h]h ]h"]h$]h&]uh1jhj\hK6hjubj)}(h-``attention`` Callback for Attention Command h](j )}(h ``attention``h]jr)}(hjh]h attention}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj~ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhK7hjzubj#)}(hhh]h)}(hCallback for Attention Commandh]hCallback for Attention Command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK7hjubah}(h]h ]h"]h$]h&]uh1j"hjzubeh}(h]h ]h"]h$]h&]uh1jhjhK7hjubj)}(h,``vdm`` Callback for SVID specific commands h](j )}(h``vdm``h]jr)}(hjh]hvdm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhK8hjubj#)}(hhh]h)}(h#Callback for SVID specific commandsh]h#Callback for SVID specific commands}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK8hjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhjhK8hjubj)}(hE``notify`` Communication channel for platform and the alternate mode h](j )}(h ``notify``h]jr)}(hjh]hnotify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhK9hjubj#)}(hhh]h)}(h9Communication channel for platform and the alternate modeh]h9Communication channel for platform and the alternate mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK9hjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhjhK9hjubj)}(h.``activate`` User callback for Enter/Exit Modeh](j )}(h ``activate``h]jr)}(hj+h]hactivate}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj)ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhK9hj%ubj#)}(hhh]h)}(h!User callback for Enter/Exit Modeh]h!User callback for Enter/Exit Mode}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhK:hjAubah}(h]h ]h"]h$]h&]uh1j"hj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hK9hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhj#hNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtypec_altmode_driver (C struct)c.typec_altmode_driverhNtauh1jhjhhhj#hNubj%)}(hhh](j*)}(htypec_altmode_driverh]j0)}(hstruct typec_altmode_driverh](j6)}(hj9h]hstruct}(hjhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhKubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjhhhjhKubjY)}(htypec_altmode_driverh]j_)}(hjh]htypec_altmode_driver}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ](jqjreh"]h$]h&]jfjguh1jXhjhhhjhKubeh}(h]h ]h"]h$]h&]jfjgj|uh1j/j}j~hj}hhhjhKubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1j)hjhKhjzhhubj)}(hhh]h)}(h'USB Type-C alternate mode device driverh]h'USB Type-C alternate mode device driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j$hhhjhj#hNubj)}(hX**Definition**:: struct typec_altmode_driver { const struct typec_device_id *id_table; int (*probe)(struct typec_altmode *altmode); void (*remove)(struct typec_altmode *altmode); struct device_driver driver; }; **Members** ``id_table`` Null terminated array of SVIDs ``probe`` Callback for device binding ``remove`` Callback for device unbinding ``driver`` Device driver model driverh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhKhjubjW)}(hstruct typec_altmode_driver { const struct typec_device_id *id_table; int (*probe)(struct typec_altmode *altmode); void (*remove)(struct typec_altmode *altmode); struct device_driver driver; };h]hstruct typec_altmode_driver { const struct typec_device_id *id_table; int (*probe)(struct typec_altmode *altmode); void (*remove)(struct typec_altmode *altmode); struct device_driver driver; };}hjsbah}(h]h ]h"]h$]h&]jfjguh1jVhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhKhjubj)}(hhh](j)}(h,``id_table`` Null terminated array of SVIDs h](j )}(h ``id_table``h]jr)}(hj4h]hid_table}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj2ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhKhj.ubj#)}(hhh]h)}(hNull terminated array of SVIDsh]hNull terminated array of SVIDs}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhKhjJubah}(h]h ]h"]h$]h&]uh1j"hj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhKhj+ubj)}(h&``probe`` Callback for device binding h](j )}(h ``probe``h]jr)}(hjmh]hprobe}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjkubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhKhjgubj#)}(hhh]h)}(hCallback for device bindingh]hCallback for device binding}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j"hjgubeh}(h]h ]h"]h$]h&]uh1jhjhKhj+ubj)}(h)``remove`` Callback for device unbinding h](j )}(h ``remove``h]jr)}(hjh]hremove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhKhjubj#)}(hhh]h)}(hCallback for device unbindingh]hCallback for device unbinding}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj+ubj)}(h%``driver`` Device driver model driverh](j )}(h ``driver``h]jr)}(hjh]hdriver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhKhjubj#)}(hhh]h)}(hDevice driver model driverh]hDevice driver model driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhKhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj+ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhj#hNubh)}(h**Description**h]j)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhKhjhhubh)}(hsThese drivers will be bind to the partner alternate mode devices. They will handle all SVID specific communication.h]hsThese drivers will be bind to the partner alternate mode devices. They will handle all SVID specific communication.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:97: ./include/linux/usb/typec_altmode.hhKhjhhubeh}(h]alternate-mode-structsah ]h"]alternate mode structsah$]h&]uh1hhjhhhhhK_ubh)}(hhh](h)}(h/Alternate mode driver registering/unregisteringh]h/Alternate mode driver registering/unregistering}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhhhhhKeubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'typec_altmode_register_driver (C macro)c.typec_altmode_register_driverhNtauh1jhjOhhhNhNubj%)}(hhh](j*)}(htypec_altmode_register_driverh]j0)}(htypec_altmode_register_driverh]jY)}(htypec_altmode_register_driverh]j_)}(hjsh]htypec_altmode_register_driver}(hj}hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjyubah}(h]h ](jqjreh"]h$]h&]jfjguh1jXhjuhhhk/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:103: ./include/linux/usb/typec_altmode.hhKubah}(h]h ]h"]h$]h&]jfjgj|uh1j/j}j~hjqhhhjhKubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1j)hjhKhjnhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjnhhhjhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1j$hhhjOhNhNubh)}(h'``typec_altmode_register_driver (drv)``h]jr)}(hjh]h#typec_altmode_register_driver (drv)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:103: ./include/linux/usb/typec_altmode.hhKhjOhhubh block_quote)}(h4registers a USB Type-C alternate mode device driver h]h)}(h3registers a USB Type-C alternate mode device driverh]h3registers a USB Type-C alternate mode device driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:103: ./include/linux/usb/typec_altmode.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjOhhubj)}(h**Parameters** ``drv`` pointer to struct typec_altmode_driver **Description** These drivers will be bind to the partner alternate mode devices. They will handle all SVID specific communication.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:103: ./include/linux/usb/typec_altmode.hhKhjubj)}(hhh]j)}(h/``drv`` pointer to struct typec_altmode_driver h](j )}(h``drv``h]jr)}(hjh]hdrv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:103: ./include/linux/usb/typec_altmode.hhKhjubj#)}(hhh]h)}(h&pointer to struct typec_altmode_driverh]h&pointer to struct typec_altmode_driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj@h]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:103: ./include/linux/usb/typec_altmode.hhKhjubh)}(hsThese drivers will be bind to the partner alternate mode devices. They will handle all SVID specific communication.h]hsThese drivers will be bind to the partner alternate mode devices. They will handle all SVID specific communication.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:103: ./include/linux/usb/typec_altmode.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjOhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j,typec_altmode_unregister_driver (C function)!c.typec_altmode_unregister_driverhNtauh1jhjOhhhNhNubj%)}(hhh](j*)}(hGvoid typec_altmode_unregister_driver (struct typec_altmode_driver *drv)h]j0)}(hFvoid typec_altmode_unregister_driver(struct typec_altmode_driver *drv)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhk/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:103: ./include/linux/usb/typec_altmode.hhKubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjhhhjhKubjY)}(htypec_altmode_unregister_driverh]j_)}(htypec_altmode_unregister_driverh]htypec_altmode_unregister_driver}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ](jqjreh"]h$]h&]jfjguh1jXhjhhhjhKubhdesc_parameterlist)}(h"(struct typec_altmode_driver *drv)h]hdesc_parameter)}(h struct typec_altmode_driver *drvh](j6)}(hj9h]hstruct}(hjhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubh)}(hhh]j_)}(htypec_altmode_driverh]htypec_altmode_driver}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jjsb!c.typec_altmode_unregister_driverasbuh1hhjubjH)}(h h]h }(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubhdesc_sig_punctuation)}(h*h]h*}(hj hhhNhNubah}(h]h ]pah"]h$]h&]uh1j hjubj_)}(hdrvh]hdrv}(hj. hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhjubah}(h]h ]h"]h$]h&]jfjguh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jfjgj|uh1j/j}j~hj}hhhjhKubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1j)hjhKhjzhhubj)}(hhh]h)}(h5unregisters a USB Type-C alternate mode device driverh]h5unregisters a USB Type-C alternate mode device driver}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:103: ./include/linux/usb/typec_altmode.hhKhjU hhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjp jjp jjjuh1j$hhhjOhNhNubj)}(h**Parameters** ``struct typec_altmode_driver *drv`` pointer to struct typec_altmode_driver **Description** These drivers will be bind to the partner alternate mode devices. They will handle all SVID specific communication.h](h)}(h**Parameters**h]j)}(hjz h]h Parameters}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:103: ./include/linux/usb/typec_altmode.hhKhjt ubj)}(hhh]j)}(hL``struct typec_altmode_driver *drv`` pointer to struct typec_altmode_driver h](j )}(h$``struct typec_altmode_driver *drv``h]jr)}(hj h]h struct typec_altmode_driver *drv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:103: ./include/linux/usb/typec_altmode.hhKhj ubj#)}(hhh]h)}(h&pointer to struct typec_altmode_driverh]h&pointer to struct typec_altmode_driver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j"hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjt ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:103: ./include/linux/usb/typec_altmode.hhKhjt ubh)}(hsThese drivers will be bind to the partner alternate mode devices. They will handle all SVID specific communication.h]hsThese drivers will be bind to the partner alternate mode devices. They will handle all SVID specific communication.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:103: ./include/linux/usb/typec_altmode.hhKhjt ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjOhhhNhNubeh}(h]/alternate-mode-driver-registering-unregisteringah ]h"]/alternate mode driver registering/unregisteringah$]h&]uh1hhjhhhhhKeubh)}(hhh](h)}(h Alternate mode driver operationsh]h Alternate mode driver operations}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKkubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!typec_altmode_notify (C function)c.typec_altmode_notifyhNtauh1jhj hhhNhNubj%)}(hhh](j*)}(hUint typec_altmode_notify (struct typec_altmode *adev, unsigned long conf, void *data)h]j0)}(hTint typec_altmode_notify(struct typec_altmode *adev, unsigned long conf, void *data)h](j)}(hinth]hint}(hj2 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj. hhha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKVubjH)}(h h]h }(hjA hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhj. hhhj@ hKVubjY)}(htypec_altmode_notifyh]j_)}(htypec_altmode_notifyh]htypec_altmode_notify}(hjS hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjO ubah}(h]h ](jqjreh"]h$]h&]jfjguh1jXhj. hhhj@ hKVubj)}(h<(struct typec_altmode *adev, unsigned long conf, void *data)h](j)}(hstruct typec_altmode *adevh](j6)}(hj9h]hstruct}(hjo hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjk ubjH)}(h h]h }(hj| hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjk ubh)}(hhh]j_)}(h typec_altmodeh]h typec_altmode}(hj hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNj j )}j ]j )}jjU sbc.typec_altmode_notifyasbuh1hhjk ubjH)}(h h]h }(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjk ubj )}(hj! h]h*}(hj hhhNhNubah}(h]h ]j* ah"]h$]h&]uh1j hjk ubj_)}(hadevh]hadev}(hj hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjk ubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhjg ubj)}(hunsigned long confh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjH)}(h h]h }(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhj ubj)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjH)}(h h]h }(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhj ubj_)}(hconfh]hconf}(hj hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hj ubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhjg ubj)}(h void *datah](j)}(hvoidh]hvoid}(hj2 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj. ubjH)}(h h]h }(hj@ hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhj. ubj )}(hj! h]h*}(hjN hhhNhNubah}(h]h ]j* ah"]h$]h&]uh1j hj. ubj_)}(hdatah]hdata}(hj[ hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hj. ubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhjg ubeh}(h]h ]h"]h$]h&]jfjguh1jhj. hhhj@ hKVubeh}(h]h ]h"]h$]h&]jfjgj|uh1j/j}j~hj* hhhj@ hKVubah}(h]j% ah ](jjeh"]h$]h&]jj)jhuh1j)hj@ hKVhj' hhubj)}(hhh]h)}(h6Communication between the OS and alternate mode driverh]h6Communication between the OS and alternate mode driver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKJhj hhubah}(h]h ]h"]h$]h&]uh1jhj' hhhj@ hKVubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1j$hhhj hNhNubj)}(hXw**Parameters** ``struct typec_altmode *adev`` Handle to the alternate mode ``unsigned long conf`` Alternate mode specific configuration value ``void *data`` Alternate mode specific data **Description** The primary purpose for this function is to allow the alternate mode drivers to tell which pin configuration has been negotiated with the partner. That information will then be used for example to configure the muxes. Communication to the other direction is also possible, and low level device drivers can also send notifications to the alternate mode drivers. The actual communication will be specific for every SVID.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKNhj ubj)}(hhh](j)}(h<``struct typec_altmode *adev`` Handle to the alternate mode h](j )}(h``struct typec_altmode *adev``h]jr)}(hj h]hstruct typec_altmode *adev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKKhj ubj#)}(hhh]h)}(hHandle to the alternate modeh]hHandle to the alternate mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKKhj ubah}(h]h ]h"]h$]h&]uh1j"hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKKhj ubj)}(hC``unsigned long conf`` Alternate mode specific configuration value h](j )}(h``unsigned long conf``h]jr)}(hj h]hunsigned long conf}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKLhj ubj#)}(hhh]h)}(h+Alternate mode specific configuration valueh]h+Alternate mode specific configuration value}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKLhj ubah}(h]h ]h"]h$]h&]uh1j"hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKLhj ubj)}(h,``void *data`` Alternate mode specific data h](j )}(h``void *data``h]jr)}(hj8 h]h void *data}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj6 ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKMhj2 ubj#)}(hhh]h)}(hAlternate mode specific datah]hAlternate mode specific data}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM hKMhjN ubah}(h]h ]h"]h$]h&]uh1j"hj2 ubeh}(h]h ]h"]h$]h&]uh1jhjM hKMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjs h]h Description}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKOhj ubh)}(hXThe primary purpose for this function is to allow the alternate mode drivers to tell which pin configuration has been negotiated with the partner. That information will then be used for example to configure the muxes. Communication to the other direction is also possible, and low level device drivers can also send notifications to the alternate mode drivers. The actual communication will be specific for every SVID.h]hXThe primary purpose for this function is to allow the alternate mode drivers to tell which pin configuration has been negotiated with the partner. That information will then be used for example to configure the muxes. Communication to the other direction is also possible, and low level device drivers can also send notifications to the alternate mode drivers. The actual communication will be specific for every SVID.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKOhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j typec_altmode_enter (C function)c.typec_altmode_enterhNtauh1jhj hhhNhNubj%)}(hhh](j*)}(h>int typec_altmode_enter (struct typec_altmode *adev, u32 *vdo)h]j0)}(h=int typec_altmode_enter(struct typec_altmode *adev, u32 *vdo)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chK~ubjH)}(h h]h }(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhj hhhj hK~ubjY)}(htypec_altmode_enterh]j_)}(htypec_altmode_enterh]htypec_altmode_enter}(hj hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hj ubah}(h]h ](jqjreh"]h$]h&]jfjguh1jXhj hhhj hK~ubj)}(h&(struct typec_altmode *adev, u32 *vdo)h](j)}(hstruct typec_altmode *adevh](j6)}(hj9h]hstruct}(hj hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj ubjH)}(h h]h }(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhj ubh)}(hhh]j_)}(h typec_altmodeh]h typec_altmode}(hj hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNj j )}j ]j )}jj sbc.typec_altmode_enterasbuh1hhj ubjH)}(h h]h }(hj3 hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhj ubj )}(hj! h]h*}(hjA hhhNhNubah}(h]h ]j* ah"]h$]h&]uh1j hj ubj_)}(hadevh]hadev}(hjN hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hj ubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhj ubj)}(hu32 *vdoh](h)}(hhh]j_)}(hu32h]hu32}(hjj hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjg ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjl modnameN classnameNj j )}j ]j/ c.typec_altmode_enterasbuh1hhjc ubjH)}(h h]h }(hj hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjc ubj )}(hj! h]h*}(hj hhhNhNubah}(h]h ]j* ah"]h$]h&]uh1j hjc ubj_)}(hvdoh]hvdo}(hj hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjc ubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhj ubeh}(h]h ]h"]h$]h&]jfjguh1jhj hhhj hK~ubeh}(h]h ]h"]h$]h&]jfjgj|uh1j/j}j~hj hhhj hK~ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j)hj hK~hj hhubj)}(hhh]h)}(h Enter Modeh]h Enter Mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKuhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hK~ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1j$hhhj hNhNubj)}(hXt**Parameters** ``struct typec_altmode *adev`` The alternate mode ``u32 *vdo`` VDO for the Enter Mode command **Description** The alternate mode drivers use this function to enter mode. The port drivers use this to inform the alternate mode drivers that the partner has initiated Enter Mode command. If the alternate mode does not require VDO, **vdo** must be NULL.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKyhj ubj)}(hhh](j)}(h2``struct typec_altmode *adev`` The alternate mode h](j )}(h``struct typec_altmode *adev``h]jr)}(hjh]hstruct typec_altmode *adev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKvhjubj#)}(hhh]h)}(hThe alternate modeh]hThe alternate mode}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hKvhj$ubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhj#hKvhjubj)}(h,``u32 *vdo`` VDO for the Enter Mode command h](j )}(h ``u32 *vdo``h]jr)}(hjGh]hu32 *vdo}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjEubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKwhjAubj#)}(hhh]h)}(hVDO for the Enter Mode commandh]hVDO for the Enter Mode command}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hKwhj]ubah}(h]h ]h"]h$]h&]uh1j"hjAubeh}(h]h ]h"]h$]h&]uh1jhj\hKwhjubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKyhj ubh)}(hThe alternate mode drivers use this function to enter mode. The port drivers use this to inform the alternate mode drivers that the partner has initiated Enter Mode command. If the alternate mode does not require VDO, **vdo** must be NULL.h](hThe alternate mode drivers use this function to enter mode. The port drivers use this to inform the alternate mode drivers that the partner has initiated Enter Mode command. If the alternate mode does not require VDO, }(hjhhhNhNubj)}(h**vdo**h]hvdo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh must be NULL.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKyhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtypec_altmode_exit (C function)c.typec_altmode_exithNtauh1jhj hhhNhNubj%)}(hhh](j*)}(h3int typec_altmode_exit (struct typec_altmode *adev)h]j0)}(h2int typec_altmode_exit(struct typec_altmode *adev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjhhhjhKubjY)}(htypec_altmode_exith]j_)}(htypec_altmode_exith]htypec_altmode_exit}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ](jqjreh"]h$]h&]jfjguh1jXhjhhhjhKubj)}(h(struct typec_altmode *adev)h]j)}(hstruct typec_altmode *adevh](j6)}(hj9h]hstruct}(hjhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjubjH)}(h h]h }(hj#hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubh)}(hhh]j_)}(h typec_altmodeh]h typec_altmode}(hj4hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNj j )}j ]j )}jjsbc.typec_altmode_exitasbuh1hhjubjH)}(h h]h }(hjThhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubj )}(hj! h]h*}(hjbhhhNhNubah}(h]h ]j* ah"]h$]h&]uh1j hjubj_)}(hadevh]hadev}(hjohhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhjubah}(h]h ]h"]h$]h&]jfjguh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jfjgj|uh1j/j}j~hjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j)hjhKhjhhubj)}(hhh]h)}(h Exit Modeh]h Exit Mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j$hhhj hNhNubj)}(h**Parameters** ``struct typec_altmode *adev`` The alternate mode **Description** The partner of **adev** has initiated Exit Mode command.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjubj)}(hhh]j)}(h2``struct typec_altmode *adev`` The alternate mode h](j )}(h``struct typec_altmode *adev``h]jr)}(hjh]hstruct typec_altmode *adev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjubj#)}(hhh]h)}(hThe alternate modeh]hThe alternate mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjubh)}(h8The partner of **adev** has initiated Exit Mode command.h](hThe partner of }(hj+hhhNhNubj)}(h**adev**h]hadev}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh! has initiated Exit Mode command.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$typec_altmode_attention (C function)c.typec_altmode_attentionhNtauh1jhj hhhNhNubj%)}(hhh](j*)}(hAint typec_altmode_attention (struct typec_altmode *adev, u32 vdo)h]j0)}(h@int typec_altmode_attention(struct typec_altmode *adev, u32 vdo)h](j)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKubjH)}(h h]h }(hj{hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjhhhhjzhKubjY)}(htypec_altmode_attentionh]j_)}(htypec_altmode_attentionh]htypec_altmode_attention}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ](jqjreh"]h$]h&]jfjguh1jXhjhhhhjzhKubj)}(h%(struct typec_altmode *adev, u32 vdo)h](j)}(hstruct typec_altmode *adevh](j6)}(hj9h]hstruct}(hjhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubh)}(hhh]j_)}(h typec_altmodeh]h typec_altmode}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}jjsbc.typec_altmode_attentionasbuh1hhjubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubj )}(hj! h]h*}(hjhhhNhNubah}(h]h ]j* ah"]h$]h&]uh1j hjubj_)}(hadevh]hadev}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhjubj)}(hu32 vdoh](h)}(hhh]j_)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNj j )}j ]jc.typec_altmode_attentionasbuh1hhjubjH)}(h h]h }(hj<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubj_)}(hvdoh]hvdo}(hjJhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhjubeh}(h]h ]h"]h$]h&]jfjguh1jhjhhhhjzhKubeh}(h]h ]h"]h$]h&]jfjgj|uh1j/j}j~hjdhhhjzhKubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1j)hjzhKhjahhubj)}(hhh]h)}(hAttention commandh]hAttention command}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjqhhubah}(h]h ]h"]h$]h&]uh1jhjahhhjzhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j$hhhj hNhNubj)}(h**Parameters** ``struct typec_altmode *adev`` The alternate mode ``u32 vdo`` VDO for the Attention command **Description** Notifies the partner of **adev** about Attention command.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjubj)}(hhh](j)}(h2``struct typec_altmode *adev`` The alternate mode h](j )}(h``struct typec_altmode *adev``h]jr)}(hjh]hstruct typec_altmode *adev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjubj#)}(hhh]h)}(hThe alternate modeh]hThe alternate mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h*``u32 vdo`` VDO for the Attention command h](j )}(h ``u32 vdo``h]jr)}(hjh]hu32 vdo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjubj#)}(hhh]h)}(hVDO for the Attention commandh]hVDO for the Attention command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj)h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjubh)}(h9Notifies the partner of **adev** about Attention command.h](hNotifies the partner of }(hj?hhhNhNubj)}(h**adev**h]hadev}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh about Attention command.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtypec_altmode_vdm (C function)c.typec_altmode_vdmhNtauh1jhj hhhNhNubj%)}(hhh](j*)}(h_int typec_altmode_vdm (struct typec_altmode *adev, const u32 header, const u32 *vdo, int count)h]j0)}(h^int typec_altmode_vdm(struct typec_altmode *adev, const u32 header, const u32 *vdo, int count)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhj|hhhjhKubjY)}(htypec_altmode_vdmh]j_)}(htypec_altmode_vdmh]htypec_altmode_vdm}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ](jq}jreh"]h$]h&]jfjguh1jXhj|hhhjhKubj)}(hI(struct typec_altmode *adev, const u32 header, const u32 *vdo, int count)h](j)}(hstruct typec_altmode *adevh](j6)}(hj9h]hstruct}(hjhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubh)}(hhh]j_)}(h typec_altmodeh]h typec_altmode}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}jjsbc.typec_altmode_vdmasbuh1hhjubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubj )}(hj! h]h*}(hj hhhNhNubah}(h]h ]j* ah"]h$]h&]uh1j hjubj_)}(hadevh]hadev}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhjubj)}(hconst u32 headerh](j6)}(hconsth]hconst}(hj/hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj+ubjH)}(h h]h }(hj=hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhj+ubh)}(hhh]j_)}(hu32h]hu32}(hjNhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNj j )}j ]jc.typec_altmode_vdmasbuh1hhj+ubjH)}(h h]h }(hjlhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhj+ubj_)}(hheaderh]hheader}(hjzhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hj+ubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhjubj)}(hconst u32 *vdoh](j6)}(hj1h]hconst}(hjhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubh)}(hhh]j_)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]jc.typec_altmode_vdmasbuh1hhjubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubj )}(hj! h]h*}(hjhhhNhNubah}(h]h ]j* ah"]h$]h&]uh1j hjubj_)}(hvdoh]hvdo}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhjubj)}(h int counth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubj_)}(hcounth]hcount}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhjubeh}(h]h ]h"]h$]h&]jfjguh1jhj|hhhjhKubeh}(h]h ]h"]h$]h&]jfjgj|uh1j/j}j~hjxhhhjhKubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1j)hjhKhjuhhubj)}(hhh]h)}(h1Send Vendor Defined Messages (VDM) to the partnerh]h1Send Vendor Defined Messages (VDM) to the partner}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjFhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1j$hhhj hNhNubj)}(hX**Parameters** ``struct typec_altmode *adev`` Alternate mode handle ``const u32 header`` VDM Header ``const u32 *vdo`` Array of Vendor Defined Data Objects ``int count`` Number of Data Objects **Description** The alternate mode drivers use this function for SVID specific communication with the partner. The port drivers use it to deliver the Structured VDMs received from the partners to the alternate mode drivers.h](h)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjeubj)}(hhh](j)}(h5``struct typec_altmode *adev`` Alternate mode handle h](j )}(h``struct typec_altmode *adev``h]jr)}(hjh]hstruct typec_altmode *adev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjubj#)}(hhh]h)}(hAlternate mode handleh]hAlternate mode handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h ``const u32 header`` VDM Header h](j )}(h``const u32 header``h]jr)}(hjh]hconst u32 header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjubj#)}(hhh]h)}(h VDM Headerh]h VDM Header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h8``const u32 *vdo`` Array of Vendor Defined Data Objects h](j )}(h``const u32 *vdo``h]jr)}(hjh]hconst u32 *vdo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjubj#)}(hhh]h)}(h$Array of Vendor Defined Data Objectsh]h$Array of Vendor Defined Data Objects}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h%``int count`` Number of Data Objects h](j )}(h ``int count``h]jr)}(hj5h]h int count}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj3ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhj/ubj#)}(hhh]h)}(hNumber of Data Objectsh]hNumber of Data Objects}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhKhjKubah}(h]h ]h"]h$]h&]uh1j"hj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhKhjubeh}(h]h ]h"]h$]h&]uh1jhjeubh)}(h**Description**h]j)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjeubh)}(hThe alternate mode drivers use this function for SVID specific communication with the partner. The port drivers use it to deliver the Structured VDMs received from the partners to the alternate mode drivers.h]hThe alternate mode drivers use this function for SVID specific communication with the partner. The port drivers use it to deliver the Structured VDMs received from the partners to the alternate mode drivers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:109: ./drivers/usb/typec/bus.chKhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubeh}(h] alternate-mode-driver-operationsah ]h"] alternate mode driver operationsah$]h&]uh1hhjhhhhhKkubh)}(hhh](h)}(hAPI for the port driversh]hAPI for the port drivers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKqubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j typec_match_altmode (C function)c.typec_match_altmodehNtauh1jhjhhhNhNubj%)}(hhh](j*)}(histruct typec_altmode * typec_match_altmode (struct typec_altmode **altmodes, size_t n, u16 svid, u8 mode)h]j0)}(hgstruct typec_altmode *typec_match_altmode(struct typec_altmode **altmodes, size_t n, u16 svid, u8 mode)h](j6)}(hj9h]hstruct}(hjhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:115: ./drivers/usb/typec/bus.chMubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjhhhjhMubh)}(hhh]j_)}(h typec_altmodeh]h typec_altmode}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}jtypec_match_altmodesbc.typec_match_altmodeasbuh1hhjhhhjhMubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjhhhjhMubj )}(hj! h]h*}(hjhhhNhNubah}(h]h ]j* ah"]h$]h&]uh1j hjhhhjhMubjY)}(htypec_match_altmodeh]j_)}(hj h]htypec_match_altmode}(hj-hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hj)ubah}(h]h ](jqjreh"]h$]h&]jfjguh1jXhjhhhjhMubj)}(h>(struct typec_altmode **altmodes, size_t n, u16 svid, u8 mode)h](j)}(hstruct typec_altmode **altmodesh](j6)}(hj9h]hstruct}(hjHhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjDubjH)}(h h]h }(hjUhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjDubh)}(hhh]j_)}(h typec_altmodeh]h typec_altmode}(hjfhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNj j )}j ]j c.typec_match_altmodeasbuh1hhjDubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjDubj )}(hj! h]h*}(hjhhhNhNubah}(h]h ]j* ah"]h$]h&]uh1j hjDubj )}(hj! h]h*}(hjhhhNhNubah}(h]h ]j* ah"]h$]h&]uh1j hjDubj_)}(haltmodesh]haltmodes}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjDubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhj@ubj)}(hsize_t nh](h)}(hhh]j_)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j c.typec_match_altmodeasbuh1hhjubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubj_)}(hjjh]hn}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhj@ubj)}(hu16 svidh](h)}(hhh]j_)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j c.typec_match_altmodeasbuh1hhjubjH)}(h h]h }(hj-hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubj_)}(hsvidh]hsvid}(hj;hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhj@ubj)}(hu8 modeh](h)}(hhh]j_)}(hu8h]hu8}(hjWhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNj j )}j ]j c.typec_match_altmodeasbuh1hhjPubjH)}(h h]h }(hjuhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjPubj_)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjPubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhj@ubeh}(h]h ]h"]h$]h&]jfjguh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jfjgj|uh1j/j}j~hjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j)hjhMhjhhubj)}(hhh]h)}(h2Match SVID and mode to an array of alternate modesh]h2Match SVID and mode to an array of alternate modes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:115: ./drivers/usb/typec/bus.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j$hhhjhNhNubj)}(hXi**Parameters** ``struct typec_altmode **altmodes`` Array of alternate modes ``size_t n`` Number of elements in the array, or -1 for NULL terminated arrays ``u16 svid`` Standard or Vendor ID to match with ``u8 mode`` Mode to match with **Description** Return pointer to an alternate mode with SVID matching **svid**, or NULL when no match is found.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:115: ./drivers/usb/typec/bus.chMhjubj)}(hhh](j)}(h=``struct typec_altmode **altmodes`` Array of alternate modes h](j )}(h#``struct typec_altmode **altmodes``h]jr)}(hjh]hstruct typec_altmode **altmodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:115: ./drivers/usb/typec/bus.chMhjubj#)}(hhh]h)}(hArray of alternate modesh]hArray of alternate modes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hO``size_t n`` Number of elements in the array, or -1 for NULL terminated arrays h](j )}(h ``size_t n``h]jr)}(hj'h]hsize_t n}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj%ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:115: ./drivers/usb/typec/bus.chMhj!ubj#)}(hhh]h)}(hANumber of elements in the array, or -1 for NULL terminated arraysh]hANumber of elements in the array, or -1 for NULL terminated arrays}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMhj=ubah}(h]h ]h"]h$]h&]uh1j"hj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubj)}(h1``u16 svid`` Standard or Vendor ID to match with h](j )}(h ``u16 svid``h]jr)}(hj`h]hu16 svid}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj^ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:115: ./drivers/usb/typec/bus.chMhjZubj#)}(hhh]h)}(h#Standard or Vendor ID to match withh]h#Standard or Vendor ID to match with}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMhjvubah}(h]h ]h"]h$]h&]uh1j"hjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjubj)}(h``u8 mode`` Mode to match with h](j )}(h ``u8 mode``h]jr)}(hjh]hu8 mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:115: ./drivers/usb/typec/bus.chMhjubj#)}(hhh]h)}(hMode to match withh]hMode to match with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:115: ./drivers/usb/typec/bus.chMhjubh)}(h`Return pointer to an alternate mode with SVID matching **svid**, or NULL when no match is found.h](h7Return pointer to an alternate mode with SVID matching }(hjhhhNhNubj)}(h**svid**h]hsvid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh!, or NULL when no match is found.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:115: ./drivers/usb/typec/bus.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]api-for-the-port-driversah ]h"]api for the port driversah$]h&]uh1hhjhhhhhKqubh)}(hhh](h)}(hCable Plug operationsh]hCable Plug operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKwubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#typec_altmode_get_plug (C function)c.typec_altmode_get_plughNtauh1jhjhhhNhNubj%)}(hhh](j*)}(hgstruct typec_altmode * typec_altmode_get_plug (struct typec_altmode *adev, enum typec_plug_index index)h]j0)}(hestruct typec_altmode *typec_altmode_get_plug(struct typec_altmode *adev, enum typec_plug_index index)h](j6)}(hj9h]hstruct}(hjDhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj@hhha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:121: ./drivers/usb/typec/bus.chMhubjH)}(h h]h }(hjRhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhj@hhhjQhMhubh)}(hhh]j_)}(h typec_altmodeh]h typec_altmode}(hjchhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNj j )}j ]j )}jtypec_altmode_get_plugsbc.typec_altmode_get_plugasbuh1hhj@hhhjQhMhubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhj@hhhjQhMhubj )}(hj! h]h*}(hjhhhNhNubah}(h]h ]j* ah"]h$]h&]uh1j hj@hhhjQhMhubjY)}(htypec_altmode_get_plugh]j_)}(hjh]htypec_altmode_get_plug}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ](jqjreh"]h$]h&]jfjguh1jXhj@hhhjQhMhubj)}(h9(struct typec_altmode *adev, enum typec_plug_index index)h](j)}(hstruct typec_altmode *adevh](j6)}(hj9h]hstruct}(hjhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubh)}(hhh]j_)}(h typec_altmodeh]h typec_altmode}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]jc.typec_altmode_get_plugasbuh1hhjubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubj )}(hj! h]h*}(hjhhhNhNubah}(h]h ]j* ah"]h$]h&]uh1j hjubj_)}(hadevh]hadev}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhjubj)}(henum typec_plug_index indexh](j6)}(henumh]henum}(hj.hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj*ubjH)}(h h]h }(hj<hhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhj*ubh)}(hhh]j_)}(htypec_plug_indexh]htypec_plug_index}(hjMhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNj j )}j ]jc.typec_altmode_get_plugasbuh1hhj*ubjH)}(h h]h }(hjkhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhj*ubj_)}(hindexh]hindex}(hjyhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hj*ubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhjubeh}(h]h ]h"]h$]h&]jfjguh1jhj@hhhjQhMhubeh}(h]h ]h"]h$]h&]jfjgj|uh1j/j}j~hj<hhhjQhMhubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1j)hjQhMhhj9hhubj)}(hhh]h)}(hFind cable plug alternate modeh]hFind cable plug alternate mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:121: ./drivers/usb/typec/bus.chMahjhhubah}(h]h ]h"]h$]h&]uh1jhj9hhhjQhMhubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j$hhhjhNhNubj)}(hX"**Parameters** ``struct typec_altmode *adev`` Handle to partner alternate mode ``enum typec_plug_index index`` Cable plug index **Description** Increment reference count for cable plug alternate mode device. Returns handle to the cable plug alternate mode, or NULL if none is found.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:121: ./drivers/usb/typec/bus.chMehjubj)}(hhh](j)}(h@``struct typec_altmode *adev`` Handle to partner alternate mode h](j )}(h``struct typec_altmode *adev``h]jr)}(hjh]hstruct typec_altmode *adev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:121: ./drivers/usb/typec/bus.chMbhjubj#)}(hhh]h)}(h Handle to partner alternate modeh]h Handle to partner alternate mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMbhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjubj)}(h1``enum typec_plug_index index`` Cable plug index h](j )}(h``enum typec_plug_index index``h]jr)}(hjh]henum typec_plug_index index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:121: ./drivers/usb/typec/bus.chMchjubj#)}(hhh]h)}(hCable plug indexh]hCable plug index}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMchj3ubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhj2hMchjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjXh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:121: ./drivers/usb/typec/bus.chMehjubh)}(hIncrement reference count for cable plug alternate mode device. Returns handle to the cable plug alternate mode, or NULL if none is found.h]hIncrement reference count for cable plug alternate mode device. Returns handle to the cable plug alternate mode, or NULL if none is found.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:121: ./drivers/usb/typec/bus.chMehjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#typec_altmode_put_plug (C function)c.typec_altmode_put_plughNtauh1jhjhhhNhNubj%)}(hhh](j*)}(h8void typec_altmode_put_plug (struct typec_altmode *plug)h]j0)}(h7void typec_altmode_put_plug(struct typec_altmode *plug)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:121: ./drivers/usb/typec/bus.chMzubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjhhhjhMzubjY)}(htypec_altmode_put_plugh]j_)}(htypec_altmode_put_plugh]htypec_altmode_put_plug}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ](jqjreh"]h$]h&]jfjguh1jXhjhhhjhMzubj)}(h(struct typec_altmode *plug)h]j)}(hstruct typec_altmode *plugh](j6)}(hj9h]hstruct}(hjhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubh)}(hhh]j_)}(h typec_altmodeh]h typec_altmode}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}jjsbc.typec_altmode_put_plugasbuh1hhjubjH)}(h h]h }(hjhhhNhNubah}(h]h ]jTah"]h$]h&]uh1jGhjubj )}(hj! h]h*}(hj&hhhNhNubah}(h]h ]j* ah"]h$]h&]uh1j hjubj_)}(hplugh]hplug}(hj3hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j^hjubeh}(h]h ]h"]h$]h&]noemphjfjguh1jhjubah}(h]h ]h"]h$]h&]jfjguh1jhjhhhjhMzubeh}(h]h ]h"]h$]h&]jfjgj|uh1j/j}j~hjhhhjhMzubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j)hjhMzhjhhubj)}(hhh]h)}(h3Decrement cable plug alternate mode reference counth]h3Decrement cable plug alternate mode reference count}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:121: ./drivers/usb/typec/bus.chMwhjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMzubeh}(h]h ](jfunctioneh"]h$]h&]jjjjujjujjjuh1j$hhhjhNhNubj)}(hX**Parameters** ``struct typec_altmode *plug`` Handle to the cable plug alternate modeh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:121: ./drivers/usb/typec/bus.chM{hjyubj)}(hhh]j)}(hF``struct typec_altmode *plug`` Handle to the cable plug alternate modeh](j )}(h``struct typec_altmode *plug``h]jr)}(hjh]hstruct typec_altmode *plug}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:121: ./drivers/usb/typec/bus.chM}hjubj#)}(hhh]h)}(h'Handle to the cable plug alternate modeh]h'Handle to the cable plug alternate mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec_bus:121: ./drivers/usb/typec/bus.chMxhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]cable-plug-operationsah ]h"]cable plug operationsah$]h&]uh1hhjhhhhhKwubeh}(h] driver-apiah ]h"] driver apiah$]h&]uh1hhhhhhhhK\ubeh}(h])api-for-usb-type-c-alternate-mode-driversah ]h"])api for usb type-c alternate mode driversah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjj:j7jjjjjjjjjLjIj j jjjjjju nametypes}(jj:jjjjjLj jjjuh}(jhj7hjj=jjNjjjjjIjj!j+jxj}j jOjljqjxj}jj j% j* j j jjj_jdjsjxjjjjjjj7j<jju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.