Loading drivers/devfreq/devfreq.c +17 −4 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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; } Loading @@ -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; } Loading Loading @@ -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) { Loading include/linux/devfreq.h +1 −0 Original line number Diff line number Diff line Loading @@ -163,6 +163,7 @@ struct devfreq { unsigned long last_stat_updated; struct srcu_notifier_head transition_notifier_list; bool dev_suspended; }; struct devfreq_freqs { Loading Loading
drivers/devfreq/devfreq.c +17 −4 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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; } Loading @@ -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; } Loading Loading @@ -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) { Loading
include/linux/devfreq.h +1 −0 Original line number Diff line number Diff line Loading @@ -163,6 +163,7 @@ struct devfreq { unsigned long last_stat_updated; struct srcu_notifier_head transition_notifier_list; bool dev_suspended; }; struct devfreq_freqs { Loading