ledring: add suspend/resume for ledring

PD#158940: add suspend/resume for ledring

Change-Id: I64827cd230708481768be7aabc3b4f814af8b636
Signed-off-by: Renjun Xu <renjun.xu@amlogic.com>
This commit is contained in:
Renjun Xu
2018-01-17 10:42:13 +08:00
parent c2603ea592
commit 2449a4800e
2 changed files with 73 additions and 0 deletions

View File

@@ -22,6 +22,8 @@
#include <linux/of_device.h>
#include <linux/kobject.h>
#include <linux/slab.h>
#include <linux/pm.h>
#include <linux/pm_runtime.h>
#include <linux/device.h>
#include <linux/uaccess.h>
@@ -752,6 +754,7 @@ static int is31fl32xx_probe(struct i2c_client *client,
ret = sysfs_create_group(led_priv_data->running_kobj, &attr_group);
if (ret)
goto err2;
return 0;
err1:
return -ENOMEM;
@@ -791,10 +794,47 @@ static const struct i2c_device_id is31fl32xx_id[] = {
MODULE_DEVICE_TABLE(i2c, is31fl32xx_id);
static int is31fl32xx_resume(struct device *dev)
{
pr_info("enter is31fl32xx_resume.\n");
schedule_work(&led_priv_data->ledring_work);
mod_timer(&led_priv_data->mtimer,
jiffies+led_priv_data->ledring_speed*HZ/1000);
return 0;
}
static int is31fl32xx_suspend(struct device *dev)
{
int i, ret;
pr_info("enter is31fl32xx_suspend.\n");
del_timer(&led_priv_data->mtimer);
for (i = 0; i < styleData.num*3; i++) {
ret = is31fl32xx_write(led_priv_data->g_client, i+1, 0);
if (ret) {
pr_err("try close led: %d fail\n", i+1);
return ret;
}
ret = is31fl32xx_write(led_priv_data->g_client, 37, 0);
if (ret)
pr_err("try close led: %d fail\n", i+1);
}
return 0;
}
static const struct dev_pm_ops is31fl32xx_pm = {
.suspend = is31fl32xx_suspend,
.resume = is31fl32xx_resume,
};
static struct i2c_driver is31fl32xx_driver = {
.driver = {
.name = "is31fl32xx",
.owner = THIS_MODULE,
.of_match_table = of_is31fl32xx_match,
.pm = &is31fl32xx_pm,
},
.probe = is31fl32xx_probe,
.remove = is31fl32xx_remove,

View File

@@ -22,7 +22,9 @@
#include <linux/kobject.h>
#include <linux/device.h>
#include <linux/slab.h>
#include <linux/pm.h>
#include <linux/uaccess.h>
#include <linux/pm_runtime.h>
#include <linux/input.h>
#include <linux/of_platform.h>
@@ -589,11 +591,42 @@ static int ledring_remove(struct i2c_client *client)
return 0;
}
static int ledring_resume(struct device *dev)
{
pr_info("enter ledring_resume.\n");
schedule_work(&key_led_des->list_work);
mod_timer(&key_led_des->mtimer,
jiffies+key_led_des->run_time*HZ/1000);
return 0;
}
static int ledring_suspend(struct device *dev)
{
int ret;
pr_info("enter ledring_suspend.\n");
del_timer(&key_led_des->mtimer);
ret = i2c_smbus_write_byte_data(g_client,
addr_led_reg1, 0);
if (ret < 0)
pr_err("led set reg1 fail!\n");
return 0;
}
static const struct dev_pm_ops ledring_pm = {
.suspend = ledring_suspend,
.resume = ledring_resume,
};
static struct i2c_driver ledring_drv = {
.driver = {
.name = "aml_ledring",
.owner = THIS_MODULE,
.of_match_table = ledring_dt_ids,
.pm = &ledring_pm,
},
.probe = ledring_probe,
.remove = ledring_remove,