pinebuds/platform/drivers/ana/pmu.h

260 lines
6.5 KiB
C

/***************************************************************************
*
* Copyright 2015-2019 BES.
* All rights reserved. All unpublished rights reserved.
*
* No part of this work may be used or reproduced in any form or by any
* means, or stored in a database or retrieval system, without prior written
* permission of BES.
*
* Use of this work is governed by a license granted by BES.
* This work contains confidential and proprietary information of
* BES. which is protected by copyright, trade secret,
* trademark and other intellectual property rights.
*
****************************************************************************/
#ifndef __PMU_H__
#define __PMU_H__
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#include "hal_analogif.h"
#include "hal_cmu.h"
#include "hal_gpio.h"
#include "plat_addr_map.h"
#include CHIP_SPECIFIC_HDR(pmu)
#define PMU_DEBUG_TRACE(n, s, ...) LOG_DUMMY(n, s, ##__VA_ARGS__)
#define PMU_DEBUG_TRACE_IMM(n, s, ...) LOG_INFO((n) | LOG_ATTR_IMM, s, ##__VA_ARGS__)
#define PMU_INFO_TRACE_IMM(n, s, ...) LOG_INFO((n) | LOG_ATTR_IMM, s, ##__VA_ARGS__)
#define PMU_INFO_TRACE(n, s, ...) LOG_INFO(n, s, ##__VA_ARGS__)
#ifndef ISPI_PMU_REG
#define ISPI_PMU_REG(reg) (reg)
#endif
#define pmu_read(reg, val) hal_analogif_reg_read(ISPI_PMU_REG(reg), val)
#define pmu_write(reg, val) hal_analogif_reg_write(ISPI_PMU_REG(reg), val)
#define PMU_MANUAL_MODE 1
#define PMU_AUTO_MODE 0
#define PMU_LDO_ON 1
#define PMU_LDO_OFF 0
#define PMU_LP_MODE_ON 1
#define PMU_LP_MODE_OFF 0
#define PMU_DSLEEP_MODE_ON 1
#define PMU_DSLEEP_MODE_OFF 0
union SECURITY_VALUE_T {
struct {
unsigned short security_en :1;
unsigned short key_id :3;
unsigned short key_chksum :2;
unsigned short vendor_id :6;
unsigned short vendor_chksum :3;
unsigned short chksum :1;
};
unsigned short reg;
};
enum PMU_CHARGER_STATUS_T {
PMU_CHARGER_PLUGIN,
PMU_CHARGER_PLUGOUT,
PMU_CHARGER_UNKNOWN,
};
enum PMU_POWER_ON_CAUSE_T {
PMU_POWER_ON_CAUSE_NONE,
PMU_POWER_ON_CAUSE_POWER_KEY,
PMU_POWER_ON_CAUSE_RTC,
PMU_POWER_ON_CAUSE_CHARGER_ACON,
PMU_POWER_ON_CAUSE_CHARGER_ACOFF,
};
enum PMU_USB_PIN_CHK_STATUS_T {
PMU_USB_PIN_CHK_NONE,
// Chip acts as host
PMU_USB_PIN_CHK_DEV_CONN,
// Chip acts as host
PMU_USB_PIN_CHK_DEV_DISCONN,
// Chip acts as device
PMU_USB_PIN_CHK_HOST_RESUME,
PMU_USB_PIN_CHK_STATUS_QTY
};
enum PMU_USB_CONFIG_TYPE_T {
PMU_USB_CONFIG_TYPE_NONE,
PMU_USB_CONFIG_TYPE_DEVICE,
PMU_USB_CONFIG_TYPE_HOST,
};
enum PMU_POWER_MODE_T {
PMU_POWER_MODE_NONE,
PMU_POWER_MODE_LDO,
PMU_POWER_MODE_ANA_DCDC,
PMU_POWER_MODE_DIG_DCDC,
};
enum PMU_VIORISE_REQ_USER_T {
PMU_VIORISE_REQ_USER_PWL0,
PMU_VIORISE_REQ_USER_PWL1,
PMU_VIORISE_REQ_USER_FLASH,
PMU_VIORISE_REQ_USER_CHARGER,
PMU_VIORISE_REQ_USER_QTY
};
struct PMU_LED_BR_CFG_T {
uint16_t off_time_ms;
uint16_t on_time_ms;
uint16_t fade_time_ms;
};
typedef void (*PMU_USB_PIN_CHK_CALLBACK)(enum PMU_USB_PIN_CHK_STATUS_T status);
typedef void (*PMU_RTC_IRQ_HANDLER_T)(uint32_t seconds);
typedef void (*PMU_CHARGER_IRQ_HANDLER_T)(enum PMU_CHARGER_STATUS_T status);
typedef void (*PMU_WDT_IRQ_HANDLER_T)(void);
typedef void (*PMU_IRQ_UNIFIED_HANDLER_T)(uint16_t irq_status);
int pmu_open(void);
void pmu_sleep(void);
void pmu_wakeup(void);
void pmu_mode_change(enum PMU_POWER_MODE_T mode);
int pmu_get_security_value(union SECURITY_VALUE_T *val);
void pmu_shutdown(void);
void pmu_reset(void);
int pmu_get_efuse(enum PMU_EFUSE_PAGE_T page, unsigned short *efuse);
void pmu_codec_config(int enable);
void pmu_anc_config(int enable);
void pmu_usb_config(enum PMU_USB_CONFIG_TYPE_T type);
void pmu_sleep_en(unsigned char sleep_en);
void pmu_flash_write_config(void);
void pmu_flash_read_config(void);
void pmu_flash_freq_config(uint32_t freq);
void pmu_psram_freq_config(uint32_t freq);
void pmu_fir_high_speed_config(int enable);
void pmu_iir_freq_config(uint32_t freq);
void pmu_rs_freq_config(uint32_t freq);
void pmu_sys_freq_config(enum HAL_CMU_FREQ_T freq);
void pmu_high_performance_mode_enable(bool enable);
void pmu_charger_init(void);
void pmu_charger_set_irq_handler(PMU_CHARGER_IRQ_HANDLER_T handler);
void pmu_charger_plugin_config(void);
void pmu_charger_plugout_config(void);
enum PMU_CHARGER_STATUS_T pmu_charger_get_status(void);
int pmu_usb_config_pin_status_check(enum PMU_USB_PIN_CHK_STATUS_T status, PMU_USB_PIN_CHK_CALLBACK callback, int enable);
void pmu_usb_enable_pin_status_check(void);
void pmu_usb_disable_pin_status_check(void);
void pmu_usb_get_pin_status(int *dp, int *dm);
void pmu_rtc_enable(void);
void pmu_rtc_disable(void);
int pmu_rtc_enabled(void);
void pmu_rtc_set(uint32_t seconds);
uint32_t pmu_rtc_get(void);
void pmu_rtc_set_alarm(uint32_t seconds);
uint32_t pmu_rtc_get_alarm(void);
void pmu_rtc_clear_alarm(void);
int pmu_rtc_alarm_status_set(void);
int pmu_rtc_alarm_alerted();
void pmu_rtc_set_irq_handler(PMU_RTC_IRQ_HANDLER_T handler);
void pmu_viorise_req(enum PMU_VIORISE_REQ_USER_T user, bool rise);
enum PMU_POWER_ON_CAUSE_T pmu_get_power_on_cause(void);
int pmu_debug_config_ana(uint16_t volt);
int pmu_debug_config_codec(uint16_t volt);
int pmu_debug_config_audio_output(bool diff);
int pmu_debug_config_vcrystal(bool on);
void pmu_debug_reliability_test(int stage);
void pmu_at_skip_shutdown(bool enable);
void pmu_led_set_direction(enum HAL_GPIO_PIN_T pin, enum HAL_GPIO_DIR_T dir);
enum HAL_GPIO_DIR_T pmu_led_get_direction(enum HAL_GPIO_PIN_T pin);
void pmu_led_set_voltage_domains(enum HAL_IOMUX_PIN_T pin, enum HAL_IOMUX_PIN_VOLTAGE_DOMAINS_T volt);
void pmu_led_set_pull_select(enum HAL_IOMUX_PIN_T pin, enum HAL_IOMUX_PIN_PULL_SELECT_T pull_sel);
void pmu_led_set_value(enum HAL_GPIO_PIN_T pin, int data);
int pmu_led_get_value(enum HAL_GPIO_PIN_T pin);
void pmu_wdt_set_irq_handler(PMU_WDT_IRQ_HANDLER_T handler);
int pmu_wdt_config(uint32_t irq_ms, uint32_t reset_ms);
void pmu_wdt_start(void);
void pmu_wdt_stop(void);
void pmu_wdt_feed(void);
void pmu_ntc_capture_enable(void);
void pmu_ntc_capture_disable(void);
int pmu_set_irq_unified_handler(enum PMU_IRQ_TYPE_T type, PMU_IRQ_UNIFIED_HANDLER_T hdlr);
enum HAL_PWRKEY_IRQ_T pmu_pwrkey_irq_value_to_state(uint16_t irq_status);
#ifdef __cplusplus
}
#endif
#endif