|
@@ -324,11 +324,11 @@ int update_devfreq(struct devfreq *devfreq)
|
|
|
max_freq = min(devfreq->scaling_max_freq, devfreq->max_freq);
|
|
|
min_freq = max(devfreq->scaling_min_freq, devfreq->min_freq);
|
|
|
|
|
|
- if (min_freq && freq < min_freq) {
|
|
|
+ if (freq < min_freq) {
|
|
|
freq = min_freq;
|
|
|
flags &= ~DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use GLB */
|
|
|
}
|
|
|
- if (max_freq && freq > max_freq) {
|
|
|
+ if (freq > max_freq) {
|
|
|
freq = max_freq;
|
|
|
flags |= DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use LUB */
|
|
|
}
|
|
@@ -1168,17 +1168,26 @@ static ssize_t min_freq_store(struct device *dev, struct device_attribute *attr,
|
|
|
struct devfreq *df = to_devfreq(dev);
|
|
|
unsigned long value;
|
|
|
int ret;
|
|
|
- unsigned long max;
|
|
|
|
|
|
ret = sscanf(buf, "%lu", &value);
|
|
|
if (ret != 1)
|
|
|
return -EINVAL;
|
|
|
|
|
|
mutex_lock(&df->lock);
|
|
|
- max = df->max_freq;
|
|
|
- if (value && max && value > max) {
|
|
|
- ret = -EINVAL;
|
|
|
- goto unlock;
|
|
|
+
|
|
|
+ if (value) {
|
|
|
+ if (value > df->max_freq) {
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto unlock;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ unsigned long *freq_table = df->profile->freq_table;
|
|
|
+
|
|
|
+ /* Get minimum frequency according to sorting order */
|
|
|
+ if (freq_table[0] < freq_table[df->profile->max_state - 1])
|
|
|
+ value = freq_table[0];
|
|
|
+ else
|
|
|
+ value = freq_table[df->profile->max_state - 1];
|
|
|
}
|
|
|
|
|
|
df->min_freq = value;
|
|
@@ -1203,17 +1212,26 @@ static ssize_t max_freq_store(struct device *dev, struct device_attribute *attr,
|
|
|
struct devfreq *df = to_devfreq(dev);
|
|
|
unsigned long value;
|
|
|
int ret;
|
|
|
- unsigned long min;
|
|
|
|
|
|
ret = sscanf(buf, "%lu", &value);
|
|
|
if (ret != 1)
|
|
|
return -EINVAL;
|
|
|
|
|
|
mutex_lock(&df->lock);
|
|
|
- min = df->min_freq;
|
|
|
- if (value && min && value < min) {
|
|
|
- ret = -EINVAL;
|
|
|
- goto unlock;
|
|
|
+
|
|
|
+ if (value) {
|
|
|
+ if (value < df->min_freq) {
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto unlock;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ unsigned long *freq_table = df->profile->freq_table;
|
|
|
+
|
|
|
+ /* Get maximum frequency according to sorting order */
|
|
|
+ if (freq_table[0] < freq_table[df->profile->max_state - 1])
|
|
|
+ value = freq_table[df->profile->max_state - 1];
|
|
|
+ else
|
|
|
+ value = freq_table[0];
|
|
|
}
|
|
|
|
|
|
df->max_freq = value;
|