[Feature][Modem]Update MTK MODEM V1.6 baseline version: MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6
MTK modem version: MT2735_IVT_MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6.tar.gz
RF modem version: NA
Change-Id: I45a4c2752fa9d1a618beacd5d40737fb39ab64fb
diff --git a/mcu/interface/driver/peripheral/bmt.h b/mcu/interface/driver/peripheral/bmt.h
new file mode 100644
index 0000000..df34a3f
--- /dev/null
+++ b/mcu/interface/driver/peripheral/bmt.h
@@ -0,0 +1,857 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2005
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * bmt.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file is intends for Battery Management Task.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef _BMT_H
+#define _BMT_H
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "dcl.h"
+#include "adc_cali.h"
+
+#define ADC_BMT_VBAT 0
+#define ADC_BMT_VISENSE 1
+#define ADC_BMT_VBATTMP 2
+#define ADC_BMT_VCHARGER 3
+#define ADC_BMT_MAX_CHANNEL_TOTAL 4
+//#define BMT_MAX_CHANNEL_TOTAL ADC_BMT_MAX_CHANNEL_TOTAL // backward compatible
+
+/*
+#ifdef __BMT_CHECK_CHARGER__
+#define BMT_MAX_CHANNEL 4
+#else
+#define BMT_MAX_CHANNEL 3
+#endif
+*/
+#define BMT_ADC_VBAT 0
+#define BMT_ADC_VISENSE 1
+#define BMT_ADC_VBATTMP 2
+#define BMT_ADC_VCHARGER 3
+#define BMT_ADC_MAX_CHANNEL_TOTAL 4
+
+/*precharge threshold*/
+#define BMT_PRECHARGE_THRESHOLD 3300000
+
+#if defined(__TC01__)
+#define DRV_BMT_NONE_USB_POWER_ON /* use charging power on instead of USB power on*/
+#define __DRV_BMT_PRECHARGE_TO_FULL_DIRECTLY__
+#endif // #if defined(__TC01__)
+
+/*BatType*/
+#define LIBAT 0
+#define NIBAT 1
+
+/*extern charger state*/
+#define DETECTCHRIN 0x0
+#define DETECTCHROUT !DETECTCHRIN
+
+/*BMT Minor STATE. When Charger is plugged in, charge is enable or not?*/
+#define PMIC_CHARGEOFF 0 /*pmictrl_state*/
+#define PMIC_CHARGEON 1
+
+/*MS Mode*/
+#define idle_mode 0
+#define talk_mode 1
+#define swoff_mode 2
+
+
+#define BMT_HIGH_VCHG_THRESHOLD 100000
+
+#if defined(DRV_BMT_HIGH_VCHG_ADAPTIVE_CHARGE_CURRENT_SUPPORT)
+#define VCHG_VOL_LEVEL 7
+#define VCHG_PARAMTER_COUNT 3
+
+typedef struct{
+ kal_uint32 VCHG_HV_VTH;
+ kal_int32 HIGH_VCHG_TABLE[VCHG_VOL_LEVEL][VCHG_PARAMTER_COUNT];
+}bmt_customized_high_vchg_struct;
+
+extern kal_bool High_Vchg_Safety_Timer_Set;
+extern bmt_customized_high_vchg_struct *bmt_high_vchg_para;
+extern kal_uint32 bmt_total_charge_time;
+extern kal_bool bmt_safety_timer_config;
+extern kal_int32 Pre_VCharge_AVG;
+extern kal_int32 Cur_VCharge_MAX;
+extern bmt_customized_high_vchg_struct *bmt_get_customized_high_vchg_para(void);
+
+#endif // End of #if defined(DRV_BMT_HIGH_VCHG_ADAPTIVE_CHARGE_CURRENT_SUPPORT)
+
+typedef enum{
+ CHARGER_PRESENT,
+//#if defined(__CHINA_CHARGER_STANDARD__)
+ CHARGER_PRESENT_NON,
+//#endif
+ USB_PRESENT,
+ NO_PRESENT
+}charger_usb_present_enum;
+
+typedef enum{
+ BMT_AC_CHR,
+ BMT_USB_CHR
+}bmt_charger_type;
+
+typedef enum {
+ bmt_chr_in=0,
+ bmt_chr_out,
+ bmt_chr_uninit = 0xff
+}Charger_Status;
+
+typedef enum {
+ VBAT_UEM_CHR_OUT=0,
+ VBAT_UEM_CHR_OUT_FIRST=1,
+ VBAT_UEM_CHR_IN=2,
+ VBAT_UEM_CHR_IN_FISRT=3
+}VBAT_UEM_CHR_ENUM;
+
+typedef enum
+{
+ CHR_CURRENT_50=0,
+ CHR_CURRENT_90,
+ CHR_CURRENT_150,
+ CHR_CURRENT_225,
+ CHR_CURRENT_300,
+ CHR_CURRENT_450,
+ CHR_CURRENT_650,
+ CHR_CURRENT_800
+}pmic_charging_current;
+
+typedef struct {
+ kal_uint8 bat_state;
+ kal_uint8 pmictrl_state; /*pmic control on,off*/
+ kal_uint8 call_state; /*mobile state*/
+ // kal_uint8 PWRon;
+ kal_uint8 BatType;
+ kal_uint8 EINT2STATE;
+ kal_uint8 highfull;
+ VBAT_UEM_CHR_ENUM VBAT_UEM; // state of UEM VBAT measurement
+ kal_hisrid hisr;
+} BMTStruct;
+
+typedef struct {
+ kal_int32 VBAT;
+ kal_int32 ICHARGE;
+ kal_int32 BATTMP;
+ kal_int32 VCHARGER;
+ kal_int32 ISense_Offset;
+ //kal_uint8 BATTYPE;
+} BATPHYStruct;
+
+
+// For external charger mechanism integration
+
+// The enum is to indicate whether the charging factor is measured by HOST or Charger device
+typedef enum
+{
+ CHR_FACTOR_MEASURE_NONE = 0x00000000, // Both NOT support, TBD
+ CHR_FACTOR_MEASURE_BY_HOST = 0x00000001, // BIT00, HOST measure the specific charging factor
+ CHR_FACTOR_MEASURE_BY_CHARGER_DEV = 0x00000002 // BIT01, Charger device measure the specific charging factor
+
+}bmt_chr_fac_measure_support_enum;
+
+// The enum is to indicate whether the charging factor error check is done by HOST or charger device
+typedef enum
+{
+ BMT_CHR_FACTOR_CHECK_NONE = 0x00000000, // Both NOT support, TBD
+ BMT_CHR_FACTOR_CHECK_BY_HOST = 0x00000001, // BIT00, HOST perform charging factor error check
+ BMT_CHR_FACTOR_CHECK_BY_CHARGER_DEV = 0x00000002 // BIT01, Charger device perform charging facotr error check
+
+}bmt_chr_fac_check_support_enum;
+
+// The enum defines the charging factors that charging process need to check
+typedef enum
+{
+ BMT_CHR_FACTOR_VBAT, // Charging factor: VBAT
+ BMT_CHR_FACTOR_ISENSE, // Charging factor: VISENSE
+ BMT_CHR_FACTOR_BATTMP, // Charging factor: VBAT temperature
+ BMT_CHR_FACTOR_VCHARGER, // Charging factor: VCHARGER
+ BMT_CHR_FACTOR_CHARGER_OVP, // Charging factor: Charger OVP
+ BMT_CHR_FACTOR_CHARGE_FULL, // Charging factor: Charge full
+ BMT_CHR_FACTOR_UNDER_EXTREMETMP, // Charging factor: Extreme temperature
+ BMT_CHR_FACTOR_CHARGE_EXTREMETMP_FULL, // Charging factor: Charge full under extreme temperature
+ BMT_CHR_FACTOR_CHARGE_EXTREMETMP_RECHARGE, // Charging factor: Should recharge under extreme temperature
+ BMT_CHR_FACTOR_HOLD, // Charging factor: Charging hold
+ BMT_CHR_FACTOR_CHR_BATT_STATE, // Charging factor: charging state: PRE, FAST(CC), TOPOFF(CV), FULL ...
+
+ BMT_CHR_FACTOR_MAX
+}bmt_chr_fac_enum;
+
+typedef struct
+{
+
+ // Driver init
+ // Called at drv init phase
+ void (*drv_init)(void);
+
+ // Called at pmic adpt layer init phase
+ // The phase what scheduler is running(BMT task is created)
+ void (*enable_intr)(void);
+
+ // Control charge enable/disable
+ // Called at any time, any context
+ kal_bool (*charge_enable)(kal_bool enable);
+
+ // The unit is in mA ==> 1000 means 1A
+ // Called at any time, any context
+ // a most close, but not exceeded charge current will be selected
+ // 500mA means can NOT large than 500mA, but most close to 500mA
+ kal_bool (*set_charge_current)(kal_int32 charge_current);
+
+ // Whether the external charger can measure the passed-in charging factor
+ bmt_chr_fac_measure_support_enum (*get_chr_fac_measure_support)(bmt_chr_fac_enum chr_fac);
+
+ // Whether the external charger can check the passed-in charging factor
+ bmt_chr_fac_check_support_enum (*get_chr_fac_check_support)(bmt_chr_fac_enum chr_fac);
+
+ // Pass information to charger device
+ // Charger device can calculate the charger status through the passed-in info
+ void (*check_chr_status)(BATPHYStruct *pBatPhysStat);
+
+ // Charger return calculated charger status
+ // Usually, charger device should keep the chr status before reset_chr_status() is called
+ // The return kal_uint32 is union of all charging factors status
+ kal_uint32 (*get_chr_status)(void);
+
+ // The return unit is uV ==> 1000000 means 1.0V
+ // The passed-in parameter is the information measured by HOST,
+ // ext charger driver need this info to calculate
+ kal_int32 (*get_vbat)(BATPHYStruct *pBatPhysStat);
+
+ // The return unit is uA ==> 1000000 means 1A
+ // The passed-in parameter is the information measured by HOST,
+ // ext charger driver need this info to calculate
+ kal_int32 (*get_isense)(BATPHYStruct *pBatPhysStat);
+
+ // The return unit is uV ==> 1000000 means 1.0V
+ // The passed-in parameter is the information measured by HOST,
+ // ext charger driver need this info to calculate
+ kal_int32 (*get_vcharger)(BATPHYStruct *pBatPhysStat);
+
+ // Return the calculated NTC value of battery temperature
+ // The passed-in parameter is the information measured by HOST,
+ // ext charger driver need this info to calculate
+ kal_int32 (*get_bat_temp)(BATPHYStruct *pBatPhysStat);
+
+ // Return if charge full
+ // The unit is vbat is uV ==> 1000000 means 1.0V
+ // Return KAL_TRUE: Charge full
+ // Return KAL_FALSE: Not charge full
+ kal_bool (*get_charge_full)(kal_int32 vbat);
+
+ // Return if it's under extreme temperature
+ // Return KAL_TRUE: It's under extreme temperature
+ // Return KAL_FALSE: It's NOT under extreme temperature
+ kal_bool (*get_charge_under_extremetmp)(kal_int32 battmp);
+
+ // Return if charge full when under extreme temperature
+ // The unit is vbat is uV ==> 1000000 means 1.0V
+ // Return KAL_TRUE: Charge full
+ // Return KAL_FALSE: Not charge full
+ kal_bool (*get_charge_extremetmp_full)(kal_int32 vbat);
+
+ // Return if charge should recharge when under extreme temperature
+ // The unit is vbat is uV ==> 1000000 means 1.0V
+ // Return KAL_TRUE: Should recharge
+ // Return KAL_FALSE: Should NT recharge
+ kal_bool (*get_charge_extremetmp_recharge)(kal_int32 vbat);
+
+ // Return KAL_TRUE: Need to hold charging
+ // Return KAL_FALSE: Do NOT need to hold charging
+ // The condition to hold charging: Talking mode ...
+ kal_bool (*get_charge_hold)(BATPHYStruct *pBatPhysStat);
+
+ // Whether the external charger can handle the specific charging battery state
+ bmt_chr_fac_check_support_enum(*get_chr_batt_state_transit_support)(kal_uint32 curr_chr_batt_state);
+
+ // Perform charging battery state transit
+ // curr_chr_batt_state: Current state
+ // chr_on: Current CHR_EN state
+ void (*chr_batt_state_transit)(kal_uint32 curr_chr_batt_state, kal_bool chr_en);
+
+ // Get current charging battery state PRE, FAST(CC), TOPOFF(CV), FULL, ...
+ kal_uint32 (*get_curr_chr_batt_state)(BATPHYStruct *pBatPhysStat);
+
+ // Get custom charge current according to specific charger
+ kal_uint32 (*get_specific_chr_current)(bmt_charger_type charger);
+
+ // Whether the vbat is higher than specific full check vaule or not
+ // Return KAL_TRUE: higher than specific full voltage
+ // Return KAL_FALSE: lower than specific full voltage
+ kal_bool (*get_vbat_specific_full_voltage_state)(kal_int32 vbat); //__DRV_BMT_CHARGING_COMPLETE_MSG__
+
+}bmt_ext_charger;
+
+// External charger custom table V1.0
+typedef struct{
+ // Control enable/disable charger
+ void (*charge_enable)(kal_bool enable);
+
+ // Set charge current
+ // The unit is mA ==> 1000 means 1A
+ void (*charge_current)(kal_int32 current);
+
+ // Return KAL_TRUE: Charger think battery is full
+ // Return KAL_FALSE: Charger think battery is NOT full
+ kal_bool (*charge_full_ind)(kal_int32 vbat);
+
+ // Return KAL_TRUE: Charger thing it's under extreme temperature
+ // Return KAL_FALSE: Charger thing it's NOT under extreme temperature
+ kal_bool (*charge_under_extremetmp_ind)(kal_int32 battmp);
+
+ // Return KAL_TRUE: Charger think battery is full if it's under extreme temperature
+ // Return KAL_FALSE: Charger think battery is NOT if it's full under extreme temperature
+ kal_bool (*charge_extremetmp_full_ind)(kal_int32 vbat);
+
+ // Return KAL_TRUE: Charger think battery should be recharged if it's under extreme temperature
+ // Return KAL_FALSE: Charger think battery should NOT be recharged if it's under extreme temperature
+ kal_bool (*charge_extremetmp_recharge_ind)(kal_int32 vbat);
+
+ // Number of charge current level (Ex: 100mA, 150mA, 500mA ...)
+ kal_uint32 charge_current_num;
+
+ // The current must be listed from largest to smallest
+ // Ex: 0: 500mA; 1: 250mA; 2: 100mA ...
+ kal_uint32 *charge_current_table;
+
+ // Return the custom charge current for specific charger type, the unit is mA
+ kal_uint32 (*get_custom_charge_current)(bmt_charger_type charger);
+
+ // Whether the charge source is good
+ // Return KAL_TRUE: Charge source is good
+ // Return KAL_FALSE: Charge source is NOT good
+ kal_bool (*charge_source_good)(void);
+
+ // Whether the vbat is higher than specific full check vaule or not
+ // Return KAL_TRUE: higher than specific full voltage
+ // Return KAL_FALSE: lower than specific full voltage
+ kal_bool (*vbat_specific_full_check_voltage)(kal_int32 vbat); //__DRV_BMT_CHARGING_COMPLETE_MSG__
+
+}bmt_ext_charger_custom_config;
+
+
+// For external charger mechanism integration
+
+
+// For external charger detection integration
+typedef struct
+{
+ // This API report charger in/out and AC or USB type together
+ // This API may be called at anytime
+ // Ex: Before scheduler is running (Boot init phase)
+ // Called at boot time (No scheduler is running)
+ // Called in HISR (Drv_HISR and system HISR)
+ // Called in Task
+ charger_usb_present_enum (*det_charger_present)(void);
+
+ // This API is for PWIC to register HISR handler for charger
+ // PWIC will use det_charger_present() to determine whether it is in/out
+ void (*reg_chr_hisr)(void (chr_hisr_callback)(void));
+
+ // This API is for PWIC to register HISR handler for usb
+ // PWIC will use det_charger_present() to determine whether it is in/out
+ void (*reg_usb_hisr)(void (usb_hisr_callback)(void));
+
+ // This API is to set S/W debounce time for charger cable
+ // The uint of deb_time is in 10ms (GPT tick)
+ void (*set_chr_deb_time)(kal_uint32 deb_time);
+
+ // This API is to set S/W debounce time for usb cable
+ // The uint of deb_time is in 10ms (GPT tick)
+ void (*set_usb_deb_time)(kal_uint32 deb_time);
+
+ // This API is to report whether USB detection is supported or NOT
+ kal_bool (*support_usb_det)(void);
+
+ // Init the external charger detection mechanism
+ // The API is called at boot phase
+ // After this call, we should be able to call det_charger_present()
+ // Provider need to guarantee this
+ void (*drv_init)(void);
+
+ // The API is called at pmic adpt layer init phase
+ void (*enable_intr)(void);
+
+}bmt_ext_charger_det;
+
+typedef enum
+{
+ EXT_CABLE_PATH_CHARGER,
+ EXT_CABLE_PATH_STD_USB,
+ EXT_CABLE_PATH_HIGH_CURRENT_USB,
+ EXT_CABLE_PATH_UART,
+ EXT_CABLE_PATH_EARPHONE,
+ EXT_CABLE_PATH_TV_OUT,
+ EXT_CABLE_PATH_USB_OTG,
+ EXT_CABLE_PATH_FAC_UART,
+ EXT_CABLE_PATH_FAC_USB,
+ EXT_CABLE_PATH_CS_CHARGER, // Customer specific charger
+ EXT_CABLE_PATH_MAX
+}ext_cable_path_enum;
+
+typedef struct
+{
+ // Factory mode API
+ // Force switch external cable to specific path for test
+ void (*set_path)(ext_cable_path_enum path);
+
+ // Factory mode API
+ // Return current external cable path
+ ext_cable_path_enum (*get_curr_path)(void);
+
+ // ASSERT mode API
+ // Called when system enter ASSERT,
+ // the ext cable mechanism should switch cable path for memory dump
+ void (*ext_cable_force_set_path)(ext_cable_path_enum path);
+
+ // API for specific workaround: Turn on/off ext cable path
+ void (*ext_cable_WA_set_path)(ext_cable_path_enum path, kal_bool on);
+
+}ext_cable_det_fac_if;
+
+
+// For external charger detection integration
+
+extern kal_uint8 bmt_bmtid_adc_handle[BMT_ADC_MAX_CHANNEL_TOTAL];
+extern kal_uint8 bmt_adc_handle;
+
+// MoDIS parser skip start
+// The following APIs are impmemented in custom folder, which will be inclucded in MoDIS
+/*usb charge*/
+extern kal_bool bmt_support_usb_charge(void);
+extern kal_int32 bmt_get_chr_usb_detect_volt(void);
+// MoDIS parser skip end
+
+// MoDIS parser skip start
+/*charing parameters*/
+// MoDIS parser skip end
+
+#if defined(__GENERAL_EXTERNAL_CHARGER__)
+extern bmt_ext_charger *ext_charger; // Variable in pwic.c
+extern bmt_ext_charger *bmt_get_ext_charger(void);
+extern bmt_ext_charger_custom_config *bmt_ext_charger_get_custom_config(void);
+#endif // #if defined(__GENERAL_EXTERNAL_CHARGER__)
+
+extern ext_cable_det_fac_if *custom_get_ext_cable_fac(void);
+
+#if defined(__DRV_EXT_CHARGER_DETECTION__)
+extern bmt_ext_charger_det *ext_charger_det;
+extern bmt_ext_charger_det *bmt_custom_get_ext_charger_det(void);
+#endif // #if defined(__DRV_EXT_CHARGER_DETECTION__)
+
+extern kal_uint8 BMT_MAX_CHANNEL; // The ADC channel number in BMT (Used for charging factor monitoring)
+extern BMTStruct BMT;
+
+#if defined(DRV_ADC_CALIBRATION_EFUSE)
+extern kal_bool bmt_read_calibration_data(ADC_CALIDATA *adc_cali);
+#endif //#if defined(DRV_ADC_CALIBRATION_EFUSE)
+
+extern void BMT_VbatInHISR(void);
+extern kal_bool bmt_is_bat_on(void);
+
+extern kal_bool BMT_ObtainBMTPHYSTAT(BATPHYStruct *BATPHYS);
+extern void bmt_chr_force_enable(kal_bool enable);
+extern kal_bool bmt_is_chr_valid(void);
+extern kal_bool bmt_get_chr_cv_det(void);
+#endif // End of #ifndef _BMT_H
+