forked from Minki/linux
2e4b62dc5e
In omap2_common_pm_late_init suspend_set_ops was called to set common suspend handling functions for all omap platforms. This created two problems. First, these suspend ops were being set for all platforms, regardless of whether or not suspend support has been integrated so in the case of AM33XX, suspend to mem was presented as available but failed every time. Second, some platforms will need to define a completely separate set of suspend ops, such as AM33XX, due to differences from previous omap platforms so there is no need to always set the common omap ops. This patch moves the suspend_set_ops call from omap2_common_pm_late_init into a separate function that then gets called in the omap*_pm_init functions for each platform. Signed-off-by: Dave Gerlach <d-gerlach@ti.com> Signed-off-by: Tony Lindgren <tony@atomide.com>
157 lines
4.1 KiB
C
157 lines
4.1 KiB
C
/*
|
|
* OMAP2/3 Power Management Routines
|
|
*
|
|
* Copyright (C) 2008 Nokia Corporation
|
|
* Jouni Hogander
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
#ifndef __ARCH_ARM_MACH_OMAP2_PM_H
|
|
#define __ARCH_ARM_MACH_OMAP2_PM_H
|
|
|
|
#include <linux/err.h>
|
|
|
|
#include "powerdomain.h"
|
|
|
|
#ifdef CONFIG_CPU_IDLE
|
|
extern int __init omap3_idle_init(void);
|
|
extern int __init omap4_idle_init(void);
|
|
#else
|
|
static inline int omap3_idle_init(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int omap4_idle_init(void)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
extern void *omap3_secure_ram_storage;
|
|
extern void omap3_pm_off_mode_enable(int);
|
|
extern void omap_sram_idle(void);
|
|
extern int omap_pm_clkdms_setup(struct clockdomain *clkdm, void *unused);
|
|
|
|
#if defined(CONFIG_PM_OPP)
|
|
extern int omap3_opp_init(void);
|
|
extern int omap4_opp_init(void);
|
|
#else
|
|
static inline int omap3_opp_init(void)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
static inline int omap4_opp_init(void)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
#endif
|
|
|
|
extern int omap3_pm_get_suspend_state(struct powerdomain *pwrdm);
|
|
extern int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state);
|
|
|
|
#ifdef CONFIG_PM_DEBUG
|
|
extern u32 enable_off_mode;
|
|
#else
|
|
#define enable_off_mode 0
|
|
#endif
|
|
|
|
#if defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS)
|
|
extern void pm_dbg_update_time(struct powerdomain *pwrdm, int prev);
|
|
#else
|
|
#define pm_dbg_update_time(pwrdm, prev) do {} while (0);
|
|
#endif /* CONFIG_PM_DEBUG */
|
|
|
|
/* 24xx */
|
|
extern void omap24xx_idle_loop_suspend(void);
|
|
extern unsigned int omap24xx_idle_loop_suspend_sz;
|
|
|
|
extern void omap24xx_cpu_suspend(u32 dll_ctrl, void __iomem *sdrc_dlla_ctrl,
|
|
void __iomem *sdrc_power);
|
|
extern unsigned int omap24xx_cpu_suspend_sz;
|
|
|
|
/* 3xxx */
|
|
extern void omap34xx_cpu_suspend(int save_state);
|
|
|
|
/* omap3_do_wfi function pointer and size, for copy to SRAM */
|
|
extern void omap3_do_wfi(void);
|
|
extern unsigned int omap3_do_wfi_sz;
|
|
/* ... and its pointer from SRAM after copy */
|
|
extern void (*omap3_do_wfi_sram)(void);
|
|
|
|
/* save_secure_ram_context function pointer and size, for copy to SRAM */
|
|
extern int save_secure_ram_context(u32 *addr);
|
|
extern unsigned int save_secure_ram_context_sz;
|
|
|
|
extern void omap3_save_scratchpad_contents(void);
|
|
|
|
#define PM_RTA_ERRATUM_i608 (1 << 0)
|
|
#define PM_SDRC_WAKEUP_ERRATUM_i583 (1 << 1)
|
|
#define PM_PER_MEMORIES_ERRATUM_i582 (1 << 2)
|
|
|
|
#if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP3)
|
|
extern u16 pm34xx_errata;
|
|
#define IS_PM34XX_ERRATUM(id) (pm34xx_errata & (id))
|
|
extern void enable_omap3630_toggle_l2_on_restore(void);
|
|
#else
|
|
#define IS_PM34XX_ERRATUM(id) 0
|
|
static inline void enable_omap3630_toggle_l2_on_restore(void) { }
|
|
#endif /* defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP3) */
|
|
|
|
#define PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD (1 << 0)
|
|
|
|
#if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP4)
|
|
extern u16 pm44xx_errata;
|
|
#define IS_PM44XX_ERRATUM(id) (pm44xx_errata & (id))
|
|
#else
|
|
#define IS_PM44XX_ERRATUM(id) 0
|
|
#endif
|
|
|
|
#ifdef CONFIG_POWER_AVS_OMAP
|
|
extern int omap_devinit_smartreflex(void);
|
|
extern void omap_enable_smartreflex_on_init(void);
|
|
#else
|
|
static inline int omap_devinit_smartreflex(void)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
|
|
static inline void omap_enable_smartreflex_on_init(void) {}
|
|
#endif
|
|
|
|
#ifdef CONFIG_TWL4030_CORE
|
|
extern int omap3_twl_init(void);
|
|
extern int omap4_twl_init(void);
|
|
extern int omap3_twl_set_sr_bit(bool enable);
|
|
#else
|
|
static inline int omap3_twl_init(void)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
static inline int omap4_twl_init(void)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
#endif
|
|
|
|
#ifdef CONFIG_PM
|
|
extern void omap_pm_setup_oscillator(u32 tstart, u32 tshut);
|
|
extern void omap_pm_get_oscillator(u32 *tstart, u32 *tshut);
|
|
extern void omap_pm_setup_sr_i2c_pcb_length(u32 mm);
|
|
#else
|
|
static inline void omap_pm_setup_oscillator(u32 tstart, u32 tshut) { }
|
|
static inline void omap_pm_get_oscillator(u32 *tstart, u32 *tshut) { *tstart = *tshut = 0; }
|
|
static inline void omap_pm_setup_sr_i2c_pcb_length(u32 mm) { }
|
|
#endif
|
|
|
|
#ifdef CONFIG_SUSPEND
|
|
void omap_common_suspend_init(void *pm_suspend);
|
|
#else
|
|
static inline void omap_common_suspend_init(void *pm_suspend)
|
|
{
|
|
}
|
|
#endif /* CONFIG_SUSPEND */
|
|
#endif
|