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 s3c_pm_init(void)25c6ff132dSArnd Bergmannstatic inline int s3c_pm_init(void) 26c6ff132dSArnd Bergmann { 27c6ff132dSArnd Bergmann return 0; 28c6ff132dSArnd Bergmann } 29c6ff132dSArnd Bergmann s3c64xx_pm_init(void)30c6ff132dSArnd Bergmannstatic 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 /** 68c6ff132dSArnd Bergmann * s3c_pm_configure_extint() - ensure pins are correctly set for IRQ 69c6ff132dSArnd Bergmann * 70c6ff132dSArnd Bergmann * Setup all the necessary GPIO pins for waking the system on external 71c6ff132dSArnd Bergmann * interrupt. 72c6ff132dSArnd Bergmann */ 73c6ff132dSArnd Bergmann extern void s3c_pm_configure_extint(void); 74c6ff132dSArnd Bergmann 75c6ff132dSArnd Bergmann #ifdef CONFIG_GPIO_SAMSUNG 76c6ff132dSArnd Bergmann /** 77c6ff132dSArnd Bergmann * samsung_pm_restore_gpios() - restore the state of the gpios after sleep. 78c6ff132dSArnd Bergmann * 79c6ff132dSArnd Bergmann * Restore the state of the GPIO pins after sleep, which may involve ensuring 80c6ff132dSArnd Bergmann * that we do not glitch the state of the pins from that the bootloader's 81c6ff132dSArnd Bergmann * resume code has done. 82c6ff132dSArnd Bergmann */ 83c6ff132dSArnd Bergmann extern void samsung_pm_restore_gpios(void); 84c6ff132dSArnd Bergmann 85c6ff132dSArnd Bergmann /** 86c6ff132dSArnd Bergmann * samsung_pm_save_gpios() - save the state of the GPIOs for restoring after sleep. 87c6ff132dSArnd Bergmann * 88c6ff132dSArnd Bergmann * Save the GPIO states for resotration on resume. See samsung_pm_restore_gpios(). 89c6ff132dSArnd Bergmann */ 90c6ff132dSArnd Bergmann extern void samsung_pm_save_gpios(void); 91c6ff132dSArnd Bergmann #else samsung_pm_restore_gpios(void)92c6ff132dSArnd Bergmannstatic inline void samsung_pm_restore_gpios(void) {} samsung_pm_save_gpios(void)93c6ff132dSArnd Bergmannstatic inline void samsung_pm_save_gpios(void) {} 94c6ff132dSArnd Bergmann #endif 95c6ff132dSArnd Bergmann 96c6ff132dSArnd Bergmann extern void s3c_pm_save_core(void); 97c6ff132dSArnd Bergmann extern void s3c_pm_restore_core(void); 98