summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHu hui <b29976@freescale.com>2010-10-15 16:31:58 +0800
committerHu Hui <b29976@freescale.com>2010-10-15 17:28:22 +0800
commit157aeafc279da02d7da9bdeb73339791b8eb09c9 (patch)
tree1ec073c82536682de4dd6673907902a7d508267e
parent6193f7234b9ad1ad3d22f8474d564401ce27d7c2 (diff)
ENGR00132639-2 Power: mxc_pwerkey break mx25 kernel build
Driver Part define a new platform data struct, and Put the pmic callback register into platform data structure, then we can cover all pmic Signed-off-by: Hu Hui <b29976@freescale.com>
-rwxr-xr-xdrivers/input/keyboard/mxc_pwrkey.c14
-rw-r--r--include/linux/powerkey.h30
2 files changed, 38 insertions, 6 deletions
diff --git a/drivers/input/keyboard/mxc_pwrkey.c b/drivers/input/keyboard/mxc_pwrkey.c
index c4e9ce9865c1..378cb4f7663e 100755
--- a/drivers/input/keyboard/mxc_pwrkey.c
+++ b/drivers/input/keyboard/mxc_pwrkey.c
@@ -30,14 +30,14 @@
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/platform_device.h>
-#include <linux/pmic_external.h>
+#include <linux/powerkey.h>
#define KEYCODE_ONOFF KEY_F4
/*! Input device structure. */
static struct input_dev *mxcpwrkey_dev;
static bool key_press;
-static void power_key_event_handler(void)
+static void power_key_event_handler(void *param)
{
if (!key_press) {
key_press = true;
@@ -54,8 +54,12 @@ static void power_key_event_handler(void)
static int mxcpwrkey_probe(struct platform_device *pdev)
{
int retval, err;
- pmic_event_callback_t power_key_event;
+ struct power_key_platform_data *pdata = pdev->dev.platform_data;
+ if (!pdata) {
+ printk(KERN_DEBUG "power key platform data is NULL, there is no power key\n");
+ return 0;
+ }
printk(KERN_INFO "PMIC powerkey probe\n");
key_press = false;
@@ -71,9 +75,7 @@ static int mxcpwrkey_probe(struct platform_device *pdev)
mxcpwrkey_dev->id.bustype = BUS_HOST;
mxcpwrkey_dev->evbit[0] = BIT_MASK(EV_KEY);
- power_key_event.param = NULL;
- power_key_event.func = (void *)power_key_event_handler;
- pmic_event_subscribe(EVENT_PWRONI, power_key_event);
+ pdata->register_key_press_handler(power_key_event_handler, NULL);
input_set_capability(mxcpwrkey_dev, EV_KEY, KEYCODE_ONOFF);
diff --git a/include/linux/powerkey.h b/include/linux/powerkey.h
new file mode 100644
index 000000000000..b59cb69c31ed
--- /dev/null
+++ b/include/linux/powerkey.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+#ifndef POWER_KEY_H
+#define POWER_KEY_H
+
+typedef void (*key_press_call_back)(void *);
+typedef void (*register_key_press_call_back)(key_press_call_back, void *);
+
+struct power_key_platform_data {
+ register_key_press_call_back register_key_press_handler;
+ void *param; /* param of the handler */
+};
+
+#endif /* POWER_KEY_H */