mirror of https://gitee.com/openkylin/linux.git
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:
parent
8d2587970b
commit
551ea73838
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue