Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 94fa8c8f authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "PM/devfreq: Do not switch governors from sysfs when device is suspended"

parents c3ddbc3c 8e2423fd
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -576,6 +576,7 @@ struct devfreq *devfreq_add_device(struct device *dev,
	devfreq->last_status.current_frequency = profile->initial_freq;
	devfreq->data = data;
	devfreq->nb.notifier_call = devfreq_notifier_call;
	devfreq->dev_suspended = false;

	if (!devfreq->profile->max_state && !devfreq->profile->freq_table) {
		mutex_unlock(&devfreq->lock);
@@ -782,12 +783,16 @@ int devfreq_suspend_device(struct devfreq *devfreq)
	if (!devfreq)
		return -EINVAL;

	if (!devfreq->governor)
	mutex_lock(&devfreq->event_lock);
	if (!devfreq->governor || devfreq->dev_suspended) {
		mutex_unlock(&devfreq->event_lock);
		return 0;
	}

	mutex_lock(&devfreq->event_lock);
	ret = devfreq->governor->event_handler(devfreq,
				DEVFREQ_GOV_SUSPEND, NULL);
	if (!ret)
		devfreq->dev_suspended = true;
	mutex_unlock(&devfreq->event_lock);
	return ret;
}
@@ -807,12 +812,16 @@ int devfreq_resume_device(struct devfreq *devfreq)
	if (!devfreq)
		return -EINVAL;

	if (!devfreq->governor)
	mutex_lock(&devfreq->event_lock);
	if (!devfreq->governor) {
		mutex_unlock(&devfreq->event_lock);
		return 0;
	}

	mutex_lock(&devfreq->event_lock);
	ret = devfreq->governor->event_handler(devfreq,
				DEVFREQ_GOV_RESUME, NULL);
	if (!ret)
		devfreq->dev_suspended = false;
	mutex_unlock(&devfreq->event_lock);
	return ret;
}
@@ -975,6 +984,10 @@ static ssize_t governor_store(struct device *dev, struct device_attribute *attr,
	}

	mutex_lock(&df->event_lock);
	if (df->dev_suspended) {
		ret = -EINVAL;
		goto gov_stop_out;
	}
	if (df->governor) {
		ret = df->governor->event_handler(df, DEVFREQ_GOV_STOP, NULL);
		if (ret) {
+1 −0
Original line number Diff line number Diff line
@@ -163,6 +163,7 @@ struct devfreq {
	unsigned long last_stat_updated;

	struct srcu_notifier_head transition_notifier_list;
	bool dev_suspended;
};

struct devfreq_freqs {