projects
/
carl9170fw.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
carl9170 firmware: Wake-on-LAN support
[carl9170fw.git]
/
carlfw
/
usb
/
main.c
diff --git
a/carlfw/usb/main.c
b/carlfw/usb/main.c
index 95aac88b86b1d8d2a5d9f0027260495fa6365196..c2ad6c3d71fcc79fc4b1bc082430f796931745cd 100644
(file)
--- a/
carlfw/usb/main.c
+++ b/
carlfw/usb/main.c
@@
-27,6
+27,7
@@
#include "printf.h"
#include "timer.h"
#include "rom.h"
#include "printf.h"
#include "timer.h"
#include "rom.h"
+#include "wl.h"
#include "shared/phy.h"
#ifdef CONFIG_CARL9170FW_DEBUG_USB
#include "shared/phy.h"
#ifdef CONFIG_CARL9170FW_DEBUG_USB
@@
-381,13
+382,22
@@
static void usb_handler(uint8_t usb_interrupt_level1)
if (usb_interrupt_level2 & AR9170_USB_INTR_SRC7_USB_SUSPEND) {
usb_suspend_ack();
if (usb_interrupt_level2 & AR9170_USB_INTR_SRC7_USB_SUSPEND) {
usb_suspend_ack();
-
disable_watchdog()
;
+
fw.suspend_mode = CARL9170_HOST_SUSPENDED
;
- /* GO_TO_SUSPEND stops the CPU clock too. */
- orb(AR9170_USB_REG_MAIN_CTRL, AR9170_USB_MAIN_CTRL_GO_TO_SUSPEND);
+ if (!(fw.usb.device_feature & USB_DEVICE_REMOTE_WAKEUP)) {
+ disable_watchdog();
+
+ /* GO_TO_SUSPEND stops the CPU clock too. */
+ orb(AR9170_USB_REG_MAIN_CTRL, AR9170_USB_MAIN_CTRL_GO_TO_SUSPEND);
+ } else {
+ wlan_prepare_wol();
+ }
}
if (usb_interrupt_level2 & AR9170_USB_INTR_SRC7_USB_RESUME) {
}
if (usb_interrupt_level2 & AR9170_USB_INTR_SRC7_USB_RESUME) {
+ fw.suspend_mode = CARL9170_HOST_AWAKE;
+ andl(AR9170_USB_REG_WAKE_UP, AR9170_USB_WAKE_UP_WAKE);
+
usb_resume_ack();
reboot();
}
usb_resume_ack();
reboot();
}
@@
-407,3
+417,11
@@
void handle_usb(void)
usb_trigger_in();
}
usb_trigger_in();
}
+void usb_timer(void)
+{
+#ifdef CONFIG_CARL9170FW_WOL
+ if (fw.suspend_mode == CARL9170_AWAKE_HOST) {
+ orl(AR9170_USB_REG_WAKE_UP, AR9170_USB_WAKE_UP_WAKE);
+ }
+#endif /* CONFIG_CARL9170FW_WOL */
+}