linux/drivers/devfreq
Matthias Kaehlcke df5cf4a361 PM / devfreq: Fix handling of min/max_freq == 0
Commit ab8f58ad72 ("PM / devfreq: Set min/max_freq when adding the
devfreq device") initializes df->min/max_freq with the min/max OPP when
the device is added. Later commit f1d981eaec ("PM / devfreq: Use the
available min/max frequency") adds df->scaling_min/max_freq and the
following to the frequency adjustment code:

  max_freq = MIN(devfreq->scaling_max_freq, devfreq->max_freq);

With the current handling of min/max_freq this is incorrect:

Even though df->max_freq is now initialized to a value != 0 user space
can still set it to 0, in this case max_freq would be 0 instead of
df->scaling_max_freq as intended. In consequence the frequency adjustment
is not performed:

  if (max_freq && freq > max_freq) {
	freq = max_freq;

To fix this set df->min/max freq to the min/max OPP in max/max_freq_store,
when the user passes a value of 0. This also prevents df->max_freq from
being set below the min OPP when df->min_freq is 0, and similar for
min_freq. Since it is now guaranteed that df->min/max_freq can't be 0 the
checks for this case can be removed.

Fixes: f1d981eaec ("PM / devfreq: Use the available min/max frequency")
Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
Reviewed-by: Brian Norris <briannorris@chromium.org>
Reviewed-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
2018-10-02 10:16:41 +09:00
..
event PM / devfreq: exynos-ppmu: Delete an error message for a failed memory allocation in exynos_ppmu_probe() 2018-07-18 13:56:46 +09:00
devfreq-event.c PM / devfreq: Convert to using %pOF instead of full_name 2017-08-28 09:15:33 +09:00
devfreq.c PM / devfreq: Fix handling of min/max_freq == 0 2018-10-02 10:16:41 +09:00
exynos-bus.c PM / devfreq: Define the constant governor name 2017-10-26 17:08:40 +09:00
governor_passive.c PM / devfreq: Define the constant governor name 2017-10-26 17:08:40 +09:00
governor_performance.c PM / devfreq: Define the constant governor name 2017-10-26 17:08:40 +09:00
governor_powersave.c PM / devfreq: Define the constant governor name 2017-10-26 17:08:40 +09:00
governor_simpleondemand.c PM / devfreq: Define the constant governor name 2017-10-26 17:08:40 +09:00
governor_userspace.c PM / devfreq: Define the constant governor name 2017-10-26 17:08:40 +09:00
governor.h PM / devfreq: Move private devfreq_update_stats() into devfreq 2017-08-28 10:22:27 +09:00
Kconfig PM / devfreq: Add dependency on PM_OPP 2017-08-28 10:23:57 +09:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
rk3399_dmc.c PM / devfreq: rk3399_dmc: Fix duplicated opp table on reload. 2018-07-18 13:58:39 +09:00
tegra-devfreq.c headers: separate linux/mod_devicetable.h from linux/platform_device.h 2018-07-07 17:52:26 +02:00