diff options
Diffstat (limited to 'drivers/gpu/drm/msm/msm_gpu_devfreq.c')
| -rw-r--r-- | drivers/gpu/drm/msm/msm_gpu_devfreq.c | 21 | 
1 files changed, 19 insertions, 2 deletions
| diff --git a/drivers/gpu/drm/msm/msm_gpu_devfreq.c b/drivers/gpu/drm/msm/msm_gpu_devfreq.c index 62405e980925..9bf319be11f6 100644 --- a/drivers/gpu/drm/msm/msm_gpu_devfreq.c +++ b/drivers/gpu/drm/msm/msm_gpu_devfreq.c @@ -133,6 +133,18 @@ void msm_devfreq_init(struct msm_gpu *gpu)  			      CLOCK_MONOTONIC, HRTIMER_MODE_REL);  } +static void cancel_idle_work(struct msm_gpu_devfreq *df) +{ +	hrtimer_cancel(&df->idle_work.timer); +	kthread_cancel_work_sync(&df->idle_work.work); +} + +static void cancel_boost_work(struct msm_gpu_devfreq *df) +{ +	hrtimer_cancel(&df->boost_work.timer); +	kthread_cancel_work_sync(&df->boost_work.work); +} +  void msm_devfreq_cleanup(struct msm_gpu *gpu)  {  	struct msm_gpu_devfreq *df = &gpu->devfreq; @@ -152,7 +164,12 @@ void msm_devfreq_resume(struct msm_gpu *gpu)  void msm_devfreq_suspend(struct msm_gpu *gpu)  { -	devfreq_suspend_device(gpu->devfreq.devfreq); +	struct msm_gpu_devfreq *df = &gpu->devfreq; + +	devfreq_suspend_device(df->devfreq); + +	cancel_idle_work(df); +	cancel_boost_work(df);  }  static void msm_devfreq_boost_work(struct kthread_work *work) @@ -196,7 +213,7 @@ void msm_devfreq_active(struct msm_gpu *gpu)  	/*  	 * Cancel any pending transition to idle frequency:  	 */ -	hrtimer_cancel(&df->idle_work.timer); +	cancel_idle_work(df);  	idle_time = ktime_to_ms(ktime_sub(ktime_get(), df->idle_time)); |