| .. | .. |
|---|
| 28 | 28 | #include <linux/of_irq.h> |
|---|
| 29 | 29 | #include <linux/spinlock.h> |
|---|
| 30 | 30 | #include <dt-bindings/input/gpio-keys.h> |
|---|
| 31 | +#include <trace/hooks/wakeupbypass.h> |
|---|
| 31 | 32 | |
|---|
| 32 | 33 | struct gpio_button_data { |
|---|
| 33 | 34 | const struct gpio_keys_button *button; |
|---|
| .. | .. |
|---|
| 958 | 959 | struct gpio_keys_drvdata *ddata = dev_get_drvdata(dev); |
|---|
| 959 | 960 | struct input_dev *input = ddata->input; |
|---|
| 960 | 961 | int error; |
|---|
| 962 | + int wakeup_bypass_enabled = 0; |
|---|
| 963 | + |
|---|
| 964 | + trace_android_vh_wakeup_bypass(&wakeup_bypass_enabled); |
|---|
| 961 | 965 | |
|---|
| 962 | 966 | if (device_may_wakeup(dev)) { |
|---|
| 963 | | - error = gpio_keys_enable_wakeup(ddata); |
|---|
| 964 | | - if (error) |
|---|
| 965 | | - return error; |
|---|
| 967 | + if (!wakeup_bypass_enabled) { |
|---|
| 968 | + error = gpio_keys_enable_wakeup(ddata); |
|---|
| 969 | + if (error) |
|---|
| 970 | + return error; |
|---|
| 971 | + } |
|---|
| 966 | 972 | } else { |
|---|
| 967 | 973 | mutex_lock(&input->mutex); |
|---|
| 968 | 974 | if (input->users) |
|---|
| .. | .. |
|---|
| 978 | 984 | struct gpio_keys_drvdata *ddata = dev_get_drvdata(dev); |
|---|
| 979 | 985 | struct input_dev *input = ddata->input; |
|---|
| 980 | 986 | int error = 0; |
|---|
| 987 | + int wakeup_bypass_enabled = 0; |
|---|
| 988 | + |
|---|
| 989 | + trace_android_vh_wakeup_bypass(&wakeup_bypass_enabled); |
|---|
| 981 | 990 | |
|---|
| 982 | 991 | if (device_may_wakeup(dev)) { |
|---|
| 983 | | - gpio_keys_disable_wakeup(ddata); |
|---|
| 992 | + if (!wakeup_bypass_enabled) |
|---|
| 993 | + gpio_keys_disable_wakeup(ddata); |
|---|
| 984 | 994 | } else { |
|---|
| 985 | 995 | mutex_lock(&input->mutex); |
|---|
| 986 | 996 | if (input->users) |
|---|