Ivan,
Can you please test, whether the following patch will make
the HC alive again after suspend-to-ram in your system. Note
that the patch won't try to keep the state, it just
reinitializes the controller.
Olav
--- linux-2.6.13-usb-resume0/drivers/usb/host/isp116x-hcd.c 2005-10-10
08:36:04.000000000 +0300
+++ linux-2.6.13-usb-resume1/drivers/usb/host/isp116x-hcd.c 2005-10-10
12:48:35.000000000 +0300
@@ -1193,15 +1193,16 @@ static int isp116x_hub_suspend(struct us
return ret;
}
+static int isp116x_reset(struct usb_hcd *hcd);
+static int isp116x_start(struct usb_hcd *hcd);
+
static int isp116x_hub_resume(struct usb_hcd *hcd)
{
struct isp116x *isp116x = hcd_to_isp116x(hcd);
u32 val;
- int ret = -EINPROGRESS;
msleep(5);
spin_lock_irq(&isp116x->lock);
-
val = isp116x_read_reg32(isp116x, HCCONTROL);
switch (val & HCCONTROL_HCFS) {
case HCCONTROL_USB_SUSPEND:
@@ -1215,16 +1216,23 @@ static int isp116x_hub_resume(struct usb
SUSPENDED state won't be removed from
sysfs/usbN/power.state as a response to remote
wakeup. Maybe in the future. */
+ spin_unlock_irq(&isp116x->lock);
hcd->self.root_hub->dev.power.power_state = PMSG_ON;
- ret = 0;
- break;
+ return 0;
default:
- ret = -EBUSY;
- }
-
- if (ret != -EINPROGRESS) {
+ /* HCCONTROL_USB_RESET: this may happen, when during
+ suspension the HC lost power. Reinitialize completely */
spin_unlock_irq(&isp116x->lock);
- return ret;
+ DBG("Chip has been reset while suspended. Reinit from
scratch.\n");
+ isp116x_reset(hcd);
+ isp116x_start(hcd);
+ isp116x_hub_control(hcd, SetPortFeature,
+ USB_PORT_FEAT_POWER, 1, NULL, 0);
+ if ((isp116x->rhdesca & RH_A_NDP) == 2)
+ isp116x_hub_control(hcd, SetPortFeature,
+ USB_PORT_FEAT_POWER, 2, NULL, 0);
+ hcd->self.root_hub->dev.power.power_state = PMSG_ON;
+ return 0;
}
val = isp116x->rhdesca & RH_A_NDP;
-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel