diff options
author | David Brownell <david-b@pacbell.net> | 2005-09-13 22:56:33 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2005-10-28 19:47:38 -0400 |
commit | db69087437dd5135a9362da1c37fe072070e8f60 (patch) | |
tree | 1affacd290eff29b5dc589bbf47369e20d6101db /drivers/usb/net | |
parent | 7586269c0b52970f60bb69fcb86e765fc1d72309 (diff) |
[PATCH] usb_interface power state
This updates the handling of power state for USB interfaces.
- Formalizes an existing invariant: interface "power state" is a boolean:
ON when I/O is allowed, and FREEZE otherwise. It does so by defining
some inlined helpers, then using them.
- Adds a useful invariant: the only interfaces marked active are those
bound to non-suspended drivers. Later patches build on this invariant.
- Simplifies the interface driver API (and removes some error paths) by
removing the requirement that they record power state changes during
suspend and resume callbacks. Now usbcore does that.
A few drivers were simplified to address that last change.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/core/hub.c | 33 +++++++++------------
drivers/usb/core/message.c | 1
drivers/usb/core/usb.c | 65 +++++++++++++++++++++++++++++++++----------
drivers/usb/core/usb.h | 18 +++++++++++
drivers/usb/input/hid-core.c | 2 -
drivers/usb/misc/usbtest.c | 10 ------
drivers/usb/net/pegasus.c | 2 -
drivers/usb/net/usbnet.c | 2 -
8 files changed, 85 insertions(+), 48 deletions(-)
Diffstat (limited to 'drivers/usb/net')
-rw-r--r-- | drivers/usb/net/pegasus.c | 2 | ||||
-rw-r--r-- | drivers/usb/net/usbnet.c | 2 |
2 files changed, 0 insertions, 4 deletions
diff --git a/drivers/usb/net/pegasus.c b/drivers/usb/net/pegasus.c index 6a4ffe6c3977..537eb181d985 100644 --- a/drivers/usb/net/pegasus.c +++ b/drivers/usb/net/pegasus.c | |||
@@ -1384,7 +1384,6 @@ static int pegasus_suspend (struct usb_interface *intf, pm_message_t message) | |||
1384 | usb_kill_urb(pegasus->rx_urb); | 1384 | usb_kill_urb(pegasus->rx_urb); |
1385 | usb_kill_urb(pegasus->intr_urb); | 1385 | usb_kill_urb(pegasus->intr_urb); |
1386 | } | 1386 | } |
1387 | intf->dev.power.power_state = PMSG_SUSPEND; | ||
1388 | return 0; | 1387 | return 0; |
1389 | } | 1388 | } |
1390 | 1389 | ||
@@ -1392,7 +1391,6 @@ static int pegasus_resume (struct usb_interface *intf) | |||
1392 | { | 1391 | { |
1393 | struct pegasus *pegasus = usb_get_intfdata(intf); | 1392 | struct pegasus *pegasus = usb_get_intfdata(intf); |
1394 | 1393 | ||
1395 | intf->dev.power.power_state = PMSG_ON; | ||
1396 | netif_device_attach (pegasus->net); | 1394 | netif_device_attach (pegasus->net); |
1397 | if (netif_running(pegasus->net)) { | 1395 | if (netif_running(pegasus->net)) { |
1398 | pegasus->rx_urb->status = 0; | 1396 | pegasus->rx_urb->status = 0; |
diff --git a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c index fce81d738933..74f05c9c84d5 100644 --- a/drivers/usb/net/usbnet.c +++ b/drivers/usb/net/usbnet.c | |||
@@ -1185,7 +1185,6 @@ int usbnet_suspend (struct usb_interface *intf, pm_message_t message) | |||
1185 | netif_device_detach (dev->net); | 1185 | netif_device_detach (dev->net); |
1186 | (void) unlink_urbs (dev, &dev->rxq); | 1186 | (void) unlink_urbs (dev, &dev->rxq); |
1187 | (void) unlink_urbs (dev, &dev->txq); | 1187 | (void) unlink_urbs (dev, &dev->txq); |
1188 | intf->dev.power.power_state = PMSG_SUSPEND; | ||
1189 | return 0; | 1188 | return 0; |
1190 | } | 1189 | } |
1191 | EXPORT_SYMBOL_GPL(usbnet_suspend); | 1190 | EXPORT_SYMBOL_GPL(usbnet_suspend); |
@@ -1194,7 +1193,6 @@ int usbnet_resume (struct usb_interface *intf) | |||
1194 | { | 1193 | { |
1195 | struct usbnet *dev = usb_get_intfdata(intf); | 1194 | struct usbnet *dev = usb_get_intfdata(intf); |
1196 | 1195 | ||
1197 | intf->dev.power.power_state = PMSG_ON; | ||
1198 | netif_device_attach (dev->net); | 1196 | netif_device_attach (dev->net); |
1199 | tasklet_schedule (&dev->bh); | 1197 | tasklet_schedule (&dev->bh); |
1200 | return 0; | 1198 | return 0; |