diff options
Diffstat (limited to 'arch/arm/mach-omap2/pm24xx.c')
-rw-r--r-- | arch/arm/mach-omap2/pm24xx.c | 85 |
1 files changed, 9 insertions, 76 deletions
diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c index 97feb3ab6a69..df3ded6fe194 100644 --- a/arch/arm/mach-omap2/pm24xx.c +++ b/arch/arm/mach-omap2/pm24xx.c | |||
@@ -363,14 +363,11 @@ static const struct platform_suspend_ops __initdata omap_pm_ops; | |||
363 | /* XXX This function should be shareable between OMAP2xxx and OMAP3 */ | 363 | /* XXX This function should be shareable between OMAP2xxx and OMAP3 */ |
364 | static int __init clkdms_setup(struct clockdomain *clkdm, void *unused) | 364 | static int __init clkdms_setup(struct clockdomain *clkdm, void *unused) |
365 | { | 365 | { |
366 | clkdm_clear_all_wkdeps(clkdm); | ||
367 | clkdm_clear_all_sleepdeps(clkdm); | ||
368 | |||
369 | if (clkdm->flags & CLKDM_CAN_ENABLE_AUTO) | 366 | if (clkdm->flags & CLKDM_CAN_ENABLE_AUTO) |
370 | omap2_clkdm_allow_idle(clkdm); | 367 | clkdm_allow_idle(clkdm); |
371 | else if (clkdm->flags & CLKDM_CAN_FORCE_SLEEP && | 368 | else if (clkdm->flags & CLKDM_CAN_FORCE_SLEEP && |
372 | atomic_read(&clkdm->usecount) == 0) | 369 | atomic_read(&clkdm->usecount) == 0) |
373 | omap2_clkdm_sleep(clkdm); | 370 | clkdm_sleep(clkdm); |
374 | return 0; | 371 | return 0; |
375 | } | 372 | } |
376 | 373 | ||
@@ -379,7 +376,10 @@ static void __init prcm_setup_regs(void) | |||
379 | int i, num_mem_banks; | 376 | int i, num_mem_banks; |
380 | struct powerdomain *pwrdm; | 377 | struct powerdomain *pwrdm; |
381 | 378 | ||
382 | /* Enable autoidle */ | 379 | /* |
380 | * Enable autoidle | ||
381 | * XXX This should be handled by hwmod code or PRCM init code | ||
382 | */ | ||
383 | omap2_prm_write_mod_reg(OMAP24XX_AUTOIDLE_MASK, OCP_MOD, | 383 | omap2_prm_write_mod_reg(OMAP24XX_AUTOIDLE_MASK, OCP_MOD, |
384 | OMAP2_PRCM_SYSCONFIG_OFFSET); | 384 | OMAP2_PRCM_SYSCONFIG_OFFSET); |
385 | 385 | ||
@@ -405,83 +405,16 @@ static void __init prcm_setup_regs(void) | |||
405 | 405 | ||
406 | pwrdm = clkdm_get_pwrdm(dsp_clkdm); | 406 | pwrdm = clkdm_get_pwrdm(dsp_clkdm); |
407 | pwrdm_set_next_pwrst(pwrdm, PWRDM_POWER_OFF); | 407 | pwrdm_set_next_pwrst(pwrdm, PWRDM_POWER_OFF); |
408 | omap2_clkdm_sleep(dsp_clkdm); | 408 | clkdm_sleep(dsp_clkdm); |
409 | 409 | ||
410 | pwrdm = clkdm_get_pwrdm(gfx_clkdm); | 410 | pwrdm = clkdm_get_pwrdm(gfx_clkdm); |
411 | pwrdm_set_next_pwrst(pwrdm, PWRDM_POWER_OFF); | 411 | pwrdm_set_next_pwrst(pwrdm, PWRDM_POWER_OFF); |
412 | omap2_clkdm_sleep(gfx_clkdm); | 412 | clkdm_sleep(gfx_clkdm); |
413 | 413 | ||
414 | /* | 414 | /* Enable hardware-supervised idle for all clkdms */ |
415 | * Clear clockdomain wakeup dependencies and enable | ||
416 | * hardware-supervised idle for all clkdms | ||
417 | */ | ||
418 | clkdm_for_each(clkdms_setup, NULL); | 415 | clkdm_for_each(clkdms_setup, NULL); |
419 | clkdm_add_wkdep(mpu_clkdm, wkup_clkdm); | 416 | clkdm_add_wkdep(mpu_clkdm, wkup_clkdm); |
420 | 417 | ||
421 | /* Enable clock autoidle for all domains */ | ||
422 | omap2_cm_write_mod_reg(OMAP24XX_AUTO_CAM_MASK | | ||
423 | OMAP24XX_AUTO_MAILBOXES_MASK | | ||
424 | OMAP24XX_AUTO_WDT4_MASK | | ||
425 | OMAP2420_AUTO_WDT3_MASK | | ||
426 | OMAP24XX_AUTO_MSPRO_MASK | | ||
427 | OMAP2420_AUTO_MMC_MASK | | ||
428 | OMAP24XX_AUTO_FAC_MASK | | ||
429 | OMAP2420_AUTO_EAC_MASK | | ||
430 | OMAP24XX_AUTO_HDQ_MASK | | ||
431 | OMAP24XX_AUTO_UART2_MASK | | ||
432 | OMAP24XX_AUTO_UART1_MASK | | ||
433 | OMAP24XX_AUTO_I2C2_MASK | | ||
434 | OMAP24XX_AUTO_I2C1_MASK | | ||
435 | OMAP24XX_AUTO_MCSPI2_MASK | | ||
436 | OMAP24XX_AUTO_MCSPI1_MASK | | ||
437 | OMAP24XX_AUTO_MCBSP2_MASK | | ||
438 | OMAP24XX_AUTO_MCBSP1_MASK | | ||
439 | OMAP24XX_AUTO_GPT12_MASK | | ||
440 | OMAP24XX_AUTO_GPT11_MASK | | ||
441 | OMAP24XX_AUTO_GPT10_MASK | | ||
442 | OMAP24XX_AUTO_GPT9_MASK | | ||
443 | OMAP24XX_AUTO_GPT8_MASK | | ||
444 | OMAP24XX_AUTO_GPT7_MASK | | ||
445 | OMAP24XX_AUTO_GPT6_MASK | | ||
446 | OMAP24XX_AUTO_GPT5_MASK | | ||
447 | OMAP24XX_AUTO_GPT4_MASK | | ||
448 | OMAP24XX_AUTO_GPT3_MASK | | ||
449 | OMAP24XX_AUTO_GPT2_MASK | | ||
450 | OMAP2420_AUTO_VLYNQ_MASK | | ||
451 | OMAP24XX_AUTO_DSS_MASK, | ||
452 | CORE_MOD, CM_AUTOIDLE1); | ||
453 | omap2_cm_write_mod_reg(OMAP24XX_AUTO_UART3_MASK | | ||
454 | OMAP24XX_AUTO_SSI_MASK | | ||
455 | OMAP24XX_AUTO_USB_MASK, | ||
456 | CORE_MOD, CM_AUTOIDLE2); | ||
457 | omap2_cm_write_mod_reg(OMAP24XX_AUTO_SDRC_MASK | | ||
458 | OMAP24XX_AUTO_GPMC_MASK | | ||
459 | OMAP24XX_AUTO_SDMA_MASK, | ||
460 | CORE_MOD, CM_AUTOIDLE3); | ||
461 | omap2_cm_write_mod_reg(OMAP24XX_AUTO_PKA_MASK | | ||
462 | OMAP24XX_AUTO_AES_MASK | | ||
463 | OMAP24XX_AUTO_RNG_MASK | | ||
464 | OMAP24XX_AUTO_SHA_MASK | | ||
465 | OMAP24XX_AUTO_DES_MASK, | ||
466 | CORE_MOD, OMAP24XX_CM_AUTOIDLE4); | ||
467 | |||
468 | omap2_cm_write_mod_reg(OMAP2420_AUTO_DSP_IPI_MASK, OMAP24XX_DSP_MOD, | ||
469 | CM_AUTOIDLE); | ||
470 | |||
471 | /* Put DPLL and both APLLs into autoidle mode */ | ||
472 | omap2_cm_write_mod_reg((0x03 << OMAP24XX_AUTO_DPLL_SHIFT) | | ||
473 | (0x03 << OMAP24XX_AUTO_96M_SHIFT) | | ||
474 | (0x03 << OMAP24XX_AUTO_54M_SHIFT), | ||
475 | PLL_MOD, CM_AUTOIDLE); | ||
476 | |||
477 | omap2_cm_write_mod_reg(OMAP24XX_AUTO_OMAPCTRL_MASK | | ||
478 | OMAP24XX_AUTO_WDT1_MASK | | ||
479 | OMAP24XX_AUTO_MPU_WDT_MASK | | ||
480 | OMAP24XX_AUTO_GPIOS_MASK | | ||
481 | OMAP24XX_AUTO_32KSYNC_MASK | | ||
482 | OMAP24XX_AUTO_GPT1_MASK, | ||
483 | WKUP_MOD, CM_AUTOIDLE); | ||
484 | |||
485 | /* REVISIT: Configure number of 32 kHz clock cycles for sys_clk | 418 | /* REVISIT: Configure number of 32 kHz clock cycles for sys_clk |
486 | * stabilisation */ | 419 | * stabilisation */ |
487 | omap2_prm_write_mod_reg(15 << OMAP_SETUP_TIME_SHIFT, OMAP24XX_GR_MOD, | 420 | omap2_prm_write_mod_reg(15 << OMAP_SETUP_TIME_SHIFT, OMAP24XX_GR_MOD, |