leds: convert bd2802 driver to dev_pm_ops

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>
This commit is contained in:
Mark Brown 2011-03-22 16:30:14 -07:00 committed by Linus Torvalds
parent 8d2587970b
commit 551ea73838
1 changed files with 28 additions and 19 deletions

View File

@ -19,7 +19,7 @@
#include <linux/leds.h> #include <linux/leds.h>
#include <linux/leds-bd2802.h> #include <linux/leds-bd2802.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/pm.h>
#define LED_CTL(rgb2en, rgb1en) ((rgb2en) << 4 | ((rgb1en) << 0)) #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); 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) \ #define BD2802_SET_REGISTER(reg_addr, reg_name) \
static ssize_t bd2802_store_reg##reg_addr(struct device *dev, \ static ssize_t bd2802_store_reg##reg_addr(struct device *dev, \
struct device_attribute *attr, const char *buf, size_t count) \ 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; 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); struct bd2802_led *led = i2c_get_clientdata(client);
gpio_set_value(led->pdata->reset_gpio, 0); 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; 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); struct bd2802_led *led = i2c_get_clientdata(client);
if (!bd2802_is_all_off(led) || led->adf_on) { if (!bd2802_is_all_off(led) || led->adf_on) {
@ -782,6 +786,12 @@ static int bd2802_resume(struct i2c_client *client)
return 0; 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[] = { static const struct i2c_device_id bd2802_id[] = {
{ "BD2802", 0 }, { "BD2802", 0 },
{ } { }
@ -791,11 +801,10 @@ MODULE_DEVICE_TABLE(i2c, bd2802_id);
static struct i2c_driver bd2802_i2c_driver = { static struct i2c_driver bd2802_i2c_driver = {
.driver = { .driver = {
.name = "BD2802", .name = "BD2802",
.pm = BD2802_PM,
}, },
.probe = bd2802_probe, .probe = bd2802_probe,
.remove = __exit_p(bd2802_remove), .remove = __exit_p(bd2802_remove),
.suspend = bd2802_suspend,
.resume = bd2802_resume,
.id_table = bd2802_id, .id_table = bd2802_id,
}; };