From david-b@pacbell.net Fri Sep 23 00:30:52 2005 From: David Brownell Subject: [patch 11/12] ISP116x PM updates Date: Thu, 22 Sep 2005 22:45:13 -0700 Cc: Greg KH Message-Id: <200509222245.13688.david-b@pacbell.net> This makes the isp116x driver stop using usb_suspend_device() and usb_resume_device() ... usbcore now calls to the root hub methods, removing the need for this. It also switches from keventd to khubd for remote wakeup. (Compile tested.) Signed-off-by: David Brownell Signed-off-by: Greg Kroah-Hartman drivers/usb/host/isp116x-hcd.c | 28 +++------------------------- drivers/usb/host/isp116x.h | 1 - 2 files changed, 3 insertions(+), 26 deletions(-) --- --- gregkh-2.6.orig/drivers/usb/host/isp116x-hcd.c +++ gregkh-2.6/drivers/usb/host/isp116x-hcd.c @@ -638,7 +638,7 @@ static irqreturn_t isp116x_irq(struct us + msecs_to_jiffies(20) + 1); if (intstat & HCINT_RD) { DBG("---- remote wakeup\n"); - schedule_work(&isp116x->rh_resume); + usb_hcd_resume_root_hub(hcd); ret = IRQ_HANDLED; } irqstat &= ~HCuPINT_OPR; @@ -1263,22 +1263,12 @@ static int isp116x_hub_resume(struct usb return 0; } -static void isp116x_rh_resume(void *_hcd) -{ - struct usb_hcd *hcd = _hcd; - - usb_resume_device(hcd->self.root_hub); -} #else #define isp116x_hub_suspend NULL #define isp116x_hub_resume NULL -static void isp116x_rh_resume(void *_hcd) -{ -} - #endif /*-----------------------------------------------------------------*/ @@ -1732,7 +1722,6 @@ static int __init isp116x_probe(struct d isp116x->addr_reg = addr_reg; spin_lock_init(&isp116x->lock); INIT_LIST_HEAD(&isp116x->async); - INIT_WORK(&isp116x->rh_resume, isp116x_rh_resume, hcd); isp116x->board = dev->platform_data; if (!isp116x->board) { @@ -1777,19 +1766,13 @@ static int __init isp116x_probe(struct d static int isp116x_suspend(struct device *dev, pm_message_t state, u32 phase) { int ret = 0; - struct usb_hcd *hcd = dev_get_drvdata(dev); VDBG("%s: state %x, phase %x\n", __func__, state, phase); if (phase != SUSPEND_DISABLE && phase != SUSPEND_POWER_DOWN) return 0; - ret = usb_suspend_device(hcd->self.root_hub); - if (!ret) { - dev->power.power_state = state; - INFO("%s suspended\n", hcd_name); - } else - ERR("%s suspend failed\n", hcd_name); + dev->power.power_state = state; return ret; } @@ -1800,18 +1783,13 @@ static int isp116x_suspend(struct device static int isp116x_resume(struct device *dev, u32 phase) { int ret = 0; - struct usb_hcd *hcd = dev_get_drvdata(dev); VDBG("%s: state %x, phase %x\n", __func__, dev->power.power_state, phase); if (phase != RESUME_POWER_ON) return 0; - ret = usb_resume_device(hcd->self.root_hub); - if (!ret) { - dev->power.power_state = PMSG_ON; - VDBG("%s resumed\n", (char *)hcd_name); - } + dev->power.power_state = PMSG_ON; return ret; } --- gregkh-2.6.orig/drivers/usb/host/isp116x.h +++ gregkh-2.6/drivers/usb/host/isp116x.h @@ -253,7 +253,6 @@ static const int cc_to_error[16] = { struct isp116x { spinlock_t lock; - struct work_struct rh_resume; void __iomem *addr_reg; void __iomem *data_reg;