PM / devfreq: account suspend/resume for stats
authorRajagopal Venkat <rajagopal.venkat@linaro.org>
Tue, 8 Jan 2013 05:50:39 +0000 (11:20 +0530)
committerMyungJoo Ham <myungjoo.ham@samsung.com>
Mon, 3 Jun 2013 11:20:29 +0000 (20:20 +0900)
devfreq stats is not taking device suspend and resume into
account. Fix it.

Signed-off-by: Rajagopal Venkat <rajagopal.venkat@linaro.org>
Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com>
drivers/devfreq/devfreq.c

index 3b367973a8028c5d1cd32bd823bcf9e005d269b6..abfa14dd8b4c992317a90b22471fa4e3d710111a 100644 (file)
@@ -271,6 +271,7 @@ void devfreq_monitor_suspend(struct devfreq *devfreq)
                return;
        }
 
+       devfreq_update_status(devfreq, devfreq->previous_freq);
        devfreq->stop_polling = true;
        mutex_unlock(&devfreq->lock);
        cancel_delayed_work_sync(&devfreq->work);
@@ -287,6 +288,8 @@ EXPORT_SYMBOL(devfreq_monitor_suspend);
  */
 void devfreq_monitor_resume(struct devfreq *devfreq)
 {
+       unsigned long freq;
+
        mutex_lock(&devfreq->lock);
        if (!devfreq->stop_polling)
                goto out;
@@ -295,8 +298,14 @@ void devfreq_monitor_resume(struct devfreq *devfreq)
                        devfreq->profile->polling_ms)
                queue_delayed_work(devfreq_wq, &devfreq->work,
                        msecs_to_jiffies(devfreq->profile->polling_ms));
+
+       devfreq->last_stat_updated = jiffies;
        devfreq->stop_polling = false;
 
+       if (devfreq->profile->get_cur_freq &&
+               !devfreq->profile->get_cur_freq(devfreq->dev.parent, &freq))
+               devfreq->previous_freq = freq;
+
 out:
        mutex_unlock(&devfreq->lock);
 }
@@ -905,11 +914,11 @@ static ssize_t show_trans_table(struct device *dev, struct device_attribute *att
 {
        struct devfreq *devfreq = to_devfreq(dev);
        ssize_t len;
-       int i, j, err;
+       int i, j;
        unsigned int max_state = devfreq->profile->max_state;
 
-       err = devfreq_update_status(devfreq, devfreq->previous_freq);
-       if (err)
+       if (!devfreq->stop_polling &&
+                       devfreq_update_status(devfreq, devfreq->previous_freq))
                return 0;
 
        len = sprintf(buf, "   From  :   To\n");
This page took 0.028436 seconds and 5 git commands to generate.