From ab15d7f901fc97ff38b3a24a76e60477557e48b4 Mon Sep 17 00:00:00 2001 From: Weixin Zhou Date: Thu, 21 Jan 2021 14:53:05 +0800 Subject: [PATCH] power: rk817-battery: move resume work to workqueue Reduced resume elapsed time Signed-off-by: Weixin Zhou Change-Id: I074d86934537bc05f7d18f9eb62278d9a9053cdf --- drivers/power/supply/rk817_battery.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/power/supply/rk817_battery.c b/drivers/power/supply/rk817_battery.c index 2bf183736ff0..926766d61f30 100644 --- a/drivers/power/supply/rk817_battery.c +++ b/drivers/power/supply/rk817_battery.c @@ -493,6 +493,7 @@ struct rk817_battery_device { struct workqueue_struct *bat_monitor_wq; struct delayed_work bat_delay_work; struct delayed_work calib_delay_work; + struct work_struct resume_work; struct wake_lock wake_lock; struct timer_list caltimer; @@ -623,6 +624,8 @@ struct rk817_battery_device { bool change; /* Battery status change, report information */ }; +static void rk817_bat_resume_work(struct work_struct *work); + static u64 get_boot_sec(void) { struct timespec ts; @@ -3037,6 +3040,7 @@ static int rk817_battery_probe(struct platform_device *pdev) INIT_DELAYED_WORK(&battery->bat_delay_work, rk817_battery_work); queue_delayed_work(battery->bat_monitor_wq, &battery->bat_delay_work, msecs_to_jiffies(TIMER_MS_COUNTS * 5)); + INIT_WORK(&battery->resume_work, rk817_bat_resume_work); ret = rk817_bat_init_power_supply(battery); if (ret) { @@ -3312,10 +3316,9 @@ static int rk817_bat_sleep_dischrg(struct rk817_battery_device *battery) return sleep_soc; } -static int rk817_bat_pm_resume(struct device *dev) +static void rk817_bat_resume_work(struct work_struct *work) { - struct platform_device *pdev = to_platform_device(dev); - struct rk817_battery_device *battery = dev_get_drvdata(&pdev->dev); + struct rk817_battery_device *battery = container_of(work, struct rk817_battery_device, resume_work); int interval_sec = 0, time_step = 0, pwroff_vol; battery->s2r = true; @@ -3362,6 +3365,13 @@ static int rk817_bat_pm_resume(struct device *dev) queue_delayed_work(battery->bat_monitor_wq, &battery->bat_delay_work, msecs_to_jiffies(1000)); +} + +static int rk817_bat_pm_resume(struct device *dev) +{ + struct rk817_battery_device *battery = dev_get_drvdata(dev); + + queue_work(battery->bat_monitor_wq, &battery->resume_work); return 0; }