Skip to content

Commit

Permalink
USB: at91_udc wakeup event updates
Browse files Browse the repository at this point in the history
This updates the AT91 UDC driver's handling of wakeup events:

 - Fix a bug in the original scheme, which was never updated after
   the {enable,disable}_irq_wake() semantics were updated to address
   refcounting issues (i.e. behave for shared irqs).

 - Couple handling of both type of wakeup events, to be more direct.  The
   controller can be source of wakeup events for cases like bus reset
   and USB resume.  On some boards, VBUS sensing is also IRQ driven.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
David Brownell authored and Greg Kroah-Hartman committed Feb 7, 2007
1 parent 57e06c1 commit 66e56ce
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 8 deletions.
19 changes: 11 additions & 8 deletions drivers/usb/gadget/at91_udc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1807,25 +1807,28 @@ static int at91udc_suspend(struct platform_device *pdev, pm_message_t mesg)
|| !wake
|| at91_suspend_entering_slow_clock()) {
pullup(udc, 0);
disable_irq_wake(udc->udp_irq);
wake = 0;
} else
enable_irq_wake(udc->udp_irq);

if (udc->board.vbus_pin > 0) {
if (wake)
enable_irq_wake(udc->board.vbus_pin);
else
disable_irq_wake(udc->board.vbus_pin);
}
udc->active_suspend = wake;
if (udc->board.vbus_pin > 0 && wake)
enable_irq_wake(udc->board.vbus_pin);
return 0;
}

static int at91udc_resume(struct platform_device *pdev)
{
struct at91_udc *udc = platform_get_drvdata(pdev);

if (udc->board.vbus_pin > 0 && udc->active_suspend)
disable_irq_wake(udc->board.vbus_pin);

/* maybe reconnect to host; if so, clocks on */
pullup(udc, 1);
if (udc->active_suspend)
disable_irq_wake(udc->udp_irq);
else
pullup(udc, 1);
return 0;
}
#else
Expand Down
1 change: 1 addition & 0 deletions drivers/usb/gadget/at91_udc.h
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ struct at91_udc {
unsigned wait_for_addr_ack:1;
unsigned wait_for_config_ack:1;
unsigned selfpowered:1;
unsigned active_suspend:1;
u8 addr;
struct at91_udc_data board;
struct clk *iclk, *fclk;
Expand Down

0 comments on commit 66e56ce

Please sign in to comment.