diff options
Diffstat (limited to 'arch/arm/mach-omap2/pm.c')
| -rw-r--r-- | arch/arm/mach-omap2/pm.c | 67 | 
1 files changed, 38 insertions, 29 deletions
diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index e742118fcfd..828aee9ea6a 100644 --- a/arch/arm/mach-omap2/pm.c +++ b/arch/arm/mach-omap2/pm.c @@ -13,7 +13,7 @@  #include <linux/init.h>  #include <linux/io.h>  #include <linux/err.h> -#include <linux/opp.h> +#include <linux/pm_opp.h>  #include <linux/export.h>  #include <linux/suspend.h>  #include <linux/cpu.h> @@ -32,11 +32,13 @@  #include "pm.h"  #include "twl-common.h" +#ifdef CONFIG_SUSPEND  /*   * omap_pm_suspend: points to a function that does the SoC-specific   * suspend work   */ -int (*omap_pm_suspend)(void); +static int (*omap_pm_suspend)(void); +#endif  #ifdef CONFIG_PM  /** @@ -131,7 +133,7 @@ static int __init omap2_set_init_voltage(char *vdd_name, char *clk_name,  {  	struct voltagedomain *voltdm;  	struct clk *clk; -	struct opp *opp; +	struct dev_pm_opp *opp;  	unsigned long freq, bootup_volt;  	struct device *dev; @@ -172,7 +174,7 @@ static int __init omap2_set_init_voltage(char *vdd_name, char *clk_name,  	clk_put(clk);  	rcu_read_lock(); -	opp = opp_find_freq_ceil(dev, &freq); +	opp = dev_pm_opp_find_freq_ceil(dev, &freq);  	if (IS_ERR(opp)) {  		rcu_read_unlock();  		pr_err("%s: unable to find boot up OPP for vdd_%s\n", @@ -180,7 +182,7 @@ static int __init omap2_set_init_voltage(char *vdd_name, char *clk_name,  		goto exit;  	} -	bootup_volt = opp_get_voltage(opp); +	bootup_volt = dev_pm_opp_get_voltage(opp);  	rcu_read_unlock();  	if (!bootup_volt) {  		pr_err("%s: unable to find voltage corresponding to the bootup OPP for vdd_%s\n", @@ -243,6 +245,15 @@ static const struct platform_suspend_ops omap_pm_ops = {  	.valid		= suspend_valid_only_mem,  }; +/** + * omap_common_suspend_init - Set common suspend routines for OMAP SoCs + * @pm_suspend: function pointer to SoC specific suspend function + */ +void omap_common_suspend_init(void *pm_suspend) +{ +	omap_pm_suspend = pm_suspend; +	suspend_set_ops(&omap_pm_ops); +}  #endif /* CONFIG_SUSPEND */  static void __init omap3_init_voltages(void) @@ -266,7 +277,12 @@ static void __init omap4_init_voltages(void)  static inline void omap_init_cpufreq(void)  { -	struct platform_device_info devinfo = { .name = "omap-cpufreq", }; +	struct platform_device_info devinfo = { }; + +	if (!of_have_populated_dt()) +		devinfo.name = "omap-cpufreq"; +	else +		devinfo.name = "cpufreq-cpu0";  	platform_device_register_full(&devinfo);  } @@ -282,31 +298,24 @@ omap_postcore_initcall(omap2_common_pm_init);  int __init omap2_common_pm_late_init(void)  { -	/* -	 * In the case of DT, the PMIC and SR initialization will be done using -	 * a completely different mechanism. -	 * Disable this part if a DT blob is available. -	 */ -	if (!of_have_populated_dt()) { - -		/* Init the voltage layer */ -		omap_pmic_late_init(); -		omap_voltage_late_init(); - -		/* Initialize the voltages */ -		omap3_init_voltages(); -		omap4_init_voltages(); - -		/* Smartreflex device init */ -		omap_devinit_smartreflex(); - -		/* cpufreq dummy device instantiation */ -		omap_init_cpufreq(); +	if (of_have_populated_dt()) { +		omap3_twl_init(); +		omap4_twl_init();  	} -#ifdef CONFIG_SUSPEND -	suspend_set_ops(&omap_pm_ops); -#endif +	/* Init the voltage layer */ +	omap_pmic_late_init(); +	omap_voltage_late_init(); + +	/* Initialize the voltages */ +	omap3_init_voltages(); +	omap4_init_voltages(); + +	/* Smartreflex device init */ +	omap_devinit_smartreflex(); + +	/* cpufreq dummy device instantiation */ +	omap_init_cpufreq();  	return 0;  }  | 
