summaryrefslogtreecommitdiff
path: root/drivers/input
diff options
context:
space:
mode:
authorKe Qinghua <qinghua.ke@freescale.com>2014-04-04 16:22:34 +0800
committerNitin Garg <nitin.garg@freescale.com>2014-04-21 22:35:45 -0500
commit24b7d5ca843cd63f1ee1ae7ebdb00f78dd3f62b9 (patch)
treea7c935a5401c93ad3bdec37a9957da95a5287406 /drivers/input
parent85c1fa95bf70927b33a0613edb690ae4759e0653 (diff)
ENGR00305254-7 imx6sx sarbesd board bring up
Enable early suspend/late resume code Signed-off-by: Ke Qinghua <qinghua.ke@freescale.com> Acked-by: Jason Liu
Diffstat (limited to 'drivers/input')
-rw-r--r--drivers/input/misc/gpio_event.c39
1 files changed, 30 insertions, 9 deletions
diff --git a/drivers/input/misc/gpio_event.c b/drivers/input/misc/gpio_event.c
index 90f07eba3ce9..d4e5b4dfe19f 100644
--- a/drivers/input/misc/gpio_event.c
+++ b/drivers/input/misc/gpio_event.c
@@ -13,6 +13,7 @@
*
*/
+#include <linux/earlysuspend.h>
#include <linux/module.h>
#include <linux/input.h>
#include <linux/gpio_event.h>
@@ -23,6 +24,7 @@
struct gpio_event {
struct gpio_event_input_devs *input_devs;
const struct gpio_event_platform_data *info;
+ struct early_suspend early_suspend;
void *state[0];
};
@@ -99,19 +101,23 @@ err_no_func:
return ret;
}
-static void __maybe_unused gpio_event_suspend(struct gpio_event *ip)
+#ifdef CONFIG_HAS_EARLYSUSPEND
+void gpio_event_suspend(struct early_suspend *h)
{
+ struct gpio_event *ip;
+ ip = container_of(h, struct gpio_event, early_suspend);
gpio_event_call_all_func(ip, GPIO_EVENT_FUNC_SUSPEND);
- if (ip->info->power)
- ip->info->power(ip->info, 0);
+ ip->info->power(ip->info, 0);
}
-static void __maybe_unused gpio_event_resume(struct gpio_event *ip)
+void gpio_event_resume(struct early_suspend *h)
{
- if (ip->info->power)
- ip->info->power(ip->info, 1);
+ struct gpio_event *ip;
+ ip = container_of(h, struct gpio_event, early_suspend);
+ ip->info->power(ip->info, 1);
gpio_event_call_all_func(ip, GPIO_EVENT_FUNC_RESUME);
}
+#endif
static int gpio_event_probe(struct platform_device *pdev)
{
@@ -163,8 +169,15 @@ static int gpio_event_probe(struct platform_device *pdev)
}
ip->input_devs->count = dev_count;
ip->info = event_info;
- if (event_info->power)
+ if (event_info->power) {
+#ifdef CONFIG_HAS_EARLYSUSPEND
+ ip->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1;
+ ip->early_suspend.suspend = gpio_event_suspend;
+ ip->early_suspend.resume = gpio_event_resume;
+ register_early_suspend(&ip->early_suspend);
+#endif
ip->info->power(ip->info, 1);
+ }
err = gpio_event_call_all_func(ip, GPIO_EVENT_FUNC_INIT);
if (err)
@@ -185,8 +198,12 @@ static int gpio_event_probe(struct platform_device *pdev)
err_input_register_device_failed:
gpio_event_call_all_func(ip, GPIO_EVENT_FUNC_UNINIT);
err_call_all_func_failed:
- if (event_info->power)
+ if (event_info->power) {
+#ifdef CONFIG_HAS_EARLYSUSPEND
+ unregister_early_suspend(&ip->early_suspend);
+#endif
ip->info->power(ip->info, 0);
+ }
for (i = 0; i < registered; i++)
input_unregister_device(ip->input_devs->dev[i]);
for (i = dev_count - 1; i >= registered; i--) {
@@ -205,8 +222,12 @@ static int gpio_event_remove(struct platform_device *pdev)
int i;
gpio_event_call_all_func(ip, GPIO_EVENT_FUNC_UNINIT);
- if (ip->info->power)
+ if (ip->info->power) {
+#ifdef CONFIG_HAS_EARLYSUSPEND
+ unregister_early_suspend(&ip->early_suspend);
+#endif
ip->info->power(ip->info, 0);
+ }
for (i = 0; i < ip->input_devs->count; i++)
input_unregister_device(ip->input_devs->dev[i]);
kfree(ip);