diff options
| author | Jinyoung Park <jinyoungp@nvidia.com> | 2013-03-22 00:41:05 -0400 |
|---|---|---|
| committer | Srikar Srimath Tirumala <srikars@nvidia.com> | 2018-05-28 23:06:41 -0400 |
| commit | b0fec00c77060d0bfa5ac98d44fafeeee67aba30 (patch) | |
| tree | 15252065c3a55ffb626c64874af1e3e65524aae2 | |
| parent | 097c63b52999b5c4381d1f521f562ee43eed45d7 (diff) | |
Thermal: pid_thermal_gov: Apply compenstaion even if sum_err is 0 or max
Applied compensation even if sum_err is 0 or max to prevent determining
target state to 0 in short time.
Bug 1200111
Change-Id: I52a8bbeb4ae8553f14401cd0eaa4508337111955
Signed-off-by: Jinyoung Park <jinyoungp@nvidia.com>
Reviewed-on: http://git-master/r/211960
(cherry picked from commit 221bc8d9307876a099c917100ef1066cf8cef308)
Signed-off-by: Jinyoung Park <jinyoungp@nvidia.com>
Reviewed-on: http://git-master/r/215535
Reviewed-by: Diwakar Tundlam <dtundlam@nvidia.com>
(cherry picked from commit b510de2a4f4eeba4fa69d2633407d1696235c4f0)
Signed-off-by: Srikar Srimath Tirumala <srikars@nvidia.com>
| -rw-r--r-- | drivers/thermal/pid_thermal_gov.c | 9 |
1 files changed, 1 insertions, 8 deletions
diff --git a/drivers/thermal/pid_thermal_gov.c b/drivers/thermal/pid_thermal_gov.c index c29033fb6..f326d8e15 100644 --- a/drivers/thermal/pid_thermal_gov.c +++ b/drivers/thermal/pid_thermal_gov.c | |||
| @@ -382,15 +382,8 @@ pid_thermal_gov_get_target(struct thermal_zone_device *tz, | |||
| 382 | derivative = min_t(s64, derivative, max_dout); | 382 | derivative = min_t(s64, derivative, max_dout); |
| 383 | } | 383 | } |
| 384 | 384 | ||
| 385 | sum_err = proportional + derivative; | 385 | sum_err = max_t(s64, proportional + derivative, 0); |
| 386 | sum_err = max_t(s64, sum_err, 0); | ||
| 387 | if (sum_err == 0) | ||
| 388 | return 0; | ||
| 389 | |||
| 390 | sum_err = min_t(s64, sum_err, max_err); | 386 | sum_err = min_t(s64, sum_err, max_err); |
| 391 | if (sum_err == max_err) | ||
| 392 | return max_state; | ||
| 393 | |||
| 394 | sum_err = sum_err * max_state + max_err - 1; | 387 | sum_err = sum_err * max_state + max_err - 1; |
| 395 | target = (unsigned long)div64_s64(sum_err, max_err); | 388 | target = (unsigned long)div64_s64(sum_err, max_err); |
| 396 | 389 | ||
