blob: 372870956faaa0738578c396d1078c0b0bf95f27 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2010
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35
36/*****************************************************************************
37 *
38 * Filename:
39 * ---------
40 * bmt_sw.h
41 *
42 * Project:
43 * --------
44 * Maui_Software
45 *
46 * Description:
47 * ------------
48 * This file is intends for BMT driver and adaption.
49 *
50 * Author:
51 * -------
52 * -------
53 *
54 *============================================================================
55 * HISTORY
56 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
57 *------------------------------------------------------------------------------
58 * removed!
59 * removed!
60 * removed!
61 *
62 * removed!
63 * removed!
64 * removed!
65 *
66 * removed!
67 * removed!
68 * removed!
69 *
70 * removed!
71 * removed!
72 * removed!
73 *
74 * removed!
75 * removed!
76 * removed!
77 *
78 * removed!
79 * removed!
80 * removed!
81 *
82 * removed!
83 * removed!
84 * removed!
85 *
86 * removed!
87 * removed!
88 * removed!
89 *
90 * removed!
91 * removed!
92 * removed!
93 *
94 * removed!
95 * removed!
96 * removed!
97 *
98 * removed!
99 * removed!
100 * removed!
101 *
102 * removed!
103 * removed!
104 * removed!
105 *
106 * removed!
107 * removed!
108 * removed!
109 *
110 * removed!
111 * removed!
112 * removed!
113 *
114 * removed!
115 * removed!
116 * removed!
117 *
118 * removed!
119 * removed!
120 * removed!
121 *
122 * removed!
123 * removed!
124 * removed!
125 *
126 *------------------------------------------------------------------------------
127 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
128 *============================================================================
129 ****************************************************************************/
130#ifndef _BMT_SW_H
131#define _BMT_SW_H
132
133#include "drv_features.h"
134#include "chr_parameter.h"
135#include "dcl.h"
136
137// ============================================================ //
138// Definitions for BMT Module Only
139// ============================================================ //
140#if defined(__EVB__)
141#if !defined(DRV_MISC_ADC_FIXED_VBAT_WA)
142#define DRV_MISC_ADC_FIXED_VBAT_WA
143#endif
144#endif
145
146#if(CHR_BATTERY_TYPE == LI_ION_BATTERY)
147#define CHR_WITH_LI_ION_BATTERY
148#else
149#define CHR_WITH_NI_MH_BATTERY
150#endif
151
152/* Battery State */
153#define CHR_PRE 0
154#define CHR_FAST 1
155#define CHR_TOPOFF 2
156#define CHR_BATFULL 3
157#define CHR_ERROR 4
158#define CHR_HOLD 5
159#define CHR_POSTFULL 6
160#define CHR_PRE_FULL_CHECK 7
161
162/* TON, TOFF */
163#define CHRTON 0
164#define CHRTOFF 1
165
166/* Safety Timer Configuration */
167#define BMT_SAFETY_TIMER_ON 1
168#define BMT_SAFETY_TIMER_OFF 0
169
170/* Counts of ADC Measurement */
171#define BMT_EVALUATE_VALUE 10
172
173/* __TC01__ Configuration */
174#if defined(__TC01__)
175#define __DRV_BMT_ALWAYS_PULSE_CHARGING__ // TC01 request pulse charging in CV
176#define __DRV_BMT_ESTIMATIVE_TIMER_ON_TOPOFF__
177#define __DRV_BMT_DISABLE_STOP_TIMER__
178#define __DRV_BMT_CHARGING_COMPLETE_MSG__
179#define __DRV_BMT_REPORT_VBAT_IN_BOOTING__
180
181#if ((!defined(L4_NOT_PRESENT)) && (!defined(__MAUI_BASIC__)) )
182#define __DRV_BATTERY_EXIST_DETECTION__
183// #define BATTERY_EXIST_DETECTION_SW_POLLING_PERIOD_IN_TICK (3250) // 15 sec = (1000/4.615) * 15
184#endif // #if ( (!defined(L4_NOT_PRESENT)) && (!defined(__MAUI_BASIC__)) )
185
186#define __BMT_CHARGE_GUARD_TIME__
187 #define BMT_TOTAL_CHARGE_TIME (6 * 60) // 6 hours = 360 mins
188 #ifdef __BMT_CHARGE_GUARD_TIME__
189 #define BMT_CHARGE_GUARD_TIME_PERIOD (2 * 60 + 50) // 2 hours and 50 mins = 170 mins
190 #if (BMT_CHARGE_GUARD_TIME_PERIOD > BMT_TOTAL_CHARGE_TIME)
191 #error "[BMT]Error!! BMT_TOTAL_CHARGE_TIME should >= BMT_CHARGE_GUARD_TIME_PERIOD!!"
192 #endif
193 #endif // __BMT_CHARGE_GUARD_TIME__
194
195#if defined(__GENERAL_EXTERNAL_CHARGER__)
196
197// Debug mode, take Fac.UART cable as charger
198//#define DEBUG_TREAT_FAC_UART_CABLE_AS_CHARGER
199
200#endif // #if defined(__GENERAL_EXTERNAL_CHARGER__)
201
202
203#else // Else of #if defined(__TC01__)
204
205#define __BMT_PAUSE_CHARGE_STOP_SAFETY_TIMER__
206
207#if defined(__DRV_BMT_BATTERY_LARGER_1600MA__)
208 #define BMT_TOTAL_CHARGE_TIME (12 * 60) // 12 hours = 720 mins
209#elif defined(__DRV_BMT_ULTRA_LOW_COST_CHARGER__)
210 #define BMT_TOTAL_CHARGE_TIME (8 * 60) // 8 hours = 480 mins
211#else
212 #define BMT_TOTAL_CHARGE_TIME (6 * 60) // 6 hours = 360 mins
213#endif //#if defined(__DRV_BMT_ULTRA_LOW_COST_CHARGER__)
214
215#endif // End of #if defined(__TC01__)
216
217// ============================================================ //
218// Useless Definitions
219// ============================================================ //
220/* Power key position */
221#if 0
222#ifndef CANNON
223/* under construction !*/
224#else
225/* under construction !*/
226#endif
227#endif
228
229// ============================================================ //
230// Data structures for BMT Module Only
231// ============================================================ //
232typedef void (* CHR_FUNC)(void);
233
234typedef struct {
235 kal_uint8 TON;/*sec*/
236 kal_uint8 TOFF;/*sec*/
237} CHRTStruct;
238
239/* Customize Charging Parameters */
240typedef struct {
241 kal_int32 TYPICAL_LI_BATTYPE;
242 kal_int32 TYPICAL_NI_BATTYPE;
243 kal_uint32 BATT_EXIST_ADC_THRESHOLD;
244 kal_int32 VCHARGER_HIGH;
245 kal_int32 VCHARGER_LOW;
246 kal_int32 BATTMP_MINUS_40C;
247 kal_int32 BATTMP_0C;
248 kal_int32 BATTMP_45C;
249 kal_int32 ICHARGE_ON_HIGH;
250 kal_int32 ICHARGE_ON_LOW;
251 kal_int32 ICHARGE_OFF_HIGH;
252
253 kal_int32 V_PRE2FAST_THRES;
254 kal_int32 FAST_ICHARGE_HIGHLEVEL; /* 600ma,for table search */
255 kal_int32 FAST_ICHARGE_LOWLEVEL; /* 400ma,for table search */
256 kal_int32 I_TOPOFF2FAST_THRES; /* 250ma,TOPOFF->FAST */
257 kal_int32 I_TOPOFF2FULL_THRES; /* 120ma,TOPOFF->BATFULL */
258
259#if defined(CHR_WITH_LI_ION_BATTERY)
260 kal_int32 V_FAST2TOPOFF_THRES;
261 kal_int32 V_FULL2FAST_THRES; /* BATFULL->FAST */
262 kal_int32 MAX_VBAT_LI;
263 kal_int32 V_PROTECT_HIGH_LI;
264 kal_int32 V_PROTECT_LOW_LI;
265#endif
266
267#if defined(CHR_WITH_NI_MH_BATTERY)
268 kal_int32 V_TEMP_FAST2FULL_THRES_NI; /* 50oC,FAST->BATFULL */
269 kal_int32 V_FULL2FAST_THRES_NI;
270 kal_int32 MAX_VBAT_NI;
271#endif
272
273 /*Time delay*/
274 /* PRE CHARGE ,search table*/
275 /*TON = 3s,TOFF=2s*/
276 kal_uint32 PRE_TON;
277 kal_uint32 PRE_TOFF;
278
279/* FAST CHARGE ,search table*/
280/*TON = 3s,TOFF=0s*/
281 kal_uint32 TOPOFF_TON;
282 kal_uint32 TOPOFF_TOFF;
283#if defined(DRV_BMT_PULSE_CHARGING)
284 kal_uint32 BATPOSTFULL_TWAIT_LI;
285 kal_uint32 BATPOSTFULL_TON_LI;
286 kal_uint32 BATPOSTFULL_TOFF_LI;
287#endif //#if defined(DRV_BMT_PULSE_CHARGING)
288
289#if defined(CHR_WITH_LI_ION_BATTERY)
290 kal_uint32 BATFULL_TON_LI; /*unit : second*/
291 kal_uint32 BATFULL_TOFF_LI;
292#else
293 kal_uint32 BATFULL_TON_NI; /*unit : second*/
294 kal_uint32 BATFULL_TOFF_NI;
295#endif
296 kal_uint32 BATFULL_TOFF;
297 kal_uint32 BATHOLD_OFF;
298 kal_uint32 bmt_measure_discard_time; /*24 ticks*/
299
300 kal_int32 CurrOffset[3];
301/*GPIO control*/
302#ifndef __CUST_NEW__
303 kal_uint8 GPIO_CHRCTRL;
304 kal_uint8 GPIO_BATDET;
305 kal_uint8 GPIO_VIBRATOR;
306#endif /* __CUST_NEW__ */
307 kal_uint8 TONOFFTABLE[6][2];
308 kal_bool bmt_check_battery;
309 kal_bool bmt_check_charger;
310 kal_bool bmt_check_temp;
311 kal_bool bmt_battery_type;
312} bmt_customized_struct;
313
314// ============================================================ //
315// Useless Data structures
316// ============================================================ //
317typedef struct{
318 void (*measure_func)(kal_uint8);
319 void (*read_back)(kal_uint8);
320}BMT_MeasFuncs;
321
322// ============================================================ //
323// Enumeration for BMT Module Only
324// ============================================================ //
325typedef enum{
326 USB_IN_STATE,
327 USB100_STATE,
328 USB500_STATE,
329 USB_OUT_STATE,
330 AC_IN_STATE,
331 AC_OUT_STATE,
332 USB_INIT_STATE
333}bmt_usb_state_enum;
334
335typedef enum{
336 BMT_AC_IN,
337 BMT_USB_IN
338}bmt_usb_charger_enum;
339
340// ============================================================ //
341// Useless Enumeration
342// ============================================================ //
343// Charging status enum
344typedef enum
345{
346 BMT_CHR_STATUS_NONE = 0x00000000,
347 BMT_CHR_STATUS_CHARGE_CURRENT_TOO_HIGH = 0x00000001, // BIT00
348 BMT_CHR_STATUS_CHARGE_CURRENT_TOO_LOW = 0x00000002, // BIT01
349 BMT_CHR_STATUS_DISCHARGE_CURRENT_TOO_HIGH = 0x00000004, // BIT02
350 BMT_CHR_STATUS_CHARGE_VBATTEMP_TOO_HIGH = 0x00000008, // BIT03
351 BMT_CHR_STATUS_CHARGE_VBATTEMP_TOO_LOW = 0x00000010, // BIT04
352 BMT_CHR_STATUS_CHARGE_VBAT_TOO_HIGH = 0x00000020, // BIT05
353 BMT_CHR_STATUS_CHARGE_VCHARGER_TOO_HIGH = 0x00000040, // BIT06
354 BMT_CHR_STATUS_CHARGE_VCHARGER_TOO_LOW = 0x00000080, // BIT07
355 BMT_CHR_STATUS_CHARGE_FULL = 0x00000100, // BIT08
356 BMT_CHR_STATUS_BATT_BAD_CONTACT = 0x00000200, // BIT09
357 BMT_CHR_STATUS_TALK_HOLD = 0x00000400, // BIT10
358
359 BMT_CHR_STATUS_MAX = 0x10000000 // BIT31
360}bmt_chr_status_enum;
361
362
363// ============================================================
364// Exported APIs (Only for BMT Module)
365
366/* For ADC schedule & measure*/
367extern kal_int32 adc_measureVoltage(kal_uint8 chann, double *adc_value);
368
369#ifdef __BMT_CHARGE_GUARD_TIME__
370extern void bmt_set_guardtimer(kal_uint32 tick);
371extern void bmt_stop_guardtimer(void);
372#endif // #ifdef __BMT_CHARGE_GUARD_TIME__
373#if defined(__DRV_BMT_ESTIMATIVE_TIMER_ON_TOPOFF__)
374extern void bmt_set_estimativetimer(kal_uint32 tick);
375extern void bmt_stop_estimativetimer(void);
376#endif // #if defined(__DRV_BMT_ESTIMATIVE_TIMER_ON_TOPOFF__)
377
378extern void bmt_stop_stoptimer(void);
379extern void BMT_Charge(kal_bool data); /* in drv directory */
380extern void bmt_initialize(void);
381extern void bmt_set_chr_current(void);
382extern void bmt_Modify_PowerOn_Type(kal_uint8 power_type);
383extern void bmt_find_and_set_the_nearest_current(PMU_CHR_CURRENT_ENUM SetCurrent);
384extern void bmt_find_and_set_the_nearest_charger_high_voltage(DCL_UINT32 voltage);
385extern kal_uint8 bmt_Get_PowerOn_Type(void);
386extern kal_bool bmt_frequently_check_on_state(void);
387#if defined(DRV_BMT_HW_PRECC_WORKAROUND)
388extern kal_bool bmt_frequently_check_off_state(void);
389#endif
390extern kal_bool BMT_VBatVoltageIsFull(kal_uint32 voltage);
391extern kal_bool BMT_Current_Voltage(DCL_ADC_CHANNEL_TYPE_ENUM ch, kal_uint32 *voltage, double *adc_value);
392extern kal_bool bmt_check_if_bat_on(void);
393extern bmt_usb_charger_enum bmt_IsUSBorCharger(void);
394
395#if defined(__DRV_BATTERY_EXIST_DETECTION__)
396extern kal_uint32 bmt_get_batt_exist_det_period(void);
397#endif // #if defined(__DRV_BATTERY_EXIST_DETECTION__)
398extern DCL_STATUS bmt_get_customized_para(BMT_CTRL_GET_CUSTOMIZED_PARA_T *GetCustomizedPara);
399
400// ============================================================
401// External Variables
402extern bmt_customized_struct *bmt_charging_para;
403extern bmt_customized_struct bmt_custom_chr_def;
404#if defined(DRV_BMT_HW_PRECC_WORKAROUND)
405extern kal_bool SW_Workaround_Flag;
406extern kal_bool Manual_Disable_Charge_Flag;
407extern kal_uint8 HW_Plug_Status;
408#endif
409
410// ============================================================
411// MoDIS parser skip start
412// Exported functions, used by driver level functions
413
414// MoDIS parser skip end
415
416// ============================================================
417// MoDIS parser skip start
418// Unknown functions, maybe previous owner forgot to delete
419
420// MoDIS parser skip end
421
422#if !defined(DRV_BMT_OFF)
423
424#else // !defined(DRV_BMT_OFF)
425
426#endif // !defined(DRV_BMT_OFF)
427
428#endif // End of #ifndef _BMT_SW_H
429