Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/drivers/input/input.c b/drivers/input/input.c
- index 9c79bd5..5000394 100644
- --- a/drivers/input/input.c
- +++ b/drivers/input/input.c
- @@ -27,6 +27,10 @@
- #include <linux/smp_lock.h>
- #include "input-compat.h"
- +#ifdef CONFIG_TOUCH_WAKE
- +#include <linux/touch_wake.h>
- +#endif
- +
- MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
- MODULE_DESCRIPTION("Input core");
- MODULE_LICENSE("GPL");
- @@ -211,6 +215,15 @@ static void input_handle_event(struct input_dev *dev,
- if (is_event_supported(code, dev->keybit, KEY_MAX) &&
- !!test_bit(code, dev->key) != value) {
- +#ifdef CONFIG_TOUCH_WAKE
- + if (code == KEY_POWER && value == 1)
- + {
- + pr_info("KEY_POWER pressed\n");
- +
- + powerkey_press();
- + }
- +#endif
- +
- if (value != 2) {
- __change_bit(code, dev->key);
- if (value)
- diff --git a/drivers/input/keyboard/cypress-touchkey.c b/drivers/input/keyboard/cypress-touchkey.c
- index 845cb85..a969393 100644
- --- a/drivers/input/keyboard/cypress-touchkey.c
- +++ b/drivers/input/keyboard/cypress-touchkey.c
- @@ -35,6 +35,10 @@
- #include <linux/bld.h>
- #endif
- +#ifdef CONFIG_TOUCH_WAKE
- +#include <linux/touch_wake.h>
- +#endif
- +
- #define SCANCODE_MASK 0x07
- #define UPDOWN_EVENT_MASK 0x08
- #define ESD_STATE_MASK 0x10
- @@ -67,6 +71,10 @@ static struct cypress_touchkey_devdata *blndevdata;
- static struct cypress_touchkey_devdata *blddevdata;
- #endif
- +#ifdef CONFIG_TOUCH_WAKE
- +static struct cypress_touchkey_devdata *touchwakedevdata;
- +#endif
- +
- static int i2c_touchkey_read_byte(struct cypress_touchkey_devdata *devdata,
- u8 *val)
- {
- @@ -215,6 +223,12 @@ static void cypress_touchkey_early_suspend(struct early_suspend *h)
- struct cypress_touchkey_devdata *devdata =
- container_of(h, struct cypress_touchkey_devdata, early_suspend);
- +#ifdef CONFIG_TOUCH_WAKE
- +#ifdef CONFIG_GENERIC_BLN
- + if(!bln_is_ongoing())
- +#endif
- + i2c_touchkey_write_byte(devdata, devdata->backlight_off);
- +#else
- devdata->is_powering_on = true;
- if (unlikely(devdata->is_dead))
- @@ -232,6 +246,7 @@ static void cypress_touchkey_early_suspend(struct early_suspend *h)
- devdata->pdata->touchkey_onoff(TOUCHKEY_OFF);
- all_keys_up(devdata);
- +#endif
- }
- static void cypress_touchkey_early_resume(struct early_suspend *h)
- @@ -239,6 +254,9 @@ static void cypress_touchkey_early_resume(struct early_suspend *h)
- struct cypress_touchkey_devdata *devdata =
- container_of(h, struct cypress_touchkey_devdata, early_suspend);
- +#ifdef CONFIG_TOUCH_WAKE
- + i2c_touchkey_write_byte(devdata, devdata->backlight_on);
- +#else
- devdata->pdata->touchkey_onoff(TOUCHKEY_ON);
- if (i2c_touchkey_write_byte(devdata, devdata->backlight_on)) {
- devdata->is_dead = true;
- @@ -250,7 +268,56 @@ static void cypress_touchkey_early_resume(struct early_suspend *h)
- devdata->is_dead = false;
- enable_irq(devdata->client->irq);
- devdata->is_powering_on = false;
- +#endif
- +}
- +#endif
- +
- +#ifdef CONFIG_TOUCH_WAKE
- +static void cypress_touchwake_disable(void)
- +{
- + touchwakedevdata->is_powering_on = true;
- +
- + if (unlikely(touchwakedevdata->is_dead))
- + return;
- +
- + disable_irq(touchwakedevdata->client->irq);
- +
- +#ifdef CONFIG_GENERIC_BLN
- + /*
- + * Disallow powering off the touchkey controller
- + * while a led notification is ongoing
- + */
- + if(!bln_is_ongoing())
- +#endif
- + touchwakedevdata->pdata->touchkey_onoff(TOUCHKEY_OFF);
- +
- + all_keys_up(touchwakedevdata);
- +
- + return;
- +}
- +
- +static void cypress_touchwake_enable(void)
- +{
- + touchwakedevdata->pdata->touchkey_onoff(TOUCHKEY_ON);
- + if (i2c_touchkey_write_byte(touchwakedevdata, touchwakedevdata->backlight_on)) {
- + touchwakedevdata->is_dead = true;
- + touchwakedevdata->pdata->touchkey_onoff(TOUCHKEY_OFF);
- + dev_err(&touchwakedevdata->client->dev, "%s: touch keypad not responding"
- + " to commands, disabling\n", __func__);
- + return;
- + }
- + touchwakedevdata->is_dead = false;
- + enable_irq(touchwakedevdata->client->irq);
- + touchwakedevdata->is_powering_on = false;
- +
- + return;
- }
- +
- +static struct touchwake_implementation cypress_touchwake =
- + {
- + .enable = cypress_touchwake_enable,
- + .disable = cypress_touchwake_disable,
- + };
- #endif
- static void set_device_params(struct cypress_touchkey_devdata *devdata,
- @@ -533,6 +600,11 @@ static int cypress_touchkey_probe(struct i2c_client *client,
- register_bld_implementation(&cypress_touchkey_bld);
- #endif
- +#ifdef CONFIG_TOUCH_WAKE
- + touchwakedevdata = devdata;
- + register_touchwake_implementation(&cypress_touchwake);
- +#endif
- +
- return 0;
- diff --git a/drivers/input/misc/gpio_event.c b/drivers/input/misc/gpio_event.c
- index a98be67..0438a6e 100644
- --- a/drivers/input/misc/gpio_event.c
- +++ b/drivers/input/misc/gpio_event.c
- @@ -21,6 +21,12 @@
- #include <linux/platform_device.h>
- #include <linux/slab.h>
- +#ifdef CONFIG_TOUCH_WAKE
- +#include <linux/touch_wake.h>
- +
- +extern void set_powerkeydev(struct input_dev * input_device);
- +#endif
- +
- struct gpio_event {
- struct gpio_event_input_devs *input_devs;
- const struct gpio_event_platform_data *info;
- @@ -166,6 +172,14 @@ static int gpio_event_probe(struct platform_device *pdev)
- event_info->name : event_info->names[i];
- input_dev->event = gpio_input_event;
- ip->input_devs->dev[i] = input_dev;
- +#ifdef CONFIG_TOUCH_WAKE
- + if (!strcmp(input_dev->name, "herring-keypad"))
- + {
- + pr_info("powerkey device set\n");
- +
- + set_powerkeydev(input_dev);
- + }
- +#endif
- }
- ip->input_devs->count = dev_count;
- ip->info = event_info;
- diff --git a/drivers/input/touchscreen/mxt224.c b/drivers/input/touchscreen/mxt224.c
- index 09c3b3b..d431bae 100644
- --- a/drivers/input/touchscreen/mxt224.c
- +++ b/drivers/input/touchscreen/mxt224.c
- @@ -29,6 +29,10 @@
- #include <linux/screen_dimmer.h>
- #endif
- +#ifdef CONFIG_TOUCH_WAKE
- +#include <linux/touch_wake.h>
- +#endif
- +
- #define OBJECT_TABLE_START_ADDRESS 7
- #define OBJECT_TABLE_ELEMENT_SIZE 6
- @@ -313,6 +317,10 @@ static void report_input_data(struct mxt224_data *data)
- touchscreen_pressed();
- #endif
- +#ifdef CONFIG_TOUCH_WAKE
- + touch_press();
- +#endif
- +
- input_report_abs(data->input_dev, ABS_MT_POSITION_X,
- data->fingers[i].x);
- input_report_abs(data->input_dev, ABS_MT_POSITION_Y,
- @@ -428,19 +436,46 @@ static int mxt224_internal_resume(struct mxt224_data *data)
- static void mxt224_early_suspend(struct early_suspend *h)
- {
- +#ifndef CONFIG_TOUCH_WAKE
- struct mxt224_data *data = container_of(h, struct mxt224_data,
- early_suspend);
- disable_irq(data->client->irq);
- mxt224_internal_suspend(data);
- +#endif
- }
- static void mxt224_late_resume(struct early_suspend *h)
- {
- +#ifndef CONFIG_TOUCH_WAKE
- struct mxt224_data *data = container_of(h, struct mxt224_data,
- early_suspend);
- mxt224_internal_resume(data);
- enable_irq(data->client->irq);
- +#endif
- }
- +
- +#ifdef CONFIG_TOUCH_WAKE
- +struct mxt224_data * touchwake_data;
- +
- +void touchscreen_disable(void)
- +{
- + disable_irq(touchwake_data->client->irq);
- + mxt224_internal_suspend(touchwake_data);
- +
- + return;
- +}
- +EXPORT_SYMBOL(touchscreen_disable);
- +
- +void touchscreen_enable(void)
- +{
- + mxt224_internal_resume(touchwake_data);
- + enable_irq(touchwake_data->client->irq);
- +
- + return;
- +}
- +EXPORT_SYMBOL(touchscreen_enable);
- +#endif
- +
- #else
- static int mxt224_suspend(struct device *dev)
- {
- @@ -581,6 +616,10 @@ static int __devinit mxt224_probe(struct i2c_client *client,
- register_early_suspend(&data->early_suspend);
- #endif
- +#ifdef CONFIG_TOUCH_WAKE
- + touchwake_data = data;
- +#endif
- +
- return 0;
- err_irq:
- diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
- index b101c1e..6f2f2dd 100755
- --- a/drivers/misc/Kconfig
- +++ b/drivers/misc/Kconfig
- @@ -480,4 +480,10 @@ config SCREEN_DIMMER
- help
- Say Y here to enable the screen dimmer
- +config TOUCH_WAKE
- + bool "Support for touch wake"
- + default y
- + help
- + Say Y here to enable touch wake
- +
- endif # MISC_DEVICES
- diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
- index 8db22d3..d6dff9f 100755
- --- a/drivers/misc/Makefile
- +++ b/drivers/misc/Makefile
- @@ -46,3 +46,4 @@ obj-$(CONFIG_SAMSUNG_MODEMCTL) += samsung_modemctl/
- obj-$(CONFIG_GENERIC_BLN) += bln.o
- obj-$(CONFIG_BLD) += bld.o
- obj-$(CONFIG_SCREEN_DIMMER) += screen_dimmer.o
- +obj-$(CONFIG_TOUCH_WAKE) += touch_wake.o
- diff --git a/drivers/misc/touch_wake.c b/drivers/misc/touch_wake.c
- new file mode 100644
- index 0000000..0c65be7
- --- /dev/null
- +++ b/drivers/misc/touch_wake.c
- @@ -0,0 +1,328 @@
- +/* drivers/misc/touch_wake.c
- + *
- + * Copyright 2011 Ezekeel
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License version 2 as
- + * published by the Free Software Foundation.
- + */
- +
- +#include <linux/init.h>
- +#include <linux/device.h>
- +#include <linux/miscdevice.h>
- +#include <linux/touch_wake.h>
- +#include <linux/workqueue.h>
- +#include <linux/earlysuspend.h>
- +#include <linux/mutex.h>
- +#include <linux/delay.h>
- +#include <linux/wakelock.h>
- +#include <linux/input.h>
- +
- +extern void touchscreen_enable(void);
- +extern void touchscreen_disable(void);
- +
- +static bool touchwake_enabled = false;
- +
- +static bool touch_disabled = false;
- +
- +static bool device_suspended = false;
- +
- +static bool powerkey_pressed = false;
- +
- +static unsigned int touchoff_delay = 45000;
- +
- +static const unsigned int presspower_delay = 100;
- +
- +static void touchwake_touchoff(struct work_struct * touchoff_work);
- +
- +static DECLARE_DELAYED_WORK(touchoff_work, touchwake_touchoff);
- +
- +static void press_powerkey(struct work_struct * presspower_work);
- +
- +static DECLARE_WORK(presspower_work, press_powerkey);
- +
- +static DEFINE_MUTEX(lock);
- +
- +static struct touchwake_implementation * touchwake_imp = NULL;
- +
- +static struct input_dev * powerkey_device;
- +
- +static struct wake_lock touchwake_wake_lock;
- +
- +#define TOUCHWAKE_VERSION 1
- +
- +static void touchwake_disable_touch(void)
- +{
- + pr_info("disable touch controls\n");
- +
- + touchscreen_disable();
- +
- + if (touchwake_imp)
- + {
- + touchwake_imp->disable();
- + }
- +
- + touch_disabled = true;
- +
- + return;
- +}
- +
- +static void touchwake_enable_touch(void)
- +{
- + pr_info("enable touch controls\n");
- +
- + touchscreen_enable();
- +
- + if (touchwake_imp)
- + {
- + touchwake_imp->enable();
- + }
- +
- + touch_disabled = false;
- +
- + return;
- +}
- +
- +static void touchwake_early_suspend(struct early_suspend * h)
- +{
- + if (touchwake_enabled)
- + {
- + if (touchoff_delay > 0)
- + {
- + if (!powerkey_pressed)
- + {
- + wake_lock(&touchwake_wake_lock);
- +
- + schedule_delayed_work(&touchoff_work, msecs_to_jiffies(touchoff_delay));
- + }
- + else
- + {
- + touchwake_disable_touch();
- + }
- + }
- + else
- + {
- + wake_lock(&touchwake_wake_lock);
- + }
- + }
- + else
- + {
- + touchwake_disable_touch();
- + }
- +
- + device_suspended = true;
- +
- + return;
- +}
- +
- +static void touchwake_late_resume(struct early_suspend * h)
- +{
- + cancel_delayed_work(&touchoff_work);
- + flush_scheduled_work();
- +
- + wake_unlock(&touchwake_wake_lock);
- +
- + if (touch_disabled)
- + {
- + touchwake_enable_touch();
- + }
- +
- + powerkey_pressed = false;
- +
- + device_suspended = false;
- +
- + return;
- +}
- +
- +static struct early_suspend touchwake_suspend_data =
- + {
- + .level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1,
- + .suspend = touchwake_early_suspend,
- + .resume = touchwake_late_resume,
- + };
- +
- +static void touchwake_touchoff(struct work_struct * touchoff_work)
- +{
- + touchwake_disable_touch();
- +
- + wake_unlock(&touchwake_wake_lock);
- +
- + return;
- +}
- +
- +static void press_powerkey(struct work_struct * presspower_work)
- +{
- + input_event(powerkey_device, EV_KEY, KEY_POWER, 1);
- +
- + msleep(presspower_delay);
- +
- + input_event(powerkey_device, EV_KEY, KEY_POWER, 0);
- +
- + msleep(presspower_delay);
- +
- + mutex_unlock(&lock);
- +
- + return;
- +}
- +
- +static ssize_t touchwake_status_read(struct device * dev, struct device_attribute * attr, char * buf)
- +{
- + return sprintf(buf, "%u\n", (touchwake_enabled ? 1 : 0));
- +}
- +
- +static ssize_t touchwake_status_write(struct device * dev, struct device_attribute * attr, const char * buf, size_t size)
- +{
- + unsigned int data;
- +
- + if(sscanf(buf, "%u\n", &data) == 1)
- + {
- + pr_devel("%s: %u \n", __FUNCTION__, data);
- +
- + if (data == 1)
- + {
- + pr_info("%s: TOUCHWAKE function enabled\n", __FUNCTION__);
- +
- + touchwake_enabled = true;
- + }
- + else if (data == 0)
- + {
- + pr_info("%s: TOUCHWAKE function disabled\n", __FUNCTION__);
- +
- + touchwake_enabled = false;
- + }
- + else
- + {
- + pr_info("%s: invalid input range %u\n", __FUNCTION__, data);
- + }
- + }
- + else
- + {
- + pr_info("%s: invalid input\n", __FUNCTION__);
- + }
- +
- + return size;
- +}
- +
- +static ssize_t touchwake_delay_read(struct device * dev, struct device_attribute * attr, char * buf)
- +{
- + return sprintf(buf, "%u\n", touchoff_delay);
- +}
- +
- +static ssize_t touchwake_delay_write(struct device * dev, struct device_attribute * attr, const char * buf, size_t size)
- +{
- + unsigned int data;
- +
- + if(sscanf(buf, "%u\n", &data) == 1)
- + {
- + touchoff_delay = data;
- +
- + pr_info("TOUCHWAKE delay set to %u\n", touchoff_delay);
- + }
- + else
- + {
- + pr_info("%s: invalid input\n", __FUNCTION__);
- + }
- +
- + return size;
- +}
- +
- +static ssize_t touchwake_version(struct device * dev, struct device_attribute * attr, char * buf)
- +{
- + return sprintf(buf, "%u\n", TOUCHWAKE_VERSION);
- +}
- +
- +static DEVICE_ATTR(enabled, S_IRUGO | S_IWUGO, touchwake_status_read, touchwake_status_write);
- +static DEVICE_ATTR(delay, S_IRUGO | S_IWUGO, touchwake_delay_read, touchwake_delay_write);
- +static DEVICE_ATTR(version, S_IRUGO , touchwake_version, NULL);
- +
- +static struct attribute *touchwake_notification_attributes[] =
- + {
- + &dev_attr_enabled.attr,
- + &dev_attr_delay.attr,
- + &dev_attr_version.attr,
- + NULL
- + };
- +
- +static struct attribute_group touchwake_notification_group =
- + {
- + .attrs = touchwake_notification_attributes,
- + };
- +
- +static struct miscdevice touchwake_device =
- + {
- + .minor = MISC_DYNAMIC_MINOR,
- + .name = "touchwake",
- + };
- +
- +void powerkey_press(void)
- +{
- + powerkey_pressed = true;
- +
- + return;
- +}
- +EXPORT_SYMBOL(powerkey_press);
- +
- +void touch_press(void)
- +{
- + if (device_suspended && touchwake_enabled && !mutex_is_locked(&lock))
- + {
- + mutex_lock(&lock);
- +
- + schedule_work(&presspower_work);
- + }
- +
- + return;
- +}
- +EXPORT_SYMBOL(touch_press);
- +
- +void set_powerkeydev(struct input_dev * input_device)
- +{
- + powerkey_device = input_device;
- +
- + return;
- +}
- +EXPORT_SYMBOL(set_powerkeydev);
- +
- +bool device_is_suspended(void)
- +{
- + return device_suspended;
- +}
- +EXPORT_SYMBOL(device_is_suspended);
- +
- +void register_touchwake_implementation(struct touchwake_implementation * imp)
- +{
- + touchwake_imp = imp;
- +
- + return;
- +}
- +EXPORT_SYMBOL(register_touchwake_implementation);
- +
- +static int __init touchwake_control_init(void)
- +{
- + int ret;
- +
- + pr_info("%s misc_register(%s)\n", __FUNCTION__, touchwake_device.name);
- +
- + ret = misc_register(&touchwake_device);
- +
- + if (ret)
- + {
- + pr_err("%s misc_register(%s) fail\n", __FUNCTION__, touchwake_device.name);
- +
- + return 1;
- + }
- +
- + if (sysfs_create_group(&touchwake_device.this_device->kobj, &touchwake_notification_group) < 0)
- + {
- + pr_err("%s sysfs_create_group fail\n", __FUNCTION__);
- + pr_err("Failed to create sysfs group for device (%s)!\n", touchwake_device.name);
- + }
- +
- + register_early_suspend(&touchwake_suspend_data);
- +
- + wake_lock_init(&touchwake_wake_lock, WAKE_LOCK_SUSPEND, "touchwake_wake");
- +
- + return 0;
- +}
- +
- +device_initcall(touchwake_control_init);
- diff --git a/include/linux/input.h b/include/linux/input.h
- index f2b0f5a..d4108ca 100644
- --- a/include/linux/input.h
- +++ b/include/linux/input.h
- @@ -27,6 +27,10 @@
- #include <linux/screen_dimmer.h>
- #endif
- +#ifdef CONFIG_TOUCH_WAKE
- +#include <linux/touch_wake.h>
- +#endif
- +
- /*
- * The event structure itself
- */
- @@ -1382,15 +1386,45 @@ void input_inject_event(struct input_handle *handle, unsigned int type, unsigned
- static inline void input_report_key(struct input_dev *dev, unsigned int code, int value)
- {
- #ifdef CONFIG_SCREEN_DIMMER
- +#ifdef CONFIG_TOUCH_WAKE
- + if (!screen_is_dimmed() && !device_is_suspended())
- + {
- + input_event(dev, EV_KEY, code, !!value);
- + }
- +#else
- if (!screen_is_dimmed())
- {
- input_event(dev, EV_KEY, code, !!value);
- }
- +#endif
- +#else
- +#ifdef CONFIG_TOUCH_WAKE
- + if (!device_is_suspended())
- + {
- + input_event(dev, EV_KEY, code, !!value);
- + }
- #else
- input_event(dev, EV_KEY, code, !!value);
- #endif
- +#endif
- #ifdef CONFIG_BLD
- +#ifdef CONFIG_TOUCH_WAKE
- + if (!device_is_suspended())
- + {
- + if (code == KEY_MENU || code == KEY_HOME || code == KEY_BACK || code == KEY_SEARCH)
- + {
- + if (value == 1)
- + {
- + touchkey_pressed();
- +
- +#ifdef CONFIG_SCREEN_DIMMER
- + touchscreen_pressed();
- +#endif
- + }
- + }
- + }
- +#else
- if (code == KEY_MENU || code == KEY_HOME || code == KEY_BACK || code == KEY_SEARCH)
- {
- if (value == 1)
- @@ -1402,17 +1436,41 @@ static inline void input_report_key(struct input_dev *dev, unsigned int code, in
- #endif
- }
- }
- +#endif
- #else
- #ifdef CONFIG_SCREEN_DIMMER
- +#ifdef CONFIG_TOUCH_WAKE
- + if (!device_is_suspended())
- + {
- + if (code == KEY_MENU || code == KEY_HOME || code == KEY_BACK || code == KEY_SEARCH)
- + {
- + if (value == 1)
- + {
- + touchscreen_pressed();
- + }
- + }
- + }
- +#else
- if (code == KEY_MENU || code == KEY_HOME || code == KEY_BACK || code == KEY_SEARCH)
- {
- if (value == 1)
- {
- - touchscreen_pressed();
- + touchscreen_pressed();
- }
- }
- #endif
- #endif
- +#endif
- +
- +#ifdef CONFIG_TOUCH_WAKE
- + if (code == KEY_MENU || code == KEY_HOME || code == KEY_BACK || code == KEY_SEARCH)
- + {
- + if (value == 1)
- + {
- + touch_press();
- + }
- + }
- +#endif
- }
- static inline void input_report_rel(struct input_dev *dev, unsigned int code, int value)
- @@ -1423,13 +1481,27 @@ static inline void input_report_rel(struct input_dev *dev, unsigned int code, in
- static inline void input_report_abs(struct input_dev *dev, unsigned int code, int value)
- {
- #ifdef CONFIG_SCREEN_DIMMER
- +#ifdef CONFIG_TOUCH_WAKE
- + if (!screen_is_dimmed() && !device_is_suspended())
- + {
- + input_event(dev, EV_ABS, code, value);
- + }
- +#else
- if (!screen_is_dimmed())
- {
- input_event(dev, EV_ABS, code, value);
- }
- +#endif
- +#else
- +#ifdef CONFIG_TOUCH_WAKE
- + if (!device_is_suspended())
- + {
- + input_event(dev, EV_ABS, code, value);
- + }
- #else
- input_event(dev, EV_ABS, code, value);
- #endif
- +#endif
- }
- static inline void input_report_ff_status(struct input_dev *dev, unsigned int code, int value)
- diff --git a/include/linux/touch_wake.h b/include/linux/touch_wake.h
- new file mode 100644
- index 0000000..25d8c8e
- --- /dev/null
- +++ b/include/linux/touch_wake.h
- @@ -0,0 +1,17 @@
- +/* include/linux/touch_wake.h */
- +
- +#ifndef _LINUX_TOUCH_WAKE_H
- +#define _LINUX_TOUCH_WAKE_H
- +
- +struct touchwake_implementation
- +{
- + void (* enable)(void);
- + void (* disable)(void);
- +};
- +
- +void register_touchwake_implementation(struct touchwake_implementation * imp);
- +void powerkey_press(void);
- +void touch_press(void);
- +bool device_is_suspended(void);
- +
- +#endif
Add Comment
Please, Sign In to add comment