leds: convert bd2802 driver to dev_pm_ops
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 22 Mar 2011 23:30:14 +0000 (16:30 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 23 Mar 2011 00:43:58 +0000 (17:43 -0700)
There is a move to deprecate bus-specific PM operations and move to using
dev_pm_ops instead in order to reduce the amount of boilerplate code in
buses and facilitiate updates to the PM core.  Do this move for the bs2802
driver.

[akpm@linux-foundation.org: fix warnings]
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: Kim Kyuwon <q1.kim@samsung.com>
Cc: Kim Kyuwon <chammoru@gmail.com>
Cc: Richard Purdie <rpurdie@rpsys.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/leds/leds-bd2802.c

index 19dc4b6..3ebe382 100644 (file)
@@ -19,7 +19,7 @@
 #include <linux/leds.h>
 #include <linux/leds-bd2802.h>
 #include <linux/slab.h>
-
+#include <linux/pm.h>
 
 #define LED_CTL(rgb2en, rgb1en) ((rgb2en) << 4 | ((rgb1en) << 0))
 
@@ -319,20 +319,6 @@ static void bd2802_turn_off(struct bd2802_led *led, enum led_ids id,
        bd2802_update_state(led, id, color, BD2802_OFF);
 }
 
-static void bd2802_restore_state(struct bd2802_led *led)
-{
-       int i;
-
-       for (i = 0; i < LED_NUM; i++) {
-               if (led->led[i].r)
-                       bd2802_turn_on(led, i, RED, led->led[i].r);
-               if (led->led[i].g)
-                       bd2802_turn_on(led, i, GREEN, led->led[i].g);
-               if (led->led[i].b)
-                       bd2802_turn_on(led, i, BLUE, led->led[i].b);
-       }
-}
-
 #define BD2802_SET_REGISTER(reg_addr, reg_name)                                \
 static ssize_t bd2802_store_reg##reg_addr(struct device *dev,          \
        struct device_attribute *attr, const char *buf, size_t count)   \
@@ -761,8 +747,25 @@ static int __exit bd2802_remove(struct i2c_client *client)
        return 0;
 }
 
-static int bd2802_suspend(struct i2c_client *client, pm_message_t mesg)
+#ifdef CONFIG_PM
+
+static void bd2802_restore_state(struct bd2802_led *led)
 {
+       int i;
+
+       for (i = 0; i < LED_NUM; i++) {
+               if (led->led[i].r)
+                       bd2802_turn_on(led, i, RED, led->led[i].r);
+               if (led->led[i].g)
+                       bd2802_turn_on(led, i, GREEN, led->led[i].g);
+               if (led->led[i].b)
+                       bd2802_turn_on(led, i, BLUE, led->led[i].b);
+       }
+}
+
+static int bd2802_suspend(struct device *dev)
+{
+       struct i2c_client *client = to_i2c_client(dev);
        struct bd2802_led *led = i2c_get_clientdata(client);
 
        gpio_set_value(led->pdata->reset_gpio, 0);
@@ -770,8 +773,9 @@ static int bd2802_suspend(struct i2c_client *client, pm_message_t mesg)
        return 0;
 }
 
-static int bd2802_resume(struct i2c_client *client)
+static int bd2802_resume(struct device *dev)
 {
+       struct i2c_client *client = to_i2c_client(dev);
        struct bd2802_led *led = i2c_get_clientdata(client);
 
        if (!bd2802_is_all_off(led) || led->adf_on) {
@@ -782,6 +786,12 @@ static int bd2802_resume(struct i2c_client *client)
        return 0;
 }
 
+static SIMPLE_DEV_PM_OPS(bd2802_pm, bd2802_suspend, bd2802_resume);
+#define BD2802_PM (&bd2802_pm)
+#else          /* CONFIG_PM */
+#define BD2802_PM NULL
+#endif
+
 static const struct i2c_device_id bd2802_id[] = {
        { "BD2802", 0 },
        { }
@@ -791,11 +801,10 @@ MODULE_DEVICE_TABLE(i2c, bd2802_id);
 static struct i2c_driver bd2802_i2c_driver = {
        .driver = {
                .name   = "BD2802",
+               .pm     = BD2802_PM,
        },
        .probe          = bd2802_probe,
        .remove         = __exit_p(bd2802_remove),
-       .suspend        = bd2802_suspend,
-       .resume         = bd2802_resume,
        .id_table       = bd2802_id,
 };