diff options
author | Marc Pignat <marc.pignat@hevs.ch> | 2007-01-09 17:00:11 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-02-07 18:44:35 -0500 |
commit | 6dde896e4eac122f388263f0097b691acdc0396f (patch) | |
tree | 0ddf6a08407524e9b936405302c918572f9855df /drivers/usb/host | |
parent | f3f4906516a084bbd9aa3da7592e6b029fe78f5b (diff) |
USB: ohci-at91 refcount fix for irq wake enables
The attached patch fixes the unbalanced calls to enable_irq_wake() and
disable_irq_wake() in the AT91 USB Host driver.
It should resolve these kernel messages:
Unbalanced IRQ x wake disable
BUG: warning at kernel/irq/manage.c:167/set_irq_wake()
(The original code was debugged before a bug in the genirq wakeup irq
logic was fixed by adding the IRQ wake enable/disable refcounting.
Not all code yet uses the bugfixed model.)
Signed-off-by: Andrew Victor <andrew@sanpeople.com>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/host')
-rw-r--r-- | drivers/usb/host/ohci-at91.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c index 53f62cf7698b..930346487278 100644 --- a/drivers/usb/host/ohci-at91.c +++ b/drivers/usb/host/ohci-at91.c | |||
@@ -170,7 +170,6 @@ static int usb_hcd_at91_remove(struct usb_hcd *hcd, | |||
170 | at91_stop_hc(pdev); | 170 | at91_stop_hc(pdev); |
171 | iounmap(hcd->regs); | 171 | iounmap(hcd->regs); |
172 | release_mem_region(hcd->rsrc_start, hcd->rsrc_len); | 172 | release_mem_region(hcd->rsrc_start, hcd->rsrc_len); |
173 | disable_irq_wake(hcd->irq); | ||
174 | 173 | ||
175 | clk_put(fclk); | 174 | clk_put(fclk); |
176 | clk_put(iclk); | 175 | clk_put(iclk); |
@@ -271,8 +270,6 @@ ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg) | |||
271 | 270 | ||
272 | if (device_may_wakeup(&pdev->dev)) | 271 | if (device_may_wakeup(&pdev->dev)) |
273 | enable_irq_wake(hcd->irq); | 272 | enable_irq_wake(hcd->irq); |
274 | else | ||
275 | disable_irq_wake(hcd->irq); | ||
276 | 273 | ||
277 | /* | 274 | /* |
278 | * The integrated transceivers seem unable to notice disconnect, | 275 | * The integrated transceivers seem unable to notice disconnect, |
@@ -293,6 +290,11 @@ ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg) | |||
293 | 290 | ||
294 | static int ohci_hcd_at91_drv_resume(struct platform_device *pdev) | 291 | static int ohci_hcd_at91_drv_resume(struct platform_device *pdev) |
295 | { | 292 | { |
293 | struct usb_hcd *hcd = platform_get_drvdata(pdev); | ||
294 | |||
295 | if (device_may_wakeup(&pdev->dev)) | ||
296 | disable_irq_wake(hcd->irq); | ||
297 | |||
296 | if (!clocked) { | 298 | if (!clocked) { |
297 | clk_enable(iclk); | 299 | clk_enable(iclk); |
298 | clk_enable(fclk); | 300 | clk_enable(fclk); |