diff options
author | David Brownell <david-b@pacbell.net> | 2005-09-23 01:45:13 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2005-10-28 19:47:41 -0400 |
commit | ccdcf77ae32e3d3347fdf3810b27f899e98c34fb (patch) | |
tree | 88e49a51a4778966aa64a138896f3a3321cc97fe | |
parent | a7f72abe8fac9b919135005e06216be8eef945a2 (diff) |
[PATCH] ISP116x PM updates
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 <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/host/isp116x-hcd.c | 29 ++++-------------------------
drivers/usb/host/isp116x.h | 1 -
2 files changed, 4 insertions(+), 26 deletions(-)
-rw-r--r-- | drivers/usb/host/isp116x-hcd.c | 29 | ||||
-rw-r--r-- | drivers/usb/host/isp116x.h | 1 |
2 files changed, 4 insertions, 26 deletions
diff --git a/drivers/usb/host/isp116x-hcd.c b/drivers/usb/host/isp116x-hcd.c index 554d60282a9d..f68220fc53fd 100644 --- a/drivers/usb/host/isp116x-hcd.c +++ b/drivers/usb/host/isp116x-hcd.c | |||
@@ -638,7 +638,7 @@ static irqreturn_t isp116x_irq(struct usb_hcd *hcd, struct pt_regs *regs) | |||
638 | + msecs_to_jiffies(20) + 1); | 638 | + msecs_to_jiffies(20) + 1); |
639 | if (intstat & HCINT_RD) { | 639 | if (intstat & HCINT_RD) { |
640 | DBG("---- remote wakeup\n"); | 640 | DBG("---- remote wakeup\n"); |
641 | schedule_work(&isp116x->rh_resume); | 641 | usb_hcd_resume_root_hub(hcd); |
642 | ret = IRQ_HANDLED; | 642 | ret = IRQ_HANDLED; |
643 | } | 643 | } |
644 | irqstat &= ~HCuPINT_OPR; | 644 | irqstat &= ~HCuPINT_OPR; |
@@ -1263,22 +1263,12 @@ static int isp116x_hub_resume(struct usb_hcd *hcd) | |||
1263 | return 0; | 1263 | return 0; |
1264 | } | 1264 | } |
1265 | 1265 | ||
1266 | static void isp116x_rh_resume(void *_hcd) | ||
1267 | { | ||
1268 | struct usb_hcd *hcd = _hcd; | ||
1269 | |||
1270 | usb_resume_device(hcd->self.root_hub); | ||
1271 | } | ||
1272 | 1266 | ||
1273 | #else | 1267 | #else |
1274 | 1268 | ||
1275 | #define isp116x_hub_suspend NULL | 1269 | #define isp116x_hub_suspend NULL |
1276 | #define isp116x_hub_resume NULL | 1270 | #define isp116x_hub_resume NULL |
1277 | 1271 | ||
1278 | static void isp116x_rh_resume(void *_hcd) | ||
1279 | { | ||
1280 | } | ||
1281 | |||
1282 | #endif | 1272 | #endif |
1283 | 1273 | ||
1284 | /*-----------------------------------------------------------------*/ | 1274 | /*-----------------------------------------------------------------*/ |
@@ -1732,7 +1722,6 @@ static int __init isp116x_probe(struct device *dev) | |||
1732 | isp116x->addr_reg = addr_reg; | 1722 | isp116x->addr_reg = addr_reg; |
1733 | spin_lock_init(&isp116x->lock); | 1723 | spin_lock_init(&isp116x->lock); |
1734 | INIT_LIST_HEAD(&isp116x->async); | 1724 | INIT_LIST_HEAD(&isp116x->async); |
1735 | INIT_WORK(&isp116x->rh_resume, isp116x_rh_resume, hcd); | ||
1736 | isp116x->board = dev->platform_data; | 1725 | isp116x->board = dev->platform_data; |
1737 | 1726 | ||
1738 | if (!isp116x->board) { | 1727 | if (!isp116x->board) { |
@@ -1777,16 +1766,10 @@ static int __init isp116x_probe(struct device *dev) | |||
1777 | static int isp116x_suspend(struct device *dev, pm_message_t state) | 1766 | static int isp116x_suspend(struct device *dev, pm_message_t state) |
1778 | { | 1767 | { |
1779 | int ret = 0; | 1768 | int ret = 0; |
1780 | struct usb_hcd *hcd = dev_get_drvdata(dev); | ||
1781 | 1769 | ||
1782 | VDBG("%s: state %x\n", __func__, state); | 1770 | VDBG("%s: state %x\n", __func__, state); |
1783 | 1771 | ||
1784 | ret = usb_suspend_device(hcd->self.root_hub); | 1772 | dev->power.power_state = state; |
1785 | if (!ret) { | ||
1786 | dev->power.power_state = state; | ||
1787 | INFO("%s suspended\n", hcd_name); | ||
1788 | } else | ||
1789 | ERR("%s suspend failed\n", hcd_name); | ||
1790 | 1773 | ||
1791 | return ret; | 1774 | return ret; |
1792 | } | 1775 | } |
@@ -1797,15 +1780,11 @@ static int isp116x_suspend(struct device *dev, pm_message_t state) | |||
1797 | static int isp116x_resume(struct device *dev) | 1780 | static int isp116x_resume(struct device *dev) |
1798 | { | 1781 | { |
1799 | int ret = 0; | 1782 | int ret = 0; |
1800 | struct usb_hcd *hcd = dev_get_drvdata(dev); | ||
1801 | 1783 | ||
1802 | VDBG("%s: state %x\n", __func__, dev->power.power_state); | 1784 | VDBG("%s: state %x\n", __func__, dev->power.power_state); |
1803 | 1785 | ||
1804 | ret = usb_resume_device(hcd->self.root_hub); | 1786 | dev->power.power_state = PMSG_ON; |
1805 | if (!ret) { | 1787 | |
1806 | dev->power.power_state = PMSG_ON; | ||
1807 | VDBG("%s resumed\n", (char *)hcd_name); | ||
1808 | } | ||
1809 | return ret; | 1788 | return ret; |
1810 | } | 1789 | } |
1811 | 1790 | ||
diff --git a/drivers/usb/host/isp116x.h b/drivers/usb/host/isp116x.h index 58873470dcf5..c6fec96785fe 100644 --- a/drivers/usb/host/isp116x.h +++ b/drivers/usb/host/isp116x.h | |||
@@ -253,7 +253,6 @@ static const int cc_to_error[16] = { | |||
253 | 253 | ||
254 | struct isp116x { | 254 | struct isp116x { |
255 | spinlock_t lock; | 255 | spinlock_t lock; |
256 | struct work_struct rh_resume; | ||
257 | 256 | ||
258 | void __iomem *addr_reg; | 257 | void __iomem *addr_reg; |
259 | void __iomem *data_reg; | 258 | void __iomem *data_reg; |