1c6ff132dSArnd Bergmann /* SPDX-License-Identifier: GPL-2.0 */ 2c6ff132dSArnd Bergmann /* 3c6ff132dSArnd Bergmann * Copyright (c) 2004 Simtec Electronics 4c6ff132dSArnd Bergmann * http://armlinux.simtec.co.uk/ 5c6ff132dSArnd Bergmann * Written by Ben Dooks, <ben@simtec.co.uk> 6c6ff132dSArnd Bergmann */ 7c6ff132dSArnd Bergmann 8c6ff132dSArnd Bergmann /* s3c_pm_init 9c6ff132dSArnd Bergmann * 10c6ff132dSArnd Bergmann * called from board at initialisation time to setup the power 11c6ff132dSArnd Bergmann * management 12c6ff132dSArnd Bergmann */ 13c6ff132dSArnd Bergmann 14c6ff132dSArnd Bergmann #include "pm-common.h" 15c6ff132dSArnd Bergmann 16c6ff132dSArnd Bergmann struct device; 17c6ff132dSArnd Bergmann 18c6ff132dSArnd Bergmann #ifdef CONFIG_SAMSUNG_PM 19c6ff132dSArnd Bergmann 20c6ff132dSArnd Bergmann extern __init int s3c_pm_init(void); 21c6ff132dSArnd Bergmann extern __init int s3c64xx_pm_init(void); 22c6ff132dSArnd Bergmann 23c6ff132dSArnd Bergmann #else 24c6ff132dSArnd Bergmann 25c6ff132dSArnd Bergmann static inline int s3c_pm_init(void) 26c6ff132dSArnd Bergmann { 27c6ff132dSArnd Bergmann return 0; 28c6ff132dSArnd Bergmann } 29c6ff132dSArnd Bergmann 30c6ff132dSArnd Bergmann static inline int s3c64xx_pm_init(void) 31c6ff132dSArnd Bergmann { 32c6ff132dSArnd Bergmann return 0; 33c6ff132dSArnd Bergmann } 34c6ff132dSArnd Bergmann #endif 35c6ff132dSArnd Bergmann 36c6ff132dSArnd Bergmann /* configuration for the IRQ mask over sleep */ 37c6ff132dSArnd Bergmann extern unsigned long s3c_irqwake_intmask; 38c6ff132dSArnd Bergmann extern unsigned long s3c_irqwake_eintmask; 39c6ff132dSArnd Bergmann 40c6ff132dSArnd Bergmann /* per-cpu sleep functions */ 41c6ff132dSArnd Bergmann 42c6ff132dSArnd Bergmann extern void (*pm_cpu_prep)(void); 43c6ff132dSArnd Bergmann extern int (*pm_cpu_sleep)(unsigned long); 44c6ff132dSArnd Bergmann 45c6ff132dSArnd Bergmann /* Flags for PM Control */ 46c6ff132dSArnd Bergmann 47c6ff132dSArnd Bergmann extern unsigned long s3c_pm_flags; 48c6ff132dSArnd Bergmann 49c6ff132dSArnd Bergmann /* from sleep.S */ 50c6ff132dSArnd Bergmann 51c6ff132dSArnd Bergmann extern int s3c2410_cpu_suspend(unsigned long); 52c6ff132dSArnd Bergmann 53c6ff132dSArnd Bergmann #ifdef CONFIG_PM_SLEEP 54c6ff132dSArnd Bergmann extern int s3c_irq_wake(struct irq_data *data, unsigned int state); 55c6ff132dSArnd Bergmann extern void s3c_cpu_resume(void); 56c6ff132dSArnd Bergmann #else 57c6ff132dSArnd Bergmann #define s3c_irq_wake NULL 58c6ff132dSArnd Bergmann #define s3c_cpu_resume NULL 59c6ff132dSArnd Bergmann #endif 60c6ff132dSArnd Bergmann 61c6ff132dSArnd Bergmann #ifdef CONFIG_SAMSUNG_PM 62c6ff132dSArnd Bergmann extern int s3c_irqext_wake(struct irq_data *data, unsigned int state); 63c6ff132dSArnd Bergmann #else 64c6ff132dSArnd Bergmann #define s3c_irqext_wake NULL 65c6ff132dSArnd Bergmann #endif 66c6ff132dSArnd Bergmann 67c6ff132dSArnd Bergmann #ifdef CONFIG_S3C_PM_DEBUG_LED_SMDK 68c6ff132dSArnd Bergmann /** 69c6ff132dSArnd Bergmann * s3c_pm_debug_smdkled() - Debug PM suspend/resume via SMDK Board LEDs 70c6ff132dSArnd Bergmann * @set: set bits for the state of the LEDs 71c6ff132dSArnd Bergmann * @clear: clear bits for the state of the LEDs. 72c6ff132dSArnd Bergmann */ 73c6ff132dSArnd Bergmann extern void s3c_pm_debug_smdkled(u32 set, u32 clear); 74c6ff132dSArnd Bergmann 75c6ff132dSArnd Bergmann #else 76c6ff132dSArnd Bergmann static inline void s3c_pm_debug_smdkled(u32 set, u32 clear) { } 77c6ff132dSArnd Bergmann #endif /* CONFIG_S3C_PM_DEBUG_LED_SMDK */ 78c6ff132dSArnd Bergmann 79c6ff132dSArnd Bergmann /** 80c6ff132dSArnd Bergmann * s3c_pm_configure_extint() - ensure pins are correctly set for IRQ 81c6ff132dSArnd Bergmann * 82c6ff132dSArnd Bergmann * Setup all the necessary GPIO pins for waking the system on external 83c6ff132dSArnd Bergmann * interrupt. 84c6ff132dSArnd Bergmann */ 85c6ff132dSArnd Bergmann extern void s3c_pm_configure_extint(void); 86c6ff132dSArnd Bergmann 87c6ff132dSArnd Bergmann #ifdef CONFIG_GPIO_SAMSUNG 88c6ff132dSArnd Bergmann /** 89c6ff132dSArnd Bergmann * samsung_pm_restore_gpios() - restore the state of the gpios after sleep. 90c6ff132dSArnd Bergmann * 91c6ff132dSArnd Bergmann * Restore the state of the GPIO pins after sleep, which may involve ensuring 92c6ff132dSArnd Bergmann * that we do not glitch the state of the pins from that the bootloader's 93c6ff132dSArnd Bergmann * resume code has done. 94c6ff132dSArnd Bergmann */ 95c6ff132dSArnd Bergmann extern void samsung_pm_restore_gpios(void); 96c6ff132dSArnd Bergmann 97c6ff132dSArnd Bergmann /** 98c6ff132dSArnd Bergmann * samsung_pm_save_gpios() - save the state of the GPIOs for restoring after sleep. 99c6ff132dSArnd Bergmann * 100c6ff132dSArnd Bergmann * Save the GPIO states for resotration on resume. See samsung_pm_restore_gpios(). 101c6ff132dSArnd Bergmann */ 102c6ff132dSArnd Bergmann extern void samsung_pm_save_gpios(void); 103c6ff132dSArnd Bergmann #else 104c6ff132dSArnd Bergmann static inline void samsung_pm_restore_gpios(void) {} 105c6ff132dSArnd Bergmann static inline void samsung_pm_save_gpios(void) {} 106c6ff132dSArnd Bergmann #endif 107c6ff132dSArnd Bergmann 108c6ff132dSArnd Bergmann extern void s3c_pm_save_core(void); 109c6ff132dSArnd Bergmann extern void s3c_pm_restore_core(void); 110