]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - tmk_core/common/avr/suspend.c
Fixed NO_SUSPEND_POWER_DOWN handling
[qmk_firmware.git] / tmk_core / common / avr / suspend.c
index 80243f02bc7448d8a6880afad9718bdff11af4fd..0c81e8361213af2221c93883801e649ea364a5a7 100644 (file)
@@ -8,10 +8,17 @@
 #include "suspend_avr.h"
 #include "suspend.h"
 #include "timer.h"
+#include "led.h"
+
 #ifdef PROTOCOL_LUFA
-#include "lufa.h"
+       #include "lufa.h"
 #endif
 
+#ifdef AUDIO_ENABLE
+    #include "audio.h"
+#endif /* AUDIO_ENABLE */
+
+
 
 #define wdt_intr_enable(value)   \
 __asm__ __volatile__ (  \
@@ -40,6 +47,7 @@ void suspend_idle(uint8_t time)
     sleep_disable();
 }
 
+#ifndef NO_SUSPEND_POWER_DOWN
 /* Power down MCU with watchdog timer
  * wdto: watchdog timer timeout defined in <avr/wdt.h>
  *          WDTO_15MS
@@ -54,6 +62,7 @@ void suspend_idle(uint8_t time)
  *          WDTO_8S
  */
 static uint8_t wdt_timeout = 0;
+
 static void power_down(uint8_t wdto)
 {
 #ifdef PROTOCOL_LUFA
@@ -64,6 +73,18 @@ static void power_down(uint8_t wdto)
     // Watchdog Interrupt Mode
     wdt_intr_enable(wdto);
 
+#ifdef BACKLIGHT_ENABLE
+       backlight_set(0);
+#endif
+
+       // Turn off LED indicators
+       led_set(0);
+
+       #ifdef AUDIO_ENABLE
+        // This sometimes disables the start-up noise, so it's been disabled
+               // stop_all_notes();
+       #endif /* AUDIO_ENABLE */
+
     // TODO: more power saving
     // See PicoPower application note
     // - I/O port input with pullup
@@ -79,12 +100,17 @@ static void power_down(uint8_t wdto)
     // Disable watchdog after sleep
     wdt_disable();
 }
+#endif
 
 void suspend_power_down(void)
 {
+#ifndef NO_SUSPEND_POWER_DOWN
     power_down(WDTO_15MS);
+#endif
 }
 
+__attribute__ ((weak)) void matrix_power_up(void) {}
+__attribute__ ((weak)) void matrix_power_down(void) {}
 bool suspend_wakeup_condition(void)
 {
     matrix_power_up();
@@ -93,7 +119,7 @@ bool suspend_wakeup_condition(void)
     for (uint8_t r = 0; r < MATRIX_ROWS; r++) {
         if (matrix_get_row(r)) return true;
     }
-    return false;
+     return false;
 }
 
 // run immediately after wakeup
@@ -104,6 +130,7 @@ void suspend_wakeup_init(void)
 #ifdef BACKLIGHT_ENABLE
     backlight_init();
 #endif
+       led_set(host_keyboard_leds());
 }
 
 #ifndef NO_SUSPEND_POWER_DOWN