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