€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ'/translations/zh_CN/driver-api/pm/types”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/zh_TW/driver-api/pm/types”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/it_IT/driver-api/pm/types”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ja_JP/driver-api/pm/types”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ko_KR/driver-api/pm/types”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/pt_BR/driver-api/pm/types”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/sp_SP/driver-api/pm/types”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒA/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ"Device Power Management Data Types”h]”hŒ"Device Power Management Data Types”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œdev_pm_ops (C struct)”Œ c.dev_pm_ops”hNt”auh1hÝhhÊh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ dev_pm_ops”h]”hŒdesc_signature_line”“”)�”}”(hŒstruct dev_pm_ops”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jhhüh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jhhüh²hh³jh´KubhŒ desc_name”“”)�”}”(hŒ dev_pm_ops”h]”hŒ desc_sig_name”“”)�”}”(hhøh]”hŒ dev_pm_ops”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j)hj%ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1j#hhüh²hh³jh´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1húŒsphinx_line_type”Œ declarator”hhöh²hh³jh´Kubah}”(h]”hìah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1hôh³jh´Khhñh²hubhŒ desc_content”“”)�”}”(hhh]”hŒ paragraph”“”)�”}”(hŒdevice PM callbacks.”h]”hŒdevice PM callbacks.”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KAhjWh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhhñh²hh³jh´Kubeh}”(h]”h ]”(Œc”Œstruct”eh"]”h$]”h&]”Œdomain”jtŒobjtype”juŒdesctype”juŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1hïh²hhhÊh³hîh´NubhŒ container”“”)�”}”(hXŠ.**Definition**:: struct dev_pm_ops { int (*prepare)(struct device *dev); void (*complete)(struct device *dev); int (*suspend)(struct device *dev); int (*resume)(struct device *dev); int (*freeze)(struct device *dev); int (*thaw)(struct device *dev); int (*poweroff)(struct device *dev); int (*restore)(struct device *dev); int (*suspend_late)(struct device *dev); int (*resume_early)(struct device *dev); int (*freeze_late)(struct device *dev); int (*thaw_early)(struct device *dev); int (*poweroff_late)(struct device *dev); int (*restore_early)(struct device *dev); int (*suspend_noirq)(struct device *dev); int (*resume_noirq)(struct device *dev); int (*freeze_noirq)(struct device *dev); int (*thaw_noirq)(struct device *dev); int (*poweroff_noirq)(struct device *dev); int (*restore_noirq)(struct device *dev); int (*runtime_suspend)(struct device *dev); int (*runtime_resume)(struct device *dev); int (*runtime_idle)(struct device *dev); }; **Members** ``prepare`` The principal role of this callback is to prevent new children of the device from being registered after it has returned (the driver's subsystem and generally the rest of the kernel is supposed to prevent new calls to the probe method from being made too once **prepare\(\)** has succeeded). If **prepare\(\)** detects a situation it cannot handle (e.g. registration of a child already in progress), it may return -EAGAIN, so that the PM core can execute it once again (e.g. after a new child has been registered) to recover from the race condition. This method is executed for all kinds of suspend transitions and is followed by one of the suspend callbacks: **suspend\(\)**, **freeze\(\)**, or **poweroff\(\)**. If the transition is a suspend to memory or standby (that is, not related to hibernation), the return value of **prepare\(\)** may be used to indicate to the PM core to leave the device in runtime suspend if applicable. Namely, if **prepare\(\)** returns a positive number, the PM core will understand that as a declaration that the device appears to be runtime-suspended and it may be left in that state during the entire transition and during the subsequent resume if all of its descendants are left in runtime suspend too. If that happens, **complete\(\)** will be executed directly after **prepare\(\)** and it must ensure the proper functioning of the device after the system resume. The PM core executes subsystem-level **prepare\(\)** for all devices before starting to invoke suspend callbacks for any of them, so generally devices may be assumed to be functional or to respond to runtime resume requests while **prepare\(\)** is being executed. However, device drivers may NOT assume anything about the availability of user space at that time and it is NOT valid to request firmware from within **prepare\(\)** (it's too late to do that). It also is NOT valid to allocate substantial amounts of memory from **prepare\(\)** in the GFP_KERNEL mode. [To work around these limitations, drivers may register suspend and hibernation notifiers to be executed before the freezing of tasks.] ``complete`` Undo the changes made by **prepare\(\)**. This method is executed for all kinds of resume transitions, following one of the resume callbacks: **resume\(\)**, **thaw\(\)**, **restore\(\)**. Also called if the state transition fails before the driver's suspend callback: **suspend\(\)**, **freeze\(\)** or **poweroff\(\)**, can be executed (e.g. if the suspend callback fails for one of the other devices that the PM core has unsuccessfully attempted to suspend earlier). The PM core executes subsystem-level **complete\(\)** after it has executed the appropriate resume callbacks for all devices. If the corresponding **prepare\(\)** at the beginning of the suspend transition returned a positive number and the device was left in runtime suspend (without executing any suspend and resume callbacks for it), **complete\(\)** will be the only callback executed for the device during resume. In that case, **complete\(\)** must be prepared to do whatever is necessary to ensure the proper functioning of the device after the system resume. To this end, **complete\(\)** can check the power.direct_complete flag of the device to learn whether (unset) or not (set) the previous suspend and resume callbacks have been executed for it. ``suspend`` Executed before putting the system into a sleep state in which the contents of main memory are preserved. The exact action to perform depends on the device's subsystem (PM domain, device type, class or bus type), but generally the device must be quiescent after subsystem-level **suspend\(\)** has returned, so that it doesn't do any I/O or DMA. Subsystem-level **suspend\(\)** is executed for all devices after invoking subsystem-level **prepare\(\)** for all of them. ``resume`` Executed after waking the system up from a sleep state in which the contents of main memory were preserved. The exact action to perform depends on the device's subsystem, but generally the driver is expected to start working again, responding to hardware events and software requests (the device itself may be left in a low-power state, waiting for a runtime resume to occur). The state of the device at the time its driver's **resume\(\)** callback is run depends on the platform and subsystem the device belongs to. On most platforms, there are no restrictions on availability of resources like clocks during **resume\(\)**. Subsystem-level **resume\(\)** is executed for all devices after invoking subsystem-level **resume_noirq\(\)** for all of them. ``freeze`` Hibernation-specific, executed before creating a hibernation image. Analogous to **suspend\(\)**, but it should not enable the device to signal wakeup events or change its power state. The majority of subsystems (with the notable exception of the PCI bus type) expect the driver-level **freeze\(\)** to save the device settings in memory to be used by **restore\(\)** during the subsequent resume from hibernation. Subsystem-level **freeze\(\)** is executed for all devices after invoking subsystem-level **prepare\(\)** for all of them. ``thaw`` Hibernation-specific, executed after creating a hibernation image OR if the creation of an image has failed. Also executed after a failing attempt to restore the contents of main memory from such an image. Undo the changes made by the preceding **freeze\(\)**, so the device can be operated in the same way as immediately before the call to **freeze\(\)**. Subsystem-level **thaw\(\)** is executed for all devices after invoking subsystem-level **thaw_noirq\(\)** for all of them. It also may be executed directly after **freeze\(\)** in case of a transition error. ``poweroff`` Hibernation-specific, executed after saving a hibernation image. Analogous to **suspend\(\)**, but it need not save the device's settings in memory. Subsystem-level **poweroff\(\)** is executed for all devices after invoking subsystem-level **prepare\(\)** for all of them. ``restore`` Hibernation-specific, executed after restoring the contents of main memory from a hibernation image, analogous to **resume\(\)**. ``suspend_late`` Continue operations started by **suspend\(\)**. For a number of devices **suspend_late\(\)** may point to the same callback routine as the runtime suspend callback. ``resume_early`` Prepare to execute **resume\(\)**. For a number of devices **resume_early\(\)** may point to the same callback routine as the runtime resume callback. ``freeze_late`` Continue operations started by **freeze\(\)**. Analogous to **suspend_late\(\)**, but it should not enable the device to signal wakeup events or change its power state. ``thaw_early`` Prepare to execute **thaw\(\)**. Undo the changes made by the preceding **freeze_late\(\)**. ``poweroff_late`` Continue operations started by **poweroff\(\)**. Analogous to **suspend_late\(\)**, but it need not save the device's settings in memory. ``restore_early`` Prepare to execute **restore\(\)**, analogous to **resume_early\(\)**. ``suspend_noirq`` Complete the actions started by **suspend\(\)**. Carry out any additional operations required for suspending the device that might be racing with its driver's interrupt handler, which is guaranteed not to run while **suspend_noirq\(\)** is being executed. It generally is expected that the device will be in a low-power state (appropriate for the target system sleep state) after subsystem-level **suspend_noirq\(\)** has returned successfully. If the device can generate system wakeup signals and is enabled to wake up the system, it should be configured to do so at that time. However, depending on the platform and device's subsystem, **suspend\(\)** or **suspend_late\(\)** may be allowed to put the device into the low-power state and configure it to generate wakeup signals, in which case it generally is not necessary to define **suspend_noirq\(\)**. ``resume_noirq`` Prepare for the execution of **resume\(\)** by carrying out any operations required for resuming the device that might be racing with its driver's interrupt handler, which is guaranteed not to run while **resume_noirq\(\)** is being executed. ``freeze_noirq`` Complete the actions started by **freeze\(\)**. Carry out any additional operations required for freezing the device that might be racing with its driver's interrupt handler, which is guaranteed not to run while **freeze_noirq\(\)** is being executed. The power state of the device should not be changed by either **freeze\(\)**, or **freeze_late\(\)**, or **freeze_noirq\(\)** and it should not be configured to signal system wakeup by any of these callbacks. ``thaw_noirq`` Prepare for the execution of **thaw\(\)** by carrying out any operations required for thawing the device that might be racing with its driver's interrupt handler, which is guaranteed not to run while **thaw_noirq\(\)** is being executed. ``poweroff_noirq`` Complete the actions started by **poweroff\(\)**. Analogous to **suspend_noirq\(\)**, but it need not save the device's settings in memory. ``restore_noirq`` Prepare for the execution of **restore\(\)** by carrying out any operations required for thawing the device that might be racing with its driver's interrupt handler, which is guaranteed not to run while **restore_noirq\(\)** is being executed. Analogous to **resume_noirq\(\)**. ``runtime_suspend`` Prepare the device for a condition in which it won't be able to communicate with the CPU(s) and RAM due to power management. This need not mean that the device should be put into a low-power state. For example, if the device is behind a link which is about to be turned off, the device may remain at full power. If the device does go to low power and is capable of generating runtime wakeup events, remote wakeup (i.e., a hardware mechanism allowing the device to request a change of its power state via an interrupt) should be enabled for it. ``runtime_resume`` Put the device into the fully active state in response to a wakeup event generated by hardware or at the request of software. If necessary, put the device into the full-power state and restore its registers, so that it is fully operational. ``runtime_idle`` Device appears to be inactive and it might be put into a low-power state if all of the necessary conditions are satisfied. Check these conditions, and return 0 if it's appropriate to let the PM core queue a suspend request for the device.”h]”(j[)�”}”(hŒ**Definition**::”h]”(hŒstrong”“”)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj…ubhŒ:”…”�”}”(hj…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KEhj�ubhŒ literal_block”“”)�”}”(hXýstruct dev_pm_ops { int (*prepare)(struct device *dev); void (*complete)(struct device *dev); int (*suspend)(struct device *dev); int (*resume)(struct device *dev); int (*freeze)(struct device *dev); int (*thaw)(struct device *dev); int (*poweroff)(struct device *dev); int (*restore)(struct device *dev); int (*suspend_late)(struct device *dev); int (*resume_early)(struct device *dev); int (*freeze_late)(struct device *dev); int (*thaw_early)(struct device *dev); int (*poweroff_late)(struct device *dev); int (*restore_early)(struct device *dev); int (*suspend_noirq)(struct device *dev); int (*resume_noirq)(struct device *dev); int (*freeze_noirq)(struct device *dev); int (*thaw_noirq)(struct device *dev); int (*poweroff_noirq)(struct device *dev); int (*restore_noirq)(struct device *dev); int (*runtime_suspend)(struct device *dev); int (*runtime_resume)(struct device *dev); int (*runtime_idle)(struct device *dev); };”h]”hXýstruct dev_pm_ops { int (*prepare)(struct device *dev); void (*complete)(struct device *dev); int (*suspend)(struct device *dev); int (*resume)(struct device *dev); int (*freeze)(struct device *dev); int (*thaw)(struct device *dev); int (*poweroff)(struct device *dev); int (*restore)(struct device *dev); int (*suspend_late)(struct device *dev); int (*resume_early)(struct device *dev); int (*freeze_late)(struct device *dev); int (*thaw_early)(struct device *dev); int (*poweroff_late)(struct device *dev); int (*restore_early)(struct device *dev); int (*suspend_noirq)(struct device *dev); int (*resume_noirq)(struct device *dev); int (*freeze_noirq)(struct device *dev); int (*thaw_noirq)(struct device *dev); int (*poweroff_noirq)(struct device *dev); int (*restore_noirq)(struct device *dev); int (*runtime_suspend)(struct device *dev); int (*runtime_resume)(struct device *dev); int (*runtime_idle)(struct device *dev); };”…”�”}”hj¦sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¤h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KGhj�ubj[)�”}”(hŒ **Members**”h]”jŠ)�”}”(hj·h]”hŒMembers”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Kahj�ubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hXL``prepare`` The principal role of this callback is to prevent new children of the device from being registered after it has returned (the driver's subsystem and generally the rest of the kernel is supposed to prevent new calls to the probe method from being made too once **prepare\(\)** has succeeded). If **prepare\(\)** detects a situation it cannot handle (e.g. registration of a child already in progress), it may return -EAGAIN, so that the PM core can execute it once again (e.g. after a new child has been registered) to recover from the race condition. This method is executed for all kinds of suspend transitions and is followed by one of the suspend callbacks: **suspend\(\)**, **freeze\(\)**, or **poweroff\(\)**. If the transition is a suspend to memory or standby (that is, not related to hibernation), the return value of **prepare\(\)** may be used to indicate to the PM core to leave the device in runtime suspend if applicable. Namely, if **prepare\(\)** returns a positive number, the PM core will understand that as a declaration that the device appears to be runtime-suspended and it may be left in that state during the entire transition and during the subsequent resume if all of its descendants are left in runtime suspend too. If that happens, **complete\(\)** will be executed directly after **prepare\(\)** and it must ensure the proper functioning of the device after the system resume. The PM core executes subsystem-level **prepare\(\)** for all devices before starting to invoke suspend callbacks for any of them, so generally devices may be assumed to be functional or to respond to runtime resume requests while **prepare\(\)** is being executed. However, device drivers may NOT assume anything about the availability of user space at that time and it is NOT valid to request firmware from within **prepare\(\)** (it's too late to do that). It also is NOT valid to allocate substantial amounts of memory from **prepare\(\)** in the GFP_KERNEL mode. [To work around these limitations, drivers may register suspend and hibernation notifiers to be executed before the freezing of tasks.] ”h]”(hŒterm”“”)�”}”(hŒ ``prepare``”h]”hŒliteral”“”)�”}”(hjÜh]”hŒprepare”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KahjÔubhŒ definition”“”)�”}”(hhh]”j[)�”}”(hX?The principal role of this callback is to prevent new children of the device from being registered after it has returned (the driver's subsystem and generally the rest of the kernel is supposed to prevent new calls to the probe method from being made too once **prepare\(\)** has succeeded). If **prepare\(\)** detects a situation it cannot handle (e.g. registration of a child already in progress), it may return -EAGAIN, so that the PM core can execute it once again (e.g. after a new child has been registered) to recover from the race condition. This method is executed for all kinds of suspend transitions and is followed by one of the suspend callbacks: **suspend\(\)**, **freeze\(\)**, or **poweroff\(\)**. If the transition is a suspend to memory or standby (that is, not related to hibernation), the return value of **prepare\(\)** may be used to indicate to the PM core to leave the device in runtime suspend if applicable. Namely, if **prepare\(\)** returns a positive number, the PM core will understand that as a declaration that the device appears to be runtime-suspended and it may be left in that state during the entire transition and during the subsequent resume if all of its descendants are left in runtime suspend too. If that happens, **complete\(\)** will be executed directly after **prepare\(\)** and it must ensure the proper functioning of the device after the system resume. The PM core executes subsystem-level **prepare\(\)** for all devices before starting to invoke suspend callbacks for any of them, so generally devices may be assumed to be functional or to respond to runtime resume requests while **prepare\(\)** is being executed. However, device drivers may NOT assume anything about the availability of user space at that time and it is NOT valid to request firmware from within **prepare\(\)** (it's too late to do that). It also is NOT valid to allocate substantial amounts of memory from **prepare\(\)** in the GFP_KERNEL mode. [To work around these limitations, drivers may register suspend and hibernation notifiers to be executed before the freezing of tasks.]”h]”(hXThe principal role of this callback is to prevent new children of the device from being registered after it has returned (the driver’s subsystem and generally the rest of the kernel is supposed to prevent new calls to the probe method from being made too once ”…”�”}”(hjùh²hh³Nh´NubjŠ)�”}”(hŒ**prepare\(\)**”h]”hŒ prepare()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjùubhŒ has succeeded). If ”…”�”}”(hjùh²hh³Nh´NubjŠ)�”}”(hŒ**prepare\(\)**”h]”hŒ prepare()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjùubhX^ detects a situation it cannot handle (e.g. registration of a child already in progress), it may return -EAGAIN, so that the PM core can execute it once again (e.g. after a new child has been registered) to recover from the race condition. This method is executed for all kinds of suspend transitions and is followed by one of the suspend callbacks: ”…”�”}”(hjùh²hh³Nh´NubjŠ)�”}”(hŒ**suspend\(\)**”h]”hŒ suspend()”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjùubhŒ, ”…”�”}”(hjùh²hh³Nh´NubjŠ)�”}”(hŒ**freeze\(\)**”h]”hŒ freeze()”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjùubhŒ, or ”…”�”}”(hjùh²hh³Nh´NubjŠ)�”}”(hŒ**poweroff\(\)**”h]”hŒ poweroff()”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjùubhŒr. If the transition is a suspend to memory or standby (that is, not related to hibernation), the return value of ”…”�”}”(hjùh²hh³Nh´NubjŠ)�”}”(hŒ**prepare\(\)**”h]”hŒ prepare()”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjùubhŒj may be used to indicate to the PM core to leave the device in runtime suspend if applicable. Namely, if ”…”�”}”(hjùh²hh³Nh´NubjŠ)�”}”(hŒ**prepare\(\)**”h]”hŒ prepare()”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjùubhX* returns a positive number, the PM core will understand that as a declaration that the device appears to be runtime-suspended and it may be left in that state during the entire transition and during the subsequent resume if all of its descendants are left in runtime suspend too. If that happens, ”…”�”}”(hjùh²hh³Nh´NubjŠ)�”}”(hŒ**complete\(\)**”h]”hŒ complete()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjùubhŒ! will be executed directly after ”…”�”}”(hjùh²hh³Nh´NubjŠ)�”}”(hŒ**prepare\(\)**”h]”hŒ prepare()”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjùubhŒw and it must ensure the proper functioning of the device after the system resume. The PM core executes subsystem-level ”…”�”}”(hjùh²hh³Nh´NubjŠ)�”}”(hŒ**prepare\(\)**”h]”hŒ prepare()”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjùubhŒ² for all devices before starting to invoke suspend callbacks for any of them, so generally devices may be assumed to be functional or to respond to runtime resume requests while ”…”�”}”(hjùh²hh³Nh´NubjŠ)�”}”(hŒ**prepare\(\)**”h]”hŒ prepare()”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjùubhŒ« is being executed. However, device drivers may NOT assume anything about the availability of user space at that time and it is NOT valid to request firmware from within ”…”�”}”(hjùh²hh³Nh´NubjŠ)�”}”(hŒ**prepare\(\)**”h]”hŒ prepare()”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjùubhŒd (it’s too late to do that). It also is NOT valid to allocate substantial amounts of memory from ”…”�”}”(hjùh²hh³Nh´NubjŠ)�”}”(hŒ**prepare\(\)**”h]”hŒ prepare()”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjùubhŒ  in the GFP_KERNEL mode. [To work around these limitations, drivers may register suspend and hibernation notifiers to be executed before the freezing of tasks.]”…”�”}”(hjùh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KDhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³jóh´KahjÏubjÓ)�”}”(hXß``complete`` Undo the changes made by **prepare\(\)**. This method is executed for all kinds of resume transitions, following one of the resume callbacks: **resume\(\)**, **thaw\(\)**, **restore\(\)**. Also called if the state transition fails before the driver's suspend callback: **suspend\(\)**, **freeze\(\)** or **poweroff\(\)**, can be executed (e.g. if the suspend callback fails for one of the other devices that the PM core has unsuccessfully attempted to suspend earlier). The PM core executes subsystem-level **complete\(\)** after it has executed the appropriate resume callbacks for all devices. If the corresponding **prepare\(\)** at the beginning of the suspend transition returned a positive number and the device was left in runtime suspend (without executing any suspend and resume callbacks for it), **complete\(\)** will be the only callback executed for the device during resume. In that case, **complete\(\)** must be prepared to do whatever is necessary to ensure the proper functioning of the device after the system resume. To this end, **complete\(\)** can check the power.direct_complete flag of the device to learn whether (unset) or not (set) the previous suspend and resume callbacks have been executed for it. ”h]”(jÙ)�”}”(hŒ ``complete``”h]”jß)�”}”(hjh]”hŒcomplete”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Kthjþubjõ)�”}”(hhh]”j[)�”}”(hXÑUndo the changes made by **prepare\(\)**. This method is executed for all kinds of resume transitions, following one of the resume callbacks: **resume\(\)**, **thaw\(\)**, **restore\(\)**. Also called if the state transition fails before the driver's suspend callback: **suspend\(\)**, **freeze\(\)** or **poweroff\(\)**, can be executed (e.g. if the suspend callback fails for one of the other devices that the PM core has unsuccessfully attempted to suspend earlier). The PM core executes subsystem-level **complete\(\)** after it has executed the appropriate resume callbacks for all devices. If the corresponding **prepare\(\)** at the beginning of the suspend transition returned a positive number and the device was left in runtime suspend (without executing any suspend and resume callbacks for it), **complete\(\)** will be the only callback executed for the device during resume. In that case, **complete\(\)** must be prepared to do whatever is necessary to ensure the proper functioning of the device after the system resume. To this end, **complete\(\)** can check the power.direct_complete flag of the device to learn whether (unset) or not (set) the previous suspend and resume callbacks have been executed for it.”h]”(hŒUndo the changes made by ”…”�”}”(hjh²hh³Nh´NubjŠ)�”}”(hŒ**prepare\(\)**”h]”hŒ prepare()”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒg. This method is executed for all kinds of resume transitions, following one of the resume callbacks: ”…”�”}”(hjh²hh³Nh´NubjŠ)�”}”(hŒ**resume\(\)**”h]”hŒ resume()”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒ, ”…”�”}”(hjh²hh³Nh´NubjŠ)�”}”(hŒ **thaw\(\)**”h]”hŒthaw()”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒ, ”…”�”}”hjsbjŠ)�”}”(hŒ**restore\(\)**”h]”hŒ restore()”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒU. Also called if the state transition fails before the driver’s suspend callback: ”…”�”}”(hjh²hh³Nh´NubjŠ)�”}”(hŒ**suspend\(\)**”h]”hŒ suspend()”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒ, ”…”�”}”hjsbjŠ)�”}”(hŒ**freeze\(\)**”h]”hŒ freeze()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒ or ”…”�”}”(hjh²hh³Nh´NubjŠ)�”}”(hŒ**poweroff\(\)**”h]”hŒ poweroff()”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒ», can be executed (e.g. if the suspend callback fails for one of the other devices that the PM core has unsuccessfully attempted to suspend earlier). The PM core executes subsystem-level ”…”�”}”(hjh²hh³Nh´NubjŠ)�”}”(hŒ**complete\(\)**”h]”hŒ complete()”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒ_ after it has executed the appropriate resume callbacks for all devices. If the corresponding ”…”�”}”(hjh²hh³Nh´NubjŠ)�”}”(hŒ**prepare\(\)**”h]”hŒ prepare()”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒ¯ at the beginning of the suspend transition returned a positive number and the device was left in runtime suspend (without executing any suspend and resume callbacks for it), ”…”�”}”(hjh²hh³Nh´NubjŠ)�”}”(hŒ**complete\(\)**”h]”hŒ complete()”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒQ will be the only callback executed for the device during resume. In that case, ”…”�”}”(hjh²hh³Nh´NubjŠ)�”}”(hŒ**complete\(\)**”h]”hŒ complete()”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒ„ must be prepared to do whatever is necessary to ensure the proper functioning of the device after the system resume. To this end, ”…”�”}”(hjh²hh³Nh´NubjŠ)�”}”(hŒ**complete\(\)**”h]”hŒ complete()”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒ¢ can check the power.direct_complete flag of the device to learn whether (unset) or not (set) the previous suspend and resume callbacks have been executed for it.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Kchjubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjþubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³jh´KthjÏubjÓ)�”}”(hXã``suspend`` Executed before putting the system into a sleep state in which the contents of main memory are preserved. The exact action to perform depends on the device's subsystem (PM domain, device type, class or bus type), but generally the device must be quiescent after subsystem-level **suspend\(\)** has returned, so that it doesn't do any I/O or DMA. Subsystem-level **suspend\(\)** is executed for all devices after invoking subsystem-level **prepare\(\)** for all of them. ”h]”(jÙ)�”}”(hŒ ``suspend``”h]”jß)�”}”(hjh]”hŒsuspend”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K|hjubjõ)�”}”(hhh]”j[)�”}”(hXÖExecuted before putting the system into a sleep state in which the contents of main memory are preserved. The exact action to perform depends on the device's subsystem (PM domain, device type, class or bus type), but generally the device must be quiescent after subsystem-level **suspend\(\)** has returned, so that it doesn't do any I/O or DMA. Subsystem-level **suspend\(\)** is executed for all devices after invoking subsystem-level **prepare\(\)** for all of them.”h]”(hXExecuted before putting the system into a sleep state in which the contents of main memory are preserved. The exact action to perform depends on the device’s subsystem (PM domain, device type, class or bus type), but generally the device must be quiescent after subsystem-level ”…”�”}”(hj/h²hh³Nh´NubjŠ)�”}”(hŒ**suspend\(\)**”h]”hŒ suspend()”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj/ubhŒG has returned, so that it doesn’t do any I/O or DMA. Subsystem-level ”…”�”}”(hj/h²hh³Nh´NubjŠ)�”}”(hŒ**suspend\(\)**”h]”hŒ suspend()”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj/ubhŒ< is executed for all devices after invoking subsystem-level ”…”�”}”(hj/h²hh³Nh´NubjŠ)�”}”(hŒ**prepare\(\)**”h]”hŒ prepare()”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj/ubhŒ for all of them.”…”�”}”(hj/h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Kvhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³j+h´K|hjÏubjÓ)�”}”(hX``resume`` Executed after waking the system up from a sleep state in which the contents of main memory were preserved. The exact action to perform depends on the device's subsystem, but generally the driver is expected to start working again, responding to hardware events and software requests (the device itself may be left in a low-power state, waiting for a runtime resume to occur). The state of the device at the time its driver's **resume\(\)** callback is run depends on the platform and subsystem the device belongs to. On most platforms, there are no restrictions on availability of resources like clocks during **resume\(\)**. Subsystem-level **resume\(\)** is executed for all devices after invoking subsystem-level **resume_noirq\(\)** for all of them. ”h]”(jÙ)�”}”(hŒ ``resume``”h]”jß)�”}”(hj†h]”hŒresume”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KŒhj€ubjõ)�”}”(hhh]”j[)�”}”(hXõExecuted after waking the system up from a sleep state in which the contents of main memory were preserved. The exact action to perform depends on the device's subsystem, but generally the driver is expected to start working again, responding to hardware events and software requests (the device itself may be left in a low-power state, waiting for a runtime resume to occur). The state of the device at the time its driver's **resume\(\)** callback is run depends on the platform and subsystem the device belongs to. On most platforms, there are no restrictions on availability of resources like clocks during **resume\(\)**. Subsystem-level **resume\(\)** is executed for all devices after invoking subsystem-level **resume_noirq\(\)** for all of them.”h]”(hX°Executed after waking the system up from a sleep state in which the contents of main memory were preserved. The exact action to perform depends on the device’s subsystem, but generally the driver is expected to start working again, responding to hardware events and software requests (the device itself may be left in a low-power state, waiting for a runtime resume to occur). The state of the device at the time its driver’s ”…”�”}”(hjŸh²hh³Nh´NubjŠ)�”}”(hŒ**resume\(\)**”h]”hŒ resume()”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjŸubhŒ¬ callback is run depends on the platform and subsystem the device belongs to. On most platforms, there are no restrictions on availability of resources like clocks during ”…”�”}”(hjŸh²hh³Nh´NubjŠ)�”}”(hŒ**resume\(\)**”h]”hŒ resume()”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjŸubhŒ. Subsystem-level ”…”�”}”(hjŸh²hh³Nh´NubjŠ)�”}”(hŒ**resume\(\)**”h]”hŒ resume()”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjŸubhŒ< is executed for all devices after invoking subsystem-level ”…”�”}”(hjŸh²hh³Nh´NubjŠ)�”}”(hŒ**resume_noirq\(\)**”h]”hŒresume_noirq()”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjŸubhŒ for all of them.”…”�”}”(hjŸh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K‚hjœubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³j›h´KŒhjÏubjÓ)�”}”(hX&``freeze`` Hibernation-specific, executed before creating a hibernation image. Analogous to **suspend\(\)**, but it should not enable the device to signal wakeup events or change its power state. The majority of subsystems (with the notable exception of the PCI bus type) expect the driver-level **freeze\(\)** to save the device settings in memory to be used by **restore\(\)** during the subsequent resume from hibernation. Subsystem-level **freeze\(\)** is executed for all devices after invoking subsystem-level **prepare\(\)** for all of them. ”h]”(jÙ)�”}”(hŒ ``freeze``”h]”jß)�”}”(hjh]”hŒfreeze”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K™hjubjõ)�”}”(hhh]”j[)�”}”(hXHibernation-specific, executed before creating a hibernation image. Analogous to **suspend\(\)**, but it should not enable the device to signal wakeup events or change its power state. The majority of subsystems (with the notable exception of the PCI bus type) expect the driver-level **freeze\(\)** to save the device settings in memory to be used by **restore\(\)** during the subsequent resume from hibernation. Subsystem-level **freeze\(\)** is executed for all devices after invoking subsystem-level **prepare\(\)** for all of them.”h]”(hŒQHibernation-specific, executed before creating a hibernation image. Analogous to ”…”�”}”(hj!h²hh³Nh´NubjŠ)�”}”(hŒ**suspend\(\)**”h]”hŒ suspend()”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj!ubhŒ¾, but it should not enable the device to signal wakeup events or change its power state. The majority of subsystems (with the notable exception of the PCI bus type) expect the driver-level ”…”�”}”(hj!h²hh³Nh´NubjŠ)�”}”(hŒ**freeze\(\)**”h]”hŒ freeze()”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj!ubhŒ5 to save the device settings in memory to be used by ”…”�”}”(hj!h²hh³Nh´NubjŠ)�”}”(hŒ**restore\(\)**”h]”hŒ restore()”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj!ubhŒ@ during the subsequent resume from hibernation. Subsystem-level ”…”�”}”(hj!h²hh³Nh´NubjŠ)�”}”(hŒ**freeze\(\)**”h]”hŒ freeze()”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj!ubhŒ< is executed for all devices after invoking subsystem-level ”…”�”}”(hj!h²hh³Nh´NubjŠ)�”}”(hŒ**prepare\(\)**”h]”hŒ prepare()”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj!ubhŒ for all of them.”…”�”}”(hj!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K’hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³jh´K™hjÏubjÓ)�”}”(hXA``thaw`` Hibernation-specific, executed after creating a hibernation image OR if the creation of an image has failed. Also executed after a failing attempt to restore the contents of main memory from such an image. Undo the changes made by the preceding **freeze\(\)**, so the device can be operated in the same way as immediately before the call to **freeze\(\)**. Subsystem-level **thaw\(\)** is executed for all devices after invoking subsystem-level **thaw_noirq\(\)** for all of them. It also may be executed directly after **freeze\(\)** in case of a transition error. ”h]”(jÙ)�”}”(hŒ``thaw``”h]”jß)�”}”(hjœh]”hŒthaw”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K¦hj–ubjõ)�”}”(hhh]”j[)�”}”(hX7Hibernation-specific, executed after creating a hibernation image OR if the creation of an image has failed. Also executed after a failing attempt to restore the contents of main memory from such an image. Undo the changes made by the preceding **freeze\(\)**, so the device can be operated in the same way as immediately before the call to **freeze\(\)**. Subsystem-level **thaw\(\)** is executed for all devices after invoking subsystem-level **thaw_noirq\(\)** for all of them. It also may be executed directly after **freeze\(\)** in case of a transition error.”h]”(hŒöHibernation-specific, executed after creating a hibernation image OR if the creation of an image has failed. Also executed after a failing attempt to restore the contents of main memory from such an image. Undo the changes made by the preceding ”…”�”}”(hjµh²hh³Nh´NubjŠ)�”}”(hŒ**freeze\(\)**”h]”hŒ freeze()”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjµubhŒR, so the device can be operated in the same way as immediately before the call to ”…”�”}”(hjµh²hh³Nh´NubjŠ)�”}”(hŒ**freeze\(\)**”h]”hŒ freeze()”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjµubhŒ. Subsystem-level ”…”�”}”(hjµh²hh³Nh´NubjŠ)�”}”(hŒ **thaw\(\)**”h]”hŒthaw()”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjµubhŒ< is executed for all devices after invoking subsystem-level ”…”�”}”(hjµh²hh³Nh´NubjŠ)�”}”(hŒ**thaw_noirq\(\)**”h]”hŒthaw_noirq()”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjµubhŒ: for all of them. It also may be executed directly after ”…”�”}”(hjµh²hh³Nh´NubjŠ)�”}”(hŒ**freeze\(\)**”h]”hŒ freeze()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjµubhŒ in case of a transition error.”…”�”}”(hjµh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KŸhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³j±h´K¦hjÏubjÓ)�”}”(hX``poweroff`` Hibernation-specific, executed after saving a hibernation image. Analogous to **suspend\(\)**, but it need not save the device's settings in memory. Subsystem-level **poweroff\(\)** is executed for all devices after invoking subsystem-level **prepare\(\)** for all of them. ”h]”(jÙ)�”}”(hŒ ``poweroff``”h]”jß)�”}”(hj0h]”hŒpoweroff”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K¯hj*ubjõ)�”}”(hhh]”j[)�”}”(hXHibernation-specific, executed after saving a hibernation image. Analogous to **suspend\(\)**, but it need not save the device's settings in memory. Subsystem-level **poweroff\(\)** is executed for all devices after invoking subsystem-level **prepare\(\)** for all of them.”h]”(hŒNHibernation-specific, executed after saving a hibernation image. Analogous to ”…”�”}”(hjIh²hh³Nh´NubjŠ)�”}”(hŒ**suspend\(\)**”h]”hŒ suspend()”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjIubhŒJ, but it need not save the device’s settings in memory. Subsystem-level ”…”�”}”(hjIh²hh³Nh´NubjŠ)�”}”(hŒ**poweroff\(\)**”h]”hŒ poweroff()”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjIubhŒ< is executed for all devices after invoking subsystem-level ”…”�”}”(hjIh²hh³Nh´NubjŠ)�”}”(hŒ**prepare\(\)**”h]”hŒ prepare()”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjIubhŒ for all of them.”…”�”}”(hjIh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K«hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³jEh´K¯hjÏubjÓ)�”}”(hŒŽ``restore`` Hibernation-specific, executed after restoring the contents of main memory from a hibernation image, analogous to **resume\(\)**. ”h]”(jÙ)�”}”(hŒ ``restore``”h]”jß)�”}”(hj h]”hŒrestore”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Kµhjšubjõ)�”}”(hhh]”j[)�”}”(hŒ�Hibernation-specific, executed after restoring the contents of main memory from a hibernation image, analogous to **resume\(\)**.”h]”(hŒrHibernation-specific, executed after restoring the contents of main memory from a hibernation image, analogous to ”…”�”}”(hj¹h²hh³Nh´NubjŠ)�”}”(hŒ**resume\(\)**”h]”hŒ resume()”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj¹ubhŒ.”…”�”}”(hj¹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K´hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³jµh´KµhjÏubjÓ)�”}”(hŒ·``suspend_late`` Continue operations started by **suspend\(\)**. For a number of devices **suspend_late\(\)** may point to the same callback routine as the runtime suspend callback. ”h]”(jÙ)�”}”(hŒ``suspend_late``”h]”jß)�”}”(hjìh]”hŒ suspend_late”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K€hjæubjõ)�”}”(hhh]”j[)�”}”(hŒ¥Continue operations started by **suspend\(\)**. For a number of devices **suspend_late\(\)** may point to the same callback routine as the runtime suspend callback.”h]”(hŒContinue operations started by ”…”�”}”(hjh²hh³Nh´NubjŠ)�”}”(hŒ**suspend\(\)**”h]”hŒ suspend()”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒ. For a number of devices ”…”�”}”(hjh²hh³Nh´NubjŠ)�”}”(hŒ**suspend_late\(\)**”h]”hŒsuspend_late()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒH may point to the same callback routine as the runtime suspend callback.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K~hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³jh´K€hjÏubjÓ)�”}”(hŒ©``resume_early`` Prepare to execute **resume\(\)**. For a number of devices **resume_early\(\)** may point to the same callback routine as the runtime resume callback. ”h]”(jÙ)�”}”(hŒ``resume_early``”h]”jß)�”}”(hjJh]”hŒ resume_early”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K�hjDubjõ)�”}”(hhh]”j[)�”}”(hŒ—Prepare to execute **resume\(\)**. For a number of devices **resume_early\(\)** may point to the same callback routine as the runtime resume callback.”h]”(hŒPrepare to execute ”…”�”}”(hjch²hh³Nh´NubjŠ)�”}”(hŒ**resume\(\)**”h]”hŒ resume()”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjcubhŒ. For a number of devices ”…”�”}”(hjch²hh³Nh´NubjŠ)�”}”(hŒ**resume_early\(\)**”h]”hŒresume_early()”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjcubhŒG may point to the same callback routine as the runtime resume callback.”…”�”}”(hjch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KŽhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³j_h´K�hjÏubjÓ)�”}”(hŒº``freeze_late`` Continue operations started by **freeze\(\)**. Analogous to **suspend_late\(\)**, but it should not enable the device to signal wakeup events or change its power state. ”h]”(jÙ)�”}”(hŒ``freeze_late``”h]”jß)�”}”(hj¨h]”hŒ freeze_late”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K�hj¢ubjõ)�”}”(hhh]”j[)�”}”(hŒ©Continue operations started by **freeze\(\)**. Analogous to **suspend_late\(\)**, but it should not enable the device to signal wakeup events or change its power state.”h]”(hŒContinue operations started by ”…”�”}”(hjÁh²hh³Nh´NubjŠ)�”}”(hŒ**freeze\(\)**”h]”hŒ freeze()”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÁubhŒ. Analogous to ”…”�”}”(hjÁh²hh³Nh´NubjŠ)�”}”(hŒ**suspend_late\(\)**”h]”hŒsuspend_late()”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÁubhŒX, but it should not enable the device to signal wakeup events or change its power state.”…”�”}”(hjÁh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K›hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³j½h´K�hjÏubjÓ)�”}”(hŒm``thaw_early`` Prepare to execute **thaw\(\)**. Undo the changes made by the preceding **freeze_late\(\)**. ”h]”(jÙ)�”}”(hŒ``thaw_early``”h]”jß)�”}”(hjh]”hŒ thaw_early”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K©hjubjõ)�”}”(hhh]”j[)�”}”(hŒ]Prepare to execute **thaw\(\)**. Undo the changes made by the preceding **freeze_late\(\)**.”h]”(hŒPrepare to execute ”…”�”}”(hjh²hh³Nh´NubjŠ)�”}”(hŒ **thaw\(\)**”h]”hŒthaw()”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒ*. Undo the changes made by the preceding ”…”�”}”(hjh²hh³Nh´NubjŠ)�”}”(hŒ**freeze_late\(\)**”h]”hŒfreeze_late()”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjubhŒ.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K¨hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³jh´K©hjÏubjÓ)�”}”(hŒ�``poweroff_late`` Continue operations started by **poweroff\(\)**. Analogous to **suspend_late\(\)**, but it need not save the device's settings in memory. ”h]”(jÙ)�”}”(hŒ``poweroff_late``”h]”jß)�”}”(hjdh]”hŒ poweroff_late”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K²hj^ubjõ)�”}”(hhh]”j[)�”}”(hŒŠContinue operations started by **poweroff\(\)**. Analogous to **suspend_late\(\)**, but it need not save the device's settings in memory.”h]”(hŒContinue operations started by ”…”�”}”(hj}h²hh³Nh´NubjŠ)�”}”(hŒ**poweroff\(\)**”h]”hŒ poweroff()”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj}ubhŒ. Analogous to ”…”�”}”(hj}h²hh³Nh´NubjŠ)�”}”(hŒ**suspend_late\(\)**”h]”hŒsuspend_late()”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj}ubhŒ9, but it need not save the device’s settings in memory.”…”�”}”(hj}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K±hjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³jyh´K²hjÏubjÓ)�”}”(hŒY``restore_early`` Prepare to execute **restore\(\)**, analogous to **resume_early\(\)**. ”h]”(jÙ)�”}”(hŒ``restore_early``”h]”jß)�”}”(hjÂh]”hŒ restore_early”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K·hj¼ubjõ)�”}”(hhh]”j[)�”}”(hŒFPrepare to execute **restore\(\)**, analogous to **resume_early\(\)**.”h]”(hŒPrepare to execute ”…”�”}”(hjÛh²hh³Nh´NubjŠ)�”}”(hŒ**restore\(\)**”h]”hŒ restore()”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÛubhŒ, analogous to ”…”�”}”(hjÛh²hh³Nh´NubjŠ)�”}”(hŒ**resume_early\(\)**”h]”hŒresume_early()”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÛubhŒ.”…”�”}”(hjÛh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³j×h´K·hjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³j×h´K·hjÏubjÓ)�”}”(hXo``suspend_noirq`` Complete the actions started by **suspend\(\)**. Carry out any additional operations required for suspending the device that might be racing with its driver's interrupt handler, which is guaranteed not to run while **suspend_noirq\(\)** is being executed. It generally is expected that the device will be in a low-power state (appropriate for the target system sleep state) after subsystem-level **suspend_noirq\(\)** has returned successfully. If the device can generate system wakeup signals and is enabled to wake up the system, it should be configured to do so at that time. However, depending on the platform and device's subsystem, **suspend\(\)** or **suspend_late\(\)** may be allowed to put the device into the low-power state and configure it to generate wakeup signals, in which case it generally is not necessary to define **suspend_noirq\(\)**. ”h]”(jÙ)�”}”(hŒ``suspend_noirq``”h]”jß)�”}”(hj h]”hŒ suspend_noirq”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KÅhj ubjõ)�”}”(hhh]”j[)�”}”(hX\Complete the actions started by **suspend\(\)**. Carry out any additional operations required for suspending the device that might be racing with its driver's interrupt handler, which is guaranteed not to run while **suspend_noirq\(\)** is being executed. It generally is expected that the device will be in a low-power state (appropriate for the target system sleep state) after subsystem-level **suspend_noirq\(\)** has returned successfully. If the device can generate system wakeup signals and is enabled to wake up the system, it should be configured to do so at that time. However, depending on the platform and device's subsystem, **suspend\(\)** or **suspend_late\(\)** may be allowed to put the device into the low-power state and configure it to generate wakeup signals, in which case it generally is not necessary to define **suspend_noirq\(\)**.”h]”(hŒ Complete the actions started by ”…”�”}”(hj8 h²hh³Nh´NubjŠ)�”}”(hŒ**suspend\(\)**”h]”hŒ suspend()”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj8 ubhŒ«. Carry out any additional operations required for suspending the device that might be racing with its driver’s interrupt handler, which is guaranteed not to run while ”…”�”}”(hj8 h²hh³Nh´NubjŠ)�”}”(hŒ**suspend_noirq\(\)**”h]”hŒsuspend_noirq()”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj8 ubhŒ  is being executed. It generally is expected that the device will be in a low-power state (appropriate for the target system sleep state) after subsystem-level ”…”�”}”(hj8 h²hh³Nh´NubjŠ)�”}”(hŒ**suspend_noirq\(\)**”h]”hŒsuspend_noirq()”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj8 ubhŒá has returned successfully. If the device can generate system wakeup signals and is enabled to wake up the system, it should be configured to do so at that time. However, depending on the platform and device’s subsystem, ”…”�”}”(hj8 h²hh³Nh´NubjŠ)�”}”(hŒ**suspend\(\)**”h]”hŒ suspend()”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj8 ubhŒ or ”…”�”}”(hj8 h²hh³Nh´NubjŠ)�”}”(hŒ**suspend_late\(\)**”h]”hŒsuspend_late()”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj8 ubhŒž may be allowed to put the device into the low-power state and configure it to generate wakeup signals, in which case it generally is not necessary to define ”…”�”}”(hj8 h²hh³Nh´NubjŠ)�”}”(hŒ**suspend_noirq\(\)**”h]”hŒsuspend_noirq()”…”�”}”(hjš h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj8 ubhŒ.”…”�”}”(hj8 h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K¹hj5 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³j4 h´KÅhjÏubjÓ)�”}”(hX``resume_noirq`` Prepare for the execution of **resume\(\)** by carrying out any operations required for resuming the device that might be racing with its driver's interrupt handler, which is guaranteed not to run while **resume_noirq\(\)** is being executed. ”h]”(jÙ)�”}”(hŒ``resume_noirq``”h]”jß)�”}”(hjÅ h]”hŒ resume_noirq”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjà ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KÊhj¿ ubjõ)�”}”(hhh]”j[)�”}”(hŒòPrepare for the execution of **resume\(\)** by carrying out any operations required for resuming the device that might be racing with its driver's interrupt handler, which is guaranteed not to run while **resume_noirq\(\)** is being executed.”h]”(hŒPrepare for the execution of ”…”�”}”(hjÞ h²hh³Nh´NubjŠ)�”}”(hŒ**resume\(\)**”h]”hŒ resume()”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÞ ubhŒ¢ by carrying out any operations required for resuming the device that might be racing with its driver’s interrupt handler, which is guaranteed not to run while ”…”�”}”(hjÞ h²hh³Nh´NubjŠ)�”}”(hŒ**resume_noirq\(\)**”h]”hŒresume_noirq()”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÞ ubhŒ is being executed.”…”�”}”(hjÞ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KÇhjÛ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¿ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³jÚ h´KÊhjÏubjÓ)�”}”(hXß``freeze_noirq`` Complete the actions started by **freeze\(\)**. Carry out any additional operations required for freezing the device that might be racing with its driver's interrupt handler, which is guaranteed not to run while **freeze_noirq\(\)** is being executed. The power state of the device should not be changed by either **freeze\(\)**, or **freeze_late\(\)**, or **freeze_noirq\(\)** and it should not be configured to signal system wakeup by any of these callbacks. ”h]”(jÙ)�”}”(hŒ``freeze_noirq``”h]”jß)�”}”(hj# h]”hŒ freeze_noirq”…”�”}”(hj% h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj! ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KÒhj ubjõ)�”}”(hhh]”j[)�”}”(hXÍComplete the actions started by **freeze\(\)**. Carry out any additional operations required for freezing the device that might be racing with its driver's interrupt handler, which is guaranteed not to run while **freeze_noirq\(\)** is being executed. The power state of the device should not be changed by either **freeze\(\)**, or **freeze_late\(\)**, or **freeze_noirq\(\)** and it should not be configured to signal system wakeup by any of these callbacks.”h]”(hŒ Complete the actions started by ”…”�”}”(hj< h²hh³Nh´NubjŠ)�”}”(hŒ**freeze\(\)**”h]”hŒ freeze()”…”�”}”(hjD h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj< ubhŒ©. Carry out any additional operations required for freezing the device that might be racing with its driver’s interrupt handler, which is guaranteed not to run while ”…”�”}”(hj< h²hh³Nh´NubjŠ)�”}”(hŒ**freeze_noirq\(\)**”h]”hŒfreeze_noirq()”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj< ubhŒR is being executed. The power state of the device should not be changed by either ”…”�”}”(hj< h²hh³Nh´NubjŠ)�”}”(hŒ**freeze\(\)**”h]”hŒ freeze()”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj< ubhŒ, or ”…”�”}”(hj< h²hh³Nh´NubjŠ)�”}”(hŒ**freeze_late\(\)**”h]”hŒfreeze_late()”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj< ubhŒ, or ”…”�”}”(hj< h²hh³Nh´NubjŠ)�”}”(hŒ**freeze_noirq\(\)**”h]”hŒfreeze_noirq()”…”�”}”(hjŒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj< ubhŒS and it should not be configured to signal system wakeup by any of these callbacks.”…”�”}”(hj< h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KÌhj9 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³j8 h´KÒhjÏubjÓ)�”}”(hŒý``thaw_noirq`` Prepare for the execution of **thaw\(\)** by carrying out any operations required for thawing the device that might be racing with its driver's interrupt handler, which is guaranteed not to run while **thaw_noirq\(\)** is being executed. ”h]”(jÙ)�”}”(hŒ``thaw_noirq``”h]”jß)�”}”(hj· h]”hŒ thaw_noirq”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjµ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´K×hj± ubjõ)�”}”(hhh]”j[)�”}”(hŒíPrepare for the execution of **thaw\(\)** by carrying out any operations required for thawing the device that might be racing with its driver's interrupt handler, which is guaranteed not to run while **thaw_noirq\(\)** is being executed.”h]”(hŒPrepare for the execution of ”…”�”}”(hjÐ h²hh³Nh´NubjŠ)�”}”(hŒ **thaw\(\)**”h]”hŒthaw()”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÐ ubhŒ¡ by carrying out any operations required for thawing the device that might be racing with its driver’s interrupt handler, which is guaranteed not to run while ”…”�”}”(hjÐ h²hh³Nh´NubjŠ)�”}”(hŒ**thaw_noirq\(\)**”h]”hŒthaw_noirq()”…”�”}”(hjê h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰h•ÚojÐ ubhŒ is being executed.”…”�”}”(hjÐ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KÔhjÍ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj± ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³jÌ h´K×hjÏubjÓ)�”}”(hŒ ``poweroff_noirq`` Complete the actions started by **poweroff\(\)**. Analogous to **suspend_noirq\(\)**, but it need not save the device's settings in memory. ”h]”(jÙ)�”}”(hŒ``poweroff_noirq``”h]”jß)�”}”(hj h]”hŒpoweroff_noirq”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KÚhj ubjõ)�”}”(hhh]”j[)�”}”(hŒŒComplete the actions started by **poweroff\(\)**. Analogous to **suspend_noirq\(\)**, but it need not save the device's settings in memory.”h]”(hŒ Complete the actions started by ”…”�”}”(hj. h²hh³Nh´NubjŠ)�”}”(hŒ**poweroff\(\)**”h]”hŒ poweroff()”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj. ubhŒ. Analogous to ”…”�”}”(hj. h²hh³Nh´NubjŠ)�”}”(hŒ**suspend_noirq\(\)**”h]”hŒsuspend_noirq()”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj. ubhŒ9, but it need not save the device’s settings in memory.”…”�”}”(hj. h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KÙhj+ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³j* h´KÚhjÏubjÓ)�”}”(hX*``restore_noirq`` Prepare for the execution of **restore\(\)** by carrying out any operations required for thawing the device that might be racing with its driver's interrupt handler, which is guaranteed not to run while **restore_noirq\(\)** is being executed. Analogous to **resume_noirq\(\)**. ”h]”(jÙ)�”}”(hŒ``restore_noirq``”h]”jß)�”}”(hjs h]”hŒ restore_noirq”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjq ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Kßhjm ubjõ)�”}”(hhh]”j[)�”}”(hXPrepare for the execution of **restore\(\)** by carrying out any operations required for thawing the device that might be racing with its driver's interrupt handler, which is guaranteed not to run while **restore_noirq\(\)** is being executed. Analogous to **resume_noirq\(\)**.”h]”(hŒPrepare for the execution of ”…”�”}”(hjŒ h²hh³Nh´NubjŠ)�”}”(hŒ**restore\(\)**”h]”hŒ restore()”…”�”}”(hj” h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjŒ ubhŒ¡ by carrying out any operations required for thawing the device that might be racing with its driver’s interrupt handler, which is guaranteed not to run while ”…”�”}”(hjŒ h²hh³Nh´NubjŠ)�”}”(hŒ**restore_noirq\(\)**”h]”hŒrestore_noirq()”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjŒ ubhŒ" is being executed. Analogous to ”…”�”}”(hjŒ h²hh³Nh´NubjŠ)�”}”(hŒ**resume_noirq\(\)**”h]”hŒresume_noirq()”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjŒ ubhŒ.”…”�”}”(hjŒ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KÜhj‰ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³jˆ h´KßhjÏubjÓ)�”}”(hX5``runtime_suspend`` Prepare the device for a condition in which it won't be able to communicate with the CPU(s) and RAM due to power management. This need not mean that the device should be put into a low-power state. For example, if the device is behind a link which is about to be turned off, the device may remain at full power. If the device does go to low power and is capable of generating runtime wakeup events, remote wakeup (i.e., a hardware mechanism allowing the device to request a change of its power state via an interrupt) should be enabled for it. ”h]”(jÙ)�”}”(hŒ``runtime_suspend``”h]”jß)�”}”(hjã h]”hŒruntime_suspend”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjá ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KèhjÝ ubjõ)�”}”(hhh]”j[)�”}”(hX Prepare the device for a condition in which it won't be able to communicate with the CPU(s) and RAM due to power management. This need not mean that the device should be put into a low-power state. For example, if the device is behind a link which is about to be turned off, the device may remain at full power. If the device does go to low power and is capable of generating runtime wakeup events, remote wakeup (i.e., a hardware mechanism allowing the device to request a change of its power state via an interrupt) should be enabled for it.”h]”hX"Prepare the device for a condition in which it won’t be able to communicate with the CPU(s) and RAM due to power management. This need not mean that the device should be put into a low-power state. For example, if the device is behind a link which is about to be turned off, the device may remain at full power. If the device does go to low power and is capable of generating runtime wakeup events, remote wakeup (i.e., a hardware mechanism allowing the device to request a change of its power state via an interrupt) should be enabled for it.”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Káhjù ubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³jø h´KèhjÏubjÓ)�”}”(hX``runtime_resume`` Put the device into the fully active state in response to a wakeup event generated by hardware or at the request of software. If necessary, put the device into the full-power state and restore its registers, so that it is fully operational. ”h]”(jÙ)�”}”(hŒ``runtime_resume``”h]”jß)�”}”(hj h]”hŒruntime_resume”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Kíhj ubjõ)�”}”(hhh]”j[)�”}”(hŒñPut the device into the fully active state in response to a wakeup event generated by hardware or at the request of software. If necessary, put the device into the full-power state and restore its registers, so that it is fully operational.”h]”hŒñPut the device into the fully active state in response to a wakeup event generated by hardware or at the request of software. If necessary, put the device into the full-power state and restore its registers, so that it is fully operational.”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Kêhj3 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³j2 h´KíhjÏubjÓ)�”}”(hŒÿ``runtime_idle`` Device appears to be inactive and it might be put into a low-power state if all of the necessary conditions are satisfied. Check these conditions, and return 0 if it's appropriate to let the PM core queue a suspend request for the device.”h]”(jÙ)�”}”(hŒ``runtime_idle``”h]”jß)�”}”(hjW h]”hŒ runtime_idle”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjU ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KñhjQ ubjõ)�”}”(hhh]”j[)�”}”(hŒîDevice appears to be inactive and it might be put into a low-power state if all of the necessary conditions are satisfied. Check these conditions, and return 0 if it's appropriate to let the PM core queue a suspend request for the device.”h]”hŒðDevice appears to be inactive and it might be put into a low-power state if all of the necessary conditions are satisfied. Check these conditions, and return 0 if it’s appropriate to let the PM core queue a suspend request for the device.”…”�”}”(hjp h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Kïhjm ubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjQ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³jl h´KñhjÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhhÊh²hh³hîh´Nubj[)�”}”(hŒ**Description**”h]”jŠ)�”}”(hjš h]”hŒ Description”…”�”}”(hjœ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj˜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KõhhÊh²hubj[)�”}”(hX‡Several device power state transitions are externally visible, affecting the state of pending I/O queues and (for drivers that touch hardware) interrupts, wakeups, DMA, and other hardware state. There may also be internal transitions to various low-power modes which are transparent to the rest of the driver stack (such as a driver that's ON gating off clocks which are not in active use).”h]”hX‰Several device power state transitions are externally visible, affecting the state of pending I/O queues and (for drivers that touch hardware) interrupts, wakeups, DMA, and other hardware state. There may also be internal transitions to various low-power modes which are transparent to the rest of the driver stack (such as a driver that’s ON gating off clocks which are not in active use).”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KòhhÊh²hubj[)�”}”(hX}The externally visible transitions are handled with the help of callbacks included in this structure in such a way that, typically, two levels of callbacks are involved. First, the PM core executes callbacks provided by PM domains, device types, classes and bus types. They are the subsystem-level callbacks expected to execute callbacks provided by device drivers, although they may choose not to do that. If the driver callbacks are executed, they have to collaborate with the subsystem-level callbacks to achieve the goals appropriate for the given system transition, given transition phase and the subsystem the device belongs to.”h]”hX}The externally visible transitions are handled with the help of callbacks included in this structure in such a way that, typically, two levels of callbacks are involved. First, the PM core executes callbacks provided by PM domains, device types, classes and bus types. They are the subsystem-level callbacks expected to execute callbacks provided by device drivers, although they may choose not to do that. If the driver callbacks are executed, they have to collaborate with the subsystem-level callbacks to achieve the goals appropriate for the given system transition, given transition phase and the subsystem the device belongs to.”…”�”}”(hj¿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´KùhhÊh²hubj[)�”}”(hXúAll of the above callbacks, except for **complete\(\)**, return error codes. However, the error codes returned by **resume\(\)**, **thaw\(\)**, **restore\(\)**, **resume_noirq\(\)**, **thaw_noirq\(\)**, and **restore_noirq\(\)**, do not cause the PM core to abort the resume transition during which they are returned. The error codes returned in those cases are only printed to the system logs for debugging purposes. Still, it is recommended that drivers only return error codes from their resume methods in case of an unrecoverable failure (i.e. when the device being handled refuses to resume and becomes unusable) to allow the PM core to be modified in the future, so that it can avoid attempting to handle devices that failed to resume and their children.”h]”(hŒ'All of the above callbacks, except for ”…”�”}”(hjÎ h²hh³Nh´NubjŠ)�”}”(hŒ**complete\(\)**”h]”hŒ complete()”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÎ ubhŒ;, return error codes. However, the error codes returned by ”…”�”}”(hjÎ h²hh³Nh´NubjŠ)�”}”(hŒ**resume\(\)**”h]”hŒ resume()”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÎ ubhŒ, ”…”�”}”(hjÎ h²hh³Nh´NubjŠ)�”}”(hŒ **thaw\(\)**”h]”hŒthaw()”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÎ ubhŒ, ”…”�”}”hjÎ sbjŠ)�”}”(hŒ**restore\(\)**”h]”hŒ restore()”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÎ ubhŒ, ”…”�”}”(hjÎ h²hh³Nh´NubjŠ)�”}”(hŒ**resume_noirq\(\)**”h]”hŒresume_noirq()”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÎ ubhŒ, ”…”�”}”hjÎ sbjŠ)�”}”(hŒ**thaw_noirq\(\)**”h]”hŒthaw_noirq()”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÎ ubhŒ, and ”…”�”}”(hjÎ h²hh³Nh´NubjŠ)�”}”(hŒ**restore_noirq\(\)**”h]”hŒrestore_noirq()”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjÎ ubhX, do not cause the PM core to abort the resume transition during which they are returned. The error codes returned in those cases are only printed to the system logs for debugging purposes. Still, it is recommended that drivers only return error codes from their resume methods in case of an unrecoverable failure (i.e. when the device being handled refuses to resume and becomes unusable) to allow the PM core to be modified in the future, so that it can avoid attempting to handle devices that failed to resume and their children.”…”�”}”(hjÎ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´MhhÊh²hubj[)�”}”(hX/It is allowed to unregister devices while the above callbacks are being executed. However, a callback routine MUST NOT try to unregister the device it was called for, although it may unregister children of that device (for example, if it detects that a child was unplugged while the system was asleep).”h]”hX/It is allowed to unregister devices while the above callbacks are being executed. However, a callback routine MUST NOT try to unregister the device it was called for, although it may unregister children of that device (for example, if it detects that a child was unplugged while the system was asleep).”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´MhhÊh²hubj[)�”}”(hX§There also are callbacks related to runtime power management of devices. Again, as a rule these callbacks are executed by the PM core for subsystems (PM domains, device types, classes and bus types) and the subsystem-level callbacks are expected to invoke the driver callbacks. Moreover, the exact actions to be performed by a device driver's callbacks generally depend on the platform and subsystem the device belongs to.”h]”hX©There also are callbacks related to runtime power management of devices. Again, as a rule these callbacks are executed by the PM core for subsystems (PM domains, device types, classes and bus types) and the subsystem-level callbacks are expected to invoke the driver callbacks. Moreover, the exact actions to be performed by a device driver’s callbacks generally depend on the platform and subsystem the device belongs to.”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´MhhÊh²hubj[)�”}”(hŒÍRefer to Documentation/power/runtime_pm.rst for more information about the role of the **runtime_suspend\(\)**, **runtime_resume\(\)** and **runtime_idle\(\)** callbacks in device runtime power management.”h]”(hŒWRefer to Documentation/power/runtime_pm.rst for more information about the role of the ”…”�”}”(hjy h²hh³Nh´NubjŠ)�”}”(hŒ**runtime_suspend\(\)**”h]”hŒruntime_suspend()”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjy ubhŒ, ”…”�”}”(hjy h²hh³Nh´NubjŠ)�”}”(hŒ**runtime_resume\(\)**”h]”hŒruntime_resume()”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjy ubhŒ and ”…”�”}”(hjy h²hh³Nh´NubjŠ)�”}”(hŒ**runtime_idle\(\)**”h]”hŒruntime_idle()”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjy ubhŒ. callbacks in device runtime power management.”…”�”}”(hjy h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´MhhÊh²hubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒdev_pm_domain (C struct)”Œc.dev_pm_domain”hNt”auh1hÝhhÊh²hh³hîh´Nubhð)�”}”(hhh]”(hõ)�”}”(hŒ dev_pm_domain”h]”hû)�”}”(hŒstruct dev_pm_domain”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÓ h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´M"ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓ h²hh³jä h´M"ubj$)�”}”(hŒ dev_pm_domain”h]”j*)�”}”(hjÑ h]”hŒ dev_pm_domain”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjó ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”hÅhÆuh1j#hjÓ h²hh³jä h´M"ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjGˆuh1hújHjIhjÏ h²hh³jä h´M"ubah}”(h]”jÊ ah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hôh³jä h´M"hjÌ h²hubjV)�”}”(hhh]”j[)�”}”(hŒ'power management domain representation.”h]”hŒ'power management domain representation.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Máhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjÌ h²hh³jä h´M"ubeh}”(h]”h ]”(jtŒstruct”eh"]”h$]”h&]”jyjtjzj1j{j1j|‰j}‰j~‰uh1hïh²hhhÊh³hîh´Nubj€)�”}”(hXr**Definition**:: struct dev_pm_domain { struct dev_pm_ops ops; int (*start)(struct device *dev); void (*detach)(struct device *dev, bool power_off); int (*activate)(struct device *dev); void (*sync)(struct device *dev); void (*dismiss)(struct device *dev); int (*set_performance_state)(struct device *dev, unsigned int state); }; **Members** ``ops`` Power management operations associated with this domain. ``start`` Called when a user needs to start the device via the domain. ``detach`` Called when removing a device from the domain. ``activate`` Called before executing probe routines for bus types and drivers. ``sync`` Called after successful driver probe. ``dismiss`` Called after unsuccessful driver probe and after driver removal. ``set_performance_state`` Called to request a new performance state.”h]”(j[)�”}”(hŒ**Definition**::”h]”(jŠ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj9ubhŒ:”…”�”}”(hj9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Måhj5ubj¥)�”}”(hXZstruct dev_pm_domain { struct dev_pm_ops ops; int (*start)(struct device *dev); void (*detach)(struct device *dev, bool power_off); int (*activate)(struct device *dev); void (*sync)(struct device *dev); void (*dismiss)(struct device *dev); int (*set_performance_state)(struct device *dev, unsigned int state); };”h]”hXZstruct dev_pm_domain { struct dev_pm_ops ops; int (*start)(struct device *dev); void (*detach)(struct device *dev, bool power_off); int (*activate)(struct device *dev); void (*sync)(struct device *dev); void (*dismiss)(struct device *dev); int (*set_performance_state)(struct device *dev, unsigned int state); };”…”�”}”hjVsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¤h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Mçhj5ubj[)�”}”(hŒ **Members**”h]”jŠ)�”}”(hjgh]”hŒMembers”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Mñhj5ubjÎ)�”}”(hhh]”(jÓ)�”}”(hŒA``ops`` Power management operations associated with this domain. ”h]”(jÙ)�”}”(hŒ``ops``”h]”jß)�”}”(hj†h]”hŒops”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Mähj€ubjõ)�”}”(hhh]”j[)�”}”(hŒ8Power management operations associated with this domain.”h]”hŒ8Power management operations associated with this domain.”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³j›h´Mähjœubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒh³j›h´Mähj}ubjÓ)�”}”(hŒG``start`` Called when a user needs to start the device via the domain. ”h]”(jÙ)�”}”(hŒ ``start``”h]”jß)�”}”(hj¿h]”hŒstart”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/pm/types:7: ./include/linux/pm.h”h´Måhj¹ubjõ)�”}”(hhh]”j[)�”}”(hŒ