123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- /* Copyright (C) 2018 RDA Technologies Limited and/or its affiliates("RDA").
- * All rights reserved.
- *
- * This software is supplied "AS IS" without any warranties.
- * RDA assumes no responsibility or liability for the use of the software,
- * conveys no license or title under any patent, copyright, or mask work
- * right to the product. RDA reserves the right to make changes in the
- * software without notification. RDA also make no representation or
- * warranty that such application will be suitable for the specified use
- * without further testing or modification.
- */
- #ifndef _DRV_PMIC_INTR_H_
- #define _DRV_PMIC_INTR_H_
- #include <stdint.h>
- #include <stdbool.h>
- #include <stddef.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- /**
- * PMIC bypass wakeup mask
- */
- typedef enum
- {
- DRV_PMIC_BYPASS_WDT_WAKEUP = 0,
- DRV_PMIC_BYPASS_TIMER_WAKEUP,
- DRV_PMIC_BYPASS_GPT_WAKEUP,
- DRV_PMIC_BYPASS_GPIO_WAKEUP,
- DRV_PMIC_BYPASS_CHG_ON_WAKEUP,
- DRV_PMIC_BYPASS_PWRKEY_WAKEUP,
- DRV_PMIC_BYPASS_WDT_RESET,
- DRV_PMIC_BYPASS_OPT_RESET,
- DRV_PMIC_BYPASS_OVLO_RESET,
- DRV_PMIC_BYPASS_UVLO_RESET,
- DRV_PMIC_BYPASS_VBATLOW_RESET,
- DRV_PMIC_BYPASS_PIN_RESET,
- DRV_PMIC_BYPASS_WAKEUP_COUNT
- } drvWakeupMaskType_t;
- /**
- * PMIC interrupt types
- */
- #ifdef CONFIG_SOC_8811
- enum drvPmicIntrType_t
- {
- DRV_PMIC_INTR_GPIO, ///< PMIC GPIO interrupt
- DRV_PMIC_INTR_GPT16, ///< PMIC RTC interrupt
- DRV_PMIC_INTR_TMR, ///< PMIC timer interrupt
- DRV_PMIC_INTR_WDG, ///< PMIC watchdog interrupt
- DRV_PMIC_INTR_POWER_KEY, ///< PMIC powerkey interrupt
- DRV_PMIC_INTR_CHG_ON, ///< PMIC charge on interrupt
- DRV_PMIC_INTR_CHG_OFF, ///< PMIC charge off interrupt
- DRV_PMIC_INTR_ADC, ///< PMIC adc interrupt
- DRV_PMIC_INTR_COUNT
- };
- #else
- #ifdef CONFIG_SOC_8850
- enum drvPmicIntrType_t
- {
- DRV_PMIC_INTR_ADC, ///< PMIC ADC interrupt
- DRV_PMIC_INTR_RTC, ///< PMIC RTC interrupt
- DRV_PMIC_INTR_WDG, ///< PMIC watchdog interrupt
- DRV_PMIC_INTR_FGU, ///< PMIC fuel gauge unit interrupt
- DRV_PMIC_INTR_EIC, ///< PMIC EIC interrupt
- DRV_PMIC_INTR_AUD, ///< PMIC audio interrupt
- DRV_PMIC_INTR_TMR, ///< PMIC timer interrupt
- DRV_PMIC_INTR_CAL, ///< PMIC oscillator calibration interrupt
- DRV_PMIC_INTR_TYPEC,
- DRV_PMIC_INTR_COUNT
- };
- #else
- enum drvPmicIntrType_t
- {
- DRV_PMIC_INTR_ADC, ///< PMIC ADC interrupt
- DRV_PMIC_INTR_RTC, ///< PMIC RTC interrupt
- DRV_PMIC_INTR_WDG, ///< PMIC watchdog interrupt
- DRV_PMIC_INTR_FGU, ///< PMIC fuel gauge unit interrupt
- DRV_PMIC_INTR_EIC, ///< PMIC EIC interrupt
- DRV_PMIC_INTR_AUD, ///< PMIC audio interrupt
- DRV_PMIC_INTR_TMR, ///< PMIC timer interrupt
- DRV_PMIC_INTR_CAL, ///< PMIC oscillator calibration interrupt
- DRV_PMIC_INTR_COUNT
- };
- #endif
- #endif
- /**
- * PMIC EIC interrupt types
- */
- enum drvPmicEicType_t
- {
- DRV_PMIC_EIC_CHGR_INT, ///< charge indicator
- DRV_PMIC_EIC_PBINT, ///< power on 1
- DRV_PMIC_EIC_PBINT2, ///< power on 2
- DRV_PMIC_EIC_AUDIO_HEAD_BUTTON, ///< ??
- DRV_PMIC_EIC_CHGR_CV, ///< ??
- DRV_PMIC_EIC_AUDIO_HEAD_INSERT, ///< ??
- DRV_PMIC_EIC_VCHG_OVI, ///< ??
- DRV_PMIC_EIC_AUDIO_HEAD_INSERT2, ///< ??
- DRV_PMIC_EIC_BATDET_OK, ///< ??
- DRV_PMIC_EIC_EXT_RSTN, ///< ??
- DRV_PMIC_EIC_EXT_XTL_EN0, ///< ??
- DRV_PMIC_EIC_AUDIO_HEAD_INSERT3, ///< ??
- DRV_PMIC_EIC_AUDIO_HEAD_INSERT_ALL, ///< ??
- DRV_PMIC_EIC_EXT_XTL_EN1, ///< ??
- DRV_PMIC_EIC_EXT_XTL_EN2, ///< ??
- DRV_PMIC_EIC_EXT_XTL_EN3, ///< ??
- DRV_PMIC_EIC_COUNT
- };
- /**
- * callback function for PMIC interrupt
- *
- * It is called in ISR, and it is needed to follow ISR programming guide.
- */
- typedef void (*drvPmicIntrCB_t)(void *ctx);
- /**
- * @brief PMIC interrupt module initialization
- *
- * It should be called after ADI bus is initialized, and before
- * any other modules which will use PMIC interrupt and PMIC EIC
- * interrupts.
- */
- void drvPmicIntrInit(void);
- /**
- * @brief enable PMIC interrupt and set callback
- *
- * When there already exist callback for the specified PMIC interrupt,
- * the previous one will be replaced.
- *
- * @param intr PMIC interrupt type (\a drvPmicType_t)
- * @param cb PMIC interrupt callback
- * @param ctx PMIC interrupt cabback context
- */
- void drvPmicIntrEnable(unsigned intr, drvPmicIntrCB_t cb, void *ctx);
- /**
- * @brief disable PMIC interrupt
- *
- * @param intr PMIC interrupt type (\a drvPmicType_t)
- */
- void drvPmicIntrDisable(unsigned intr);
- /**
- * @brief set PMIC EIC interrupt callback
- *
- * Set the callback of PMIC EIC intterupt. The EIC interrupt won't
- * be started automatically.
- *
- * In callback, it is permitted to call EIC APIs, such as re-trigger
- * it in opposite polarity.
- *
- * @param eic PMIC EIC interrupt type (\a drvPmicEicType_t)
- * @param cb PMIC EIC interrupt callback
- * @param ctx PMIC EIC interrupt callback context
- */
- void drvPmicEicSetCB(unsigned eic, drvPmicIntrCB_t cb, void *ctx);
- /**
- * @brief enable PMIC EIC interrupt
- *
- * After EIC interrupt arrived, the interrupt will be disabled
- * automatically. When the interrupt is needed, \a drvPmicEicTrigger
- * (with the same or opposite polarity).
- *
- * When \a debounce is too small, it will be set to the minimum
- * value suitable for underlay hardware. Typically, it will be
- * several milliseconds.
- *
- * @param eic PMIC EIC interrupt type (\a drvPmicEicType_t)
- * @param debounce debounce time in milliseconds
- * @param level trigger level, true for high
- */
- void drvPmicEicTrigger(unsigned eic, unsigned debounce, bool level);
- /**
- * @brief PMIC EIC source current level
- *
- * @param eic PMIC EIC interrupt type (\a drvPmicEicType_t)
- * @return
- * - true for high level
- * - false for low level, or invalid type
- */
- bool drvPmicEicGetLevel(unsigned eic);
- /**
- * @brief disable PMIC EIC interrupt
- *
- * @param eic PMIC EIC interrupt type (\a drvPmicEicType_t)
- */
- void drvPmicEicDisable(unsigned eic);
- /**
- * @brief PMIC bypass wakeup
- *
- * @param type PMIC bypass wakeup type (drvWakeupMaskType_t)
- * @param bypass true for bypass wakeup
- */
- bool drvPmicBypassMask(drvWakeupMaskType_t type, bool bypass);
- #ifdef __cplusplus
- }
- #endif
- #endif
|