162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2004 Simtec Electronics 462306a36Sopenharmony_ci * http://armlinux.simtec.co.uk/ 562306a36Sopenharmony_ci * Written by Ben Dooks, <ben@simtec.co.uk> 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci/* s3c_pm_init 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci * called from board at initialisation time to setup the power 1162306a36Sopenharmony_ci * management 1262306a36Sopenharmony_ci*/ 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include "pm-common.h" 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cistruct device; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#ifdef CONFIG_SAMSUNG_PM 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ciextern __init int s3c_pm_init(void); 2162306a36Sopenharmony_ciextern __init int s3c64xx_pm_init(void); 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#else 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_cistatic inline int s3c_pm_init(void) 2662306a36Sopenharmony_ci{ 2762306a36Sopenharmony_ci return 0; 2862306a36Sopenharmony_ci} 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cistatic inline int s3c64xx_pm_init(void) 3162306a36Sopenharmony_ci{ 3262306a36Sopenharmony_ci return 0; 3362306a36Sopenharmony_ci} 3462306a36Sopenharmony_ci#endif 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci/* configuration for the IRQ mask over sleep */ 3762306a36Sopenharmony_ciextern unsigned long s3c_irqwake_intmask; 3862306a36Sopenharmony_ciextern unsigned long s3c_irqwake_eintmask; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci/* per-cpu sleep functions */ 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ciextern void (*pm_cpu_prep)(void); 4362306a36Sopenharmony_ciextern int (*pm_cpu_sleep)(unsigned long); 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci/* Flags for PM Control */ 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ciextern unsigned long s3c_pm_flags; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci/* from sleep.S */ 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ciextern int s3c2410_cpu_suspend(unsigned long); 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci#ifdef CONFIG_PM_SLEEP 5462306a36Sopenharmony_ciextern int s3c_irq_wake(struct irq_data *data, unsigned int state); 5562306a36Sopenharmony_ciextern void s3c_cpu_resume(void); 5662306a36Sopenharmony_ci#else 5762306a36Sopenharmony_ci#define s3c_irq_wake NULL 5862306a36Sopenharmony_ci#define s3c_cpu_resume NULL 5962306a36Sopenharmony_ci#endif 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci#ifdef CONFIG_SAMSUNG_PM 6262306a36Sopenharmony_ciextern int s3c_irqext_wake(struct irq_data *data, unsigned int state); 6362306a36Sopenharmony_ci#else 6462306a36Sopenharmony_ci#define s3c_irqext_wake NULL 6562306a36Sopenharmony_ci#endif 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci/** 6862306a36Sopenharmony_ci * s3c_pm_configure_extint() - ensure pins are correctly set for IRQ 6962306a36Sopenharmony_ci * 7062306a36Sopenharmony_ci * Setup all the necessary GPIO pins for waking the system on external 7162306a36Sopenharmony_ci * interrupt. 7262306a36Sopenharmony_ci */ 7362306a36Sopenharmony_ciextern void s3c_pm_configure_extint(void); 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci#ifdef CONFIG_GPIO_SAMSUNG 7662306a36Sopenharmony_ci/** 7762306a36Sopenharmony_ci * samsung_pm_restore_gpios() - restore the state of the gpios after sleep. 7862306a36Sopenharmony_ci * 7962306a36Sopenharmony_ci * Restore the state of the GPIO pins after sleep, which may involve ensuring 8062306a36Sopenharmony_ci * that we do not glitch the state of the pins from that the bootloader's 8162306a36Sopenharmony_ci * resume code has done. 8262306a36Sopenharmony_ci*/ 8362306a36Sopenharmony_ciextern void samsung_pm_restore_gpios(void); 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci/** 8662306a36Sopenharmony_ci * samsung_pm_save_gpios() - save the state of the GPIOs for restoring after sleep. 8762306a36Sopenharmony_ci * 8862306a36Sopenharmony_ci * Save the GPIO states for resotration on resume. See samsung_pm_restore_gpios(). 8962306a36Sopenharmony_ci */ 9062306a36Sopenharmony_ciextern void samsung_pm_save_gpios(void); 9162306a36Sopenharmony_ci#else 9262306a36Sopenharmony_cistatic inline void samsung_pm_restore_gpios(void) {} 9362306a36Sopenharmony_cistatic inline void samsung_pm_save_gpios(void) {} 9462306a36Sopenharmony_ci#endif 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ciextern void s3c_pm_save_core(void); 9762306a36Sopenharmony_ciextern void s3c_pm_restore_core(void); 98