blob: c6e1810e56b8d58818ffeba8973a2b11675e5185 [file] [log] [blame]
/*
* Copyright (c) 2017, Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of the Intel Corporation nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL CORPORATION OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __POWER_STATES_H__
#define __POWER_STATES_H__
#include "qm_common.h"
#include "qm_soc_regs.h"
/**
* Power mode control for Quark D2000 Microcontrollers.
*
* @defgroup groupD2000Power Quark D2000 Power states
* @{
*/
/**
* Wake source for deep sleep mode type.
*/
typedef enum {
/** Use GPIO/Comparator as wake source. */
QM_POWER_WAKE_FROM_GPIO_COMP,
QM_POWER_WAKE_FROM_RTC, /**< Use RTC as wake source. */
} qm_power_wake_event_t;
/**
* Put CPU in halt state.
*
* Halts the CPU until next interrupt or reset.
*
* This function can be called with interrupts disabled.
* Interrupts will be enabled before triggering the transition.
*/
void qm_power_cpu_halt(void);
/**
* Put SoC to sleep.
*
* Enter into sleep mode. The hybrid oscillator is disabled, most peripherals
* are disabled and the voltage regulator is set into retention mode.
* The following peripherals are disabled in this mode:
* - I2C
* - SPI
* - GPIO debouncing
* - Watchdog timer
* - PWM / Timers
* - UART
*
* The SoC operates from the 32 kHz clock source and the following peripherals
* may bring the SoC back into an active state:
*
* - GPIO interrupts
* - AON Timers
* - RTC
* - Low power comparators
*/
void qm_power_soc_sleep();
/**
* Put SoC to deep sleep.
*
* Enter into deep sleep mode. All clocks are gated. The Wake source for this
* function depends on the input parameter, QM_POWER_WAKE_FROM_GPIO_COMP will
* enable waking from GPIO or comparator pins and QM_POWER_WAKE_FROM_RTC will
* enable waking from the RTC.
*
* @param[in] wake_event Select wake source for deep sleep mode.
*/
void qm_power_soc_deep_sleep(const qm_power_wake_event_t wake_event);
/**
* Restore system state after sleep or deep sleep.
*
* On wakeup, the system is restored to the previous state before
* qm_power_soc_sleep() or qm_power_soc_deep_sleep() was called.
*/
void qm_power_soc_restore(void);
/**
* Retention alternator regulator for Quark D2000.
*
* @defgroup groupRAR Quark(TM) D2000 Retention Alternator Regulator (RAR).
* @{
*/
/**
* RAR modes type.
*/
typedef enum {
QM_RAR_NORMAL, /**< Normal mode = 50 mA. */
QM_RAR_RETENTION /**< Retention mode = 300 uA. */
} qm_rar_state_t;
/**
* Change operating mode of RAR.
*
* Normal mode is able to source up to 50 mA.
* Retention mode is able to source up to 300 uA.
* Care must be taken when entering into retention mode
* to ensure the overall system draw is less than 300 uA.
*
* @param[in] mode Operating mode of the RAR.
*
* @return Standard errno return type for QMSI.
* @retval 0 on success.
* @retval Negative @ref errno for possible error codes.
*/
int qm_rar_set_mode(const qm_rar_state_t mode);
/**
* @}
*/
#endif /* __POWER_STATES_H__ */