1 Power Management for USB
3 Alan Stern <stern@rowland.harvard.edu>
9 What is Power Management?
10 -------------------------
12 Power Management (PM) is the practice of saving energy by suspending
13 parts of a computer system when they aren't being used. While a
14 component is "suspended" it is in a nonfunctional low-power state; it
15 might even be turned off completely. A suspended component can be
16 "resumed" (returned to a functional full-power state) when the kernel
17 needs to use it. (There also are forms of PM in which components are
18 placed in a less functional but still usable state instead of being
19 suspended; an example would be reducing the CPU's clock rate. This
20 document will not discuss those other forms.)
22 When the parts being suspended include the CPU and most of the rest of
23 the system, we speak of it as a "system suspend". When a particular
24 device is turned off while the system as a whole remains running, we
25 call it a "dynamic suspend" (also known as a "runtime suspend" or
26 "selective suspend"). This document concentrates mostly on how
27 dynamic PM is implemented in the USB subsystem, although system PM is
28 covered to some extent (see Documentation/power/*.txt for more
29 information about system PM).
31 Note: Dynamic PM support for USB is present only if the kernel was
32 built with CONFIG_USB_SUSPEND enabled. System PM support is present
33 only if the kernel was built with CONFIG_SUSPEND or CONFIG_HIBERNATION
37 What is Remote Wakeup?
38 ----------------------
40 When a device has been suspended, it generally doesn't resume until
41 the computer tells it to. Likewise, if the entire computer has been
42 suspended, it generally doesn't resume until the user tells it to, say
43 by pressing a power button or opening the cover.
45 However some devices have the capability of resuming by themselves, or
46 asking the kernel to resume them, or even telling the entire computer
47 to resume. This capability goes by several names such as "Wake On
48 LAN"; we will refer to it generically as "remote wakeup". When a
49 device is enabled for remote wakeup and it is suspended, it may resume
50 itself (or send a request to be resumed) in response to some external
51 event. Examples include a suspended keyboard resuming when a key is
52 pressed, or a suspended USB hub resuming when a device is plugged in.
55 When is a USB device idle?
56 --------------------------
58 A device is idle whenever the kernel thinks it's not busy doing
59 anything important and thus is a candidate for being suspended. The
60 exact definition depends on the device's driver; drivers are allowed
61 to declare that a device isn't idle even when there's no actual
62 communication taking place. (For example, a hub isn't considered idle
63 unless all the devices plugged into that hub are already suspended.)
64 In addition, a device isn't considered idle so long as a program keeps
65 its usbfs file open, whether or not any I/O is going on.
67 If a USB device has no driver, its usbfs file isn't open, and it isn't
68 being accessed through sysfs, then it definitely is idle.
74 Dynamic suspends occur when the kernel decides to suspend an idle
75 device. This is called "autosuspend" for short. In general, a device
76 won't be autosuspended unless it has been idle for some minimum period
77 of time, the so-called idle-delay time.
79 Of course, nothing the kernel does on its own initiative should
80 prevent the computer or its devices from working properly. If a
81 device has been autosuspended and a program tries to use it, the
82 kernel will automatically resume the device (autoresume). For the
83 same reason, an autosuspended device will usually have remote wakeup
84 enabled, if the device supports remote wakeup.
86 It is worth mentioning that many USB drivers don't support
87 autosuspend. In fact, at the time of this writing (Linux 2.6.23) the
88 only drivers which do support it are the hub driver, kaweth, asix,
89 usblp, usblcd, and usb-skeleton (which doesn't count). If a
90 non-supporting driver is bound to a device, the device won't be
91 autosuspended. In effect, the kernel pretends the device is never
94 We can categorize power management events in two broad classes:
95 external and internal. External events are those triggered by some
96 agent outside the USB stack: system suspend/resume (triggered by
97 userspace), manual dynamic resume (also triggered by userspace), and
98 remote wakeup (triggered by the device). Internal events are those
99 triggered within the USB stack: autosuspend and autoresume. Note that
100 all dynamic suspend events are internal; external agents are not
101 allowed to issue dynamic suspends.
104 The user interface for dynamic PM
105 ---------------------------------
107 The user interface for controlling dynamic PM is located in the power/
108 subdirectory of each USB device's sysfs directory, that is, in
109 /sys/bus/usb/devices/.../power/ where "..." is the device's ID. The
110 relevant attribute files are: wakeup, level, and autosuspend.
114 This file is empty if the device does not support
115 remote wakeup. Otherwise the file contains either the
116 word "enabled" or the word "disabled", and you can
117 write those words to the file. The setting determines
118 whether or not remote wakeup will be enabled when the
119 device is next suspended. (If the setting is changed
120 while the device is suspended, the change won't take
121 effect until the following suspend.)
125 This file contains one of two words: "on" or "auto".
126 You can write those words to the file to change the
129 "on" means that the device should be resumed and
130 autosuspend is not allowed. (Of course, system
131 suspends are still allowed.)
133 "auto" is the normal state in which the kernel is
134 allowed to autosuspend and autoresume the device.
136 (In kernels up to 2.6.32, you could also specify
137 "suspend", meaning that the device should remain
138 suspended and autoresume was not allowed. This
139 setting is no longer supported.)
143 This file contains an integer value, which is the
144 number of seconds the device should remain idle before
145 the kernel will autosuspend it (the idle-delay time).
146 The default is 2. 0 means to autosuspend as soon as
147 the device becomes idle, and negative values mean
148 never to autosuspend. You can write a number to the
149 file to change the autosuspend idle-delay time.
151 Writing "-1" to power/autosuspend and writing "on" to power/level do
152 essentially the same thing -- they both prevent the device from being
153 autosuspended. Yes, this is a redundancy in the API.
155 (In 2.6.21 writing "0" to power/autosuspend would prevent the device
156 from being autosuspended; the behavior was changed in 2.6.22. The
157 power/autosuspend attribute did not exist prior to 2.6.21, and the
158 power/level attribute did not exist prior to 2.6.22.)
161 Changing the default idle-delay time
162 ------------------------------------
164 The default autosuspend idle-delay time is controlled by a module
165 parameter in usbcore. You can specify the value when usbcore is
166 loaded. For example, to set it to 5 seconds instead of 2 you would
169 modprobe usbcore autosuspend=5
171 Equivalently, you could add to /etc/modprobe.conf a line saying:
173 options usbcore autosuspend=5
175 Some distributions load the usbcore module very early during the boot
176 process, by means of a program or script running from an initramfs
177 image. To alter the parameter value you would have to rebuild that
180 If usbcore is compiled into the kernel rather than built as a loadable
183 usbcore.autosuspend=5
185 to the kernel's boot command line.
187 Finally, the parameter value can be changed while the system is
190 echo 5 >/sys/module/usbcore/parameters/autosuspend
192 then each new USB device will have its autosuspend idle-delay
193 initialized to 5. (The idle-delay values for already existing devices
194 will not be affected.)
196 Setting the initial default idle-delay to -1 will prevent any
197 autosuspend of any USB device. This is a simple alternative to
198 disabling CONFIG_USB_SUSPEND and rebuilding the kernel, and it has the
199 added benefit of allowing you to enable autosuspend for selected
206 The USB specification states that all USB devices must support power
207 management. Nevertheless, the sad fact is that many devices do not
208 support it very well. You can suspend them all right, but when you
209 try to resume them they disconnect themselves from the USB bus or
210 they stop working entirely. This seems to be especially prevalent
211 among printers and scanners, but plenty of other types of device have
214 For this reason, by default the kernel disables autosuspend (the
215 power/level attribute is initialized to "on") for all devices other
216 than hubs. Hubs, at least, appear to be reasonably well-behaved in
219 (In 2.6.21 and 2.6.22 this wasn't the case. Autosuspend was enabled
220 by default for almost all USB devices. A number of people experienced
221 problems as a result.)
223 This means that non-hub devices won't be autosuspended unless the user
224 or a program explicitly enables it. As of this writing there aren't
225 any widespread programs which will do this; we hope that in the near
226 future device managers such as HAL will take on this added
227 responsibility. In the meantime you can always carry out the
228 necessary operations by hand or add them to a udev script. You can
229 also change the idle-delay time; 2 seconds is not the best choice for
232 Sometimes it turns out that even when a device does work okay with
233 autosuspend there are still problems. For example, there are
234 experimental patches adding autosuspend support to the usbhid driver,
235 which manages keyboards and mice, among other things. Tests with a
236 number of keyboards showed that typing on a suspended keyboard, while
237 causing the keyboard to do a remote wakeup all right, would
238 nonetheless frequently result in lost keystrokes. Tests with mice
239 showed that some of them would issue a remote-wakeup request in
240 response to button presses but not to motion, and some in response to
243 The kernel will not prevent you from enabling autosuspend on devices
244 that can't handle it. It is even possible in theory to damage a
245 device by suspending it at the wrong time -- for example, suspending a
246 USB hard disk might cause it to spin down without parking the heads.
247 (Highly unlikely, but possible.) Take care.
250 The driver interface for Power Management
251 -----------------------------------------
253 The requirements for a USB driver to support external power management
254 are pretty modest; the driver need only define
260 methods in its usb_driver structure, and the reset_resume method is
261 optional. The methods' jobs are quite simple:
263 The suspend method is called to warn the driver that the
264 device is going to be suspended. If the driver returns a
265 negative error code, the suspend will be aborted. Normally
266 the driver will return 0, in which case it must cancel all
267 outstanding URBs (usb_kill_urb()) and not submit any more.
269 The resume method is called to tell the driver that the
270 device has been resumed and the driver can return to normal
271 operation. URBs may once more be submitted.
273 The reset_resume method is called to tell the driver that
274 the device has been resumed and it also has been reset.
275 The driver should redo any necessary device initialization,
276 since the device has probably lost most or all of its state
277 (although the interfaces will be in the same altsettings as
280 If the device is disconnected or powered down while it is suspended,
281 the disconnect method will be called instead of the resume or
282 reset_resume method. This is also quite likely to happen when
283 waking up from hibernation, as many systems do not maintain suspend
284 current to the USB host controllers during hibernation. (It's
285 possible to work around the hibernation-forces-disconnect problem by
286 using the USB Persist facility.)
288 The reset_resume method is used by the USB Persist facility (see
289 Documentation/usb/persist.txt) and it can also be used under certain
290 circumstances when CONFIG_USB_PERSIST is not enabled. Currently, if a
291 device is reset during a resume and the driver does not have a
292 reset_resume method, the driver won't receive any notification about
293 the resume. Later kernels will call the driver's disconnect method;
294 2.6.23 doesn't do this.
296 USB drivers are bound to interfaces, so their suspend and resume
297 methods get called when the interfaces are suspended or resumed. In
298 principle one might want to suspend some interfaces on a device (i.e.,
299 force the drivers for those interface to stop all activity) without
300 suspending the other interfaces. The USB core doesn't allow this; all
301 interfaces are suspended when the device itself is suspended and all
302 interfaces are resumed when the device is resumed. It isn't possible
303 to suspend or resume some but not all of a device's interfaces. The
304 closest you can come is to unbind the interfaces' drivers.
307 The driver interface for autosuspend and autoresume
308 ---------------------------------------------------
310 To support autosuspend and autoresume, a driver should implement all
311 three of the methods listed above. In addition, a driver indicates
312 that it supports autosuspend by setting the .supports_autosuspend flag
313 in its usb_driver structure. It is then responsible for informing the
314 USB core whenever one of its interfaces becomes busy or idle. The
315 driver does so by calling these six functions:
317 int usb_autopm_get_interface(struct usb_interface *intf);
318 void usb_autopm_put_interface(struct usb_interface *intf);
319 int usb_autopm_get_interface_async(struct usb_interface *intf);
320 void usb_autopm_put_interface_async(struct usb_interface *intf);
321 void usb_autopm_get_interface_no_resume(struct usb_interface *intf);
322 void usb_autopm_put_interface_no_suspend(struct usb_interface *intf);
324 The functions work by maintaining a counter in the usb_interface
325 structure. When intf->pm_usage_count is > 0 then the interface is
326 deemed to be busy, and the kernel will not autosuspend the interface's
327 device. When intf->pm_usage_count is <= 0 then the interface is
328 considered to be idle, and the kernel may autosuspend the device.
330 (There is a similar pm_usage_count field in struct usb_device,
331 associated with the device itself rather than any of its interfaces.
332 This field is used only by the USB core.)
334 Drivers must not modify intf->pm_usage_count directly; its value
335 should be changed only be using the functions listed above. Drivers
336 are responsible for insuring that the overall change to pm_usage_count
337 during their lifetime balances out to 0 (it may be necessary for the
338 disconnect method to call usb_autopm_put_interface() one or more times
339 to fulfill this requirement). The first two routines use the PM mutex
340 in struct usb_device for mutual exclusion; drivers using the async
341 routines are responsible for their own synchronization and mutual
344 usb_autopm_get_interface() increments pm_usage_count and
345 attempts an autoresume if the new value is > 0 and the
348 usb_autopm_put_interface() decrements pm_usage_count and
349 attempts an autosuspend if the new value is <= 0 and the
350 device isn't suspended.
352 usb_autopm_get_interface_async() and
353 usb_autopm_put_interface_async() do almost the same things as
354 their non-async counterparts. The differences are: they do
355 not acquire the PM mutex, and they use a workqueue to do their
356 jobs. As a result they can be called in an atomic context,
357 such as an URB's completion handler, but when they return the
358 device will not generally not yet be in the desired state.
360 usb_autopm_get_interface_no_resume() and
361 usb_autopm_put_interface_no_suspend() merely increment or
362 decrement the pm_usage_count value; they do not attempt to
363 carry out an autoresume or an autosuspend. Hence they can be
364 called in an atomic context.
366 The conventional usage pattern is that a driver calls
367 usb_autopm_get_interface() in its open routine and
368 usb_autopm_put_interface() in its close or release routine. But
369 other patterns are possible.
371 The autosuspend attempts mentioned above will often fail for one
372 reason or another. For example, the power/level attribute might be
373 set to "on", or another interface in the same device might not be
374 idle. This is perfectly normal. If the reason for failure was that
375 the device hasn't been idle for long enough, a delayed workqueue
376 routine is automatically set up to carry out the operation when the
377 autosuspend idle-delay has expired.
379 Autoresume attempts also can fail, although failure would mean that
380 the device is no longer present or operating properly. Unlike
381 autosuspend, there's no delay for an autoresume.
384 Other parts of the driver interface
385 -----------------------------------
387 Sometimes a driver needs to make sure that remote wakeup is enabled
388 during autosuspend. For example, there's not much point
389 autosuspending a keyboard if the user can't cause the keyboard to do a
390 remote wakeup by typing on it. If the driver sets
391 intf->needs_remote_wakeup to 1, the kernel won't autosuspend the
392 device if remote wakeup isn't available or has been disabled through
393 the power/wakeup attribute. (If the device is already autosuspended,
394 though, setting this flag won't cause the kernel to autoresume it.
395 Normally a driver would set this flag in its probe method, at which
396 time the device is guaranteed not to be autosuspended.)
398 The synchronous usb_autopm_* routines have to run in a sleepable
399 process context; they must not be called from an interrupt handler or
400 while holding a spinlock. In fact, the entire autosuspend mechanism
401 is not well geared toward interrupt-driven operation. However there
402 is one thing a driver can do in an interrupt handler:
404 usb_mark_last_busy(struct usb_device *udev);
406 This sets udev->last_busy to the current time. udev->last_busy is the
407 field used for idle-delay calculations; updating it will cause any
408 pending autosuspend to be moved back. The usb_autopm_* routines will
409 also set the last_busy field to the current time.
411 Calling urb_mark_last_busy() from within an URB completion handler is
412 subject to races: The kernel may have just finished deciding the
413 device has been idle for long enough but not yet gotten around to
414 calling the driver's suspend method. The driver would have to be
415 responsible for synchronizing its suspend method with its URB
416 completion handler and causing the autosuspend to fail with -EBUSY if
417 an URB had completed too recently.
419 External suspend calls should never be allowed to fail in this way,
420 only autosuspend calls. The driver can tell them apart by checking
421 the PM_EVENT_AUTO bit in the message.event argument to the suspend
422 method; this bit will be set for internal PM events (autosuspend) and
423 clear for external PM events.
425 Many of the ingredients in the autosuspend framework are oriented
426 towards interfaces: The usb_interface structure contains the
427 pm_usage_cnt field, and the usb_autopm_* routines take an interface
428 pointer as their argument. But somewhat confusingly, a few of the
429 pieces (i.e., usb_mark_last_busy()) use the usb_device structure
430 instead. Drivers need to keep this straight; they can call
431 interface_to_usbdev() to find the device structure for a given
438 All three suspend/resume methods are always called while holding the
439 usb_device's PM mutex. For external events -- but not necessarily for
440 autosuspend or autoresume -- the device semaphore (udev->dev.sem) will
441 also be held. This implies that external suspend/resume events are
442 mutually exclusive with calls to probe, disconnect, pre_reset, and
443 post_reset; the USB core guarantees that this is true of internal
444 suspend/resume events as well.
446 If a driver wants to block all suspend/resume calls during some
447 critical section, it can simply acquire udev->pm_mutex. Note that
448 calls to resume may be triggered indirectly. Block IO due to memory
449 allocations can make the vm subsystem resume a device. Thus while
450 holding this lock you must not allocate memory with GFP_KERNEL or
453 Alternatively, if the critical section might call some of the
454 usb_autopm_* routines, the driver can avoid deadlock by doing:
456 down(&udev->dev.sem);
457 rc = usb_autopm_get_interface(intf);
459 and at the end of the critical section:
462 usb_autopm_put_interface(intf);
465 Holding the device semaphore will block all external PM calls, and the
466 usb_autopm_get_interface() will prevent any internal PM calls, even if
467 it fails. (Exercise: Why?)
469 The rules for locking order are:
471 Never acquire any device semaphore while holding any PM mutex.
473 Never acquire udev->pm_mutex while holding the PM mutex for
474 a device that isn't a descendant of udev.
476 In other words, PM mutexes should only be acquired going up the device
477 tree, and they should be acquired only after locking all the device
478 semaphores you need to hold. These rules don't matter to drivers very
479 much; they usually affect just the USB core.
481 Still, drivers do need to be careful. For example, many drivers use a
482 private mutex to synchronize their normal I/O activities with their
483 disconnect method. Now if the driver supports autosuspend then it
484 must call usb_autopm_put_interface() from somewhere -- maybe from its
485 close method. It should make the call while holding the private mutex,
486 since a driver shouldn't call any of the usb_autopm_* functions for an
487 interface from which it has been unbound.
489 But the usb_autpm_* routines always acquire the device's PM mutex, and
490 consequently the locking order has to be: private mutex first, PM
491 mutex second. Since the suspend method is always called with the PM
492 mutex held, it mustn't try to acquire the private mutex. It has to
493 synchronize with the driver's I/O activities in some other way.
496 Interaction between dynamic PM and system PM
497 --------------------------------------------
499 Dynamic power management and system power management can interact in
502 Firstly, a device may already be manually suspended or autosuspended
503 when a system suspend occurs. Since system suspends are supposed to
504 be as transparent as possible, the device should remain suspended
505 following the system resume. The 2.6.23 kernel obeys this principle
506 for manually suspended devices but not for autosuspended devices; they
507 do get resumed when the system wakes up. (Presumably they will be
508 autosuspended again after their idle-delay time expires.) In later
509 kernels this behavior will be fixed.
511 (There is an exception. If a device would undergo a reset-resume
512 instead of a normal resume, and the device is enabled for remote
513 wakeup, then the reset-resume takes place even if the device was
514 already suspended when the system suspend began. The justification is
515 that a reset-resume is a kind of remote-wakeup event. Or to put it
516 another way, a device which needs a reset won't be able to generate
517 normal remote-wakeup signals, so it ought to be resumed immediately.)
519 Secondly, a dynamic power-management event may occur as a system
520 suspend is underway. The window for this is short, since system
521 suspends don't take long (a few seconds usually), but it can happen.
522 For example, a suspended device may send a remote-wakeup signal while
523 the system is suspending. The remote wakeup may succeed, which would
524 cause the system suspend to abort. If the remote wakeup doesn't
525 succeed, it may still remain active and thus cause the system to
526 resume as soon as the system suspend is complete. Or the remote
527 wakeup may fail and get lost. Which outcome occurs depends on timing
528 and on the hardware and firmware design.