lkml.org 
[lkml]   [2014]   [Feb]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V5 4/7] cpufreq: Implement cpufreq_generic_suspend()
    Date
    Multiple platforms need to set CPU to a particular frequency before suspending
    system. And so they need a common infrastructure which is provided by this
    patch. Those platforms just need to initialize their ->suspend() pointers with
    the generic routine.

    Tested-by: Stephen Warren <swarren@nvidia.com>
    Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
    ---
    drivers/cpufreq/cpufreq.c | 26 ++++++++++++++++++++++++++
    include/linux/cpufreq.h | 3 +++
    2 files changed, 29 insertions(+)

    diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
    index 87a4b96..c13c100 100644
    --- a/drivers/cpufreq/cpufreq.c
    +++ b/drivers/cpufreq/cpufreq.c
    @@ -1579,6 +1579,32 @@ static struct subsys_interface cpufreq_interface = {
    .remove_dev = cpufreq_remove_dev,
    };

    +/*
    + * In case platform wants some specific frequency to be configured
    + * during suspend..
    + */
    +int cpufreq_generic_suspend(struct cpufreq_policy *policy)
    +{
    + int ret;
    +
    + if (!policy->suspend_freq) {
    + pr_err("%s: suspend_freq can't be zero\n", __func__);
    + return -EINVAL;
    + }
    +
    + pr_debug("%s: Setting suspend-freq: %u\n", __func__,
    + policy->suspend_freq);
    +
    + ret = __cpufreq_driver_target(policy, policy->suspend_freq,
    + CPUFREQ_RELATION_H);
    + if (ret)
    + pr_err("%s: unable to set suspend-freq: %u. err: %d\n",
    + __func__, policy->suspend_freq, ret);
    +
    + return ret;
    +}
    +EXPORT_SYMBOL(cpufreq_generic_suspend);
    +
    /**
    * cpufreq_suspend() - Suspend CPUFreq governors
    *
    diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
    index 94ed907..325bab0 100644
    --- a/include/linux/cpufreq.h
    +++ b/include/linux/cpufreq.h
    @@ -74,6 +74,8 @@ struct cpufreq_policy {
    unsigned int max; /* in kHz */
    unsigned int cur; /* in kHz, only needed if cpufreq
    * governors are used */
    + unsigned int suspend_freq; /* freq to set during suspend */
    +
    unsigned int policy; /* see above */
    struct cpufreq_governor *governor; /* see below */
    void *governor_data;
    @@ -299,6 +301,7 @@ cpufreq_verify_within_cpu_limits(struct cpufreq_policy *policy)
    #ifdef CONFIG_CPU_FREQ
    void cpufreq_suspend(void);
    void cpufreq_resume(void);
    +int cpufreq_generic_suspend(struct cpufreq_policy *policy);
    #else
    static inline void cpufreq_suspend(void) {}
    static inline void cpufreq_resume(void) {}
    --
    1.7.12.rc2.18.g61b472e


    \
     
     \ /
      Last update: 2014-02-13 08:41    [W:4.138 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site