| /* |
| * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| /****************************************************************************** |
| * @file drv_pmu.h |
| * @brief header file for pmu driver |
| * @version V1.0 |
| * @date 02. June 2017 |
| ******************************************************************************/ |
| |
| #ifndef _CSI_PMU_H_ |
| #define _CSI_PMU_H_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include <drv_common.h> |
| |
| /// definition for pmu handle. |
| typedef void *pmu_handle_t; |
| |
| /****** PMU specific error codes *****/ |
| typedef enum { |
| EDRV_PMU_MODE = (EDRV_SPECIFIC + 1), ///< Specified Mode not supported |
| } pmu_error_e; |
| |
| /*----- PMU Control Codes: Mode -----*/ |
| typedef enum { |
| PMU_MODE_RUN = 0, ///< Running mode |
| PMU_MODE_SLEEP , ///< Sleep mode |
| PMU_MODE_DORMANT , ///< Dormant mode |
| PMU_MODE_STDBY , ///< Standby mode |
| PMU_MODE_SHUTDOWN ///< Shutdown mode |
| } pmu_mode_e; |
| |
| /*----- PMU Control Codes: Wakeup type -----*/ |
| typedef enum { |
| PMU_WAKEUP_TYPE_PULSE = 0, ///< Pulse interrupt |
| PMU_WAKEUP_TYPE_LEVEL ///< Level interrupt |
| } pmu_wakeup_type_e; |
| |
| /*----- PMU Control Codes: Wakeup polarity -----*/ |
| typedef enum { |
| PMU_WAKEUP_POL_LOW = 0, ///< Low or negedge |
| PMU_WAKEUP_POL_HIGH ///< High or posedge |
| } pmu_wakeup_pol_e; |
| |
| /****** PMU Event *****/ |
| typedef enum { |
| PMU_EVENT_SLEEP_DONE = 0, ///< Send completed; however PMU may still transmit data |
| PMU_EVENT_BEFORE_SLEEP = 1 |
| } pmu_event_e; |
| |
| typedef void (*pmu_event_cb_t)(int32_t idx, pmu_event_e event, pmu_mode_e mode); ///< Pointer to \ref pmu_event_cb_t : PMU Event call back. |
| |
| typedef int32_t (*pmu_action_cb_t)(pmu_event_e event); |
| |
| /** |
| \brief Initialize PMU Interface. 1. Initializes the resources needed for the PMU interface 2.registers event callback function |
| \param[in] idx the id of the pmu |
| \param[in] cb_event Pointer to \ref pmu_event_cb_t |
| \return return pmu handle if success |
| */ |
| pmu_handle_t drv_pmu_initialize(int32_t idx, pmu_event_cb_t cb_event); |
| |
| /** |
| \brief De-initialize PMU Interface. stops operation and releases the software resources used by the interface |
| \param[in] handle pmu handle to operate. |
| \return error code |
| */ |
| int32_t drv_pmu_uninitialize(pmu_handle_t handle); |
| |
| int32_t drv_pmu_power_control(int32_t idx, csi_power_stat_e state); |
| |
| /** |
| \brief choose the pmu mode to enter |
| \param[in] handle pmu handle to operate. |
| \param[in] mode \ref pmu_mode_e |
| \return error code |
| */ |
| int32_t drv_pmu_enter_sleep(pmu_handle_t handle, pmu_mode_e mode); |
| |
| /** |
| \brief choose the pmu mode to enter |
| \param[in] handle pmu handle to operate. |
| \param[in] callback Pointer to \ref pmu_action_cb_t |
| \return error code |
| */ |
| int32_t drv_pmu_register_module(pmu_action_cb_t callback); |
| |
| /** |
| \brief exit the pmu mode |
| \param[in] handle pmu handle to operate. |
| \return error code |
| */ |
| int32_t drv_pmu_exit_sleep(pmu_handle_t handle); |
| |
| /** |
| \brief Config the wakeup source. |
| \param[in] handle pmu handle to operate |
| \param[in] type \ref pmu_wakeup_type |
| \param[in] pol \ref pmu_wakeup_pol |
| \param[in] enable flag control the wakeup source is enable or not |
| \return error code |
| */ |
| int32_t drv_pmu_config_wakeup_source(pmu_handle_t handle, uint32_t irq_num, pmu_wakeup_type_e type, pmu_wakeup_pol_e pol, uint8_t enable); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* _CSI_PMU_H_ */ |