1 #include <stdint.h>
2 #include <string.h>
3 #include <types.h>
4 #include <hal/hal.h>
5 #include <pm.h>
6 #include <genie_sal_lpm.h>
7 #if defined(BOARD_TG7100B) || defined(BOARD_PHY6220_EVB) || defined(BOARD_TG7120B_EVB)
8 #include "gpio.h"
9 #endif
10 
11 extern void drv_pm_sleep_enable();
12 extern void drv_pm_sleep_disable();
13 extern int drv_pm_enter_standby();
14 
genie_sal_sleep_enable()15 void genie_sal_sleep_enable()
16 {
17    drv_pm_sleep_enable();
18 }
19 
genie_sal_sleep_disable()20 void genie_sal_sleep_disable()
21 {
22    drv_pm_sleep_disable();
23 }
24 
genie_sal_sleep_enter_standby()25 int genie_sal_sleep_enter_standby()
26 {
27    return drv_pm_enter_standby();
28 }
29 
genie_sal_sleep_wakup_io_set(uint8_t port,uint8_t pol)30 int genie_sal_sleep_wakup_io_set(uint8_t port, uint8_t pol)
31 {
32 #if defined(BOARD_TG7100B) || defined(BOARD_PHY6220_EVB) || defined(BOARD_TG7120B_EVB)
33    uint8_t type = (pol >= 2) ? pol - 2 : pol;
34    phy_gpio_pull_set(port, !type);
35    phy_gpio_wakeup_set(port, type);
36    return 0;
37 #endif
38    return -1;
39 }
40 
genie_sal_sleep_wakeup_io_get_status(uint8_t port)41 __attribute__((section(".__sram.code"))) bool genie_sal_sleep_wakeup_io_get_status(uint8_t port)
42 {
43 #if defined(BOARD_TG7100B) || defined(BOARD_PHY6220_EVB) || defined(BOARD_TG7120B_EVB)
44    return phy_gpio_read(port);
45 #endif
46    return 0;
47 }
48 
genie_sal_io_wakeup_cb_register(genie_io_wakeup_cb cb)49 int genie_sal_io_wakeup_cb_register(genie_io_wakeup_cb cb)
50 {
51    if (!cb)
52    {
53       return -1;
54    }
55    drv_pm_io_wakeup_handler_register(cb);
56    return 0;
57 }
58 
genie_sal_io_wakeup_cb_unregister()59 int genie_sal_io_wakeup_cb_unregister()
60 {
61    drv_pm_io_wakeup_handler_unregister();
62    return 0;
63 }
64