WakeUp: add WOL_WAKEUP event support
authorterry <terry@szwesion.com>
Sat, 13 Jul 2019 07:05:43 +0000 (15:05 +0800)
committerNick Xie <nick@khadas.com>
Sat, 13 Jul 2019 07:08:29 +0000 (15:08 +0800)
drivers/amlogic/input/keyboard/gpio_keypad.c
drivers/misc/khadas-mcu.c
include/linux/amlogic/pm.h

index 33abc17..d8d49cd 100644 (file)
@@ -52,6 +52,22 @@ struct gpio_keypad {
        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;
@@ -234,6 +250,7 @@ static int meson_gpio_kp_probe(struct platform_device *pdev)
        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) {
index aa90e12..6d4f14f 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/slab.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
+#include <linux/amlogic/pm.h>
 
 
 
@@ -100,6 +101,7 @@ struct mcu_data {
 
 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)
 {
@@ -678,6 +680,10 @@ static int khadas_fan_resume(struct device *dev)
 {
        khadas_fan_set(&g_mcu_data->fan_data);
 
+       if (get_resume_method() == WOL_WAKEUP) {
+               send_power_key(1);
+               send_power_key(0);
+       }
        return 0;
 }
 
index 2d71273..284a06f 100644 (file)
@@ -31,6 +31,7 @@
 #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);