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/pwrseqmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/zh_TW/driver-api/pwrseqmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/it_IT/driver-api/pwrseqmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ja_JP/driver-api/pwrseqmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ko_KR/driver-api/pwrseqmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/sp_SP/driver-api/pwrseqmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h%SPDX-License-Identifier: GPL-2.0-onlyh]h%SPDX-License-Identifier: GPL-2.0-only}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh?/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq.rsthKubh)}(hCopyright 2024 Linaro Ltd.h]hCopyright 2024 Linaro Ltd.}hhsbah}(h]h ]h"]h$]h&]hhuh1hhhhhhhhKubhsection)}(hhh](htitle)}(hPower Sequencing APIh]hPower Sequencing API}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh field_list)}(hhh]hfield)}(hhh](h field_name)}(hAuthorh]hAuthor}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(hBartosz Golaszewski h]h paragraph)}(hBartosz Golaszewskih]hBartosz Golaszewski}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Introductionh]h Introduction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK ubh)}(hThis framework is designed to abstract complex power-up sequences that are shared between multiple logical devices in the Linux kernel.h]hThis framework is designed to abstract complex power-up sequences that are shared between multiple logical devices in the Linux kernel.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjhhubh)}(hX(The intention is to allow consumers to obtain a power sequencing handle exposed by the power sequence provider and delegate the actual requesting and control of the underlying resources as well as to allow the provider to mitigate any potential conflicts between multiple users behind the scenes.h]hX(The intention is to allow consumers to obtain a power sequencing handle exposed by the power sequence provider and delegate the actual requesting and control of the underlying resources as well as to allow the provider to mitigate any potential conflicts between multiple users behind the scenes.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hhh](h)}(hGlossaryh]hGlossary}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhhhhhKubh)}(hJThe power sequencing API uses a number of terms specific to the subsystem:h]hJThe power sequencing API uses a number of terms specific to the subsystem:}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFhhubh)}(hUnith]hUnit}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFhhubh block_quote)}(hA unit is a discrete chunk of a power sequence. For instance one unit may enable a set of regulators, another may enable a specific GPIO. Units can define dependencies in the form of other units that must be enabled before it itself can be. h]h)}(hA unit is a discrete chunk of a power sequence. For instance one unit may enable a set of regulators, another may enable a specific GPIO. Units can define dependencies in the form of other units that must be enabled before it itself can be.h]hA unit is a discrete chunk of a power sequence. For instance one unit may enable a set of regulators, another may enable a specific GPIO. Units can define dependencies in the form of other units that must be enabled before it itself can be.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjuubah}(h]h ]h"]h$]h&]uh1jshhhKhjFhhubh)}(hTargeth]hTarget}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjFhhubjt)}(hX#A target is a set of units (composed of the "final" unit and its dependencies) that a consumer selects by its name when requesting a handle to the power sequencer. Via the dependency system, multiple targets may share the same parts of a power sequence but ignore parts that are irrelevant. h]h)}(hX"A target is a set of units (composed of the "final" unit and its dependencies) that a consumer selects by its name when requesting a handle to the power sequencer. Via the dependency system, multiple targets may share the same parts of a power sequence but ignore parts that are irrelevant.h]hX&A target is a set of units (composed of the “final” unit and its dependencies) that a consumer selects by its name when requesting a handle to the power sequencer. Via the dependency system, multiple targets may share the same parts of a power sequence but ignore parts that are irrelevant.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjubah}(h]h ]h"]h$]h&]uh1jshhhK#hjFhhubh)}(h Descriptorh]h Descriptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjFhhubjt)}(hA handle passed by the pwrseq core to every consumer that serves as the entry point to the provider layer. It ensures coherence between different users and keeps reference counting consistent. h]h)}(hA handle passed by the pwrseq core to every consumer that serves as the entry point to the provider layer. It ensures coherence between different users and keeps reference counting consistent.h]hA handle passed by the pwrseq core to every consumer that serves as the entry point to the provider layer. It ensures coherence between different users and keeps reference counting consistent.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjubah}(h]h ]h"]h$]h&]uh1jshhhK+hjFhhubeh}(h]glossaryah ]h"]glossaryah$]h&]uh1hhjhhhhhKubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hConsumer interfaceh]hConsumer interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK0ubh)}(hX+The consumer API is aimed to be as simple as possible. The driver interested in getting a descriptor from the power sequencer should call pwrseq_get() and specify the name of the target it wants to reach in the sequence after calling pwrseq_power_up(). The descriptor can be released by calling pwrseq_put() and the consumer can request the powering down of its target with pwrseq_power_off(). Note that there is no guarantee that pwrseq_power_off() will have any effect as there may be multiple users of the underlying resources who may keep them active.h]hX+The consumer API is aimed to be as simple as possible. The driver interested in getting a descriptor from the power sequencer should call pwrseq_get() and specify the name of the target it wants to reach in the sequence after calling pwrseq_power_up(). The descriptor can be released by calling pwrseq_put() and the consumer can request the powering down of its target with pwrseq_power_off(). Note that there is no guarantee that pwrseq_power_off() will have any effect as there may be multiple users of the underlying resources who may keep them active.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjhhubeh}(h]consumer-interfaceah ]h"]consumer interfaceah$]h&]uh1hhhhhhhhK0ubh)}(hhh](h)}(hProvider interfaceh]hProvider interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKhjhhubh)}(hEach provider can logically split the power-up sequence into discrete chunks (units) and define their dependencies. They can then expose named targets that consumers may use as the final point in the sequence that they wish to reach.h]hEach provider can logically split the power-up sequence into discrete chunks (units) and define their dependencies. They can then expose named targets that consumers may use as the final point in the sequence that they wish to reach.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKAhjhhubh)}(hTo that end the providers fill out a set of configuration structures and register with the pwrseq subsystem by calling pwrseq_device_register().h]hTo that end the providers fill out a set of configuration structures and register with the pwrseq subsystem by calling pwrseq_device_register().}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjhhubh)}(hhh](h)}(hDynamic consumer matchingh]hDynamic consumer matching}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhhhhhKIubh)}(hXThe main difference between pwrseq and other Linux kernel providers is the mechanism for dynamic matching of consumers and providers. Every power sequence provider driver must implement the `match()` callback and pass it to the pwrseq core when registering with the subsystems.h](hThe main difference between pwrseq and other Linux kernel providers is the mechanism for dynamic matching of consumers and providers. Every power sequence provider driver must implement the }(hj\hhhNhNubhtitle_reference)}(h `match()`h]hmatch()}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jdhj\ubhN callback and pass it to the pwrseq core when registering with the subsystems.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKKhjKhhubh)}(hXWhen a client requests a sequencer handle, the core will call this callback for every registered provider and let it flexibly figure out whether the proposed client device is indeed its consumer. For example: if the provider binds to the device-tree node representing a power management unit of a chipset and the consumer driver controls one of its modules, the provider driver may parse the relevant regulator supply properties in device tree and see if they lead from the PMU to the consumer.h]hXWhen a client requests a sequencer handle, the core will call this callback for every registered provider and let it flexibly figure out whether the proposed client device is indeed its consumer. For example: if the provider binds to the device-tree node representing a power management unit of a chipset and the consumer driver controls one of its modules, the provider driver may parse the relevant regulator supply properties in device tree and see if they lead from the PMU to the consumer.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhjKhhubeh}(h]dynamic-consumer-matchingah ]h"]dynamic consumer matchingah$]h&]uh1hhjhhhhhKIubeh}(h]provider-interfaceah ]h"]provider interfaceah$]h&]uh1hhhhhhhhKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj=hMubh)}(hhh]j)}(h pwrseq_deviceh]h pwrseq_device}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjAreftype identifier reftargetjQmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jj ASTIdentifier)}jepwrseq_device_registersbc.pwrseq_device_registerasbuh1hhj,hhhj=hMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj=hMubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhj,hhhj=hMubj)}(hpwrseq_device_registerh]j)}(hjuh]hpwrseq_device_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhj,hhhj=hMubhdesc_parameterlist)}(h$(const struct pwrseq_config *config)h]hdesc_parameter)}(h"const struct pwrseq_config *configh](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)}(h pwrseq_configh]h pwrseq_config}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypeje reftargetjmodnameN classnameNjijl)}jo]jsc.pwrseq_device_registerasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hconfigh]hconfig}(hj- hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhj,hhhj=hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj(hhhj=hMubah}(h]j#ah ](jjeh"]h$]h&]j!j")j#huh1jhj=hMhj%hhubj%)}(hhh]h)}(hRegister a new power sequencer.h]hRegister a new power sequencer.}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjT hhubah}(h]h ]h"]h$]h&]uh1j$hj%hhhj=hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjo jHjo jIjJjKuh1jhhhjhNhNubjM)}(hX**Parameters** ``const struct pwrseq_config *config`` Configuration of the new power sequencing device. **Description** The config structure is only used during the call and can be freed after the function returns. The config structure *must* have the parent device as well as the match() callback and at least one target set. **Return** Returns the address of the new pwrseq device or ERR_PTR() on failure.h](h)}(h**Parameters**h]jW)}(hjy h]h Parameters}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjw ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjs ubj)}(hhh]j)}(hY``const struct pwrseq_config *config`` Configuration of the new power sequencing device. h](j)}(h&``const struct pwrseq_config *config``h]j)}(hj h]h"const struct pwrseq_config *config}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhj ubj)}(hhh]h)}(h1Configuration of the new power sequencing device.h]h1Configuration of the new power sequencing device.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjs ubh)}(h**Description**h]jW)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jVhj ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjs ubh)}(hThe config structure is only used during the call and can be freed after the function returns. The config structure *must* have the parent device as well as the match() callback and at least one target set.h](htThe config structure is only used during the call and can be freed after the function returns. The config structure }(hj hhhNhNubj)}(h*must*h]hmust}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhT have the parent device as well as the match() callback and at least one target set.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjs ubh)}(h **Return**h]jW)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jVhj ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjs ubh)}(hEReturns the address of the new pwrseq device or ERR_PTR() on failure.h]hEReturns the address of the new pwrseq device or ERR_PTR() on failure.}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjs ubeh}(h]h ] kernelindentah"]h$]h&]uh1jLhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%pwrseq_device_unregister (C function)c.pwrseq_device_unregisterhNtauh1jhjhhhNhNubj)}(hhh](j)}(hhjQ ubj)}(hhh](j)}(h(``struct device *dev`` Managing device. h](j)}(h``struct device *dev``h]j)}(hjv h]hstruct device *dev}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chM;hjp ubj)}(hhh]h)}(hManaging device.h]hManaging device.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM;hj ubah}(h]h ]h"]h$]h&]uh1jhjp ubeh}(h]h ]h"]h$]h&]uh1jhj hM;hjm ubj)}(hY``const struct pwrseq_config *config`` Configuration of the new power sequencing device. h](j)}(h&``const struct pwrseq_config *config``h]j)}(hj h]h"const struct pwrseq_config *config}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chM<hj ubj)}(hhh]h)}(h1Configuration of the new power sequencing device.h]h1Configuration of the new power sequencing device.}(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<hjm ubeh}(h]h ]h"]h$]h&]uh1jhjQ ubh)}(h **Return**h]jW)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jVhj ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chM>hjQ ubh)}(hEReturns the address of the new pwrseq device or ERR_PTR() on failure.h]hEReturns the address of the new pwrseq device or ERR_PTR() on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chM>hjQ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jLhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&pwrseq_device_get_drvdata (C function)c.pwrseq_device_get_drvdatahNtauh1jhjhhhNhNubj)}(hhh](j)}(h?void * pwrseq_device_get_drvdata (struct pwrseq_device *pwrseq)h]j)}(h=void *pwrseq_device_get_drvdata(struct pwrseq_device *pwrseq)h](jR )}(hvoidh]hvoid}(hj/hhhNhNubah}(h]h ]j^ ah"]h$]h&]uh1jQ hj+hhha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chM]ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj=hM]ubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj=hM]ubj)}(hpwrseq_device_get_drvdatah]j)}(hpwrseq_device_get_drvdatah]hpwrseq_device_get_drvdata}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](j j eh"]h$]h&]hhuh1jhj+hhhj=hM]ubj)}(h(struct pwrseq_device *pwrseq)h]j)}(hstruct pwrseq_device *pwrseqh](j)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]j)}(h pwrseq_deviceh]h pwrseq_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jej_sbc.pwrseq_device_get_drvdataasbuh1hhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hpwrseqh]hpwrseq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjqubah}(h]h ]h"]h$]h&]hhuh1jhj+hhhj=hM]ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj'hhhj=hM]ubah}(h]j"ah ](jjeh"]h$]h&]j!j")j#huh1jhj=hM]hj$hhubj%)}(hhh]h)}(h;Get the driver private data associated with this sequencer.h]h;Get the driver private data associated with this sequencer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMVhjhhubah}(h]h ]h"]h$]h&]uh1j$hj$hhhj=hM]ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1jhhhjhNhNubjM)}(h{**Parameters** ``struct pwrseq_device *pwrseq`` Power sequencer object. **Return** Address of the private driver data.h](h)}(h**Parameters**h]jW)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMZhjubj)}(hhh]j)}(h9``struct pwrseq_device *pwrseq`` Power sequencer object. h](j)}(h ``struct pwrseq_device *pwrseq``h]j)}(hj=h]hstruct pwrseq_device *pwrseq}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMXhj7ubj)}(hhh]h)}(hPower sequencer object.h]hPower sequencer object.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMXhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMXhj4ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]jW)}(hjxh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjvubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMZhjubh)}(h#Address of the private driver data.h]h#Address of the private driver data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMZhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jLhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpwrseq_get (C function) c.pwrseq_gethNtauh1jhjhhhNhNubj)}(hhh](j)}(hHstruct pwrseq_desc * pwrseq_get (struct device *dev, const char *target)h]j)}(hFstruct pwrseq_desc *pwrseq_get(struct device *dev, const char *target)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j)}(h pwrseq_desch]h pwrseq_desc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}je pwrseq_getsb c.pwrseq_getasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h pwrseq_geth]j)}(hjh]h pwrseq_get}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhMubj)}(h((struct device *dev, const char *target)h](j)}(hstruct device *devh](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(hdeviceh]hdevice}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjAreftypeje reftargetjWmodnameN classnameNjijl)}jo]j c.pwrseq_getasbuh1hhj3ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj/ubj)}(hconst char *targeth](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjR )}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j^ ah"]h$]h&]uh1jQ hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htargeth]htarget}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj/ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j!j")j#huh1jhjhMhjhhubj%)}(hhh]h)}(h4Get the power sequencer associated with this device.h]h4Get the power sequencer associated with this device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1j$hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj-jHj-jIjJjKuh1jhhhjhNhNubjM)}(hX**Parameters** ``struct device *dev`` Device for which to get the sequencer. ``const char *target`` Name of the target exposed by the sequencer this device wants to reach. **Return** New power sequencer descriptor for use by the consumer driver or ERR_PTR() on failure.h](h)}(h**Parameters**h]jW)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jVhj5ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhj1ubj)}(hhh](j)}(h>``struct device *dev`` Device for which to get the sequencer. h](j)}(h``struct device *dev``h]j)}(hjVh]hstruct device *dev}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjPubj)}(hhh]h)}(h&Device for which to get the sequencer.h]h&Device for which to get the sequencer.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjMubj)}(h_``const char *target`` Name of the target exposed by the sequencer this device wants to reach. h](j)}(h``const char *target``h]j)}(hjh]hconst char *target}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjubj)}(hhh]h)}(hGName of the target exposed by the sequencer this device wants to reach.h]hGName of the target exposed by the sequencer this device wants to reach.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjMubeh}(h]h ]h"]h$]h&]uh1jhj1ubh)}(h **Return**h]jW)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhj1ubh)}(hVNew power sequencer descriptor for use by the consumer driver or ERR_PTR() on failure.h]hVNew power sequencer descriptor for use by the consumer driver or ERR_PTR() on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jLhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpwrseq_put (C function) c.pwrseq_puthNtauh1jhjhhhNhNubj)}(hhh](j)}(h*void pwrseq_put (struct pwrseq_desc *desc)h]j)}(h)void pwrseq_put(struct pwrseq_desc *desc)h](jR )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j^ ah"]h$]h&]uh1jQ hj hhha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubj)}(h pwrseq_puth]j)}(h pwrseq_puth]h pwrseq_put}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj hhhjhMubj)}(h(struct pwrseq_desc *desc)h]j)}(hstruct pwrseq_desc *desch](j)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hhh]j)}(h pwrseq_desch]h pwrseq_desc}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjAreftypeje reftargetjmmodnameN classnameNjijl)}jo]jr)}jej3sb c.pwrseq_putasbuh1hhjIubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hdesch]hdesc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjEubah}(h]h ]h"]h$]h&]hhuh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j!j")j#huh1jhjhMhjhhubj%)}(hhh]h)}(h'Release the power sequencer descriptor.h]h'Release the power sequencer descriptor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1j$hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1jhhhjhNhNubjM)}(hE**Parameters** ``struct pwrseq_desc *desc`` Descriptor to release.h](h)}(h**Parameters**h]jW)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjubj)}(hhh]j)}(h3``struct pwrseq_desc *desc`` Descriptor to release.h](j)}(h``struct pwrseq_desc *desc``h]j)}(hjh]hstruct pwrseq_desc *desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhj ubj)}(hhh]h)}(hDescriptor to release.h]hDescriptor to release.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindenta`Sh"]h$]h&]uh1jLhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdevm_pwrseq_get (C function)c.devm_pwrseq_gethNtauh1jhjhhhNhNubj)}(hhh](j)}(hMstruct pwrseq_desc * devm_pwrseq_get (struct device *dev, const char *target)h]j)}(hKstruct pwrseq_desc *devm_pwrseq_get(struct device *dev, const char *target)h](j)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjxhMubh)}(hhh]j)}(h pwrseq_desch]h pwrseq_desc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jedevm_pwrseq_getsbc.devm_pwrseq_getasbuh1hhjghhhjxhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjxhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjxhMubj)}(hdevm_pwrseq_geth]j)}(hjh]hdevm_pwrseq_get}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjghhhjxhMubj)}(h((struct device *dev, const char *target)h](j)}(hstruct device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypeje reftargetjmodnameN classnameNjijl)}jo]jc.devm_pwrseq_getasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hconst char *targeth](j)}(hjh]hconst}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjR )}(hcharh]hchar}(hjphhhNhNubah}(h]h ]j^ ah"]h$]h&]uh1jQ hjQubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(htargeth]htarget}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjghhhjxhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjchhhjxhMubah}(h]j^ah ](jjeh"]h$]h&]j!j")j#huh1jhjxhMhj`hhubj%)}(hhh]h)}(h Managed variant of pwrseq_get().h]h Managed variant of pwrseq_get().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1j$hj`hhhjxhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1jhhhjhNhNubjM)}(hX=**Parameters** ``struct device *dev`` Device for which to get the sequencer and which also manages its lifetime. ``const char *target`` Name of the target exposed by the sequencer this device wants to reach. **Return** New power sequencer descriptor for use by the consumer driver or ERR_PTR() on failure.h](h)}(h**Parameters**h]jW)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjubj)}(hhh](j)}(hb``struct device *dev`` Device for which to get the sequencer and which also manages its lifetime. h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjubj)}(hhh]h)}(hJDevice for which to get the sequencer and which also manages its lifetime.h]hJDevice for which to get the sequencer and which also manages its lifetime.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h_``const char *target`` Name of the target exposed by the sequencer this device wants to reach. h](j)}(h``const char *target``h]j)}(hj>h]hconst char *target}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhj8ubj)}(hhh]h)}(hGName of the target exposed by the sequencer this device wants to reach.h]hGName of the target exposed by the sequencer this device wants to reach.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]jW)}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjxubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjubh)}(hVNew power sequencer descriptor for use by the consumer driver or ERR_PTR() on failure.h]hVNew power sequencer descriptor for use by the consumer driver or ERR_PTR() on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jLhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpwrseq_power_on (C function)c.pwrseq_power_onhNtauh1jhjhhhNhNubj)}(hhh](j)}(h.int pwrseq_power_on (struct pwrseq_desc *desc)h]j)}(h-int pwrseq_power_on(struct pwrseq_desc *desc)h](jR )}(hinth]hint}(hjhhhNhNubah}(h]h ]j^ ah"]h$]h&]uh1jQ hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMxubj)}(hpwrseq_power_onh]j)}(hpwrseq_power_onh]hpwrseq_power_on}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhMxubj)}(h(struct pwrseq_desc *desc)h]j)}(hstruct pwrseq_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)}(h pwrseq_desch]h pwrseq_desc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.pwrseq_power_onasbuh1hhjubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdesch]hdesc}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMxubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMxubah}(h]jah ](jjeh"]h$]h&]j!j")j#huh1jhjhMxhjhhubj%)}(hhh]h)}(h:Issue a power-on request on behalf of the consumer device.h]h:Issue a power-on request on behalf of the consumer device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMkhj|hhubah}(h]h ]h"]h$]h&]uh1j$hjhhhjhMxubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1jhhhjhNhNubjM)}(hX**Parameters** ``struct pwrseq_desc *desc`` Descriptor referencing the power sequencer. **Description** This function tells the power sequencer that the consumer wants to be powered-up. The sequencer may already have powered-up the device in which case the function returns 0. If the power-up sequence is already in progress, the function will block until it's done and return 0. If this is the first request, the device will be powered up. **Return** 0 on success, negative error number on failure.h](h)}(h**Parameters**h]jW)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMohjubj)}(hhh]j)}(hI``struct pwrseq_desc *desc`` Descriptor referencing the power sequencer. h](j)}(h``struct pwrseq_desc *desc``h]j)}(hjh]hstruct pwrseq_desc *desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMmhjubj)}(hhh]h)}(h+Descriptor referencing the power sequencer.h]h+Descriptor referencing the power sequencer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMmhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jW)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMohjubh)}(hXPThis function tells the power sequencer that the consumer wants to be powered-up. The sequencer may already have powered-up the device in which case the function returns 0. If the power-up sequence is already in progress, the function will block until it's done and return 0. If this is the first request, the device will be powered up.h]hXRThis function tells the power sequencer that the consumer wants to be powered-up. The sequencer may already have powered-up the device in which case the function returns 0. If the power-up sequence is already in progress, the function will block until it’s done and return 0. If this is the first request, the device will be powered up.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMohjubh)}(h **Return**h]jW)}(hj"h]hReturn}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jVhj ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMuhjubh)}(h/0 on success, negative error number on failure.h]h/0 on success, negative error number on failure.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMuhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jLhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpwrseq_power_off (C function)c.pwrseq_power_offhNtauh1jhjhhhNhNubj)}(hhh](j)}(h/int pwrseq_power_off (struct pwrseq_desc *desc)h]j)}(h.int pwrseq_power_off(struct pwrseq_desc *desc)h](jR )}(hinth]hint}(hjghhhNhNubah}(h]h ]j^ ah"]h$]h&]uh1jQ hjchhha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjuhMubj)}(hpwrseq_power_offh]j)}(hpwrseq_power_offh]hpwrseq_power_off}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjchhhjuhMubj)}(h(struct pwrseq_desc *desc)h]j)}(hstruct pwrseq_desc *desch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h pwrseq_desch]h pwrseq_desc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.pwrseq_power_offasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdesch]hdesc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjchhhjuhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj_hhhjuhMubah}(h]jZah ](jjeh"]h$]h&]j!j")j#huh1jhjuhMhj\hhubj%)}(hhh]h)}(h;Issue a power-off request on behalf of the consumer device.h]h;Issue a power-off request on behalf of the consumer device.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhj$hhubah}(h]h ]h"]h$]h&]uh1j$hj\hhhjuhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj?jHj?jIjJjKuh1jhhhjhNhNubjM)}(hX**Parameters** ``struct pwrseq_desc *desc`` Descriptor referencing the power sequencer. **Description** This undoes the effects of pwrseq_power_on(). It issues a power-off request on behalf of the consumer and when the last remaining user does so, the power-down sequence will be started. If one is in progress, the function will block until it's complete and then return. **Return** 0 on success, negative error number on failure.h](h)}(h**Parameters**h]jW)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjGubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjCubj)}(hhh]j)}(hI``struct pwrseq_desc *desc`` Descriptor referencing the power sequencer. h](j)}(h``struct pwrseq_desc *desc``h]j)}(hjhh]hstruct pwrseq_desc *desc}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjbubj)}(hhh]h)}(h+Descriptor referencing the power sequencer.h]h+Descriptor referencing the power sequencer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubh)}(h**Description**h]jW)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjCubh)}(hX This undoes the effects of pwrseq_power_on(). It issues a power-off request on behalf of the consumer and when the last remaining user does so, the power-down sequence will be started. If one is in progress, the function will block until it's complete and then return.h]hXThis undoes the effects of pwrseq_power_on(). It issues a power-off request on behalf of the consumer and when the last remaining user does so, the power-down sequence will be started. If one is in progress, the function will block until it’s complete and then return.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjCubh)}(h **Return**h]jW)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjCubh)}(h/0 on success, negative error number on failure.h]h/0 on success, negative error number on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/pwrseq:94: ./drivers/power/sequencing/core.chMhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jLhjhhhNhNubeh}(h] api-referenceah ]h"] api referenceah$]h&]uh1hhhhhhhhKYubeh}(h]power-sequencing-apiah ]h"]power sequencing apiah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj)error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjjjjjj j jjjjjju nametypes}(jjjj jjjuh}(jhjjjjFj jjjjjKjjjjjjj6j;j#j(jD jI j j j"j'jjjjj^jcjjjZj_u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.