| From 232493072cfabe1536bd75da47f27f42a10967cb Mon Sep 17 00:00:00 2001 |
| From: Chanwoo Choi <cw00.choi@samsung.com> |
| Date: Tue, 31 Jan 2017 15:38:17 +0900 |
| Subject: [PATCH] PM / devfreq: Fix wrong trans_stat of passive devfreq device |
| |
| commit 30582c25a4b4e0a5e456a309fde79b845e9473b2 upstream. |
| |
| Until now, the trans_stat information of passive devfreq is not updated. |
| This patch updates the trans_stat information after setting the target |
| frequency of passive devfreq device. |
| |
| Fixes: 996133119f57 ("PM / devfreq: Add new passive governor") |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com> |
| Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c |
| index de4d441cf2a9..34974c108c27 100644 |
| --- a/drivers/devfreq/devfreq.c |
| +++ b/drivers/devfreq/devfreq.c |
| @@ -130,7 +130,7 @@ static void devfreq_set_freq_table(struct devfreq *devfreq) |
| * @devfreq: the devfreq instance |
| * @freq: the update target frequency |
| */ |
| -static int devfreq_update_status(struct devfreq *devfreq, unsigned long freq) |
| +int devfreq_update_status(struct devfreq *devfreq, unsigned long freq) |
| { |
| int lev, prev_lev, ret = 0; |
| unsigned long cur_time; |
| @@ -162,6 +162,7 @@ out: |
| devfreq->last_stat_updated = cur_time; |
| return ret; |
| } |
| +EXPORT_SYMBOL(devfreq_update_status); |
| |
| /** |
| * find_devfreq_governor() - find devfreq governor from name |
| diff --git a/drivers/devfreq/governor.h b/drivers/devfreq/governor.h |
| index fad7d6321978..71576b8bdfef 100644 |
| --- a/drivers/devfreq/governor.h |
| +++ b/drivers/devfreq/governor.h |
| @@ -38,4 +38,6 @@ extern void devfreq_interval_update(struct devfreq *devfreq, |
| extern int devfreq_add_governor(struct devfreq_governor *governor); |
| extern int devfreq_remove_governor(struct devfreq_governor *governor); |
| |
| +extern int devfreq_update_status(struct devfreq *devfreq, unsigned long freq); |
| + |
| #endif /* _GOVERNOR_H */ |
| diff --git a/drivers/devfreq/governor_passive.c b/drivers/devfreq/governor_passive.c |
| index 93795b32dc09..5be96b2249e7 100644 |
| --- a/drivers/devfreq/governor_passive.c |
| +++ b/drivers/devfreq/governor_passive.c |
| @@ -112,6 +112,11 @@ static int update_devfreq_passive(struct devfreq *devfreq, unsigned long freq) |
| if (ret < 0) |
| goto out; |
| |
| + if (devfreq->profile->freq_table |
| + && (devfreq_update_status(devfreq, freq))) |
| + dev_err(&devfreq->dev, |
| + "Couldn't update frequency transition information.\n"); |
| + |
| devfreq->previous_freq = freq; |
| |
| out: |
| -- |
| 2.12.0 |
| |