]> git.donarmstrong.com Git - qmk_firmware.git/blob - tmk_core/common/arm_atsam/suspend.c
Add crkbd keymap (#5366)
[qmk_firmware.git] / tmk_core / common / arm_atsam / suspend.c
1 #include "matrix.h"
2 #include "i2c_master.h"
3 #include "led_matrix.h"
4 #include "suspend.h"
5
6 /** \brief Suspend idle
7  *
8  * FIXME: needs doc
9  */
10 void suspend_idle(uint8_t time) {
11     /* Note: Not used anywhere currently */
12 }
13
14 /** \brief Run user level Power down
15  *
16  * FIXME: needs doc
17  */
18 __attribute__ ((weak))
19 void suspend_power_down_user (void) {
20
21 }
22
23 /** \brief Run keyboard level Power down
24  *
25  * FIXME: needs doc
26  */
27 __attribute__ ((weak))
28 void suspend_power_down_kb(void) {
29     suspend_power_down_user();
30 }
31
32 /** \brief Suspend power down
33  *
34  * FIXME: needs doc
35  */
36 void suspend_power_down(void)
37 {
38     I2C3733_Control_Set(0); //Disable LED driver
39
40     suspend_power_down_kb();
41 }
42
43 __attribute__ ((weak)) void matrix_power_up(void) {}
44 __attribute__ ((weak)) void matrix_power_down(void) {}
45 bool suspend_wakeup_condition(void) {
46     matrix_power_up();
47     matrix_scan();
48     matrix_power_down();
49     for (uint8_t r = 0; r < MATRIX_ROWS; r++) {
50         if (matrix_get_row(r)) return true;
51     }
52     return false;
53 }
54
55 /** \brief run user level code immediately after wakeup
56  *
57  * FIXME: needs doc
58  */
59 __attribute__ ((weak))
60 void suspend_wakeup_init_user(void) {
61
62 }
63
64 /** \brief run keyboard level code immediately after wakeup
65  *
66  * FIXME: needs doc
67  */
68 __attribute__ ((weak))
69 void suspend_wakeup_init_kb(void) {
70     suspend_wakeup_init_user();
71 }
72
73 /** \brief run immediately after wakeup
74  *
75  * FIXME: needs doc
76  */
77 void suspend_wakeup_init(void) {
78     /* If LEDs are set to enabled, enable the hardware */
79     if (led_enabled) {
80         I2C3733_Control_Set(1);
81     }
82
83     suspend_wakeup_init_kb();
84 }
85