[PATCH 4/4] This patch adds platform_data and callback of suspend/resume
Matt Hsu
matt_hsu at openmoko.org
Thu Jan 8 19:25:45 CET 2009
Signed-off-by: Matt Hsu <matt_hsu at openmoko.org>
---
drivers/i2c/chips/lp5521.c | 33 +++++++++++++++++++++++++++++++++
include/linux/lp5521.h | 10 ++++++++++
2 files changed, 43 insertions(+), 0 deletions(-)
create mode 100644 include/linux/lp5521.h
diff --git a/drivers/i2c/chips/lp5521.c b/drivers/i2c/chips/lp5521.c
index 83f6626..cc407b7 100644
--- a/drivers/i2c/chips/lp5521.c
+++ b/drivers/i2c/chips/lp5521.c
@@ -4,6 +4,7 @@
* Copyright (C) 2007 Nokia Corporation
*
* Written by Mathias Nyman <mathias.nyman at nokia.com>
+ * Matt Hsu <matt_hsu at openmoko.org>
*
* 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
@@ -25,6 +26,8 @@
#include <linux/i2c.h>
#include <linux/mutex.h>
+#include <linux/lp5521.h>
+
#define LP5521_DRIVER_NAME "lp5521"
#ifdef LED_CONNECTED_WRONG
@@ -502,10 +505,31 @@ static int lp5521_set_mode(struct lp5521_chip *chip, char *mode)
/*--------------------------------------------------------------*/
static struct i2c_driver lp5521_driver;
+#ifdef CONFIG_PM
+static int lp5521_suspend(struct device *dev, pm_message_t state)
+{
+ /* FIXME: Not implemented
+ * Here we could upload firmware to perform
+ * any scenarios we want and save registers.
+ */
+ return 0;
+}
+
+static int lp5521_resume(struct device *dev)
+{
+ /* FIXME: Not implemented */
+ return 0;
+}
+#else
+#define lp5521_suspend NULL
+#define lp5521_resume NULL
+#endif
+
static int lp5521_probe(struct i2c_client *client)
{
struct lp5521_chip *chip;
int ret = 0;
+ struct lp5521_platform_data *pdata = client->dev.platform_data;
chip = kzalloc(sizeof(*chip), GFP_KERNEL);
if (!chip)
@@ -517,6 +541,9 @@ static int lp5521_probe(struct i2c_client *client)
mutex_init(&chip->lock);
+ /* enter start-up mode */
+ (pdata->ext_enable)(1);
+
ret = lp5521_configure(client);
if (ret < 0) {
dev_err(&client->dev, "lp5521 error configuring chip \n");
@@ -540,6 +567,10 @@ fail1:
return ret;
}
+static struct i2c_device_id lp5521_id_table[] = {
+ {LP5521_DRIVER_NAME, },
+};
+
static int lp5521_remove(struct i2c_client *client)
{
struct lp5521_chip *chip = i2c_get_clientdata(client);
@@ -553,6 +584,8 @@ static int lp5521_remove(struct i2c_client *client)
static struct i2c_driver lp5521_driver = {
.driver = {
.name = LP5521_DRIVER_NAME,
+ .suspend = lp5521_suspend,
+ .resume = lp5521_resume,
},
.probe = lp5521_probe,
.remove = __exit_p(lp5521_remove),
diff --git a/include/linux/lp5521.h b/include/linux/lp5521.h
new file mode 100644
index 0000000..4515a02
--- /dev/null
+++ b/include/linux/lp5521.h
@@ -0,0 +1,10 @@
+#ifndef _LINUX_LP5521_H_
+#define _LINUX_LP5521_H_
+
+struct lp5521_platform_data {
+
+ /* chip enable */
+ void (*ext_enable)(int level);
+};
+
+#endif /* LINUX_LP5521_H */
--
1.5.6.5
More information about the openmoko-kernel
mailing list