struct input_dev *input_dev;
};
+static struct input_dev *g_input_dev;
+void send_power_key(int state)
+{
+ if (!g_input_dev)
+ return;
+ if (state) {
+ input_report_key(g_input_dev, KEY_POWER, 1);
+ input_sync(g_input_dev);
+ } else {
+ input_report_key(g_input_dev, KEY_POWER, 0);
+ input_sync(g_input_dev);
+ }
+}
+
+EXPORT_SYMBOL(send_power_key);
+
static irqreturn_t gpio_irq_handler(int irq, void *data)
{
struct gpio_keypad *keypad;
platform_set_drvdata(pdev, keypad);
keypad->count = 0;
keypad->index = -1;
+ g_input_dev = input_dev;
setup_timer(&(keypad->polling_timer),
polling_timer_handler, (unsigned long) keypad);
if (keypad->use_irq) {
#include <linux/slab.h>
#include <linux/of.h>
#include <linux/of_address.h>
+#include <linux/amlogic/pm.h>
struct mcu_data *g_mcu_data;
+extern void send_power_key(int state);
extern void realtek_enable_wol(int enable, bool is_shutdown);
void mcu_enable_wol(int enable, bool is_shutdown)
{
{
khadas_fan_set(&g_mcu_data->fan_data);
+ if (get_resume_method() == WOL_WAKEUP) {
+ send_power_key(1);
+ send_power_key(0);
+ }
return 0;
}
#define CEC_WAKEUP 8
#define REMOTE_CUS_WAKEUP 9
#define ETH_PHY_WAKEUP 10
+#define WOL_WAKEUP 13
extern unsigned int get_resume_method(void);
extern unsigned int is_pm_freeze_mode(void);