• Viresh Kumar's avatar
    cpufreq: cpu0: Move per-cluster initialization code to ->init() · d2f31f1d
    Viresh Kumar authored
    Currently this driver only support platforms on which all CPUs share clock &
    voltage lines and there is requirement to support platforms which have separate
    clock & voltage lines for CPUs, like Qualcomm's Krait and ARM's big LITTLE.
    
    Each group of CPUs sharing clock/voltage lines are represented by 'struct
    cpufreq_policy' in cpufreq framework. And core calls ->init() once for each
    policy.
    
    Currently we do all initialization/allocation from probe() which wouldn't work
    for above scenario. To make it work for these platforms, the first step is to
    move all initialization/allocation to ->init() and add ->exit() to do the
    reverse of it.
    
    Also, remove all global variables and allocate space for them at runtime.
    
    This patch creates 'struct private_data' for keeping all such information and
    a pointer to that would be stored in policy->driver_data.
    
    The changed probe() routine now tries to see if regulator/clocks are available
    or we need to defer probe. In case they are available, it registers cpufreq
    driver. Otherwise, returns with -EPROBE_DEFER.
    
    We still *don't* support platforms with separate clock/voltage lines for CPUs.
    This would be done in a separate patch later.
    Tested-by: default avatarStephen Boyd <sboyd@codeaurora.org>
    Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    d2f31f1d
cpufreq-cpu0.c 8.79 KB