kconfig: add 'filename' and 'lineno' built-in variables
[carl9170fw.git] / carlfw / usb / main.c
index 5c09476b29a5592b63906c21067d70ce25969a41..4199a218618e9a6af57481f80108b8a7f6d4f3a6 100644 (file)
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ * with this program; If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "carl9170.h"
 
+#include "shared/phy.h"
 #include "hostif.h"
 #include "printf.h"
 #include "timer.h"
 #include "rom.h"
 #include "wl.h"
-#include "shared/phy.h"
+#include "wol.h"
 
 #ifdef CONFIG_CARL9170FW_DEBUG_USB
 void usb_putc(const char c)
@@ -245,7 +245,7 @@ static void turn_power_off(void)
                                  AR9170_PWR_RESET_WLAN_MASK);
        set(AR9170_PWR_REG_RESET, 0x0);
 
-       set(AR9170_PWR_REG_CLOCK_SEL, AHB_40MHZ_OSC);
+       clock_set(AHB_20_22MHZ, false);
 
        set(AR9170_PWR_REG_PLL_ADDAC, 0x5163);  /* 0x502b; */
        set(AR9170_PHY_REG_ADC_SERIAL_CTL, AR9170_PHY_ADC_SCTL_SEL_EXTERNAL_RADIO);
@@ -376,6 +376,7 @@ static void usb_handler(uint8_t usb_interrupt_level1)
 
                if (usb_interrupt_level2 & AR9170_USB_INTR_SRC7_USB_RESET) {
                        usb_reset_ack();
+                       usb_reset_eps();
                        reboot();
                }
 
@@ -384,14 +385,22 @@ static void usb_handler(uint8_t usb_interrupt_level1)
 
                        fw.suspend_mode = CARL9170_HOST_SUSPENDED;
 
-                       if (!(fw.usb.device_feature & USB_DEVICE_REMOTE_WAKEUP)) {
+#ifdef CONFIG_CARL9170FW_WOL
+                       if (!(fw.usb.device_feature & USB_DEVICE_REMOTE_WAKEUP) ||
+                           !fw.wol.cmd.flags) {
                                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();
+                               wol_prepare();
                        }
+#else /* CONFIG_CARL9170FW_WOL */
+                       disable_watchdog();
+
+                       /* GO_TO_SUSPEND stops the CPU clock too. */
+                       orb(AR9170_USB_REG_MAIN_CTRL, AR9170_USB_MAIN_CTRL_GO_TO_SUSPEND);
+#endif /* CONFIG_CARL9170FW_WOL */
                }
 
                if (usb_interrupt_level2 & AR9170_USB_INTR_SRC7_USB_RESUME) {