diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2006-07-02 02:12:19 (GMT) |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-09-27 18:58:50 (GMT) |
commit | 2bf4086d7a7722b470aa24e1be725cc58619c6fe (patch) | |
tree | 26724ce626c7b522311d7f9993527a8d2a0268fd /drivers/usb/core/hub.c | |
parent | 4d064c080265a41324d108fccc26b72106d43db3 (diff) | |
download | linux-fsl-qoriq-2bf4086d7a7722b470aa24e1be725cc58619c6fe.tar.xz |
usbcore: set device and power states properly
This patch (as733) fixes up the places where device states and power
states are set in usbcore. Right now things are duplicated or missing;
this should straighten things out.
The idea is that udev->state is USB_STATE_SUSPENDED exactly when the
device's upstream port has been suspended, whereas
udev->dev.power.power_state.event reflects the result of the last call
to the suspend/resume routines (which might not actually change the
device state, especially if CONFIG_USB_SUSPEND isn't set).
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/core/hub.c')
-rw-r--r-- | drivers/usb/core/hub.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index a391120..7af53db 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -1582,9 +1582,10 @@ static int __usb_port_suspend (struct usb_device *udev, int port1) if (udev->parent) status = hub_port_suspend(hdev_to_hub(udev->parent), port1, udev); - - if (status == 0) - udev->dev.power.power_state = PMSG_SUSPEND; + else { + dev_dbg(&udev->dev, "usb suspend\n"); + usb_set_device_state(udev, USB_STATE_SUSPENDED); + } return status; } @@ -1617,8 +1618,6 @@ int usb_port_suspend(struct usb_device *udev) return -ENODEV; return __usb_port_suspend(udev, udev->portnum); #else - /* NOTE: udev->state unchanged, it's not lying ... */ - udev->dev.power.power_state = PMSG_SUSPEND; return 0; #endif } @@ -1647,7 +1646,6 @@ static int finish_port_resume(struct usb_device *udev) usb_set_device_state(udev, udev->actconfig ? USB_STATE_CONFIGURED : USB_STATE_ADDRESS); - udev->dev.power.power_state = PMSG_ON; /* 10.5.4.5 says be sure devices in the tree are still there. * For now let's assume the device didn't go crazy on resume, |