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/typecmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/zh_TW/driver-api/usb/typecmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/it_IT/driver-api/usb/typecmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ja_JP/driver-api/usb/typecmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ko_KR/driver-api/usb/typecmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/sp_SP/driver-api/usb/typecmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhtarget)}(h .. _typec:h]h}(h]h ]h"]h$]h&]refidtypecuh1hhKhhhhhB/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec.rstubhsection)}(hhh](htitle)}(hUSB Type-C connector classh]hUSB Type-C connector class}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Introductionh]h Introduction}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hX The typec class is meant for describing the USB Type-C ports in a system to the user space in unified fashion. The class is designed to provide nothing else except the user space interface implementation in hope that it can be utilized on as many platforms as possible.h]hX The typec class is meant for describing the USB Type-C ports in a system to the user space in unified fashion. The class is designed to provide nothing else except the user space interface implementation in hope that it can be utilized on as many platforms as possible.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hXThe platforms are expected to register every USB Type-C port they have with the class. In a normal case the registration will be done by a USB Type-C or PD PHY driver, but it may be a driver for firmware interface such as UCSI, driver for USB PD controller or even driver for Thunderbolt3 controller. This document considers the component registering the USB Type-C ports with the class as "port driver".h]hXThe platforms are expected to register every USB Type-C port they have with the class. In a normal case the registration will be done by a USB Type-C or PD PHY driver, but it may be a driver for firmware interface such as UCSI, driver for USB PD controller or even driver for Thunderbolt3 controller. This document considers the component registering the USB Type-C ports with the class as “port driver”.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hOn top of showing the capabilities, the class also offer user space control over the roles and alternate modes of ports, partners and cable plugs when the port driver is capable of supporting those features.h]hOn top of showing the capabilities, the class also offer user space control over the roles and alternate modes of ports, partners and cable plugs when the port driver is capable of supporting those features.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hThe class provides an API for the port drivers described in this document. The attributes are described in Documentation/ABI/testing/sysfs-class-typec.h]hThe class provides an API for the port drivers described in this document. The attributes are described in Documentation/ABI/testing/sysfs-class-typec.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hUser space interfaceh]hUser space interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hEvery port will be presented as its own device under /sys/class/typec/. The first port will be named "port0", the second "port1" and so on.h]hEvery port will be presented as its own device under /sys/class/typec/. The first port will be named “port0”, the second “port1” and so on.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hX5When connected, the partner will be presented also as its own device under /sys/class/typec/. The parent of the partner device will always be the port it is attached to. The partner attached to port "port0" will be named "port0-partner". Full path to the device would be /sys/class/typec/port0/port0-partner/.h]hX=When connected, the partner will be presented also as its own device under /sys/class/typec/. The parent of the partner device will always be the port it is attached to. The partner attached to port “port0” will be named “port0-partner”. Full path to the device would be /sys/class/typec/port0/port0-partner/.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjhhubh)}(hXThe cable and the two plugs on it may also be optionally presented as their own devices under /sys/class/typec/. The cable attached to the port "port0" port will be named port0-cable and the plug on the SOP Prime end (see USB Power Delivery Specification ch. 2.4) will be named "port0-plug0" and on the SOP Double Prime end "port0-plug1". The parent of a cable will always be the port, and the parent of the cable plugs will always be the cable.h]hXThe cable and the two plugs on it may also be optionally presented as their own devices under /sys/class/typec/. The cable attached to the port “port0” port will be named port0-cable and the plug on the SOP Prime end (see USB Power Delivery Specification ch. 2.4) will be named “port0-plug0” and on the SOP Double Prime end “port0-plug1”. The parent of a cable will always be the port, and the parent of the cable plugs will always be the cable.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjhhubh)}(hXIf the port, partner or cable plug supports Alternate Modes, every supported Alternate Mode SVID will have their own device describing them. Note that the Alternate Mode devices will not be attached to the typec class. The parent of an alternate mode will be the device that supports it, so for example an alternate mode of port0-partner will be presented under /sys/class/typec/port0-partner/. Every mode that is supported will have its own group under the Alternate Mode device named "mode", for example /sys/class/typec/port0//mode1/. The requests for entering/exiting a mode can be done with "active" attribute file in that group.h]hXIf the port, partner or cable plug supports Alternate Modes, every supported Alternate Mode SVID will have their own device describing them. Note that the Alternate Mode devices will not be attached to the typec class. The parent of an alternate mode will be the device that supports it, so for example an alternate mode of port0-partner will be presented under /sys/class/typec/port0-partner/. Every mode that is supported will have its own group under the Alternate Mode device named “mode”, for example /sys/class/typec/port0//mode1/. The requests for entering/exiting a mode can be done with “active” attribute file in that group.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hjhhubeh}(h]user-space-interfaceah ]h"]user space interfaceah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Driver APIh]h Driver API}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihhhhhK9ubh)}(hhh](h)}(hRegistering the portsh]hRegistering the ports}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhhhhhKhjzhhubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single typec_register_port (C function)c.typec_register_porthNtauh1jhjzhhhNhNubhdesc)}(hhh](hdesc_signature)}(hcstruct typec_port * typec_register_port (struct device *parent, const struct typec_capability *cap)h]hdesc_signature_line)}(hastruct typec_port *typec_register_port(struct device *parent, const struct typec_capability *cap)h](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:65: ./drivers/usb/typec/class.chM ubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhM ubh)}(hhh]h desc_sig_name)}(h typec_porth]h typec_port}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jtypec_register_portsbc.typec_register_portasbuh1hhjhhhjhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjhhhjhM ubh desc_name)}(htypec_register_porth]j)}(hj h]htypec_register_port}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1j-hjhhhjhM ubhdesc_parameterlist)}(h;(struct device *parent, const struct typec_capability *cap)h](hdesc_parameter)}(hstruct device *parenth](j)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]j)}(hdeviceh]hdevice}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]j c.typec_register_portasbuh1hhjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hj h]h*}(hjhhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjRubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjLubjQ)}(h"const struct typec_capability *caph](j)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(htypec_capabilityh]htypec_capability}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.typec_register_portasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj h]h*}(hj,hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjubj)}(hcaph]hcap}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjLubeh}(h]h ]h"]h$]h&]jHjIuh1jJhjhhhjhM ubeh}(h]h ]h"]h$]h&]jHjI add_permalinkuh1jsphinx_line_type declaratorhjhhhjhM ubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhM hjhhubh desc_content)}(hhh]h)}(hRegister a USB Type-C Porth]hRegister a USB Type-C Port}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:65: ./drivers/usb/typec/class.chM hjjhhubah}(h]h ]h"]h$]h&]uh1jhhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjzhNhNubh container)}(hX**Parameters** ``struct device *parent`` Parent device ``const struct typec_capability *cap`` Description of the port **Description** Registers a device for USB Type-C Port described in **cap**. Returns handle to the port on success or ERR_PTR on failure.h](h)}(h**Parameters**h]hstrong)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:65: ./drivers/usb/typec/class.chM hjubhdefinition_list)}(hhh](hdefinition_list_item)}(h(``struct device *parent`` Parent device h](hterm)}(h``struct device *parent``h]hliteral)}(hjh]hstruct device *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:65: ./drivers/usb/typec/class.chM hjubh definition)}(hhh]h)}(h Parent deviceh]h Parent device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h?``const struct typec_capability *cap`` Description of the port h](j)}(h&``const struct typec_capability *cap``h]j)}(hjh]h"const struct typec_capability *cap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:65: ./drivers/usb/typec/class.chM hjubj)}(hhh]h)}(hDescription of the porth]hDescription of the port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:65: ./drivers/usb/typec/class.chM hjubh)}(hint typec_partner_set_identity (struct typec_partner *partner)h]j)}(h=int typec_partner_set_identity(struct typec_partner *partner)h](j)}(hinth]hint}(hjx hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:96: ./drivers/usb/typec/class.chM<ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt hhhj hM<ubj.)}(htypec_partner_set_identityh]j)}(htypec_partner_set_identityh]htypec_partner_set_identity}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hjt hhhj hM<ubjK)}(h(struct typec_partner *partner)h]jQ)}(hstruct typec_partner *partnerh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h typec_partnerh]h typec_partner}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jj sbc.typec_partner_set_identityasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hj h]h*}(hj hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj ubj)}(hpartnerh]hpartner}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj ubah}(h]h ]h"]h$]h&]jHjIuh1jJhjt hhhj hM<ubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hjp hhhj hM<ubah}(h]jk ah ](j`jaeh"]h$]h&]jejf)jghuh1jhj hM<hjm hhubji)}(hhh]h)}(h,Report result from Discover Identity commandh]h,Report result from Discover Identity command}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:96: ./drivers/usb/typec/class.chM6hj5 hhubah}(h]h ]h"]h$]h&]uh1jhhjm hhhj hM<ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjP jjP jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct typec_partner *partner`` The partner updated identity values **Description** This routine is used to report that the result of Discover Identity USB power delivery command has become available.h](h)}(h**Parameters**h]j)}(hjZ h]h Parameters}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:96: ./drivers/usb/typec/class.chM:hjT ubj)}(hhh]j)}(hF``struct typec_partner *partner`` The partner updated identity values h](j)}(h!``struct typec_partner *partner``h]j)}(hjy h]hstruct typec_partner *partner}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:96: ./drivers/usb/typec/class.chM7hjs ubj)}(hhh]h)}(h#The partner updated identity valuesh]h#The partner updated identity values}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM7hj ubah}(h]h ]h"]h$]h&]uh1jhjs ubeh}(h]h ]h"]h$]h&]uh1jhj hM7hjp 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&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:96: ./drivers/usb/typec/class.chM9hjT ubh)}(htThis routine is used to report that the result of Discover Identity USB power delivery command has become available.h]htThis routine is used to report that the result of Discover Identity USB power delivery command has become available.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:96: ./drivers/usb/typec/class.chM9hjT ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]registering-partnersah ]h"]registering partnersah$]h&]uh1hhjihhhhhKLubh)}(hhh](h)}(hRegistering Cablesh]hRegistering Cables}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKdubh)}(hXAfter successful connection of a cable that supports USB Power Delivery Structured VDM "Discover Identity", the port driver needs to register the cable and one or two plugs, depending if there is CC Double Prime controller present in the cable or not. So a cable capable of SOP Prime communication, but not SOP Double Prime communication, should only have one plug registered. For more information about SOP communication, please read chapter about it from the latest USB Power Delivery specification.h]hXAfter successful connection of a cable that supports USB Power Delivery Structured VDM “Discover Identity”, the port driver needs to register the cable and one or two plugs, depending if there is CC Double Prime controller present in the cable or not. So a cable capable of SOP Prime communication, but not SOP Double Prime communication, should only have one plug registered. For more information about SOP communication, please read chapter about it from the latest USB Power Delivery specification.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKfhj hhubh)}(hXThe plugs are represented as their own devices. The cable is registered first, followed by registration of the cable plugs. The cable will be the parent device for the plugs. Details about the cable need to be described in struct typec_cable_desc and about a plug in struct typec_plug_desc. The class copies the details during registration. The class offers the following API for registering/unregistering cables and their plugs:h]hXThe plugs are represented as their own devices. The cable is registered first, followed by registration of the cable plugs. The cable will be the parent device for the plugs. Details about the cable need to be described in struct typec_cable_desc and about a plug in struct typec_plug_desc. The class copies the details during registration. The class offers the following API for registering/unregistering cables and their plugs:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKnhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j typec_register_plug (C function)c.typec_register_plughNtauh1jhj hhhNhNubj)}(hhh](j)}(hastruct typec_plug * typec_register_plug (struct typec_cable *cable, struct typec_plug_desc *desc)h]j)}(h_struct typec_plug *typec_register_plug(struct typec_cable *cable, struct typec_plug_desc *desc)h](j)}(hjh]hstruct}(hj. hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj* hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMubj)}(h h]h }(hj< hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj* hhhj; hMubh)}(hhh]j)}(h typec_plugh]h typec_plug}(hjM hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjO modnameN classnameNjj)}j]j)}jtypec_register_plugsbc.typec_register_plugasbuh1hhj* hhhj; hMubj)}(h h]h }(hjn hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj* hhhj; hMubj)}(hj h]h*}(hj| hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj* hhhj; hMubj.)}(htypec_register_plugh]j)}(hjk h]htypec_register_plug}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hj* hhhj; hMubjK)}(h9(struct typec_cable *cable, struct typec_plug_desc *desc)h](jQ)}(hstruct typec_cable *cableh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h typec_cableh]h typec_cable}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]ji c.typec_register_plugasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hj h]h*}(hj hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj ubj)}(hcableh]hcable}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj ubjQ)}(hstruct typec_plug_desc *desch](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj% hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(htypec_plug_desch]htypec_plug_desc}(hj6 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3 ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8 modnameN classnameNjj)}j]ji c.typec_register_plugasbuh1hhj ubj)}(h h]h }(hjT hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hj h]h*}(hjb hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj ubj)}(hdesch]hdesc}(hjo hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj ubeh}(h]h ]h"]h$]h&]jHjIuh1jJhj* hhhj; hMubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hj& hhhj; hMubah}(h]j! ah ](j`jaeh"]h$]h&]jejf)jghuh1jhj; hMhj# hhubji)}(hhh]h)}(h Register a USB Type-C Cable Plugh]h Register a USB Type-C Cable Plug}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhhj# hhhj; hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhj hNhNubj)}(hX**Parameters** ``struct typec_cable *cable`` USB Type-C Cable with the plug ``struct typec_plug_desc *desc`` Description of the cable plug **Description** Registers a device for USB Type-C Cable Plug described in **desc**. A USB Type-C Cable Plug represents a plug with electronics in it that can response to USB Power Delivery SOP Prime or SOP Double Prime packages. Returns handle to the cable plug on success or ERR_PTR on failure.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMhj ubj)}(hhh](j)}(h=``struct typec_cable *cable`` USB Type-C Cable with the plug h](j)}(h``struct typec_cable *cable``h]j)}(hj h]hstruct typec_cable *cable}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMhj ubj)}(hhh]h)}(hUSB Type-C Cable with the plugh]hUSB Type-C Cable with the plug}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h?``struct typec_plug_desc *desc`` Description of the cable plug h](j)}(h ``struct typec_plug_desc *desc``h]j)}(hjh]hstruct typec_plug_desc *desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMhj ubj)}(hhh]h)}(hDescription of the cable plugh]hDescription of the cable plug}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjNh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMhj ubh)}(hRegisters a device for USB Type-C Cable Plug described in **desc**. A USB Type-C Cable Plug represents a plug with electronics in it that can response to USB Power Delivery SOP Prime or SOP Double Prime packages.h](h:Registers a device for USB Type-C Cable Plug described in }(hjdhhhNhNubj)}(h**desc**h]hdesc}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh. A USB Type-C Cable Plug represents a plug with electronics in it that can response to USB Power Delivery SOP Prime or SOP Double Prime packages.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMhj ubh)}(hBReturns handle to the cable plug on success or ERR_PTR on failure.h]hBReturns handle to the cable plug on success or ERR_PTR on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"typec_unregister_plug (C function)c.typec_unregister_plughNtauh1jhj hhhNhNubj)}(hhh](j)}(h4void typec_unregister_plug (struct typec_plug *plug)h]j)}(h3void typec_unregister_plug(struct typec_plug *plug)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj.)}(htypec_unregister_plugh]j)}(htypec_unregister_plugh]htypec_unregister_plug}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hjhhhjhMubjK)}(h(struct typec_plug *plug)h]jQ)}(hstruct typec_plug *plugh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h typec_plugh]h typec_plug}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.typec_unregister_plugasbuh1hhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj h]h*}(hj=hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjubj)}(hplugh]hplug}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjubah}(h]h ]h"]h$]h&]jHjIuh1jJhjhhhjhMubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hjhhhjhMubah}(h]jah ](j`jaeh"]h$]h&]jejf)jghuh1jhjhMhjhhubji)}(hhh]h)}(h"Unregister a USB Type-C Cable Plugh]h"Unregister a USB Type-C Cable Plug}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMhjqhhubah}(h]h ]h"]h$]h&]uh1jhhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(h**Parameters** ``struct typec_plug *plug`` The cable plug to be unregistered **Description** Unregister device created with typec_register_plug().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMhjubj)}(hhh]j)}(h>``struct typec_plug *plug`` The cable plug to be unregistered h](j)}(h``struct typec_plug *plug``h]j)}(hjh]hstruct typec_plug *plug}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMhjubj)}(hhh]h)}(h!The cable plug to be unregisteredh]h!The cable plug to be unregistered}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(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&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMhjubh)}(h5Unregister device created with typec_register_plug().h]h5Unregister device created with typec_register_plug().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!typec_register_cable (C function)c.typec_register_cablehNtauh1jhj hhhNhNubj)}(hhh](j)}(hbstruct typec_cable * typec_register_cable (struct typec_port *port, struct typec_cable_desc *desc)h]j)}(h`struct typec_cable *typec_register_cable(struct typec_port *port, struct typec_cable_desc *desc)h](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMUubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhjBhMUubh)}(hhh]j)}(h typec_cableh]h typec_cable}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]j)}jtypec_register_cablesbc.typec_register_cableasbuh1hhj1hhhjBhMUubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhjBhMUubj)}(hj h]h*}(hjhhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj1hhhjBhMUubj.)}(htypec_register_cableh]j)}(hjrh]htypec_register_cable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hj1hhhjBhMUubjK)}(h8(struct typec_port *port, struct typec_cable_desc *desc)h](jQ)}(hstruct typec_port *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h typec_porth]h typec_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jpc.typec_register_cableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj h]h*}(hjhhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjubjQ)}(hstruct typec_cable_desc *desch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(htypec_cable_desch]htypec_cable_desc}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj)}j]jpc.typec_register_cableasbuh1hhjubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj h]h*}(hjihhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjubj)}(hdesch]hdesc}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjubeh}(h]h ]h"]h$]h&]jHjIuh1jJhj1hhhjBhMUubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hj-hhhjBhMUubah}(h]j(ah ](j`jaeh"]h$]h&]jejf)jghuh1jhjBhMUhj*hhubji)}(hhh]h)}(hRegister a USB Type-C Cableh]hRegister a USB Type-C Cable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMLhjhhubah}(h]h ]h"]h$]h&]uh1jhhj*hhhjBhMUubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(hXg**Parameters** ``struct typec_port *port`` The USB Type-C Port the cable is connected to ``struct typec_cable_desc *desc`` Description of the cable **Description** Registers a device for USB Type-C Cable described in **desc**. The cable will be parent for the optional cable plug devises. Returns handle to the cable on success or ERR_PTR on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMPhjubj)}(hhh](j)}(hJ``struct typec_port *port`` The USB Type-C Port the cable is connected to h](j)}(h``struct typec_port *port``h]j)}(hjh]hstruct typec_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMMhjubj)}(hhh]h)}(h-The USB Type-C Port the cable is connected toh]h-The USB Type-C Port the cable is connected to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMMhjubj)}(h;``struct typec_cable_desc *desc`` Description of the cable h](j)}(h!``struct typec_cable_desc *desc``h]j)}(hjh]hstruct typec_cable_desc *desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMNhjubj)}(hhh]h)}(hDescription of the cableh]hDescription of the cable}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMNhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMNhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjUh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMPhjubh)}(h|Registers a device for USB Type-C Cable described in **desc**. The cable will be parent for the optional cable plug devises.h](h5Registers a device for USB Type-C Cable described in }(hjkhhhNhNubj)}(h**desc**h]hdesc}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubh?. The cable will be parent for the optional cable plug devises.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMPhjubh)}(h=Returns handle to the cable on success or ERR_PTR on failure.h]h=Returns handle to the cable on success or ERR_PTR on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMShjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#typec_unregister_cable (C function)c.typec_unregister_cablehNtauh1jhj hhhNhNubj)}(hhh](j)}(h7void typec_unregister_cable (struct typec_cable *cable)h]j)}(h6void typec_unregister_cable(struct typec_cable *cable)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj.)}(htypec_unregister_cableh]j)}(htypec_unregister_cableh]htypec_unregister_cable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hjhhhjhMubjK)}(h(struct typec_cable *cable)h]jQ)}(hstruct typec_cable *cableh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h typec_cableh]h typec_cable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.typec_unregister_cableasbuh1hhjubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj h]h*}(hjDhhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjubj)}(hcableh]hcable}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjubah}(h]h ]h"]h$]h&]jHjIuh1jJhjhhhjhMubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hjhhhjhMubah}(h]jah ](j`jaeh"]h$]h&]jejf)jghuh1jhjhMhjhhubji)}(hhh]h)}(hUnregister a USB Type-C Cableh]hUnregister a USB Type-C Cable}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chM}hjxhhubah}(h]h ]h"]h$]h&]uh1jhhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(h**Parameters** ``struct typec_cable *cable`` The cable to be unregistered **Description** Unregister device created with typec_register_cable().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMhjubj)}(hhh]j)}(h;``struct typec_cable *cable`` The cable to be unregistered h](j)}(h``struct typec_cable *cable``h]j)}(hjh]hstruct typec_cable *cable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chM~hjubj)}(hhh]h)}(hThe cable to be unregisteredh]hThe cable to be unregistered}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjubah}(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&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMhjubh)}(h6Unregister device created with typec_register_cable().h]h6Unregister device created with typec_register_cable().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:117: ./drivers/usb/typec/class.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hThe class will provide a handle to struct typec_cable and struct typec_plug if the registration is successful, or NULL if it isn't.h]hThe class will provide a handle to struct typec_cable and struct typec_plug if the registration is successful, or NULL if it isn’t.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKxhj hhubh)}(hX|If the cable is USB Power Delivery capable, and the port driver is able to show the result of Discover Identity command, the cable descriptor structure should include handle to struct usb_pd_identity instance. The class will then create a sysfs directory for the identity under the cable device. The result of Discover Identity command can then be reported with the following API:h]hX|If the cable is USB Power Delivery capable, and the port driver is able to show the result of Discover Identity command, the cable descriptor structure should include handle to struct usb_pd_identity instance. The class will then create a sysfs directory for the identity under the cable device. The result of Discover Identity command can then be reported with the following API:}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK{hj hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%typec_cable_set_identity (C function)c.typec_cable_set_identityhNtauh1jhj hhhNhNubj)}(hhh](j)}(h8int typec_cable_set_identity (struct typec_cable *cable)h]j)}(h7int typec_cable_set_identity(struct typec_cable *cable)h](j)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:129: ./drivers/usb/typec/class.chMAubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjfhMAubj.)}(htypec_cable_set_identityh]j)}(htypec_cable_set_identityh]htypec_cable_set_identity}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hjThhhjfhMAubjK)}(h(struct typec_cable *cable)h]jQ)}(hstruct typec_cable *cableh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h typec_cableh]h typec_cable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj{sbc.typec_cable_set_identityasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj h]h*}(hjhhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjubj)}(hcableh]hcable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjubah}(h]h ]h"]h$]h&]jHjIuh1jJhjThhhjfhMAubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hjPhhhjfhMAubah}(h]jKah ](j`jaeh"]h$]h&]jejf)jghuh1jhjfhMAhjMhhubji)}(hhh]h)}(h,Report result from Discover Identity commandh]h,Report result from Discover Identity command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:129: ./drivers/usb/typec/class.chM;hjhhubah}(h]h ]h"]h$]h&]uh1jhhjMhhhjfhMAubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1jhhhj hNhNubj)}(h**Parameters** ``struct typec_cable *cable`` The cable updated identity values **Description** This routine is used to report that the result of Discover Identity USB power delivery command has become available.h](h)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:129: ./drivers/usb/typec/class.chM?hj4ubj)}(hhh]j)}(h@``struct typec_cable *cable`` The cable updated identity values h](j)}(h``struct typec_cable *cable``h]j)}(hjYh]hstruct typec_cable *cable}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:129: ./drivers/usb/typec/class.chM<hjSubj)}(hhh]h)}(h!The cable updated identity valuesh]h!The cable updated identity values}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhM<hjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhM<hjPubah}(h]h ]h"]h$]h&]uh1jhj4ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:129: ./drivers/usb/typec/class.chM>hj4ubh)}(htThis routine is used to report that the result of Discover Identity USB power delivery command has become available.h]htThis routine is used to report that the result of Discover Identity USB power delivery command has become available.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:129: ./drivers/usb/typec/class.chM>hj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubeh}(h]registering-cablesah ]h"]registering cablesah$]h&]uh1hhjihhhhhKdubh)}(hhh](h)}(h Notificationsh]h Notifications}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hWhen the partner has executed a role change, or when the default roles change during connection of a partner or cable, the port driver must use the following APIs to report it to the class:h]hWhen the partner has executed a role change, or when the default roles change during connection of a partner or cable, the port driver must use the following APIs to report it to the class:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j typec_set_data_role (C function)c.typec_set_data_rolehNtauh1jhjhhhNhNubj)}(hhh](j)}(hMvoid typec_set_data_role (struct typec_port *port, enum typec_data_role role)h]j)}(hLvoid typec_set_data_role(struct typec_port *port, enum typec_data_role role)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chM5ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM5ubj.)}(htypec_set_data_roleh]j)}(htypec_set_data_roleh]htypec_set_data_role}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hjhhhjhM5ubjK)}(h4(struct typec_port *port, enum typec_data_role role)h](jQ)}(hstruct typec_port *porth](j)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hhh]j)}(h typec_porth]h typec_port}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]j)}jj#sbc.typec_set_data_roleasbuh1hhj9ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hj h]h*}(hjhhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj9ubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj5ubjQ)}(henum typec_data_role roleh](j)}(henumh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(htypec_data_roleh]htypec_data_role}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jwc.typec_set_data_roleasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hroleh]hrole}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj5ubeh}(h]h ]h"]h$]h&]jHjIuh1jJhjhhhjhM5ubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hjhhhjhM5ubah}(h]jah ](j`jaeh"]h$]h&]jejf)jghuh1jhjhM5hjhhubji)}(hhh]h)}(hReport data role changeh]hReport data role change}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chM/hj!hhubah}(h]h ]h"]h$]h&]uh1jhhjhhhjhM5ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct typec_port *port`` The USB Type-C Port where the role was changed ``enum typec_data_role role`` The new data role **Description** This routine is used by the port drivers to report data role changes.h](h)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chM3hj@ubj)}(hhh](j)}(hK``struct typec_port *port`` The USB Type-C Port where the role was changed h](j)}(h``struct typec_port *port``h]j)}(hjeh]hstruct typec_port *port}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chM0hj_ubj)}(hhh]h)}(h.The USB Type-C Port where the role was changedh]h.The USB Type-C Port where the role was changed}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhM0hj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhM0hj\ubj)}(h0``enum typec_data_role role`` The new data role h](j)}(h``enum typec_data_role role``h]j)}(hjh]henum typec_data_role role}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chM1hjubj)}(hhh]h)}(hThe new data roleh]hThe new data role}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hj\ubeh}(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&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chM3hj@ubh)}(hEThis routine is used by the port drivers to report data role changes.h]hEThis routine is used by the port drivers to report data role changes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chM3hj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtypec_set_pwr_role (C function)c.typec_set_pwr_rolehNtauh1jhjhhhNhNubj)}(hhh](j)}(hGvoid typec_set_pwr_role (struct typec_port *port, enum typec_role role)h]j)}(hFvoid typec_set_pwr_role(struct typec_port *port, enum typec_role role)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMRubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj,hMRubj.)}(htypec_set_pwr_roleh]j)}(htypec_set_pwr_roleh]htypec_set_pwr_role}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hjhhhj,hMRubjK)}(h/(struct typec_port *port, enum typec_role role)h](jQ)}(hstruct typec_port *porth](j)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]j)}(h typec_porth]h typec_port}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]j)}jjAsbc.typec_set_pwr_roleasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hj h]h*}(hjhhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjWubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjSubjQ)}(henum typec_role roleh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h typec_roleh]h typec_role}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.typec_set_pwr_roleasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hroleh]hrole}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjSubeh}(h]h ]h"]h$]h&]jHjIuh1jJhjhhhj,hMRubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hjhhhj,hMRubah}(h]jah ](j`jaeh"]h$]h&]jejf)jghuh1jhj,hMRhjhhubji)}(hhh]h)}(hReport power role changeh]hReport power role change}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMLhj>hhubah}(h]h ]h"]h$]h&]uh1jhhjhhhj,hMRubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYjjYjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct typec_port *port`` The USB Type-C Port where the role was changed ``enum typec_role role`` The new data role **Description** This routine is used by the port drivers to report power role changes.h](h)}(h**Parameters**h]j)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMPhj]ubj)}(hhh](j)}(hK``struct typec_port *port`` The USB Type-C Port where the role was changed h](j)}(h``struct typec_port *port``h]j)}(hjh]hstruct typec_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMMhj|ubj)}(hhh]h)}(h.The USB Type-C Port where the role was changedh]h.The USB Type-C Port where the role was changed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMMhjyubj)}(h+``enum typec_role role`` The new data role h](j)}(h``enum typec_role role``h]j)}(hjh]henum typec_role role}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMNhjubj)}(hhh]h)}(hThe new data roleh]hThe new data role}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjyubeh}(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&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMPhj]ubh)}(hFThis routine is used by the port drivers to report power role changes.h]hFThis routine is used by the port drivers to report power role changes.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMPhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!typec_set_vconn_role (C function)c.typec_set_vconn_rolehNtauh1jhjhhhNhNubj)}(hhh](j)}(hIvoid typec_set_vconn_role (struct typec_port *port, enum typec_role role)h]j)}(hHvoid typec_set_vconn_role(struct typec_port *port, enum typec_role role)h](j)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMeubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhjIhMeubj.)}(htypec_set_vconn_roleh]j)}(htypec_set_vconn_roleh]htypec_set_vconn_role}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hj7hhhjIhMeubjK)}(h/(struct typec_port *port, enum typec_role role)h](jQ)}(hstruct typec_port *porth](j)}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]j)}(h typec_porth]h typec_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj^sbc.typec_set_vconn_roleasbuh1hhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hj h]h*}(hjhhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjtubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjpubjQ)}(henum typec_role roleh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h typec_roleh]h typec_role}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.typec_set_vconn_roleasbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hroleh]hrole}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjpubeh}(h]h ]h"]h$]h&]jHjIuh1jJhj7hhhjIhMeubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hj3hhhjIhMeubah}(h]j.ah ](j`jaeh"]h$]h&]jejf)jghuh1jhjIhMehj0hhubji)}(hhh]h)}(hReport VCONN source changeh]hReport VCONN source change}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chM^hj[hhubah}(h]h ]h"]h$]h&]uh1jhhj0hhhjIhMeubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvjjvjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct typec_port *port`` The USB Type-C Port which VCONN role changed ``enum typec_role role`` Source when **port** is sourcing VCONN, or Sink when it's not **Description** This routine is used by the port drivers to report if the VCONN source is changes.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMbhjzubj)}(hhh](j)}(hI``struct typec_port *port`` The USB Type-C Port which VCONN role changed h](j)}(h``struct typec_port *port``h]j)}(hjh]hstruct typec_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chM_hjubj)}(hhh]h)}(h,The USB Type-C Port which VCONN role changedh]h,The USB Type-C Port which VCONN role changed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM_hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM_hjubj)}(hW``enum typec_role role`` Source when **port** is sourcing VCONN, or Sink when it's not h](j)}(h``enum typec_role role``h]j)}(hjh]henum typec_role role}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chM`hjubj)}(hhh]h)}(h=Source when **port** is sourcing VCONN, or Sink when it's noth](h Source when }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh+ is sourcing VCONN, or Sink when it’s not}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM`hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM`hjubeh}(h]h ]h"]h$]h&]uh1jhjzubh)}(h**Description**h]j)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMbhjzubh)}(hRThis routine is used by the port drivers to report if the VCONN source is changes.h]hRThis routine is used by the port drivers to report if the VCONN source is changes.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMbhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!typec_set_pwr_opmode (C function)c.typec_set_pwr_opmodehNtauh1jhjhhhNhNubj)}(hhh](j)}(hQvoid typec_set_pwr_opmode (struct typec_port *port, enum typec_pwr_opmode opmode)h]j)}(hPvoid typec_set_pwr_opmode(struct typec_port *port, enum typec_pwr_opmode opmode)h](j)}(hvoidh]hvoid}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMzubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjxhMzubj.)}(htypec_set_pwr_opmodeh]j)}(htypec_set_pwr_opmodeh]htypec_set_pwr_opmode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hjfhhhjxhMzubjK)}(h7(struct typec_port *port, enum typec_pwr_opmode opmode)h](jQ)}(hstruct typec_port *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h typec_porth]h typec_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.typec_set_pwr_opmodeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj h]h*}(hjhhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjubjQ)}(henum typec_pwr_opmode opmodeh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(htypec_pwr_opmodeh]htypec_pwr_opmode}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]jc.typec_set_pwr_opmodeasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hopmodeh]hopmode}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjubeh}(h]h ]h"]h$]h&]jHjIuh1jJhjfhhhjxhMzubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hjbhhhjxhMzubah}(h]j]ah ](j`jaeh"]h$]h&]jejf)jghuh1jhjxhMzhj_hhubji)}(hhh]h)}(h#Report changed power operation modeh]h#Report changed power operation mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMqhjhhubah}(h]h ]h"]h$]h&]uh1jhhj_hhhjxhMzubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct typec_port *port`` The USB Type-C Port where the mode was changed ``enum typec_pwr_opmode opmode`` New power operation mode **Description** This routine is used by the port drivers to report changed power operation mode in **port**. The modes are USB (default), 1.5A, 3.0A as defined in USB Type-C specification, and "USB Power Delivery" when the power levels are negotiated with methods defined in USB Power Delivery specification.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMuhjubj)}(hhh](j)}(hK``struct typec_port *port`` The USB Type-C Port where the mode was changed h](j)}(h``struct typec_port *port``h]j)}(hjh]hstruct typec_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMrhjubj)}(hhh]h)}(h.The USB Type-C Port where the mode was changedh]h.The USB Type-C Port where the mode was changed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjubj)}(h:``enum typec_pwr_opmode opmode`` New power operation mode h](j)}(h ``enum typec_pwr_opmode opmode``h]j)}(hjh]henum typec_pwr_opmode opmode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMshjubj)}(hhh]h)}(hNew power operation modeh]hNew power operation mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjBh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMuhjubh)}(hX$This routine is used by the port drivers to report changed power operation mode in **port**. The modes are USB (default), 1.5A, 3.0A as defined in USB Type-C specification, and "USB Power Delivery" when the power levels are negotiated with methods defined in USB Power Delivery specification.h](hSThis routine is used by the port drivers to report changed power operation mode in }(hjXhhhNhNubj)}(h**port**h]hport}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh. The modes are USB (default), 1.5A, 3.0A as defined in USB Type-C specification, and “USB Power Delivery” when the power levels are negotiated with methods defined in USB Power Delivery specification.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:139: ./drivers/usb/typec/class.chMuhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h] notificationsah ]h"] notificationsah$]h&]uh1hhjihhhhhKubh)}(hhh](h)}(hAlternate Modesh]hAlternate Modes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hXUSB Type-C ports, partners and cable plugs may support Alternate Modes. Each Alternate Mode will have identifier called SVID, which is either a Standard ID given by USB-IF or vendor ID, and each supported SVID can have 1 - 6 modes. The class provides struct typec_mode_desc for describing individual mode of a SVID, and struct typec_altmode_desc which is a container for all the supported modes.h]hXUSB Type-C ports, partners and cable plugs may support Alternate Modes. Each Alternate Mode will have identifier called SVID, which is either a Standard ID given by USB-IF or vendor ID, and each supported SVID can have 1 - 6 modes. The class provides struct typec_mode_desc for describing individual mode of a SVID, and struct typec_altmode_desc which is a container for all the supported modes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hbPorts that support Alternate Modes need to register each SVID they support with the following API:h]hbPorts that support Alternate Modes need to register each SVID they support with the following API:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(typec_port_register_altmode (C function)c.typec_port_register_altmodehNtauh1jhjhhhNhNubj)}(hhh](j)}(hsstruct typec_altmode * typec_port_register_altmode (struct typec_port *port, const struct typec_altmode_desc *desc)h]j)}(hqstruct typec_altmode *typec_port_register_altmode(struct typec_port *port, const struct typec_altmode_desc *desc)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:154: ./drivers/usb/typec/class.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hhh]j)}(h typec_altmodeh]h typec_altmode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jtypec_port_register_altmodesbc.typec_port_register_altmodeasbuh1hhjhhhjhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hj h]h*}(hjhhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjhhhjhM ubj.)}(htypec_port_register_altmodeh]j)}(hj h]htypec_port_register_altmode}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hjhhhjhM ubjK)}(h@(struct typec_port *port, const struct typec_altmode_desc *desc)h](jQ)}(hstruct typec_port *porth](j)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]j)}(h typec_porth]h typec_port}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]j c.typec_port_register_altmodeasbuh1hhjDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hj h]h*}(hjhhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjDubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj@ubjQ)}(h%const struct typec_altmode_desc *desch](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(htypec_altmode_desch]htypec_altmode_desc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.typec_port_register_altmodeasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj h]h*}(hj hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjubj)}(hdesch]hdesc}(hj* hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj@ubeh}(h]h ]h"]h$]h&]jHjIuh1jJhjhhhjhM ubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hjhhhjhM ubah}(h]jah ](j`jaeh"]h$]h&]jejf)jghuh1jhjhM hjhhubji)}(hhh]h)}(h'Register USB Type-C Port Alternate Modeh]h'Register USB Type-C Port Alternate Mode}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:154: ./drivers/usb/typec/class.chM hjQ hhubah}(h]h ]h"]h$]h&]uh1jhhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjl jjl jjjuh1jhhhjhNhNubj)}(hXb**Parameters** ``struct typec_port *port`` USB Type-C Port that supports the alternate mode ``const struct typec_altmode_desc *desc`` Description of the alternate mode **Description** This routine is used to register an alternate mode that **port** is capable of supporting. Returns handle to the alternate mode on success or ERR_PTR on failure.h](h)}(h**Parameters**h]j)}(hjv h]h Parameters}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:154: ./drivers/usb/typec/class.chM hjp ubj)}(hhh](j)}(hM``struct typec_port *port`` USB Type-C Port that supports the alternate mode h](j)}(h``struct typec_port *port``h]j)}(hj h]hstruct typec_port *port}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:154: ./drivers/usb/typec/class.chM hj ubj)}(hhh]h)}(h0USB Type-C Port that supports the alternate modeh]h0USB Type-C Port that supports the alternate mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM hj ubj)}(hL``const struct typec_altmode_desc *desc`` Description of the alternate mode h](j)}(h)``const struct typec_altmode_desc *desc``h]j)}(hj h]h%const struct typec_altmode_desc *desc}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:154: ./drivers/usb/typec/class.chM hj ubj)}(hhh]h)}(h!Description of the alternate modeh]h!Description of the alternate mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM hj ubeh}(h]h ]h"]h$]h&]uh1jhjp ubh)}(h**Description**h]j)}(hj !h]h Description}(hj !hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:154: ./drivers/usb/typec/class.chM hjp ubh)}(hZThis routine is used to register an alternate mode that **port** is capable of supporting.h](h8This routine is used to register an alternate mode that }(hj!hhhNhNubj)}(h**port**h]hport}(hj'!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh is capable of supporting.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:154: ./drivers/usb/typec/class.chM hjp ubh)}(hFReturns handle to the alternate mode on success or ERR_PTR on failure.h]hFReturns handle to the alternate mode on success or ERR_PTR on failure.}(hj@!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:154: ./drivers/usb/typec/class.chM hjp ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hIf a partner or cable plug provides a list of SVIDs as response to USB Power Delivery Structured VDM Discover SVIDs message, each SVID needs to be registered.h]hIf a partner or cable plug provides a list of SVIDs as response to USB Power Delivery Structured VDM Discover SVIDs message, each SVID needs to be registered.}(hjV!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hAPI for the partners:h]hAPI for the partners:}(hjd!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j+typec_partner_register_altmode (C function) c.typec_partner_register_altmodehNtauh1jhjhhhNhNubj)}(hhh](j)}(h|struct typec_altmode * typec_partner_register_altmode (struct typec_partner *partner, const struct typec_altmode_desc *desc)h]j)}(hzstruct typec_altmode *typec_partner_register_altmode(struct typec_partner *partner, const struct typec_altmode_desc *desc)h](j)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:163: ./drivers/usb/typec/class.chMubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj!hMubh)}(hhh]j)}(h typec_altmodeh]h typec_altmode}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]j)}jtypec_partner_register_altmodesb c.typec_partner_register_altmodeasbuh1hhj!hhhj!hMubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj!hMubj)}(hj h]h*}(hj!hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj!hhhj!hMubj.)}(htypec_partner_register_altmodeh]j)}(hj!h]htypec_partner_register_altmode}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hj!hhhj!hMubjK)}(hF(struct typec_partner *partner, const struct typec_altmode_desc *desc)h](jQ)}(hstruct typec_partner *partnerh](j)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]j)}(h typec_partnerh]h typec_partner}(hj#"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj "ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%"modnameN classnameNjj)}j]j! c.typec_partner_register_altmodeasbuh1hhj"ubj)}(h h]h }(hjA"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hj h]h*}(hjO"hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj"ubj)}(hpartnerh]hpartner}(hj\"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj!ubjQ)}(h%const struct typec_altmode_desc *desch](j)}(hjh]hconst}(hju"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq"ubj)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq"ubh)}(hhh]j)}(htypec_altmode_desch]htypec_altmode_desc}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j! c.typec_partner_register_altmodeasbuh1hhjq"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq"ubj)}(hj h]h*}(hj"hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjq"ubj)}(hdesch]hdesc}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq"ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj!ubeh}(h]h ]h"]h$]h&]jHjIuh1jJhj!hhhj!hMubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hj!hhhj!hMubah}(h]j~!ah ](j`jaeh"]h$]h&]jejf)jghuh1jhj!hMhj!hhubji)}(hhh]h)}(h*Register USB Type-C Partner Alternate Modeh]h*Register USB Type-C Partner Alternate Mode}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:163: ./drivers/usb/typec/class.chMhj#hhubah}(h]h ]h"]h$]h&]uh1jhhj!hhhj!hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)#jj)#jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct typec_partner *partner`` USB Type-C Partner that supports the alternate mode ``const struct typec_altmode_desc *desc`` Description of the alternate mode **Description** This routine is used to register each alternate mode individually that **partner** has listed in response to Discover SVIDs command. The modes for a SVID listed in response to Discover Modes command need to be listed in an array in **desc**. Returns handle to the alternate mode on success or ERR_PTR on failure.h](h)}(h**Parameters**h]j)}(hj3#h]h Parameters}(hj5#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1#ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:163: ./drivers/usb/typec/class.chMhj-#ubj)}(hhh](j)}(hV``struct typec_partner *partner`` USB Type-C Partner that supports the alternate mode h](j)}(h!``struct typec_partner *partner``h]j)}(hjR#h]hstruct typec_partner *partner}(hjT#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP#ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:163: ./drivers/usb/typec/class.chMhjL#ubj)}(hhh]h)}(h3USB Type-C Partner that supports the alternate modeh]h3USB Type-C Partner that supports the alternate mode}(hjk#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg#hMhjh#ubah}(h]h ]h"]h$]h&]uh1jhjL#ubeh}(h]h ]h"]h$]h&]uh1jhjg#hMhjI#ubj)}(hL``const struct typec_altmode_desc *desc`` Description of the alternate mode h](j)}(h)``const struct typec_altmode_desc *desc``h]j)}(hj#h]h%const struct typec_altmode_desc *desc}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:163: ./drivers/usb/typec/class.chMhj#ubj)}(hhh]h)}(h!Description of the alternate modeh]h!Description of the alternate mode}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjI#ubeh}(h]h ]h"]h$]h&]uh1jhj-#ubh)}(h**Description**h]j)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:163: ./drivers/usb/typec/class.chMhj-#ubh)}(hThis routine is used to register each alternate mode individually that **partner** has listed in response to Discover SVIDs command. The modes for a SVID listed in response to Discover Modes command need to be listed in an array in **desc**.h](hGThis routine is used to register each alternate mode individually that }(hj#hhhNhNubj)}(h **partner**h]hpartner}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh has listed in response to Discover SVIDs command. The modes for a SVID listed in response to Discover Modes command need to be listed in an array in }(hj#hhhNhNubj)}(h**desc**h]hdesc}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:163: ./drivers/usb/typec/class.chMhj-#ubh)}(hFReturns handle to the alternate mode on success or ERR_PTR on failure.h]hFReturns handle to the alternate mode on success or ERR_PTR on failure.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:163: ./drivers/usb/typec/class.chMhj-#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hAPI for the Cable Plugs:h]hAPI for the Cable Plugs:}(hj%$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(typec_plug_register_altmode (C function)c.typec_plug_register_altmodehNtauh1jhjhhhNhNubj)}(hhh](j)}(hsstruct typec_altmode * typec_plug_register_altmode (struct typec_plug *plug, const struct typec_altmode_desc *desc)h]j)}(hqstruct typec_altmode *typec_plug_register_altmode(struct typec_plug *plug, const struct typec_altmode_desc *desc)h](j)}(hjh]hstruct}(hjL$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH$hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:168: ./drivers/usb/typec/class.chMubj)}(h h]h }(hjZ$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH$hhhjY$hMubh)}(hhh]j)}(h typec_altmodeh]h typec_altmode}(hjk$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjm$modnameN classnameNjj)}j]j)}jtypec_plug_register_altmodesbc.typec_plug_register_altmodeasbuh1hhjH$hhhjY$hMubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH$hhhjY$hMubj)}(hj h]h*}(hj$hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjH$hhhjY$hMubj.)}(htypec_plug_register_altmodeh]j)}(hj$h]htypec_plug_register_altmode}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hjH$hhhjY$hMubjK)}(h@(struct typec_plug *plug, const struct typec_altmode_desc *desc)h](jQ)}(hstruct typec_plug *plugh](j)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hhh]j)}(h typec_plugh]h typec_plug}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j$c.typec_plug_register_altmodeasbuh1hhj$ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hj h]h*}(hj%hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj$ubj)}(hplugh]hplug}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj$ubjQ)}(h%const struct typec_altmode_desc *desch](j)}(hjh]hconst}(hj6%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2%ubj)}(h h]h }(hjC%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2%ubj)}(hjh]hstruct}(hjQ%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2%ubj)}(h h]h }(hj^%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2%ubh)}(hhh]j)}(htypec_altmode_desch]htypec_altmode_desc}(hjo%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjq%modnameN classnameNjj)}j]j$c.typec_plug_register_altmodeasbuh1hhj2%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2%ubj)}(hj h]h*}(hj%hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj2%ubj)}(hdesch]hdesc}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2%ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj$ubeh}(h]h ]h"]h$]h&]jHjIuh1jJhjH$hhhjY$hMubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hjD$hhhjY$hMubah}(h]j?$ah ](j`jaeh"]h$]h&]jejf)jghuh1jhjY$hMhjA$hhubji)}(hhh]h)}(h-Register USB Type-C Cable Plug Alternate Modeh]h-Register USB Type-C Cable Plug Alternate Mode}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:168: ./drivers/usb/typec/class.chMhj%hhubah}(h]h ]h"]h$]h&]uh1jhhjA$hhhjY$hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%jj%jjjuh1jhhhjhNhNubj)}(hX **Parameters** ``struct typec_plug *plug`` USB Type-C Cable Plug that supports the alternate mode ``const struct typec_altmode_desc *desc`` Description of the alternate mode **Description** This routine is used to register each alternate mode individually that **plug** has listed in response to Discover SVIDs command. The modes for a SVID that the plug lists in response to Discover Modes command need to be listed in an array in **desc**. Returns handle to the alternate mode on success or ERR_PTR on failure.h](h)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:168: ./drivers/usb/typec/class.chMhj%ubj)}(hhh](j)}(hS``struct typec_plug *plug`` USB Type-C Cable Plug that supports the alternate mode h](j)}(h``struct typec_plug *plug``h]j)}(hj&h]hstruct typec_plug *plug}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:168: ./drivers/usb/typec/class.chMhj &ubj)}(hhh]h)}(h6USB Type-C Cable Plug that supports the alternate modeh]h6USB Type-C Cable Plug that supports the alternate mode}(hj,&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(&hMhj)&ubah}(h]h ]h"]h$]h&]uh1jhj &ubeh}(h]h ]h"]h$]h&]uh1jhj(&hMhj &ubj)}(hL``const struct typec_altmode_desc *desc`` Description of the alternate mode h](j)}(h)``const struct typec_altmode_desc *desc``h]j)}(hjL&h]h%const struct typec_altmode_desc *desc}(hjN&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ&ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:168: ./drivers/usb/typec/class.chMhjF&ubj)}(hhh]h)}(h!Description of the alternate modeh]h!Description of the alternate mode}(hje&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja&hMhjb&ubah}(h]h ]h"]h$]h&]uh1jhjF&ubeh}(h]h ]h"]h$]h&]uh1jhja&hMhj &ubeh}(h]h ]h"]h$]h&]uh1jhj%ubh)}(h**Description**h]j)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:168: ./drivers/usb/typec/class.chMhj%ubh)}(hThis routine is used to register each alternate mode individually that **plug** has listed in response to Discover SVIDs command. The modes for a SVID that the plug lists in response to Discover Modes command need to be listed in an array in **desc**.h](hGThis routine is used to register each alternate mode individually that }(hj&hhhNhNubj)}(h**plug**h]hplug}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh has listed in response to Discover SVIDs command. The modes for a SVID that the plug lists in response to Discover Modes command need to be listed in an array in }(hj&hhhNhNubj)}(h**desc**h]hdesc}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:168: ./drivers/usb/typec/class.chMhj%ubh)}(hFReturns handle to the alternate mode on success or ERR_PTR on failure.h]hFReturns handle to the alternate mode on success or ERR_PTR on failure.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:168: ./drivers/usb/typec/class.chMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hSo ports, partners and cable plugs will register the alternate modes with their own functions, but the registration will always return a handle to struct typec_altmode on success, or NULL. The unregistration will happen with the same function:h]hSo ports, partners and cable plugs will register the alternate modes with their own functions, but the registration will always return a handle to struct typec_altmode on success, or NULL. The unregistration will happen with the same function:}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%typec_unregister_altmode (C function)c.typec_unregister_altmodehNtauh1jhjhhhNhNubj)}(hhh](j)}(h:void typec_unregister_altmode (struct typec_altmode *adev)h]j)}(h9void typec_unregister_altmode(struct typec_altmode *adev)h](j)}(hvoidh]hvoid}(hj 'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 'hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:176: ./drivers/usb/typec/class.chMeubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 'hhhj'hMeubj.)}(htypec_unregister_altmodeh]j)}(htypec_unregister_altmodeh]htypec_unregister_altmode}(hj.'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*'ubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hj 'hhhj'hMeubjK)}(h(struct typec_altmode *adev)h]jQ)}(hstruct typec_altmode *adevh](j)}(hjh]hstruct}(hjJ'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF'ubj)}(h h]h }(hjW'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF'ubh)}(hhh]j)}(h typec_altmodeh]h typec_altmode}(hjh'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjj'modnameN classnameNjj)}j]j)}jj0'sbc.typec_unregister_altmodeasbuh1hhjF'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF'ubj)}(hj h]h*}(hj'hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjF'ubj)}(hadevh]hadev}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF'ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjB'ubah}(h]h ]h"]h$]h&]jHjIuh1jJhj 'hhhj'hMeubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hj'hhhj'hMeubah}(h]j'ah ](j`jaeh"]h$]h&]jejf)jghuh1jhj'hMehj'hhubji)}(hhh]h)}(hUnregister Alternate Modeh]hUnregister Alternate Mode}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:176: ./drivers/usb/typec/class.chM_hj'hhubah^}(h]h ]h"]h$]h&]uh1jhhj'hhhj'hMeubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct typec_altmode *adev`` The alternate mode to be unregistered **Description** Unregister device created with typec_partner_register_altmode(), typec_plug_register_altmode() or typec_port_register_altmode().h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:176: ./drivers/usb/typec/class.chMchj'ubj)}(hhh]j)}(hE``struct typec_altmode *adev`` The alternate mode to be unregistered h](j)}(h``struct typec_altmode *adev``h]j)}(hj(h]hstruct typec_altmode *adev}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj (ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:176: ./drivers/usb/typec/class.chM`hj(ubj)}(hhh]h)}(h%The alternate mode to be unregisteredh]h%The alternate mode to be unregistered}(hj'(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#(hM`hj$(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj#(hM`hj(ubah}(h]h ]h"]h$]h&]uh1jhj'ubh)}(h**Description**h]j)}(hjI(h]h Description}(hjK(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG(ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:176: ./drivers/usb/typec/class.chMbhj'ubh)}(hUnregister device created with typec_partner_register_altmode(), typec_plug_register_altmode() or typec_port_register_altmode().h]hUnregister device created with typec_partner_register_altmode(), typec_plug_register_altmode() or typec_port_register_altmode().}(hj_(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:176: ./drivers/usb/typec/class.chMbhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(htIf a partner or cable plug enters or exits a mode, the port driver needs to notify the class with the following API:h]htIf a partner or cable plug enters or exits a mode, the port driver needs to notify the class with the following API:}(hju(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(typec_altmode_update_active (C function)c.typec_altmode_update_activehNtauh1jhjhhhNhNubj)}(hhh](j)}(hJvoid typec_altmode_update_active (struct typec_altmode *adev, bool active)h]j)}(hIvoid typec_altmode_update_active(struct typec_altmode *adev, bool active)h](j)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:182: ./drivers/usb/typec/class.chM,ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj(hM,ubj.)}(htypec_altmode_update_activeh]j)}(htypec_altmode_update_activeh]htypec_altmode_update_active}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hj(hhhj(hM,ubjK)}(h)(struct typec_altmode *adev, bool active)h](jQ)}(hstruct typec_altmode *adevh](j)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]j)}(h typec_altmodeh]h typec_altmode}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j)}jj(sbc.typec_altmode_update_activeasbuh1hhj(ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hj h]h*}(hj%)hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj(ubj)}(hadevh]hadev}(hj2)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj(ubjQ)}(h bool activeh](j)}(hboolh]hbool}(hjK)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG)ubj)}(h h]h }(hjY)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG)ubj)}(hactiveh]hactive}(hjg)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG)ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj(ubeh}(h]h ]h"]h$]h&]jHjIuh1jJhj(hhhj(hM,ubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hj(hhhj(hM,ubah}(h]j(ah ](j`jaeh"]h$]h&]jejf)jghuh1jhj(hM,hj(hhubji)}(hhh]h)}(hReport Enter/Exit modeh]hReport Enter/Exit mode}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:182: ./drivers/usb/typec/class.chM%hj)hhubah}(h]h ]h"]h$]h&]uh1jhhj(hhhj(hM,ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)jj)jjjuh1jhhhjhNhNubj)}(hX&**Parameters** ``struct typec_altmode *adev`` Handle to the alternate mode ``bool active`` True when the mode has been entered **Description** If a partner or cable plug executes Enter/Exit Mode command successfully, the drivers use this routine to report the updated state of the mode.h](h)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:182: ./drivers/usb/typec/class.chM)hj)ubj)}(hhh](j)}(h<``struct typec_altmode *adev`` Handle to the alternate mode h](j)}(h``struct typec_altmode *adev``h]j)}(hj)h]hstruct typec_altmode *adev}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:182: ./drivers/usb/typec/class.chM&hj)ubj)}(hhh]h)}(hHandle to the alternate modeh]hHandle to the alternate mode}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hM&hj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hM&hj)ubj)}(h4``bool active`` True when the mode has been entered h](j)}(h``bool active``h]j)}(hj *h]h bool active}(hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj *ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:182: ./drivers/usb/typec/class.chM'hj*ubj)}(hhh]h)}(h#True when the mode has been enteredh]h#True when the mode has been entered}(hj$*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj *hM'hj!*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj *hM'hj)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubh)}(h**Description**h]j)}(hjF*h]h Description}(hjH*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD*ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:182: ./drivers/usb/typec/class.chM)hj)ubh)}(hIf a partner or cable plug executes Enter/Exit Mode command successfully, the drivers use this routine to report the updated state of the mode.h]hIf a partner or cable plug executes Enter/Exit Mode command successfully, the drivers use this routine to report the updated state of the mode.}(hj\*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:182: ./drivers/usb/typec/class.chM)hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]alternate-modesah ]h"]alternate modesah$]h&]uh1hhjihhhhhKubh)}(hhh](h)}(h"Multiplexer/DeMultiplexer Switchesh]h"Multiplexer/DeMultiplexer Switches}(hj}*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjz*hhhhhKubh)}(hXUSB Type-C connectors may have one or more mux/demux switches behind them. Since the plugs can be inserted right-side-up or upside-down, a switch is needed to route the correct data pairs from the connector to the USB controllers. If Alternate or Accessory Modes are supported, another switch is needed that can route the pins on the connector to some other component besides USB. USB Type-C Connector Class supplies an API for registering those switches.h]hXUSB Type-C connectors may have one or more mux/demux switches behind them. Since the plugs can be inserted right-side-up or upside-down, a switch is needed to route the correct data pairs from the connector to the USB controllers. If Alternate or Accessory Modes are supported, another switch is needed that can route the pins on the connector to some other component besides USB. USB Type-C Connector Class supplies an API for registering those switches.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjz*hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"typec_switch_register (C function)c.typec_switch_registerhNtauh1jhjz*hhhNhNubj)}(hhh](j)}(hmstruct typec_switch_dev * typec_switch_register (struct device *parent, const struct typec_switch_desc *desc)h]j)}(hkstruct typec_switch_dev *typec_switch_register(struct device *parent, const struct typec_switch_desc *desc)h](j)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chKubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj*hKubh)}(hhh]j)}(htypec_switch_devh]htypec_switch_dev}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]j)}jtypec_switch_registersbc.typec_switch_registerasbuh1hhj*hhhj*hKubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj*hKubj)}(hj h]h*}(hj+hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj*hhhj*hKubj.)}(htypec_switch_registerh]j)}(hj*h]htypec_switch_register}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj +ubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hj*hhhj*hKubjK)}(h=(struct device *parent, const struct typec_switch_desc *desc)h](jQ)}(hstruct device *parenth](j)}(hjh]hstruct}(hj,+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(+ubj)}(h h]h }(hj9+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(+ubh)}(hhh]j)}(hdeviceh]hdevice}(hjJ+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjL+modnameN classnameNjj)}j]j*c.typec_switch_registerasbuh1hhj(+ubj)}(h h]h }(hjh+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(+ubj)}(hj h]h*}(hjv+hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj(+ubj)}(hparenth]hparent}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(+ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj$+ubjQ)}(h$const struct typec_switch_desc *desch](j)}(hjh]hconst}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(htypec_switch_desch]htypec_switch_desc}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]j*c.typec_switch_registerasbuh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hj h]h*}(hj,hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj+ubj)}(hdesch]hdesc}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj$+ubeh}(h]h ]h"]h$]h&]jHjIuh1jJhj*hhhj*hKubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hj*hhhj*hKubah}(h]j*ah ](j`jaeh"]h$]h&]jejf)jghuh1jhj*hKhj*hhubji)}(hhh]h)}(h&Register USB Type-C orientation switchh]h&Register USB Type-C orientation switch}(hj8,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chKhj5,hhubah}(h]h ]h"]h$]h&]uh1jhhj*hhhj*hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjP,jjP,jjjuh1jhhhjz*hNhNubj)}(hX**Parameters** ``struct device *parent`` Parent device ``const struct typec_switch_desc *desc`` Orientation switch description **Description** This function registers a switch that can be used for routing the correct data pairs depending on the cable plug orientation from the USB Type-C connector to the USB controllers. USB Type-C plugs can be inserted right-side-up or upside-down.h](h)}(h**Parameters**h]j)}(hjZ,h]h Parameters}(hj\,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX,ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chKhjT,ubj)}(hhh](j)}(h(``struct device *parent`` Parent device h](j)}(h``struct device *parent``h]j)}(hjy,h]hstruct device *parent}(hj{,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw,ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chKhjs,ubj)}(hhh]h)}(h Parent deviceh]h Parent device}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hKhj,ubah}(h]h ]h"]h$]h&]uh1jhjs,ubeh}(h]h ]h"]h$]h&]uh1jhj,hKhjp,ubj)}(hH``const struct typec_switch_desc *desc`` Orientation switch description h](j)}(h(``const struct typec_switch_desc *desc``h]j)}(hj,h]h$const struct typec_switch_desc *desc}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chKhj,ubj)}(hhh]h)}(hOrientation switch descriptionh]hOrientation switch description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hKhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hKhjp,ubeh}(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&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chKhjT,ubh)}(hThis function registers a switch that can be used for routing the correct data pairs depending on the cable plug orientation from the USB Type-C connector to the USB controllers. USB Type-C plugs can be inserted right-side-up or upside-down.h]hThis function registers a switch that can be used for routing the correct data pairs depending on the cable plug orientation from the USB Type-C connector to the USB controllers. USB Type-C plugs can be inserted right-side-up or upside-down.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chKhjT,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjz*hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$typec_switch_unregister (C function)c.typec_switch_unregisterhNtauh1jhjz*hhhNhNubj)}(hhh](j)}(h>void typec_switch_unregister (struct typec_switch_dev *sw_dev)h]j)}(h=void typec_switch_unregister(struct typec_switch_dev *sw_dev)h](j)}(hvoidh]hvoid}(hj2-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.-hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chKubj)}(h h]h }(hjA-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.-hhhj@-hKubj.)}(htypec_switch_unregisterh]j)}(htypec_switch_unregisterh]htypec_switch_unregister}(hjS-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO-ubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hj.-hhhj@-hKubjK)}(h!(struct typec_switch_dev *sw_dev)h]jQ)}(hstruct typec_switch_dev *sw_devh](j)}(hjh]hstruct}(hjo-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk-ubj)}(h h]h }(hj|-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk-ubh)}(hhh]j)}(htypec_switch_devh]htypec_switch_dev}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj)}j]j)}jjU-sbc.typec_switch_unregisterasbuh1hhjk-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk-ubj)}(hj h]h*}(hj-hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjk-ubj)}(hsw_devh]hsw_dev}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk-ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjg-ubah}(h]h ]h"]h$]h&]jHjIuh1jJhj.-hhhj@-hKubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hj*-hhhj@-hKubah}(h]j%-ah ](j`jaeh"]h$]h&]jejf)jghuh1jhj@-hKhj'-hhubji)}(hhh]h)}(h(Unregister USB Type-C orientation switchh]h(Unregister USB Type-C orientation switch}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chKhj-hhubah}(h]h ]h"]h$]h&]uh1jhhj'-hhhj@-hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj .jj .jjjuh1jhhhjz*hNhNubj)}(h**Parameters** ``struct typec_switch_dev *sw_dev`` USB Type-C orientation switch **Description** Unregister switch that was registered with typec_switch_register().h](h)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chKhj.ubj)}(hhh]j)}(hB``struct typec_switch_dev *sw_dev`` USB Type-C orientation switch h](j)}(h#``struct typec_switch_dev *sw_dev``h]j)}(hj3.h]hstruct typec_switch_dev *sw_dev}(hj5.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1.ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chKhj-.ubj)}(hhh]h)}(hUSB Type-C orientation switchh]hUSB Type-C orientation switch}(hjL.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH.hKhjI.ubah}(h]h ]h"]h$]h&]uh1jhj-.ubeh}(h]h ]h"]h$]h&]uh1jhjH.hKhj*.ubah}(h]h ]h"]h$]h&]uh1jhj.ubh)}(h**Description**h]j)}(hjn.h]h Description}(hjp.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl.ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chKhj.ubh)}(hCUnregister switch that was registered with typec_switch_register().h]hCUnregister switch that was registered with typec_switch_register().}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chKhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjz*hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtypec_mux_register (C function)c.typec_mux_registerhNtauh1jhjz*hhhNhNubj)}(hhh](j)}(hdstruct typec_mux_dev * typec_mux_register (struct device *parent, const struct typec_mux_desc *desc)h]j)}(hbstruct typec_mux_dev *typec_mux_register(struct device *parent, const struct typec_mux_desc *desc)h](j)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chMubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj.hMubh)}(hhh]j)}(h typec_mux_devh]h typec_mux_dev}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j)}jtypec_mux_registersbc.typec_mux_registerasbuh1hhj.hhhj.hMubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj.hMubj)}(hj h]h*}(hj/hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj.hhhj.hMubj.)}(htypec_mux_registerh]j)}(hj.h]htypec_mux_register}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hj.hhhj.hMubjK)}(h:(struct device *parent, const struct typec_mux_desc *desc)h](jQ)}(hstruct device *parenth](j)}(hjh]hstruct}(hj-/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)/ubj)}(h h]h }(hj:/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)/ubh)}(hhh]j)}(hdeviceh]hdevice}(hjK/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjM/modnameN classnameNjj)}j]j.c.typec_mux_registerasbuh1hhj)/ubj)}(h h]h }(hji/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)/ubj)}(hj h]h*}(hjw/hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj)/ubj)}(hparenth]hparent}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)/ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj%/ubjQ)}(h!const struct typec_mux_desc *desch](j)}(hjh]hconst}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hhh]j)}(htypec_mux_desch]htypec_mux_desc}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj)}j]j.c.typec_mux_registerasbuh1hhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hj h]h*}(hj0hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj/ubj)}(hdesch]hdesc}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj%/ubeh}(h]h ]h"]h$]h&]jHjIuh1jJhj.hhhj.hMubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hj.hhhj.hMubah}(h]j.ah ](j`jaeh"]h$]h&]jejf)jghuh1jhj.hMhj.hhubji)}(hhh]h)}(h,Register Multiplexer routing USB Type-C pinsh]h,Register Multiplexer routing USB Type-C pins}(hj90hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chMhj60hhubah}(h]h ]h"]h$]h&]uh1jhhj.hhhj.hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjQ0jjQ0jjjuh1jhhhjz*hNhNubj)}(hX**Parameters** ``struct device *parent`` Parent device ``const struct typec_mux_desc *desc`` Multiplexer description **Description** USB Type-C connectors can be used for alternate modes of operation besides USB when Accessory/Alternate Modes are supported. With some of those modes, the pins on the connector need to be reconfigured. This function registers multiplexer switches routing the pins on the connector.h](h)}(h**Parameters**h]j)}(hj[0h]h Parameters}(hj]0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY0ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chMhjU0ubj)}(hhh](j)}(h(``struct device *parent`` Parent device h](j)}(h``struct device *parent``h]j)}(hjz0h]hstruct device *parent}(hj|0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx0ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chMhjt0ubj)}(hhh]h)}(h Parent deviceh]h Parent device}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjt0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjq0ubj)}(h>``const struct typec_mux_desc *desc`` Multiplexer description h](j)}(h%``const struct typec_mux_desc *desc``h]j)}(hj0h]h!const struct typec_mux_desc *desc}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chMhj0ubj)}(hhh]h)}(hMultiplexer descriptionh]hMultiplexer description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjq0ubeh}(h]h ]h"]h$]h&]uh1jhjU0ubh)}(h**Description**h]j)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chMhjU0ubh)}(hXUSB Type-C connectors can be used for alternate modes of operation besides USB when Accessory/Alternate Modes are supported. With some of those modes, the pins on the connector need to be reconfigured. This function registers multiplexer switches routing the pins on the connector.h]hXUSB Type-C connectors can be used for alternate modes of operation besides USB when Accessory/Alternate Modes are supported. With some of those modes, the pins on the connector need to be reconfigured. This function registers multiplexer switches routing the pins on the connector.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chMhjU0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjz*hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!typec_mux_unregister (C function)c.typec_mux_unregisterhNtauh1jhjz*hhhNhNubj)}(hhh](j)}(h9void typec_mux_unregister (struct typec_mux_dev *mux_dev)h]j)}(h8void typec_mux_unregister(struct typec_mux_dev *mux_dev)h](j)}(hvoidh]hvoid}(hj31hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/1hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chMubj)}(h h]h }(hjB1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/1hhhjA1hMubj.)}(htypec_mux_unregisterh]j)}(htypec_mux_unregisterh]htypec_mux_unregister}(hjT1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP1ubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hj/1hhhjA1hMubjK)}(h(struct typec_mux_dev *mux_dev)h]jQ)}(hstruct typec_mux_dev *mux_devh](j)}(hjh]hstruct}(hjp1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl1ubj)}(h h]h }(hj}1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl1ubh)}(hhh]j)}(h typec_mux_devh]h typec_mux_dev}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j)}jjV1sbc.typec_mux_unregisterasbuh1hhjl1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl1ubj)}(hj h]h*}(hj1hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhjl1ubj)}(hmux_devh]hmux_dev}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl1ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhjh1ubah}(h]h ]h"]h$]h&]jHjIuh1jJhj/1hhhjA1hMubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hj+1hhhjA1hMubah}(h]j&1ah ](j`jaeh"]h$]h&]jejf)jghuh1jhjA1hMhj(1hhubji)}(hhh]h)}(hUnregister Multiplexer Switchh]hUnregister Multiplexer Switch}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chMhj1hhubah}(h]h ]h"]h$]h&]uh1jhhj(1hhhjA1hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj 2jj 2jjjuh1jhhhjz*hNhNubj)}(h**Parameters** ``struct typec_mux_dev *mux_dev`` USB Type-C Connector Multiplexer/DeMultiplexer **Description** Unregister mux that was registered with typec_mux_register().h](h)}(h**Parameters**h]j)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chMhj2ubj)}(hhh]j)}(hQ``struct typec_mux_dev *mux_dev`` USB Type-C Connector Multiplexer/DeMultiplexer h](j)}(h!``struct typec_mux_dev *mux_dev``h]j)}(hj42h]hstruct typec_mux_dev *mux_dev}(hj62hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj22ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chMhj.2ubj)}(hhh]h)}(h.USB Type-C Connector Multiplexer/DeMultiplexerh]h.USB Type-C Connector Multiplexer/DeMultiplexer}(hjM2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI2hMhjJ2ubah}(h]h ]h"]h$]h&]uh1jhj.2ubeh}(h]h ]h"]h$]h&]uh1jhjI2hMhj+2ubah}(h]h ]h"]h$]h&]uh1jhj2ubh)}(h**Description**h]j)}(hjo2h]h Description}(hjq2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm2ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chMhj2ubh)}(h=Unregister mux that was registered with typec_mux_register().h]h=Unregister mux that was registered with typec_mux_register().}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:195: ./drivers/usb/typec/mux.chMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjz*hhhNhNubh)}(hX6In most cases the same physical mux will handle both the orientation and mode. However, as the port drivers will be responsible for the orientation, and the alternate mode drivers for the mode, the two are always separated into their own logical components: "mux" for the mode and "switch" for the orientation.h]hX>In most cases the same physical mux will handle both the orientation and mode. However, as the port drivers will be responsible for the orientation, and the alternate mode drivers for the mode, the two are always separated into their own logical components: “mux” for the mode and “switch” for the orientation.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjz*hhubh)}(hWhen a port is registered, USB Type-C Connector Class requests both the mux and the switch for the port. The drivers can then use the following API for controlling them:h]hWhen a port is registered, USB Type-C Connector Class requests both the mux and the switch for the port. The drivers can then use the following API for controlling them:}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjz*hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"typec_set_orientation (C function)c.typec_set_orientationhNtauh1jhjz*hhhNhNubj)}(hhh](j)}(hWint typec_set_orientation (struct typec_port *port, enum typec_orientation orientation)h]j)}(hVint typec_set_orientation(struct typec_port *port, enum typec_orientation orientation)h](j)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:207: ./drivers/usb/typec/class.chMubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhj2hMubj.)}(htypec_set_orientationh]j)}(htypec_set_orientationh]htypec_set_orientation}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hj2hhhj2hMubjK)}(h=(struct typec_port *port, enum typec_orientation orientation)h](jQ)}(hstruct typec_port *porth](j)}(hjh]hstruct}(hj 3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 3ubh)}(hhh]j)}(h typec_porth]h typec_port}(hj+3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-3modnameN classnameNjj)}j]j)}jj2sbc.typec_set_orientationasbuh1hhj 3ubj)}(h h]h }(hjK3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 3ubj)}(hj h]h*}(hjY3hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj 3ubj)}(hporth]hport}(hjf3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 3ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj3ubjQ)}(h"enum typec_orientation orientationh](j)}(hjh]henum}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{3ubh)}(hhh]j)}(htypec_orientationh]htypec_orientation}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]jG3c.typec_set_orientationasbuh1hhj{3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{3ubj)}(h orientationh]h orientation}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{3ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj3ubeh}(h]h ]h"]h$]h&]jHjIuh1jJhj2hhhj2hMubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hj2hhhj2hMubah}(h]j2ah ](j`jaeh"]h$]h&]jejf)jghuh1jhj2hMhj2hhubji)}(hhh]h)}(h%Set USB Type-C cable plug orientationh]h%Set USB Type-C cable plug orientation}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:207: ./drivers/usb/typec/class.chMhj3hhubah}(h]h ]h"]h$]h&]uh1jhhj2hhhj2hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj 4jj 4jjjuh1jhhhjz*hNhNubj)}(h**Parameters** ``struct typec_port *port`` USB Type-C Port ``enum typec_orientation orientation`` USB Type-C cable plug orientation **Description** Set cable plug orientation for **port**.h](h)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:207: ./drivers/usb/typec/class.chMhj4ubj)}(hhh](j)}(h,``struct typec_port *port`` USB Type-C Port h](j)}(h``struct typec_port *port``h]j)}(hj44h]hstruct typec_port *port}(hj64hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj24ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:207: ./drivers/usb/typec/class.chMhj.4ubj)}(hhh]h)}(hUSB Type-C Porth]hUSB Type-C Port}(hjM4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI4hMhjJ4ubah}(h]h ]h"]h$]h&]uh1jhj.4ubeh}(h]h ]h"]h$]h&]uh1jhjI4hMhj+4ubj)}(hI``enum typec_orientation orientation`` USB Type-C cable plug orientation h](j)}(h&``enum typec_orientation orientation``h]j)}(hjm4h]h"enum typec_orientation orientation}(hjo4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk4ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:207: ./drivers/usb/typec/class.chMhjg4ubj)}(hhh]h)}(h!USB Type-C cable plug orientationh]h!USB Type-C cable plug orientation}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjg4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj+4ubeh}(h]h ]h"]h$]h&]uh1jhj4ubh)}(h**Description**h]j)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:207: ./drivers/usb/typec/class.chMhj4ubh)}(h(Set cable plug orientation for **port**.h](hSet cable plug orientation for }(hj4hhhNhNubj)}(h**port**h]hport}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:207: ./drivers/usb/typec/class.chMhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjz*hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtypec_set_mode (C function)c.typec_set_modehNtauh1jhjz*hhhNhNubj)}(hhh](j)}(h6int typec_set_mode (struct typec_port *port, int mode)h]j)}(h5int typec_set_mode(struct typec_port *port, int mode)h](j)}(hinth]hint}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:207: ./drivers/usb/typec/class.chM ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj 5hM ubj.)}(htypec_set_modeh]j)}(htypec_set_modeh]htypec_set_mode}(hj 5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jCjDeh"]h$]h&]jHjIuh1j-hj4hhhj 5hM ubjK)}(h#(struct typec_port *port, int mode)h](jQ)}(hstruct typec_port *porth](j)}(hjh]hstruct}(hj<5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj85ubj)}(h h]h }(hjI5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj85ubh)}(hhh]j)}(h typec_porth]h typec_port}(hjZ5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\5modnameN classnameNjj)}j]j)}jj"5sbc.typec_set_modeasbuh1hhj85ubj)}(h h]h }(hjz5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj85ubj)}(hj h]h*}(hj5hhhNhNubah}(h]h ]j)ah"]h$]h&]uh1jhj85ubj)}(hporth]hport}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj85ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj45ubjQ)}(hint modeh](j)}(hinth]hint}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hmodeh]hmode}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjHjIuh1jPhj45ubeh}(h]h ]h"]h$]h&]jHjIuh1jJhj4hhhj 5hM ubeh}(h]h ]h"]h$]h&]jHjIjZuh1jj[j\hj4hhhj 5hM ubah}(h]j4ah ](j`jaeh"]h$]h&]jejf)jghuh1jhj 5hM hj4hhubji)}(hhh]h)}(h.Set mode of operation for USB Type-C connectorh]h.Set mode of operation for USB Type-C connector}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:207: ./drivers/usb/typec/class.chM hj5hhubah}(h]h ]h"]h$]h&]uh1jhhj4hhhj 5hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj 6jj 6jjjuh1jhhhjz*hNhNubj)}(h**Parameters** ``struct typec_port *port`` USB Type-C connector ``int mode`` Accessory Mode, USB Operation or Safe State **Description** Configure **port** for Accessory Mode **mode**. This function will configure the muxes needed for **mode**.h](h)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:207: ./drivers/usb/typec/class.chM hj6ubj)}(hhh](j)}(h1``struct typec_port *port`` USB Type-C connector h](j)}(h``struct typec_port *port``h]j)}(hj56h]hstruct typec_port *port}(hj76hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj36ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:207: ./drivers/usb/typec/class.chM hj/6ubj)}(hhh]h)}(hUSB Type-C connectorh]hUSB Type-C connector}(hjN6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ6hM hjK6ubah}(h]h ]h"]h$]h&]uh1jhj/6ubeh}(h]h ]h"]h$]h&]uh1jhjJ6hM hj,6ubj)}(h9``int mode`` Accessory Mode, USB Operation or Safe State h](j)}(h ``int mode``h]j)}(hjn6h]hint mode}(hjp6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl6ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:207: ./drivers/usb/typec/class.chM hjh6ubj)}(hhh]h)}(h+Accessory Mode, USB Operation or Safe Stateh]h+Accessory Mode, USB Operation or Safe State}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM hj6ubah}(h]h ]h"]h$]h&]uh1jhjh6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM hj,6ubeh}(h]h ]h"]h$]h&]uh1jhj6ubh)}(h**Description**h]j)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:207: ./drivers/usb/typec/class.chM hj6ubh)}(hkConfigure **port** for Accessory Mode **mode**. This function will configure the muxes needed for **mode**.h](h Configure }(hj6hhhNhNubj)}(h**port**h]hport}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh for Accessory Mode }(hj6hhhNhNubj)}(h**mode**h]hmode}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh4. This function will configure the muxes needed for }(hj6hhhNhNubj)}(h**mode**h]hmode}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/typec:207: ./drivers/usb/typec/class.chM hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjz*hhhNhNubh)}(hIf the connector is dual-role capable, there may also be a switch for the data role. USB Type-C Connector Class does not supply separate API for them. The port drivers can use USB Role Class API with those.h]hIf the connector is dual-role capable, there may also be a switch for the data role. USB Type-C Connector Class does not supply separate API for them. The port drivers can use USB Role Class API with those.}(hj 7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjz*hhubh)}(hNIllustration of the muxes behind a connector that supports an alternate mode::h]hMIllustration of the muxes behind a connector that supports an alternate mode:}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjz*hhubh literal_block)}(hXi ------------------------ | Connector | ------------------------ | | ------------------------ \ Orientation / -------------------- | -------------------- / Mode \ ------------------------ / \ ------------------------ -------------------- | Alt Mode | / USB Role \ ------------------------ ------------------------ / \ ------------------------ ------------------------ | USB Host | | USB Device | ------------------------ ------------------------h]hXi ------------------------ | Connector | ------------------------ | | ------------------------ \ Orientation / -------------------- | -------------------- / Mode \ ------------------------ / \ ------------------------ -------------------- | Alt Mode | / USB Role \ ------------------------ ------------------------ / \ ------------------------ ------------------------ | USB Host | | USB Device | ------------------------ ------------------------}hj)7sbah}(h]h ]h"]h$]h&]jHjIuh1j'7hhhKhjz*hhubeh}(h]"multiplexer-demultiplexer-switchesah ]h"]"multiplexer/demultiplexer switchesah$]h&]uh1hhjihhhhhKubeh}(h] driver-apiah ]h"] driver apiah$]h&]uh1hhhhhhhhK9ubeh}(h](usb-type-c-connector-classheh ]h"](usb type-c connector classtypeceh$]h&]uh1hhhhhhhhKexpect_referenced_by_name}jM7hsexpect_referenced_by_id}hhsubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjw7error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}h]hasnameids}(jM7hjL7jI7jjjfjcjD7jA7jjj j jjjjjw*jt*j<7j97u nametypes}(jM7jL7jjfjD7jj jjjw*j<7uh}(hhjI7hjhjcjjA7jijjzjjjjj jjHjMjjjk jp jj j! j& jjj(j-jjjKjPjjjjjjj.j3j]jbjt*jjjj~!j!j?$jD$j'j'j(j(j97jz*j*j*j%-j*-j.j.j&1j+1j2j2j4j4u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h+Hyperlink target "typec" is not referenced.}hj7sbah}(h]h ]h"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1j7uba transformerN include_log] decorationNhhub.