diff options
| author | Tony Lindgren <tony@atomide.com> | 2011-03-10 18:54:14 -0800 | 
|---|---|---|
| committer | Tony Lindgren <tony@atomide.com> | 2011-03-10 18:54:14 -0800 | 
| commit | 94a06b74e724caabcf0464c81527cfbcae0c8aff (patch) | |
| tree | 3570b6a627382a5eb5c8328b4959f615544d8e62 /arch/arm/mach-omap2/board-omap3beagle.c | |
| parent | 0dde52a9f5330eec240660191a94b51bd911ffcd (diff) | |
| parent | 9062511097683b4422f023d181b4a8b2db1a7a72 (diff) | |
| download | olio-linux-3.10-94a06b74e724caabcf0464c81527cfbcae0c8aff.tar.xz olio-linux-3.10-94a06b74e724caabcf0464c81527cfbcae0c8aff.zip  | |
Merge branch 'for_2.6.39/pm-misc' of ssh://master.kernel.org/pub/scm/linux/kernel/git/khilman/linux-omap-pm into omap-for-linus
Diffstat (limited to 'arch/arm/mach-omap2/board-omap3beagle.c')
| -rw-r--r-- | arch/arm/mach-omap2/board-omap3beagle.c | 50 | 
1 files changed, 50 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index b6752ac5b97..20c5dbea895 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -23,6 +23,7 @@  #include <linux/gpio.h>  #include <linux/input.h>  #include <linux/gpio_keys.h> +#include <linux/opp.h>  #include <linux/mtd/mtd.h>  #include <linux/mtd/partitions.h> @@ -45,10 +46,12 @@  #include <plat/gpmc.h>  #include <plat/nand.h>  #include <plat/usb.h> +#include <plat/omap_device.h>  #include "mux.h"  #include "hsmmc.h"  #include "timer-gp.h" +#include "pm.h"  #define NAND_BLOCK_SIZE		SZ_128K @@ -603,6 +606,52 @@ static struct omap_musb_board_data musb_board_data = {  	.power			= 100,  }; +static void __init beagle_opp_init(void) +{ +	int r = 0; + +	/* Initialize the omap3 opp table */ +	if (omap3_opp_init()) { +		pr_err("%s: opp default init failed\n", __func__); +		return; +	} + +	/* Custom OPP enabled for XM */ +	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) { +		struct omap_hwmod *mh = omap_hwmod_lookup("mpu"); +		struct omap_hwmod *dh = omap_hwmod_lookup("iva"); +		struct device *dev; + +		if (!mh || !dh) { +			pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n", +				__func__, mh, dh); +			return; +		} +		/* Enable MPU 1GHz and lower opps */ +		dev = &mh->od->pdev.dev; +		r = opp_enable(dev, 800000000); +		/* TODO: MPU 1GHz needs SR and ABB */ + +		/* Enable IVA 800MHz and lower opps */ +		dev = &dh->od->pdev.dev; +		r |= opp_enable(dev, 660000000); +		/* TODO: DSP 800MHz needs SR and ABB */ +		if (r) { +			pr_err("%s: failed to enable higher opp %d\n", +				__func__, r); +			/* +			 * Cleanup - disable the higher freqs - we dont care +			 * about the results +			 */ +			dev = &mh->od->pdev.dev; +			opp_disable(dev, 800000000); +			dev = &dh->od->pdev.dev; +			opp_disable(dev, 660000000); +		} +	} +	return; +} +  static void __init omap3_beagle_init(void)  {  	omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); @@ -627,6 +676,7 @@ static void __init omap3_beagle_init(void)  	omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);  	beagle_display_init(); +	beagle_opp_init();  }  MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")  |