[Feature]Upload Modem source code
Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/custom/driver/audio/MT2735_IVT/DEFAULT/temp.txt b/mcu/custom/driver/audio/MT2735_IVT/DEFAULT/temp.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/mcu/custom/driver/audio/MT2735_IVT/DEFAULT/temp.txt
diff --git a/mcu/custom/driver/audio/_Default_BB/MT2735/AudCoeff.h b/mcu/custom/driver/audio/_Default_BB/MT2735/AudCoeff.h
new file mode 100644
index 0000000..005ca96
--- /dev/null
+++ b/mcu/custom/driver/audio/_Default_BB/MT2735/AudCoeff.h
@@ -0,0 +1,469 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * AudCoeff.h
+ *
+ * Project:
+ * --------
+ * MAUI
+ *
+ * Description:
+ * ------------
+ * This file contains `vendor' defined logical data items stored in NVRAM.
+ * These logical data items are used in object code of Protocol Stack software.
+ *
+ * As for customizable logical data items, they are defined in nvram_user_config.c
+ *
+ * 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!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __AUDCOEFF_H__
+#define __AUDCOEFF_H__
+
+/******************** INPUT FIR ********************************/
+
+#define SPEECH_INPUT_FIR_COEFF_NORMAL_DEFAULT \
+ { /* 0: Input FIR coefficients for 2G/3G Normal mode */ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 \
+ }
+
+#define SPEECH_INPUT_FIR_COEFF_HEADSET_DEFAULT \
+ { /* 1: Input FIR coefficients for 2G/3G/VoIP Headset mode */ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 \
+ }
+
+#define SPEECH_INPUT_FIR_COEFF_HANDFREE_DEFAULT \
+ { /* 2: Input FIR coefficients for 2G/3G Handfree mode */ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 \
+ }
+
+#define SPEECH_INPUT_FIR_COEFF_BT_DEFAULT \
+ { /* 3: Input FIR coefficients for 2G/3G/VoIP BT mode */ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 \
+ }
+
+#define SPEECH_INPUT_FIR_COEFF_VOIP_NORMAL_DEFAULT \
+ { /* 4: Input FIR coefficients for VoIP Normal mode */ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 \
+ }
+
+#define SPEECH_INPUT_FIR_COEFF_VOIP_HANDFREE_DEFAULT \
+ { /* 5: Input FIR coefficients for VoIP Handfree mode */ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 \
+ }
+
+#define SPEECH_INPUT_FIR_COEFF_DEFAULT \
+{ \
+ SPEECH_INPUT_FIR_COEFF_NORMAL_DEFAULT, \
+ SPEECH_INPUT_FIR_COEFF_HEADSET_DEFAULT, \
+ SPEECH_INPUT_FIR_COEFF_HANDFREE_DEFAULT, \
+ SPEECH_INPUT_FIR_COEFF_BT_DEFAULT, \
+ SPEECH_INPUT_FIR_COEFF_VOIP_NORMAL_DEFAULT, \
+ SPEECH_INPUT_FIR_COEFF_VOIP_HANDFREE_DEFAULT \
+}
+
+/******************** OUTPUT FIR ********************************/
+
+#define SPEECH_OUTPUT_FIR_COEFF_NORMAL_DEFAULT \
+ { /* 0: Output FIR coefficients for 2G/3G Normal mode */ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 \
+ }
+
+#define SPEECH_OUTPUT_FIR_COEFF_HEADSET_DEFAULT \
+ { /* 1: Output FIR coefficients for 2G/3G/VoIP Headset mode */ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 \
+ }
+
+#define SPEECH_OUTPUT_FIR_COEFF_HANDFREE_DEFAULT \
+ { /* 2: Output FIR coefficients for 2G/3G Handfree mode */ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 \
+ }
+
+#define SPEECH_OUTPUT_FIR_COEFF_BT_DEFAULT \
+ { /* 3: Output FIR coefficients for 2G/3G/VoIP BT mode */ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 \
+ }
+
+#define SPEECH_OUTPUT_FIR_COEFF_VOIP_NORMAL_DEFAULT \
+ { /* 4: Output FIR coefficients for VoIP Normal mode */ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 \
+ }
+
+#define SPEECH_OUTPUT_FIR_COEFF_VOIP_HANDFREE_DEFAULT \
+ { /* 5: Output FIR coefficients for VoIP Handfree mode */ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0 \
+ }
+
+#define SPEECH_OUTPUT_FIR_COEFF_DEFAULT \
+{ \
+ SPEECH_OUTPUT_FIR_COEFF_NORMAL_DEFAULT, \
+ SPEECH_OUTPUT_FIR_COEFF_HEADSET_DEFAULT, \
+ SPEECH_OUTPUT_FIR_COEFF_HANDFREE_DEFAULT, \
+ SPEECH_OUTPUT_FIR_COEFF_BT_DEFAULT, \
+ SPEECH_OUTPUT_FIR_COEFF_VOIP_NORMAL_DEFAULT, \
+ SPEECH_OUTPUT_FIR_COEFF_VOIP_HANDFREE_DEFAULT \
+}
+
+/******************** WB INPUT FIR ********************************/
+
+#if 1//#ifdef __AMRWB_LINK_SUPPORT__
+
+#define WB_SPEECH_INPUT_FIR_COEFF_NORMAL_DEFAULT \
+ { /* 0: Input FIR coefficients for 2G/3G Normal mode */ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \
+ }
+
+#define WB_SPEECH_INPUT_FIR_COEFF_HEADSET_DEFAULT \
+ { /* 1: Input FIR coefficients for 2G/3G/VoIP Headset mode */ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \
+ }
+
+#define WB_SPEECH_INPUT_FIR_COEFF_HANDFREE_DEFAULT \
+ { /* 2: Input FIR coefficients for 2G/3G Handfree mode */ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \
+ }
+
+#define WB_SPEECH_INPUT_FIR_COEFF_BT_DEFAULT \
+ { /* 3: Input FIR coefficients for 2G/3G/VoIP BT mode */ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \
+ }
+
+#define WB_SPEECH_INPUT_FIR_COEFF_VOIP_NORMAL_DEFAULT \
+ { /* 4: Input FIR coefficients for VoIP Normal mode */ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \
+ }
+
+#define WB_SPEECH_INPUT_FIR_COEFF_VOIP_HANDFREE_DEFAULT \
+ { /* 5: Input FIR coefficients for VoIP Handfree mode */ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \
+ }
+
+#define WB_SPEECH_INPUT_FIR_COEFF_DEFAULT \
+{ \
+ WB_SPEECH_INPUT_FIR_COEFF_NORMAL_DEFAULT, \
+ WB_SPEECH_INPUT_FIR_COEFF_HEADSET_DEFAULT, \
+ WB_SPEECH_INPUT_FIR_COEFF_HANDFREE_DEFAULT, \
+ WB_SPEECH_INPUT_FIR_COEFF_BT_DEFAULT, \
+ WB_SPEECH_INPUT_FIR_COEFF_VOIP_NORMAL_DEFAULT, \
+ WB_SPEECH_INPUT_FIR_COEFF_VOIP_HANDFREE_DEFAULT \
+}
+
+#endif //__AMRWB_LINK_SUPPORT__
+
+/******************** WB OUTPUT FIR ********************************/
+
+#if 1//#ifdef __AMRWB_LINK_SUPPORT__
+
+#define WB_SPEECH_OUTPUT_FIR_COEFF_NORMAL_DEFAULT \
+ { /* 0: Output FIR coefficients for 2G/3G Normal mode */ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \
+ }
+
+#define WB_SPEECH_OUTPUT_FIR_COEFF_HEADSET_DEFAULT \
+ { /* 1: Output FIR coefficients for 2G/3G/VoIP Headset mode */ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \
+ }
+
+#define WB_SPEECH_OUTPUT_FIR_COEFF_HANDFREE_DEFAULT \
+ { /* 2: Output FIR coefficients for 2G/3G Handfree mode */ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \
+ }
+
+#define WB_SPEECH_OUTPUT_FIR_COEFF_BT_DEFAULT \
+ { /* 3: Output FIR coefficients for 2G/3G/VoIP BT mode */ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \
+ }
+
+#define WB_SPEECH_OUTPUT_FIR_COEFF_VOIP_NORMAL_DEFAULT \
+ { /* 4: Output FIR coefficients for VoIP Normal mode */ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \
+ }
+
+#define WB_SPEECH_OUTPUT_FIR_COEFF_VOIP_HANDFREE_DEFAULT \
+ { /* 5: Output FIR coefficients for VoIP Handfree mode */ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \
+ }
+
+#define WB_SPEECH_OUTPUT_FIR_COEFF_DEFAULT \
+{ \
+ WB_SPEECH_OUTPUT_FIR_COEFF_NORMAL_DEFAULT, \
+ WB_SPEECH_OUTPUT_FIR_COEFF_HEADSET_DEFAULT, \
+ WB_SPEECH_OUTPUT_FIR_COEFF_HANDFREE_DEFAULT, \
+ WB_SPEECH_OUTPUT_FIR_COEFF_BT_DEFAULT, \
+ WB_SPEECH_OUTPUT_FIR_COEFF_VOIP_NORMAL_DEFAULT, \
+ WB_SPEECH_OUTPUT_FIR_COEFF_VOIP_HANDFREE_DEFAULT \
+}
+
+#endif //__AMRWB_LINK_SUPPORT__
+
+#endif //__AUDCOEFF_H__
+
diff --git a/mcu/custom/driver/audio/_Default_BB/MT2735/afe.c b/mcu/custom/driver/audio/_Default_BB/MT2735/afe.c
new file mode 100644
index 0000000..d3c43e8
--- /dev/null
+++ b/mcu/custom/driver/audio/_Default_BB/MT2735/afe.c
@@ -0,0 +1,112 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * afe.c
+ *
+ * Project:
+ * --------
+ * MT6219
+ *
+ * Description:
+ * ------------
+ * Audio Front End
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *------------------------------------------------------------------------------
+ * $Revision: 1.1 $
+ * $Modtime: May 16 2005 23:11:26 $
+ * $Log: //mtkvs01/vmdata/Maui_sw/archives/mcu/custom/audio/MT6229_EVB/afe.c-arc $
+ *
+ * 11 01 2012 xenia.tsou
+ * [MOLY00005322] TATAKA merge to MOLY
+ * .
+ *
+ * 08 23 2012 sheila.chen
+ * [MOLY00000112] [MT6583] Pre-integration
+ * Prepare MT6583 customer folder
+ *
+ * 08 23 2012 sheila.chen
+ * [MOLY00000112] [MT6583] Pre-integration
+ * 6583 Customer folder preparation
+ *
+ * 06 22 2012 sheila.chen
+ * removed!
+ * Add MT6577 settings.
+ *
+ * 12 01 2011 peggy.yeh
+ * removed!
+ * Back out changelist 519486
+ *
+ * 06 03 2011 vanessa.tsai
+ * removed!
+ * .
+ *
+ *******************************************************************************/
+
+// #define AFE_VAC_DCON1 (volatile unsigned short*)(0xA40F000CL) /* AFE Voice Analog Circuit Control Register 1 */
+// #define AFE_VAC_CON0 (volatile unsigned short*)(0x840C0104L) /* AFE Voice Analog-Circuit Control Register 0 */
+
+/*****************************************************************************
+* FUNCTION
+* AFE_Initialize
+* DESCRIPTION
+* This function is to set the initial value of AFE HW.
+*****************************************************************************/
+void AFE_Initialize( void )
+{
+ /// AFE_VAC_CON0::VCALI is chip dependent, will be set in l1audio\afe2.c
+ /// immediately after this function is called.
+ /// set audio output == differential mode.
+ //*AFE_VAC_CON0 = 0x00;
+ //*AFE_VAC_DCON1 = 0x80;
+}
+
+/*****************************************************************************
+* FUNCTION
+* AFE_SwitchExtAmplifier
+* DESCRIPTION
+* This function is to turn on/off external amplifier.
+*****************************************************************************/
+void AFE_SwitchExtAmplifier( char sw_on )
+{
+ return;
+}
diff --git a/mcu/custom/driver/audio/_Default_BB/MT2735/audcoeff.c b/mcu/custom/driver/audio/_Default_BB/MT2735/audcoeff.c
new file mode 100644
index 0000000..16031a6
--- /dev/null
+++ b/mcu/custom/driver/audio/_Default_BB/MT2735/audcoeff.c
@@ -0,0 +1,293 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * audcoeff.c
+ *
+ * Project:
+ * --------
+ * MAUI Project
+ *
+ * Description:
+ * ------------
+ * Default FIR Coefficients Table
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+#include "kal_public_api.h"
+#include "l1audio.h"
+#include "audcoeff_default.h"
+#include "AudCoeff.h"
+#include "audio_nvram_def.h"
+
+#include "device.h"
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+const signed short Speech_Input_FIR_Coeff[6][45] = SPEECH_INPUT_FIR_COEFF_DEFAULT;
+const signed short Speech_Output_FIR_Coeff[6][45] = SPEECH_OUTPUT_FIR_COEFF_DEFAULT;
+
+
+const signed short WB_Speech_Input_FIR_Coeff[6][90] = WB_SPEECH_INPUT_FIR_COEFF_DEFAULT;
+const signed short WB_Speech_Output_FIR_Coeff[6][90] = WB_SPEECH_OUTPUT_FIR_COEFF_DEFAULT;
+
+
+/*
+const unsigned short Ext_op_on_delay = 0; // count in frames, 1 frame = 4.615ms
+const unsigned short Ext_op_off_delay = 0; // count in frames, 1 frame = 4.615ms
+*/
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+/*
+ * Loudness Configuration Parameter
+ * Refer to audcoeff_default.h
+ */
+/*
+const unsigned char Loudness_Ringtone_Mode = DEFAULT_LOUDNESS_RINGTONE_MODE;
+const unsigned char Loudness_NonRingtone_Mode = DEFAULT_LOUDNESS_NON_RINGTONE_MODE;
+*/
+
+/*
+ * The Bluetooth DAI Hardware COnfiguration Parameter
+ * Refer to audcoeff_default.h
+ */
+ /*
+const unsigned char Bluetooth_Sync_Type = DEFAULT_BLUETOOTH_SYNC_TYPE;
+const unsigned char Bluetooth_Sync_Length = DEFAULT_BLUETOOTH_SYNC_LENGTH;
+*/
+
+/*
+ * The Digital Microphone Hardware COnfiguration Parameter
+ * Refer to audcoeff_default.h
+ */
+/*
+const unsigned char Digital_Mic1_Phase = DEFAULT_DIGITAL_MIC_CHANNEL1_PHASE;
+const unsigned char Digital_Mic2_Phase = DEFAULT_DIGITAL_MIC_CHANNEL2_PHASE;
+const unsigned char Digital_Mic_Clock_Selection = DEFAULT_DIGITAL_MIC_CLOCK_SELECTION;
+*/
+
+/*
+ * 3D Surround Loudspeaker Mode Customization Parameter.
+ * Details about these three variables are illustrated in Audio Post-Processing Interface doc.
+ */
+/*
+#if defined(__BES_SURROUND_LSPK__) || defined(__BES_SURROUND_EARP__)
+const int D_Distance = DEFAULT_D_DISTANCE;
+const int D_Loudspeaker = DEFAULT_D_LOUDSPEAKER;
+const int SurroundLevelLoudspeaker = DEFAULT_SURROUNDLEVELLOUDSPEAKER;
+#endif
+*/
+
+
+#if !defined(__FUE__)
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+kal_uint8 custom_cfg_hw_aud_output_path( kal_uint8 speaker_id )
+{
+ #if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+ #endif
+ return 0;
+}
+
+
+
+kal_uint8 custom_cfg_hw_aud_input_path( kal_uint8 mic_id )
+{
+ kal_uint8 mic_device = 0;
+
+ switch(mic_id)
+ {
+ case AUDIO_DEVICE_MIC1:
+ mic_device = 0;
+ break;
+ case AUDIO_DEVICE_MIC2:
+ mic_device = 1;
+ break;
+ case AUDIO_DEVICE_FMRR:
+ mic_device = 3; /*L1SP_LNA_FMRR*/
+ default:
+ break;
+ }
+
+ return mic_device;
+}
+#endif //!defined(__FUE__)
+
diff --git a/mcu/custom/driver/audio/_Default_BB/MT2735/nvram_default_audio.c b/mcu/custom/driver/audio/_Default_BB/MT2735/nvram_default_audio.c
new file mode 100644
index 0000000..f95d257
--- /dev/null
+++ b/mcu/custom/driver/audio/_Default_BB/MT2735/nvram_default_audio.c
@@ -0,0 +1,553 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * nvram_default_audio.c
+ *
+ * Project:
+ * --------
+ * MAUI
+ *
+ * Description:
+ * ------------
+ * This file is for customers to config/customize their audio related parameters to NVRAM Layer and
+ * Driver Layer.
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+#include "nvram_default_audio.h"
+
+#if defined(KLM2003_BB)
+#define MICROPHONE_VOLUME 80
+#define SIDE_TONE_VOLUME 96
+#elif defined(CHICAGO2003_BB)
+#define MICROPHONE_VOLUME 80
+#define SIDE_TONE_VOLUME 80
+#else
+#define MICROPHONE_VOLUME 104
+#define SIDE_TONE_VOLUME 56
+#endif
+
+#define GAIN_NOR_MED_VOL_MAX 160
+#define GAIN_HED_MED_VOL_MAX 243 /*Headset*/
+#define GAIN_HND_MED_VOL_MAX 192 /* Handfree*/
+#define GAIN_TVO_VOL_MAX 243
+
+#define GAIN_NOR_MED_VOL_STEP 4 /* 1=0.5dB as unit */
+#define GAIN_HED_MED_VOL_STEP 6 /* 1=0.5dB as unit */
+#define GAIN_HND_MED_VOL_STEP 3 /* 1=0.5dB as unit */
+#define GAIN_TVO_VOL_STEP 6 /* 1=0.5dB as unit */
+
+#define GAIN_TVO_VOL0 184
+#define GAIN_TVO_VOL1 196
+#define GAIN_TVO_VOL2 208
+#define GAIN_TVO_VOL3 214
+#define GAIN_TVO_VOL4 220
+#define GAIN_TVO_VOL5 232
+#define GAIN_TVO_VOL6 243
+
+#define GAIN_NOR_CTN_VOL 3
+#define GAIN_NOR_CTN_VOL0 127
+#define GAIN_NOR_CTN_VOL1 127
+#define GAIN_NOR_CTN_VOL2 127
+#define GAIN_NOR_CTN_VOL3 127
+#define GAIN_NOR_CTN_VOL4 127
+#define GAIN_NOR_CTN_VOL5 127
+#define GAIN_NOR_CTN_VOL6 127
+
+#define GAIN_NOR_KEY_VOL 3
+#define GAIN_NOR_KEY_VOL0 67
+#define GAIN_NOR_KEY_VOL1 87
+#define GAIN_NOR_KEY_VOL2 107
+#define GAIN_NOR_KEY_VOL3 127
+#define GAIN_NOR_KEY_VOL4 147
+#define GAIN_NOR_KEY_VOL5 167
+#define GAIN_NOR_KEY_VOL6 187
+
+#define GAIN_NOR_MIC_VOL 3
+#define GAIN_NOR_MIC_VOL0 240
+#define GAIN_NOR_MIC_VOL1 240
+#define GAIN_NOR_MIC_VOL2 240
+#define GAIN_NOR_MIC_VOL3 80
+#define GAIN_NOR_MIC_VOL4 240
+#define GAIN_NOR_MIC_VOL5 240
+#define GAIN_NOR_MIC_VOL6 240
+
+#define GAIN_NOR_GMI_VOL 3
+#define GAIN_NOR_GMI_VOL0 40
+#define GAIN_NOR_GMI_VOL1 80
+#define GAIN_NOR_GMI_VOL2 120
+#define GAIN_NOR_GMI_VOL3 160
+#define GAIN_NOR_GMI_VOL4 200
+#define GAIN_NOR_GMI_VOL5 240
+#define GAIN_NOR_GMI_VOL6 255
+
+#define GAIN_NOR_SPH_VOL 3
+#define GAIN_NOR_SPH_VOL0 64
+#define GAIN_NOR_SPH_VOL1 96
+#define GAIN_NOR_SPH_VOL2 112
+#define GAIN_NOR_SPH_VOL3 144
+#define GAIN_NOR_SPH_VOL4 176
+#define GAIN_NOR_SPH_VOL5 208
+#define GAIN_NOR_SPH_VOL6 240
+
+#define GAIN_NOR_SID_VOL 3
+#define GAIN_NOR_SID_VOL0 SIDE_TONE_VOLUME
+#define GAIN_NOR_SID_VOL1 SIDE_TONE_VOLUME
+#define GAIN_NOR_SID_VOL2 SIDE_TONE_VOLUME
+#define GAIN_NOR_SID_VOL3 SIDE_TONE_VOLUME
+#define GAIN_NOR_SID_VOL4 SIDE_TONE_VOLUME
+#define GAIN_NOR_SID_VOL5 SIDE_TONE_VOLUME
+#define GAIN_NOR_SID_VOL6 SIDE_TONE_VOLUME
+
+#define GAIN_NOR_MED_VOL 3
+#define GAIN_NOR_MED_VOL0 32
+#define GAIN_NOR_MED_VOL1 48
+#define GAIN_NOR_MED_VOL2 64
+#define GAIN_NOR_MED_VOL3 80
+#define GAIN_NOR_MED_VOL4 96
+#define GAIN_NOR_MED_VOL5 112
+#define GAIN_NOR_MED_VOL6 128
+
+/* define Gain For Headset */
+/* speaker, microphone, loudspeaker, buzzer */
+#define GAIN_HED_CTN_VOL 3
+#define GAIN_HED_CTN_VOL0 4
+#define GAIN_HED_CTN_VOL1 8
+#define GAIN_HED_CTN_VOL2 16
+#define GAIN_HED_CTN_VOL3 32
+#define GAIN_HED_CTN_VOL4 64
+#define GAIN_HED_CTN_VOL5 96
+#define GAIN_HED_CTN_VOL6 127
+
+#define GAIN_HED_KEY_VOL 1
+#define GAIN_HED_KEY_VOL0 4
+#define GAIN_HED_KEY_VOL1 8
+#define GAIN_HED_KEY_VOL2 12
+#define GAIN_HED_KEY_VOL3 16
+#define GAIN_HED_KEY_VOL4 20
+#define GAIN_HED_KEY_VOL5 24
+#define GAIN_HED_KEY_VOL6 28
+
+#define GAIN_HED_MIC_VOL 3
+#define GAIN_HED_MIC_VOL0 160
+#define GAIN_HED_MIC_VOL1 160
+#define GAIN_HED_MIC_VOL2 160
+#define GAIN_HED_MIC_VOL3 160
+#define GAIN_HED_MIC_VOL4 160
+#define GAIN_HED_MIC_VOL5 160
+#define GAIN_HED_MIC_VOL6 160
+
+#define GAIN_HED_GMI_VOL 3
+#define GAIN_HED_GMI_VOL0 40
+#define GAIN_HED_GMI_VOL1 80
+#define GAIN_HED_GMI_VOL2 120
+#define GAIN_HED_GMI_VOL3 160
+#define GAIN_HED_GMI_VOL4 200
+#define GAIN_HED_GMI_VOL5 240
+#define GAIN_HED_GMI_VOL6 255
+
+#define GAIN_HED_SPH_VOL 3
+#define GAIN_HED_SPH_VOL0 16
+#define GAIN_HED_SPH_VOL1 32
+#define GAIN_HED_SPH_VOL2 48
+#define GAIN_HED_SPH_VOL3 64
+#define GAIN_HED_SPH_VOL4 80
+#define GAIN_HED_SPH_VOL5 96
+#define GAIN_HED_SPH_VOL6 112
+
+#define GAIN_HED_SID_VOL 3
+#define GAIN_HED_SID_VOL0 0
+#define GAIN_HED_SID_VOL1 0
+#define GAIN_HED_SID_VOL2 0
+#define GAIN_HED_SID_VOL3 0
+#define GAIN_HED_SID_VOL4 0
+#define GAIN_HED_SID_VOL5 0
+#define GAIN_HED_SID_VOL6 0
+
+#define GAIN_HED_MED_VOL 3
+#define GAIN_HED_MED_VOL0 184
+#define GAIN_HED_MED_VOL1 196
+#define GAIN_HED_MED_VOL2 208
+#define GAIN_HED_MED_VOL3 214
+#define GAIN_HED_MED_VOL4 220
+#define GAIN_HED_MED_VOL5 232
+#define GAIN_HED_MED_VOL6 243
+
+
+/* define Gain For Handfree */
+/* speaker, microphone, loudspeaker, buzzer */
+#define GAIN_HND_CTN_VOL 3
+#define GAIN_HND_CTN_VOL0 127
+#define GAIN_HND_CTN_VOL1 127
+#define GAIN_HND_CTN_VOL2 127
+#define GAIN_HND_CTN_VOL3 127
+#define GAIN_HND_CTN_VOL4 127
+#define GAIN_HND_CTN_VOL5 127
+#define GAIN_HND_CTN_VOL6 127
+
+#define GAIN_HND_KEY_VOL 3
+#define GAIN_HND_KEY_VOL0 67
+#define GAIN_HND_KEY_VOL1 87
+#define GAIN_HND_KEY_VOL2 107
+#define GAIN_HND_KEY_VOL3 127
+#define GAIN_HND_KEY_VOL4 147
+#define GAIN_HND_KEY_VOL5 167
+#define GAIN_HND_KEY_VOL6 187
+
+#define GAIN_HND_MIC_VOL 3
+#define GAIN_HND_MIC_VOL0 88
+#define GAIN_HND_MIC_VOL1 88
+#define GAIN_HND_MIC_VOL2 88
+#define GAIN_HND_MIC_VOL3 88
+#define GAIN_HND_MIC_VOL4 88
+#define GAIN_HND_MIC_VOL5 88
+#define GAIN_HND_MIC_VOL6 88
+
+#define GAIN_HND_GMI_VOL 3
+#define GAIN_HND_GMI_VOL0 255
+#define GAIN_HND_GMI_VOL1 255
+#define GAIN_HND_GMI_VOL2 255
+#define GAIN_HND_GMI_VOL3 255
+#define GAIN_HND_GMI_VOL4 255
+#define GAIN_HND_GMI_VOL5 255
+#define GAIN_HND_GMI_VOL6 255
+
+#define GAIN_HND_SPH_VOL 3
+#define GAIN_HND_SPH_VOL0 80
+#define GAIN_HND_SPH_VOL1 96
+#define GAIN_HND_SPH_VOL2 112
+#define GAIN_HND_SPH_VOL3 128
+#define GAIN_HND_SPH_VOL4 144
+#define GAIN_HND_SPH_VOL5 160
+#define GAIN_HND_SPH_VOL6 176
+
+#define GAIN_HND_SID_VOL 3
+#define GAIN_HND_SID_VOL0 0
+#define GAIN_HND_SID_VOL1 0
+#define GAIN_HND_SID_VOL2 0
+#define GAIN_HND_SID_VOL3 0
+#define GAIN_HND_SID_VOL4 0
+#define GAIN_HND_SID_VOL5 0
+#define GAIN_HND_SID_VOL6 0
+
+#define GAIN_HND_MED_VOL 3
+#define GAIN_HND_MED_VOL0 32
+#define GAIN_HND_MED_VOL1 48
+#define GAIN_HND_MED_VOL2 64
+#define GAIN_HND_MED_VOL3 80
+#define GAIN_HND_MED_VOL4 96
+#define GAIN_HND_MED_VOL5 112
+#define GAIN_HND_MED_VOL6 128
+
+kal_uint8 const NVRAM_EF_CUST_ACOUSTIC_DATA_DEFAULT[] = {
+ /* Normal: Call Tone, Keypad Tone, Microphone, GMI Tone, Speech Tone, Side Tone */
+ GAIN_NOR_CTN_VOL0,GAIN_NOR_CTN_VOL1, GAIN_NOR_CTN_VOL2, GAIN_NOR_CTN_VOL3, GAIN_NOR_CTN_VOL4, GAIN_NOR_CTN_VOL5, GAIN_NOR_CTN_VOL6,
+ GAIN_NOR_KEY_VOL0, GAIN_NOR_KEY_VOL1, GAIN_NOR_KEY_VOL2, GAIN_NOR_KEY_VOL3, GAIN_NOR_KEY_VOL4, GAIN_NOR_KEY_VOL5, GAIN_NOR_KEY_VOL6,
+ GAIN_NOR_MIC_VOL0, GAIN_NOR_MIC_VOL1, GAIN_NOR_MIC_VOL2, GAIN_NOR_MIC_VOL3, GAIN_NOR_MIC_VOL4, GAIN_NOR_MIC_VOL5, GAIN_NOR_MIC_VOL6,
+ GAIN_NOR_GMI_VOL0, GAIN_NOR_GMI_VOL1, GAIN_NOR_GMI_VOL2, GAIN_NOR_GMI_VOL3, GAIN_NOR_GMI_VOL4, GAIN_NOR_GMI_VOL5, GAIN_NOR_GMI_VOL6,
+ GAIN_NOR_SPH_VOL0, GAIN_NOR_SPH_VOL1, GAIN_NOR_SPH_VOL2, GAIN_NOR_SPH_VOL3, GAIN_NOR_SPH_VOL4, GAIN_NOR_SPH_VOL5, GAIN_NOR_SPH_VOL6,
+ GAIN_NOR_SID_VOL0, GAIN_NOR_SID_VOL1, GAIN_NOR_SID_VOL2, GAIN_NOR_SID_VOL3, GAIN_NOR_SID_VOL4, GAIN_NOR_SID_VOL5, GAIN_NOR_SID_VOL6,
+ GAIN_NOR_MED_VOL0,GAIN_NOR_MED_VOL1, GAIN_NOR_MED_VOL2, GAIN_NOR_MED_VOL3, GAIN_NOR_MED_VOL4, GAIN_NOR_MED_VOL5, GAIN_NOR_MED_VOL6
+ ,
+ /* Handset: Call Tone, Keypad Tone, Microphone, GMI Tone, Speech Tone */
+ GAIN_HED_CTN_VOL0, GAIN_HED_CTN_VOL1, GAIN_HED_CTN_VOL2, GAIN_HED_CTN_VOL3, GAIN_HED_CTN_VOL4, GAIN_HED_CTN_VOL5, GAIN_HED_CTN_VOL6,
+ GAIN_HED_KEY_VOL0, GAIN_HED_KEY_VOL1, GAIN_HED_KEY_VOL2, GAIN_HED_KEY_VOL3, GAIN_HED_KEY_VOL4, GAIN_HED_KEY_VOL5, GAIN_HED_KEY_VOL6,
+ GAIN_HED_MIC_VOL0, GAIN_HED_MIC_VOL1, GAIN_HED_MIC_VOL2, GAIN_HED_MIC_VOL3, GAIN_HED_MIC_VOL4, GAIN_HED_MIC_VOL5, GAIN_HED_MIC_VOL6,
+ GAIN_HED_GMI_VOL0, GAIN_HED_GMI_VOL1, GAIN_HED_GMI_VOL2, GAIN_HED_GMI_VOL3, GAIN_HED_GMI_VOL4, GAIN_HED_GMI_VOL5, GAIN_HED_GMI_VOL6,
+ GAIN_HED_SPH_VOL0, GAIN_HED_SPH_VOL1, GAIN_HED_SPH_VOL2, GAIN_HED_SPH_VOL3, GAIN_HED_SPH_VOL4, GAIN_HED_SPH_VOL5, GAIN_HED_SPH_VOL6,
+ GAIN_HED_SID_VOL0, GAIN_HED_SID_VOL1, GAIN_HED_SID_VOL2, GAIN_HED_SID_VOL3, GAIN_HED_SID_VOL4, GAIN_HED_SID_VOL5, GAIN_HED_SID_VOL6,
+ GAIN_HED_MED_VOL0,GAIN_HED_MED_VOL1, GAIN_HED_MED_VOL2, GAIN_HED_MED_VOL3, GAIN_HED_MED_VOL4, GAIN_HED_MED_VOL5, GAIN_HED_MED_VOL6
+ ,
+ /* Handfree: Call Tone, Keypad Tone, Microphone, GMI Tone, Speech Tone */
+ GAIN_HND_CTN_VOL0, GAIN_HND_CTN_VOL1, GAIN_HND_CTN_VOL2, GAIN_HND_CTN_VOL3, GAIN_HND_CTN_VOL4, GAIN_HND_CTN_VOL5, GAIN_HND_CTN_VOL6,
+ GAIN_HND_KEY_VOL0, GAIN_HND_KEY_VOL1, GAIN_HND_KEY_VOL2, GAIN_HND_KEY_VOL3, GAIN_HND_KEY_VOL4, GAIN_HND_KEY_VOL5, GAIN_HND_KEY_VOL6,
+ GAIN_HND_MIC_VOL0, GAIN_HND_MIC_VOL1, GAIN_HND_MIC_VOL2, GAIN_HND_MIC_VOL3, GAIN_HND_MIC_VOL4, GAIN_HND_MIC_VOL5, GAIN_HND_MIC_VOL6,
+ GAIN_HND_GMI_VOL0, GAIN_HND_GMI_VOL1, GAIN_HND_GMI_VOL2, GAIN_HND_GMI_VOL3, GAIN_HND_GMI_VOL4, GAIN_HND_GMI_VOL5, GAIN_HND_GMI_VOL6,
+ GAIN_HND_SPH_VOL0, GAIN_HND_SPH_VOL1, GAIN_HND_SPH_VOL2, GAIN_HND_SPH_VOL3, GAIN_HND_SPH_VOL4, GAIN_HND_SPH_VOL5, GAIN_HND_SPH_VOL6,
+ GAIN_HND_SID_VOL0, GAIN_HND_SID_VOL1, GAIN_HND_SID_VOL2, GAIN_HND_SID_VOL3, GAIN_HND_SID_VOL4, GAIN_HND_SID_VOL5, GAIN_HND_SID_VOL6,
+ GAIN_HND_MED_VOL0, GAIN_HND_MED_VOL1, GAIN_HND_MED_VOL2, GAIN_HND_MED_VOL3, GAIN_HND_MED_VOL4, GAIN_HND_MED_VOL5, GAIN_HND_MED_VOL6
+ ,
+ /* Normal volume: CTN, SPK, MIC, BUZ, SPH, SID, MED */
+ GAIN_NOR_CTN_VOL, GAIN_NOR_KEY_VOL, GAIN_NOR_MIC_VOL, GAIN_NOR_GMI_VOL, GAIN_NOR_SPH_VOL, GAIN_NOR_SID_VOL, GAIN_NOR_MED_VOL,
+ /* Headset volume: CTN, SPK, MIC, BUZ, SPH, SID, MED */
+ GAIN_HED_CTN_VOL, GAIN_HED_KEY_VOL, GAIN_HED_MIC_VOL, GAIN_HED_GMI_VOL, GAIN_HED_SPH_VOL, GAIN_HED_SID_VOL, GAIN_HED_MED_VOL,
+ /* Handfree volume: CTN, SPK, MIC, BUZ, SPH, SID, MED */
+ GAIN_HND_CTN_VOL, GAIN_HND_KEY_VOL, GAIN_HND_MIC_VOL, GAIN_HND_GMI_VOL, GAIN_HND_SPH_VOL, GAIN_HND_SID_VOL, GAIN_HND_MED_VOL
+
+ /* Normal, Headset, Handfree mode melody volume gains */
+ ,GAIN_NOR_MED_VOL_MAX, GAIN_HED_MED_VOL_MAX, GAIN_HND_MED_VOL_MAX,GAIN_TVO_VOL_MAX,
+ /* Normal, Headset, Handfree mode melody volume gain steps */
+ GAIN_NOR_MED_VOL_STEP, GAIN_HED_MED_VOL_STEP, GAIN_HND_MED_VOL_STEP,GAIN_TVO_VOL_STEP,
+ /* TV out volume gains*/
+ GAIN_TVO_VOL0, GAIN_TVO_VOL1, GAIN_TVO_VOL2, GAIN_TVO_VOL3, GAIN_TVO_VOL4, GAIN_TVO_VOL5, GAIN_TVO_VOL6
+};
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
diff --git a/mcu/custom/driver/audio/_Default_BB/MT2735/nvram_default_audio.h b/mcu/custom/driver/audio/_Default_BB/MT2735/nvram_default_audio.h
new file mode 100644
index 0000000..9e69693
--- /dev/null
+++ b/mcu/custom/driver/audio/_Default_BB/MT2735/nvram_default_audio.h
@@ -0,0 +1,230 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * nvram_default_audio.h
+ *
+ * Project:
+ * --------
+ * MAUI
+ *
+ * Description:
+ * ------------
+ * This file is for customers to config/customize their audio parameters to NVRAM Layer and
+ * Driver Layer.
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __NVRAM_DEFAULT_AUDIO_H__
+#define __NVRAM_DEFAULT_AUDIO_H__
+
+// #include "aud_common_config.h"
+
+/**
+ * Acoustic data
+ */
+#define NVRAM_EF_CUST_ACOUSTIC_DATA_SIZE 183
+#define NVRAM_EF_CUST_ACOUSTIC_DATA_TOTAL 1
+extern const kal_uint8 NVRAM_EF_CUST_ACOUSTIC_DATA_DEFAULT[NVRAM_EF_CUST_ACOUSTIC_DATA_SIZE];
+
+/*
+ * Audio Equalizer Settings
+ */
+#define NVRAM_EF_AUDIO_EQUALIZER_COUNT 8
+#define NVRAM_EF_AUDIO_EQUALIZER_SIZE 500
+#define NVRAM_EF_AUDIO_EQUALIZER_TOTAL 1
+
+typedef struct
+{
+ kal_int16 count;
+ kal_int16 index;
+ kal_int8 magnitude[NVRAM_EF_AUDIO_EQUALIZER_COUNT][8];
+ kal_uint8 setting_name[NVRAM_EF_AUDIO_EQUALIZER_COUNT + 1][(23 + 1) * 2]; //hardcoded ENCODING_LENGTH to 2...
+} nvram_ef_audio_equalizer_struct;
+
+extern const nvram_ef_audio_equalizer_struct NVRAM_EF_AUDIO_EQUALIZER_DEFAULT[];
+
+#endif /* __NVRAM_DEFAULT_AUDIO_H__ */
+
diff --git a/mcu/custom/driver/common/MemoryDevice_TypeDef.h b/mcu/custom/driver/common/MemoryDevice_TypeDef.h
new file mode 100644
index 0000000..3e2ac31
--- /dev/null
+++ b/mcu/custom/driver/common/MemoryDevice_TypeDef.h
@@ -0,0 +1,116 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * MemoryDevice_TypeDef.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file defines the enum and data structure necessary for memory
+ * device configuration.
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __MEMDEV_TYPEDEF__
+#define __MEMDEV_TYPEDEF__
+
+
+/*****************************************************************/
+
+/**
+ * Define this if we want to include those header that RHR suggested to add.
+ */
+#define RHR_SUGGEST_ADD
+
+/**
+ * Define this if we want to exclude those header that RHR suggested to add.
+ */
+//#define RHR_SUGGEST_REMOVE
+
+/*****************************************************************/
+
+
+typedef enum
+{
+ NOR_RAM_MCP = 0,
+ NOR_FLASH,
+ RAM,
+ LPSDRAM,
+ UNUSED = 0xFF
+} ExtMemoryType_T;
+
+typedef enum
+{
+ ASYNC_ACCESS = 0,
+ SYNC_ACCESS,
+ UNDEF_ACCESS = 0xFF
+} ExtMemoryAccessType_T;
+
+#endif /* __MEMDEV_TYPEDEF__ */
+
diff --git a/mcu/custom/driver/common/adc_nvram_def.c b/mcu/custom/driver/common/adc_nvram_def.c
new file mode 100644
index 0000000..b1cce8e
--- /dev/null
+++ b/mcu/custom/driver/common/adc_nvram_def.c
@@ -0,0 +1,255 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * adc_nvram_def.c
+ *
+ * Project:
+ * --------
+ * MAUI
+ *
+ * Description:
+ * ------------
+ * This file contains `vendor' defined logical data items stored in NVRAM.
+ * These logical data items are used in object code of Protocol Stack software.
+ *
+ * As for customizable logical data items, they are defined in nvram_user_config.c
+ *
+ * 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!
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef NVRAM_NOT_PRESENT
+
+
+/*
+ * Include Headers
+ */
+
+#include "kal_general_types.h"
+
+/*
+ * NVRAM Basic Headers
+ */
+#ifdef NVRAM_AUTO_GEN
+#include "nvram_auto_gen.h"
+#endif
+
+#include "nvram_enums.h"
+
+#define NVRAM_LID_SPLIT
+#include "nvram_defs.h"
+
+#include "nvram_data_items.h"
+
+/*
+ * User Headers & Default value
+ */
+#include "adc_nvram_def.h"
+#include "drv_features_adc.h"
+
+#if !defined(DRV_ADC_OFF)
+static kal_int32 const NVRAM_EF_ADC_DEFAULT[] = {
+#if defined(DRV_ADC_MAX_CH_1)
+ ADC_CALIBRATION_SLOPE_CH0,
+ ADC_CALIBRATION_OFFSET_CH0
+#elif defined(DRV_ADC_MAX_CH_5)
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4
+#elif defined(DRV_ADC_MAX_CH_6)
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_SLOPE_CH5,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4,
+ ADC_CALIBRATION_OFFSET_CH5
+#elif defined(DRV_ADC_MAX_CH_7)
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_SLOPE_CH5, ADC_CALIBRATION_SLOPE_CH6,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4,
+ ADC_CALIBRATION_OFFSET_CH5, ADC_CALIBRATION_OFFSET_CH6
+#elif defined(DRV_ADC_MAX_CH_8)
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_SLOPE_CH5, ADC_CALIBRATION_SLOPE_CH6, ADC_CALIBRATION_SLOPE_CH7,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4,
+ ADC_CALIBRATION_OFFSET_CH5, ADC_CALIBRATION_OFFSET_CH6, ADC_CALIBRATION_OFFSET_CH7
+#elif defined(DRV_ADC_MAX_CH_9)
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_SLOPE_CH5, ADC_CALIBRATION_SLOPE_CH6, ADC_CALIBRATION_SLOPE_CH7, ADC_CALIBRATION_SLOPE_CH8,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4,
+ ADC_CALIBRATION_OFFSET_CH5, ADC_CALIBRATION_OFFSET_CH6, ADC_CALIBRATION_OFFSET_CH7, ADC_CALIBRATION_OFFSET_CH8
+#elif defined(DRV_ADC_MAX_CH_10)
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_SLOPE_CH5, ADC_CALIBRATION_SLOPE_CH6, ADC_CALIBRATION_SLOPE_CH7, ADC_CALIBRATION_SLOPE_CH8,ADC_CALIBRATION_SLOPE_CH9,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4,
+ ADC_CALIBRATION_OFFSET_CH5, ADC_CALIBRATION_OFFSET_CH6, ADC_CALIBRATION_OFFSET_CH7, ADC_CALIBRATION_OFFSET_CH8,ADC_CALIBRATION_OFFSET_CH9
+#elif defined(DRV_ADC_MAX_CH_11)
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_SLOPE_CH5, ADC_CALIBRATION_SLOPE_CH6, ADC_CALIBRATION_SLOPE_CH7, ADC_CALIBRATION_SLOPE_CH8,ADC_CALIBRATION_SLOPE_CH9,
+ ADC_CALIBRATION_SLOPE_CH10,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4,
+ ADC_CALIBRATION_OFFSET_CH5, ADC_CALIBRATION_OFFSET_CH6, ADC_CALIBRATION_OFFSET_CH7, ADC_CALIBRATION_OFFSET_CH8,ADC_CALIBRATION_OFFSET_CH9,
+ ADC_CALIBRATION_OFFSET_CH10
+#elif defined(DRV_ADC_MAX_CH_12)
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_SLOPE_CH5, ADC_CALIBRATION_SLOPE_CH6, ADC_CALIBRATION_SLOPE_CH7, ADC_CALIBRATION_SLOPE_CH8,ADC_CALIBRATION_SLOPE_CH9,
+ ADC_CALIBRATION_SLOPE_CH10, ADC_CALIBRATION_SLOPE_CH11,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4,
+ ADC_CALIBRATION_OFFSET_CH5, ADC_CALIBRATION_OFFSET_CH6, ADC_CALIBRATION_OFFSET_CH7, ADC_CALIBRATION_OFFSET_CH8,ADC_CALIBRATION_OFFSET_CH9,
+ ADC_CALIBRATION_OFFSET_CH10,ADC_CALIBRATION_OFFSET_CH11
+#elif defined(DRV_ADC_MAX_CH_13) //12 bits use small slope
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_SLOPE_CH5, ADC_CALIBRATION_SLOPE_CH6, ADC_CALIBRATION_SLOPE_CH7, ADC_CALIBRATION_SLOPE_CH8,ADC_CALIBRATION_SLOPE_CH9,
+ ADC_CALIBRATION_SLOPE_CH10, ADC_CALIBRATION_SLOPE_CH11, ADC_CALIBRATION_SLOPE_CH12,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4,
+ ADC_CALIBRATION_OFFSET_CH5, ADC_CALIBRATION_OFFSET_CH6, ADC_CALIBRATION_OFFSET_CH7, ADC_CALIBRATION_OFFSET_CH8,ADC_CALIBRATION_OFFSET_CH9,
+ ADC_CALIBRATION_OFFSET_CH10,ADC_CALIBRATION_OFFSET_CH11, ADC_CALIBRATION_OFFSET_CH12
+#elif defined(DRV_ADC_MAX_CH_14)
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_SLOPE_CH5, ADC_CALIBRATION_SLOPE_CH6, ADC_CALIBRATION_SLOPE_CH7, ADC_CALIBRATION_SLOPE_CH8,ADC_CALIBRATION_SLOPE_CH9,
+ ADC_CALIBRATION_SLOPE_CH10, ADC_CALIBRATION_SLOPE_CH11, ADC_CALIBRATION_SLOPE_CH12, ADC_CALIBRATION_SLOPE_CH13,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4,
+ ADC_CALIBRATION_OFFSET_CH5, ADC_CALIBRATION_OFFSET_CH6, ADC_CALIBRATION_OFFSET_CH7, ADC_CALIBRATION_OFFSET_CH8,ADC_CALIBRATION_OFFSET_CH9,
+ ADC_CALIBRATION_OFFSET_CH10,ADC_CALIBRATION_OFFSET_CH11, ADC_CALIBRATION_OFFSET_CH12, ADC_CALIBRATION_OFFSET_CH13
+#elif defined(DRV_ADC_MAX_CH_15)
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_SLOPE_CH5, ADC_CALIBRATION_SLOPE_CH6, ADC_CALIBRATION_SLOPE_CH7, ADC_CALIBRATION_SLOPE_CH8,ADC_CALIBRATION_SLOPE_CH9,
+ ADC_CALIBRATION_SLOPE_CH10, ADC_CALIBRATION_SLOPE_CH11, ADC_CALIBRATION_SLOPE_CH12, ADC_CALIBRATION_SLOPE_CH13, ADC_CALIBRATION_SLOPE_CH14,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4,
+ ADC_CALIBRATION_OFFSET_CH5, ADC_CALIBRATION_OFFSET_CH6, ADC_CALIBRATION_OFFSET_CH7, ADC_CALIBRATION_OFFSET_CH8,ADC_CALIBRATION_OFFSET_CH9,
+ ADC_CALIBRATION_OFFSET_CH10,ADC_CALIBRATION_OFFSET_CH11, ADC_CALIBRATION_OFFSET_CH12, ADC_CALIBRATION_OFFSET_CH13, ADC_CALIBRATION_OFFSET_CH14
+#elif defined(DRV_ADC_MAX_CH_16)
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_SLOPE_CH5, ADC_CALIBRATION_SLOPE_CH6, ADC_CALIBRATION_SLOPE_CH7, ADC_CALIBRATION_SLOPE_CH8,ADC_CALIBRATION_SLOPE_CH9,
+ ADC_CALIBRATION_SLOPE_CH10, ADC_CALIBRATION_SLOPE_CH11, ADC_CALIBRATION_SLOPE_CH12, ADC_CALIBRATION_SLOPE_CH13, ADC_CALIBRATION_SLOPE_CH14,
+ ADC_CALIBRATION_SLOPE_CH15,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4,
+ ADC_CALIBRATION_OFFSET_CH5, ADC_CALIBRATION_OFFSET_CH6, ADC_CALIBRATION_OFFSET_CH7, ADC_CALIBRATION_OFFSET_CH8,ADC_CALIBRATION_OFFSET_CH9,
+ ADC_CALIBRATION_OFFSET_CH10,ADC_CALIBRATION_OFFSET_CH11, ADC_CALIBRATION_OFFSET_CH12, ADC_CALIBRATION_OFFSET_CH13, ADC_CALIBRATION_OFFSET_CH14,
+ ADC_CALIBRATION_OFFSET_CH15
+#elif defined(DRV_ADC_MAX_CH_17)
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_SLOPE_CH5, ADC_CALIBRATION_SLOPE_CH6, ADC_CALIBRATION_SLOPE_CH7, ADC_CALIBRATION_SLOPE_CH8,ADC_CALIBRATION_SLOPE_CH9,
+ ADC_CALIBRATION_SLOPE_CH10, ADC_CALIBRATION_SLOPE_CH11, ADC_CALIBRATION_SLOPE_CH12, ADC_CALIBRATION_SLOPE_CH13, ADC_CALIBRATION_SLOPE_CH14,
+ ADC_CALIBRATION_SLOPE_CH15, ADC_CALIBRATION_SLOPE_CH16,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4,
+ ADC_CALIBRATION_OFFSET_CH5, ADC_CALIBRATION_OFFSET_CH6, ADC_CALIBRATION_OFFSET_CH7, ADC_CALIBRATION_OFFSET_CH8,ADC_CALIBRATION_OFFSET_CH9,
+ ADC_CALIBRATION_OFFSET_CH10,ADC_CALIBRATION_OFFSET_CH11, ADC_CALIBRATION_OFFSET_CH12, ADC_CALIBRATION_OFFSET_CH13, ADC_CALIBRATION_OFFSET_CH14,
+ ADC_CALIBRATION_OFFSET_CH15,ADC_CALIBRATION_OFFSET_CH16
+#elif defined(DRV_ADC_MAX_CH_18)
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_SLOPE_CH5, ADC_CALIBRATION_SLOPE_CH6, ADC_CALIBRATION_SLOPE_CH7, ADC_CALIBRATION_SLOPE_CH8,ADC_CALIBRATION_SLOPE_CH9,
+ ADC_CALIBRATION_SLOPE_CH10, ADC_CALIBRATION_SLOPE_CH11, ADC_CALIBRATION_SLOPE_CH12, ADC_CALIBRATION_SLOPE_CH13, ADC_CALIBRATION_SLOPE_CH14,
+ ADC_CALIBRATION_SLOPE_CH15, ADC_CALIBRATION_SLOPE_CH16, ADC_CALIBRATION_SLOPE_CH17,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4,
+ ADC_CALIBRATION_OFFSET_CH5, ADC_CALIBRATION_OFFSET_CH6, ADC_CALIBRATION_OFFSET_CH7, ADC_CALIBRATION_OFFSET_CH8,ADC_CALIBRATION_OFFSET_CH9,
+ ADC_CALIBRATION_OFFSET_CH10,ADC_CALIBRATION_OFFSET_CH11, ADC_CALIBRATION_OFFSET_CH12, ADC_CALIBRATION_OFFSET_CH13, ADC_CALIBRATION_OFFSET_CH14,
+ ADC_CALIBRATION_OFFSET_CH15,ADC_CALIBRATION_OFFSET_CH16, ADC_CALIBRATION_OFFSET_CH17
+#elif defined(DRV_ADC_MAX_CH_19)
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_SLOPE_CH5, ADC_CALIBRATION_SLOPE_CH6, ADC_CALIBRATION_SLOPE_CH7, ADC_CALIBRATION_SLOPE_CH8,ADC_CALIBRATION_SLOPE_CH9,
+ ADC_CALIBRATION_SLOPE_CH10, ADC_CALIBRATION_SLOPE_CH11, ADC_CALIBRATION_SLOPE_CH12, ADC_CALIBRATION_SLOPE_CH13, ADC_CALIBRATION_SLOPE_CH14,
+ ADC_CALIBRATION_SLOPE_CH15, ADC_CALIBRATION_SLOPE_CH16, ADC_CALIBRATION_SLOPE_CH17, ADC_CALIBRATION_SLOPE_CH18,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4,
+ ADC_CALIBRATION_OFFSET_CH5, ADC_CALIBRATION_OFFSET_CH6, ADC_CALIBRATION_OFFSET_CH7, ADC_CALIBRATION_OFFSET_CH8,ADC_CALIBRATION_OFFSET_CH9,
+ ADC_CALIBRATION_OFFSET_CH10,ADC_CALIBRATION_OFFSET_CH11, ADC_CALIBRATION_OFFSET_CH12, ADC_CALIBRATION_OFFSET_CH13, ADC_CALIBRATION_OFFSET_CH14,
+ ADC_CALIBRATION_OFFSET_CH15,ADC_CALIBRATION_OFFSET_CH16, ADC_CALIBRATION_OFFSET_CH17, ADC_CALIBRATION_OFFSET_CH18
+#elif defined(DRV_ADC_MAX_CH_20)
+ ADC_CALIBRATION_SLOPE_CH0, ADC_CALIBRATION_SLOPE_CH1, ADC_CALIBRATION_SLOPE_CH2, ADC_CALIBRATION_SLOPE_CH3, ADC_CALIBRATION_SLOPE_CH4,
+ ADC_CALIBRATION_SLOPE_CH5, ADC_CALIBRATION_SLOPE_CH6, ADC_CALIBRATION_SLOPE_CH7, ADC_CALIBRATION_SLOPE_CH8,ADC_CALIBRATION_SLOPE_CH9,
+ ADC_CALIBRATION_SLOPE_CH10, ADC_CALIBRATION_SLOPE_CH11, ADC_CALIBRATION_SLOPE_CH12, ADC_CALIBRATION_SLOPE_CH13, ADC_CALIBRATION_SLOPE_CH14,
+ ADC_CALIBRATION_SLOPE_CH15, ADC_CALIBRATION_SLOPE_CH16, ADC_CALIBRATION_SLOPE_CH17, ADC_CALIBRATION_SLOPE_CH18, ADC_CALIBRATION_SLOPE_CH19,
+ ADC_CALIBRATION_OFFSET_CH0, ADC_CALIBRATION_OFFSET_CH1, ADC_CALIBRATION_OFFSET_CH2, ADC_CALIBRATION_OFFSET_CH3, ADC_CALIBRATION_OFFSET_CH4,
+ ADC_CALIBRATION_OFFSET_CH5, ADC_CALIBRATION_OFFSET_CH6, ADC_CALIBRATION_OFFSET_CH7, ADC_CALIBRATION_OFFSET_CH8,ADC_CALIBRATION_OFFSET_CH9,
+ ADC_CALIBRATION_OFFSET_CH10,ADC_CALIBRATION_OFFSET_CH11, ADC_CALIBRATION_OFFSET_CH12, ADC_CALIBRATION_OFFSET_CH13, ADC_CALIBRATION_OFFSET_CH14,
+ ADC_CALIBRATION_OFFSET_CH15,ADC_CALIBRATION_OFFSET_CH16, ADC_CALIBRATION_OFFSET_CH17, ADC_CALIBRATION_OFFSET_CH18, ADC_CALIBRATION_OFFSET_CH19
+#endif // #if defined(DRV_ADC_MAX_CH_5)
+
+};
+
+
+
+/*
+ * LID table
+ */
+ltable_entry_struct logical_data_item_table_adc[] =
+{
+ {
+ NVRAM_EF_ADC_LID,
+ NVRAM_EF_ADC_TOTAL,
+ NVRAM_EF_ADC_SIZE,
+ NVRAM_NORMAL((kal_uint8 const *)NVRAM_EF_ADC_DEFAULT),
+ NVRAM_CATEGORY_CALIBRAT,
+ NVRAM_ATTR_AVERAGE,
+ "AD1F",
+ VER(NVRAM_EF_ADC_LID)
+ }
+};
+
+#endif //#if !defined(DRV_ADC_OFF)
+
+#endif /* NVRAM_NOT_PRESENT */
diff --git a/mcu/custom/driver/common/adc_nvram_def.h b/mcu/custom/driver/common/adc_nvram_def.h
new file mode 100644
index 0000000..48c574c
--- /dev/null
+++ b/mcu/custom/driver/common/adc_nvram_def.h
@@ -0,0 +1,127 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * adc_nvram_def.h
+ *
+ * Project:
+ * --------
+ * MAUI
+ *
+ * Description:
+ * ------------
+ * This file contains `vendor' defined logical data items stored in NVRAM.
+ * These logical data items are used in object code of Protocol Stack software.
+ *
+ * As for customizable logical data items, they are defined in nvram_user_config.c
+ *
+ * Author:
+ * -------
+ *
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __ADC_NVRAM_DEF_H__
+#define __ADC_NVRAM_DEF_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/*
+ * Include Headers
+ */
+
+
+/*
+ * NVRAM Basic Headers
+ */
+#include "nvram_data_items.h"
+#include "nvram_defs.h"
+
+
+/*
+ * User Headers
+ */
+#include "drv_features.h"
+#include "adc_channel.h"
+
+
+/*
+ * LID Enums
+ */
+
+typedef enum
+{
+ NVRAM_EF_ADC_LID = NVRAM_LID_GRP_ADC(0),
+}nvram_lid_adc_enum;
+
+
+/*
+ * Record Size/Total Records
+ */
+#define NVRAM_EF_ADC_TOTAL 1
+#define NVRAM_EF_ADC_SIZE (ADC_MAX_CHANNEL * 8)
+
+#define NVRAM_EF_ADC_LID_VERNO "000"
+#define NVRAM_EF_ADC_LID_HASH 0xAA9E7153
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __ADC_NVRAM_DEF_H__ */
diff --git a/mcu/custom/driver/common/adc_nvram_editor.h b/mcu/custom/driver/common/adc_nvram_editor.h
new file mode 100644
index 0000000..dfec598
--- /dev/null
+++ b/mcu/custom/driver/common/adc_nvram_editor.h
@@ -0,0 +1,163 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * adc_nvram_editor.h
+ *
+ * Project:
+ * --------
+ * MAUI
+ *
+ * Description:
+ * ------------
+ * This file contains `vendor' defined logical data items stored in NVRAM.
+ * These logical data items are used in object code of Protocol Stack software.
+ *
+ * As for customizable logical data items, they are defined in nvram_user_config.c
+ *
+ * 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!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __ADC_NVRAM_EDITOR_H__
+#define __ADC_NVRAM_EDITOR_H__
+#ifndef NVRAM_NOT_PRESENT
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/*
+ * Include Headers
+ */
+
+
+/*
+ * NVRAM Basic Headers
+ */
+#include "nvram_data_items.h"
+
+/*
+ * User Headers
+ */
+
+#include "adc_nvram_def.h"
+
+/*
+ * Bit Level Description Language
+ */
+#ifdef GEN_FOR_PC
+
+#include "drv_features_adc.h"
+
+typedef struct
+{
+//Because of Android may update modem version on user side.
+//Do not change this structure !!
+ kal_int32 ADCSlope[ADC_MAX_CHANNEL];
+ kal_int32 ADCOffset[ADC_MAX_CHANNEL];
+}ADC_CALIDATA;
+
+#if !defined(DRV_ADC_OFF)
+BEGIN_NVRAM_DATA
+/******************************************************
+* LID_NAME
+* NVRAM_EF_ADC_LID
+* DESCRIPTION
+* NVRAM LID for saving calibration data of external AUXADC
+* INFORMATION
+* Can OTA Reset: Yes
+* Update Scenario: This LID is only updated in production line
+*******************************************************/
+LID_BIT MULTIPLE_LID VER_LID(NVRAM_EF_ADC_LID)
+ADC_CALIDATA *NVRAM_EF_ADC_TOTAL
+{
+ ADCSlope:"Slop for Each ADC Channel";
+ ADCOffset:"Offset for Each ADC Channel";
+};
+
+END_NVRAM_DATA
+#endif
+
+#endif /* GEN_FOR_PC */
+#endif /* !NVRAM_NOT_PRESENT */
+#endif /* __ADC_NVRAM_EDITOR_H__ */
diff --git a/mcu/custom/driver/common/aud_I2S_config.c b/mcu/custom/driver/common/aud_I2S_config.c
new file mode 100644
index 0000000..6c9518a
--- /dev/null
+++ b/mcu/custom/driver/common/aud_I2S_config.c
@@ -0,0 +1,77 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * aud_I2S_config.c
+ *
+ * Project:
+ * --------
+ * MAUI Project
+ *
+ * Description:
+ * ------------
+ * Audio I2S config
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+
diff --git a/mcu/custom/driver/common/aud_common.c b/mcu/custom/driver/common/aud_common.c
new file mode 100644
index 0000000..0194fcf
--- /dev/null
+++ b/mcu/custom/driver/common/aud_common.c
@@ -0,0 +1,81 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * aud_common.c
+ *
+ * Project:
+ * --------
+ * MAUI Project
+ *
+ * Description:
+ * ------------
+ * Common Audio Customization Parameters
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+
+
diff --git a/mcu/custom/driver/common/aud_common_config.h b/mcu/custom/driver/common/aud_common_config.h
new file mode 100644
index 0000000..966b494
--- /dev/null
+++ b/mcu/custom/driver/common/aud_common_config.h
@@ -0,0 +1,86 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * audio_common_config.h
+ *
+ * Project:
+ * --------
+ * MAUI
+ *
+ * Description:
+ * ------------
+ * This file is for customers to config/customize their audio parameters to NVRAM Layer and
+ * Driver Layer.
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __AUDIO_COMMON_CONFIG_H__
+#define __AUDIO_COMMON_CONFIG_H__
+
+
+#endif /* __AUDIO_COMMON_CONFIG_H__ */
+
diff --git a/mcu/custom/driver/common/audcoeff_default.h b/mcu/custom/driver/common/audcoeff_default.h
new file mode 100644
index 0000000..08f9224
--- /dev/null
+++ b/mcu/custom/driver/common/audcoeff_default.h
@@ -0,0 +1,303 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * audcoeff_default.h
+ *
+ * Project:
+ * --------
+ * MAUI Project
+ *
+ * Description:
+ * ------------
+ * The default value of audio coefficients
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#ifndef AUDCOEFF_COMMON_DOT_H
+#define AUDCOEFF_COMMON_DOT_H
+
+#include "l1audio.h"
+
+
+/*
+ * The Bluetooth DAI Hardware COnfiguration Parameter
+ */
+#define DEFAULT_BLUETOOTH_SYNC_TYPE 0
+#define DEFAULT_BLUETOOTH_SYNC_LENGTH 1
+
+#define DEFAULT_DIGITAL_MIC_CHANNEL1_PHASE 3
+#define DEFAULT_DIGITAL_MIC_CHANNEL2_PHASE 3
+/*
+phase: 0~7
+*/
+#define DEFAULT_DIGITAL_MIC_CLOCK_SELECTION 0
+/* clock selection
+0: 3P25M
+1: 1P625M
+*/
+
+#define BT_COMP_FILTER (0 << 15)
+#define BT_SYNC_DELAY 86
+
+
+/*
+ * Speech enhancement parameter
+ * BT_CARKIT (from W0643; AfterW0809, BT_CARKIT replace AUX1)
+ * AUX1 : undefined
+ * AUX2 : undefined
+ */
+
+
+#if defined(__SMART_PHONE_MODEM__)
+
+#define DEFAULT_WB_DMNR_PARAM \
+{ \
+ 460, 470, 480, 490, 500, \
+ 510, 520, 530, 540, 550, \
+ 560, 570, 580, 590, 600, \
+ 610, 620, 630, 640, 650, \
+ 660, 670, 680, 690, 700, \
+ 710, 720, 730, 740, 750, \
+ 760, 770, 780, 790, 800, \
+ 810, 820, 830, 840, 850, \
+ 860, 870, 880, 890, 900, \
+ 910, 920, 930, 940, 950, \
+ 960, 970, 980, 990, 1000, \
+ 1010, 1020, 1030, 1040, 1050, \
+ 1060, 1070, 1080, 1090, 1200, \
+ 1210, 1220, 1230, 1240, 1250, \
+ 1260, 1270, 1280, 1290, 1300, \
+ 1310 \
+}
+
+#define DEFAULT_LSPK_WB_DMNR_PARAM \
+{ \
+ 460, 470, 480, 490, 500, \
+ 510, 520, 530, 540, 550, \
+ 560, 570, 580, 590, 600, \
+ 610, 620, 630, 640, 650, \
+ 660, 670, 680, 690, 700, \
+ 710, 720, 730, 740, 750, \
+ 760, 770, 780, 790, 800, \
+ 810, 820, 830, 840, 850, \
+ 860, 870, 880, 890, 900, \
+ 910, 920, 930, 940, 950, \
+ 960, 970, 980, 990, 1000, \
+ 1010, 1020, 1030, 1040, 1050, \
+ 1060, 1070, 1080, 1090, 1200, \
+ 1210, 1220, 1230, 1240, 1250, \
+ 1260, 1270, 1280, 1290, 1300, \
+ 1310 \
+}
+
+#define DEFAULT_DMNR_PARAM \
+{ \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 68, 0, 0, 0 \
+}
+
+#define DEFAULT_LSPK_DMNR_PARAM \
+{ \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 68, 0, 0, 0 \
+}
+
+#endif
+
+#endif // ... AUDCOEFF_COMMON_DOT_H
diff --git a/mcu/custom/driver/common/combo_flash_defs.h b/mcu/custom/driver/common/combo_flash_defs.h
new file mode 100644
index 0000000..e59d7a4
--- /dev/null
+++ b/mcu/custom/driver/common/combo_flash_defs.h
@@ -0,0 +1,238 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * combo_flash_defs.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines the data structures used in ComboMCP
+ *
+ * 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!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef _COMBO_FLASH_DEFS_H_
+#define _COMBO_FLASH_DEFS_H_
+
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+#include "custom_MemoryDevice.h"
+#include "DrvFlash.h"
+#include "flash_opt.h"
+
+#if defined(__SERIAL_FLASH__) || (defined(_NAND_FLASH_BOOTING_) && defined(__NAND_MDL_APPEND__))
+
+#if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+#include "br_sw_types.h"
+#include "br_GFH.h"
+#endif
+
+#define CMEM_FLASH_ID_LEN_NOR 4
+#define CMEM_FLASH_ID_LEN_NAND 8
+#define CMEM_REGION_INFO_LEN 8
+#define CMEM_BLOCK_INFO_LEN 8
+#define CMEM_BANK_INFO_LEN 8
+#define CMEM_BLOCK_INFO_LEN 8
+#if defined(_NAND_FLASH_BOOTING_) && defined(__NAND_MDL_APPEND__)
+#define COMBO_MEM_ID_VER 2 // identify block/page/spare size MDL format
+#else
+#define COMBO_MEM_ID_VER 1
+#endif
+#define COMBO_MEM_NOR_VER 2
+#define COMBO_MEM_IDENTITY_ID "COMBOMEM_ID"
+#define COMBO_MEM_IDENTITY_NOR "COMBOMEM_NOR"
+#define COMBO_MEM_ID_GFH_HEADER GFH_HEADER(GFH_CMEM_ID_INFO, 1)
+#define COMBO_MEM_NOR_GFH_HEADER GFH_HEADER(GFH_CMEM_NOR_INFO, 1)
+
+#ifdef __SERIAL_FLASH__
+#include "combo_sfi_defs.h"
+#endif
+
+ #define COMBO_MEM_DEVICE_COUNT 1
+
+//-----------------------------------------------------------------------------
+// Combo MCP ID list
+//-----------------------------------------------------------------------------
+
+// Union: CMEMFlashID
+typedef union {
+ kal_uint8 NAND[CMEM_FLASH_ID_LEN_NAND];
+ kal_uint16 NOR[CMEM_FLASH_ID_LEN_NOR];
+} CMEMFlashID;
+
+#if defined(_NAND_FLASH_BOOTING_) && defined(__NAND_MDL_APPEND__)
+typedef struct {
+ kal_uint16 page_size;
+ kal_uint16 spare_size;
+ kal_uint16 block_size;
+} CMEMFlashInfo;
+#endif
+// Type: CMEMEntryID
+typedef struct {
+ kal_uint8 DeviceType; // rename to Flash Type: NOR / NAND /EMMC
+ kal_uint8 IDLength;
+#if defined(_NAND_FLASH_BOOTING_) && defined(__NAND_MDL_APPEND__)
+ CMEMFlashInfo FlashDevice_Info; //include block, page and spare size
+#endif
+ #if defined(_NAND_FLASH_BOOTING_)|| defined(__SERIAL_FLASH__)
+ kal_uint8 ID[CMEM_FLASH_ID_LEN_NAND];
+ #else
+ kal_uint16 ID[CMEM_FLASH_ID_LEN_NOR];
+ #endif
+} CMEMEntryID;
+
+// Type: CMEMEntryIDList
+typedef struct {
+ #if !defined(__SV5_ENABLED__) && !defined(__SV5X_ENABLED__)
+ char m_identifier[16]; // MTK_CMB_ID_INFO
+ #endif
+ unsigned int m_ver;
+ unsigned int Count;
+ CMEMEntryID List[COMBO_MEM_DEVICE_COUNT];
+} CMEMEntryIDList;
+
+//-----------------------------------------------------------------------------
+// Combo MCP SW Settings
+//-----------------------------------------------------------------------------
+// Type: FlashBlockLayout
+typedef struct {
+ kal_uint32 Offset;
+ kal_uint32 Size;
+} FlashBlockLayout;
+
+// Type: CMEMEntryNOR
+typedef struct {
+ kal_uint16 FDMType; // rename to Device Type: DEFAULT / SIB
+ kal_uint16 PageBufferSize; // Autogen from MDL
+ kal_uint32 UniformBlocks; // Uniform Block Layout
+ FlashBlockLayout BlockLayout[CMEM_REGION_INFO_LEN];
+ FlashBankInfo BankInfo[CMEM_BANK_INFO_LEN];
+} CMEMEntryNOR;
+
+// Type: CMEMEntryNORList
+typedef struct {
+ #if !defined(__SV5_ENABLED__) && !defined(__SV5X_ENABLED__)
+ char m_identifier[16]; // MTK_CMB_ID_INFO
+ #endif
+ unsigned int m_ver;
+ unsigned int Count;
+ CMEMEntryNOR List[COMBO_MEM_DEVICE_COUNT];
+} CMEMEntryNORList;
+
+
+#endif // defined(__COMBO_MEMORY_SUPPORT__) || defined(__SERIAL_FLASH__)
+
+#endif // ifndef _COMBO_FLASH_DEFS_H_
+
diff --git a/mcu/custom/driver/common/combo_flash_init.c b/mcu/custom/driver/common/combo_flash_init.c
new file mode 100644
index 0000000..6641097
--- /dev/null
+++ b/mcu/custom/driver/common/combo_flash_init.c
@@ -0,0 +1,460 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * combo_flash_init.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines the ComboMCP Init function
+ *
+ * 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!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "custom_MemoryDevice.h"
+#include "flash_opt.h"
+
+#if defined(__SERIAL_FLASH__) || (defined(_NAND_FLASH_BOOTING_) && defined(__NAND_MDL_APPEND__))
+#include "combo_flash_init.h"
+#include "combo_flash_defs.h"
+ #if (!defined(_NAND_FLASH_BOOTING_))
+ #include "flash_cfi.h"
+ #include "flash_cfi_internal.h"
+ #include "flash_mtd.h"
+ #endif
+ #if defined(NAND_SUPPORT)
+ #ifdef __UBL__
+ extern void NFI_ReadID(kal_uint32 id_num, kal_uint8* id_data);
+ #else
+ extern kal_bool DAL_is_initialized;
+ extern kal_int32 DAL_init (void);
+ extern void MTD_ReadID(kal_uint32 id_num,kal_uint8* id_data);
+ #endif
+ #endif
+#if defined(__SERIAL_FLASH__)
+#include "flash_sf.h"
+#endif
+
+#if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+#include "br_GFH_cmem_id_info.h"
+#endif /* __SV5_ENABLED__ */
+
+//-----------------------------------------------------------------------------
+// MCP ID Table
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// [Section] RVCT and GCC
+//-----------------------------------------------------------------------------
+#if defined(__MTK_TARGET__)
+#if defined(__SV5_ENABLED__)|| defined(__SV5X_ENABLED__)
+ #if defined(__UBL__)
+ #if defined (__MINI_BOOTLOADER__)
+ #define __sf_section_RODATA_GFH __attribute__ ((section ("BOOTLOADER_GFH_EXT")))
+ #elif defined ( __EXT_BOOTLOADER__)
+ #define __sf_section_RODATA_GFH __attribute__ ((section ("EXT_BOOTLOADER_GFH_EXT")))
+ #endif
+ #else
+ #define __sf_section_RODATA_GFH __attribute__ ((section ("MAUI_GFH_EXT")))
+ #endif
+#else // SV3
+ // Method1
+ // #define __sf_section_RODATA_GFH __attribute__ ((section ("SECOND_PART_RODATA")))
+ // Method2
+ #define __sf_section_RODATA_GFH
+#endif
+#else //defined(__MTK_TARGET__)
+ /* Reserve for MoDIS */
+ #define __sf_section_RODATA_GFH
+#endif // defined(__MTK_TARGET__)
+
+#if defined(__MTK_TARGET__)
+ #define __sf_section_RWDATA_EMI __attribute__ ((section ("EMIINITRW")))
+ #define __sf_section_SECOND_PART /* Second part region is removed */
+ #define __sf_section_EMI __attribute__ ((section ("EMIINITCODE")))
+#else
+/* Reserve for MoDIS */
+ #define __sf_section_RWDATA_EMI
+ #define __sf_section_SECOND_PART
+ #define __sf_section_EMI
+#endif // __MTK_TARGET__
+
+
+
+#define COMBO_MEM_TYPE_MODIFIER __sf_section_RODATA_GFH const
+#define COMBO_MEM_INST_NAME combo_mem_id_list
+
+#if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+ #define COMBO_MEM_TYPE_NAME GFH_CMEM_ID_INFO_v1
+#else
+ #define COMBO_MEM_TYPE_NAME CMEMEntryIDList
+#endif
+
+#if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+#define COMBO_MEM_STRUCT_HEAD COMBO_MEM_ID_GFH_HEADER, { COMBO_MEM_ID_VER, COMBO_MEM_DEVICE_COUNT, {
+#define COMBO_MEM_STRUCT_FOOT } }
+#else
+#define COMBO_MEM_STRUCT_HEAD COMBO_MEM_IDENTITY_ID, COMBO_MEM_ID_VER, COMBO_MEM_DEVICE_COUNT, {
+#define COMBO_MEM_STRUCT_FOOT }
+#endif
+
+
+#include "combo_flash_id.h" // ==== Instantiate ID table
+
+
+
+//-----------------------------------------------------------------------------
+// External Functions
+//-----------------------------------------------------------------------------
+extern kal_uint32 custom_get_fat_addr(void);
+
+//-----------------------------------------------------------------------------
+// Internal Functions
+//-----------------------------------------------------------------------------
+// ===[EMI/SFI Initialization]===
+kal_int32 CMEM_EMIINIT_Index(void);
+void CMEM_EMIINIT_ReadID(void *BaseAddr, kal_uint16 *flashid);
+
+//-----------------------------------------------------------------------------
+// Internal Variables
+//-----------------------------------------------------------------------------
+#define CMEM_INVALID_INDEX -1
+
+
+
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Determine whether SF ID is valid.
+ Apply for MT6250 because after command issue(ex: Read ID), Data pins are in floating, may read trasient value instead of 0x00 or 0xFF.
+ @retval
+ KAL_TRUE: the device ID0 is valid.
+ KAL_FALSE: the device ID0 is not valid.
+*/
+__sf_section_SECOND_PART kal_bool CMEM_CheckValidDeviceID(kal_uint8 *id)
+{
+ // Serial Flash
+#if defined(__SERIAL_FLASH__)
+ kal_int32 i, j;
+ const CMEMEntryID *id_list=NULL;
+
+#if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+ id_list=combo_mem_id_list.m_data.List;
+#else
+ id_list=combo_mem_id_list.List;
+#endif
+ // seach CMEM list for specific Flash ID
+ for (i=0; i<COMBO_MEM_DEVICE_COUNT; i++) {
+ // Check 1: Compare ID
+ for (j=0; j<id_list[i].IDLength; j++) {
+ if (id_list[i].ID[j]!=id[j]) break;
+ }
+ // Check 2: Compare RegionInfo
+ if (j==id_list[i].IDLength) {
+ // TBD: Compare RegionInfo
+ return KAL_TRUE;
+ }
+ }
+#endif //defined(__SERIAL_FLASH__)
+ return KAL_FALSE;
+}
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Seach device in the combo MCP list by Flash ID.
+ 1. Read NOR/NAND flash ID
+ 2. Lookup ID table and return the index to the found entry.
+
+ @retval
+ The index to the found entry.
+ -1 : ID not found
+ @remars
+ If combo MCP was not turned on, the returned index is always 0.
+*/
+
+__sf_section_SECOND_PART kal_int32 CMEM_Index(void)
+{
+ return 0;
+}
+
+
+__sf_section_SECOND_PART const CMEMEntryID *CMEM_GetIDEntry(kal_uint32 index)
+{
+#if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+ return &combo_mem_id_list.m_data.List[index];
+#else
+ return &combo_mem_id_list.List[index];
+#endif
+}
+
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Read Flash ID
+ @param[in] BaseAddr Base address to the Flash
+ @param[out] flashid Flash ID
+ @remarks
+ This function is only allowed in EMI/SFI init stage.
+*/
+__sf_section_EMI void CMEM_EMIINIT_ReadID(void *BaseAddr, kal_uint16 *flashid)
+{
+ // Serial Flash
+ return;
+}
+
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Determine whether SF ID is valid.
+ Apply for MT6250 because after command issue(ex: Read ID), Data pins are in floating, may read trasient value instead of 0x00 or 0xFF.
+ @retval
+ KAL_TRUE: the device ID0 is valid.
+ KAL_FALSE: the device ID0 is not valid.
+*/
+__sf_section_EMI kal_bool CMEM_EMIINIT_CheckValidDeviceID(kal_uint8 *id)
+{
+ // Serial Flash
+#if defined(__SERIAL_FLASH__)
+ kal_int32 i, j;
+ const CMEMEntryID *id_list=NULL;
+ // seach CMEM list for specific Flash ID
+#if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+ id_list=combo_mem_id_list.m_data.List;
+#else
+ id_list=combo_mem_id_list.List;
+#endif
+
+ for (i=0; i<COMBO_MEM_DEVICE_COUNT; i++) {
+ // Check 1: Compare ID
+ for (j=0; j<id_list[i].IDLength; j++) {
+ if (id_list[i].ID[j]!=id[j]) break;
+ }
+ // Check 2: Compare RegionInfo
+ if (j==id_list[i].IDLength) {
+ // TBD: Compare RegionInfo
+ return KAL_TRUE;
+ }
+ }
+
+#endif //defined(__SERIAL_FLASH__)
+ return KAL_FALSE;
+}
+
+
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Search device ID list
+ @retval
+ The index to the found device ID.
+ -1: device not found
+ @remarks
+ This function is only allowed in EMI/SFI init stage.
+*/
+
+__sf_section_EMI kal_int32 CMEM_EMIINIT_Index(void)
+{
+ return 0;
+}
+
+
+
+#if defined(_NAND_FLASH_BOOTING_) && defined(__NAND_MDL_APPEND__)
+kal_bool CMEM_GetflashInfo(kal_uint8* id, CMEMFlashInfo* st)
+{
+ const CMEMEntryID *flash_id_list=NULL;
+ kal_uint32 icount, l_index;
+
+ if((id == NULL) || (st == NULL))
+ return KAL_FALSE;
+
+ #if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+ flash_id_list = combo_mem_id_list.m_data.List;
+ #else
+ flash_id_list = combo_mem_id_list.List;
+ #endif
+
+ for(l_index = 0; l_index < COMBO_MEM_DEVICE_COUNT; l_index++)
+ {
+ for(icount = 0; icount < flash_id_list[l_index].IDLength; icount++)
+ {
+ if (flash_id_list[l_index].ID[icount] != id[icount])
+ break;
+ }
+
+ if (icount == flash_id_list[l_index].IDLength)
+ {
+ break;
+ }
+ }
+
+ if(l_index == COMBO_MEM_DEVICE_COUNT)
+ return KAL_FALSE;
+
+ st->block_size = flash_id_list[l_index].FlashDevice_Info.block_size;
+ st->page_size = flash_id_list[l_index].FlashDevice_Info.page_size;
+ st->spare_size = flash_id_list[l_index].FlashDevice_Info.spare_size;
+
+ return KAL_TRUE;
+}
+#endif
+
+
+#endif // defined(__COMBO_MEMORY_SUPPORT__) || defined(__SERIAL_FLASH__) || defined(__NAND_MDL_APPEND__)
diff --git a/mcu/custom/driver/common/combo_flash_init.h b/mcu/custom/driver/common/combo_flash_init.h
new file mode 100644
index 0000000..79f91bd
--- /dev/null
+++ b/mcu/custom/driver/common/combo_flash_init.h
@@ -0,0 +1,183 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * combo_flash_init.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines the ComboMCP Init function
+ *
+ * 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!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __COMBO_FLASH_INIT_H__
+#define __COMBO_FLASH_INIT_H__
+
+#include "flash_opt.h"
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+#include "combo_flash_defs.h"
+
+#if defined(__SERIAL_FLASH__) || (defined(_NAND_FLASH_BOOTING_) && defined(__NAND_MDL_APPEND__))
+
+#include "custom_MemoryDevice.h"
+#include "fat_fs.h"
+#include "DrvFlash.h"
+
+// Naming Rule: Camo
+typedef enum {
+ CMEM_NO_ERROR=0,
+ CMEM_ERR_ID_NOT_FOUND,
+ CMEM_ERR_FDM_MISMATCH,
+ CMEM_ERR_MTD_MISMATCH,
+ CMEM_ERR_FDM_INIT_FAIL,
+ CMEM_ERR_MTD_INIT_FAIL,
+ CMEM_ERR_FDM_REGION_INFO_OVERFLOW
+} Enum_CMEM_StatusCode;
+
+typedef enum {
+ CMEM_TYPE_END_OF_LIST=0,
+ CMEM_TYPE_NAND,
+ CMEM_TYPE_NOR,
+ CMEM_TYPE_SERIAL_NOR_FLASH
+} Enum_CMEM_Type;
+
+
+//Sync with original flash_opt.h and MemoryDeviceList
+//Ransense series is phase out
+typedef enum {
+ CMEM_FDM_NOR_DEFAULT=0, //for serial flash
+ CMEM_NOR_CS_INTEL_SERIES,
+ CMEM_NOR_CS_INTEL_SIBLEY,
+ CMEM_NOR_CS_RAM_DISK,
+ CMEM_NOR_CS_SST,
+ CMEM_NOR_CS_AMD_SERIES,
+ CMEM_NOR_CS_SPANSION_PL_J,
+ CMEM_NOR_CS_SPANSION_PL_N,
+ CMEM_NOR_CS_SPANSION_WS_N,
+ CMEM_NOR_CS_SPANSION_WS_P,
+ CMEM_NOR_CS_SPANSION_GL_A,
+ CMEM_NOR_CS_SPANSION_GL_N,
+ CMEM_NOR_CS_SPANSION_NS_N,
+ CMEM_NOR_CS_SPANSION_NS_P,
+ CMEM_NOR_CS_SPANSION_NS_J,
+ CMEM_NOR_CS_TOSHIBA,
+ CMEM_NOR_CS_TOSHIBA_TV,
+ CMEM_NOR_CS_TOSHIBA_TY,
+ CMEM_NOR_CS_SILICON7,
+ CMEM_NOR_CS_SAMSUNG_SPANSION_NS_J_LIKE,
+ CMEM_NOR_CS_SPANSION_VS_R,
+ CMEM_NOR_CS_SPANSION_VS_R64,
+ CMEM_NOR_CS_SPANSION_WS_R
+
+} Enum_CMEM_CommSeries;
+
+// Functions Exported to MAUI
+extern kal_int32 ComboMem_Initialize(void);
+extern kal_int32 CMEM_Init_FullDriver(void);
+extern kal_uint32 CMEM_BlockSize(kal_uint32 address);
+
+kal_int32 CMEM_Index(void);
+const CMEMEntryID *CMEM_GetIDEntry(kal_uint32 index);
+
+#endif // (defined(__COMBO_MEMORY_SUPPORT__) || defined(__SERIAL_FLASH__))
+
+// Function exported to EMI/SFI
+kal_int32 CMEM_EMIINIT_Index(void);
+kal_bool CMEM_CheckValidDeviceID(kal_uint8 *id);
+kal_bool CMEM_EMIINIT_CheckValidDeviceID(kal_uint8 *id);
+
+#if defined(_NAND_FLASH_BOOTING_) && defined(__NAND_MDL_APPEND__)
+kal_bool CMEM_GetflashInfo(kal_uint8* id, CMEMFlashInfo* st);
+#endif
+
+#endif // __COMBO_FLASH_INIT_H__
diff --git a/mcu/custom/driver/common/combo_flash_nor.c b/mcu/custom/driver/common/combo_flash_nor.c
new file mode 100644
index 0000000..3db20ef
--- /dev/null
+++ b/mcu/custom/driver/common/combo_flash_nor.c
@@ -0,0 +1,1434 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * combo_flash_nor.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines the ComboMCP Init function for NAND/NOR FDM
+ *
+ * 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!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "custom_MemoryDevice.h"
+#include "flash_opt.h"
+
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+#include "combo_flash_init.h"
+#include "fat_fs.h"
+#include "combo_flash_defs.h"
+
+#include "flash_mtd_sf_dal.h"
+#include "flash_mtd_pf_dal.h"
+
+#if defined(__SERIAL_FLASH__)
+#if ( !defined(__FS_SYSDRV_ON_NAND__) && !defined( _NAND_FLASH_BOOTING_) && !defined(__EMMC_BOOTING__))
+
+#include "flash_sf.h"
+#include "DrvFlash.h"
+#include "flash_disk_internal.h"
+
+#if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+#include "br_GFH_cmem_nor_info.h"
+#endif /* __SV5_ENABLED__ || __SV5X_ENABLED__ */
+
+#include "DrvFlash_UT.h" //locateSector_ext for basic load
+#include "flash_mtd_ut.h" //__BASIC_LOAD_FLASH_TEST__
+
+#include "custom_nvram_int_config.h" /* To get NVRAM_CUSTOM_CFG_MAX_RECORD_SECTOR_NUM for MSTABLE_ENTRY_NUM */
+
+
+
+
+/*-------------------------------------------------------------------
+ * MS table size
+ *
+ * MS table size should be synchronized with user's requirement. The only one user is NVRAM.
+ *
+ * NVRAM_CUSTOM_CFG_MAX_RECORD_SECTOR_NUM defines the maximum record size in NVRAM
+ * (in custom_nvram_config.h). NVRAM should call NOR_ResumeSectorState (by FS_Commit)
+ * after it writes maximum NVRAM_CUSTOM_CFG_MAX_RECORD_SECTOR_NUM sectors with protection
+ * mode to ensure the integrity of a record.
+ *
+ * MSTABLE_ENTRY_NUM number is based on the worst senario: All FAT entries of clusters
+ * of logical sectors are located in different physical sectors. In other word, we need
+ * to write additional N sectors to update FAT after we write N data sectors. The other
+ * 1 sector is for directory entry update.
+ *
+ * TODO: Use auto-gen to compute most suitable MS table size. Because the number of
+ * sectors for FAT may be smaller than NVRAM_CUSTOM_CFG_MAX_RECORD_SECTOR_NUM. For example,
+ * 64KB disk only needs 1 sector to store FAT.
+ *---------------------------------------------------------- W08.50 --*/
+
+#define MS_TABLE_ENTRY_NUM (NVRAM_CUSTOM_CFG_MAX_RECORD_SECTOR_NUM * 2 + 1)
+
+
+//-----------------------------------------------------------------------------
+// Combo MCP related
+//-----------------------------------------------------------------------------
+static kal_int32 cmem_nor_index; // Do not use this variabe during EMI init stage
+const CMEMEntryID *cmem_id;
+
+//-----------------------------------------------------------------------------
+// MCP Serial/NOR Flash Driver settings
+//-----------------------------------------------------------------------------
+
+#if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+#if defined(__UBL__)
+#define __sf_section_RODATA_GFH __attribute__ ((section ("BOOTLOADER_GFH_EXT")))
+#define __sf_section_RAM __attribute__ ((section ("SECOND_PART")))
+#else
+#define __sf_section_RODATA_GFH __attribute__ ((section ("MAUI_GFH_EXT")))
+#define __sf_section_RAM __attribute__ ((section ("SECOND_PART")))
+#endif
+#else //__SV5_ENABLED__ || __SV5X_ENABLED__
+/* SV3 */
+
+// Method1
+// #define __sf_section_RODATA_GFH __attribute__ ((section ("SECOND_PART_RODATA")))
+// Method2
+#define __sf_section_RODATA_GFH
+
+#define __sf_section_RAM __attribute__ ((section ("SECOND_PART")))
+#endif //__SV5_ENABLED__ || __SV5X_ENABLED__
+
+
+
+
+
+#if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+ #define COMBO_MEM_TYPE_NAME GFH_CMEM_NOR_INFO_v1
+#else
+ #define COMBO_MEM_TYPE_NAME CMEMEntryNORList
+#endif
+
+#define COMBO_MEM_INST_NAME combo_mem_sw_list
+#define COMBO_MEM_TYPE_MODIFIER __sf_section_RODATA_GFH static const
+
+#if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+#define COMBO_MEM_STRUCT_HEAD COMBO_MEM_NOR_GFH_HEADER, { COMBO_MEM_NOR_VER, COMBO_MEM_DEVICE_COUNT, {
+#define COMBO_MEM_STRUCT_FOOT } }
+#else
+#define COMBO_MEM_STRUCT_HEAD COMBO_MEM_IDENTITY_NOR, COMBO_MEM_NOR_VER, COMBO_MEM_DEVICE_COUNT, {
+#define COMBO_MEM_STRUCT_FOOT }
+#endif
+
+
+#include "combo_flash_config.h" // ==== Instantiate NOR flash table
+
+static const CMEMEntryNOR *nor_list=NULL;
+
+
+//-----------------------------------------------------------------------------
+// Driver Interface and Driver Data
+//-----------------------------------------------------------------------------
+// System Info
+#if !((defined(__FUE__) && defined(__FOTA_DM__)) || defined(__UBL__))
+//---------------------------------------
+// Part 1: NOR FDM Driver
+//---------------------------------------
+FS_Driver NORFlashDriver; // FDM driver interface
+NOR_FLASH_DRV_Data FlashDriveData; // FDM driver data
+kal_uint32 TOTAL_BLOCKS; // Local define
+kal_uint32 TOTAL_SECTORS; // Local define
+kal_uint32 NOR_LARGEST_BLOCK_SIZE; // Local define (to replace NOR_BLOCK_SIZE)
+static kal_uint16 PAGE_SIZE; // Local define (CMEM only)
+#ifdef __INTEL_SIBLEY__
+kal_uint8 FDMBuffer[1024]; // FDM buffer
+#else
+kal_uint8 FDMBuffer[512]; // FDM buffer
+#endif
+static kal_uint16 AVAILSECTORS[CMEM_MAX_BLOCKS]; // Number of avail sectors in each block
+static kal_uint16 VALIDSECTORS[CMEM_MAX_BLOCKS]; // Number of valid sectors in each block
+static kal_uint8 SectorMap[CMEM_MAX_SECTORS]; // Address translation map
+
+#if defined(__ERASE_QUEUE_ENABLE__)
+static NOR_EraseInfo EraseBlockQueue[SNOR_ERASE_QUEUE_SIZE]; // Erase queue
+#endif
+
+static FlashRegionInfo RegionInfo[CMEM_REGION_INFO_LEN]; // RegionInfo[] assigned to FDM data
+
+#elif (defined(__FUE__) || defined(__EXT_BOOTLOADER__)) && defined(__FOTA_DM__)
+NOR_FLASH_DRV_Data FlashDriveData;
+#endif // !((defined(__FUE__) && defined(__FOTA_DM__)) || defined(__UBL__))
+
+static const FlashBlockLayout *BlockLayout; // BlockLayout read from MCP list
+const static FlashBankInfo *BankInfo;
+
+static MS_ENTRY MSEntryTable[MS_TABLE_ENTRY_NUM];
+
+//---------------------------------------
+// Part 2: NOR MTD driver
+//---------------------------------------
+kal_uint32 PAGE_BUFFER_SIZE; // Global Var. used by mtd driver
+
+#ifdef __SERIAL_FLASH__
+ NOR_MTD_Driver NORFlashMtd; // SF driver interface
+ SF_MTD_Data mtdflash; // SF driver data
+ SF_Status StatusMap[SF_SR_COUNT]; // status map assigned to SF data (shall be read only after initialziation, it's shareable)
+ SF_MTD_CMD sf_dal_data_cmd; // command set assiged to SF data (shall be read only after initialziation, it's shareable)
+#else
+ NOR_MTD_Driver NORFlashMtd; // ADM driver interface
+ PF_MTD_Data mtdflash; // ADM driver data was instantiated in flash_mtd.amd.c or flash_mtd.intel.c.
+ PF_Status StatusMap[PF_SR_COUNT];
+ PF_MTD_CMD pf_dal_data_cmd; // command set assiged to PF data (shall be read only after initialziation, it's shareable)
+#endif
+
+//---------------------------------------
+// Part 3: NOR RAW Disk FDM/MTD driver
+//---------------------------------------
+#ifdef __NOR_SUPPORT_RAW_DISK__
+PF_MTD_Data FlashDiskDriveData[NOR_BOOTING_NOR_DISK_NUM];
+#ifdef __SERIAL_FLASH__
+static SF_MTD_Data mtdFlashDisk[NOR_BOOTING_NOR_DISK_NUM];
+#else // __SERIAL_FLASH__
+static NOR_Flash_MTD_Data mtdFlashDisk[NOR_BOOTING_NOR_DISK_NUM];
+#endif // __SERIAL_FLASH__
+#endif // __NOR_SUPPORT_RAW_DISK__
+
+#if defined(__NOR_SUPPORT_RAW_DISK__) && defined(NOR_BOOTING_NOR_DISK_NUM)
+#if (NOR_BOOTING_NOR_DISK_NUM>0)
+FlashRegionInfo Disk0RegionInfo[CMEM_REGION_INFO_LEN];
+#endif /* NOR_BOOTING_NOR_DISK_NUM>0 */
+#if (NOR_BOOTING_NOR_DISK_NUM>1)
+FlashRegionInfo Disk1RegionInfo[CMEM_REGION_INFO_LEN];
+#endif // NOR_BOOTING_NOR_DISK_NUM
+#endif // __NOR_SUPPORT_RAW_DISK__
+
+//---------------------------------------
+// Part 4: FOTA
+//---------------------------------------
+
+//---------------------------------------
+// Part 5: NOR Full Driver
+//---------------------------------------
+// FDM driver data
+static FlashRegionInfo EntireDiskRegionInfo[CMEM_REGION_INFO_LEN];
+NOR_FLASH_DISK_Data EntireDiskDriveData;
+
+#ifdef __SERIAL_FLASH__
+ SF_MTD_Data EntireDiskMtdData; // SF MTD driver data
+#else
+ PF_MTD_Data EntireDiskMtdData; // ADM MTD driver data
+#endif
+
+//-----------------------------------------------------------------------------
+// Internal Functions
+//-----------------------------------------------------------------------------
+// NOR Flash Driver Initialization
+
+// 1. Entry Function
+kal_int32 CMEM_Init_NOR(void); // MAUI
+kal_int32 CMEM_Init_FullDriver(void); // MAUI or BOOTLOADER (for Card Download and RAW disk)
+kal_int32 CMEM_Init_FOTA(void); // FOTA with MAUI
+void CMEM_Init_FUE(void); // FOTA update engine
+
+// 1.1 Common initilaization of the entry function
+void CMEM_Init_nor_list(void);
+
+// ---<NOR>---
+// 2. NOR FDM Initialization
+kal_int32 CMEM_Init_NOR_FDM_Common(void);
+kal_int32 CMEM_Init_NOR_FDM_NonSIB(void);
+kal_int32 CMEM_Init_NOR_FDM_SIB(void);
+
+// 3. NOR MTD Initialization
+kal_int32 CMEM_Init_NOR_MTD_Common(void);
+kal_int32 CMEM_Init_NOR_MTD_SF(void);
+kal_int32 CMEM_Init_NOR_MTD_ADMUX(void);
+
+// 4. NOR RAW Disk Initialization
+kal_int32 CMEM_Init_NOR_RAWDisk_Common(void);
+kal_int32 CMEM_Init_NOR_RAWDisk_SF(void);
+kal_int32 CMEM_Init_NOR_RAWDisk_ADMUX(void);
+
+// 5. EMI-INIT-NOR-driver
+kal_uint32 EMIINIT_CMEM_BlockSize(kal_uint32 address);
+kal_uint32 CMEM_NOR_Construct_RegionInfo_Internal(
+ kal_uint32 baseaddr,
+ kal_uint32 length,
+ FlashRegionInfo *regioninfo,
+ const FlashBlockLayout* blocklayout);
+kal_int32 NOR_Construct_RegionInfo(kal_uint32 baseaddr, kal_uint32 length, FlashRegionInfo *regioninfo);
+kal_int32 EMIINIT_CMEM_NOR_Construct_RegionInfo(kal_uint32 baseaddr, kal_uint32 length, FlashRegionInfo *regioninfo);
+
+//-----------------------------------------------------------------------------
+// External Function
+//-----------------------------------------------------------------------------
+extern kal_uint32 custom_get_fat_addr(void);
+extern kal_uint32 INT_RetrieveFlashBaseAddr(void);
+extern kal_uint32 custom_get_fat_len(void);
+extern kal_uint32 custom_get_fat_addr(void);
+
+#if !((defined(__FUE__) && defined(__FOTA_DM__)) || defined(__UBL__))
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ NOR Flash MTD interface/data common initialization
+ @retval
+ CMEM_NO_ERROR: Success
+*/
+kal_int32 CMEM_Init_NOR_MTD_Common(void)
+{
+ // 1. <DATA> Signature
+ mtdflash.Signature = ~((kal_uint32)RegionInfo);
+
+ // 2. <DATA> Page Buffer and Base Address
+#if defined(__MTK_TARGET__)
+ PAGE_BUFFER_SIZE = nor_list[cmem_nor_index].PageBufferSize;
+
+ mtdflash.BaseAddr = (BYTE *)(INT_RetrieveFlashBaseAddr() + NOR_FLASH_BASE_ADDRESS);
+#endif // __MTK_TARGET__
+
+ // 3. <DATA> RegionInfo and BankInfo
+ mtdflash.RegionInfo = (FlashRegionInfo *)RegionInfo;
+
+ return CMEM_NO_ERROR;
+}
+
+#if defined(__SERIAL_FLASH__)
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Serial NOR Flash MTD interface/data initialization
+ @retval
+ CMEM_NO_ERROR: Success
+ CMEM_ERR_MTD_INIT_FAIL: Fail
+*/
+kal_int32 CMEM_Init_NOR_MTD_SF(void)
+{
+ kal_int32 result;
+
+ // Assign MTD driver to FDM data
+ FlashDriveData.MTDDriver = &NORFlashMtd;
+
+ // Allocate status map and command for MTD data
+ mtdflash.StatusMap = &StatusMap[0];
+ mtdflash.CMD = &sf_dal_data_cmd;
+
+ // serial Flash driver will initialize the interface/data by its own.
+ result=SF_DAL_Init_Driver(
+ &NORFlashMtd, // Driver Interface (to FDM)
+ &mtdflash, // Driver Data
+ (INT_RetrieveFlashBaseAddr() + NOR_FLASH_BASE_ADDRESS), // Base Address
+ nor_list[cmem_nor_index].UniformBlocks); // Uniform Block
+
+ if (result==FS_FLASH_MOUNT_ERROR) {
+ return CMEM_ERR_MTD_INIT_FAIL;
+ }
+ return CMEM_NO_ERROR;
+}
+
+#else // __SERIAL_FLASH__
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ AMDUX NOR Flash MTD interface/data initialization
+*/
+kal_int32 CMEM_Init_NOR_MTD_ADMUX(void)
+{
+
+ kal_int32 result;
+
+ // Assign MTD driver to FDM data
+ FlashDriveData.MTDDriver = &NORFlashMtd;
+
+ // Allocate status map and command for MTD data
+ mtdflash.StatusMap = StatusMap;
+ mtdflash.CMD = &pf_dal_data_cmd;
+
+ // Admux NOR Flash driver will initialize the interface/data by its own.
+ result=ADMUX_DAL_Init_Driver(
+ &NORFlashMtd, // Driver Interface (to FDM)
+ &mtdflash, // Driver Data
+ (INT_RetrieveFlashBaseAddr() + NOR_FLASH_BASE_ADDRESS), // Base Address
+ nor_list[cmem_nor_index].FDMType);
+ if (result==FS_FLASH_MOUNT_ERROR)
+ {
+ return CMEM_ERR_MTD_INIT_FAIL;
+ }
+
+ return CMEM_NO_ERROR;
+
+}
+#endif // __SERIAL_FLASH__
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ NOR Flash FDM 4.0 interface/data common initialization
+*/
+kal_int32 CMEM_Init_NOR_FDM_Common(void)
+{
+ // 1. <DATA> Assign MTD data to FDM
+ FlashDriveData.MTDData = &mtdflash;
+
+ // 2. <DATA> Common Data
+ FlashDriveData.AvailSectorsInBlock = AVAILSECTORS;
+ FlashDriveData.ValidSectorsInBlock = VALIDSECTORS;
+ FlashDriveData.SectorMap = (kal_uint8*)SectorMap;
+ FlashDriveData.PartitionSectors = NOR_PARTITION_SECTORS;
+ FlashDriveData.Buffer = FDMBuffer;
+ FlashDriveData.MSTABLE_ENTRY_NUM = MS_TABLE_ENTRY_NUM;
+ FlashDriveData.MSEntryTable = MSEntryTable;
+
+ FlashDriveData.SystemDriveReservedUnits = (kal_uint32)(NOR_SYSTEM_DRIVE_RESERVED_BLOCK * 2); // The reserved unit is 0.5 block
+
+ // 3. <INTERFACE> Common Interface
+ NORFlashDriver.DiscardSectors=NULL;
+#ifdef __SECURITY_OTP__
+ NORFlashDriver.CopySectors=NULL; // copy sector
+ NORFlashDriver.OTPAccess=OTPAccess;
+ NORFlashDriver.OTPQueryLength=OTPQueryLength;
+#endif
+ NORFlashDriver.HighLevelFormat=NULL; // high level format
+ NORFlashDriver.RecoverDisk=NULL; // flush data
+ NORFlashDriver.MessageAck=NULL; // message ack
+ NORFlashDriver.IOCtrl=NULL;
+
+ return CMEM_NO_ERROR;
+}
+
+#if defined(__NON_INTEL_SIBLEY__)
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ NOR Flash FDM 4.0 interface/data initialization
+*/
+kal_int32 CMEM_Init_NOR_FDM_NonSIB(void)
+{
+ // FDM driver interface
+ NORFlashDriver.MountDevice=NOR_MountDevice_ext;
+ NORFlashDriver.ShutDown=NOR_ShutDown_ext;
+ NORFlashDriver.ReadSectors=NOR_ReadSectors_ext;
+ NORFlashDriver.WriteSectors=NOR_WriteSectors_ext;
+ NORFlashDriver.MediaChanged=NOR_MediaChanged_ext;
+ NORFlashDriver.DiscardSectors=NOR_DiscardSectors_ext;
+ NORFlashDriver.GetDiskGeometry=NOR_GetDiskGeometry_ext;
+ NORFlashDriver.LowLevelFormat=NOR_LowLevelFormat_ext;
+ NORFlashDriver.NonBlockWriteSectors=NOR_NonBlockWriteSectors_ext;
+ NORFlashDriver.RecoverableWriteSectors=NOR_RecoverableWriteSectors_ext;
+ NORFlashDriver.ResumeSectorStates=NOR_ResumeSectorStates_ext;
+
+ // Sibley FDM driver data
+
+#ifdef __BASIC_LOAD_FLASH_TEST__
+ extern kal_uint32 LocateSector(NOR_FLASH_DRV_Data * D, kal_uint32 LogicalSector);
+ LocateSector_ext = LocateSector;
+#endif //__BASIC_LOAD_FLASH_TEST__
+
+ return CMEM_NO_ERROR;
+}
+#endif
+
+#if defined(__INTEL_SIBLEY__)
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ NOR Flash Sibley FDM 4.0 interface/data initialization
+*/
+kal_int32 CMEM_Init_NOR_FDM_SIB(void)
+{
+ // FDM driver interface
+ NORFlashDriver.MountDevice=SIB_MountDevice;
+ NORFlashDriver.ShutDown=NOR_ShutDown;
+ NORFlashDriver.ReadSectors=SIB_ReadSectors;
+ NORFlashDriver.WriteSectors=SIB_WriteSectors;
+ NORFlashDriver.MediaChanged=NOR_MediaChanged;
+ NORFlashDriver.DiscardSectors=SIB_DiscardSectors;
+ NORFlashDriver.GetDiskGeometry=SIB_GetDiskGeometry;
+ NORFlashDriver.LowLevelFormat=SIB_LowLevelFormat;
+ NORFlashDriver.NonBlockWriteSectors=SIB_NonBlockWriteSectors;
+ NORFlashDriver.RecoverableWriteSectors=SIB_RecoverableWriteSectors;
+ NORFlashDriver.ResumeSectorStates=SIB_ResumeSectorStates;
+
+ // FDM driver data
+
+#ifdef __BASIC_LOAD_FLASH_TEST__
+ LocateSector_ext = SIB_LocateSector;
+#endif //__BASIC_LOAD_FLASH_TEST__
+
+
+ return CMEM_NO_ERROR;
+}
+#endif
+
+#endif // !((defined(__FUE__) && defined(__FOTA_DM__)) || defined(__UBL__))
+
+
+//-----------------------------------------------------------------------------
+// Begin of SECOND_PART
+//
+// Put those functions in second part to avoid leakage near to the FS
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Returns the size of the block located at given address.
+ @remarks
+ This is a internal function placed in SECOND part, which can be called by FOTA, MAUI, and Bootloader
+*/
+__sf_section_RAM kal_uint32 CMEM_BlockSize_Internal(kal_uint32 address, const FlashBlockLayout* blocklayout)
+{
+ kal_uint16 i;
+
+ address = address & (0x08000000-1);
+
+ for (i=0; blocklayout[i+1].Size!=0; i++) {
+ if (address >= blocklayout[i].Offset &&
+ address < blocklayout[i+1].Offset) {
+ break;
+ }
+ }
+ return blocklayout[i].Size;
+}
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Returns the size of the block located at given address.
+*/
+__sf_section_RAM kal_uint32 CMEM_BlockSize(kal_uint32 address)
+{
+ return CMEM_BlockSize_Internal(address, BlockLayout);
+}
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Returns the size of the block located at given address.
+ @remarks
+ For EMI init stage only, it will compare ID and match the correct settings.
+*/
+__sf_section_RAM kal_uint32 EMIINIT_CMEM_BlockSize(kal_uint32 address)
+{
+ kal_uint32 index=CMEM_EMIINIT_Index();
+ const CMEMEntryNOR *list=NULL;
+
+ #if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+ list=combo_mem_sw_list.m_data.List;
+ #else
+ list=combo_mem_sw_list.List;
+ #endif //__SV5_ENABLED__ || __SV5X_ENABLED__
+
+ return CMEM_BlockSize_Internal(address, list[index].BlockLayout);
+}
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Construct region info by combo MCP block info
+*/
+__sf_section_RAM kal_int32 NOR_Get_FlashSizeFromBankInfo(const FlashBankInfo *bankinfo)
+{
+ kal_uint32 result=0, i;
+
+ // For all entries in the geometry info
+ for (i=0; bankinfo[i].BankSize!=0; i++) {
+ result += bankinfo[i].Banks * bankinfo[i].BankSize;
+ }
+ return result;
+}
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Construct region info by combo MCP block info
+ @remarks
+ This is a internal function placed in SECOND part, which can be called by FOTA, MAUI, and Bootloader
+*/
+__sf_section_RAM kal_uint32 CMEM_NOR_Construct_RegionInfo_Internal(
+ kal_uint32 baseaddr,
+ kal_uint32 length,
+ FlashRegionInfo *regioninfo,
+ const FlashBlockLayout *blocklayout)
+{
+ kal_uint32 addr, ptr, blksize, total_blocks;
+ kal_uint32 endaddr = baseaddr + length;
+
+ // iterates all blocks
+ for (addr=baseaddr, ptr=0, total_blocks=0; addr<endaddr; ) {
+ blksize=CMEM_BlockSize_Internal(addr, blocklayout);
+ // the block is the first entry of the first region
+ if (total_blocks==0) {
+ regioninfo[ptr].BlockSize=blksize;
+ regioninfo[ptr].RegionBlocks=1;
+ }
+ // the block belongs to the same region
+ else if (blksize==regioninfo[ptr].BlockSize) {
+ regioninfo[ptr].RegionBlocks++;
+ }
+ // the block belongs to a new region
+ else {
+ ptr++;
+ if (ptr==(CMEM_REGION_INFO_LEN+1)) {
+ return CMEM_ERR_FDM_REGION_INFO_OVERFLOW;
+ }
+ regioninfo[ptr].BlockSize=blksize;
+ regioninfo[ptr].RegionBlocks=1;
+ }
+ addr+=blksize;
+ total_blocks++;
+ }
+
+ // TODO: Add bank boundary check and block boundary check
+
+ return CMEM_NO_ERROR;
+}
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Construct region info by combo MCP block info
+*/
+__sf_section_RAM kal_int32 NOR_Construct_RegionInfo(kal_uint32 baseaddr, kal_uint32 length, FlashRegionInfo *regioninfo)
+{
+ kal_mem_set(regioninfo, 0, sizeof(FlashRegionInfo)*CMEM_REGION_INFO_LEN);
+
+ return CMEM_NOR_Construct_RegionInfo_Internal(baseaddr, length, regioninfo, BlockLayout);
+}
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Construct region info by combo MCP block info
+ @remarks
+ For EMI init stage only, it will compare ID and match the correct settings.
+*/
+__sf_section_RAM kal_int32 EMIINIT_CMEM_NOR_Construct_RegionInfo(kal_uint32 baseaddr, kal_uint32 length, FlashRegionInfo *regioninfo)
+{
+ kal_uint32 index=CMEM_EMIINIT_Index();
+ const CMEMEntryNOR *list=NULL;
+
+ #if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+ list=combo_mem_sw_list.m_data.List;
+ #else
+ list=combo_mem_sw_list.List;
+ #endif //__SV5_ENABLED__ || __SV5X_ENABLED__
+
+ return CMEM_NOR_Construct_RegionInfo_Internal(baseaddr, length, regioninfo, list[index].BlockLayout);
+}
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Retrieve Uniform block size
+ @remarks
+ For EMI init stage only, it will compare ID and match the correct settings.
+*/
+__sf_section_RAM kal_uint32 EMIINIT_CMEM_NOR_GetUniformBlock(void)
+{
+ kal_uint32 index=CMEM_EMIINIT_Index();
+ const CMEMEntryNOR *list=NULL;
+
+ #if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+ list=combo_mem_sw_list.m_data.List;
+ #else
+ list=combo_mem_sw_list.List;
+ #endif //__SV5_ENABLED__ || __SV5X_ENABLED__
+
+ return list[index].UniformBlocks;
+}
+
+//-----------------------------------------------------------------------------
+// End of SECOND_PART
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ This function is used to construct bank info, and the caller is
+ CMEM_NOR_Construct_BankInfo()
+*/
+void CMEM_NOR_AddBankInfo(FlashBankInfo *bankInfo, kal_uint32 *index, kal_uint32 bankSize)
+{
+ if(bankInfo[*index].BankSize == bankSize)
+ {
+ bankInfo[*index].Banks ++;
+ }
+ else
+ {
+ *index ++;
+ bankInfo[*index].Banks = 1;
+ bankInfo[*index].BankSize= bankSize;
+ }
+
+}
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Construct bank info of the given address/lenth according to the
+ combo MCP bank info
+*/
+kal_uint32 CMEM_NOR_Construct_BankInfo(
+ kal_uint32 baseaddr,
+ kal_uint32 length,
+ FlashBankInfo *bankInfo,
+ const FlashBankInfo *cmemBankInfo)
+{
+ kal_uint32 Partition = 0;
+ kal_int32 Index = 0;
+ kal_uint32 bankSize;
+ kal_uint32 NextBankAddr,srcBankIdx;
+
+ kal_mem_set(bankInfo, 0, sizeof(FlashBankInfo)*CMEM_BANK_INFO_LEN);
+
+ for(srcBankIdx = 0, NextBankAddr=0; length>0; srcBankIdx++)
+ {
+ if(srcBankIdx >= cmemBankInfo[Partition].Banks)
+ {
+ srcBankIdx = 0; //BankIndex in current partition
+ Partition++;
+ }
+
+ NextBankAddr += cmemBankInfo[Partition].BankSize;
+
+ if(baseaddr <= NextBankAddr) {
+ bankSize = NextBankAddr - baseaddr;
+ if(length < bankSize)
+ bankSize = length;
+
+ //Add One Bank Info
+ if(bankInfo[Index].BankSize == bankSize)
+ {
+ bankInfo[Index].Banks ++;
+ }
+ else
+ {
+ if(bankInfo[Index].BankSize != 0) Index++;
+ bankInfo[Index].Banks = 1;
+ bankInfo[Index].BankSize= bankSize;
+ }
+
+ baseaddr += bankSize;
+ length -= bankSize;
+ }
+
+ }
+
+
+ return CMEM_NO_ERROR;
+}
+
+
+
+#if !((defined(__FUE__) && defined(__FOTA_DM__)) || defined(__UBL__))
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ NOR Flash initialization of MAUI
+*/
+kal_int32 CMEM_Init_NOR(void)
+{
+ kal_int32 result;
+ kal_int32 i;
+
+ // Total Blocks := Blocks in Region Info
+ // Block Size := MAX(RegionInfo[i].BlockSize)
+ BlockLayout=nor_list[cmem_nor_index].BlockLayout;
+ BankInfo=nor_list[cmem_nor_index].BankInfo;
+
+ // construct RegionInfo from block info and bank info
+ result=NOR_Construct_RegionInfo(custom_get_fat_addr(), custom_get_fat_len(), RegionInfo);
+
+ if (result!=CMEM_NO_ERROR) {
+ return result;
+ }
+
+ for (i=0, TOTAL_BLOCKS=0, NOR_LARGEST_BLOCK_SIZE=0 ;RegionInfo[i].BlockSize!=0;i++) {
+ TOTAL_BLOCKS += RegionInfo[i].RegionBlocks;
+ if (RegionInfo[i].BlockSize > NOR_LARGEST_BLOCK_SIZE)
+ NOR_LARGEST_BLOCK_SIZE = RegionInfo[i].BlockSize;
+ }
+
+ // 1. FDM data/interface initialization
+ result=CMEM_Init_NOR_FDM_Common();
+ if (result!=CMEM_NO_ERROR) return result;
+
+ switch (nor_list[cmem_nor_index].FDMType) {
+ #if defined(__INTEL_SIBLEY__)
+ case CMEM_NOR_CS_INTEL_SIBLEY:
+ PAGE_SIZE=0x400;
+ result=CMEM_Init_NOR_FDM_SIB();
+ break;
+ #endif
+ #if defined(__NON_INTEL_SIBLEY__)
+ default:
+ PAGE_SIZE=0x200;
+ result=CMEM_Init_NOR_FDM_NonSIB();
+ break;
+ #endif
+#if !(defined(__INTEL_SIBLEY__) || defined(__NON_INTEL_SIBLEY__))
+ default:
+ result=CMEM_ERR_FDM_MISMATCH;
+ break;
+#endif
+ }
+
+ // Total Sectors := Flash Area / Page Size
+ TOTAL_SECTORS = (NOR_ALLOCATED_FAT_SPACE / PAGE_SIZE);
+
+ if (result!=CMEM_NO_ERROR) return result;
+
+ // 2. MTD data/interface initialization
+
+ result=CMEM_Init_NOR_MTD_Common();
+ if (result!=CMEM_NO_ERROR) return result;
+
+ switch (cmem_id->DeviceType) {
+ #if !defined(__SERIAL_FLASH__)
+ case CMEM_TYPE_NOR:
+ result=CMEM_Init_NOR_MTD_ADMUX();
+ break;
+ #else // __SERIAL_FLASH__
+ case CMEM_TYPE_SERIAL_NOR_FLASH:
+ result=CMEM_Init_NOR_MTD_SF();
+ break;
+ #endif // __SERIAL_FLASH__
+ default:
+ result=CMEM_ERR_MTD_MISMATCH;
+ break;
+ }
+
+ if (result!=CMEM_NO_ERROR) return result;
+
+ // 3. RAW disk initialization
+ #ifdef __NOR_SUPPORT_RAW_DISK__
+ result=CMEM_Init_NOR_RAWDisk_Common();
+ switch (cmem_id->DeviceType) {
+ #if !defined(__SERIAL_FLASH__)
+ case CMEM_TYPE_NOR:
+ result=CMEM_Init_NOR_RAWDisk_ADMUX();
+ break;
+ #else // __SERIAL_FLASH__
+ case CMEM_TYPE_SERIAL_NOR_FLASH:
+ result=CMEM_Init_NOR_RAWDisk_SF();
+ break;
+ #endif // __SERIAL_FLASH__
+ default:
+ result=CMEM_ERR_MTD_MISMATCH;
+ break;
+ }
+ #endif
+
+ return result;
+}
+
+#endif // !((defined(__FUE__) && defined(__FOTA_DM__)) || defined(__UBL__))
+
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Compare device ID and retrieve the correspond NOR flash settings
+*/
+void CMEM_Init_nor_list(void)
+{
+#if ((!defined __FS_SYSDRV_ON_NAND__) && (!defined(_NAND_FLASH_BOOTING_)))
+ cmem_nor_index=CMEM_Index();
+ if (cmem_nor_index<0) ASSERT(0);//return CMEM_ERR_ID_NOT_FOUND;
+ cmem_id=CMEM_GetIDEntry(cmem_nor_index);
+#if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
+ nor_list=combo_mem_sw_list.m_data.List; // SV5
+#else
+ nor_list=combo_mem_sw_list.List; // SV3
+#endif //__SV5_ENABLED__ || __SV5X_ENABLED__
+
+#endif //! __FS_SYSDRV_ON_NAND__ && !_NAND_FLASH_BOOTING_
+}
+
+
+//-----------------------------------------------------------------------------
+// MCP Initialization Function
+//-----------------------------------------------------------------------------
+#if !((defined(__FUE__) && defined(__FOTA_DM__)) || defined(__UBL__))
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Combo MCP intialization function for MAUI
+ @param[in] type The type of initialization (reserved)
+ @retval
+ CMEM_NO_ERROR: Success
+ otherwise: Fail
+*/
+kal_int32 ComboMem_Initialize(void)
+{
+#if ((!defined __FS_SYSDRV_ON_NAND__) && (!defined(_NAND_FLASH_BOOTING_)))
+ CMEM_Init_nor_list();
+ return CMEM_Init_NOR();
+#else
+ // NAND Flash driver has its own init functions
+ return CMEM_NO_ERROR;
+#endif
+}
+#endif // !((defined(__FUE__) && defined(__FOTA_DM__)) || defined(__UBL__))
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ NOR Flash RAW Disk initialization
+*/
+#ifdef __NOR_SUPPORT_RAW_DISK__
+kal_int32 CMEM_Init_NOR_RAWDisk_Common(void)
+{
+ mtdFlashDisk[0].Signature = ~((kal_uint32)Disk0RegionInfo);
+ mtdFlashDisk[0].BaseAddr = (BYTE *)(INT_RetrieveFlashBaseAddr() + NOR_BOOTING_NOR_DISK0_BASE_ADDRESS);
+ mtdFlashDisk[0].RegionInfo = (FlashRegionInfo *)Disk0RegionInfo;
+ FlashDiskDriveData[0].DiskSize = NOR_BOOTING_NOR_DISK0_SIZE;
+
+ FlashDiskDriveData[0].MTDData = &mtdFlashDisk[0];
+#if (NOR_BOOTING_NOR_DISK_NUM > 1)
+ mtdFlashDisk[1].Signature = ~((kal_uint32)Disk1RegionInfo);
+ mtdFlashDisk[1].BaseAddr = (BYTE *)(INT_RetrieveFlashBaseAddr() + NOR_BOOTING_NOR_DISK1_BASE_ADDRESS);
+ mtdFlashDisk[1].RegionInfo = (FlashRegionInfo *)Disk1RegionInfo;
+ FlashDiskDriveData[1].DiskSize = NOR_BOOTING_NOR_DISK1_SIZE;
+ FlashDiskDriveData[1].MTDDriver = &NORFlashMtd;
+ FlashDiskDriveData[1].MTDData = &mtdFlashDisk[1];
+#endif // NOR_BOOTING_NOR_DISK_NUM > 1
+ return CMEM_NO_ERROR;
+}
+
+
+
+#if !defined(__SERIAL_FLASH__)
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ ADMUX NOR Flash RAW Disk initialization
+*/
+kal_int32 CMEM_Init_NOR_RAWDisk_ADMUX(void)
+{
+
+ kal_int32 result;
+
+ NOR_Construct_RegionInfo(NOR_BOOTING_NOR_DISK0_BASE_ADDRESS, NOR_BOOTING_NOR_DISK0_SIZE, Disk0RegionInfo);
+ NOR_Construct_RegionInfo(NOR_BOOTING_NOR_DISK1_BASE_ADDRESS, NOR_BOOTING_NOR_DISK1_SIZE, Disk1RegionInfo);
+
+ // Assign RAW Disk 0 interface
+ FlashDiskDriveData[0].MTDDriver = &NORFlashMtd;
+ mtdFlashDisk[0].CMD=&sf_dal_data_cmd;
+ mtdFlashDisk[0].StatusMap=&StatusMap[0];
+
+ // RAW Disk 0 MTD
+ result=ADMUX_DAL_Init_Driver(
+ &NORFlashMtd, // Driver Interface
+ &mtdFlashDisk[0], // Driver Data
+ (INT_RetrieveFlashBaseAddr() + NOR_BOOTING_NOR_DISK0_BASE_ADDRESS), // Base Address
+ 0); // Reserved: Driver Type
+
+ if (result==FS_FLASH_MOUNT_ERROR)
+ {
+ return CMEM_ERR_MTD_INIT_FAIL;
+ }
+
+#if (NOR_BOOTING_NOR_DISK_NUM > 1)
+ // Assign RAW Disk 1 interface
+ FlashDiskDriveData[1].MTDDriver = &NORFlashMtd;
+ mtdFlashDisk[1].CMD=&sf_dal_data_cmd;
+ mtdFlashDisk[1].StatusMap=&StatusMap[0];
+
+
+ // RAW Disk 0 MTD
+ result=ADMUX_DAL_Init_Driver(
+ &NORFlashMtd, // Driver Interface
+ &mtdFlashDisk[1], // Driver Data
+ (INT_RetrieveFlashBaseAddr() + NOR_BOOTING_NOR_DISK1_BASE_ADDRESS), // Base Address
+ 0); // Reserved: Driver Type
+#endif
+ return CMEM_NO_ERROR;
+}
+
+#else // __SERIAL_FLASH__
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Serial NOR Flash RAW Disk initialization
+*/
+kal_int32 CMEM_Init_NOR_RAWDisk_SF(void)
+{
+ kal_int32 result;
+
+ NOR_Construct_RegionInfo(NOR_BOOTING_NOR_DISK0_BASE_ADDRESS, NOR_BOOTING_NOR_DISK0_SIZE, Disk0RegionInfo);
+ NOR_Construct_RegionInfo(NOR_BOOTING_NOR_DISK1_BASE_ADDRESS, NOR_BOOTING_NOR_DISK1_SIZE, Disk1RegionInfo);
+
+ // Assign RAW Disk 0 interface
+ FlashDiskDriveData[0].MTDDriver = &NORFlashMtd;
+
+ mtdFlashDisk[0].CMD=&sf_dal_data_cmd;
+ mtdFlashDisk[0].StatusMap=&StatusMap[0];
+
+ // RAW Disk 0 MTD
+ result=SF_DAL_Init_Driver(
+ &NORFlashMtd, // Driver Interface
+ &mtdFlashDisk[0], // Driver Data
+ (INT_RetrieveFlashBaseAddr() + NOR_BOOTING_NOR_DISK0_BASE_ADDRESS), // Base Address
+ nor_list[cmem_nor_index].UniformBlocks); // Uniform Block
+
+ if (result==FS_FLASH_MOUNT_ERROR) {
+ return CMEM_ERR_MTD_INIT_FAIL;
+ }
+
+#if (NOR_BOOTING_NOR_DISK_NUM > 1)
+ // Assign RAW Disk 1 interface
+ FlashDiskDriveData[1].MTDDriver = &NORFlashMtd;
+
+ mtdFlashDisk[1].CMD=&sf_dal_data_cmd;
+ mtdFlashDisk[1].StatusMap=&StatusMap[0];
+
+ // RAW Disk 0 MTD
+ result=SF_DAL_Init_Driver(
+ &NORFlashMtd, // Driver Interface
+ &mtdFlashDisk[1], // Driver Data
+ (INT_RetrieveFlashBaseAddr() + NOR_BOOTING_NOR_DISK1_BASE_ADDRESS), // Base Address
+ nor_list[cmem_nor_index].UniformBlocks); // Uniform Block
+#endif
+ return CMEM_NO_ERROR;
+
+}
+#endif // __SERIAL_FLASH__
+#endif // __NOR_SUPPORT_RAW_DISK__
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ NOR Flash FOTA initialization
+*/
+#ifdef __FOTA_DM__
+#if (!defined(__UBL__) && !defined(__FUE__))
+
+extern NOR_FLASH_DRV_Data NORFlashDriveData; //fota_partial.c
+
+#if defined(__SERIAL_FLASH__)
+SF_MTD_Data CMEM_FOTA_nor_mtdflash;
+#else
+PF_MTD_Data CMEM_FOTA_nor_mtdflash;
+#endif
+
+FlashRegionInfo CMEM_FOTA_NORRegionInfo[CMEM_REGION_INFO_LEN];
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ FOTA initialization Entry Function
+*/
+kal_int32 CMEM_Init_FOTA(void)
+{
+
+ kal_int32 result;
+
+ CMEM_Init_nor_list();
+
+ /* Initialize MTD data table */
+ CMEM_FOTA_nor_mtdflash.Signature = ~((kal_uint32)CMEM_FOTA_NORRegionInfo);
+
+ NORFlashDriveData.MTDDriver = &NORFlashMtd;
+ NORFlashDriveData.MTDData = &CMEM_FOTA_nor_mtdflash;
+
+ PAGE_BUFFER_SIZE = nor_list[cmem_nor_index].PageBufferSize;
+
+ BlockLayout=nor_list[cmem_nor_index].BlockLayout;
+ BankInfo=nor_list[cmem_nor_index].BankInfo;
+
+
+#ifdef __MTK_TARGET__
+ CMEM_FOTA_nor_mtdflash.BaseAddr = (BYTE *)INT_RetrieveFlashBaseAddr();
+#endif /* __MTK_TARGET__ */
+
+
+ CMEM_FOTA_nor_mtdflash.RegionInfo = (FlashRegionInfo *)CMEM_FOTA_NORRegionInfo;
+ NOR_Construct_RegionInfo(0, custom_get_NORFLASH_Size(), CMEM_FOTA_NORRegionInfo);
+
+
+ // Allocate status map and command for MTD data
+ CMEM_FOTA_nor_mtdflash.StatusMap = StatusMap;
+
+#if defined(__SERIAL_FLASH__)
+
+ // serial Flash driver will initialize the interface/data by its own.
+
+ CMEM_FOTA_nor_mtdflash.CMD = &sf_dal_data_cmd;
+
+ result=SF_DAL_Init_Driver(
+ &NORFlashMtd, // Driver Interface (to FDM)
+ &CMEM_FOTA_nor_mtdflash, // Driver Data
+ (kal_uint32)CMEM_FOTA_nor_mtdflash.BaseAddr, // Base Address
+ nor_list[cmem_nor_index].UniformBlocks); // Uniform Block
+#else //ADMUX flash
+ CMEM_FOTA_nor_mtdflash.CMD = &pf_dal_data_cmd;
+
+ result=ADMUX_DAL_Init_Driver(
+ &NORFlashMtd, // Driver Interface (to FDM)
+ &CMEM_FOTA_nor_mtdflash, // Driver Data
+ (kal_uint32)CMEM_FOTA_nor_mtdflash.BaseAddr, // Base Address
+ nor_list[cmem_nor_index].FDMType); // Reserved: Driver Type
+
+#endif // __SERIAL_FLASH__
+
+ return CMEM_NO_ERROR;
+}
+#endif // !(__UBL__) && !(__FUE__)
+#endif // __FOTA_DM__
+
+extern kal_int32 EMI_QueryIsRemapped(void);
+
+//-----------------------------------------------------------------------------
+/*!
+ @brief
+ Full driver initialization Entry Function
+ @remarks
+ EntireFlashDisk (SecurDisk, Card Download)
+*/
+kal_int32 CMEM_Init_FullDriver(void)
+{
+ kal_int32 result;
+
+ CMEM_Init_nor_list();
+
+ PAGE_BUFFER_SIZE = nor_list[cmem_nor_index].PageBufferSize;
+
+ BlockLayout=nor_list[cmem_nor_index].BlockLayout;
+ BankInfo=nor_list[cmem_nor_index].BankInfo;
+
+ // Allocate status map and command for MTD data
+ EntireDiskMtdData.StatusMap = &StatusMap[0];
+#ifdef __SERIAL_FLASH__
+ EntireDiskMtdData.CMD = &sf_dal_data_cmd;
+#else
+ EntireDiskMtdData.CMD = &pf_dal_data_cmd;
+#endif
+
+ EntireDiskMtdData.Signature = ~((kal_uint32)EntireDiskRegionInfo);
+ #ifdef __UBL__
+ //begin from MT6255, remapping is done before NOR_ReadID
+ if(EMI_QueryIsRemapped())
+ EntireDiskMtdData.BaseAddr = (BYTE *)0x10000000;
+ else
+ EntireDiskMtdData.BaseAddr = (BYTE *)0;
+
+ #else
+ EntireDiskMtdData.BaseAddr = (BYTE *)INT_RetrieveFlashBaseAddr();
+ #endif
+
+#if defined(__SERIAL_FLASH__)
+ // serial Flash driver will initialize the interface/data by its own.
+ result=SF_DAL_Init_Driver(
+ &NORFlashMtd, // Driver Interface (to FDM)
+ &EntireDiskMtdData, // Driver Data
+ (kal_uint32)EntireDiskMtdData.BaseAddr, // Base Address
+ nor_list[cmem_nor_index].UniformBlocks); // Uniform Block
+#else //ADMUX flash
+
+ result=ADMUX_DAL_Init_Driver(
+ &NORFlashMtd, // Driver Interface (to FDM)
+ &EntireDiskMtdData, // Driver Data
+ (kal_uint32)EntireDiskMtdData.BaseAddr, // Base Address
+ nor_list[cmem_nor_index].FDMType); // Reserved: Driver Type
+
+#endif // __SERIAL_FLASH__
+
+ ASSERT(result!=FS_FLASH_MOUNT_ERROR);
+
+ EntireDiskDriveData.DiskSize = NOR_Get_FlashSizeFromBankInfo(BankInfo);
+ NOR_Construct_RegionInfo(0, EntireDiskDriveData.DiskSize, EntireDiskRegionInfo);
+ EntireDiskMtdData.RegionInfo = (FlashRegionInfo *)EntireDiskRegionInfo;
+
+ EntireDiskDriveData.MTDDriver = &NORFlashMtd;
+ EntireDiskDriveData.MTDData = &EntireDiskMtdData;
+ EntireDiskDriveData.is_mount = KAL_FALSE;
+
+ return CMEM_NO_ERROR;
+}
+
+#if (defined(__FUE__) || defined(__EXT_BOOTLOADER__)) && defined(__FOTA_DM__)
+#include "custom_fota.h"
+
+extern kal_uint32 SSF_GetUAImageLoadAddress(void);
+
+#ifdef __SERIAL_FLASH__
+SF_MTD_Data fue_nor_mtdflash;
+SF_Status fue_sf_srmap[SF_SR_COUNT];
+SF_MTD_CMD fue_sf_cmd;
+#else
+PF_MTD_Data fue_nor_mtdflash;
+PF_Status fue_pf_srmap[SF_SR_COUNT];
+PF_MTD_CMD fue_pf_cmd;
+#endif // __SERIAL_FLASH__
+
+extern NOR_MTD_Driver NORFlashMtd;
+
+void CMEM_Init_FUE(void)
+{
+ kal_int32 result;
+ kal_uint32 blk_addr = 0;
+
+ CMEM_Init_nor_list();
+
+ PAGE_BUFFER_SIZE = nor_list[cmem_nor_index].PageBufferSize;
+
+ BlockLayout=nor_list[cmem_nor_index].BlockLayout;
+ BankInfo=nor_list[cmem_nor_index].BankInfo;
+
+ // construct NORRegionInfo from block info and bank info
+ // ***Note: NORRegionInfo[] body is instantiated in custom_fota.c
+ result=NOR_Construct_RegionInfo(0, custom_get_NORFLASH_Size(), NORRegionInfo);
+
+ ASSERT(result==CMEM_NO_ERROR);
+
+ /* Initialize MTD data table */
+ fue_nor_mtdflash.Signature = ~((kal_uint32)NORRegionInfo);
+
+ FlashDriveData.MTDDriver = &NORFlashMtd;
+ FlashDriveData.MTDData = &fue_nor_mtdflash;
+
+#ifdef __MTK_TARGET__
+
+ #if defined(MT6238) || defined(MT6239) || defined(MT6235B)
+ fue_nor_mtdflash.BaseAddr = (BYTE *)(custom_get_NORFLASH_Base()|0x08000000);
+ #elif defined(MT6228) || defined(MT6229) || defined(MT6230) || defined(MT6225) || defined(MT6268T)
+ fue_nor_mtdflash.BaseAddr = (BYTE *)(custom_get_NORFLASH_Base()|0x04000000);
+ #else
+ fue_nor_mtdflash.BaseAddr = (BYTE *)custom_get_NORFLASH_Base();
+ #endif
+
+ #ifdef __SERIAL_FLASH__
+ fue_nor_mtdflash.CMD = &fue_sf_cmd;
+ fue_nor_mtdflash.StatusMap = fue_sf_srmap;
+ SF_DAL_Init_Driver(&NORFlashMtd, &fue_nor_mtdflash, (kal_uint32)fue_nor_mtdflash.BaseAddr, nor_list[cmem_nor_index].UniformBlocks);
+ #else //ADMUX with combo memory support on
+ fue_nor_mtdflash.CMD = &fue_pf_cmd;
+ fue_nor_mtdflash.StatusMap = fue_pf_srmap;
+ ADMUX_DAL_Init_Driver(&NORFlashMtd, &fue_nor_mtdflash, (kal_uint32)fue_nor_mtdflash.BaseAddr, nor_list[cmem_nor_index].FDMType);
+ #endif // __SERIAL_FLASH__
+
+#endif /* __MTK_TARGET__ */
+
+ fue_nor_mtdflash.RegionInfo = (FlashRegionInfo *)NORRegionInfo;
+
+ blk_addr = SSF_GetUAImageLoadAddress()|custom_get_NORFLASH_Base();
+ #if defined(MT6238) || defined(MT6239) || defined(MT6235B)
+ blk_addr |= 0x08000000;
+ #elif defined(MT6228) || defined(MT6229) || defined(MT6230) || defined(MT6225) || defined(MT6268T)
+ blk_addr |= 0x04000000;
+ #else
+ blk_addr |= 0x0;
+ #endif
+ blk_addr -= (kal_uint32)fue_nor_mtdflash.BaseAddr;
+ FlashDriveData.FlashInfo.baseUnlockBlock = BlockIndex(&fue_nor_mtdflash, blk_addr);
+
+ #if (defined(__UP_PKG_ON_NAND__) && defined(NAND_SUPPORT))
+ blk_addr = (custom_get_NORFLASH_ROMSpace() - 1) | custom_get_NORFLASH_Base();
+ #else
+ blk_addr = FOTA_GetPackageStorageBase()+FOTA_GetPackageStorageSize();
+ #endif /* __UP_PKG_ON_NAND__ && NAND_SUPPORT */
+
+ #if defined(MT6238) || defined(MT6239) || defined(MT6235B)
+ blk_addr |= 0x08000000;
+ #elif defined(MT6228) || defined(MT6229) || defined(MT6230) || defined(MT6225) || defined(MT6268T)
+ blk_addr |= 0x04000000;
+ #else
+ blk_addr |= 0x0;
+ #endif
+
+ blk_addr -= (kal_uint32)fue_nor_mtdflash.BaseAddr;
+ FlashDriveData.FlashInfo.endUnlockBlock = BlockIndex(&fue_nor_mtdflash, blk_addr);
+
+}
+
+#endif // (__FUE__ || __EXT_BOOTLOADER__) && __FOTA_DM__
+
+
+#endif // ( !defined(__FS_SYSDRV_ON_NAND__) && !defined( _NAND_FLASH_BOOTING_) )
+
+#endif // (__COMBO_MEMORY_SUPPORT__) || defined(__SERIAL_FLASH__)
+
diff --git a/mcu/custom/driver/common/custom_EMI_MT6280.c b/mcu/custom/driver/common/custom_EMI_MT6280.c
new file mode 100644
index 0000000..b322916
--- /dev/null
+++ b/mcu/custom/driver/common/custom_EMI_MT6280.c
@@ -0,0 +1,185 @@
+/*****************************************************************************
+* 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) 2006
+*
+* 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:
+ * ---------
+ * custom_EMI_MT6280.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines the EMI (external memory interface) related setting.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ * Memory Device database last modified on 2011/3/18
+ *
+ *============================================================================
+ * 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!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
diff --git a/mcu/custom/driver/common/custom_EMI_MT6290.c b/mcu/custom/driver/common/custom_EMI_MT6290.c
new file mode 100644
index 0000000..0e5a105
--- /dev/null
+++ b/mcu/custom/driver/common/custom_EMI_MT6290.c
@@ -0,0 +1,70 @@
+/*****************************************************************************
+* 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) 2006
+*
+* 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:
+ * ---------
+ * custom_EMI_MT6290.c
+ *
+ * Project:
+ * --------
+ * MOLY
+ *
+ * Description:
+ * ------------
+ * This Module defines the EMI (external memory interface) related setting.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
diff --git a/mcu/custom/driver/common/custom_EMI_SP.c b/mcu/custom/driver/common/custom_EMI_SP.c
new file mode 100644
index 0000000..cab55f1
--- /dev/null
+++ b/mcu/custom/driver/common/custom_EMI_SP.c
@@ -0,0 +1,316 @@
+/*****************************************************************************
+* 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) 2006
+*
+* 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:
+ * ---------
+ * custom_EMI.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines the EMI (external memory interface) related setting.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ * Memory Device database last modified on 2011/6/29
+ *
+ *============================================================================
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#include "custom_EMI_release.h"
+
+#if defined(__EMI_DEVICE_NONE__)
+#if defined(__MTK_TARGET__)
+
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+#include "pll.h"
+
+
+/*************************************
+ *
+ * Imported APIs.
+ *
+ *************************************/
+
+
+/*************************************
+ *
+ * Global Variables.
+ *
+ *************************************/
+
+
+/*************************************************************************
+* FUNCTION
+* custom_setEMI()
+*
+* DESCRIPTION
+* This routine aims to set EMI
+*
+* PARAMETERS
+*
+* RETURNS
+* None
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+kal_int8 custom_setEMI(void)
+{
+
+/**
+ * MT6573 EMI will be init at CMM when bring-up.
+ */
+
+ return 1;
+
+}
+
+/*************************************************************************
+* FUNCTION
+* custom_InitDRAM()
+*
+* DESCRIPTION
+* This routine aims to set EMI and initialize LPSDRAM
+*
+* PARAMETERS
+*
+* RETURNS
+* None
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+kal_int8 custom_InitDRAM(void)
+{
+ return -1;
+
+}
+
+#if ( !defined(__UBL__) && !defined(__FUE__) )
+ /* __FUE__ , __UBL__ compile option is used for FOTA or USB Bootloader build
+ * add this compile option to avoid compiling functions other than custom_setEMI()
+ */
+
+/*************************************************************************
+* FUNCTION
+* custom_setAdvEMI()
+*
+* DESCRIPTION
+* This routine aims to set additional EMI
+* This is special for device which needs to set device configuration
+* register to turn-on special mode.
+*
+* PARAMETERS
+*
+* RETURNS
+* 1:
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+
+#ifdef __MTK_TARGET__
+#endif /* __MTK_TARGET__ */
+
+
+kal_int8 custom_setAdvEMI(void)
+{
+ kal_int8 status = 0;
+
+ return status;
+}
+
+#ifdef __MTK_TARGET__
+#endif /* __MTK_TARGET__ */
+
+
+/*************************************************************************
+* FUNCTION
+* custom_get_EXTSRAM_size()
+*
+* DESCRIPTION
+* Return predefined external SRAM size.
+*
+* PARAMETERS
+*
+* RETURNS
+* None
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+void
+custom_get_EXTSRAM_size(kal_uint32 *size)
+{
+ *size = (kal_uint32)EMI_EXTSRAM_SIZE;
+}
+
+/*************************************************************************
+* FUNCTION
+* custom_ifLPSDRAM()
+*
+* DESCRIPTION
+* Query if the memory device is LPSDRAM
+*
+* PARAMETERS
+*
+* RETURNS
+* KAL_TRUE: The memory device is LPSDRAM
+* KAL_FALSE: The memory device is not LPSDRAM
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+kal_bool
+custom_ifLPSDRAM(void)
+{
+#if defined(DRAM_CS) && defined(DRAM_SIZE)
+ return KAL_TRUE;
+#else
+ return KAL_FALSE;
+#endif
+}
+
+
+/*************************************************************************
+* FUNCTION
+* custom_DynamicClockSwitch
+*
+* DESCRIPTION
+* This function dedicates to switch the system clock and adjust the EMI
+* according to the working system clock.
+*
+* PARAMETERS
+* clock - clock to switch
+*
+* RETURNS
+* 0 for success; -1 for failure
+*
+*************************************************************************/
+#if 0 //#ifdef DCM_ENABLE
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif /* DCM_ENABLE */
+
+
+/*************************************************************************
+* FUNCTION
+* custom_EMIDynamicClockSwitch_Init
+*
+* DESCRIPTION
+* This function is used to Init setting for DCM
+*
+* PARAMETERS
+*
+*
+* RETURNS
+* 0 for success; -1 for failure
+*
+*************************************************************************/
+
+int custom_EMIDynamicClockSwitch_Init(void)
+{
+
+ return 0;
+}
+
+
+
+#endif /* !__UBL__ && !__FUE__ */
+
+#endif // #if defined(__MTK_TARGET__)
+#endif // #if defined(MT6573) || defined(MT6575)
diff --git a/mcu/custom/driver/common/custom_SFI.c b/mcu/custom/driver/common/custom_SFI.c
new file mode 100644
index 0000000..8260616
--- /dev/null
+++ b/mcu/custom/driver/common/custom_SFI.c
@@ -0,0 +1,232 @@
+/*****************************************************************************
+* 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) 2006
+*
+* 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:
+ * ---------
+ * custom_SFI.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines the SFI (serial flash interface) related setting.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ * Memory Device database last modified on 2011/7/8
+ *
+ *============================================================================
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#if defined(__MTK_TARGET__)
+#define __sf_section_RAM __attribute__ ((section ("SNORCODE")))
+#define __sf_section_SECOND_PART __attribute__ ((section ("SECOND_PART")))
+#define __sf_section_EMIINITCODE __attribute__ ((section ("EMIINITCODE")))
+#define __sf_section_RODATA_EMI __attribute__ ((section ("EMIINITCONST")))
+#define __sf_section_ZIDATA_EMI __attribute__ ((zero_init, section ("EMIINITZI")))
+#define __sf_section_RWDATA_INTSRAM __attribute__ ((section ("INTSRAM_RW")))
+#define __sf_section_RODATA_INTSRAM __attribute__ ((section ("INTSRAM_RODATA")))
+#define __sf_section_ZIDATA_INTSRAM __attribute__ ((zero_init, section ("INTSRAM_ZI")))
+#define __sf_section_INTSRAM __attribute__ ((section ("INTSRAM_ROCODE")))
+#else //defined(__SINGLE_BANK_NOR_FLASH_SUPPORT__) && defined(__MTK_TARGET__)
+ /* Reserve for MoDIS */
+#define __sf_section_RAM
+#define __sf_section_SECOND_PART
+#define __sf_section_EMIINITCODE
+#define __sf_section_RODATA_EMI
+#define __sf_section_ZIDATA_EMI
+#define __sf_section_RWDATA_INTSRAM
+#define __sf_section_RODATA_INTSRAM
+#define __sf_section_ZIDATA_INTSRAM
+#define __sf_section_INTSRAM
+#endif //defined(__SINGLE_BANK_NOR_FLASH_SUPPORT__) && defined(__MTK_TARGET__)
+
+
+
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+#include "pll.h"
+
+__sf_section_EMIINITCODE kal_int8 custom_setSFI(void)
+{
+ return 0;
+}
+
+__sf_section_EMIINITCODE kal_int8 custom_setAdvSFI(void)
+{
+ return 0;
+}
+
+__sf_section_RAM int custom_SFIDynamicClockSwitch_Init()
+{
+ return 0;
+}
+
+__sf_section_INTSRAM int custom_SFIDynamicClockSwitch()
+{
+ return 0;
+}
+
diff --git a/mcu/custom/driver/common/custom_flash.c b/mcu/custom/driver/common/custom_flash.c
new file mode 100644
index 0000000..9f18846
--- /dev/null
+++ b/mcu/custom/driver/common/custom_flash.c
@@ -0,0 +1,1226 @@
+/*****************************************************************************
+* 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) 2006
+*
+* 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:
+ * ---------
+ * custom_flash.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines flash related settings.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ * Memory Device database last modified on 2011/7/8
+ *
+ *============================================================================
+ * 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!
+MT6280 SIP_MDSP link fail.
+[Solution]
+Modify EXTSRAM_type_7() to switch $ram_disk_size become 0x40000 if it's MT6280
+[Verification]
+m sys_auto_gen on MT6280_EVB_R7R8_HSPA(SIP_MDSP).W12.17
+and the generated EXTSRAM_FS maxsize becomes 0x40000 and dummy_end base is correct as well.
+[Phase-in Branch]
+MT6280_DVT_DEV
+MODEM_DEV
+[Version]
+scatGenLib.pl m0.03
+[Requester]
+Stanley Chu
+
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * 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!!
+ *============================================================================
+ ****************************************************************************/
+
+#define FLASHCONF_C
+
+#if defined(__SMART_MD_NFI_DRIVER__) // Smart phone start alone driver
+ #ifndef _NAND_FLASH_BOOTING_
+ #define _NAND_FLASH_BOOTING_
+ #endif
+#endif
+
+#include "kal_general_types.h"
+#include "fs_type.h"
+#include "custom_MemoryDevice.h"
+#include "flash_sf.h"
+#include "string.h"
+
+#ifdef FLASH_DISKDRV_DEBUG
+#include <stdlib.h>
+#endif
+
+#include "flash_opt.h"
+#include "DrvFlash.h"
+#include "NAND_FDM.h"
+#include "flash_disk.h"
+#include "flash_disk_internal.h"
+#include "combo_flash_init.h"
+
+#include "custom_flash.h"
+
+#include "flash_mtd_ut.h" //__BASIC_LOAD_FLASH_TEST__
+#include "DrvFlash_UT.h"
+
+#include "custom_nvram_int_config.h" /* To get NVRAM_CUSTOM_CFG_MAX_RECORD_SECTOR_NUM for MSTABLE_ENTRY_NUM */
+
+
+#if !(defined(__SMART_PHONE_PLATFORM__) && defined(__SMART_PHONE_MODEM__))
+
+
+
+/*-------------------------------------------------------------------
+ * MS table size
+ *
+ * MS table size should be synchronized with user's requirement. The only one user is NVRAM.
+ *
+ * NVRAM_CUSTOM_CFG_MAX_RECORD_SECTOR_NUM defines the maximum record size in NVRAM
+ * (in custom_nvram_config.h). NVRAM should call NOR_ResumeSectorState (by FS_Commit)
+ * after it writes maximum NVRAM_CUSTOM_CFG_MAX_RECORD_SECTOR_NUM sectors with protection
+ * mode to ensure the integrity of a record.
+ *
+ * MSTABLE_ENTRY_NUM number is based on the worst senario: All FAT entries of clusters
+ * of logical sectors are located in different physical sectors. In other word, we need
+ * to write additional N sectors to update FAT after we write N data sectors. The other
+ * 1 sector is for directory entry update.
+ *
+ * TODO: Use auto-gen to compute most suitable MS table size. Because the number of
+ * sectors for FAT may be smaller than NVRAM_CUSTOM_CFG_MAX_RECORD_SECTOR_NUM. For example,
+ * 64KB disk only needs 1 sector to store FAT.
+ *---------------------------------------------------------- W08.50 --*/
+
+#define MS_TABLE_ENTRY_NUM (NVRAM_CUSTOM_CFG_MAX_RECORD_SECTOR_NUM * 2 + 1)
+
+/*
+ ****************************************************************************
+ PART 1:
+ Rules to Prevent Wrong Configuration
+ ****************************************************************************
+*/
+#ifdef NAND_PARTITION_SECTORS
+
+ #if (NAND_PARTITION_SECTORS > 0 && NAND_PARTITION_SECTORS < NAND_MINIMUM_PARTITION_SIZE)
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! NAND_FS_FIRST_DRIVE_SECTORS MUST be larger than NAND_MINIMUM_PARTITION_SIZE!"
+ #endif
+
+ #if (defined(_NAND_FLASH_BOOTING_))
+ #if ( (NAND_PARTITION_SECTORS << 9) > NAND_ALLOCATED_FAT_SPACE)
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! NAND_FS_FIRST_DRIVE_SECTORS MUST be less than NAND_FS_SIZE!"
+ #endif
+ #endif /* _NAND_FLASH_BOOTING_ */
+
+#endif /* NAND_PARTITION_SECTORS */
+
+
+#if defined(__SINGLE_BANK_NOR_DEVICE__)
+
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Single Bank device with non Single Bank load! Please modify device or makefile option!"
+
+#endif /* __SINGLE_BANK_NOR_DEVICE__ */
+
+
+#if !defined(_NAND_FLASH_BOOTING_) && !defined(__EMMC_BOOTING__)
+ #ifndef __NOR_FDM5__
+ #if (TOTAL_BLOCKS > 127)
+ #error "TOTAL_BLOCKS > 127 , recommend enable Pseudo Sized Block feature for serial flash project. Enable FDM5.0 feature for NOR flash project."
+ #endif
+ #endif
+#endif
+
+/*
+ ****************************************************************************
+ PART 2:
+ Essential Information of NOR Flash Geometry Layout Information
+ ****************************************************************************
+*/
+/*******************************************************************************
+ NOTICE: Fill the flash region information table, a region is the memory space
+ that contains continuous sectors of equal size. Each region element
+ in the table is the format as below:
+ {S_sector, N_sector},
+ S_sector: the size of sector in the region
+ N_sector: the number of sectors in the region
+ *******************************************************************************/
+
+#if !(defined(__FUE__) || defined(__UBL__) || defined(__EXT_BOOTLOADER__))
+#define __MAUI_LOAD__
+#endif //!__FUE__ && !__UBL__ && !__EXT_BOOTLOADER__
+
+#if !defined(_NAND_FLASH_BOOTING_) && !defined(__EMMC_BOOTING__) && !defined(__RAMDISK__)
+#define _NOR_FLASH_BOOTING_
+#endif // !_NAND_FLASH_BOOTING_ && !__EMMC_BOOTING__
+
+
+#ifdef _NOR_FLASH_BOOTING_
+
+#define FLASH_REGIONINFO_VAR_MODIFIER static const
+
+#if (defined(__MAUI_LOAD__) && defined(_NOR_FLASH_BOOTING_) && !defined(__NOR_FDM5__))
+#define __MAUI_NOR_FDM4__
+#endif
+
+#if defined(__MAUI_NOR_FDM4__)
+FLASH_REGIONINFO_VAR_MODIFIER FlashRegionInfo RegionInfo[]= /* Don't modify this line */
+{
+ REGION_INFO_LAYOUT
+ EndRegionInfo /* Don't modify this line */
+};
+#endif //__MAUI_NOR_FDM4__
+
+#if !defined(__SERIAL_FLASH__)
+#ifdef __NOR_SUPPORT_RAW_DISK__
+
+#ifndef NOR_BOOTING_NOR_DISK_NUM
+#error "custom\system\{project}\custom_MemoryDevice.h: Error! NOR_BOOTING_NOR_DISK_NUM be defined when __NOR_SUPPORT_RAW_DISK__ is defined."
+#endif //NOR_BOOTING_NOR_DISK_NUM
+
+#if (NOR_BOOTING_NOR_DISK_NUM>0)
+FLASH_REGIONINFO_VAR_MODIFIER FlashRegionInfo Disk0RegionInfo[]= /* Don't modify this line */
+{
+ DISK0_REGION_INFO_LAYOUT
+ EndRegionInfo /* Don't modify this line */
+};
+#endif /* NOR_BOOTING_NOR_DISK_NUM>0 */
+
+#if (NOR_BOOTING_NOR_DISK_NUM>1)
+FLASH_REGIONINFO_VAR_MODIFIER FlashRegionInfo Disk1RegionInfo[]= /* Don't modify this line */
+{
+ DISK1_REGION_INFO_LAYOUT
+ EndRegionInfo /* Don't modify this line */
+};
+#endif /* NOR_BOOTING_NOR_DISK_NUM>1 */
+#endif // __NOR_SUPPORT_RAW_DISK__
+
+FLASH_REGIONINFO_VAR_MODIFIER FlashRegionInfo EntireDiskRegionInfo[]= /* Don't modify this line */
+{
+ ENTIRE_DISK_REGION_INFO_LAYOUT
+ EndRegionInfo /* Don't modify this line */
+};
+
+NOR_FLASH_DISK_Data EntireDiskDriveData;
+static NOR_Flash_MTD_Data EntireDiskMtdData;
+
+/*******************************************************************************
+ NOTICE. Modify the value of page buffer size in WORD for page buffer program
+ *******************************************************************************/
+kal_uint32 PAGE_BUFFER_SIZE = BUFFER_PROGRAM_ITERATION_LENGTH;
+
+/*******************************************************************************
+ NOTICE. This is for the Enhanced Signle Bank Support, when this feature is
+ turned on and still use multi-bank device, this table should be filled
+ with correct value.
+
+ This Table define the flash bank information which starts from
+ FLASH_BASE_ADDRESS, please fill the flash bank information table, every
+ entry defines the memory space that contains continuous banks of equal size.
+ Each entry element in the table is the format as below:
+ {S_Bank, N_Bank},
+ S_Bank: the size of bank in the entry
+ N_Bank: the number of banks in the entry
+ *******************************************************************************/
+#endif /* !__COMBO_MEMORY_SUPPORT__ && !__SERIAL_FLASH__ */
+
+#endif // _NOR_FLASH_BOOTING_
+
+/*
+ ****************************************************************************
+ PART 3:
+ Essential Declarations for NOR-Flash Disk
+ ****************************************************************************
+*/
+
+extern NOR_MTD_Driver NORFlashMtd;
+
+#ifdef __MAUI_NOR_FDM4__
+
+static MS_ENTRY MSEntryTable[MS_TABLE_ENTRY_NUM];
+
+
+#if !defined(__SERIAL_FLASH__)
+
+#ifndef __INTEL_SIBLEY__
+
+/* Each FAT sector is 512bytes (0x200) */
+#define TOTAL_SECTORS ((NOR_ALLOCATED_FAT_SPACE -NOR_BLOCK_SIZE * NOR_SYSTEM_DRIVE_RESERVED_BLOCK) / 0x200)
+
+kal_uint8 FDMBuffer[512];
+
+
+FS_Driver NORFlashDriver =
+{
+ NOR_MountDevice_ext,
+ NOR_ShutDown,
+ NOR_ReadSectors_ext,
+ NOR_WriteSectors_ext,
+ NOR_MediaChanged_ext,
+ NOR_DiscardSectors_ext,
+ NOR_GetDiskGeometry_ext,
+ NOR_LowLevelFormat_ext,
+ NOR_NonBlockWriteSectors_ext,
+ NOR_RecoverableWriteSectors_ext,
+ NOR_ResumeSectorStates_ext,
+ NULL, /*high level format*/
+ NULL, /*flush data*/
+ NULL /*message ack*/
+#ifdef __SECURITY_OTP__
+ ,
+ NULL, /*copy sector*/
+ OTPAccess,
+ OTPQueryLength
+#endif
+};
+
+#else /* __INTEL_SIBLEY__ */
+
+/* Each FAT sector is 1024bytes (0x200) */
+#define TOTAL_SECTORS ((NOR_ALLOCATED_FAT_SPACE - NOR_BLOCK_SIZE * NOR_SYSTEM_DRIVE_RESERVED_BLOCK) / 0x400)
+
+kal_uint8 FDMBuffer[1024];
+
+
+FS_Driver NORFlashDriver =
+{
+ SIB_MountDevice,
+ NOR_ShutDown,
+ SIB_ReadSectors,
+ SIB_WriteSectors,
+ NOR_MediaChanged,
+ SIB_DiscardSectors,
+ SIB_GetDiskGeometry,
+ SIB_LowLevelFormat,
+ SIB_NonBlockWriteSectors,
+ SIB_RecoverableWriteSectors,
+ SIB_ResumeSectorStates,
+ NULL, /*high level format*/
+ NULL, /*flush data*/
+ NULL /*message ack*/
+#ifdef __SECURITY_OTP__
+ ,
+ NULL, /*copy sector*/
+ OTPAccess,
+ OTPQueryLength
+#endif
+};
+
+#endif /* __INTEL_SIBLEY__ */
+
+static WORD AVAILSECTORS[TOTAL_BLOCKS];
+static WORD VALIDSECTORS[TOTAL_BLOCKS];
+static BYTE SectorMap[TOTAL_SECTORS];
+NOR_FLASH_DRV_Data FlashDriveData;
+
+
+#ifdef __MTK_TARGET__
+
+static NOR_Flash_MTD_Data mtdflash;
+
+#ifdef __NOR_SUPPORT_RAW_DISK__
+NOR_FLASH_DISK_Data FlashDiskDriveData[NOR_BOOTING_NOR_DISK_NUM];
+static NOR_Flash_MTD_Data mtdFlashDisk[NOR_BOOTING_NOR_DISK_NUM];
+#endif // __NOR_SUPPORT_RAW_DISK__
+
+extern kal_uint32 INT_RetrieveFlashBaseAddr(void);
+
+#else
+
+static NOR_Flash_MTD_Data mtdflash =
+{
+ MakeMtdFlashData((BYTE *)NOR_FLASH_BASE_ADDRESS, RegionInfo)
+};
+
+#endif /* __MTK_TARGET__ */
+
+#endif /* !(__COMBO_MEMORY_SUPPORT__) && !(__SERIAL_FLASH__) */
+
+#endif /* __MAUI_NOR_FDM4__ */
+
+
+
+/*
+ ****************************************************************************
+ PART 4:
+ Public Functions For NOR Flash Information Retrieve, Initial routine, and
+ other misc routines.
+ ****************************************************************************
+*/
+kal_uint32 custom_get_NORFLASH_Base(void);
+
+/*
+ ****************************************************************************
+ PART 5:
+ Essential Declarations for NAND-Flash Disk
+ ****************************************************************************
+*/
+#if (!(defined(__FUE__) && defined(__FOTA_DM__)) && (!defined(__UBL__)||(defined(__UBL__)&&defined(__NAND_SUPPORT_RAW_DISK__))))
+ // 1. NAND FDM variable compile option
+ // a. In general, FOTA and Boot loader don't need to include NAND FDM variable.
+ // b. In TC01 Raw disk case, boot loader need to call FDM function, it will need raw disk configuration
+ // 2. Declare NAND variable structue
+ // a. In general, NFBxxx is only used for NAND_BOOTING
+ // b. UP_PKG_ON_NAND will also need NFBxxx.
+
+#if defined(__EMMC_BOOTING__)
+
+
+#elif defined(_NAND_FLASH_BOOTING_)
+ /* System Drive on NAND-flash */
+ #if ( defined(__NANDFDM_MULTI_INSTANCE__) && defined(__NAND_FDM_50__) )
+ kal_uint32 NFB_BASE_ADDRESS[NAND_DISK_NUM];
+ kal_uint32 NFB_ALLOCATED_FAT_SPACE[NAND_DISK_NUM];
+ kal_uint16 FS_DISK_REPLACE_RATIO[NAND_DISK_NUM];
+ const kal_uint8 NANDDiskNum = NAND_DISK_NUM;
+ #if ( defined(__NANDFDM_TOTAL_BBM__))
+ kal_uint32 FS_DISK_START_SECTION[NAND_DISK_NUM];
+ kal_uint32 NFB_REPLACE_BASE_ADDRESS;
+ kal_uint32 NFB_REPLACE_SPACE;
+ BBM_BRMT_INFO NAND_BRMT_Info;
+ #endif
+ #else // ( defined(__NANDFDM_MULTI_INSTANCE__) && defined(__NAND_FDM_50__) )
+ const kal_uint32 NFB_BASE_ADDRESS = NAND_FLASH_BASE_ADDRESS;
+ const kal_uint32 NFB_ALLOCATED_FAT_SPACE = NAND_ALLOCATED_FAT_SPACE;
+ #endif // ( defined(__NANDFDM_MULTI_INSTANCE__) && defined(__NAND_FDM_50__) )
+
+#else /* !_NAND_FLASH_BOOTING_ || __EMMC_BOOTING__ */
+ #if (defined(__UP_PKG_ON_NAND__) && defined(NAND_SUPPORT)) || (defined(__NANDFDM_MULTI_INSTANCE__) && defined(__NAND_FDM_50__))
+ /* update package storage on NAND flash */
+ #if ( defined(__NANDFDM_MULTI_INSTANCE__) && defined(__NAND_FDM_50__) )
+ kal_uint32 NFB_BASE_ADDRESS[NAND_DISK_NUM];
+ kal_uint32 NFB_ALLOCATED_FAT_SPACE[NAND_DISK_NUM];
+ kal_uint16 FS_DISK_REPLACE_RATIO[NAND_DISK_NUM];
+ const kal_uint8 NANDDiskNum = NAND_DISK_NUM;
+ #else // ( defined(__NANDFDM_MULTI_INSTANCE__) && defined(__NAND_FDM_50__) )
+ const kal_uint32 NFB_BASE_ADDRESS = NAND_FLASH_BASE_ADDRESS;
+ const kal_uint32 NFB_ALLOCATED_FAT_SPACE = NAND_ALLOCATED_FAT_SPACE;
+ #endif // ( defined(__NANDFDM_MULTI_INSTANCE__) && defined(__NAND_FDM_50__) )
+ #endif
+#endif /* _NAND_FLASH_BOOTING_ || __EMMC_BOOTING__ */
+
+#if defined(__NAND_FDM_50__)
+ #ifdef NAND_BOOTING_NAND_MAX_REPLACE_COUNT
+ kal_uint16 wNandMaxReplaceCount = NAND_BOOTING_NAND_MAX_REPLACE_COUNT;
+ #else
+ kal_uint16 wNandMaxReplaceCount = 28;
+ #endif
+#endif //defined(__NAND_FDM_50__)
+
+#ifdef __EMMC_BOOTING__
+kal_uint32 custom_part_secs = 0;
+#else
+kal_uint32 custom_part_secs = NAND_PARTITION_SECTORS;
+#endif
+
+#if ( defined(__NANDFDM_MULTI_INSTANCE__) && defined(__NAND_FDM_50__) )
+ #if (defined(__UBL__)&&defined(__NAND_SUPPORT_RAW_DISK__))
+ NAND_FLASH_DRV_DATA NANDFlashDriveData[1]; // To save ZI Space
+ #else
+ NAND_FLASH_DRV_DATA NANDFlashDriveData[NAND_DISK_NUM];
+ #endif
+#else // ( defined(__NANDFDM_MULTI_INSTANCE__) && defined(__NAND_FDM_50__) )
+NAND_FLASH_DRV_DATA NANDFlashDriveData;
+#endif // ( defined(__NANDFDM_MULTI_INSTANCE__) && defined(__NAND_FDM_50__) )
+
+#endif /* (!(__FOTA_DM__ && __FUE__) || !__UBL__)) || (UBL&&RAW) */
+/*************************************************************************
+* FUNCTION
+* custom_get_NORFLASH_ROMSpace()
+*
+* DESCRIPTION
+* Query the of space configured for NORFLASH ROM
+*
+* PARAMETERS
+*
+* RETURNS
+* BASE ADDRESS
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+kal_uint32
+custom_get_NORFLASH_ROMSpace(void)
+{
+#if defined(_NAND_FLASH_BOOTING_) || defined(__EMMC_BOOTING__) || defined(__RAMDISK__)
+ return 0;
+#elif defined(__FS_SYSDRV_ON_NAND__) || (defined(__UP_PKG_ON_NAND__) && defined(NAND_SUPPORT))
+ return NOR_FLASH_BASE_ADDRESS + NOR_ALLOCATED_FAT_SPACE;
+#else
+ return NOR_FLASH_BASE_ADDRESS;
+#endif
+}
+
+
+/*************************************************************************
+* FUNCTION
+* custom_get_NORFLASH_Size()
+*
+* DESCRIPTION
+* Query the size of NORFLASH ROM
+*
+* PARAMETERS
+*
+* RETURNS
+* SIZE
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+kal_uint32
+custom_get_NORFLASH_Size(void)
+{
+#if defined(_NAND_FLASH_BOOTING_) || defined(__EMMC_BOOTING__) || defined(__RAMDISK__)
+ return 0;
+#else
+ return NOR_FLASH_SIZE;
+#endif
+}
+
+/*************************************************************************
+* FUNCTION
+* Initialize_FDD_tables
+*
+* DESCRIPTION
+* Initialize important information for NOR-flash disk
+*
+* PARAMETERS
+*
+* RETURNS
+* None
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+#if defined(__MAUI_LOAD__)
+
+#if defined(__RAMDISK__)
+extern kal_uint8 ram_disk[];
+void Initialize_FDD_tables(void)
+{
+ return;
+}
+#elif defined(__SERIAL_FLASH__) && defined(_NOR_FLASH_BOOTING_)
+void Initialize_FDD_tables(void)
+{
+#if !defined(ATEST_DRV_ENABLE) && !defined(ATEST_DRV_ENVIRON)
+ ComboMem_Initialize();
+#endif /* end of ATEST_DRV_ENABLE */
+ return;
+}
+
+#else /* (!(__COMBO_MEMORY_SUPPORT__) && !(__SERIAL_FLASH__)) && !(_NOR_FLASH_BOOTING_) */
+
+#ifndef __NOR_FDM5__
+
+#ifdef __NONE_FLASH_EXIST__
+
+NOR_MTD_Driver NORFlashMtd;
+
+#endif
+
+void Initialize_FDD_tables(void)
+{
+#if ( !defined(__FS_SYSDRV_ON_NAND__) && defined(_NOR_FLASH_BOOTING_))
+
+ /* Initialize MTD data table */
+ mtdflash.Signature = ~((kal_uint32)RegionInfo);
+
+#ifdef __MTK_TARGET__
+#if (defined(__SMART_PHONE_PLATFORM__) && !defined(__SMART_PHONE_MODEM__)) && defined(__RAMDISK__)
+ mtdflash.BaseAddr = (kal_uint8 *)ram_disk;
+#else
+ mtdflash.BaseAddr = (BYTE *)(INT_RetrieveFlashBaseAddr() + NOR_FLASH_BASE_ADDRESS);
+#endif
+
+#endif /* __MTK_TARGET__ */
+
+ mtdflash.RegionInfo = (FlashRegionInfo *)RegionInfo;
+
+ /* Initialize FDD data table */
+ FlashDriveData.MTDDriver = &NORFlashMtd;
+ FlashDriveData.MTDData = &mtdflash;
+ FlashDriveData.AvailSectorsInBlock = AVAILSECTORS;
+ FlashDriveData.ValidSectorsInBlock = VALIDSECTORS;
+ FlashDriveData.SectorMap = (BYTE*)SectorMap;
+ FlashDriveData.PartitionSectors = NOR_PARTITION_SECTORS;
+ FlashDriveData.Buffer = FDMBuffer;
+ FlashDriveData.MSTABLE_ENTRY_NUM = MS_TABLE_ENTRY_NUM;
+ FlashDriveData.MSEntryTable = MSEntryTable;
+
+ /* The reserved unit is 0.5 block.*/
+ FlashDriveData.SystemDriveReservedUnits = (kal_uint32)(NOR_SYSTEM_DRIVE_RESERVED_BLOCK * 2);
+
+
+#ifdef __NOR_SUPPORT_RAW_DISK__
+ mtdFlashDisk[0].Signature = ~((kal_uint32)Disk0RegionInfo);
+ mtdFlashDisk[0].BaseAddr = (BYTE *)(INT_RetrieveFlashBaseAddr() + NOR_BOOTING_NOR_DISK0_BASE_ADDRESS);
+ mtdFlashDisk[0].RegionInfo = (FlashRegionInfo *)Disk0RegionInfo;
+ FlashDiskDriveData[0].DiskSize = NOR_BOOTING_NOR_DISK0_SIZE;
+ FlashDiskDriveData[0].MTDDriver = &NORFlashMtd;
+ FlashDiskDriveData[0].MTDData = &mtdFlashDisk[0];
+#if (NOR_BOOTING_NOR_DISK_NUM > 1)
+ mtdFlashDisk[1].Signature = ~((kal_uint32)Disk1RegionInfo);
+ mtdFlashDisk[1].BaseAddr = (BYTE *)(INT_RetrieveFlashBaseAddr() + NOR_BOOTING_NOR_DISK1_BASE_ADDRESS);
+ mtdFlashDisk[1].RegionInfo = (FlashRegionInfo *)Disk1RegionInfo;
+ FlashDiskDriveData[1].DiskSize = NOR_BOOTING_NOR_DISK1_SIZE;
+ FlashDiskDriveData[1].MTDDriver = &NORFlashMtd;
+ FlashDiskDriveData[1].MTDData = &mtdFlashDisk[1];
+#endif // NOR_BOOTING_NOR_DISK_NUM > 1
+#endif // __NOR_SUPPORT_RAW_DISK__
+
+#ifdef __FOTA_DM__
+ FlashDriveData.FlashInfo.baseUnlockBlock = INVALID_BLOCK_INDEX;
+ FlashDriveData.FlashInfo.endUnlockBlock = INVALID_BLOCK_INDEX;
+#endif
+
+
+#ifdef __BASIC_LOAD_FLASH_TEST__
+#ifdef __INTEL_SIBLEY__
+ LocateSector_ext = SIB_LocateSector;
+#else
+ LocateSector_ext = LocateSector;
+#endif //__INTEL_SIBLEY__
+#endif //__BASIC_LOAD_FLASH_TEST__
+
+
+#endif /* !__FS_SYSDRV_ON_NAND__ && _NOR_FLASH_BOOTING_ */
+
+ #if ( defined(__NANDFDM_MULTI_INSTANCE__) && defined(__NAND_FDM_50__) )
+ {
+ kal_uint32 DiskIndex;
+
+ for (DiskIndex=0; DiskIndex<NAND_DISK_NUM; DiskIndex++)
+ {
+ #if (defined(__UBL__)&&defined(__NAND_SUPPORT_RAW_DISK__))
+ if(DiskIndex==RAW_DISK_INDEX){
+ NANDFlashDriveData[0].NAND_FDMData.DiskIndex = RAW_DISK_INDEX;
+ }
+ #else
+ NANDFlashDriveData[DiskIndex].NAND_FDMData.DiskIndex = DiskIndex;
+ #endif
+ switch (DiskIndex)
+ {
+ case 0:
+ NFB_BASE_ADDRESS[0] = NAND_BOOTING_NAND_FS_DISK0_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[0] = NAND_BOOTING_NAND_FS_DISK0_SIZE;
+ FS_DISK_REPLACE_RATIO[0] = NAND_BOOTING_NAND_FS_DISK0_REPLACE_RATIO;
+ break;
+ #if (NAND_DISK_NUM > 1)
+ case 1:
+ NFB_BASE_ADDRESS[1] = NAND_BOOTING_NAND_FS_DISK1_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[1] = NAND_BOOTING_NAND_FS_DISK1_SIZE;
+ FS_DISK_REPLACE_RATIO[1] = NAND_BOOTING_NAND_FS_DISK1_REPLACE_RATIO;
+ break;
+ #endif /* NAND_DISK_NUM > 1 */
+ #if (NAND_DISK_NUM > 2)
+ case 2:
+ NFB_BASE_ADDRESS[2] = NAND_BOOTING_NAND_FS_DISK2_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[2] = NAND_BOOTING_NAND_FS_DISK2_SIZE;
+ FS_DISK_REPLACE_RATIO[2] = NAND_BOOTING_NAND_FS_DISK2_REPLACE_RATIO;
+ break;
+ #endif /* NAND_DISK_NUM > 2 */
+ #if (NAND_DISK_NUM > 3)
+ case 3:
+ NFB_BASE_ADDRESS[3] = NAND_BOOTING_NAND_FS_DISK3_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[3] = NAND_BOOTING_NAND_FS_DISK3_SIZE;
+ FS_DISK_REPLACE_RATIO[3] = NAND_BOOTING_NAND_FS_DISK3_REPLACE_RATIO;
+ break;
+ #endif /* NAND_DISK_NUM > 3 */
+ #if (NAND_DISK_NUM > 4)
+ case 4:
+ NFB_BASE_ADDRESS[4] = NAND_BOOTING_NAND_FS_DISK4_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[4] = NAND_BOOTING_NAND_FS_DISK4_SIZE;
+ FS_DISK_REPLACE_RATIO[4] = NAND_BOOTING_NAND_FS_DISK4_REPLACE_RATIO;
+ break;
+ #endif /* NAND_DISK_NUM > 4 */
+ #if (NAND_DISK_NUM > 5)
+ case 5:
+ NFB_BASE_ADDRESS[5] = NAND_BOOTING_NAND_FS_DISK5_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[5] = NAND_BOOTING_NAND_FS_DISK5_SIZE;
+ FS_DISK_REPLACE_RATIO[5] = NAND_BOOTING_NAND_FS_DISK5_REPLACE_RATIO;
+ break;
+ #endif /* NAND_DISK_NUM > 5 */
+ #if (NAND_DISK_NUM > 6)
+ case 6:
+ NFB_BASE_ADDRESS[6] = NAND_BOOTING_NAND_FS_DISK6_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[6] = NAND_BOOTING_NAND_FS_DISK6_SIZE;
+ FS_DISK_REPLACE_RATIO[6] = NAND_BOOTING_NAND_FS_DISK6_REPLACE_RATIO;
+ break;
+ #endif /* NAND_DISK_NUM > 6 */
+ #if (NAND_DISK_NUM > 7)
+ case 7:
+ NFB_BASE_ADDRESS[7] = NAND_BOOTING_NAND_FS_DISK7_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[7] = NAND_BOOTING_NAND_FS_DISK7_SIZE;
+ FS_DISK_REPLACE_RATIO[7] = NAND_BOOTING_NAND_FS_DISK7_REPLACE_RATIO;
+ break;
+ #endif /* NAND_DISK_NUM > 7 */
+ }
+ }
+ }
+ #if ( defined(__NANDFDM_TOTAL_BBM__))
+ NFB_REPLACE_BASE_ADDRESS = NAND_BOOTING_NAND_FS_REPLACE_BASE_ADDRESS;
+ NFB_REPLACE_SPACE = NAND_BOOTING_NAND_FS_REPLACE_SIZE;
+ NAND_BRMT_Info.ParameterReady = KAL_FALSE;
+ NAND_BRMT_Info.NoReplace = KAL_FALSE;
+ NAND_BRMT_Info.BRMT_Addr = 0;
+ NAND_BRMT_Info.CurSectorInRAM = 0xff;
+ #endif
+
+ #endif // ( defined(__NANDFDM_MULTI_INSTANCE__) && defined(__NAND_FDM_50__) )
+}
+#endif /*__NOR_FDM5__*/
+#endif /* !(__COMBO_MEMORY_SUPPORT__) && !(__SERIAL_FLASH__) */
+
+void nor_sweep_device(void)
+{
+#ifdef __NOR_FDM5__
+ kal_set_eg_events(nor_egid, NOR_DMAN_EVENT, KAL_OR);
+#endif
+ return;
+}
+
+void nor_manual_reclaim(void)
+{
+#ifdef __NOR_FDM5__
+ kal_set_eg_events(nor_egid, NOR_BRECL_EVENT, KAL_OR);
+#endif
+ return;
+}
+
+/*************************************************************************
+* FUNCTION
+* custom_get_fat_addr()
+*
+* DESCRIPTION
+* This function gets the start address of FAT.
+*
+* PARAMETERS
+* none
+*
+* RETURNS
+* FAT start address
+*
+*************************************************************************/
+kal_uint32 custom_get_fat_addr()
+{
+ #if defined(__RAMDISK__)
+ return (kal_uint32)(&ram_disk);
+ #elif defined(__EMMC_BOOTING__)
+ return EMMC_CODE_PARTITION_SIZE;
+ #elif defined(_NAND_FLASH_BOOTING_)
+ return NAND_FLASH_BASE_ADDRESS;
+ #else
+ return NOR_FLASH_BASE_ADDRESS;
+ #endif /* _NAND_FLASH_BOOTING_ */
+}
+
+/*************************************************************************
+* FUNCTION
+* custom_get_fat_len()
+*
+* DESCRIPTION
+* This function gets the len of FAT.
+*
+* PARAMETERS
+* none
+*
+* RETURNS
+* FAT length
+*
+*************************************************************************/
+kal_uint32 custom_get_fat_len()
+{
+ #if defined(__RAMDISK__)
+ return RAM_FS_SIZE_INT;
+ #elif defined(__EMMC_BOOTING__)
+ return 0;
+ #elif defined(_NAND_FLASH_BOOTING_)
+ return NAND_ALLOCATED_FAT_SPACE;
+ #else
+ return NOR_ALLOCATED_FAT_SPACE;
+ #endif /* _NAND_FLASH_BOOTING_ */
+}
+#endif // __MAUI_LOAD__
+
+/*************************************************************************
+* FUNCTION
+* Custom_NAND_Init
+*
+* DESCRIPTION
+* Initialize important information for NAND-flash disk
+*
+* PARAMETERS
+*
+* RETURNS
+* None
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+#if ((defined(__UBL__)&&defined(__NAND_SUPPORT_RAW_DISK__))||(!defined(__UBL__))) && !defined(__FUE__)
+kal_bool NANDParameterInitialized = KAL_FALSE;
+void Custom_NAND_Init(void)
+{
+ #if ( defined(__NANDFDM_MULTI_INSTANCE__) && defined(__NAND_FDM_50__) )
+ {
+ kal_uint32 DiskIndex;
+ if(NANDParameterInitialized==KAL_TRUE){
+ return;
+ }
+ NANDParameterInitialized = KAL_TRUE;
+
+ for (DiskIndex=0; DiskIndex<NAND_DISK_NUM; DiskIndex++)
+ {
+ #if (defined(__UBL__)&&defined(__NAND_SUPPORT_RAW_DISK__))
+ if(DiskIndex==RAW_DISK_INDEX){
+ NANDFlashDriveData[0].NAND_FDMData.DiskIndex = RAW_DISK_INDEX;
+ }
+ #else
+ NANDFlashDriveData[DiskIndex].NAND_FDMData.DiskIndex = DiskIndex;
+ #endif
+ switch (DiskIndex)
+ {
+ case 0:
+ NFB_BASE_ADDRESS[0] = NAND_BOOTING_NAND_FS_DISK0_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[0] = NAND_BOOTING_NAND_FS_DISK0_SIZE;
+ FS_DISK_REPLACE_RATIO[0] = NAND_BOOTING_NAND_FS_DISK0_REPLACE_RATIO;
+ break;
+ #if (NAND_DISK_NUM > 1)
+ case 1:
+ NFB_BASE_ADDRESS[1] = NAND_BOOTING_NAND_FS_DISK1_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[1] = NAND_BOOTING_NAND_FS_DISK1_SIZE;
+ FS_DISK_REPLACE_RATIO[1] = NAND_BOOTING_NAND_FS_DISK1_REPLACE_RATIO;
+ break;
+ #endif /* NAND_DISK_NUM > 1 */
+ #if (NAND_DISK_NUM > 2)
+ case 2:
+ NFB_BASE_ADDRESS[2] = NAND_BOOTING_NAND_FS_DISK2_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[2] = NAND_BOOTING_NAND_FS_DISK2_SIZE;
+ FS_DISK_REPLACE_RATIO[2] = NAND_BOOTING_NAND_FS_DISK2_REPLACE_RATIO;
+ break;
+ #endif /* NAND_DISK_NUM > 2 */
+ #if (NAND_DISK_NUM > 3)
+ case 3:
+ NFB_BASE_ADDRESS[3] = NAND_BOOTING_NAND_FS_DISK3_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[3] = NAND_BOOTING_NAND_FS_DISK3_SIZE;
+ FS_DISK_REPLACE_RATIO[3] = NAND_BOOTING_NAND_FS_DISK3_REPLACE_RATIO;
+ break;
+ #endif /* NAND_DISK_NUM > 3 */
+ #if (NAND_DISK_NUM > 4)
+ case 4:
+ NFB_BASE_ADDRESS[4] = NAND_BOOTING_NAND_FS_DISK4_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[4] = NAND_BOOTING_NAND_FS_DISK4_SIZE;
+ FS_DISK_REPLACE_RATIO[4] = NAND_BOOTING_NAND_FS_DISK4_REPLACE_RATIO;
+ break;
+ #endif /* NAND_DISK_NUM > 4 */
+ #if (NAND_DISK_NUM > 5)
+ case 5:
+ NFB_BASE_ADDRESS[5] = NAND_BOOTING_NAND_FS_DISK5_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[5] = NAND_BOOTING_NAND_FS_DISK5_SIZE;
+ FS_DISK_REPLACE_RATIO[5] = NAND_BOOTING_NAND_FS_DISK5_REPLACE_RATIO;
+ break;
+ #endif /* NAND_DISK_NUM > 5 */
+ #if (NAND_DISK_NUM > 6)
+ case 6:
+ NFB_BASE_ADDRESS[6] = NAND_BOOTING_NAND_FS_DISK6_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[6] = NAND_BOOTING_NAND_FS_DISK6_SIZE;
+ FS_DISK_REPLACE_RATIO[6] = NAND_BOOTING_NAND_FS_DISK6_REPLACE_RATIO;
+ break;
+ #endif /* NAND_DISK_NUM > 6 */
+ #if (NAND_DISK_NUM > 7)
+ case 7:
+ NFB_BASE_ADDRESS[7] = NAND_BOOTING_NAND_FS_DISK7_BASE_ADDRESS;
+ NFB_ALLOCATED_FAT_SPACE[7] = NAND_BOOTING_NAND_FS_DISK7_SIZE;
+ FS_DISK_REPLACE_RATIO[7] = NAND_BOOTING_NAND_FS_DISK7_REPLACE_RATIO;
+ break;
+ #endif /* NAND_DISK_NUM > 7 */
+ }
+ }
+ }
+ #if ( defined(__NANDFDM_TOTAL_BBM__))
+ NFB_REPLACE_BASE_ADDRESS = NAND_BOOTING_NAND_FS_REPLACE_BASE_ADDRESS;
+ NFB_REPLACE_SPACE = NAND_BOOTING_NAND_FS_REPLACE_SIZE;
+ NAND_BRMT_Info.ParameterReady = KAL_FALSE;
+ NAND_BRMT_Info.NoReplace = KAL_FALSE;
+ NAND_BRMT_Info.BRMT_Addr = 0;
+ NAND_BRMT_Info.CurSectorInRAM = 0xff;
+ #endif
+
+ #endif // ( defined(__NANDFDM_MULTI_INSTANCE__) && defined(__NAND_FDM_50__) )
+}
+#endif /* (!__UBL__ && !__FUE__)|| (UBL&&RAW) */
+
+extern kal_int32 EMI_QueryIsRemapped(void);
+
+void Custom_NOR_Init(void)
+{
+#if (!(defined(__FS_SYSDRV_ON_NAND__) || defined( _NAND_FLASH_BOOTING_) || defined(__EMMC_BOOTING__))) && !defined(__RAMDISK__)
+ #if defined(__SERIAL_FLASH__)
+ CMEM_Init_FullDriver();
+ #else // (defined(__COMBO_MEMORY_SUPPORT__) || defined(__SERIAL_FLASH__))
+ EntireDiskMtdData.Signature = ~((kal_uint32)EntireDiskRegionInfo);
+ #if defined(__UBL__)
+ if(EMI_QueryIsRemapped())
+ EntireDiskMtdData.BaseAddr = (BYTE *)0x10000000;
+ else
+ EntireDiskMtdData.BaseAddr = (BYTE *)0;
+ #else
+ EntireDiskMtdData.BaseAddr = (BYTE *)INT_RetrieveFlashBaseAddr();
+ #endif
+ EntireDiskMtdData.RegionInfo = (FlashRegionInfo *)EntireDiskRegionInfo;
+ EntireDiskDriveData.DiskSize = NOR_FLASH_SIZE;
+ EntireDiskDriveData.MTDDriver = &NORFlashMtd;
+ EntireDiskDriveData.MTDData = &EntireDiskMtdData;
+ EntireDiskDriveData.is_mount = KAL_FALSE;
+ #endif // (defined(__COMBO_MEMORY_SUPPORT__) || defined(__SERIAL_FLASH__))
+#endif /* !__FS_SYSDRV_ON_NAND__ && !_NAND_FLASH_BOOTING_ */
+}
+
+#if (defined(__FUE__) || defined(__EXT_BOOTLOADER__)) && defined(__FOTA_DM__)
+#if defined(__SERIAL_FLASH__)
+
+void Initialize_NOR_Info(void)
+{
+ CMEM_Init_FUE();
+}
+
+
+#else //!__COMBO_MEMORY_SUPPORT__ && !__SERIAL_FLASH__
+
+#include "custom_fota.h"
+
+NOR_Flash_MTD_Data fue_nor_mtdflash;
+
+extern NOR_MTD_Driver NORFlashMtd;
+
+NOR_FLASH_DRV_Data FlashDriveData;
+
+void Initialize_NOR_Info(void)
+{
+#if defined(_NOR_FLASH_BOOTING_)
+ kal_uint32 blk_addr = 0;
+
+ /* Initialize MTD data table */
+ fue_nor_mtdflash.Signature = ~((kal_uint32)NORRegionInfo);
+
+ #if !defined(__UBL__)
+ FlashDriveData.MTDDriver = &NORFlashMtd;
+ #endif /* __UBL__ */
+ FlashDriveData.MTDData = &fue_nor_mtdflash;
+
+#ifdef __MTK_TARGET__
+ #if defined(MT6238) || defined(MT6239) || defined(MT6235B)
+ fue_nor_mtdflash.BaseAddr = (BYTE *)(custom_get_NORFLASH_Base()|0x08000000);
+ #elif defined(MT6228) || defined(MT6229) || defined(MT6230) || defined(MT6225) || defined(MT6268T)
+ fue_nor_mtdflash.BaseAddr = (BYTE *)(custom_get_NORFLASH_Base()|0x04000000);
+ #else
+ fue_nor_mtdflash.BaseAddr = (BYTE *)custom_get_NORFLASH_Base();
+ #endif
+#endif /* __MTK_TARGET__ */
+
+ fue_nor_mtdflash.RegionInfo = (FlashRegionInfo *)NORRegionInfo;
+
+#ifdef __FOTA_DM__
+ blk_addr = SSF_GetUAImageLoadAddress()|custom_get_NORFLASH_Base();
+ #if defined(MT6238) || defined(MT6239) || defined(MT6235B)
+ blk_addr |= 0x08000000;
+ #elif defined(MT6228) || defined(MT6229) || defined(MT6230) || defined(MT6225) || defined(MT6268T)
+ blk_addr |= 0x04000000;
+ #else
+ blk_addr |= 0x0;
+ #endif
+ blk_addr -= (kal_uint32)fue_nor_mtdflash.BaseAddr;
+ FlashDriveData.FlashInfo.baseUnlockBlock = BlockIndex(&fue_nor_mtdflash, blk_addr);
+
+ #if (defined(__UP_PKG_ON_NAND__) && defined(NAND_SUPPORT))
+ blk_addr = (custom_get_NORFLASH_ROMSpace() - 1) | custom_get_NORFLASH_Base();
+ #else
+ blk_addr = FOTA_GetPackageStorageBase()+FOTA_GetPackageStorageSize();
+ #endif /* __UP_PKG_ON_NAND__ && NAND_SUPPORT */
+
+ #if defined(MT6238) || defined(MT6239) || defined(MT6235B)
+ blk_addr |= 0x08000000;
+ #elif defined(MT6228) || defined(MT6229) || defined(MT6230) || defined(MT6225) || defined(MT6268T)
+ blk_addr |= 0x04000000;
+ #else
+ blk_addr |= 0x0;
+ #endif
+
+ blk_addr -= (kal_uint32)fue_nor_mtdflash.BaseAddr;
+ FlashDriveData.FlashInfo.endUnlockBlock = BlockIndex(&fue_nor_mtdflash, blk_addr);
+#endif
+
+#endif // _NOR_FLASH_BOOTING_
+}
+
+#endif //__COMBO_MEMORY_SUPPORT__ || __SERIAL_FLASH__
+#endif /* (__FUE__ || __EXT_BOOTLOADER__) && __FOTA_DM__ */
+
+
+
+
+
+/*************************************************************************
+* FUNCTION
+* custom_get_FLASH_Size()
+*
+* DESCRIPTION
+* Query the of space configured for ROM
+*
+* PARAMETERS
+*
+* RETURNS
+* BASE ADDRESS
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+kal_uint32 custom_get_FLASH_Size(void)
+{
+#if defined(__RAMDISK__)
+ return RAM_FS_SIZE_INT;
+#elif defined(__EMMC_BOOTING__)
+ return 0;
+#elif defined(_NAND_FLASH_BOOTING_)
+ return NAND_TOTAL_SIZE << 20;
+#else
+ return NOR_FLASH_SIZE;
+#endif
+}
+
+#if defined(__RAMDISK__)
+#include "ramdisk_gprot.h" // for RAM Disk FDM APIs
+kal_uint32 RAMDiskDriveData;
+FS_Driver RAMDiskDriver =
+{
+ ramdisk_fdm_mount_device,
+ ramdisk_fdm_shutdown,
+ ramdisk_fdm_read_sectors,
+ ramdisk_fdm_write_sectors,
+ ramdisk_fdm_media_changed,
+ NULL,
+ ramdisk_fdm_get_disk_geometry,
+ NULL,
+ NULL,
+ ramdisk_fdm_recoverable_write_sectors,
+ ramdisk_fdm_resume_sector_states,
+ NULL,
+ NULL, /*flush data*/
+ NULL, /*message ack*/
+ NULL, /*copy sector*/
+ NULL,
+ NULL
+};
+#endif // __RAMDISK__
+#else // __SMART_PHONE_PLATFORM__ && __SMART_PHONE_MODEM__
+void Initialize_FDD_tables(void)
+{
+ return;
+}
+
+kal_uint32 custom_get_fat_addr()
+{
+ return 0;
+}
+
+kal_uint32 custom_get_fat_len()
+{
+ return 0;
+}
+
+
+/*************************************************************************
+* FUNCTION
+* custom_get_NORFLASH_Base()
+*
+* DESCRIPTION
+* Query the of space configured for NORFLASH ROM
+*
+* PARAMETERS
+*
+* RETURNS
+* BASE ADDRESS
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+kal_uint32 custom_get_NORFLASH_Base(void)
+{
+#if defined(_NAND_FLASH_BOOTING_) || defined(__EMMC_BOOTING__)
+ return 0;
+#else
+ return NOR_FLASH_BASE_ADDR;
+#endif
+}
+
+
+#endif //!__SMART_PHONE_PLATFORM__ || !__SMART_PHONE_MODEM__
+
+
+
+/*************************************************************************
+* FUNCTION
+* INT_QueryIsROMSpace()
+*
+* DESCRIPTION
+* Query the address in Flash address space or not
+*
+* PARAMETERS
+* address to check
+*
+* RETURNS
+* KAL_TRUE if address is in Flash address space
+* KAL_FALSE if not
+*
+* Only apply to ADMUX MT6255 for DMA to check whether the address to be copied in flash or not.
+* To avoid DMA accessing Single bank flash when it is busy.
+*
+*************************************************************************/
+
+kal_bool INT_QueryIsROMSpace(kal_uint32 addr)
+{
+ return KAL_FALSE;
+}
+
diff --git a/mcu/custom/driver/common/custom_flash_norfdm5.c b/mcu/custom/driver/common/custom_flash_norfdm5.c
new file mode 100644
index 0000000..1abc9e0
--- /dev/null
+++ b/mcu/custom/driver/common/custom_flash_norfdm5.c
@@ -0,0 +1,297 @@
+/*****************************************************************************
+* 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) 2006
+*
+* 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:
+ * ---------
+ * custom_flash_norfdm5.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * defines prototypes and data structure which will be used in NOR FDM 5.0
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ * Memory Device database last modified on 2011/7/8
+ *
+ *============================================================================
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+#include "fat_fs.h"
+#include "DrvFlash.h"
+#include "flash_opt.h"
+#include "custom_MemoryDevice.h"
+
+#include "custom_nvram_int_config.h" /* To get NVRAM_CUSTOM_CFG_MAX_RECORD_SECTOR_NUM for MSTABLE_ENTRY_NUM */
+
+
+#ifdef __NOR_FDM5__
+#include "custom_flash_norfdm5.h"
+
+#define STORAGE_NO_PARTITION 0xFFFFFFFF
+
+
+/*-------------------------------------------------------------------
+ * MS table size
+ *
+ * MS table size should be synchronized with user's requirement. The only one user is NVRAM.
+ *
+ * NVRAM_CUSTOM_CFG_MAX_RECORD_SECTOR_NUM defines the maximum record size in NVRAM
+ * (in custom_nvram_config.h). NVRAM should call NOR_ResumeSectorState (by FS_Commit)
+ * after it writes maximum NVRAM_CUSTOM_CFG_MAX_RECORD_SECTOR_NUM sectors with protection
+ * mode to ensure the integrity of a record.
+ *
+ * MSTABLE_ENTRY_NUM number is based on the worst senario: All FAT entries of clusters
+ * of logical sectors are located in different physical sectors. In other word, we need
+ * to write additional N sectors to update FAT after we write N data sectors. The other
+ * 1 sector is for directory entry update.
+ *
+ * TODO: Use auto-gen to compute most suitable MS table size. Because the number of
+ * sectors for FAT may be smaller than NVRAM_CUSTOM_CFG_MAX_RECORD_SECTOR_NUM. For example,
+ * 64KB disk only needs 1 sector to store FAT.
+ *---------------------------------------------------------- W08.50 --*/
+
+#define MS_TABLE_ENTRY_NUM (NVRAM_CUSTOM_CFG_MAX_RECORD_SECTOR_NUM * 2 + 1)
+
+
+/*****************************************
+ * Don't modify any code above this line *
+ *****************************************/
+
+/*******************************************************************************
+ Follow the 4 steps below to configure flash memory
+
+ Step 1. Fill the flash bank (partition) information table,
+ flash device features flexible, multi-bank read-while-program and
+ read-while-erase capability, enabling background programming or erasing in
+ one bank simultaneously with code execution or data reads in another bank.
+ Each element in the table is the format as below:
+ {bank size, bank number},
+
+ Step 2. Modify the value of LSMT, you can see MemoryDevice_FlashDisk_FAQ for
+ detail information
+
+ Step 2. Define the toal sectors (512bytes) of system drive
+ the remainder is the size of public drive
+ If there is no partiton (just one drive, system drive)
+ set this value to STORAGE_NO_PARTITION (0xFFFFFFFF)
+
+
+ Note : Code region and FAT region can not share the same bank (partition)
+*******************************************************************************/
+
+
+/***********
+ * Step 1. *
+ ***********/
+static NORBankInfo BankInfo[] =
+{
+ NOR_FDM5_BANK_INFO_LAYOUT
+ EndBankInfo /* Don't modify this line */
+};
+
+
+/*****************************************
+ * Don't modify any code below this line *
+ *****************************************/
+
+#define NOR_TOTAL_BLOCKS (NOR_ALLOCATED_FAT_SPACE/NOR_BLOCK_SIZE)
+#define NOR_TOTAL_TABLE_BLOCKS 32
+NOR_FTL_DATA FlashDriveData;
+static NORLayoutInfo LayoutInfo;
+
+static kal_uint32 LogPageID[MS_TABLE_ENTRY_NUM];
+static WORD NewEntryID[MS_TABLE_ENTRY_NUM];
+static WORD OldEntryID[MS_TABLE_ENTRY_NUM];
+
+#ifndef __INTEL_SIBLEY__
+
+#define NOR_PAGE_SIZE 512
+
+FS_Driver NORFlashDriver = {
+ nNOR_MountDevice,
+ nShutDown,
+ nNOR_ReadSectors,
+ nNOR_WriteSectors,
+ NOR_MediaChanged,
+ nNOR_DiscardSectors,
+ nGetDiskGeometry,
+ nNOR_LowLevelFormat,
+ nNOR_NonBlockWriteSectors,
+ nNOR_RecoverableWriteSectors,
+ nNOR_ResumeSectorStates,
+ NULL, /*high level format*/
+ NULL, /*flush data*/
+ NULL /*message ack*/
+#ifdef __SECURITY_OTP__
+ ,
+ NULL, /*copy sector*/
+ OTPAccess,
+ OTPQueryLength
+#endif
+};
+
+#else
+
+#define NOR_PAGE_SIZE 1024
+
+FS_Driver NORFlashDriver = {
+ nSIB_MountDevice,
+ nShutDown,
+ nSIB_ReadSectors,
+ nSIB_WriteSectors,
+ NOR_MediaChanged,
+ nSIB_DiscardSectors,
+ nGetDiskGeometry,
+ nSIB_LowLevelFormat,
+ nSIB_NonBlockWriteSectors,
+ nSIB_RecoverableWriteSectors,
+ nSIB_ResumeSectorStates,
+ NULL, /*high level format*/
+ NULL, /*flush data*/
+ NULL /*message ack*/
+#ifdef __SECURITY_OTP__
+ ,
+ NULL, /*copy sector*/
+ OTPAccess,
+ OTPQueryLength
+#endif
+};
+#endif /*__INTEL_SIBLEY__*/
+
+
+static kal_uint16 NOR_LBM[NOR_TOTAL_BLOCKS];
+static LSMGEntry NOR_LSMG[NOR_TOTAL_LSMT]; // need to check in the program
+static kal_uint16 NOR_AvailInBlk[NOR_TOTAL_BLOCKS];
+static kal_uint16 NOR_InvaildInBlk[NOR_TOTAL_BLOCKS];
+static kal_uint32 NOR_InvalidEntryInTblBlk[NOR_TOTAL_TABLE_BLOCKS];
+static kal_uint8 FDMBuffer[NOR_PAGE_SIZE];
+static kal_uint8 CopyBuffer[NOR_PAGE_SIZE];
+static NOR_MTD_DATA mtdflash;
+kal_eventgrpid nor_egid = NULL;
+
+extern NOR_MTD_Driver NORFlashMtd;
+extern kal_uint32 INT_RetrieveFlashBaseAddr(void);
+
+void Initialize_FDD_tables(void)
+{
+#if ( !defined(__FS_SYSDRV_ON_NAND__) && !defined( _NAND_FLASH_BOOTING_) )
+ /* Initialize MTD data table */
+ mtdflash.Signature = ~((kal_uint32)&LayoutInfo);
+
+#ifdef __MTK_TARGET__
+ mtdflash.BaseAddr = (BYTE *)(INT_RetrieveFlashBaseAddr() + NOR_FLASH_BASE_ADDRESS);
+#endif
+ LayoutInfo.BankInfo = BankInfo;
+ LayoutInfo.TotalBlks = NOR_TOTAL_BLOCKS;
+ LayoutInfo.BlkSize = NOR_BLOCK_SIZE;
+ LayoutInfo.PageSize = NOR_PAGE_SIZE;
+ LayoutInfo.TotalLSMT= NOR_TOTAL_LSMT;
+ mtdflash.LayoutInfo = (NORLayoutInfo *)&LayoutInfo;
+
+ /* Initialize FDD data table */
+ FlashDriveData.MTDDriver = &NORFlashMtd;
+ FlashDriveData.MTDData = &mtdflash;
+ FlashDriveData.LBM = NOR_LBM;
+ FlashDriveData.LSMG = NOR_LSMG;
+ FlashDriveData.AvailInBlk = NOR_AvailInBlk;
+ FlashDriveData.InvalidInBlk = NOR_InvaildInBlk;
+ FlashDriveData.InvalidEntryInTblBlk = NOR_InvalidEntryInTblBlk;
+
+ FlashDriveData.MSTABLE_ENTRY_NUM = MS_TABLE_ENTRY_NUM;
+ FlashDriveData.MSTable.LogPageID = LogPageID;
+ FlashDriveData.MSTable.NewEntryID = NewEntryID;
+ FlashDriveData.MSTable.OldEntryID = OldEntryID;
+
+#if (NOR_SYSDRV_SECTORS==0)
+ #if (NOR_PARTITION_SECTORS==0)
+ FlashDriveData.SecondPartitionSectors = 0xffffffff;
+ #else // (NOR_PARTITION_SECTORS==0)
+ FlashDriveData.SecondPartitionSectors = 0xfe000000 | NOR_PARTITION_SECTORS;
+ #endif // (NOR_PARTITION_SECTORS==0)
+#else // (NOR_SYSDRV_SECTORS==0)
+ FlashDriveData.SecondPartitionSectors = NOR_SYSDRV_SECTORS;
+#endif // (NOR_SYSDRV_SECTORS==0)
+
+ FlashDriveData.SetTblBlks = NOR_TOTAL_TABLE_BLOCKS;
+ FlashDriveData.Buffer = FDMBuffer;
+ FlashDriveData.CopyBuffer = CopyBuffer;
+#ifndef __INTEL_SIBLEY__
+ FlashDriveData.ReclaimBlock = nNOR_ReclaimBlock;
+#else
+ FlashDriveData.ReclaimBlock = nSIB_ReclaimBlock;
+#endif /* __INTEL_SIBLEY__ */
+#endif /* !__FS_SYSDRV_ON_NAND__ && !_NAND_FLASH_BOOTING_ */
+}
+
+#endif /*__NOR_FDM5__*/
diff --git a/mcu/custom/driver/common/custom_ostd_utility.c b/mcu/custom/driver/common/custom_ostd_utility.c
new file mode 100644
index 0000000..73a38dc
--- /dev/null
+++ b/mcu/custom/driver/common/custom_ostd_utility.c
@@ -0,0 +1,136 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * custom_ostd_utility.h
+ *
+ * Project:
+ * --------
+ * MT6885
+ *
+ * Description:
+ * ------------
+ * This file contains ostd customized configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *******************************************************************************/
+#include "kal_general_types.h"
+#include "ostd_public.h"
+#ifdef __NVRAM_LID_CACHE__
+#include "nvram_cache_interface.h"
+#endif
+#include "string.h"
+
+/*
+void example_callback(kal_uint32 ap_status)
+{
+ //use ap_status to determine your code flow;
+ return;
+}
+*/
+#ifdef __NVRAM_LID_CACHE__
+/*****************************************************************************
+ * FUNCTION
+ * send_event_to_nvcache_callback
+ * DESCRIPTION
+ * ostd send event to NVRAM cache for update AP status
+ * PARAMETERS
+ * ap_status [IN]
+ * RETURNS
+ * void
+ *****************************************************************************/
+void send_event_to_nvcache_callback(kal_uint32 ap_status)
+{
+ send_event_to_nvram_cache();
+}
+#endif
+ostd_urc_src_module_info_struct src_module_info[] =
+{
+ /*
+ {"Name", "module_id expecting receive ilm"(if no need to receive, fill MOD_NIL), "callback funtion"(if no need, fill NULL), "pending data flag"(default = KAL_FALSE)}
+ example:
+ {"OSTD", MOD_NIL, example_callback, KAL_FALE}
+ */
+ {"L4C", MOD_L4C, NULL, KAL_FALSE},
+ {"L4", MOD_L4BPWR, NULL, KAL_FALSE},
+ #ifdef __NVRAM_LID_CACHE__
+ {"NVRAM", MOD_NIL, send_event_to_nvcache_callback, KAL_FALSE},
+ #endif
+};
+
+ostd_urc_src_module_info_struct *custom_get_urc_src_mod()
+{
+ return src_module_info;
+}
+
+kal_uint8 custom_get_num_of_urc_src_mod()
+{
+ return sizeof(src_module_info)/sizeof(src_module_info[0]);
+}
+
+void set_pending_data_flag(char* module_name, kal_bool flag)
+{
+ kal_uint8 i, total_mod;
+ total_mod = sizeof(src_module_info)/sizeof(src_module_info[0]);
+ for(i=0; i<total_mod; i++)
+ {
+ if(strcmp(src_module_info[i].module_name, module_name) == 0)
+ {
+ src_module_info[i].pending_urc = flag;
+ break;
+ }
+ }
+}
+
+kal_bool unmask_ap2md_apmcu_active_wkup_event()
+{
+ kal_uint8 i, total_mod;
+ total_mod = sizeof(src_module_info)/sizeof(src_module_info[0]);
+ for(i=0; i<total_mod; i++)
+ {
+ if(src_module_info[i].pending_urc == KAL_TRUE)
+ {
+ return KAL_TRUE;
+ }
+ }
+ return KAL_FALSE;
+}
+
diff --git a/mcu/custom/driver/common/flash_opt.h b/mcu/custom/driver/common/flash_opt.h
new file mode 100644
index 0000000..f9253b9
--- /dev/null
+++ b/mcu/custom/driver/common/flash_opt.h
@@ -0,0 +1,603 @@
+/*****************************************************************************
+* 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) 2006
+*
+* 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:
+ * ---------
+ * flash_opt.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * NOR flash related options
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ * Memory Device database last modified on 2011/7/8
+ *
+ *============================================================================
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#include "custom_MemoryDevice.h"
+#include "custom_FeatureConfig.h"
+#include "flash_opt_gen.h"
+#if defined(__SECURE_DATA_STORAGE__)
+#include "custom_secure_config.h"
+#endif
+
+/*
+ *******************************************************************************
+ PART 1:
+ FLASH CONFIG Options Definition here
+ *******************************************************************************
+*/
+
+/*
+ * RAM Disk is enabled and replaces any other flash-type (e.g., NOR or NAND) disk on smartphone moden-only load
+ * NOTE. __SMART_PHONE_PLATFORM__ should be defined before (e.g., defined in flash_opt_gen.h)
+ */
+#if !(defined(__FUE__) || defined(__UBL__) || defined(__EXT_BOOTLOADER__)) // RAM Disk module is not necessary in Bootloader and FUE environment
+ #if defined(__FS_RAMDISK__)
+ #if !defined(__SMART_PHONE_PLATFORM__)
+ #error "RAM Disk is allowed in SP modem-only project only! Please make sure __SMART_PHONE_PLATFORM__ is defined before!"
+ #endif
+ #define __RAMDISK__
+ #endif
+#endif
+
+/*
+ *******************************************************************************
+ PART 2:
+ FLASH FDM FEATURE CONFIG PARAMETERS translated from Manual custom_Memorydevice.h
+ *******************************************************************************
+*/
+ #ifndef NOR_PARAMETER_SYSTEM_DRIVE_RESERVED_BLOCK
+ #define NOR_SYSTEM_DRIVE_RESERVED_BLOCK (3)
+ #else
+ #define NOR_SYSTEM_DRIVE_RESERVED_BLOCK (NOR_PARAMETER_SYSTEM_DRIVE_RESERVED_BLOCK)
+ #endif
+
+
+
+/*
+ *******************************************************************************
+ PART 3:
+ FLASH GEOMETRY translated from MEMORY DEVICE DATABASE
+ *******************************************************************************
+*/
+
+
+/*
+ *******************************************************************************
+ PART 4:
+ FLASH FAT CONFIG translated from Manual custom_Memorydevice.h
+ *******************************************************************************
+*/
+#if defined(__NANDFDM_MULTI_INSTANCE__)
+#define NAND_DISK_NUM (NAND_BOOTING_NAND_FS_DISK_NUMBER)
+#else // defined(__NANDFDM_MULTI_INSTANCE__)
+#define NAND_DISK_NUM (0)
+#endif // defined(__NANDFDM_MULTI_INSTANCE__)
+#if defined(__RAMDISK__)
+ #include "ramdisk_gprot.h"
+ #ifndef RAM_FS_SIZE
+ #error "Error! Please assign RAM_FS_SIZE in ramdisk_gprot.h for RAM Disk!"
+ #else
+ #define RAM_FS_SIZE_INT (RAM_FS_SIZE)
+ #endif
+ #ifdef RAM_FS_FIRST_DRIVE_SECTORS
+ #define RAM_FS_FIRST_DRIVE_SECTORS_INT (RAM_FS_FIRST_DRIVE_SECTORS)
+ #else
+ #define RAM_FS_FIRST_DRIVE_SECTORS_INT (0)
+ #endif
+#endif // defined(__NANDFDM_MULTI_INSTANCE__)
+
+#if defined(__EMMC_BOOTING__)
+
+ #ifndef EMMC_BOOTING_GP1_PARTITION_SIZE
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign EMMC_BOOTING_GP1_PARTITION_SIZE in custom_Memorydevice.h for EMMC Booting!"
+ #else
+ #define EMMC_CODE_PARTITION_SIZE (EMMC_BOOTING_GP1_PARTITION_SIZE)
+ #endif /* !EMMC_BOOTING_GP1_PARTITION_SIZE */
+
+ #ifndef EMMC_BOOTING_UP_FS_BASE_ADDRESS
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign EMMC_BOOTING_UP_FS_BASE_ADDRESS in custom_Memorydevice.h for EMMC Booting!"
+ #else
+ #define EMMC_FS_BASE_ADDRESS (EMMC_BOOTING_UP_FS_BASE_ADDRESS)
+ #endif /* !EMMC_BOOTING_UP_FS_BASE_ADDRESS */
+
+ #ifndef EMMC_BOOTING_UP_FS_SIZE
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign EMMC_BOOTING_UP_FS_SIZE in custom_Memorydevice.h for EMMC Booting!"
+ #else
+ #define EMMC_FS_SIZE (EMMC_BOOTING_UP_FS_SIZE)
+ #endif /* !EMMC_BOOTING_UP_FS_SIZE */
+
+ #ifndef EMMC_BOOTING_UP_FS_SYSTEM_DRIVE_SIZE
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign EMMC_BOOTING_UP_FS_SYSTEM_DRIVE_SIZE in custom_Memorydevice.h for EMMC Booting!"
+ #else
+ #define EMMC_FS_SYSTEM_DRIVE_SIZE (EMMC_BOOTING_UP_FS_SYSTEM_DRIVE_SIZE)
+ #endif /* !EMMC_BOOTING_UP_FS_SYSTEM_DRIVE_SIZE */
+
+#elif defined(_NAND_FLASH_BOOTING_)
+
+
+ /*-----------------------------------------------------------------------------------------
+ * FS base address is automatically adjusted with update package storage size as
+ * NAND_BOOTING_NAND_FS_BASE_ADDRESS + FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NAND_BOOTING_NAND_FS_BASE_ADDRESS
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NAND_BOOTING_NAND_FS_BASE_ADDRESS in custom_Memorydevice.h for NAND-Flash Booting!"
+ #else
+ #define NAND_FLASH_BASE_ADDRESS (NAND_BOOTING_NAND_FS_BASE_ADDRESS + FOTA_DM_FS_OFFSET)
+ #endif /* !NAND_BOOTING_FLASH_BASE_ADDRESS */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS size is automatically decreased by update package storage size as
+ * NAND_BOOTING_NAND_FS_SIZE - FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NAND_BOOTING_NAND_FS_SIZE
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NAND_BOOTING_NAND_FS_SIZE in custom_Memorydevice.h for NAND-Flash Booting!"
+ #else
+ #if defined(__SECURE_DATA_STORAGE__)
+ #define NAND_ALLOCATED_FAT_SPACE (NAND_BOOTING_NAND_FS_SIZE - FOTA_DM_FS_OFFSET - SDS_TOTAL_SIZE)
+ #else
+ #define NAND_ALLOCATED_FAT_SPACE (NAND_BOOTING_NAND_FS_SIZE - FOTA_DM_FS_OFFSET)
+ #endif
+ #endif /* !NAND_BOOTING_ALLOCATED_FAT_SPACE */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS first drive size is automatically decreased by update package storage size as
+ * NAND_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS - FOTA_PACKAGE_STORAGE_SIZE / 512 (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NAND_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NAND_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS in custom_Memorydevice.h for NAND-Flash Booting!"
+ #else
+ #if defined(__NANDFDM_MULTI_INSTANCE__)
+ #define NAND_PARTITION_SECTORS (0)
+ #else /* __NANDFDM_MULTI_INSTANCE__ */
+ #define NAND_PARTITION_SECTORS (NAND_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS - FOTA_DM_FS_SECTOR_OFFSET)
+ #endif /* __NANDFDM_MULTI_INSTANCE__ */
+ #endif /* !NAND_FAT_PARTITION_SECTORS */
+
+
+#elif defined(__FS_SYSDRV_ON_NAND__ )
+
+ #define NOR_FLASH_BASE_ADDRESS (NOR_FLASH_BASE_ADDRESS_DEFAULT)
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_ALLOCATED_FAT_SPACE_DEFAULT)
+
+ /*-----------------------------------------------------------------------------------------
+ * FS base address is automatically adjusted with update package storage size as
+ * NOR_BOOTING_NAND_FS_BASE_ADDRESS + FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NAND_FS_BASE_ADDRESS
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NOR_BOOTING_NAND_FS_BASE_ADDRESS in custom_Memorydevice.h for System Drive on NAND!"
+ #else
+ #define NAND_FLASH_BASE_ADDRESS (NOR_BOOTING_NAND_FS_BASE_ADDRESS + FOTA_DM_FS_OFFSET)
+ #endif /* !NAND_BOOTING_FLASH_BASE_ADDRESS */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS size is automatically decreased by update package storage size as
+ * NOR_BOOTING_NAND_FS_SIZE - FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NAND_FS_SIZE
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NOR_BOOTING_NAND_FS_SIZE in custom_Memorydevice.h for System Drive on NAND!"
+ #else
+ #define NAND_ALLOCATED_FAT_SPACE (NOR_BOOTING_NAND_FS_SIZE - FOTA_DM_FS_OFFSET)
+ #endif /* !NAND_BOOTING_ALLOCATED_FAT_SPACE */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS first drive size is automatically decreased by update package storage size as
+ * NOR_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS - FOTA_PACKAGE_STORAGE_SIZE / 512 (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NOR_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS in custom_Memorydevice.h for System Drive on NAND!"
+ #else
+ #if defined(__NANDFDM_MULTI_INSTANCE__)
+ #define NAND_PARTITION_SECTORS (0)
+ #else /* __NANDFDM_MULTI_INSTANCE__ */
+ #define NAND_PARTITION_SECTORS (NOR_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS - FOTA_DM_FS_SECTOR_OFFSET)
+ #endif /* __NANDFDM_MULTI_INSTANCE__ */
+ #endif /* !NAND_FAT_PARTITION_SECTORS */
+
+#else /* Generic NOR-XIP Case */
+
+ #if defined(__UP_PKG_ON_NAND__) && defined(NAND_SUPPORT)
+
+ #ifndef NOR_BOOTING_NOR_FS_BASE_ADDRESS
+ #define NOR_FLASH_BASE_ADDRESS (NOR_FLASH_BASE_ADDRESS_DEFAULT)
+ #else
+ #define NOR_FLASH_BASE_ADDRESS (NOR_BOOTING_NOR_FS_BASE_ADDRESS)
+ #endif /* !NOR_FLASH_BASE_ADDRESS */
+
+ #ifndef NOR_BOOTING_NOR_FS_SIZE
+ #if defined(__SECURE_DATA_STORAGE__)
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_ALLOCATED_FAT_SPACE_DEFAULT - SDS_TOTAL_SIZE)
+ #else
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_ALLOCATED_FAT_SPACE_DEFAULT)
+ #endif
+ #else
+ #if defined(__SECURE_DATA_STORAGE__)
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_BOOTING_NOR_FS_SIZE - SDS_TOTAL_SIZE)
+ #else
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_BOOTING_NOR_FS_SIZE)
+ #endif
+ #endif /* !NOR_ALLOCATED_FAT_SPACE */
+
+ #ifndef NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS
+ #define NOR_PARTITION_SECTORS (0)
+ #else
+ #define NOR_PARTITION_SECTORS (NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS)
+ #endif /* !NOR_FAT_PARTITION_SECTORS */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS base address is automatically adjusted with update package storage size as
+ * NOR_BOOTING_NAND_FS_BASE_ADDRESS + FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NAND_FS_BASE_ADDRESS
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NOR_BOOTING_NAND_FS_BASE_ADDRESS in custom_Memorydevice.h for FOTA Update Package on NAND!"
+ #else
+ #define NAND_FLASH_BASE_ADDRESS (NOR_BOOTING_NAND_FS_BASE_ADDRESS + FOTA_DM_FS_OFFSET)
+ #endif /* !NAND_BOOTING_FLASH_BASE_ADDRESS */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS size is automatically decreased by update package storage size as
+ * NOR_BOOTING_NAND_FS_SIZE - FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NAND_FS_SIZE
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NOR_BOOTING_NAND_FS_SIZE in custom_Memorydevice.h for FOTA Update Package on NAND!"
+ #else
+ #define NAND_ALLOCATED_FAT_SPACE (NOR_BOOTING_NAND_FS_SIZE - FOTA_DM_FS_OFFSET)
+ #endif /* !NAND_BOOTING_ALLOCATED_FAT_SPACE */
+
+ /* All NAND flash space is treated as one public drive */
+ #define NAND_PARTITION_SECTORS (0)
+
+ #else /* !__UP_PKG_ON_NAND__ || !NAND_SUPPORT */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS base address is automatically adjusted with update package storage size as
+ * NOR_BOOTING_NOR_FS_BASE_ADDRESS + FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NOR_FS_BASE_ADDRESS
+ #define NOR_FLASH_BASE_ADDRESS (NOR_FLASH_BASE_ADDRESS_DEFAULT + FOTA_DM_FS_OFFSET)
+ #else
+ #define NOR_FLASH_BASE_ADDRESS (NOR_BOOTING_NOR_FS_BASE_ADDRESS + FOTA_DM_FS_OFFSET)
+ #endif /* !NOR_FLASH_BASE_ADDRESS */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS size is automatically decreased by update package storage size as
+ * NOR_BOOTING_NOR_FS_SIZE - FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NOR_FS_SIZE
+ #if defined(__SECURE_DATA_STORAGE__)
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_ALLOCATED_FAT_SPACE_DEFAULT - FOTA_DM_FS_OFFSET - SDS_TOTAL_SIZE)
+ #else
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_ALLOCATED_FAT_SPACE_DEFAULT - FOTA_DM_FS_OFFSET)
+ #endif
+ #else
+ #if defined(__SECURE_DATA_STORAGE__)
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_BOOTING_NOR_FS_SIZE - FOTA_DM_FS_OFFSET - SDS_TOTAL_SIZE)
+ #else
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_BOOTING_NOR_FS_SIZE - FOTA_DM_FS_OFFSET)
+ #endif
+ #endif /* !NOR_ALLOCATED_FAT_SPACE */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS first drive size is automatically decreased by update package storage size as
+ * NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS - FOTA_PACKAGE_STORAGE_SIZE / 512 (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS
+ #define NOR_PARTITION_SECTORS (0)
+ #else
+ #define NOR_PARTITION_SECTORS (NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS - FOTA_DM_FS_SECTOR_OFFSET)
+ #endif /* !NOR_FAT_PARTITION_SECTORS */
+
+ /* If NAND_SUPPORT is enabled, all NAND flash space is treated as one public drive */
+ #define NAND_PARTITION_SECTORS (0)
+
+ #endif /* __UP_PKG_ON_NAND__ && NAND_SUPPORT */
+
+
+#endif /* _NAND_FLASH_BOOTING_ || __EMMC_BOOTING__ */
+
+/*
+ * Define __PUBLIC_DRIVE_AVAILABLE__ if public drive is available.
+ * This definition will be referenced by File System. Please inform FS owner if any changes.
+ */
+#if defined(__NANDFDM_MULTI_INSTANCE__)
+ #ifndef __PUBLIC_DRIVE_AVAILABLE__
+ #define __PUBLIC_DRIVE_AVAILABLE__ // NAND FDM Multi-Instance always has public drive
+ #endif
+#endif
+
+#if defined(NOR_PARTITION_SECTORS) // NOR flash has public drive
+ #if (NOR_PARTITION_SECTORS > 0)
+ #if ((NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS - 0) < 21)
+ #error "custom\system\{project}\custom_MemoryDevice.h: NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS should be zero Or (NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS - 0) should be more than 20 sectors."
+ #endif
+
+ #ifndef __PUBLIC_DRIVE_AVAILABLE__
+ #define __PUBLIC_DRIVE_AVAILABLE__
+ #endif
+ #endif
+#endif
+
+#if defined(NAND_PARTITION_SECTORS) // NAND flash has public drive (including __FS_SYSDRV_ON_NAND__)
+ #if (NAND_PARTITION_SECTORS > 0)
+ #ifndef __PUBLIC_DRIVE_AVAILABLE__
+ #define __PUBLIC_DRIVE_AVAILABLE__
+ #endif
+ #endif
+#endif
+
+#if defined(__EMMC_BOOTING__) // EMMC has public drive
+ #ifndef __PUBLIC_DRIVE_AVAILABLE__
+ #define __PUBLIC_DRIVE_AVAILABLE__
+ #endif
+#endif
+
+#if !defined(_NAND_FLASH_BOOTING_) && !defined(__EMMC_BOOTING__) && !defined(__FS_SYSDRV_ON_NAND__) && defined(NAND_SUPPORT)
+ /*
+ * NOR booting / System drive on NOR / NAND flash is existed
+ * NAND_PARTITION_SECTORS is 0 but all NAND flash space is treated as one public drive
+ *
+ * Note. Please ensure NAND_SUPPORT is correctly DISABLED if NAND flash is NOT existed,
+ * otherwise __PUBLIC_DRIVE_AVAILABLE__ will be incorrectly defined but public drive is not existed!
+ */
+ #ifndef __PUBLIC_DRIVE_AVAILABLE__
+ #define __PUBLIC_DRIVE_AVAILABLE__
+ #endif
+
+ #ifndef __PUBLIC_DRIVE_2_AVAILABLE__
+ #define __PUBLIC_DRIVE_2_AVAILABLE__
+ #endif
+#endif
+
+/*
+ *******************************************************************************
+ PART 5:
+ FLASH TYPE CATEGORY below to configure flash memory command
+ *******************************************************************************
+*/
+#ifdef NOR_FLASH_TYPE_INTEL_SERIES
+#define __INTEL_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_INTEL
+#define __INTEL_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_RENESAS_SERIES
+#define __RENESAS_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_RENESAS
+#define __RENESAS_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_INTEL_SIBLEY
+#define __INTEL_SERIES_NOR__
+#define __INTEL_SIBLEY__
+
+#endif
+
+#ifdef NOR_FLASH_TYPE_SST
+#define __AMD_SERIES_NOR__
+#define __SST_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_ST_AMD_LIKE
+#define __AMD_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_ST_INTEL_LIKE
+#define __INTEL_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_AMD_SERIES
+#define __AMD_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_PL_J
+#define __AMD_SERIES_NOR__
+#define NOR_SUSPEND_LATENCY (35)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_PL_N
+#define __AMD_SERIES_NOR__
+#define __SPANSION_PL_N__
+#define NOR_SUSPEND_LATENCY (20)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_WS_N
+#define __AMD_SERIES_NOR__
+#define __SPANSION_WS_N__
+#define __SPANSION_PL_N__
+#define NOR_SUSPEND_LATENCY (20)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_WS_P
+#define __AMD_SERIES_NOR__
+#define __SPANSION_WS_P__
+#define NOR_SUSPEND_LATENCY (40)
+#define NOR_RESUME_SUSPEND_INTERVAL (40)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_GL_A
+#define __AMD_SERIES_NOR__
+#define __SPANSION_GL_A__
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_GL_N
+#define __AMD_SERIES_NOR__
+#define __SPANSION_GL_N__
+#define NOR_SUSPEND_LATENCY (20)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_NS_N
+#define __AMD_SERIES_NOR__
+#define __SPANSION_NS_N__
+#define NOR_SUSPEND_LATENCY (35)
+#define NOR_RESUME_SUSPEND_INTERVAL (30)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_NS_P
+#define __AMD_SERIES_NOR__
+#define __SPANSION_NS_N__
+#define NOR_SUSPEND_LATENCY (20)
+#define NOR_RESUME_SUSPEND_INTERVAL (30)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_NS_J
+#define __AMD_SERIES_NOR__
+#define __SPANSION_NS_J__
+#define NOR_SUSPEND_LATENCY (35)
+#endif
+
+#ifdef NOR_FLASH_TYPE_TOSHIBA
+#define __AMD_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_TOSHIBA_TV
+#define __AMD_SERIES_NOR__
+#define __TOSHIBA_TV__
+#endif
+
+#ifdef NOR_FLASH_TYPE_TOSHIBA_TY
+#define __AMD_SERIES_NOR__
+#define __TOSHIBA_TY__
+#endif
+
+#ifdef NOR_FLASH_TYPE_SILICON7
+#define __RENESAS_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_SAMSUNG_SPANSION_NS_J_LIKE
+#define __AMD_SERIES_NOR__
+#define __SAMSUNG_SPANSION_NS_J_LIKE__
+#define NOR_SUSPEND_LATENCY (20)
+#define NOR_RESUME_SUSPEND_INTERVAL (30)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_VS_R
+#define __AMD_SERIES_NOR__
+#define __SPANSION_VS_R__
+#define NOR_SUSPEND_LATENCY (30)
+#define NOR_RESUME_SUSPEND_INTERVAL (30)
+#define __NOR_FDM_4_FLIPPING_TOLERABLE__
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_VS_R64
+#define __AMD_SERIES_NOR__
+#define __SPANSION_VS_R64__
+#define __SPANSION_NS_N__
+#define NOR_SUSPEND_LATENCY (30)
+#define __NOR_FDM_4_FLIPPING_TOLERABLE__
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_WS_R
+#define __AMD_SERIES_NOR__
+#define __SPANSION_WS_R__
+#define NOR_SUSPEND_LATENCY (30)
+#define NOR_RESUME_SUSPEND_INTERVAL (30)
+#define __NOR_FDM_4_FLIPPING_TOLERABLE__
+#endif
+
+/*
+ *******************************************************************************
+ PART 6:
+ FOTA UPDATABLE FLASH AREA
+ *******************************************************************************
+*/
+#ifdef __FOTA_DM__
+ #ifndef CONFIG_FOTA_UE_FLASH_SPACE
+ #error "custom\system\{project}\custom_FeatureConfig.h: Error! Please define CONFIG_FOTA_UE_FLASH_SPACE in custom_FeatureConfig.h!"
+ #endif /* CONFIG_FOTA_UE_FLASH_SPACE */
+
+ #ifndef CONFIG_FOTA_PACKAGE_BLOCK_NUMBER
+ #error "custom\system\{project}\custom_FeatureConfig.h: Error! Please define CONFIG_FOTA_PACKAGE_BLOCK_NUMBER in custom_FeatureConfig.h!"
+ #endif /* CONFIG_FOTA_PACKAGE_BLOCK_NUMBER */
+#endif /* __FOTA_DM__ */
+
+
diff --git a/mcu/custom/driver/common/fmr_config_customize.c b/mcu/custom/driver/common/fmr_config_customize.c
new file mode 100644
index 0000000..84b9097
--- /dev/null
+++ b/mcu/custom/driver/common/fmr_config_customize.c
@@ -0,0 +1,81 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * fmr_config_customize.c
+ *
+ * Project:
+ * --------
+ * Maui
+ *
+ * Description:
+ * ------------
+ * This file contains fm radio customized configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *******************************************************************************/
+#if defined(FM_RADIO_ENABLE)
+#include "kal_general_types.h"
+
+/*RSSI threshold*/
+#if (defined(MT6251FM))
+kal_uint16 FMR_RSSI_THRESHOLD_LANT = 0x301;
+kal_uint16 FMR_RSSI_THRESHOLD_SANT = 0x2E0;
+kal_uint16 FMR_CQI_TH = 0xE9;
+#elif (defined(MT6276FM))
+kal_uint16 FMR_RSSI_THRESHOLD_LANT = 0x301;
+kal_uint16 FMR_RSSI_THRESHOLD_SANT = 0x2E0;
+kal_uint16 FMR_CQI_TH = 0xE9;
+#elif (defined(MT6256FM)||defined(MT6255FM))
+kal_uint16 FMR_RSSI_THRESHOLD_LANT = 0x301;
+kal_uint16 FMR_RSSI_THRESHOLD_SANT = 0x2E0;
+kal_uint16 FMR_CQI_TH = 0xE9;
+#elif (defined(MT6626))
+kal_uint16 FMR_RSSI_THRESHOLD_LANT = 0xFF01;
+kal_uint16 FMR_RSSI_THRESHOLD_SANT = 0xFEE0;
+kal_bool FMR_DEEMPHASIS_50us = KAL_FALSE;
+kal_uint16 FMR_CQI_TH = 0xFFE9;
+#endif
+
+kal_uint16 FMR_SCAN_BAND_UP = 1080; //108MHz
+kal_uint16 FMR_SCAN_BAND_DN = 875; //87.5MHz
+
+#endif
diff --git a/mcu/custom/driver/common/fmr_config_customize.h b/mcu/custom/driver/common/fmr_config_customize.h
new file mode 100644
index 0000000..15e3142
--- /dev/null
+++ b/mcu/custom/driver/common/fmr_config_customize.h
@@ -0,0 +1,62 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * fmr_config_customize.h
+ *
+ * Project:
+ * --------
+ * Maui
+ *
+ * Description:
+ * ------------
+ * This file contains fm radio customized configuration.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *******************************************************************************/
+#if defined(FM_RADIO_ENABLE)
+/*
+*FM radio MMI, MED/MDI, driver should refer to this definition.
+*FM drvier search range should be less than 256 khz:(FM_RADIO_MAX_FREQ-FM_RADIO_MIN_FREQ)<256
+*/
+#define FM_RADIO_MIN_FREQ 875 //87.5MHz
+#define FM_RADIO_MAX_FREQ 1080 //108MHz
+#endif
diff --git a/mcu/custom/driver/drv/Drv_Tool/ADC.cmp b/mcu/custom/driver/drv/Drv_Tool/ADC.cmp
new file mode 100644
index 0000000..32f51c0
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/ADC.cmp
@@ -0,0 +1,20 @@
+[ADC_variables]
+ADC_VBAT
+ADC_VISENSE
+ADC_VBATTMP
+ADC_VCHARGER
+ADC_ACCESSORYID
+ADC_PCBTMP
+ADC_CHR_USB
+ADC_OTG_VBUS
+ADC_RFTMP
+ADC_JACK_TYPE
+ADC_FDD_RF_PARAMS_DYNAMIC_CUSTOM_CH
+
+[adc_var.c_HEADER]
+#ifdef __CUST_NEW__
+#include "kal_public_api.h"
+#include "dcl.h"
+
+[adc_var.c_TAILER]
+#endif /* __CUST_NEW__ */
diff --git a/mcu/custom/driver/drv/Drv_Tool/Application.cmp b/mcu/custom/driver/drv/Drv_Tool/Application.cmp
new file mode 100644
index 0000000..caabfe2
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/Application.cmp
@@ -0,0 +1,19 @@
+[APPLICATION]
+RF
+SIM
+SIM2
+BT
+USB
+CAM1_A
+CAM1_D
+CAM2_A
+CAM2_D
+TOUCHPAD
+GPS
+TDMB
+MC
+WIFI_V1
+WIFI_V2
+SF
+FM
+VIBR
diff --git a/mcu/custom/driver/drv/Drv_Tool/DrvGen b/mcu/custom/driver/drv/Drv_Tool/DrvGen
new file mode 100755
index 0000000..a676ca7
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/DrvGen
Binary files differ
diff --git a/mcu/custom/driver/drv/Drv_Tool/DrvGen.exe b/mcu/custom/driver/drv/Drv_Tool/DrvGen.exe
new file mode 100755
index 0000000..e6bff62
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/DrvGen.exe
Binary files differ
diff --git a/mcu/custom/driver/drv/Drv_Tool/EINT.cmp b/mcu/custom/driver/drv/Drv_Tool/EINT.cmp
new file mode 100644
index 0000000..5af2d47
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/EINT.cmp
@@ -0,0 +1,66 @@
+[EINT_variables]
+SWDBG_EINT_NO
+AUX_EINT_NO
+AUX2_EINT_NO
+TOUCH_PANEL_EINT_NO
+CHRDET_EINT_NO
+MOTION_SENSOR_EINT_NO
+BT_EINT_NO
+CLAMDET_EINT_NO
+USB_EINT_NO
+CHR_USB_EINT_NO
+WIFI_EINT_NO
+WIFI_DCXO_EINT_NO
+MELODY_EINT_NO
+OTG_IDPIN_EINT_NO
+EXTRA_A_KEY_EINT_NO
+EXTRA_B_KEY_EINT_NO
+SYNC_LCM_EINT_NO
+LSD_MSDCCD_EINT_NO
+GPS_EINT_NO
+DCAM_EINT_NO
+CMMB_EINT_NO
+JB_UP_EINT_NO
+JB_DOWN_EINT_NO
+JB_RIGHT_EINT_NO
+JB_LEFT_EINT_NO
+FM_EINT_NO
+AUX_HOOK_EINT_NO
+CHG_IND_EINT_NO
+BT_CO_CLOCK_EINT_NO
+MUIC_EINT_NO
+MUIC_FAC_EINT_NO
+PXS_EINT_NO
+ALS_EINT_NO
+AST_EINT_NO
+AST_WAKEUP_EINT_NO
+AST_RFCONF_EINT_NO
+MSDC_EINT_NO
+SIM_HOT_SWAP_EINT_NO
+NFC_EINT_NO
+OFN_EINT_NO
+POWER_KEY_EINT_NO
+KEYPAD_WAKEUP_EINT_NO
+USB2_DP_EINT_NO
+USB2_DM_EINT_NO
+PMIC_EINT_NO
+AP_WAKE_MD_EINT_NO
+USIM1_EINT_NO
+USIM2_EINT_NO
+TDM_REQ_HI_EINT_NO
+TDM_REQ_LO_EINT_NO
+MD_WAKE_AP_EINT_NO
+
+[eint_drv.h_HEADER]
+#ifndef _EINT_DRV_H
+#define _EINT_DRV_H
+
+[eint_drv.h_TAILER]
+#endif /* _EINT_DRV_H */
+
+[eint_var.c_HEADER]
+#ifdef __CUST_NEW__
+#include "eint.h"
+
+[eint_var.c_TAILER]
+#endif /* __CUST_NEW__ */
diff --git a/mcu/custom/driver/drv/Drv_Tool/GPIO.cmp b/mcu/custom/driver/drv/Drv_Tool/GPIO.cmp
new file mode 100644
index 0000000..8a02195
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/GPIO.cmp
@@ -0,0 +1,459 @@
+[GPIO_variables]
+;Bluetooth disconnect pin for BCHS
+gpio_bt_dsc_pin
+;Bluetooth data selection pin for BCHS. Should be GPI.
+gpio_bt_dataselect_pin
+;Bluetooth power on pin for BCHS, RFMD, GORM
+@gpio_bt_power_pin
+;Bluetooth reset pin for BCHS, GORM
+@gpio_bt_reset_pin
+;Bluetooth ext 32k pin for RFMD, GORM.
+@gpio_bt_32k_pin
+;Bluetooth uart tx pin for RFMD, GORM.
+@gpio_bt_utxd3_pin
+;Bluetooth uart rx pin for RFMD, GORM.
+@gpio_bt_urxd3_pin
+;Bluetooth uart rts pin for RFMD, GORM.
+@gpio_bt_urts3_pin
+;Bluetooth uart cts pin for RFMD, GORM.
+@gpio_bt_ucts3_pin
+;Bluetooth pcm clk pin for RFMD, GORM.
+@gpio_bt_pcmclk_pin
+;Bluetooth pcm sync pin for RFMD, GORM.
+@gpio_bt_pcmsync_pin
+;Bluetooth pcm data input pin for RFMD, GORM.
+@gpio_bt_pcmin_pin
+;Bluetooth pcm data output pin for RFMD, GORM.
+@gpio_bt_pcmout_pin
+;Bluetooth wake up pin for RFMD
+gpio_bt_wakeup_pin
+;Bluetooth eint pin
+@gpio_bt_eint_pin
+;
+;gpio RF control pins. Please refer to m12190.c, m12196.c
+gpio_rf_control1_pin
+gpio_rf_control2_pin
+gpio_rf_control3_pin
+;
+gpio_flash_test_cmd_bit0_pin
+gpio_flash_test_cmd_bit1_pin
+gpio_flash_test_reset_pin
+gpio_flash_test_error_ind_pin
+;
+gpio_ic_module_ready_bot_pin
+gpio_ic_module_ready_eot_pin
+gpio_ic_module_ready_bin_pin
+;
+;For motion sensor spi pins: motion_sensor_hw_define.h
+gpio_ms_spi_din_pin
+gpio_ms_spi_clk_pin
+gpio_ms_spi_dout_pin
+gpio_ms_spi_cs_pin
+gpio_ms_spi_reset_pin
+;
+;For motion sensor I2C pins: motion_sensor_hw_define.h
+gpio_ms_i2c_addr_pin
+@gpio_ms_i2c_clk_pin
+@gpio_ms_i2c_data_pin
+gpio_ms_i2c_cs_pin
+gpio_ms_i2c_reset_pin
+;For motion sensor MEMSIC serial interface: motion_sensor_hw_define.h
+gpio_acc_sensor_sck_pin
+gpio_acc_sensor_sda_pin
+;
+;For e_compass serial interface: e_compass_sensor_hw_define.h
+@gpio_e_compass_sensor_sck_pin
+@gpio_e_compass_sensor_sda_pin
+@gpio_e_compass_sensor_pwr_pin
+;
+;For BMT charging control ON/OFF pin: pwic.c
+gpio_bmt_chr_ctrl_pin
+;For doing something whenever AC is plug-in: chr_parameter.c
+gpio_bmt_charger_action_pin
+;For dectection USB or AC: char_parameter.c
+gpio_bmt_check_ac_usb_pin
+;
+;For IrDA mode switch: irda_custom.c
+gpio_irda_mode_switch_pin
+;
+;For touch panel SPI pins: touch_panel_spi.h
+gpio_tp_spi_din_pin
+gpio_tp_spi_clk_pin
+gpio_tp_spi_dout_pin
+gpio_tp_spi_cs_pin
+gpio_tp_spi_busy_pin
+;
+;For USB power control: usb_custom.c
+gpio_usb_enable_pin
+gpio_otg_vbus_enable_pin
+; In USB2.0, to switch on/off the external 100K ohm resistor for the dectection of USB or charger
+gpio_usb_chr_det_switch_pin
+;
+;For enable USBDL
+@gpio_usbdl_pin
+;
+;For FM control pins: see MCU\CUSTOM_BACKUP\AUDIO\PROJECT_NAME\XXX.c
+gpio_fm_3wire_le_pin
+@gpio_fm_i2c_sda_pin
+@gpio_fm_i2c_scl_pin
+gpio_fm_ext_switch_pin
+gpio_fm_bus_enable_pin
+gpio_fm_srclkena_pin
+gpio_fm_32k_pin
+;
+;To turn on/off external amplifier: afe.c
+gpio_afe_amplifier_pin
+gpio_afe_amplifier_pin1
+;For I2C External audio amplifier ctrl:
+gpio_afe_amplifier_i2c_scl_pin
+gpio_afe_amplifier_i2c_sda_pin
+;
+;For audio EXT_DAC_SUPPORT: ext_dac_drv.c
+gpio_ext_dac_sclk_pin
+gpio_ext_dac_sdin_pin
+gpio_ext_dac_csb_pin
+gpio_ext_dac_switch_pin
+;
+;For Main LCD backlight LED: uem_gpio.c
+gpio_led_mainbl_en_pin
+;For sub LCD backlight LED: uem_gpio.c
+gpio_led_subbl_en_pin
+;For general LED: uem_gpio.c
+gpio_led_status_en_pin
+;For Red LED: uem_gpio.c
+gpio_led_status1_en_pin
+;For Green LED: uem_gpio.c
+gpio_led_status2_en_pin
+;For Blue LED: uem_gpio.c
+gpio_led_status3_en_pin
+;For keypad backlight LED: uem_gpio.c
+gpio_led_keybl_en_pin
+gpio_led_keybl2_en_pin
+;For enable/disable vibration: uem_gpio.c
+gpio_vibrator_en_pin
+;
+;For flash light control: uem_gpio.c, camera_hw.c
+gpio_flashlight_en_pin
+;
+;To enable camera AF function: camera_hw.c
+gpio_af_enable_pin
+;Camera control pins: camera_hw.c, camera_para.c
+gpio_camera_power_en_pin
+@gpio_camera_reset_pin
+@gpio_camera_cmpdn_pin
+@gpio_camera_cmpdn_sub_pin
+@gpio_camera_reset_sub_pin
+@gpio_flashlight_enable_pin
+@gpio_af_enable_pin
+gpio_camera_mclk_pin
+;
+;Camera module control pins: for example, PAP1320_custom.h
+gpio_camera_module_power_pin
+gpio_camera_module_reset_pin
+gpio_camera_module_ready_pin
+;
+;Cap-Touch power enable pin
+@gpio_ctp_power_enable_pin
+;
+;Cap-Touch I2C pins
+@gpio_ctp_i2c_scl_pin
+@gpio_ctp_i2c_sda_pin
+;
+;Cap-Touch eint pin
+@gpio_ctp_eint_pin
+;
+;Cap-Touch reset pin
+@gpio_ctp_reset_pin
+;
+;SCCB pins: sccb.h
+@gpio_sccb_serial_clk_pin
+@gpio_sccb_serial_data_pin
+;
+;PXS I2C pins
+@gpio_pxs_i2c_scl_pin
+@gpio_pxs_i2c_sda_pin
+;
+;ALS I2C pins
+gpio_als_i2c_scl_pin
+gpio_als_i2c_sda_pin
+;
+;TV out swtich pin: auxmain.c
+gpio_tv_out_switch_pin
+;
+;WIFI enable pin: gl_hpi.c
+@gpio_wifi_enable_pin
+;WiF EINT enable pin
+@gpio_wifi_eint_enable_pin
+;WiFi ext 32k pin
+@gpio_wifi_32k_pin
+;WiFi ext reset pin
+@gpio_wifi_ext_rst_pin
+;WiFi coclock pin
+@gpio_wifi_coclock_pin
+;enable wifi PMU
+gpio_wifi_pmu_enable_pin
+;Reset wifi SYSRST_B
+gpio_wifi_sysrst_b_pin
+;
+;USB/UART switch pin: usb_custom.c
+gpio_usb_uart_switch_pin
+gpio_earphone_usb_uart_switch_pin
+;
+;UART enable pin: auxmain.c
+gpio_uart_enable_pin
+;
+;specify GPIO pin for 32KHz clock output
+gpio_32k_ctrl_pin
+;
+;simplus related pins
+gpio_simplug_ldo_switch
+gpio_sim_msdc_switch
+gpio_ext_sd_ldo_switch
+;
+;SW T_flash related pins
+gpio_t_card_ldo_switch
+;
+;touchpad power pins: touchpad_custom.h
+gpio_touchpad_ldo_pw_pin
+gpio_touchpad_low_pw_pin
+;
+;GPS power on pin
+@gpio_gps_power_pin
+;GPS reset pin
+@gpio_gps_reset_pin
+;GPS standby pin
+@gpio_gps_standby_pin
+;GPS sync pin
+@gpio_gps_sync_pin
+;GPS ext 32k pin
+@gpio_gps_32k_pin
+;GPS uart tx pin
+@gpio_gps_utxd_pin
+;GPS uart rx pin
+@gpio_gps_urxd_pin
+;GPS uart rts pin
+@gpio_gps_urts_pin
+;GPS uart cts pin
+@gpio_gps_ucts_pin
+;
+;NFC VEN pin
+@gpio_nfc_ven_pin
+;NFC GPIO4 pin
+@gpio_nfc_firm_pin
+;NFC IRQ
+@gpio_nfc_eint_pin
+;
+;TDMB Power and Control Pin
+@gpio_tdmb_power_pin
+gpio_tdmb_spi_reset_pin
+gpio_tdmb_spi_eint_pin
+;
+;MT6302 SPI CS pins
+@gpio_MT6302_cs_pin
+@gpio_MT6302_cs2_pin
+;MT6302 SPI clk pins
+@gpio_MT6302_clk_pin
+@gpio_MT6302_clk2_pin
+;MT6302 SPI data pins
+@gpio_MT6302_dat_pin
+@gpio_MT6302_dat2_pin
+;
+;MT6306 sim switch controller pin
+@gpio_sim_switch_dat_pin
+;MT6306 sim switch controller pin
+@gpio_sim_switch_clk_pin
+;
+;USB EDGE card 2-step current limit
+@gpio_edgecard_current_limit_pin
+
+;For XENON flash light control
+gpio_xenon_flash_on_pin
+gpio_xenon_charge_pin
+gpio_xenon_trigger_pin
+gpio_xenon_ready_pin
+
+;For CMMB I2C control pin
+gpio_cmmb_reset_pin
+gpio_cmmb_i2c_sda_pin
+gpio_cmmb_i2c_scl_pin
+gpio_cmmb_power_on_pin
+gpio_cmmb_ap_en_pin
+@gpio_cmmb_spi_eint_pin
+gpio_cmmb_spi_cs_n_pin
+gpio_cmmb_spi_sck_pin
+gpio_cmmb_spi_mosi_pin
+gpio_cmmb_spi_miso_pin
+
+;For LCD TE control pin
+gpio_lcd_te_pin
+
+;For Direct Sensor
+gpio_dcam_lcd_cs_pin
+gpio_dcam_lcd_rd_pin
+
+;For PMU with External Charger
+gpio_ext_chr_ctrl_pin
+gpio_ext_chr_iset_ctrl_pin
+;ys1 add for PMU with External Charger
+gpio_ext_chr_det_pin
+; for Micro SD card detection
+gpio_SD_det_pin
+
+;For general purpose debug
+gpio_reserve0_pin
+gpio_reserve1_pin
+gpio_reserve2_pin
+gpio_reserve3_pin
+gpio_reserve4_pin
+gpio_reserve5_pin
+gpio_reserve6_pin
+gpio_reserve7_pin
+gpio_reserve8_pin
+gpio_reserve9_pin
+gpio_reserve10_pin
+gpio_reserve11_pin
+gpio_reserve12_pin
+gpio_reserve13_pin
+gpio_reserve14_pin
+gpio_reserve15_pin
+
+;For kbdmain_joustick
+gpio_ball_scl_pin
+gpio_ball_sda_pin
+gpio_ball_en_pin
+
+;For kbd_OFN
+@gpio_ofn_scl_pin
+@gpio_ofn_sda_pin
+@gpio_ofn_shtdwn_pin
+@gpio_ofn_rst_pin
+@gpio_ofn_motion_pin
+;For BT co_clock
+@gpio_bt_co_clock_pin
+
+gpio_muic_sccb_sda_pin
+gpio_muic_sccb_scl_pin
+
+;For TWOMICNR I2C control pin
+gpio_2micNR_scl_pin
+gpio_2micNR_sda_pin
+gpio_2micNR_bypass_pin
+gpio_2micNR_13mhz_pin
+gpio_2micNR_rst_pin
+gpio_2micNR_pwdn_pin
+
+;for I2S
+gpio_edi_clk
+gpio_edi_data
+gpio_edi_ws
+
+;For qwerty extend for keypad
+@gpio_kbd_extend_QWERTY_pin
+
+;For mATV control pin
+@gpio_matv_reset_pin
+@gpio_matv_power_en_pin
+@gpio_matv_i2c_clk_pin
+@gpio_matv_i2c_dat_pin
+
+;For I2S interface
+@gpio_i2s_clk_pin
+@gpio_i2s_data_pin
+@gpio_i2s_ws_pin
+
+;For Keypad use
+*gpio_keypad_col0_pin
+*gpio_keypad_col1_pin
+*gpio_keypad_col2_pin
+*gpio_keypad_col3_pin
+*gpio_keypad_col4_pin
+*gpio_keypad_col5_pin
+*gpio_keypad_col6_pin
+*gpio_keypad_col7_pin
+*gpio_keypad_col8_pin
+*gpio_keypad_col9_pin
+*gpio_keypad_row0_pin
+*gpio_keypad_row1_pin
+*gpio_keypad_row2_pin
+*gpio_keypad_row3_pin
+*gpio_keypad_row4_pin
+*gpio_keypad_row5_pin
+*gpio_keypad_row6_pin
+*gpio_keypad_row7_pin
+*gpio_keypad_row8_pin
+*gpio_keypad_row9_pin
+
+
+;For AST1001 interface
+@gpio_ast_cs_pin
+@gpio_ast_addr1_pin
+@gpio_ast_rst_pin
+@gpio_ast_pwn_pin
+@gpio_ast_ldo_pin
+@gpio_ast_clk32k_pin
+@gpio_ast_intr_pin
+@gpio_ast_wakeup_intr_pin
+@gpio_ast_rfconf_intr_pin
+@gpio_ast_wakeup_pin
+@gpio_ast_ast3001_wa_clk_pin
+
+;For Gpio Macro Name
+GPIO_FDD_BAND_SUPPORT_DETECT_1ST_PIN
+GPIO_FDD_BAND_SUPPORT_DETECT_2ND_PIN
+GPIO_FDD_BAND_SUPPORT_DETECT_3RD_PIN
+
+;MT6290 For MSDC card detect
+@gpio_msdc_cd_pin
+@gpio_msdc_wp_pin
+
+;MT6290 For phone AP wake up MD
+@GPIO_AP_WAKE_MD_PIN
+
+;MT6290 For sim hot plug
+@gpio_usim1_hot_swap
+@gpio_usim2_hot_swap
+
+;MT6290/MT6582/MT6592 LTE CoEX
+@gpio_tdm_req
+
+;MT6290/MT6290m VCORE I2C buck Exist , 1 : Yes ; 0 : No
+EXTbuck_i2cdev_exist
+
+;MT6290MD->AP wakeup workaround;20140318
+gpio_MD2AP_EINT
+
+[GPIO_MODE]
+GPIO = _M_GPIO
+EINT = _M_EINT
+EDICK = _M_EDICK
+EDIDAT = _M_EDIDAT
+EDIWS = _M_EDIWS
+EDI0CK = _M_EDI0CK
+EDI0DAT = _M_EDI0DAT
+EDI0WS = _M_EDI0WS
+EDI1CK = _M_EDI1CK
+EDI1DAT = _M_EDI1DAT
+EDI1WS = _M_EDI1WS
+
+[GPIO_FREQ]
+gpio_bt_power_pin = mode_f32k_ck
+gpio_fm_32k_pin = mode_f32k_ck
+
+
+[gpio_drv.h_HEADER]
+#ifndef _GPIO_DRV_H
+#define _GPIO_DRV_H
+
+[gpio_drv.h_TAILER]
+#endif /* _GPIO_DRV_H */
+
+[gpio_var.c_HEADER]
+#ifdef __CUST_NEW__
+#include "gpio_drv.h"
+#include "gpio_def.h"
+#include "kal_public_api.h"
+#include "gpio_sw.h"
+#include "dcl.h"
+
+[gpio_var.c_TAILER]
+#endif /* __CUST_NEW__ */
diff --git a/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_MT6252.cmp b/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_MT6252.cmp
new file mode 100644
index 0000000..d20601d
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_MT6252.cmp
@@ -0,0 +1,187 @@
+[GPIO_EXT_TABLE]
+NUM_GPIO_EXT = 22
+
+[GPIO_EXT_NAME0]
+GPIOEXT_NAME=SP_MODE0_BIT0
+[GPIO_EXT__SEL0]
+0(EMI_EA0)
+1(LPA0)
+2
+3(SEN2LCM_A0)
+
+[GPIO_EXT_NAME1]
+GPIOEXT_NAME=SP_MODE0_BIT2
+[GPIO_EXT__SEL1]
+0(EMI_EA1)
+1(LRD_B)
+2
+3
+
+[GPIO_EXT_NAME2]
+GPIOEXT_NAME=SP_MODE0_BIT4
+[GPIO_EXT__SEL2]
+0(EMI_EA2)
+1(LWR_B)
+2
+3(SEN2LCM_WR_B)
+
+[GPIO_EXT_NAME3]
+GPIOEXT_NAME=SP_MODE0_BIT6
+[GPIO_EXT__SEL3]
+0(EMI_EA3)
+1(NLD0)
+2(LSCK)
+3(CMDAT0)
+
+[GPIO_EXT_NAME4]
+GPIOEXT_NAME=SP_MODE0_BIT8
+[GPIO_EXT__SEL4]
+0(EMI_EA4)
+1(NLD1)
+2(LSA0)
+3(CMDAT1)
+
+[GPIO_EXT_NAME5]
+GPIOEXT_NAME=SP_MODE0_BIT10
+[GPIO_EXT__SEL5]
+0(EMI_EA5)
+1(NLD2)
+2(LSDA)
+3(CMDAT2)
+
+[GPIO_EXT_NAME6]
+GPIOEXT_NAME=SP_MODE0_BIT12
+[GPIO_EXT__SEL6]
+0(EMI_EA6)
+1(NLD3)
+2(LSDI)
+3(CMDAT3)
+
+[GPIO_EXT_NAME7]
+GPIOEXT_NAME=SP_MODE0_BIT14
+[GPIO_EXT__SEL7]
+0(EMI_EA7)
+1(NLD4)
+2
+3(CMDAT4)
+
+[GPIO_EXT_NAME8]
+GPIOEXT_NAME=SP_MODE0_BIT16
+[GPIO_EXT__SEL8]
+0(EMI_EA8)
+1(NLD5)
+2
+3(CMDAT5)
+
+[GPIO_EXT_NAME9]
+GPIOEXT_NAME=SP_MODE0_BIT18
+[GPIO_EXT__SEL9]
+0(EMI_EA9)
+1(NLD6)
+2
+3(CMDAT6)
+
+[GPIO_EXT_NAME10]
+GPIOEXT_NAME=SP_MODE0_BIT20
+[GPIO_EXT__SEL10]
+0(EMI_EA10)
+1(NLD7)
+2
+3(CMDAT7)
+
+[GPIO_EXT_NAME11]
+GPIOEXT_NAME=SP_MODE0_BIT22
+[GPIO_EXT__SEL11]
+0(EMI_EA11)
+1(NLD8)
+2
+3
+
+[GPIO_EXT_NAME12]
+GPIOEXT_NAME=SP_MODE0_BIT24
+[GPIO_EXT__SEL12]
+0(EMI_EA12)
+1(NLD9)
+2(CMMCLK)
+3(CMMCLK)
+
+[GPIO_EXT_NAME13]
+GPIOEXT_NAME=SP_MODE0_BIT26
+[GPIO_EXT__SEL13]
+0(EMI_EA13)
+1(NLD10)
+2(CAM_CSK)
+3(CMPCLK)
+
+[GPIO_EXT_NAME14]
+GPIOEXT_NAME=SP_MODE0_BIT28
+[GPIO_EXT__SEL14]
+0(EMI_EA14)
+1(NLD11)
+2(CAM_CSD)
+3(HSYNC)
+
+[GPIO_EXT_NAME15]
+GPIOEXT_NAME=SP_MODE0_BIT30
+[GPIO_EXT__SEL15]
+0(EMI_EA15)
+1(NLD12)
+2(CMPDN)
+3(VSYNC)
+
+[GPIO_EXT_NAME16]
+GPIOEXT_NAME=SP_MODE1_BIT0
+[GPIO_EXT__SEL16]
+0(EMI_EA23)
+1
+2
+3(LSCE0_B)
+
+[GPIO_EXT_NAME17]
+GPIOEXT_NAME=SP_MODE1_BIT2
+[GPIO_EXT__SEL17]
+0(EMI_EA24)
+1
+2
+3(LPCE0_B)
+
+[GPIO_EXT_NAME18]
+GPIOEXT_NAME=SP_MODE1_BIT4
+[GPIO_EXT__SEL18]
+0(EMI_ED6)
+1(JRTCK)
+2(CMRST)
+3(LSCE1_B)
+4(SEN2LCM_CS_B)
+5(CAM_SDA)
+6(LPCE1_B)
+7
+
+[GPIO_EXT_NAME19]
+GPIOEXT_NAME=SP_MODE1_BIT8
+[GPIO_EXT__SEL19]
+0(EMI_ED7)
+1(JRTCK)
+2(CMPDN)
+3(LPCE1_B)
+4(SEN2LCM_CS_B)
+5(CAM_SCL)
+6(LSCE1_B)
+7
+
+[GPIO_EXT_NAME20]
+GPIOEXT_NAME=SP_MODE1_BIT12
+[GPIO_EXT__SEL20]
+0(URXD1)
+1(EINT2)
+2(LSCK)
+3
+
+[GPIO_EXT_NAME21]
+GPIOEXT_NAME=SP_MODE1_BIT14
+[GPIO_EXT__SEL21]
+0(UTXD1)
+1(EINT3)
+2(LSDA)
+3
+
diff --git a/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_MT6270.cmp b/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_MT6270.cmp
new file mode 100644
index 0000000..e2b12b8
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_MT6270.cmp
@@ -0,0 +1,133 @@
+[GPIO_EXT_TABLE]
+NUM_GPIO_EXT = 13
+
+
+[GPIO_EXT_NAME0]
+GPIOEXT_NAME=CLKSEL1
+[GPIO_EXT__SEL0]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME1]
+GPIOEXT_NAME=CLKSEL2
+[GPIO_EXT__SEL1]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME2]
+GPIOEXT_NAME=CLKSEL3
+[GPIO_EXT__SEL2]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME3]
+GPIOEXT_NAME=CLKSEL4
+[GPIO_EXT__SEL3]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME4]
+GPIOEXT_NAME=CLKSEL5
+[GPIO_EXT__SEL4]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME5]
+GPIOEXT_NAME=CLKSEL6
+[GPIO_EXT__SEL5]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME6]
+GPIOEXT_NAME=CLKSEL7
+[GPIO_EXT__SEL6]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME7]
+GPIOEXT_NAME=CLKSEL8
+[GPIO_EXT__SEL7]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME8]
+GPIOEXT_NAME=CLKSEL9
+[GPIO_EXT__SEL8]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME9]
+GPIOEXT_NAME=CLKSEL10
+[GPIO_EXT__SEL9]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME10]
+GPIOEXT_NAME=CLKSEL11
+[GPIO_EXT__SEL10]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME11]
+GPIOEXT_NAME=CLKSEL12
+[GPIO_EXT__SEL11]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME12]
+GPIOEXT_NAME=CLKSEL13
+[GPIO_EXT__SEL12]
+0
+1
+2
+3
+4
+5
\ No newline at end of file
diff --git a/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_MT6276.cmp b/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_MT6276.cmp
new file mode 100644
index 0000000..e2b12b8
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_MT6276.cmp
@@ -0,0 +1,133 @@
+[GPIO_EXT_TABLE]
+NUM_GPIO_EXT = 13
+
+
+[GPIO_EXT_NAME0]
+GPIOEXT_NAME=CLKSEL1
+[GPIO_EXT__SEL0]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME1]
+GPIOEXT_NAME=CLKSEL2
+[GPIO_EXT__SEL1]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME2]
+GPIOEXT_NAME=CLKSEL3
+[GPIO_EXT__SEL2]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME3]
+GPIOEXT_NAME=CLKSEL4
+[GPIO_EXT__SEL3]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME4]
+GPIOEXT_NAME=CLKSEL5
+[GPIO_EXT__SEL4]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME5]
+GPIOEXT_NAME=CLKSEL6
+[GPIO_EXT__SEL5]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME6]
+GPIOEXT_NAME=CLKSEL7
+[GPIO_EXT__SEL6]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME7]
+GPIOEXT_NAME=CLKSEL8
+[GPIO_EXT__SEL7]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME8]
+GPIOEXT_NAME=CLKSEL9
+[GPIO_EXT__SEL8]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME9]
+GPIOEXT_NAME=CLKSEL10
+[GPIO_EXT__SEL9]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME10]
+GPIOEXT_NAME=CLKSEL11
+[GPIO_EXT__SEL10]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME11]
+GPIOEXT_NAME=CLKSEL12
+[GPIO_EXT__SEL11]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME12]
+GPIOEXT_NAME=CLKSEL13
+[GPIO_EXT__SEL12]
+0
+1
+2
+3
+4
+5
\ No newline at end of file
diff --git a/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_MT6276M.cmp b/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_MT6276M.cmp
new file mode 100644
index 0000000..e2b12b8
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_MT6276M.cmp
@@ -0,0 +1,133 @@
+[GPIO_EXT_TABLE]
+NUM_GPIO_EXT = 13
+
+
+[GPIO_EXT_NAME0]
+GPIOEXT_NAME=CLKSEL1
+[GPIO_EXT__SEL0]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME1]
+GPIOEXT_NAME=CLKSEL2
+[GPIO_EXT__SEL1]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME2]
+GPIOEXT_NAME=CLKSEL3
+[GPIO_EXT__SEL2]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME3]
+GPIOEXT_NAME=CLKSEL4
+[GPIO_EXT__SEL3]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME4]
+GPIOEXT_NAME=CLKSEL5
+[GPIO_EXT__SEL4]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME5]
+GPIOEXT_NAME=CLKSEL6
+[GPIO_EXT__SEL5]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME6]
+GPIOEXT_NAME=CLKSEL7
+[GPIO_EXT__SEL6]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME7]
+GPIOEXT_NAME=CLKSEL8
+[GPIO_EXT__SEL7]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME8]
+GPIOEXT_NAME=CLKSEL9
+[GPIO_EXT__SEL8]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME9]
+GPIOEXT_NAME=CLKSEL10
+[GPIO_EXT__SEL9]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME10]
+GPIOEXT_NAME=CLKSEL11
+[GPIO_EXT__SEL10]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME11]
+GPIOEXT_NAME=CLKSEL12
+[GPIO_EXT__SEL11]
+0
+1
+2
+3
+4
+5
+
+[GPIO_EXT_NAME12]
+GPIOEXT_NAME=CLKSEL13
+[GPIO_EXT__SEL12]
+0
+1
+2
+3
+4
+5
\ No newline at end of file
diff --git a/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_NC.cmp b/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_NC.cmp
new file mode 100644
index 0000000..a20f307
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_NC.cmp
@@ -0,0 +1,3 @@
+[GPIO_EXT_TABLE]
+NUM_GPIO_EXT = 0
+
diff --git a/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_NCGPIOEXT.cmp b/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_NCGPIOEXT.cmp
new file mode 100644
index 0000000..a20f307
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/GPIO_EXT_NCGPIOEXT.cmp
@@ -0,0 +1,3 @@
+[GPIO_EXT_TABLE]
+NUM_GPIO_EXT = 0
+
diff --git a/mcu/custom/driver/drv/Drv_Tool/GPIO_protect.cmp b/mcu/custom/driver/drv/Drv_Tool/GPIO_protect.cmp
new file mode 100644
index 0000000..edf518c
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/GPIO_protect.cmp
@@ -0,0 +1,27 @@
+; Pull_en |Pull_sel |Def_dir |In |Out |Inv |Out_High
+[PROTECT]
+;GPS
+PROTECT_0 = gpio_wifi_enable_pin 0 0 1 0 1 0 0
+PROTECT_1 = gpio_wifi_32k_pin 0 0 1 0 1 0 0
+PROTECT_2 = gpio_wifi_ext_rst_pin 0 0 1 0 1 0 1
+;BT
+PROTECT_3 = gpio_bt_power_pin 0 0 1 0 1 0 0
+PROTECT_4 = gpio_bt_wakeup_pin 0 0 1 0 1 0 0
+PROTECT_5 = gpio_bt_32k_pin 0 0 1 0 1 0 0
+PROTECT_6 = gpio_bt_utxd3_pin 0 0 1 0 1 0 0
+PROTECT_7 = gpio_bt_urxd3_pin 1 1 0 1 1 0 0
+PROTECT_8 = gpio_bt_ucts3_pin 0 0 1 0 1 0 0
+PROTECT_9 = gpio_bt_urts3_pin 0 0 1 0 1 0 0
+PROTECT_10 = gpio_bt_pcmclk_pin 0 0 1 0 1 0 0
+PROTECT_11 = gpio_bt_pcmsync_pin 0 0 1 0 1 0 0
+PROTECT_12 = gpio_bt_pcmin_pin 1 0 0 1 1 0 0
+PROTECT_13 = gpio_bt_pcmout_pin 0 0 1 0 1 0 0
+PROTECT_14 = gpio_bt_reset_pin 0 0 1 0 1 0 0
+;WIFI
+PROTECT_15 = gpio_gps_power_pin 1 0 1 0 1 0 0
+PROTECT_16 = gpio_gps_urxd_pin 0 0 1 0 1 0 0
+PROTECT_17 = gpio_gps_utxd_pin 0 0 1 0 1 0 0
+;QWERTY key
+PROTECT_18 = gpio_kbd_extend_QWERTY_pin 0 0 1 1 1 0 0
+;BT
+PROTECT_19 = gpio_bt_eint_pin 0 0 1 0 1 0 0
diff --git a/mcu/custom/driver/drv/Drv_Tool/Keypad.cmp b/mcu/custom/driver/drv/Drv_Tool/Keypad.cmp
new file mode 100644
index 0000000..be45be8
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/Keypad.cmp
@@ -0,0 +1,134 @@
+[Key_definition]
+DEVICE_KEY_0
+DEVICE_KEY_1
+DEVICE_KEY_2
+DEVICE_KEY_3
+DEVICE_KEY_4
+DEVICE_KEY_5
+DEVICE_KEY_6
+DEVICE_KEY_7
+DEVICE_KEY_8
+DEVICE_KEY_9
+DEVICE_KEY_STAR
+DEVICE_KEY_HASH
+DEVICE_KEY_VOL_UP
+DEVICE_KEY_VOL_DOWN
+DEVICE_KEY_UP
+DEVICE_KEY_DOWN
+DEVICE_KEY_LEFT
+DEVICE_KEY_RIGHT
+DEVICE_KEY_MENU
+DEVICE_KEY_FUNCTION
+DEVICE_KEY_SK_LEFT
+DEVICE_KEY_SK_RIGHT
+DEVICE_KEY_SEND
+DEVICE_KEY_END
+DEVICE_KEY_POWER
+DEVICE_KEY_CLEAR
+DEVICE_KEY_EXT_FUNC1
+DEVICE_KEY_EXT_FUNC2
+DEVICE_KEY_MP3_PLAY_STOP
+DEVICE_KEY_MP3_FWD
+DEVICE_KEY_MP3_BACK
+DEVICE_KEY_NONE
+DEVICE_KEY_EXT_A
+DEVICE_KEY_EXT_B
+DEVICE_KEY_A
+DEVICE_KEY_B
+DEVICE_KEY_C
+DEVICE_KEY_D
+DEVICE_KEY_E
+DEVICE_KEY_F
+DEVICE_KEY_G
+DEVICE_KEY_H
+DEVICE_KEY_I
+DEVICE_KEY_J
+DEVICE_KEY_K
+DEVICE_KEY_L
+DEVICE_KEY_M
+DEVICE_KEY_N
+DEVICE_KEY_O
+DEVICE_KEY_P
+DEVICE_KEY_Q
+DEVICE_KEY_R
+DEVICE_KEY_S
+DEVICE_KEY_T
+DEVICE_KEY_U
+DEVICE_KEY_V
+DEVICE_KEY_W
+DEVICE_KEY_X
+DEVICE_KEY_Y
+DEVICE_KEY_Z
+DEVICE_KEY_ENTER
+DEVICE_KEY_SPACE
+DEVICE_KEY_TAB
+DEVICE_KEY_DEL
+DEVICE_KEY_ALT
+DEVICE_KEY_CTRL
+DEVICE_KEY_WIN
+DEVICE_KEY_SHIFT
+DEVICE_KEY_QUESTION
+DEVICE_KEY_PERIOD
+DEVICE_KEY_COMMA
+DEVICE_KEY_EXCLAMATION
+DEVICE_KEY_APOSTROPHE
+DEVICE_KEY_AT
+DEVICE_KEY_SEND2
+DEVICE_KEY_BACKQUOTE
+DEVICE_KEY_DASH
+DEVICE_KEY_EQUAL
+DEVICE_KEY_BACKSPACE
+DEVICE_KEY_OPEN_PARENS
+DEVICE_KEY_CLOSE_PARENS
+DEVICE_KEY_OPEN_SQUARE
+DEVICE_KEY_CLOSE_SQUARE
+DEVICE_KEY_OPEN_BRACE
+DEVICE_KEY_CLOSE_BRACE
+DEVICE_KEY_BACKSLASH
+DEVICE_KEY_SEMICOLON
+DEVICE_KEY_SLASH
+DEVICE_KEY_DOLLAR
+DEVICE_KEY_PERCENT
+DEVICE_KEY_CARET
+DEVICE_KEY_AND
+DEVICE_KEY_QUOTE
+DEVICE_KEY_PLUS
+DEVICE_KEY_LESS_THAN
+DEVICE_KEY_GREAT_THAN
+DEVICE_KEY_UNDERSCORE
+DEVICE_KEY_PIPE
+DEVICE_KEY_TILDE
+DEVICE_KEY_CAPS_LOCK
+DEVICE_KEY_NUM_LOCK
+DEVICE_KEY_FN
+DEVICE_KEY_SYMBOL
+DEVICE_KEY_EMAIL
+DEVICE_KEY_MESSAGE
+DEVICE_KEY_CAMERA
+DEVICE_KEY_ESC
+DEVICE_KEY_QWERTY_MENU
+DEVICE_KEY_OK
+DEVICE_KEY_F1
+DEVICE_KEY_F2
+DEVICE_KEY_F3
+DEVICE_KEY_F4
+DEVICE_KEY_F5
+DEVICE_KEY_F6
+DEVICE_KEY_F7
+DEVICE_KEY_F8
+DEVICE_KEY_F9
+DEVICE_KEY_F10
+DEVICE_KEY_F11
+DEVICE_KEY_F12
+DEVICE_KEY_BACK
+DEVICE_KEY_HOME
+
+
+[keypad_drv.h_HEADER]
+#ifndef _KEYPAD_DRV_H
+#define _KEYPAD_DRV_H
+
+[keypad_drv.h_TAILER]
+#endif /* _KEYPAD_DRV_H*/
+
+
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6205B.fig b/mcu/custom/driver/drv/Drv_Tool/MT6205B.fig
new file mode 100644
index 0000000..26ab79b
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6205B.fig
@@ -0,0 +1,43 @@
+[Chip Type]
+Chip = MT6205B
+
+[GPIO]
+GPIO0 = Mode0(GPIO0) Mode1(DAICLK) Mode2(LPT_CK) Mode3(TDMA_CK) PD
+GPIO1 = Mode0(GPIO1) Mode1(DAIPCMOUT) Mode2(LPT_D2) Mode3(TDMA_D1) PD
+GPIO2 = Mode0(GPIO2) Mode1(DAIPCMIN) Mode2(LPT_D1) Mode3(TDMA_D0) PU
+GPIO3 = Mode0(GPIO3) Mode1(DAIRST) Mode2(LPT_D0) Mode3(TDMA_FS) PU
+GPIO4 = Mode0(GPIO4) Mode1(BPI_BUS4) Mode2() Mode3() PD
+GPIO5 = Mode0(GPIO5) Mode1(BPI_BUS5) Mode2() Mode3() PD
+GPIO6 = Mode0(GPIO6) Mode1(BPI_BUS6) Mode2(BFE_PRB0) Mode3() PD
+GPIO7 = Mode0(GPIO7) Mode1(BSI_BUS7) Mode2(BSI_CS1) Mode3() PD
+GPIO8 = Mode0(GPIO8) Mode1(LCD_DATA) Mode2() Mode3() PD
+GPIO9 = Mode0(GPIO9) Mode1(LCD_A0) Mode2() Mode3() PD
+GPIO10 = Mode0(GPIO10) Mode1(LCD_CLK) Mode2() Mode3() PD
+GPIO11 = Mode0(GPIO11) Mode1(LCD_CS0) Mode2() Mode3() PU
+GPIO12 = Mode0(GPIO12) Mode1(LCD_CS1) Mode2() Mode3(D1_TID0) PU
+GPIO13 = Mode0(GPIO13) Mode1(13MHz) Mode2() Mode3() PD
+GPIO14 = Mode0(GPIO14) Mode1() Mode2() Mode3() PD
+GPIO15 = Mode0(GPIO15) Mode1() Mode2() Mode3() PD
+GPIO16 = Mode0(GPIO16) Mode1(PWM) Mode2() Mode3() PD
+GPIO17 = Mode0(GPIO17) Mode1(UCTS2) Mode2(UDSR1) Mode3() PU
+GPIO18 = Mode0(GPIO18) Mode1(URTS2) Mode2(UDTR1) Mode3() PU
+GPIO19 = Mode0(GPIO19) Mode1(URXD2) Mode2() Mode3() PU
+GPIO20 = Mode0(GPIO20) Mode1(UTXD2) Mode2() Mode3() PU
+GPIO21 = Mode0(GPIO21) Mode1(UREF_CLK) Mode2(IRQ) Mode3() PU
+
+[GPO]
+GPO0 = Mode0(GPO0) Mode1(XLCDE) Mode2(EA22) Mode3()
+GPO1 = Mode0(GPO1) Mode1(SRCLKENAN) Mode2(PWM2) Mode3()
+GPO2 = Mode0(GPO2) Mode1(SRCLKENA) Mode2() Mode3()
+GPO3 = Mode0(GPO2) Mode1(ALERTER) Mode2() Mode3()
+
+[EINT]
+EINT_COUNT = 3
+EINT_DEBOUNCE_TIME_COUNT = 3
+
+[ADC]
+ADC_COUNT = 5
+
+[Keypad]
+KEY_ROW = 5
+KEY_COLUMN = 5
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6217.fig b/mcu/custom/driver/drv/Drv_Tool/MT6217.fig
new file mode 100644
index 0000000..f65d029
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6217.fig
@@ -0,0 +1,72 @@
+[Chip Type]
+Chip = MT6217
+
+[GPIO]
+GPIO0 = Mode0(GPIO0) Mode1() Mode2(DSP_GPO3) Mode3() PD
+GPIO1 = Mode0(GPIO1) Mode1(DICK) Mode2() Mode3() PD
+GPIO2 = Mode0(GPIO2) Mode1(DID) Mode2() Mode3() PD
+GPIO3 = Mode0(GPIO3) Mode1(DIMS) Mode2() Mode3() PD
+GPIO4 = Mode0(GPIO4) Mode1(DSP_CLK) Mode2(DSPLCK) Mode3(TRASD4) PD
+GPIO5 = Mode0(GPIO5) Mode1(AHB_CLK) Mode2(DSPLD3) Mode3(TRASD3) PD
+GPIO6 = Mode0(GPIO6) Mode1(ARM_CLK) Mode2(DSPLD2) Mode3(TRASD2) PD
+GPIO7 = Mode0(GPIO7) Mode1(SLOW_CK) Mode2(DSPLD1) Mode3(TRASD1) PD
+GPIO8 = Mode0(GPIO8) Mode1(F32K_CK) Mode2(DSPLD0) Mode3(TRASD0) PD
+GPIO9 = Mode0(GPIO9) Mode1() Mode2() Mode3(TRARSYNC) PD
+GPIO10 = Mode0(GPIO10) Mode1(BPI_BUS6) Mode2() Mode3() PD
+
+GPIO11 = Mode0(GPIO11) Mode1(BPI_BUS7) Mode2(6.5MHz) Mode3(26MHz) PD
+GPIO12 = Mode0(GPIO12) Mode1(BPI_BUS8) Mode2(13MHz) Mode3(26MHz) PD
+GPIO13 = Mode0(GPIO13) Mode1(BPI_BUS9) Mode2(BSI_CS1) Mode3() PD
+GPIO14 = Mode0(GPIO14) Mode1(MCINS) Mode2() Mode3() PU
+GPIO15 = Mode0(GPIO15) Mode1(MCWP) Mode2() Mode3() PU
+GPIO16 = Mode0(GPIO16) Mode1(LSCK) Mode2() Mode3(TBTXEN) PD
+GPIO17 = Mode0(GPIO17) Mode1(LSA0) Mode2() Mode3(TDTIRQ) PD
+GPIO18 = Mode0(GPIO18) Mode1(LSDA) Mode2() Mode3(TCTIRQ2) PD
+GPIO19 = Mode0(GPIO19) Mode1(LSCE0#) Mode2(DSP_TID0) Mode3(TCTIRQ1) PU
+GPIO20 = Mode0(GPIO20) Mode1(LSCE1#) Mode2(LPCE2#) Mode3(TEVTVAL) PU
+
+GPIO21 = Mode0(GPIO21) Mode1(PWM1) Mode2(DSP_GPO0) Mode3(TBTXFS) PD
+GPIO22 = Mode0(GPIO22) Mode1(PWM2) Mode2(DSP_GPO1) Mode3(TBRXEN) PD
+GPIO23 = Mode0(GPIO23) Mode1(ALERTER) Mode2(DSP_GPO2) Mode3(BTRXFS) PD
+GPIO24 = Mode0(GPIO24) Mode1(LPCE1#) Mode2(NCE1#) Mode3(MCU_TID0) PU
+GPIO25 = Mode0(GPIO25) Mode1(NRNB) Mode2(DSP_TID1) Mode3(MCU_TID1) PU
+GPIO26 = Mode0(GPIO26) Mode1(NCLE) Mode2(DSP_TID2) Mode3(MCU_TID2) PD
+GPIO27 = Mode0(GPIO27) Mode1(NALE) Mode2(DSP_TID3) Mode3(MCU_TID3) PD
+GPIO28 = Mode0(GPIO28) Mode1(NWE#) Mode2(DSP_TID4) Mode3(MCU_DID) PU
+GPIO29 = Mode0(GPIO29) Mode1(NRE#) Mode2(DSP_TID5) Mode3(MCU_DFS) PU
+GPIO30 = Mode0(GPIO30) Mode1(NCE0#) Mode2(DSP_TID6) Mode3(MCU_DCK) PU
+
+GPIO31 = Mode0(GPIO31) Mode1(SRCLKENAI) Mode2() Mode3() PD
+GPIO32 = Mode0(GPIO32) Mode1(SIMSEL) Mode2() Mode3() PD
+GPIO33 = Mode0(GPIO33) Mode1(URXD3) Mode2() Mode3() PU
+GPIO34 = Mode0(GPIO34) Mode1(UTXD3) Mode2() Mode3() PU
+GPIO35 = Mode0(GPIO35) Mode1(URXD2) Mode2(UCTS3) Mode3() PU
+GPIO36 = Mode0(GPIO36) Mode1(UTXD2) Mode2(URTS3) Mode3() PU
+GPIO37 = Mode0(GPIO37) Mode1(IRDA_RXD) Mode2(UCTS2) Mode3() PU
+GPIO38 = Mode0(GPIO38) Mode1(IRDA_TXD) Mode2(URTS2) Mode3() PU
+GPIO39 = Mode0(GPIO39) Mode1(IRDA_PDN) Mode2() Mode3() PU
+GPIO40 = Mode0(GPIO40) Mode1(ECS7#) Mode2() Mode3() PU
+
+GPIO41 = Mode0(GPIO41) Mode1(MIRQ) Mode2(13MHz) Mode3(6.5MHz) PU
+GPIO42 = Mode0(GPIO42) Mode1(MFIQ) Mode2() Mode3() PU
+GPIO43 = Mode0(GPIO43) Mode1(DAICLK) Mode2(TDMA_CK) Mode3(TRACLK) PU
+GPIO44 = Mode0(GPIO44) Mode1(DAIPCMOUT) Mode2(TDMA_D1) Mode3(TRASYNC) PD
+GPIO45 = Mode0(GPIO45) Mode1(DAIPCMIN) Mode2(TDMA_D2) Mode3(TRASD7) PU
+GPIO46 = Mode0(GPIO46) Mode1(DAISYNC) Mode2(BFEPRBO) Mode3(TRASD5) PU
+GPIO47 = Mode0(GPIO47) Mode1(DAIRST) Mode2(TDMA_FS) Mode3(TRASD6) PU
+
+[GPO]
+GPO0 = Mode0(GPO0) Mode1(SRCLKENA) Mode2() Mode3()
+GPO1 = Mode0(GPO1) Mode1(SRCLKENAN) Mode2() Mode3()
+GPO2 = Mode0(GPO2) Mode1(EPDN#) Mode2() Mode3()
+
+[EINT]
+EINT_COUNT = 8
+EINT_DEBOUNCE_TIME_COUNT = 4
+
+[ADC]
+ADC_COUNT = 7
+
+[Keypad]
+KEY_ROW = 6
+KEY_COLUMN = 7
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6219.fig b/mcu/custom/driver/drv/Drv_Tool/MT6219.fig
new file mode 100644
index 0000000..9c89441
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6219.fig
@@ -0,0 +1,83 @@
+[Chip Type]
+Chip = MT6219
+
+[GPIO]
+GPIO0 = Mode0(GPIO0) Mode1() Mode2(DSP_GPO3) Mode3() PD
+GPIO1 = Mode0(GPIO1) Mode1(DICK) Mode2() Mode3() PD
+GPIO2 = Mode0(GPIO2) Mode1(DID) Mode2() Mode3() PD
+GPIO3 = Mode0(GPIO3) Mode1(DIMS) Mode2() Mode3() PD
+GPIO4 = Mode0(GPIO4) Mode1(DSP_CLK) Mode2(DSPLCK) Mode3(TRASD4) PD
+GPIO5 = Mode0(GPIO5) Mode1(AHB_CLK) Mode2(DSPLD3) Mode3(TRASD3) PD
+GPIO6 = Mode0(GPIO6) Mode1(ARM_CLK) Mode2(DSPLD2) Mode3(TRASD2) PD
+GPIO7 = Mode0(GPIO7) Mode1(SLOW_CK) Mode2(DSPLD1) Mode3(TRASD1) PD
+GPIO8 = Mode0(GPIO8) Mode1(SCL) Mode2(DSPLD0) Mode3(TRASD0) PD
+GPIO9 = Mode0(GPIO9) Mode1(SDA) Mode2(DSPLSYNC) Mode3(TRARSYNC) PD
+GPIO10 = Mode0(GPIO10) Mode1(BPI_BUS6) Mode2() Mode3() PD
+
+GPIO11 = Mode0(GPIO11) Mode1(BPI_BUS7) Mode2() Mode3() PD
+GPIO12 = Mode0(GPIO12) Mode1(BPI_BUS8) Mode2(13MHz) Mode3(32KHz) PD
+GPIO13 = Mode0(GPIO13) Mode1(BPI_BUS9) Mode2(BSI_CS1) Mode3() PD
+GPIO14 = Mode0(GPIO14) Mode1(MCINS) Mode2() Mode3() PU
+GPIO15 = Mode0(GPIO15) Mode1(MCWP) Mode2() Mode3() PU
+GPIO16 = Mode0(GPIO16) Mode1(LSCK) Mode2(TDMA_CK) Mode3(TBTXEN) PD
+GPIO17 = Mode0(GPIO17) Mode1(LSA0) Mode2(TDMA_D1) Mode3(TDTIRQ) PD
+GPIO18 = Mode0(GPIO18) Mode1(LSDA) Mode2(TDMA_D0) Mode3(TCTIRQ2) PD
+GPIO19 = Mode0(GPIO19) Mode1(LSCE0#) Mode2(TDMA_FS) Mode3(TCTIRQ1) PU
+GPIO20 = Mode0(GPIO20) Mode1(LSCE1#) Mode2(LPCE2#) Mode3(TEVTVAL) PU
+
+GPIO21 = Mode0(GPIO21) Mode1(PWM1) Mode2(DSP_GPO0) Mode3(TBTXFS) PD
+GPIO22 = Mode0(GPIO22) Mode1(PWM2) Mode2(DSP_GPO1) Mode3(TBRXEN) PD
+GPIO23 = Mode0(GPIO23) Mode1(ALERTER) Mode2(DSP_GPO2) Mode3(BTRXFS) PD
+GPIO24 = Mode0(GPIO24) Mode1(LPCE1#) Mode2(DSP_TID0) Mode3(MCU_TID0) PU
+GPIO25 = Mode0(GPIO25) Mode1(NRNB) Mode2(DSP_TID1) Mode3(MCU_TID1) PU
+GPIO26 = Mode0(GPIO26) Mode1(NCLE) Mode2(DSP_TID2) Mode3(MCU_TID2) PD
+GPIO27 = Mode0(GPIO27) Mode1(NALE) Mode2(DSP_TID3) Mode3(MCU_TID3) PD
+GPIO28 = Mode0(GPIO28) Mode1(NWE#) Mode2(DSP_TID4) Mode3(MCU_DID) PU
+GPIO29 = Mode0(GPIO29) Mode1(NRE#) Mode2(DSP_TID5) Mode3(MCU_DFS) PU
+GPIO30 = Mode0(GPIO30) Mode1(NCE#) Mode2(DSP_TID6) Mode3(MCU_DCK) PU
+
+GPIO31 = Mode0(GPIO31) Mode1(SRCLKENAI) Mode2() Mode3() PD
+GPIO32 = Mode0(GPIO32) Mode1(SIMSEL) Mode2() Mode3() PD
+GPIO33 = Mode0(GPIO33) Mode1(URXD3) Mode2() Mode3() PU
+GPIO34 = Mode0(GPIO34) Mode1(UTXD3) Mode2() Mode3() PU
+GPIO35 = Mode0(GPIO35) Mode1(URXD2) Mode2(UCTS3) Mode3() PU
+GPIO36 = Mode0(GPIO36) Mode1(UTXD2) Mode2(URTS3) Mode3() PU
+GPIO37 = Mode0(GPIO37) Mode1(IRDA_RXD) Mode2(UCTS2) Mode3() PU
+GPIO38 = Mode0(GPIO38) Mode1(IRDA_TXD) Mode2(URTS2) Mode3() PU
+GPIO39 = Mode0(GPIO39) Mode1(IRDA_PDN) Mode2() Mode3() PU
+GPIO40 = Mode0(GPIO40) Mode1(ECS7#) Mode2() Mode3() PU
+
+GPIO41 = Mode0(GPIO41) Mode1(MIRQ) Mode2(13MHz) Mode3(32KHz) PU
+GPIO42 = Mode0(GPIO42) Mode1(MFIQ) Mode2() Mode3() PU
+GPIO43 = Mode0(GPIO43) Mode1(DAICLK) Mode2(DSPLD7) Mode3(TRACLK) PU
+GPIO44 = Mode0(GPIO44) Mode1(DAIPCMOUT) Mode2(DSPLD6) Mode3(TRASYNC) PD
+GPIO45 = Mode0(GPIO45) Mode1(DAIPCMIN) Mode2(DSPLD5) Mode3(TRASD7) PU
+GPIO46 = Mode0(GPIO46) Mode1(DAISYNC) Mode2(BFEPRBO) Mode3(TRASD5) PU
+GPIO47 = Mode0(GPIO47) Mode1(DAIRST) Mode2(DSPLD4) Mode3(TRASD6) PU
+GPIO48 = Mode0(GPIO48) Mode1(CMRST) Mode2() Mode3() Z
+GPIO49 = Mode0(GPIO49) Mode1(CMPDN) Mode2() Mode3() Z
+GPIO50 = Mode0(GPIO50) Mode1(CMDAT1) Mode2() Mode3() PD
+
+GPIO51 = Mode0(GPIO51) Mode1(CMDAT0) Mode2() Mode3() PD
+GPIO52 = Mode0(GPIO52) Mode1(ECS6#) Mode2() Mode3() PU
+GPIO53 = Mode0(GPIO53) Mode1(ECS5#) Mode2() Mode3() PU
+GPIO54 = Mode0(GPIO54) Mode1(ECS4#) Mode2() Mode3() PU
+
+
+[GPO]
+GPO0 = Mode0(GPO0) Mode1(SRCLKENA) Mode2() Mode3()
+GPO1 = Mode0(GPO1) Mode1(SRCLKENAN) Mode2() Mode3()
+GPO2 = Mode0(GPO2) Mode1(EPDN#) Mode2() Mode3()
+GPO3 = Mode0(GPO3) Mode1(EA24) Mode2() Mode3()
+GPO4 = Mode0(GPO4) Mode1(EA25) Mode2(13MHz) Mode3(32KHz)
+
+[EINT]
+EINT_COUNT = 8
+EINT_DEBOUNCE_TIME_COUNT = 4
+
+[ADC]
+ADC_COUNT = 7
+
+[Keypad]
+KEY_ROW = 6
+KEY_COLUMN = 7
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6223.fig b/mcu/custom/driver/drv/Drv_Tool/MT6223.fig
new file mode 100644
index 0000000..7ec94f3
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6223.fig
@@ -0,0 +1,76 @@
+[Chip Type]
+Chip = MT6223
+
+[GPIO]
+GPIO0 = Mode0(GPIO0) Mode1(LCD_D8) Mode2() Mode3() PD
+GPIO1 = Mode0(GPIO1) Mode1(LCD_D7) Mode2() Mode3() PD
+GPIO2 = Mode0(GPIO2) Mode1(LCD_D6) Mode2() Mode3() PD
+GPIO3 = Mode0(GPIO3) Mode1(LCD_D5) Mode2() Mode3() PD
+GPIO4 = Mode0(GPIO4) Mode1(LCD_D4) Mode2() Mode3() PD
+GPIO5 = Mode0(GPIO5) Mode1(LCD_D3) Mode2() Mode3() PD
+GPIO6 = Mode0(GPIO6) Mode1(LCD_D2) Mode2() Mode3() PD
+GPIO7 = Mode0(GPIO7) Mode1(LCD_D1) Mode2() Mode3() PD
+GPIO8 = Mode0(GPIO8) Mode1(LCD_RSTB) Mode2() Mode3() PU
+GPIO9 = Mode0(GPIO9) Mode1(LCD_WR_B) Mode2() Mode3() PU
+GPIO10 = Mode0(GPIO10) Mode1(LCD_RD_B) Mode2(LCD_SCLK) Mode3() PU
+
+GPIO11 = Mode0(GPIO11) Mode1(LCD_D0) Mode2(LCD_SDA) Mode3() PD
+GPIO12 = Mode0(GPIO12) Mode1(LCD_A0) Mode2(LCD_SA0) Mode3() PU
+GPIO13 = Mode0(GPIO13) Mode1(LCD_CS0_B) Mode2(LCD_SCE0_B) Mode3() PU
+GPIO14 = Mode0(GPIO14) Mode1(LCD_CS1_B) Mode2(LCD_SCE1_B) Mode3(EINT7) PU
+GPIO15 = Mode0(GPIO15) Mode1(DAICLK) Mode2(EDICK) Mode3() PU
+GPIO16 = Mode0(GPIO16) Mode1(DAIPCMOUT) Mode2(EDIDAT) Mode3() PD
+GPIO17 = Mode0(GPIO17) Mode1(DAIPCMIN) Mode2() Mode3() PU
+GPIO18 = Mode0(GPIO18) Mode1(DAIRST) Mode2() Mode3() PU
+GPIO19 = Mode0(GPIO19) Mode1(DAISYNC) Mode2(EDIWS) Mode3() PU
+GPIO20 = Mode0(GPIO20) Mode1(BPI_BUS6) Mode2(XADMUX) Mode3() Z
+
+GPIO21 = Mode0(GPIO21) Mode1(BPI_BUS7) Mode2(BSI_RFIN) Mode3(clk_out0) PD
+GPIO22 = Mode0(GPIO22) Mode1(BPI_BUS8) Mode2(KCOL5) Mode3(clk_out1) PU
+GPIO23 = Mode0(GPIO23) Mode1(BPI_BUS9) Mode2(BSI_CS1) Mode3(clk_out2) PD
+GPIO24 = Mode0(GPIO24) Mode1(ALERTER) Mode2() Mode3() PD
+GPIO25 = Mode0(GPIO25) Mode1(PWM) Mode2() Mode3() PD
+GPIO26 = Mode0(GPIO26) Mode1(JTRST_B) Mode2(EINT4) Mode3() PD
+GPIO27 = Mode0(GPIO27) Mode1(JTDI) Mode2(EINT5) Mode3() PU
+GPIO28 = Mode0(GPIO28) Mode1(JTMS) Mode2(EINT6) Mode3() PU
+GPIO29 = Mode0(GPIO29) Mode1(WATCHDOG) Mode2() Mode3() PD
+GPIO30 = Mode0(GPIO30) Mode1(EA0) Mode2(EA25) Mode3() PD
+
+GPIO31 = Mode0(GPIO31) Mode1(SRCLKENAI) Mode2(PWR_KEY) Mode3() PD
+GPIO32 = Mode0(GPIO32) Mode1(KCOL4) Mode2() Mode3() PU
+GPIO33 = Mode0(GPIO33) Mode1(KCOL3) Mode2() Mode3() PU
+GPIO34 = Mode0(GPIO34) Mode1(KCOL2) Mode2() Mode3() PU
+GPIO35 = Mode0(GPIO35) Mode1(KCOL1) Mode2() Mode3() PU
+GPIO36 = Mode0(GPIO36) Mode1(KCOL0) Mode2() Mode3() PU
+GPIO37 = Mode0(GPIO37) Mode1(KROW4) Mode2() Mode3() Z
+GPIO38 = Mode0(GPIO38) Mode1(KROW3) Mode2() Mode3() Z
+GPIO39 = Mode0(GPIO39) Mode1(KROW2) Mode2() Mode3() Z
+GPIO40 = Mode0(GPIO40) Mode1(KROW1) Mode2() Mode3() Z
+
+GPIO41 = Mode0(GPIO41) Mode1(KROW0) Mode2() Mode3() Z
+GPIO42 = Mode0(GPIO42) Mode1(EINT2) Mode2(MIRQ) Mode3() PU
+GPIO43 = Mode0(GPIO43) Mode1(EINT3) Mode2() Mode3() PU
+GPIO44 = Mode0(UTXD1) Mode1(GPIO44) Mode2() Mode3() PU
+GPIO45 = Mode0(GPIO45) Mode1(UCTS1_B) Mode2() Mode3(SCL) PU
+GPIO46 = Mode0(GPIO46) Mode1(URTS1_B) Mode2() Mode3(SDA) PU
+GPIO47 = Mode0(GPIO47) Mode1(UTXD3) Mode2(UCTS2_B) Mode3(clk_out3) PU
+GPIO48 = Mode0(GPIO48) Mode1(URXD3) Mode2(URTS2_B) Mode3(clk_out4) PU
+GPIO49 = Mode0(GPIO49) Mode1(URXD2) Mode2(clk_out5) Mode3() PU
+GPIO50 = Mode0(URXD1) Mode1(GPIO50) Mode2() Mode3() PU
+
+GPIO51 = Mode0(GPIO51) Mode1(UTXD2) Mode2() Mode3(VIBRATOREN) PU
+GPIO52 = Mode0(GPIO52) Mode1(MFIQ) Mode2(ECS3_B) Mode3() PU
+
+
+[GPO]
+
+[EINT]
+EINT_COUNT = 8
+EINT_DEBOUNCE_TIME_COUNT = 4
+
+[ADC]
+ADC_COUNT = 7
+
+[Keypad]
+KEY_ROW = 5
+KEY_COLUMN = 7
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6225.fig b/mcu/custom/driver/drv/Drv_Tool/MT6225.fig
new file mode 100644
index 0000000..a7df3a8
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6225.fig
@@ -0,0 +1,77 @@
+[Chip Type]
+Chip = MT6225
+
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1() MODE2() MODE3(EINT4) PU
+GPIO1 = MODE0(GPIO1) MODE1() MODE2() MODE3(EINT5) PU
+GPIO2 = MODE0(GPIO2) MODE1() MODE2(UCTS1) MODE3(EINT6) PU
+GPIO3 = MODE0(GPIO3) MODE1(BSI_RFIN) MODE2(URTS1) MODE3(EINT7) PU
+GPIO4 = MODE0(GPIO4) MODE1(DAIRST) MODE2(IRDA_PDN) MODE3(DSP_CLK) PU
+GPIO5 = MODE0(GPIO5) MODE1(EDICK) MODE2(26MHZ) MODE3(AHB_CLK) PD
+GPIO6 = MODE0(GPIO6) MODE1(EDIWS) MODE2(32KHZ) MODE3(ARM_CLK) PD
+GPIO7 = MODE0(GPIO7) MODE1(EDIDAT) MODE2() MODE3(SLOW_CLK) PD
+GPIO8 = MODE0(GPIO8) MODE1(SCL) MODE2() MODE3() PU
+GPIO9 = MODE0(GPIO9) MODE1(SDA) MODE2() MODE3() PU
+GPIO10= MODE0(GPIO10) MODE1(CMRST) MODE2(DRF_DATA) MODE3() PD
+GPIO11= MODE0(GPIO11) MODE1(CMPDN) MODE2(DRF_EN) MODE3() PD
+GPIO12= MODE0(GPIO12) MODE1(CMVREF) MODE2(MIRQ) MODE3() PD/PU
+GPIO13= MODE0(GPIO13) MODE1(CMHREF) MODE2(MFIQ) MODE3() PD/PU
+GPIO14= MODE0(GPIO14) MODE1(CMMCLK) MODE2(26MHZ) MODE3(6.5MHZ) PD
+GPIO15= MODE0(GPIO15) MODE1(CMDAT7) MODE2(MCDA7) MODE3() PD
+GPIO16= MODE0(GPIO16) MODE1(CMDAT6) MODE2(MCDA6) MODE3(DICK) PD
+GPIO17= MODE0(GPIO17) MODE1(CMDAT5) MODE2(MCDA5) MODE3(DID) PD
+GPIO18= MODE0(GPIO18) MODE1(CMDAT4) MODE2(MCDA4) MODE3(DIMS) PD
+GPIO19= MODE0(GPIO19) MODE1(CMDAT3) MODE2(DSP_GPO3) MODE3(TBTXEN) PD
+GPIO20= MODE0(GPIO20) MODE1(CMDAT2) MODE2(DSP_GPO2) MODE3(TBTXFS) PD
+GPIO21= MODE0(GPIO21) MODE1(CMDAT1) MODE2(DSP_GPO1) MODE3(TBRXEN) PD
+GPIO22= MODE0(GPIO22) MODE1(CMDAT0) MODE2(DSP_GPO0) MODE3(TBRXFS) PD
+GPIO23= MODE0() MODE1() MODE2() MODE3() PD/PU
+GPIO24= MODE0() MODE1() MODE2() MODE3() PD/PU
+GPIO25= MODE0(GPIO25) MODE1(BPI_BUS6) MODE2(PWM1) MODE3(13MHZ) PD
+GPIO26= MODE0(GPIO26) MODE1(BPI_BUS7) MODE2(PWM2) MODE3(32KHZ) PD
+GPIO27= MODE0(GPIO27) MODE1(BPI_BUS8) MODE2(ALERTER) MODE3(26MHZ) PD
+GPIO28= MODE0(GPIO28) MODE1(BPI_BUS9) MODE2(BSI_CS1) MODE3() PD
+GPIO29= MODE0(GPIO29) MODE1(LSCK) MODE2(TDMA_CK) MODE3(DSP_TID0) PU
+GPIO30= MODE0(GPIO30) MODE1(LSA0) MODE2(TDMA_D1) MODE3(TDTIRQ) PU
+GPIO31= MODE0(GPIO31) MODE1(LSDA) MODE2(TDMA_D0) MODE3(TCTIRQ2) PU
+GPIO32= MODE0(GPIO32) MODE1(LSCE0B) MODE2(TDMA_FS) MODE3(TCTIRQ1) PU
+GPIO33= MODE0(GPIO33) MODE1(LSCE1B) MODE2(LPCE2B) MODE3(TEVTVAL) PU
+GPIO34= MODE0(GPIO34) MODE1(LPCE1B) MODE2(NCE1B) MODE3() PU
+GPIO35= MODE0(GPIO35) MODE1(NLD17) MODE2(KCOL5) MODE3(VPP65) PD
+GPIO36= MODE0(GPIO36) MODE1(NLD16) MODE2(KCOL6) MODE3() PD
+GPIO37= MODE0(GPIO37) MODE1(NRNB) MODE2(DSP_TID1) MODE3() PU
+GPIO38= MODE0(GPIO38) MODE1(NCLE) MODE2(DSP_TID2) MODE3() PD
+GPIO39= MODE0(GPIO39) MODE1(NALE) MODE2(DSP_TID3) MODE3() PD
+GPIO40= MODE0(GPIO40) MODE1(NWEB) MODE2(DSP_TID4) MODE3() PU
+GPIO41= MODE0(GPIO41) MODE1(NREB) MODE2(DSP_TID5) MODE3() PU
+GPIO42= MODE0(GPIO42) MODE1(NCEB0) MODE2(DSP_TID6) MODE3() PU
+GPIO43= MODE0(GPIO43) MODE1(SRCLKENAI) MODE2() MODE3() PD
+GPIO44= MODE0(GPIO44) MODE1(MCWP) MODE2() MODE3() PU
+GPIO45= MODE0(GPIO45) MODE1(MCINS) MODE2() MODE3() PU
+GPIO46= MODE0(GPIO46) MODE1(SIMSEL) MODE2() MODE3() PD
+GPIO47= MODE0(GPIO47) MODE1(URXD2) MODE2(UCTS3) MODE3(IRDA_RXD) PU
+GPIO48= MODE0(GPIO48) MODE1(UTXD2) MODE2(URTS3) MODE3(IRDA_TXD) PU
+GPIO49= MODE0(GPIO49) MODE1(URXD3) MODE2(UCTS2) MODE3() PU
+GPIO50= MODE0(GPIO50) MODE1(UTXD3) MODE2(URTS2) MODE3() PU
+GPIO51= MODE0(GPIO51) MODE1(DAICLK) MODE2() MODE3() PU
+GPIO52= MODE0(GPIO52) MODE1(DAIPCMOUT) MODE2() MODE3() PD
+GPIO53= MODE0(GPIO53) MODE1(DAIPCMIN) MODE2() MODE3() PU
+GPIO54= MODE0(GPIO54) MODE1(DAISYNC) MODE2() MODE3() PU
+
+[GPO]
+GPO0 = MODE0(GPO0) MODE1(SRCLKENA) MODE2() MODE3()
+GPO1 = MODE0(GPO1) MODE1(EA24) MODE2(26MHZ) MODE3(32KHZ)
+GPO2 = MODE0(GPO2) MODE1(EA25) MODE2(32KHZ) MODE3(26MHZ)
+GPO3 = MODE0(GPO3) MODE1(EPDN_B) MODE2(6.5MHZ) MODE3(26MHZ)
+
+[EINT]
+EINT_COUNT=8
+EINT_DEBOUNE_TIME_COUNT=4
+
+[ADC]
+ADC_COUNT=7
+
+[KEYPAD]
+KEY_ROW=6
+KEY_COLUMN=7
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6227.fig b/mcu/custom/driver/drv/Drv_Tool/MT6227.fig
new file mode 100644
index 0000000..0f03088
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6227.fig
@@ -0,0 +1,85 @@
+[Chip Type]
+Chip = MT6227
+
+[GPIO]
+GPIO0 = Mode0(GPIO0) Mode1(DICL) Mode2(DSP_GPO3) Mode3() PD
+GPIO1 = Mode0(GPIO1) Mode1(BSI_RFIN) Mode2() Mode3() PD
+GPIO2 = Mode0(GPIO2) Mode1(DID) Mode2() Mode3() PD
+GPIO3 = Mode0(GPIO3) Mode1(DIMS) Mode2() Mode3() PD
+GPIO4 = Mode0(GPIO4) Mode1(DSP_CLK) Mode2(DSPLCK) Mode3(EDICK) PD
+GPIO5 = Mode0(GPIO5) Mode1(AHB_CLK) Mode2(DSPLD3) Mode3(EDIWS) PD
+GPIO6 = Mode0(GPIO6) Mode1(ARM_CLK) Mode2(DSPLD2) Mode3(CMFLASH) PD
+GPIO7 = Mode0(GPIO7) Mode1(SLOW_CK) Mode2(DSPLD1) Mode3(EDIDAT) PD
+GPIO8 = Mode0(GPIO8) Mode1(SCL) Mode2(DSPLD0) Mode3() PD
+GPIO9 = Mode0(GPIO9) Mode1(SDA) Mode2(DSPLSYNC) Mode3() PD
+GPIO10 = Mode0(GPIO10) Mode1(BPI_BUS6) Mode2() Mode3() PD
+
+GPIO11 = Mode0(GPIO11) Mode1(BPI_BUS7) Mode2(65MHz) Mode3(26MHz) PD
+GPIO12 = Mode0(GPIO12) Mode1(BPI_BUS8) Mode2(13MHz) Mode3(32KHz) PD
+GPIO13 = Mode0(GPIO13) Mode1(BPI_BUS9) Mode2(BSI_CS1) Mode3() PD
+GPIO14 = Mode0(GPIO14) Mode1(MCINS) Mode2() Mode3() PU
+GPIO15 = Mode0(GPIO15) Mode1(MCWP) Mode2() Mode3() PU
+GPIO16 = Mode0(GPIO16) Mode1(LSCK) Mode2(TDMA_CK) Mode3(TBTXEN) PU
+GPIO17 = Mode0(GPIO17) Mode1(LSA0) Mode2(TDMA_D1) Mode3(TDTIRQ) PU
+GPIO18 = Mode0(GPIO18) Mode1(LSDA) Mode2(TDMA_D0) Mode3(TCTIRQ2) PU
+GPIO19 = Mode0(GPIO19) Mode1(LSCE0#) Mode2(TDMA_FS) Mode3(TCTIRQ1) PU
+GPIO20 = Mode0(GPIO20) Mode1(LSCE1#) Mode2(LPCE2#) Mode3(TEVTVAL) PU
+
+GPIO21 = Mode0(GPIO21) Mode1(PWM1) Mode2(DSP_GPO0) Mode3(TBTXFS) PD
+GPIO22 = Mode0(GPIO22) Mode1(PWM2) Mode2(DSP_GPO1) Mode3(TBRXEN) PD
+GPIO23 = Mode0(GPIO23) Mode1(ALERTER) Mode2(DSP_GPO2) Mode3(BTRXFS) PD
+GPIO24 = Mode0(GPIO24) Mode1(LPCE1#) Mode2(NCE1#) Mode3(MCU_TID0) PU
+GPIO25 = Mode0(GPIO25) Mode1(NRNB) Mode2(DSP_TID1) Mode3(MCU_TID1) PU
+GPIO26 = Mode0(GPIO26) Mode1(NCLE) Mode2(DSP_TID2) Mode3(MCU_TID2) PD
+GPIO27 = Mode0(GPIO27) Mode1(NALE) Mode2(DSP_TID3) Mode3(MCU_TID3) PD
+GPIO28 = Mode0(GPIO28) Mode1(NWE#) Mode2(DSP_TID4) Mode3(MCU_DID) PU
+GPIO29 = Mode0(GPIO29) Mode1(NRE#) Mode2(DSP_TID5) Mode3(MCU_DFS) PU
+GPIO30 = Mode0(GPIO30) Mode1(NCE#) Mode2(DSP_TID6) Mode3(MCU_DCK) PU
+
+GPIO31 = Mode0(GPIO31) Mode1(SRCLKENAI) Mode2() Mode3() PD
+GPIO32 = Mode0(GPIO32) Mode1(SIMSEL) Mode2() Mode3() PD
+GPIO33 = Mode0(GPIO33) Mode1(URXD3) Mode2(EINT7) Mode3() PU
+GPIO34 = Mode0(GPIO34) Mode1(UTXD3) Mode2(EINT5) Mode3() PU
+GPIO35 = Mode0(GPIO35) Mode1(URXD2) Mode2(UCTS3) Mode3(EINT6) PU
+GPIO36 = Mode0(GPIO36) Mode1(UTXD2) Mode2(URTS3) Mode3(EINT4) PU
+GPIO37 = Mode0(GPIO37) Mode1(IRDA_RXD) Mode2(UCTS2) Mode3() PU
+GPIO38 = Mode0(GPIO38) Mode1(IRDA_TXD) Mode2(URTS2) Mode3() PU
+GPIO39 = Mode0(GPIO39) Mode1(IRDA_PDN) Mode2() Mode3() PU
+GPIO40 = Mode0(GPIO40) Mode1(ECS7#) Mode2() Mode3() PU
+
+GPIO41 = Mode0(GPIO41) Mode1(MIRQ) Mode2(13MHz) Mode3(32KHz) PU
+GPIO42 = Mode0(GPIO42) Mode1(MFIQ) Mode2() Mode3() PU
+GPIO43 = Mode0(GPIO43) Mode1(DAICLK) Mode2(DSPLD7) Mode3() PU
+GPIO44 = Mode0(GPIO44) Mode1(DAIPCMOUT) Mode2(DSPLD6) Mode3() PD
+GPIO45 = Mode0(GPIO45) Mode1(DAIPCMIN) Mode2(DSPLD5) Mode3() PU
+GPIO46 = Mode0(GPIO46) Mode1(DAISYNC) Mode2(BFEPRBO) Mode3() PU
+GPIO47 = Mode0(GPIO47) Mode1(DAIRST) Mode2(DSPLD4) Mode3() PU
+GPIO48 = Mode0(GPIO48) Mode1(CMRST) Mode2() Mode3() PD
+GPIO49 = Mode0(GPIO49) Mode1(CMPDN) Mode2() Mode3() PD
+GPIO50 = Mode0(GPIO50) Mode1(CMDAT1) Mode2(MCDA5) Mode3() PD
+
+GPIO51 = Mode0(GPIO51) Mode1(CMDAT0) Mode2(MCDA4) Mode3() PD
+GPIO52 = Mode0(GPIO52) Mode1(ECS6#) Mode2() Mode3() PU
+GPIO53 = Mode0(GPIO53) Mode1(ECS5#) Mode2() Mode3() PU
+GPIO54 = Mode0(GPIO54) Mode1(ECS4#) Mode2() Mode3() PU
+GPIO55 = Mode0(GPIO55) Mode1(NLD16) Mode2(MCDA6) Mode3() PD
+GPIO56 = Mode0(GPIO56) Mode1(NLD17) Mode2(MCDA7) Mode3(DSP_TID0) PD
+
+
+[GPO]
+GPO0 = Mode0(GPO0) Mode1(SRCLKENA) Mode2() Mode3()
+GPO1 = Mode0(GPO1) Mode1(SRCLKENAN) Mode2() Mode3()
+GPO2 = Mode0(GPO2) Mode1(EPDN#) Mode2(6.5MHz) Mode3(26MHz)
+GPO3 = Mode0(GPO3) Mode1(EA24) Mode2() Mode3()
+GPO4 = Mode0(GPO4) Mode1(EA25) Mode2(13MHz) Mode3(32KHz)
+
+[EINT]
+EINT_COUNT = 8
+EINT_DEBOUNCE_TIME_COUNT = 4
+
+[ADC]
+ADC_COUNT = 7
+
+[Keypad]
+KEY_ROW = 6
+KEY_COLUMN = 7
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6228.fig b/mcu/custom/driver/drv/Drv_Tool/MT6228.fig
new file mode 100644
index 0000000..39861cf
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6228.fig
@@ -0,0 +1,95 @@
+[Chip Type]
+Chip = MT6228
+
+[GPIO]
+GPIO0 = Mode0(GPIO0) Mode1(CMFLASH) Mode2() Mode3(DSP_TID5) PD
+GPIO1 = Mode0(GPIO1) Mode1(BSI_RFIN) Mode2() Mode3() PD
+GPIO2 = Mode0(GPIO2) Mode1(SCL) Mode2() Mode3() PU
+GPIO3 = Mode0(GPIO3) Mode1(SDA) Mode2() Mode3() PU
+GPIO4 = Mode0(GPIO4) Mode1(EDICK) Mode2(URXD2) Mode3(SWDBGD7) Z
+GPIO5 = Mode0(GPIO5) Mode1(EDIWS) Mode2(UTXD2) Mode3(SWDBGD6) Z
+GPIO6 = Mode0(GPIO6) Mode1(EDIDAT) Mode2() Mode3(SWDBGD5) Z
+GPIO7 = Mode0(GPIO7) Mode1() Mode2(USBVBUSON) Mode3(SWDBGD4) Z
+GPIO8 = Mode0(GPIO8) Mode1(32kHz) Mode2(USBVBUSCHG) Mode3(SWDBGF) Z
+GPIO9 = Mode0(GPIO9) Mode1(26MHz) Mode2(13MHz) Mode3(SWDBGE) Z
+GPIO10 = Mode0(GPIO10) Mode1(NLD16) Mode2(MCDA5) Mode3(DID) PD
+GPIO11 = Mode0(GPIO11) Mode1(NLD17) Mode2(MCDA4) Mode3(DSP_TID1) PD
+GPIO12 = Mode0(GPIO12) Mode1(CMRST) Mode2() Mode3() PD
+GPIO13 = Mode0(GPIO13) Mode1(CMPDN) Mode2() Mode3() PD
+GPIO14 = Mode0(GPIO14) Mode1(CMDAT1) Mode2(MCDA6) Mode3() PD
+GPIO15 = Mode0(GPIO15) Mode1(CMDAT0) Mode2(MCDA7) Mode3() PD
+GPIO16 = Mode0(GPIO16) Mode1(BPI_BUS6) Mode2() Mode3() PD
+GPIO17 = Mode0(GPIO17) Mode1(BPI_BUS7) Mode2(13MHz) Mode3(26MHz) PD
+GPIO18 = Mode0(GPIO18) Mode1(BPI_BUS8) Mode2(6.5MHz) Mode3(32KHz) PD
+GPIO19 = Mode0(GPIO19) Mode1(BPI_BUS9) Mode2(BSI_CS1) Mode3(BFEPRBO) PD
+GPIO20 = Mode0(GPIO20) Mode1(LSCK) Mode2(TDMA_CK) Mode3(TBTXEN) PU
+GPIO21 = Mode0(GPIO21) Mode1(LSA0) Mode2(TDMA_D1) Mode3(TDTIRQ) PU
+GPIO22 = Mode0(GPIO22) Mode1(LSDA) Mode2(TDMA_D0) Mode3(TCTIRQ2) PU
+GPIO23 = Mode0(GPIO23) Mode1(LSCE0#) Mode2(TDMA_FS) Mode3(TCTIRQ1) PU
+GPIO24 = Mode0(GPIO24) Mode1(LSCE1#) Mode2(LPCE2#) Mode3(TEVTVAL) PU
+GPIO25 = Mode0(GPIO25) Mode1(LPCE1#) Mode2(NCE1#) Mode3(DSP_TID0) PU
+GPIO26 = Mode0(NRNB) Mode1(GPIO26) Mode2(USBSESSVLD) Mode3(SWDBGD2) PU
+GPIO27 = Mode0(NCLE) Mode1(GPIO27) Mode2(USBVBUSVLD) Mode3(SWDBGD1) PD
+GPIO28 = Mode0(NALE) Mode1(GPIO28) Mode2(USBSESSEND) Mode3(SWDBGD0) PD
+GPIO29 = Mode0(NWE#) Mode1(GPIO29) Mode2() Mode3() PU
+GPIO30 = Mode0(NRE#) Mode1(GPIO30) Mode2(USBVBUSDSC) Mode3(SWDBGCK) PU
+GPIO31 = Mode0(NCE#) Mode1(GPIO31) Mode2() Mode3() PU
+GPIO32 = Mode0(GPIO32) Mode1(PWM1) Mode2(TBTXFS) Mode3(DSP_TID2) PD
+GPIO33 = Mode0(GPIO33) Mode1(PWM2) Mode2(TBRXEN) Mode3(DSP_TID3) PD
+GPIO34 = Mode0(GPIO34) Mode1(ALERTER) Mode2(TBRXFS) Mode3(DSP_TID4) PD
+GPIO35 = Mode0(GPIO35) Mode1(SRCLKENAI) Mode2() Mode3() PD
+GPIO36 = Mode0(GPIO36) Mode1(MIRQ) Mode2(6.5MHz) Mode3(32KHz) PU
+GPIO37 = Mode0(GPIO37) Mode1(URXD2) Mode2(UCTS3) Mode3() PU
+GPIO38 = Mode0(GPIO38) Mode1(UTXD2) Mode2(URTS3) Mode3() PU
+GPIO39 = Mode0(GPIO39) Mode1(URXD3) Mode2() Mode3() PU
+GPIO40 = Mode0(GPIO40) Mode1(UTXD3) Mode2() Mode3(DSP_TID6) PU
+GPIO41 = Mode0(GPIO41) Mode1(IRDA_RXD) Mode2(UCTS2) Mode3(SWDBG15) PU
+GPIO42 = Mode0(GPIO42) Mode1(IRDA_TXD) Mode2(URTS2) Mode3(SWDBG14) PU
+GPIO43 = Mode0(GPIO43) Mode1(IRDA_PDN) Mode2() Mode3(SWDBG13) PU
+GPIO44 = Mode0(KROW5) Mode1(GPIO44) Mode2(ARM_CK) Mode3(TV_CK) Z
+GPIO45 = Mode0(KROW4) Mode1(GPIO45) Mode2(AHB_CK) Mode3(AHB_CK) Z
+GPIO46 = Mode0(KROW3) Mode1(GPIO46) Mode2(FTV_CK) Mode3(SLOW_CK) Z
+GPIO47 = Mode0(KROW2) Mode1(GPIO47) Mode2(FMCU_CK) Mode3(FUSB_CK) Z
+GPIO48 = Mode0(GPIO48) Mode1(SIMSEL) Mode2() Mode3() PD
+GPIO49 = Mode0(GPIO49) Mode1(DAICLK) Mode2() Mode3(SWDBGD12) PU
+GPIO50 = Mode0(GPIO50) Mode1(DAIPCMOUT) Mode2() Mode3(SWDBGD11) PD
+GPIO51 = Mode0(GPIO51) Mode1(DAIPCMIN) Mode2() Mode3(SWDBGD10) PU
+GPIO52 = Mode0(GPIO52) Mode1(DAIRST) Mode2() Mode3(SWDBG9) PU
+GPIO53 = Mode0(GPIO53) Mode1(DAISYNC) Mode2() Mode3(SWDBG8) PU
+GPIO54 = Mode0(NLD8) Mode1(GPIO54) Mode2() Mode3(SWDBGA1) PD
+GPIO55 = Mode0(NLD9) Mode1(GPIO55) Mode2() Mode3(SWDBGA0) PD
+GPIO56 = Mode0(NLD10) Mode1(GPIO56) Mode2() Mode3(SWDBGROE) PD
+GPIO57 = Mode0(NLD11) Mode1(GPIO57) Mode2() Mode3(SWDBGRD) PD
+GPIO58 = Mode0(NLD12) Mode1(GPIO58) Mode2() Mode3(SWDBGWR) PD
+GPIO59 = Mode0(NLD13) Mode1(GPIO59) Mode2() Mode3(SWDBGPKT) PD
+GPIO60 = Mode0(NLD14) Mode1(GPIO60) Mode2() Mode3(DICK) PD
+GPIO61 = Mode0(NLD15) Mode1(GPIO61) Mode2() Mode3(DMS) PD
+GPIO62 = Mode0(CMDAT2) Mode1(GPIO62) Mode2() Mode3() PD
+GPIO63 = Mode0(GPIO63) Mode1(MFIQ) Mode2(USBID) Mode3(SWDBGD3) PU
+GPIO64 = Mode0(NULL) Mode1() Mode2() Mode3() PD
+GPIO65 = Mode0(NULL) Mode1() Mode2() Mode3() PD
+GPIO66 = Mode0(NULL) Mode1() Mode2() Mode3() PD
+GPIO67 = Mode0(NULL) Mode1() Mode2() Mode3() PD
+GPIO68 = Mode0(CMDAT3) Mode1(GPIO68) Mode2() Mode3() PD
+GPIO69 = Mode0(CMDAT4) Mode1(GPIO69) Mode2() Mode3() PD
+GPIO70 = Mode0(CMDAT5) Mode1(GPIO70) Mode2() Mode3() PD
+GPIO71 = Mode0(CMDAT6) Mode1(GPIO71) Mode2() Mode3() PD
+GPIO72 = Mode0(CMDAT7) Mode1(GPIO72) Mode2() Mode3() PD
+GPIO73 = Mode0(CMDAT8) Mode1(GPIO73) Mode2() Mode3() PD
+GPIO74 = Mode0(CMDAT9) Mode1(GPIO74) Mode2() Mode3() PD
+
+[GPO]
+GPO0 = Mode0(GPO0) Mode1(SRCLKENAN) Mode2() Mode3()
+GPO1 = Mode0(GPO1) Mode1(SRCLKENA) Mode2() Mode3()
+GPO2 = Mode0(GPO2) Mode1(EPDN#) Mode2(26MHz) Mode3(13MHz)
+
+[EINT]
+EINT_COUNT = 8
+EINT_DEBOUNCE_TIME_COUNT = 4
+
+[ADC]
+ADC_COUNT = 7
+
+[Keypad]
+KEY_ROW = 6
+KEY_COLUMN = 7
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6229.fig b/mcu/custom/driver/drv/Drv_Tool/MT6229.fig
new file mode 100644
index 0000000..46ea0a2
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6229.fig
@@ -0,0 +1,95 @@
+[Chip Type]
+Chip = MT6229
+
+[GPIO]
+GPIO0 = Mode0(GPIO0) Mode1(CMFLASH) Mode2() Mode3(D2_TID5) PD
+GPIO1 = Mode0(GPIO1) Mode1(BSI_RFIN) Mode2() Mode3() PD
+GPIO2 = Mode0(GPIO2) Mode1(SCL) Mode2() Mode3() PU
+GPIO3 = Mode0(GPIO3) Mode1(SDA) Mode2() Mode3() PU
+GPIO4 = Mode0(GPIO4) Mode1(EDICK) Mode2(URXD2) Mode3(SWDBGD7) Z
+GPIO5 = Mode0(GPIO5) Mode1(EDIWS) Mode2(UTXD2) Mode3(SWDBGD6) Z
+GPIO6 = Mode0(GPIO6) Mode1(EDIDAT) Mode2() Mode3(SWDBGD5) Z
+GPIO7 = Mode0(GPIO7) Mode1() Mode2(USBVBUSON) Mode3(SWDBGD4) Z
+GPIO8 = Mode0(GPIO8) Mode1(32kHz) Mode2(USBVBUSCHG) Mode3(SWDBGF) Z
+GPIO9 = Mode0(GPIO9) Mode1(26MHz) Mode2(13MHz) Mode3(SWDBGE) Z
+GPIO10 = Mode0(GPIO10) Mode1(NLD16) Mode2(MCDA5) Mode3(D2ID) PD
+GPIO11 = Mode0(GPIO11) Mode1(NLD17) Mode2(MCDA4) Mode3(D2_TID1) PD
+GPIO12 = Mode0(GPIO12) Mode1(CMRST) Mode2() Mode3(D1_TID0) PD
+GPIO13 = Mode0(GPIO13) Mode1(CMPDN) Mode2() Mode3(D1_TID1) PD
+GPIO14 = Mode0(GPIO14) Mode1(CMDAT1) Mode2() Mode3(D1IMS) Z
+GPIO15 = Mode0(GPIO15) Mode1(CMDAT0) Mode2() Mode3(D1ICK) Z
+GPIO16 = Mode0(GPIO16) Mode1(BPI_BUS6) Mode2() Mode3() PD
+GPIO17 = Mode0(GPIO17) Mode1(BPI_BUS7) Mode2(13MHz) Mode3(26MHz) PD
+GPIO18 = Mode0(GPIO18) Mode1(BPI_BUS8) Mode2(6.5MHz) Mode3(32KHz) PD
+GPIO19 = Mode0(GPIO19) Mode1(BPI_BUS9) Mode2(BSI_CS1) Mode3(BFEPRBO) PD
+GPIO20 = Mode0(GPIO20) Mode1(LSCK) Mode2(TDMA_CK) Mode3(TBTXEN) PU
+GPIO21 = Mode0(GPIO21) Mode1(LSA0) Mode2(TDMA_D1) Mode3(TDTIRQ) PU
+GPIO22 = Mode0(GPIO22) Mode1(LSDA) Mode2(TDMA_D0) Mode3(TCTIRQ2) PU
+GPIO23 = Mode0(GPIO23) Mode1(LSCE0#) Mode2(TDMA_FS) Mode3(TCTIRQ1) PU
+GPIO24 = Mode0(GPIO24) Mode1(LSCE1#) Mode2(LPCE2#) Mode3(TEVTVAL) PU
+GPIO25 = Mode0(GPIO25) Mode1(LPCE1#) Mode2(NCE1#) Mode3(D2_TID0) PU
+GPIO26 = Mode0(NRNB) Mode1(GPIO26) Mode2(USBSESSVLD) Mode3(SWDBGD2) PU
+GPIO27 = Mode0(NCLE) Mode1(GPIO27) Mode2(USBVBUSVLD) Mode3(SWDBGD1) PD
+GPIO28 = Mode0(NALE) Mode1(GPIO28) Mode2(USBSESSEND) Mode3(SWDBGD0) PD
+GPIO29 = Mode0(NWE#) Mode1(GPIO29) Mode2() Mode3() PU
+GPIO30 = Mode0(NRE#) Mode1(GPIO30) Mode2(USBVBUSDSC) Mode3(SWDBGCK) PU
+GPIO31 = Mode0(NCE#) Mode1(GPIO31) Mode2() Mode3() PU
+GPIO32 = Mode0(GPIO32) Mode1(PWM1) Mode2(TBTXFS0) Mode3(DSP_TID2) PD
+GPIO33 = Mode0(GPIO33) Mode1(PWM2) Mode2(TBRXEN) Mode3(DSP_TID3) PD
+GPIO34 = Mode0(GPIO34) Mode1(ALERTER) Mode2(TBRXFS) Mode3(DSP_TID4) PD
+GPIO35 = Mode0(GPIO35) Mode1(SRCLKENAI) Mode2() Mode3() PD
+GPIO36 = Mode0(GPIO36) Mode1(MIRQ) Mode2(6.5MHz) Mode3(32KHz) PU
+GPIO37 = Mode0(GPIO37) Mode1(URXD2) Mode2(UCTS3) Mode3() PU
+GPIO38 = Mode0(GPIO38) Mode1(UTXD2) Mode2(URTS3) Mode3() PU
+GPIO39 = Mode0(GPIO39) Mode1(URXD3) Mode2() Mode3(D1ID) PU
+GPIO40 = Mode0(GPIO40) Mode1(UTXD3) Mode2() Mode3(D2_TID6) PU
+GPIO41 = Mode0(GPIO41) Mode1(IRDA_RXD) Mode2(UCTS2) Mode3(SWDBG15) PU
+GPIO42 = Mode0(GPIO42) Mode1(IRDA_TXD) Mode2(URTS2) Mode3(SWDBG14) PU
+GPIO43 = Mode0(GPIO43) Mode1(IRDA_PDN) Mode2() Mode3(SWDBG13) PU
+GPIO44 = Mode0(KROW5) Mode1(GPIO44) Mode2(ARM_CK) Mode3(TV_CK) Z
+GPIO45 = Mode0(KROW4) Mode1(GPIO45) Mode2(AHB_CK) Mode3(DSP_CK) Z
+GPIO46 = Mode0(KROW3) Mode1(GPIO46) Mode2(FTV_CK) Mode3(SLOW_CK) Z
+GPIO47 = Mode0(KROW2) Mode1(GPIO47) Mode2(FMCU_CK) Mode3(FUSB_CK) Z
+GPIO48 = Mode0(GPIO48) Mode1(SIMSEL) Mode2() Mode3() PD
+GPIO49 = Mode0(GPIO49) Mode1(DAICLK) Mode2() Mode3(SWDBGD12) PU
+GPIO50 = Mode0(GPIO50) Mode1(DAIPCMOUT) Mode2() Mode3(SWDBGD11) PD
+GPIO51 = Mode0(GPIO51) Mode1(DAIPCMIN) Mode2() Mode3(SWDBGD10) PU
+GPIO52 = Mode0(GPIO52) Mode1(DAIRST) Mode2() Mode3(SWDBG9) PU
+GPIO53 = Mode0(GPIO53) Mode1(DAISYNC) Mode2() Mode3(SWDBG8) PU
+GPIO54 = Mode0(NLD8) Mode1(GPIO54) Mode2(TBTXEN1) Mode3(SWDBGA1) PD
+GPIO55 = Mode0(NLD9) Mode1(GPIO55) Mode2(TBTXEN2) Mode3(SWDBGA0) PD
+GPIO56 = Mode0(NLD10) Mode1(GPIO56) Mode2(TBTXEN3) Mode3(SWDBGROE) PD
+GPIO57 = Mode0(NLD11) Mode1(GPIO57) Mode2(TBTXFS1) Mode3(SWDBGRD) PD
+GPIO58 = Mode0(NLD12) Mode1(GPIO58) Mode2(TBTXFS2) Mode3(SWDBGWR) PD
+GPIO59 = Mode0(NLD13) Mode1(GPIO59) Mode2(TBTXFS3) Mode3(SWDBGPKT) PD
+GPIO60 = Mode0(NLD14) Mode1(GPIO60) Mode2() Mode3(D2ICK) PD
+GPIO61 = Mode0(NLD15) Mode1(GPIO61) Mode2() Mode3(D2IMS) PD
+GPIO62 = Mode0(CMDAT2) Mode1(GPIO62) Mode2() Mode3() PD
+GPIO63 = Mode0(GPIO63) Mode1(MFIQ) Mode2(USBID) Mode3(SWDBGD3) PU
+GPIO64 = Mode0() Mode1() Mode2() Mode3() Z
+GPIO65 = Mode0() Mode1() Mode2() Mode3() Z
+GPIO66 = Mode0() Mode1() Mode2() Mode3() Z
+GPIO67 = Mode0() Mode1() Mode2() Mode3() Z
+GPIO68 = Mode0(CMDAT3) Mode1(GPIO68) Mode2() Mode3() PD
+GPIO69 = Mode0(CMDAT4) Mode1(GPIO69) Mode2() Mode3() PD
+GPIO70 = Mode0(CMDAT5) Mode1(GPIO70) Mode2() Mode3() PD
+GPIO71 = Mode0(CMDAT6) Mode1(GPIO71) Mode2() Mode3() PD
+GPIO72 = Mode0(CMDAT7) Mode1(GPIO72) Mode2() Mode3() PD
+GPIO73 = Mode0(CMDAT8) Mode1(GPIO73) Mode2() Mode3() PD
+GPIO74 = Mode0(CMDAT9) Mode1(GPIO74) Mode2() Mode3() PD
+
+[GPO]
+GPO0 = Mode0(GPO0) Mode1(SRCLKENA) Mode2() Mode3()
+GPO1 = Mode0(GPO1) Mode1(SRCLKENAN) Mode2() Mode3()
+GPO2 = Mode0(GPO2) Mode1(EPDN#) Mode2(26MHz) Mode3(13MHz)
+
+[EINT]
+EINT_COUNT = 9
+EINT_DEBOUNCE_TIME_COUNT = 9
+
+[ADC]
+ADC_COUNT = 7
+
+[Keypad]
+KEY_ROW = 6
+KEY_COLUMN = 7
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6235.fig b/mcu/custom/driver/drv/Drv_Tool/MT6235.fig
new file mode 100644
index 0000000..39367c7
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6235.fig
@@ -0,0 +1,97 @@
+[Chip Type]
+Chip = MT6235
+GPIO_Pull_Sel=1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(CMRST) MODE2(CLKM0) MODE3(DSP_GPO0) PUPD
+GPIO1 = MODE0(GPIO1) MODE1(CMPDN) MODE2() MODE3(DSP_GPO1) PUPD
+GPIO2 = MODE0(GPIO2) MODE1(CMVREF) MODE2(TBTXEN) MODE3(D1_TID0) PUPD
+GPIO3 = MODE0(GPIO3) MODE1(CMHREF) MODE2(TBTXFS) MODE3() PUPD
+GPIO4 = MODE0(GPIO4) MODE1(CMPCLK) MODE2(TBRXEN) MODE3(D1_TID1) PUPD
+GPIO5 = MODE0(GPIO5) MODE1(CMMCLK) MODE2(TBRXFS) MODE3() PUPD
+GPIO6 = MODE0(GPIO6) MODE1(CMDAT7) MODE2() MODE3(D1ICK) PUPD
+GPIO7 = MODE0(GPIO7) MODE1(CMDAT6) MODE2() MODE3(D1ID) PUPD
+GPIO8 = MODE0(GPIO8) MODE1(CMDAT5) MODE2() MODE3(D1IMS) PUPD
+GPIO9 = MODE0(GPIO9) MODE1(CMDAT4) MODE2() MODE3(D2ICK) PUPD
+GPIO10= MODE0(GPIO10) MODE1(CMDAT3) MODE2() MODE3(D2ID) PUPD
+GPIO11= MODE0(GPIO11) MODE1(CMDAT2) MODE2() MODE3(D2IMS) PUPD
+GPIO12= MODE0(GPIO12) MODE1(CMDAT1) MODE2() MODE3(D2_TID0) PUPD
+GPIO13= MODE0(GPIO13) MODE1(CMDAT0) MODE2() MODE3(D2_TID1) PUPD
+GPIO14= MODE0(GPIO14) MODE1(CMFLASH) MODE2() MODE3(D2_TID2) PUPD
+GPIO15= MODE0(GPIO15) MODE1(SCL) MODE2() MODE3(D2_TID3) PUPD
+GPIO16= MODE0(GPIO16) MODE1(SDA) MODE2() MODE3(D2_TID4) PUPD
+GPIO17= MODE0(GPIO17) MODE1(PWM2) MODE2() MODE3(D2_TID5) PUPD
+GPIO18= MODE0(GPIO18) MODE1(PWM3) MODE2() MODE3(D2_TID6) PUPD
+GPIO19= MODE0(GPIO19) MODE1(BPI_BUS3) MODE2() MODE3() PUPD
+GPIO20= MODE0(GPIO20) MODE1(BPI_BUS6) MODE2() MODE3() PUPD
+GPIO21= MODE0(GPIO21) MODE1(BPI_BUS7) MODE2() MODE3() PUPD
+GPIO22= MODE0(GPIO22) MODE1(BPI_BUS8) MODE2() MODE3() PUPD
+GPIO23= MODE0(GPIO23) MODE1(BPI_BUS9) MODE2(BSI_CS1) MODE3() PUPD
+GPIO24= MODE0(GPIO24) MODE1(LSCK) MODE2(DSP_GPO2) MODE3(IRQ0) PUPD
+GPIO25= MODE0(GPIO25) MODE1(LSA0) MODE2(DSP_GPO3) MODE3(IRQ1) PUPD
+GPIO26= MODE0(GPIO26) MODE1(LSDA) MODE2(CLKM1) MODE3(TDTIRQ) PUPD
+GPIO27= MODE0(GPIO27) MODE1(LSCE0B) MODE2(CLKM2) MODE3(TCTIRQ2) PUPD
+GPIO28= MODE0(GPIO28) MODE1(LSCE1B) MODE2(LPCE2B) MODE3(TCTIRQ1) PUPD
+GPIO29= MODE0(GPIO29) MODE1(LPCE1B) MODE2(NCE1B) MODE3(TEVTVAL) PUPD
+GPIO30= MODE0(GPIO30) MODE1(LPTE) MODE2() MODE3() PUPD
+GPIO31= MODE0(GPIO31) MODE1(NLD17) MODE2() MODE3() PUPD
+GPIO32= MODE0(GPIO32) MODE1(NLD16) MODE2() MODE3() PUPD
+GPIO33= MODE0(GPIO33) MODE1(NRNB) MODE2() MODE3() PUPD
+GPIO34= MODE0(GPIO34) MODE1(NCLE) MODE2() MODE3() PUPD
+GPIO35= MODE0(GPIO35) MODE1(NALE) MODE2() MODE3() PUPD
+GPIO36= MODE0(GPIO36) MODE1(NWEB) MODE2() MODE3() PUPD
+GPIO37= MODE0(GPIO37) MODE1(NREB) MODE2() MODE3() PUPD
+GPIO38= MODE0(GPIO38) MODE1(NCE0B) MODE2() MODE3() PUPD
+GPIO39= MODE0(GPIO39) MODE1(PWM0) MODE2() MODE3() PUPD
+GPIO40= MODE0(GPIO40) MODE1(PWM1) MODE2(BSI_RFIN) MODE3() PUPD
+GPIO41= MODE0(GPIO41) MODE1(SRCLKENA) MODE2() MODE3() PUPD
+GPIO42= MODE0(GPIO42) MODE1(SRCLKENAN) MODE2() MODE3() PUPD
+GPIO43= MODE0(GPIO43) MODE1(SRCLKENAI) MODE2() MODE3() PUPD
+GPIO44= MODE0(GPIO44) MODE1(EINT3) MODE2() MODE3(IRQ2) PUPD
+GPIO45= MODE0(GPIO45) MODE1(EINT4) MODE2() MODE3(CLKM3) PUPD
+GPIO46= MODE0(GPIO46) MODE1(EINT5) MODE2(EDICK) MODE3() PUPD
+GPIO47= MODE0(GPIO47) MODE1(EINT6) MODE2(EDIWS) MODE3() PUPD
+GPIO48= MODE0(GPIO48) MODE1(EINT7) MODE2(EDIDAT) MODE3() PUPD
+GPIO49= MODE0(GPIO49) MODE1(UCTS1) MODE2(UCTS2) MODE3() PUPD
+GPIO50= MODE0(GPIO50) MODE1(URTS1) MODE2(URTS2) MODE3() PUPD
+GPIO51= MODE0(GPIO51) MODE1(URXD2) MODE2(UCTS3) MODE3() PUPD
+GPIO52= MODE0(GPIO52) MODE1(UTXD2) MODE2(URTS3) MODE3() PUPD
+GPIO53= MODE0(GPIO53) MODE1(URXD3) MODE2(IRDA_RXD) MODE3() PUPD
+GPIO54= MODE0(GPIO54) MODE1(UTXD3) MODE2(IRDA_TXD) MODE3() PUPD
+GPIO55= MODE0(GPIO55) MODE1(KCOL7) MODE2(IRDA_PDN) MODE3() PUPD
+GPIO56= MODE0(GPIO56) MODE1(KCOL6) MODE2() MODE3() PUPD
+GPIO57= MODE0(GPIO57) MODE1(KROW7) MODE2(CLKM4) MODE3() PUPD
+GPIO58= MODE0(GPIO58) MODE1(KROW6) MODE2() MODE3() PUPD
+GPIO59= MODE0(GPIO59) MODE1(DAICLK) MODE2() MODE3() PUPD
+GPIO60= MODE0(GPIO60) MODE1(DAIPCMOUT) MODE2() MODE3() PUPD
+GPIO61= MODE0(GPIO61) MODE1(DAIPCMIN) MODE2() MODE3() PUPD
+GPIO62= MODE0(GPIO62) MODE1(DAIRST) MODE2() MODE3() PUPD
+GPIO63= MODE0(GPIO63) MODE1(DAISYNC) MODE2() MODE3() PUPD
+GPIO64= MODE0(GPIO64) MODE1(EA26) MODE2(CLKM5) MODE3() PUPD
+GPIO65= MODE0(GPIO65) MODE1(EADMUX) MODE2(CLKM6) MODE3() PUPD
+GPIO66= MODE0(GPIO66) MODE1(NFIQ) MODE2(CLKM7) MODE3() PUPD
+GPIO67= MODE0(GPIO67) MODE1(MCCM0) MODE2() MODE3(TDMA_CK) PUPD
+GPIO68= MODE0(GPIO68) MODE1(MCDA0) MODE2() MODE3(TDMA_D1) PUPD
+GPIO69= MODE0(GPIO69) MODE1(MCDA1) MODE2() MODE3(TDMA_D0) PUPD
+GPIO70= MODE0(GPIO70) MODE1(MCDA2) MODE2() MODE3(TDMA_FS) PUPD
+GPIO71= MODE0(GPIO71) MODE1(MCDA3) MODE2() MODE3() PUPD
+GPIO72= MODE0(GPIO72) MODE1(MCCK) MODE2() MODE3() PUPD
+GPIO73= MODE0(GPIO73) MODE1(MCPWRON) MODE2(CLKM8) MODE3() PUPD
+GPIO74= MODE0(GPIO74) MODE1(MCWP) MODE2(CLKM9) MODE3() PUPD
+GPIO75= MODE0(GPIO75) MODE1(MCINS) MODE2() MODE3() PUPD
+GPIO76 = MODE0(GPIO76) MODE1(SCLK2) MODE2() MODE3() Z
+GPIO77 = MODE0(GPIO77) MODE1(SIO2) MODE2() MODE3() Z
+GPIO78 = MODE0(GPIO78) MODE1(SRST2) MODE2() MODE3() Z
+
+[GPO]
+
+[EINT]
+EINT_COUNT=8
+EINT_DEBOUNCE_TIME_COUNT=8
+
+[ADC]
+ADC_COUNT=7
+
+[KEYPAD]
+KEY_ROW=8
+KEY_COLUMN=9
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6236.fig b/mcu/custom/driver/drv/Drv_Tool/MT6236.fig
new file mode 100644
index 0000000..2073e49
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6236.fig
@@ -0,0 +1,86 @@
+[Chip Type]
+Chip = MT6236
+GPIO_Pull_Sel=1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(BPI_BUS0) MODE2() MODE3() PD
+GPIO1 = MODE0(GPIO1) MODE1(BPI_BUS1) MODE2() MODE3() PD
+GPIO2 = MODE0(GPIO2) MODE1(BPI_BUS2) MODE2() MODE3() PD
+GPIO3 = MODE0(GPIO3) MODE1(BPI_BUS3) MODE2() MODE3() PD
+GPIO4 = MODE0(GPIO4) MODE1(BPI_BUS4) MODE2() MODE3() PD
+GPIO5 = MODE0(GPIO5) MODE1(BPI_BUS5) MODE2() MODE3() PD
+GPIO6 = MODE0(GPIO6) MODE1(BPI_BUS6) MODE2() MODE3() PD
+GPIO7 = MODE0(GPIO7) MODE1(BPI_BUS7) MODE2() MODE3() PD
+GPIO8 = MODE0(GPIO8) MODE1(BPI_BUS8) MODE2(CLKM0) MODE3(MC0INS) PD
+GPIO9 = MODE0(GPIO9) MODE1(BPI_BUS9) MODE2() MODE3() PD
+GPIO10 = MODE0(GPIO10) MODE1(SPI_CS_N) MODE2(MC1CM0) MODE3(MC0DA7) PU
+GPIO11 = MODE0(GPIO11) MODE1(SPI_SCK) MODE2(MC1DA0) MODE3(MC0DA6) PU
+GPIO12 = MODE0(GPIO12) MODE1(SPI_MOSI) MODE2(MC1CK) MODE3(MC0DA5) PU
+GPIO13 = MODE0(GPIO13) MODE1(SPI_MISO) MODE2(MC1DA1) MODE3(MC0DA4) PU
+GPIO14 = MODE0(GPIO14) MODE1(KCOL7) MODE2(EDICK) MODE3(LPCE2B) PU
+GPIO15 = MODE0(GPIO15) MODE1(KCOL6) MODE2(EDIWS) MODE3(BT2WIFI_0) PU
+GPIO16 = MODE0(GPIO16) MODE1(KROW7) MODE2(EDIDAT) MODE3(URXD3) PD
+GPIO17 = MODE0(GPIO17) MODE1(KROW6) MODE2(CLKM1) MODE3(UTXD3) PD
+GPIO18 = MODE0(GPIO18) MODE1(CMRST) MODE2(D2_TID0) MODE3(D1ICK) PD
+GPIO19 = MODE0(GPIO19) MODE1(CMPDN) MODE2(D2_TID1) MODE3(D1ID) PD
+GPIO20 = MODE0(GPIO20) MODE1(CMVREF) MODE2(CLKM3) MODE3(D1IMS) PD
+GPIO21 = MODE0(GPIO21) MODE1(CMHREF) MODE2(D1_TID0) MODE3(D2ICK) PD
+GPIO22 = MODE0(GPIO22) MODE1(CMPCLK) MODE2(D1_TID1) MODE3(D2ID) PD
+GPIO23 = MODE0(GPIO23) MODE1(CMMCLK) MODE2(debug0) MODE3(D2IMS) PD
+GPIO24 = MODE0(GPIO24) MODE1(CMDAT9) MODE2(debug1) MODE3(TDTIRQ) PD
+GPIO25 = MODE0(GPIO25) MODE1(CMDAT8) MODE2(debug2) MODE3(TCTIRQ1) PD
+GPIO26 = MODE0(GPIO26) MODE1(CMDAT7) MODE2(debug3) MODE3(TBTXEN) PD
+GPIO27 = MODE0(GPIO27) MODE1(CMDAT6) MODE2(debug4) MODE3(TBTXFS) PD
+GPIO28 = MODE0(GPIO28) MODE1(CMFLASH) MODE2(debug5) MODE3(TBRXEN) PD
+GPIO29 = MODE0(GPIO29) MODE1(SCL) MODE2(debug6) MODE3(TBRXFS) PU
+GPIO30 = MODE0(GPIO30) MODE1(SDA) MODE2(debug7) MODE3(TCTIRQ2) PU
+GPIO31 = MODE0(GPIO31) MODE1(LSA0) MODE2(URXD2) MODE3(CLKM3) PD
+GPIO32 = MODE0(GPIO32) MODE1(LSCK) MODE2(UTXD2) MODE3(CLKM4) PD
+GPIO33 = MODE0(GPIO33) MODE1(LSDA) MODE2(CAM_STROBE) MODE3(LPCE2B) PD
+GPIO34 = MODE0(GPIO34) MODE1(LPCE1B) MODE2(LSCE0B) MODE3() PU
+GPIO35 = MODE0(GPIO35) MODE1(LPCE0B) MODE2(LSCE1B) MODE3() PU
+GPIO36 = MODE0(GPIO36) MODE1(LPTE) MODE2(CLKM2) MODE3(TEVTVAL) PD
+GPIO37 = MODE0(GPIO37) MODE1(NLD17) MODE2(CAM_MECH0) MODE3() PD
+GPIO38 = MODE0(GPIO38) MODE1(NLD16) MODE2(CAM_MECH1) MODE3() PD
+GPIO39 = MODE0(GPIO39) MODE1(URXD3) MODE2(UCTS2) MODE3(D2_TID4) PU
+GPIO40 = MODE0(GPIO40) MODE1(UTXD3) MODE2(URTS2) MODE3(D2_TID5) PU
+GPIO41 = MODE0(GPIO41) MODE1(EINT0) MODE2(CLKM4) MODE3(D2_TID6) PU
+GPIO42 = MODE0(GPIO42) MODE1(EINT1) MODE2(EDICK) MODE3(CLKM5) PU
+GPIO43 = MODE0(GPIO43) MODE1(EINT2) MODE2(EDIWS) MODE3(UTXD1) PU
+GPIO44 = MODE0(GPIO44) MODE1(EINT3) MODE2(EDIDAT) MODE3(URXD1) PU
+GPIO45 = MODE0(GPIO45) MODE1(URXD2) MODE2(UCTS3) MODE3(D2_TID2) PU
+GPIO46 = MODE0(GPIO46) MODE1(UTXD2) MODE2(URTS3) MODE3(D2_TID3) PU
+GPIO47 = MODE0(GPIO47) MODE1(DAICLK) MODE2(EDIDAT) MODE3(MC1CK) PD
+GPIO48 = MODE0(GPIO48) MODE1(DAIPCMOUT) MODE2(EDICK) MODE3(MC1CM0) PD
+GPIO49 = MODE0(GPIO49) MODE1(DAIPCMIN) MODE2(EDIWS) MODE3(MC1DA0) PD
+GPIO50 = MODE0(GPIO50) MODE1(DAIRST) MODE2(LPCE2B) MODE3(MC1INS) PD
+GPIO51 = MODE0(GPIO51) MODE1(DAISYNC) MODE2(MC1DA1) MODE3(NCE1B) PD
+GPIO52 = MODE0(GPIO52) MODE1(EINT4) MODE2(UCTS1) MODE3(TDMA_D1) PU
+GPIO53 = MODE0(GPIO53) MODE1(EINT5) MODE2(URTS1) MODE3(TDMA_CK) PU
+GPIO54 = MODE0(GPIO54) MODE1(EINT6) MODE2(LPCE1B) MODE3(TDMA_D0) PU
+GPIO55 = MODE0(GPIO55) MODE1(IRDA_TXD) MODE2(PWM3) MODE3(TDMA_FS) PU
+GPIO56 = MODE0(GPIO56) MODE1(IRDA_RXD) MODE2(PWM4) MODE3(UCTS1) PU
+GPIO57 = MODE0(GPIO57) MODE1(IRDA_PDN) MODE2(PWM5) MODE3(URTS1) PU
+GPIO58 = MODE0(GPIO58) MODE1(UTXD1) MODE2(CLKM4) MODE3(ARM7_JTRST_B) PU
+GPIO59 = MODE0(GPIO59) MODE1(PWM3) MODE2(URXD2) MODE3(ARM7_JTCK) PD
+GPIO60 = MODE0(GPIO60) MODE1(PWM4) MODE2(UTXD2) MODE3(ARM7_JTDI) PD
+GPIO61 = MODE0(GPIO61) MODE1(PWM5) MODE2(URXD3) MODE3(ARM7_JTMS) PD
+GPIO62 = MODE0(GPIO62) MODE1(PWM6) MODE2(UTXD3) MODE3(ARM7_JTDO) PD
+GPIO63 = MODE0(GPIO63) MODE1(CLKM5) MODE2(WIFI2BT) MODE3(ARM7_JRTCK) PD
+GPIO64 = MODE0(GPIO64) MODE1(URXD1) MODE2(BT2WIFI_0) MODE3(SRCLKENAI) PU
+GPIO65 = MODE0(GPIO65) MODE1(IO_SIM2) MODE2() MODE3() PD
+GPIO66 = MODE0(GPIO66) MODE1(CLK_SIM2) MODE2() MODE3() PD
+GPIO67 = MODE0(GPIO67) MODE1(RST_SIM2) MODE2() MODE3() PD
+
+[GPO]
+
+[EINT]
+EINT_COUNT=11
+EINT_DEBOUNCE_TIME_COUNT=11
+
+[ADC]
+ADC_COUNT=8
+
+[KEYPAD]
+KEY_ROW=8
+KEY_COLUMN=9
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6238.fig b/mcu/custom/driver/drv/Drv_Tool/MT6238.fig
new file mode 100644
index 0000000..9f16620
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6238.fig
@@ -0,0 +1,103 @@
+[Chip Type]
+Chip = MT6238
+GPIO_Pull_Sel=1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(CMRST) MODE2(DRF_DATA) MODE3(D1_TID0) PU
+GPIO1 = MODE0(GPIO1) MODE1(CMPDN) MODE2(DRF_EN) MODE3(D1_TID1) PU
+GPIO2 = MODE0(GPIO2) MODE1(CMDAT1) MODE2(D2_TID0) MODE3(D1ICK) PU
+GPIO3 = MODE0(GPIO3) MODE1(CMDAT0) MODE2(D2_TID1) MODE3(D1ID) PU
+GPIO4 = MODE0(GPIO4) MODE1(CMFLASH) MODE2(D2_TID2) MODE3(D1IMS) PD
+GPIO5 = MODE0(GPIO5) MODE1(SCL) MODE2(D2_TID3) MODE3(D2ICK) PU
+GPIO6 = MODE0(GPIO6) MODE1(SDA) MODE2(D2_TID4) MODE3(D2ID) PU
+GPIO7 = MODE0(GPIO7) MODE1(PWM2) MODE2(D2_TID5) MODE3(D2IMS) PU
+GPIO8 = MODE0(GPIO8) MODE1(PWM3) MODE2(D2_TID6) MODE3(CLKM3) PU
+GPIO9 = MODE0(GPIO9) MODE1(BPI_BUS3) MODE2() MODE3() PD
+GPIO10= MODE0(GPIO10) MODE1(BPI_BUS6) MODE2() MODE3() PD
+GPIO11= MODE0(GPIO11) MODE1(BPI_BUS7) MODE2() MODE3() PD
+GPIO12= MODE0(GPIO12) MODE1(BPI_BUS8) MODE2() MODE3() PD
+GPIO13= MODE0(GPIO13) MODE1(BPI_BUS9) MODE2(BSI_CS1) MODE3() PD
+GPIO14= MODE0(GPIO14) MODE1(LSCK) MODE2(TDMA_CK) MODE3() PU
+GPIO15= MODE0(GPIO15) MODE1(LSA0) MODE2(TDMA_D1) MODE3(TDTIRQ) PU
+GPIO16= MODE0(GPIO16) MODE1(LSDA) MODE2(TDMA_D0) MODE3(TCTIRQ2) PU
+GPIO17= MODE0(GPIO17) MODE1(LSCE0B) MODE2(TDMA_FS) MODE3(TCTIRQ1) PU
+GPIO18= MODE0(GPIO18) MODE1(LSCE1B) MODE2(LPCE2B) MODE3(TEVTVAL) PU
+GPIO19= MODE0(GPIO19) MODE1(LPCE1B) MODE2(NCE1B) MODE3() PU
+GPIO20= MODE0(GPIO20) MODE1(NLD17) MODE2() MODE3() PD
+GPIO21= MODE0(GPIO21) MODE1(NLD16) MODE2() MODE3() PD
+GPIO22= MODE0(GPIO22) MODE1(NRNB) MODE2() MODE3() PU
+GPIO23= MODE0(GPIO23) MODE1(NCLE) MODE2() MODE3() PD
+GPIO24= MODE0(GPIO24) MODE1(NALE) MODE2() MODE3() PD
+GPIO25= MODE0(GPIO25) MODE1(NWEB) MODE2() MODE3() PU
+GPIO26= MODE0(GPIO26) MODE1(NREB) MODE2() MODE3() PU
+GPIO27= MODE0(GPIO27) MODE1(NCE0B) MODE2() MODE3() PU
+GPIO28= MODE0(GPIO28) MODE1(PWM0) MODE2() MODE3() PD
+GPIO29= MODE0(GPIO29) MODE1(PWM1) MODE2(BSI_RFIN) MODE3() PD
+GPIO30= MODE0(GPIO30) MODE1(SRCLKENA) MODE2() MODE3() PU
+GPIO31= MODE0(GPIO31) MODE1(SRCLKENAN) MODE2() MODE3(EDICK) PU
+GPIO32= MODE0(GPIO32) MODE1(SRCLKENAI) MODE2() MODE3() PD
+GPIO33= MODE0(GPIO33) MODE1(EINT3) MODE2(DSP_GPO2) MODE3(TBTXFS) PU
+GPIO34= MODE0(GPIO34) MODE1(EINT4) MODE2(DSP_GPO1) MODE3(TBRXEN) PU
+GPIO35= MODE0(GPIO35) MODE1(EINT5) MODE2(DSP_GPO0) MODE3(TBRXFS) PU
+GPIO36= MODE0(GPIO36) MODE1(EINT6) MODE2(EDIWS) MODE3() PU
+GPIO37= MODE0(GPIO37) MODE1(EINT7) MODE2(EDIDAT) MODE3() PU
+GPIO38= MODE0(GPIO38) MODE1(SPI_CS_N) MODE2(CAM_MECH1) MODE3() PU
+GPIO39= MODE0(GPIO39) MODE1(SPI_SCK) MODE2(MC1DA1) MODE3(CAM_STROBE) PD
+GPIO40= MODE0(GPIO40) MODE1(SPI_MOSI) MODE2() MODE3() PU
+GPIO41= MODE0(GPIO41) MODE1(SPI_MISO) MODE2(MIRQ) MODE3() PU
+GPIO42= MODE0(GPIO42) MODE1(UCTS1) MODE2() MODE3(UCTS2) PU
+GPIO43= MODE0(GPIO43) MODE1(URTS1) MODE2() MODE3(URTS2) PU
+GPIO44= MODE0(GPIO44) MODE1(URXD2) MODE2(UCTS3) MODE3() PU
+GPIO45= MODE0(GPIO45) MODE1(UTXD2) MODE2(URTS3) MODE3() PU
+GPIO46= MODE0(GPIO46) MODE1(URXD3) MODE2(UCTS2) MODE3() PU
+GPIO47= MODE0(GPIO47) MODE1(UTXD3) MODE2(URTS2) MODE3() PU
+GPIO48= MODE0(GPIO48) MODE1(KCOL7) MODE2() MODE3() PU
+GPIO49= MODE0(GPIO49) MODE1(KCOL6) MODE2() MODE3() PU
+GPIO50= MODE0(GPIO50) MODE1(KROW7) MODE2(CLKM6) MODE3() PU
+GPIO51= MODE0(GPIO51) MODE1(KROW6) MODE2() MODE3() PU
+GPIO52= MODE0(GPIO52) MODE1(DAICLK) MODE2() MODE3() PD
+GPIO53= MODE0(GPIO53) MODE1(DAIPCMOUT) MODE2() MODE3() PD
+GPIO54= MODE0(GPIO54) MODE1(DAIPCMIN) MODE2() MODE3() PD
+GPIO55= MODE0(GPIO55) MODE1(DAIRST) MODE2(CLKM7) MODE3() PD
+GPIO56= MODE0(GPIO56) MODE1(DAISYNC) MODE2() MODE3() PD
+GPIO57= MODE0(GPIO57) MODE1(EA26) MODE2(CLKM0) MODE3() PU
+GPIO58= MODE0(GPIO58) MODE1(EADMUX) MODE2(CLKM1) MODE3() PD
+GPIO59= MODE0(GPIO59) MODE1(MC0CM0) MODE2() MODE3() PU
+GPIO60= MODE0(GPIO60) MODE1(MC0DA0) MODE2() MODE3() PU
+GPIO61= MODE0(GPIO61) MODE1(MC0DA1) MODE2() MODE3() PU
+GPIO62= MODE0(GPIO62) MODE1(MC0DA2) MODE2() MODE3() PU
+GPIO63= MODE0(GPIO63) MODE1(MC0DA3) MODE2() MODE3() PD
+GPIO64= MODE0(GPIO64) MODE1(MC0CK) MODE2() MODE3() PU
+GPIO65= MODE0(GPIO65) MODE1(MC0PWRON) MODE2(CLKM2) MODE3() PU
+GPIO66= MODE0(GPIO66) MODE1(MC0WP) MODE2() MODE3() PU
+GPIO67= MODE0(GPIO67) MODE1(MC0INS) MODE2() MODE3() PU
+GPIO68= MODE0(GPIO68) MODE1(MC1CM0) MODE2(MC0DA7) MODE3() PU
+GPIO69= MODE0(GPIO69) MODE1(MC1DA0) MODE2(MC0DA6) MODE3() PU
+GPIO70= MODE0(GPIO70) MODE1(MC1CK) MODE2(MC0DA5) MODE3() PU
+GPIO71= MODE0(GPIO71) MODE1(MC1PWRON) MODE2(MC0DA4) MODE3() PU
+GPIO72= MODE0(GPIO72) MODE1(MC1WP) MODE2() MODE3() PU
+GPIO73= MODE0(GPIO73) MODE1(MC1INS) MODE2() MODE3() PU
+GPIO74= MODE0(GPIO74) MODE1(PAD_SIO2) MODE2() MODE3() PU
+GPIO75= MODE0(GPIO75) MODE1(PAD_SRST2) MODE2() MODE3() PU
+GPIO76= MODE0(GPIO76) MODE1(PAD_SCLK2) MODE2() MODE3() PU
+GPIO77= MODE0(GPIO77) MODE1(EINT0) MODE2(CLKM4) MODE3() PU
+GPIO78= MODE0(GPIO78) MODE1(EINT1) MODE2(CLKM5) MODE3() PU
+GPIO79= MODE0(GPIO79) MODE1(EINT2) MODE2(DSP_GPO3) MODE3(TBTXEN) PU
+GPIO80= MODE0(GPIO80) MODE1(LPTE) MODE2() MODE3() PD
+GPIO81= MODE0(GPIO81) MODE1(IRDA_TXD) MODE2() MODE3() PU
+GPIO82= MODE0(GPIO82) MODE1(IRDA_RXD) MODE2() MODE3() PD
+GPIO83= MODE0(GPIO83) MODE1(IRDA_PDN) MODE2() MODE3() PD
+GPIO84= MODE0(GPIO84) MODE1(USB_DRVVBUS) MODE2() MODE3() PD
+
+[GPO]
+
+[EINT]
+EINT_COUNT = 8
+EINT_DEBOUNCE_TIME_COUNT = 8
+
+[ADC]
+ADC_COUNT = 7
+
+[Keypad]
+KEY_ROW = 8
+KEY_COLUMN = 9
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6251.fig b/mcu/custom/driver/drv/Drv_Tool/MT6251.fig
new file mode 100644
index 0000000..c56d8f8
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6251.fig
@@ -0,0 +1,73 @@
+[Chip Type]
+Chip = MT6251
+GPIO_Pull_Sel = 1
+GPIO_ModeNum=8
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(BPI_BUS0) MODE2() MODE3() MODE4(dbg_rf_test_sdatai) MODE5() MODE6(dbg_mon[0]) MODE7(usb_dp_in) PD
+GPIO1 = MODE0(GPIO1) MODE1(BPI_BUS1) MODE2() MODE3() MODE4(dbg_rf_test_en) MODE5() MODE6(dbg_mon[1]) MODE7(usb_dm_in) PD
+GPIO2 = MODE0(GPIO2) MODE1(BPI_BUS2) MODE2() MODE3() MODE4(dbg_rf_test_sclk) MODE5() MODE6(dbg_mon[2]) MODE7(usb_sd_in) PD
+GPIO3 = MODE0(GPIO3) MODE1(BPI_BUS3) MODE2() MODE3() MODE4(dbg_rf_test_auxout) MODE5() MODE6(dbg_mon[3]) MODE7(usb_dp_out) PD
+GPIO4 = MODE0(GPIO4) MODE1(LSDI) MODE2() MODE3() MODE4(dbg_rf_test_dcxodelay) MODE5(D1ID) MODE6(dbg_mon[4]) MODE7(usb_dm_out) PU
+GPIO5 = MODE0(GPIO5) MODE1(LSDA) MODE2() MODE3() MODE4(dbg_rf_test_enext) MODE5(D1ICK) MODE6(dbg_mon[5]) MODE7(usb_out_en_b) PU
+GPIO6 = MODE0(GPIO6) MODE1(LSCE0B) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO7 = MODE0(GPIO7) MODE1(LRSTB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO8 = MODE0(GPIO8) MODE1(URXD2) MODE2(UCTS1) MODE3(LSA0) MODE4(dbg_rf_test_enbt) MODE5() MODE6(CLKSQ_SEL) MODE7(usb_suspend) PU
+GPIO9 = MODE0(GPIO9) MODE1(EINT0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO10 = MODE0(GPIO10) MODE1(URTS1) MODE2(SDA) MODE3() MODE4(dbg_rf_test_enbb) MODE5() MODE6() MODE7() PU
+GPIO11 = MODE0(GPIO11) MODE1(UTXD1) MODE2(SCL) MODE3(PWM1) MODE4(dbg_rf_test_sdatao) MODE5() MODE6() MODE7() PU
+GPIO12 = MODE0(GPIO12) MODE1(UTXD2) MODE2(URTS1) MODE3(LCD_TE) MODE4(dbg_rf_test_sdatai) MODE5() MODE6(dbg_mon[6]) MODE7() PU
+GPIO13 = MODE0(GPIO13) MODE1(URXD1) MODE2(PWM0) MODE3() MODE4(dbg_rf_test_en) MODE5() MODE6() MODE7() PU
+GPIO14 = MODE0(GPIO14) MODE1(UCTS1) MODE2(SCL) MODE3(URXD2) MODE4(dbg_rf_test_sclk) MODE5() MODE6() MODE7() PU
+GPIO15 = MODE0(GPIO15) MODE1(KCOL2) MODE2(SDA) MODE3(UTXD2) MODE4(dbg_fm_ids_out[0]) MODE5(D1IMS) MODE6(dbg_mon[6]) MODE7(CLKSW_ABIST_HMON_DATA[3]) PU
+GPIO16 = MODE0(GPIO16) MODE1(KROW0) MODE2(tdma_evtval) MODE3(UCTS2) MODE4(dbg_fm_ids_out[1]) MODE5(D2ID) MODE6(dbg_mon[8]) MODE7(CLKSW_ABIST_HMON_DATA[2]) PD
+GPIO17 = MODE0(GPIO17) MODE1(KROW3) MODE2(tdma_dtirq_f) MODE3() MODE4(dbg_fm_ids_out[2]) MODE5(D2ICK) MODE6(dbg_mon[9]) MODE7(CLKSW_ABIST_HMON_DATA[1]) PD
+GPIO18 = MODE0(GPIO18) MODE1(KCOL1) MODE2(ctirq1_irq_b) MODE3(daiclk) MODE4(dbg_fm_ids_out[3]) MODE5(D2IMS) MODE6(dbg_mon[10]) MODE7(CLKSW_ABIST_HMON_DATA[0]) PU
+GPIO19 = MODE0(GPIO19) MODE1(KROW4) MODE2(ctirq2_irq_b) MODE3(EDIDAT) MODE4(dbg_fm_ids_out[4]) MODE5(D1_TID0) MODE6(dbg_mon[11]) MODE7(CLKSW_ABIST_LMON_DATA[3]) PD
+GPIO20 = MODE0(GPIO20) MODE1(KCOL0) MODE2(tdma_btxen) MODE3(EDICK) MODE4(dbg_fm_ids_out[5]) MODE5(D1_TID1) MODE6(dbg_mon[12]) MODE7(CLKSW_ABIST_LMON_DATA[2]) PU
+GPIO21 = MODE0(GPIO21) MODE1(KCOL3) MODE2(tdma_btxfs) MODE3(EDIWS) MODE4(dbg_fm_ids_out[6]) MODE5(D2_TID0) MODE6(dbg_mon[13]) MODE7(CLKSW_ABIST_LMON_DATA[1]) PU
+GPIO22 = MODE0(GPIO22) MODE1(KCOL4) MODE2(URTS2) MODE3(daipcmout) MODE4(dbg_fm_ids_out[7]) MODE5(D2_TID1) MODE6(tdma_sdat[0]) MODE7(CLKSW_ABIST_LMON_DATA[0]) PU
+GPIO23 = MODE0(GPIO23) MODE1(KROW1) MODE2(clock_off) MODE3(daipcmin) MODE4(dbg_fm_ids_out[8]) MODE5(D2_TID2) MODE6(tdma_sdat[1]) MODE7(MIXED_ABIST_HMON_DATA[3]) PD
+GPIO24 = MODE0(GPIO24) MODE1(KROW2) MODE2(mdsrclkena) MODE3(dairst) MODE4(dbg_fm_ids_out[9]) MODE5(D2_TID3) MODE6(tdma_fs) MODE7(MIXED_ABIST_HMON_DATA[2]) PD
+GPIO25 = MODE0(GPIO25) MODE1(KROW5) MODE2(SRCLKENAI) MODE3(daisync) MODE4(dbg_fm_ids_out[10]) MODE5(D2_TID4) MODE6(tdma_ck) MODE7(MIXED_ABIST_HMON_DATA[1]) PD
+GPIO26 = MODE0(GPIO26) MODE1(EINT1) MODE2(tdma_brxen) MODE3(BPI_BUS4) MODE4(dbg_fm_ids_out[11]) MODE5(D2_TID5) MODE6(dbg_mon[14]) MODE7() PU
+GPIO27 = MODE0(GPIO27) MODE1(JRTCK) MODE2(tdma_brxfs) MODE3(BPI_BUS5) MODE4(dbg_fm_ids_out[12]) MODE5(D2_TID6) MODE6(dbg_mon[15]) MODE7(MIXED_ABIST_HMON_DATA[0]) PD
+GPIO28 = MODE0(GPIO28) MODE1(MC0CK) MODE2(CLKM0) MODE3() MODE4() MODE5() MODE6() MODE7(MIXED_ABIST_LMON_DATA[3]) PD
+GPIO29 = MODE0(GPIO29) MODE1(MC0CM0) MODE2(CLKM1) MODE3() MODE4(dbg_srclkena) MODE5() MODE6() MODE7(MIXED_ABIST_LMON_DATA[2]) PD
+GPIO30 = MODE0(GPIO30) MODE1(MC0DA0) MODE2(CLKM2) MODE3() MODE4() MODE5() MODE6() MODE7(MIXED_ABIST_LMON_DATA[1]) PD
+GPIO31 = MODE0(GPIO31) MODE1(JRTCK) MODE2(CLKM3) MODE3(LSA0) MODE4() MODE5() MODE6() MODE7(MIXED_ABIST_LMON_DATA[0]) PD
+GPIO32 = MODEGPIO(GPIO32) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO33 = MODEGPIO(GPIO33) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO34 = MODEGPIO(GPIO34) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO35 = NONGPIO(GPIO35) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO36 = NONGPIO(GPIO36) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO37 = NONGPIO(GPIO37) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO38 = NONGPIO(GPIO38) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+
+
+[GPO]
+
+[EINT]
+EINT_COUNT = 2
+EINT_DEBOUNCE_TIME_COUNT = 2
+
+[EINT_EX_PIN]
+0
+1
+
+[ADC]
+ADC_COUNT=3
+
+[ADC_INT_CH]
+0 = ADC_VBAT
+1 = ADC_VISENSE
+2 = ADC_VCHARGER
+
+[ADC_EX_CH]
+6
+7
+8
+
+[KEYPAD]
+KEY_ROW = 6
+KEY_COLUMN = 9
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6252.fig b/mcu/custom/driver/drv/Drv_Tool/MT6252.fig
new file mode 100644
index 0000000..bcd9778
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6252.fig
@@ -0,0 +1,121 @@
+[Chip Type]
+Chip = MT6252
+GPIO_Pull_Sel=1
+GPIO_ModeNum=8
+GPIO_Extend_Config=1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(PWM) MODE2(CLKSQ_SEL) MODE3(MCWP) MODE4(emi_ed0) MODE5(sf_debug_out0) MODE6(usb_debug_out0) MODE7(usb_debug_out8) PUPD
+GPIO1 = MODE0(GPIO1) MODE1(KCOL6) MODE2(EINT4) MODE3(CLKO0) MODE4(emi_ed1) MODE5(sf_debug_out3) MODE6(usb_debug_out1) MODE7(usb_debug_out9) PUPD
+GPIO2 = MODE0(GPIO2) MODE1(KCOL5) MODE2(TDMA_EVTVAL) MODE3(CAM_SDA) MODE4(emi_ed2) MODE5(sf_debug_out1) MODE6(MIXEDSYS_MON_DATA0) MODE7() PUPD
+GPIO3 = MODE0(GPIO3) MODE1(KCOL4) MODE2(TDMA_BTXEN) MODE3(CAM_SCL) MODE4(emi_ed3) MODE5(CLKO1) MODE6() MODE7() PUPD
+GPIO4 = MODE0(GPIO4) MODE1(KCOL3) MODE2(UCTS1_B) MODE3(BSI_CLK) MODE4(emi_ed4) MODE5(sf_debug_out2) MODE6(MIXEDSYS_MON_DATA0) MODE7(DBG_RF_TEST_AUXOUT_O) PUPD
+GPIO5 = MODE0(GPIO5) MODE1(KCOL2) MODE2(TDMA_CTIRQ2_B) MODE3(D1_ID) MODE4(emi_ed5) MODE5(URXD3) MODE6() MODE7() PUPD
+GPIO6 = MODE0(GPIO6) MODE1(KCOL1) MODE2(TDMA_CTIRQ1_B) MODE3(D1_ICK) MODE4(emi_ed6) MODE5(EDICK) MODE6(usb_debug_out2) MODE7(usb_debug_out10) PUPD
+GPIO7 = MODE0(GPIO7) MODE1(KCOL0) MODE2(TDMA_DTIRQ_B) MODE3(D1_IMS) MODE4(emi_ed7) MODE5(sf_debug_out4) MODE6(usb_debug_out3) MODE7(usb_debug_out11) PUPD
+GPIO8 = MODE0(GPIO8) MODE1(KROW5) MODE2(EINT5) MODE3(CLKO3) MODE4(emi_ed8) MODE5(EDIDAT) MODE6(MIXEDSYS_MON_DATA1) MODE7() PUPD
+GPIO9 = MODE0(GPIO9) MODE1(KROW4) MODE2(TDMA_SDAT0) MODE3(SRCLKENA) MODE4(emi_ed9) MODE5(EDIWS) MODE6() MODE7() PUPD
+GPIO10 = MODE0(GPIO10) MODE1(KROW3) MODE2(URTS1_B) MODE3(BSI_EN) MODE4(LSA0) MODE5(sf_debug_out5) MODE6(MIXEDSYS_MON_DATA1) MODE7(DBG_RF_TEST_EN_DCXO_O) PUPD
+GPIO11 = MODE0(GPIO11) MODE1(KROW2) MODE2(TDMA_BTXFS) MODE3(D2_ID) MODE4(LSCK) MODE5(UTXD3) MODE6() MODE7() PUPD
+GPIO12 = MODE0(GPIO12) MODE1(KROW1) MODE2(TDMA_BRXEN) MODE3(D2_ICK) MODE4(LSDA) MODE5() MODE6() MODE7() PUPD
+GPIO13 = MODE0(GPIO13) MODE1(KROW0) MODE2(TDMA_BRXFS) MODE3(D2_IMS) MODE4(LSDI) MODE5(sf_debug_out6) MODE6(usb_debug_out4) MODE7(usb_debug_out12) PUPD
+GPIO14 = MODE0(GPIO14) MODE1(CORE_ECS2_B) MODE2(LPCE0_B) MODE3(LSCE0_B) MODE4(emi_ecs1_b) MODE5() MODE6(SEN2LCM_CS_B) MODE7() PUPD
+GPIO15 = MODE0(GPIO15) MODE1(dai_clk) MODE2(TDMA_SDAT1) MODE3(EDICK) MODE4(emi_ed10) MODE5() MODE6() MODE7() PUPD
+GPIO16 = MODE0(GPIO16) MODE1(dai_pcmout) MODE2(TDMA_FS) MODE3(EDIDAT) MODE4(emi_ed11) MODE5() MODE6() MODE7() PUPD
+GPIO17 = MODE0(GPIO17) MODE1(dai_pcmin) MODE2() MODE3(BSI_DATO) MODE4(emi_ed12) MODE5(sf_debug_out7) MODE6(MIXEDSYS_MON_DATA2) MODE7(DBG_RF_TEST_DCXODELAY_O) PUPD
+GPIO18 = MODE0(GPIO18) MODE1(dai_rstb) MODE2() MODE3(BSI_DATI) MODE4(emi_ed13) MODE5(sf_debug_out8) MODE6(MIXEDSYS_MON_DATA3) MODE7(DBG_RF_TEST_EN_O) PUPD
+GPIO19 = MODE0(GPIO19) MODE1(dai_sync) MODE2(TDMA_CK) MODE3(EDIWS) MODE4(emi_ed14) MODE5() MODE6() MODE7() PUPD
+GPIO20 = MODE0(GPIO20) MODE1(URXD3) MODE2(UCTS2_B) MODE3() MODE4(emi_ea18) MODE5(sf_debug_out10) MODE6(usb_debug_out5) MODE7(usb_debug_out13) PUPD
+GPIO21 = MODE0(GPIO21) MODE1(UTXD3) MODE2(URTS2_B) MODE3() MODE4(emi_ea19) MODE5(sf_debug_out11) MODE6(usb_debug_out6) MODE7(usb_debug_out14) PUPD
+GPIO22 = MODE0(GPIO22) MODE1(URXD2) MODE2(UCTS1_B) MODE3(CAM_SCL) MODE4(emi_ea20) MODE5(sf_debug_out12) MODE6(MIXEDSYS_MON_DATA4) MODE7(DBG_RF_TEST_SCLK_O) PUPD
+GPIO23 = MODE0(GPIO23) MODE1(UTXD2) MODE2(URTS1_B) MODE3(CAM_SDA) MODE4(emi_ea21) MODE5(CLKO2_32K) MODE6(MIXEDSYS_MON_DATA5) MODE7(DBG_RF_TEST_SDATAI_O) PUPD
+GPIO24 = MODE0(GPIO24) MODE1(UCTS1_B) MODE2(CAM_SCL) MODE3(NLD13) MODE4(emi_eub_b) MODE5(EINT5) MODE6() MODE7() PUPD
+GPIO25 = MODE0(GPIO25) MODE1(URTS1_B) MODE2(CAM_SDA) MODE3(NLD14) MODE4(emi_elb_b) MODE5(EINT6) MODE6() MODE7() PUPD
+GPIO26 = MODE0(GPIO26) MODE1(EINT0) MODE2() MODE3(CLKO4) MODE4() MODE5(sf_debug_out14) MODE6(mixedsys_mon_data[6]) MODE7(DBG_RF_TEST_SDATAO_O) PUPD
+GPIO27 = MODE0(GPIO27) MODE1(EINT1) MODE2() MODE3(CLKO3) MODE4() MODE5(sf_debug_out15) MODE6(mixedsys_mon_data[7]) MODE7() PUPD
+GPIO28 = MODE0(GPIO28) MODE1(bpi_bus4) MODE2() MODE3() MODE4(emi_eadv_b) MODE5() MODE6() MODE7() PUPD
+GPIO29 = MODE0(GPIO29) MODE1(SIMIO) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO30 = MODE0(GPIO30) MODE1(SIMCLK) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO31 = MODE0(GPIO31) MODE1(SIMRST) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO32 = MODE0(GPIO32) MODE1() MODE2() MODE3() MODE4(emi_ed15) MODE5(sf_debug_out9) MODE6(usb_debug_out7) MODE7(usb_debug_out15) PUPD
+GPIO33 = MODE0(GPIO33) MODE1(CLKO2_32K) MODE2() MODE3(LSCE1B) MODE4(emi_ea16) MODE5() MODE6() MODE7() PUPD
+GPIO34 = MODE0(GPIO34) MODE1(CLKO6) MODE2(SRCLKENA) MODE3() MODE4(emi_ea17) MODE5(sf_debug_out13) MODE6() MODE7() PUPD
+GPIO35 = MODE0(GPIO35) MODE1(SRCLKENAI) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO36 = MODE0(GPIO36) MODE1(MCINS) MODE2() MODE3(NLD15) MODE4(emi_erd_b) MODE5(EINT6) MODE6() MODE7() PUPD
+GPIO37 = MODE0(GPIO37) MODE1(MCCK) MODE2() MODE3() MODE4(emi_eclk) MODE5() MODE6() MODE7(DBG_RF_TEST_SCLK_I) PUPD
+GPIO38 = MODE0(GPIO38) MODE1(MCDA0) MODE2() MODE3() MODE4(emi_ewait) MODE5() MODE6() MODE7(DBG_RF_TEST_EN_I) PUPD
+GPIO39 = MODE0(GPIO39) MODE1(MCCM0) MODE2() MODE3() MODE4(emi_ewr_b) MODE5() MODE6() MODE7(DBG_RF_TEST_SDATAI_I) PUPD
+GPIO40 = MODE0(GPIO40) MODE1(LPTE) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO41 = MODE0(GPIO41) MODE1(LRSTB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO42 = NONGPIO() MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO43 = MODE0(GPIO43) MODE1(KCOL7) MODE2(EINT2) MODE3(CLKO2) MODE4(LSCK) MODE5(jrtck) MODE6() MODE7() PUPD
+GPIO44 = MODE0(GPIO44) MODE1(KROW6) MODE2() MODE3() MODE4(LSDA) MODE5() MODE6() MODE7() PUPD
+GPIO45 = MODE0(GPIO45) MODE1(KROW7) MODE2(EINT3) MODE3(CLKO5) MODE4(CAM_SDA) MODE5() MODE6() MODE7() PUPD
+GPIO46 = MODE0(GPIO46) MODE1() MODE2() MODE3() MODE4(jrtck) MODE5() MODE6() MODE7() PUPD
+GPIO47 = MODE0(GPIO47) MODE1(cmdat0) MODE2(CAM_CSD) MODE3(D2_TID0) MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO48 = MODE0(GPIO48) MODE1(cmdat1) MODE2(LSDA) MODE3(D2_TID1) MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO49 = MODE0(GPIO49) MODE1(cmdat2) MODE2() MODE3(D2_TID2) MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO50 = MODE0(GPIO50) MODE1(cmdat3) MODE2() MODE3(D2_TID3) MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO51 = MODE0(GPIO51) MODE1(cmdat4) MODE2() MODE3(D2_TID4) MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO52 = MODE0(GPIO52) MODE1(cmdat5) MODE2() MODE3(D2_TID5) MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO53 = MODE0(GPIO53) MODE1(cmdat6) MODE2() MODE3(D2_TID6) MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO54 = MODE0(GPIO54) MODE1(cmdat7) MODE2() MODE3(D1_TID0) MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO55 = MODE0(GPIO55) MODE1(cmhref) MODE2() MODE3(D1_TID1) MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO56 = MODE0(GPIO56) MODE1(cmvref) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO57 = MODE0(GPIO57) MODE1(cmpdn) MODE2(LSCK) MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO58 = MODE0(GPIO58) MODE1(cmmclk) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO59 = MODE0(GPIO59) MODE1(cmpclk) MODE2(CAM_CSK) MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO60 = MODE0(GPIO60) MODE1(cmrst) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO61 = MODE0(GPIO61) MODE1(EDICK) MODE2() MODE3(BPI_BUS5) MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO62 = MODE0(GPIO62) MODE1(EDIDAT) MODE2() MODE3(BPI_BUS6) MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO63 = MODE0(GPIO63) MODE1(EDIWS) MODE2() MODE3(BPI_BUS7) MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO64 = MODE0(GPIO64) MODE1(SCK) MODE2(LSCK) MODE3(CLKO2_32K) MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO65 = MODE0(GPIO65) MODE1(SWP) MODE2(LSA0) MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO66 = MODE0(GPIO66) MODE1(SHOLD) MODE2(LSCE0_B) MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO67 = MODE0(GPIO67) MODE1(SCS) MODE2(LSCE1_B) MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO68 = MODE0(GPIO68) MODE1(SIN) MODE2(LSDI) MODE3(EINT3) MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO69 = MODE0(GPIO69) MODE1(SOUT) MODE2(LSDA) MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO70 = MODE0(GPIO70) MODE1() MODE2(EINT4) MODE3(CLKO2_32K) MODE4(CAM_SCL) MODE5() MODE6() MODE7() PUPD
+
+[GPO]
+
+[EINT]
+EINT_COUNT=12
+EINT_DEBOUNCE_TIME_COUNT=12
+
+[EINT_EX_PIN]
+0
+1
+2
+3
+4
+5
+6
+8
+9
+10
+11
+12
+
+[EINT_INT_PIN]
+7 = CHR_USB_EINT_NO
+
+[EINT_INT_TIME_DELAY]
+EINT7 = 40
+
+[ADC]
+ADC_COUNT=3
+
+[ADC_INT_CH]
+0 = ADC_VBAT
+1 = ADC_VISENSE
+2 = ADC_VCHARGER
+
+[ADC_EX_CH]
+3
+4
+5
+
+[KEYPAD]
+KEY_ROW=8
+KEY_COLUMN=9
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6253.fig b/mcu/custom/driver/drv/Drv_Tool/MT6253.fig
new file mode 100644
index 0000000..abdbc8d
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6253.fig
@@ -0,0 +1,103 @@
+[Chip Type]
+Chip = MT6253
+GPIO_Pull_Sel=1
+
+[GPIO]
+
+GPIO0 = MODE0(GPIO0) MODE1(PWM) MODE2(CLKSQ_SEL) MODE3(Alerter) PUPD
+GPIO1 = MODE0(GPIO1) MODE1(KCOL6) MODE2(EINT4) MODE3() PUPD
+GPIO2 = MODE0(GPIO2) MODE1(KCOL5) MODE2() MODE3() PUPD
+GPIO3 = MODE0(GPIO3) MODE1(KCOL4) MODE2(clko1) MODE3() PUPD
+GPIO4 = MODE0(GPIO4) MODE1(KCOL3) MODE2() MODE3() PUPD
+GPIO5 = MODE0(GPIO5) MODE1(KCOL2) MODE2() MODE3() PUPD
+GPIO6 = MODE0(GPIO6) MODE1(KCOL1) MODE2() MODE3() PUPD
+GPIO7 = MODE0(GPIO7) MODE1(KCOL0) MODE2() MODE3() PUPD
+GPIO8 = MODE0(GPIO8) MODE1(KROW5) MODE2(EINT5) MODE3() PUPD
+GPIO9 = MODE0(GPIO9) MODE1(KROW4) MODE2() MODE3(SRCLKENA) PUPD
+GPIO10 = MODE0(GPIO10) MODE1(KROW3) MODE2() MODE3() PUPD
+GPIO11 = MODE0(GPIO11) MODE1(KROW2) MODE2() MODE3() PUPD
+GPIO12 = MODE0(GPIO12) MODE1(KROW1) MODE2() MODE3() PUPD
+GPIO13 = MODE0(GPIO13) MODE1(KROW0) MODE2() MODE3() PUPD
+GPIO14 = MODE0(GPIO14) MODE1(ECS2_B) MODE2(MFIQ) MODE3() PUPD
+GPIO15 = MODE0(GPIO15) MODE1(DAICLK) MODE2(clko5) MODE3() PUPD
+GPIO16 = MODE0(GPIO16) MODE1(DAIPCMOUT) MODE2() MODE3() PUPD
+GPIO17 = MODE0(GPIO17) MODE1() MODE2(DAIPCMIN) MODE3(IRDA_PDN) PUPD
+GPIO18 = MODE0(GPIO18) MODE1(DAIRST) MODE2(clko0) MODE3(IRDA_TX) PUPD
+GPIO19 = MODE0(GPIO19) MODE1(DAISYNC) MODE2(XADMUX) MODE3() PUPD
+GPIO20 = MODE0(GPIO20) MODE1(URXD3) MODE2(UCTS2_B) MODE3() PUPD
+GPIO21 = MODE0(GPIO21) MODE1(UTXD3) MODE2(URTS2_B) MODE3() PUPD
+GPIO22 = MODE0(GPIO22) MODE1(URXD2) MODE2(LCD_TE) MODE3(IRDA_RX) PUPD
+GPIO23 = MODE0(GPIO23) MODE1(UTXD2) MODE2(EDIDAT) MODE3(IRDA_TX) PUPD
+GPIO24 = MODE0(GPIO24) MODE1(UCTS1_B) MODE2(CAM_SCL) MODE3() PUPD
+GPIO25 = MODE0(GPIO25) MODE1(URTS1_B) MODE2(CAM_SDA) MODE3() PUPD
+GPIO26 = MODE0(GPIO26) MODE1(NCEB[0]) MODE2() MODE3() PUPD
+GPIO27 = MODE0(GPIO27) MODE1(NREB) MODE2() MODE3() PUPD
+GPIO28 = MODE0(GPIO28) MODE1(NWEB) MODE2() MODE3() PUPD
+GPIO29 = MODE0(GPIO29) MODE1(NALE) MODE2() MODE3() PUPD
+GPIO30 = MODE0(GPIO30) MODE1(NCLE) MODE2() MODE3() PUPD
+GPIO31 = MODE0(GPIO31) MODE1(NRNB) MODE2() MODE3() PUPD
+GPIO32 = MODE0(GPIO32) MODE1(NLD0) MODE2() MODE3() PUPD
+GPIO33 = MODE0(GPIO33) MODE1(NLD1) MODE2() MODE3() PUPD
+GPIO34 = MODE0(GPIO34) MODE1(NLD2) MODE2() MODE3() PUPD
+GPIO35 = MODE0(GPIO35) MODE1(NLD3) MODE2() MODE3() PUPD
+GPIO36 = MODE0(GPIO36) MODE1(NLD4) MODE2() MODE3() PUPD
+GPIO37 = MODE0(GPIO37) MODE1(NLD5) MODE2() MODE3() PUPD
+GPIO38 = MODE0(GPIO38) MODE1(NLD6) MODE2() MODE3() PUPD
+GPIO39 = MODE0(GPIO39) MODE1(NLD7) MODE2() MODE3() PUPD
+GPIO40 = MODE0(GPIO40) MODE1(NLD8) MODE2(EDICK) MODE3(RF_AUXOUT) PUPD
+GPIO41 = MODE0(GPIO41) MODE1(LWRB) MODE2() MODE3() PUPD
+GPIO42 = MODE0(GPIO42) MODE1(LPA0) MODE2() MODE3(BSI_CLK) PUPD
+GPIO43 = MODE0(GPIO43) MODE1(LRDB) MODE2() MODE3() PUPD
+GPIO44 = MODE0(GPIO44) MODE1(LRSTB) MODE2() MODE3(BSI_EN) PUPD
+GPIO45 = MODE0(GPIO45) MODE1(LPCE0B) MODE2() MODE3(BSI_DATO) PUPD
+GPIO46 = MODE0(GPIO46) MODE1(LPCE1B) MODE2(NCEB[1]) MODE3(BSI_DATI) PUPD
+GPIO47 = MODE0(GPIO47) MODE1(CMDAT0) MODE2() MODE3() PUPD
+GPIO48 = MODE0(GPIO48) MODE1(CMDAT1) MODE2() MODE3() PUPD
+GPIO49 = MODE0(GPIO49) MODE1(CMDAT2) MODE2() MODE3() PUPD
+GPIO50 = MODE0(GPIO50) MODE1(CMDAT3) MODE2() MODE3() PUPD
+GPIO51 = MODE0(GPIO51) MODE1(CMDAT4) MODE2() MODE3() PUPD
+GPIO52 = MODE0(GPIO52) MODE1(CMDAT5) MODE2() MODE3() PUPD
+GPIO53 = MODE0(GPIO53) MODE1(CMDAT6) MODE2() MODE3() PUPD
+GPIO54 = MODE0(GPIO54) MODE1(CMDAT7) MODE2() MODE3() PUPD
+GPIO55 = MODE0(GPIO55) MODE1(CMHREF) MODE2() MODE3() PUPD
+GPIO56 = MODE0(GPIO56) MODE1(CMVREF) MODE2() MODE3() PUPD
+GPIO57 = MODE0(GPIO57) MODE1(CMPDN) MODE2() MODE3() PUPD
+GPIO58 = MODE0(GPIO58) MODE1(CMMCLK) MODE2() MODE3() PUPD
+GPIO59 = MODE0(GPIO59) MODE1(CMPCLK) MODE2() MODE3() PUPD
+GPIO60 = MODE0(GPIO60) MODE1(CMRST) MODE2() MODE3() PUPD
+GPIO61 = MODE0(GPIO61) MODE1(EINT3) MODE2(clko4) MODE3() PUPD
+GPIO62 = MODE0(GPIO62) MODE1(EINT2) MODE2(MIRQ) MODE3(clko3) PUPD
+GPIO63 = MODE0(GPIO63) MODE1(EINT1) MODE2() MODE3() PUPD
+GPIO64 = MODE0(GPIO64) MODE1(EINT0) MODE2() MODE3() PUPD
+GPIO65 = MODE0(GPIO65) MODE1(MCINS) MODE2() MODE3() PUPD
+GPIO66 = MODE0(GPIO66) MODE1(MCWP) MODE2() MODE3() PUPD
+GPIO67 = MODE0(GPIO67) MODE1(MCCK) MODE2() MODE3() PUPD
+GPIO68 = MODE0(GPIO68) MODE1(MCDA3) MODE2() MODE3() PUPD
+GPIO69 = MODE0(GPIO69) MODE1(MCDA2) MODE2() MODE3() PUPD
+GPIO70 = MODE0(GPIO70) MODE1(MCDA1) MODE2() MODE3() PUPD
+GPIO71 = MODE0(GPIO71) MODE1(MCDA0) MODE2() MODE3() PUPD
+GPIO72 = MODE0(GPIO72) MODE1() MODE2() MODE3() PUPD
+GPIO73 = MODE0(GPIO73) MODE1() MODE2() MODE3() PUPD
+GPIO74 = MODE0(GPIO74) MODE1(clko6) MODE2() MODE3(SRCLKENA) PUPD
+GPIO75 = MODE0(GPIO75) MODE1() MODE2() MODE3(clko2) PUPD
+GPIO76 = MODE0(GPIO76) MODE1(IRDA_PDN) MODE2(EINT6) MODE3(EDIWS) PUPD
+GPIO77 = MODE0(GPIO77) MODE1(SRCLKENAI) MODE2() MODE3() PUPD
+GPIO78 = MODE0(GPIO78) MODE1(SCLK2) MODE2() MODE3() Z
+GPIO79 = MODE0(GPIO79) MODE1(SRST2) MODE2() MODE3() Z
+GPIO80 = MODE0(GPIO80) MODE1(SIO2) MODE2() MODE3() Z
+GPIO81 = MODE0(GPIO81) MODE1(BPI_BUS4) MODE2() MODE3() PUPD
+
+
+[GPO]
+
+[EINT]
+EINT_COUNT=10
+EINT_DEBOUNCE_TIME_COUNT=10
+
+[ADC]
+ADC_COUNT=6
+
+[KEYPAD]
+;MT6253 use EXTEND_QWERTY_KEYPAD option. MT6253 is original ROW=6
+KEY_ROW=8
+KEY_COLUMN=9
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6255.fig b/mcu/custom/driver/drv/Drv_Tool/MT6255.fig
new file mode 100644
index 0000000..a6f6f49
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6255.fig
@@ -0,0 +1,136 @@
+[Chip Type]
+Chip = MT6255
+GPIO_Pull_Sel=1
+GPIO_ModeNum=8
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(BPI_BUS0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO1 = MODE0(GPIO1) MODE1(BPI_BUS1) MODE2(EINT5) MODE3(PWM1) MODE4(CLKM4) MODE5(MC0WP) MODE6() MODE7() PD
+GPIO2 = MODE0(GPIO2) MODE1(BPI_BUS2) MODE2(EINT6) MODE3(PWM2) MODE4(CLKM5) MODE5(MC0WP) MODE6() MODE7() PD
+GPIO3 = MODE0(GPIO3) MODE1(BPI_BUS3) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO4 = MODE0(GPIO4) MODE1(BPI_BUS4) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO5 = MODE0(GPIO5) MODE1(MC0CM0) MODE2(ARM7_JTRST_B) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO6 = MODE0(GPIO6) MODE1(MC0DA0) MODE2(ARM7_JTCK) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO7 = MODE0(GPIO7) MODE1(MC0DA1) MODE2(ARM7_JTDI) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO8 = MODE0(GPIO8) MODE1(MC0DA2) MODE2(ARM7_JTMS) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO9 = MODE0(GPIO9) MODE1(MC0DA3) MODE2(ARM7_JTDO) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO10 = MODE0(GPIO10) MODE1(MC0CK) MODE2(ARM7_JRTCK) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO11 = MODE0(GPIO11) MODE1(MC1CM0) MODE2(NLD11) MODE3(EDIWS) MODE4(SPI_SCK) MODE5(MC0DA4) MODE6() MODE7() PU
+GPIO12 = MODE0(GPIO12) MODE1(MC1DA0) MODE2(NLD10) MODE3(EDIDAT) MODE4(SPI_MOSI) MODE5(MC0DA5) MODE6() MODE7() PU
+GPIO13 = MODE0(GPIO13) MODE1(MC1DA1) MODE2(NLD9) MODE3(SPI_MISO) MODE4() MODE5(MC0DA6) MODE6() MODE7() PU
+GPIO14 = MODE0(GPIO14) MODE1(MC1CK) MODE2(NLD12) MODE3(EDICK) MODE4(SPI_CS_N) MODE5(MC0DA7) MODE6() MODE7() PU
+GPIO15 = MODE0(GPIO15) MODE1(LSA0) MODE2(EINT3) MODE3(EDICK) MODE4(CLKM1) MODE5(TDMA_SDAT[1]) MODE6() MODE7() PD
+GPIO16 = MODE0(GPIO16) MODE1(LSCK) MODE2(EINT4) MODE3(EDIWS) MODE4(CLKM2) MODE5(TDMA_CK) MODE6() MODE7() PU
+GPIO17 = MODE0(GPIO17) MODE1(LSDA) MODE2(SRCLKENAI) MODE3(EDIDAT) MODE4(CLKM3) MODE5(TDMA_SDAT[0]) MODE6(PWM_IN) MODE7() PU
+GPIO18 = MODE0(GPIO18) MODE1(LPCE1B) MODE2(SRCLKENAI) MODE3(KCOL7) MODE4(LSCE0B) MODE5(PWM0) MODE6(CLKM0) MODE7(NCE1B) PU
+GPIO19 = MODE0(GPIO19) MODE1(LPCE0B) MODE2() MODE3() MODE4(LSCE1B) MODE5(TDMA_FS) MODE6() MODE7() PU
+GPIO20 = MODE0(GPIO20) MODE1(LPTE) MODE2() MODE3() MODE4() MODE5(TDMA_EVTVAL) MODE6() MODE7() PD
+GPIO21 = MODE0(GPIO21) MODE1(LRSTB) MODE2() MODE3() MODE4() MODE5(TDMA_DTIRQ_F) MODE6() MODE7() PU
+GPIO22 = MODE0(GPIO22) MODE1(LRDB) MODE2() MODE3() MODE4() MODE5(CTIRQ1_IRQ_B) MODE6() MODE7() PU
+GPIO23 = MODE0(GPIO23) MODE1(LPA0) MODE2() MODE3() MODE4() MODE5(CTIRQ2_IRQ_B) MODE6() MODE7() PD
+GPIO24 = MODE0(GPIO24) MODE1(LWRB) MODE2() MODE3() MODE4() MODE5(TDMA_BTXEN) MODE6() MODE7() PU
+GPIO25 = MODE0(GPIO25) MODE1(NLD8) MODE2() MODE3() MODE4() MODE5(TDMA_BTXFS) MODE6() MODE7() PD
+GPIO26 = MODE0(GPIO26) MODE1(NLD7) MODE2() MODE3() MODE4() MODE5(TDMA_BRXEN) MODE6() MODE7() PD
+GPIO27 = MODE0(GPIO27) MODE1(NLD6) MODE2() MODE3() MODE4() MODE5(TDMA_BRXFS) MODE6() MODE7() PD
+GPIO28 = MODE0(GPIO28) MODE1(NLD5) MODE2() MODE3() MODE4() MODE5(CLOCK_OFF) MODE6() MODE7() PD
+GPIO29 = MODE0(GPIO29) MODE1(NLD4) MODE2() MODE3() MODE4() MODE5(MDSRCLKENA) MODE6() MODE7() PD
+GPIO30 = MODE0(GPIO30) MODE1(NLD3) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO31 = MODE0(GPIO31) MODE1(NLD2) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO32 = MODE0(GPIO32) MODE1(NLD1) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO33 = MODE0(GPIO33) MODE1(NLD0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO34 = MODE0(GPIO34) MODE1(NRNB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO35 = MODE0(GPIO35) MODE1(NCLE) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO36 = MODE0(GPIO36) MODE1(NALE) MODE2(MC0RST) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO37 = MODE0(GPIO37) MODE1(NWEB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO38 = MODE0(GPIO38) MODE1(NREB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO39 = MODE0(GPIO39) MODE1(NCE0B) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO40 = MODE0(GPIO40) MODE1(CMRST) MODE2(D1_TID0) MODE3() MODE4(DBG_MON[0]) MODE5() MODE6() MODE7() PD
+GPIO41 = MODE0(GPIO41) MODE1(CMPDN) MODE2(D1_TID1) MODE3() MODE4(DBG_MON[1]) MODE5(DBG_BT_IDS_IN) MODE6() MODE7(DBG_FM_IDS_OUT[12]) PD
+GPIO42 = MODE0(GPIO42) MODE1(CMVREF) MODE2() MODE3() MODE4(DBG_MON[2]) MODE5(DBG_BT_IDS_OUT[11]) MODE6(DBG_RF_TEST_SDATAI) MODE7(DBG_FM_IDS_OUT[11]) PD
+GPIO43 = MODE0(GPIO43) MODE1(CMHREF) MODE2() MODE3() MODE4(DBG_MON[3]) MODE5(DBG_BT_IDS_OUT[10]) MODE6(DBG_RF_TEST_EN) MODE7(DBG_FM_IDS_OUT[10]) PD
+GPIO44 = MODE0(GPIO44) MODE1(CMPCLK) MODE2() MODE3() MODE4(DBG_MON[4]) MODE5(DBG_BT_IDS_OUT[9]) MODE6(DBG_RF_TEST_SCLK) MODE7(DBG_FM_IDS_OUT[9]) PD
+GPIO45 = MODE0(GPIO45) MODE1(CMMCLK) MODE2() MODE3(BPI_BUS5) MODE4(DBG_MON[5]) MODE5(DBG_BT_IDS_OUT[8]) MODE6(DBG_RF_TEST_AUXOUT) MODE7(DBG_FM_IDS_OUT[8]) PD
+GPIO46 = MODE0(GPIO46) MODE1(CMDAT7) MODE2() MODE3(BPI_BUS6) MODE4(DBG_MON[6]) MODE5(DBG_BT_IDS_OUT[7]) MODE6(DBG_RF_TEST_DCXODELAY) MODE7(DBG_FM_IDS_OUT[7]) PD
+GPIO47 = MODE0(GPIO47) MODE1(CMDAT6) MODE2() MODE3(BPI_BUS7) MODE4(DBG_MON[7]) MODE5(DBG_BT_IDS_OUT[6]) MODE6(DBG_RF_TEST_ENEXT) MODE7(DBG_FM_IDS_OUT[6]) PD
+GPIO48 = MODE0(GPIO48) MODE1(CMDAT5) MODE2() MODE3(BPI_BUS8) MODE4(DBG_MON[8]) MODE5(DBG_BT_IDS_OUT[5]) MODE6(DBG_RF_TEST_ENBT) MODE7(DBG_FM_IDS_OUT[5]) PD
+GPIO49 = MODE0(GPIO49) MODE1(CMDAT4) MODE2() MODE3(BPI_BUS9) MODE4(DBG_MON[9]) MODE5(DBG_BT_IDS_OUT[4]) MODE6(DBG_RF_TEST_ENBB) MODE7(DBG_FM_IDS_OUT[4]) PD
+GPIO50 = MODE0(GPIO50) MODE1(CMDAT3) MODE2() MODE3() MODE4(DBG_MON[10]) MODE5(DBG_BT_IDS_OUT[3]) MODE6(DBG_RF_TEST_SDATAO) MODE7(DBG_FM_IDS_OUT[3]) PD
+GPIO51 = MODE0(GPIO51) MODE1(CMDAT2) MODE2(D2_TID2) MODE3(D1IMS) MODE4(DBG_MON[11]) MODE5(DBG_BT_IDS_OUT[2]) MODE6(DBG_RF_TEST_SDATAI) MODE7(DBG_FM_IDS_OUT[2]) PD
+GPIO52 = MODE0(GPIO52) MODE1(CMDAT1) MODE2(D2_TID0) MODE3(D1ICK) MODE4(DBG_MON[12]) MODE5(DBG_BT_IDS_OUT[1]) MODE6(DBG_RF_TEST_EN) MODE7(DBG_FM_IDS_OUT[1]) PD
+GPIO53 = MODE0(GPIO53) MODE1(CMDAT0) MODE2(D2_TID1) MODE3(D1ID) MODE4(DBG_MON[13]) MODE5(DBG_BT_IDS_OUT[0]) MODE6(DBG_RF_TEST_SCLK) MODE7(DBG_FM_IDS_OUT[0]) PD
+GPIO54 = MODE0(GPIO54) MODE1(SCL) MODE2(D2_TID3) MODE3(D2ICK) MODE4(DBG_MON[14]) MODE5(DBG_SRCLKENA) MODE6() MODE7() PU
+GPIO55 = MODE0(GPIO55) MODE1(SDA) MODE2(D2_TID4) MODE3(D2ID) MODE4(DBG_MON[15]) MODE5() MODE6() MODE7() PU
+GPIO56 = MODE0() MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO57 = MODE0(GPIO57) MODE1(URXD1) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO58 = MODE0(GPIO58) MODE1(UTXD1) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO59 = MODE0(GPIO59) MODE1(UCTS1) MODE2(EINT10) MODE3(NLD16) MODE4(KROW6) MODE5(IRDA_TXD) MODE6(UTXD3) MODE7(PTA0) PU
+GPIO60 = MODE0(GPIO60) MODE1(URTS1) MODE2(EINT9) MODE3(NLD17) MODE4(KCOL7) MODE5(IRDA_RXD) MODE6(URXD3) MODE7(PTA1) PU
+GPIO61 = MODE0(GPIO61) MODE1(URXD2) MODE2(UCTS3) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO62 = MODE0(GPIO62) MODE1(UTXD2) MODE2(URTS3) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO63 = MODE0() MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO64 = MODE0() MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO65 = MODE0(GPIO65) MODE1(DAICLK) MODE2(KCOL7) MODE3(IRDA_RXD) MODE4(EDICK) MODE5(SPI_CS_N) MODE6(PWM_IN) MODE7() PD
+GPIO66 = MODE0(GPIO66) MODE1(DAIPCMOUT) MODE2(KROW6) MODE3(IRDA_TXD) MODE4(EDIWS) MODE5(SPI_SCK) MODE6() MODE7() PD
+GPIO67 = MODE0(GPIO67) MODE1(DAIPCMIN) MODE2(KROW7) MODE3(IRDA_PDN) MODE4(EDIDAT) MODE5(SPI_MOSI) MODE6() MODE7() PD
+GPIO68 = MODE0(GPIO68) MODE1(DAIRST) MODE2(MC0INS) MODE3(SPI_MISO) MODE4() MODE5() MODE6(UCTS2) MODE7() PU
+GPIO69 = MODE0(GPIO69) MODE1(DAISYNC) MODE2(MC0WP) MODE3() MODE4(KROW6) MODE5(CLKM8) MODE6(URTS2) MODE7() PD
+GPIO70 = MODE0(GPIO70) MODE1(MC0INS) MODE2(NLD15) MODE3(EDICK) MODE4(SPI_CS_N) MODE5(CLKM9) MODE6(D2_TID5) MODE7(D2IMS) PU
+GPIO71 = MODE0(GPIO71) MODE1(EINT11) MODE2(MC0WP) MODE3(NLD14) MODE4(KROW6) MODE5(EDIWS) MODE6(CLKM10) MODE7(D2_TID6) PU
+GPIO72 = MODE0(GPIO72) MODE1(EINT0) MODE2(SPI_SCK) MODE3(LPCE2B) MODE4(NLD17) MODE5() MODE6() MODE7() PU
+GPIO73 = MODE0(GPIO73) MODE1(EINT1) MODE2(KCOL7) MODE3(SPI_MOSI) MODE4(NLD16) MODE5() MODE6() MODE7() PU
+GPIO74 = MODE0(GPIO74) MODE1(EINT2) MODE2(NLD13) MODE3(KROW7) MODE4(EDIDAT) MODE5(SPI_MISO) MODE6(PWM_IN) MODE7() PU
+GPIO75 = MODE0(GPIO75) MODE1(KCOL6) MODE2(SRCLKENAI) MODE3(MC0INS) MODE4(IRDA_PDN) MODE5(PWM3) MODE6(CLKM6) MODE7(PTA0) PU
+GPIO76 = MODE0(GPIO76) MODE1(KCOL5) MODE2(EINT7) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO77 = MODE0(GPIO77) MODE1(KCOL4) MODE2(EINT8) MODE3(URXD3) MODE4() MODE5() MODE6(CLKSW_ABIST_HMON_DATA[3]) MODE7(MIXED_ABIST_HMON_DATA[3]) PU
+GPIO78 = MODE0(GPIO78) MODE1(KCOL3) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_ABIST_HMON_DATA[2]) MODE7(MIXED_ABIST_HMON_DATA[2]) PU
+GPIO79 = MODE0(GPIO79) MODE1(KCOL2) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_ABIST_HMON_DATA[1]) MODE7(MIXED_ABIST_HMON_DATA[1]) PU
+GPIO80 = MODE0(GPIO80) MODE1(KCOL1) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_ABIST_HMON_DATA[0]) MODE7(MIXED_ABIST_HMON_DATA[0]) PU
+GPIO81 = MODE0(GPIO81) MODE1(KCOL0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO82 = MODE0(GPIO82) MODE1(KROW5) MODE2(UTXD3) MODE3(PWM4) MODE4(CLKM7) MODE5(PTA1) MODE6() MODE7() PD
+GPIO83 = MODE0(GPIO83) MODE1(KROW4) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_ABIST_LMON_DATA[3]) MODE7(MIXED_ABIST_LMON_DATA[3]) PD
+GPIO84 = MODE0(GPIO84) MODE1(KROW3) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_ABIST_LMON_DATA[2]) MODE7(MIXED_ABIST_LMON_DATA[2]) PD
+GPIO85 = MODE0(GPIO85) MODE1(KROW2) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_ABIST_LMON_DATA[1]) MODE7(MIXED_ABIST_LMON_DATA[1]) PD
+GPIO86 = MODE0(GPIO86) MODE1(KROW1) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_ABIST_LMON_DATA[0]) MODE7(MIXED_ABIST_LMON_DATA[0]) PD
+GPIO87 = MODE0(GPIO87) MODE1(KROW0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+
+[GPO]
+
+[EINT]
+EINT_COUNT=12
+EINT_DEBOUNCE_TIME_COUNT=12
+
+[EINT_EX_PIN]
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+
+
+[ADC]
+ADC_COUNT=3
+
+[ADC_INT_CH]
+0 = ADC_VBAT
+1 = ADC_VISENSE
+2 = ADC_VCHARGER
+3 = ADC_VBATTMP
+4 = ADC_PCBTMP
+5 = ADC_CHR_USB
+
+
+[ADC_EX_CH]
+6
+7
+8
+
+[KEYPAD]
+KEY_ROW=8
+KEY_COLUMN=9
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6255MP.fig b/mcu/custom/driver/drv/Drv_Tool/MT6255MP.fig
new file mode 100644
index 0000000..bd06523
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6255MP.fig
@@ -0,0 +1,189 @@
+[Chip Type]
+Chip = MT6255
+GPIO_ModeNum = 8
+GPIO_Pull_Sel=1
+PMIC_Config=1
+PMIC_Volt_Format = 1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(SPI_MOSI) MODE2(CLKM1) MODE3(SCL) MODE4(LSCE1B) MODE5(BPI_BUS6) MODE6(dbg_usb_din[0]) MODE7() PD
+GPIO1 = MODE0(GPIO1) MODE1(SPI_MISO) MODE2(PWM_B) MODE3(UCTS2) MODE4(EINT12) MODE5(BPI_BUS7) MODE6(dbg_usb_din[1]) MODE7() PD
+GPIO2 = MODE0(GPIO2) MODE1(SPI_SCK) MODE2(SRCLKENAN) MODE3(URTS2) MODE4(PTA1) MODE5(BPI_BUS8) MODE6(dbg_usb_din[2]) MODE7() PD
+GPIO3 = MODE0(GPIO3) MODE1(SPI_CS_N) MODE2() MODE3(SDA) MODE4(PTA0) MODE5(BPI_BUS9) MODE6(dbg_usb_din[3]) MODE7() PD
+GPIO4 = MODE0(GPIO4) MODE1(URXD1) MODE2() MODE3(MC2INS) MODE4(PTA1) MODE5(PWM_C) MODE6(dbg_usb_din[4]) MODE7(UTXD1) PU
+GPIO5 = MODE0(GPIO5) MODE1(UTXD1) MODE2(CLKM3) MODE3(MC1INS) MODE4(PTA0) MODE5() MODE6(dbg_usb_din[5]) MODE7(URXD1) PU
+GPIO6 = MODE0(GPIO6) MODE1(UCTS1) MODE2(URXD3) MODE3(EINT7) MODE4(SRCLKENAI) MODE5(SCL) MODE6(dbg_usb_din[6]) MODE7() PU
+GPIO7 = MODE0(GPIO7) MODE1(URTS1) MODE2(UTXD3) MODE3(EINT8) MODE4(SRCLKENA) MODE5(SDA) MODE6(dbg_usb_din[7]) MODE7() PU
+GPIO8 = MODE0(GPIO8) MODE1(URXD2) MODE2(UCTS3) MODE3(MC2INS) MODE4(PTA1) MODE5(CLKM2) MODE6(dbg_usb_din[8]) MODE7(UTXD2) PD
+GPIO9 = MODE0(GPIO9) MODE1(UTXD2) MODE2(URTS3) MODE3(MC1INS) MODE4(PTA0) MODE5() MODE6() MODE7(URXD2) PD
+GPIO10 = MODE0(GPIO10) MODE1(LSA0) MODE2(URXD3) MODE3(PWM_IN) MODE4(EDICK) MODE5(SRCLKENA) MODE6(TDMA_SDAT[1]) MODE7(UTXD3) PD
+GPIO11 = MODE0(GPIO11) MODE1(LSCK) MODE2(UTXD3) MODE3(PWM_A) MODE4(EDIWS) MODE5(SRCLKENAI) MODE6() MODE7(URXD3) PD
+GPIO12 = MODE0(GPIO12) MODE1(LSDA) MODE2(LPCE3B) MODE3(EINT10) MODE4(EDIDAT) MODE5(SRCLKENAN) MODE6(TDMA_SDAT[0]) MODE7() PD
+GPIO13 = MODE0(GPIO13) MODE1(LPCE2B) MODE2(LSCE1B) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO14 = MODE0(GPIO14) MODE1(LPCE1B) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO15 = MODE0(GPIO15) MODE1(LPCE0B) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO16 = MODE0(GPIO16) MODE1(LPTE) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO17 = MODE0(GPIO17) MODE1(LRSTB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO18 = MODE0(GPIO18) MODE1(LRDB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO19 = MODE0(GPIO19) MODE1(LPA0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO20 = MODE0(GPIO20) MODE1(LWRB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO21 = MODE0(GPIO21) MODE1(NLD17) MODE2(URXD3) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO22 = MODE0(GPIO22) MODE1(NLD16) MODE2(UTXD3) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO23 = MODE0(GPIO23) MODE1(NLD15) MODE2(SFIO0) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO24 = MODE0(GPIO24) MODE1(NLD14) MODE2(SFIO1) MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[12]) MODE7() PD
+GPIO25 = MODE0(GPIO25) MODE1(NLD13) MODE2(SFIO3) MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_A_FUNC_DCK) MODE7(dbg_MIXED_A_FUNC_DCK) PD
+GPIO26 = MODE0(GPIO26) MODE1(NLD12) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO27 = MODE0(GPIO27) MODE1(NLD11) MODE2(SFCS) MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[11]) MODE7() PD
+GPIO28 = MODE0(GPIO28) MODE1(NLD10) MODE2(SFIO2) MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[10]) MODE7() PD
+GPIO29 = MODE0(GPIO29) MODE1(NLD9) MODE2(SFCLK) MODE3() MODE4() MODE5(dbg_usb_dout[9]) MODE6(dbg_CLKSW_DIO[9]) MODE7() PD
+GPIO30 = MODE0(GPIO30) MODE1(NLD8) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[8]) MODE6(dbg_CLKSW_DIO[8]) MODE7() PD
+GPIO31 = MODE0(GPIO31) MODE1(NLD7) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[7]) MODE6(dbg_CLKSW_DIO[7]) MODE7(dbg_MIXED_DIO[7]) PD
+GPIO32 = MODE0(GPIO32) MODE1(NLD6) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[6]) MODE6(dbg_CLKSW_DIO[6]) MODE7(dbg_MIXED_DIO[6]) PD
+GPIO33 = MODE0(GPIO33) MODE1(NLD5) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[5]) MODE6(dbg_CLKSW_DIO[5]) MODE7(dbg_MIXED_DIO[5]) PD
+GPIO34 = MODE0(GPIO34) MODE1(NLD4) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[4]) MODE6(dbg_CLKSW_DIO[4]) MODE7(dbg_MIXED_DIO[4]) PD
+GPIO35 = MODE0(GPIO35) MODE1(NLD3) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[3]) MODE6(dbg_CLKSW_DIO[3]) MODE7(dbg_MIXED_DIO[3]) PD
+GPIO36 = MODE0(GPIO36) MODE1(NLD2) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[2]) MODE6(dbg_CLKSW_DIO[2]) MODE7(dbg_MIXED_DIO[2]) PD
+GPIO37 = MODE0(GPIO37) MODE1(NLD1) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[1]) MODE6(dbg_CLKSW_DIO[1]) MODE7(dbg_MIXED_DIO[1]) PD
+GPIO38 = MODE0(GPIO38) MODE1(NLD0) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[0]) MODE6(dbg_CLKSW_DIO[0]) MODE7(dbg_MIXED_DIO[0]) PD
+GPIO39 = MODE0(GPIO39) MODE1(NRNB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO40 = MODE0(GPIO40) MODE1(NCLE) MODE2(KROW7) MODE3(MC1DA4) MODE4() MODE5() MODE6() MODE7() PD
+GPIO41 = MODE0(GPIO41) MODE1(NALE) MODE2(KCOL7) MODE3(MC1DA5) MODE4() MODE5() MODE6() MODE7() PD
+GPIO42 = MODE0(GPIO42) MODE1(NWEB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO43 = MODE0(GPIO43) MODE1(NREB) MODE2() MODE3(MC1DA7) MODE4() MODE5() MODE6() MODE7() PU
+GPIO44 = MODE0(GPIO44) MODE1(NCE0B) MODE2(KROW6) MODE3(MC1DA6) MODE4() MODE5() MODE6() MODE7() PU
+GPIO45 = MODE0(GPIO45) MODE1(CMRST) MODE2() MODE3(D2_TID1) MODE4(dbg_mon[0]) MODE5() MODE6() MODE7() PD
+GPIO46 = MODE0(GPIO46) MODE1(CMPDN) MODE2() MODE3(D2_TID2) MODE4(dbg_mon[1]) MODE5(dbg_bt_ids_in) MODE6() MODE7(dbg_fm_ids_out[12]) PD
+GPIO47 = MODE0(GPIO47) MODE1(CMVSYNC) MODE2() MODE3() MODE4(dbg_mon[2]) MODE5(dbg_bt_ids_out[11]) MODE6(dbg_rf_test_sdatai) MODE7(dbg_fm_ids_out[11]) PD
+GPIO48 = MODE0(GPIO48) MODE1(CMHSYNC) MODE2() MODE3() MODE4(dbg_mon[3]) MODE5(dbg_bt_ids_out[10]) MODE6(dbg_rf_test_en) MODE7(dbg_fm_ids_out[10]) PD
+GPIO49 = MODE0(GPIO49) MODE1(CMPCLK) MODE2(CM_SSCK) MODE3() MODE4(dbg_mon[4]) MODE5(dbg_bt_ids_out[9]) MODE6(dbg_rf_test_sclk) MODE7(dbg_fm_ids_out[9]) PD
+GPIO50 = MODE0(GPIO50) MODE1(CMMCLK) MODE2() MODE3() MODE4(dbg_mon[5]) MODE5(dbg_bt_ids_out[8]) MODE6(dbg_rf_test_auxout) MODE7(dbg_fm_ids_out[8]) PD
+GPIO51 = MODE0(GPIO51) MODE1(CMDAT7) MODE2(BPI_BUS6) MODE3(D2_TID3) MODE4(dbg_mon[6]) MODE5(dbg_bt_ids_out[7]) MODE6(dbg_rf_test_dcxodelay) MODE7(dbg_fm_ids_out[7]) PD
+GPIO52 = MODE0(GPIO52) MODE1(CMDAT6) MODE2(BPI_BUS7) MODE3(D2_TID4) MODE4(dbg_mon[7]) MODE5(dbg_bt_ids_out[6]) MODE6(dbg_rf_test_enext) MODE7(dbg_fm_ids_out[6]) PD
+GPIO53 = MODE0(GPIO53) MODE1(CMDAT5) MODE2(BPI_BUS8) MODE3(D2_TID5) MODE4(dbg_mon[8]) MODE5(dbg_bt_ids_out[5]) MODE6(dbg_rf_test_enbt) MODE7(dbg_fm_ids_out[5]) PD
+GPIO54 = MODE0(GPIO54) MODE1(CMDAT4) MODE2(BPI_BUS9) MODE3(D2_TID6) MODE4(dbg_mon[9]) MODE5(dbg_bt_ids_out[4]) MODE6(dbg_rf_test_enbb) MODE7(dbg_fm_ids_out[4]) PD
+GPIO55 = MODE0(GPIO55) MODE1(CMDAT3) MODE2() MODE3(D2_TID7) MODE4(dbg_mon[10]) MODE5(dbg_bt_ids_out[3]) MODE6(dbg_rf_test_sdatao) MODE7(dbg_fm_ids_out[3]) PD
+GPIO56 = MODE0(GPIO56) MODE1(CMDAT2) MODE2() MODE3(D2_TID0) MODE4(dbg_mon[11]) MODE5(dbg_bt_ids_out[2]) MODE6(dbg_rf_test_sdatai) MODE7(dbg_fm_ids_out[2]) PD
+GPIO57 = MODE0(GPIO57) MODE1(CMDAT1) MODE2() MODE3() MODE4(dbg_mon[12]) MODE5(dbg_bt_ids_out[1]) MODE6(dbg_rf_test_en) MODE7(dbg_fm_ids_out[1]) PD
+GPIO58 = MODE0(GPIO58) MODE1(CMDAT0) MODE2(CM_SSDA) MODE3(D2ICK) MODE4(dbg_mon[13]) MODE5(dbg_bt_ids_out[0]) MODE6(dbg_rf_test_sclk) MODE7(dbg_fm_ids_out[0]) PD
+GPIO59 = MODE0(GPIO59) MODE1(SCL) MODE2() MODE3(D2ID) MODE4(dbg_mon[14]) MODE5(dbg_srclkena) MODE6(dbg_ABBSYS_DIO[0]) MODE7(dbg_MIXED_DIO[0]) PD
+GPIO60 = MODE0(GPIO60) MODE1(SDA) MODE2() MODE3(D2IMS) MODE4(dbg_mon[15]) MODE5() MODE6(dbg_ABBSYS_DIO[1]) MODE7(dbg_MIXED_DIO[1]) PD
+GPIO61 = MODE0(GPIO61) MODE1(EINT0) MODE2(LSCE0B) MODE3(CLKM6) MODE4() MODE5(NCE1B) MODE6(dbg_ABBSYS_DIO[2]) MODE7(dbg_MIXED_DIO[2]) PD
+GPIO62 = MODE0(GPIO62) MODE1(EINT1) MODE2(CIRQ0) MODE3(CLKM7) MODE4() MODE5() MODE6(dbg_ABBSYS_DIO[3]) MODE7(dbg_MIXED_DIO[3]) PD
+GPIO63 = MODE0(GPIO63) MODE1(EINT2) MODE2(CIRQ1) MODE3() MODE4() MODE5() MODE6(dbg_ABBSYS_DIO[4]) MODE7(dbg_MIXED_DIO[4]) PD
+GPIO64 = MODE0(GPIO64) MODE1(EINT3) MODE2(CIRQ2) MODE3(UCTS3) MODE4() MODE5() MODE6(dbg_ABBSYS_DIO[5]) MODE7(dbg_MIXED_DIO[5]) PD
+GPIO65 = MODE0(GPIO65) MODE1(EINT4) MODE2(PWM_C) MODE3(URTS3) MODE4(LSDI) MODE5() MODE6(dbg_ABBSYS_DIO[6]) MODE7(dbg_MIXED_DIO[6]) PD
+GPIO66 = MODE0(GPIO66) MODE1(DAICLK) MODE2(KROW6) MODE3(MC1INS) MODE4() MODE5() MODE6(dbg_ABBSYS_DIO[7]) MODE7(dbg_MIXED_DIO[7]) PD
+GPIO67 = MODE0(GPIO67) MODE1(DAIPCMOUT) MODE2(EDICK) MODE3(KCOL7) MODE4(SRCLKENAN) MODE5() MODE6(dbg_ABBSYS_DIO[8]) MODE7() PD
+GPIO68 = MODE0(GPIO68) MODE1(DAIPCMIN) MODE2(EDIWS) MODE3(CLKM4) MODE4(SCL) MODE5() MODE6(dbg_ABBSYS_DIO[9]) MODE7() PD
+GPIO69 = MODE0(GPIO69) MODE1(DAIRST) MODE2(EDIDAT) MODE3(SRCLKENA) MODE4(SDA) MODE5() MODE6(dbg_ABBSYS_DIO[10]) MODE7() PD
+GPIO70 = MODE0(GPIO70) MODE1(DAISYNC) MODE2(KROW7) MODE3(LSDI) MODE4(PWM_IN) MODE5() MODE6(dbg_ABBSYS_A_FUNC_DCK) MODE7(dbg_MIXED_A_FUNC_DCK) PD
+GPIO71 = MODE0(GPIO71) MODE1(KCOL6) MODE2(MC2INS) MODE3(LSDI) MODE4(PWM_IN) MODE5(EINT4) MODE6() MODE7() PU
+GPIO72 = MODE0(GPIO72) MODE1(KCOL5) MODE2(EINT5) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO73 = MODE0(GPIO73) MODE1(KCOL4) MODE2(SCL) MODE3() MODE4() MODE5(CLKSW_HMON_DATA[3]) MODE6(ABBSYS_HMON_DATA[3]) MODE7(MIXED_HMON_DATA[3]) PU
+GPIO74 = MODE0(GPIO74) MODE1(KCOL3) MODE2() MODE3() MODE4() MODE5(CLKSW_HMON_DATA[2]) MODE6(ABBSYS_HMON_DATA[2]) MODE7(MIXED_HMON_DATA[2]) PU
+GPIO75 = MODE0(GPIO75) MODE1(KCOL2) MODE2() MODE3() MODE4() MODE5(CLKSW_HMON_DATA[1]) MODE6(ABBSYS_HMON_DATA[1]) MODE7(MIXED_HMON_DATA[1]) PU
+GPIO76 = MODE0(GPIO76) MODE1(KCOL1) MODE2() MODE3() MODE4() MODE5(CLKSW_HMON_DATA[0]) MODE6(ABBSYS_HMON_DATA[0]) MODE7(MIXED_HMON_DATA[0]) PU
+GPIO77 = MODE0(GPIO77) MODE1(KCOL0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO78 = MODE0(GPIO78) MODE1(KROW5) MODE2(EINT11) MODE3(SRCLKENAI) MODE4(MC2WP) MODE5(CLKSW_LMON_DATA[3]) MODE6(ABBSYS_LMON_DATA[3]) MODE7(MIXED_LMON_DATA[3]) PD
+GPIO79 = MODE0(GPIO79) MODE1(KROW4) MODE2(PWM_D) MODE3(CLKM5) MODE4(MC1WP) MODE5(EINT6) MODE6(dbg_ABBSYS_DIO[11]) MODE7() PD
+GPIO80 = MODE0(GPIO80) MODE1(KROW3) MODE2(SDA) MODE3() MODE4() MODE5() MODE6(dbg_ABBSYS_DIO[12]) MODE7() PD
+GPIO81 = MODE0(GPIO81) MODE1(KROW2) MODE2() MODE3() MODE4() MODE5(CLKSW_LMON_DATA[2]) MODE6(ABBSYS_LMON_DATA[2]) MODE7(MIXED_LMON_DATA[2]) PD
+GPIO82 = MODE0(GPIO82) MODE1(KROW1) MODE2() MODE3() MODE4() MODE5(CLKSW_LMON_DATA[1]) MODE6(ABBSYS_LMON_DATA[1]) MODE7(MIXED_LMON_DATA[1]) PD
+GPIO83 = MODE0(GPIO83) MODE1(KROW0) MODE2() MODE3() MODE4() MODE5(CLKSW_LMON_DATA[0]) MODE6(ABBSYS_LMON_DATA[0]) MODE7(MIXED_LMON_DATA[0]) PD
+GPIO84 = MODE0(GPIO84) MODE1(MC1RST) MODE2(MC1WP) MODE3(LSCE0B) MODE4(PTA1) MODE5() MODE6() MODE7() PU
+GPIO85 = MODE0(GPIO85) MODE1(MC1CK_FB) MODE2(MC2WP) MODE3() MODE4(PTA0) MODE5(BT_DBGI_N) MODE6() MODE7() PU
+GPIO86 = MODE0(GPIO86) MODE1(MC1CM0) MODE2() MODE3() MODE4() MODE5(BT_TRST_B) MODE6(dbg_mon[0]) MODE7(dbg_usb_dio[0]) PU
+GPIO87 = MODE0(GPIO87) MODE1(MC1DA0) MODE2() MODE3() MODE4() MODE5(BT_TCK) MODE6(dbg_mon[1]) MODE7(dbg_usb_dio[1]) PU
+GPIO88 = MODE0(GPIO88) MODE1(MC1DA1) MODE2() MODE3() MODE4() MODE5(BT_TDI) MODE6(dbg_mon[2]) MODE7(dbg_usb_dio[2]) PU
+GPIO89 = MODE0(GPIO89) MODE1(MC1DA2) MODE2() MODE3() MODE4() MODE5(BT_TMS) MODE6(dbg_mon[3]) MODE7(dbg_usb_dio[3]) PU
+GPIO90 = MODE0(GPIO90) MODE1(MC1DA3) MODE2() MODE3() MODE4() MODE5(BT_TDO) MODE6(dbg_mon[4]) MODE7(dbg_usb_dio[4]) PU
+GPIO91 = MODE0(GPIO91) MODE1(MC1CK) MODE2(EINT13) MODE3() MODE4() MODE5(BT_DBGACK_N) MODE6() MODE7() PU
+GPIO92 = MODE0(GPIO92) MODE1(MC2CM0) MODE2(MC1DA4) MODE3(KROW7) MODE4(URXD2) MODE5(PTA1) MODE6(dbg_mon[5]) MODE7(dbg_usb_dio[5]) PD
+GPIO93 = MODE0(GPIO93) MODE1(MC2DA0) MODE2(MC1DA5) MODE3(KCOL7) MODE4(UTXD2) MODE5(PTA0) MODE6(dbg_mon[6]) MODE7(dbg_usb_dio[6]) PD
+GPIO94 = MODE0(GPIO94) MODE1(MC2DA1) MODE2(MC1DA6) MODE3(KROW6) MODE4(PWM_A) MODE5(EDICK) MODE6(dbg_mon[7]) MODE7(dbg_usb_dio[7]) PD
+GPIO95 = MODE0(GPIO95) MODE1(MC2CK) MODE2(MC1DA7) MODE3(PWM_IN) MODE4(CLKM0) MODE5(SRCLKENAI) MODE6() MODE7() PD
+GPIO96 = MODE0(GPIO96) MODE1(BPI_BUS0) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_mon[10]) MODE7(dbg_usb_dio[10]) PD
+GPIO97 = MODE0(GPIO97) MODE1(BPI_BUS1) MODE2(LSCE0B) MODE3() MODE4() MODE5() MODE6(dbg_mon[11]) MODE7(dbg_usb_dio[11]) PD
+GPIO98 = MODE0(GPIO98) MODE1(BPI_BUS2) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_mon[12]) MODE7(dbg_usb_dio[12]) PD
+GPIO99 = MODE0(GPIO99) MODE1(BPI_BUS3) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_mon[13]) MODE7(dbg_usb_dio[13]) PD
+GPIO100 = MODE0(GPIO100) MODE1(BPI_BUS4) MODE2(MC2INS) MODE3(LSCE1B) MODE4() MODE5() MODE6(dbg_mon[14]) MODE7(dbg_usb_dio[14]) PD
+GPIO101 = MODE0(GPIO101) MODE1(BPI_BUS5) MODE2(MC1INS) MODE3(EINT14) MODE4() MODE5(SRCLKENAI) MODE6(dbg_mon[15]) MODE7(dbg_usb_dio[15]) PD
+GPIO102 = MODE0(GPIO102) MODE1(MC2DA2) MODE2(EINT6) MODE3() MODE4(PWM_D) MODE5(EDIWS) MODE6(dbg_mon[8]) MODE7(dbg_usb_dio[8]) PD
+GPIO103 = MODE0(GPIO103) MODE1(MC2DA3) MODE2(EINT9) MODE3() MODE4(MC1INS) MODE5(EDIDAT) MODE6(dbg_mon[9]) MODE7(dbg_usb_dio[9]) PD
+GPIO104 = MODE0(GPIO104) MODE1(EINT5) MODE2(MC1INS) MODE3(PWM_IN) MODE4(CLKM8) MODE5() MODE6() MODE7() PD
+
+[GPO]
+
+[EINT]
+EINT_COUNT=16
+EINT_DEBOUNCE_TIME_COUNT=16
+
+[EINT_EX_PIN]
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+22
+
+[EINT_INT_PIN]
+
+
+[ADC]
+ADC_COUNT = 5
+
+[ADC_INT_CH]
+0 = ADC_VBAT
+1 = ADC_VISENSE
+2 = ADC_VCHARGER
+3 = ADC_VBATTMP
+
+
+[ADC_EX_CH]
+6
+7
+13
+14
+15
+
+
+[KEYPAD]
+KEY_ROW=8
+KEY_COLUMN=9
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6255NP.fig b/mcu/custom/driver/drv/Drv_Tool/MT6255NP.fig
new file mode 100644
index 0000000..25c8dd3
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6255NP.fig
@@ -0,0 +1,189 @@
+[Chip Type]
+Chip = MT6255
+GPIO_ModeNum = 8
+GPIO_Pull_Sel=1
+PMIC_Config=1
+PMIC_Volt_Format = 1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(SPI_MOSI) MODE2(CLKM1) MODE3(SCL) MODE4(LSCE1B) MODE5(BPI_BUS6) MODE6(dbg_usb_din[0]) MODE7() PD
+GPIO1 = MODE0(GPIO1) MODE1(SPI_MISO) MODE2(PWM_B) MODE3(UCTS2) MODE4(EINT12) MODE5(BPI_BUS7) MODE6(dbg_usb_din[1]) MODE7() PD
+GPIO2 = MODE0(GPIO2) MODE1(SPI_SCK) MODE2(SRCLKENAN) MODE3(URTS2) MODE4(PTA1) MODE5(BPI_BUS8) MODE6(dbg_usb_din[2]) MODE7() PD
+GPIO3 = MODE0(GPIO3) MODE1(SPI_CS_N) MODE2() MODE3(SDA) MODE4(PTA0) MODE5(BPI_BUS9) MODE6(dbg_usb_din[3]) MODE7() PD
+GPIO4 = MODE0(GPIO4) MODE1(URXD1) MODE2() MODE3(MC2INS) MODE4(PTA1) MODE5(PWM_C) MODE6(dbg_usb_din[4]) MODE7(UTXD1) PU
+GPIO5 = MODE0(GPIO5) MODE1(UTXD1) MODE2(CLKM3) MODE3(MC1INS) MODE4(PTA0) MODE5() MODE6(dbg_usb_din[5]) MODE7(URXD1) PU
+GPIO6 = MODE0(GPIO6) MODE1(UCTS1) MODE2(URXD3) MODE3(EINT7) MODE4(SRCLKENAI) MODE5(SCL) MODE6(dbg_usb_din[6]) MODE7() PU
+GPIO7 = MODE0(GPIO7) MODE1(URTS1) MODE2(UTXD3) MODE3(EINT8) MODE4(SRCLKENA) MODE5(SDA) MODE6(dbg_usb_din[7]) MODE7() PU
+GPIO8 = MODE0(GPIO8) MODE1(URXD2) MODE2(UCTS3) MODE3(MC2INS) MODE4(PTA1) MODE5(CLKM2) MODE6(dbg_usb_din[8]) MODE7(UTXD2) PD
+GPIO9 = MODE0(GPIO9) MODE1(UTXD2) MODE2(URTS3) MODE3(MC1INS) MODE4(PTA0) MODE5() MODE6() MODE7(URXD2) PD
+GPIO10 = MODE0(GPIO10) MODE1(LSA0) MODE2(URXD3) MODE3(PWM_IN) MODE4(EDICK) MODE5(SRCLKENA) MODE6(TDMA_SDAT[1]) MODE7(UTXD3) PD
+GPIO11 = MODE0(GPIO11) MODE1(LSCK) MODE2(UTXD3) MODE3(PWM_A) MODE4(EDIWS) MODE5(SRCLKENAI) MODE6() MODE7(URXD3) PD
+GPIO12 = MODE0(GPIO12) MODE1(LSDA) MODE2(LPCE3B) MODE3(EINT10) MODE4(EDIDAT) MODE5(SRCLKENAN) MODE6(TDMA_SDAT[0]) MODE7() PD
+GPIO13 = MODE0(GPIO13) MODE1(LPCE2B) MODE2(LSCE1B) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO14 = MODE0(GPIO14) MODE1(LPCE1B) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO15 = MODE0(GPIO15) MODE1(LPCE0B) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO16 = MODE0(GPIO16) MODE1(LPTE) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO17 = MODE0(GPIO17) MODE1(LRSTB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO18 = MODE0(GPIO18) MODE1(LRDB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO19 = MODE0(GPIO19) MODE1(LPA0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO20 = MODE0(GPIO20) MODE1(LWRB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO21 = MODE0(GPIO21) MODE1(NLD17) MODE2(URXD3) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO22 = MODE0(GPIO22) MODE1(NLD16) MODE2(UTXD3) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO23 = MODE0(GPIO23) MODE1(NLD15) MODE2(SFIO0) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO24 = MODE0(GPIO24) MODE1(NLD14) MODE2(SFIO1) MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[12]) MODE7() PD
+GPIO25 = MODE0(GPIO25) MODE1(NLD13) MODE2(SFIO3) MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_A_FUNC_DCK) MODE7(dbg_MIXED_A_FUNC_DCK) PD
+GPIO26 = MODE0(GPIO26) MODE1(NLD12) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO27 = MODE0(GPIO27) MODE1(NLD11) MODE2(SFCS) MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[11]) MODE7() PD
+GPIO28 = MODE0(GPIO28) MODE1(NLD10) MODE2(SFIO2) MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[10]) MODE7() PD
+GPIO29 = MODE0(GPIO29) MODE1(NLD9) MODE2(SFCLK) MODE3() MODE4() MODE5(dbg_usb_dout[9]) MODE6(dbg_CLKSW_DIO[9]) MODE7() PD
+GPIO30 = MODE0(GPIO30) MODE1(NLD8) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[8]) MODE6(dbg_CLKSW_DIO[8]) MODE7() PD
+GPIO31 = MODE0(GPIO31) MODE1(NLD7) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[7]) MODE6(dbg_CLKSW_DIO[7]) MODE7(dbg_MIXED_DIO[7]) PD
+GPIO32 = MODE0(GPIO32) MODE1(NLD6) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[6]) MODE6(dbg_CLKSW_DIO[6]) MODE7(dbg_MIXED_DIO[6]) PD
+GPIO33 = MODE0(GPIO33) MODE1(NLD5) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[5]) MODE6(dbg_CLKSW_DIO[5]) MODE7(dbg_MIXED_DIO[5]) PD
+GPIO34 = MODE0(GPIO34) MODE1(NLD4) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[4]) MODE6(dbg_CLKSW_DIO[4]) MODE7(dbg_MIXED_DIO[4]) PD
+GPIO35 = MODE0(GPIO35) MODE1(NLD3) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[3]) MODE6(dbg_CLKSW_DIO[3]) MODE7(dbg_MIXED_DIO[3]) PD
+GPIO36 = MODE0(GPIO36) MODE1(NLD2) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[2]) MODE6(dbg_CLKSW_DIO[2]) MODE7(dbg_MIXED_DIO[2]) PD
+GPIO37 = MODE0(GPIO37) MODE1(NLD1) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[1]) MODE6(dbg_CLKSW_DIO[1]) MODE7(dbg_MIXED_DIO[1]) PD
+GPIO38 = MODE0(GPIO38) MODE1(NLD0) MODE2() MODE3() MODE4() MODE5(dbg_usb_dout[0]) MODE6(dbg_CLKSW_DIO[0]) MODE7(dbg_MIXED_DIO[0]) PD
+GPIO39 = MODE0(GPIO39) MODE1(NRNB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO40 = MODE0(GPIO40) MODE1(NCLE) MODE2(KROW7) MODE3(MC1DA4) MODE4() MODE5() MODE6() MODE7() PD
+GPIO41 = MODE0(GPIO41) MODE1(NALE) MODE2(KCOL7) MODE3(MC1DA5) MODE4() MODE5() MODE6() MODE7() PD
+GPIO42 = MODE0(GPIO42) MODE1(NWEB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO43 = MODE0(GPIO43) MODE1(NREB) MODE2() MODE3(MC1DA7) MODE4() MODE5() MODE6() MODE7() PU
+GPIO44 = MODE0(GPIO44) MODE1(NCE0B) MODE2(KROW6) MODE3(MC1DA6) MODE4() MODE5() MODE6() MODE7() PU
+GPIO45 = MODE0(GPIO45) MODE1(CMRST) MODE2() MODE3(D2_TID1) MODE4(dbg_mon[0]) MODE5() MODE6() MODE7() PD
+GPIO46 = MODE0(GPIO46) MODE1(CMPDN) MODE2() MODE3(D2_TID2) MODE4(dbg_mon[1]) MODE5(dbg_bt_ids_in) MODE6() MODE7(dbg_fm_ids_out[12]) PD
+GPIO47 = MODE0(GPIO47) MODE1(CMVSYNC) MODE2() MODE3() MODE4(dbg_mon[2]) MODE5(dbg_bt_ids_out[11]) MODE6(dbg_rf_test_sdatai) MODE7(dbg_fm_ids_out[11]) PD
+GPIO48 = MODE0(GPIO48) MODE1(CMHSYNC) MODE2() MODE3() MODE4(dbg_mon[3]) MODE5(dbg_bt_ids_out[10]) MODE6(dbg_rf_test_en) MODE7(dbg_fm_ids_out[10]) PD
+GPIO49 = MODE0(GPIO49) MODE1(CMPCLK) MODE2(CM_SSCK) MODE3() MODE4(dbg_mon[4]) MODE5(dbg_bt_ids_out[9]) MODE6(dbg_rf_test_sclk) MODE7(dbg_fm_ids_out[9]) PD
+GPIO50 = MODE0(GPIO50) MODE1(CMMCLK) MODE2() MODE3() MODE4(dbg_mon[5]) MODE5(dbg_bt_ids_out[8]) MODE6(dbg_rf_test_auxout) MODE7(dbg_fm_ids_out[8]) PD
+GPIO51 = MODE0(GPIO51) MODE1(CMDAT7) MODE2(BPI_BUS6) MODE3(D2_TID3) MODE4(dbg_mon[6]) MODE5(dbg_bt_ids_out[7]) MODE6(dbg_rf_test_dcxodelay) MODE7(dbg_fm_ids_out[7]) PD
+GPIO52 = MODE0(GPIO52) MODE1(CMDAT6) MODE2(BPI_BUS7) MODE3(D2_TID4) MODE4(dbg_mon[7]) MODE5(dbg_bt_ids_out[6]) MODE6(dbg_rf_test_enext) MODE7(dbg_fm_ids_out[6]) PD
+GPIO53 = MODE0(GPIO53) MODE1(CMDAT5) MODE2(BPI_BUS8) MODE3(D2_TID5) MODE4(dbg_mon[8]) MODE5(dbg_bt_ids_out[5]) MODE6(dbg_rf_test_enbt) MODE7(dbg_fm_ids_out[5]) PD
+GPIO54 = MODE0(GPIO54) MODE1(CMDAT4) MODE2(BPI_BUS9) MODE3(D2_TID6) MODE4(dbg_mon[9]) MODE5(dbg_bt_ids_out[4]) MODE6(dbg_rf_test_enbb) MODE7(dbg_fm_ids_out[4]) PD
+GPIO55 = MODE0(GPIO55) MODE1(CMDAT3) MODE2() MODE3(D2_TID7) MODE4(dbg_mon[10]) MODE5(dbg_bt_ids_out[3]) MODE6(dbg_rf_test_sdatao) MODE7(dbg_fm_ids_out[3]) PD
+GPIO56 = MODE0(GPIO56) MODE1(CMDAT2) MODE2() MODE3(D2_TID0) MODE4(dbg_mon[11]) MODE5(dbg_bt_ids_out[2]) MODE6(dbg_rf_test_sdatai) MODE7(dbg_fm_ids_out[2]) PD
+GPIO57 = MODE0(GPIO57) MODE1(CMDAT1) MODE2() MODE3() MODE4(dbg_mon[12]) MODE5(dbg_bt_ids_out[1]) MODE6(dbg_rf_test_en) MODE7(dbg_fm_ids_out[1]) PD
+GPIO58 = MODE0(GPIO58) MODE1(CMDAT0) MODE2(CM_SSDA) MODE3(D2ICK) MODE4(dbg_mon[13]) MODE5(dbg_bt_ids_out[0]) MODE6(dbg_rf_test_sclk) MODE7(dbg_fm_ids_out[0]) PD
+GPIO59 = MODE0(GPIO59) MODE1(SCL) MODE2() MODE3(D2ID) MODE4(dbg_mon[14]) MODE5(dbg_srclkena) MODE6(dbg_ABBSYS_DIO[0]) MODE7(dbg_MIXED_DIO[0]) PD
+GPIO60 = MODE0(GPIO60) MODE1(SDA) MODE2() MODE3(D2IMS) MODE4(dbg_mon[15]) MODE5() MODE6(dbg_ABBSYS_DIO[1]) MODE7(dbg_MIXED_DIO[1]) PD
+GPIO61 = MODE0(GPIO61) MODE1(EINT0) MODE2(LSCE0B) MODE3(CLKM6) MODE4() MODE5(NCE1B) MODE6(dbg_ABBSYS_DIO[2]) MODE7(dbg_MIXED_DIO[2]) PD
+GPIO62 = MODE0(GPIO62) MODE1(EINT1) MODE2(CIRQ0) MODE3(CLKM7) MODE4() MODE5() MODE6(dbg_ABBSYS_DIO[3]) MODE7(dbg_MIXED_DIO[3]) PD
+GPIO63 = MODE0(GPIO63) MODE1(EINT2) MODE2(CIRQ1) MODE3() MODE4() MODE5() MODE6(dbg_ABBSYS_DIO[4]) MODE7(dbg_MIXED_DIO[4]) PD
+GPIO64 = MODE0(GPIO64) MODE1(EINT3) MODE2(CIRQ2) MODE3(UCTS3) MODE4() MODE5() MODE6(dbg_ABBSYS_DIO[5]) MODE7(dbg_MIXED_DIO[5]) PD
+GPIO65 = MODE0(GPIO65) MODE1(EINT4) MODE2(PWM_C) MODE3(URTS3) MODE4(LSDI) MODE5() MODE6(dbg_ABBSYS_DIO[6]) MODE7(dbg_MIXED_DIO[6]) PD
+GPIO66 = MODE0(GPIO66) MODE1(DAICLK) MODE2(KROW6) MODE3(MC1INS) MODE4() MODE5() MODE6(dbg_ABBSYS_DIO[7]) MODE7(dbg_MIXED_DIO[7]) PD
+GPIO67 = MODE0(GPIO67) MODE1(DAIPCMOUT) MODE2(EDICK) MODE3(KCOL7) MODE4(SRCLKENAN) MODE5() MODE6(dbg_ABBSYS_DIO[8]) MODE7() PD
+GPIO68 = MODE0(GPIO68) MODE1(DAIPCMIN) MODE2(EDIWS) MODE3(CLKM4) MODE4(SCL) MODE5() MODE6(dbg_ABBSYS_DIO[9]) MODE7() PD
+GPIO69 = MODE0(GPIO69) MODE1(DAIRST) MODE2(EDIDAT) MODE3(SRCLKENA) MODE4(SDA) MODE5() MODE6(dbg_ABBSYS_DIO[10]) MODE7() PD
+GPIO70 = MODE0(GPIO70) MODE1(DAISYNC) MODE2(KROW7) MODE3(LSDI) MODE4(PWM_IN) MODE5() MODE6(dbg_ABBSYS_A_FUNC_DCK) MODE7(dbg_MIXED_A_FUNC_DCK) PD
+GPIO71 = MODE0(GPIO71) MODE1(KCOL6) MODE2(MC2INS) MODE3(LSDI) MODE4(PWM_IN) MODE5(EINT4) MODE6() MODE7() PU
+GPIO72 = MODE0(GPIO72) MODE1(KCOL5) MODE2(EINT5) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO73 = MODE0(GPIO73) MODE1(KCOL4) MODE2(SCL) MODE3() MODE4() MODE5(CLKSW_HMON_DATA[3]) MODE6(ABBSYS_HMON_DATA[3]) MODE7(MIXED_HMON_DATA[3]) PU
+GPIO74 = MODE0(GPIO74) MODE1(KCOL3) MODE2() MODE3() MODE4() MODE5(CLKSW_HMON_DATA[2]) MODE6(ABBSYS_HMON_DATA[2]) MODE7(MIXED_HMON_DATA[2]) PU
+GPIO75 = MODE0(GPIO75) MODE1(KCOL2) MODE2() MODE3() MODE4() MODE5(CLKSW_HMON_DATA[1]) MODE6(ABBSYS_HMON_DATA[1]) MODE7(MIXED_HMON_DATA[1]) PU
+GPIO76 = MODE0(GPIO76) MODE1(KCOL1) MODE2() MODE3() MODE4() MODE5(CLKSW_HMON_DATA[0]) MODE6(ABBSYS_HMON_DATA[0]) MODE7(MIXED_HMON_DATA[0]) PU
+GPIO77 = MODE0(GPIO77) MODE1(KCOL0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO78 = MODE0(GPIO78) MODE1(KROW5) MODE2(EINT11) MODE3(SRCLKENAI) MODE4(MC2WP) MODE5(CLKSW_LMON_DATA[3]) MODE6(ABBSYS_LMON_DATA[3]) MODE7(MIXED_LMON_DATA[3]) PD
+GPIO79 = MODE0(GPIO79) MODE1(KROW4) MODE2(PWM_D) MODE3(CLKM5) MODE4(MC1WP) MODE5(EINT6) MODE6(dbg_ABBSYS_DIO[11]) MODE7() PD
+GPIO80 = MODE0(GPIO80) MODE1(KROW3) MODE2(SDA) MODE3() MODE4() MODE5() MODE6(dbg_ABBSYS_DIO[12]) MODE7() PD
+GPIO81 = MODE0(GPIO81) MODE1(KROW2) MODE2() MODE3() MODE4() MODE5(CLKSW_LMON_DATA[2]) MODE6(ABBSYS_LMON_DATA[2]) MODE7(MIXED_LMON_DATA[2]) PD
+GPIO82 = MODE0(GPIO82) MODE1(KROW1) MODE2() MODE3() MODE4() MODE5(CLKSW_LMON_DATA[1]) MODE6(ABBSYS_LMON_DATA[1]) MODE7(MIXED_LMON_DATA[1]) PD
+GPIO83 = MODE0(GPIO83) MODE1(KROW0) MODE2() MODE3() MODE4() MODE5(CLKSW_LMON_DATA[0]) MODE6(ABBSYS_LMON_DATA[0]) MODE7(MIXED_LMON_DATA[0]) PD
+GPIO84 = MODE0(GPIO84) MODE1(MC1RST) MODE2(MC1WP) MODE3(LSCE0B) MODE4(PTA1) MODE5() MODE6() MODE7() PD
+GPIO85 = MODE0(GPIO85) MODE1(MC1CK_FB) MODE2(MC2WP) MODE3() MODE4(PTA0) MODE5(BT_DBGI_N) MODE6() MODE7() PU
+GPIO86 = MODE0(GPIO86) MODE1(MC1CM0) MODE2() MODE3() MODE4() MODE5(BT_TRST_B) MODE6(dbg_mon[0]) MODE7(dbg_usb_dio[0]) PU
+GPIO87 = MODE0(GPIO87) MODE1(MC1DA0) MODE2() MODE3() MODE4() MODE5(BT_TCK) MODE6(dbg_mon[1]) MODE7(dbg_usb_dio[1]) PU
+GPIO88 = MODE0(GPIO88) MODE1(MC1DA1) MODE2() MODE3() MODE4() MODE5(BT_TDI) MODE6(dbg_mon[2]) MODE7(dbg_usb_dio[2]) PU
+GPIO89 = MODE0(GPIO89) MODE1(MC1DA2) MODE2() MODE3() MODE4() MODE5(BT_TMS) MODE6(dbg_mon[3]) MODE7(dbg_usb_dio[3]) PU
+GPIO90 = MODE0(GPIO90) MODE1(MC1DA3) MODE2() MODE3() MODE4() MODE5(BT_TDO) MODE6(dbg_mon[4]) MODE7(dbg_usb_dio[4]) PU
+GPIO91 = MODE0(GPIO91) MODE1(MC1CK) MODE2(EINT13) MODE3() MODE4() MODE5(BT_DBGACK_N) MODE6() MODE7() PU
+GPIO92 = MODE0(GPIO92) MODE1(MC2CM0) MODE2(MC1DA4) MODE3(KROW7) MODE4(URXD2) MODE5(PTA1) MODE6(dbg_mon[5]) MODE7(dbg_usb_dio[5]) PD
+GPIO93 = MODE0(GPIO93) MODE1(MC2DA0) MODE2(MC1DA5) MODE3(KCOL7) MODE4(UTXD2) MODE5(PTA0) MODE6(dbg_mon[6]) MODE7(dbg_usb_dio[6]) PD
+GPIO94 = MODE0(GPIO94) MODE1(MC2DA1) MODE2(MC1DA6) MODE3(KROW6) MODE4(PWM_A) MODE5(EDICK) MODE6(dbg_mon[7]) MODE7(dbg_usb_dio[7]) PD
+GPIO95 = MODE0(GPIO95) MODE1(MC2CK) MODE2(MC1DA7) MODE3(PWM_IN) MODE4(CLKM0) MODE5() MODE6() MODE7() PD
+GPIO96 = MODE0(GPIO96) MODE1(BPI_BUS0) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_mon[10]) MODE7(dbg_usb_dio[10]) PD
+GPIO97 = MODE0(GPIO97) MODE1(BPI_BUS1) MODE2(LSCE0B) MODE3() MODE4() MODE5() MODE6(dbg_mon[11]) MODE7(dbg_usb_dio[11]) PD
+GPIO98 = MODE0(GPIO98) MODE1(BPI_BUS2) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_mon[12]) MODE7(dbg_usb_dio[12]) PD
+GPIO99 = MODE0(GPIO99) MODE1(BPI_BUS3) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_mon[13]) MODE7(dbg_usb_dio[13]) PD
+GPIO100 = MODE0(GPIO100) MODE1(BPI_BUS4) MODE2(MC2INS) MODE3(LSCE1B) MODE4() MODE5() MODE6(dbg_mon[14]) MODE7(dbg_usb_dio[14]) PD
+GPIO101 = MODE0(GPIO101) MODE1(BPI_BUS5) MODE2(MC1INS) MODE3(EINT14) MODE4() MODE5() MODE6(dbg_mon[15]) MODE7(dbg_usb_dio[15]) PD
+GPIO102 = MODE0(GPIO102) MODE1(MC2DA2) MODE2(EINT6) MODE3() MODE4(PWM_D) MODE5(EDIWS) MODE6(dbg_mon[8]) MODE7(dbg_usb_dio[8]) PD
+GPIO103 = MODE0(GPIO103) MODE1(MC2DA3) MODE2(EINT9) MODE3() MODE4(MC1INS) MODE5(EDIDAT) MODE6(dbg_mon[9]) MODE7(dbg_usb_dio[9]) PD
+GPIO104 = MODE0(GPIO104) MODE1(EINT5) MODE2(MC1INS) MODE3(PWM_IN) MODE4(CLKM8) MODE5() MODE6() MODE7() PD
+
+[GPO]
+
+[EINT]
+EINT_COUNT=16
+EINT_DEBOUNCE_TIME_COUNT=16
+
+[EINT_EX_PIN]
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+22
+
+[EINT_INT_PIN]
+
+
+[ADC]
+ADC_COUNT = 5
+
+[ADC_INT_CH]
+0 = ADC_VBAT
+1 = ADC_VISENSE
+2 = ADC_VCHARGER
+3 = ADC_VBATTMP
+
+
+[ADC_EX_CH]
+6
+7
+13
+14
+15
+
+
+[KEYPAD]
+KEY_ROW=8
+KEY_COLUMN=9
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6256NP.fig b/mcu/custom/driver/drv/Drv_Tool/MT6256NP.fig
new file mode 100644
index 0000000..10f779f
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6256NP.fig
@@ -0,0 +1,154 @@
+[Chip Type]
+Chip = MT6256
+GPIO_Pull_Sel=1
+PMIC_Config=1
+PMIC_Volt_Format=1
+GPIO_ModeNum=8
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(SPI_MOSI) MODE2(CLKM1) MODE3(SCL) MODE4() MODE5(BPI_BUS6) MODE6() MODE7() PD
+GPIO1 = MODE0(GPIO1) MODE1(SPI_MISO) MODE2(PWM_B) MODE3(UCTS2) MODE4() MODE5(BPI_BUS7) MODE6() MODE7() PD
+GPIO2 = MODE0(GPIO2) MODE1(SPI_SCK) MODE2(SRCLKENAN) MODE3(URTS2) MODE4(PTA1) MODE5(BPI_BUS8) MODE6() MODE7() PD
+GPIO3 = MODE0(GPIO3) MODE1(SPI_CS_N) MODE2() MODE3(SDA) MODE4(PTA0) MODE5(BPI_BUS9) MODE6() MODE7() PD
+GPIO4 = MODE0(GPIO4) MODE1(URXD1) MODE2() MODE3(MC2INS) MODE4(PTA1) MODE5(PWM_C) MODE6() MODE7(UTXD1) PU
+GPIO5 = MODE0(GPIO5) MODE1(UTXD1) MODE2(CLKM3) MODE3(MC1INS) MODE4(PTA0) MODE5() MODE6() MODE7(URXD1) PU
+GPIO6 = MODE0(GPIO6) MODE1(UCTS1) MODE2(URXD3) MODE3(EINT7) MODE4(SRCLKENAI) MODE5(SCL) MODE6() MODE7() PU
+GPIO7 = MODE0(GPIO7) MODE1(URTS1) MODE2(UTXD3) MODE3(EINT8) MODE4(SRCLKENA) MODE5(SDA) MODE6() MODE7() PU
+GPIO8 = MODE0(GPIO8) MODE1(URXD2) MODE2(UCTS3) MODE3(MC2INS) MODE4(PTA1) MODE5(CLKM2) MODE6() MODE7(UTXD2) PD
+GPIO9 = MODE0(GPIO9) MODE1(UTXD2) MODE2(URTS3) MODE3(MC1INS) MODE4(PTA0) MODE5() MODE6() MODE7(URXD2) PD
+GPIO10 = MODE0(GPIO10) MODE1(LSA0) MODE2(URXD3) MODE3(PWM_IN) MODE4(EDICK) MODE5(SRCLKENA) MODE6(TDMA_SDAT[1]) MODE7(UTXD3) PD
+GPIO11 = MODE0(GPIO11) MODE1(LSCK) MODE2(UTXD3) MODE3(PWM_A) MODE4(EDIWS) MODE5(SRCLKENAI) MODE6() MODE7(URXD3) PD
+GPIO12 = MODE0(GPIO12) MODE1(LSDA) MODE2(LPCE3B) MODE3(EINT10) MODE4(EDIDAT) MODE5(SRCLKENAN) MODE6(TDMA_SDAT[0]) MODE7() PD
+GPIO13 = MODE0(GPIO13) MODE1(LPCE2B) MODE2(LSCE1B) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO14 = MODE0(GPIO14) MODE1(LPCE1B) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO15 = MODE0(GPIO15) MODE1(LPCE0B) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO16 = MODE0(GPIO16) MODE1(LPTE) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO17 = MODE0(GPIO17) MODE1(LRSTB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO18 = MODE0(GPIO18) MODE1(LRDB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO19 = MODE0(GPIO19) MODE1(LPA0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO20 = MODE0(GPIO20) MODE1(LWRB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO21 = MODE0(GPIO21) MODE1(NLD17) MODE2(URXD3) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO22 = MODE0(GPIO22) MODE1(NLD16) MODE2(UTXD3) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO23 = MODE0(GPIO23) MODE1(NLD15) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO24 = MODE0(GPIO24) MODE1(NLD14) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO25 = MODE0(GPIO25) MODE1(NLD13) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_A_FUNC_DCK) MODE7(dbg_MIXED_A_FUNC_DCK) PD
+GPIO26 = MODE0(GPIO26) MODE1(NLD12) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[12]) MODE7() PD
+GPIO27 = MODE0(GPIO27) MODE1(NLD11) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[11]) MODE7() PD
+GPIO28 = MODE0(GPIO28) MODE1(NLD10) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[10]) MODE7() PD
+GPIO29 = MODE0(GPIO29) MODE1(NLD9) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[9]) MODE7() PD
+GPIO30 = MODE0(GPIO30) MODE1(NLD8) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[8]) MODE7() PD
+GPIO31 = MODE0(GPIO31) MODE1(NLD7) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[7]) MODE7(dbg_MIXED_DIO[7]) PD
+GPIO32 = MODE0(GPIO32) MODE1(NLD6) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[6]) MODE7(dbg_MIXED_DIO[6]) PD
+GPIO33 = MODE0(GPIO33) MODE1(NLD5) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[5]) MODE7(dbg_MIXED_DIO[5]) PD
+GPIO34 = MODE0(GPIO34) MODE1(NLD4) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[4]) MODE7(dbg_MIXED_DIO[4]) PD
+GPIO35 = MODE0(GPIO35) MODE1(NLD3) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[3]) MODE7(dbg_MIXED_DIO[3]) PD
+GPIO36 = MODE0(GPIO36) MODE1(NLD2) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[2]) MODE7(dbg_MIXED_DIO[2]) PD
+GPIO37 = MODE0(GPIO37) MODE1(NLD1) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[1]) MODE7(dbg_MIXED_DIO[1]) PD
+GPIO38 = MODE0(GPIO38) MODE1(NLD0) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[0]) MODE7(dbg_MIXED_DIO[0]) PD
+GPIO39 = MODE0(GPIO39) MODE1(NRNB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO40 = MODE0(GPIO40) MODE1(NCLE) MODE2(KROW7) MODE3(MC1DA4) MODE4() MODE5() MODE6() MODE7() PD
+GPIO41 = MODE0(GPIO41) MODE1(NALE) MODE2(KCOL7) MODE3(MC1DA5) MODE4() MODE5() MODE6() MODE7() PD
+GPIO42 = MODE0(GPIO42) MODE1(NWEB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO43 = MODE0(GPIO43) MODE1(NREB) MODE2() MODE3(MC1DA7) MODE4() MODE5() MODE6() MODE7() PU
+GPIO44 = MODE0(GPIO44) MODE1(NCE0B) MODE2(KROW6) MODE3(MC1DA6) MODE4() MODE5() MODE6() MODE7() PU
+GPIO45 = MODE0(GPIO45) MODE1(CMRST) MODE2() MODE3(D2_TID1) MODE4(dbg_mon[0]) MODE5() MODE6() MODE7() PD
+GPIO46 = MODE0(GPIO46) MODE1(CMPDN) MODE2() MODE3(D2_TID2) MODE4(dbg_mon[1]) MODE5(dbg_bt_ids_in) MODE6() MODE7(dbg_fm_ids_out[12]) PD
+GPIO47 = MODE0(GPIO47) MODE1(CMVSYNC) MODE2() MODE3() MODE4(dbg_mon[2]) MODE5(dbg_bt_ids_out[11]) MODE6(dbg_rf_test_sdatai) MODE7(dbg_fm_ids_out[11]) PD
+GPIO48 = MODE0(GPIO48) MODE1(CMHSYNC) MODE2() MODE3() MODE4(dbg_mon[3]) MODE5(dbg_bt_ids_out[10]) MODE6(dbg_rf_test_en) MODE7(dbg_fm_ids_out[10]) PD
+GPIO49 = MODE0(GPIO49) MODE1(CMPCLK) MODE2(CM_SSCK) MODE3() MODE4(dbg_mon[4]) MODE5(dbg_bt_ids_out[9]) MODE6(dbg_rf_test_sclk) MODE7(dbg_fm_ids_out[9]) PD
+GPIO50 = MODE0(GPIO50) MODE1(CMMCLK) MODE2() MODE3() MODE4(dbg_mon[5]) MODE5(dbg_bt_ids_out[8]) MODE6(dbg_rf_test_auxout) MODE7(dbg_fm_ids_out[8]) PD
+GPIO51 = MODE0(GPIO51) MODE1(CMDAT7) MODE2(BPI_BUS6) MODE3(D2_TID3) MODE4(dbg_mon[6]) MODE5(dbg_bt_ids_out[7]) MODE6(dbg_rf_test_dcxodelay) MODE7(dbg_fm_ids_out[7]) PD
+GPIO52 = MODE0(GPIO52) MODE1(CMDAT6) MODE2(BPI_BUS7) MODE3(D2_TID4) MODE4(dbg_mon[7]) MODE5(dbg_bt_ids_out[6]) MODE6(dbg_rf_test_enext) MODE7(dbg_fm_ids_out[6]) PD
+GPIO53 = MODE0(GPIO53) MODE1(CMDAT5) MODE2(BPI_BUS8) MODE3(D2_TID5) MODE4(dbg_mon[8]) MODE5(dbg_bt_ids_out[5]) MODE6(dbg_rf_test_enbt) MODE7(dbg_fm_ids_out[5]) PD
+GPIO54 = MODE0(GPIO54) MODE1(CMDAT4) MODE2(BPI_BUS9) MODE3(D2_TID6) MODE4(dbg_mon[9]) MODE5(dbg_bt_ids_out[4]) MODE6(dbg_rf_test_enbb) MODE7(dbg_fm_ids_out[4]) PD
+GPIO55 = MODE0(GPIO55) MODE1(CMDAT3) MODE2() MODE3(D2_TID7) MODE4(dbg_mon[10]) MODE5(dbg_bt_ids_out[3]) MODE6(dbg_rf_test_sdatao) MODE7(dbg_fm_ids_out[3]) PD
+GPIO56 = MODE0(GPIO56) MODE1(CMDAT2) MODE2() MODE3(D2_TID0) MODE4(dbg_mon[11]) MODE5(dbg_bt_ids_out[2]) MODE6(dbg_rf_test_sdatai) MODE7(dbg_fm_ids_out[2]) PD
+GPIO57 = MODE0(GPIO57) MODE1(CMDAT1) MODE2() MODE3() MODE4(dbg_mon[12]) MODE5(dbg_bt_ids_out[1]) MODE6(dbg_rf_test_en) MODE7(dbg_fm_ids_out[1]) PD
+GPIO58 = MODE0(GPIO58) MODE1(CMDAT0) MODE2(CM_SSDA) MODE3(D2ICK) MODE4(dbg_mon[13]) MODE5(dbg_bt_ids_out[0]) MODE6(dbg_rf_test_sclk) MODE7(dbg_fm_ids_out[0]) PD
+GPIO59 = MODE0(GPIO59) MODE1(SCL) MODE2() MODE3(D2ID) MODE4(dbg_mon[14]) MODE5(dbg_srclkena) MODE6() MODE7() PD
+GPIO60 = MODE0(GPIO60) MODE1(SDA) MODE2() MODE3(D2IMS) MODE4(dbg_mon[15]) MODE5() MODE6() MODE7() PD
+GPIO61 = MODE0(GPIO61) MODE1(EINT0) MODE2(LSCE0B) MODE3() MODE4() MODE5(NCE1B) MODE6() MODE7() PD
+GPIO62 = MODE0(GPIO62) MODE1(EINT1) MODE2(CIRQ0) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO63 = MODE0(GPIO63) MODE1(EINT2) MODE2(CIRQ1) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO64 = MODE0(GPIO64) MODE1(EINT3) MODE2(CIRQ2) MODE3(UCTS3) MODE4() MODE5() MODE6() MODE7() PD
+GPIO65 = MODE0(GPIO65) MODE1(EINT4) MODE2(PWM_C) MODE3(URTS3) MODE4(LSDI) MODE5() MODE6() MODE7() PD
+GPIO66 = MODE0(GPIO66) MODE1(DAICLK) MODE2(KROW6) MODE3(MC1INS) MODE4() MODE5() MODE6() MODE7() PD
+GPIO67 = MODE0(GPIO67) MODE1(DAIPCMOUT) MODE2(EDICK) MODE3(KCOL7) MODE4(SRCLKENAN) MODE5() MODE6() MODE7() PD
+GPIO68 = MODE0(GPIO68) MODE1(DAIPCMIN) MODE2(EDIWS) MODE3(CLKM4) MODE4(SCL) MODE5() MODE6() MODE7() PD
+GPIO69 = MODE0(GPIO69) MODE1(DAIRST) MODE2(EDIDAT) MODE3(SRCLKENA) MODE4(SDA) MODE5() MODE6() MODE7() PD
+GPIO70 = MODE0(GPIO70) MODE1(DAISYNC) MODE2(KROW7) MODE3(LSDI) MODE4(PWM_IN) MODE5() MODE6() MODE7() PD
+GPIO71 = MODE0(GPIO71) MODE1(KCOL6) MODE2(MC2INS) MODE3(LSDI) MODE4(PWM_IN) MODE5(EINT4) MODE6() MODE7() PU
+GPIO72 = MODE0(GPIO72) MODE1(KCOL5) MODE2(EINT5) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO73 = MODE0(GPIO73) MODE1(KCOL4) MODE2(SCL) MODE3() MODE4() MODE5() MODE6(CLKSW_HMON_DATA[3]) MODE7(MIXED_HMON_DATA[3]) PU
+GPIO74 = MODE0(GPIO74) MODE1(KCOL3) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_HMON_DATA[2]) MODE7(MIXED_HMON_DATA[2]) PU
+GPIO75 = MODE0(GPIO75) MODE1(KCOL2) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_HMON_DATA[1]) MODE7(MIXED_HMON_DATA[1]) PU
+GPIO76 = MODE0(GPIO76) MODE1(KCOL1) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_HMON_DATA[0]) MODE7(MIXED_HMON_DATA[0]) PU
+GPIO77 = MODE0(GPIO77) MODE1(KCOL0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO78 = MODE0(GPIO78) MODE1(KROW5) MODE2(EINT11) MODE3(SRCLKENAI) MODE4(MC2WP) MODE5() MODE6() MODE7() PD
+GPIO79 = MODE0(GPIO79) MODE1(KROW4) MODE2(PWM_D) MODE3(CLKM5) MODE4(MC1WP) MODE5(EINT6) MODE6(CLKSW_LMON_DATA[3]) MODE7(MIXED_LMON_DATA[3]) PD
+GPIO80 = MODE0(GPIO80) MODE1(KROW3) MODE2(SDA) MODE3() MODE4() MODE5() MODE6(CLKSW_LMON_DATA[2]) MODE7(MIXED_LMON_DATA[2]) PD
+GPIO81 = MODE0(GPIO81) MODE1(KROW2) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_LMON_DATA[1]) MODE7(MIXED_LMON_DATA[1]) PD
+GPIO82 = MODE0(GPIO82) MODE1(KROW1) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_LMON_DATA[0]) MODE7(MIXED_LMON_DATA[0]) PD
+GPIO83 = MODE0(GPIO83) MODE1(KROW0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO84 = MODE0(GPIO84) MODE1(MC1RST) MODE2(MC1WP) MODE3() MODE4(PTA1) MODE5() MODE6() MODE7() PU
+GPIO85 = MODE0(GPIO85) MODE1(MC1CK_FB) MODE2(MC2WP) MODE3() MODE4(PTA0) MODE5(BT_DBGI_N) MODE6() MODE7() PU
+GPIO86 = MODE0(GPIO86) MODE1(MC1CM0) MODE2() MODE3() MODE4() MODE5(BT_TRST_B) MODE6() MODE7() PU
+GPIO87 = MODE0(GPIO87) MODE1(MC1DA0) MODE2() MODE3() MODE4() MODE5(BT_TCK) MODE6() MODE7() PU
+GPIO88 = MODE0(GPIO88) MODE1(MC1DA1) MODE2() MODE3() MODE4() MODE5(BT_TDI) MODE6() MODE7() PU
+GPIO89 = MODE0(GPIO89) MODE1(MC1DA2) MODE2() MODE3() MODE4() MODE5(BT_TMS) MODE6() MODE7() PU
+GPIO90 = MODE0(GPIO90) MODE1(MC1DA3) MODE2() MODE3() MODE4() MODE5(BT_TDO) MODE6() MODE7() PU
+GPIO91 = MODE0(GPIO91) MODE1(MC1CK) MODE2() MODE3() MODE4() MODE5(BT_DBGACK_N) MODE6() MODE7() PU
+GPIO92 = MODE0(GPIO92) MODE1(MC2CM0) MODE2(MC1DA4) MODE3(KROW7) MODE4(URXD2) MODE5(PTA1) MODE6() MODE7() PD
+GPIO93 = MODE0(GPIO93) MODE1(MC2DA0) MODE2(MC1DA5) MODE3(KCOL7) MODE4(UTXD2) MODE5(PTA0) MODE6() MODE7() PD
+GPIO94 = MODE0(GPIO94) MODE1(MC2DA1) MODE2(MC1DA6) MODE3(KROW6) MODE4(PWM_A) MODE5(EDICK) MODE6() MODE7() PD
+GPIO95 = MODE0(GPIO95) MODE1(MC2CK) MODE2(MC1DA7) MODE3(PWM_IN) MODE4(CLKM0) MODE5() MODE6() MODE7() PD
+GPIO96 = MODE0(GPIO96) MODE1(BPI_BUS0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO97 = MODE0(GPIO97) MODE1(BPI_BUS1) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO98 = MODE0(GPIO98) MODE1(BPI_BUS2) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO99 = MODE0(GPIO99) MODE1(BPI_BUS3) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO100 = MODE0(GPIO100) MODE1(BPI_BUS4) MODE2(MC2INS) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO101 = MODE0(GPIO101) MODE1(BPI_BUS5) MODE2(MC1INS) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO102 = MODE0(GPIO102) MODE1(MC2DA2) MODE2(EINT6) MODE3() MODE4(PWM_D) MODE5(EDIWS) MODE6() MODE7() PD
+GPIO103 = MODE0(GPIO103) MODE1(MC2DA3) MODE2(EINT9) MODE3() MODE4(MC1INS) MODE5(EDIDAT) MODE6() MODE7() PD
+GPIO104 = MODE0(GPIO104) MODE1(EINT5) MODE2(MC1INS) MODE3(PWM_IN) MODE4() MODE5() MODE6() MODE7() PD
+
+[GPO]
+
+[EINT]
+EINT_COUNT=12
+EINT_DEBOUNCE_TIME_COUNT=12
+
+[EINT_EX_PIN]
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+
+[ADC]
+ADC_COUNT=3
+
+[ADC_INT_CH]
+0 = ADC_VBAT
+1 = ADC_VISENSE
+2 = ADC_VCHARGER
+3 = ADC_VBATTMP
+4 = ADC_PCBTMP
+5 = ADC_CHR_USB
+
+
+[ADC_EX_CH]
+6
+7
+8
+
+[KEYPAD]
+KEY_ROW=8
+KEY_COLUMN=9
\ No newline at end of file
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6256NP.fig.bak b/mcu/custom/driver/drv/Drv_Tool/MT6256NP.fig.bak
new file mode 100644
index 0000000..5a9ae18
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6256NP.fig.bak
@@ -0,0 +1,154 @@
+[Chip Type]
+Chip = MT6256
+GPIO_Pull_Sel=1
+PMIC_Config=0
+PMIC_Volt_Format=1
+GPIO_ModeNum=8
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(SPI_MOSI) MODE2(CLKM1) MODE3(SCL) MODE4() MODE5(BPI_BUS6) MODE6() MODE7() PD
+GPIO1 = MODE0(GPIO1) MODE1(SPI_MISO) MODE2(PWM_B) MODE3(UCTS2) MODE4() MODE5(BPI_BUS7) MODE6() MODE7() PD
+GPIO2 = MODE0(GPIO2) MODE1(SPI_SCK) MODE2(SRCLKENAN) MODE3(URTS2) MODE4(PTA1) MODE5(BPI_BUS8) MODE6() MODE7() PD
+GPIO3 = MODE0(GPIO3) MODE1(SPI_CS_N) MODE2() MODE3(SDA) MODE4(PTA0) MODE5(BPI_BUS9) MODE6() MODE7() PD
+GPIO4 = MODE0(GPIO4) MODE1(URXD1) MODE2() MODE3(MC2INS) MODE4(PTA1) MODE5(PWM_C) MODE6() MODE7(UTXD1) PU
+GPIO5 = MODE0(GPIO5) MODE1(UTXD1) MODE2(CLKM3) MODE3(MC1INS) MODE4(PTA0) MODE5() MODE6() MODE7(URXD1) PU
+GPIO6 = MODE0(GPIO6) MODE1(UCTS1) MODE2(URXD3) MODE3(EINT7) MODE4(SRCLKENAI) MODE5(SCL) MODE6() MODE7() PD
+GPIO7 = MODE0(GPIO7) MODE1(URTS1) MODE2(UTXD3) MODE3(EINT8) MODE4(SRCLKENA) MODE5(SDA) MODE6() MODE7() PD
+GPIO8 = MODE0(GPIO8) MODE1(URXD2) MODE2(UCTS3) MODE3(MC2INS) MODE4(PTA1) MODE5(CLKM2) MODE6() MODE7(UTXD2) PD
+GPIO9 = MODE0(GPIO9) MODE1(UTXD2) MODE2(URTS3) MODE3(MC1INS) MODE4(PTA0) MODE5() MODE6() MODE7(URXD2) PD
+GPIO10 = MODE0(GPIO10) MODE1(LSA0) MODE2(URXD3) MODE3(PWM_IN) MODE4(EDICK) MODE5(SRCLKENA) MODE6(TDMA_SDAT[1]) MODE7(UTXD3) PD
+GPIO11 = MODE0(GPIO11) MODE1(LSCK) MODE2(UTXD3) MODE3(PWM_A) MODE4(EDIWS) MODE5(SRCLKENAI) MODE6() MODE7(URXD3) PD
+GPIO12 = MODE0(GPIO12) MODE1(LSDA) MODE2(LPCE3B) MODE3(EINT10) MODE4(EDIDAT) MODE5(SRCLKENAN) MODE6(TDMA_SDAT[0]) MODE7() PD
+GPIO13 = MODE0(GPIO13) MODE1(LPCE2B) MODE2(LSCE1B) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO14 = MODE0(GPIO14) MODE1(LPCE1B) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO15 = MODE0(GPIO15) MODE1(LPCE0B) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO16 = MODE0(GPIO16) MODE1(LPTE) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO17 = MODE0(GPIO17) MODE1(LRSTB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO18 = MODE0(GPIO18) MODE1(LRDB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO19 = MODE0(GPIO19) MODE1(LPA0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO20 = MODE0(GPIO20) MODE1(LWRB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO21 = MODE0(GPIO21) MODE1(NLD17) MODE2(URXD3) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO22 = MODE0(GPIO22) MODE1(NLD16) MODE2(UTXD3) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO23 = MODE0(GPIO23) MODE1(NLD15) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO24 = MODE0(GPIO24) MODE1(NLD14) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO25 = MODE0(GPIO25) MODE1(NLD13) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_A_FUNC_DCK) MODE7(dbg_MIXED_A_FUNC_DCK) PD
+GPIO26 = MODE0(GPIO26) MODE1(NLD12) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[12]) MODE7() PD
+GPIO27 = MODE0(GPIO27) MODE1(NLD11) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[11]) MODE7() PD
+GPIO28 = MODE0(GPIO28) MODE1(NLD10) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[10]) MODE7() PD
+GPIO29 = MODE0(GPIO29) MODE1(NLD9) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[9]) MODE7() PD
+GPIO30 = MODE0(GPIO30) MODE1(NLD8) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[8]) MODE7() PD
+GPIO31 = MODE0(GPIO31) MODE1(NLD7) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[7]) MODE7(dbg_MIXED_DIO[7]) PD
+GPIO32 = MODE0(GPIO32) MODE1(NLD6) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[6]) MODE7(dbg_MIXED_DIO[6]) PD
+GPIO33 = MODE0(GPIO33) MODE1(NLD5) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[5]) MODE7(dbg_MIXED_DIO[5]) PD
+GPIO34 = MODE0(GPIO34) MODE1(NLD4) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[4]) MODE7(dbg_MIXED_DIO[4]) PD
+GPIO35 = MODE0(GPIO35) MODE1(NLD3) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[3]) MODE7(dbg_MIXED_DIO[3]) PD
+GPIO36 = MODE0(GPIO36) MODE1(NLD2) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[2]) MODE7(dbg_MIXED_DIO[2]) PD
+GPIO37 = MODE0(GPIO37) MODE1(NLD1) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[1]) MODE7(dbg_MIXED_DIO[1]) PD
+GPIO38 = MODE0(GPIO38) MODE1(NLD0) MODE2() MODE3() MODE4() MODE5() MODE6(dbg_CLKSW_DIO[0]) MODE7(dbg_MIXED_DIO[0]) PD
+GPIO39 = MODE0(GPIO39) MODE1(NRNB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO40 = MODE0(GPIO40) MODE1(NCLE) MODE2(KROW7) MODE3(MC1DA4) MODE4() MODE5() MODE6() MODE7() PD
+GPIO41 = MODE0(GPIO41) MODE1(NALE) MODE2(KCOL7) MODE3(MC1DA5) MODE4() MODE5() MODE6() MODE7() PD
+GPIO42 = MODE0(GPIO42) MODE1(NWEB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO43 = MODE0(GPIO43) MODE1(NREB) MODE2() MODE3(MC1DA7) MODE4() MODE5() MODE6() MODE7() PU
+GPIO44 = MODE0(GPIO44) MODE1(NCE0B) MODE2(KROW6) MODE3(MC1DA6) MODE4() MODE5() MODE6() MODE7() PU
+GPIO45 = MODE0(GPIO45) MODE1(CMRST) MODE2() MODE3(D2_TID1) MODE4(dbg_mon[0]) MODE5() MODE6() MODE7() PD
+GPIO46 = MODE0(GPIO46) MODE1(CMPDN) MODE2() MODE3(D2_TID2) MODE4(dbg_mon[1]) MODE5(dbg_bt_ids_in) MODE6() MODE7(dbg_fm_ids_out[12]) PD
+GPIO47 = MODE0(GPIO47) MODE1(CMVSYNC) MODE2() MODE3() MODE4(dbg_mon[2]) MODE5(dbg_bt_ids_out[11]) MODE6(dbg_rf_test_sdatai) MODE7(dbg_fm_ids_out[11]) PD
+GPIO48 = MODE0(GPIO48) MODE1(CMHSYNC) MODE2() MODE3() MODE4(dbg_mon[3]) MODE5(dbg_bt_ids_out[10]) MODE6(dbg_rf_test_en) MODE7(dbg_fm_ids_out[10]) PD
+GPIO49 = MODE0(GPIO49) MODE1(CMPCLK) MODE2(CM_SSCK) MODE3() MODE4(dbg_mon[4]) MODE5(dbg_bt_ids_out[9]) MODE6(dbg_rf_test_sclk) MODE7(dbg_fm_ids_out[9]) PD
+GPIO50 = MODE0(GPIO50) MODE1(CMMCLK) MODE2() MODE3() MODE4(dbg_mon[5]) MODE5(dbg_bt_ids_out[8]) MODE6(dbg_rf_test_auxout) MODE7(dbg_fm_ids_out[8]) PD
+GPIO51 = MODE0(GPIO51) MODE1(CMDAT7) MODE2(BPI_BUS6) MODE3(D2_TID3) MODE4(dbg_mon[6]) MODE5(dbg_bt_ids_out[7]) MODE6(dbg_rf_test_dcxodelay) MODE7(dbg_fm_ids_out[7]) PD
+GPIO52 = MODE0(GPIO52) MODE1(CMDAT6) MODE2(BPI_BUS7) MODE3(D2_TID4) MODE4(dbg_mon[7]) MODE5(dbg_bt_ids_out[6]) MODE6(dbg_rf_test_enext) MODE7(dbg_fm_ids_out[6]) PD
+GPIO53 = MODE0(GPIO53) MODE1(CMDAT5) MODE2(BPI_BUS8) MODE3(D2_TID5) MODE4(dbg_mon[8]) MODE5(dbg_bt_ids_out[5]) MODE6(dbg_rf_test_enbt) MODE7(dbg_fm_ids_out[5]) PD
+GPIO54 = MODE0(GPIO54) MODE1(CMDAT4) MODE2(BPI_BUS9) MODE3(D2_TID6) MODE4(dbg_mon[9]) MODE5(dbg_bt_ids_out[4]) MODE6(dbg_rf_test_enbb) MODE7(dbg_fm_ids_out[4]) PD
+GPIO55 = MODE0(GPIO55) MODE1(CMDAT3) MODE2() MODE3(D2_TID7) MODE4(dbg_mon[10]) MODE5(dbg_bt_ids_out[3]) MODE6(dbg_rf_test_sdatao) MODE7(dbg_fm_ids_out[3]) PD
+GPIO56 = MODE0(GPIO56) MODE1(CMDAT2) MODE2() MODE3(D2_TID0) MODE4(dbg_mon[11]) MODE5(dbg_bt_ids_out[2]) MODE6(dbg_rf_test_sdatai) MODE7(dbg_fm_ids_out[2]) PD
+GPIO57 = MODE0(GPIO57) MODE1(CMDAT1) MODE2() MODE3() MODE4(dbg_mon[12]) MODE5(dbg_bt_ids_out[1]) MODE6(dbg_rf_test_en) MODE7(dbg_fm_ids_out[1]) PD
+GPIO58 = MODE0(GPIO58) MODE1(CMDAT0) MODE2(CM_SSDA) MODE3(D2ICK) MODE4(dbg_mon[13]) MODE5(dbg_bt_ids_out[0]) MODE6(dbg_rf_test_sclk) MODE7(dbg_fm_ids_out[0]) PD
+GPIO59 = MODE0(GPIO59) MODE1(SCL) MODE2() MODE3(D2ID) MODE4(dbg_mon[14]) MODE5(dbg_srclkena) MODE6() MODE7() PD
+GPIO60 = MODE0(GPIO60) MODE1(SDA) MODE2() MODE3(D2IMS) MODE4(dbg_mon[15]) MODE5() MODE6() MODE7() PD
+GPIO61 = MODE0(GPIO61) MODE1(EINT0) MODE2(LSCE0B) MODE3() MODE4() MODE5(NCE1B) MODE6() MODE7() PD
+GPIO62 = MODE0(GPIO62) MODE1(EINT1) MODE2(CIRQ0) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO63 = MODE0(GPIO63) MODE1(EINT2) MODE2(CIRQ1) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO64 = MODE0(GPIO64) MODE1(EINT3) MODE2(CIRQ2) MODE3(UCTS3) MODE4() MODE5() MODE6() MODE7() PD
+GPIO65 = MODE0(GPIO65) MODE1(EINT4) MODE2(PWM_C) MODE3(URTS3) MODE4(LSDI) MODE5() MODE6() MODE7() PD
+GPIO66 = MODE0(GPIO66) MODE1(DAICLK) MODE2(KROW6) MODE3(MC1INS) MODE4() MODE5() MODE6() MODE7() PD
+GPIO67 = MODE0(GPIO67) MODE1(DAIPCMOUT) MODE2(EDICK) MODE3(KCOL7) MODE4(SRCLKENAN) MODE5() MODE6() MODE7() PD
+GPIO68 = MODE0(GPIO68) MODE1(DAIPCMIN) MODE2(EDIWS) MODE3(CLKM4) MODE4(SCL) MODE5() MODE6() MODE7() PD
+GPIO69 = MODE0(GPIO69) MODE1(DAIRST) MODE2(EDIDAT) MODE3(SRCLKENA) MODE4(SDA) MODE5() MODE6() MODE7() PD
+GPIO70 = MODE0(GPIO70) MODE1(DAISYNC) MODE2(KROW7) MODE3(LSDI) MODE4(PWM_IN) MODE5() MODE6() MODE7() PD
+GPIO71 = MODE0(GPIO71) MODE1(KCOL6) MODE2(MC2INS) MODE3(LSDI) MODE4(PWM_IN) MODE5(EINT4) MODE6() MODE7() PU
+GPIO72 = MODE0(GPIO72) MODE1(KCOL5) MODE2(EINT5) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO73 = MODE0(GPIO73) MODE1(KCOL4) MODE2(SCL) MODE3() MODE4() MODE5() MODE6(CLKSW_HMON_DATA[3]) MODE7(MIXED_HMON_DATA[3]) PU
+GPIO74 = MODE0(GPIO74) MODE1(KCOL3) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_HMON_DATA[2]) MODE7(MIXED_HMON_DATA[2]) PU
+GPIO75 = MODE0(GPIO75) MODE1(KCOL2) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_HMON_DATA[1]) MODE7(MIXED_HMON_DATA[1]) PU
+GPIO76 = MODE0(GPIO76) MODE1(KCOL1) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_HMON_DATA[0]) MODE7(MIXED_HMON_DATA[0]) PU
+GPIO77 = MODE0(GPIO77) MODE1(KCOL0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO78 = MODE0(GPIO78) MODE1(KROW5) MODE2(EINT11) MODE3(SRCLKENAI) MODE4(MC2WP) MODE5() MODE6() MODE7() PD
+GPIO79 = MODE0(GPIO79) MODE1(KROW4) MODE2(PWM_D) MODE3(CLKM5) MODE4(MC1WP) MODE5(EINT6) MODE6(CLKSW_LMON_DATA[3]) MODE7(MIXED_LMON_DATA[3]) PD
+GPIO80 = MODE0(GPIO80) MODE1(KROW3) MODE2(SDA) MODE3() MODE4() MODE5() MODE6(CLKSW_LMON_DATA[2]) MODE7(MIXED_LMON_DATA[2]) PD
+GPIO81 = MODE0(GPIO81) MODE1(KROW2) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_LMON_DATA[1]) MODE7(MIXED_LMON_DATA[1]) PD
+GPIO82 = MODE0(GPIO82) MODE1(KROW1) MODE2() MODE3() MODE4() MODE5() MODE6(CLKSW_LMON_DATA[0]) MODE7(MIXED_LMON_DATA[0]) PD
+GPIO83 = MODE0(GPIO83) MODE1(KROW0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO84 = MODE0(GPIO84) MODE1(MC1RST) MODE2(MC1WP) MODE3() MODE4(PTA1) MODE5() MODE6() MODE7() PU
+GPIO85 = MODE0(GPIO85) MODE1(MC1CK_FB) MODE2(MC2WP) MODE3() MODE4(PTA0) MODE5(BT_DBGI_N) MODE6() MODE7() PU
+GPIO86 = MODE0(GPIO86) MODE1(MC1CM0) MODE2() MODE3() MODE4() MODE5(BT_TRST_B) MODE6() MODE7() PU
+GPIO87 = MODE0(GPIO87) MODE1(MC1DA0) MODE2() MODE3() MODE4() MODE5(BT_TCK) MODE6() MODE7() PU
+GPIO88 = MODE0(GPIO88) MODE1(MC1DA1) MODE2() MODE3() MODE4() MODE5(BT_TDI) MODE6() MODE7() PU
+GPIO89 = MODE0(GPIO89) MODE1(MC1DA2) MODE2() MODE3() MODE4() MODE5(BT_TMS) MODE6() MODE7() PU
+GPIO90 = MODE0(GPIO90) MODE1(MC1DA3) MODE2() MODE3() MODE4() MODE5(BT_TDO) MODE6() MODE7() PU
+GPIO91 = MODE0(GPIO91) MODE1(MC1CK) MODE2() MODE3() MODE4() MODE5(BT_DBGACK_N) MODE6() MODE7() PU
+GPIO92 = MODE0(GPIO92) MODE1(MC2CM0) MODE2(MC1DA4) MODE3(KROW7) MODE4(URXD2) MODE5(PTA1) MODE6() MODE7() PD
+GPIO93 = MODE0(GPIO93) MODE1(MC2DA0) MODE2(MC1DA5) MODE3(KCOL7) MODE4(UTXD2) MODE5(PTA0) MODE6() MODE7() PD
+GPIO94 = MODE0(GPIO94) MODE1(MC2DA1) MODE2(MC1DA6) MODE3(KROW6) MODE4(PWM_A) MODE5(EDICK) MODE6() MODE7() PD
+GPIO95 = MODE0(GPIO95) MODE1(MC2CK) MODE2(MC1DA7) MODE3(PWM_IN) MODE4(CLKM0) MODE5() MODE6() MODE7() PD
+GPIO96 = MODE0(GPIO96) MODE1(BPI_BUS0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO97 = MODE0(GPIO97) MODE1(BPI_BUS1) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO98 = MODE0(GPIO98) MODE1(BPI_BUS2) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO99 = MODE0(GPIO99) MODE1(BPI_BUS3) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO100 = MODE0(GPIO100) MODE1(BPI_BUS4) MODE2(MC2INS) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO101 = MODE0(GPIO101) MODE1(BPI_BUS5) MODE2(MC1INS) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO102 = MODE0(GPIO102) MODE1(MC2DA2) MODE2(EINT6) MODE3() MODE4(PWM_D) MODE5(EDIWS) MODE6() MODE7() PD
+GPIO103 = MODE0(GPIO103) MODE1(MC2DA3) MODE2(EINT9) MODE3() MODE4(MC1INS) MODE5(EDIDAT) MODE6() MODE7() PD
+GPIO104 = MODE0(GPIO104) MODE1(EINT5) MODE2(MC1INS) MODE3(PWM_IN) MODE4() MODE5() MODE6() MODE7() PD
+
+[GPO]
+
+[EINT]
+EINT_COUNT=12
+EINT_DEBOUNCE_TIME_COUNT=12
+
+[EINT_EX_PIN]
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+
+[ADC]
+ADC_COUNT=3
+
+[ADC_INT_CH]
+0 = ADC_VBAT
+1 = ADC_VISENSE
+2 = ADC_VCHARGER
+3 = ADC_VBATTMP
+4 = ADC_PCBTMP
+5 = ADC_CHR_USB
+
+
+[ADC_EX_CH]
+6
+7
+8
+
+[KEYPAD]
+KEY_ROW=8
+KEY_COLUMN=9
\ No newline at end of file
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6268.fig b/mcu/custom/driver/drv/Drv_Tool/MT6268.fig
new file mode 100644
index 0000000..02f72d2
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6268.fig
@@ -0,0 +1,118 @@
+[Chip Type]
+Chip = MT6268
+GPIO_Pull_Sel=1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(BPI_BUS0) MODE2() MODE3() PUPD
+GPIO1 = MODE0(GPIO1) MODE1(BPI_BUS1) MODE2() MODE3() PUPD
+GPIO2 = MODE0(GPIO2) MODE1(BPI_BUS2) MODE2() MODE3() PUPD
+GPIO3 = MODE0(GPIO3) MODE1(BPI_BUS3) MODE2() MODE3() PUPD
+GPIO4 = MODE0(GPIO4) MODE1(BPI_BUS9) MODE2() MODE3() PUPD
+GPIO5 = MODE0(GPIO5) MODE1(BPI_BUS10) MODE2() MODE3() PUPD
+GPIO6 = MODE0(GPIO6) MODE1(BPI_BUS16) MODE2() MODE3() PUPD
+GPIO7 = MODE0(GPIO7) MODE1(BPI_BUS17) MODE2() MODE3() PUPD
+GPIO8 = MODE0(GPIO8) MODE1(BPI_BUS18) MODE2() MODE3() PUPD
+GPIO9 = MODE0(GPIO9) MODE1(BPI_BUS19) MODE2() MODE3() PUPD
+GPIO10= MODE0(GPIO10) MODE1(BSI0_CS1) MODE2() MODE3() PUPD
+GPIO11= MODE0(GPIO11) MODE1(BSI1_CS0) MODE2() MODE3() PUPD
+GPIO12= MODE0(GPIO12) MODE1(BSI1_CS1) MODE2() MODE3() PUPD
+GPIO13= MODE0(GPIO13) MODE1(BSI1_DATA) MODE2() MODE3() PUPD
+GPIO14= MODE0(GPIO14) MODE1(BSI1_CLK) MODE2() MODE3() PUPD
+GPIO15= MODE0(GPIO15) MODE1(BSI_DIN) MODE2() MODE3() PUPD
+GPIO16= MODE0(GPIO16) MODE1(CMMCLK) MODE2(LOG_DATA[15]) MODE3(TDTIRQ) PUPD
+GPIO17= MODE0(GPIO17) MODE1(I:CMPCLK) MODE2(LOG_DATA[14]) MODE3(TCTIRQ1) PUPD
+GPIO18= MODE0(GPIO18) MODE1(CMRST) MODE2(LOG_DATA[13]) MODE3(TBTXEN) PUPD
+GPIO19= MODE0(GPIO19) MODE1(CMPDN) MODE2(LOG_DATA[12]) MODE3(TBTXFS) PUPD
+GPIO20= MODE0(GPIO20) MODE1(CMVREF) MODE2(LOG_DATA[11]) MODE3(TBRXEN) PUPD
+GPIO21= MODE0(GPIO21) MODE1(CMHREF) MODE2(LOG_DATA[10]) MODE3(TBRXFS) PUPD
+GPIO22= MODE0(GPIO22) MODE1(CMDAT9) MODE2(LOG_DATA[9]) MODE3(D1ICK) PUPD
+GPIO23= MODE0(GPIO23) MODE1(CMDAT8) MODE2(LOG_DATA[8]) MODE3(D1ID) PUPD
+GPIO24= MODE0(GPIO24) MODE1(CMDAT7) MODE2(LOG_DATA[7]) MODE3(D1IMS) PUPD
+GPIO25= MODE0(GPIO25) MODE1(CMDAT6) MODE2(LOG_DATA[6]) MODE3(D2ICK) PUPD
+GPIO26= MODE0(GPIO26) MODE1(CMDAT5) MODE2(LOG_DATA[5]) MODE3(D2ID) PUPD
+GPIO27= MODE0(GPIO27) MODE1(CMDAT4) MODE2(LOG_DATA[4]) MODE3(D2IMS) PUPD
+GPIO28= MODE0(GPIO28) MODE1(CMDAT3) MODE2(LOG_DATA[3]) MODE3(TCTIRQ2) PUPD
+GPIO29= MODE0(GPIO29) MODE1(CMDAT2) MODE2(LOG_DATA[2]) MODE3(TEVTVAL) PUPD
+GPIO30= MODE0(GPIO30) MODE1(CMDAT1) MODE2(LOG_DATA[1]) MODE3(D2_TID0) PUPD
+GPIO31= MODE0(GPIO31) MODE1(CMDAT0) MODE2(LOG_DATA[0]) MODE3(D2_TID1) PUPD
+GPIO32= MODE0(GPIO32) MODE1(CMFLASH) MODE2(X4W_LOG_CLK) MODE3(D2_TID2) PUPD
+GPIO33= MODE0(GPIO33) MODE1(SCL) MODE2(LOG_SLOT_STRB) MODE3(D2_TID3) PUPD
+GPIO34= MODE0(GPIO34) MODE1(SDA) MODE2(LOG_DATA_RDY) MODE3(D2_TID4) PUPD
+GPIO35= MODE0(GPIO35) MODE1(PWM1_OUT) MODE2(DEBUG6) MODE3(D2_TID5) PUPD
+GPIO36= MODE0(GPIO36) MODE1(PWM2_OUT) MODE2(DEBUG7) MODE3(D2_TID6) PUPD
+GPIO37= MODE0(GPIO37) MODE1(IRQ0) MODE2(CLKM0) MODE3(D1_TID0) PUPD
+GPIO38= MODE0(GPIO38) MODE1(IRQ1) MODE2(CLKM1) MODE3(D1_TID1) PUPD
+GPIO39= MODE0(GPIO39) MODE1(SRCLKENAI) MODE2() MODE3() PUPD
+GPIO40= MODE0(GPIO40) MODE1(SCL_DUAL) MODE2() MODE3() PUPD
+GPIO41= MODE0(GPIO41) MODE1(SDA_DUAL) MODE2() MODE3() PUPD
+GPIO42= MODE0(GPIO42) MODE1(PASEL) MODE2() MODE3() PUPD
+GPIO43= MODE0(GPIO43) MODE1(IRQ2) MODE2(CLKM2) MODE3(I:EXT_FRAME_SYNC) PUPD
+GPIO44= MODE0(GPIO44) MODE1(IRQ3) MODE2(CLKM3) MODE3() PUPD
+GPIO45= MODE0(GPIO45) MODE1(SPI_CS) MODE2(CAM_MECH1) MODE3(TDMA_D1) PUPD
+GPIO46= MODE0(GPIO46) MODE1(SPI_SCK) MODE2(CAM_STROBE) MODE3(TDMA_CK) PUPD
+GPIO47= MODE0(GPIO47) MODE1(SPI_MOSI) MODE2(SRCCLKENAI2) MODE3(TDMA_D0) PUPD
+GPIO48= MODE0(GPIO48) MODE1(SPI_MISO) MODE2(CAM_MECH0) MODE3(TDMA_FS) PUPD
+GPIO49= MODE0(GPIO49) MODE1(EINT2) MODE2() MODE3() PUPD
+GPIO50= MODE0(GPIO50) MODE1(EINT3) MODE2() MODE3() PUPD
+GPIO51= MODE0(GPIO51) MODE1(DAICLK) MODE2() MODE3() PUPD
+GPIO52= MODE0(GPIO52) MODE1(DAIPCMOUT) MODE2() MODE3() PUPD
+GPIO53= MODE0(GPIO53) MODE1(DAIPCMIN) MODE2() MODE3() PUPD
+GPIO54= MODE0(GPIO54) MODE1(DAISYNC) MODE2() MODE3() PUPD
+GPIO55= MODE0(GPIO55) MODE1(DAIRST) MODE2() MODE3() PUPD
+GPIO56= MODE0(GPIO56) MODE1(URXD2) MODE2() MODE3() PUPD
+GPIO57= MODE0(GPIO57) MODE1(UTXD2) MODE2() MODE3() PUPD
+GPIO58= MODE0(GPIO58) MODE1(URTS2) MODE2() MODE3() PUPD
+GPIO59= MODE0(GPIO59) MODE1(UCTS2) MODE2() MODE3() PUPD
+GPIO60= MODE0(GPIO60) MODE1(MIRQ) MODE2(CLKM2) MODE3() PUPD
+GPIO61= MODE0(GPIO61) MODE1(LSCK) MODE2(EDICK) MODE3(VM[0]) PUPD
+GPIO62= MODE0(GPIO62) MODE1(LSA0) MODE2(EDIWS) MODE3(VM[1]) PUPD
+GPIO63= MODE0(GPIO63) MODE1(LSDA) MODE2(EDIDAT) MODE3(DEBUG8) PUPD
+GPIO64= MODE0(GPIO64) MODE1(LSCE0B) MODE2(CLKM4) MODE3(DEBUG9) PUPD
+GPIO65= MODE0(GPIO65) MODE1(LSCE1B) MODE2(LPCE2B) MODE3(DEBUG10) PUPD
+GPIO66= MODE0(GPIO66) MODE1(LPCE1B) MODE2(NCE1B) MODE3(DEBUG11) PUPD
+GPIO67= MODE0(GPIO67) MODE1(LPTE) MODE2() MODE3(DEBUG12) PUPD
+GPIO68= MODE0(GPIO68) MODE1(NLD17) MODE2() MODE3(DEBUG13) PUPD
+GPIO69= MODE0(GPIO69) MODE1(NLD16) MODE2() MODE3(DEBUG14) PUPD
+GPIO70= MODE0(GPIO70) MODE1(PWM3_OUT) MODE2() MODE3() PUPD
+GPIO71= MODE0(GPIO71) MODE1(PWM4_OUT) MODE2() MODE3() PUPD
+GPIO72= MODE0(GPIO72) MODE1(PWM5_OUT) MODE2() MODE3() PUPD
+GPIO73= MODE0(GPIO73) MODE1(PWM6_OUT) MODE2() MODE3() PUPD
+GPIO74= MODE0(GPIO74) MODE1(URTS1) MODE2() MODE3() PUPD
+GPIO75= MODE0(GPIO75) MODE1(UCTS1) MODE2() MODE3() PUPD
+GPIO76= MODE0(GPIO76) MODE1(URXD3) MODE2(IRDA_RXD) MODE3() PUPD
+GPIO77= MODE0(GPIO77) MODE1(UTXD3) MODE2(IRDA_TXD) MODE3() PUPD
+GPIO78= MODE0(GPIO78) MODE1(IRQ4) MODE2(IRDA_PDN) MODE3(DEBUG15) PUPD
+GPIO79= MODE0(GPIO79) MODE1(IRQ5) MODE2() MODE3() PUPD
+GPIO80= MODE0(GPIO80) MODE1(IRQ6) MODE2(CLKM2) MODE3() PUPD
+GPIO81= MODE0(GPIO81) MODE1(USB_DRVVBUS) MODE2(CLKM3) MODE3() PUPD
+GPIO82= MODE0(GPIO82) MODE1(EINT6) MODE2(CLKM4) MODE3() PUPD
+GPIO83= MODE0(GPIO83) MODE1(EINT7) MODE2(CLKM5) MODE3() PUPD
+GPIO84= MODE0(GPIO84) MODE1(MC1CM0) MODE2() MODE3(DEBUG0) PUPD
+GPIO85= MODE0(GPIO85) MODE1(MC1DA0) MODE2(CLKM0) MODE3(DEBUG1) PUPD
+GPIO86= MODE0(GPIO86) MODE1(MC1DA1) MODE2(IMC0DA4) MODE3(DEBUG2) PUPD
+GPIO87= MODE0(GPIO87) MODE1(MC1CK) MODE2(IMC0DA5) MODE3(DEBUG3) PUPD
+GPIO88= MODE0(GPIO88) MODE1(MC1WP) MODE2(IMC0DA6) MODE3(DEBUG4) PUPD
+GPIO89= MODE0(GPIO89) MODE1(MC1INS) MODE2(IMC0DA7) MODE3(DEBUG5) PUPD
+GPIO90= MODE0(GPIO90) MODE1(KCOL7) MODE2(CLKM1) MODE3() PUPD
+GPIO91= MODE0(GPIO91) MODE1(KCOL6) MODE2() MODE3() PUPD
+GPIO92= MODE0(GPIO92) MODE1(KROW7) MODE2() MODE3() PUPD
+GPIO93= MODE0(GPIO93) MODE1(KROW6) MODE2() MODE3() PUPD
+GPIO94= MODE0(GPIO94) MODE1(EINT0) MODE2() MODE3() PUPD
+GPIO95= MODE0(GPIO95) MODE1(EINT1) MODE2() MODE3() PUPD
+GPIO96= MODE0(GPIO96) MODE1(EINT4) MODE2() MODE3() PUPD
+GPIO97= MODE0(GPIO97) MODE1(EINT5) MODE2() MODE3() PUPD
+GPIO98= MODE0(GPIO98) MODE1() MODE2(CLKM2) MODE3() PUPD
+GPIO99= MODE0(GPIO99) MODE1() MODE2(CLKM3) MODE3() PUPD
+
+[GPO]
+
+[EINT]
+EINT_COUNT=14
+EINT_DEBOUNCE_TIME_COUNT=14
+
+[ADC]
+ADC_COUNT=10
+
+[KEYPAD]
+KEY_ROW=8
+KEY_COLUMN=9
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6268A.fig b/mcu/custom/driver/drv/Drv_Tool/MT6268A.fig
new file mode 100644
index 0000000..901e301
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6268A.fig
@@ -0,0 +1,119 @@
+[Chip Type]
+Chip = MT6268A
+GPIO_Pull_Sel=1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(O:BPI_BUS0) MODE2() MODE3() PUPD
+GPIO1 = MODE0(GPIO1) MODE1(O:BPI_BUS1) MODE2() MODE3() PUPD
+GPIO2 = MODE0(GPIO2) MODE1(O:BPI_BUS2) MODE2() MODE3() PUPD
+GPIO3 = MODE0(GPIO3) MODE1(O:BPI_BUS3) MODE2() MODE3() PUPD
+GPIO4 = MODE0(GPIO4) MODE1(O:BPI_BUS9) MODE2() MODE3() PUPD
+GPIO5 = MODE0(GPIO5) MODE1(O:BPI_BUS10) MODE2() MODE3() PUPD
+GPIO6 = MODE0(GPIO6) MODE1(O:BPI_BUS16) MODE2() MODE3() PUPD
+GPIO7 = MODE0(GPIO7) MODE1(O:BPI_BUS17) MODE2() MODE3() PUPD
+GPIO8 = MODE0(GPIO8) MODE1(O:BPI_BUS18) MODE2() MODE3() PUPD
+GPIO9 = MODE0(GPIO9) MODE1(O:BPI_BUS19) MODE2() MODE3() PUPD
+GPIO10= MODE0(GPIO10) MODE1(O:BSI0_CS1) MODE2() MODE3() PUPD
+GPIO11= MODE0(GPIO11) MODE1(O:BSI1_CS0) MODE2() MODE3() PUPD
+GPIO12= MODE0(GPIO12) MODE1(O:BSI1_CS1) MODE2() MODE3() PUPD
+GPIO13= MODE0(GPIO13) MODE1(BSI1_DATA) MODE2() MODE3() PUPD
+GPIO14= MODE0(GPIO14) MODE1(O:BSI1_CLK) MODE2() MODE3() PUPD
+GPIO15= MODE0(GPIO15) MODE1(I0:BSI_DIN) MODE2() MODE3() PUPD
+GPIO16= MODE0(GPIO16) MODE1(O:CMRST) MODE2(O:TDTIRQ) MODE3(O:TBTXEN) PUPD
+GPIO17= MODE0(GPIO17) MODE1(O:CMPDN) MODE2(O:TCTIRQ1) MODE3(O:TBTXFS) PUPD
+GPIO18= MODE0(GPIO18) MODE1(I0:CMVREF) MODE2(O:TCTIRQ2) MODE3(O:TBRXEN) PUPD
+GPIO19= MODE0(GPIO19) MODE1(I0:CMHREF) MODE2(O:TEVTVAL) MODE3(O:TBRXFS) PUPD
+GPIO20= MODE0(GPIO20) MODE1(I0:CMDAT9) MODE2() MODE3(I0:D1ICK) PUPD
+GPIO21= MODE0(GPIO21) MODE1(I0:CMDAT8) MODE2() MODE3(IO0:D1ID) PUPD
+GPIO22= MODE0(GPIO22) MODE1(I0:CMDAT7) MODE2() MODE3(I0:D1IMS) PUPD
+GPIO23= MODE0(GPIO23) MODE1(I0:CMDAT6) MODE2() MODE3(I0:D2ICK) PUPD
+GPIO24= MODE0(GPIO24) MODE1(I0:CMDAT5) MODE2() MODE3(IO0:D2ID) PUPD
+GPIO25= MODE0(GPIO25) MODE1(I0:CMDAT4) MODE2() MODE3(I0:D2IMS) PUPD
+GPIO26= MODE0(GPIO26) MODE1(I0:CMDAT1) MODE2() MODE3(O:D2_TID0) PUPD
+GPIO27= MODE0(GPIO27) MODE1(I0:CMDAT0) MODE2() MODE3(O:D2_TID1) PUPD
+GPIO28= MODE0(GPIO28) MODE1(O:CMFLASH) MODE2() MODE3(O:D2_TID2) PUPD
+GPIO29= MODE0(GPIO29) MODE1(IO1:SCL0) MODE2() MODE3(O:D2_TID3) PUPD
+GPIO30= MODE0(GPIO30) MODE1(IO1:SDA0) MODE2() MODE3(O:D2_TID4) PUPD
+GPIO31= MODE0(GPIO31) MODE1(O:PWM0) MODE2() MODE3(O:D2_TID5) PUPD
+GPIO32= MODE0(GPIO32) MODE1(O:PWM1) MODE2() MODE3(O:D2_TID6) PUPD
+GPIO33= MODE0(GPIO33) MODE1(I1:IRQ0) MODE2(O:CLKM0) MODE3(O:D1_TID0) PUPD
+GPIO34= MODE0(GPIO34) MODE1(I1:IRQ1) MODE2(O:CLKM1) MODE3(O:D1_TID1) PUPD
+GPIO35= MODE0(GPIO35) MODE1(I0:SRCLKENAI) MODE2() MODE3() PUPD
+GPIO36= MODE0(GPIO36) MODE1(IO1:SCL1) MODE2() MODE3() PUPD
+GPIO37= MODE0(GPIO37) MODE1(IO1:SDA1) MODE2() MODE3() PUPD
+GPIO38= MODE0(GPIO38) MODE1(O:PASEL) MODE2() MODE3() PUPD
+GPIO39= MODE0(GPIO39) MODE1(I1:IRQ2) MODE2(O:CLKM2) MODE3() PUPD
+GPIO40= MODE0(GPIO40) MODE1(I1:IRQ3) MODE2(O:CLKM3) MODE3() PUPD
+GPIO41= MODE0(GPIO41) MODE1(O:SPI_CS) MODE2(O:CAM_MECH1) MODE3(O:TDMA_D1) PUPD
+GPIO42= MODE0(GPIO42) MODE1(O:SPI_SCK) MODE2(IO0:CAM_STROBE) MODE3(O:TDMA_CK) PUPD
+GPIO43= MODE0(GPIO43) MODE1(O:SPI_MOSI) MODE2() MODE3(O:TDMA_D0) PUPD
+GPIO44= MODE0(GPIO44) MODE1(I1:SPI_MISO) MODE2(O:CAM_MECH0) MODE3(O:TDMA_FS) PUPD
+GPIO45= MODE0(GPIO45) MODE1(I1:EINT2) MODE2() MODE3() PUPD
+GPIO46= MODE0(GPIO46) MODE1(I1:EINT3) MODE2() MODE3() PUPD
+GPIO47= MODE0(GPIO47) MODE1(O:DAICLK) MODE2() MODE3() PUPD
+GPIO48= MODE0(GPIO48) MODE1(O:DAIPCMOUT) MODE2() MODE3() PUPD
+GPIO49= MODE0(GPIO49) MODE1(I0:DAIPCMIN) MODE2() MODE3() PUPD
+GPIO50= MODE0(GPIO50) MODE1(O:DAISYNC) MODE2() MODE3() PUPD
+GPIO51= MODE0(GPIO51) MODE1(I1:DAIRST) MODE2() MODE3() PUPD
+GPIO52= MODE0(GPIO52) MODE1(I1:URXD2) MODE2() MODE3() PUPD
+GPIO53= MODE0(GPIO53) MODE1(O:UTXD2) MODE2() MODE3() PUPD
+GPIO54= MODE0(GPIO54) MODE1(O:URTS2) MODE2() MODE3() PUPD
+GPIO55= MODE0(GPIO55) MODE1(I1:UCTS2) MODE2() MODE3() PUPD
+GPIO56= MODE0(GPIO56) MODE1(I1:MIRQ) MODE2() MODE3() PUPD
+GPIO57= MODE0(GPIO57) MODE1(O:TRACEPKT0) MODE2(O:X4W_LOG_CLK) MODE3() PUPD
+GPIO58= MODE0(GPIO58) MODE1(O:TRACEPKT1) MODE2(O:LOG_SLOT_STRB) MODE3() PUPD
+GPIO59= MODE0(GPIO59) MODE1(O:TRACEPKT2) MODE2(O:LOG_DATA_RDY) MODE3() PUPD
+GPIO60= MODE0(GPIO60) MODE1(O:TRACEPKT3) MODE2(O:LOG_DATA[0]) MODE3(O:DBG_DATA[0]) PUPD
+GPIO61= MODE0(GPIO61) MODE1(O:TRACEPKT4) MODE2(O:LOG_DATA[1]) MODE3(O:DBG_DATA[1]) PUPD
+GPIO62= MODE0(GPIO62) MODE1(O:TRACEPKT5) MODE2(O:LOG_DATA[2]) MODE3(O:DBG_DATA[2]) PUPD
+GPIO63= MODE0(GPIO63) MODE1(O:TRACEPKT6) MODE2(O:LOG_DATA[3]) MODE3(O:DBG_DATA[3]) PUPD
+GPIO64= MODE0(GPIO64) MODE1(O:TRACEPKT7) MODE2(O:LOG_DATA[4]) MODE3(O:DBG_DATA[4]) PUPD
+GPIO65= MODE0(GPIO65) MODE1(O:TRACEPKT8) MODE2(O:LOG_DATA[5]) MODE3(O:DBG_DATA[5]) PUPD
+GPIO66= MODE0(GPIO66) MODE1(O:TRACEPKT9) MODE2(O:LOG_DATA[6]) MODE3(O:DBG_DATA[6]) PUPD
+GPIO67= MODE0(GPIO67) MODE1(O:TRACEPKT10) MODE2(O:LOG_DATA[7]) MODE3(O:DBG_DATA[7]) PUPD
+GPIO68= MODE0(GPIO68) MODE1(O:TRACEPKT11) MODE2(O:LOG_DATA[8]) MODE3(O:DBG_DATA[8]) PUPD
+GPIO69= MODE0(GPIO69) MODE1(O:TRACEPKT12) MODE2(O:LOG_DATA[9]) MODE3(O:DBG_DATA[9]) PUPD
+GPIO70= MODE0(GPIO70) MODE1(O:TRACEPKT13) MODE2(O:LOG_DATA[10]) MODE3(O:DBG_DATA[10]) PUPD
+GPIO71= MODE0(GPIO71) MODE1(O:TRACEPKT14) MODE2(O:LOG_DATA[11]) MODE3(O:DBG_DATA[11]) PUPD
+GPIO72= MODE0(GPIO72) MODE1(O:TRACEPKT15) MODE2(O:LOG_DATA[12]) MODE3(O:DBG_DATA[12]) PUPD
+GPIO73= MODE0(GPIO73) MODE1(O:TRACESYNC) MODE2(O:LOG_DATA[13]) MODE3(O:DBG_DATA[13]) PUPD
+GPIO74= MODE0(GPIO74) MODE1(O:TRACECLK) MODE2(O:LOG_DATA[14]) MODE3(O:DBG_DATA[14]) PUPD
+GPIO75= MODE0(GPIO75) MODE1(O:PIPESTAT0) MODE2(O:LOG_DATA[15]) MODE3(O:DBG_DATA[15]) PUPD
+GPIO76= MODE0(GPIO76) MODE1(O:PIPESTAT1) MODE2() MODE3(O:AUX_PEN_IRQ) PUPD
+GPIO77= MODE0(GPIO77) MODE1(O:PIPESTAT2) MODE2() MODE3() PUPD
+GPIO78= MODE0(GPIO78) MODE1(O:LSCK) MODE2(IO0:EDICK) MODE3(O:VM[0]) PUPD
+GPIO79= MODE0(GPIO79) MODE1(O:LSA0) MODE2(IO0:EDIWS) MODE3(O:VM[1]) PUPD
+GPIO80= MODE0(GPIO80) MODE1(O:LSDA) MODE2(IO0:EDIDAT) MODE3() PUPD
+GPIO81= MODE0(GPIO81) MODE1(O:LSCE0B) MODE2(O:CLKM4) MODE3() PUPD
+GPIO82= MODE0(GPIO82) MODE1(O:LSCE1B) MODE2(O:LPCE2B) MODE3() PUPD
+GPIO83= MODE0(GPIO83) MODE1(O:LPCE1B) MODE2(O:NCE1B) MODE3() PUPD
+GPIO84= MODE0(GPIO84) MODE1(I0:LPTE) MODE2() MODE3() PUPD
+GPIO85= MODE0(GPIO85) MODE1(NLD17) MODE2() MODE3() PUPD
+GPIO86= MODE0(GPIO86) MODE1(NLD16) MODE2() MODE3() PUPD
+GPIO87= MODE0(GPIO87) MODE1(O:PWM2) MODE2() MODE3() PUPD
+GPIO88= MODE0(GPIO88) MODE1(O:PWM3) MODE2() MODE3() PUPD
+GPIO89= MODE0(GPIO89) MODE1(O:PWM4) MODE2() MODE3() PUPD
+GPIO90= MODE0(GPIO90) MODE1(O:PWM5) MODE2() MODE3() PUPD
+GPIO91= MODE0(GPIO91) MODE1(O:URTS1) MODE2() MODE3() PUPD
+GPIO92= MODE0(GPIO92) MODE1(I:UCTS1) MODE2() MODE3() PUPD
+GPIO93= MODE0(GPIO93) MODE1(I1:URXD3) MODE2(I1:IRDA_RXD) MODE3() PUPD
+GPIO94= MODE0(GPIO94) MODE1(O:UTXD3) MODE2(O:IRDA_TXD) MODE3() PUPD
+GPIO95= MODE0(GPIO95) MODE1(I1:IRQ4) MODE2(O:IRDA_PDN) MODE3() PUPD
+GPIO96= MODE0(GPIO96) MODE1(I1:IRQ5) MODE2() MODE3() PUPD
+GPIO97= MODE0(GPIO97) MODE1() MODE2(O:CLKM2) MODE3() PUPD
+GPIO98= MODE0(GPIO98) MODE1(O:USB_DRVVBUS) MODE2(O:CLKM3) MODE3() PUPD
+GPIO99= MODE0(GPIO99) MODE1(I1:EINT6) MODE2(O:CLKM4) MODE3() PUPD
+GPIO100= MODE0(GPIO100) MODE1(I1:EINT7) MODE2(O:CLKM5) MODE3() PUPD
+
+[GPO]
+
+[EINT]
+EINT_COUNT=14
+EINT_DEBOUNCE_TIME_COUNT=14
+
+[ADC]
+ADC_COUNT=9
+
+[KEYPAD]
+KEY_ROW=8
+KEY_COLUMN=9
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6268B.fig b/mcu/custom/driver/drv/Drv_Tool/MT6268B.fig
new file mode 100644
index 0000000..3d9789e
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6268B.fig
@@ -0,0 +1,118 @@
+[Chip Type]
+Chip = MT6268
+GPIO_Pull_Sel=1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(O:BPI_BUS0) MODE2() MODE3() PUPD
+GPIO1 = MODE0(GPIO1) MODE1(O:BPI_BUS1) MODE2() MODE3() PUPD
+GPIO2 = MODE0(GPIO2) MODE1(O:BPI_BUS2) MODE2() MODE3() PUPD
+GPIO3 = MODE0(GPIO3) MODE1(O:BPI_BUS3) MODE2() MODE3() PUPD
+GPIO4 = MODE0(GPIO4) MODE1(O:BPI_BUS9) MODE2() MODE3() PUPD
+GPIO5 = MODE0(GPIO5) MODE1(O:BPI_BUS10) MODE2() MODE3() PUPD
+GPIO6 = MODE0(GPIO6) MODE1(O:BPI_BUS16) MODE2() MODE3() PUPD
+GPIO7 = MODE0(GPIO7) MODE1(O:BPI_BUS17) MODE2() MODE3() PUPD
+GPIO8 = MODE0(GPIO8) MODE1(O:BPI_BUS18) MODE2() MODE3() PUPD
+GPIO9 = MODE0(GPIO9) MODE1(O:BPI_BUS19) MODE2() MODE3() PUPD
+GPIO10= MODE0(GPIO10) MODE1(O:BSI0_CS1) MODE2() MODE3() PUPD
+GPIO11= MODE0(GPIO11) MODE1(O:BSI1_CS0) MODE2() MODE3() PUPD
+GPIO12= MODE0(GPIO12) MODE1(O:BSI1_CS1) MODE2() MODE3() PUPD
+GPIO13= MODE0(GPIO13) MODE1(BSI1_DATA) MODE2() MODE3() PUPD
+GPIO14= MODE0(GPIO14) MODE1(O:BSI1_CLK) MODE2() MODE3() PUPD
+GPIO15= MODE0(GPIO15) MODE1(I0:BSI_DIN) MODE2() MODE3() PUPD
+GPIO16= MODE0(GPIO16) MODE1(O:CMMCLK) MODE2(O:LOG_DATA[15]) MODE3(O:TDTIRQ) PUPD
+GPIO17= MODE0(GPIO17) MODE1(I:CMPCLK) MODE2(O:LOG_DATA[14]) MODE3(O:TCTIRQ1) PUPD
+GPIO18= MODE0(GPIO18) MODE1(O:CMRST) MODE2(O:LOG_DATA[13]) MODE3(O:TBTXEN) PUPD
+GPIO19= MODE0(GPIO19) MODE1(O:CMPDN) MODE2(O:LOG_DATA[12]) MODE3(O:TBTXFS) PUPD
+GPIO20= MODE0(GPIO20) MODE1(I0:CMVREF) MODE2(O:LOG_DATA[11]) MODE3(O:TBRXEN) PUPD
+GPIO21= MODE0(GPIO21) MODE1(I0:CMHREF) MODE2(O:LOG_DATA[10]) MODE3(O:TBRXFS) PUPD
+GPIO22= MODE0(GPIO22) MODE1(I0:CMDAT9) MODE2(O:LOG_DATA[9]) MODE3(I0:D1ICK) PUPD
+GPIO23= MODE0(GPIO23) MODE1(I0:CMDAT8) MODE2(O:LOG_DATA[8]) MODE3(IO0:D1ID) PUPD
+GPIO24= MODE0(GPIO24) MODE1(I0:CMDAT7) MODE2(O:LOG_DATA[7]) MODE3(I0:D1IMS) PUPD
+GPIO25= MODE0(GPIO25) MODE1(I0:CMDAT6) MODE2(O:LOG_DATA[6]) MODE3(I0:D2ICK) PUPD
+GPIO26= MODE0(GPIO26) MODE1(I0:CMDAT5) MODE2(O:LOG_DATA[5]) MODE3(IO0:D2ID) PUPD
+GPIO27= MODE0(GPIO27) MODE1(I0:CMDAT4) MODE2(O:LOG_DATA[4]) MODE3(I0:D2IMS) PUPD
+GPIO28= MODE0(GPIO28) MODE1(I0:CMDAT3) MODE2(O:LOG_DATA[3]) MODE3(O:TCTIRQ2) PUPD
+GPIO29= MODE0(GPIO29) MODE1(I0:CMDAT2) MODE2(O:LOG_DATA[2]) MODE3(O:TEVTVAL) PUPD
+GPIO30= MODE0(GPIO30) MODE1(I0:CMDAT1) MODE2(O:LOG_DATA[1]) MODE3(O:D2_TID0) PUPD
+GPIO31= MODE0(GPIO31) MODE1(I0:CMDAT0) MODE2(O:LOG_DATA[0]) MODE3(O:D2_TID1) PUPD
+GPIO32= MODE0(GPIO32) MODE1(O:CMFLASH) MODE2(O:X4W_LOG_CLK) MODE3(O:D2_TID2) PUPD
+GPIO33= MODE0(GPIO33) MODE1(IO1:SCL) MODE2(O:LOG_SLOT_STRB) MODE3(O:D2_TID3) PUPD
+GPIO34= MODE0(GPIO34) MODE1(IO1:SDA) MODE2(O:LOG_DATA_RDY) MODE3(O:D2_TID4) PUPD
+GPIO35= MODE0(GPIO35) MODE1(O:PWM1_OUT) MODE2(O:DEBUG6) MODE3(O:D2_TID5) PUPD
+GPIO36= MODE0(GPIO36) MODE1(O:PWM2_OUT) MODE2(O:DEBUG7) MODE3(O:D2_TID6) PUPD
+GPIO37= MODE0(GPIO37) MODE1(I1:IRQ0) MODE2(O:CLKM0) MODE3(O:D1_TID0) PUPD
+GPIO38= MODE0(GPIO38) MODE1(I1:IRQ1) MODE2(O:CLKM1) MODE3(O:D1_TID1) PUPD
+GPIO39= MODE0(GPIO39) MODE1(I0:SRCLKENAI) MODE2() MODE3() PUPD
+GPIO40= MODE0(GPIO40) MODE1(IO1:SCL_DUAL) MODE2() MODE3() PUPD
+GPIO41= MODE0(GPIO41) MODE1(IO1:SDA_DUAL) MODE2() MODE3() PUPD
+GPIO42= MODE0(GPIO42) MODE1(O:PASEL) MODE2() MODE3() PUPD
+GPIO43= MODE0(GPIO43) MODE1(I1:IRQ2) MODE2(O:CLKM2) MODE3(I:EXT_FRAME_SYNC) PUPD
+GPIO44= MODE0(GPIO44) MODE1(I1:IRQ3) MODE2(O:CLKM3) MODE3() PUPD
+GPIO45= MODE0(GPIO45) MODE1(O:SPI_CS) MODE2(O:CAM_MECH1) MODE3(O:TDMA_D1) PUPD
+GPIO46= MODE0(GPIO46) MODE1(O:SPI_SCK) MODE2(IO0:CAM_STROBE) MODE3(O:TDMA_CK) PUPD
+GPIO47= MODE0(GPIO47) MODE1(O:SPI_MOSI) MODE2(I0:SRCCLKENAI2) MODE3(O:TDMA_D0) PUPD
+GPIO48= MODE0(GPIO48) MODE1(I1:SPI_MISO) MODE2(O:CAM_MECH0) MODE3(O:TDMA_FS) PUPD
+GPIO49= MODE0(GPIO49) MODE1(I1:EINT2) MODE2() MODE3() PUPD
+GPIO50= MODE0(GPIO50) MODE1(I1:EINT3) MODE2() MODE3() PUPD
+GPIO51= MODE0(GPIO51) MODE1(O:DAICLK) MODE2() MODE3() PUPD
+GPIO52= MODE0(GPIO52) MODE1(O:DAIPCMOUT) MODE2() MODE3() PUPD
+GPIO53= MODE0(GPIO53) MODE1(I0:DAIPCMIN) MODE2() MODE3() PUPD
+GPIO54= MODE0(GPIO54) MODE1(O:DAISYNC) MODE2() MODE3() PUPD
+GPIO55= MODE0(GPIO55) MODE1(I1:DAIRST) MODE2() MODE3() PUPD
+GPIO56= MODE0(GPIO56) MODE1(I1:URXD2) MODE2() MODE3() PUPD
+GPIO57= MODE0(GPIO57) MODE1(O:UTXD2) MODE2() MODE3() PUPD
+GPIO58= MODE0(GPIO58) MODE1(O:URTS2) MODE2() MODE3() PUPD
+GPIO59= MODE0(GPIO59) MODE1(I1:UCTS2) MODE2() MODE3() PUPD
+GPIO60= MODE0(GPIO60) MODE1(I1:MIRQ) MODE2(O:CLKM2) MODE3() PUPD
+GPIO61= MODE0(GPIO61) MODE1(O:LSCK) MODE2(IO0:EDICK) MODE3(O:VM[0]) PUPD
+GPIO62= MODE0(GPIO62) MODE1(O:LSA0) MODE2(IO0:EDIWS) MODE3(O:VM[1]) PUPD
+GPIO63= MODE0(GPIO63) MODE1(O:LSDA) MODE2(IO0:EDIDAT) MODE3(O:DEBUG8) PUPD
+GPIO64= MODE0(GPIO64) MODE1(O:LSCE0B) MODE2(O:CLKM4) MODE3(O:DEBUG9) PUPD
+GPIO65= MODE0(GPIO65) MODE1(O:LSCE1B) MODE2(O:LPCE2B) MODE3(O:DEBUG10) PUPD
+GPIO66= MODE0(GPIO66) MODE1(O:LPCE1B) MODE2(O:NCE1B) MODE3(O:DEBUG11) PUPD
+GPIO67= MODE0(GPIO67) MODE1(I0:LPTE) MODE2() MODE3(O:DEBUG12) PUPD
+GPIO68= MODE0(GPIO68) MODE1(NLD17) MODE2() MODE3(O:DEBUG13) PUPD
+GPIO69= MODE0(GPIO69) MODE1(NLD16) MODE2() MODE3(O:DEBUG14) PUPD
+GPIO70= MODE0(GPIO70) MODE1(O:PWM3_OUT) MODE2() MODE3() PUPD
+GPIO71= MODE0(GPIO71) MODE1(O:PWM4_OUT) MODE2() MODE3() PUPD
+GPIO72= MODE0(GPIO72) MODE1(O:PWM5_OUT) MODE2() MODE3() PUPD
+GPIO73= MODE0(GPIO73) MODE1(O:PWM6_OUT) MODE2() MODE3() PUPD
+GPIO74= MODE0(GPIO74) MODE1(O:URTS1) MODE2() MODE3() PUPD
+GPIO75= MODE0(GPIO75) MODE1(I1:UCTS1) MODE2() MODE3() PUPD
+GPIO76= MODE0(GPIO76) MODE1(I1:URXD3) MODE2(I1:IRDA_RXD) MODE3() PUPD
+GPIO77= MODE0(GPIO77) MODE1(O:UTXD3) MODE2(O:IRDA_TXD) MODE3() PUPD
+GPIO78= MODE0(GPIO78) MODE1(I1:IRQ4) MODE2(O:IRDA_PDN) MODE3(O:DEBUG15) PUPD
+GPIO79= MODE0(GPIO79) MODE1(I1:IRQ5) MODE2() MODE3() PUPD
+GPIO80= MODE0(GPIO80) MODE1(I1:IRQ6) MODE2(O:CLKM2) MODE3() PUPD
+GPIO81= MODE0(GPIO81) MODE1(O:USB_DRVVBUS) MODE2(O:CLKM3) MODE3() PUPD
+GPIO82= MODE0(GPIO82) MODE1(I1:EINT6) MODE2(O:CLKM4) MODE3() PUPD
+GPIO83= MODE0(GPIO83) MODE1(I1:EINT7) MODE2(O:CLKM5) MODE3() PUPD
+GPIO84= MODE0(GPIO84) MODE1(IO0:MC1CM0) MODE2() MODE3(O:DEBUG0) PUPD
+GPIO85= MODE0(GPIO85) MODE1(IO0:MC1DA0) MODE2(O:CLKM0) MODE3(O:DEBUG1) PUPD
+GPIO86= MODE0(GPIO86) MODE1(IO0:MC1DA1) MODE2(IO:MC0DA4) MODE3(O:DEBUG2) PUPD
+GPIO87= MODE0(GPIO87) MODE1(IO0:MC1CK) MODE2(IO:MC0DA5) MODE3(O:DEBUG3) PUPD
+GPIO88= MODE0(GPIO88) MODE1(I0:MC1WP) MODE2(IO:MC0DA6) MODE3(O:DEBUG4) PUPD
+GPIO89= MODE0(GPIO89) MODE1(I0:MC1INS) MODE2(IO:MC0DA7) MODE3(O:DEBUG5) PUPD
+GPIO90= MODE0(GPIO90) MODE1(I1:KCOL7) MODE2(O:CLKM1) MODE3() PUPD
+GPIO91= MODE0(GPIO91) MODE1(I1:KCOL6) MODE2() MODE3() PUPD
+GPIO92= MODE0(GPIO92) MODE1(KROW7) MODE2() MODE3() PUPD
+GPIO93= MODE0(GPIO93) MODE1(KROW6) MODE2() MODE3() PUPD
+GPIO94= MODE0(GPIO94) MODE1(I1:EINT0) MODE2() MODE3() PUPD
+GPIO95= MODE0(GPIO95) MODE1(I1:EINT1) MODE2() MODE3() PUPD
+GPIO96= MODE0(GPIO96) MODE1(I1:EINT4) MODE2() MODE3() PUPD
+GPIO97= MODE0(GPIO97) MODE1(I1:EINT5) MODE2() MODE3() PUPD
+GPIO98= MODE0(GPIO98) MODE1() MODE2(O:CLKM2) MODE3() PUPD
+GPIO99= MODE0(GPIO99) MODE1() MODE2(O:CLKM3) MODE3() PUPD
+
+[GPO]
+
+[EINT]
+EINT_COUNT=14
+EINT_DEBOUNCE_TIME_COUNT=14
+
+[ADC]
+ADC_COUNT=10
+
+[KEYPAD]
+KEY_ROW=8
+KEY_COLUMN=8
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6268T.fig b/mcu/custom/driver/drv/Drv_Tool/MT6268T.fig
new file mode 100644
index 0000000..62c8b36
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6268T.fig
@@ -0,0 +1,33 @@
+[Chip Type]
+Chip = MT6268T
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(O:TDMA_CTIRQ1_B) MODE2(O:PWM1) MODE3() PU
+GPIO1 = MODE0(GPIO1) MODE1(O:TDMA_CTIRQ2_B) MODE2(O:PWM2) MODE3() PU
+GPIO2 = MODE0(GPIO2) MODE1(O:O:TDMA_BTXEN) MODE2(O:TDMA_CK) MODE3() PU
+GPIO3 = MODE0(GPIO3) MODE1(O:TDMA_BTXFS) MODE2(O:TDMA_FS) MODE3() PU
+GPIO4 = MODE0(GPIO4) MODE1(O:TDMA_BRXEN) MODE2(O:TDMA_SDAT[0]) MODE3() PU
+GPIO5 = MODE0(GPIO5) MODE1(O:TDMA_BRXFS) MODE2(O:TDMA_SDAT[1]) MODE3() PU
+GPIO6 = MODE0(GPIO6) MODE1(I:BSI_DIN) MODE2() MODE3() PU
+GPIO7 = MODE0(GPIO7) MODE1(O:DSP1_TID[0]) MODE2() MODE3() PU
+GPIO8 = MODE0(GPIO8) MODE1(O:DSP1_TID[1]) MODE2() MODE3() PU
+GPIO9 = MODE0(GPIO9) MODE1(O:DSP2_TID[0]) MODE2() MODE3() PU
+GPIO10= MODE0(GPIO10) MODE1(O:DSP2_TID[1]) MODE2() MODE3() PU
+GPIO11= MODE0(GPIO11) MODE1(O:DSP2_TID[2]) MODE2() MODE3() PU
+GPIO12= MODE0(GPIO12) MODE1(O:DSP2_TID[3]) MODE2() MODE3() PU
+GPIO13= MODE0(GPIO13) MODE1(O:DSP2_TID[4]) MODE2() MODE3() PU
+GPIO14= MODE0(GPIO14) MODE1(O:DSP2_TID[5]) MODE2() MODE3() PU
+GPIO15= MODE0(GPIO15) MODE1(O:DSP2_TID[6]) MODE2() MODE3() PU
+
+[GPO]
+
+[EINT]
+EINT_COUNT = 8
+EINT_DEBOUNCE_TIME_COUNT = 4
+
+[ADC]
+ADC_COUNT=8
+
+[KEYPAD]
+KEY_ROW=7
+KEY_COLUMN=8
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6270A.fig b/mcu/custom/driver/drv/Drv_Tool/MT6270A.fig
new file mode 100644
index 0000000..31a2931
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6270A.fig
@@ -0,0 +1,48 @@
+[Chip Type]
+Chip = MT6270A
+GPIO_Pull_Sel=1
+PMIC_Config=0
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(EINT3) MODE2() MODE3() PU
+GPIO1 = MODE0(GPIO1) MODE1(EINT2) MODE2() MODE3() PU
+GPIO2 = MODE0(GPIO2) MODE1(TRACEPKT7) MODE2(USB_DRVVBUS) MODE3(DEBUG0) PU
+GPIO3 = MODE0(GPIO3) MODE1(TRACEPKT6) MODE2(CLKM0) MODE3(DEBUG1) PU
+GPIO4 = MODE0(GPIO4) MODE1(TRACEPKT5) MODE2(CLKM1) MODE3(DEBUG2) PU
+GPIO5 = MODE0(GPIO5) MODE1(TRACEPKT4) MODE2(CLKM2) MODE3(DEBUG3) PU
+GPIO6 = MODE0(GPIO6) MODE1(TRACEPKT3) MODE2(CLKM3) MODE3(DEBUG4) PU
+GPIO7 = MODE0(GPIO7) MODE1(TRACEPKT2) MODE2(CLKM4) MODE3(DEBUG5) PU
+GPIO8 = MODE0(GPIO8) MODE1(TRACEPKT1) MODE2(CLKM5) MODE3(DEBUG6) PU
+GPIO9 = MODE0(GPIO9) MODE1(TRACEPKT0) MODE2() MODE3(DEBUG7) PU
+GPIO10 = MODE0(GPIO10) MODE1(FPGA_IRQ30_B) MODE2(HSL_ETM_DATA15) MODE3() PU
+GPIO11 = MODE0(GPIO11) MODE1(FPGA_IRQ29_B) MODE2(HSL_ETM_DATA14) MODE3() PU
+GPIO12 = MODE0(GPIO12) MODE1(FPGA_IRQ28_B) MODE2(HSL_ETM_DATA13) MODE3() PU
+GPIO13 = MODE0(GPIO13) MODE1(FPGA_IRQ27_B) MODE2(HSL_ETM_DATA12) MODE3() PU
+GPIO14 = MODE0(GPIO14) MODE1(FPGA_IRQ26_B) MODE2(HSL_ETM_DATA11) MODE3() PU
+GPIO15 = MODE0(GPIO15) MODE1(FPGA_IRQ25_B) MODE2(HSL_ETM_DATA10) MODE3() PU
+GPIO16 = MODE0(GPIO16) MODE1(FPGA_IRQ24_B) MODE2(HSL_ETM_DATA9) MODE3() PU
+GPIO17 = MODE0(GPIO17) MODE1(FPGA_IRQ23_B) MODE2(HSL_ETM_DATA8) MODE3() PU
+GPIO18 = MODE0(GPIO18) MODE1(FPGA_IRQ22_B) MODE2(HSL_ETM_DATA7) MODE3() PU
+GPIO19 = MODE0(GPIO19) MODE1(FPGA_IRQ21_B) MODE2(HSL_ETM_DATA6) MODE3() PU
+GPIO20 = MODE0(GPIO20) MODE1(FPGA_IRQ20_B) MODE2(HSL_ETM_DATA5) MODE3() PU
+GPIO21 = MODE0(GPIO21) MODE1(FPGA_IRQ19_B) MODE2(HSL_ETM_DATA4) MODE3() PU
+GPIO22 = MODE0(GPIO22) MODE1(FPGA_IRQ18_B) MODE2(HSL_ETM_DATA3) MODE3() PU
+GPIO23 = MODE0(GPIO23) MODE1(FPGA_IRQ17_B) MODE2(HSL_ETM_DATA2) MODE3() PU
+GPIO24 = MODE0(GPIO24) MODE1(FPGA_IRQ16_B) MODE2(HSL_ETM_DATA1) MODE3() PU
+GPIO25 = MODE0(GPIO25) MODE1(FPGA_IRQ15_B) MODE2(HSL_ETM_DATA0) MODE3() PU
+GPIO26 = MODE0(GPIO26) MODE1(FPGA_IRQ14_B) MODE2(HSL_ETM_CLKOUT) MODE3() PU
+GPIO27 = MODE0(GPIO27) MODE1(NCE1_B) MODE2(LPECS2_B) MODE3() PU
+
+
+[GPO]
+
+[EINT]
+EINT_COUNT=4
+EINT_DEBOUNCE_TIME_COUNT=4
+
+[ADC]
+ADC_COUNT=1
+
+[KEYPAD]
+KEY_ROW=8
+KEY_COLUMN=9
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6270MP.fig b/mcu/custom/driver/drv/Drv_Tool/MT6270MP.fig
new file mode 100644
index 0000000..0358f72
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6270MP.fig
@@ -0,0 +1,184 @@
+[Chip Type]
+Chip = MT6270MP
+GPIO_ModeNum = 5
+GPIO_Pull_Sel = 1
+GPIO_Extend_Config=1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(MC0INS) MODE2(MC2INS) MODE3(EINT9) MODE4() PU
+GPIO1 = MODE0(GPIO1) MODE1(BSI1_DATA1) MODE2(BSI1_CS1) MODE3() MODE4() PD
+GPIO2 = MODE0(GPIO2) MODE1(BSI0_CS1) MODE2(URTS2) MODE3() MODE4() PD
+GPIO3 = MODE0(GPIO3) MODE1(VM0) MODE2() MODE3(EXT_FRAME_SYNC) MODE4() PD
+GPIO4 = MODE0(GPIO4) MODE1(VM1) MODE2(EDI0DAT) MODE3() MODE4() PD
+GPIO5 = MODE0(GPIO5) MODE1(DUAL_BPI_BUS13) MODE2(EDI1WS) MODE3(EXT_FRAME_SYNC) MODE4(CLKM9) PD
+GPIO6 = MODE0(GPIO6) MODE1(DUAL_BPI_BUS9) MODE2(EDI1CK) MODE3(USB_DRVVBUS) MODE4(UCTS2) PD
+GPIO7 = MODE0(GPIO7) MODE1(DUAL_BPI_BUS6) MODE2(EDI0CK) MODE3() MODE4() PD
+GPIO8 = MODE0(GPIO8) MODE1(DUAL_BPI_BUS7) MODE2(EDI0WS) MODE3() MODE4(CLKM10) PD
+GPIO9 = MODE0(GPIO9) MODE1(DUAL_BPI_BUS14) MODE2(EDI1DAT) MODE3(CLKM1) MODE4() PD
+GPIO10 = MODE0(GPIO10) MODE1(DUAL_BPI_BUS8) MODE2() MODE3(URTS1) MODE4() PD
+GPIO11 = MODE0(GPIO11) MODE1(URXD1) MODE2(UTXD1) MODE3(CLKM7) MODE4() PU
+GPIO12 = MODE0(GPIO12) MODE1(UTXD1) MODE2(URXD1) MODE3(CLKM8) MODE4() --
+GPIO13 = MODE0(GPIO13) MODE1(URXD2) MODE2(UTXD2) MODE3(EINT7) MODE4(CINT0) PU
+GPIO14 = MODE0(GPIO14) MODE1(UTXD2) MODE2(URXD2) MODE3(EINT6) MODE4(SRCLKENAI0) --
+GPIO15 = MODE0(GPIO15) MODE1(DAICLK) MODE2(EDI0CK) MODE3(IRDA_PDN) MODE4(UCTS1) PD
+GPIO16 = MODE0(GPIO16) MODE1(DAIPCMOUT) MODE2(EDI0WS) MODE3(PTA0) MODE4() PD
+GPIO17 = MODE0(GPIO17) MODE1(DAIPCMIN) MODE2(EDI0DAT) MODE3(URXD3) MODE4(UTXD3) PD
+GPIO18 = MODE0(GPIO18) MODE1(DAISYNC) MODE2(EDI1CK) MODE3(UTXD3) MODE4(URXD3) PD
+GPIO19 = MODE0(GPIO19) MODE1(DAIRST) MODE2(EDI1WS) MODE3(SRCLKENAI1) MODE4(PTA1) PD
+GPIO20 = MODE0(GPIO20) MODE1(EINT3) MODE2(EDI1DAT) MODE3(TDD_SYNC) MODE4(CINT1) PU
+GPIO21 = MODE0(GPIO21) MODE1(EINT4) MODE2(GPS_SYNC) MODE3(SRCLKENAI2) MODE4() PU
+GPIO22 = MODE0(GPIO22) MODE1(MCU_JTRST_B) MODE2() MODE3() MODE4() PD
+GPIO23 = MODE0(GPIO23) MODE1(MCU_JTCK) MODE2() MODE3() MODE4() PU
+GPIO24 = MODE0(GPIO24) MODE1(MCU_JTDI) MODE2() MODE3() MODE4() PU
+GPIO25 = MODE0(GPIO25) MODE1(MCU_JTMS) MODE2() MODE3() MODE4() PU
+GPIO26 = MODE0(GPIO26) MODE1(MCU_JTDO) MODE2() MODE3() MODE4() --
+GPIO27 = MODE0(GPIO27) MODE1(MCU_JRTCK) MODE2() MODE3() MODE4() --
+GPIO28 = MODE0(GPIO28) MODE1(SWCLKTCK) MODE2() MODE3() MODE4() PU
+GPIO29 = MODE0(GPIO29) MODE1(SWDIOTMS) MODE2() MODE3() MODE4() PU
+GPIO30 = MODE0(GPIO30) MODE1(PWM1_OUT) MODE2(MC1WP) MODE3() MODE4() PD
+GPIO31 = MODE0(GPIO31) MODE1(PWM2_OUT) MODE2(DSP_JTRST_B) MODE3(EINT8) MODE4(CINT0) PD
+GPIO32 = MODE0(GPIO32) MODE1(PWM3_OUT) MODE2() MODE3(CLKM3) MODE4() PD
+GPIO33 = MODE0(GPIO33) MODE1(EINT0) MODE2(CLKM4) MODE3() MODE4(CINT1) PU
+GPIO34 = MODE0(GPIO34) MODE1(EINT1) MODE2(CLKM5) MODE3(GPS_SYNC) MODE4() PU
+GPIO35 = MODE0(GPIO35) MODE1(EINT2) MODE2(TDD_SYNC) MODE3(LPCE3B) MODE4() PU
+GPIO36 = MODE0(GPIO36) MODE1(KCOL7) MODE2(URXD3) MODE3(IRDA_TXD) MODE4() PU
+GPIO37 = MODE0(GPIO37) MODE1(KCOL6) MODE2(UTXD3) MODE3(PWM4_OUT) MODE4() PU
+GPIO38 = MODE0(GPIO38) MODE1(KCOL5) MODE2(EINT14) MODE3(SPI1_CS) MODE4() PU
+GPIO39 = MODE0(GPIO39) MODE1(KCOL4) MODE2(EINT15) MODE3(SPI1_MOSI) MODE4() PU
+GPIO40 = MODE0(GPIO40) MODE1(KCOL3) MODE2(PWM5_OUT) MODE3(URTS1) MODE4() PU
+GPIO41 = MODE0(GPIO41) MODE1(KCOL2) MODE2(PWM6_OUT) MODE3(UCTS1) MODE4() PU
+GPIO42 = MODE0(GPIO42) MODE1(KCOL1) MODE2() MODE3() MODE4() PU
+GPIO43 = MODE0(GPIO43) MODE1(KCOL0) MODE2() MODE3() MODE4() PU
+GPIO44 = MODE0(GPIO44) MODE1(KROW7) MODE2(URTS2) MODE3(IRDA_RXD) MODE4() --
+GPIO45 = MODE0(GPIO45) MODE1(KROW6) MODE2(UCTS2) MODE3(CLKM6) MODE4() --
+GPIO46 = MODE0(GPIO46) MODE1(KROW5) MODE2(EINT16) MODE3(SPI1_MISO) MODE4() --
+GPIO47 = MODE0(GPIO47) MODE1(KROW4) MODE2(EINT17) MODE3(SPI1_SCK) MODE4() --
+GPIO48 = MODE0(GPIO48) MODE1(KROW3) MODE2() MODE3() MODE4() --
+GPIO49 = MODE0(GPIO49) MODE1(KROW2) MODE2() MODE3() MODE4() --
+GPIO50 = MODE0(GPIO50) MODE1(KROW1) MODE2() MODE3() MODE4() --
+GPIO51 = MODE0(GPIO51) MODE1(KROW0) MODE2() MODE3() MODE4() --
+GPIO52 = MODE0(GPIO52) MODE1(SCL) MODE2() MODE3(DEBUG_OUT[17]) MODE4() PU
+GPIO53 = MODE0(GPIO53) MODE1(SDA) MODE2() MODE3(DEBUG_OUT[16]) MODE4() PU
+GPIO54 = MODE0(GPIO54) MODE1(CMRST) MODE2() MODE3(DEBUG_OUT[13]) MODE4() PD
+GPIO55 = MODE0(GPIO55) MODE1(CMPDN) MODE2(BT_MDS_IN) MODE3(DEBUG_OUT[12]) MODE4() PD
+GPIO56 = MODE0(GPIO56) MODE1(CMVREF) MODE2() MODE3(DEBUG_OUT[11]) MODE4() PD
+GPIO57 = MODE0(GPIO57) MODE1(CMHREF) MODE2() MODE3(DEBUG_OUT[10]) MODE4() PD
+GPIO58 = MODE0(GPIO58) MODE1(CMDAT9) MODE2() MODE3(DEBUG_OUT[9]) MODE4() PD
+GPIO59 = MODE0(GPIO59) MODE1(CMDAT8) MODE2() MODE3(DEBUG_OUT[8]) MODE4() PD
+GPIO60 = MODE0(GPIO60) MODE1(CMDAT7) MODE2() MODE3(DEBUG_OUT[7]) MODE4() PD
+GPIO61 = MODE0(GPIO61) MODE1(CMDAT6) MODE2() MODE3(DEBUG_OUT[6]) MODE4() PD
+GPIO62 = MODE0(GPIO62) MODE1(CMDAT5) MODE2() MODE3(DEBUG_OUT[5]) MODE4() PD
+GPIO63 = MODE0(GPIO63) MODE1(CMDAT4) MODE2() MODE3(DEBUG_OUT[4]) MODE4() PD
+GPIO64 = MODE0(GPIO64) MODE1(CMDAT3) MODE2() MODE3(DEBUG_OUT[3]) MODE4() PD
+GPIO65 = MODE0(GPIO65) MODE1(CMDAT2) MODE2() MODE3(DEBUG_OUT[2]) MODE4() PD
+GPIO66 = MODE0(GPIO66) MODE1(CMDAT1) MODE2(PTA0) MODE3(DEBUG_OUT[1]) MODE4() PD
+GPIO67 = MODE0(GPIO67) MODE1(CMDAT0) MODE2(PTA1) MODE3(DEBUG_OUT[0]) MODE4() PD
+GPIO68 = MODE0(GPIO68) MODE1(CMPCLK) MODE2() MODE3(DEBUG_OUT[14]) MODE4() PD
+GPIO69 = MODE0(GPIO69) MODE1(CMMCLK) MODE2(PLL_TCLK_650M_CK) MODE3(DEBUG_OUT[15]) MODE4() PD
+GPIO70 = MODE0(GPIO70) MODE1(LSCK) MODE2(NCE1B) MODE3(MC2WP) MODE4(DSP_JTDI) PD
+GPIO71 = MODE0(GPIO71) MODE1(LSA0) MODE2() MODE3(CLKM11) MODE4(DSP_JTMS) PD
+GPIO72 = MODE0(GPIO72) MODE1(LSDA) MODE2() MODE3(CLKM12) MODE4(DSP_JTDO) PD
+GPIO73 = MODE0(GPIO73) MODE1(LSCE0B) MODE2(USB_DRVVBUS) MODE3(EINT11) MODE4(DSP_EMU_B) --
+GPIO74 = MODE0(GPIO74) MODE1(LSCE1B) MODE2(IRDA_TXD) MODE3(LPCE2B) MODE4(DSP_JTCK) PU
+GPIO75 = MODE0(GPIO75) MODE1(LPCE1B) MODE2() MODE3(IRDA_RXD) MODE4() PU
+GPIO76 = MODE0(GPIO76) MODE1(LPTE) MODE2() MODE3() MODE4() PD
+GPIO77 = MODE0(GPIO77) MODE1(NLD17) MODE2(EINT12) MODE3() MODE4(CINT0) PD
+GPIO78 = MODE0(GPIO78) MODE1(NLD16) MODE2(EINT13) MODE3() MODE4() PD
+GPIO79 = MODE0(GPIO79) MODE1(NRNB) MODE2() MODE3() MODE4() PU
+GPIO80 = MODE0(GPIO80) MODE1(NCLE) MODE2() MODE3(SRCLKENAI3) MODE4() --
+GPIO81 = MODE0(GPIO81) MODE1(NALE) MODE2() MODE3(SRCLKENAI4) MODE4() --
+GPIO82 = MODE0(GPIO82) MODE1(NWEB) MODE2() MODE3() MODE4() --
+GPIO83 = MODE0(GPIO83) MODE1(NREB) MODE2() MODE3() MODE4() --
+GPIO84 = MODE0(GPIO84) MODE1(NCE0B) MODE2() MODE3() MODE4() --
+GPIO85 = MODE0(GPIO85) MODE1(MC2CM0) MODE2() MODE3(DEBUG_OUT[21]) MODE4() PU
+GPIO86 = MODE0(GPIO86) MODE1(MC2DA0) MODE2(MC0DA7) MODE3(DEBUG_OUT[20]) MODE4() PU
+GPIO87 = MODE0(GPIO87) MODE1(MC2DA1) MODE2(MC0DA6) MODE3(DEBUG_OUT[19]) MODE4() PU
+GPIO88 = MODE0(GPIO88) MODE1(MC2DA2) MODE2(MC0DA5) MODE3(EINT4) MODE4(DEBUG_OUT[31]) PU
+GPIO89 = MODE0(GPIO89) MODE1(MC2DA3) MODE2(MC0DA4) MODE3(EINT5) MODE4() PU
+GPIO90 = MODE0(GPIO90) MODE1(MC2CK) MODE2() MODE3(DEBUG_OUT[22]) MODE4(BT_JTMS) PU
+GPIO91 = MODE0(GPIO91) MODE1(MC2CK_FB) MODE2(MC1INS) MODE3(IRDA_PDN) MODE4() PU
+GPIO92 = MODE0(GPIO92) MODE1(MC0CM0) MODE2() MODE3(DEBUG_OUT[29]) MODE4() PU
+GPIO93 = MODE0(GPIO93) MODE1(MC0DA0) MODE2() MODE3(DEBUG_OUT[28]) MODE4() PU
+GPIO94 = MODE0(GPIO94) MODE1(MC0DA1) MODE2() MODE3(DEBUG_OUT[27]) MODE4() PU
+GPIO95 = MODE0(GPIO95) MODE1(MC0DA2) MODE2() MODE3(DEBUG_OUT[26]) MODE4() PU
+GPIO96 = MODE0(GPIO96) MODE1(MC0DA3) MODE2() MODE3(DEBUG_OUT[25]) MODE4() PU
+GPIO97 = MODE0(GPIO97) MODE1(MC0CK) MODE2() MODE3(DEBUG_OUT[30]) MODE4() PU
+GPIO98 = MODE0(GPIO98) MODE1(MC0CK_FB) MODE2() MODE3(DEBUG_OUT[23]) MODE4() PU
+GPIO99 = MODE0(GPIO99) MODE1(MC0WP) MODE2(EINT10) MODE3(CLKM2) MODE4(BT_JTDI) PU
+GPIO100 = MODE0(GPIO100) MODE1(MC0RST) MODE2() MODE3(DEBUG_OUT[24]) MODE4() --
+GPIO101 = MODE0(GPIO101) MODE1(MC1CM0) MODE2(SPI0_CS) MODE3(BT_JRTCK) MODE4() PU
+GPIO102 = MODE0(GPIO102) MODE1(MC1DA0) MODE2(SPI0_MOSI) MODE3(BT_JTRST_B) MODE4() PU
+GPIO103 = MODE0(GPIO103) MODE1(MC1DA1) MODE2(SPI0_MISO) MODE3(BT_JTCK) MODE4() PU
+GPIO104 = MODE0(GPIO104) MODE1(MC1CK) MODE2(SPI0_SCK) MODE3(BT_JTDO) MODE4() PU
+GPIO105 = MODE0(GPIO105) MODE1(MC1CK_FB) MODE2() MODE3(DEBUG_OUT[18]) MODE4(CLKM13) PU
+GPIO106 = MODE0(GPIO106) MODE1() MODE2() MODE3() MODE4() --
+GPIO107 = MODE0(GPIO107) MODE1() MODE2() MODE3() MODE4() --
+GPIO108 = MODE0(GPIO108) MODE1() MODE2() MODE3() MODE4() --
+GPIO109 = MODE0(GPIO109) MODE1() MODE2() MODE3() MODE4() PD
+
+[GPO]
+
+[EINT]
+EINT_COUNT = 29
+EINT_DEBOUNCE_TIME_COUNT = 29
+
+[EINT_EX_PIN]
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+23
+24
+25
+26
+27
+28
+30
+
+[EINT_INT_PIN]
+22 = OTG_IDPIN_EINT_NO
+29 = CHR_USB_EINT_NO
+31 = FM_EINT_NO
+
+[EINT_INT_TIME_DELAY]
+EINT22 = 50
+EINT29 = 40
+EINT31 = 0
+
+[ADC]
+ADC_COUNT = 5
+
+[ADC_INT_CH]
+0 = ADC_VBAT
+1 = ADC_VISENSE
+2 = ADC_VCHARGER
+3 = ADC_VBATTMP
+
+[ADC_EX_CH]
+4
+5
+6
+7
+8
+
+[KEYPAD]
+KEY_ROW = 8
+KEY_COLUMN = 9
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6276.fig b/mcu/custom/driver/drv/Drv_Tool/MT6276.fig
new file mode 100644
index 0000000..89f6588
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6276.fig
@@ -0,0 +1,141 @@
+[Chip Type]
+Chip = MT6276
+GPIO_Pull_Sel = 1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1() MODE2() MODE3() PUPD
+GPIO1 = MODE0(GPIO1) MODE1() MODE2() MODE3() PUPD
+GPIO2 = MODE0(GPIO2) MODE1() MODE2() MODE3() PUPD
+GPIO3 = MODE0(GPIO3) MODE1() MODE2() MODE3() PD
+GPIO4 = MODE0(GPIO4) MODE1(MC0INS) MODE2(MC2INS) MODE3(EINT9) PU
+GPIO5 = MODE0(GPIO5) MODE1(BSI1_DATA1) MODE2(BSI1_CS1) MODE3(DSP_JTRST_B) PD
+GPIO6 = MODE0(GPIO6) MODE1(BSI0_CS1) MODE2(URTS2) MODE3(DSP_JTCK) PD
+GPIO7 = MODE0(GPIO7) MODE1(VM0) MODE2() MODE3(EXT_FRAME_SYNC) PD
+GPIO8 = MODE0(GPIO8) MODE1(VM1) MODE2(EDI0DAT) MODE3() PD
+GPIO9 = MODE0(GPIO9) MODE1(DUAL_BPI_BUS6) MODE2(EDI0CK) MODE3() PD
+GPIO10 = MODE0(GPIO10) MODE1(DUAL_BPI_BUS7) MODE2(EDI0WS) MODE3() PD
+GPIO11 = MODE0(GPIO11) MODE1(DUAL_BPI_BUS9) MODE2(EDI1CK) MODE3(USB_DRVVBUS) PD
+GPIO12 = MODE0(GPIO12) MODE1(DUAL_BPI_BUS13) MODE2(EDI1WS) MODE3(EXT_FRAME_SYNC) PD
+GPIO13 = MODE0(GPIO13) MODE1(DUAL_BPI_BUS14) MODE2(EDI1DAT) MODE3(CLKM1) PD
+GPIO14 = MODE0(GPIO14) MODE1(EINT0) MODE2(CLKM4) MODE3() PU
+GPIO15 = MODE0(GPIO15) MODE1(EINT1) MODE2(CLKM5) MODE3(GPS_SYNC) PU
+GPIO16 = MODE0(GPIO16) MODE1(EINT2) MODE2(UCTS2) MODE3(DSP_JTDI) PU
+GPIO17 = MODE0(GPIO17) MODE1(DUAL_BPI_BUS8) MODE2() MODE3(GPS_SYNC) PD
+GPIO18 = MODE0(GPIO18) MODE1(KCOL7) MODE2(URXD3) MODE3(IRDA_TXD) PU
+GPIO19 = MODE0(GPIO19) MODE1(KCOL6) MODE2(UTXD3) MODE3(PWM4_OUT) PU
+GPIO20 = MODE0(GPIO20) MODE1(KCOL5) MODE2(EINT14) MODE3(SPI_CS) PU
+GPIO21 = MODE0(GPIO21) MODE1(KCOL4) MODE2(EINT15) MODE3(SPI_MOSI) PU
+GPIO22 = MODE0(GPIO22) MODE1(KCOL3) MODE2(PWM5_OUT) MODE3(URTS1) PU
+GPIO23 = MODE0(GPIO23) MODE1(KCOL2) MODE2(PWM6_OUT) MODE3(UCTS1) PU
+GPIO24 = MODE0(GPIO24) MODE1(KCOL1) MODE2() MODE3() PU
+GPIO25 = MODE0(GPIO25) MODE1(KCOL0) MODE2() MODE3() PU
+GPIO26 = MODE0(GPIO26) MODE1(KROW7) MODE2(URTS2) MODE3(IRDA_RXD) PUPD
+GPIO27 = MODE0(GPIO27) MODE1(KROW6) MODE2(UCTS2) MODE3(CLKM6) PUPD
+GPIO28 = MODE0(GPIO28) MODE1(KROW5) MODE2(EINT16) MODE3(SPI_MISO) PUPD
+GPIO29 = MODE0(GPIO29) MODE1(KROW4) MODE2(EINT17) MODE3(SPI_SCK) PUPD
+GPIO30 = MODE0(GPIO30) MODE1(KROW3) MODE2(EINT6) MODE3(SRCLKENAI) PUPD
+GPIO31 = MODE0(GPIO31) MODE1(KROW2) MODE2(EINT7) MODE3() PUPD
+GPIO32 = MODE0(GPIO32) MODE1(KROW1) MODE2() MODE3() PUPD
+GPIO33 = MODE0(GPIO33) MODE1(KROW0) MODE2() MODE3() PUPD
+GPIO34 = MODE0(GPIO34) MODE1(URXD1) MODE2() MODE3() PU
+GPIO35 = MODE0(GPIO35) MODE1(UTXD1) MODE2() MODE3() PUPD
+GPIO36 = MODE0(GPIO36) MODE1(MCU_JTRST_B) MODE2() MODE3() PD
+GPIO37 = MODE0(GPIO37) MODE1(MCU_JTCK) MODE2() MODE3() PU
+GPIO38 = MODE0(GPIO38) MODE1(MCU_JTDI) MODE2() MODE3() PU
+GPIO39 = MODE0(GPIO39) MODE1(MCU_JTMS) MODE2() MODE3() PU
+GPIO40 = MODE0(GPIO40) MODE1(MCU_JTDO) MODE2() MODE3() PUPD
+GPIO41 = MODE0(GPIO41) MODE1(MCU_JRTCK) MODE2() MODE3() PUPD
+GPIO42 = MODE0(GPIO42) MODE1(SWCLKTCK) MODE2() MODE3() PU
+GPIO43 = MODE0(GPIO43) MODE1(SWDIOTMS) MODE2() MODE3() PU
+GPIO44 = MODE0(GPIO44) MODE1(DAICLK) MODE2(EDI0CK) MODE3(IRDA_PDN) PD
+GPIO45 = MODE0(GPIO45) MODE1(DAIPCMOUT) MODE2(EDI0WS) MODE3(PTA0) PD
+GPIO46 = MODE0(GPIO46) MODE1(DAIPCMIN) MODE2(EDI0DAT) MODE3(URXD3) PD
+GPIO47 = MODE0(GPIO47) MODE1(DAISYNC) MODE2(EDI1CK) MODE3(UTXD3) PD
+GPIO48 = MODE0(GPIO48) MODE1(DAIRST) MODE2(EDI1WS) MODE3(SRCLKENAI) PD
+GPIO49 = MODE0(GPIO49) MODE1(PWM1_OUT) MODE2(MC1WP) MODE3() PD
+GPIO50 = MODE0(GPIO50) MODE1(PWM2_OUT) MODE2(PTA1) MODE3(EINT8) PD
+GPIO51 = MODE0(GPIO51) MODE1(PWM3_OUT) MODE2(BT_JTDI) MODE3(CLKM3) PD
+GPIO52 = MODE0(GPIO52) MODE1(URXD2) MODE2() MODE3() PU
+GPIO53 = MODE0(GPIO53) MODE1(UTXD2) MODE2() MODE3() PUPD
+GPIO54 = MODE0(GPIO54) MODE1(EINT3) MODE2(UCTS1) MODE3(DEBUG_OUT[31]) PU
+GPIO55 = MODE0(GPIO55) MODE1(MC1CM0) MODE2(SPI_CS) MODE3(BT_JRTCK) PU
+GPIO56 = MODE0(GPIO56) MODE1(MC1DA0) MODE2(SPI_MOSI) MODE3(BT_JTRST_B) PU
+GPIO57 = MODE0(GPIO57) MODE1(MC1DA1) MODE2(SPI_MISO) MODE3(BT_JTCK) PU
+GPIO58 = MODE0(GPIO58) MODE1(MC1CK) MODE2(SPI_SCK) MODE3(BT_JTDO) PU
+GPIO59 = MODE0(GPIO59) MODE1(MC1CK_FB) MODE2(EDI1DAT) MODE3(DEBUG_OUT[18]) PU
+GPIO60 = MODE0(GPIO60) MODE1(CMMCLK) MODE2(PLL_TCLK_650M_CK) MODE3(DEBUG_OUT[15]) PD
+GPIO61 = MODE0(GPIO61) MODE1(CMPCLK) MODE2() MODE3(DEBUG_OUT[14]) PD
+GPIO62 = MODE0(GPIO62) MODE1(CMRST) MODE2() MODE3(DEBUG_OUT[13]) PD
+GPIO63 = MODE0(GPIO63) MODE1(CMPDN) MODE2(BT_MDS_IN) MODE3(DEBUG_OUT[12]) PD
+GPIO64 = MODE0(GPIO64) MODE1(CMVREF) MODE2() MODE3(DEBUG_OUT[11]) PD
+GPIO65 = MODE0(GPIO65) MODE1(CMHREF) MODE2() MODE3(DEBUG_OUT[10]) PD
+GPIO66 = MODE0(GPIO66) MODE1(CMDAT9) MODE2() MODE3(DEBUG_OUT[9]) PD
+GPIO67 = MODE0(GPIO67) MODE1(CMDAT8) MODE2() MODE3(DEBUG_OUT[8]) PD
+GPIO68 = MODE0(GPIO68) MODE1(CMDAT7) MODE2() MODE3(DEBUG_OUT[7]) PD
+GPIO69 = MODE0(GPIO69) MODE1(CMDAT6) MODE2() MODE3(DEBUG_OUT[6]) PD
+GPIO70 = MODE0(GPIO70) MODE1(CMDAT5) MODE2() MODE3(DEBUG_OUT[5]) PD
+GPIO71 = MODE0(GPIO71) MODE1(CMDAT4) MODE2() MODE3(DEBUG_OUT[4]) PD
+GPIO72 = MODE0(GPIO72) MODE1(CMDAT3) MODE2() MODE3(DEBUG_OUT[3]) PD
+GPIO73 = MODE0(GPIO73) MODE1(CMDAT2) MODE2() MODE3(DEBUG_OUT[2]) PD
+GPIO74 = MODE0(GPIO74) MODE1(CMDAT1) MODE2(PTA0) MODE3(DEBUG_OUT[1]) PD
+GPIO75 = MODE0(GPIO75) MODE1(CMDAT0) MODE2(PTA1) MODE3(DEBUG_OUT[0]) PD
+GPIO76 = MODE0(GPIO76) MODE1(SCL) MODE2() MODE3(DEBUG_OUT[17]) PU
+GPIO77 = MODE0(GPIO77) MODE1(SDA) MODE2() MODE3(DEBUG_OUT[16]) PU
+GPIO78 = MODE0(GPIO78) MODE1(LSCK) MODE2(USB_DRVVBUS) MODE3(MC2WP) PD
+GPIO79 = MODE0(GPIO79) MODE1(LSA0) MODE2(MC1DA2) MODE3(DSP_JTMS) PD
+GPIO80 = MODE0(GPIO80) MODE1(LSDA) MODE2(MC1DA3) MODE3(DSP_JTDO) PD
+GPIO81 = MODE0(GPIO81) MODE1(LSCE0B) MODE2(URTS1) MODE3(EINT11) PUPD
+GPIO82 = MODE0(GPIO82) MODE1(LSCE1B) MODE2(IRDA_TXD) MODE3(LPCE2B) PU
+GPIO83 = MODE0(GPIO83) MODE1(LPCE1B) MODE2(NCE1B) MODE3(IRDA_RXD) PU
+GPIO84 = MODE0(GPIO84) MODE1(LPTE) MODE2() MODE3() PD
+GPIO85 = MODE0(GPIO85) MODE1(NLD17) MODE2(EINT12) MODE3(DSP_EMU_B) PD
+GPIO86 = MODE0(GPIO86) MODE1(NLD16) MODE2(EINT13) MODE3(BT_JTMS) PD
+GPIO87 = MODE0(GPIO87) MODE1(MC2CM0) MODE2() MODE3(DEBUG_OUT[21]) PU
+GPIO88 = MODE0(GPIO88) MODE1(MC2DA0) MODE2(MC0DA7) MODE3(DEBUG_OUT[20]) PU
+GPIO89 = MODE0(GPIO89) MODE1(MC2DA1) MODE2(MC0DA6) MODE3(DEBUG_OUT[19]) PU
+GPIO90 = MODE0(GPIO90) MODE1(MC2DA2) MODE2(MC0DA5) MODE3(EINT4) PU
+GPIO91 = MODE0(GPIO91) MODE1(MC2DA3) MODE2(MC0DA4) MODE3(EINT5) PU
+GPIO92 = MODE0(GPIO92) MODE1(MC2CK) MODE2() MODE3(DEBUG_OUT[22]) PU
+GPIO93 = MODE0(GPIO93) MODE1(MC2CK_FB) MODE2(MC1INS) MODE3(IRDA_PDN) PU
+GPIO94 = MODE0(GPIO94) MODE1(MC0CM0) MODE2() MODE3(DEBUG_OUT[29]) PU
+GPIO95 = MODE0(GPIO95) MODE1(MC0DA0) MODE2() MODE3(DEBUG_OUT[28]) PU
+GPIO96 = MODE0(GPIO96) MODE1(MC0DA1) MODE2() MODE3(DEBUG_OUT[27]) PU
+GPIO97 = MODE0(GPIO97) MODE1(MC0DA2) MODE2() MODE3(DEBUG_OUT[26]) PU
+GPIO98 = MODE0(GPIO98) MODE1(MC0DA3) MODE2() MODE3(DEBUG_OUT[25]) PU
+GPIO99 = MODE0(GPIO99) MODE1(MC0CK) MODE2() MODE3(DEBUG_OUT[30]) PU
+GPIO100 = MODE0(GPIO100) MODE1(MC0CK_FB) MODE2() MODE3(DEBUG_OUT[23]) PU
+GPIO101 = MODE0(GPIO101) MODE1(MC0WP) MODE2(EINT10) MODE3(CLKM2) PU
+GPIO102 = MODE0(GPIO102) MODE1(MC0RST) MODE2() MODE3(DEBUG_OUT[24]) PUPD
+GPIO103 = MODE0(GPIO103) MODE1(NRNB) MODE2() MODE3() PU
+GPIO104 = MODE0(GPIO104) MODE1(NCLE) MODE2() MODE3() PUPD
+GPIO105 = MODE0(GPIO105) MODE1(NALE) MODE2() MODE3() PUPD
+GPIO106 = MODE0(GPIO106) MODE1(NWEB) MODE2() MODE3() PUPD
+GPIO107 = MODE0(GPIO107) MODE1(NREB) MODE2() MODE3() PUPD
+GPIO108 = MODE0(GPIO108) MODE1(NCE0B) MODE2() MODE3() PUPD
+
+[GPO]
+
+[EINT]
+EINT_COUNT = 32
+EINT_DEBOUNCE_TIME_COUNT = 32
+
+
+[ADC]
+ADC_COUNT = 5
+
+[ADC_INT_CH]
+0 = ADC_VBAT
+1 = ADC_VISENSE
+2 = ADC_VCHARGER
+3 = ADC_VBATTMP
+
+[ADC_EX_CH]
+4
+5
+6
+7
+8
+
+[KEYPAD]
+KEY_ROW = 8
+KEY_COLUMN = 9
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6276M.fig b/mcu/custom/driver/drv/Drv_Tool/MT6276M.fig
new file mode 100644
index 0000000..bc9aed8
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6276M.fig
@@ -0,0 +1,186 @@
+[Chip Type]
+Chip = MT6276M
+GPIO_ModeNum = 5
+GPIO_Pull_Sel = 1
+PMIC_Config = 1
+PMIC_Volt_Format = 1
+GPIO_Extend_Config=1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(MC0INS) MODE2(MC2INS) MODE3(EINT9) MODE4() PU
+GPIO1 = MODE0(GPIO1) MODE1(BSI1_DATA1) MODE2(BSI1_CS1) MODE3() MODE4() PD
+GPIO2 = MODE0() MODE1() MODE2() MODE3() MODE4() PD
+GPIO3 = MODE0(GPIO3) MODE1(VM0) MODE2() MODE3(EXT_FRAME_SYNC) MODE4() PD
+GPIO4 = MODE0(GPIO4) MODE1(VM1) MODE2(EDI0DAT) MODE3() MODE4() PD
+GPIO5 = MODE0(GPIO5) MODE1(DUAL_BPI_BUS13) MODE2(EDI1WS) MODE3(EXT_FRAME_SYNC) MODE4(CLKM9) PD
+GPIO6 = MODE0(GPIO6) MODE1(DUAL_BPI_BUS9) MODE2(EDI1CK) MODE3(USB_DRVVBUS) MODE4(UCTS2) PD
+GPIO7 = MODE0(GPIO7) MODE1(DUAL_BPI_BUS6) MODE2(EDI0CK) MODE3() MODE4() PD
+GPIO8 = MODE0(GPIO8) MODE1(DUAL_BPI_BUS7) MODE2(EDI0WS) MODE3() MODE4(CLKM10) PD
+GPIO9 = MODE0(GPIO9) MODE1(DUAL_BPI_BUS14) MODE2(EDI1DAT) MODE3(CLKM1) MODE4() PD
+GPIO10 = MODE0(GPIO10) MODE1(DUAL_BPI_BUS8) MODE2() MODE3(URTS1) MODE4() PD
+GPIO11 = MODE0(GPIO11) MODE1(URXD1) MODE2(UTXD1) MODE3(CLKM7) MODE4() PU
+GPIO12 = MODE0(GPIO12) MODE1(UTXD1) MODE2(URXD1) MODE3(CLKM8) MODE4() --
+GPIO13 = MODE0(GPIO13) MODE1(URXD2) MODE2(UTXD2) MODE3(EINT7) MODE4(CINT0) PU
+GPIO14 = MODE0(GPIO14) MODE1(UTXD2) MODE2(URXD2) MODE3(EINT6) MODE4(SRCLKENAI0) --
+GPIO15 = MODE0(GPIO15) MODE1(DAICLK) MODE2(EDI0CK) MODE3(IRDA_PDN) MODE4(UCTS1) PD
+GPIO16 = MODE0(GPIO16) MODE1(DAIPCMOUT) MODE2(EDI0WS) MODE3(PTA0) MODE4() PD
+GPIO17 = MODE0(GPIO17) MODE1(DAIPCMIN) MODE2(EDI0DAT) MODE3(URXD3) MODE4(UTXD3) PD
+GPIO18 = MODE0(GPIO18) MODE1(DAISYNC) MODE2(EDI1CK) MODE3(UTXD3) MODE4(URXD3) PD
+GPIO19 = MODE0(GPIO19) MODE1(DAIRST) MODE2(EDI1WS) MODE3(SRCLKENAI1) MODE4(PTA1) PD
+GPIO20 = MODE0(GPIO20) MODE1(EINT3) MODE2(EDI1DAT) MODE3() MODE4(CINT1) PU
+GPIO21 = MODE0(GPIO21) MODE1(EINT4) MODE2(GPS_SYNC) MODE3(SRCLKENAI2) MODE4() PU
+GPIO22 = MODE0(GPIO22) MODE1(MCU_JTRST_B) MODE2() MODE3() MODE4() PD
+GPIO23 = MODE0(GPIO23) MODE1(MCU_JTCK) MODE2() MODE3() MODE4() PU
+GPIO24 = MODE0(GPIO24) MODE1(MCU_JTDI) MODE2() MODE3() MODE4() PU
+GPIO25 = MODE0(GPIO25) MODE1(MCU_JTMS) MODE2() MODE3() MODE4() PU
+GPIO26 = MODE0(GPIO26) MODE1(MCU_JTDO) MODE2() MODE3() MODE4() --
+GPIO27 = MODE0(GPIO27) MODE1(MCU_JRTCK) MODE2() MODE3() MODE4() --
+GPIO28 = MODE0(GPIO28) MODE1(SWCLKTCK) MODE2() MODE3() MODE4() PU
+GPIO29 = MODE0(GPIO29) MODE1(SWDIOTMS) MODE2() MODE3() MODE4() PU
+GPIO30 = MODE0(GPIO30) MODE1(PWM1_OUT) MODE2(MC1WP) MODE3() MODE4() PD
+GPIO31 = MODE0(GPIO31) MODE1(PWM2_OUT) MODE2(DSP_JTRST_B) MODE3(EINT8) MODE4(CINT0) PD
+GPIO32 = MODE0(GPIO32) MODE1(PWM3_OUT) MODE2() MODE3(CLKM3) MODE4() PD
+GPIO33 = MODE0(GPIO33) MODE1(EINT0) MODE2(CLKM4) MODE3() MODE4(CINT1) PU
+GPIO34 = MODE0(GPIO34) MODE1(EINT1) MODE2(CLKM5) MODE3(GPS_SYNC) MODE4() PU
+GPIO35 = MODE0(GPIO35) MODE1(EINT2) MODE2() MODE3() MODE4() PU
+GPIO36 = MODE0(GPIO36) MODE1(KCOL7) MODE2(URXD3) MODE3(IRDA_TXD) MODE4() PU
+GPIO37 = MODE0(GPIO37) MODE1(KCOL6) MODE2(UTXD3) MODE3(PWM4_OUT) MODE4() PU
+GPIO38 = MODE0(GPIO38) MODE1(KCOL5) MODE2(EINT14) MODE3(SPI1_CS) MODE4() PU
+GPIO39 = MODE0(GPIO39) MODE1(KCOL4) MODE2(EINT15) MODE3(SPI1_MOSI) MODE4() PU
+GPIO40 = MODE0(GPIO40) MODE1(KCOL3) MODE2(PWM5_OUT) MODE3(URTS1) MODE4() PU
+GPIO41 = MODE0(GPIO41) MODE1(KCOL2) MODE2(PWM6_OUT) MODE3(UCTS1) MODE4() PU
+GPIO42 = MODE0(GPIO42) MODE1(KCOL1) MODE2() MODE3() MODE4() PU
+GPIO43 = MODE0(GPIO43) MODE1(KCOL0) MODE2() MODE3() MODE4() PU
+GPIO44 = MODE0(GPIO44) MODE1(KROW7) MODE2(URTS2) MODE3(IRDA_RXD) MODE4() --
+GPIO45 = MODE0(GPIO45) MODE1(KROW6) MODE2(UCTS2) MODE3(CLKM6) MODE4() --
+GPIO46 = MODE0(GPIO46) MODE1(KROW5) MODE2(EINT16) MODE3(SPI1_MISO) MODE4() --
+GPIO47 = MODE0(GPIO47) MODE1(KROW4) MODE2(EINT17) MODE3(SPI1_SCK) MODE4() --
+GPIO48 = MODE0(GPIO48) MODE1(KROW3) MODE2() MODE3() MODE4() --
+GPIO49 = MODE0(GPIO49) MODE1(KROW2) MODE2() MODE3() MODE4() --
+GPIO50 = MODE0(GPIO50) MODE1(KROW1) MODE2() MODE3() MODE4() --
+GPIO51 = MODE0(GPIO51) MODE1(KROW0) MODE2() MODE3() MODE4() --
+GPIO52 = MODE0(GPIO52) MODE1(SCL) MODE2() MODE3(DEBUG_OUT[17]) MODE4() PU
+GPIO53 = MODE0(GPIO53) MODE1(SDA) MODE2() MODE3(DEBUG_OUT[16]) MODE4() PU
+GPIO54 = MODE0(GPIO54) MODE1(CMRST) MODE2() MODE3(DEBUG_OUT[13]) MODE4() PD
+GPIO55 = MODE0(GPIO55) MODE1(CMPDN) MODE2(BT_MDS_IN) MODE3(DEBUG_OUT[12]) MODE4() PD
+GPIO56 = MODE0(GPIO56) MODE1(CMVREF) MODE2() MODE3(DEBUG_OUT[11]) MODE4() PD
+GPIO57 = MODE0(GPIO57) MODE1(CMHREF) MODE2() MODE3(DEBUG_OUT[10]) MODE4() PD
+GPIO58 = MODE0(GPIO58) MODE1(CMDAT9) MODE2() MODE3(DEBUG_OUT[9]) MODE4() PD
+GPIO59 = MODE0(GPIO59) MODE1(CMDAT8) MODE2() MODE3(DEBUG_OUT[8]) MODE4() PD
+GPIO60 = MODE0(GPIO60) MODE1(CMDAT7) MODE2() MODE3(DEBUG_OUT[7]) MODE4() PD
+GPIO61 = MODE0(GPIO61) MODE1(CMDAT6) MODE2() MODE3(DEBUG_OUT[6]) MODE4() PD
+GPIO62 = MODE0(GPIO62) MODE1(CMDAT5) MODE2() MODE3(DEBUG_OUT[5]) MODE4() PD
+GPIO63 = MODE0(GPIO63) MODE1(CMDAT4) MODE2() MODE3(DEBUG_OUT[4]) MODE4() PD
+GPIO64 = MODE0(GPIO64) MODE1(CMDAT3) MODE2() MODE3(DEBUG_OUT[3]) MODE4() PD
+GPIO65 = MODE0(GPIO65) MODE1(CMDAT2) MODE2() MODE3(DEBUG_OUT[2]) MODE4() PD
+GPIO66 = MODE0(GPIO66) MODE1(CMDAT1) MODE2(PTA0) MODE3(DEBUG_OUT[1]) MODE4() PD
+GPIO67 = MODE0(GPIO67) MODE1(CMDAT0) MODE2(PTA1) MODE3(DEBUG_OUT[0]) MODE4() PD
+GPIO68 = MODE0(GPIO68) MODE1(CMPCLK) MODE2() MODE3(DEBUG_OUT[14]) MODE4() PD
+GPIO69 = MODE0() MODE1() MODE2() MODE3() MODE4() PD
+GPIO70 = MODE0(GPIO70) MODE1(LSCK) MODE2(NCE1B) MODE3(MC2WP) MODE4(DSP_JTDI) PD
+GPIO71 = MODE0(GPIO71) MODE1(LSA0) MODE2() MODE3(CLKM11) MODE4(DSP_JTMS) PD
+GPIO72 = MODE0(GPIO72) MODE1(LSDA) MODE2() MODE3(CLKM12) MODE4(DSP_JTDO) PD
+GPIO73 = MODE0(GPIO73) MODE1(LSCE0B) MODE2(USB_DRVVBUS) MODE3(EINT11) MODE4(DSP_EMU_B) --
+GPIO74 = MODE0(GPIO74) MODE1() MODE2() MODE3() MODE4() PU
+GPIO75 = MODE0() MODE1() MODE2() MODE3() MODE4() PU
+GPIO76 = MODE0(GPIO76) MODE1(LPTE) MODE2() MODE3() MODE4() PD
+GPIO77 = MODE0() MODE1() MODE2() MODE3() MODE4() PD
+GPIO78 = MODE0(GPIO78) MODE1(NLD16) MODE2(EINT13) MODE3() MODE4() PD
+GPIO79 = MODE0(GPIO79) MODE1(NRNB) MODE2() MODE3() MODE4() PU
+GPIO80 = MODE0(GPIO80) MODE1(NCLE) MODE2() MODE3(SRCLKENAI3) MODE4() --
+GPIO81 = MODE0(GPIO81) MODE1(NALE) MODE2() MODE3(SRCLKENAI4) MODE4() --
+GPIO82 = MODE0(GPIO82) MODE1(NWEB) MODE2() MODE3() MODE4() --
+GPIO83 = MODE0(GPIO83) MODE1(NREB) MODE2() MODE3() MODE4() --
+GPIO84 = MODE0(GPIO84) MODE1(NCE0B) MODE2() MODE3() MODE4() --
+GPIO85 = MODE0(GPIO85) MODE1(MC2CM0) MODE2() MODE3(DEBUG_OUT[21]) MODE4() PU
+GPIO86 = MODE0() MODE1() MODE2() MODE3() MODE4() PU
+GPIO87 = MODE0() MODE1() MODE2() MODE3() MODE4() PU
+GPIO88 = MODE0() MODE1() MODE2() MODE3() MODE4() PU
+GPIO89 = MODE0() MODE1() MODE2() MODE3() MODE4() PU
+GPIO90 = MODE0() MODE1() MODE2() MODE3() MODE4() PU
+GPIO91 = MODE0() MODE1() MODE2() MODE3() MODE4() PU
+GPIO92 = MODE0(GPIO92) MODE1(MC0CM0) MODE2() MODE3(DEBUG_OUT[29]) MODE4() PU
+GPIO93 = MODE0(GPIO93) MODE1(MC0DA0) MODE2() MODE3(DEBUG_OUT[28]) MODE4() PU
+GPIO94 = MODE0(GPIO94) MODE1(MC0DA1) MODE2() MODE3(DEBUG_OUT[27]) MODE4() PU
+GPIO95 = MODE0(GPIO95) MODE1(MC0DA2) MODE2() MODE3(DEBUG_OUT[26]) MODE4() PU
+GPIO96 = MODE0(GPIO96) MODE1(MC0DA3) MODE2() MODE3(DEBUG_OUT[25]) MODE4() PU
+GPIO97 = MODE0(GPIO97) MODE1(MC0CK) MODE2() MODE3(DEBUG_OUT[30]) MODE4() PU
+GPIO98 = MODE0(GPIO98) MODE1(MC0CK_FB) MODE2() MODE3(DEBUG_OUT[23]) MODE4() PU
+GPIO99 = MODE0(GPIO99) MODE1(MC0WP) MODE2(EINT10) MODE3(CLKM2) MODE4(BT_JTDI) PU
+GPIO100 = MODE0(GPIO100) MODE1(MC0RST) MODE2() MODE3(DEBUG_OUT[24]) MODE4() --
+GPIO101 = MODE0(GPIO101) MODE1(MC1CM0) MODE2(SPI0_CS) MODE3(BT_JRTCK) MODE4() PU
+GPIO102 = MODE0(GPIO102) MODE1(MC1DA0) MODE2(SPI0_MOSI) MODE3(BT_JTRST_B) MODE4() PU
+GPIO103 = MODE0(GPIO103) MODE1(MC1DA1) MODE2(SPI0_MISO) MODE3(BT_JTCK) MODE4() PU
+GPIO104 = MODE0(GPIO104) MODE1(MC1CK) MODE2(SPI0_SCK) MODE3(BT_JTDO) MODE4() PU
+GPIO105 = MODE0(GPIO105) MODE1(MC1CK_FB) MODE2() MODE3(DEBUG_OUT[18]) MODE4(CLKM13) PU
+GPIO106 = MODE0(GPIO106) MODE1() MODE2() MODE3() MODE4() --
+GPIO107 = MODE0(GPIO107) MODE1() MODE2() MODE3() MODE4() --
+GPIO108 = MODE0(GPIO108) MODE1() MODE2() MODE3() MODE4() --
+GPIO109 = MODE0(GPIO109) MODE1() MODE2() MODE3() MODE4() PD
+
+[GPO]
+
+[EINT]
+EINT_COUNT = 29
+EINT_DEBOUNCE_TIME_COUNT = 29
+
+[EINT_EX_PIN]
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+23
+24
+25
+26
+27
+28
+30
+
+[EINT_INT_PIN]
+22 = OTG_IDPIN_EINT_NO
+29 = CHR_USB_EINT_NO
+31 = FM_EINT_NO
+
+[EINT_INT_TIME_DELAY]
+EINT22 = 50
+EINT29 = 40
+EINT31 = 0
+
+[ADC]
+ADC_COUNT = 5
+
+[ADC_INT_CH]
+0 = ADC_VBAT
+1 = ADC_VISENSE
+2 = ADC_VCHARGER
+3 = ADC_VBATTMP
+
+[ADC_EX_CH]
+4
+5
+6
+7
+8
+
+[KEYPAD]
+KEY_ROW = 8
+KEY_COLUMN = 9
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6276MP.fig b/mcu/custom/driver/drv/Drv_Tool/MT6276MP.fig
new file mode 100644
index 0000000..6278ee5
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6276MP.fig
@@ -0,0 +1,184 @@
+[Chip Type]
+Chip = MT6276MP
+GPIO_ModeNum = 5
+GPIO_Pull_Sel = 1
+GPIO_Extend_Config=1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(MC0INS) MODE2(MC2INS) MODE3(EINT9) MODE4() PU
+GPIO1 = MODE0(GPIO1) MODE1(BSI1_DATA1) MODE2(BSI1_CS1) MODE3() MODE4() PD
+GPIO2 = MODE0(GPIO2) MODE1(BSI0_CS1) MODE2(URTS2) MODE3() MODE4() PD
+GPIO3 = MODE0(GPIO3) MODE1(VM0) MODE2() MODE3(EXT_FRAME_SYNC) MODE4() PD
+GPIO4 = MODE0(GPIO4) MODE1(VM1) MODE2(EDI0DAT) MODE3() MODE4() PD
+GPIO5 = MODE0(GPIO5) MODE1(DUAL_BPI_BUS13) MODE2(EDI1WS) MODE3(EXT_FRAME_SYNC) MODE4(CLKM9) PD
+GPIO6 = MODE0(GPIO6) MODE1(DUAL_BPI_BUS9) MODE2(EDI1CK) MODE3(USB_DRVVBUS) MODE4(UCTS2) PD
+GPIO7 = MODE0(GPIO7) MODE1(DUAL_BPI_BUS6) MODE2(EDI0CK) MODE3() MODE4() PD
+GPIO8 = MODE0(GPIO8) MODE1(DUAL_BPI_BUS7) MODE2(EDI0WS) MODE3() MODE4(CLKM10) PD
+GPIO9 = MODE0(GPIO9) MODE1(DUAL_BPI_BUS14) MODE2(EDI1DAT) MODE3(CLKM1) MODE4() PD
+GPIO10 = MODE0(GPIO10) MODE1(DUAL_BPI_BUS8) MODE2() MODE3(URTS1) MODE4() PD
+GPIO11 = MODE0(GPIO11) MODE1(URXD1) MODE2(UTXD1) MODE3(CLKM7) MODE4() PU
+GPIO12 = MODE0(GPIO12) MODE1(UTXD1) MODE2(URXD1) MODE3(CLKM8) MODE4() --
+GPIO13 = MODE0(GPIO13) MODE1(URXD2) MODE2(UTXD2) MODE3(EINT7) MODE4(CINT0) PU
+GPIO14 = MODE0(GPIO14) MODE1(UTXD2) MODE2(URXD2) MODE3(EINT6) MODE4(SRCLKENAI0) --
+GPIO15 = MODE0(GPIO15) MODE1(DAICLK) MODE2(EDI0CK) MODE3(IRDA_PDN) MODE4(UCTS1) PD
+GPIO16 = MODE0(GPIO16) MODE1(DAIPCMOUT) MODE2(EDI0WS) MODE3(PTA0) MODE4() PD
+GPIO17 = MODE0(GPIO17) MODE1(DAIPCMIN) MODE2(EDI0DAT) MODE3(URXD3) MODE4(UTXD3) PD
+GPIO18 = MODE0(GPIO18) MODE1(DAISYNC) MODE2(EDI1CK) MODE3(UTXD3) MODE4(URXD3) PD
+GPIO19 = MODE0(GPIO19) MODE1(DAIRST) MODE2(EDI1WS) MODE3(SRCLKENAI1) MODE4(PTA1) PD
+GPIO20 = MODE0(GPIO20) MODE1(EINT3) MODE2(EDI1DAT) MODE3(TDD_SYNC) MODE4(CINT1) PU
+GPIO21 = MODE0(GPIO21) MODE1(EINT4) MODE2(GPS_SYNC) MODE3(SRCLKENAI2) MODE4() PU
+GPIO22 = MODE0(GPIO22) MODE1(MCU_JTRST_B) MODE2() MODE3() MODE4() PD
+GPIO23 = MODE0(GPIO23) MODE1(MCU_JTCK) MODE2() MODE3() MODE4() PU
+GPIO24 = MODE0(GPIO24) MODE1(MCU_JTDI) MODE2() MODE3() MODE4() PU
+GPIO25 = MODE0(GPIO25) MODE1(MCU_JTMS) MODE2() MODE3() MODE4() PU
+GPIO26 = MODE0(GPIO26) MODE1(MCU_JTDO) MODE2() MODE3() MODE4() --
+GPIO27 = MODE0(GPIO27) MODE1(MCU_JRTCK) MODE2() MODE3() MODE4() --
+GPIO28 = MODE0(GPIO28) MODE1(SWCLKTCK) MODE2() MODE3() MODE4() PU
+GPIO29 = MODE0(GPIO29) MODE1(SWDIOTMS) MODE2() MODE3() MODE4() PU
+GPIO30 = MODE0(GPIO30) MODE1(PWM1_OUT) MODE2(MC1WP) MODE3() MODE4() PD
+GPIO31 = MODE0(GPIO31) MODE1(PWM2_OUT) MODE2(DSP_JTRST_B) MODE3(EINT8) MODE4(CINT0) PD
+GPIO32 = MODE0(GPIO32) MODE1(PWM3_OUT) MODE2() MODE3(CLKM3) MODE4() PD
+GPIO33 = MODE0(GPIO33) MODE1(EINT0) MODE2(CLKM4) MODE3() MODE4(CINT1) PU
+GPIO34 = MODE0(GPIO34) MODE1(EINT1) MODE2(CLKM5) MODE3(GPS_SYNC) MODE4() PU
+GPIO35 = MODE0(GPIO35) MODE1(EINT2) MODE2(TDD_SYNC) MODE3(LPCE3B) MODE4() PU
+GPIO36 = MODE0(GPIO36) MODE1(KCOL7) MODE2(URXD3) MODE3(IRDA_TXD) MODE4() PU
+GPIO37 = MODE0(GPIO37) MODE1(KCOL6) MODE2(UTXD3) MODE3(PWM4_OUT) MODE4() PU
+GPIO38 = MODE0(GPIO38) MODE1(KCOL5) MODE2(EINT14) MODE3(SPI1_CS) MODE4() PU
+GPIO39 = MODE0(GPIO39) MODE1(KCOL4) MODE2(EINT15) MODE3(SPI1_MOSI) MODE4() PU
+GPIO40 = MODE0(GPIO40) MODE1(KCOL3) MODE2(PWM5_OUT) MODE3(URTS1) MODE4() PU
+GPIO41 = MODE0(GPIO41) MODE1(KCOL2) MODE2(PWM6_OUT) MODE3(UCTS1) MODE4() PU
+GPIO42 = MODE0(GPIO42) MODE1(KCOL1) MODE2() MODE3() MODE4() PU
+GPIO43 = MODE0(GPIO43) MODE1(KCOL0) MODE2() MODE3() MODE4() PU
+GPIO44 = MODE0(GPIO44) MODE1(KROW7) MODE2(URTS2) MODE3(IRDA_RXD) MODE4() --
+GPIO45 = MODE0(GPIO45) MODE1(KROW6) MODE2(UCTS2) MODE3(CLKM6) MODE4() --
+GPIO46 = MODE0(GPIO46) MODE1(KROW5) MODE2(EINT16) MODE3(SPI1_MISO) MODE4() --
+GPIO47 = MODE0(GPIO47) MODE1(KROW4) MODE2(EINT17) MODE3(SPI1_SCK) MODE4() --
+GPIO48 = MODE0(GPIO48) MODE1(KROW3) MODE2() MODE3() MODE4() --
+GPIO49 = MODE0(GPIO49) MODE1(KROW2) MODE2() MODE3() MODE4() --
+GPIO50 = MODE0(GPIO50) MODE1(KROW1) MODE2() MODE3() MODE4() --
+GPIO51 = MODE0(GPIO51) MODE1(KROW0) MODE2() MODE3() MODE4() --
+GPIO52 = MODE0(GPIO52) MODE1(SCL) MODE2() MODE3(DEBUG_OUT[17]) MODE4() PU
+GPIO53 = MODE0(GPIO53) MODE1(SDA) MODE2() MODE3(DEBUG_OUT[16]) MODE4() PU
+GPIO54 = MODE0(GPIO54) MODE1(CMRST) MODE2() MODE3(DEBUG_OUT[13]) MODE4() PD
+GPIO55 = MODE0(GPIO55) MODE1(CMPDN) MODE2(BT_MDS_IN) MODE3(DEBUG_OUT[12]) MODE4() PD
+GPIO56 = MODE0(GPIO56) MODE1(CMVREF) MODE2() MODE3(DEBUG_OUT[11]) MODE4() PD
+GPIO57 = MODE0(GPIO57) MODE1(CMHREF) MODE2() MODE3(DEBUG_OUT[10]) MODE4() PD
+GPIO58 = MODE0(GPIO58) MODE1(CMDAT9) MODE2() MODE3(DEBUG_OUT[9]) MODE4() PD
+GPIO59 = MODE0(GPIO59) MODE1(CMDAT8) MODE2() MODE3(DEBUG_OUT[8]) MODE4() PD
+GPIO60 = MODE0(GPIO60) MODE1(CMDAT7) MODE2() MODE3(DEBUG_OUT[7]) MODE4() PD
+GPIO61 = MODE0(GPIO61) MODE1(CMDAT6) MODE2() MODE3(DEBUG_OUT[6]) MODE4() PD
+GPIO62 = MODE0(GPIO62) MODE1(CMDAT5) MODE2() MODE3(DEBUG_OUT[5]) MODE4() PD
+GPIO63 = MODE0(GPIO63) MODE1(CMDAT4) MODE2() MODE3(DEBUG_OUT[4]) MODE4() PD
+GPIO64 = MODE0(GPIO64) MODE1(CMDAT3) MODE2() MODE3(DEBUG_OUT[3]) MODE4() PD
+GPIO65 = MODE0(GPIO65) MODE1(CMDAT2) MODE2() MODE3(DEBUG_OUT[2]) MODE4() PD
+GPIO66 = MODE0(GPIO66) MODE1(CMDAT1) MODE2(PTA0) MODE3(DEBUG_OUT[1]) MODE4() PD
+GPIO67 = MODE0(GPIO67) MODE1(CMDAT0) MODE2(PTA1) MODE3(DEBUG_OUT[0]) MODE4() PD
+GPIO68 = MODE0(GPIO68) MODE1(CMPCLK) MODE2() MODE3(DEBUG_OUT[14]) MODE4() PD
+GPIO69 = MODE0(GPIO69) MODE1(CMMCLK) MODE2(PLL_TCLK_650M_CK) MODE3(DEBUG_OUT[15]) MODE4() PD
+GPIO70 = MODE0(GPIO70) MODE1(LSCK) MODE2(NCE1B) MODE3(MC2WP) MODE4(DSP_JTDI) PD
+GPIO71 = MODE0(GPIO71) MODE1(LSA0) MODE2() MODE3(CLKM11) MODE4(DSP_JTMS) PD
+GPIO72 = MODE0(GPIO72) MODE1(LSDA) MODE2() MODE3(CLKM12) MODE4(DSP_JTDO) PD
+GPIO73 = MODE0(GPIO73) MODE1(LSCE0B) MODE2(USB_DRVVBUS) MODE3(EINT11) MODE4(DSP_EMU_B) --
+GPIO74 = MODE0(GPIO74) MODE1(LSCE1B) MODE2(IRDA_TXD) MODE3(LPCE2B) MODE4(DSP_JTCK) PU
+GPIO75 = MODE0(GPIO75) MODE1(LPCE1B) MODE2() MODE3(IRDA_RXD) MODE4() PU
+GPIO76 = MODE0(GPIO76) MODE1(LPTE) MODE2() MODE3() MODE4() PD
+GPIO77 = MODE0(GPIO77) MODE1(NLD17) MODE2(EINT12) MODE3() MODE4(CINT0) PD
+GPIO78 = MODE0(GPIO78) MODE1(NLD16) MODE2(EINT13) MODE3() MODE4() PD
+GPIO79 = MODE0(GPIO79) MODE1(NRNB) MODE2() MODE3() MODE4() PU
+GPIO80 = MODE0(GPIO80) MODE1(NCLE) MODE2() MODE3(SRCLKENAI3) MODE4() --
+GPIO81 = MODE0(GPIO81) MODE1(NALE) MODE2() MODE3(SRCLKENAI4) MODE4() --
+GPIO82 = MODE0(GPIO82) MODE1(NWEB) MODE2() MODE3() MODE4() --
+GPIO83 = MODE0(GPIO83) MODE1(NREB) MODE2() MODE3() MODE4() --
+GPIO84 = MODE0(GPIO84) MODE1(NCE0B) MODE2() MODE3() MODE4() --
+GPIO85 = MODE0(GPIO85) MODE1(MC2CM0) MODE2() MODE3(DEBUG_OUT[21]) MODE4() PU
+GPIO86 = MODE0(GPIO86) MODE1(MC2DA0) MODE2(MC0DA7) MODE3(DEBUG_OUT[20]) MODE4() PU
+GPIO87 = MODE0(GPIO87) MODE1(MC2DA1) MODE2(MC0DA6) MODE3(DEBUG_OUT[19]) MODE4() PU
+GPIO88 = MODE0(GPIO88) MODE1(MC2DA2) MODE2(MC0DA5) MODE3(EINT4) MODE4(DEBUG_OUT[31]) PU
+GPIO89 = MODE0(GPIO89) MODE1(MC2DA3) MODE2(MC0DA4) MODE3(EINT5) MODE4() PU
+GPIO90 = MODE0(GPIO90) MODE1(MC2CK) MODE2() MODE3(DEBUG_OUT[22]) MODE4(BT_JTMS) PU
+GPIO91 = MODE0(GPIO91) MODE1(MC2CK_FB) MODE2(MC1INS) MODE3(IRDA_PDN) MODE4() PU
+GPIO92 = MODE0(GPIO92) MODE1(MC0CM0) MODE2() MODE3(DEBUG_OUT[29]) MODE4() PU
+GPIO93 = MODE0(GPIO93) MODE1(MC0DA0) MODE2() MODE3(DEBUG_OUT[28]) MODE4() PU
+GPIO94 = MODE0(GPIO94) MODE1(MC0DA1) MODE2() MODE3(DEBUG_OUT[27]) MODE4() PU
+GPIO95 = MODE0(GPIO95) MODE1(MC0DA2) MODE2() MODE3(DEBUG_OUT[26]) MODE4() PU
+GPIO96 = MODE0(GPIO96) MODE1(MC0DA3) MODE2() MODE3(DEBUG_OUT[25]) MODE4() PU
+GPIO97 = MODE0(GPIO97) MODE1(MC0CK) MODE2() MODE3(DEBUG_OUT[30]) MODE4() PU
+GPIO98 = MODE0(GPIO98) MODE1(MC0CK_FB) MODE2() MODE3(DEBUG_OUT[23]) MODE4() PU
+GPIO99 = MODE0(GPIO99) MODE1(MC0WP) MODE2(EINT10) MODE3(CLKM2) MODE4(BT_JTDI) PU
+GPIO100 = MODE0(GPIO100) MODE1(MC0RST) MODE2() MODE3(DEBUG_OUT[24]) MODE4() --
+GPIO101 = MODE0(GPIO101) MODE1(MC1CM0) MODE2(SPI0_CS) MODE3(BT_JRTCK) MODE4() PU
+GPIO102 = MODE0(GPIO102) MODE1(MC1DA0) MODE2(SPI0_MOSI) MODE3(BT_JTRST_B) MODE4() PU
+GPIO103 = MODE0(GPIO103) MODE1(MC1DA1) MODE2(SPI0_MISO) MODE3(BT_JTCK) MODE4() PU
+GPIO104 = MODE0(GPIO104) MODE1(MC1CK) MODE2(SPI0_SCK) MODE3(BT_JTDO) MODE4() PU
+GPIO105 = MODE0(GPIO105) MODE1(MC1CK_FB) MODE2() MODE3(DEBUG_OUT[18]) MODE4(CLKM13) PU
+GPIO106 = MODE0(GPIO106) MODE1() MODE2() MODE3() MODE4() --
+GPIO107 = MODE0(GPIO107) MODE1() MODE2() MODE3() MODE4() --
+GPIO108 = MODE0(GPIO108) MODE1() MODE2() MODE3() MODE4() --
+GPIO109 = MODE0(GPIO109) MODE1() MODE2() MODE3() MODE4() PD
+
+[GPO]
+
+[EINT]
+EINT_COUNT = 29
+EINT_DEBOUNCE_TIME_COUNT = 29
+
+[EINT_EX_PIN]
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+23
+24
+25
+26
+27
+28
+30
+
+[EINT_INT_PIN]
+22 = OTG_IDPIN_EINT_NO
+29 = CHR_USB_EINT_NO
+31 = FM_EINT_NO
+
+[EINT_INT_TIME_DELAY]
+EINT22 = 50
+EINT29 = 40
+EINT31 = 0
+
+[ADC]
+ADC_COUNT = 5
+
+[ADC_INT_CH]
+0 = ADC_VBAT
+1 = ADC_VISENSE
+2 = ADC_VCHARGER
+3 = ADC_VBATTMP
+
+[ADC_EX_CH]
+4
+5
+6
+7
+8
+
+[KEYPAD]
+KEY_ROW = 8
+KEY_COLUMN = 9
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6280NS_1.fig b/mcu/custom/driver/drv/Drv_Tool/MT6280NS_1.fig
new file mode 100644
index 0000000..2f4e6b7
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6280NS_1.fig
@@ -0,0 +1,133 @@
+[Chip Type]
+Chip = MT6280NS
+GPIO_ModeNum = 9
+GPIO_Pull_Sel=1
+PMIC_Config=1
+PMIC_Volt_Format = 1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(NLD0) MODE2() MODE3(EINT0) MODE4(CINT0) MODE5(SDIO_INTB) MODE6(MCWP) MODE7(DEBUGOUT6) MODE8(DEBUGOUT1) PU
+GPIO1 = MODE0(GPIO1) MODE1(NLD1) MODE2() MODE3(EINT1) MODE4(CINT1) MODE5(MCINS) MODE6(CLKM0) MODE7(DEBUGOUT7) MODE8(DEBUGOUT0) PU
+GPIO2 = MODE0(GPIO2) MODE1(NLD2) MODE2(DEBUGOUT8) MODE3(U1RXD) MODE4(U1TXD) MODE5(DEBUGOUT5) MODE6(U0RXD) MODE7(SCL) MODE8(DSPJTCK) PU
+GPIO3 = MODE0(GPIO3) MODE1(NLD3) MODE2(DEBUGOUT9) MODE3(U1TXD) MODE4(U1RXD) MODE5(DEBUGOUT6) MODE6(U0TXD) MODE7(SDA) MODE8(DSPJTMS) PU
+GPIO4 = MODE0(GPIO4) MODE1(NLD4) MODE2(DAIPCMIN) MODE3(DEBUGOUT10) MODE4() MODE5(DEBUGOUT7) MODE6(U1RTS) MODE7(DEBUGOUT2) MODE8(DSPJTD) PU
+GPIO5 = MODE0(GPIO5) MODE1(NLD5) MODE2(DAICLK) MODE3() MODE4() MODE5() MODE6(U1CTS) MODE7(DEBUGOUT3) MODE8(DCXO32K) PD
+GPIO6 = MODE0(GPIO6) MODE1(NLD6) MODE2(DAISYNC) MODE3() MODE4() MODE5() MODE6(U0CTS) MODE7(DEBUGOUT6) MODE8(DEBUGOUT0) PU
+GPIO7 = MODE0(GPIO7) MODE1(NLD7) MODE2(DAIPCMOUT) MODE3() MODE4(BSIACS) MODE5(CLKM1) MODE6(U0RTS) MODE7(DEBUGOUT8) MODE8() PU
+GPIO8 = MODE0(GPIO8) MODE1(NLD8) MODE2() MODE3(CLK32K) MODE4() MODE5() MODE6(DEBUGOUT6) MODE7() MODE8() PD
+GPIO9 = MODE0(GPIO9) MODE1(NLD9) MODE2() MODE3(DSPJTCK) MODE4(DEBUGOUT10) MODE5(BSIACS) MODE6(DEBUGOUT7) MODE7(MCUJTDO) MODE8() PD
+GPIO10 = MODE0(GPIO10) MODE1(NLD10) MODE2() MODE3(DSPJTMS) MODE4() MODE5(BSIADATAO) MODE6(DEBUGOUT8) MODE7(MCUJTDI) MODE8() PD
+GPIO11 = MODE0(GPIO11) MODE1(NLD11) MODE2() MODE3(DSPJTD) MODE4() MODE5(BSIADATAI) MODE6(DEBUGOUT9) MODE7(MCUJTCK) MODE8() PD
+GPIO12 = MODE0(GPIO12) MODE1(NLD12) MODE2() MODE3() MODE4() MODE5(BSIACLK) MODE6(DEBUGOUT10) MODE7(MCUJTMS) MODE8() PD
+GPIO13 = MODE0(GPIO13) MODE1(NLD13) MODE2() MODE3() MODE4() MODE5() MODE6(DEBUGOUT11) MODE7(MCUJTRSTB) MODE8() PD
+GPIO14 = MODE0(GPIO14) MODE1(NLD14) MODE2() MODE3(U0RXD) MODE4() MODE5() MODE6(DEBUGOUT12) MODE7() MODE8() PU
+GPIO15 = MODE0(GPIO15) MODE1(NLD15) MODE2(WCDMA_EXT_FRAME_SYNC) MODE3(U0TXD) MODE4() MODE5() MODE6(DEBUGOUT13) MODE7() MODE8() PU
+GPIO16 = MODE0(GPIO16) MODE1(BSIB0CS0) MODE2(BSIB4CS1) MODE3(CLK32K) MODE4(USBIDDIG) MODE5(BSIACLK) MODE6(DAIRST) MODE7(CLKM0) MODE8(EINT0) PU
+GPIO17 = MODE0(GPIO17) MODE1(CLK32K) MODE2() MODE3(BSIADATAO) MODE4(MCINS) MODE5(CLKM0) MODE6(PWM) MODE7(DEBUGOUT6) MODE8() PD
+GPIO18 = MODE0(GPIO18) MODE1() MODE2() MODE3() MODE4(NLD0) MODE5() MODE6() MODE7(DEBUGOUT0) MODE8() PD
+GPIO19 = MODE0(GPIO19) MODE1() MODE2() MODE3() MODE4(NLD1) MODE5() MODE6() MODE7(DEBUGOUT1) MODE8() PD
+GPIO20 = MODE0(GPIO20) MODE1() MODE2() MODE3() MODE4(NLD2) MODE5() MODE6() MODE7(DEBUGOUT2) MODE8() PD
+GPIO21 = MODE0(GPIO21) MODE1() MODE2() MODE3() MODE4(NLD3) MODE5() MODE6() MODE7(DEBUGOUT3) MODE8() PD
+GPIO22 = MODE0(GPIO22) MODE1() MODE2() MODE3() MODE4(NLD4) MODE5() MODE6() MODE7(DEBUGOUT4) MODE8() PD
+GPIO23 = MODE0(GPIO23) MODE1() MODE2() MODE3() MODE4(NLD5) MODE5() MODE6() MODE7(DEBUGOUT5) MODE8() PD
+GPIO24 = MODE0(GPIO24) MODE1() MODE2() MODE3() MODE4(NLD6) MODE5() MODE6() MODE7(DEBUGOUT6) MODE8() PD
+GPIO25 = MODE0(GPIO25) MODE1() MODE2() MODE3() MODE4(NLD7) MODE5() MODE6() MODE7(DEBUGOUT7) MODE8() PD
+GPIO26 = MODE0(GPIO26) MODE1(U1RTS) MODE2(BSIB2CLK) MODE3(CLKM0) MODE4(LPCE0B) MODE5(DEBUGOUT11) MODE6() MODE7(DEBUGOUT6) MODE8() PD
+GPIO27 = MODE0(GPIO27) MODE1(DEBUGOUT12) MODE2(BSIB2DATA) MODE3(MCUJRTCK) MODE4(LPCE1B) MODE5(BSIADATAI) MODE6() MODE7(DEBUGOUT6) MODE8(DEBUGOUT1) PD
+GPIO28 = MODE0(GPIO28) MODE1(U1CTS) MODE2() MODE3() MODE4(LPRSTB) MODE5(DEBUGOUT13) MODE6() MODE7(DEBUGOUT7) MODE8(DEBUGOUT1) PD
+GPIO29 = MODE0(GPIO29) MODE1() MODE2() MODE3() MODE4(LPRDB) MODE5(CLKM1) MODE6(EINT2) MODE7(DEBUGOUT14) MODE8() --
+GPIO30 = MODE0(GPIO30) MODE1() MODE2() MODE3(LPTE) MODE4(LPWRB) MODE5(WCDMA_EXT_FRAME_SYNC) MODE6(EINT3) MODE7(DEBUGOUT15) MODE8() PD
+GPIO31 = MODE0(GPIO31) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO32 = MODE0(GPIO32) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO33 = MODE0(GPIO33) MODE1() MODE2() MODE3() MODE4(BPIBUS8) MODE5() MODE6() MODE7() MODE8() PD
+GPIO34 = MODE0(GPIO34) MODE1(SRCLKENA) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO35 = MODE0(GPIO35) MODE1(VM0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO36 = MODE0(GPIO36) MODE1(VM1) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO37 = MODE0(GPIO37) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO38 = MODE0(GPIO38) MODE1(BPIBUS12) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO39 = MODE0(GPIO39) MODE1(BPIBUS13) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO40 = MODE0(GPIO40) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO41 = MODE0(GPIO41) MODE1() MODE2() MODE3() MODE4(BPIBUS0) MODE5() MODE6() MODE7() MODE8() PD
+GPIO42 = MODE0(GPIO42) MODE1() MODE2() MODE3() MODE4(BPIBUS1) MODE5() MODE6() MODE7() MODE8() PD
+GPIO43 = MODE0(GPIO43) MODE1() MODE2() MODE3() MODE4(BPIBUS2) MODE5() MODE6() MODE7() MODE8() PD
+GPIO44 = MODE0(GPIO44) MODE1() MODE2() MODE3() MODE4(BPIBUS3) MODE5() MODE6() MODE7() MODE8() PD
+GPIO45 = MODE0(GPIO45) MODE1() MODE2(BSIC0DATA) MODE3() MODE4(BPIBUS4) MODE5() MODE6() MODE7() MODE8() PD
+GPIO46 = MODE0(GPIO46) MODE1() MODE2(BSIC0CLK) MODE3() MODE4(BPIBUS5) MODE5() MODE6() MODE7() MODE8() PD
+GPIO47 = MODE0(GPIO47) MODE1() MODE2() MODE3() MODE4(BPIBUS6) MODE5() MODE6() MODE7() MODE8() PD
+GPIO48 = MODE0(GPIO48) MODE1() MODE2() MODE3() MODE4(BPIBUS7) MODE5() MODE6() MODE7() MODE8() PD
+GPIO49 = MODE0(GPIO49) MODE1() MODE2() MODE3(GPS_SYNC) MODE4(USBDRVVBUS) MODE5(WCDMA_EXT_FRAME_SYNC) MODE6(CLKM0) MODE7(DEBUGOUT11) MODE8() PD
+GPIO50 = MODE0(GPIO50) MODE1() MODE2() MODE3() MODE4(U2RXD) MODE5(U2TXD) MODE6() MODE7() MODE8() PD
+GPIO51 = MODE0(GPIO51) MODE1() MODE2() MODE3() MODE4(U2TXD) MODE5(U2RXD) MODE6() MODE7() MODE8() PU
+GPIO52 = MODE0(GPIO52) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO53 = MODE0(GPIO53) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO54 = MODE0(GPIO54) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO55 = MODE0(GPIO55) MODE1(SDA) MODE2(BSIB1DATA) MODE3(U2RXD) MODE4(CLK32K) MODE5(DAIPCMIN) MODE6(U1CTS) MODE7() MODE8() PU
+GPIO56 = MODE0(GPIO56) MODE1(SCL) MODE2(BSIB1CS1) MODE3(U2TXD) MODE4() MODE5(DAICLK) MODE6(U1RTS) MODE7() MODE8() PU
+GPIO57 = MODE0(GPIO57) MODE1() MODE2(BSIB1CLK) MODE3(U2CTS) MODE4() MODE5(DAIPCMOUT) MODE6(U0CTS) MODE7() MODE8() PD
+GPIO58 = MODE0(GPIO58) MODE1() MODE2(BSIB1CS0) MODE3(U2RTS) MODE4() MODE5(DAISYNC) MODE6(U0RTS) MODE7() MODE8() PD
+GPIO59 = MODE0(GPIO59) MODE1() MODE2() MODE3(U0RXD) MODE4(U0TXD) MODE5(U2RXD) MODE6(U2TXD) MODE7() MODE8() PU
+GPIO60 = MODE0(GPIO60) MODE1() MODE2() MODE3(U0TXD) MODE4(U0RXD) MODE5(U2TXD) MODE6(U2RXD) MODE7() MODE8() PU
+GPIO61 = MODE0(GPIO61) MODE1(MCCM) MODE2(SPICS) MODE3(SDRESP) MODE4(DEBUGOUT0) MODE5(DSPJTCK) MODE6(BSIADATAI) MODE7(MCUJTDO) MODE8(DEBUGOUT7) PU
+GPIO62 = MODE0(GPIO62) MODE1(MCDA0) MODE2(SPIMOSI) MODE3(SDDATA0) MODE4(DEBUGOUT1) MODE5(DSPJTMS) MODE6(BSIACLK) MODE7(MCUJTDI) MODE8(DEBUGOUT6) PU
+GPIO63 = MODE0(GPIO63) MODE1(MCDA1) MODE2(SPIMISO) MODE3(SDDATA1) MODE4(DEBUGOUT2) MODE5(DSPJTD) MODE6(BSIACS) MODE7(MCUJTCK) MODE8(DEBUGOUT5) PU
+GPIO64 = MODE0(GPIO64) MODE1(MCDA2) MODE2(SPISCK) MODE3(SDDATA2) MODE4(DEBUGOUT3) MODE5(CLKM0) MODE6(BSIADATAO) MODE7(MCUJTMS) MODE8(DEBUGOUT4) PU
+GPIO65 = MODE0(GPIO65) MODE1(MCDA3) MODE2(WCDMA_EXT_FRAME_SYNC) MODE3(SDDATA3) MODE4(DEBUGOUT4) MODE5(CLKM1) MODE6(BSIADATAO) MODE7(MCUJTRSTB) MODE8(DEBUGOUT3) PU
+GPIO66 = MODE0(GPIO66) MODE1(MCCK) MODE2(DSPJTCK) MODE3(SDCLK) MODE4(DEBUGOUT5) MODE5(BPIBUS14) MODE6(BPIBUS15) MODE7(BSIACLK) MODE8(DEBUGOUT2) PU
+GPIO67 = MODE0(GPIO67) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO68 = MODE0(GPIO68) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO69 = MODE0(GPIO69) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() --
+GPIO70 = MODE0(GPIO70) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO71 = MODE0(GPIO71) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO72 = MODE0(GPIO72) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO73 = MODE0(GPIO73) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO74 = MODE0(GPIO74) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO75 = MODE0(GPIO75) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO76 = MODE0(GPIO76) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO77 = MODE0(GPIO77) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO78 = MODE0(GPIO78) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO79 = MODE0(GPIO79) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO80 = MODE0(GPIO80) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO81 = MODE0(GPIO81) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO82 = MODE0(GPIO82) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO83 = MODE0(GPIO83) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO84 = MODE0(GPIO84) MODE1(NRNB) MODE2(SFIO2) MODE3(SCL) MODE4(U0RXD) MODE5(U0TXD) MODE6(SDCLK_OUT) MODE7(DEBUGOUT0) MODE8() PU
+GPIO85 = MODE0(GPIO85) MODE1(NWEB) MODE2(SFIO1) MODE3(SDA) MODE4(U0TXD) MODE5(U0RXD) MODE6(SDIO_INTB) MODE7(DEBUGOUT1) MODE8() PU
+GPIO86 = MODE0(GPIO86) MODE1(NREB) MODE2(SFIO0) MODE3(BSIB3CLK) MODE4(U1RTS) MODE5() MODE6() MODE7(DEBUGOUT2) MODE8() PU
+GPIO87 = MODE0(GPIO87) MODE1(NCLE) MODE2(SFCS) MODE3(BSIB3CS0) MODE4(U0RTS) MODE5() MODE6() MODE7(DEBUGOUT3) MODE8() PU
+GPIO88 = MODE0(GPIO88) MODE1(NALE) MODE2(SFCLK) MODE3(BSIB3DATA) MODE4(U1CTS) MODE5(SDA) MODE6() MODE7(DEBUGOUT4) MODE8() PD
+GPIO89 = MODE0(GPIO89) MODE1(NCE0B) MODE2(SFIO3) MODE3(BSIB3CS1) MODE4(U0CTS) MODE5(SCL) MODE6() MODE7(DEBUGOUT5) MODE8(WCDMA_EXT_FRAME_SYNC) PU
+GPIO90 = MODE0(GPIO90) MODE1(WATCHDOG) MODE2(GPS_SYNC) MODE3(SRCLKENAI) MODE4() MODE5() MODE6() MODE7(CLK32K) MODE8() PD
+GPIO91 = MODE0(GPIO91) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO92 = MODE0(GPIO92) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO93 = MODE0(GPIO93) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO94 = MODE0(GPIO94) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO95 = MODE0(GPIO95) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO96 = MODE0(GPIO96) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() --
+GPIO97 = MODE0(GPIO97) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() --
+GPIO98 = MODE0(GPIO98) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() --
+GPIO99 = MODE0(GPIO99) MODE1() MODE2(BSIB2CS0) MODE3(CLK32K) MODE4(LPA0) MODE5(DAIRST) MODE6(CLKM1) MODE7(DEBUGOUT12) MODE8(DEBUGOUT5) --
+GPIO100 = MODE0(GPIO100) MODE1() MODE2() MODE3() MODE4() MODE5(SCL) MODE6(U2RXD) MODE7() MODE8() --
+GPIO101 = MODE0(GPIO101) MODE1() MODE2() MODE3(EINT2) MODE4() MODE5(SDA) MODE6(U2TXD) MODE7() MODE8() --
+GPIO102 = MODE0(GPIO102) MODE1() MODE2() MODE3(EINT3) MODE4() MODE5() MODE6() MODE7() MODE8() --
+GPIO103 = MODE0(GPIO103) MODE1() MODE2() MODE3(U2RXD) MODE4(CLKM0) MODE5(SDA) MODE6() MODE7() MODE8() --
+GPIO104 = MODE0(GPIO104) MODE1() MODE2() MODE3(U2TXD) MODE4(CLKM1) MODE5(SCL) MODE6() MODE7() MODE8() --
+
+
+[GPO]
+
+[EINT]
+EINT_COUNT = 4
+EINT_DEBOUNCE_TIME_COUNT = 4
+
+[ADC]
+ADC_COUNT = 1
+
+[KEYPAD]
+KEY_ROW = 0
+KEY_COLUMN = 0
+
+
+
+
+
+
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6280SP_1.fig b/mcu/custom/driver/drv/Drv_Tool/MT6280SP_1.fig
new file mode 100644
index 0000000..4f5ddfe
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6280SP_1.fig
@@ -0,0 +1,130 @@
+[Chip Type]
+Chip = MT6280SP
+GPIO_ModeNum = 9
+GPIO_Pull_Sel=1
+PMIC_Config=1
+PMIC_Volt_Format = 1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(NLD0) MODE2() MODE3(EINT0) MODE4(CINT0) MODE5(SDIO_INTB) MODE6(MCWP) MODE7(DEBUGOUT6) MODE8(DEBUGOUT1) PU
+GPIO1 = MODE0(GPIO1) MODE1(NLD1) MODE2() MODE3(EINT1) MODE4(CINT1) MODE5(MCINS) MODE6(CLKM0) MODE7(DEBUGOUT7) MODE8(DEBUGOUT0) PU
+GPIO2 = MODE0(GPIO2) MODE1(NLD2) MODE2(DEBUGOUT8) MODE3(U1RXD) MODE4(U1TXD) MODE5(DEBUGOUT5) MODE6(U0RXD) MODE7(SCL) MODE8(DSPJTCK) PU
+GPIO3 = MODE0(GPIO3) MODE1(NLD3) MODE2(DEBUGOUT9) MODE3(U1TXD) MODE4(U1RXD) MODE5(DEBUGOUT6) MODE6(U0TXD) MODE7(SDA) MODE8(DSPJTMS) PU
+GPIO4 = MODE0(GPIO4) MODE1(NLD4) MODE2(DAIPCMIN) MODE3(DEBUGOUT10) MODE4() MODE5(DEBUGOUT7) MODE6(U1RTS) MODE7(DEBUGOUT2) MODE8(DSPJTD) PU
+GPIO5 = MODE0(GPIO5) MODE1(NLD5) MODE2(DAICLK) MODE3() MODE4() MODE5() MODE6(U1CTS) MODE7(DEBUGOUT3) MODE8(DCXO32K) PD
+GPIO6 = MODE0(GPIO6) MODE1(NLD6) MODE2(DAISYNC) MODE3() MODE4() MODE5() MODE6(U0CTS) MODE7(DEBUGOUT6) MODE8(DEBUGOUT0) PU
+GPIO7 = MODE0(GPIO7) MODE1(NLD7) MODE2(DAIPCMOUT) MODE3() MODE4(BSIACS) MODE5(CLKM1) MODE6(U0RTS) MODE7(DEBUGOUT8) MODE8() PU
+GPIO8 = MODE0(GPIO8) MODE1(NLD8) MODE2() MODE3(CLK32K) MODE4() MODE5() MODE6(DEBUGOUT6) MODE7() MODE8() PD
+GPIO9 = MODE0(GPIO9) MODE1(NLD9) MODE2() MODE3(DSPJTCK) MODE4(DEBUGOUT10) MODE5(BSIACS) MODE6(DEBUGOUT7) MODE7(MCUJTDO) MODE8() PD
+GPIO10 = MODE0(GPIO10) MODE1(NLD10) MODE2() MODE3(DSPJTMS) MODE4() MODE5(BSIADATAO) MODE6(DEBUGOUT8) MODE7(MCUJTDI) MODE8() PD
+GPIO11 = MODE0(GPIO11) MODE1(NLD11) MODE2() MODE3(DSPJTD) MODE4() MODE5(BSIADATAI) MODE6(DEBUGOUT9) MODE7(MCUJTCK) MODE8() PD
+GPIO12 = MODE0(GPIO12) MODE1(NLD12) MODE2() MODE3() MODE4() MODE5(BSIACLK) MODE6(DEBUGOUT10) MODE7(MCUJTMS) MODE8() PD
+GPIO13 = MODE0(GPIO13) MODE1(NLD13) MODE2() MODE3() MODE4() MODE5() MODE6(DEBUGOUT11) MODE7(MCUJTRSTB) MODE8() PD
+GPIO14 = MODE0(GPIO14) MODE1(NLD14) MODE2() MODE3(U0RXD) MODE4() MODE5() MODE6(DEBUGOUT12) MODE7() MODE8() PU
+GPIO15 = MODE0(GPIO15) MODE1(NLD15) MODE2(WCDMA_EXT_FRAME_SYNC) MODE3(U0TXD) MODE4() MODE5() MODE6(DEBUGOUT13) MODE7() MODE8() PU
+GPIO16 = MODE0(GPIO16) MODE1(BSIB0CS0) MODE2(BSIB4CS1) MODE3(CLK32K) MODE4(USBIDDIG) MODE5(BSIACLK) MODE6(DAIRST) MODE7(CLKM0) MODE8(EINT0) PU
+GPIO17 = MODE0(GPIO17) MODE1(CLK32K) MODE2() MODE3(BSIADATAO) MODE4(MCINS) MODE5(CLKM0) MODE6(PWM) MODE7(DEBUGOUT6) MODE8() PD
+GPIO18 = MODE0(GPIO18) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO19 = MODE0(GPIO19) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO20 = MODE0(GPIO20) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO21 = MODE0(GPIO21) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO22 = MODE0(GPIO22) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO23 = MODE0(GPIO23) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO24 = MODE0(GPIO24) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO25 = MODE0(GPIO25) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO26 = MODE0(GPIO26) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO27 = MODE0(GPIO27) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO28 = MODE0(GPIO28) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO29 = MODE0(GPIO29) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() --
+GPIO30 = MODE0(GPIO30) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO31 = MODE0(GPIO31) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO32 = MODE0(GPIO32) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO33 = MODE0(GPIO33) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO34 = MODE0(GPIO34) MODE1(SRCLKENA) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO35 = MODE0(GPIO35) MODE1(VM0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO36 = MODE0(GPIO36) MODE1(VM1) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO37 = MODE0(GPIO37) MODE1(BPIBUS6) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO38 = MODE0(GPIO38) MODE1(BPIBUS12) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO39 = MODE0(GPIO39) MODE1(BPIBUS13) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO40 = MODE0(GPIO40) MODE1(BPIBUS8) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO41 = MODE0(GPIO41) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO42 = MODE0(GPIO42) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO43 = MODE0(GPIO43) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO44 = MODE0(GPIO44) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO45 = MODE0(GPIO45) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO46 = MODE0(GPIO46) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO47 = MODE0(GPIO47) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO48 = MODE0(GPIO48) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO49 = MODE0(GPIO49) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO50 = MODE0(GPIO50) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO51 = MODE0(GPIO51) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO52 = MODE0(GPIO52) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO53 = MODE0(GPIO53) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO54 = MODE0(GPIO54) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO55 = MODE0(GPIO55) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO56 = MODE0(GPIO56) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO57 = MODE0(GPIO57) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO58 = MODE0(GPIO58) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO59 = MODE0(GPIO59) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO60 = MODE0(GPIO60) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO61 = MODE0(GPIO61) MODE1(MCCM) MODE2(SPICS) MODE3(SDRESP) MODE4(DEBUGOUT0) MODE5(DSPJTCK) MODE6(BSIADATAI) MODE7(MCUJTDO) MODE8(DEBUGOUT7) PU
+GPIO62 = MODE0(GPIO62) MODE1(MCDA0) MODE2(SPIMOSI) MODE3(SDDATA0) MODE4(DEBUGOUT1) MODE5(DSPJTMS) MODE6(BSIACLK) MODE7(MCUJTDI) MODE8(DEBUGOUT6) PU
+GPIO63 = MODE0(GPIO63) MODE1(MCDA1) MODE2(SPIMISO) MODE3(SDDATA1) MODE4(DEBUGOUT2) MODE5(DSPJTD) MODE6(BSIACS) MODE7(MCUJTCK) MODE8(DEBUGOUT5) PU
+GPIO64 = MODE0(GPIO64) MODE1(MCDA2) MODE2(SPISCK) MODE3(SDDATA2) MODE4(DEBUGOUT3) MODE5(CLKM0) MODE6(BSIADATAO) MODE7(MCUJTMS) MODE8(DEBUGOUT4) PU
+GPIO65 = MODE0(GPIO65) MODE1(MCDA3) MODE2(WCDMA_EXT_FRAME_SYNC) MODE3(SDDATA3) MODE4(DEBUGOUT4) MODE5(CLKM1) MODE6(BSIADATAO) MODE7(MCUJTRSTB) MODE8(DEBUGOUT3) PU
+GPIO66 = MODE0(GPIO66) MODE1(MCCK) MODE2(DSPJTCK) MODE3(SDCLK) MODE4(DEBUGOUT5) MODE5(BPIBUS14) MODE6(BPIBUS15) MODE7(BSIACLK) MODE8(DEBUGOUT2) PU
+GPIO67 = MODE0(GPIO67) MODE1(DAIPCMOUT) MODE2(DEBUGOUT1) MODE3(DSPJTMS) MODE4(DEBUGOUT6) MODE5(BSIADATAI) MODE6(MON_EDQ8D) MODE7(MON_ECATQ) MODE8(EINT0) PD
+GPIO68 = MODE0(GPIO68) MODE1(DAIPCMIN) MODE2(BSIB0CLK) MODE3(BPIBUS14) MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO69 = MODE0(GPIO69) MODE1(DAISYNC) MODE2(DEBUGOUT0) MODE3(BSIACS) MODE4(DEBUGOUT7) MODE5(BSIADATAO) MODE6(DSPJTD) MODE7(MON_ECKE) MODE8(MCWP) --
+GPIO70 = MODE0(GPIO70) MODE1(SCL) MODE2(BSIB0CS1) MODE3(BPIBUS15) MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO71 = MODE0(GPIO71) MODE1(SDA) MODE2(BSIB0DATA) MODE3() MODE4() MODE5() MODE6(DEBUGOUT13) MODE7() MODE8() PU
+GPIO72 = MODE0(GPIO72) MODE1(DAICLK) MODE2(BSIB0DATA) MODE3() MODE4(EINT0) MODE5(BSIACS) MODE6(DEBUGOUT14) MODE7(MON_EWRB) MODE8() PD
+GPIO73 = MODE0(GPIO73) MODE1(BPIBUS0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO74 = MODE0(GPIO74) MODE1(BPIBUS1) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO75 = MODE0(GPIO75) MODE1(BPIBUS2) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO76 = MODE0(GPIO76) MODE1(BPIBUS3) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PD
+GPIO77 = MODE0(GPIO77) MODE1(BPIBUS4) MODE2() MODE3() MODE4(BSIC1DATA) MODE5() MODE6() MODE7() MODE8() PD
+GPIO78 = MODE0(GPIO78) MODE1() MODE2() MODE3(U2TXD) MODE4(U2RXD) MODE5() MODE6() MODE7(MON_ECASB) MODE8() PD
+GPIO79 = MODE0(GPIO79) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7(MON_ERASB) MODE8() PD
+GPIO80 = MODE0(GPIO80) MODE1(BPIBUS5) MODE2() MODE3() MODE4(BSIC1CLK) MODE5() MODE6() MODE7() MODE8() PD
+GPIO81 = MODE0(GPIO81) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6(MON_EDQS1) MODE7(MON_EDTQ) MODE8() PD
+GPIO82 = MODE0(GPIO82) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6(MON_EDQS0) MODE7(MON_ECACLK) MODE8() PU
+GPIO83 = MODE0(GPIO83) MODE1() MODE2() MODE3(U2RXD) MODE4(U2TXD) MODE5() MODE6(MON_EDQ0D) MODE7(MON_EDCLK) MODE8() PU
+GPIO84 = MODE0(GPIO84) MODE1(NRNB) MODE2(SFIO2) MODE3(SCL) MODE4(U0RXD) MODE5(U0TXD) MODE6(SDCLK_OUT) MODE7(DEBUGOUT0) MODE8() PU
+GPIO85 = MODE0(GPIO85) MODE1(NWEB) MODE2(SFIO1) MODE3(SDA) MODE4(U0TXD) MODE5(U0RXD) MODE6(SDIO_INTB) MODE7(DEBUGOUT1) MODE8() PU
+GPIO86 = MODE0(GPIO86) MODE1(NREB) MODE2(SFIO0) MODE3(BSIB3CLK) MODE4(U1RTS) MODE5() MODE6() MODE7(DEBUGOUT2) MODE8() PU
+GPIO87 = MODE0(GPIO87) MODE1(NCLE) MODE2(SFCS) MODE3(BSIB3CS0) MODE4(U0RTS) MODE5() MODE6() MODE7(DEBUGOUT3) MODE8() PU
+GPIO88 = MODE0(GPIO88) MODE1(NALE) MODE2(SFCLK) MODE3(BSIB3DATA) MODE4(U1CTS) MODE5(SDA) MODE6() MODE7(DEBUGOUT4) MODE8() PD
+GPIO89 = MODE0(GPIO89) MODE1(NCE0B) MODE2(SFIO3) MODE3(BSIB3CS1) MODE4(U0CTS) MODE5(SCL) MODE6() MODE7(DEBUGOUT5) MODE8(WCDMA_EXT_FRAME_SYNC) PU
+GPIO90 = MODE0(GPIO90) MODE1(WATCHDOG) MODE2(GPS_SYNC) MODE3(SRCLKENAI) MODE4() MODE5() MODE6() MODE7(CLK32K) MODE8() PD
+GPIO91 = MODE0(GPIO91) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO92 = MODE0(GPIO92) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO93 = MODE0(GPIO93) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO94 = MODE0(GPIO94) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO95 = MODE0(GPIO95) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() PU
+GPIO96 = MODE0(GPIO96) MODE1(U0RXD) MODE2(U0TXD) MODE3(U2RXD) MODE4(U2TXD) MODE5() MODE6() MODE7() MODE8() --
+GPIO97 = MODE0(GPIO97) MODE1(U0TXD) MODE2(U0RXD) MODE3(U2TXD) MODE4(U2RXD) MODE5() MODE6() MODE7() MODE8() --
+GPIO98 = MODE0(GPIO98) MODE1(MCINS) MODE2(WCDMA_EXT_FRAME_SYNC) MODE3(CLKM1) MODE4(EINT0) MODE5(CINT0) MODE6() MODE7() MODE8() --
+GPIO99 = MODE0(GPIO99) MODE1() MODE2(BSIB2CS0) MODE3(CLK32K) MODE4(LPA0) MODE5(DAIRST) MODE6(CLKM1) MODE7(DEBUGOUT12) MODE8(DEBUGOUT5) --
+GPIO100 = MODE0(GPIO100) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() --
+GPIO101 = MODE0(GPIO101) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() --
+GPIO102 = MODE0(GPIO102) MODE1() MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() MODE8() --
+GPIO103 = MODE0(GPIO103) MODE1() MODE2() MODE3(U2RXD) MODE4(CLKM0) MODE5(SDA) MODE6() MODE7() MODE8() --
+GPIO104 = MODE0(GPIO104) MODE1() MODE2() MODE3(U2TXD) MODE4(CLKM1) MODE5(SCL) MODE6() MODE7() MODE8() --
+
+
+[GPO]
+
+[EINT]
+EINT_COUNT = 4
+EINT_DEBOUNCE_TIME_COUNT = 4
+
+[ADC]
+ADC_COUNT = 1
+
+[KEYPAD]
+KEY_ROW = 0
+KEY_COLUMN = 0
+
+
+
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6290.fig b/mcu/custom/driver/drv/Drv_Tool/MT6290.fig
new file mode 100644
index 0000000..78f052e
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6290.fig
@@ -0,0 +1,50 @@
+[Chip Type]
+Chip = MT6290
+IOMUX_ModeNum = 6
+GPIO_COUNT = 64
+GPIO_Pull_Sel = 1
+PMIC_Config=1
+
+[EINT]
+EINT_COUNT = 16
+EINT_DEBOUNCE_TIME_COUNT = 255
+DEDICATED_EINT_COUNT = 4
+
+[IOMUX_MODE]
+SEL_NFI_0 = MODE0(NFI) MODE1() MODE2(SRCLKEN_OUT) MODE3(EHPI_SLV) MODE4(GPIO) MODE5(DBG)
+SEL_NFI_1 = MODE0(NFI) MODE1() MODE2() MODE3(EHPI_SLV) MODE4(GPO) MODE5(DBG)
+SEL_NFI_2 = MODE0(NFI) MODE1() MODE2(PCM) MODE3(EHPI_SLV) MODE4(GPIO) MODE5(DBG)
+SEL_NFI_3 = MODE0(NFI) MODE1() MODE2(IDC) MODE3(EHPI_SLV) MODE4(GPIO) MODE5(DBG)
+SEL_NFI_4 = MODE0(NFI) MODE1() MODE2(AGPS_OUT) MODE3(EHPI_SLV) MODE4(GPIO) MODE5(DBG)
+SEL_JTAG = MODE0(TDO) MODE1(2GDSP_SICE) MODE2(MD32) MODE3() MODE4() MODE5(DBG)
+SEL_SPI0 = MODE0(SPI) MODE1(STP0) MODE2() MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_SPI1 = MODE0(SPI) MODE1(STP0) MODE2() MODE3(SRCLKEN_OUT) MODE4(GPIO) MODE5(DBG)
+SEL_SUART0 = MODE0(SUART0) MODE1(EXT_FRAME_SYNC) MODE2() MODE3() MODE4() MODE5()
+SEL_SDIO = MODE0(SDIO) MODE1(F32K_CLK_OUT) MODE2() MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_MSDC0P_0 = MODE0(MSDC0P) MODE1(STP1) MODE2(MAS_CCDDIF) MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_MSDC0P_1 = MODE0(MSDC0P) MODE1(STP1) MODE2(MAS_CCDDIF) MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_MSDC0P_2 = MODE0(MSDC0P) MODE1(STP1) MODE2(SLV_CCDDIF) MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_MSDC1P = MODE0(MSDC1P) MODE1() MODE2(SLV_CCDDIF) MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_PMIC_BSI = MODE0(PMIC_BSI) MODE1() MODE2() MODE3(SRCLKEN_OUT) MODE4(GPIO) MODE5(DBG)
+SEL_RFIC1_BSI = MODE0(RFIC1_BSI) MODE1() MODE2() MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_MISC_BSI_0 = MODE0(MISC_BSI) MODE1(MIPI) MODE2(USIM) MODE3() MODE4(GPO/GPIO58) MODE5(DBG)
+SEL_MISC_BSI_1 = MODE0(MISC_BSI) MODE1() MODE2() MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_I2C = MODE0(I2C) MODE1() MODE2() MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_BPI_0 = MODE0(BPI) MODE1() MODE2() MODE3() MODE4() MODE5(DBG)
+SEL_BPI_1 = MODE0(BPI) MODE1() MODE2() MODE3() MODE4() MODE5(DBG)
+SEL_BPI_2 = MODE0(BPI) MODE1() MODE2() MODE3() MODE4() MODE5(DBG)
+SEL_BPI_3 = MODE0(BPI) MODE1() MODE2() MODE3() MODE4() MODE5(DBG)
+SEL_BPI_4 = MODE0(BPI) MODE1() MODE2() MODE3() MODE4() MODE5(DBG)
+SEL_BPI_5 = MODE0(BPI) MODE1() MODE2() MODE3() MODE4() MODE5(DBG)
+SEL_USIM1 = MODE0(USIM0) MODE1() MODE2() MODE3() MODE4(GPO) MODE5(DBG)
+SEL_USIM2 = MODE0(USIM1) MODE1(F32K_CLK_OUT) MODE2() MODE3() MODE4(GPO) MODE5(DBG)
+SEL_GPIO_0_0 = MODE0(LED) MODE1(STP0_1) MODE2(CA_INTF) MODE3(MII) MODE4(GPIO) MODE5(DBG)
+SEL_GPIO_0_1 = MODE0(LED) MODE1(STP0) MODE2(CA_INTF) MODE3(MII) MODE4(GPIO) MODE5(DBG)
+SEL_GPIO_1 = MODE0(LED) MODE1(STP0) MODE2(CA_INTF) MODE3(MII) MODE4(GPIO) MODE5(DBG)
+SEL_GPIO_2_0 = MODE0(LED) MODE1(STP0) MODE2(CA_INTF) MODE3(MII) MODE4(GPIO) MODE5(DBG)
+SEL_GPIO_2_1 = MODE0(LED) MODE1(STP0) MODE2(CA_INTF) MODE3(MII) MODE4(GPIO) MODE5(DBG)
+SEL_GPIO_3 = MODE0(LED) MODE1(STP1) MODE2(CA_INTF) MODE3(MII) MODE4(GPIO) MODE5(DBG)
+SEL_GPIO_4 = MODE0(IDC) MODE1(STP1) MODE2(MAS_CCDDIF) MODE3(MII) MODE4(GPIO) MODE5(DBG)
+SEL_SDIO_INT = MODE0(SDIO_HOST_INTB) MODE1() MODE2() MODE3() MODE4(GPO) MODE5(DBG)
+SEL_DMCMDPHY = MODE0(GPO) MODE1() MODE2() MODE3() MODE4() MODE5(DBG)
+
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6290m.fig b/mcu/custom/driver/drv/Drv_Tool/MT6290m.fig
new file mode 100644
index 0000000..7436a16
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6290m.fig
@@ -0,0 +1,51 @@
+[Chip Type]
+Chip = MT6290m
+IOMUX_ModeNum = 6
+GPIO_COUNT = 64
+GPIO_Pull_Sel = 1
+PMIC_Config=1
+
+[EINT]
+EINT_COUNT = 16
+EINT_DEBOUNCE_TIME_COUNT = 255
+DEDICATED_EINT_COUNT = 4
+
+[IOMUX_MODE]
+SEL_NFI_0 = MODE0(NFI) MODE1() MODE2(SRCLKEN_OUT) MODE3(EHPI_SLV) MODE4(GPIO) MODE5(DBG)
+SEL_NFI_1 = MODE0(NFI) MODE1() MODE2() MODE3(EHPI_SLV) MODE4(GPO) MODE5(DBG)
+SEL_NFI_2 = MODE0(NFI) MODE1() MODE2(PCM) MODE3(EHPI_SLV) MODE4(GPIO) MODE5(DBG)
+SEL_NFI_3 = MODE0(NFI) MODE1() MODE2(IDC) MODE3(EHPI_SLV) MODE4(GPIO) MODE5(DBG)
+SEL_NFI_4 = MODE0(NFI) MODE1() MODE2(AGPS_OUT) MODE3(EHPI_SLV) MODE4(GPIO) MODE5(DBG)
+SEL_JTAG = MODE0(TDO) MODE1(2GDSP_SICE) MODE2(MD32) MODE3() MODE4() MODE5(DBG)
+SEL_SPI0 = MODE0(SPI) MODE1(STP0) MODE2() MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_SPI1 = MODE0(SPI) MODE1(STP0) MODE2() MODE3(SRCLKEN_OUT) MODE4(GPIO) MODE5(DBG)
+SEL_SUART0 = MODE0(SUART0) MODE1(EXT_FRAME_SYNC) MODE2() MODE3() MODE4() MODE5()
+SEL_SDIO = MODE0(SDIO) MODE1(F32K_CLK_OUT) MODE2() MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_MSDC0P_0 = MODE0(MSDC0P) MODE1(STP1) MODE2(MAS_CCDDIF) MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_MSDC0P_1 = MODE0(MSDC0P) MODE1(STP1) MODE2(MAS_CCDDIF) MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_MSDC0P_2 = MODE0(MSDC0P) MODE1(STP1) MODE2(SLV_CCDDIF) MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_MSDC1P = MODE0(MSDC1P) MODE1() MODE2(SLV_CCDDIF) MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_PMIC_BSI = MODE0(PMIC_BSI) MODE1() MODE2() MODE3(SRCLKEN_OUT) MODE4(GPIO) MODE5(DBG)
+SEL_RFIC1_BSI = MODE0(RFIC1_BSI) MODE1() MODE2() MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_MISC_BSI_0 = MODE0(MISC_BSI) MODE1(MIPI) MODE2(USIM) MODE3() MODE4(GPO/GPIO58) MODE5(DBG)
+SEL_MISC_BSI_1 = MODE0(MISC_BSI) MODE1() MODE2() MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_I2C = MODE0(I2C) MODE1() MODE2() MODE3() MODE4(GPIO) MODE5(DBG)
+SEL_BPI_0 = MODE0(BPI) MODE1() MODE2() MODE3() MODE4() MODE5(DBG)
+SEL_BPI_1 = MODE0(BPI) MODE1() MODE2() MODE3() MODE4() MODE5(DBG)
+SEL_BPI_2 = MODE0(BPI) MODE1() MODE2() MODE3() MODE4() MODE5(DBG)
+SEL_BPI_3 = MODE0(BPI) MODE1() MODE2() MODE3() MODE4() MODE5(DBG)
+SEL_BPI_4 = MODE0(BPI) MODE1() MODE2() MODE3() MODE4() MODE5(DBG)
+SEL_BPI_5 = MODE0(BPI) MODE1() MODE2() MODE3() MODE4() MODE5(DBG)
+SEL_USIM1 = MODE0(USIM0) MODE1() MODE2() MODE3() MODE4(GPO) MODE5(DBG)
+SEL_USIM2 = MODE0(USIM1) MODE1(F32K_CLK_OUT) MODE2() MODE3() MODE4(GPO) MODE5(DBG)
+SEL_GPIO_0_0 = MODE0(LED) MODE1(STP0_1) MODE2(CA_INTF) MODE3(MII) MODE4(GPIO) MODE5(DBG)
+SEL_GPIO_0_1 = MODE0(LED) MODE1(STP0) MODE2(CA_INTF) MODE3(MII) MODE4(GPIO) MODE5(DBG)
+SEL_GPIO_1 = MODE0(LED) MODE1(STP0) MODE2(CA_INTF) MODE3(MII) MODE4(GPIO) MODE5(DBG)
+SEL_GPIO_2_0 = MODE0(LED) MODE1(STP0) MODE2(CA_INTF) MODE3(MII) MODE4(GPIO) MODE5(DBG)
+SEL_GPIO_2_1 = MODE0(LED) MODE1(STP0) MODE2(CA_INTF) MODE3(MII) MODE4(GPIO) MODE5(DBG)
+SEL_GPIO_3 = MODE0(LED) MODE1(STP1) MODE2(CA_INTF) MODE3(MII) MODE4(GPIO) MODE5(DBG)
+SEL_GPIO_4 = MODE0(IDC) MODE1(STP1) MODE2(MAS_CCDDIF) MODE3(MII) MODE4(GPIO) MODE5(DBG)
+SEL_SDIO_INT = MODE0(SDIO_HOST_INTB) MODE1() MODE2() MODE3() MODE4(GPO) MODE5(DBG)
+SEL_DMCMDPHY = MODE0(GPO) MODE1() MODE2() MODE3() MODE4() MODE5(DBG)
+
+
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6516.fig b/mcu/custom/driver/drv/Drv_Tool/MT6516.fig
new file mode 100644
index 0000000..dde3394
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6516.fig
@@ -0,0 +1,22 @@
+[Chip Type]
+Chip = MT6516
+GPIO_Pull_Sel=1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(BPI_BUS6) MODE2() MODE3() PUPD
+GPIO1 = MODE0(GPIO1) MODE1(BPI_BUS7) MODE2() MODE3() PUPD
+GPIO2 = MODE0(GPIO2) MODE1(BPI_BUS8) MODE2() MODE3() PUPD
+GPIO3 = MODE0(GPIO3) MODE1(BPI_BUS9) MODE2() MODE3() PUPD
+
+[GPO]
+
+[EINT]
+EINT_COUNT=24
+EINT_DEBOUNE_TIME_COUNT=24
+
+[ADC]
+ADC_COUNT=7
+
+[KEYPAD]
+KEY_ROW=0
+KEY_COLUMN=0
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6573.fig b/mcu/custom/driver/drv/Drv_Tool/MT6573.fig
new file mode 100644
index 0000000..0420a12
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6573.fig
@@ -0,0 +1,249 @@
+[Chip Type]
+Chip = MT6573
+GPIO_Pull_Sel = 1
+PMIC_Config = 1
+GPIO_ModeNum = 8
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(EINT5) MODE2(I2S0_CK) MODE3(CLKM5) MODE4(PWM4) MODE5() MODE6(dbg1_bus[11]) MODE7() PU
+GPIO1 = MODE0(GPIO1) MODE1(EINT6) MODE2(I2S0_WS) MODE3(CLKM3) MODE4(PWM5) MODE5() MODE6(dbg1_bus[12]) MODE7() PU
+GPIO2 = MODE0(GPIO2) MODE1(EINT7) MODE2(I2S0_DAT) MODE3(CLKM4) MODE4(PWM6) MODE5(usb_drvvbus) MODE6(dbg1_bus[13]) MODE7() PU
+GPIO3 = MODE0(GPIO3) MODE1(URXD1) MODE2(EINT8) MODE3(IRDA_RXD) MODE4() MODE5() MODE6() MODE7() PU
+GPIO4 = MODE0(GPIO4) MODE1(UTXD1) MODE2(EINT9) MODE3(IRDA_TXD) MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO5 = MODE0(GPIO5) MODE1(URXD2) MODE2(EINT12) MODE3() MODE4() MODE5() MODE6(dbg1_bus[14]) MODE7() PU
+GPIO6 = MODE0(GPIO6) MODE1(UTXD2) MODE2(EINT13) MODE3() MODE4() MODE5() MODE6(dbg1_bus[15]) MODE7() PU
+GPIO7 = MODE0(GPIO7) MODE1(PWM3) MODE2(CLKM2) MODE3(I2S0_DAT) MODE4(EINT10) MODE5() MODE6() MODE7() PUPD
+GPIO8 = MODE0(GPIO8) MODE1(PWM2) MODE2(CLKM1) MODE3(I2S0_WS) MODE4(EINT9) MODE5() MODE6() MODE7() PUPD
+GPIO9 = MODE0(GPIO9) MODE1(PWM1) MODE2(CLKM0) MODE3(I2S0_CK) MODE4(EINT8) MODE5() MODE6() MODE7() PUPD
+GPIO10 = MODE0(GPIO10) MODE1(VM0) MODE2(URTS2) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO11 = MODE0(GPIO11) MODE1(VM1) MODE2(UCTS2) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO12 = MODE0(GPIO12) MODE1(DUAL_BPI_BUS0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO13 = MODE0(GPIO13) MODE1(DUAL_BPI_BUS1) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO14 = MODE0(GPIO14) MODE1(DUAL_BPI_BUS2) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO15 = MODE0(GPIO15) MODE1(DUAL_BPI_BUS3) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO16 = MODE0(GPIO16) MODE1(DUAL_BPI_BUS4) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO17 = MODE0(GPIO17) MODE1(DUAL_BPI_BUS5) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO18 = MODE0(GPIO18) MODE1(DUAL_BPI_BUS6) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO19 = MODE0(GPIO19) MODE1(DUAL_BPI_BUS7) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO20 = MODE0(GPIO20) MODE1(DUAL_BPI_BUS9) MODE2() MODE3(DSP_JTMS) MODE4() MODE5() MODE6() MODE7() PD
+GPIO21 = MODE0(GPIO21) MODE1(DUAL_BPI_BUS10) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO22 = MODE0(GPIO22) MODE1(DUAL_BPI_BUS11) MODE2(URTS1) MODE3(DSP_JTDI) MODE4(SDA1) MODE5() MODE6() MODE7() PD
+GPIO23 = MODE0(GPIO23) MODE1(DUAL_BPI_BUS12) MODE2(UCTS1) MODE3() MODE4(SCL1) MODE5() MODE6() MODE7() PD
+GPIO24 = MODE0(GPIO24) MODE1(DUAL_BPI_BUS13) MODE2(URXD1) MODE3(URXD4) MODE4(SDA0) MODE5() MODE6() MODE7() PD
+GPIO25 = MODE0(GPIO25) MODE1(DUAL_BPI_BUS14) MODE2(UTXD1) MODE3(UTXD4) MODE4(SCL0) MODE5() MODE6() MODE7() PD
+GPIO26 = MODE0(GPIO26) MODE1(DUAL_BPI_BUS8) MODE2(gps_sync) MODE3(DSP_JTDO) MODE4() MODE5() MODE6() MODE7() PD
+GPIO27 = MODE0(GPIO27) MODE1(BSI1_CLK) MODE2() MODE3() MODE4(URTS2) MODE5() MODE6() MODE7() PD
+GPIO28 = MODE0(GPIO28) MODE1(BSI1_DATA) MODE2() MODE3() MODE4(UCTS2) MODE5() MODE6() MODE7() PD
+GPIO29 = MODE0(GPIO29) MODE1(BSI1_DATA1) MODE2(BSI1_CS1) MODE3() MODE4(URTS3) MODE5(DSP_JTRST_B) MODE6() MODE7() PD
+GPIO30 = MODE0(GPIO30) MODE1(BSI1_CS0) MODE2() MODE3() MODE4(UCTS3) MODE5(DSP_EMU_B) MODE6() MODE7() PD
+GPIO31 = MODE0(GPIO31) MODE1(BSI0_CLK) MODE2(URXD2) MODE3(EINT15) MODE4() MODE5() MODE6() MODE7() PD
+GPIO32 = MODE0(GPIO32) MODE1(BSI0_DATA) MODE2(UTXD2) MODE3(EINT12) MODE4() MODE5() MODE6() MODE7() PD
+GPIO33 = MODE0(GPIO33) MODE1(BSI0_CS1) MODE2(URXD3) MODE3(UCTS2) MODE4(EINT13) MODE5(DSP_JTCK) MODE6() MODE7() PD
+GPIO34 = MODE0(GPIO34) MODE1(BSI0_CS0) MODE2(UTXD3) MODE3(URTS2) MODE4(EINT14) MODE5() MODE6() MODE7() PD
+GPIO35 = MODE0(GPIO35) MODE1(KCOL7) MODE2(SPI_CS_N) MODE3(MC3CM0) MODE4(EINT10) MODE5(I2S1_WS) MODE6(dbg2_bus[0]) MODE7() PU
+GPIO36 = MODE0(GPIO36) MODE1(KCOL6) MODE2(SPI_SCK) MODE3(MC3CK) MODE4(EINT11) MODE5(I2S1_DAT) MODE6(dbg2_bus[1]) MODE7() PU
+GPIO37 = MODE0(GPIO37) MODE1(KCOL5) MODE2() MODE3(MC3DA1) MODE4(EINT12) MODE5(I2S1_CK) MODE6(dbg2_bus[2]) MODE7() PU
+GPIO38 = MODE0(GPIO38) MODE1(KCOL4) MODE2(SPI_MOSI) MODE3(MC3DA2) MODE4(EINT13) MODE5(URXD3) MODE6(dbg2_bus[3]) MODE7() PU
+GPIO39 = MODE0(GPIO39) MODE1(KCOL3) MODE2(SPI_MISO) MODE3(MC3DA3) MODE4(EINT14) MODE5(UTXD3) MODE6(dbg2_bus[4]) MODE7() PU
+GPIO40 = MODE0(GPIO40) MODE1(KCOL2) MODE2() MODE3(MC3DA0) MODE4(PWM4) MODE5(URXD1) MODE6(dbg2_bus[5]) MODE7() PU
+GPIO41 = MODE0(GPIO41) MODE1(KCOL1) MODE2() MODE3() MODE4(PWM5) MODE5(UTXD1) MODE6(dbg2_bus[6]) MODE7() PU
+GPIO42 = MODE0(GPIO42) MODE1(KCOL0) MODE2() MODE3() MODE4() MODE5() MODE6(dbg2_bus[7]) MODE7() PU
+GPIO43 = MODE0(GPIO43) MODE1(KROW7) MODE2(MC1CM0) MODE3(MC2CM0) MODE4(EINT15) MODE5(URXD4) MODE6(dbg2_bus[8]) MODE7() PD
+GPIO44 = MODE0(GPIO44) MODE1(KROW6) MODE2(MC1CK) MODE3(MC2DA0) MODE4(EINT12) MODE5(UTXD4) MODE6(dbg2_bus[9]) MODE7() PD
+GPIO45 = MODE0(GPIO45) MODE1(KROW5) MODE2(MC1DA1) MODE3(MC2DA1) MODE4(EINT13) MODE5(PWM6) MODE6(dbg2_bus[10]) MODE7() PD
+GPIO46 = MODE0(GPIO46) MODE1(KROW4) MODE2(MC1DA2) MODE3(MC2DA2) MODE4(EINT14) MODE5() MODE6(dbg2_bus[11]) MODE7() PD
+GPIO47 = MODE0(GPIO47) MODE1(KROW3) MODE2(MC1DA3) MODE3(MC2DA3) MODE4(EINT15) MODE5() MODE6(dbg2_bus[12]) MODE7() PD
+GPIO48 = MODE0(GPIO48) MODE1(KROW2) MODE2(MC1DA0) MODE3(MC2CK) MODE4(IRDA_PDN) MODE5() MODE6(dbg2_bus[13]) MODE7() PD
+GPIO49 = MODE0(GPIO49) MODE1(KROW1) MODE2() MODE3() MODE4(IRDA_RXD) MODE5() MODE6(dbg2_bus[14]) MODE7() PD
+GPIO50 = MODE0(GPIO50) MODE1(KROW0) MODE2() MODE3() MODE4(IRDA_TXD) MODE5() MODE6(dbg2_bus[15]) MODE7() PD
+GPIO51 = MODE0(GPIO51) MODE1(MC0INS) MODE2(PWM6) MODE3(CLKM1) MODE4(EINT11) MODE5(IRDA_PDN) MODE6() MODE7() PU
+GPIO52 = MODE0(GPIO52) MODE1(MC1INS) MODE2(PWM5) MODE3(CLKM2) MODE4(EINT12) MODE5() MODE6() MODE7() PU
+GPIO53 = MODE0(GPIO53) MODE1(MC0CM0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO54 = MODE0(GPIO54) MODE1(MC0DA0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO55 = MODE0(GPIO55) MODE1(MC0DA1) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO56 = MODE0(GPIO56) MODE1(MC0DA2) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO57 = MODE0(GPIO57) MODE1(MC0DA3) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO58 = MODE0(GPIO58) MODE1(MC0CK) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO59 = MODE0(GPIO59) MODE1(MC0CK_FB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO60 = MODE0(GPIO60) MODE1(MC0RST) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO61 = MODE0(GPIO61) MODE1(MC0WP) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO62 = MODE0(GPIO62) MODE1(MC1CM0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO63 = MODE0(GPIO63) MODE1(MC1DA0) MODE2(MC0DA4) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO64 = MODE0(GPIO64) MODE1(MC1DA1) MODE2(MC0DA5) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO65 = MODE0(GPIO65) MODE1(MC1DA2) MODE2(MC0DA6) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO66 = MODE0(GPIO66) MODE1(MC1DA3) MODE2(MC0DA7) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO67 = MODE0(GPIO67) MODE1(MC1CK) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO68 = MODE0(GPIO68) MODE1(MC1CK_FB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO69 = MODE0(GPIO69) MODE1(MC1WP) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO70 = MODE0(GPIO70) MODE1(MC2CM0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO71 = MODE0(GPIO71) MODE1(MC2DA0) MODE2(MC0DA4) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO72 = MODE0(GPIO72) MODE1(MC2DA1) MODE2(MC0DA5) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO73 = MODE0(GPIO73) MODE1(MC2DA2) MODE2(MC0DA6) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO74 = MODE0(GPIO74) MODE1(MC2DA3) MODE2(MC0DA7) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO75 = MODE0(GPIO75) MODE1(MC2CK) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO76 = MODE0(GPIO76) MODE1(CMMCLK) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO77 = MODE0(GPIO77) MODE1(CMPCLK) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO78 = MODE0(GPIO78) MODE1(CMRST) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO79 = MODE0(GPIO79) MODE1(CMPDN) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO80 = MODE0(GPIO80) MODE1(CMVREF) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO81 = MODE0(GPIO81) MODE1(CMHREF) MODE2() MODE3(I2S1_WS) MODE4(DSP_GPO2) MODE5(TBTXFS) MODE6() MODE7() PD
+GPIO82 = MODE0(GPIO82) MODE1(CMDAT9) MODE2() MODE3(I2S1_DAT) MODE4(DSP_GPO1) MODE5(TBRXEN) MODE6() MODE7() PD
+GPIO83 = MODE0(GPIO83) MODE1(CMDAT8) MODE2() MODE3(I2S1_CK) MODE4(DSP_GPO0) MODE5(TBRXFS) MODE6() MODE7() PD
+GPIO84 = MODE0(GPIO84) MODE1(CMDAT7) MODE2(MC2CM0) MODE3(SPI_CS_N) MODE4() MODE5() MODE6() MODE7() PD
+GPIO85 = MODE0(GPIO85) MODE1(CMDAT6) MODE2(MC2DA0) MODE3(SPI_SCK) MODE4() MODE5() MODE6() MODE7() PD
+GPIO86 = MODE0(GPIO86) MODE1(CMDAT5) MODE2(MC2DA1) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO87 = MODE0(GPIO87) MODE1(CMDAT4) MODE2(MC2DA2) MODE3(SPI_MOSI) MODE4() MODE5() MODE6() MODE7() PD
+GPIO88 = MODE0(GPIO88) MODE1(CMDAT3) MODE2(MC2DA3) MODE3(SPI_MISO) MODE4() MODE5() MODE6() MODE7() PD
+GPIO89 = MODE0(GPIO89) MODE1(CMDAT2) MODE2(MC2CK) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO90 = MODE0(GPIO90) MODE1(CMDAT1) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO91 = MODE0(GPIO91) MODE1(CMDAT0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO92 = MODE0(GPIO92) MODE1(SCL1) MODE2(EINT10) MODE3(URXD4) MODE4() MODE5() MODE6(dbg3_bus[0]) MODE7() PU
+GPIO93 = MODE0(GPIO93) MODE1(SDA1) MODE2(EINT11) MODE3(UTXD4) MODE4() MODE5() MODE6(dbg3_bus[1]) MODE7() PU
+GPIO94 = MODE0(GPIO94) MODE1(PWM4) MODE2() MODE3(EINT7) MODE4() MODE5(CLKM3) MODE6(dbg3_bus[2]) MODE7() PD
+GPIO95 = MODE0(GPIO95) MODE1(CMFLASH) MODE2(PWM4) MODE3(EINT8) MODE4() MODE5() MODE6() MODE7() PD
+GPIO96 = MODE0(GPIO96) MODE1(CAM_MECHSH0) MODE2(PWM5) MODE3(EINT9) MODE4() MODE5() MODE6() MODE7() PD
+GPIO97 = MODE0(GPIO97) MODE1(CAM_MECHSH1) MODE2(PWM6) MODE3(EINT10) MODE4() MODE5() MODE6() MODE7() PD
+GPIO98 = MODE0(GPIO98) MODE1(CAM_STROBE) MODE2() MODE3(EINT11) MODE4() MODE5() MODE6() MODE7() PD
+GPIO99 = MODE0(GPIO99) MODE1(PWM1) MODE2(CLKM0) MODE3(EINT5) MODE4() MODE5() MODE6(dbg3_bus[3]) MODE7() PD
+GPIO100 = MODE0(GPIO100) MODE1(PWM2) MODE2(CLKM1) MODE3(EINT6) MODE4() MODE5() MODE6(dbg3_bus[4]) MODE7() PD
+GPIO101 = MODE0(GPIO101) MODE1(PWM3) MODE2(usb_drvvbus) MODE3(EINT12) MODE4() MODE5(CLKM3) MODE6(dbg3_bus[5]) MODE7() PD
+GPIO102 = MODE0(GPIO102) MODE1(LSCK) MODE2(I2S1_CK) MODE3() MODE4(TDMA_CK) MODE5() MODE6() MODE7() PD
+GPIO103 = MODE0(GPIO103) MODE1(LSA0) MODE2(I2S1_WS) MODE3(SCL0) MODE4(TDMA_D1) MODE5(TDTIRQ) MODE6() MODE7() PD
+GPIO104 = MODE0(GPIO104) MODE1(LSDA) MODE2(I2S1_DAT) MODE3(SDA0) MODE4(TDMA_D0) MODE5(TCTIRQ2) MODE6() MODE7() PD
+GPIO105 = MODE0(GPIO105) MODE1(LSCE0B) MODE2() MODE3(CLKM3) MODE4(TDMA_FS) MODE5(TCTIRQ1) MODE6() MODE7() PU
+GPIO106 = MODE0(GPIO106) MODE1(LSCE1B) MODE2(EINT13) MODE3(CLKM4) MODE4(LPCE2B) MODE5(TEVTVAL) MODE6() MODE7() PU
+GPIO107 = MODE0(GPIO107) MODE1(DPICK) MODE2(IRDA_RXD) MODE3(CLKM1) MODE4(SCL0) MODE5(EINT10) MODE6() MODE7() PD
+GPIO108 = MODE0(GPIO108) MODE1(DPIDE) MODE2(IRDA_TXD) MODE3(CLKM2) MODE4(SDA0) MODE5(EINT11) MODE6() MODE7() PD
+GPIO109 = MODE0(GPIO109) MODE1(DPIVSYNC) MODE2(MC2INS) MODE3(CLKM3) MODE4(SCL1) MODE5(EINT12) MODE6() MODE7() PD
+GPIO110 = MODE0(GPIO110) MODE1(DPIHSYNC) MODE2(MC3INS) MODE3(IRDA_PDN) MODE4(SDA1) MODE5(EINT13) MODE6() MODE7() PD
+GPIO111 = MODE0(GPIO111) MODE1(DPIR_PO[7]) MODE2(MC2CM0) MODE3(SPI_CS_N) MODE4(I2S0_CK) MODE5(EINT0) MODE6(dbg4_bus[0]) MODE7() PD
+GPIO112 = MODE0(GPIO112) MODE1(DPIR_PO[6]) MODE2(MC2DA0) MODE3(SPI_SCK) MODE4(I2S0_WS) MODE5(EINT1) MODE6(dbg4_bus[1]) MODE7() PD
+GPIO113 = MODE0(GPIO113) MODE1(DPIR_PO[5]) MODE2(MC3CM0) MODE3(URXD1) MODE4(I2S0_DAT) MODE5(EINT2) MODE6(dbg4_bus[2]) MODE7() PD
+GPIO114 = MODE0(GPIO114) MODE1(DPIR_PO[4]) MODE2(MC3DA0) MODE3(UTXD1) MODE4(I2S1_WS) MODE5(EINT3) MODE6(dbg4_bus[3]) MODE7() PD
+GPIO115 = MODE0(GPIO115) MODE1(DPIR_PO[3]) MODE2(CLKM0) MODE3(URTS1) MODE4(I2S1_DAT) MODE5(EINT4) MODE6(dbg4_bus[4]) MODE7() PD
+GPIO116 = MODE0(GPIO116) MODE1(DPIR_PO[2]) MODE2(CLKM5) MODE3(UCTS1) MODE4(I2S1_CK) MODE5(EINT5) MODE6(dbg4_bus[5]) MODE7() PD
+GPIO117 = MODE0(GPIO117) MODE1(DPIR_PO[1]) MODE2(CLKM2) MODE3(MC2INS) MODE4(PWM4) MODE5(EINT6) MODE6(dbg4_bus[6]) MODE7() PD
+GPIO118 = MODE0(GPIO118) MODE1(DPIR_PO[0]) MODE2() MODE3(MC3INS) MODE4(PWM5) MODE5(EINT7) MODE6(dbg4_bus[7]) MODE7() PD
+GPIO119 = MODE0(GPIO119) MODE1(DPIG_PO[7]) MODE2(MC2DA1) MODE3() MODE4() MODE5(EINT8) MODE6(dbg4_bus[8]) MODE7() PD
+GPIO120 = MODE0(GPIO120) MODE1(DPIG_PO[6]) MODE2(MC2DA2) MODE3(SPI_MOSI) MODE4(I2S1_WS) MODE5(EINT9) MODE6(dbg4_bus[9]) MODE7() PD
+GPIO121 = MODE0(GPIO121) MODE1(DPIG_PO[5]) MODE2(MC3DA1) MODE3(URXD2) MODE4(IRDA_RXD) MODE5(EINT10) MODE6(dbg4_bus[10]) MODE7() PD
+GPIO122 = MODE0(GPIO122) MODE1(DPIG_PO[4]) MODE2(MC3DA2) MODE3(UTXD2) MODE4(IRDA_TXD) MODE5(EINT11) MODE6(dbg4_bus[11]) MODE7() PD
+GPIO123 = MODE0(GPIO123) MODE1(DPIG_PO[3]) MODE2(MC3DA3) MODE3(URTS2) MODE4(PWM3) MODE5(EINT12) MODE6(dbg4_bus[12]) MODE7() PD
+GPIO124 = MODE0(GPIO124) MODE1(DPIG_PO[2]) MODE2(MC3CK) MODE3(UCTS2) MODE4(PWM4) MODE5(EINT13) MODE6(dbg4_bus[13]) MODE7() PD
+GPIO125 = MODE0(GPIO125) MODE1(DPIG_PO[1]) MODE2() MODE3() MODE4(PWM6) MODE5(EINT14) MODE6(dbg4_bus[14]) MODE7() PD
+GPIO126 = MODE0(GPIO126) MODE1(DPIG_PO[0]) MODE2() MODE3() MODE4() MODE5(EINT15) MODE6(dbg4_bus[15]) MODE7() PD
+GPIO127 = MODE0(GPIO127) MODE1(DPIB_PO[7]) MODE2(MC2DA3) MODE3(SPI_MISO) MODE4(I2S1_DAT) MODE5(EINT12) MODE6(dbg4_bus[16]) MODE7() PD
+GPIO128 = MODE0(GPIO128) MODE1(DPIB_PO[6]) MODE2(MC2CK) MODE3(URXD3) MODE4(I2S1_CK) MODE5(EINT13) MODE6(dbg4_bus[17]) MODE7() PD
+GPIO129 = MODE0(GPIO129) MODE1(DPIB_PO[5]) MODE2() MODE3(UTXD3) MODE4(URXD4) MODE5(EINT14) MODE6(dbg4_bus[18]) MODE7() PD
+GPIO130 = MODE0(GPIO130) MODE1(DPIB_PO[4]) MODE2() MODE3(URTS3) MODE4(UTXD4) MODE5(EINT15) MODE6(dbg4_bus[19]) MODE7() PD
+GPIO131 = MODE0(GPIO131) MODE1(DPIB_PO[3]) MODE2() MODE3(UCTS3) MODE4(URTS4) MODE5(IRDA_PDN) MODE6(dbg4_bus[20]) MODE7() PD
+GPIO132 = MODE0(GPIO132) MODE1(DPIB_PO[2]) MODE2() MODE3() MODE4(UCTS4) MODE5(PWM1) MODE6(dbg4_bus[21]) MODE7() PD
+GPIO133 = MODE0(GPIO133) MODE1(DPIB_PO[1]) MODE2() MODE3() MODE4() MODE5(PWM2) MODE6(dbg4_bus[22]) MODE7() PD
+GPIO134 = MODE0(GPIO134) MODE1(DPIB_PO[0]) MODE2() MODE3() MODE4() MODE5() MODE6(dbg4_bus[23]) MODE7() PD
+GPIO135 = MODE0(GPIO135) MODE1(LPCE1B) MODE2(NCE1B) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO136 = MODE0(GPIO136) MODE1(LPCE0B) MODE2(DPIDE) MODE3() MODE4(MC3CM0) MODE5(SPI_CS_N) MODE6() MODE7() PU
+GPIO137 = MODE0(GPIO137) MODE1(LPTE) MODE2(DPICK) MODE3(IRDA_RXD) MODE4(MC3DA0) MODE5(SPI_SCK) MODE6() MODE7() PD
+GPIO138 = MODE0(GPIO138) MODE1(LRSTB) MODE2() MODE3(IRDA_TXD) MODE4(MC3DA1) MODE5() MODE6() MODE7() PUPD
+GPIO139 = MODE0(GPIO139) MODE1(LRDB) MODE2(DPIHSYNC) MODE3() MODE4(MC3DA2) MODE5(SPI_MOSI) MODE6() MODE7() PUPD
+GPIO140 = MODE0(GPIO140) MODE1(LPA0) MODE2() MODE3() MODE4(MC3DA3) MODE5(SPI_MISO) MODE6() MODE7() PUPD
+GPIO141 = MODE0(GPIO141) MODE1(LWRB) MODE2(DPIVSYNC) MODE3() MODE4(MC3CK) MODE5(EINT14) MODE6() MODE7() PUPD
+GPIO142 = MODE0(GPIO142) MODE1(I2S1_CK) MODE2(SPI_CS_N) MODE3(MC2CK) MODE4(IRDA_RXD) MODE5(EINT14) MODE6() MODE7() PUPD
+GPIO143 = MODE0(GPIO143) MODE1(I2S1_WS) MODE2(SPI_SCK) MODE3(MC2DA3) MODE4(IRDA_TXD) MODE5(EINT15) MODE6() MODE7() PUPD
+GPIO144 = MODE0(GPIO144) MODE1(I2S1_DAT) MODE2() MODE3(MC2DA2) MODE4(URTS2) MODE5(EINT12) MODE6() MODE7() PUPD
+GPIO145 = MODE0(GPIO145) MODE1(I2S0_CK) MODE2(SPI_MOSI) MODE3(MC2DA1) MODE4(UCTS2) MODE5(EINT13) MODE6() MODE7() PUPD
+GPIO146 = MODE0(GPIO146) MODE1(I2S0_WS) MODE2(SPI_MISO) MODE3(MC2DA0) MODE4(URTS3) MODE5(EINT14) MODE6() MODE7() PUPD
+GPIO147 = MODE0(GPIO147) MODE1(I2S0_DAT) MODE2(IRDA_PDN) MODE3(MC2CM0) MODE4(UCTS3) MODE5(EINT15) MODE6() MODE7() PUPD
+GPIO148 = MODE0(GPIO148) MODE1(MC3CM0) MODE2(I2S0_DAT) MODE3() MODE4() MODE5(EINT13) MODE6() MODE7() PUPD
+GPIO149 = MODE0(GPIO149) MODE1(MC3DA0) MODE2(PWM4) MODE3(DAIRST) MODE4() MODE5(EINT12) MODE6() MODE7() PUPD
+GPIO150 = MODE0(GPIO150) MODE1(MC3DA1) MODE2(PWM5) MODE3(DAISYNC) MODE4() MODE5(EINT11) MODE6() MODE7() PUPD
+GPIO151 = MODE0(GPIO151) MODE1(MC3DA2) MODE2(PWM6) MODE3(DAIPCMIN) MODE4(CLKM3) MODE5(EINT10) MODE6() MODE7() PUPD
+GPIO152 = MODE0(GPIO152) MODE1(MC3DA3) MODE2(I2S0_CK) MODE3(DAIPCMOUT) MODE4(CLKM2) MODE5(EINT9) MODE6() MODE7() PUPD
+GPIO153 = MODE0(GPIO153) MODE1(MC3CK) MODE2(I2S0_WS) MODE3(DAICLK) MODE4(CLKM1) MODE5(EINT8) MODE6() MODE7() PUPD
+GPIO154 = MODE0(GPIO154) MODE1(NLD15) MODE2(MC3CM0) MODE3(SPI_CS_N) MODE4(CLKM0) MODE5(EINT15) MODE6() MODE7() PD
+GPIO155 = MODE0(GPIO155) MODE1(NLD14) MODE2(MC3DA0) MODE3(SPI_SCK) MODE4(CLKM1) MODE5(EINT14) MODE6() MODE7() PD
+GPIO156 = MODE0(GPIO156) MODE1(NLD13) MODE2(MC3DA1) MODE3() MODE4(CLKM2) MODE5(EINT13) MODE6() MODE7() PD
+GPIO157 = MODE0(GPIO157) MODE1(NLD12) MODE2(MC3DA2) MODE3(SPI_MOSI) MODE4(CLKM5) MODE5(EINT12) MODE6() MODE7() PD
+GPIO158 = MODE0(GPIO158) MODE1(NLD11) MODE2(MC3DA3) MODE3(SPI_MISO) MODE4(PWM4) MODE5(EINT15) MODE6() MODE7() PD
+GPIO159 = MODE0(GPIO159) MODE1(NLD10) MODE2(MC3CK) MODE3() MODE4(PWM5) MODE5(EINT14) MODE6() MODE7() PD
+GPIO160 = MODE0(GPIO160) MODE1(NLD9) MODE2() MODE3() MODE4(PWM6) MODE5(EINT13) MODE6() MODE7() PD
+GPIO161 = MODE0(GPIO161) MODE1(NLD8) MODE2() MODE3() MODE4() MODE5(EINT12) MODE6() MODE7() PD
+GPIO162 = MODE0(GPIO162) MODE1(NLD7) MODE2() MODE3(I2S0_CK) MODE4() MODE5(EINT11) MODE6() MODE7() PD
+GPIO163 = MODE0(GPIO163) MODE1(NLD6) MODE2() MODE3(I2S0_WS) MODE4() MODE5(EINT10) MODE6() MODE7() PD
+GPIO164 = MODE0(GPIO164) MODE1(NLD5) MODE2() MODE3(I2S0_DAT) MODE4() MODE5(EINT9) MODE6() MODE7() PD
+GPIO165 = MODE0(GPIO165) MODE1(NLD4) MODE2() MODE3() MODE4() MODE5(EINT8) MODE6() MODE7() PD
+GPIO166 = MODE0(GPIO166) MODE1(NLD3) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO167 = MODE0(GPIO167) MODE1(NLD2) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO168 = MODE0(GPIO168) MODE1(NLD1) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO169 = MODE0(GPIO169) MODE1(NLD0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO170 = MODE0(GPIO170) MODE1(NRNB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO171 = MODE0(GPIO171) MODE1(NCLE) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO172 = MODE0(GPIO172) MODE1(NALE) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO173 = MODE0(GPIO173) MODE1(NWEB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO174 = MODE0(GPIO174) MODE1(NREB) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO175 = MODE0(GPIO175) MODE1(NCE0B) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO176 = MODE0(GPIO176) MODE1(DAICLK) MODE2(I2S0_CK) MODE3(IRDA_PDN) MODE4() MODE5() MODE6() MODE7() PD
+GPIO177 = MODE0(GPIO177) MODE1(DAIPCMOUT) MODE2(I2S0_DAT) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO178 = MODE0(GPIO178) MODE1(DAIPCMIN) MODE2() MODE3(URXD3) MODE4() MODE5() MODE6() MODE7() PD
+GPIO179 = MODE0(GPIO179) MODE1(DAISYNC) MODE2(I2S0_WS) MODE3(UTXD3) MODE4() MODE5() MODE6() MODE7() PD
+GPIO180 = MODE0(GPIO180) MODE1(DAIRST) MODE2() MODE3(CLKM5) MODE4() MODE5() MODE6() MODE7() PU
+GPIO181 = MODE0(GPIO181) MODE1(SCL0) MODE2(EINT14) MODE3() MODE4() MODE5() MODE6(dbg1_bus[0]) MODE7() PU
+GPIO182 = MODE0(GPIO182) MODE1(SDA0) MODE2(EINT15) MODE3() MODE4() MODE5() MODE6(dbg1_bus[1]) MODE7() PU
+GPIO183 = MODE0(GPIO183) MODE1(URXD3) MODE2(EINT12) MODE3(PWM4) MODE4(CLKM3) MODE5() MODE6(dbg1_bus[2]) MODE7() PU
+GPIO184 = MODE0(GPIO184) MODE1(UTXD3) MODE2(EINT13) MODE3(PWM5) MODE4(CLKM4) MODE5() MODE6(dbg1_bus[3]) MODE7() PU
+GPIO185 = MODE0(GPIO185) MODE1(URXD4) MODE2(EINT14) MODE3() MODE4() MODE5() MODE6(dbg1_bus[4]) MODE7() PU
+GPIO186 = MODE0(GPIO186) MODE1(UTXD4) MODE2(EINT15) MODE3(MC3DA0) MODE4() MODE5() MODE6(dbg1_bus[5]) MODE7() PU
+GPIO187 = MODE0(GPIO187) MODE1(EINT0) MODE2(SPI_CS_N) MODE3(MC3CM0) MODE4() MODE5() MODE6(dbg1_bus[6]) MODE7() PU
+GPIO188 = MODE0(GPIO188) MODE1(EINT1) MODE2(SPI_SCK) MODE3(MC3CK) MODE4(IRDA_PDN) MODE5() MODE6(dbg1_bus[7]) MODE7() PU
+GPIO189 = MODE0(GPIO189) MODE1(EINT2) MODE2() MODE3(MC3DA1) MODE4(DSP_GPO3) MODE5(TBTXEN) MODE6(dbg1_bus[8]) MODE7() PU
+GPIO190 = MODE0(GPIO190) MODE1(EINT3) MODE2(SPI_MOSI) MODE3(MC3DA2) MODE4(PWM6) MODE5() MODE6(dbg1_bus[9]) MODE7() PU
+GPIO191 = MODE0(GPIO191) MODE1(EINT4) MODE2(SPI_MISO) MODE3(MC3DA3) MODE4(HDQ_ONEWIRE) MODE5() MODE6(dbg1_bus[10]) MODE7() PU
+GPIO192 = MODE0(GPIO192) MODE1(MCU_JTRST_B) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO193 = MODE0(GPIO193) MODE1(MCU_JTCK) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO194 = MODE0(GPIO194) MODE1(MCU_JTDI) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO195 = MODE0(GPIO195) MODE1(MCU_JTMS) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO196 = MODE0(GPIO196) MODE1(MCU_JTDO) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO197 = MODE0(GPIO197) MODE1(MCU_JRTCK) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PUPD
+GPIO198 = MODE0(GPIO198) MODE1(SWCLKTCK) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO199 = MODE0(GPIO199) MODE1(SWDIOTMS) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO200 = MODE0(GPIO200) MODE1(I2S1_CK) MODE2() MODE3(IRDA_RXD) MODE4(URTS4) MODE5(EINT8) MODE6() MODE7() PD
+GPIO201 = MODE0(GPIO201) MODE1(I2S1_WS) MODE2() MODE3(IRDA_TXD) MODE4(UCTS4) MODE5(EINT9) MODE6(dbg3_bus[6]) MODE7() PD
+GPIO202 = MODE0(GPIO202) MODE1(I2S1_DAT) MODE2() MODE3(IRDA_PDN) MODE4() MODE5(EINT13) MODE6(dbg3_bus[7]) MODE7() PD
+
+[GPO]
+
+[EINT]
+EINT_COUNT = 16
+EINT_DEBOUNCE_TIME_COUNT = 16
+
+[EINT_EX_PIN]
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+
+[ADC]
+ADC_COUNT = 5
+
+[ADC_EX_PIN]
+4
+5
+6
+7
+8
+
+[KEYPAD]
+KEY_ROW = 8
+KEY_COLUMN = 9
+
diff --git a/mcu/custom/driver/drv/Drv_Tool/MT6575_NP.fig b/mcu/custom/driver/drv/Drv_Tool/MT6575_NP.fig
new file mode 100644
index 0000000..d9c6ae1
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/MT6575_NP.fig
@@ -0,0 +1,291 @@
+[Chip Type]
+Chip = MT6575
+GPIO_Pull_Sel = 1
+GPIO_ModeNum = 8
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(EINT0) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU/PD
+GPIO1 = MODE0(GPIO1) MODE1(EINT3) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU/PD
+GPIO2 = MODE0(GPIO2) MODE1(EINT2) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU/PD
+GPIO3 = MODE0(GPIO3) MODE1(EINT5) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU/PD
+GPIO4 = MODE0(GPIO4) MODE1(EINT4) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU/PD
+GPIO5 = MODE0(GPIO5) MODE1(EINT6) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU/PD
+GPIO6 = MODE0(GPIO6) MODE1(EINT7) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU/PD
+GPIO7 = MODE0(GPIO7) MODE1(EINT8) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU/PD
+GPIO8 = MODE0(GPIO8) MODE1(EINT10) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU/PD
+GPIO9 = MODE0(GPIO9) MODE1(EINT9) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU/PD
+GPIO10 = MODE0(GPIO10) MODE1(EINT1) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU/PD
+GPIO11 = MODE0(GPIO11) MODE1(EINT11) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU/PD
+GPIO12 = MODE0(GPIO12) MODE1(LPA0) MODE2(EINT16) MODE3(PWM4) MODE4() MODE5() MODE6() MODE7() PD
+GPIO13 = MODE0(GPIO13) MODE1(LPCE1B) MODE2(EINT14) MODE3(PWM2) MODE4() MODE5() MODE6() MODE7() PU
+GPIO14 = MODE0(GPIO14) MODE1(LPTE) MODE2(EINT12) MODE3(PWM0) MODE4() MODE5() MODE6() MODE7() PD
+GPIO15 = MODE0(GPIO15) MODE1(LWRB) MODE2(EINT18) MODE3(PWM6) MODE4() MODE5() MODE6() MODE7() PU
+GPIO16 = MODE0(GPIO16) MODE1(LPCE0B) MODE2(EINT15) MODE3(PWM3) MODE4() MODE5() MODE6() MODE7() PU
+GPIO17 = MODE0(GPIO17) MODE1(LRDB) MODE2(EINT17) MODE3(PWM5) MODE4() MODE5() MODE6() MODE7() PU
+GPIO18 = MODE0(GPIO18) MODE1(LRSTB) MODE2(EINT13) MODE3(PWM1) MODE4() MODE5() MODE6() MODE7() PU
+GPIO19 = MODE0(GPIO19) MODE1(DPIHSYNC) MODE2(EINT22) MODE3(CM2PCLK) MODE4() MODE5() MODE6() MODE7() PD
+GPIO20 = MODE0(GPIO20) MODE1(DPIB_PO_6) MODE2(EINT8) MODE3() MODE4() MODE5() MODE6(DBG_OUT0_17) MODE7() PD
+GPIO21 = MODE0(GPIO21) MODE1(DPIVSYNC) MODE2(EINT21) MODE3(CM2VREF) MODE4() MODE5() MODE6() MODE7() PD
+GPIO22 = MODE0(GPIO22) MODE1(DPIR_PO_5) MODE2(EINT25) MODE3(CM2DAT5) MODE4() MODE5() MODE6(DBG_OUT0_10) MODE7() PD
+GPIO23 = MODE0(GPIO23) MODE1(DPIB_PO_2) MODE2(EINT12) MODE3(I2S1_CK) MODE4() MODE5() MODE6(DBG_OUT0_21) MODE7() PD
+GPIO24 = MODE0(GPIO24) MODE1(DPIB_PO_5) MODE2(EINT9) MODE3(I2S0_CK) MODE4() MODE5() MODE6(DBG_OUT0_18) MODE7() PD
+GPIO25 = MODE0(GPIO25) MODE1(DPIB_PO_0) MODE2(EINT14) MODE3(I2S1_WS) MODE4() MODE5() MODE6(DBG_OUT0_23) MODE7() PD
+GPIO26 = MODE0(GPIO26) MODE1(DPIR_PO_7) MODE2(EINT23) MODE3(CM2DAT7) MODE4() MODE5() MODE6(DBG_OUT0_8) MODE7() PD
+GPIO27 = MODE0(GPIO27) MODE1(DPIR_PO_4) MODE2(EINT26) MODE3(CM2DAT4) MODE4() MODE5() MODE6(DBG_OUT0_11) MODE7() PD
+GPIO28 = MODE0(GPIO28) MODE1(DPIG_PO_3) MODE2(EINT3) MODE3() MODE4() MODE5() MODE6(DBG_OUT0_4) MODE7() PD
+GPIO29 = MODE0(GPIO29) MODE1(DPIB_PO_4) MODE2(EINT10) MODE3(I2S0_DAT) MODE4() MODE5() MODE6(DBG_OUT0_19) MODE7() PD
+GPIO30 = MODE0(GPIO30) MODE1(DPIDE) MODE2(EINT20) MODE3(CM2HREF) MODE4() MODE5() MODE6() MODE7() PD
+GPIO31 = MODE0(GPIO31) MODE1(DPIB_PO_3) MODE2(EINT11) MODE3(I2S0_WS) MODE4() MODE5() MODE6(DBG_OUT0_20) MODE7() PD
+GPIO32 = MODE0(GPIO32) MODE1(DPIR_PO_6) MODE2(EINT24) MODE3(CM2DAT6) MODE4() MODE5() MODE6(DBG_OUT0_9) MODE7() PD
+GPIO33 = MODE0(GPIO33) MODE1(DPIG_PO_2) MODE2(EINT4) MODE3() MODE4() MODE5() MODE6(DBG_OUT0_5) MODE7() PD
+GPIO34 = MODE0(GPIO34) MODE1(DPIG_PO_7) MODE2(EINT31) MODE3(CM2RST) MODE4() MODE5() MODE6(DBG_OUT0_0) MODE7() PD
+GPIO35 = MODE0(GPIO35) MODE1(DPIR_PO_2) MODE2(EINT28) MODE3(CM2DAT2) MODE4() MODE5() MODE6(DBG_OUT0_13) MODE7() PD
+GPIO36 = MODE0(GPIO36) MODE1(DPIB_PO_1) MODE2(EINT13) MODE3(I2S1_DAT) MODE4() MODE5() MODE6(DBG_OUT0_22) MODE7() PD
+GPIO37 = MODE0(GPIO37) MODE1(DPIG_PO_0) MODE2(EINT6) MODE3() MODE4() MODE5() MODE6(DBG_OUT0_7) MODE7() PD
+GPIO38 = MODE0(GPIO38) MODE1(DPIG_PO_6) MODE2(EINT0) MODE3(CM2PDN) MODE4() MODE5() MODE6(DBG_OUT0_1) MODE7() PD
+GPIO39 = MODE0(GPIO39) MODE1(DPIG_PO_4) MODE2(EINT2) MODE3() MODE4() MODE5() MODE6(DBG_OUT0_3) MODE7() PD
+GPIO40 = MODE0(GPIO40) MODE1(DPIR_PO_3) MODE2(EINT27) MODE3(CM2DAT3) MODE4() MODE5() MODE6(DBG_OUT0_12) MODE7() PD
+GPIO41 = MODE0(GPIO41) MODE1(DPICK) MODE2(EINT19) MODE3(CM2MCLK) MODE4() MODE5() MODE6() MODE7() PD
+GPIO42 = MODE0(GPIO42) MODE1(DPIB_PO_7) MODE2(EINT7) MODE3() MODE4() MODE5() MODE6(DBG_OUT0_16) MODE7() PD
+GPIO43 = MODE0(GPIO43) MODE1(DPIG_PO_1) MODE2(EINT5) MODE3() MODE4() MODE5() MODE6(DBG_OUT0_6) MODE7() PD
+GPIO44 = MODE0(GPIO44) MODE1(DPIR_PO_0) MODE2(EINT30) MODE3(CM2DAT0) MODE4() MODE5() MODE6(DBG_OUT0_15) MODE7() PD
+GPIO45 = MODE0(GPIO45) MODE1(DPIR_PO_1) MODE2(EINT29) MODE3(CM2DAT1) MODE4() MODE5() MODE6(DBG_OUT0_14) MODE7() PD
+GPIO46 = MODE0(GPIO46) MODE1(DPIG_PO_5) MODE2(EINT1) MODE3() MODE4() MODE5() MODE6(DBG_OUT0_2) MODE7() PD
+GPIO47 = MODE0(GPIO47) MODE1(LSCE0B) MODE2() MODE3(URXD3) MODE4(SCL_2) MODE5(TDMA_FS) MODE6(TCTIRQ1) MODE7() PU
+GPIO48 = MODE0(GPIO48) MODE1(LSDI) MODE2() MODE3(UTXD2) MODE4(SDA_1) MODE5() MODE6() MODE7() PD
+GPIO49 = MODE0(GPIO49) MODE1(LSA0) MODE2(MD_TXD1) MODE3(MD_RXD1) MODE4(SDA_0) MODE5(TDMA_D1) MODE6(TDTIRQ) MODE7() PD
+GPIO50 = MODE0(GPIO50) MODE1(LSCE1B) MODE2() MODE3(UTXD3) MODE4(SDA_2) MODE5() MODE6(TEVTVAL) MODE7() PU
+GPIO51 = MODE0(GPIO51) MODE1(LSCK) MODE2(MD_RXD1) MODE3(MD_TXD1) MODE4(SCL_0) MODE5(TDMA_CK) MODE6() MODE7() PD
+GPIO52 = MODE0(GPIO52) MODE1(LSDA) MODE2() MODE3(URXD2) MODE4(SCL_1) MODE5(TDMA_D0) MODE6(TCTIRQ2) MODE7() PD
+GPIO53 = MODE0(GPIO53) MODE1(I2S0_DAT) MODE2() MODE3(CLKM4) MODE4(I2S1_DAT) MODE5() MODE6(DBG_OUT0_24) MODE7() PD
+GPIO54 = MODE0(GPIO54) MODE1(I2S0_WS) MODE2() MODE3(CLKM5) MODE4(I2S1_WS) MODE5() MODE6(DBG_OUT0_25) MODE7() PD
+GPIO55 = MODE0(GPIO55) MODE1(I2S0_CK) MODE2(EINT15) MODE3(CLKM3) MODE4(I2S1_CK) MODE5() MODE6(DBG_OUT0_26) MODE7() PD
+GPIO56 = MODE0(GPIO56) MODE1(I2S1_CK) MODE2() MODE3(IRDA_RXD) MODE4(I2S0_CK) MODE5() MODE6(DBG_OUT0_27) MODE7() PD
+GPIO57 = MODE0(GPIO57) MODE1(I2S1_WS) MODE2(EINT1) MODE3(IRDA_PDN) MODE4(I2S0_WS) MODE5() MODE6(DBG_OUT0_28) MODE7() PD
+GPIO58 = MODE0(GPIO58) MODE1(I2S1_DAT) MODE2(EINT0) MODE3(IRDA_TXD) MODE4(I2S0_DAT) MODE5() MODE6(DBG_OUT0_29) MODE7() PD
+GPIO59 = MODE0(GPIO59) MODE1(DAIRSTB) MODE2(EINT8) MODE3(PWM6) MODE4(MD_RXD2) MODE5() MODE6() MODE7() PD
+GPIO60 = MODE0(GPIO60) MODE1(EINT8) MODE2(EINT5) MODE3(PWM3) MODE4(WATCHDOG_RSTB) MODE5(DSP_GPO3) MODE6() MODE7() PD
+GPIO61 = MODE0(GPIO61) MODE1(EINT9) MODE2(EINT6) MODE3(PWM4) MODE4(GPS_SYNC) MODE5(WATCHDOG_RSTB) MODE6() MODE7() PD
+GPIO62 = MODE0(GPIO62) MODE1(DAIPCMOUT) MODE2(EINT2) MODE3(PWM0) MODE4(I2S0_DAT) MODE5() MODE6() MODE7() PD
+GPIO63 = MODE0(GPIO63) MODE1(DAICLK) MODE2(EINT3) MODE3(PWM1) MODE4(I2S0_CK) MODE5() MODE6() MODE7() PD
+GPIO64 = MODE0(GPIO64) MODE1(DAIPCMIN) MODE2(EINT4) MODE3(PWM2) MODE4() MODE5() MODE6() MODE7() PD
+GPIO65 = MODE0(GPIO65) MODE1(BTSYNC) MODE2(EINT7) MODE3(PWM5) MODE4(I2S0_WS) MODE5() MODE6() MODE7() PD
+GPIO66 = MODE0(GPIO66) MODE1(PWM2) MODE2(EINT10) MODE3(IRDA_RXD) MODE4(URXD3) MODE5(UTXD3) MODE6(DBG_OUT1_17) MODE7() PD
+GPIO67 = MODE0(GPIO67) MODE1(PWM1) MODE2(EINT9) MODE3(IRDA_PDN) MODE4(MD_TXD2) MODE5(USB_DRVVBUS) MODE6(DBG_OUT1_16) MODE7() PD
+GPIO68 = MODE0(GPIO68) MODE1(PWM3) MODE2(EINT11) MODE3(IRDA_TXD) MODE4(UTXD3) MODE5(URXD3) MODE6(DBG_OUT1_18) MODE7() PD
+GPIO69 = MODE0(GPIO69) MODE1(EINT3) MODE2(PWM3) MODE3(MD_RXD1) MODE4(CLKM2) MODE5(SPI_MO) MODE6(DBG_IN_9) MODE7() PD
+GPIO70 = MODE0(GPIO70) MODE1(EINT0) MODE2(PWM0) MODE3(URXD2) MODE4(CLKM5) MODE5(SPI_CSN) MODE6(DBG_IN_6) MODE7() PD
+GPIO71 = MODE0(GPIO71) MODE1(UTXD3) MODE2(EINT17) MODE3(URXD3) MODE4(PWM6) MODE5(DSP_EMU_B) MODE6(DBG_IN_3) MODE7() PU
+GPIO72 = MODE0(GPIO72) MODE1(EINT4) MODE2(PWM4) MODE3(MD_TXD2) MODE4(CLKM1) MODE5(GPS_SYNC) MODE6(DBG_IN_10) MODE7() PD
+GPIO73 = MODE0(GPIO73) MODE1(EINT7) MODE2(CLKM0) MODE3(IRDA_TXD) MODE4(I2S0_WS) MODE5(USB_DRVVBUS) MODE6(DBG_IN_13) MODE7() PD
+GPIO74 = MODE0(GPIO74) MODE1(UTXD2) MODE2(EINT13) MODE3(URXD2) MODE4(PWM2) MODE5(DSP_JTCK) MODE6(DBG_IN_15) MODE7() PU
+GPIO75 = MODE0(GPIO75) MODE1(EINT6) MODE2(PWM6) MODE3(IRDA_RXD) MODE4(I2S0_DAT) MODE5(MD_RXD2) MODE6(DBG_IN_12) MODE7() PD
+GPIO76 = MODE0(GPIO76) MODE1(EINT1) MODE2(PWM1) MODE3(UTXD2) MODE4(CLKM4) MODE5(SPI_CLK) MODE6(DBG_IN_7) MODE7() PD
+GPIO77 = MODE0(GPIO77) MODE1(URXD2) MODE2(EINT12) MODE3(UTXD2) MODE4(PWM1) MODE5(DSP_JTRST_B) MODE6(DBG_IN_14) MODE7() PU
+GPIO78 = MODE0(GPIO78) MODE1(EINT5) MODE2(PWM5) MODE3(IRDA_PDN) MODE4(I2S0_CK) MODE5(USB_DRVVBUS) MODE6(DBG_IN_11) MODE7() PD
+GPIO79 = MODE0(GPIO79) MODE1(URXD3) MODE2(EINT16) MODE3(UTXD3) MODE4(PWM5) MODE5(DSP_JTDO) MODE6(DBG_IN_2) MODE7() PU
+GPIO80 = MODE0(GPIO80) MODE1(UCTS2) MODE2(EINT14) MODE3(MD_TXD2) MODE4(PWM3) MODE5(DSP_JTMS) MODE6() MODE7() PD
+GPIO81 = MODE0(GPIO81) MODE1(EINT2) MODE2(PWM2) MODE3(MD_TXD1) MODE4(CLKM3) MODE5(SPI_MI) MODE6(DBG_IN_8) MODE7() PD
+GPIO82 = MODE0(GPIO82) MODE1(URTS2) MODE2(EINT15) MODE3(MD_RXD2) MODE4(PWM4) MODE5(DSP_JTDI) MODE6() MODE7() PD
+GPIO83 = MODE0(GPIO83) MODE1(SPI_CSN) MODE2(EINT18) MODE3(IRDA_PDN) MODE4(SPI_CSN) MODE5() MODE6() MODE7() PD
+GPIO84 = MODE0(GPIO84) MODE1(SPI_MI) MODE2(EINT20) MODE3(IRDA_TXD) MODE4(SPI_MO) MODE5() MODE6() MODE7() PD
+GPIO85 = MODE0(GPIO85) MODE1(SPI_MO) MODE2(EINT21) MODE3(CLKM5) MODE4(SPI_MI) MODE5() MODE6() MODE7() PD
+GPIO86 = MODE0(GPIO86) MODE1(SPI_CLK) MODE2(EINT19) MODE3(IRDA_RXD) MODE4(SPI_CLK) MODE5() MODE6(DBG_OUT0_30) MODE7() PD
+GPIO87 = MODE0(GPIO87) MODE1(SCL_0) MODE2(EINT22) MODE3(CLKM4) MODE4() MODE5() MODE6(DBG_IN_0) MODE7() PU
+GPIO88 = MODE0(GPIO88) MODE1(SDA_0) MODE2(EINT23) MODE3(CLKM3) MODE4() MODE5() MODE6(DBG_IN_1) MODE7() PU
+GPIO89 = MODE0(GPIO89) MODE1(MSDC3_DAT2) MODE2(EINT28) MODE3(URXD3) MODE4(CLKM1) MODE5(UTXD3) MODE6(DBG_OUT1_4) MODE7() PU
+GPIO90 = MODE0(GPIO90) MODE1(MSDC3_DAT1) MODE2(EINT27) MODE3(MD_RXD2) MODE4(CLKM2) MODE5(MD_TXD2) MODE6(DBG_OUT1_0) MODE7() PU
+GPIO91 = MODE0(GPIO91) MODE1(MSDC3_CMD) MODE2(EINT25) MODE3(MD_RXD1) MODE4(CLKM4) MODE5(MD_TXD1) MODE6(DBG_OUT1_1) MODE7() PU
+GPIO92 = MODE0(GPIO92) MODE1(MSDC3_CLK) MODE2(EINT24) MODE3(MD_TXD1) MODE4(CLKM5) MODE5(MD_RXD1) MODE6(DBG_OUT1_2) MODE7() PU
+GPIO93 = MODE0(GPIO93) MODE1(MSDC3_DAT3) MODE2(EINT29) MODE3(UTXD3) MODE4(CLKM0) MODE5(URXD3) MODE6(DBG_OUT1_3) MODE7() PU
+GPIO94 = MODE0(GPIO94) MODE1(MSDC3_DAT0) MODE2(EINT26) MODE3(MD_TXD2) MODE4(CLKM3) MODE5(MD_RXD2) MODE6(DBG_OUT0_31) MODE7() PU
+GPIO95 = MODE0(GPIO95) MODE1(KP_ROW2) MODE2(EINT8) MODE3(CLKM2) MODE4(I2S1_DAT) MODE5() MODE6(DBG_IN_29) MODE7() PD
+GPIO96 = MODE0(GPIO96) MODE1(KP_COL7) MODE2(EINT5) MODE3(CLKM5) MODE4(I2S0_DAT) MODE5() MODE6(DBG_IN_16) MODE7() PD
+GPIO97 = MODE0(GPIO97) MODE1(KP_ROW1) MODE2(EINT7) MODE3(CLKM3) MODE4(I2S1_CK) MODE5() MODE6(DBG_IN_30) MODE7() PD
+GPIO98 = MODE0(GPIO98) MODE1(KP_ROW0) MODE2(EINT6) MODE3(CLKM4) MODE4(I2S0_WS) MODE5() MODE6(DBG_IN_31) MODE7() PD
+GPIO99 = MODE0(GPIO99) MODE1(KP_ROW3) MODE2(EINT9) MODE3(CLKM1) MODE4(I2S1_WS) MODE5() MODE6(DBG_IN_28) MODE7() PD
+GPIO100 = MODE0(GPIO100) MODE1(KP_COL5) MODE2(EINT3) MODE3(PWM5) MODE4(DSP_JTCK) MODE5() MODE6(DBG_IN_18) MODE7() PD
+GPIO101 = MODE0(GPIO101) MODE1(KP_COL3) MODE2(EINT1) MODE3(PWM3) MODE4(DSP_JTRST_B) MODE5() MODE6(DBG_IN_20) MODE7() PD
+GPIO102 = MODE0(GPIO102) MODE1(KP_COL4) MODE2(EINT2) MODE3(PWM4) MODE4(DSP_EMU_B) MODE5() MODE6(DBG_IN_19) MODE7() PD
+GPIO103 = MODE0(GPIO103) MODE1(KP_COL0) MODE2(EINT30) MODE3(PWM0) MODE4(DSP_JTDI) MODE5() MODE6(DBG_IN_23) MODE7() PU
+GPIO104 = MODE0(GPIO104) MODE1(KP_ROW4) MODE2(EINT10) MODE3(CLKM0) MODE4(SCL_0) MODE5() MODE6(DBG_IN_27) MODE7() PD
+GPIO105 = MODE0(GPIO105) MODE1(KP_COL2) MODE2(EINT0) MODE3(PWM2) MODE4(DSP_JTDO) MODE5() MODE6(DBG_IN_21) MODE7() PD
+GPIO106 = MODE0(GPIO106) MODE1(KP_ROW5) MODE2(EINT11) MODE3(IRDA_PDN) MODE4(SDA_0) MODE5() MODE6(DBG_IN_26) MODE7() PD
+GPIO107 = MODE0(GPIO107) MODE1(KP_ROW7) MODE2(EINT13) MODE3(IRDA_TXD) MODE4(SDA_1) MODE5() MODE6(DBG_IN_24) MODE7() PD
+GPIO108 = MODE0(GPIO108) MODE1(KP_COL1) MODE2(EINT31) MODE3(PWM1) MODE4(DSP_JTMS) MODE5() MODE6(DBG_IN_22) MODE7() PU
+GPIO109 = MODE0(GPIO109) MODE1(KP_COL6) MODE2(EINT4) MODE3(PWM6) MODE4(I2S0_CK) MODE5() MODE6(DBG_IN_17) MODE7() PD
+GPIO110 = MODE0(GPIO110) MODE1(KP_ROW6) MODE2(EINT12) MODE3(IRDA_RXD) MODE4(SCL_1) MODE5(EXT_FRAME_SYNC) MODE6(DBG_IN_25) MODE7() PD
+GPIO111 = MODE0(GPIO111) MODE1(DUAL_BPI_BUS3) MODE2(EINT17) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_22) MODE7() PD
+GPIO112 = MODE0(GPIO112) MODE1(TDD_AFC_SW) MODE2(EINT29) MODE3(IRDA_TXD) MODE4(SDA_1) MODE5() MODE6() MODE7() PD
+GPIO113 = MODE0(GPIO113) MODE1(DUAL_BPI_BUS1) MODE2(EINT15) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_20) MODE7() PD
+GPIO114 = MODE0(GPIO114) MODE1(DUAL_BPI_BUS4) MODE2(EINT18) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_23) MODE7() PD
+GPIO115 = MODE0(GPIO115) MODE1(DUAL_BPI_BUS0) MODE2(EINT14) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_19) MODE7() PD
+GPIO116 = MODE0(GPIO116) MODE1(DUAL_BPI_BUS5) MODE2(EINT19) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_24) MODE7() PD
+GPIO117 = MODE0(GPIO117) MODE1(DUAL_BPI_BUS2) MODE2(EINT16) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_21) MODE7() PD
+GPIO118 = MODE0(GPIO118) MODE1(DUAL_BPI_BUS8) MODE2(EINT0) MODE3(GPS_SYNC) MODE4() MODE5() MODE6(DBG_OUT1_27) MODE7() PD
+GPIO119 = MODE0(GPIO119) MODE1(DUAL_BPI_BUS9) MODE2(EINT22) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_28) MODE7() PD
+GPIO120 = MODE0(GPIO120) MODE1(DUAL_BPI_BUS7) MODE2(EINT21) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_26) MODE7() PD
+GPIO121 = MODE0(GPIO121) MODE1(DUAL_BPI_BUS6) MODE2(EINT20) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_25) MODE7() PD
+GPIO122 = MODE0(GPIO122) MODE1(TDD_TIMINGSYNC) MODE2(EINT28) MODE3(IRDA_RXD) MODE4(SCL_1) MODE5() MODE6() MODE7() PD
+GPIO123 = MODE0(GPIO123) MODE1(DUAL_BPI_BUS10) MODE2(EINT23) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_29) MODE7() PD
+GPIO124 = MODE0(GPIO124) MODE1(DUAL_BPI_BUS14) MODE2(EINT27) MODE3(IRDA_PDN) MODE4(SDA_0) MODE5() MODE6() MODE7() PD
+GPIO125 = MODE0(GPIO125) MODE1(DUAL_BPI_BUS13) MODE2(EINT26) MODE3(EXT_FRAME_SYNC) MODE4(SCL_0) MODE5() MODE6() MODE7() PD
+GPIO126 = MODE0(GPIO126) MODE1(DUAL_BPI_BUS11) MODE2(EINT24) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_30) MODE7() PD
+GPIO127 = MODE0(GPIO127) MODE1(DUAL_BPI_BUS12) MODE2(EINT25) MODE3(EXT_FRAME_SYNC) MODE4() MODE5() MODE6(DBG_OUT1_31) MODE7() PD
+GPIO128 = MODE0(GPIO128) MODE1(VM1) MODE2(EINT31) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO129 = MODE0(GPIO129) MODE1(VM0) MODE2(EINT30) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO130 = MODE0(GPIO130) MODE1(BSI0_CS1) MODE2(EINT4) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO131 = MODE0(GPIO131) MODE1(BSI1_DATA) MODE2(EINT6) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO132 = MODE0(GPIO132) MODE1(BSI1_DATA1) MODE2(EINT8) MODE3(BSI1_CS1) MODE4() MODE5() MODE6() MODE7() PD
+GPIO133 = MODE0(GPIO133) MODE1(BSI1_CS0) MODE2(EINT7) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO134 = MODE0(GPIO134) MODE1(BSI1_CLK) MODE2(EINT5) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO135 = MODE0(GPIO135) MODE1(BSI0_DATA) MODE2(EINT3) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO136 = MODE0(GPIO136) MODE1(BSI0_CS0) MODE2(EINT1) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO137 = MODE0(GPIO137) MODE1(BSI0_CLK) MODE2(EINT2) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO138 = MODE0(GPIO138) MODE1(CLKM2) MODE2(EINT9) MODE3(PWM0) MODE4(IRDA_PDN) MODE5() MODE6() MODE7() PU/PD
+GPIO139 = MODE0(GPIO139) MODE1(CLKM1) MODE2(EINT10) MODE3(PWM5) MODE4(IRDA_RXD) MODE5() MODE6() MODE7() PU/PD
+GPIO140 = MODE0(GPIO140) MODE1(CLKM0) MODE2(EINT11) MODE3(PWM6) MODE4(IRDA_TXD) MODE5() MODE6() MODE7() PU/PD
+GPIO141 = MODE0(GPIO141) MODE1(IDDIG) MODE2(EINT12) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO142 = MODE0(GPIO142) MODE1(SDA_2) MODE2(EINT14) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO143 = MODE0(GPIO143) MODE1(PACTRL2) MODE2(EINT19) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_15) MODE7() PU/PD
+GPIO144 = MODE0(GPIO144) MODE1(PMUCTRL0) MODE2(EINT15) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_11) MODE7() PU/PD
+GPIO145 = MODE0(GPIO145) MODE1(SCL_2) MODE2(EINT13) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO146 = MODE0(GPIO146) MODE1(PACTRL1) MODE2(EINT18) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_14) MODE7() PU/PD
+GPIO147 = MODE0(GPIO147) MODE1(PMUCTRL1) MODE2(EINT16) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_12) MODE7() PU/PD
+GPIO148 = MODE0(GPIO148) MODE1(PACTRL0) MODE2(EINT17) MODE3() MODE4() MODE5() MODE6(DBG_OUT1_13) MODE7() PU/PD
+GPIO149 = MODE0(GPIO149) MODE1(SWCLKTCK) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO150 = MODE0(GPIO150) MODE1(SWDIOTMS) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO151 = MODE0(GPIO151) MODE1(JTCK) MODE2(DSP_JTCK) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO152 = MODE0(GPIO152) MODE1(JTDO) MODE2(DSP_JTDO) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO153 = MODE0(GPIO153) MODE1(JTRST_B) MODE2(DSP_JTRST_B) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO154 = MODE0(GPIO154) MODE1(JTDI) MODE2(DSP_JTDI) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO155 = MODE0(GPIO155) MODE1(JRTCK) MODE2(DSP_EMU_B) MODE3() MODE4() MODE5() MODE6() MODE7() PU/PD
+GPIO156 = MODE0(GPIO156) MODE1(JTMS) MODE2(DSP_JTMS) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO157 = MODE0(GPIO157) MODE1(UTXD1) MODE2(EINT20) MODE3(URXD1) MODE4(MD_RXD1) MODE5() MODE6() MODE7() PU
+GPIO158 = MODE0(GPIO158) MODE1(UTXD4) MODE2(EINT24) MODE3(URXD4) MODE4(MD_RXD2) MODE5() MODE6(DBG_IN_5) MODE7() PU
+GPIO159 = MODE0(GPIO159) MODE1(URXD4) MODE2(EINT23) MODE3(UTXD4) MODE4(MD_TXD2) MODE5() MODE6(DBG_IN_4) MODE7() PU
+GPIO160 = MODE0(GPIO160) MODE1(URXD1) MODE2() MODE3(UTXD1) MODE4(MD_TXD1) MODE5() MODE6() MODE7() PU
+GPIO161 = MODE0(GPIO161) MODE1(URTS1) MODE2(EINT22) MODE3(MD_RXD1) MODE4() MODE5() MODE6() MODE7() PD
+GPIO162 = MODE0(GPIO162) MODE1(UCTS1) MODE2(EINT21) MODE3(MD_TXD1) MODE4() MODE5() MODE6() MODE7() PD
+GPIO163 = MODE0(GPIO163) MODE1(MSDC0_INSI) MODE2(EINT25) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO164 = MODE0(GPIO164) MODE1(MSDC0_DAT6) MODE2(EINT2) MODE3(SPI_MI) MODE4(NLD11) MODE5() MODE6() MODE7() PU
+GPIO165 = MODE0(GPIO165) MODE1(MSDC0_DAT7) MODE2(EINT3) MODE3(SPI_MO) MODE4(NLD3) MODE5() MODE6() MODE7() PU
+GPIO166 = MODE0(GPIO166) MODE1(MSDC0_DAT5) MODE2(EINT1) MODE3(SPI_CLK) MODE4(NLD2) MODE5() MODE6() MODE7() PU
+GPIO167 = MODE0(GPIO167) MODE1(MSDC0_RSTB) MODE2(NCLE) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO168 = MODE0(GPIO168) MODE1(MSDC0_DAT4) MODE2(EINT0) MODE3(SPI_CSN) MODE4(NLD10) MODE5() MODE6() MODE7() PU
+GPIO169 = MODE0(GPIO169) MODE1(MSDC0_DAT2) MODE2(EINT30) MODE3(NLD9) MODE4() MODE5() MODE6() MODE7() PU
+GPIO170 = MODE0(GPIO170) MODE1(MSDC0_DAT3) MODE2(EINT31) MODE3(NLD1) MODE4() MODE5() MODE6() MODE7() PU
+GPIO171 = MODE0(GPIO171) MODE1(MSDC0_CMD) MODE2(EINT27) MODE3(NRNB) MODE4() MODE5() MODE6() MODE7() PU
+GPIO172 = MODE0(GPIO172) MODE1(MSDC0_CLK) MODE2(EINT26) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO173 = MODE0(GPIO173) MODE1(MSDC0_DAT1) MODE2(EINT29) MODE3(NLD0) MODE4() MODE5() MODE6() MODE7() PU
+GPIO174 = MODE0(GPIO174) MODE1(MSDC0_SDWPI) MODE2(EINT4) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO175 = MODE0(GPIO175) MODE1(MSDC0_DAT0) MODE2(EINT28) MODE3(NLD8) MODE4() MODE5() MODE6() MODE7() PU
+GPIO176 = MODE0(GPIO176) MODE1(MSDC1_DAT1) MODE2(EINT7) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO177 = MODE0(GPIO177) MODE1(MSDC1_DAT2) MODE2(EINT8) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO178 = MODE0(GPIO178) MODE1(MSDC1_DAT0) MODE2(EINT6) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO179 = MODE0(GPIO179) MODE1(MSDC1_DAT3) MODE2(EINT9) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO180 = MODE0(GPIO180) MODE1(MSDC1_CLK) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO181 = MODE0(GPIO181) MODE1(MSDC1_CMD) MODE2(EINT5) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO182 = MODE0(GPIO182) MODE1(MSDC2_CLK) MODE2(EINT10) MODE3() MODE4(UTXD2) MODE5() MODE6(DBG_OUT1_5) MODE7() PU
+GPIO183 = MODE0(GPIO183) MODE1(MSDC2_DAT3) MODE2(EINT15) MODE3(UTXD2) MODE4(SPI_MO) MODE5(SPI_MI) MODE6(DBG_OUT1_10) MODE7() PU
+GPIO184 = MODE0(GPIO184) MODE1(MSDC2_CMD) MODE2(EINT11) MODE3(IRDA_PDN) MODE4(URXD2) MODE5() MODE6(DBG_OUT1_6) MODE7() PU
+GPIO185 = MODE0(GPIO185) MODE1(MSDC2_DAT2) MODE2(EINT14) MODE3(URXD2) MODE4(SPI_MI) MODE5(SPI_MO) MODE6(DBG_OUT1_9) MODE7() PU
+GPIO186 = MODE0(GPIO186) MODE1(MSDC2_DAT0) MODE2(EINT12) MODE3(IRDA_RXD) MODE4(SPI_CSN) MODE5(SPI_CSN) MODE6(DBG_OUT1_7) MODE7() PU
+GPIO187 = MODE0(GPIO187) MODE1(MSDC2_DAT1) MODE2(EINT13) MODE3(IRDA_TXD) MODE4(SPI_CLK) MODE5(SPI_CLK) MODE6(DBG_OUT1_8) MODE7() PU
+GPIO188 = MODE0(GPIO188) MODE1(NLD12) MODE2(EINT2) MODE3(CLKM3) MODE4(PWM3) MODE5() MODE6() MODE7() PD
+GPIO189 = MODE0(GPIO189) MODE1(NLD6) MODE2(EINT28) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO190 = MODE0(GPIO190) MODE1(NREB) MODE2(EINT17) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO191 = MODE0(GPIO191) MODE1(NLD3) MODE2(EINT25) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO192 = MODE0(GPIO192) MODE1(NLD11) MODE2(EINT1) MODE3(CLKM4) MODE4(PWM2) MODE5() MODE6() MODE7() PD
+GPIO193 = MODE0(GPIO193) MODE1(NLD5) MODE2(EINT27) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO194 = MODE0(GPIO194) MODE1(NLD9) MODE2(EINT31) MODE3(URXD3) MODE4(PWM0) MODE5() MODE6() MODE7() PD
+GPIO195 = MODE0(GPIO195) MODE1(NCEB1) MODE2(EINT20) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO196 = MODE0(GPIO196) MODE1(NLD10) MODE2(EINT0) MODE3(CLKM5) MODE4(PWM1) MODE5() MODE6() MODE7() PD
+GPIO197 = MODE0(GPIO197) MODE1(NCEB0) MODE2(EINT19) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO198 = MODE0(GPIO198) MODE1(NLD4) MODE2(EINT26) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO199 = MODE0(GPIO199) MODE1(NWEB) MODE2(EINT18) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO200 = MODE0(GPIO200) MODE1(NALE) MODE2(EINT16) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO201 = MODE0(GPIO201) MODE1(NLD15) MODE2(EINT5) MODE3(CLKM0) MODE4(PWM6) MODE5() MODE6() MODE7() PD
+GPIO202 = MODE0(GPIO202) MODE1(NLD14) MODE2(EINT4) MODE3(CLKM1) MODE4(PWM5) MODE5() MODE6() MODE7() PD
+GPIO203 = MODE0(GPIO203) MODE1(NLD2) MODE2(EINT24) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO204 = MODE0(GPIO204) MODE1(NRNB) MODE2(EINT21) MODE3() MODE4() MODE5() MODE6() MODE7() PU
+GPIO205 = MODE0(GPIO205) MODE1(NLD1) MODE2(EINT23) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO206 = MODE0(GPIO206) MODE1(NLD8) MODE2(EINT30) MODE3(UTXD3) MODE4(GPS_SYNC) MODE5() MODE6() MODE7() PD
+GPIO207 = MODE0(GPIO207) MODE1(NLD7) MODE2(EINT29) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO208 = MODE0(GPIO208) MODE1(NCLE) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO209 = MODE0(GPIO209) MODE1(NLD13) MODE2(EINT3) MODE3(CLKM2) MODE4(PWM4) MODE5() MODE6() MODE7() PD
+GPIO210 = MODE0(GPIO210) MODE1(NLD0) MODE2(EINT22) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO211 = MODE0(GPIO211) MODE1(CMDAT2) MODE2(EINT20) MODE3(CAM_CSD2_S1) MODE4(TBRXFS) MODE5() MODE6() MODE7() PD
+GPIO212 = MODE0(GPIO212) MODE1(CMMCLK) MODE2(EINT6) MODE3(CMMCLK_S1) MODE4() MODE5() MODE6() MODE7() PD
+GPIO213 = MODE0(GPIO213) MODE1(CMDAT7) MODE2(EINT15) MODE3(CAM_CSD3_S2) MODE4() MODE5() MODE6() MODE7() PD
+GPIO214 = MODE0(GPIO214) MODE1(CMDAT0) MODE2(EINT22) MODE3(CAM_CSD0_S1) MODE4(TBTXFS) MODE5() MODE6() MODE7() PD
+GPIO215 = MODE0(GPIO215) MODE1(CMDAT4) MODE2(EINT18) MODE3(CAM_CSD0_S2) MODE4() MODE5() MODE6() MODE7() PD
+GPIO216 = MODE0(GPIO216) MODE1(CMDAT6) MODE2(EINT16) MODE3(CAM_CSD2_S2) MODE4() MODE5() MODE6() MODE7() PD
+GPIO217 = MODE0(GPIO217) MODE1(CMDAT3) MODE2(EINT19) MODE3(CAM_CSD3_S1) MODE4() MODE5() MODE6() MODE7() PD
+GPIO218 = MODE0(GPIO218) MODE1(CMDAT8) MODE2(EINT23) MODE3() MODE4(DSP_GPO0) MODE5() MODE6() MODE7() PD
+GPIO219 = MODE0(GPIO219) MODE1(CMDAT9) MODE2(EINT24) MODE3() MODE4(DSP_GPO1) MODE5() MODE6() MODE7() PD
+GPIO220 = MODE0(GPIO220) MODE1(PWM4) MODE2(EINT9) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO221 = MODE0(GPIO221) MODE1(CMRST) MODE2(EINT12) MODE3(CMPDN_S2) MODE4() MODE5() MODE6() MODE7() PD
+GPIO222 = MODE0(GPIO222) MODE1(SCL_1) MODE2(EINT7) MODE3(SCL_1) MODE4() MODE5() MODE6(DBG_IN_32) MODE7() PU
+GPIO223 = MODE0(GPIO223) MODE1(CMDAT5) MODE2(EINT17) MODE3(CAM_CSD1_S2) MODE4() MODE5() MODE6() MODE7() PD
+GPIO224 = MODE0(GPIO224) MODE1(SDA_1) MODE2(EINT8) MODE3(SDA_1) MODE4() MODE5() MODE6() MODE7() PU
+GPIO225 = MODE0(GPIO225) MODE1(CMVREF) MODE2(EINT11) MODE3() MODE4() MODE5() MODE6() MODE7() PD
+GPIO226 = MODE0(GPIO226) MODE1(CMPCLK) MODE2(EINT13) MODE3(CAM_CSK_S1) MODE4() MODE5() MODE6() MODE7() PD
+GPIO227 = MODE0(GPIO227) MODE1(CMHREF) MODE2(EINT10) MODE3(CAM_CSK_S2) MODE4() MODE5() MODE6() MODE7() PD
+GPIO228 = MODE0(GPIO228) MODE1(CMPDN) MODE2(EINT14) MODE3(CMPDN_S1) MODE4() MODE5() MODE6() MODE7() PD
+GPIO229 = MODE0(GPIO229) MODE1(CMDAT1) MODE2(EINT21) MODE3(CAM_CSD1_S1) MODE4(TBRXEN) MODE5() MODE6() MODE7() PD
+GPIO230 = MODE0(GPIO230) MODE1(CMFLASH) MODE2(EINT26) MODE3(CMMCLK_S2) MODE4(DSP_GPO2) MODE5() MODE6() MODE7() PD
+GPIO231 = MODE0(GPIO231) MODE1(SRCLKENAI) MODE2() MODE3() MODE4() MODE5() MODE6() MODE7() PD
+
+[GPO]
+
+[EINT]
+EINT_COUNT = 29
+EINT_DEBOUNCE_TIME_COUNT = 29
+
+[EINT_EX_PIN]
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+30
+31
+
+[ADC]
+ADC_COUNT = 5
+
+[ADC_EX_PIN]
+0
+1
+2
+3
+4
+
+[KEYPAD]
+KEY_ROW = 8
+KEY_COLUMN = 9
+
+
diff --git a/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6236PMU.cmp b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6236PMU.cmp
new file mode 100644
index 0000000..1162d77
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6236PMU.cmp
@@ -0,0 +1,171 @@
+[PMIC_TABLE]
+NUM_LDO = 15
+
+[LDO_NAME1]
+LDO_NAME=VCORE
+[CONFIGURABLE1]
+CONFIG=YES
+[LDO_VOLTAGE_SEL1]
+1.2
+1.1
+1.0
+0.9
+[LDO_VOLTAGE_CAL1]
+CAL_STEP=20
+
+[LDO_NAME2]
+LDO_NAME=VIO
+[CONFIGURABLE2]
+CONFIG=NO
+[LDO_VOLTAGE_SEL2]
+2.8
+[LDO_VOLTAGE_CAL2]
+CAL_STEP=30
+
+[LDO_NAME3]
+LDO_NAME=VRF
+[CONFIGURABLE3]
+CONFIG=NO
+[LDO_VOLTAGE_SEL3]
+2.8
+[LDO_VOLTAGE_CAL3]
+CAL_STEP=30
+
+[LDO_NAME4]
+LDO_NAME=VA
+[CONFIGURABLE4]
+CONFIG=NO
+[LDO_VOLTAGE_SEL4]
+2.8
+[LDO_VOLTAGE_CAL4]
+CAL_STEP=30
+
+[LDO_NAME5]
+LDO_NAME=VTCXO
+[CONFIGURABLE5]
+CONFIG=NO
+[LDO_VOLTAGE_SEL5]
+2.8
+[LDO_VOLTAGE_CAL5]
+CAL_STEP=30
+
+[LDO_NAME6]
+LDO_NAME=VRTC
+[CONFIGURABLE6]
+CONFIG=NO
+[LDO_VOLTAGE_SEL6]
+2.6
+[LDO_VOLTAGE_CAL6]
+CAL_STEP=30
+
+[LDO_NAME7]
+LDO_NAME=VM
+[CONFIGURABLE7]
+CONFIG=NO
+[LDO_VOLTAGE_SEL7]
+2.8
+1.8
+[LDO_VOLTAGE_CAL7]
+CAL_STEP=30
+
+[LDO_NAME8]
+LDO_NAME=VSIM
+[CONFIGURABLE8]
+CONFIG=YES
+[LDO_VOLTAGE_SEL8]
+2.8
+1.8
+[LDO_VOLTAGE_CAL8]
+CAL_STEP=30
+
+[LDO_NAME9]
+LDO_NAME=VSIM2
+[CONFIGURABLE9]
+CONFIG=YES
+[LDO_VOLTAGE_SEL9]
+2.8
+2.5
+1.8
+1.3
+[LDO_VOLTAGE_CAL9]
+CAL_STEP=30
+
+[LDO_NAME10]
+LDO_NAME=VMC
+[CONFIGURABLE10]
+CONFIG=NO
+[LDO_VOLTAGE_SEL10]
+2.5
+1.8
+1.5
+[LDO_VOLTAGE_CAL10]
+CAL_STEP=30
+
+[LDO_NAME11]
+LDO_NAME=VBT
+[CONFIGURABLE11]
+CONFIG=NO
+[LDO_VOLTAGE_SEL11]
+2.8
+3.0
+[LDO_VOLTAGE_CAL11]
+CAL_STEP=30
+
+[LDO_NAME12]
+LDO_NAME=VUSB
+[CONFIGURABLE12]
+CONFIG=NO
+[LDO_VOLTAGE_SEL12]
+3.3
+[LDO_VOLTAGE_CAL12]
+CAL_STEP=30
+
+[LDO_NAME13]
+LDO_NAME=VCAMD
+[CONFIGURABLE13]
+CONFIG=NO
+[LDO_VOLTAGE_SEL13]
+2.8
+1.8
+1.5
+1.3
+[LDO_VOLTAGE_CAL13]
+CAL_STEP=30
+
+[LDO_NAME14]
+LDO_NAME=VCAMA
+[CONFIGURABLE14]
+CONFIG=NO
+[LDO_VOLTAGE_SEL14]
+2.8
+1.8
+1.5
+1.3
+[LDO_VOLTAGE_CAL14]
+CAL_STEP=30
+
+[LDO_NAME15]
+LDO_NAME=VIBR
+[CONFIGURABLE15]
+CONFIG=NO
+[LDO_VOLTAGE_SEL15]
+2.8
+1.8
+1.5
+1.3
+[LDO_VOLTAGE_CAL15]
+CAL_STEP=30
+
+[pmic_drv.h_HEADER]
+#ifndef _PMIC_DRV_H
+#define _PMIC_DRV_H
+
+[pmic_drv.h_TAILER]
+#endif /* _PMIC_DRV_H */
+
+[pmic_drv.c_HEADER]
+#ifdef __CUST_NEW__
+#include "pmic_drv.h"
+
+[pmic_drv.c_TAILER]
+#endif /* __CUST_NEW__ */
diff --git a/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6251PMUNONMP.cmp b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6251PMUNONMP.cmp
new file mode 100644
index 0000000..5b7439d
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6251PMUNONMP.cmp
@@ -0,0 +1,125 @@
+[PMIC_TABLE]
+NUM_LDO = 8
+
+[LDO_NAME1]
+LDO_NAME=VRF
+[CONFIGURABLE1]
+CONFIG=NO
+[LDO_VOLTAGE_SEL1]
+2.8
+[LDO_VOLTAGE_CAL1]
+CAL_STEP=20
+
+[LDO_NAME2]
+LDO_NAME=VTCXO
+[CONFIGURABLE2]
+CONFIG=NO
+[LDO_VOLTAGE_SEL2]
+2.8
+[LDO_VOLTAGE_CAL2]
+CAL_STEP=20
+
+[LDO_NAME3]
+LDO_NAME=VUSB
+[CONFIGURABLE3]
+CONFIG=NO
+[LDO_VOLTAGE_SEL3]
+3.3
+[LDO_VOLTAGE_CAL3]
+CAL_STEP=20
+[INTERNAL_USE3]
+INTERNAL = YES
+[INTERNAL_CAL_LEVEL3]
+INT_CAL_LEVEL = 0
+[INTERNAL_APPLICATION3]
+INT_APPLICATION=USB
+[INTERNAL_VOLT_SEL3]
+INT_VOLT_SEL = 3.3
+
+[LDO_NAME4]
+LDO_NAME=VSF
+[CONFIGURABLE4]
+CONFIG = NO
+[LDO_VOLTAGE_SEL4]
+1.8
+[LDO_VOLTAGE_CAL4]
+CAL_STEP=20
+[INTERNAL_USE4]
+INTERNAL = YES
+[INTERNAL_CAL_LEVEL4]
+INT_CAL_LEVEL = 0
+[INTERNAL_APPLICATION4]
+INT_APPLICATION=SF
+[INTERNAL_VOLT_SEL4]
+INT_VOLT_SEL = 1.8
+
+[LDO_NAME5]
+LDO_NAME=VSIM
+[CONFIGURABLE5]
+CONFIG=YES
+[LDO_VOLTAGE_SEL5]
+1.8
+3
+[LDO_VOLTAGE_CAL5]
+CAL_STEP=20
+
+[LDO_NAME6]
+LDO_NAME=VSIM2
+[CONFIGURABLE6]
+CONFIG=YES
+[LDO_VOLTAGE_SEL6]
+1.3
+1.5
+1.8
+2.5
+2.8
+3
+3.3
+[LDO_VOLTAGE_CAL6]
+CAL_STEP=20
+
+[LDO_NAME7]
+LDO_NAME=VIBR
+[CONFIGURABLE7]
+CONFIG=YES
+[LDO_VOLTAGE_SEL7]
+1.3
+1.5
+1.8
+2.5
+2.8
+3
+3.3
+[LDO_VOLTAGE_CAL7]
+CAL_STEP=20
+
+[LDO_NAME8]
+LDO_NAME=VFM
+[CONFIGURABLE8]
+CONFIG=YES
+[LDO_VOLTAGE_SEL8]
+1.3
+1.5
+1.8
+2.5
+2.8
+3
+3.3
+[LDO_VOLTAGE_CAL8]
+CAL_STEP=20
+
+
+
+[pmic_drv.h_HEADER]
+#ifndef _PMIC_DRV_H
+#define _PMIC_DRV_H
+
+[pmic_drv.h_TAILER]
+#endif /* _PMIC_DRV_H */
+
+[pmic_drv.c_HEADER]
+#ifdef __CUST_NEW__
+#include "pmic_drv.h"
+
+[pmic_drv.c_TAILER]
+#endif /* __CUST_NEW__ */
diff --git a/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6255PMUMP.cmp b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6255PMUMP.cmp
new file mode 100644
index 0000000..e0af8a5
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6255PMUMP.cmp
@@ -0,0 +1,121 @@
+[PMIC_TABLE]
+NUM_LDO = 8
+
+[LDO_NAME1]
+LDO_NAME=VRF
+[LDO_ENABLE_CONFIGURABLE1]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL1]
+2.8
+[SlEEP_VOLTAGE_CONFIGURABLE1]
+CONFIGURABLE = NO
+
+[LDO_NAME2]
+LDO_NAME=VCAMA
+[LDO_ENABLE_CONFIGURABLE2]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL2]
+1.5
+1.8
+2.5
+2.8
+[SlEEP_VOLTAGE_CONFIGURABLE2]
+CONFIGURABLE = NO
+
+[LDO_NAME3]
+LDO_NAME=VSIM
+[LDO_ENABLE_CONFIGURABLE3]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL3]
+1.8
+3.0
+[SlEEP_VOLTAGE_CONFIGURABLE3]
+CONFIGURABLE = NO
+
+[LDO_NAME4]
+LDO_NAME=VSIM2
+[LDO_ENABLE_CONFIGURABLE4]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL4]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE4]
+CONFIGURABLE = NO
+
+[LDO_NAME5]
+LDO_NAME=VCAMD
+[LDO_ENABLE_CONFIGURABLE5]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL5]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE5]
+CONFIGURABLE = NO
+
+[LDO_NAME6]
+LDO_NAME=VBT
+[LDO_ENABLE_CONFIGURABLE6]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL6]
+1.5
+1.8
+2.5
+2.8
+3.0
+3.1
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE6]
+CONFIGURABLE = NO
+
+[LDO_NAME7]
+LDO_NAME=VIBR
+[LDO_ENABLE_CONFIGURABLE7]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL7]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE7]
+CONFIGURABLE = NO
+
+[LDO_NAME8]
+LDO_NAME=VMC
+[LDO_ENABLE_CONFIGURABLE8]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL8]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE8]
+CONFIGURABLE = NO
+
+
+[pmic_drv.h_HEADER]
+#include "dcl.h"
+
+[pmic_drv.h_TAILER]
+
+[pmic_drv.c_HEADER]
+#include "dcl.h"
+#include "pmic_drv.h"
+
+[pmic_drv.c_TAILER]
+//end of pmic_drv
diff --git a/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6255PMUNONMP.cmp b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6255PMUNONMP.cmp
new file mode 100644
index 0000000..f60ca32
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6255PMUNONMP.cmp
@@ -0,0 +1,167 @@
+[PMIC_TABLE]
+NUM_LDO = 11
+
+[LDO_NAME1]
+LDO_NAME=VRF
+[CONFIGURABLE1]
+CONFIG=NO
+[LDO_VOLTAGE_SEL1]
+2.8
+[LDO_VOLTAGE_CAL1]
+CAL_STEP=20
+
+[LDO_NAME2]
+LDO_NAME=VTCXO
+[CONFIGURABLE2]
+CONFIG=NO
+[LDO_VOLTAGE_SEL2]
+2.8
+[LDO_VOLTAGE_CAL2]
+CAL_STEP=20
+
+[LDO_NAME3]
+LDO_NAME=VCAMA
+[CONFIGURABLE3]
+CONFIG=YES
+[LDO_VOLTAGE_SEL3]
+1.5
+1.8
+2.5
+2.8
+[LDO_VOLTAGE_CAL3]
+CAL_STEP=20
+
+[LDO_NAME4]
+LDO_NAME=VCAMD
+[CONFIGURABLE4]
+CONFIG=YES
+[LDO_VOLTAGE_SEL4]
+1.5
+1.8
+2.5
+2.8
+[LDO_VOLTAGE_CAL4]
+CAL_STEP=20
+
+[LDO_NAME5]
+LDO_NAME=VUSB
+[CONFIGURABLE5]
+CONFIG=NO
+[LDO_VOLTAGE_SEL5]
+3.3
+[LDO_VOLTAGE_CAL5]
+CAL_STEP=20
+[INTERNAL_USE5]
+INTERNAL = YES
+[INTERNAL_CAL_LEVEL5]
+INT_CAL_LEVEL = 0
+[INTERNAL_APPLICATION5]
+INT_APPLICATION=USB
+[INTERNAL_VOLT_SEL5]
+INT_VOLT_SEL = 3.3
+
+[LDO_NAME6]
+LDO_NAME=VBT
+[CONFIGURABLE6]
+CONFIG=YES
+[LDO_VOLTAGE_SEL6]
+2.8
+3.0
+3.1
+3.3
+[LDO_VOLTAGE_CAL6]
+CAL_STEP=20
+
+[LDO_NAME7]
+LDO_NAME=VSIM
+[CONFIGURABLE7]
+CONFIG=YES
+[LDO_VOLTAGE_SEL7]
+1.8
+3.0
+[LDO_VOLTAGE_CAL7]
+CAL_STEP=20
+
+[LDO_NAME8]
+LDO_NAME=VSIM2
+[CONFIGURABLE8]
+CONFIG=YES
+[LDO_VOLTAGE_SEL8]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[LDO_VOLTAGE_CAL8]
+CAL_STEP=20
+
+[LDO_NAME9]
+LDO_NAME=VIBR
+[CONFIGURABLE9]
+CONFIG=YES
+[LDO_VOLTAGE_SEL9]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[LDO_VOLTAGE_CAL9]
+CAL_STEP=20
+
+[LDO_NAME10]
+LDO_NAME=VMC
+[CONFIGURABLE10]
+CONFIG=YES
+[LDO_VOLTAGE_SEL10]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[LDO_VOLTAGE_CAL10]
+CAL_STEP=20
+
+[LDO_NAME11]
+LDO_NAME=VFM
+[CONFIGURABLE11]
+CONFIG=YES
+[LDO_VOLTAGE_SEL11]
+2.8
+[LDO_VOLTAGE_CAL11]
+CAL_STEP=20
+
+
+[pmic_drv.h_HEADER]
+#ifndef _PMIC_DRV_H
+#define _PMIC_DRV_H
+
+[pmic_drv.h_TAILER]
+#endif /* _PMIC_DRV_H */
+
+[pmic_drv.c_HEADER]
+#ifdef __CUST_NEW__
+#include "pmic_drv.h"
+
+[pmic_drv.c_TAILER]
+#endif /* __CUST_NEW__ */
+
+
+
+[pmic_drv.h_YuSu_HEADER]
+#ifndef _PMIC_DRV_H
+#define _PMIC_DRV_H
+
+[pmic_drv.h_YuSu_TAILER]
+#endif /* _PMIC_DRV_H */
+
+[pmic_drv.c_YuSu_HEADER]
+#include "pmic_drv.h"
+
+[pmic_drv.c_YuSu_TAILER]
+/* End of pmic_drv.c */
diff --git a/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6256PMUMP.cmp b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6256PMUMP.cmp
new file mode 100644
index 0000000..03d7c1c
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6256PMUMP.cmp
@@ -0,0 +1,121 @@
+[PMIC_TABLE]
+NUM_LDO = 8
+
+[LDO_NAME1]
+LDO_NAME=VRF
+[LDO_ENABLE_CONFIGURABLE1]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL1]
+2.8
+[SlEEP_VOLTAGE_CONFIGURABLE1]
+CONFIGURABLE = NO
+
+[LDO_NAME2]
+LDO_NAME=VCAMA
+[LDO_ENABLE_CONFIGURABLE2]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL2]
+1.5
+1.8
+2.5
+2.8
+[SlEEP_VOLTAGE_CONFIGURABLE2]
+CONFIGURABLE = NO
+
+[LDO_NAME3]
+LDO_NAME=VSIM
+[LDO_ENABLE_CONFIGURABLE3]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL3]
+1.8
+3.0
+[SlEEP_VOLTAGE_CONFIGURABLE3]
+CONFIGURABLE = NO
+
+[LDO_NAME4]
+LDO_NAME=VSIM2
+[LDO_ENABLE_CONFIGURABLE4]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL4]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE4]
+CONFIGURABLE = NO
+
+[LDO_NAME5]
+LDO_NAME=VCAMD
+[LDO_ENABLE_CONFIGURABLE5]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL5]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE5]
+CONFIGURABLE = NO
+
+[LDO_NAME6]
+LDO_NAME=VBT
+[LDO_ENABLE_CONFIGURABLE6]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL6]
+1.5
+1.8
+2.5
+2.8
+3.0
+3.1
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE6]
+CONFIGURABLE = NO
+
+[LDO_NAME7]
+LDO_NAME=VIBR
+[LDO_ENABLE_CONFIGURABLE7]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL7]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE7]
+CONFIGURABLE = NO
+
+[LDO_NAME8]
+LDO_NAME=VMC
+[LDO_ENABLE_CONFIGURABLE8]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL8]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE8]
+CONFIGURABLE = NO
+
+
+[pmic_drv.h_HEADER]
+#include "dcl.h"
+
+[pmic_drv.h_TAILER]
+
+[pmic_drv.c_HEADER]
+#include "dcl.h"
+#include "pmic_drv.h"
+
+[pmic_drv.c_TAILER]
+//end of pmic_drv
\ No newline at end of file
diff --git a/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6256PMUNONMP.cmp b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6256PMUNONMP.cmp
new file mode 100644
index 0000000..550bd60
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6256PMUNONMP.cmp
@@ -0,0 +1,121 @@
+[PMIC_TABLE]
+NUM_LDO = 8
+
+[LDO_NAME1]
+LDO_NAME=VRF
+[LDO_ENABLE_CONFIGURABLE1]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL1]
+2.8
+[SlEEP_VOLTAGE_CONFIGURABLE1]
+CONFIGURABLE = NO
+
+[LDO_NAME2]
+LDO_NAME=VCAMA
+[LDO_ENABLE_CONFIGURABLE2]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL2]
+1.5
+1.8
+2.5
+2.8
+[SlEEP_VOLTAGE_CONFIGURABLE2]
+CONFIGURABLE = NO
+
+[LDO_NAME3]
+LDO_NAME=VSIM
+[LDO_ENABLE_CONFIGURABLE3]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL3]
+1.8
+3.0
+[SlEEP_VOLTAGE_CONFIGURABLE3]
+CONFIGURABLE = NO
+
+[LDO_NAME4]
+LDO_NAME=VSIM2
+[LDO_ENABLE_CONFIGURABLE4]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL4]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE4]
+CONFIGURABLE = NO
+
+[LDO_NAME5]
+LDO_NAME=VCAMD
+[LDO_ENABLE_CONFIGURABLE5]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL5]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE5]
+CONFIGURABLE = NO
+
+[LDO_NAME6]
+LDO_NAME=VBT
+[LDO_ENABLE_CONFIGURABLE6]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL6]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE6]
+CONFIGURABLE = NO
+
+[LDO_NAME7]
+LDO_NAME=VIBR
+[LDO_ENABLE_CONFIGURABLE7]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL7]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE7]
+CONFIGURABLE = NO
+
+[LDO_NAME8]
+LDO_NAME=VMC
+[LDO_ENABLE_CONFIGURABLE8]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL8]
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE8]
+CONFIGURABLE = NO
+
+
+[pmic_drv.h_HEADER]
+#include "dcl.h"
+
+[pmic_drv.h_TAILER]
+
+[pmic_drv.c_HEADER]
+#include "dcl.h"
+#include "pmic_drv.h"
+
+[pmic_drv.c_TAILER]
+//end of pmic_drv
\ No newline at end of file
diff --git a/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6276MPMUNONMP.cmp b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6276MPMUNONMP.cmp
new file mode 100644
index 0000000..ad15ce3
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6276MPMUNONMP.cmp
@@ -0,0 +1,185 @@
+[PMIC_TABLE]
+NUM_LDO = 13
+
+[LDO_NAME1]
+LDO_NAME=VRF
+[CONFIGURABLE1]
+CONFIG=NO
+[LDO_VOLTAGE_SEL1]
+2.85
+[LDO_VOLTAGE_CAL1]
+CAL_STEP=20
+
+[LDO_NAME2]
+LDO_NAME=VTCXO
+[CONFIGURABLE2]
+CONFIG=NO
+[LDO_VOLTAGE_SEL2]
+2.75
+[LDO_VOLTAGE_CAL2]
+CAL_STEP=20
+
+[LDO_NAME3]
+LDO_NAME=VCAMA
+[CONFIGURABLE3]
+CONFIG=YES
+[LDO_VOLTAGE_SEL3]
+1.5
+1.8
+2.5
+2.8
+[LDO_VOLTAGE_CAL3]
+CAL_STEP=20
+
+[LDO_NAME4]
+LDO_NAME=VCAMD
+[CONFIGURABLE4]
+CONFIG=YES
+[LDO_VOLTAGE_SEL4]
+1.3
+1.5
+1.8
+2.5
+2.8
+3
+3.3
+[LDO_VOLTAGE_CAL4]
+CAL_STEP=20
+
+
+[LDO_NAME5]
+LDO_NAME=VUSB
+[CONFIGURABLE5]
+CONFIG=NO
+[LDO_VOLTAGE_SEL5]
+3.3
+[LDO_VOLTAGE_CAL5]
+CAL_STEP=20
+[INTERNAL_USE5]
+INTERNAL = YES
+[INTERNAL_CAL_LEVEL5]
+INT_CAL_LEVEL = 0
+[INTERNAL_APPLICATION5]
+INT_APPLICATION=USB
+[INTERNAL_VOLT_SEL5]
+INT_VOLT_SEL = 3.3
+
+[LDO_NAME6]
+LDO_NAME=VBT
+[CONFIGURABLE6]
+CONFIG=YES
+[LDO_VOLTAGE_SEL6]
+1.5
+1.8
+2.5
+2.8
+3.1
+3
+3.3
+[LDO_VOLTAGE_CAL6]
+CAL_STEP=20
+
+[LDO_NAME7]
+LDO_NAME=VSIM
+[CONFIGURABLE7]
+CONFIG=YES
+[LDO_VOLTAGE_SEL7]
+1.8
+3
+[LDO_VOLTAGE_CAL7]
+CAL_STEP=20
+
+[LDO_NAME8]
+LDO_NAME=VSIM2
+[CONFIGURABLE8]
+CONFIG=YES
+[LDO_VOLTAGE_SEL8]
+1.3
+1.5
+1.8
+2.5
+2.8
+3
+3.3
+[LDO_VOLTAGE_CAL8]
+CAL_STEP=20
+
+[LDO_NAME9]
+LDO_NAME=VIBR
+[CONFIGURABLE9]
+CONFIG=YES
+[LDO_VOLTAGE_SEL9]
+1.3
+1.5
+1.8
+2.5
+2.8
+3
+3.3
+[LDO_VOLTAGE_CAL9]
+CAL_STEP=20
+
+[LDO_NAME10]
+LDO_NAME=VMC
+[CONFIGURABLE10]
+CONFIG=YES
+[LDO_VOLTAGE_SEL10]
+1.3
+1.5
+1.8
+2.5
+2.8
+3
+3.3
+[LDO_VOLTAGE_CAL10]
+CAL_STEP=20
+
+[LDO_NAME11]
+LDO_NAME=VCAMA2
+[CONFIGURABLE11]
+CONFIG=YES
+[LDO_VOLTAGE_SEL11]
+1.5
+1.8
+2.5
+2.8
+[LDO_VOLTAGE_CAL11]
+CAL_STEP=20
+
+[LDO_NAME12]
+LDO_NAME=VCAMD2
+[CONFIGURABLE12]
+CONFIG=YES
+[LDO_VOLTAGE_SEL12]
+1.3
+1.5
+1.8
+2.5
+2.8
+3
+3.3
+[LDO_VOLTAGE_CAL12]
+CAL_STEP=20
+
+[LDO_NAME13]
+LDO_NAME=VFM
+[CONFIGURABLE13]
+CONFIG=YES
+[LDO_VOLTAGE_SEL13]
+2.8
+[LDO_VOLTAGE_CAL13]
+CAL_STEP=20
+
+[pmic_drv.h_HEADER]
+#ifndef _PMIC_DRV_H
+#define _PMIC_DRV_H
+
+[pmic_drv.h_TAILER]
+#endif /* _PMIC_DRV_H */
+
+[pmic_drv.c_HEADER]
+#ifdef __CUST_NEW__
+#include "pmic_drv.h"
+
+[pmic_drv.c_TAILER]
+#endif /* __CUST_NEW__ */
diff --git a/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6276PMUNONMP.cmp b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6276PMUNONMP.cmp
new file mode 100644
index 0000000..ad15ce3
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6276PMUNONMP.cmp
@@ -0,0 +1,185 @@
+[PMIC_TABLE]
+NUM_LDO = 13
+
+[LDO_NAME1]
+LDO_NAME=VRF
+[CONFIGURABLE1]
+CONFIG=NO
+[LDO_VOLTAGE_SEL1]
+2.85
+[LDO_VOLTAGE_CAL1]
+CAL_STEP=20
+
+[LDO_NAME2]
+LDO_NAME=VTCXO
+[CONFIGURABLE2]
+CONFIG=NO
+[LDO_VOLTAGE_SEL2]
+2.75
+[LDO_VOLTAGE_CAL2]
+CAL_STEP=20
+
+[LDO_NAME3]
+LDO_NAME=VCAMA
+[CONFIGURABLE3]
+CONFIG=YES
+[LDO_VOLTAGE_SEL3]
+1.5
+1.8
+2.5
+2.8
+[LDO_VOLTAGE_CAL3]
+CAL_STEP=20
+
+[LDO_NAME4]
+LDO_NAME=VCAMD
+[CONFIGURABLE4]
+CONFIG=YES
+[LDO_VOLTAGE_SEL4]
+1.3
+1.5
+1.8
+2.5
+2.8
+3
+3.3
+[LDO_VOLTAGE_CAL4]
+CAL_STEP=20
+
+
+[LDO_NAME5]
+LDO_NAME=VUSB
+[CONFIGURABLE5]
+CONFIG=NO
+[LDO_VOLTAGE_SEL5]
+3.3
+[LDO_VOLTAGE_CAL5]
+CAL_STEP=20
+[INTERNAL_USE5]
+INTERNAL = YES
+[INTERNAL_CAL_LEVEL5]
+INT_CAL_LEVEL = 0
+[INTERNAL_APPLICATION5]
+INT_APPLICATION=USB
+[INTERNAL_VOLT_SEL5]
+INT_VOLT_SEL = 3.3
+
+[LDO_NAME6]
+LDO_NAME=VBT
+[CONFIGURABLE6]
+CONFIG=YES
+[LDO_VOLTAGE_SEL6]
+1.5
+1.8
+2.5
+2.8
+3.1
+3
+3.3
+[LDO_VOLTAGE_CAL6]
+CAL_STEP=20
+
+[LDO_NAME7]
+LDO_NAME=VSIM
+[CONFIGURABLE7]
+CONFIG=YES
+[LDO_VOLTAGE_SEL7]
+1.8
+3
+[LDO_VOLTAGE_CAL7]
+CAL_STEP=20
+
+[LDO_NAME8]
+LDO_NAME=VSIM2
+[CONFIGURABLE8]
+CONFIG=YES
+[LDO_VOLTAGE_SEL8]
+1.3
+1.5
+1.8
+2.5
+2.8
+3
+3.3
+[LDO_VOLTAGE_CAL8]
+CAL_STEP=20
+
+[LDO_NAME9]
+LDO_NAME=VIBR
+[CONFIGURABLE9]
+CONFIG=YES
+[LDO_VOLTAGE_SEL9]
+1.3
+1.5
+1.8
+2.5
+2.8
+3
+3.3
+[LDO_VOLTAGE_CAL9]
+CAL_STEP=20
+
+[LDO_NAME10]
+LDO_NAME=VMC
+[CONFIGURABLE10]
+CONFIG=YES
+[LDO_VOLTAGE_SEL10]
+1.3
+1.5
+1.8
+2.5
+2.8
+3
+3.3
+[LDO_VOLTAGE_CAL10]
+CAL_STEP=20
+
+[LDO_NAME11]
+LDO_NAME=VCAMA2
+[CONFIGURABLE11]
+CONFIG=YES
+[LDO_VOLTAGE_SEL11]
+1.5
+1.8
+2.5
+2.8
+[LDO_VOLTAGE_CAL11]
+CAL_STEP=20
+
+[LDO_NAME12]
+LDO_NAME=VCAMD2
+[CONFIGURABLE12]
+CONFIG=YES
+[LDO_VOLTAGE_SEL12]
+1.3
+1.5
+1.8
+2.5
+2.8
+3
+3.3
+[LDO_VOLTAGE_CAL12]
+CAL_STEP=20
+
+[LDO_NAME13]
+LDO_NAME=VFM
+[CONFIGURABLE13]
+CONFIG=YES
+[LDO_VOLTAGE_SEL13]
+2.8
+[LDO_VOLTAGE_CAL13]
+CAL_STEP=20
+
+[pmic_drv.h_HEADER]
+#ifndef _PMIC_DRV_H
+#define _PMIC_DRV_H
+
+[pmic_drv.h_TAILER]
+#endif /* _PMIC_DRV_H */
+
+[pmic_drv.c_HEADER]
+#ifdef __CUST_NEW__
+#include "pmic_drv.h"
+
+[pmic_drv.c_TAILER]
+#endif /* __CUST_NEW__ */
diff --git a/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6327PMUMP.cmp b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6327PMUMP.cmp
new file mode 100644
index 0000000..00f93d8
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6327PMUMP.cmp
@@ -0,0 +1,36 @@
+[PMIC_TABLE]
+NUM_LDO = 2
+
+[LDO_NAME1]
+LDO_NAME=VSIM
+[LDO_ENABLE_CONFIGURABLE1]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL1]
+1.8
+3.0
+[SlEEP_VOLTAGE_CONFIGURABLE1]
+CONFIGURABLE = NO
+
+[LDO_NAME2]
+LDO_NAME=VMC
+[LDO_ENABLE_CONFIGURABLE2]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL2]
+2.8
+3.0
+3.1
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE2]
+CONFIGURABLE = NO
+
+[pmic_drv.h_HEADER]
+#include "dcl.h"
+
+[pmic_drv.h_TAILER]
+
+[pmic_drv.c_HEADER]
+#include "dcl.h"
+#include "pmic_drv.h"
+
+[pmic_drv.c_TAILER]
+//end of pmic_drv
diff --git a/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6339PMUMP.cmp b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6339PMUMP.cmp
new file mode 100644
index 0000000..0f3b0ac
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/PMIC_MT6339PMUMP.cmp
@@ -0,0 +1,95 @@
+[PMIC_TABLE]
+NUM_LDO = 5
+
+[LDO_NAME1]
+LDO_NAME=VMC
+[LDO_ENABLE_CONFIGURABLE1]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL1]
+1.2
+1.3
+1.5
+1.8
+2.0
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE1]
+CONFIGURABLE = NO
+
+[LDO_NAME2]
+LDO_NAME=VMCH
+[LDO_ENABLE_CONFIGURABLE2]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL2]
+1.2
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE2]
+CONFIGURABLE = NO
+
+[LDO_NAME3]
+LDO_NAME=VSIM
+[LDO_ENABLE_CONFIGURABLE3]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL3]
+1.2
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE3]
+CONFIGURABLE = NO
+
+
+[LDO_NAME4]
+LDO_NAME=VSIM2
+[LDO_ENABLE_CONFIGURABLE4]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL4]
+1.2
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE4]
+CONFIGURABLE = NO
+
+[LDO_NAME5]
+LDO_NAME=VIO28
+[LDO_ENABLE_CONFIGURABLE5]
+CONFIGURABLE = YES
+[LDO_VOLTAGE_SEL5]
+1.2
+1.3
+1.5
+1.8
+2.5
+2.8
+3.0
+3.3
+[SlEEP_VOLTAGE_CONFIGURABLE5]
+CONFIGURABLE = NO
+
+[pmic_drv.h_HEADER]
+#include "dcl.h"
+
+[pmic_drv.h_TAILER]
+
+[pmic_drv.c_HEADER]
+#include "dcl.h"
+#include "pmic_drv.h"
+
+[pmic_drv.c_TAILER]
+//end of pmic_drv
diff --git a/mcu/custom/driver/drv/Drv_Tool/PMIC_NC.cmp b/mcu/custom/driver/drv/Drv_Tool/PMIC_NC.cmp
new file mode 100644
index 0000000..a300c6f
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/PMIC_NC.cmp
@@ -0,0 +1,18 @@
+[PMIC_TABLE]
+NUM_LDO = 0
+
+
+[pmic_drv.h_HEADER]
+#ifndef _PMIC_DRV_H
+#define _PMIC_DRV_H
+
+[pmic_drv.h_TAILER]
+#endif /* _PMIC_DRV_H */
+
+[pmic_drv.c_HEADER]
+#ifdef __CUST_NEW__
+#include "pmic_drv.h"
+#include "dcl.h"
+
+[pmic_drv.c_TAILER]
+#endif /* __CUST_NEW__ */
diff --git a/mcu/custom/driver/drv/Drv_Tool/PMIC_NCPMU.cmp b/mcu/custom/driver/drv/Drv_Tool/PMIC_NCPMU.cmp
new file mode 100644
index 0000000..a300c6f
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/PMIC_NCPMU.cmp
@@ -0,0 +1,18 @@
+[PMIC_TABLE]
+NUM_LDO = 0
+
+
+[pmic_drv.h_HEADER]
+#ifndef _PMIC_DRV_H
+#define _PMIC_DRV_H
+
+[pmic_drv.h_TAILER]
+#endif /* _PMIC_DRV_H */
+
+[pmic_drv.c_HEADER]
+#ifdef __CUST_NEW__
+#include "pmic_drv.h"
+#include "dcl.h"
+
+[pmic_drv.c_TAILER]
+#endif /* __CUST_NEW__ */
diff --git a/mcu/custom/driver/drv/Drv_Tool/TK6280.fig b/mcu/custom/driver/drv/Drv_Tool/TK6280.fig
new file mode 100644
index 0000000..2c028f9
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/TK6280.fig
@@ -0,0 +1,63 @@
+[Chip Type]
+Chip = TK6280
+GPIO_ModeNum = 4
+GPIO_Pull_Sel=1
+PMIC_Config=0
+PMIC_Volt_Format = 1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(EINT3) MODE2() MODE3() PD
+GPIO1 = MODE0(GPIO1) MODE1(EINT2) MODE2() MODE3() PD
+GPIO2 = MODE0(GPIO2) MODE1() MODE2(USB_DRVVBUS) MODE3(DEBUG0) PD
+GPIO3 = MODE0(GPIO3) MODE1() MODE2(CLKM0) MODE3(DEBUG1) PD
+GPIO4 = MODE0(GPIO4) MODE1() MODE2(CLKM1) MODE3(DEBUG2) PD
+GPIO5 = MODE0(GPIO5) MODE1() MODE2(CLKM2) MODE3(DEBUG3) PD
+GPIO6 = MODE0(GPIO6) MODE1() MODE2(CLKM3) MODE3(DEBUG4) PD
+GPIO7 = MODE0(GPIO7) MODE1() MODE2(CLKM4) MODE3(DEBUG5) PD
+GPIO8 = MODE0(GPIO8) MODE1() MODE2(CLKM5) MODE3(DEBUG6) PD
+GPIO9 = MODE0(GPIO9) MODE1() MODE2() MODE3(DEBUG7) PD
+GPIO10 = MODE0(GPIO10) MODE1(FPGA_IRQ30_B) MODE2() MODE3() PD
+GPIO11 = MODE0(GPIO11) MODE1(FPGA_IRQ29_B) MODE2() MODE3() PD
+GPIO12 = MODE0(GPIO12) MODE1(FPGA_IRQ28_B) MODE2() MODE3() PD
+GPIO13 = MODE0(GPIO13) MODE1(FPGA_IRQ27_B) MODE2() MODE3() PD
+GPIO14 = MODE0(GPIO14) MODE1(FPGA_IRQ26_B) MODE2() MODE3() PD
+GPIO15 = MODE0(GPIO15) MODE1(FPGA_IRQ25_B) MODE2() MODE3() PD
+GPIO16 = MODE0(GPIO16) MODE1(FPGA_IRQ24_B) MODE2() MODE3() PD
+GPIO17 = MODE0(GPIO17) MODE1(FPGA_IRQ23_B) MODE2() MODE3() PD
+GPIO18 = MODE0(GPIO18) MODE1(FPGA_IRQ22_B) MODE2() MODE3() PD
+GPIO19 = MODE0(GPIO19) MODE1(FPGA_IRQ21_B) MODE2() MODE3() PD
+GPIO20 = MODE0(GPIO20) MODE1(FPGA_IRQ20_B) MODE2() MODE3() PD
+GPIO21 = MODE0(GPIO21) MODE1(FPGA_IRQ19_B) MODE2() MODE3() PD
+GPIO22 = MODE0(GPIO22) MODE1(FPGA_IRQ18_B) MODE2() MODE3() PD
+GPIO23 = MODE0(GPIO23) MODE1(FPGA_IRQ17_B) MODE2() MODE3() PD
+GPIO24 = MODE0(GPIO24) MODE1(FPGA_IRQ16_B) MODE2() MODE3() PD
+GPIO25 = MODE0(GPIO25) MODE1(FPGA_IRQ15_B) MODE2() MODE3() PD
+GPIO26 = MODE0(GPIO26) MODE1(FPGA_IRQ14_B) MODE2() MODE3() PD
+GPIO27 = MODE0(GPIO27) MODE1(NCE1_B) MODE2(LPECS2_B) MODE3() PD
+
+
+[GPO]
+
+[EINT]
+EINT_COUNT=4
+EINT_DEBOUNCE_TIME_COUNT=4
+
+[EINT_EX_PIN]
+0
+1
+2
+3
+
+[EINT_INT_PIN]
+
+
+[ADC]
+ADC_COUNT = 1
+
+[ADC_INT_CH]
+
+[ADC_EX_CH]
+
+[KEYPAD]
+KEY_ROW=8
+KEY_COLUMN=9
\ No newline at end of file
diff --git a/mcu/custom/driver/drv/Drv_Tool/TK6516.fig b/mcu/custom/driver/drv/Drv_Tool/TK6516.fig
new file mode 100644
index 0000000..476b277
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/TK6516.fig
@@ -0,0 +1,22 @@
+[Chip Type]
+Chip = TK6516
+GPIO_Pull_Sel=1
+
+[GPIO]
+GPIO0 = MODE0(GPIO0) MODE1(BPI_BUS6) MODE2() MODE3() PUPD
+GPIO1 = MODE0(GPIO1) MODE1(BPI_BUS7) MODE2() MODE3() PUPD
+GPIO2 = MODE0(GPIO2) MODE1(BPI_BUS8) MODE2() MODE3() PUPD
+GPIO3 = MODE0(GPIO3) MODE1(BPI_BUS9) MODE2() MODE3() PUPD
+
+[GPO]
+
+[EINT]
+EINT_COUNT=24
+EINT_DEBOUNE_TIME_COUNT=24
+
+[ADC]
+ADC_COUNT=7
+
+[KEYPAD]
+KEY_ROW=0
+KEY_COLUMN=0
diff --git a/mcu/custom/driver/drv/Drv_Tool/UEM.cmp b/mcu/custom/driver/drv/Drv_Tool/UEM.cmp
new file mode 100644
index 0000000..0a45a0e
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/UEM.cmp
@@ -0,0 +1,13 @@
+[UEM]
+MAX_NETNAME_TEXT = 32
+
+[uem_drv.c_HEADER]
+#ifdef __CUST_NEW__
+#include "kal_public_api.h"
+#include "gpio_drv.h"
+#include "custom_em.h"
+#include "custom_equipment.h"
+
+
+[uem_drv.c_TAILER]
+#endif /* __CUST_NEW__ */
diff --git a/mcu/custom/driver/drv/Drv_Tool/iomux.cmp b/mcu/custom/driver/drv/Drv_Tool/iomux.cmp
new file mode 100644
index 0000000..ddb3d88
--- /dev/null
+++ b/mcu/custom/driver/drv/Drv_Tool/iomux.cmp
@@ -0,0 +1,2 @@
+[iomux_drv.c_HEADER]
+#include "iomux_drv.h"
diff --git a/mcu/custom/driver/drv/misc_drv/MT2735_IVT/DEFAULT/temp.txt b/mcu/custom/driver/drv/misc_drv/MT2735_IVT/DEFAULT/temp.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/MT2735_IVT/DEFAULT/temp.txt
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/MT6302_custom.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/MT6302_custom.c
new file mode 100644
index 0000000..3301ba8
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/MT6302_custom.c
@@ -0,0 +1,439 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * MT6302_interface.C
+ *
+ * Project:
+ * --------
+ * Gemini
+ *
+ * Description:
+ * ------------
+ * this file is custom implementation of MT6302 SPI interface
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "drv_comm.h"
+#include "gpio_sw.h"
+#include "MT6302_spi.h"
+#include "MT6302_custom.h"
+#include "kal_public_api.h"
+
+#ifndef __CUST_NEW__
+kal_uint8 gpio_MT6302_cs_pin=32;
+kal_uint8 gpio_MT6302_clk_pin=29;
+kal_uint8 gpio_MT6302_dat_pin=31;
+
+//for gemini plus 2rd 6302 spi pins
+kal_uint8 gpio_MT6302_cs2_pin=32;
+kal_uint8 gpio_MT6302_clk2_pin=29;
+kal_uint8 gpio_MT6302_dat2_pin=31;
+#else
+extern const char gpio_MT6302_cs_pin;
+extern const char gpio_MT6302_clk_pin;
+extern const char gpio_MT6302_dat_pin;
+
+//for gemini plus 2rd 6302 spi pins
+extern const char gpio_MT6302_cs2_pin;
+extern const char gpio_MT6302_clk2_pin;
+extern const char gpio_MT6302_dat2_pin;
+#endif
+
+/*
+* FUNCTION
+* MT6302_getLCDSerialInterface
+*
+* DESCRIPTION
+* This function is to return which LCD serial interface we use to implement SPI
+* If customer doesn't use LCD interface, this function should return 0xff
+*
+* CALLS
+*
+* PARAMETERS
+* none
+*
+* RETURNS
+* 0~maximum number of serial interface BB has: the interface we use
+* 0xff: customer doesn't use LCD interface to implement SPI
+*
+*/
+kal_uint32 MT6302_getLCDSerialInterface(kal_uint32 MT6302Interface)
+{
+/* dual SIMIF dual SIM solution doesn't need this
+ if(0 == MT6302Interface){
+ return 1;
+ }
+ else
+*/
+ {
+ ASSERT(0);
+ return 0;
+ }
+}
+
+
+/*
+* FUNCTION
+* MT6302_getSPIInterface
+*
+* DESCRIPTION
+* This function is to return which method do we use to implement SPI interface
+*
+* CALLS
+*
+* PARAMETERS
+* none
+*
+* RETURNS
+* 0: use LCD serial interface
+* 1: use GPIO
+*
+* GLOBALS AFFECTED
+* external_global
+*/
+kal_uint32 MT6302_getSPIInterface(kal_uint32 MT6302Interface)
+{
+/* dual SIMIF dual SIM solution doesn't need this
+ if(0 == MT6302Interface)
+ return MT6302_SPI_USE_LCD; //MT6302_SPI_USE_LCD
+ else if(1 == MT6302Interface)
+ return MT6302_SPI_USE_DEDICATED_GPIO;
+ else
+*/
+ ASSERT(0);
+ //return MT6302_SPI_USE_LCD;
+ //return MT6302_SPI_USE_GPIO;
+ //return MT6302_SPI_USE_DEDICATED_GPIO;
+ return 0;
+}
+
+
+/*
+* FUNCTION
+* MT6302_checkSPIMode
+*
+* DESCRIPTION
+* This function is check the SPI 3 pins are in correct mode, no matter use LCD or GPIO to implement
+* customer should add its check code here, or just return kal_true in case they don't want to protect
+*
+* CALLS
+*
+* PARAMETERS
+* none
+*
+* RETURNS
+* kal_true: control pins are all in correct mode
+* kal_false: control pins are not in correct mode
+*
+*/
+kal_bool MT6302_checkSPIMode(kal_uint32 MT6302Interface)
+{
+/* dual SIMIF dual SIM solution doesn't need this
+ if(MT6302Interface == 0)
+ {
+ if(MT6302_SPI_USE_LCD == MT6302_getSPIInterface(MT6302Interface))
+ {
+ //16 is SPI clk, 18 is SPI dat, 20 is SPI cs
+ //14 is SPI clk, 16 is SPI dat, 18 is SPI cs in MT6238
+ if(1 != GPIO_ReturnMode(46) || 1 != GPIO_ReturnMode(39) || 1 != GPIO_ReturnMode(40))
+ return KAL_FALSE;
+ else
+ return KAL_TRUE;
+ }
+ else if(MT6302_SPI_USE_GPIO == MT6302_getSPIInterface(MT6302Interface) || MT6302_SPI_USE_DEDICATED_GPIO == MT6302_getSPIInterface(MT6302Interface))
+ {
+ if(0 != GPIO_ReturnMode(MT6302_CS_GPIO_NO) || \
+ 0 != GPIO_ReturnMode(MT6302_CLK_GPIO_NO) || \
+ 0 != GPIO_ReturnMode(MT6302_DAT_GPIO_NO) || \
+ 1 != GPIO_ReturnDir(MT6302_CS_GPIO_NO) || \
+ 1 != GPIO_ReturnDir(MT6302_CLK_GPIO_NO) || \
+ 1 != GPIO_ReturnDir(MT6302_DAT_GPIO_NO) || \
+ 1 != GPIO_ReturnDout(MT6302_CS_GPIO_NO) || \
+ 0 != GPIO_ReturnDout(MT6302_CLK_GPIO_NO) || \
+ 0 != GPIO_ReturnDout(MT6302_DAT_GPIO_NO))
+ return KAL_FALSE;
+ else
+ return KAL_TRUE;
+ }
+ }
+ else if(MT6302Interface == 1)
+ {
+ if(MT6302_SPI_USE_LCD == MT6302_getSPIInterface(MT6302Interface))
+ {
+ //16 is SPI clk, 18 is SPI dat, 20 is SPI cs
+ //14 is SPI clk, 16 is SPI dat, 18 is SPI cs in MT6238
+ if(1 != GPIO_ReturnMode(46) || 1 != GPIO_ReturnMode(39) || 1 != GPIO_ReturnMode(40))
+ return KAL_FALSE;
+ else
+ return KAL_TRUE;
+ }
+ else if(MT6302_SPI_USE_GPIO == MT6302_getSPIInterface(MT6302Interface) || MT6302_SPI_USE_DEDICATED_GPIO == MT6302_getSPIInterface(MT6302Interface))
+ {
+ //if(0 != GPIO_ReturnMode(MT6302_CS2_GPIO_NO) || \
+ //0 != GPIO_ReturnMode(MT6302_CLK2_GPIO_NO) || \
+ //0 != GPIO_ReturnMode(MT6302_DAT2_GPIO_NO) || \
+ //1 != GPIO_ReturnDir(MT6302_CS2_GPIO_NO) || \
+ //1 != GPIO_ReturnDir(MT6302_CLK2_GPIO_NO) || \
+ //1 != GPIO_ReturnDir(MT6302_DAT2_GPIO_NO) || \
+ //1 != GPIO_ReturnDout(MT6302_CS2_GPIO_NO) || \
+ //0 != GPIO_ReturnDout(MT6302_CLK2_GPIO_NO) || \
+ //0 != GPIO_ReturnDout(MT6302_DAT2_GPIO_NO))
+ // return KAL_FALSE;
+ //else
+ // return KAL_TRUE;
+ ASSERT(0);
+ }
+ }
+ else
+*/
+ ASSERT(0);
+ return KAL_FALSE;
+}
+
+
+
+/*
+* FUNCTION
+* MT6302_getGPIOCLK
+*
+* DESCRIPTION
+* This function is to return which GPIO we use to implement SPI CLK
+* If customer doesn't GPIO to implement SPI, this function should return 0xff
+* This function is only work when customer used GPIO to implement SPI and CUSTOM_NEW is not defined.
+*
+* CALLS
+*
+* PARAMETERS
+* none
+*
+* RETURNS
+* 0~maximum number of GPIO BB has: the GPIO we use
+* 0xff: customer doesn't use GPIO to implement SPI CLK
+*
+*/
+kal_uint32 MT6302_getGPIOCLK(kal_uint32 MT6302Interface)
+{
+/* dual SIMIF dual SIM solution doesn't need this
+ //return 0xff;
+ if(0 == MT6302Interface)
+ return MT6302_CLK_GPIO_NO;
+ else if(1 == MT6302Interface){
+ //return MT6302_CLK2_GPIO_NO;
+ ASSERT(0);
+ }
+ else
+*/
+ ASSERT(0);
+ return 0;
+}
+
+/*
+* FUNCTION
+* MT6302_getGPIOCLK
+*
+* DESCRIPTION
+* This function is to return which GPIO we use to implement SPI CLK
+* If customer doesn't GPIO to implement SPI, this function should return 0xff
+* This function is only work when customer used GPIO to implement SPI and CUSTOM_NEW is not defined.
+*
+* CALLS
+*
+* PARAMETERS
+* none
+*
+* RETURNS
+* 0~maximum number of GPIO BB has: the GPIO we use
+* 0xff: customer doesn't use GPIO to implement SPI CLK
+*
+*/
+kal_uint32 MT6302_getGPIOCS(kal_uint32 MT6302Interface)
+{
+/* dual SIMIF dual SIM solution doesn't need this
+ //return 0xff;
+ if(0 == MT6302Interface)
+ return MT6302_CS_GPIO_NO;
+ else if(1 == MT6302Interface){
+ //return MT6302_CS2_GPIO_NO;
+ ASSERT(0);
+ }
+ else
+*/
+ ASSERT(0);
+ return 0;
+}
+
+/*
+* FUNCTION
+* MT6302_getGPIOCLK
+*
+* DESCRIPTION
+* This function is to return which GPIO we use to implement SPI CLK
+* If customer doesn't GPIO to implement SPI, this function should return 0xff
+* This function is only work when customer used GPIO to implement SPI and CUSTOM_NEW is not defined.
+*
+* CALLS
+*
+* PARAMETERS
+* none
+*
+* RETURNS
+* 0~maximum number of GPIO BB has: the GPIO we use
+* 0xff: customer doesn't use GPIO to implement SPI CLK
+*
+*/
+kal_uint32 MT6302_getGPIODAT(kal_uint32 MT6302Interface)
+{
+/* dual SIMIF dual SIM solution doesn't need this
+ //return 0xff;
+ if(0 == MT6302Interface)
+ return MT6302_DAT_GPIO_NO;
+ else if(1 == MT6302Interface){
+ //return MT6302_DAT2_GPIO_NO;
+ ASSERT(0);
+ }
+ else
+*/
+ ASSERT(0);
+ return 0;
+}
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/MT6302_custom.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/MT6302_custom.h
new file mode 100644
index 0000000..77b1877
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/MT6302_custom.h
@@ -0,0 +1,134 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * MT6302_custom.h
+ *
+ * Project:
+ * --------
+ * Gemini
+ *
+ * Description:
+ * ------------
+ * this file is the header file of MT6302 custom control
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __MT6302_CUSTOM_H__
+#define __MT6302_CUSTOM_H__
+
+#ifndef __CUST_NEW__
+extern kal_uint8 gpio_MT6302_cs_pin;
+extern kal_uint8 gpio_MT6302_clk_pin;
+extern kal_uint8 gpio_MT6302_dat_pin;
+#else
+extern const char gpio_MT6302_cs_pin;
+extern const char gpio_MT6302_clk_pin;
+extern const char gpio_MT6302_dat_pin;
+#endif
+
+#define MT6302_CS_GPIO_NO gpio_MT6302_cs_pin
+#define MT6302_CLK_GPIO_NO gpio_MT6302_clk_pin
+#define MT6302_DAT_GPIO_NO gpio_MT6302_dat_pin
+
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/MT6306_custom.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/MT6306_custom.c
new file mode 100644
index 0000000..f7a9b39
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/MT6306_custom.c
@@ -0,0 +1,321 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * MT6302_interface.C
+ *
+ * Project:
+ * --------
+ * Gemini
+ *
+ * Description:
+ * ------------
+ * this file is custom implementation of MT6302 SPI interface
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "drv_comm.h"
+//#include "gpio_sw.h"
+#include "mt6306_i2c.h"
+#include "mt6306_custom.h"
+#include "kal_public_api.h"
+
+extern const char gpio_sim_switch_clk_pin;
+extern const char gpio_sim_switch_dat_pin;
+
+/*
+* FUNCTION
+* MT6306_geti2cInterface
+*
+* DESCRIPTION
+* This function is to return which method do we use to implement SPI interface
+*
+* CALLS
+*
+* PARAMETERS
+* none
+*
+* RETURNS
+* 0: use LCD serial interface
+* 1: use GPIO
+*
+* GLOBALS AFFECTED
+* external_global
+*/
+kal_uint32 MT6306_geti2cInterface(kal_uint32 MT6306Interface)
+{
+ return MT6306_I2C_USE_HW_I2C;
+}
+
+
+/*
+* FUNCTION
+* MT6306_checkSPIMode
+*
+* DESCRIPTION
+* This function is check the SPI 3 pins are in correct mode, no matter use LCD or GPIO to implement
+* customer should add its check code here, or just return kal_true in case they don't want to protect
+*
+* CALLS
+*
+* PARAMETERS
+* none
+*
+* RETURNS
+* kal_true: control pins are all in correct mode
+* kal_false: control pins are not in correct mode
+*
+*/
+kal_bool MT6306_checki2cMode(kal_uint32 MT6306Interface)
+{
+ return KAL_TRUE;
+}
+
+
+
+/*
+* FUNCTION
+* MT6306_getGPIOCLK
+*
+* DESCRIPTION
+* This function is to return which GPIO we use to implement SPI CLK
+* If customer doesn't GPIO to implement SPI, this function should return 0xff
+* This function is only work when customer used GPIO to implement SPI and CUSTOM_NEW is not defined.
+*
+* CALLS
+*
+* PARAMETERS
+* none
+*
+* RETURNS
+* 0~maximum number of GPIO BB has: the GPIO we use
+* 0xff: customer doesn't use GPIO to implement SPI CLK
+*
+*/
+kal_uint32 MT6306_getGPIOCLK(void)
+{
+ return 43;
+}
+
+/*
+* FUNCTION
+* MT6306_getGPIODAT
+*
+* DESCRIPTION
+* This function is to return which GPIO we use to implement SPI dAT
+* If customer doesn't GPIO to implement SPI, this function should return 0xff
+* This function is only work when customer used GPIO to implement SPI and CUSTOM_NEW is not defined.
+*
+* CALLS
+*
+* PARAMETERS
+* none
+*
+* RETURNS
+* 0~maximum number of GPIO BB has: the GPIO we use
+* 0xff: customer doesn't use GPIO to implement SPI CLK
+*
+*/
+kal_uint32 MT6306_getGPIODAT(void)
+{
+ return 44;
+}
+kal_uint8 MT6306_getDeviceAddr(void)
+{
+ return 0x64;
+}
+kal_uint32 MT6306_getVIOLevel()
+{
+ return MT6306_VIO_1V8;
+// return MT6306_VIO_2V8;
+}
+
+kal_bool MT6306_disable_SIM_HOT_SWAP_feature(void)
+{
+ //return KAL_FALSE;
+
+ // MTK internal test
+ return KAL_TRUE;
+}
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/adc_channel.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/adc_channel.c
new file mode 100644
index 0000000..4a4bf0c
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/adc_channel.c
@@ -0,0 +1,227 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * uart_def.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines ADC channel.
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+//MSBB remove #include "kal_non_specific_general_types.h"
+
+#ifndef __CUST_NEW__
+#include "kal_general_types.h"
+
+const kal_uint8 ADC_VBAT = 0;
+const kal_uint8 ADC_VBATTMP = 3; // Note::: Not used in MT6268A
+const kal_uint8 ADC_VISENSE = 1;
+const kal_uint8 ADC_ACCESSORYID = 4;
+const kal_uint8 ADC_VCHARGER = 2;
+const kal_uint8 ADC_PCBTMP = 6;
+const kal_uint8 ADC_CHR_USB = 3; // adc to distinguish between charger with usb
+const kal_uint8 ADC_OTG_VBUS = 6;
+const kal_uint8 ADC_RFTMP=5;
+#endif /* __CUST_NEW__ */
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/adc_channel.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/adc_channel.h
new file mode 100644
index 0000000..57e6393
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/adc_channel.h
@@ -0,0 +1,274 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * adc_channel.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file is intends for GPT driver.
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef _ADC_CHANNEL_H
+#define _ADC_CHANNEL_H
+
+/*voltage to temperature*/
+#define ADC_TEMP_T1 0*1000000 /*0C*/
+#define ADC_TEMP_T2 25*1000000 /*25C*/
+#define ADC_TEMP_T3 50*1000000 /*50C*/
+
+#define ADC_TEMP_NTCR1 26490.0 /*resistor at 0C*/
+#define ADC_TEMP_NTCR2 10000.0 /*resistor at 25C*/
+#define ADC_TEMP_NTCR3 4171.0 /*resistor at 50C*/
+
+#define ADC_TEMP_PUR 24000.0 /*orginal registor*/
+#define ADC_TEMP_AVDD 2800000.0
+#define ADC_TEMP_SCALE 10.0
+
+#define ADC_TEMP_V1 (ADC_TEMP_AVDD*(ADC_TEMP_NTCR1/(ADC_TEMP_NTCR1+ADC_TEMP_PUR))) /*voltage at 0C*/
+#define ADC_TEMP_V2 (ADC_TEMP_AVDD*(ADC_TEMP_NTCR2/(ADC_TEMP_NTCR2+ADC_TEMP_PUR))) /*voltage at 25C*/
+#define ADC_TEMP_V3 (ADC_TEMP_AVDD*(ADC_TEMP_NTCR3/(ADC_TEMP_NTCR3+ADC_TEMP_PUR))) /*voltage at 50C*/
+
+#define ADC_TEMP_M12 (((ADC_TEMP_T1-ADC_TEMP_T2)*ADC_TEMP_SCALE)/(ADC_TEMP_V1-ADC_TEMP_V2)) /*T1T2's slope */
+#define ADC_TEMP_M23 (((ADC_TEMP_T2-ADC_TEMP_T3)*ADC_TEMP_SCALE)/(ADC_TEMP_V2-ADC_TEMP_V3)) /*T2T3's slppe*/
+
+#define ADC_TEMPV2_FACTOR ADC_TEMP_V2
+#define ADC_TEMPA12_FACTOR (ADC_TEMP_T1-ADC_TEMP_M12/ADC_TEMP_SCALE*ADC_TEMP_V1)
+#define ADC_TEMPA23_FACTOR (ADC_TEMP_T2-ADC_TEMP_M23/ADC_TEMP_SCALE*ADC_TEMP_V2)
+#define ADC_TEMPM12_FACTOR ADC_TEMP_M12
+#define ADC_TEMPM23_FACTOR ADC_TEMP_M23
+#define ADC_TEMPSCALE_FACTOR ADC_TEMP_SCALE
+
+
+#define ADC_ISENSE_FACTOR 2.5 //BMT ISENSE RESISTENCE FACTOR 5 = 1/0.2 --> resister use 0.2 Ohm
+
+//only use channels < ADC_MAX_CHANNEL define in mcu\hal\drv_def\drv_features_adc.h
+#define ADC_CALIBRATION_SLOPE_CH0 1232
+#define ADC_CALIBRATION_SLOPE_CH1 1232
+#define ADC_CALIBRATION_SLOPE_CH2 1232
+#define ADC_CALIBRATION_SLOPE_CH3 1232
+#define ADC_CALIBRATION_SLOPE_CH4 1232
+#define ADC_CALIBRATION_SLOPE_CH5 1232
+#define ADC_CALIBRATION_SLOPE_CH6 1232
+#define ADC_CALIBRATION_SLOPE_CH7 1232
+#define ADC_CALIBRATION_SLOPE_CH8 1232
+#define ADC_CALIBRATION_SLOPE_CH9 1232
+#define ADC_CALIBRATION_SLOPE_CH10 1232
+#define ADC_CALIBRATION_SLOPE_CH11 1232
+#define ADC_CALIBRATION_SLOPE_CH12 1232
+#define ADC_CALIBRATION_SLOPE_CH13 1232
+#define ADC_CALIBRATION_SLOPE_CH14 1232
+#define ADC_CALIBRATION_SLOPE_CH15 1232
+#define ADC_CALIBRATION_SLOPE_CH16 1232
+#define ADC_CALIBRATION_SLOPE_CH17 1232
+#define ADC_CALIBRATION_SLOPE_CH18 1232
+#define ADC_CALIBRATION_SLOPE_CH19 1232
+
+#define ADC_CALIBRATION_OFFSET_CH0 28673
+#define ADC_CALIBRATION_OFFSET_CH1 28673
+#define ADC_CALIBRATION_OFFSET_CH2 28673
+#define ADC_CALIBRATION_OFFSET_CH3 28673
+#define ADC_CALIBRATION_OFFSET_CH4 28673
+#define ADC_CALIBRATION_OFFSET_CH5 28673
+#define ADC_CALIBRATION_OFFSET_CH6 28673
+#define ADC_CALIBRATION_OFFSET_CH7 28673
+#define ADC_CALIBRATION_OFFSET_CH8 28673
+#define ADC_CALIBRATION_OFFSET_CH9 28673
+#define ADC_CALIBRATION_OFFSET_CH10 28673
+#define ADC_CALIBRATION_OFFSET_CH11 28673
+#define ADC_CALIBRATION_OFFSET_CH12 28673
+#define ADC_CALIBRATION_OFFSET_CH13 28673
+#define ADC_CALIBRATION_OFFSET_CH14 28673
+#define ADC_CALIBRATION_OFFSET_CH15 28673
+#define ADC_CALIBRATION_OFFSET_CH16 28673
+#define ADC_CALIBRATION_OFFSET_CH17 28673
+#define ADC_CALIBRATION_OFFSET_CH18 28673
+#define ADC_CALIBRATION_OFFSET_CH19 28673
+
+#define ADC_VOLT_FACTOR_CH0 100
+#define ADC_VOLT_FACTOR_CH1 100
+#define ADC_VOLT_FACTOR_CH2 100
+#define ADC_VOLT_FACTOR_CH3 250
+#define ADC_VOLT_FACTOR_CH4 100
+#define ADC_VOLT_FACTOR_CH5 100
+#define ADC_VOLT_FACTOR_CH6 100
+#define ADC_VOLT_FACTOR_CH7 100
+#define ADC_VOLT_FACTOR_CH8 100
+#define ADC_VOLT_FACTOR_CH9 100
+#define ADC_VOLT_FACTOR_CH10 100
+#define ADC_VOLT_FACTOR_CH11 100
+#define ADC_VOLT_FACTOR_CH12 100
+#define ADC_VOLT_FACTOR_CH13 100
+#define ADC_VOLT_FACTOR_CH14 100
+#define ADC_VOLT_FACTOR_CH15 100
+#define ADC_VOLT_FACTOR_CH16 100
+#define ADC_VOLT_FACTOR_CH17 100
+#define ADC_VOLT_FACTOR_CH18 100
+#define ADC_VOLT_FACTOR_CH19 100
+
+#endif /*_ADC_H*/
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/alerter_tone.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/alerter_tone.c
new file mode 100644
index 0000000..4e643f8
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/alerter_tone.c
@@ -0,0 +1,461 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * tone.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file is intended for tone table.
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "drv_comm.h"
+
+#define ALERT_TONE_ENABLE
+
+#ifdef ALERT_TONE_ENABLE
+const kal_uint16 MusicalNoteTable_C1[] = {
+ 16250, /* C0 */
+ 15294, /* C0# */
+ 14444, /* D0 */
+ 14254, /* D0# */
+ 13542, /* E0 */
+ 12897, /* F0 */
+ 12287, /* F0# */
+ 11775, /* G0 */
+ 11304, /* G0# */
+ 10943, /* A0 */
+ 10188, /* A0# */
+ 9849, /* B0 */
+
+ 9673, /* C1 */
+ 9104, /* C1# */
+ 8598, /* D1 */
+ 8553, /* D1# */
+ 7927, /* E1 */
+ 7558, /* F1 */
+ 7437, /* F1# */
+ 6982, /* G1 */
+ 6708, /* G1# */
+ 6220, /* A1 */
+ 6226, /* A1# */
+ 5920, /* B1 */
+
+ 5556, /* C2 */
+ 5234, /* C2# */
+ 5238, /* D2 */
+ 4966, /* D2# */
+ 4663, /* E2 */
+ 4395, /* F2 */
+ 4416, /* F2# */
+ 4145, /* G2 */
+ 3944, /* G2# */
+ 3693, /* A2 */
+ 3736, /* A2# */
+ 3523, /* B2 */
+
+ 3333, /* C3 */
+ 3140, /* C3# */
+ 2968, /* D3 */
+ 2995, /* D3# */
+ 2831, /* E3 */
+ 2668, /* F3 */
+ 2510, /* F3# */
+ 2551, /* G3# */
+ 2415, /* G3# */
+ 2273, /* A3 */
+ 2146, /* A3# */
+ 2033, /* B3 */
+
+ 1916, /* C4 */
+ 1956, /* C4# */
+ 1849, /* D4 */
+ 1742, /* D4# */
+ 1646, /* E4 */
+ 1552, /* F4 */
+ 1464, /* F4# */
+ 1507, /* G4# */
+ 1424, /* G4# */
+ 1343, /* A4 */
+ 1268, /* A4# */
+ 1199, /* B4 */
+
+ 1130, /* C5 */
+ 1173, /* C5# */
+ 1107, /* D5 */
+ 1045, /* D5# */
+ 986, /* E5 */
+ 931, /* F5 */
+ 878, /* F5# */
+ 829, /* G5# */
+ 870, /* G5# */
+ 821, /* A5 */
+ 775, /* A5# */
+ 732, /* B5 */
+
+ 690, /* C6 */
+ 652, /* C6# */
+ 615, /* D6 */
+ 581, /* D6# */
+ 617, /* E6 */
+ 582, /* F6 */
+ 549, /* F6# */
+ 518, /* G6# */
+ 489, /* G6# */
+ 462, /* A6 */
+ 436, /* A6# */
+ 411, /* B6 */
+
+ 444, /* C7 */
+ 419, /* C7# */
+ 395, /* D7 */
+ 373, /* D7# */
+ 352, /* E7 */
+ 332, /* F7 */
+ 314, /* F7# */
+ 296, /* G7# */
+ 280, /* G7# */
+ 264, /* A7 */
+ 291, /* A7# */
+ 274 /* B7 */
+};
+
+const kal_uint16 MusicalNoteTable_C2[] = {
+ 25, /* C0 */
+ 25, /* C0# */
+ 25, /* D0 */
+ 24, /* D0# */
+ 24, /* E0 */
+ 24, /* F0 */
+ 23, /* F0# */
+ 23, /* G0 */
+ 23, /* G0# */
+ 22, /* A0 */
+ 22, /* A0# */
+ 22, /* B0 */
+
+ 21, /* C1 */
+ 21, /* C1# */
+ 21, /* D1 */
+ 20, /* D1# */
+ 20, /* E1 */
+ 20, /* F1 */
+ 19, /* F1# */
+ 19, /* G1 */
+ 19, /* G1# */
+ 19, /* A1 */
+ 18, /* A1# */
+ 18, /* B1 */
+
+ 18, /* C2 */
+ 18, /* C2# */
+ 17, /* D2 */
+ 17, /* D2# */
+ 17, /* E2 */
+ 17, /* F2 */
+ 16, /* F2# */
+ 16, /* G2 */
+ 16, /* G2# */
+ 16, /* A2 */
+ 15, /* A2# */
+ 15, /* B2 */
+
+ 15, /* C3 */
+ 15, /* C3# */
+ 15, /* D3 */
+ 14, /* D3# */
+ 14, /* E3 */
+ 14, /* F3 */
+ 14, /* F3# */
+ 13, /* G3# */
+ 13, /* G3# */
+ 13, /* A3 */
+ 13, /* A3# */
+ 13, /* B3 */
+
+ 13, /* C4 */
+ 12, /* C4# */
+ 12, /* D4 */
+ 12, /* D4# */
+ 12, /* E4 */
+ 12, /* F4 */
+ 12, /* F4# */
+ 11, /* G4# */
+ 11, /* G4# */
+ 11, /* A4 */
+ 11, /* A4# */
+ 11, /* B4 */
+
+ 11, /* C5 */
+ 10, /* C5# */
+ 10, /* D5 */
+ 10, /* D5# */
+ 10, /* E5 */
+ 10, /* F5 */
+ 10, /* F5# */
+ 10, /* G5# */
+ 9, /* G5# */
+ 9, /* A5 */
+ 9, /* A5# */
+ 9, /* B5 */
+
+ 9, /* C6 */
+ 9, /* C6# */
+ 9, /* D6 */
+ 9, /* D6# */
+ 8, /* E6 */
+ 8, /* F6 */
+ 8, /* F6# */
+ 8, /* G6# */
+ 8, /* G6# */
+ 8, /* A6 */
+ 8, /* A6# */
+ 8, /* B6 */
+
+ 7, /* C7 */
+ 7, /* C7# */
+ 7, /* D7 */
+ 7, /* D7# */
+ 7, /* E7 */
+ 7, /* F7 */
+ 7, /* F7# */
+ 7, /* G7# */
+ 7, /* G7# */
+ 7, /* A7 */
+ 6, /* A7# */
+ 6 /* B7 */
+};
+
+const kal_uint16 MusicalNoteTable_Thres[] = {
+ 508, /* C0 */
+ 478, /* C0# */
+ 451, /* D0 */
+ 445, /* D0# */
+ 423, /* E0 */
+ 403, /* F0 */
+ 384, /* F0# */
+ 368, /* G0 */
+ 353, /* G0# */
+ 342, /* A0 */
+ 318, /* A0# */
+ 308, /* B0 */
+
+ 302, /* C1 */
+ 285, /* C1# */
+ 269, /* D1 */
+ 267, /* D1# */
+ 248, /* E1 */
+ 236, /* F1 */
+ 232, /* F1# */
+ 218, /* G1 */
+ 210, /* G1# */
+ 194, /* A1 */
+ 195, /* A1# */
+ 185, /* B1 */
+
+ 174, /* C2 */
+ 164, /* C2# */
+ 164, /* D2 */
+ 155, /* D2# */
+ 146, /* E2 */
+ 137, /* F2 */
+ 138, /* F2# */
+ 130, /* G2 */
+ 123, /* G2# */
+ 115, /* A2 */
+ 117, /* A2# */
+ 110, /* B2 */
+
+ 104, /* C3 */
+ 98, /* C3# */
+ 93, /* D3 */
+ 94, /* D3# */
+ 89, /* E3 */
+ 83, /* F3 */
+ 78, /* F3# */
+ 80, /* G3# */
+ 76, /* G3# */
+ 71, /* A3 */
+ 67, /* A3# */
+ 64, /* B3 */
+
+ 60, /* C4 */
+ 61, /* C4# */
+ 58, /* D4 */
+ 54, /* D4# */
+ 51, /* E4 */
+ 49, /* F4 */
+ 46, /* F4# */
+ 47, /* G4# */
+ 45, /* G4# */
+ 42, /* A4 */
+ 40, /* A4# */
+ 38, /* B4 */
+
+ 35, /* C5 */
+ 37, /* C5# */
+ 35, /* D5 */
+ 33, /* D5# */
+ 31, /* E5 */
+ 29, /* F5 */
+ 27, /* F5# */
+ 26, /* G5# */
+ 27, /* G5# */
+ 26, /* A5 */
+ 24, /* A5# */
+ 23, /* B5 */
+
+ 22, /* C6 */
+ 20, /* C6# */
+ 19, /* D6 */
+ 18, /* D6# */
+ 19, /* E6 */
+ 18, /* F6 */
+ 17, /* F6# */
+ 16, /* G6# */
+ 15, /* G6# */
+ 14, /* A6 */
+ 14, /* A6# */
+ 13, /* B6 */
+
+ 14, /* C7 */
+ 13, /* C7# */
+ 12, /* D7 */
+ 12, /* D7# */
+ 11, /* E7 */
+ 10, /* F7 */
+ 10, /* F7# */
+ 9, /* G7# */
+ 9, /* G7# */
+ 8, /* A7 */
+ 9, /* A7# */
+ 9 /* B7 */
+};
+#endif /*ALERT_TONE_ENABLE*/
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/alerterdrv.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/alerterdrv.c
new file mode 100644
index 0000000..3abe393
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/alerterdrv.c
@@ -0,0 +1,203 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * alerterdrv.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file is defined for external interrupt channel.
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "drv_comm.h"
+#include "alerter_sw.h"
+#include "gpt_sw.h"
+#include "custom_hw_default.h"
+
+#if !defined(DRV_ALERTER_NOT_EXIST)
+extern ALterNoteStruct ALterNote;
+#endif /*!defined(DRV_ALERTER_NOT_EXIST)*/
+
+/*
+* FUNCTION
+* Alter_init
+*
+* DESCRIPTION
+* This function is to intial the Alter module.
+*
+* CALLS
+*
+* PARAMETERS
+* outtype : pwm, pdm
+*
+* RETURNS
+* None
+*
+* GLOBALS AFFECTED
+* external_global
+*/
+void Alter_init(void)
+{
+#if !defined(DRV_ALERTER_NOT_EXIST)
+ GPTI_GetHandle(&ALterNote.handle);
+ ALERTER_Config(m3,c13_1MHZ);
+ ALERTER_Output(pwm);
+#endif /*!defined(DRV_ALERTER_NOT_EXIST)*/
+}
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/aux_custom.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/aux_custom.c
new file mode 100644
index 0000000..bfe00ab
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/aux_custom.c
@@ -0,0 +1,170 @@
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#ifndef __L1_STANDALONE__
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#ifdef TV_OUT_SUPPORT
+/* under construction !*/
+/* under construction !*/
+#endif
+/* under construction !*/
+/* under construction !*/
+#if (defined(__PHONE_CLAMSHELL__) || defined(__PHONE_SLIDE__))
+/* under construction !*/
+/* under construction !*/
+#endif //(defined(__PHONE_CLAMSHELL__) || defined(__PHONE_SLIDE__))
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+ #ifdef TV_OUT_SUPPORT
+/* under construction !*/
+/* under construction !*/
+ #endif //TV_OUT_SUPPORT
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if (defined(__PHONE_CLAMSHELL__) || defined(__PHONE_SLIDE__))
+/* under construction !*/
+#endif //(defined(__PHONE_CLAMSHELL__) || defined(__PHONE_SLIDE__))
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+ #ifdef TV_OUT_SUPPORT
+/* under construction !*/
+ #endif //#ifdef TV_OUT_SUPPORT
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+ #ifdef TV_OUT_SUPPORT
+/* under construction !*/
+ #endif //#ifdef TV_OUT_SUPPORT
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+ #ifdef TV_OUT_SUPPORT
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+ #endif //TV_OUT_SUPPORT
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+ #ifdef TV_OUT_SUPPORT
+/* under construction !*/
+ #endif //TV_OUT_SUPPORT
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif /*__L1_STANDALONE__*/
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/aux_custom.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/aux_custom.h
new file mode 100644
index 0000000..c109e59
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/aux_custom.h
@@ -0,0 +1,120 @@
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#ifndef __AUX_CUSTOM_H__
+/* under construction !*/
+/* under construction !*/
+#ifndef __L1_STANDALONE__
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#ifdef TV_OUT_SUPPORT
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif //TV_OUT_SUPPOR
+/* under construction !*/
+/* under construction !*/
+#if (defined(__PHONE_CLAMSHELL__) || defined(__PHONE_SLIDE__))
+/* under construction !*/
+/* under construction !*/
+#endif //(defined(__PHONE_CLAMSHELL__) || defined(__PHONE_SLIDE__))
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#ifdef TV_OUT_SUPPORT
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif //TV_OUT_SUPPORT
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#else // __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+#endif // __CUST_NEW__
+/* under construction !*/
+#endif //__L1_STANDALONE__
+#endif //__AUX_CUSTOM_H__
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/batvalue.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/batvalue.h
new file mode 100644
index 0000000..6766df9
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/batvalue.h
@@ -0,0 +1 @@
+/* Empty by Anderson */
\ No newline at end of file
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/bt_hw_define.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/bt_hw_define.h
new file mode 100644
index 0000000..77f1352
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/bt_hw_define.h
@@ -0,0 +1,84 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * bt_hw_define.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines Bluetooth hw definition
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef _BT_HW_DEFINE_H
+#define _BT_HW_DEFINE_H
+
+
+/*UART Definition*/
+#define BT_UART_PORT uart_port3 /* UART port for BCHS */
+
+/*GPIO Definition*/
+/*output*/
+#define BT_GPIO_RESET 39 //GPIO_39 : PMIC reset
+#define BT_GPIO_DSC 4 //GPIO_4 : to disconnect RFComm link
+#define BT_GPIO_POWER 12 //GPIO_12: Power
+/*input*/
+#define BT_GPIO_DATASELECT 3 //GPIO_3: DataSelect
+
+#endif
+
+
+
+
+
+
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/chr_parameter.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/chr_parameter.h
new file mode 100644
index 0000000..914c933
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/chr_parameter.h
@@ -0,0 +1,249 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * chr_parameter.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file is defined for charging parameters.
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __CHR_PARAMETER_H__
+#define __CHR_PARAMETER_H__
+//MSBB remove #include "kal_non_specific_general_types.h"
+#include "dcl.h"
+
+//////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////// Common Part /////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////
+// Configuration of Battery Type
+#define LI_ION_BATTERY 0
+#define NI_MH_BATTERY 1
+#define CHR_BATTERY_TYPE LI_ION_BATTERY
+
+// Configuration of GPIO (Phase Out?)
+#define CHR_GPIO_CHR_CTRL 31
+#define CHR_GPIO_BATDET 14
+#define CHR_GPIO_VIBRATOR 7
+
+// Configuration of Checking
+#define CHR_CHECK_BATTERY KAL_FALSE
+#define CHR_CHECK_CHARGER_VOLTAGE KAL_TRUE
+#define CHR_CHECK_BATT_TEMP KAL_TRUE
+
+// Configuration of Li / Ni Battery Detect
+#define CHR_TYPICAL_LI_BATTYPE 1100000
+#define CHR_TYPICAL_NI_BATTYPE 1100000
+
+// Configuration of AC/USB Charge Current
+#define CHR_AC_CHARGE_CURRENT PMU_CHARGE_CURRENT_650_00_MA
+#define CHR_USB_CHARGE_CURRENT PMU_CHARGE_CURRENT_450_00_MA
+
+////////////////////////////////////////////////////////////////////
+// PHY Check Threshold //
+////////////////////////////////////////////////////////////////////
+
+// For Battery check, turn on by CHR_CHECK_BATTERY = KAL_TRUE
+#define CHR_BATT_EXIST_ADC_THRESHOLD 4600000
+
+// For V Charge check, turn on by CHR_CHECK_CHARGER_VOLTAGE = KAL_TRUE
+#define CHR_VCHARGER_HIGH 6500000
+#define CHR_VCHARGER_LOW 0
+
+// For Battery Temperature check, turn on by CHR_CHECK_TEMP = KAL_TRUE
+#define CHR_BATTMP_MINUS_40C 2500000
+#define CHR_BATTMP_0C 1469409
+#define CHR_BATTMP_45C 520042
+
+// For I Charge check
+#define CHR_ICHARGE_ON_HIGH 1000000
+#define CHR_ICHARGE_ON_LOW 50000
+#define CHR_ICHARGE_OFF_HIGH 1000000
+
+////////////////////////////////////////////////////////////////////
+// Misc Configuration //
+////////////////////////////////////////////////////////////////////
+
+// For current offset of different mode
+#define CURRENT_OFFSET_IDLE_MODE 100000 /* unit : mA */
+#define CURRENT_OFFSET_TALK_MODE 100000 /* unit : mA */
+#define CURRENT_OFFSET_SWOFF_MODE 100000 /* unit : mA */
+
+// Fast Charge ON/OFF duty configuration for different charge current of Normal Mode
+#define FAST_ICHARGE_HI_NORMAL_ON 7 /* unit : sec */
+#define FAST_ICHARGE_HI_NORMAL_OFF 1 /* unit : sec */
+#define FAST_ICHARGE_MID_NORMAL_ON 8 /* unit : sec */
+#define FAST_ICHARGE_MID_NORMAL_OFF 1 /* unit : sec */
+#define FAST_ICHARGE_LO_NORMAL_ON 9 /* unit : sec */
+#define FAST_ICHARGE_LO_NORMAL_OFF 1 /* unit : sec */
+
+// Fast Charge ON/OFF duty configuration for different charge current of Talk Mode
+#define FAST_ICHARGE_HI_TALK_ON 7 /* unit : sec */
+#define FAST_ICHARGE_HI_TALK_OFF 1 /* unit : sec */
+#define FAST_ICHARGE_MID_TALK_ON 8 /* unit : sec */
+#define FAST_ICHARGE_MID_TALK_OFF 1 /* unit : sec */
+#define FAST_ICHARGE_LO_TALK_ON 9 /* unit : sec */
+#define FAST_ICHARGE_LO_TALK_OFF 1 /* unit : sec */
+
+////////////////////////////////////////////////////////////////////
+// State Transition Configuration //
+////////////////////////////////////////////////////////////////////
+
+// For state transition threshold
+#define CHR_V_PRE2FAST_THRES 3400000
+
+// For Fast Charge State, charge duty adjustment
+#define CHR_FAST_ICHARGE_HIGHLEVEL 600000 /* 600ma,for table search */
+#define CHR_FAST_ICHARGE_LOWLEVEL 400000 /* 400ma,for table search */
+
+#define CHR_I_TOPOFF2FAST_THRES 250000 /* 250ma, TOPOFF->FAST */ // No use right now
+#define CHR_I_TOPOFF2FULL_THRES 120000 /* 120ma, TOPOFF->BATFULL */
+
+//////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////// Individual Part ///////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////
+
+// Start of Li-Ion Battery Configuration
+/* Li-Ion Battery Configuration */
+#define CHR_V_FAST2TOPOFF_THRES_LI 4050000
+#define CHR_V_FULL2FAST_THRES_LI 4110000 /* BATFULL->FAST */
+#define CHR_MAX_VBAT_LI 6000000
+#define CHR_V_PROTECT_HIGH_LI 4050000
+#define CHR_V_PROTECT_LOW_LI 3800000
+// End of Li-Ion Battery Configuration
+
+// Start of Ni-MH Battery
+/* Ni-MH Battery Configuration */
+#define CHR_V_TEMP_FAST2FULL_THRES_NI 414557 /* 50oC, FAST->BATFULL */
+#define CHR_V_FULL2FAST_THRES_NI 4050000
+#define CHR_MAX_VBAT_NI 5500000
+// End of Ni-MH Battery
+
+////////////////////////////////////////////////////////////////////
+// Charge Duty Configuration //
+////////////////////////////////////////////////////////////////////
+/* PRE CHARGE, search table */
+#define PRE_TON_TIME 3 /* unit : second */
+#define PRE_TOFF_TIME 2 /* unit : second */
+
+/* TOPOFF CHARGE, search table */
+#define TOPOFF_TON_TIME 3
+#define TOPOFF_TOFF_TIME 3
+
+/* Only for Pulse Charge Start */
+#define PULSE_POSTFULL_TWAIT_TIME 90
+#define PULSE_POSTFULL_TON_TIME 3
+#define PULSE_POSTFULL_TOFF_TIME 1
+/* Only for Pulse Charge End */
+
+/* Only for Li-Ion Battery Start */
+#define BATFULL_TON_TIME_LI 6 /* unit : second */
+#define BATFULL_TOFF_TIME_LI 0 /* unit : second */
+/* Only for Li-Ion Battery End */
+
+/* Only for Ni-MH Battery Start */
+#define BATFULL_TON_TIME_NI 1 /* unit : second */
+#define BATFULL_TOFF_TIME_NI 9 /* unit : second */
+/* Only for Ni-MH Battery End */
+
+#define CHR_STOP_TOFF_TIME 6
+#define BATHOLD_TOFF_TIME 10
+#define MEASURE_DISCARD_TIME 24 /* unit : ticks */
+
+#endif
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/cmmb_custom_if.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/cmmb_custom_if.c
new file mode 100644
index 0000000..ebbbada
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/cmmb_custom_if.c
@@ -0,0 +1,60 @@
+#if defined(__CMMB_SUPPORT__)
+#include "kal_public_api.h" //MSBB change #include "kal_release.h" // Basic data type
+
+#include "cmmb_custom_if.h"
+#include "gpio_sw.h"
+
+/**
+ * Power on Demodulator
+ *
+ * @param None.
+ *
+ * @return None.
+ */
+void cmmb_power_on_custom(void)
+{
+ DCL_HANDLE cmmb_reset_handle;
+ DCL_HANDLE cmmb_power_on_handle;
+
+ cmmb_reset_handle = DclGPIO_Open(DCL_GPIO, CMMB_GPIO_RESET_PIN);
+ cmmb_power_on_handle = DclGPIO_Open(DCL_GPIO, CMMB_GPIO_POWER_ON_PIN);
+
+ DclGPIO_Control(cmmb_reset_handle, GPIO_CMD_SET_DIR_OUT, NULL);
+ DclGPIO_Control(cmmb_reset_handle, GPIO_CMD_WRITE_LOW, NULL);
+
+ //need wait about 50ms
+ kal_sleep_task(15);
+
+ DclGPIO_Control(cmmb_reset_handle, GPIO_CMD_WRITE_HIGH, NULL);
+
+ //need wait about 50ms
+ kal_sleep_task(15);
+
+ //enable all LDO
+ DclGPIO_Control(cmmb_power_on_handle, GPIO_CMD_SET_DIR_OUT, NULL);
+ DclGPIO_Control(cmmb_power_on_handle, GPIO_CMD_WRITE_HIGH, NULL);
+
+ DclGPIO_Close(cmmb_reset_handle);
+ DclGPIO_Close(cmmb_power_on_handle);
+}
+
+void cmmb_power_off_custom(void)
+{
+ DCL_HANDLE cmmb_reset_handle;
+ DCL_HANDLE cmmb_power_on_handle;
+
+ cmmb_reset_handle = DclGPIO_Open(DCL_GPIO, CMMB_GPIO_RESET_PIN);
+ cmmb_power_on_handle = DclGPIO_Open(DCL_GPIO, CMMB_GPIO_POWER_ON_PIN);
+
+ DclGPIO_Control(cmmb_reset_handle, GPIO_CMD_SET_DIR_OUT, NULL);
+ DclGPIO_Control(cmmb_power_on_handle, GPIO_CMD_SET_DIR_OUT, NULL);
+
+ //pull low reset pin and disable all LDO
+ DclGPIO_Control(cmmb_reset_handle, GPIO_CMD_WRITE_LOW, NULL);
+ DclGPIO_Control(cmmb_power_on_handle, GPIO_CMD_WRITE_LOW, NULL);
+
+ DclGPIO_Close(cmmb_reset_handle);
+ DclGPIO_Close(cmmb_power_on_handle);
+}
+
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/cmmb_custom_if.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/cmmb_custom_if.h
new file mode 100644
index 0000000..0e8f006
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/cmmb_custom_if.h
@@ -0,0 +1,74 @@
+#ifndef CMMB_CUSTOM_IF_H
+#define CMMB_CUSTOM_IF_H
+
+#define INTERFACE_SPIONLY
+#define INNO_DOWNLOAD_FROM_BB
+
+//This define to indicate Innofidei cmmb chip using 26M clk or 20M clk.
+//Because different clk should download different firmware.
+//The following define can define "INNO_26M_FW" or "INNO_20M_FW"
+#define INNO_26M_FW
+
+#ifdef __CUST_NEW__
+
+extern const char gpio_cmmb_power_on_pin;
+extern const char gpio_cmmb_reset_pin;
+extern const char gpio_cmmb_spi_eint_pin;
+extern const char gpio_cmmb_spi_cs_n_pin;
+extern const char gpio_cmmb_spi_sck_pin;
+extern const char gpio_cmmb_spi_mosi_pin;
+extern const char gpio_cmmb_spi_miso_pin;
+
+extern const char gpio_cmmb_spi_eint_pin_M_EINT;
+extern const char gpio_cmmb_reset_pin_M_GPIO;
+extern const char gpio_cmmb_power_on_pin_M_GPIO;
+extern const char gpio_cmmb_spi_cs_n_pin_M_SPI_CS_N;
+extern const char gpio_cmmb_spi_sck_pin_M_SPI_SCK;
+extern const char gpio_cmmb_spi_mosi_pin_M_SPI_MOSI;
+extern const char gpio_cmmb_spi_miso_pin_M_SPI_MISO;
+
+#define CMMB_GPIO_RESET_PIN gpio_cmmb_reset_pin
+#define CMMB_GPIO_POWER_ON_PIN gpio_cmmb_power_on_pin
+#define CMMB_SPI_EINT_GPIO_PIN gpio_cmmb_spi_eint_pin
+#define CMMB_SPI_CS_N_GPIO_PIN gpio_cmmb_spi_cs_n_pin
+#define CMMB_SPI_SCK_GPIO_PIN gpio_cmmb_spi_sck_pin
+#define CMMB_SPI_MOSI_GPIO_PIN gpio_cmmb_spi_mosi_pin
+#define CMMB_SPI_MISO_GPIO_PIN gpio_cmmb_spi_miso_pin
+
+#define CMMB_SPI_EINT_PIN_MODE gpio_cmmb_spi_eint_pin_M_EINT
+#define CMMB_GPIO_RESET_MODE gpio_cmmb_reset_pin_M_GPIO
+#define CMMB_GPIO_PWR_ON_MODE gpio_cmmb_power_on_pin_M_GPIO
+#define CMMB_SPI_CS_N_PIN_MODE gpio_cmmb_spi_cs_n_pin_M_SPI_CS_N
+#define CMMB_SPI_SCK_PIN_MODE gpio_cmmb_spi_sck_pin_M_SPI_SCK
+#define CMMB_SPI_MOSI_PIN_MODE gpio_cmmb_spi_mosi_pin_M_SPI_MOSI
+#define CMMB_SPI_MISO_PIN_MODE gpio_cmmb_spi_miso_pin_M_SPI_MISO
+
+#else //__CUST_NEW__
+
+ enum
+ {
+ //SDIO
+ CMMB_GPIO_MCCM0_PIN = 67,
+ CMMB_GPIO_MCDA0_PIN = 68,
+ CMMB_GPIO_MCDA1_PIN = 69,
+ CMMB_GPIO_MCDA2_PIN = 70,
+ CMMB_GPIO_MCDA3_PIN = 71,
+ CMMB_GPIO_MCCK_PIN = 72,
+
+ CMMB_GPIO_POWER_ON_PIN = 83,
+ CMMB_GPIO_RESET_PIN = 62,
+
+ CMMB_SPI_CS_N_GPIO_PIN = 63,
+ CMMB_SPI_SCK_GPIO_PIN = 59,
+ CMMB_SPI_MOSI_GPIO_PIN = 61,
+ CMMB_SPI_MISO_GPIO_PIN = 60,
+
+ CMMB_SPI_EINT_GPIO_PIN = 48
+
+ };
+#endif //__CUST_NEW__
+
+extern void cmmb_power_on_custom(void);
+extern void cmmb_power_off_custom(void);
+
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_drv_init.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_drv_init.c
new file mode 100644
index 0000000..dde2c75
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_drv_init.c
@@ -0,0 +1,254 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * custom_drv_init.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file defines the driver init functions
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+//#include "kal_release.h"
+#include "kal_public_api.h"
+
+
+extern void Alter_init(void);
+extern void PWM_initialize(void);
+extern void EINT_Setting_SW_Init(void);
+
+#if defined(__OFN_SUPPORT__)
+extern void OFN_ChipInit(void);
+#endif
+
+#if defined(__NFC_SUPPORT__)
+extern int phDal4Nfc_uart_reset(long level);
+#endif
+
+#if defined(__BTMODULE_MT6236__)||defined(__BTMODULE_MT6276__)
+void Brt_MT6236_76_ARM7_Workaround_Stage_1_Bootloader_Step_0_PowerOn_Once_Only_Fake_BtOff(void);
+#endif
+
+
+void custom_drv_init(void)
+{
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// This Workaround should be placed at 1st line of custom_drv_init.
+#if defined(__BTMODULE_MT6236__)||defined(__BTMODULE_MT6276__)
+ Brt_MT6236_76_ARM7_Workaround_Stage_1_Bootloader_Step_0_PowerOn_Once_Only_Fake_BtOff();
+#endif
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ EINT_Setting_SW_Init(); /*initial dct setting sw part, hw part do in bootloader init*/
+
+ //spi_ini(); /* For LCD module */
+ //LCD_FunConfig();
+ Alter_init();
+#ifndef __L1_STANDALONE__
+ PWM_initialize();
+#endif
+#if defined(__OFN_SUPPORT__)
+ OFN_ChipInit();
+#endif
+}
+
+
+
+void custom_drv_deinit(void)
+{
+#ifdef __NFC_SUPPORT__
+ //Do NFC hardware reset for NFC chip enter active mode
+ phDal4Nfc_uart_reset(1);
+ phDal4Nfc_uart_reset(0);
+ phDal4Nfc_uart_reset(1);
+#endif
+}
+
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_equipment.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_equipment.c
new file mode 100644
index 0000000..c694ec5
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_equipment.c
@@ -0,0 +1,692 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * custom_equipment.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * The file contains definition of custom component module configuration
+ * variables, and routines handle for equipment device.
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __L1_STANDALONE__
+
+/*
+** Includes
+*/
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "kal_public_defs.h" //MSBB change #include "stack_config.h"
+#include "kal_trace.h"
+#include "nvram_editor_data_item.h"
+#include "stack_types.h"
+#include "syscomp_config.h"
+//MSBB remove #include "custom_config.h"
+#include "stack_buff_pool.h"
+#include "ctrl_buff_pool.h"
+
+#include "device.h"
+#include "l1audio.h"
+#include "resource_audio.h"
+#include "custom_equipment.h"
+#include "custom_hw_default.h"
+#include "custom_em.h"
+
+/*
+** Typedefs
+*/
+
+/*
+** Defines
+*/
+
+/*
+** Extern Functions
+*/
+#ifndef __CUST_NEW__
+extern void GPIO_WriteIO(char data, char port);
+extern void PWM_level(kal_uint8 level);
+extern void PWM2_level(kal_uint8 level);
+#endif /* __CUST_NEW__ */
+//extern void Alter_level(kal_uint8 level);
+
+/*
+** Extern Varibales
+*/
+
+
+/*
+** Globol Varibales
+*/
+
+/*
+** Local Functions
+*/
+
+/*
+** Local Variables
+*/
+//static kal_uint8 l_ext_device_id = EXT_DEV_NONE;
+
+#ifndef __CUST_NEW__
+/***********************************************************
+ **
+ ** GPIO MAPPING TABLE
+ **
+ ***********************************************************/
+
+const unsigned char netname[][MAX_NETNAME_TEXT] = {
+ "GPIO#0",
+ "GPIO#1",
+ "GPIO#2",
+ "GPIO#3",
+ "GPIO#4",
+ "GPIO#5",
+ "GPIO#6",
+ "GPIO#7",
+ "GPIO#8",
+ "GPIO#9",
+ "GPIO#10",
+ "GPIO#11",
+ "GPIO#12",
+ "GPIO#13",
+ "GPIO#14",
+ "GPIO#15",
+ "GPIO#16",
+ "GPIO#17",
+ "GPIO#18",
+ "GPIO#19",
+ "GPIO#20",
+ "GPO#1",
+ "GPO#2",
+ "GPO#3"
+};
+
+
+
+GPIO_MAP_ENTRY gpio_map_tbl[] = {
+/*GPIO_LABEL_LED_LCD */ {GPIO_VAILD, GPIO_PORT_12, netname[GPIO_PORT_12], NULL },
+/*GPIO_LABEL_DEV_LED_KEY */ {GPIO_VAILD, GPIO_PORT_13, netname[GPIO_PORT_13], NULL },
+/*GPIO_LABEL_DEV_LED_STATUS */ {GPIO_VAILD, GPIO_PORT_14, netname[GPIO_PORT_14], NULL },
+/*GPIO_LABEL_DEV_VIBRATOR */ {GPIO_VAILD, GPIO_PORT_15, netname[GPIO_PORT_15], NULL },
+/*GPIO_LABELID_4 */ {GPIO_INVAILD, GPIO_PORT_4, netname[GPIO_PORT_4], NULL },
+/*GPIO_LABELID_5 */ {GPIO_INVAILD, GPIO_PORT_5, netname[GPIO_PORT_5], NULL },
+/*GPIO_LABELID_6 */ {GPIO_INVAILD, GPIO_PORT_6, netname[GPIO_PORT_6], NULL },
+/*GPIO_LABELID_7 */ {GPIO_INVAILD, GPIO_PORT_7, netname[GPIO_PORT_7], NULL },
+/*GPIO_LABELID_8 */ {GPIO_INVAILD, GPIO_PORT_8, netname[GPIO_PORT_8], NULL },
+/*GPIO_LABELID_9 */ {GPIO_INVAILD, GPIO_PORT_9, netname[GPIO_PORT_9], NULL },
+/*GPIO_LABELID_10 */ {GPIO_INVAILD, GPIO_PORT_10, netname[GPIO_PORT_10], NULL },
+/*GPIO_LABELID_11 */ {GPIO_INVAILD, GPIO_PORT_11, netname[GPIO_PORT_11], NULL },
+/*GPIO_LABELID_12 */ {GPIO_INVAILD, GPIO_PORT_12, netname[GPIO_PORT_12], NULL },
+/*GPIO_LABELID_13 */ {GPIO_INVAILD, GPIO_PORT_13, netname[GPIO_PORT_13], NULL },
+/*GPIO_LABELID_14 */ {GPIO_INVAILD, GPIO_PORT_14, netname[GPIO_PORT_14], NULL },
+/*GPIO_LABELID_15 */ {GPIO_INVAILD, GPIO_PORT_15, netname[GPIO_PORT_15], NULL },
+/*GPIO_LABELID_16 */ {GPIO_INVAILD, GPIO_PORT_16, netname[GPIO_PORT_16], NULL },
+/*GPIO_LABELID_17 */ {GPIO_INVAILD, GPIO_PORT_17, netname[GPIO_PORT_17], NULL },
+/*GPIO_LABELID_18 */ {GPIO_INVAILD, GPIO_PORT_18, netname[GPIO_PORT_18], NULL },
+/*GPIO_LABELID_19 */ {GPIO_INVAILD, GPIO_PORT_19, netname[GPIO_PORT_19], NULL },
+/*GPIO_LABELID_20 */ {GPIO_INVAILD, GPIO_PORT_20, netname[GPIO_PORT_20], NULL },
+/*GPO_LABELID_1 */ {GPIO_INVAILD, 0, netname[21], NULL },
+/*GPO_LABELID_2 */ {GPIO_INVAILD, 0, netname[22], NULL },
+/*GPO_LABELID_3 */ {GPIO_INVAILD, 0, netname[23], NULL }
+};
+
+
+
+
+/***********************************************************
+ **
+ ** EINT MAPPING TABLE ( Execution Table )
+ **
+ ***********************************************************/
+
+const unsigned char eintname[][MAX_NETNAME_TEXT] = {
+ "Charger",
+ "Cable",
+ "SendKey",
+ "Earphone",
+ "ClamShell"
+};
+
+GPIO_MAP_ENTRY eint_map_tbl[] = {
+/*EINT_LABELID_0 */ {GPIO_VAILD, 0, eintname[0], NULL },
+/*EINT_LABELID_1 */ {GPIO_VAILD, 1, eintname[1], NULL },
+/*EINT_LABELID_2 */ {GPIO_VAILD, 1, eintname[2], NULL },
+/*EINT_LABELID_3 */ {GPIO_VAILD, 1, eintname[3], NULL },
+/*EINT_LABELID_4 */ {GPIO_INVAILD, 2, eintname[4], NULL },
+};
+
+
+
+/***********************************************************
+ **
+ ** ADC MAPPING TABLE ( Execution Table )
+ **
+ ***********************************************************/
+const unsigned char adcname[][MAX_NETNAME_TEXT] = {
+ "VBAT",
+ "BTemp",
+ "VAUX",
+ "Current",
+ "VChgr"
+};
+
+GPIO_MAP_ENTRY adc_map_tbl[] = {
+/*ADC_LABELID_0 */ {GPIO_VAILD, 0, adcname[0], NULL },
+/*ADC_LABELID_1 */ {GPIO_VAILD, 1, adcname[1], NULL },
+/*ADC_LABELID_2 */ {GPIO_VAILD, 2, adcname[2], NULL },
+/*ADC_LABELID_3 */ {GPIO_VAILD, 3, adcname[3], NULL },
+/*ADC_LABELID_4 */ {GPIO_VAILD, 4, adcname[4], NULL },
+};
+#endif /* __CUST_NEW__*/
+
+/*
+* Function
+* custom_cfg_vbat_level_regulator
+* DESCRIPTION
+* The function is used to convert the vbat value to the end-user level .
+* And it will be call by audio manager.
+* PARAMETERS
+* vbat IN
+* RETURNS
+* kal_uint8
+* GLOBALS AFFECTED
+*/
+kal_uint8 custom_cfg_vbat_level_regulator( kal_uint32 measure_voltage, kal_uint8 *last_level, kal_uint8 *disp_level, kal_uint8 *hit_count )
+{
+ kal_uint8 level=0;
+ //kal_uint8 regulated_level=0;
+
+ for( level=0; level<BATTERY_MAX_LEVEL; level++)
+ if( measure_voltage <= Battery_Level_Info[level] )
+ break;
+
+ if( level > *disp_level )
+ {
+ for( level=0; level<BATTERY_MAX_LEVEL; level++)
+ if( measure_voltage <= (Battery_Level_Info[level] + VBAT_GROWUP_PENALTY) )
+ break;
+ }
+
+ if( level == *last_level )
+ {
+ if( *hit_count >= VBAT_HIT_COUNT_BOUND )
+ {
+ //regulated_level = *disp_level = level;
+ }
+ else
+ {
+ (*hit_count)++;
+ //regulated_level = *disp_level;
+ }
+ }
+ else
+ {
+ *hit_count=1;
+ //regulated_level = *disp_level;
+
+ }
+
+ *last_level = level;
+
+ if( level <= BATTERY_LOW_WARNING )
+ return ( level );
+ else
+ return ( *disp_level );
+
+}
+
+/*
+* custom_cfg_vbat_level_convert
+* DESCRIPTION
+* The function is used to convert the vbat value to the end-user level .
+* And it will be call by audio manager.
+* PARAMETERS
+* vbat IN
+* RETURNS
+* kal_uint8
+* GLOBALS AFFECTED
+*/
+kal_uint8 custom_cfg_vbat_level_convert
+(
+ kal_int32 vbat
+ )
+{
+ /*----------------------------------------------------------------*/
+ /* Local Variables */
+ /*----------------------------------------------------------------*/
+ kal_uint8 level=0; /* the level could be customized by user */
+ /*----------------------------------------------------------------*/
+ /* Code Body */
+ /*----------------------------------------------------------------*/
+
+ for( level=0; level<BATTERY_MAX_LEVEL; level++)
+ if( vbat <= Battery_Level_Info[level] )
+ return level;
+
+ return (BATTERY_MAX_LEVEL-1);
+
+}
+
+/*
+* custom_cfg_vbat_percentage_convert
+* DESCRIPTION
+* The function is used to convert the vbat value to the end-user level .
+* And it will be call by audio manager.
+* PARAMETERS
+* vbat IN
+* RETURNS
+* kal_uint8
+* GLOBALS AFFECTED
+*/
+kal_uint32 custom_cfg_vbat_percentage_convert
+(
+ kal_uint32 vbat
+ )
+{
+ kal_uint32 int_result;
+ double result;
+
+ if( BATLEV_MAX_IDX == 0 )
+ {
+ ASSERT(BATLEV_MAX_VOLTAGE > 0);
+ result = (double)vbat/(double)BATLEV_MAX_VOLTAGE;
+
+ }
+ else if( BATLEV_MAX_IDX > 0 && BATLEV_MAX_IDX < BATTERY_MAX_LEVEL )
+ {
+ ASSERT(Battery_Level_Info[BATLEV_MAX_IDX] > 0);
+ result = (double)vbat/(double)Battery_Level_Info[BATLEV_MAX_IDX] ;
+ }
+ else
+ {
+ result = 0.0;
+ }
+
+ int_result = (kal_uint32) (result * 10000);
+
+ return (int_result);
+}
+
+#ifndef __CUST_NEW__
+/***********************************************************
+ **
+ ** GPIO SETTTING
+ **
+ ***********************************************************/
+
+
+
+/*
+* Function
+* custom_cfg_outward_gpio_port
+* DESCRIPTION
+* The function is used to handle the port number of the outward gpio device.
+* And it will be call by audio manager.
+* PARAMETERS
+* gpio_device_id IN
+* port_num IN/OUT
+* RETURNS
+* kal_bool
+* GLOBALS AFFECTED
+*/
+kal_uint8 custom_cfg_outward_gpio_port( kal_uint8 gpio_device_id /* gpio_device_enum */)
+{
+ if( (gpio_device_id < GPIO_LABELID_MAX) && (gpio_map_tbl[gpio_device_id].vaild != GPIO_INVAILD) )
+ return gpio_map_tbl[gpio_device_id].port;
+ else
+ return 0;
+}
+
+
+
+
+kal_bool custom_cfg_gpio_set_level(kal_uint8 gpio_dev_type, kal_uint8 gpio_dev_level )
+{
+ kal_bool res=KAL_TRUE;
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+ return res;
+}
+
+void custom_start_flashlight(kal_uint8 red_level, kal_uint8 green_level, kal_uint8 blue_level, kal_uint8 duty)
+{
+ custom_cfg_gpio_set_level(GPIO_DEV_LED_STATUS_1, ((red_level>0) ? LED_LIGHT_LEVEL5 : LED_LIGHT_LEVEL0));
+ custom_cfg_gpio_set_level(GPIO_DEV_LED_STATUS_2, ((green_level>0) ? LED_LIGHT_LEVEL5 : LED_LIGHT_LEVEL0));
+ custom_cfg_gpio_set_level(GPIO_DEV_LED_STATUS_3, ((blue_level>0) ? LED_LIGHT_LEVEL5 : LED_LIGHT_LEVEL0));
+#if defined(DRV_PWM_PWM2)
+ PWM2_Configure(PWM2_Level_Info[0][0], duty);
+ PWM2_Start();
+#endif
+}
+
+void custom_stop_flashlight(void)
+{
+ custom_cfg_gpio_set_level(GPIO_DEV_LED_STATUS_1, LED_LIGHT_LEVEL0);
+ custom_cfg_gpio_set_level(GPIO_DEV_LED_STATUS_2, LED_LIGHT_LEVEL0);
+ custom_cfg_gpio_set_level(GPIO_DEV_LED_STATUS_3, LED_LIGHT_LEVEL0);
+#if defined(DRV_PWM_PWM2)
+ PWM2_Stop();
+#endif
+}
+#endif /* __CUST_NEW__ */
+
+#endif /* !__L1_STANDALONE__ */
+
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_equipment.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_equipment.h
new file mode 100644
index 0000000..e837230
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_equipment.h
@@ -0,0 +1,416 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * custom_config.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file provides the custom task index and module index configuration.
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef _CUSTOM_EQUIPMENT_H
+#define _CUSTOM_EQUIPMENT_H
+
+#include "kal_general_types.h"
+
+#define VBAT_HIT_COUNT_BOUND 3
+#define VBAT_GROWUP_PENALTY (30 /*mA*/ * 1000 )
+
+// MTK_BEGIN Lisen added
+#define LCD_CLAM_CLOSE_HALFLITE_TO_OFF_TIME 15000
+#define LCD_CLAM_OPEN_HALFLITE_TO_OFF_TIME 15000
+// MTK_END
+
+#define GPIO_OFF 0x0
+#define GPIO_ON 0x1
+
+typedef struct _GPIO_MAP_ENTRY {
+ unsigned char vaild;
+ unsigned char port;
+ const unsigned char *netname;
+ const unsigned char *netname2;
+} GPIO_MAP_ENTRY;
+
+#ifndef __CUST_NEW__
+typedef enum {
+ GPIO_PORT_0 = 0x0,
+ GPIO_PORT_1,
+ GPIO_PORT_2,
+ GPIO_PORT_3,
+ GPIO_PORT_4,
+ GPIO_PORT_5,
+ GPIO_PORT_6,
+ GPIO_PORT_7,
+ GPIO_PORT_8,
+ GPIO_PORT_9,
+ GPIO_PORT_10,
+ GPIO_PORT_11,
+ GPIO_PORT_12,
+ GPIO_PORT_13,
+ GPIO_PORT_14,
+ GPIO_PORT_15,
+ GPIO_PORT_16,
+ GPIO_PORT_17,
+ GPIO_PORT_18,
+ GPIO_PORT_19,
+ GPIO_PORT_20,
+ GPIO_PORT_21,
+ GPIO_PORT_22,
+ GPIO_PORT_23,
+ GPIO_PORT_24,
+ GPIO_PORT_25,
+ GPIO_PORT_26,
+ GPIO_PORT_27,
+ GPIO_PORT_28,
+ GPIO_PORT_29,
+ GPIO_PORT_30,
+ GPIO_PORT_31,
+ GPIO_PORT_32,
+ GPIO_PORT_33,
+ GPIO_PORT_34,
+ GPIO_PORT_35,
+ GPIO_PORT_36,
+ GPIO_PORT_37,
+ GPIO_PORT_38,
+ GPIO_PORT_39,
+ GPIO_PORT_40,
+ GPO_PORT_0,
+ GPO_PORT_1,
+ GPO_PORT_2,
+
+ /* shound NOT modify this value*/
+ GPIO_PORT_MAX
+} GPIO_PORT_ENUM;
+
+
+typedef enum {
+ GPIO_LABEL_LED_LCD = 0x0,
+ GPIO_LABEL_DEV_LED_KEY,
+ GPIO_LABEL_DEV_LED_STATUS,
+ GPIO_LABEL_DEV_VIBRATOR,
+ GPIO_LABELID_4,
+ GPIO_LABELID_5,
+ GPIO_LABELID_6,
+ GPIO_LABELID_7,
+ GPIO_LABELID_8,
+ GPIO_LABELID_9,
+ GPIO_LABELID_11,
+ GPIO_LABELID_10,
+ GPIO_LABELID_12,
+ GPIO_LABELID_13,
+ GPIO_LABELID_14,
+ GPIO_LABELID_15,
+ GPIO_LABELID_16,
+ GPIO_LABELID_17,
+ GPIO_LABELID_18,
+ GPIO_LABELID_19,
+ GPIO_LABELID_20,
+ GPIO_LABELID_21,
+ GPIO_LABELID_22,
+ GPIO_LABELID_23,
+ GPIO_LABELID_24,
+ GPIO_LABELID_25,
+ GPIO_LABELID_26,
+ GPIO_LABELID_27,
+ GPIO_LABELID_28,
+ GPIO_LABELID_29,
+ GPIO_LABELID_30,
+ GPIO_LABELID_31,
+ GPIO_LABELID_32,
+ GPIO_LABELID_33,
+ GPIO_LABELID_34,
+ GPIO_LABELID_35,
+ GPIO_LABELID_36,
+ GPIO_LABELID_37,
+ GPIO_LABELID_38,
+ GPIO_LABELID_39,
+ GPIO_LABELID_40,
+ GPO_LABELID_0,
+ GPO_LABELID_1,
+ GPO_LABELID_2,
+
+ /* shound NOT modify this value*/
+ GPIO_LABELID_MAX
+} GPIO_LABELID_ENUM;
+
+
+typedef enum {
+
+ EINT_LABELID_0 = 0x0,
+ EINT_LABELID_1,
+ EINT_LABELID_2,
+ EINT_LABELID_3,
+ EINT_LABELID_4,
+
+ EINT_LABELID_MAX = EINT_LABELID_4
+
+} EINT_LABELID_ENUM;
+
+typedef enum {
+
+ ADC_LABELID_0 = 0x0,
+ ADC_LABELID_1,
+ ADC_LABELID_2,
+ ADC_LABELID_3,
+ ADC_LABELID_4,
+
+ ADC_LABELID_MAX = ADC_LABELID_4
+
+} ADC_LABELID_ENUM;
+
+#else /* __CUST_NEW__ */
+
+extern const kal_uint8 GPIO_LABELID_MAX;
+extern const kal_uint8 EINT_LABELID_MAX;
+extern const kal_uint8 ADC_LABELID_MAX;
+extern kal_uint8 EmGpioIdxMenu2Tbl[];
+
+#endif /* __CUST_NEW__ */
+
+
+extern GPIO_MAP_ENTRY gpio_map_tbl[];
+extern GPIO_MAP_ENTRY eint_map_tbl[];
+extern GPIO_MAP_ENTRY adc_map_tbl[];
+
+extern void custom_cfg_audio_ec_range
+(
+ kal_uint8 *min_vol, /* min volume level */
+ kal_uint8 *max_vol /* max volume level */
+ );
+
+extern kal_bool custom_cfg_audio_out_device
+(
+ kal_uint8 audio_sound_id, /* audio_id_enum */
+ kal_uint8 *out_device_path /* audio_type_enum */
+ );
+
+extern kal_bool custom_cfg_speech_out_device
+(
+ kal_uint8 ext_device_id, /* ext_device_enum */
+ kal_uint8 *out_device_path /* audio_type_enum */
+ );
+
+extern kal_uint8 custom_cfg_hw_aud_output_path
+(
+ kal_uint8 speaker_id /*audio_type_enum*/
+
+ /* return l1sp audio output device enum */
+);
+
+extern kal_uint8 custom_cfg_hw_aud_input_path
+(
+ kal_uint8 mic_id /* audio_input_path_enum */
+);
+
+
+extern kal_uint8 custom_cfg_outward_gpio_port
+(
+ kal_uint8 gpio_device_id /* gpio_device_enum */
+ );
+
+extern kal_bool custom_cfg_gpio_set_level
+ (
+ kal_uint8 gpio_dev_type, /* gpio_device_enum */
+ kal_uint8 gpio_dev_level
+ );
+
+
+extern kal_uint8 custom_cfg_vbat_level_convert
+(
+ kal_int32 vbat
+ );
+
+extern kal_uint8 custom_cfg_vbat_level_regulator
+(
+ kal_uint32 measure_voltage,
+ kal_uint8 *last_level,
+ kal_uint8 *disp_level,
+ kal_uint8 *hit_count
+ );
+
+extern void custom_start_flashlight(kal_uint8 red_level, kal_uint8 green_level, kal_uint8 blue_level, kal_uint8 duty);
+
+extern void custom_stop_flashlight(void);
+
+#endif /* _CUSTOM_EQUIPMENT_H */
+
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_hw_default.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_hw_default.c
new file mode 100644
index 0000000..03f1a64
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_hw_default.c
@@ -0,0 +1,480 @@
+#if !defined(__LTE_SM__)
+
+/*****************************************************************************
+* 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:
+ * ---------
+ * custom_hw_default.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * The file contains definition of custom component module configuration
+ * variables, and routines handle for equipment device.
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+/*
+** Includes
+*/
+
+
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+#include "custom_hw_default.h"
+
+#ifndef __L1_STANDALONE__
+
+#include "stack_types.h"
+#include "syscomp_config.h"
+//MSBB remove #include "custom_config.h"
+#include "stack_buff_pool.h"
+#include "ctrl_buff_pool.h"
+
+//#include "custom_nvram_editor_data_item.h"
+#include "nvram_editor_data_item.h"
+#include "l4_nvram_editor.h"
+#endif /* __L1_STANDALONE__ */
+
+
+
+/*
+** Globol Varibales
+*/
+
+#if ( (defined(MT6326)) )
+kal_uint8 PMIC6326_KP_Level_Info[5][2] =
+{
+ /*Freq,duty*/
+ /*Freq, unit is HZ */
+ /*Freq, unit is HZ */
+ /*Duty, uint is % */
+ {200,20}, /*Level 1*/
+ {200,40}, /*Level 2*/
+ {200,60}, /*Level 3*/
+ {200,80}, /*Level 4*/
+ {200,100} /*Level 5*/
+};
+kal_uint8 PMIC6326_MAINLCD_Level_Info[5][2] =
+{
+ /*(Freq,duty)*/
+ /*Freq, unit is HZ */
+ /*Duty, uint is % */
+ {200,20}, /*Level 1*/
+ {200,40}, /*Level 2*/
+ {200,60}, /*Level 3*/
+ {200,80}, /*Level 4*/
+ {200,100} /*Level 5*/
+};
+kal_uint8 PMIC6326_VIBR_Level_Info[5][2] =
+{
+ /*(Freq,duty)*/
+ /*Freq, unit is HZ */
+ /*Duty, uint is % */
+ {200,20}, /*Level 1*/
+ {200,40}, /*Level 2*/
+ {200,60}, /*Level 3*/
+ {200,80}, /*Level 4*/
+ {200,100} /*Level 5*/
+};
+
+#endif // #if ( (defined(MT6326)) )
+
+
+kal_uint32 PWM1_Level_Info[PWM_MAX_LEVEL][2] =
+{
+ /*Freq,duty*/
+ {200,20}, /*Level 1*/
+ {200,40}, /*Level 2*/
+ {200,60}, /*Level 3*/
+ {200,80}, /*Level 4*/
+ {200,100} /*Level 5*/
+};
+
+kal_uint32 PWM2_Level_Info[PWM_MAX_LEVEL][2] =
+{
+ /*Freq,duty*/
+ {200,20}, /*Level 1*/
+ {200,40}, /*Level 2*/
+ {200,60}, /*Level 3*/
+ {200,80}, /*Level 4*/
+ {200,100} /*Level 5*/
+};
+
+kal_uint32 PWM3_Level_Info[PWM_MAX_LEVEL][2] =
+{
+ /*Freq,duty*/
+ {200,20}, /*Level 1*/
+ {200,40}, /*Level 2*/
+ {200,60}, /*Level 3*/
+ {200,80}, /*Level 4*/
+ {200,100} /*Level 5*/
+};
+// PWM4, 5, 6 for old PWN configuration begin
+kal_uint32 PWM4_Level_Info[PWM_MAX_LEVEL][2] =
+{
+ /*Freq,duty*/
+ {200,20}, /*Level 1*/
+ {200,40}, /*Level 2*/
+ {200,60}, /*Level 3*/
+ {200,80}, /*Level 4*/
+ {200,100} /*Level 5*/
+};
+
+// We use PWM5 as LCD backlight
+// And the LCD backlight component is configured insided to invert the signal from PWM
+// So we need to invert duty setting for each level
+kal_uint32 PWM5_Level_Info[PWM_MAX_LEVEL][2] =
+{
+ /*Freq,duty*/
+ {200,80}, /*Level 1*/
+ {200,60}, /*Level 2*/
+ {200,40}, /*Level 3*/
+ {200,20}, /*Level 4*/
+ {200,0} /*Level 5*/
+};
+kal_uint32 PWM6_Level_Info[PWM_MAX_LEVEL][2] =
+{
+ /*Freq,duty*/
+ {200,20}, /*Level 1*/
+ {200,40}, /*Level 2*/
+ {200,60}, /*Level 3*/
+ {200,80}, /*Level 4*/
+ {200,100} /*Level 5*/
+};
+// PWM4, 5, 6 for old PWN configuration end
+
+kal_uint32 Alter_Level_Info[PWM_MAX_LEVEL][2] =
+{
+ /*Freq,duty*/
+ {200,20}, /*Level 1*/
+ {200,40}, /*Level 2*/
+ {200,60}, /*Level 3*/
+ {200,80}, /*Level 4*/
+ {200,100} /*Level 5*/
+};
+
+#if defined(MT6318)
+kal_uint32 PMIC6318_PWM_Level_Info[PWM_MAX_LEVEL][2] =
+{
+ /*Freq,duty*/
+ {200,20}, /*Level 1*/
+ {200,40}, /*Level 2*/
+ {200,60}, /*Level 3*/
+ {200,80}, /*Level 4*/
+ {200,100} /*Level 5*/
+};
+
+kal_uint16 pmic_custom_get_bl_pmw_type(void)
+{
+ // Choose BL_LED or KP_LED. If no use, just return 0.
+ return BL_LED;
+}
+#endif
+
+const kal_uint8 DEFAULT_HARDWARE_YEAR = 4; //2004
+const kal_uint8 DEFAULT_HARDWARE_MON = 1;
+const kal_uint8 DEFAULT_HARDWARE_DAY = 1;
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+//50ms * 10 = 0.5 sec
+const kal_uint32 ADC_BOOTUP_EVAL_PERIOD = KAL_TICKS_50_MSEC;
+const kal_uint32 ADC_BOOTUP_EVAL_COUNT = 10;
+
+//10sec * 6 = 1min
+const kal_uint32 ADC_IDLE_EVAL_PERIOD = (2*KAL_TICKS_5_SEC);
+const kal_uint32 ADC_IDLE_EVAL_COUNT = 6;
+
+//5sec * 6 = 30sec
+const kal_uint32 ADC_TALKING_EVAL_PERIOD = (KAL_TICKS_5_SEC);
+const kal_uint32 ADC_TALKING_EVAL_COUNT = 6;
+
+//150 * 10 ms = 1.5 sec (unit : 10ms )
+const kal_uint32 KPD_LONGPRESS_PERIOD = 60;
+
+//50 * 10ms = 0.5 sec (unit : 10ms )
+const kal_uint32 KPD_REPEAT_PERIOD = 50;
+
+#ifndef __L1_STANDALONE__
+
+kal_uint8 MainLCD_Contrast_Level_Info[LCD_CONTRAST_MAX_LEVEL];
+kal_uint8 MainLCD_Bias_Level_Info[LCD_PARAM_MAX_LEVEL];
+kal_uint8 MainLCD_Linerate_Level_Info[LCD_PARAM_MAX_LEVEL];
+kal_uint8 MainLCD_Temp_Level_Info[LCD_PARAM_MAX_LEVEL];
+
+#ifdef DUAL_LCD
+kal_uint8 SubLCD_Contrast_Level_Info[LCD_CONTRAST_MAX_LEVEL];
+kal_uint8 SubLCD_Bias_Level_Info[LCD_PARAM_MAX_LEVEL];
+kal_uint8 SubLCD_Linerate_Level_Info[LCD_PARAM_MAX_LEVEL];
+kal_uint8 SubLCD_Temp_Level_Info[LCD_PARAM_MAX_LEVEL];
+#endif
+
+kal_uint32 Battery_Level_Info[BATTERY_MAX_LEVEL];
+
+
+void custom_init_hardware_level(void *hw_level_struct)
+{
+ kal_uint8 i, j;
+
+ custom_hw_level_struct *hw_level = (custom_hw_level_struct *)hw_level_struct;
+
+ for( i=0; i< LCD_CONTRAST_MAX_LEVEL; i++ )
+ {
+ MainLCD_Contrast_Level_Info[i]= hw_level->MainLCD_Contrast[i];
+#ifdef DUAL_LCD
+ SubLCD_Contrast_Level_Info[i]= hw_level->SubLCD_Contrast[i];
+#endif
+ }
+
+ for( i=0; i< LCD_PARAM_MAX_LEVEL; i++ )
+ {
+ MainLCD_Bias_Level_Info[i]= hw_level->MainLCD_Bias[i];
+ MainLCD_Linerate_Level_Info[i]= hw_level->MainLCD_Linerate[i];
+ MainLCD_Temp_Level_Info[i] = hw_level->MainLCD_Temp[i];
+#ifdef DUAL_LCD
+ SubLCD_Bias_Level_Info[i]= hw_level->SubLCD_Bias[i];
+ SubLCD_Linerate_Level_Info[i]= hw_level->SubLCD_Linerate[i];
+ SubLCD_Temp_Level_Info[i] = hw_level->SubLCD_Temp[i];
+#endif
+ }
+
+ for( i=0; i< BATTERY_MAX_LEVEL; i++ )
+ Battery_Level_Info[i] = hw_level->BatteryLevel[i];
+
+ for( i=0; i<PWM_MAX_LEVEL; i++ )
+ for( j=0; j<2; j++ )
+ {
+ PWM1_Level_Info[i][j] = hw_level->PWM1[i][j];
+ PWM2_Level_Info[i][j] = hw_level->PWM2[i][j];
+ Alter_Level_Info[i][j] = hw_level->PWM3[i][j];
+ }
+
+#if defined(MT6318)
+ for( i=0; i<PWM_MAX_LEVEL; i++ )
+ for( j=0; j<2; j++ )
+ {
+ PMIC6318_PWM_Level_Info[i][j] = hw_level->PMIC6318BLPWM[i][j];
+ }
+#endif
+
+}
+
+#endif /* __L1_STANDALONE__ */
+
+#endif /* end of __LTE_SM__ */
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_hw_default.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_hw_default.h
new file mode 100644
index 0000000..ce4ef97
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_hw_default.h
@@ -0,0 +1,160 @@
+/*****************************************************************************
+* 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).
+*
+*****************************************************************************/
+
+/* Configure which backlight source we use */
+#define EXTERNAL_BL_DRIVER_SOURCE
+//#define INTERNAL_BL_DRIVER_SOURCE
+
+/* LED_MAINLCD PWM Configuration */
+#define PWM_MAX_LEVEL 5
+
+#if defined(__MULTI_LEVEL_BACKLIGHT_SUPPORT__)
+#define PWM_MAX_BACKLIGHT_LEVEL 20
+#else
+#define PWM_MAX_BACKLIGHT_LEVEL PWM_MAX_LEVEL
+#endif // End of #if defined(__MULTI_LEVEL_BACKLIGHT_SUPPORT__)
+
+#if defined(EXTERNAL_BL_DRIVER_SOURCE)
+
+// #define LED_MAINLCD_USE_PWM_1
+// #define LED_MAINLCD_USE_PWM_2
+#define LED_MAINLCD_USE_PWM_3
+//#define LED_MAINLCD_USE_PWM_NONE
+
+#if !defined(LED_MAINLCD_USE_PWM_NONE)
+
+#define EXTERNAL_BL_DRIVER_STEPS PWM_MAX_BACKLIGHT_LEVEL
+
+#else
+
+#define EXTERNAL_BL_DRIVER_STEPS (16)
+
+#endif
+
+#elif defined(INTERNAL_BL_DRIVER_SOURCE)
+
+// #define LED_MAINLCD_USE_PWM_1
+#define LED_MAINLCD_USE_PWM_2
+// #define LED_MAINLCD_USE_PWM_3
+// #define LED_MAINLCD_USE_PWM_NONE
+
+#endif // End of #if defined(__EXTERNAL_BL_DRIVER_SOURCE__)
+
+/* LED_SUBLCD PWM Configuration */
+// #define LED_SUBLCD_USE_PWM_1
+// #define LED_SUBLCD_USE_PWM_2
+// #define LED_SUBLCD_USE_PWM_3
+#define LED_SUBLCD_USE_PWM_NONE
+
+/* LED_KEY PWM Configuration */
+#define LED_KEY_USE_PWM_1
+// #define LED_KEY_USE_PWM_2
+// #define LED_KEY_USE_PWM_3
+// #define LED_KEY_USE_PWM_NONE
+
+/* VIBRATOR PWM Configuration */
+// #define VIBRATOR_USE_PWM_1
+// #define VIBRATOR_USE_PWM_2
+// #define VIBRATOR_USE_PWM_3
+#define VIBRATOR_USE_PWM_NONE
+
+#define LCD_CONTRAST_MAX_LEVEL 15
+#define LCD_PARAM_MAX_LEVEL 5
+#define BATTERY_MAX_LEVEL 10
+
+extern const kal_uint8 DEFAULT_HARDWARE_YEAR;
+extern const kal_uint8 DEFAULT_HARDWARE_MON;
+extern const kal_uint8 DEFAULT_HARDWARE_DAY;
+
+/* For AT command query voltage percentage */
+#define BATLEV_MAX_IDX 0 /* 0: turn off, reference to BATLEV_MAX_VOLTAGE directly */
+#define BATLEV_MAX_VOLTAGE 4200000
+
+
+extern const kal_uint32 ADC_BOOTUP_EVAL_PERIOD;
+extern const kal_uint32 ADC_BOOTUP_EVAL_COUNT;
+extern const kal_uint32 ADC_IDLE_EVAL_PERIOD;
+extern const kal_uint32 ADC_IDLE_EVAL_COUNT;
+extern const kal_uint32 ADC_TALKING_EVAL_PERIOD;
+extern const kal_uint32 ADC_TALKING_EVAL_COUNT;
+
+extern const kal_uint32 KPD_LONGPRESS_PERIOD;
+extern const kal_uint32 KPD_REPEAT_PERIOD;
+
+#if defined(__MULTI_LEVEL_BACKLIGHT_SUPPORT__) && defined(LED_MAINLCD_USE_PWM_1)
+extern kal_uint32 PWM1_Level_Info[PWM_MAX_BACKLIGHT_LEVEL][2];
+#else
+extern kal_uint32 PWM1_Level_Info[PWM_MAX_LEVEL][2];
+#endif
+
+#if defined(__MULTI_LEVEL_BACKLIGHT_SUPPORT__) && defined(LED_MAINLCD_USE_PWM_2)
+extern kal_uint32 PWM2_Level_Info[PWM_MAX_BACKLIGHT_LEVEL][2];
+#else
+extern kal_uint32 PWM2_Level_Info[PWM_MAX_LEVEL][2];
+#endif
+
+#if defined(__MULTI_LEVEL_BACKLIGHT_SUPPORT__) && defined(LED_MAINLCD_USE_PWM_3)
+extern kal_uint32 PWM3_Level_Info[PWM_MAX_BACKLIGHT_LEVEL][2];
+#else
+extern kal_uint32 PWM3_Level_Info[PWM_MAX_LEVEL][2];
+#endif
+
+// PWM4, 5, 6 for old PWN configuration begin
+extern kal_uint32 PWM4_Level_Info[PWM_MAX_LEVEL][2];
+extern kal_uint32 PWM5_Level_Info[PWM_MAX_LEVEL][2];
+extern kal_uint32 PWM6_Level_Info[PWM_MAX_LEVEL][2];
+// PWM4, 5, 6 for old PWN configuration end
+
+extern kal_uint32 Alter_Level_Info[PWM_MAX_LEVEL][2];
+
+extern kal_uint8 MainLCD_Contrast_Level_Info[LCD_CONTRAST_MAX_LEVEL];
+extern kal_uint8 MainLCD_Bias_Level_Info[LCD_PARAM_MAX_LEVEL];
+extern kal_uint8 MainLCD_Linerate_Level_Info[LCD_PARAM_MAX_LEVEL];
+extern kal_uint8 MainLCD_Temp_Level_Info[LCD_PARAM_MAX_LEVEL];
+
+#ifdef DUAL_LCD
+extern kal_uint8 SubLCD_Contrast_Level_Info[LCD_CONTRAST_MAX_LEVEL];
+extern kal_uint8 SubLCD_Bias_Level_Info[LCD_PARAM_MAX_LEVEL];
+extern kal_uint8 SubLCD_Linerate_Level_Info[LCD_PARAM_MAX_LEVEL];
+extern kal_uint8 SubLCD_Temp_Level_Info[LCD_PARAM_MAX_LEVEL];
+#endif
+
+extern kal_uint32 Battery_Level_Info[BATTERY_MAX_LEVEL];
+
+#if defined(MT6318)
+extern kal_uint32 PMIC6318_PWM_Level_Info[PWM_MAX_LEVEL][2];
+extern kal_uint16 pmic_custom_get_bl_pmw_type(void);
+#endif
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_sim_driver.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_sim_driver.c
new file mode 100644
index 0000000..3660d5c
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/custom_sim_driver.c
@@ -0,0 +1,850 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * custom_sim_driver.C
+ *
+ * Project:
+ * --------
+ * Gemini
+ *
+ * Description:
+ * ------------
+ * this file is custom implementation of SIM driver
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "drv_comm.h"
+#include "reg_base.h"
+#include "intrCtrl.h"
+#include "multi_icc_custom.h"
+#include "kal_public_api.h"
+#include "sim_sw_comm.h"
+#include "sim_drv_HW_reg_MTK.h"
+#include "sim_drv_trc.h"
+
+#ifdef __SIM_HOT_SWAP_SUPPORT__
+#include "eint.h"
+#include "ccci_rpc_if.h"
+#if defined(SIM_DRV_FAST_DISCHARGE_BY_PMIC_EINT)
+#include "dcl.h"
+#endif
+#endif
+#if defined(__MTK_TARGET__)
+#ifdef DRV_SIM_ALL_SOLUTION_BUILT
+
+extern void sim_init_hwCb(void);
+extern void DRV_ICC_interface_init(SIM_ICC_APPLICATION application);
+extern kal_bool sim_physicalSlotChanged;
+extern void sim_dump_eint(sim_HW_cb *hw_cb);
+
+/*following is the template for dual SIM platform, I test it on TF68*/
+/****************************************************
+ customer and HW SA please fill from here
+*****************************************************/
+kal_char sim_dbg_custom_str[200];
+#define PLUG_OUT_TIME_COUNT 1 // for plug out detect time can be modified
+
+#if !defined(__SIM_DRV_CO_LOAD_MT6306__)
+#if defined(SIM_DRV_SWITCH_MT6306) || defined(SIM_DRV_GEMINI_WITH_MT6306)
+#define iccSlotNum 4
+#else
+#define iccSlotNum 2
+#endif
+
+#ifdef __SIM_HOT_SWAP_SUPPORT__
+ SIM_ICC_HOT_PLUG iccHotPlugTable[iccSlotNum];
+#endif
+
+const SIM_ICC_HW_SW_MAPPING iccMappingTable[iccSlotNum] =
+{
+ /*
+ logical number, application usage from user's view, do it connect to MT6302, owned by which SIM controller, MT6302 chip #, interface # of this MT6302
+ */
+#if !defined(SIM_DRV_SWITCH_MT6306)
+ {0, SIM_ICC_APPLICATION_PHONE1, MTK_SIMIF0, KAL_FALSE, 0, 1},
+ {1, SIM_ICC_APPLICATION_PHONE2, MTK_SIMIF1, KAL_FALSE, 0, 1},
+#elif defined (SIM_DRV_GEMINI_WITH_MT6306)
+ {0, SIM_ICC_APPLICATION_PHONE1, MTK_SIMIF0, SIM_SWITCH_6306, 0, 0}, //SIM_IF0,switch0, port 0
+ {1, SIM_ICC_APPLICATION_PHONE2, MTK_SIMIF1, SIM_SWITCH_6306, 1, 0}, //SIM_IF1,switch1, port 0
+ {2, SIM_ICC_APPLICATION_PHONE3, MTK_SIMIF0, SIM_SWITCH_6306, 0, 1},
+ {3, SIM_ICC_APPLICATION_PHONE4, MTK_SIMIF1, SIM_SWITCH_6306, 1, 1},
+#else
+ {0, SIM_ICC_APPLICATION_PHONE1, MTK_SIMIF0, SIM_SWITCH_6306, 0, 0},
+ {1, SIM_ICC_APPLICATION_PHONE2, MTK_SIMIF0, SIM_SWITCH_6306, 0, 1},
+ {2, SIM_ICC_APPLICATION_PHONE3, MTK_SIMIF1, SIM_SWITCH_6306, 1, 0},
+ {3, SIM_ICC_APPLICATION_PHONE4, MTK_SIMIF1, SIM_SWITCH_6306, 1, 1},
+#endif
+};
+#else // #if !defined(__SIM_DRV_CO_LOAD_MT6306__)
+extern kal_bool sim_connectMT6306;
+kal_uint32 iccSlotNum = 4;
+
+#ifdef __SIM_HOT_SWAP_SUPPORT__
+ SIM_ICC_HOT_PLUG iccHotPlugTable[4];
+#endif
+
+SIM_ICC_HW_SW_MAPPING *iccMappingTable;
+
+SIM_ICC_HW_SW_MAPPING iccMappingTable_2SIM[2] =
+{
+ {0, SIM_ICC_APPLICATION_PHONE1, MTK_SIMIF0, KAL_FALSE, 0, 1},
+ {1, SIM_ICC_APPLICATION_PHONE2, MTK_SIMIF1, KAL_FALSE, 0, 1},
+};
+
+SIM_ICC_HW_SW_MAPPING iccMappingTable_4SIM[4] =
+{
+#if defined (SIM_DRV_GEMINI_WITH_MT6306)
+ {0, SIM_ICC_APPLICATION_PHONE1, MTK_SIMIF0, SIM_SWITCH_6306, 0, 0}, //SIM_IF0,switch0, port 0
+ {1, SIM_ICC_APPLICATION_PHONE2, MTK_SIMIF1, SIM_SWITCH_6306, 1, 0}, //SIM_IF1,switch1, port 0
+ {2, SIM_ICC_APPLICATION_PHONE3, MTK_SIMIF0, SIM_SWITCH_6306, 0, 1},
+ {3, SIM_ICC_APPLICATION_PHONE4, MTK_SIMIF1, SIM_SWITCH_6306, 1, 1},
+#else
+ {0, SIM_ICC_APPLICATION_PHONE1, MTK_SIMIF0, SIM_SWITCH_6306, 0, 0},
+ {1, SIM_ICC_APPLICATION_PHONE2, MTK_SIMIF0, SIM_SWITCH_6306, 0, 1},
+ {2, SIM_ICC_APPLICATION_PHONE3, MTK_SIMIF1, SIM_SWITCH_6306, 1, 0},
+ {3, SIM_ICC_APPLICATION_PHONE4, MTK_SIMIF1, SIM_SWITCH_6306, 1, 1},
+#endif
+};
+#endif
+
+/****************************************************
+ end of custom table
+*****************************************************/
+
+/****************************************************
+ only SW guys familiar with multiple SIM driver can modify following
+*****************************************************/
+
+void sim_init_all_cb(void)
+{
+ kal_uint32 loopIndex;
+#if defined(__SIM_DRV_CO_LOAD_MT6306__) && defined(SIM_DRV_SWITCH_MT6306)
+ extern void USIM_connect_mt6306(void);
+ USIM_connect_mt6306();
+
+ if (sim_connectMT6306 == KAL_FALSE)
+ {
+ iccSlotNum = 2;
+ iccMappingTable = iccMappingTable_2SIM;
+ }
+ else
+ {
+ iccSlotNum = 4;
+ iccMappingTable = iccMappingTable_4SIM;
+ }
+#endif
+ sim_init_hwCb();
+
+ for(loopIndex = 0; iccSlotNum > loopIndex; loopIndex++)
+ {
+ DRV_ICC_interface_init(iccMappingTable[loopIndex].application);
+ }
+#ifdef SIM_DRV_GEMINI_WITH_MT6306
+ sim_MT6306_init_for_GEMINI();
+#endif
+#if defined(SIM_DRV_DYNAMIC_GET_GPIO_NUM) && defined(__MTK_TARGET__)
+ extern void sim_query_GpioNumOfSimPins(void);
+ sim_query_GpioNumOfSimPins();
+#endif
+}
+
+kal_uint32 sim_get_logicalNum_from_app(SIM_ICC_APPLICATION application)
+{
+ kal_uint32 loopIndex, loopMax = iccSlotNum;
+
+ for(loopIndex = 0; loopIndex < loopMax; loopIndex++)
+ {
+ if(application == iccMappingTable[loopIndex].application)
+ {
+ if(iccSlotNum <= iccMappingTable[loopIndex].logicalNum)
+ ASSERT(0);
+ return iccMappingTable[loopIndex].logicalNum;
+ }
+ }
+
+ return 0xffffffff;
+}
+kal_uint32 sim_get_app_from_logicalNum(kal_uint32 logicalNum)
+{
+ kal_uint32 loopIndex, loopMax = iccSlotNum;
+ if(iccSlotNum <= logicalNum)
+ ASSERT(0);
+ for(loopIndex = 0; loopIndex < loopMax; loopIndex++)
+ {
+ if(logicalNum == iccMappingTable[loopIndex].logicalNum)
+ {
+ return iccMappingTable[loopIndex].application;
+ }
+ }
+
+ return 0xffffffff;
+}
+kal_uint32 sim_get_MT6302_from_logicalNum(kal_uint32 logicalNum)
+{
+ kal_uint32 loopIndex, loopMax = iccSlotNum;
+
+ if(iccSlotNum <= logicalNum)
+ ASSERT(0);
+
+ for(loopIndex = 0; loopIndex < loopMax; loopIndex++)
+ {
+ if(logicalNum == iccMappingTable[loopIndex].logicalNum)
+ {
+ if(SIM_SWITCH_6302 == (SIM_ICC_SWITCHCONTROL) iccMappingTable[loopIndex].needMT6302)
+ return (iccMappingTable[loopIndex].MT6302ChipNum << 8) | (iccMappingTable[loopIndex].MT6302PortNum);
+ else if(SIM_SWITCH_6306 == (SIM_ICC_SWITCHCONTROL) iccMappingTable[loopIndex].needMT6302)
+ return (iccMappingTable[loopIndex].MT6302ChipNum << 8) | (iccMappingTable[loopIndex].MT6302PortNum) | (SIM_SWITCH_6306 << 16);
+ else if(SIM_SWITCH_6314 == (SIM_ICC_SWITCHCONTROL) iccMappingTable[loopIndex].needMT6302)
+ return(iccMappingTable[loopIndex].MT6302ChipNum << 8) | (iccMappingTable[loopIndex].MT6302PortNum) | (SIM_SWITCH_6314 << 16);
+ else
+ return SIM_ICC_MT6302_NONE;
+ }
+ }
+
+ /*there is no this logical number*/
+ ASSERT(0);
+ return 0;
+}
+
+kal_uint32 sim_get_hwCtrl_from_logicalNum(kal_uint32 logicalNum)
+{
+ kal_uint32 loopIndex, loopMax = iccSlotNum;
+
+ if(iccSlotNum <= logicalNum)
+ ASSERT(0);
+
+ for(loopIndex = 0; loopIndex < loopMax; loopIndex++)
+ {
+ if(logicalNum == iccMappingTable[loopIndex].logicalNum)
+ {
+ return iccMappingTable[loopIndex].hwCtrl;
+ }
+ }
+
+ /*there is no this logical number*/
+ ASSERT(0);
+ return 0;
+}
+
+kal_uint32 sim_get_MT6302PeerInterface(kal_uint8 chipNum, kal_uint32 portNum)
+{
+ kal_uint32 loopIndex, loopMax = iccSlotNum;
+
+ for(loopIndex = 0; loopIndex < loopMax; loopIndex++)
+ {
+ if(chipNum == iccMappingTable[loopIndex].MT6302ChipNum && portNum == iccMappingTable[loopIndex].MT6302PortNum)
+ {
+ if(iccSlotNum <= iccMappingTable[loopIndex].logicalNum)
+ ASSERT(0);
+ return iccMappingTable[loopIndex].logicalNum;
+ }
+ }
+
+ /*there is no this logical number*/
+ return SIM_ICC_MT6302_NONE;
+}
+
+#if defined(__MTK_TARGET__)
+kal_uint32 sim_get_ToalInterfaceCount()
+{
+ return iccSlotNum;
+}
+#endif
+
+kal_uint32 get_CAS_icc_logicalNum()
+{
+ kal_uint32 loopIndex, loopMax = iccSlotNum;
+
+ for(loopIndex = 0; loopIndex < loopMax; loopIndex++)
+ {
+ if(SIM_ICC_APPLICATION_CMMB_SMD == iccMappingTable[loopIndex].application)
+ {
+ if(iccSlotNum <= iccMappingTable[loopIndex].logicalNum)
+ ASSERT(0);
+ return iccMappingTable[loopIndex].logicalNum;
+ }
+ }
+
+ /*there is no this logical number*/
+ ASSERT(0);
+ return 0;
+}
+
+kal_uint32 sim_custom_task_2_driver(kal_uint32 taskInterface)
+{
+ return taskInterface;
+}
+
+#ifdef __SIM_HOT_SWAP_SUPPORT__
+void sim_reg_hot_plug_cb(SIM_ICC_APPLICATION application,
+ SIM_HOT_PLUG_CALLBACK hotPlugInCb,
+ SIM_HOT_PLUG_CALLBACK hotPlugOutCb)
+{
+ kal_uint32 loopIndex;
+
+ for(loopIndex = 0; loopIndex < iccSlotNum; loopIndex++)
+ {
+ if(application == iccMappingTable[loopIndex].application)
+ {
+ iccHotPlugTable[loopIndex].application = application;
+ iccHotPlugTable[loopIndex].plugInCb = hotPlugInCb;
+ iccHotPlugTable[loopIndex].plugOutcb = hotPlugOutCb;
+ break;
+ }
+ }
+}
+#if defined(__SIM_HOT_SWAP_POLL_TIMER__)
+extern void sim_hot_swap_poll_timer_rollback(kal_uint32 which_sim);
+void sim_rollback_timer(SIM_ICC_APPLICATION app)
+{
+ if (app <= SIM_ICC_APPLICATION_PHONE2 && app >= SIM_ICC_APPLICATION_PHONE1)
+ {
+ kal_uint32 simInterface = sim_get_logicalNum_from_app(app);
+ sim_HW_cb * hw_cb = (sim_HW_cb *)sim_get_hwCb(simInterface);
+ if (hw_cb->PollTimerStart == KAL_TRUE)
+ {
+ hw_cb->PollTimerStart = KAL_FALSE;
+ sim_hot_swap_poll_timer_rollback(app);
+ kal_sprintf(sim_dbg_custom_str, "\r\n[SIM_CUS_DRV:%d]: rollback when insert", simInterface);
+ DRV_ICC_print_str(sim_dbg_custom_str);
+ }
+ hw_cb->PollTimerPluggedOut = KAL_FALSE;
+ hw_cb->PollTimerEnd = KAL_TRUE;
+ }
+}
+#endif
+void sim_get_card_status(kal_uint32 logicalNum, kal_bool *isRemoved)
+{
+ kal_uint32 loopIndex;
+
+ for(loopIndex = 0; loopIndex < iccSlotNum; loopIndex++)
+ {
+ if(logicalNum == iccHotPlugTable[loopIndex].logicalNum)
+ {
+ *isRemoved = iccHotPlugTable[loopIndex].removed;
+ break;
+ }
+ }
+}
+
+#ifdef __TC01__
+kal_bool sim_get_card_status_tc01(kal_uint32 logicalNum)
+{
+#define GPIO_FOR_SIM1_EINT 47
+#define GPIO_FOR_SIM2_EINT 46
+extern char GPIO_ReadIO(kal_int16 port);
+
+ kal_uint32 loopIndex = 0;
+ kal_bool pin_sts = KAL_FALSE;
+
+ for(loopIndex = 0; loopIndex < iccSlotNum; loopIndex++){
+ if(logicalNum == iccHotPlugTable[loopIndex].logicalNum) break;
+ }
+
+ if (iccHotPlugTable[loopIndex].application == SIM_ICC_APPLICATION_PHONE1)
+ pin_sts = (kal_bool)GPIO_ReadIO(GPIO_FOR_SIM1_EINT);
+ else if (iccHotPlugTable[loopIndex].application == SIM_ICC_APPLICATION_PHONE2)
+ pin_sts = (kal_bool)GPIO_ReadIO(GPIO_FOR_SIM2_EINT);
+
+ return (kal_bool)(pin_sts != iccHotPlugTable[loopIndex].remove_polarity);
+
+}
+#endif
+
+#if defined(SIM_DRV_FAST_DISCHARGE_BY_PMIC_EINT)
+void sim_config_pmic_fast_dischage(SIM_ICC_APPLICATION application, kal_uint32 rm_pol, kal_bool enable)
+{
+ #if defined(SIM_DRV_CTRL_VSIM_BY_SPMI)
+ DCL_HANDLE handle;
+ SPMI_CTRL_EXT_REGISTER_WRITEL cmd;
+
+ handle = DclSPMI_Open(DCL_SPMI, FLAGS_NONE);
+ cmd.type = DCL_MAIN_PMIC;
+ cmd.len = 1;
+
+ if(application == SIM_ICC_APPLICATION_PHONE1) {
+ cmd.addr = RG_LDO_VSIM1_EINT;
+ } else if (application == SIM_ICC_APPLICATION_PHONE2) {
+ cmd.addr = RG_LDO_VSIM2_EINT;
+ } else {
+ SIM_DEBUG_ASSERT(0);
+ }
+
+ // config POLarity and DBounce
+ cmd.value = RG_LDO_VSIMx_EINT_DB_SEL; // 0-5us; 1-10us
+ if (rm_pol != 0) {
+ cmd.value |= RG_LDO_VSIMx_EINT_POL;
+ }
+ DclSPMI_Control(handle, EXT_REGISTER_WRITEL, (DCL_CTRL_DATA_T *)&cmd);
+
+ // config EINT_EN
+ if (enable) {
+ cmd.value |= RG_LDO_VSIMx_EINT_EN;
+ DclSPMI_Control(handle, EXT_REGISTER_WRITEL, (DCL_CTRL_DATA_T *)&cmd);
+ kal_sprintf(sim_dbg_custom_str, "[SIM_CUS_DRV:%d]: Enable PMIC Fast Discharge", application);
+ DRV_ICC_print_str(sim_dbg_custom_str);
+ } else {
+ kal_sprintf(sim_dbg_custom_str, "[SIM_CUS_DRV:%d]: Disable PMIC Fast Discharge", application);
+ DRV_ICC_print_str(sim_dbg_custom_str);
+ }
+
+ DclSPMI_Close(handle);
+ #endif
+}
+#endif
+
+
+void sim_hot_plug_handle(SIM_ICC_HOT_PLUG *hotPlugCnf, kal_bool removed)
+{
+ SIM_ICC_APPLICATION app;
+ //ASSERT(hotPlugCnf->removed != removed);
+ hotPlugCnf->removed = removed;
+
+ if (sim_physicalSlotChanged == KAL_TRUE)
+ app = 1 - hotPlugCnf->application;
+ else
+ app = hotPlugCnf->application;
+
+ if (removed)
+ {
+ if (hotPlugCnf->plugOutcb != NULL)
+ {
+#if defined(__SIM_HOT_SWAP_POLL_TIMER__)
+ SIM_PlugEvent_Poll_Timer_Cb(app);
+#else
+ hotPlugCnf->plugOutcb(app);
+ SIM_PlugEvent_Cb(app);
+#endif
+ }
+ }
+ else
+ {
+ if (hotPlugCnf->plugInCb!= NULL)
+ {
+ hotPlugCnf->plugInCb(app);
+#if defined(__SIM_HOT_SWAP_POLL_TIMER__)
+ sim_rollback_timer(app);
+#endif
+ }
+ }
+}
+
+void sim_hot_plug_eint_cb(SIM_ICC_APPLICATION app)
+{
+ kal_int32 idx;
+ kal_bool removed;
+
+ for (idx = 0; idx < iccSlotNum; idx++)
+ {
+ if(app == iccHotPlugTable[idx].application)
+ break;
+ }
+
+ ASSERT(idx != iccSlotNum);
+
+ removed = (iccHotPlugTable[idx].polarity == iccHotPlugTable[idx].remove_polarity);
+
+ iccHotPlugTable[idx].polarity = !iccHotPlugTable[idx].polarity;
+ EINT_Set_HW_Debounce_Enable(iccHotPlugTable[idx].eintNo, EINT_DISABLE);
+ EINT_Set_Polarity(iccHotPlugTable[idx].eintNo, iccHotPlugTable[idx].polarity);
+ if (removed == KAL_TRUE)
+ EINT_Set_HW_Debounce(iccHotPlugTable[idx].eintNo,iccHotPlugTable[idx].debounceTime); //Removed, Set for Insert, 1s
+ else
+ EINT_Set_HW_Debounce_32KCycle(iccHotPlugTable[idx].eintNo, PLUG_OUT_TIME_COUNT); // Set for Remove
+ EINT_Set_HW_Debounce_Enable(iccHotPlugTable[idx].eintNo, EINT_ENABLE);
+
+ sim_hot_plug_handle(&iccHotPlugTable[idx], removed);
+#if defined (__DUAL_SIM_HOT_SWAP_CO_DECK_SUPPORT__)
+ sim_hot_plug_handle(&iccHotPlugTable[1 - idx], removed); // 1-idx must be legal, or ASSERT will happen in sim_reg_hot_plug_eint
+#endif
+
+#if defined(SIM_DRV_FAST_DISCHARGE_BY_PMIC_EINT)
+ // sim_config_pmic_fast_dischage(app, iccHotPlugTable[idx].remove_polarity, !removed);
+#endif
+
+ if (removed == KAL_TRUE)
+ {
+ MD_TRC_LOG_SIM_DRV_REMOVE_SIM(__LINE__,
+ idx,
+ app,
+ iccHotPlugTable[idx].polarity,
+ iccHotPlugTable[idx].removed,
+ iccHotPlugTable[((idx <= SIM_ICC_APPLICATION_PHONE2) ? (1 - idx) : idx)].polarity,
+ iccHotPlugTable[((idx <= SIM_ICC_APPLICATION_PHONE2) ? (1 - idx) : idx)].removed,
+ drv_get_current_time());
+ }
+ else
+ {
+ MD_TRC_LOG_SIM_DRV_INSERT_SIM(__LINE__,
+ idx,
+ app,
+ iccHotPlugTable[idx].polarity,
+ iccHotPlugTable[idx].removed,
+ iccHotPlugTable[((idx <= SIM_ICC_APPLICATION_PHONE2) ? (1 - idx) : idx)].polarity,
+ iccHotPlugTable[((idx <= SIM_ICC_APPLICATION_PHONE2) ? (1 - idx) : idx)].removed,
+ drv_get_current_time());
+ }
+
+ sim_dump_eint(sim_get_hwCb(sim_get_logicalNum_from_app(app)));
+}
+
+void sim1_hot_plug_eint_cb(void)
+{
+ sim_hot_plug_eint_cb(SIM_ICC_APPLICATION_PHONE1);
+}
+
+void sim2_hot_plug_eint_cb(void)
+{
+ sim_hot_plug_eint_cb(SIM_ICC_APPLICATION_PHONE2);
+}
+
+#if defined(SIM_DRV_SWITCH_MT6306)
+void sim3_hot_plug_eint_cb(void)
+{
+ sim_hot_plug_eint_cb(SIM_ICC_APPLICATION_PHONE3);
+}
+#endif
+
+void sim_reg_hot_plug_eint(SIM_ICC_APPLICATION application,
+ kal_uint32 eintNo,
+ kal_uint32 debounceTime,
+ kal_uint32 polarity,
+ kal_uint32 sensitivity,
+ kal_uint32 socketType)
+{
+ kal_uint32 loopIndex;
+
+ for(loopIndex = 0; loopIndex < iccSlotNum; loopIndex++)
+ {
+ if(application == iccMappingTable[loopIndex].application)
+ {
+ if(iccHotPlugTable[loopIndex].registed == KAL_TRUE)
+ {
+ kal_sprintf(sim_dbg_custom_str, "[SIM_DRV]sim_registed\n\r");
+ DRV_ICC_print_str(sim_dbg_custom_str);
+ return;
+ }
+ else
+ {
+ iccHotPlugTable[loopIndex].logicalNum = iccMappingTable[loopIndex].logicalNum;
+ iccHotPlugTable[loopIndex].application = iccMappingTable[loopIndex].application;
+ iccHotPlugTable[loopIndex].eintNo = eintNo;
+ iccHotPlugTable[loopIndex].debounceTime = debounceTime;
+ iccHotPlugTable[loopIndex].polarity = (kal_bool)polarity;
+ iccHotPlugTable[loopIndex].remove_polarity = (kal_bool)polarity;
+ iccHotPlugTable[loopIndex].sensitivity = sensitivity;
+ iccHotPlugTable[loopIndex].socketType = socketType;
+ iccHotPlugTable[loopIndex].registed = KAL_TRUE;
+#if defined (__DUAL_SIM_HOT_SWAP_CO_DECK_SUPPORT__)
+ ASSERT(1-loopIndex >= 0); // To make it simple
+ iccHotPlugTable[1 - loopIndex].logicalNum = iccMappingTable[1 - loopIndex].logicalNum;
+ iccHotPlugTable[1 - loopIndex].application = iccMappingTable[1 - loopIndex].application;
+ iccHotPlugTable[1 - loopIndex].eintNo = eintNo;
+ iccHotPlugTable[1 - loopIndex].debounceTime = debounceTime;
+ iccHotPlugTable[1 - loopIndex].polarity = (kal_bool)polarity;
+ iccHotPlugTable[1 - loopIndex].remove_polarity = (kal_bool)polarity;
+ iccHotPlugTable[1 - loopIndex].sensitivity = sensitivity;
+ iccHotPlugTable[1 - loopIndex].socketType = socketType;
+ iccHotPlugTable[1 - loopIndex].registed = KAL_TRUE;
+#endif
+ break;
+ }
+ }
+ }
+
+ // need to set HW debounce & sensitivity before registration
+ EINT_Set_HW_Debounce_Enable(eintNo, EINT_DISABLE);
+ //EINT_SW_Debounce_Modify(eintNo, 0); // unit: 10 ms
+ //EINT_Set_HW_Debounce(eintNo, debounceTime * 10); // unit: ms
+ EINT_Set_HW_Debounce_32KCycle(eintNo, PLUG_OUT_TIME_COUNT); // Set for Remove
+ EINT_Set_Sensitivity(eintNo, sensitivity);
+
+ if(application == SIM_ICC_APPLICATION_PHONE1)
+ {
+ EINT_Registration(eintNo, KAL_TRUE, (kal_bool)polarity, sim1_hot_plug_eint_cb, KAL_TRUE);
+ }
+ else if(application == SIM_ICC_APPLICATION_PHONE2)
+ {
+ EINT_Registration(eintNo, KAL_TRUE, (kal_bool)polarity, sim2_hot_plug_eint_cb, KAL_TRUE);
+ }
+#if defined(SIM_DRV_SWITCH_MT6306)
+ else if(application == SIM_ICC_APPLICATION_PHONE3)
+ {
+ EINT_Registration(eintNo, KAL_TRUE, (kal_bool)polarity, sim3_hot_plug_eint_cb, KAL_TRUE);
+ }
+#endif
+
+#if defined(SIM_DRV_FAST_DISCHARGE_BY_PMIC_EINT)
+ sim_config_pmic_fast_dischage(application, polarity, KAL_TRUE);
+#if defined (__DUAL_SIM_HOT_SWAP_CO_DECK_SUPPORT__)
+ ASSERT(1-application >= 0); // To make it simple
+ sim_config_pmic_fast_dischage(1-application, polarity, KAL_TRUE);
+#endif
+#endif
+}
+#endif
+
+void sim_custom_setting_before_turning_on_vsim(kal_uint32 hwInterfaceNo)
+{
+ return;
+}
+
+void sim_custom_setting_after_turning_off_vsim(kal_uint32 hwInterfaceNo)
+{
+ return;
+}
+
+void sim_custom_setting_before_resetting_sim(kal_uint32 hwInterfaceNo)
+{
+ return;
+}
+#if defined (__SIM_HOT_SWAP_SUPPORT__)
+kal_uint32 SIM_EINT_GetAttribute(kal_uint32 simInterface,kal_uint8 *EintName, kal_uint32 EintNameLength, kal_uint32 queryType, void *result, kal_uint32 resultLength)
+{
+ #if !defined( MT6297)
+ return IPC_RPC_EINT_GetAttribute(EintName,EintNameLength,queryType,result,resultLength);
+ #else
+ switch(queryType)
+ {
+ case SIM_HOT_PLUG_EINT_NUMBER:
+ if (simInterface==0)
+ *(kal_uint32*)result=1;
+ else
+ *(kal_uint32*)result=2;
+ break;
+ case SIM_HOT_PLUG_EINT_DEBOUNCETIME:
+ *(kal_uint32*)result = 100;
+ break;
+ case SIM_HOT_PLUG_EINT_POLARITY:
+ *(kal_uint32*)result = 1;
+ break;
+ case SIM_HOT_PLUG_EINT_SOCKETTYPE:
+ *(kal_uint32*)result = 0;
+ break;
+ case SIM_HOT_PLUG_EINT_SENSITIVITY:
+ *(kal_uint32*)result = 0;
+ break;
+ default:
+ ASSERT(0);
+ }
+ #endif
+
+ return 0;
+}
+#endif
+
+#endif
+#else
+kal_bool sim_get_card_status_tc01(kal_uint32 logicalNum){return KAL_TRUE;}
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/e_compass_sensor_hw_define.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/e_compass_sensor_hw_define.h
new file mode 100644
index 0000000..cf12384
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/e_compass_sensor_hw_define.h
@@ -0,0 +1,88 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * e_compass_sensor_hw_define.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines GPIO for serial interface.
+ *
+ * Author:
+ * Peter Zhang
+ *
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef E_COMPASS_SENSOR_HW_DEFINE_H
+#define E_COMPASS_SENSOR_HW_DEFINE_H
+
+#ifdef __CUST_NEW__
+
+extern const char gpio_e_compass_sensor_sck_pin;
+extern const char gpio_e_compass_sensor_sda_pin;
+extern const char gpio_e_compass_sensor_pwr_pin;
+
+#define E_COMPASS_SENSOR_SCK gpio_e_compass_sensor_sck_pin
+#define E_COMPASS_SENSOR_SDA gpio_e_compass_sensor_sda_pin
+#define E_COMPASS_SENSOR_PWR gpio_e_compass_sensor_pwr_pin
+
+
+#else /* __CUST_NEW__ */
+
+#define E_COMPASS_SENSOR_SCK 25
+#define E_COMPASS_SENSOR_SDA 26
+#define E_COMPASS_SENSOR_PWR 28
+
+#endif /* __CUST_NEW__ */
+
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/eint_def.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/eint_def.c
new file mode 100644
index 0000000..7aadb33
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/eint_def.c
@@ -0,0 +1,490 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * eint_def.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file is defined for external interrupt channel.
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "drv_comm.h"
+#include "eint.h"
+#include "kal_public_api.h"
+
+#ifdef __CUST_NEW__
+
+#include "eint_drv.h"
+extern const kal_uint8 AUX_EINT_NO;
+extern const kal_uint8 CHRDET_EINT_NO;
+
+#if defined(JOGBALL_SUPPORT)
+extern const kal_uint8 JB_UP_EINT_NO;
+extern const kal_uint8 JB_DOWN_EINT_NO;
+extern const kal_uint8 JB_RIGHT_EINT_NO;
+extern const kal_uint8 JB_LEFT_EINT_NO;
+#endif//#if defined(JOGBALL_SUPPORT)
+
+#if defined(__PHONE_CLAMSHELL__) || defined(__PHONE_SLIDE__)
+extern const kal_uint8 CLAMDET_EINT_NO;
+#endif /* __PHONE_CLAMSHELL__ || __PHONE_SLIDE__ */
+
+#ifdef __USB_ENABLE__
+extern const kal_uint8 USB_EINT_NO;
+#else /* __USB_ENABLE__ */
+extern const kal_uint8 USB_EINT_NO;
+#endif /* __USB_ENABLE__ */
+
+#ifdef __BT_SUPPORT__
+extern const kal_uint8 BT_EINT_NO;
+#endif /* __BT_SUPPORT__ */
+
+#if defined(__CHARGER_USB_DETECT_WIHT_ONE_EINT__)
+extern const kal_uint8 CHR_USB_EINT_NO;
+#endif /* __CHARGER_USB_DETECT_WIHT_ONE_EINT__ */
+
+#ifdef __SWDBG_SUPPORT__
+extern const kal_uint8 SWDBG_EINT_NO;
+#endif /* __SWDBG_SUPPORT__ */
+
+#if defined(MOTION_SENSOR_SUPPORT)
+extern const kal_uint8 MOTION_SENSOR_EINT_NO;
+#endif /* MOTION_SENSOR_SUPPORT */
+
+#if defined(TOUCH_PANEL_SUPPORT) || defined(HAND_WRITING)
+extern const kal_uint8 TOUCH_PANEL_EINT_NO;
+#endif /* TOUCH_PANEL_SUPPORT || HAND_WRITING */
+
+#ifdef __WIFI_SUPPORT__
+extern const kal_uint8 WIFI_EINT_NO;
+#endif /* __WIFI_SUPPORT__ */
+
+#ifdef __OTG_DETECT_IDPIN_WITH_EINT__
+extern const kal_uint8 OTG_IDPIN_EINT_NO;
+#endif
+
+#ifdef __EXTRA_A_B_KEY_SUPPORT__
+extern const kal_uint8 EXTRA_A_KEY_EINT_NO;
+extern const kal_uint8 EXTRA_B_KEY_EINT_NO;
+#endif
+
+#ifdef __GPS_SUPPORT__
+extern const kal_uint8 GPS_EINT_NO;
+#endif /* __GPS_SUPPORT__ */
+#else /* __CUST_NEW__ */
+
+const kal_uint8 AUX_EINT_NO = 3;
+const kal_uint8 CHRDET_EINT_NO = 0;
+
+#if defined(__PHONE_CLAMSHELL__) || defined(__PHONE_SLIDE__)
+const kal_uint8 CLAMDET_EINT_NO = ?;
+#endif /* __PHONE_CLAMSHELL__ || __PHONE_SLIDE__ */
+
+#ifdef __USB_ENABLE__
+const kal_uint8 USB_EINT_NO = 0;
+#else /* __USB_ENABLE__ */
+const kal_uint8 USB_EINT_NO = EINT_CHANNEL_NOT_EXIST;
+#endif /* __USB_ENABLE__ */
+
+#ifdef __BT_SUPPORT__
+const kal_uint8 BT_EINT_NO = 4;
+#endif /* __BT_SUPPORT__ */
+
+#if defined(__CHARGER_USB_DETECT_WIHT_ONE_EINT__)
+const kal_uint8 CHR_USB_EINT_NO = 0;
+#endif /* __CHARGER_USB_DETECT_WIHT_ONE_EINT__ */
+
+#ifdef __SWDBG_SUPPORT__
+const kal_uint8 SWDBG_EINT_NO = EINT_CHANNEL_NOT_EXIST;
+#endif /* __SWDBG_SUPPORT__ */
+
+#if defined(MOTION_SENSOR_SUPPORT)
+const kal_uint8 MOTION_SENSOR_EINT_NO = 4;
+#endif /* MOTION_SENSOR_SUPPORT */
+
+#if defined(TOUCH_PANEL_SUPPORT) || defined(HAND_WRITING)
+const kal_uint8 TOUCH_PANEL_EINT_NO = 2;
+#endif /* TOUCH_PANEL_SUPPORT || HAND_WRITING */
+
+#ifdef __WIFI_SUPPORT__
+const kal_uint8 WIFI_EINT_NO = ?;
+#endif /* __WIFI_SUPPORT__ */
+
+#ifdef __OTG_DETECT_IDPIN_WITH_EINT__
+const kal_uint8 OTG_IDPIN_EINT_NO = ?;
+#endif
+
+#ifdef __EXTRA_A_B_KEY_SUPPORT__
+const kal_uint8 EXTRA_A_KEY_EINT_NO = ?;
+const kal_uint8 EXTRA_B_KEY_EINT_NO = ?;
+#endif
+
+#ifdef __GPS_SUPPORT__
+const kal_uint8 GPS_EINT_NO = EINT_CHANNEL_NOT_EXIST;
+#endif /* __WIFI_SUPPORT__ */
+
+#endif /* __CUST_NEW__ */
+
+#if defined(__CUST_NEW__) && defined(EINT0_DEBOUNCE_TIME_DELAY) && defined(EINT1_DEBOUNCE_TIME_DELAY) && defined(EINT2_DEBOUNCE_TIME_DELAY) && defined(EINT3_DEBOUNCE_TIME_DELAY)
+
+/*Unit: 10ms*/
+kal_uint8 custom_eint_sw_debounce_time_delay[EINT_MAX_CHANNEL] =
+{
+ EINT0_DEBOUNCE_TIME_DELAY,
+ EINT1_DEBOUNCE_TIME_DELAY,
+ EINT2_DEBOUNCE_TIME_DELAY,
+ EINT3_DEBOUNCE_TIME_DELAY
+};
+
+#else /* __CUST_NEW__ */
+
+/*Unit: 10ms*/
+kal_uint8 custom_eint_sw_debounce_time_delay[EINT_MAX_CHANNEL] =
+{
+ 50, /*EINT 0,500ms*/
+ 50, /*EINT 1,500ms*/
+ 50, /*EINT 2,500ms*/
+ 1
+};
+
+#endif /* __CUST_NEW__ */
+
+kal_uint8 *custom_config_eint_sw_debounce_time_delay()
+{
+ return custom_eint_sw_debounce_time_delay;
+}
+
+kal_uint8 custom_eint_get_channel(eint_channel_type type)
+{
+ switch(type)
+ {
+ case aux_eint_chann:
+ return ((kal_uint8)AUX_EINT_NO);
+
+ case chrdet_eint_chann:
+ return ((kal_uint8)CHRDET_EINT_NO);
+
+#if defined(__PHONE_CLAMSHELL__) || defined(__PHONE_SLIDE__)
+ case clamdet_eint_chann:
+ return ((kal_uint8)CLAMDET_EINT_NO);
+#endif /* __PHONE_CLAMSHELL__ || __PHONE_SLIDE__ */
+
+ case usb_eint_chann:
+ return ((kal_uint8)USB_EINT_NO);
+
+#ifdef __BT_SUPPORT__
+ case bt_eint_chann:
+ return ((kal_uint8)BT_EINT_NO);
+#endif /* __BT_SUPPORT__ */
+
+#if defined(__CHARGER_USB_DETECT_WIHT_ONE_EINT__)
+ case chr_usb_eint_chann:
+ return ((kal_uint8)CHR_USB_EINT_NO);
+#endif
+
+#ifdef __SWDBG_SUPPORT__
+ case swdbg_eint_chann:
+ return SWDBG_EINT_NO;
+#endif /* __SWDBG_SUPPORT__ */
+
+#if defined(MOTION_SENSOR_SUPPORT)
+ case motion_senosr_eint_chann:
+ return ((kal_uint8)MOTION_SENSOR_EINT_NO);
+#endif /* MOTION_SENSOR_SUPPORT */
+
+#if defined(TOUCH_PANEL_SUPPORT) || defined(HAND_WRITING)
+ case touch_panel_eint_chann:
+ return TOUCH_PANEL_EINT_NO;
+#endif /* TOUCH_PANEL_SUPPORT || HAND_WRITING */
+
+#ifdef __WIFI_SUPPORT__
+ case wifi_eint_chann:
+ return WIFI_EINT_NO;
+#endif /* __SWDBG_SUPPORT__ */
+#ifdef __TDMB_SUPPORT__
+ case tdmb_eint_chann:
+ return TDMB_EINT_NO;
+#endif /* __TDMB_SUPPORT__ */
+#ifdef __CMMB_SUPPORT__
+ case cmmb_eint_chann:
+ return CMMB_EINT_NO;
+#endif /* __CMMB_SUPPORT__ */
+#ifdef __OTG_DETECT_IDPIN_WITH_EINT__
+ case otg_idpin_eint_chann:
+ return OTG_IDPIN_EINT_NO;
+#endif /* __SWDBG_SUPPORT__ */
+
+#ifdef __EXTRA_A_B_KEY_SUPPORT__
+ case extra_a_key_eint_chann:
+ return EXTRA_A_KEY_EINT_NO;
+
+ case extra_b_key_eint_chann:
+ return EXTRA_B_KEY_EINT_NO;
+#endif
+
+#ifdef __GPS_SUPPORT__
+ case gps_eint_chann:
+ return ((kal_uint8)GPS_EINT_NO);
+#endif /* __GPS_SUPPORT__ */
+#if defined(JOGBALL_SUPPORT)
+ case jogball_up_eint_chann:
+ return JB_UP_EINT_NO;
+ case jogball_down_eint_chann:
+ return JB_DOWN_EINT_NO;
+ case jogball_right_eint_chann:
+ return JB_RIGHT_EINT_NO;
+ case jogball_left_eint_chann:
+ return JB_LEFT_EINT_NO;
+#endif /* JOGBALL_SUPPORT */
+ default:
+ ASSERT(0);
+ }
+ return 100;
+}
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/exif_custom.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/exif_custom.c
new file mode 100644
index 0000000..f6bc76e
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/exif_custom.c
@@ -0,0 +1,92 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * exif_custom.c
+ *
+ * Project:
+ * --------
+ * MT6226,MT6227,MT6228,MT6229
+ *
+ * Description:
+ * ------------
+ * This file is intends for Exif encoder.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#if (!defined(__MAUI_BASIC__)&& !defined(__L1_STANDALONE__) && defined(EXIF_SUPPORT))
+
+#include "exif.h"
+
+#define CusIFD_Encode_Number_of_Entry 2
+
+exif_ASCII* Make="N/A";
+exif_ASCII* Model="N/A";
+
+exif_extend_entry_struct Custom_Specific_Tags[CusIFD_Encode_Number_of_Entry]=
+ {
+ {EXIF_IFD0,{0x010f,EXIF_ASCII,0,&Make}}, //--Make--
+ {EXIF_IFD0,{0x0110,EXIF_ASCII,0,&Model}} //--Model--
+
+ };
+
+//--This Function Call Must be implemented always--
+exif_extend_entry_struct* exif_get_custom_specific_IFD(kal_uint8* Number_of_Entry)
+{
+/*
+ *Number_of_Entry=0;
+ return 0;
+*/
+*Number_of_Entry=CusIFD_Encode_Number_of_Entry;
+ return Custom_Specific_Tags;
+ }
+
+#else /*__MAUI_BASIC__ || __L1_STANDALONE__*/
+#include "drv_comm.h"
+#endif /*__MAUI_BASIC__ || __L1_STANDALONE__*/
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/gpio_def.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/gpio_def.h
new file mode 100644
index 0000000..f706604
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/gpio_def.h
@@ -0,0 +1,132 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * gpio_def.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file provides definition for GPIO mode, direction, pull-up/pull down
+ * enable, data inversion value.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef _GPIO_DEF_H
+#define _GPIO_DEF_H
+
+#define MODE_0 0
+#define MODE_1 1
+#define MODE_2 2
+#define MODE_3 3
+#define MODE_4 4
+#define MODE_5 5
+#define MODE_6 6
+#define MODE_7 7
+#define MODE_NC 0
+
+#define DIR_NULL 0
+#define DIR_INPUT 0
+#define DIR_OUTPUT 1
+
+#define PULL_NULL 1
+#define PULL_DISABLE 0
+#define PULL_ENABLE 1
+
+#define INV_NULL 0
+#define INV_DISABLE 0
+#define INV_ENABLE 1
+
+#define GPIO_CLK0 0
+#define GPIO_CLK1 1
+#define GPIO_CLK2 2
+#define GPIO_CLK3 3
+#define GPIO_CLK4 4
+#define GPIO_CLK5 5
+#define GPIO_CLK6 6
+#define GPIO_CLK7 7
+#define GPIO_CLK8 8
+#define GPIO_CLK9 9
+#define GPIO_CLK10 10
+#define GPIO_CLK11 11
+
+#define DCT_none_clk 0
+
+#if defined (MT6235)
+#define GPIO_CLKSRC_65mHz 0x0
+#define GPIO_CLKSRC_104mHz 0x1
+#define GPIO_CLKSRC_52mHz 0x2
+#define GPIO_CLKSRC_26mHz 0x3
+#define GPIO_CLKSRC_13mHz 0x4
+#define GPIO_CLKSRC_32kHz 0x6
+
+#elif defined (MT6256)
+#define GPIO_CLKSRC_52mHz 0xB
+#define GPIO_CLKSRC_32kHz 0xC
+
+#elif defined(MT6236)
+#define GPIO_CLKSRC_32kHz 0x40
+
+#elif defined(MT6238) || defined(MT6239)
+#define GPIO_CLKSRC_32kHz 0x6
+
+#elif defined(MT6268)
+#define GPIO_CLKSRC_32kHz 0x40
+
+#elif defined(TK6291)
+#define MD_OWNED 0
+#define AP_OWNED 1
+
+#endif
+
+#endif /* _GPIO_DEF_H */
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/gpio_drv.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/gpio_drv.c
new file mode 100644
index 0000000..ad3afe6
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/gpio_drv.c
@@ -0,0 +1,267 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * gpio.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines the GPIO driver.
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "drv_comm.h"
+#include "reg_base.h"
+
+#ifdef __CUST_NEW__
+extern void GPIO_setting_init(void);
+kal_bool gpio_debug_enable = KAL_FALSE;
+#endif
+
+/*
+* FUNCTION
+* GPIO_init
+*
+* DESCRIPTION
+* This function is to initialize the GPIO pins as DrvTool setting.
+*
+* CALLS
+* None
+*
+* PARAMETERS
+* None
+*
+* RETURNS
+* None
+*
+* GLOBALS AFFECTED
+* external_global
+*/
+void GPIO_init(void)
+{
+
+#ifdef __CUST_NEW__
+ GPIO_setting_init();
+#endif /* __CUST_NEW__ */
+
+}
+
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/irda_custom.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/irda_custom.c
new file mode 100644
index 0000000..b705911
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/irda_custom.c
@@ -0,0 +1,219 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * irda_custom.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file implements irda customer support
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+ #ifdef __IRDA_SUPPORT__
+#include "drv_comm.h"
+//#include "gpio_sw.h"
+#include "irda_sw.h"
+#include "reg_base.h"
+#include "dcl.h"
+/************************************************************
+ device descriptor parameters
+*************************************************************/
+kal_uint8 device_info[17] = {
+/* hint bits set for COMM, OBEX, LAN, IRMC, TRAN-P
+*/
+ 0xb1, /* set pnp, Modem, Fax and extension bit */
+ 0x25, /* set IrOBEX hint bit and IrCOMM hint bit */
+ 0x00, /* char set = 0 */
+ //'W','C','P','1','C','S','I','I','I',' ', 0x00,
+ 'M','e','d','i','a','T','e','k',' ','I','n','c',' ',0x00,
+};
+/************************************************************
+ customization functinos
+*************************************************************/
+kal_uint8 *irda_get_device_info(void)
+{
+ return (device_info);
+}
+kal_uint16 irda_get_device_info_size(void)
+{
+ return (sizeof(device_info));
+}
+/*The following are for SIR/MIR/FIR mode switch according to
+ different IRDA transceiver*/
+#define IR_TRANSCEIVER_PDN (IRDA_base+0x003c)
+#define __IRDA_AGILENT_3220__
+//#undef __IRDA_AGILENT_3220__
+#if defined(__IRDA_VISHAY_6102__)
+ #ifdef __CUST_NEW__
+ extern const char gpio_irda_mode_switch_pin;
+ #define IRDA_GPIO_MODE_SWITCH gpio_irda_mode_switch_pin
+ #else /* __CUST_NEW__ */
+ #define IRDA_GPIO_MODE_SWITCH 40
+ #endif /* __CUST_NEW__ */
+#endif /* defined(__IRDA_VISHAY_6102__) */
+
+//kal_uint32 test_delay=20;
+#define irda_test_delay 60
+kal_uint8 irda_get_mode_gpio(void)
+{
+#if defined(__IRDA_VISHAY_6102__)
+ return (IRDA_GPIO_MODE_SWITCH);
+#else
+ return 0;
+#endif /* defined(__IRDA_VISHAY_6102__) */
+}
+
+void irda_delay(kal_uint32 count)
+{
+ kal_uint32 i;
+ for(i=0;i<count;i++){};
+}
+void irda_switch_to_sir(void)
+{
+#if defined(__IRDA_VISHAY_6102__)
+ /*Vishay 6614*/
+ DCL_HANDLE handle;
+ handle=DclGPIO_Open(DCL_GPIO,IRDA_GPIO_MODE_SWITCH);
+ #ifndef __CUST_NEW__
+ //GPIO_ModeSetup(IRDA_GPIO_MODE_SWITCH, 0);
+ DclGPIO_Control(handle,GPIO_CMD_SET_MODE_0,0);
+
+ //GPIO_InitIO(OUTPUT, IRDA_GPIO_MODE_SWITCH);
+ DclGPIO_Control(handle,GPIO_CMD_SET_DIR_OUT,0);
+ #endif /* __CUST_NEW__ */
+ //GPIO_WriteIO(0, IRDA_GPIO_MODE_SWITCH);
+ DclGPIO_Control(handle,GPIO_CMD_WRITE_LOW,0);
+ DclGPIO_Close(handle);
+#elif defined(__IRDA_AGILENT_3220__)||defined(__IRDA_VISHAY_6614__)
+ #if 0
+/* under construction !*/
+/* under construction !*/
+ #ifndef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+ #endif /* __CUST_NEW__ */
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+ #endif
+ DRV_WriteReg(IR_TRANSCEIVER_PDN,0x1);
+ irda_delay(irda_test_delay);
+ DRV_WriteReg(IR_TRANSCEIVER_PDN,0x5);
+ irda_delay(irda_test_delay);
+ DRV_WriteReg(IR_TRANSCEIVER_PDN,0x4);
+ irda_delay(irda_test_delay);
+ DRV_WriteReg(IR_TRANSCEIVER_PDN,0x0);
+#endif
+}
+void irda_switch_to_mir(void)
+{
+ /*Vishay 6614*/
+#if defined(__IRDA_VISHAY_6102__)
+ DCL_HANDLE handle;
+ handle=DclGPIO_Open(DCL_GPIO,IRDA_GPIO_MODE_SWITCH);
+
+ //GPIO_WriteIO(1, IRDA_GPIO_MODE_SWITCH);
+ DclGPIO_Control(handle,GPIO_CMD_WRITE_HIGH,0);
+ DclGPIO_Close(handle);
+#elif defined(__IRDA_VISHAY_6614__)
+ DRV_WriteReg(IR_TRANSCEIVER_PDN,0x1);
+ irda_delay(irda_test_delay);
+ DRV_WriteReg(IR_TRANSCEIVER_PDN,0x7);
+ irda_delay(irda_test_delay);
+ DRV_WriteReg(IR_TRANSCEIVER_PDN,0x6);
+ irda_delay(irda_test_delay);
+ DRV_WriteReg(IR_TRANSCEIVER_PDN,0x4);
+ irda_delay(irda_test_delay);
+ DRV_WriteReg(IR_TRANSCEIVER_PDN,0x0);
+#endif
+}
+void irda_switch_to_fir(void)
+{
+#if defined(__IRDA_VISHAY_6102__)
+ /*Vishay 6614*/
+ DCL_HANDLE handle;
+ handle=DclGPIO_Open(DCL_GPIO,IRDA_GPIO_MODE_SWITCH);
+
+ //GPIO_WriteIO(1, IRDA_GPIO_MODE_SWITCH);
+ DclGPIO_Control(handle,GPIO_CMD_WRITE_HIGH,0);
+ DclGPIO_Close(handle);
+ /*Vishay 6102, Anilent 3220*/
+#elif defined(__IRDA_AGILENT_3220__)||defined(__IRDA_VISHAY_6614__)
+ DRV_WriteReg(IR_TRANSCEIVER_PDN,0x1);
+ irda_delay(irda_test_delay);
+ DRV_WriteReg(IR_TRANSCEIVER_PDN,0x7);
+ irda_delay(irda_test_delay);
+ DRV_WriteReg(IR_TRANSCEIVER_PDN,0x6);
+ irda_delay(irda_test_delay);
+ DRV_WriteReg(IR_TRANSCEIVER_PDN,0x4);
+ irda_delay(irda_test_delay);
+ DRV_WriteReg(IR_TRANSCEIVER_PDN,0x0);
+#endif
+}
+
+const irda_customize_function_struct irda_custom_func=
+{
+ irda_switch_to_sir,
+ irda_switch_to_mir,
+ irda_switch_to_fir
+};
+
+const irda_customize_function_struct *irda_GetFunc(void)
+{
+ return (&irda_custom_func);
+}
+
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/keypad_def.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/keypad_def.c
new file mode 100644
index 0000000..1e3cdaa
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/keypad_def.c
@@ -0,0 +1,455 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * keypad_def.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file is defined for keypad table
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "drv_comm.h"
+#include "kbd_table.h"
+#include "reg_base.h"
+#include "keypad_sw.h"
+#include "keypad_hw.h"
+#include "gpio_sw.h"
+#ifdef __CUST_NEW__
+#include "keypad_drv.h"
+#endif /*__CUST_NEW__*/
+
+#if !defined(DRV_KBD_NOT_EXIST)
+const keypad_struct *keypad_Get_Data(void);
+
+#ifdef __KBD_2STEP_KEY_SUPPORT__
+kal_bool keypad_check_fullpress(void);
+kal_bool keypad_is_fullpress(kal_uint8 key);
+#endif
+#ifdef __CUST_NEW__
+ #define Custom_Keypress_Period KEY_PRESS_PERIOD
+ kal_uint8 powerkey_position=POWERKEY_POSITION;
+
+ #ifdef __KBD_2STEP_KEY_SUPPORT__
+ /*the first key*/
+ #define Custom_2Step_Key_Position TWO_STEP_KEY
+ /*the second key for detection*/
+ #define CUSTOM_2STEP_SEC_KEY_ROW SECOND_KEY_ROW
+ #define CUSTOM_2STEP_SEC_KEY_COL SECOND_KEY_COLUMN
+ #endif
+#else /*__CUST_NEW__*/
+ #define Custom_Keypress_Period 2500
+ kal_uint8 powerkey_position=DEVICE_KEY_END;
+ #ifdef __KBD_2STEP_KEY_SUPPORT__
+ /*the first key*/
+ #define Custom_2Step_Key_Position DEVICE_KEY_FUNCTION
+ /*the second key for detection*/
+ #define CUSTOM_2STEP_SEC_KEY_ROW 5
+ #define CUSTOM_2STEP_SEC_KEY_COL 0
+ #endif
+#endif /*__CUST_NEW__*/
+const keypad_struct keypad_custom_def = {
+ /*keypad mapping*/
+ {
+ #ifndef __CUST_NEW__
+ /* row 0 */
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_END,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+
+ /* row 1 */
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_END,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+
+ /* row 2 */
+ DEVICE_KEY_1,
+ DEVICE_KEY_2,
+ DEVICE_KEY_3,
+ DEVICE_KEY_SEND,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_VOL_UP,
+ DEVICE_KEY_END,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+
+ /* row 3 */
+ DEVICE_KEY_4,
+ DEVICE_KEY_5,
+ DEVICE_KEY_6,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_VOL_DOWN,
+ DEVICE_KEY_END,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+
+ /* row 4 */
+ DEVICE_KEY_7,
+ DEVICE_KEY_8,
+ DEVICE_KEY_9,
+ DEVICE_KEY_SK_LEFT,
+ DEVICE_KEY_UP,
+ DEVICE_KEY_SK_RIGHT,
+ DEVICE_KEY_END,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+
+ /* row 5 */
+ DEVICE_KEY_STAR,
+ DEVICE_KEY_0,
+ DEVICE_KEY_HASH,
+ DEVICE_KEY_LEFT,
+ DEVICE_KEY_DOWN,
+ DEVICE_KEY_RIGHT,
+ DEVICE_KEY_END,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+
+ /* row 6 */
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+
+ /* row 7 */
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+ DEVICE_KEY_NONE,
+
+ #else /* __CUST_NEW__ */
+ KEYPAD_MAPPING
+ #endif /* __CUST_NEW__ */
+ },
+ /*power on period*/
+ Custom_Keypress_Period,
+ /*powerkey position*/
+ #ifdef __CUST_NEW__
+ POWERKEY_POSITION
+ #else /* __CUST_NEW__ */
+ /*powerkey position*/
+ DEVICE_KEY_END
+ #endif /* __CUST_NEW__ */
+ };
+const keypad_customize_function_struct keypad_custom_func=
+{
+ keypad_Get_Data
+#ifdef __KBD_2STEP_KEY_SUPPORT__
+ ,keypad_is_fullpress,
+ keypad_check_fullpress
+#endif
+};
+const keypad_customize_function_struct *keypad_GetFunc(void)
+{
+ return (&keypad_custom_func);
+}
+const keypad_struct *keypad_Get_Data(void)
+{
+ return (&keypad_custom_def);
+}
+kal_uint32 Customer_Period_Period(void)
+{
+ return ((kal_uint32) Custom_Keypress_Period);
+}
+
+#ifdef __KBD_2STEP_KEY_SUPPORT__
+/*************************************************************************
+* FUNCTION
+* keypad_is_fullpress
+*
+* DESCRIPTION
+* This function is to check if this is a 2step key
+*
+* PARAMETERS
+* key
+*
+* RETURNS
+* True or False
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+kal_bool keypad_is_fullpress(kal_uint8 key)
+{
+ if(key==Custom_2Step_Key_Position)
+ return KAL_TRUE;
+ else
+ return KAL_FALSE;
+}
+/*************************************************************************
+* FUNCTION
+* keypad_check_fullpress
+*
+* DESCRIPTION
+* This function is to check if 2step key is pressed
+*
+* PARAMETERS
+* none
+*
+* RETURNS
+* True or False
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+kal_bool keypad_check_fullpress(void)
+{
+ kal_uint16 iKey;
+ kal_uint16 key_reg, key_bit, key_status;
+
+ iKey = CUSTOM_2STEP_SEC_KEY_ROW * 9 + CUSTOM_2STEP_SEC_KEY_COL;
+ key_reg = iKey / 16;
+ key_bit = 0x0001 << (iKey & 0xF);
+
+ switch (key_reg) {
+ case low_key:
+ key_status = DRV_Reg(KP_LOW_KEY);
+ break;
+
+#if defined(DRV_KBD_32KEYS_ABOVE)
+ case medium_key:
+ key_status = DRV_Reg(KP_MID_KEY);
+ break;
+#endif
+
+#if defined(DRV_KBD_48KEYS_ABOVE)
+ case medium_key:
+ key_status = DRV_Reg(KP_MID_KEY);
+ break;
+
+ case medium_key1:
+ key_status = DRV_Reg(KP_MID1_KEY);
+ break;
+#endif
+
+#if defined(DRV_KBD_64KEYS_ABOVE)
+ case medium_key:
+ key_status = DRV_Reg(KP_MID_KEY);
+ break;
+
+ case medium_key1:
+ key_status = DRV_Reg(KP_MID1_KEY);
+ break;
+
+ case medium_key2:
+ key_status = DRV_Reg(KP_MID2_KEY);
+ break;
+#endif
+
+ case high_key:
+ key_status = DRV_Reg(KP_HI_KEY);
+ break;
+
+ default:
+ ASSERT(0);
+ break;
+ }
+
+ if ((DRV_Reg(KP_STS) & KP_STS_KEYPRESS) && ((~key_status) & key_bit)) {
+ return KAL_TRUE;
+ }else {
+ return KAL_FALSE;
+ }
+}
+#endif
+
+#else //define (DRV_KBD_NOT_EXIST)
+kal_uint32 Customer_Period_Period(void) { return 0; } //for bmt_main.c
+const keypad_struct keypad_custom_def = {{DEVICE_KEY_NONE},0,0};
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/motion_sensor_hw_define.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/motion_sensor_hw_define.h
new file mode 100644
index 0000000..a0a3889
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/motion_sensor_hw_define.h
@@ -0,0 +1,80 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * motion_sensor_hw_define.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines GPIO for serial interface.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef MOTION_SENSOR_HW_DEFINE_H
+#define MOTION_SENSOR_HW_DEFINE_H
+
+// How is Motion Sensor mounted ?
+//#define MOTION_SENSOR_FRONT_0
+#define MOTION_SENSOR_FRONT_90
+//#define MOTION_SENSOR_FRONT_180
+//#define MOTION_SENSOR_FRONT_270
+//#define MOTION_SENSOR_BACK_0
+//#define MOTION_SENSOR_BACK_90
+//#define MOTION_SENSOR_BACK_180
+//#define MOTION_SENSOR_BACK_270
+
+#if defined(MXC6202_I2C)
+ //define slave address
+ #define MXC62020
+#endif
+
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/msdc_custom.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/msdc_custom.c
new file mode 100644
index 0000000..c890007
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/msdc_custom.c
@@ -0,0 +1,218 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * msdc_custom.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file implements msdc customer support
+ *
+ * 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!
+ ****************************************************************************/
+#include "drv_comm.h"
+#include "msdc_api.h"
+
+// it only apply to the SD card io control
+static const msdc_io_ctrl_struct msdc_io_ctrl_sd_custom =
+{
+ MSDC_ODC_8MA, // driving capacity of CMD/BS and SCLK
+ MSDC_ODC_8MA, // driving capacity of data lines
+ MSDC_ODC_SLEW_FAST, // slew rate of CMD/BS and SCLK
+ MSDC_ODC_SLEW_FAST // slew rate of data lines
+};
+
+#if defined(__MSDC_SD_MMC__) && defined(__MSDC2_SD_MMC__)&& !defined(__MSDC_SD_SDIO__)
+static const kal_uint32 msdc_custom = (MSDC_HOT_PLUG|MSDC_WP|MSDC2_HOT_PLUG|MSDC2_WP);
+#elif defined(__MSDC_SD_SDIO__) && defined(__MSDC2_SD_MMC__)
+static const kal_uint32 msdc_custom = (MSDC2_HOT_PLUG|MSDC2_WP|MSDC_SDIO4_SD1);
+#elif defined(__MSDC_SD_MMC__) && defined(__MSDC2_SD_SDIO__)
+static const kal_uint32 msdc_custom = (MSDC_HOT_PLUG|MSDC_WP|MSDC_SD4_SDIO1);
+#else
+static const kal_uint32 msdc_custom = (MSDC_HOT_PLUG|MSDC_WP|MSDC2_HOT_PLUG|MSDC2_WP);
+#endif
+
+kal_uint8 MSDC_GetIOCtrlParam(void)
+{
+ kal_uint8 reg = 0;
+
+ reg = (msdc_io_ctrl_sd_custom.dat_slew << 7) | (msdc_io_ctrl_sd_custom.cmd_clk_slew << 6)
+ |(msdc_io_ctrl_sd_custom.dat_odc<<3)|(msdc_io_ctrl_sd_custom.cmd_clk_odc);
+ return reg;
+}
+
+/*
+ We provide this API because that memory card's layout affect the signal,
+ customer can use this API to tuning the suitable DLT when their layout did need.
+ In addition to solve the bad layout, we can also try to set a higher clk and tuning the DLT here,
+ so that we can run in high CLK stablely.
+
+*/
+kal_int8 MSDC_GetDLTFromOPCLK(kal_uint32 opClk, kal_uint8 *setRED)
+{
+ *setRED = 0;
+
+ if(1000 > opClk) //this means we use a CLK < 1Mhz, should be used to initialize a card
+ return 0xf0;
+ switch(opClk){
+ case 45500: //45.5 MHz CLK, this should be only used on MT6268 with second CLK source
+ *setRED = 1;
+ return 2;
+ break;
+ case 22750: //22.75 MHz CLK, this should be only used on MT6268 with second CLK source
+ return 4;
+ break;
+ case 30500: //30.5 MHz CLK, this should be only used on MT6268 with first CLK source
+ return 4;
+ case 15250: //15.25 MHz CLK, this should be only used on MT6268 with first CLK source
+ return 4;
+ break;
+ default: //deafult return a non-zero value
+ return 1;
+ break;
+ }
+
+}
+
+
+#if defined(__MSDC2_SD_MMC__) || defined(__MSDC2_SD_SDIO__)
+
+static const msdc_io_ctrl_struct msdc_io_ctrl_sd_custom2 =
+{
+ MSDC_ODC_8MA, // driving capacity of CMD/BS and SCLK
+ MSDC_ODC_8MA, // driving capacity of data lines
+ MSDC_ODC_SLEW_FAST, // slew rate of CMD/BS and SCLK
+ MSDC_ODC_SLEW_FAST // slew rate of data lines
+};
+
+kal_uint8 MSDC_GetIOCtrlParam2(void)
+{
+ kal_uint8 reg = 0;
+
+ reg = (msdc_io_ctrl_sd_custom2.dat_slew << 7) | (msdc_io_ctrl_sd_custom2.cmd_clk_slew << 6)
+ |(msdc_io_ctrl_sd_custom2.dat_odc<<3)|(msdc_io_ctrl_sd_custom2.cmd_clk_odc);
+ return reg;
+}
+#endif // __MSDC2_SD_MMC__
+
+kal_uint32 MSDC_GetCustom(void)
+{
+ return msdc_custom;
+}
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/mt6306_custom.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/mt6306_custom.h
new file mode 100644
index 0000000..84f28a8
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/mt6306_custom.h
@@ -0,0 +1,150 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * MT6302_custom.h
+ *
+ * Project:
+ * --------
+ * Gemini
+ *
+ * Description:
+ * ------------
+ * this file is the header file of MT6302 custom control
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __MT6306_CUSTOM_H__
+#define __MT6306_CUSTOM_H__
+
+#define MT6306_CLK_GPIO_NO gpio_sim_switch_clk_pin
+#define MT6306_DAT_GPIO_NO gpio_sim_switch_dat_pin
+
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/parameter_data_file.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/parameter_data_file.h
new file mode 100644
index 0000000..df2783a
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/parameter_data_file.h
@@ -0,0 +1,100 @@
+#ifndef PARAMETER_DATA_FILE_H
+#define PARAMETER_DATA_FILE_H
+
+#define TWOMICNR_INIT_PARA_LENGTH 29
+
+unsigned char parameter_data_Init[] = {
+ 0xC0,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x52, 0x00, 0x13,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x60, 0x00, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x70, 0x05, 0xC0,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x3A, 0x00, 0x00
+};
+
+#define TWOMICNR_BYPASS_PARA_LENGTH 64
+
+unsigned char parameter_data_bypass_mode[] = {
+ 0xC0,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x34, 0x00, 0x22,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x36, 0x00, 0x1D,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x4A, 0x00, 0x22,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x4C, 0x00, 0x1D,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x3D, 0x01, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x52, 0x00, 0x13,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x60, 0x00, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x70, 0x05, 0xC0,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x3A, 0x00, 0x00
+};
+
+#define TWOMICNR_HANDSET_PARA_LENGTH 134
+
+unsigned char parameter_data_handset_mode[] = {
+ 0xC0,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x34, 0x00, 0xCA,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x3D, 0x02, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x45, 0x01, 0x0F,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x46, 0x00, 0x14,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x47, 0x18, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x57, 0x7F, 0xFF,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x60, 0x00, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x70, 0x05, 0xC0,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xDA, 0x54, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xB3, 0x10, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xB4, 0x10, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xB6, 0x10, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xCE, 0x70, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xCF, 0x04, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1F, 0x0A, 0x01, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1F, 0x0B, 0x00, 0xB0,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x63, 0x00, 0x03,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x52, 0x00, 0x13,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x3A, 0x00, 0x00
+};
+
+#define TWOMICNR_HANDFREE_PARA_LENGTH 281
+
+unsigned char parameter_data_handfree_mode[] = {
+ 0xC0,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x30, 0x02, 0x31,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x34, 0x00, 0x6B,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x3D, 0x04, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x41, 0x01, 0x01,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x44, 0x00, 0x81,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x45, 0x03, 0xCF,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x46, 0x00, 0x11,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x4D, 0x03, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x60, 0x00, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x63, 0x00, 0x03,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x70, 0x05, 0xC0,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x88, 0x38, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x89, 0x00, 0x01,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x8B, 0x00, 0x80,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x8C, 0x00, 0x10,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x92, 0x38, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xA0, 0x10, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xBC, 0x68, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xBD, 0x01, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xBF, 0x70, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xC0, 0x26, 0x80,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xC1, 0x10, 0x80,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xC5, 0x2B, 0x06,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xC6, 0x0C, 0x1F,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xC8, 0x28, 0x79,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xC9, 0x65, 0xAB,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xCA, 0x40, 0x26,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xCB, 0x7F, 0xFF,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xCC, 0x7F, 0xFE,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xF8, 0x04, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xF9, 0x01, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0xFF, 0x4B, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1F, 0x00, 0x7F, 0xFF,
+ 0xFC, 0xF3, 0x3B, 0x1F, 0x0A, 0x0A, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1F, 0x0C, 0x01, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1F, 0x0D, 0x78, 0x00,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x86, 0x00, 0x07,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x87, 0x00, 0x03,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x52, 0x00, 0x13,
+ 0xFC, 0xF3, 0x3B, 0x1E, 0x3A, 0x00, 0x00
+};
+
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/pmic_custom.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/pmic_custom.c
new file mode 100644
index 0000000..a5a202a
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/pmic_custom.c
@@ -0,0 +1,94 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * pmic_custom.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines the pmic customization settings
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#if defined(MT6327)
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+#include "dcl_pmu_common_sw.h"
+
+void pmic6327_customization_init(void)
+{
+ /* Customization */
+#ifdef __FUE__
+
+#else
+
+#endif
+ /* End of customization */
+}
+
+#endif // End of #if defined(MT6327)
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/pmu_custom.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/pmu_custom.c
new file mode 100644
index 0000000..d4b5b40
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/pmu_custom.c
@@ -0,0 +1 @@
+/* This file can be deleted */
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/pwmdrv.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/pwmdrv.c
new file mode 100644
index 0000000..70a30eb
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/pwmdrv.c
@@ -0,0 +1,215 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * pwmdrv.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file is defined for external interrupt channel.
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "drv_comm.h"
+#include "pwm_sw.h"
+#include "custom_hw_default.h"
+//#include "kal_non_specific_general_types.h"
+#include "stack_config.h"
+#include "rwg_sw.h"
+#include "dcl.h"
+
+void PWM_initialize(void)
+{
+#if 0
+#if 0
+#if ( (defined(MT6205)) || (defined(MT6208)) || (defined(FPGA)))
+/* under construction !*/
+#endif /*(MT6205,MT6208)*/
+#if ( (defined(MT6205B)) || (defined(MT6218)) )
+/* under construction !*/
+/* under construction !*/
+#endif /*(MT6205B,MT6218)*/
+#endif
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if defined(DRV_PWM_PWM2)
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+/* under construction !*/
+#if defined(DRV_PWM_PWM3)
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif//#if defined(DRV_PWM_PWM3)
+#endif /* end of __LTE_SM__ */
+
+}
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/pxs_custom.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/pxs_custom.c
new file mode 100644
index 0000000..d2a7f55
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/pxs_custom.c
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * pxs_custom.c
+ *
+ * Project:
+ * --------
+ * MAUI
+ *
+ * Description:
+ * ------------
+ *
+ * PXS driver custom file
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *******************************************************************************/
+
+#if defined(__PXS_CM3623__)
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+#include "pxs_cm3623.h"
+#include "pxs_custom.h"
+#include "drv_comm.h"
+
+
+
+static kal_uint16 cm3623_thrshold_array[]=
+{
+ 10,
+ 4
+
+};
+
+kal_bool cm3623_sensitivity_level_num(kal_uint16 *pData)
+{
+ *pData = sizeof(cm3623_thrshold_array)/sizeof(kal_uint16);
+ return KAL_TRUE;
+}
+
+kal_bool cm3623_get_sensitivity_table(kal_uint16 **pData)
+{
+ *pData = &cm3623_thrshold_array[0];
+ return KAL_TRUE;
+}
+
+
+kal_bool cm3623_power_enable(kal_bool enable)
+{
+
+//#if defined(LUFFY76V2_DEMO_BB)
+ {
+ // Only for Luffy76 V2
+ // Luffy76 V2 PXS SDA use GPIO101
+ // GPIO101 GPIO mode pull HIGH is controlled by MSDC2 (From 1 to 3)
+ // So we need to configure MSDC1 controller to enable pull HIGH (I2C open gain)
+ kal_uint32 val32;
+
+ // Clear MSDC1 clock gating
+ DRV_WriteReg(0x610D0320, 0x200);
+ // Configure MSDC1 controller to enable PULL HIGH functionality
+ val32 = DRV_Reg32(0x60120018);
+ val32 &= ~(0x00000700);
+ val32 |= (0x00000200);
+ DRV_WriteReg32(0x60120018, val32);
+ }
+//#endif // #if defined(LUFFY76V2_DEMO_BB)
+ return KAL_TRUE;
+}
+
+//kal_uint16 cm3623_get_pxs_threshold(void)
+//{
+// return CM3623_PXS_THRESHOLD;
+//}
+
+
+kal_bool pxs_custom_hw_cmd_handler(PXS_HW_CMD_ENUM cmd, void *pData)
+{
+ switch (cmd)
+ {
+ case PXS_HW_CMD_POWER_ENABLE:
+ return cm3623_power_enable(*((kal_bool *)pData));
+ break;
+ case PXS_HW_CMD_GET_SENSITIVITY_LEVEL_NUM:
+ return cm3623_sensitivity_level_num((kal_uint16 *)pData);
+ break;
+ case PXS_HW_CMD_GET_SENSITIVITY_TABLE:
+ return cm3623_get_sensitivity_table((kal_uint16 **)pData);
+ break;
+ default:
+ return KAL_FALSE;
+ //break;
+ }
+}
+
+
+extern kal_uint16 cm3623_get_pxs_sensitivity_level_num(void);
+extern kal_uint16 *cm3623_get_pxs_sensitivity_level_table(void);
+
+
+
+#endif // #if defined(__PXS_CM3623__)
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/pxs_custom.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/pxs_custom.h
new file mode 100644
index 0000000..bad40e0
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/pxs_custom.h
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * pxs_custom.h
+ *
+ * Project:
+ * --------
+ * MAUI
+ *
+ * Description:
+ * ------------
+ *
+ * PXS driver custom header file
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *******************************************************************************/
+#if defined(__PXS_CM3623__)
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+#include "drv_comm.h"
+#include "dcl.h"
+
+// Use GPIO to simulate I2C communication interface
+#define USE_SW_I2C
+
+// Use HW I2C
+//#define USE_HW_I2C
+
+
+#if defined(USE_SW_I2C)
+extern const char gpio_pxs_i2c_scl_pin;
+extern const char gpio_pxs_i2c_sda_pin;
+
+//#define CM3623_SCL gpio_pxs_scl_pin
+//#define CM3623_SDA gpio_pxs_sda_pin
+
+#define CM3623_SCL gpio_pxs_i2c_scl_pin
+#define CM3623_SDA gpio_pxs_i2c_sda_pin
+
+#define SCL_GPIO_MODE() DclGPIO_Control(pxs_scl_gpio_dcl_handle,GPIO_CMD_SET_MODE_0,0); //GPIO_ModeSetup(CM3623_SCL, 0)
+#define SCL_HIGH() DclGPIO_Control(pxs_scl_gpio_dcl_handle,GPIO_CMD_WRITE_HIGH,0); //GPIO_WriteIO(1, CM3623_SCL)
+#define SCL_LOW() DclGPIO_Control(pxs_scl_gpio_dcl_handle,GPIO_CMD_WRITE_LOW,0); //GPIO_WriteIO(0, CM3623_SCL)
+#define SCL_OUTPUT() DclGPIO_Control(pxs_scl_gpio_dcl_handle,GPIO_CMD_SET_DIR_OUT,0); //GPIO_InitIO(GPIO_DIR_OUTPUT, CM3623_SCL)
+#define SDA_GPIO_MODE() DclGPIO_Control(pxs_sda_gpio_dcl_handle,GPIO_CMD_SET_MODE_0,0); //GPIO_ModeSetup(CM3623_SDA, 0)
+#define SDA_HIGH() DclGPIO_Control(pxs_sda_gpio_dcl_handle,GPIO_CMD_WRITE_HIGH,0); //GPIO_WriteIO(1, CM3623_SDA)
+#define SDA_LOW() DclGPIO_Control(pxs_sda_gpio_dcl_handle,GPIO_CMD_WRITE_LOW,0); //GPIO_WriteIO(0, CM3623_SDA)
+#define SDA_OUTPUT() DclGPIO_Control(pxs_sda_gpio_dcl_handle,GPIO_CMD_SET_DIR_OUT,0); //GPIO_InitIO(GPIO_DIR_OUTPUT, CM3623_SDA)
+#define SDA_INPUT() DclGPIO_Control(pxs_sda_gpio_dcl_handle,GPIO_CMD_SET_DIR_IN,0); //GPIO_InitIO(GPIO_DIR_INPUT, CM3623_SDA)
+#define SDA_VAL() pxs_GPIO_ReadIO(pxs_sda_gpio_dcl_handle) //GPIO_ReadIO(CM3623_SDA)
+
+#endif // #if defined(USE_SW_I2C)
+
+// PXS EINT
+extern const unsigned char PXS_EINT_NO;
+#define CM3623_EINT PXS_EINT_NO
+
+
+//extern kal_bool cm3623_power_enable(kal_bool enable);
+//extern kal_uint16 cm3623_get_pxs_threshold(void);
+//extern kal_uint16 cm3623_get_pxs_sensitivity_level_num(void);
+//extern kal_uint16 *cm3623_get_pxs_sensitivity_level_table(void);
+
+extern kal_bool pxs_custom_hw_cmd_handler(PXS_HW_CMD_ENUM cmd, void *pData);
+
+
+
+#endif // #if defined(__PXS_CM3623__)
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/sccb_v2_custom.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/sccb_v2_custom.h
new file mode 100644
index 0000000..930831c
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/sccb_v2_custom.h
@@ -0,0 +1,138 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * sccb_v2_custom.c
+ *
+ *
+ * Description:
+ * ------------
+ * SCCB/I2C V2 Driver
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ *****************************************************************************/
+//#if (defined(_USE_SCCB_V2_DRIVER_))
+#if (defined(DRV_I2C_25_SERIES))
+
+typedef enum
+{
+ SCCB_OWNER_CAMERA=0,
+ SCCB_OWNER_FM,
+ SCCB_OWNER_TP,
+ SCCB_OWNER_MS,
+ SCCB_NUM_OF_OWNER
+}SCCB_OWNER;
+
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/touch_panel_custom.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/touch_panel_custom.c
new file mode 100644
index 0000000..a2317e2
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/touch_panel_custom.c
@@ -0,0 +1,920 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * keypad_def.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file is defined for keypad table
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#if defined(TOUCH_PANEL_SUPPORT) || defined(HAND_WRITING)
+#include "drv_features.h"
+#include "drv_comm.h"
+#include "eint.h"
+#include "touch_panel_custom.h"
+#include "touch_panel.h"
+#include "touch_panel_spi.h"
+
+
+TouchPanel_custom_data_struct tp_custom_data_def =
+{
+#if defined(DRV_TOUCH_PANEL_CUSTOMER_PARAMETER)
+ TS_DEBOUNCE_TIME,
+ TOUCH_PANEL_CALI_CHECK_OFFSET,
+ MIN_PEN_MOVE_OFFSET,
+ HAND_WRITING_MAX_OFFSET,
+ NONHAND_WRITING_MAX_OFFSET,
+ MAX_STROKE_MOVE_OFFSET,
+ TOUCH_PRESSURE_THRESHOLD_HIGH,
+#if defined(DRV_TOUCH_PANEL_MULTIPLE_PICK)
+ MULTIPLE_POINT_SELECTION,
+#endif //#if defined(DRV_TOUCH_PANEL_MULTIPLE_PICK)
+#if defined(__DRV_TP_DISCARD_SHIFTING__)
+ PRESSURE_CHECK_BOUNDARY,
+ PRESSURE_SHIFTING_BOUNDARY,
+#endif //#if defined(__DRV_TP_DISCARD_SHIFTING__)
+#endif //#if defined(DRV_TOUCH_PANEL_CUSTOMER_PARAMETER)
+ TOUCH_PANEL_FILTER_THRESOLD,
+ /*ADC*/
+ TOUCH_PANEL_ADC_X_START,
+ TOUCH_PANEL_ADC_X_END,
+ TOUCH_PANEL_ADC_Y_START,
+ TOUCH_PANEL_ADC_Y_END,
+ /*Coord.*/
+ TOUCH_PANEL_COORD_X_START,
+ TOUCH_PANEL_COORD_X_END,
+ TOUCH_PANEL_COORD_Y_START,
+ TOUCH_PANEL_COORD_Y_END,
+ /*Size.*/
+ TOUCH_PANEL_X_MILLIMETER,
+ TOUCH_PANEL_Y_MILLIMETER,
+ /*eint level*/
+ TOUCH_PANEL_EINT_DOWN_LEVEL
+};
+
+#if defined(DRV_TP_NO_EXT_EINT)
+
+extern void tp_read_adc(kal_int16 *x, kal_int16 *y);
+extern void tp_irq_enable(kal_bool on);
+#ifdef TOUCH_PANEL_PRESSURE
+ extern kal_bool tp_pressure_check(void);
+#endif /*TOUCH_PANEL_PRESSURE*/
+
+const kal_int16 touch_panel_filter_thresold = TOUCH_PANEL_FILTER_THRESOLD;
+#ifdef TOUCH_PANEL_PRESSURE
+ const kal_uint16 touch_pressure_threshold_high = TOUCH_PRESSURE_THRESHOLD_HIGH;
+ const kal_uint16 touch_pressure_threshold_low = TOUCH_PRESSURE_THRESHOLD_LOW;
+#endif /*TOUCH_PANEL_PRESSURE*/
+
+#else // #if defined(DRV_TP_NO_EXT_EINT)
+
+void tp_read_adc(kal_int16 *x, kal_int16 *y)
+{
+#if !defined(__TOUCH_PANEL_CAPACITY__)
+ kal_uint8 command=0, retry;
+ kal_int16 temp_x=0, temp_y=0, diff_x=0, diff_y=0;
+
+ for(retry=0;retry<TOUCH_PANEL_RETRY;retry++)
+ {
+ /*Y ADC*/
+ command=TOUCH_PANEL_START_BIT|TOUCH_PANEL_X_PLUS|TOUCH_PANEL_12BIT_SAMPLE|
+ TOUCH_PANEL_DIFF_MODE;
+ serial_write_data(command);
+ *y=serial_read_data();
+
+ /*X ADC*/
+ command=TOUCH_PANEL_START_BIT|TOUCH_PANEL_Y_PLUS|TOUCH_PANEL_12BIT_SAMPLE|
+ TOUCH_PANEL_DIFF_MODE;
+ serial_write_data(command);
+ *x=serial_read_data();
+
+ if(temp_x==0&&temp_y==0)
+ {
+ temp_x=*x;
+ temp_y=*y;
+ }
+ else
+ {
+ diff_x=temp_x-*x;
+ diff_y=temp_y-*y;
+ if(diff_x>TOUCH_PANEL_FILTER_THRESOLD||diff_x<-TOUCH_PANEL_FILTER_THRESOLD
+ ||diff_y>TOUCH_PANEL_FILTER_THRESOLD||diff_y<-TOUCH_PANEL_FILTER_THRESOLD)
+ {
+ temp_x=*x;
+ temp_y=*y;
+ *x=4095;
+ *y=4095;
+ }
+ else
+ {
+ if(*x!=4095&&*y!=4095)
+ return;
+ }
+ }
+ }
+#endif //#if !defined(__TOUCH_PANEL_CAPACITY__)
+}
+
+#ifdef TOUCH_PANEL_PRESSURE
+kal_bool tp_pressure_check(void)
+{
+#if !defined(__TOUCH_PANEL_CAPACITY__)
+ kal_uint8 command=0, retry;
+ kal_int16 x, z1, z2;
+ kal_uint32 pressure;
+
+ for(retry=0;retry<TOUCH_PANEL_RETRY;retry++)
+ {
+ /*X ADC*/
+ command=TOUCH_PANEL_START_BIT|TOUCH_PANEL_Y_PLUS|TOUCH_PANEL_12BIT_SAMPLE|
+ TOUCH_PANEL_SINGLE_MODE;
+ serial_write_data(command);
+ x=serial_read_data();
+ //kal_prompt_trace(MOD_TP_TASK, "pressure x value: %d", x);
+
+ /*Z1 ADC*/
+ command=TOUCH_PANEL_START_BIT|TOUCH_PANEL_Z1_POS|TOUCH_PANEL_12BIT_SAMPLE|
+ TOUCH_PANEL_DIFF_MODE;
+ serial_write_data(command);
+ z1=serial_read_data();
+ //kal_prompt_trace(MOD_TP_TASK, "pressure z1 value: %d", z1);
+
+ /*Z2 ADC*/
+ command=TOUCH_PANEL_START_BIT|TOUCH_PANEL_Z2_POS|TOUCH_PANEL_12BIT_SAMPLE|
+ TOUCH_PANEL_DIFF_MODE;
+ serial_write_data(command);
+ z2=serial_read_data();
+ //kal_prompt_trace(MOD_TP_TASK, "pressure z2 value: %d", z2);
+ if((z1 > 0) && (z2 > z1))
+ {
+ pressure = (x*(z2-z1)/z1) >> 2; /* Rx*x/4096*(z2/z1 - 1), assume Rx=1024 */
+ //kal_prompt_trace(MOD_TP_TASK, "pressure: %d", pressure);
+ //if (pressure > TOUCH_PRESSURE_THRESHOLD2)
+ // kal_prompt_trace(MOD_TP_TASK, "pressure is above %d. value: %d", TOUCH_PRESSURE_THRESHOLD2, pressure);
+ if ((pressure > TOUCH_PRESSURE_THRESHOLD_HIGH) || (pressure <= TOUCH_PRESSURE_THRESHOLD_LOW))
+ return KAL_FALSE;
+ else
+ return KAL_TRUE;
+ }
+ }
+ //kal_prompt_trace(MOD_TP_TASK, "pressure: 0 (no value)");
+#endif //#if !defined(__TOUCH_PANEL_CAPACITY__)
+ return KAL_FALSE;
+}
+#endif /*TOUCH_PANEL_PRESSURE*/
+
+void tp_irq_enable(kal_bool on)
+{
+#if !defined(__TOUCH_PANEL_CAPACITY__)
+ kal_uint8 command=0;
+ kal_uint32 savedMask;
+
+#ifdef TOUCH_PANEL_PRESSURE
+ volatile kal_uint32 i;
+ //savedMask = SaveAndSetIRQMask();
+ GPIO_WriteIO(0,SPI_CS_PIN);
+ for (i=0;i<50;i++)
+ {;}
+#endif
+
+ if(on==KAL_TRUE)
+ {
+ command=TOUCH_PANEL_START_BIT|TOUCH_PANEL_PWD_ENBLE;
+ }
+ else
+ {
+ command=TOUCH_PANEL_START_BIT|TOUCH_PANEL_IRQ_DISABLE;
+ }
+ serial_write_data(command);
+ serial_read_data();
+
+#ifdef TOUCH_PANEL_PRESSURE
+ if(on==KAL_TRUE)
+ GPIO_WriteIO(0,SPI_CS_PIN);
+ else
+ GPIO_WriteIO(1,SPI_CS_PIN);
+#endif
+
+ //RestoreIRQMask(savedMask);
+#endif //#if !defined(__TOUCH_PANEL_CAPACITY__)
+}
+
+#endif // #if defined(DRV_TP_NO_EXT_EINT)
+
+TouchPanel_custom_data_struct *tp_Get_Data(void)
+{
+ return (&tp_custom_data_def);
+}
+TouchPanel_customize_function_struct tp_custom_func=
+{
+ tp_Get_Data,
+ tp_read_adc,
+#ifdef TOUCH_PANEL_PRESSURE
+ tp_pressure_check,
+#endif
+ tp_irq_enable
+};
+TouchPanel_customize_function_struct *tp_GetFunc(void)
+{
+ return (&tp_custom_func);
+}
+
+
+
+
+
+
+
+/*************************************************************************
+ * [Set the config for MMI handwriting pad is enabled]
+ *************************************************************************/
+#include "MMI_features.h"
+#ifdef __MMI_HANDWRITING_PAD__
+#include "mmi_frm_gprot.h" /* get tp_area_struct declaraction */
+#include "kbd_table.h"
+
+
+
+/*************************************************************************
+ * [Get the calibration point]
+ *************************************************************************/
+#define NUM_TP_CALIBRATION_POINTS 3
+const mmi_pen_point_struct tp_calibration_point[NUM_TP_CALIBRATION_POINTS]={
+ {TOUCH_PANEL_CALIBRATION_X_1, TOUCH_PANEL_CALIBRATION_Y_1}, /* top-left point */
+ {TOUCH_PANEL_CALIBRATION_X_2, TOUCH_PANEL_CALIBRATION_Y_2}, /* bottom-right point */
+ {TOUCH_PANEL_CALIBRATION_X_3, TOUCH_PANEL_CALIBRATION_Y_3} /* the thrid point */
+ };
+
+
+/*************************************************************************
+ * [handwriting pad information setting]
+ * Define the coordinate for control areas
+ * Below is the reference setting ...
+ *************************************************************************/
+#if defined(__MMI_MAINLCD_176X220__)
+#define TP_SCREEN_ROW_H (9)
+#define TP_SCREEN_ROW_0 (TOUCH_PANEL_COORD_Y_START)
+#define TP_SCREEN_ROW_1 (TOUCH_PANEL_COORD_Y_START+10)
+#define TP_SCREEN_ROW_2 (TOUCH_PANEL_COORD_Y_START+20)
+#define TP_SCREEN_ROW_3 (TOUCH_PANEL_COORD_Y_START+30)
+#define TP_SCREEN_ROW_4 (TOUCH_PANEL_COORD_Y_START+40)
+#define TP_SCREEN_ROW_5 (TOUCH_PANEL_COORD_Y_START+50)
+#define TP_SCREEN_ROW_6 (TOUCH_PANEL_COORD_Y_START+60)
+#define TP_SCREEN_ROW_7 (TOUCH_PANEL_COORD_Y_START+70)
+#define TP_SCREEN_ROW_8 (TOUCH_PANEL_COORD_Y_START+80)
+#define TP_SCREEN_ROW_9 (TOUCH_PANEL_COORD_Y_START+90)
+
+#define TP_SCREEN_COL_W (57)
+#define TP_SCREEN_COL_0 (TOUCH_PANEL_COORD_X_START)
+#define TP_SCREEN_COL_1 (TOUCH_PANEL_COORD_X_START+58)
+#define TP_SCREEN_COL_2 (TOUCH_PANEL_COORD_X_START+116)
+#define TP_SCREEN_COL_3 (TOUCH_PANEL_COORD_X_START+174)
+
+#elif defined(__MMI_MAINLCD_240X320__)
+
+#define TP_SCREEN_ROW_H (19)
+#define TP_SCREEN_ROW_0 (TOUCH_PANEL_COORD_Y_START)
+#define TP_SCREEN_ROW_1 (TOUCH_PANEL_COORD_Y_START+20)
+#define TP_SCREEN_ROW_2 (TOUCH_PANEL_COORD_Y_START+40)
+#define TP_SCREEN_ROW_3 (TOUCH_PANEL_COORD_Y_START+60)
+#define TP_SCREEN_ROW_4 (TOUCH_PANEL_COORD_Y_START+80)
+#define TP_SCREEN_ROW_5 (TOUCH_PANEL_COORD_Y_START+100)
+#define TP_SCREEN_ROW_6 (TOUCH_PANEL_COORD_Y_START+120)
+#define TP_SCREEN_ROW_7 (TOUCH_PANEL_COORD_Y_START+140)
+#define TP_SCREEN_ROW_8 (TOUCH_PANEL_COORD_Y_START+160)
+#define TP_SCREEN_ROW_9 (TOUCH_PANEL_COORD_Y_START+180)
+
+#define TP_SCREEN_COL_W (79)
+#define TP_SCREEN_COL_0 (TOUCH_PANEL_COORD_X_START)
+#define TP_SCREEN_COL_1 (TOUCH_PANEL_COORD_X_START+80)
+#define TP_SCREEN_COL_2 (TOUCH_PANEL_COORD_X_START+160)
+#define TP_SCREEN_COL_3 (TOUCH_PANEL_COORD_X_START+240)
+
+#endif
+
+
+/* If the customer want to handle the pen events, register the function handler here. */
+
+void custom_dummy_pen_hdlr(mmi_pen_point_struct pos)
+{
+}
+
+
+mmi_pen_hdlr custom_extra_func_hdlr[MMI_PEN_EVENT_TYPE_MAX]={
+ NULL, /* MMI_PEN_EVENT_DOWN, */
+ NULL, /* MMI_PEN_EVENT_UP, */
+ NULL, /* MMI_PEN_EVENT_LONG_TAP, */
+ NULL, /* MMI_PEN_EVENT_REPEAT, */
+ NULL, /* MMI_PEN_EVENT_MOVE, */
+ NULL, /* MMI_PEN_EVENT_ABORT, */
+ };
+
+/*
+ * control area:
+ * The points of the region need to be successive and end at {-1,-1}
+ *
+ * TP_SCREEN_COL_0
+ * | TP_SCREEN_COL_1
+ * | | TP_SCREEN_COL_2
+ * | | | TP_SCREEN_COL_3
+ * v v v v
+ * +-----+-----+-----+ <-- TP_SCREEN_ROW_0
+ * | LSK | ^ | RSK |
+ * +-----+-----+-----+ <-- TP_SCREEN_ROW_1
+ * | <-- | v | --> |
+ * +-----+-----+-----+ <-- TP_SCREEN_ROW_2
+ * |Send | C | End |
+ * +-----+-----+-----+ <-- TP_SCREEN_ROW_3
+ * | 1 | 2 | 3 |
+ * +-----+-----+-----+ <-- TP_SCREEN_ROW_4
+ * | 4 | 5 | 6 |
+ * +-----+-----+-----+ <-- TP_SCREEN_ROW_5
+ * | 7 | 8 | 9 |
+ * +-----+-----+-----+ <-- TP_SCREEN_ROW_6
+ * | * | 0 | # |
+ * +-----+-----+-----+ <-- TP_SCREEN_ROW_7
+ *
+ * handwriting area:
+ * The region must be the rectangle and the points should be successive and end at {-1,-1}
+ */
+const mmi_pen_point_struct tp_lsk_region[]= {
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_0},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_0},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_1-1},
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_1-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_up_arrow_region[]={
+ {TP_SCREEN_COL_1, TP_SCREEN_ROW_0},
+ {TP_SCREEN_COL_2-1, TP_SCREEN_ROW_0},
+ {TP_SCREEN_COL_2-1, TP_SCREEN_ROW_1-1},
+ {TP_SCREEN_COL_1, TP_SCREEN_ROW_1-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_rsk_region[]={
+ {TP_SCREEN_COL_2, TP_SCREEN_ROW_0},
+ {TP_SCREEN_COL_3-1, TP_SCREEN_ROW_0},
+ {TP_SCREEN_COL_3-1, TP_SCREEN_ROW_1-1},
+ {TP_SCREEN_COL_2, TP_SCREEN_ROW_1-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_left_arrow_region[]= {
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_1},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_1},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_2-1},
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_2-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_down_arrow_region[]={
+ {TP_SCREEN_COL_1, TP_SCREEN_ROW_1},
+ {TP_SCREEN_COL_2-1, TP_SCREEN_ROW_1},
+ {TP_SCREEN_COL_2-1, TP_SCREEN_ROW_2-1},
+ {TP_SCREEN_COL_1, TP_SCREEN_ROW_2-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_right_arrow_region[]={
+ {TP_SCREEN_COL_2, TP_SCREEN_ROW_1},
+ {TP_SCREEN_COL_3-1, TP_SCREEN_ROW_1},
+ {TP_SCREEN_COL_3-1, TP_SCREEN_ROW_2-1},
+ {TP_SCREEN_COL_2, TP_SCREEN_ROW_2-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_send_region[]= {
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_2},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_2},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_3-1},
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_3-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_clean_region[]={
+ {TP_SCREEN_COL_1, TP_SCREEN_ROW_2},
+ {TP_SCREEN_COL_2-1, TP_SCREEN_ROW_2},
+ {TP_SCREEN_COL_2-1, TP_SCREEN_ROW_3-1},
+ {TP_SCREEN_COL_1, TP_SCREEN_ROW_3-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_end_region[]={
+ {TP_SCREEN_COL_2, TP_SCREEN_ROW_2},
+ {TP_SCREEN_COL_3-1, TP_SCREEN_ROW_2},
+ {TP_SCREEN_COL_3-1, TP_SCREEN_ROW_3-1},
+ {TP_SCREEN_COL_2, TP_SCREEN_ROW_3-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_1_region[]= {
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_3},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_3},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_4-1},
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_4-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_2_region[]={
+ {TP_SCREEN_COL_1, TP_SCREEN_ROW_3},
+ {TP_SCREEN_COL_2-1, TP_SCREEN_ROW_3},
+ {TP_SCREEN_COL_2-1, TP_SCREEN_ROW_4-1},
+ {TP_SCREEN_COL_1, TP_SCREEN_ROW_4-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_3_region[]={
+ {TP_SCREEN_COL_2, TP_SCREEN_ROW_3},
+ {TP_SCREEN_COL_3-1, TP_SCREEN_ROW_3},
+ {TP_SCREEN_COL_3-1, TP_SCREEN_ROW_4-1},
+ {TP_SCREEN_COL_2, TP_SCREEN_ROW_4-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_4_region[]= {
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_4},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_4},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_5-1},
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_5-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_5_region[]={
+ {TP_SCREEN_COL_1, TP_SCREEN_ROW_4},
+ {TP_SCREEN_COL_2-1, TP_SCREEN_ROW_4},
+ {TP_SCREEN_COL_2-1, TP_SCREEN_ROW_5-1},
+ {TP_SCREEN_COL_1, TP_SCREEN_ROW_5-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_6_region[]={
+ {TP_SCREEN_COL_2, TP_SCREEN_ROW_4},
+ {TP_SCREEN_COL_3-1, TP_SCREEN_ROW_4},
+ {TP_SCREEN_COL_3-1, TP_SCREEN_ROW_5-1},
+ {TP_SCREEN_COL_2, TP_SCREEN_ROW_5-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_7_region[]= {
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_5},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_5},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_6-1},
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_6-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_8_region[]={
+ {TP_SCREEN_COL_1, TP_SCREEN_ROW_5},
+ {TP_SCREEN_COL_2-1, TP_SCREEN_ROW_5},
+ {TP_SCREEN_COL_2-1, TP_SCREEN_ROW_6-1},
+ {TP_SCREEN_COL_1, TP_SCREEN_ROW_6-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_9_region[]={
+ {TP_SCREEN_COL_2, TP_SCREEN_ROW_5},
+ {TP_SCREEN_COL_3-1, TP_SCREEN_ROW_5},
+ {TP_SCREEN_COL_3-1, TP_SCREEN_ROW_6-1},
+ {TP_SCREEN_COL_2, TP_SCREEN_ROW_6-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_star_region[]= {
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_6},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_6},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_7-1},
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_7-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_0_region[]={
+ {TP_SCREEN_COL_1, TP_SCREEN_ROW_6},
+ {TP_SCREEN_COL_2-1, TP_SCREEN_ROW_6},
+ {TP_SCREEN_COL_2-1, TP_SCREEN_ROW_7-1},
+ {TP_SCREEN_COL_1, TP_SCREEN_ROW_7-1},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_hash_region[]={
+ {TP_SCREEN_COL_2, TP_SCREEN_ROW_6},
+ {TP_SCREEN_COL_3-1, TP_SCREEN_ROW_6},
+ {TP_SCREEN_COL_3-1, TP_SCREEN_ROW_7-1},
+ {TP_SCREEN_COL_2, TP_SCREEN_ROW_7-1},
+ {-1,-1}
+ };
+
+
+
+
+
+
+
+
+const mmi_pen_point_struct tp_extra_func_region[]={
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_7},
+ {TP_SCREEN_COL_0+TP_SCREEN_COL_3/4, TP_SCREEN_ROW_7+TP_SCREEN_ROW_H/2},
+ {TP_SCREEN_COL_0+TP_SCREEN_COL_3/2, TP_SCREEN_ROW_7+TP_SCREEN_ROW_H},
+ {TP_SCREEN_COL_0+TP_SCREEN_COL_3*3/4, TP_SCREEN_ROW_7+TP_SCREEN_ROW_H/2},
+ {TP_SCREEN_COL_3-1, TP_SCREEN_ROW_7},
+ {-1,-1}
+ };
+
+const mmi_pen_point_struct tp_handwriting_region[]={
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_2},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_2},
+ {TP_SCREEN_COL_1-1, TP_SCREEN_ROW_8-1},
+ {TP_SCREEN_COL_0, TP_SCREEN_ROW_8-1},
+ {-1,-1}
+ };
+
+/*
+ * The area table information...
+ * 1. tp_area_id_enum
+ *
+ * 2. flag
+ * TP_HANDWRITING_AREA - it is the handwriting area
+ * TP_CONTROL_AREA - it is the control area
+ * TP_MAPPING_KEY - for control area only; Translate the pen event to
+ * the key event
+ * TP_CUSTOM_HANDLE - the custom want to handler pen event by themselves.
+ * TP_HANDWRITING_SUPPORTS_FULL_AREA - extend handwriting area to full touch
+ * pad area when the first stroke down.
+ *
+ * 3. region
+ * control area:
+ * The points of the region need to be successive and end at {-1,-1}
+ *
+ * handwriting area:
+ * The region must be the rectangle and the points should be in clock wise order
+ *
+ * 4. pen_handler_table
+ * NULL - use the default handler
+ * Others - the customers provide the special handlers
+ */
+const tp_area_struct tp_area_table[TP_AREA_MAX_NUM] = {
+ /* Handwriting Area */
+ {
+ TP_AREA_HANDWRITING,
+ TP_HANDWRITING_AREA|TP_HANDWRITING_SUPPORTS_FULL_AREA,
+ tp_handwriting_region,
+ NULL
+ },
+
+ /* Control Area */
+ {
+ TP_CONTROL_AREA_LSK,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_SK_LEFT,
+ tp_lsk_region,
+ NULL
+ },
+ {
+ TP_CONTROL_AREA_UP_ARROW,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_UP,
+ tp_up_arrow_region,
+ NULL
+ },
+ {
+ TP_CONTROL_AREA_RSK,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_SK_RIGHT,
+ tp_rsk_region,
+ NULL
+ },
+
+ {
+ TP_CONTROL_AREA_LEFT_ARROW,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_LEFT,
+ tp_left_arrow_region,
+ NULL
+ },
+ {
+ TP_CONTROL_AREA_DOWN_ARROW,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_DOWN,
+ tp_down_arrow_region,
+ NULL
+ },
+ {
+ TP_CONTROL_AREA_RIGHT_ARROW,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_RIGHT,
+ tp_right_arrow_region,
+ NULL
+ },
+
+ {
+ TP_CONTROL_AREA_SEND,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_SEND,
+ tp_send_region,
+ NULL
+ },
+ {
+ TP_CONTROL_AREA_CLEAN,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_CLEAR,
+ tp_clean_region,
+ NULL
+ },
+ {
+ TP_CONTROL_AREA_END,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_END,
+ tp_end_region,
+ NULL
+ },
+
+ {
+ TP_CONTROL_AREA_1,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_1,
+ tp_1_region,
+ NULL
+ },
+ {
+ TP_CONTROL_AREA_2,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_2,
+ tp_2_region,
+ NULL
+ },
+ {
+ TP_CONTROL_AREA_3,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_3,
+ tp_3_region,
+ NULL
+ },
+
+ {
+ TP_CONTROL_AREA_4,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_4,
+ tp_4_region,
+ NULL
+ },
+ {
+ TP_CONTROL_AREA_5,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_5,
+ tp_5_region,
+ NULL
+ },
+ {
+ TP_CONTROL_AREA_6,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_6,
+ tp_6_region,
+ NULL
+ },
+
+ {
+ TP_CONTROL_AREA_7,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_7,
+ tp_7_region,
+ NULL
+ },
+ {
+ TP_CONTROL_AREA_8,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_8,
+ tp_8_region,
+ NULL
+ },
+ {
+ TP_CONTROL_AREA_9,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_9,
+ tp_9_region,
+ NULL
+ },
+
+ {
+ TP_CONTROL_AREA_STAR,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_STAR,
+ tp_star_region,
+ NULL
+ },
+ {
+ TP_CONTROL_AREA_0,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_0,
+ tp_0_region,
+ NULL
+ },
+ {
+ TP_CONTROL_AREA_HASH,
+ TP_CONTROL_AREA|TP_MAPPING_KEY|DEVICE_KEY_HASH,
+ tp_hash_region,
+ NULL
+ },
+
+
+ {
+ TP_CONTROL_AREA_EXTRA_FUNC,
+ TP_CONTROL_AREA|TP_CUSTOM_HANDLE,
+ tp_extra_func_region,
+ custom_extra_func_hdlr
+ },
+};
+
+#endif /* __MMI_HANDWRITING_PAD__ */
+
+
+
+#endif
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/touch_panel_custom.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/touch_panel_custom.h
new file mode 100644
index 0000000..db46611
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/touch_panel_custom.h
@@ -0,0 +1,383 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * keypad_def.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file is defined for keypad table
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef TOUCH_PANEL_CUSTOM_H
+#define TOUCH_PANEL_CUSTOM_H
+#include "eint.h"
+#include "lcd_sw_inc.h"
+
+#define CTP_I2C_LDO VCAMA //MT6276E2 use VACMA, MT6276E1 use VCAMD
+#define CTP_I2C_LDO_VOLTAGE PMU_VOLT_02_800000_V
+
+#define TOUCH_PANEL_COORD_X_START 0
+#define TOUCH_PANEL_COORD_X_END (LCD_WIDTH - 1)
+#define TOUCH_PANEL_COORD_Y_START 0
+#define TOUCH_PANEL_COORD_Y_END (LCD_HEIGHT - 1)
+
+/*ADC*/
+#if defined(__TOUCH_PANEL_CAPACITY__)
+#define TOUCH_PANEL_ADC_X_START 0
+#define TOUCH_PANEL_ADC_X_END (2048*TOUCH_PANEL_COORD_X_END)/479
+#define TOUCH_PANEL_ADC_Y_START 0
+#define TOUCH_PANEL_ADC_Y_END (2048*TOUCH_PANEL_COORD_Y_END)/799
+#else
+#define TOUCH_PANEL_ADC_X_START 230
+#define TOUCH_PANEL_ADC_X_END 3867
+#define TOUCH_PANEL_ADC_Y_START 287
+#define TOUCH_PANEL_ADC_Y_END 3853
+#endif //#if defined(__TOUCH_PANEL_CAPACITY__)
+
+#define TOUCH_PANEL_X_MILLIMETER 42
+#define TOUCH_PANEL_Y_MILLIMETER 70
+#define TOUCH_PANEL_EINT_DOWN_LEVEL LEVEL_LOW
+
+
+/*touch panel control*/
+#define TOUCH_PANEL_START_BIT 0x80
+
+#define TOUCH_PANEL_TEMP0 0x00
+#define TOUCH_PANEL_X_PLUS 0x10
+#define TOUCH_PANEL_VBAT 0x20
+#define TOUCH_PANEL_Z1_POS 0x30
+#define TOUCH_PANEL_Z2_POS 0x40
+#define TOUCH_PANEL_Y_PLUS 0x50
+#define TOUCH_PANEL_TEMP1 0x70
+
+#define TOUCH_PANEL_ADC3 0x20
+#define TOUCH_PANEL_ADC4 0x60
+#define TOUCH_PANEL_12BIT_SAMPLE 0x0
+#define TOUCH_PANEL_8BIT_SAMPLE 0x8
+#define TOUCH_PANEL_DIFF_MODE 0x0
+#define TOUCH_PANEL_SINGLE_MODE 0x4
+
+#define TOUCH_PANEL_PWD_ENBLE 0x0
+#define TOUCH_PANEL_IRQ_DISABLE 0x1
+#define TOUCH_PANEL_PWD_DISABLE 0x3
+#define TOUCH_PANEL_PWD_RESET 0x2
+
+
+/*retry and filter*/
+#ifdef TOUCH_PANEL_PRESSURE
+ #define TOUCH_PANEL_RETRY 1
+ #define TOUCH_PANEL_FILTER_THRESOLD 10000
+ #define TOUCH_PRESSURE_THRESHOLD_LOW 150
+#else /*TOUCH_PANEL_PRESSURE*/
+#define TOUCH_PANEL_RETRY 4
+#define TOUCH_PANEL_FILTER_THRESOLD 50
+#endif /*TOUCH_PANEL_PRESSURE*/
+ #define TOUCH_PRESSURE_THRESHOLD_HIGH 6500
+
+#if defined(DRV_TOUCH_PANEL_CUSTOMER_PARAMETER)
+#define TS_DEBOUNCE_TIME 36*32
+#define TOUCH_PANEL_CALI_CHECK_OFFSET 6
+#define MIN_PEN_MOVE_OFFSET 8
+#define HAND_WRITING_MAX_OFFSET 50
+#define NONHAND_WRITING_MAX_OFFSET 100
+#define MAX_STROKE_MOVE_OFFSET 1
+#if defined(DRV_TOUCH_PANEL_MULTIPLE_PICK)
+#define MULTIPLE_POINT_SELECTION 7
+#endif /*#if defined(DRV_TOUCH_PANEL_MULTIPLE_PICK)*/
+#if defined(__DRV_TP_DISCARD_SHIFTING__)
+#define PRESSURE_CHECK_BOUNDARY 2000
+#define PRESSURE_SHIFTING_BOUNDARY 800
+#endif /*#if defined(__DRV_TP_DISCARD_SHIFTING__)*/
+#endif /*#if defined(DRV_TOUCH_PANEL_CUSTOMER_PARAMETER)*/
+
+/*************************************************************************
+ * [Define the cailbration point only for HAND_WRITING feature ]
+ *************************************************************************/
+/* top-left point */
+#define TOUCH_PANEL_CALIBRATION_X_1 (20)
+#define TOUCH_PANEL_CALIBRATION_Y_1 (170)
+/* bottom-right point */
+#define TOUCH_PANEL_CALIBRATION_X_2 (220)
+#define TOUCH_PANEL_CALIBRATION_Y_2 (270)
+/* 3rd point should be different from the ceter point
+ * such that driver can check it's ADC value
+ */
+#define TOUCH_PANEL_CALIBRATION_X_3 (150)
+#define TOUCH_PANEL_CALIBRATION_Y_3 (250)
+
+
+/*************************************************************************
+ * [handwriting pad information setting]
+ * 1. Define the enum of the control areas
+ *
+ * The flag for control areas or handwriting areas...
+ *
+ * #define TP_MAPPING_KEY (0x00000100)
+ * #define TP_CUSTOM_HANDLE (0x00000200)
+ * #define TP_CONTROL_AREA (0x80000000)
+ * #define TP_HANDWRITING_AREA (0x40000000)
+ * #define TP_HANDWRITING_SUPPORTS_FULL_AREA (0x20000000)
+ *
+ * 2.
+ *************************************************************************/
+typedef enum
+{
+ TP_AREA_HANDWRITING,
+ TP_CONTROL_AREA_LSK,
+ TP_CONTROL_AREA_UP_ARROW,
+ TP_CONTROL_AREA_RSK,
+ TP_CONTROL_AREA_DOWN_ARROW,
+ TP_CONTROL_AREA_LEFT_ARROW,
+ TP_CONTROL_AREA_RIGHT_ARROW,
+
+ TP_CONTROL_AREA_SEND,
+ TP_CONTROL_AREA_CLEAN,
+ TP_CONTROL_AREA_END,
+
+ TP_CONTROL_AREA_1,
+ TP_CONTROL_AREA_2,
+ TP_CONTROL_AREA_3,
+
+ TP_CONTROL_AREA_4,
+ TP_CONTROL_AREA_5,
+ TP_CONTROL_AREA_6,
+
+ TP_CONTROL_AREA_7,
+ TP_CONTROL_AREA_8,
+ TP_CONTROL_AREA_9,
+
+ TP_CONTROL_AREA_STAR,
+ TP_CONTROL_AREA_0,
+ TP_CONTROL_AREA_HASH,
+
+ TP_CONTROL_AREA_EXTRA_FUNC,
+
+ /* don't add the enum after this line */
+ TP_AREA_MAX_NUM
+}tp_area_id_enum;
+
+
+
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/touch_panel_spi.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/touch_panel_spi.c
new file mode 100644
index 0000000..1fe01a1
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/touch_panel_spi.c
@@ -0,0 +1,290 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * serial_interface.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines Serial Interface.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#if defined(TOUCH_PANEL_SUPPORT) || defined(HAND_WRITING)
+#include "drv_features.h"
+#include "kal_public_api.h" //MSBB change #include "kal_release.h"
+#include "drv_comm.h"
+#include "gpio_hw.h"
+#include "gpio_sw.h"
+#include "touch_panel_spi.h"
+//#include "serial_interface.h"
+
+#if !defined(DRV_TP_NO_EXT_EINT) && !defined(__TOUCH_PANEL_CAPACITY__)
+
+#define ZERO_FIELD_COUNT 0 /*zero filled cycles*/
+void serial_write_data(kal_uint8 data);
+kal_uint16 serial_read_data(void);
+
+
+/*************************************************************************
+* FUNCTION
+* serial_init
+*
+* DESCRIPTION
+* This function initializes serial interface.
+*
+* PARAMETERS
+* None
+* RETURNS
+* None
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+void serial_init(void)
+{
+ kal_uint16 delay;
+ kal_int16 x, y;
+
+ GPIO_WriteIO(0,SPI_CS_PIN);
+ GPIO_ModeSetup(SPI_DIN_PIN, 0x0);
+ GPIO_ModeSetup(SPI_CLK_PIN, 0x0);
+ GPIO_ModeSetup(SPI_DOUT_PIN, 0x0);
+ GPIO_ModeSetup(SPI_CS_PIN, 0x0);
+ GPIO_ModeSetup(SPI_BUSY_PIN, 0x0);
+ GPIO_InitIO(OUTPUT,SPI_DIN_PIN);
+ GPIO_InitIO(OUTPUT,SPI_CLK_PIN);
+ GPIO_InitIO(INPUT,SPI_DOUT_PIN);
+ GPIO_InitIO(OUTPUT,SPI_CS_PIN);
+ GPIO_InitIO(INPUT,SPI_BUSY_PIN);
+ GPIO_WriteIO(0,SPI_CS_PIN);
+
+ /*AR7643 needs this, so weird*/
+ for(delay=0;delay<1000;delay++){};
+ //tp_read_adc(&x, &y);
+}
+/*************************************************************************
+* FUNCTION
+* serial_delay
+*
+* DESCRIPTION
+* This function is to add delay.
+*
+* PARAMETERS
+* None
+* RETURNS
+* None
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+void serial_delay(void)
+{
+ kal_uint16 delay;
+ for(delay=0;delay<0;delay++){}
+}
+/*************************************************************************
+* FUNCTION
+* serial_write_bit_high
+*
+* DESCRIPTION
+* This function is to set a bit as high.
+*
+* PARAMETERS
+* None
+* RETURNS
+* None
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+/*write 1*/
+void serial_write_bit_high(void)
+{
+ SET_DATA_HIGH(); /* ---- */
+ SET_CLK_LOW(); /* _-_ */
+ serial_delay();
+ SET_CLK_HIGH();
+ serial_delay();
+ SET_CLK_LOW();
+}
+/*************************************************************************
+* FUNCTION
+* serial_write_bit_low
+*
+* DESCRIPTION
+* This function is to set a bit as low.
+*
+* PARAMETERS
+* None
+* RETURNS
+* None
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+/*write 0*/
+void serial_write_bit_low(void)
+{
+ SET_DATA_LOW(); /* ____ */
+ SET_CLK_LOW(); /* _-_ */
+ serial_delay();
+ SET_CLK_HIGH();
+ serial_delay();
+ SET_CLK_LOW();
+}
+/*************************************************************************
+* FUNCTION
+* serial_read_data
+*
+* DESCRIPTION
+* This function is to read data via SPI.
+*
+* PARAMETERS
+* None
+*
+* RETURNS
+* received data
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+/*read*/
+kal_uint16 serial_read_data(void)
+{
+ kal_uint16 data=0;
+ kal_int16 i;
+ kal_uint32 savedMask;
+ kal_uint32 retry=0;
+
+ //savedMask = SaveAndSetIRQMask();
+ SET_CLK_LOW();
+ SET_CLK_HIGH();
+ while(GET_BUSY_BIT())
+ {
+
+ SET_CLK_LOW();
+ SET_CLK_HIGH();
+ retry++;
+ if(retry>1000000)/*give up the read. controller may be broken*/
+ return 0;
+ };
+ for(i=11;i>=0;i--)
+ {
+ //SET_CLK_LOW();
+ //serial_delay();
+ SET_CLK_HIGH();
+ serial_delay();
+ if(GET_DATA_BIT())
+ data |= (1<<i);
+
+ SET_CLK_LOW();
+ serial_delay();
+ }
+ for(i=0;i<ZERO_FIELD_COUNT;i++)
+ {
+ SET_CLK_LOW();
+ serial_delay();
+ SET_CLK_HIGH();
+ SET_CLK_LOW();
+ }
+ data&=0x3fff;
+ //RestoreIRQMask(savedMask);
+ return data;
+}
+/*************************************************************************
+* FUNCTION
+* serial_write_data
+*
+* DESCRIPTION
+* This function is to write data via SPI.
+*
+* PARAMETERS
+* transmitted data
+*
+* RETURNS
+* None
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+void serial_write_data(kal_uint8 data)
+{
+ kal_int8 i;
+ //kal_uint32 savedMask;
+ //savedMask = SaveAndSetIRQMask();
+
+ for (i=7;i>=0;i--)
+ { /* data bit 7~0 */
+ if (data & (1<<i))
+ {
+ serial_write_bit_high();
+ }
+ else
+ {
+ serial_write_bit_low();
+ }
+ }
+ SET_DATA_LOW();
+ //RestoreIRQMask(savedMask);
+}
+
+#endif /*!defined(DRV_TP_NO_EXT_EINT)*/
+
+#endif
+
+
+
+
+
+
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/touch_panel_spi.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/touch_panel_spi.h
new file mode 100644
index 0000000..2369ce2
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/touch_panel_spi.h
@@ -0,0 +1,98 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * serial_interface.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines Serial Interface.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef TOUCH_PANEL_SPI_H
+#define TOUCH_PANEL_SPI_H
+
+#ifdef __CUST_NEW__
+ extern const char gpio_tp_spi_din_pin;
+ extern const char gpio_tp_spi_clk_pin;
+ extern const char gpio_tp_spi_dout_pin;
+ extern const char gpio_tp_spi_cs_pin;
+ extern const char gpio_tp_spi_busy_pin;
+
+ #define SPI_DIN_PIN gpio_tp_spi_din_pin /*GPO*/
+ #define SPI_CLK_PIN gpio_tp_spi_clk_pin /*GPO*/
+ #define SPI_DOUT_PIN gpio_tp_spi_dout_pin /*GPI*/
+ #define SPI_CS_PIN gpio_tp_spi_cs_pin /*GPO*/
+ #define SPI_BUSY_PIN gpio_tp_spi_busy_pin /*GPI*/
+#else /* __CUST_NEW__ */
+#define SPI_DIN_PIN 50 /*GPO*/
+#define SPI_CLK_PIN 5 /*GPO*/
+#define SPI_DOUT_PIN 22 /*GPI*/
+#define SPI_CS_PIN 23 /*GPO*/
+#define SPI_BUSY_PIN 21 /*GPI*/
+#endif /* __CUST_NEW__ */
+
+#define SET_CLK_HIGH() (GPIO_WriteIO(1,SPI_CLK_PIN))
+#define SET_CLK_LOW() (GPIO_WriteIO(0,SPI_CLK_PIN))
+#define SET_DATA_HIGH() GPIO_WriteIO(1,SPI_DIN_PIN)
+#define SET_DATA_LOW() GPIO_WriteIO(0,SPI_DIN_PIN)
+#define GET_DATA_BIT() GPIO_ReadIO(SPI_DOUT_PIN)
+#define GET_BUSY_BIT() GPIO_ReadIO(SPI_BUSY_PIN)
+
+void serial_write_bit_high(void);
+void serial_write_bit_low(void);
+void serial_delay(void);
+void serial_write_data(kal_uint8 data);
+kal_uint16 serial_read_data(void);
+void serial_init(void);
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/tv_custom.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/tv_custom.c
new file mode 100644
index 0000000..6df89fc
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/tv_custom.c
@@ -0,0 +1,75 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * tv_custom.c
+ *
+ * Project:
+ * --------
+ * MT6228, MT6229
+ *
+ * Description:
+ * ------------
+ * MT6228, MT6229 tv output control function
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "reg_base.h"
+#include "intrCtrl.h"
+#include "drv_comm.h"
+#include "drvpdn.h"
+#ifdef TV_OUT_SUPPORT
+kal_uint16 tv_gamma_table[5][9]=
+{{0, 103, 291, 534, 822, 1149, 1510, 1903, 2311},
+ {0, 173, 411, 681, 976, 1291, 1621, 1965, 2311},
+ {0, 290, 580, 870, 1160, 1450, 1740, 2030, 2320},
+ {0, 487, 819, 1111, 1378, 1629, 1868, 2097, 2311},
+ {0, 819, 1158, 1418, 1637, 1831, 2005, 2166, 2311}
+};
+#endif//TV_OUT_SUPPORT
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/tv_custom.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/tv_custom.h
new file mode 100644
index 0000000..b217211
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/tv_custom.h
@@ -0,0 +1,65 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * tv_custom.h
+ *
+ * Project:
+ * --------
+ * MT6228, MT6229
+ *
+ * Description:
+ * ------------
+ * MT6228, MT6229 tv output control function
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifdef TV_OUT_SUPPORT
+extern kal_uint16 tv_gamma_table[5][9];
+#endif //TV_OUT_SUPPORT
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/two_mic_NR_custom_if.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/two_mic_NR_custom_if.c
new file mode 100644
index 0000000..f8a1d33
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/two_mic_NR_custom_if.c
@@ -0,0 +1,682 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * two_mic_NR_custom_if.h
+ *
+ * DateTime:
+ * ---------
+ * 9/27/2009 3:10PM
+ *
+ * Project:
+ * --------
+ * 2-mic NR
+ *
+ * Description:
+ * ------------
+ * This file contains the function for the state transition of the FM chip.
+ *
+ * Author:
+ *
+ *
+ **************************************************************************
+ **************************************************************************/
+#if defined(__TWOMICNR_SUPPORT__)
+
+ /*****************************************************************************
+ * System Include Files
+ ****************************************************************************/
+#include "two_mic_NR_custom_if.h"
+#include "kal_public_api.h" //MSBB change #include "kal_release.h" /* Basic data type */
+#include "parameter_data_file.h"
+#include "gpio_sw.h"
+
+/*****************************************************************************
+ * Local Definitions
+ ****************************************************************************/
+#define START_TOKEN 0
+#define STOP_TOKEN 1
+#define DW_TOKEN 2
+#define DR_N_TOKEN 3
+
+/* #define TWOMICNR_I2C_DELAY (0x08) */
+#define TWOMICNR_I2C_DELAY (0x28)
+static kal_uint32 TWOMICNR_I2C_MAX_RETRY_COUNT = 0x100;
+
+#define SET_TWOMICNR_I2C_CLK_OUTPUT GPIO_InitIO(OUTPUT,TWOMICNR_I2C_SCL_GPIO_PIN)
+#define SET_TWOMICNR_I2C_CLK_INPUT GPIO_InitIO(INPUT,TWOMICNR_I2C_SCL_GPIO_PIN)
+#define SET_TWOMICNR_I2C_DATA_OUTPUT GPIO_InitIO(OUTPUT,TWOMICNR_I2C_SDA_GPIO_PIN)
+#define SET_TWOMICNR_I2C_DATA_INPUT GPIO_InitIO(INPUT,TWOMICNR_I2C_SDA_GPIO_PIN)
+#define SET_TWOMICNR_I2C_CLK_HIGH GPIO_WriteIO(1,TWOMICNR_I2C_SCL_GPIO_PIN)
+#define SET_TWOMICNR_I2C_CLK_LOW GPIO_WriteIO(0,TWOMICNR_I2C_SCL_GPIO_PIN)
+#define SET_TWOMICNR_I2C_DATA_HIGH GPIO_WriteIO(1,TWOMICNR_I2C_SDA_GPIO_PIN)
+#define SET_TWOMICNR_I2C_DATA_LOW GPIO_WriteIO(0,TWOMICNR_I2C_SDA_GPIO_PIN)
+#define GET_TWOMICNR_I2C_DATA_BIT GPIO_ReadIO(TWOMICNR_I2C_SDA_GPIO_PIN)
+
+#define TWOMICNR_I2C_RESET_TRANSMISSION \
+ { \
+ SET_TWOMICNR_I2C_DATA_OUTPUT; \
+ SET_TWOMICNR_I2C_DATA_HIGH; \
+ SET_TWOMICNR_I2C_CLK_OUTPUT; \
+ SET_TWOMICNR_I2C_CLK_HIGH; \
+ }
+
+#define TWOMICNR_I2C_START_TRANSMISSION \
+{ \
+ kal_uint8 j_start; \
+ SET_TWOMICNR_I2C_CLK_OUTPUT; \
+ SET_TWOMICNR_I2C_DATA_OUTPUT; \
+ SET_TWOMICNR_I2C_CLK_HIGH; \
+ SET_TWOMICNR_I2C_DATA_HIGH; \
+ for (j_start = 0; j_start < TWOMICNR_I2C_DELAY; j_start++);\
+ SET_TWOMICNR_I2C_DATA_LOW; \
+ for (j_start = 0; j_start < TWOMICNR_I2C_DELAY; j_start++);\
+ SET_TWOMICNR_I2C_CLK_LOW; \
+}
+
+
+
+#define TWOMICNR_I2C_STOP_TRANSMISSION \
+{ \
+ kal_uint8 j_stop; \
+ SET_TWOMICNR_I2C_CLK_OUTPUT; \
+ SET_TWOMICNR_I2C_DATA_OUTPUT; \
+ SET_TWOMICNR_I2C_CLK_LOW; \
+ SET_TWOMICNR_I2C_DATA_LOW; \
+ for (j_stop = 0; j_stop < TWOMICNR_I2C_DELAY; j_stop++);\
+ SET_TWOMICNR_I2C_CLK_HIGH; \
+ for (j_stop = 0; j_stop < TWOMICNR_I2C_DELAY; j_stop++);\
+ SET_TWOMICNR_I2C_DATA_HIGH; \
+}
+
+
+#define NACK_BIT \
+ { \
+ kal_uint8 i_nack; \
+ for (i_nack=0; i_nack<TWOMICNR_I2C_DELAY; i_nack++); \
+ SET_TWOMICNR_I2C_DATA_OUTPUT; \
+ SET_TWOMICNR_I2C_DATA_HIGH; \
+ for (i_nack=0; i_nack<TWOMICNR_I2C_DELAY; i_nack++); \
+ SET_TWOMICNR_I2C_CLK_HIGH; \
+ for (i_nack=0; i_nack<TWOMICNR_I2C_DELAY; i_nack++); \
+ SET_TWOMICNR_I2C_CLK_LOW; \
+ for (i_nack=0;i_nack<TWOMICNR_I2C_DELAY;i_nack++); \
+ }
+
+unsigned short length_twomicBR_para;
+
+/*****************************************************************************
+ * Local Definitions
+ ****************************************************************************/
+
+static kal_bool TWOMICNR_I2C_wait_readComplete(void)
+{
+ kal_uint32 i=0;
+ SET_TWOMICNR_I2C_DATA_INPUT;
+ while(1)
+ {
+ i++;
+ if(GET_TWOMICNR_I2C_DATA_BIT == 0)
+ break;
+ if(i > TWOMICNR_I2C_MAX_RETRY_COUNT)
+ return KAL_FALSE;
+ }
+
+ return KAL_TRUE;
+}
+
+
+/*****************************************************************************
+ Function: Two_Mic_NR_send_byte
+ Parameters:
+ send_byte: the 8-bits data which will be sent out by I2C mode
+ Returns:
+ Side Effects: -
+
+ Description: To send one-byte parameter into FM chip
+*****************************************************************************/
+static void Two_Mic_NR_send_byte(kal_uint8 send_byte)
+{
+ kal_uint8 i_send_byte;
+ kal_uint8 j_send_byte;
+
+ for (i_send_byte = 8; i_send_byte > 0; i_send_byte--) { /* data bit 7~0 */
+ if (send_byte & (1 << (i_send_byte-1))) {
+ SET_TWOMICNR_I2C_DATA_HIGH;
+ }else {
+ SET_TWOMICNR_I2C_DATA_LOW;
+ }
+
+ for (j_send_byte = 0; j_send_byte < TWOMICNR_I2C_DELAY; j_send_byte++);
+ SET_TWOMICNR_I2C_CLK_HIGH;
+ for (j_send_byte = 0; j_send_byte < TWOMICNR_I2C_DELAY; j_send_byte++);
+ SET_TWOMICNR_I2C_CLK_LOW;
+ for (j_send_byte = 0; j_send_byte < TWOMICNR_I2C_DELAY; j_send_byte++);
+ }
+ /* don't care bit, 9th bit */
+ SET_TWOMICNR_I2C_DATA_LOW;
+ SET_TWOMICNR_I2C_DATA_INPUT;
+ SET_TWOMICNR_I2C_CLK_HIGH;
+ for (j_send_byte = 0; j_send_byte < TWOMICNR_I2C_DELAY; j_send_byte++);
+/* ret = TWOMICNR_I2C_wait_readComplete(); */
+ SET_TWOMICNR_I2C_CLK_LOW;
+ SET_TWOMICNR_I2C_DATA_OUTPUT;
+
+ return;
+}
+
+/*****************************************************************************
+ Function: Two_Mic_NR_get_byte
+ Parameters:
+
+ Returns: the 8-bits data which comes from FM chip by I2C mode
+ Side Effects: -
+
+ Description: To fetch the one-byte parameter from FM chip
+*****************************************************************************/
+static kal_uint8 Two_Mic_NR_get_byte(void)
+{
+ signed char i;
+ kal_uint8 j;
+ kal_uint8 get_byte = 0;
+
+ SET_TWOMICNR_I2C_DATA_INPUT;
+
+ for (i = 7; i >= 0; i--) { /* data bit 7~0 */
+ SET_TWOMICNR_I2C_CLK_HIGH;
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ if (GET_TWOMICNR_I2C_DATA_BIT)
+ get_byte |= (1 << i);
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ SET_TWOMICNR_I2C_CLK_LOW;
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ }
+ /* don't care bit, 9th bit */
+ SET_TWOMICNR_I2C_DATA_HIGH;
+ SET_TWOMICNR_I2C_DATA_OUTPUT;
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ SET_TWOMICNR_I2C_CLK_HIGH;
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ SET_TWOMICNR_I2C_CLK_LOW;
+
+ return get_byte;
+}
+
+
+
+/*****************************************************************************
+ Function: Two_Mic_NR_Readback_para
+ Parameters:
+ length_send: the total number of bytes which will be sent out by I2C mode
+ parameter_array: pointer to the parameter array which will be sent out by I2C mode
+ length_receive: the total number of bytes which will be received by I2C mode
+ receive_parameter_array: pointer to the parameter array which will keep the parameters received by I2C mode
+ Returns:
+ Side Effects: -
+
+ Description: To fetch the parameters from FM chip
+*****************************************************************************/
+void Two_Mic_NR_Readback_para(kal_uint32 length_send, unsigned char* send_parameter_array, kal_uint32 length_receive, unsigned char* receive_parameter_array)
+{
+ kal_uint8 i,j;
+
+ TWOMICNR_I2C_START_TRANSMISSION;
+ for (i = 0; i < length_send; i++);
+ {
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ Two_Mic_NR_send_byte(send_parameter_array[i]);
+ }
+/* for (j = 0; j < TWOMICNR_I2C_DELAY; j++); */
+
+ for (i = 0; i < length_receive; i++);
+ {
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ receive_parameter_array[i] = Two_Mic_NR_get_byte();
+ }
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+
+ TWOMICNR_I2C_STOP_TRANSMISSION;
+
+
+ return;
+}
+
+
+/*****************************************************************************
+ Function: Two_Mic_NR_Download
+ Parameters:
+ mode: 0 -> handset mode; 1 -> handfree mode; 2 -> bypass mode; 3 -> Init mode
+ Returns:
+ Side Effects: -
+
+ Description: To download corresponding parameters into FM chip
+*****************************************************************************/
+void Two_Mic_NR_Download(unsigned short mode)
+{
+ kal_uint8 j;
+ unsigned short i_NR_Download_para;
+
+ switch (mode){
+
+ case 0:
+ TWOMICNR_I2C_START_TRANSMISSION;
+ for (i_NR_Download_para = 0; i_NR_Download_para < TWOMICNR_HANDSET_PARA_LENGTH; i_NR_Download_para++)
+ {
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ Two_Mic_NR_send_byte((kal_uint8)(parameter_data_handset_mode[i_NR_Download_para]));
+ }
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ TWOMICNR_I2C_STOP_TRANSMISSION;
+ break;
+ case 1:
+ TWOMICNR_I2C_START_TRANSMISSION;
+ for (i_NR_Download_para = 0; i_NR_Download_para < TWOMICNR_HANDFREE_PARA_LENGTH; i_NR_Download_para++)
+ {
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ Two_Mic_NR_send_byte((kal_uint8)(parameter_data_handfree_mode[i_NR_Download_para]));
+ }
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ TWOMICNR_I2C_STOP_TRANSMISSION;
+ break;
+ case 2:
+ TWOMICNR_I2C_START_TRANSMISSION;
+ for (i_NR_Download_para = 0; i_NR_Download_para < TWOMICNR_BYPASS_PARA_LENGTH; i_NR_Download_para++)
+ {
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ Two_Mic_NR_send_byte((kal_uint8)(parameter_data_bypass_mode[i_NR_Download_para]));
+ }
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ TWOMICNR_I2C_STOP_TRANSMISSION;
+ break;
+ case 3:
+ TWOMICNR_I2C_START_TRANSMISSION;
+ for (i_NR_Download_para = 0; i_NR_Download_para < TWOMICNR_INIT_PARA_LENGTH; i_NR_Download_para++)
+ {
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ Two_Mic_NR_send_byte((kal_uint8)(parameter_data_Init[i_NR_Download_para]));
+ }
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ TWOMICNR_I2C_STOP_TRANSMISSION;
+ break;
+ default:
+ break;
+ }
+
+ return;
+}
+
+
+/*****************************************************************************
+ Function: Two_Mic_NR_chip_Sleep
+ Parameters:
+
+ Returns:
+ Side Effects: -
+
+ Description: To sleep the FM chip.
+ 1. Set PWD low
+ 2. Wait 15ms
+ 3. Turn off the main clock
+****************************************************************************/
+void Two_Mic_NR_chip_Sleep(void)
+{
+ /*Set PWD low */
+ GPIO_WriteIO(0,TWOMICNR_FM_PWDN_GPIO_PIN);
+
+ /*Wait 15ms */
+ kal_sleep_task(4);
+
+ /*Turn off the main clock */
+ GPIO_ModeSetup(TWOMICNR_FM_13MHZ_GPIO_PIN, 0); /* GPIO mode */
+ GPIO_InitIO(OUTPUT,TWOMICNR_FM_13MHZ_GPIO_PIN);
+ GPIO_WriteIO(0,TWOMICNR_FM_13MHZ_GPIO_PIN); /* low voltage */
+
+ return;
+}
+
+
+/*****************************************************************************
+ Function: Two_Mic_NR_chip_Init
+ Parameters:
+
+ Returns:
+ Side Effects: -
+
+ Description: To initialize the FM chip after power on of the handset
+ 1. RST/PWD/BYPASS power on default at low
+ 2. Open main clock
+ 3. Set PWD high
+ 4. Wait 5ms
+ 5. Set RST high
+ 6. Wait 15ms
+*****************************************************************************/
+void Two_Mic_NR_chip_Init(void)
+{
+ /*RST/PWD/BYPASS power on default at low */
+ GPIO_ModeSetup(TWOMICNR_FM_RST_GPIO_PIN, 0); /* GPIO mode */
+ GPIO_InitIO(OUTPUT,TWOMICNR_FM_RST_GPIO_PIN);
+ GPIO_WriteIO(0,TWOMICNR_FM_RST_GPIO_PIN);
+ GPIO_ModeSetup(TWOMICNR_FM_PWDN_GPIO_PIN, 0); /* GPIO mode */
+ GPIO_InitIO(OUTPUT,TWOMICNR_FM_PWDN_GPIO_PIN);
+ GPIO_WriteIO(0,TWOMICNR_FM_PWDN_GPIO_PIN);
+ GPIO_ModeSetup(TWOMICNR_FM_BYPASS_GPIO_PIN, 0); /* GPIO mode */
+ GPIO_InitIO(OUTPUT,TWOMICNR_FM_BYPASS_GPIO_PIN);
+ GPIO_WriteIO(0,TWOMICNR_FM_BYPASS_GPIO_PIN);
+
+ /*Open main clock */
+ (*(volatile kal_uint16 *)(0x84023200)) = 0x3; /* 13MHz */
+ GPIO_ModeSetup(TWOMICNR_FM_13MHZ_GPIO_PIN, 2); /* CLKM2 mode */
+
+ /*Set PWD high */
+ GPIO_WriteIO(1,TWOMICNR_FM_PWDN_GPIO_PIN);
+
+ /*Wait 5ms */
+ /*1 ticks = 4.615ms */
+ kal_sleep_task(2);
+
+ /*Set RST high */
+ GPIO_WriteIO(1,TWOMICNR_FM_RST_GPIO_PIN);
+
+ /*Wait 15ms */
+ kal_sleep_task(4);
+
+ /*Download Init_para */
+ Two_Mic_NR_Download(3);
+
+ /*Enter power-down state */
+ Two_Mic_NR_chip_Sleep();
+
+ return;
+}
+
+/*****************************************************************************
+ Function: FM_chip_Reset
+ Parameters:
+
+ Returns:
+ Side Effects: -
+
+ Description: To reset the FM chip
+ 1. Mute UL path
+ 2. If clock is not running, turn on the main clock first
+ 3. Set BYPASS low
+ 4. Set PWD high
+ 5. Set RST low
+ 6. Wait 1ms.
+ 7. Set RST high
+ 8. Wait 15 ms.
+ 9. Un-mute UL path
+*****************************************************************************/
+void FM_chip_Reset(void)
+{
+ /*Mute UL path */
+
+ /*If clock is not running, turn on the main clock first */
+ (*(volatile unsigned short *)(0x84023200)) = 0x3; /* 13MHz */
+ GPIO_ModeSetup(TWOMICNR_FM_13MHZ_GPIO_PIN, 2); /* CLKM2 mode */
+
+ /*Set BYPASS low */
+ GPIO_WriteIO(0,TWOMICNR_FM_BYPASS_GPIO_PIN);
+
+ /*Set PWD high */
+ GPIO_WriteIO(1,TWOMICNR_FM_PWDN_GPIO_PIN);
+
+ /* Set RST low */
+ GPIO_WriteIO(0,TWOMICNR_FM_RST_GPIO_PIN);
+
+ /* Wait 1ms */
+ kal_sleep_task(2);
+
+ /* Set RST high */
+ GPIO_WriteIO(1,TWOMICNR_FM_RST_GPIO_PIN);
+
+ /* Wait 15ms */
+ kal_sleep_task(4);
+
+ /* Un-mute UL path */
+
+ return;
+}
+
+
+
+/*****************************************************************************
+ Function: Two_Mic_NR_chip_Bypass_mode
+ Parameters:
+
+ Returns:
+ Side Effects: -
+
+ Description: Make the FM chip to enter bypass mode
+*****************************************************************************/
+void Two_Mic_NR_chip_Bypass_mode(void)
+{
+ FM_chip_Reset();
+
+ /* Download bypass parameter */
+ Two_Mic_NR_Download(2);
+
+ /* Wait 100 ms */
+ kal_sleep_task(25);
+
+ /*Set BYPASS high */
+ GPIO_WriteIO(1,TWOMICNR_FM_BYPASS_GPIO_PIN);
+
+ return;
+}
+
+/*****************************************************************************
+ Function: Two_Mic_NR_chip_exit_Bypass_mode
+ Parameters:
+
+ Returns:
+ Side Effects: -
+
+ Description: Make the FM chip to exit bypass mode, into power down mode
+*****************************************************************************/
+void Two_Mic_NR_chip_exit_Bypass_mode(void)
+{
+ /*Set BYPASS low */
+ GPIO_WriteIO(0,TWOMICNR_FM_BYPASS_GPIO_PIN);
+ Two_Mic_NR_chip_Sleep();
+
+ return;
+}
+
+
+/*****************************************************************************
+ Function: Two_Mic_NR_chip_Handset_mode
+ Parameters:
+
+ Returns:
+ Side Effects: -
+
+ Description: Make the FM chip to enter handset mode
+*****************************************************************************/
+void Two_Mic_NR_chip_Handset_mode(void)
+{
+ FM_chip_Reset();
+
+ /* Download handset parameter */
+ Two_Mic_NR_Download(0);
+
+ return;
+}
+
+
+/*****************************************************************************
+ Function: Two_Mic_NR_chip_Handfree_mode
+ Parameters:
+
+ Returns:
+ Side Effects: -
+
+ Description: Make the FM chip to enter handfree mode
+*****************************************************************************/
+void Two_Mic_NR_chip_Handfree_mode(void)
+{
+ FM_chip_Reset();
+
+ /*Download handfree parameter */
+ Two_Mic_NR_Download(1);
+
+ return;
+}
+
+
+
+
+/****************************************************************************************************************************
+ Function: Two_Mic_NR_GPIO_con
+ Parameters:
+ GPIO_pin_name: the GPIO pin to be manipulated. 0 -> reset 1 -> PWDN 2 -> bypass
+ GPIO_pin_voltage : the voltage level which needs to be reached. 0 -> low 1 -> high
+ Returns:
+ Side Effects: -
+
+ Description: To manipulate the GPIO pin according to the command, which comes from PC tools through UART port
+****************************************************************************************************************************/
+void Two_Mic_NR_GPIO_con(unsigned short GPIO_pin_name,unsigned short GPIO_pin_voltage)
+{
+ switch (GPIO_pin_name){
+ case 0:
+ GPIO_ModeSetup(TWOMICNR_FM_RST_GPIO_PIN, 0); /* GPIO mode */
+ GPIO_InitIO(OUTPUT,TWOMICNR_FM_RST_GPIO_PIN);
+ if (GPIO_pin_voltage == 0)
+ {
+ GPIO_WriteIO(0,TWOMICNR_FM_RST_GPIO_PIN);
+ }
+ else
+ {
+ GPIO_WriteIO(1,TWOMICNR_FM_RST_GPIO_PIN);
+ }
+ break;
+ case 1:
+ GPIO_ModeSetup(TWOMICNR_FM_PWDN_GPIO_PIN, 0); /* GPIO mode */
+ GPIO_InitIO(OUTPUT,TWOMICNR_FM_PWDN_GPIO_PIN);
+ if (GPIO_pin_voltage == 0)
+ {
+ GPIO_WriteIO(0,TWOMICNR_FM_PWDN_GPIO_PIN);
+ }
+ else
+ {
+ GPIO_WriteIO(1,TWOMICNR_FM_PWDN_GPIO_PIN);
+ }
+ break;
+ case 2:
+ GPIO_ModeSetup(TWOMICNR_FM_BYPASS_GPIO_PIN, 0); /* GPIO mode */
+ GPIO_InitIO(OUTPUT,TWOMICNR_FM_BYPASS_GPIO_PIN);
+ if (GPIO_pin_voltage == 0)
+ {
+ GPIO_WriteIO(0,TWOMICNR_FM_BYPASS_GPIO_PIN);
+ }
+ else
+ {
+ GPIO_WriteIO(1,TWOMICNR_FM_BYPASS_GPIO_PIN);
+ }
+ break;
+ default:
+ break;
+ }
+
+
+ return;
+}
+
+
+/****************************************************************************************************************************
+ Function: Two_mic_NR_I2C_download_data
+ Parameters:
+ Command_data_to_be_sent: this array contains the command data to be downloaded into the FM2018x chip
+ One_command_data_length : the length of this array
+ Returns:
+ Side Effects: -
+
+ Description: To download the corresponding parameters into FM chip, which comes from PC tools through UART port
+****************************************************************************************************************************/
+void Two_mic_NR_I2C_download_data(unsigned char* Command_data_to_be_sent,kal_uint16 One_command_data_length)
+{
+ kal_uint8 j;
+ kal_uint16 counter;
+
+ TWOMICNR_I2C_START_TRANSMISSION;
+ for (counter = 0; counter < One_command_data_length; counter++)
+ {
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ Two_Mic_NR_send_byte((kal_uint8)(Command_data_to_be_sent[counter]));
+ }
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ TWOMICNR_I2C_STOP_TRANSMISSION;
+
+
+ return;
+}
+
+
+/****************************************************************************************************************************
+ Function: Two_mic_NR_I2C_readback_data
+ Parameters:
+ readback_command_to_be_sent: the chip ID of the FM2018x for reading back operation, '0xC1' now
+ readback_data_length : the length of this array
+ Returns:
+ Side Effects: -
+
+ Description: To download the corresponding parameters into FM chip, which comes from PC tools through UART port
+****************************************************************************************************************************/
+unsigned char Two_mic_NR_I2C_readback_data(unsigned char readback_command_to_be_sent)
+{
+ kal_uint8 j;
+ kal_uint8 return_value;
+
+
+ TWOMICNR_I2C_START_TRANSMISSION;
+
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ Two_Mic_NR_send_byte((kal_uint8)readback_command_to_be_sent);
+
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ return_value = Two_Mic_NR_get_byte();
+
+ for (j = 0; j < TWOMICNR_I2C_DELAY; j++);
+ TWOMICNR_I2C_STOP_TRANSMISSION;
+
+
+ return (unsigned char)return_value;
+}
+
+
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/two_mic_NR_custom_if.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/two_mic_NR_custom_if.h
new file mode 100644
index 0000000..f71a2d1
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/two_mic_NR_custom_if.h
@@ -0,0 +1,109 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * two_mic_NR_custom_if.h
+ *
+ * DateTime:
+ * ---------
+ * 9/27/2009 3:10PM
+ *
+ * Project:
+ * --------
+ * 2-mic NR
+ *
+ * Description:
+ * ------------
+ * This file contains the function for the state transition of the FM chip.
+ *
+ * Author:
+ *
+ *
+ **************************************************************************
+ **************************************************************************/
+
+#ifndef TWO_MIC_NR_CUSTOM_IF_H
+#define TWO_MIC_NR_CUSTOM_IF_H
+
+#include "kal_public_api.h" //MSBB change #include "kal_release.h" /* Basic data type */
+
+#ifdef __CUST_NEW__
+
+extern const char gpio_2micNR_scl_pin;
+extern const char gpio_2micNR_sda_pin;
+extern const char gpio_2micNR_bypass_pin;
+extern const char gpio_2micNR_13mhz_pin;
+extern const char gpio_2micNR_rst_pin;
+extern const char gpio_2micNR_pwdn_pin;
+
+#define TWOMICNR_I2C_SCL_GPIO_PIN gpio_2micNR_scl_pin
+#define TWOMICNR_I2C_SDA_GPIO_PIN gpio_2micNR_sda_pin
+#define TWOMICNR_FM_13MHZ_GPIO_PIN gpio_2micNR_13mhz_pin
+#define TWOMICNR_FM_RST_GPIO_PIN gpio_2micNR_rst_pin
+#define TWOMICNR_FM_PWDN_GPIO_PIN gpio_2micNR_pwdn_pin
+#define TWOMICNR_FM_BYPASS_GPIO_PIN gpio_2micNR_bypass_pin
+
+
+#else //__CUST_NEW__
+
+enum
+{
+ TWOMICNR_I2C_SCL_GPIO_PIN = 36,
+ TWOMICNR_I2C_SDA_GPIO_PIN = 37,
+ TWOMICNR_FM_13MHZ_GPIO_PIN = 43,
+ TWOMICNR_FM_RST_GPIO_PIN = 52,
+ TWOMICNR_FM_PWDN_GPIO_PIN = 53,
+ TWOMICNR_FM_BYPASS_GPIO_PIN = 54
+};
+
+#endif //__CUST_NEW__
+
+
+/***************************************************************************
+ * Function Prototypes
+ **************************************************************************/
+extern void Two_Mic_NR_chip_Handfree_mode(void);
+extern void Two_Mic_NR_chip_Init(void);
+extern void Two_Mic_NR_chip_Handset_mode(void);
+extern void Two_Mic_NR_chip_Bypass_mode(void);
+extern void Two_Mic_NR_chip_exit_Bypass_mode(void);
+extern void Two_Mic_NR_chip_Sleep(void);
+
+extern unsigned char Two_mic_NR_I2C_readback_data(unsigned char readback_command_to_be_sent);
+extern void Two_mic_NR_I2C_download_data(unsigned char* Command_data_to_be_sent,kal_uint16 One_command_data_length);
+extern void Two_Mic_NR_GPIO_con(unsigned short GPIO_pin_name,unsigned short GPIO_pin_voltage);
+#endif
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/uart_def.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/uart_def.c
new file mode 100644
index 0000000..eb960b6
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/uart_def.c
@@ -0,0 +1,482 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * uart_def.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This Module defines the size of UART ring buffer
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "drv_comm.h"
+#include "uart_sw.h"
+
+/*
+1. remove get_mem by using allocate static array
+2. use different buffer size for __PRODUCTION_RELEASE__
+3. the buffer size is depending on the owner instead uart port
+*/
+
+UART_flowCtrlMode *UART_Get_FlowCtrl_Mode(void);
+const UART_rings_struct *UART_Get_Data(void);
+
+
+// define the uart ring buffer size
+#define L4_RX_LENGTH 2048
+#define L4_TX_LENGTH 3584
+#define L4_TXISR_LENGTH 3072
+#define TST_RX_LENGTH 2048
+#define TST_TX_LENGTH 3584
+#define TST_TXISR_LENGTH 3072
+#define CUSTOM_RX_LENGTH 2048
+#define CUSTOM_TX_LENGTH 3584
+#define CUSTOM_TXISR_LENGTH 3072
+
+
+
+//#pragma for D-cacheable, UART have VFIFO therefore use non-cacheable.
+#ifdef __MTK_TARGET__
+//#pragma arm section zidata = "NONCACHEDZI", rwdata = "NONCACHEDRW"
+//#pragma arm section zidata = "INTSRAM_ZI", rwdata = "INTSRAM_RW"
+//liming add :for 6255 bring up(MCU mode)
+// L4 ring buffer
+//__attribute__ ((zero_init, section ("NONCACHEDZI")))
+__attribute__((aligned(8)))
+ kal_uint8 L4_RxRingBuffer[L4_RX_LENGTH];
+//__attribute__ ((zero_init, section ("NONCACHEDZI")))
+__attribute__((aligned(8)))
+ kal_uint8 L4_TxRingBuffer[L4_TX_LENGTH];
+//__attribute__ ((zero_init, section ("NONCACHEDZI")))
+__attribute__((aligned(8)))
+ kal_uint8 L4_TxISRRingBuffer[L4_TXISR_LENGTH];
+
+#if !defined(DRV_MD_1_UART)// for MD only have one uart port,like MT6280
+// tst ring buffer
+__attribute__ ((zero_init, section ("NONCACHEDZI")))
+__attribute__((aligned(8)))
+ kal_uint8 TST_RxRingBuffer[TST_RX_LENGTH];
+__attribute__ ((zero_init, section ("NONCACHEDZI")))
+__attribute__((aligned(8)))
+ kal_uint8 TST_TxRingBuffer[TST_TX_LENGTH];
+__attribute__ ((zero_init, section ("NONCACHEDZI")))
+__attribute__((aligned(8)))
+ kal_uint8 TST_TxISRRingBuffer[TST_TXISR_LENGTH];
+#endif
+
+#ifdef __UART3_SUPPORT__
+// uart3 ring buffer
+__attribute__ ((zero_init, section ("NONCACHEDZI")))
+__attribute__((aligned(8)))
+ kal_uint8 CUSTOM_RxRingBuffer[CUSTOM_RX_LENGTH];
+__attribute__ ((zero_init, section ("NONCACHEDZI")))
+__attribute__((aligned(8)))
+ kal_uint8 CUSTOM_TxRingBuffer[CUSTOM_TX_LENGTH];
+__attribute__ ((zero_init, section ("NONCACHEDZI")))
+__attribute__((aligned(8)))
+ kal_uint8 CUSTOM_TxISRRingBuffer[CUSTOM_TXISR_LENGTH];
+#endif //__UART3_SUPPORT__
+
+
+#else//#ifdef __MTK_TARGET__
+
+kal_uint8 L4_RxRingBuffer[L4_RX_LENGTH];
+kal_uint8 L4_TxRingBuffer[L4_TX_LENGTH];
+kal_uint8 L4_TxISRRingBuffer[L4_TXISR_LENGTH];
+
+kal_uint8 TST_RxRingBuffer[TST_RX_LENGTH];
+kal_uint8 TST_TxRingBuffer[TST_TX_LENGTH];
+kal_uint8 TST_TxISRRingBuffer[TST_TXISR_LENGTH];
+
+#ifdef __UART3_SUPPORT__
+// uart3 ring buffer
+kal_uint8 CUSTOM_RxRingBuffer[CUSTOM_RX_LENGTH];
+kal_uint8 CUSTOM_TxRingBuffer[CUSTOM_TX_LENGTH];
+kal_uint8 CUSTOM_TxISRRingBuffer[CUSTOM_TXISR_LENGTH];
+#endif //__UART3_SUPPORT__
+
+#endif //#ifdef __MTK_TARGET__
+
+
+const UART_rings_struct UART_custom_rings =
+{
+ {
+ {
+ L4_RxRingBuffer,
+ L4_TxRingBuffer,
+ L4_TxISRRingBuffer,
+ sizeof L4_RxRingBuffer,
+ sizeof L4_TxRingBuffer,
+ sizeof L4_TxISRRingBuffer,
+ MOD_L4C,
+ },
+ #if !defined(DRV_MD_1_UART)// for MD only have one uart port,like MT6280
+ {
+ TST_RxRingBuffer,
+ TST_TxRingBuffer,
+ TST_TxISRRingBuffer,
+ sizeof TST_RxRingBuffer,
+ sizeof TST_TxRingBuffer,
+ sizeof TST_TxISRRingBuffer,
+ MOD_TST_READER,
+ },
+ #endif
+ #ifdef __UART3_SUPPORT__
+ {
+ CUSTOM_RxRingBuffer,
+ CUSTOM_TxRingBuffer,
+ CUSTOM_TxISRRingBuffer,
+ sizeof CUSTOM_RxRingBuffer,
+ sizeof CUSTOM_TxRingBuffer,
+ sizeof CUSTOM_TxISRRingBuffer,
+ MOD_UART3_HISR,
+ },
+ #endif // __UART3_SUPPORT__
+ },
+ #ifdef __UART3_SUPPORT__
+ uart_port2/*which one not support VFIFO*/
+ #else
+ uart_port_null/*which one not support VFIFO*/
+ #endif
+};
+const UART_rings_struct *UART_Get_Data(void)
+{
+ return (&UART_custom_rings);
+}
+
+const UART_customize_function_struct uart_custom_func =
+{
+ UART_Get_Data
+};
+
+const UART_customize_function_struct *UART_GetFunc(void)
+{
+ return (&uart_custom_func);
+}
+
+UART_flowCtrlMode UART_GetFlowCtrl(UART_PORT uart_port)
+{
+ UART_flowCtrlMode flow_ctrl;
+
+ switch(uart_port)
+ {
+ case uart_port1:
+//#if defined(__EXT_MODEM__) || defined(EMPTY_MMI) //for g+c or modem
+// flow_ctrl = fc_hw;
+//#else
+ flow_ctrl = fc_none;
+//#endif
+ break;
+ case uart_port2:
+ flow_ctrl=fc_none;
+ break;
+#ifdef __UART3_SUPPORT__
+ case uart_port3:
+ flow_ctrl=fc_none;
+ break;
+#endif
+#ifdef __IRDA_SUPPORT__
+ case uart_port_irda:
+ flow_ctrl=fc_none;
+ break;
+#endif
+#ifdef __USB_ENABLE__
+ case uart_port_usb:
+ flow_ctrl=fc_none;
+ break;
+#endif
+#ifdef __BT_SUPPORT__
+ case uart_port_bluetooth:
+ flow_ctrl=fc_none;
+ break;
+#endif
+ default:
+ flow_ctrl=fc_none;
+ break;
+
+ }
+ return(flow_ctrl);
+}
+
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/uem_gpio.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/uem_gpio.c
new file mode 100644
index 0000000..77c6e02
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/uem_gpio.c
@@ -0,0 +1,267 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * uem_gpio.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * The file contains definition of custom component module configuration
+ * variables, and routines handle for equipment device.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifdef __CUST_NEW__
+#ifndef __L1_STANDALONE__
+
+/*
+** Includes
+*/
+
+#include "device.h"
+#include "custom_equipment.h"
+#include "custom_em.h"
+//MSBB remove #include "kal_non_specific_general_types.h"
+#include "custom_hw_default.h"
+#include "dcl.h"
+
+#ifdef LQT_SUPPORT /* Please don't remove LQT code segments */
+#include "lcd_lqt.h"
+extern kal_uint8 lcd_at_mode;
+#endif /* LQT_SUPPORT */
+
+/*
+** Typedefs
+*/
+
+/*
+** Defines
+*/
+
+/*
+** Extern Functions
+*/
+extern void GPIO_WriteIO(char data, char port);
+extern void GPIO_WriteIO_FAST(char data, char port);
+extern void PWM_level(kal_uint8 level);
+extern void PWM2_level(kal_uint8 level);
+extern void PWM3_level(kal_uint8 level);
+//extern void Alter_level(kal_uint8 level);
+#if (defined(TOUCH_PAD_SUPPORT) && defined(__MTK_TARGET__))
+extern void Touchpad_PowerOn(const kal_bool bOn);
+#endif
+
+/*
+** Extern Varibales
+*/
+extern const char gpio_led_mainbl_en_pin;
+//extern const char gpio_led_keybl_en_pin;
+//extern const char gpio_led_keybl2_en_pin;
+//extern const char gpio_vibrator_en_pin;
+
+/*
+** Globol Varibales
+*/
+
+/*
+** Local Functions
+*/
+
+/*
+** Local Variables
+*/
+/***********************************************************
+ **
+ ** GPIO SETTTING
+ **
+ ***********************************************************/
+
+#if !defined(__FUE__) /* !!CUATION!! for FOTA support */
+/*
+* Function
+* custom_cfg_outward_gpio_port
+* DESCRIPTION
+* The function is used to handle the port number of the outward gpio device.
+* And it will be call by audio manager.
+* PARAMETERS
+* gpio_device_id IN
+* port_num IN/OUT
+* RETURNS
+* kal_bool
+* GLOBALS AFFECTED
+*/
+kal_uint8 custom_cfg_outward_gpio_port(kal_uint8 gpio_device_id /* gpio_device_enum */)
+{
+ if((gpio_device_id < GPIO_LABELID_MAX) && (gpio_map_tbl[gpio_device_id].vaild != GPIO_INVAILD))
+ return gpio_map_tbl[gpio_device_id].port;
+ else
+ return 0;
+}
+#endif
+
+kal_bool custom_cfg_gpio_set_level(kal_uint8 gpio_dev_type, kal_uint8 gpio_dev_level )
+{
+ switch(gpio_dev_type)
+ {
+ case GPIO_DEV_LED_MAINLCD:
+ break;
+
+ case GPIO_DEV_LED_STATUS_1:
+ {
+ DCL_HANDLE handle;
+ handle = DclGPIO_Open(DCL_GPIO,101);
+ //DclGPIO_Control(handle,GPIO_CMD_SET_MODE_0,0);
+ //DclGPIO_Control(handle,GPIO_CMD_SET_DIR_OUT,0);
+ if(gpio_dev_level == LED_LIGHT_LEVEL0)
+ DclGPIO_Control(handle, GPIO_CMD_WRITE_LOW, 0);
+ else
+ DclGPIO_Control(handle, GPIO_CMD_WRITE_HIGH, 0);
+ DclGPIO_Close(handle);
+ }
+ break;
+
+ case GPIO_DEV_LED_STATUS_2:
+ {
+ DCL_HANDLE handle;
+ handle = DclGPIO_Open(DCL_GPIO,102);
+ //DclGPIO_Control(handle,GPIO_CMD_SET_MODE_0,0);
+ //DclGPIO_Control(handle,GPIO_CMD_SET_DIR_OUT,0);
+ if(gpio_dev_level == LED_LIGHT_LEVEL0)
+ DclGPIO_Control(handle,GPIO_CMD_WRITE_LOW, 0);
+ else
+ DclGPIO_Control(handle,GPIO_CMD_WRITE_HIGH, 0);
+ DclGPIO_Close(handle);
+ }
+ break;
+
+ case GPIO_DEV_LED_STATUS_3:
+ {
+ DCL_HANDLE handle;
+ handle = DclGPIO_Open(DCL_GPIO,103);
+ //DclGPIO_Control(handle,GPIO_CMD_SET_MODE_0,0);
+ //DclGPIO_Control(handle,GPIO_CMD_SET_DIR_OUT,0);
+ if(gpio_dev_level == LED_LIGHT_LEVEL0)
+ DclGPIO_Control(handle,GPIO_CMD_WRITE_LOW, 0);
+ else
+ DclGPIO_Control(handle,GPIO_CMD_WRITE_HIGH, 0);
+ DclGPIO_Close(handle);
+ }
+ break;
+
+ case GPIO_DEV_LED_KEY:
+ break;
+
+ case GPIO_DEV_VIBRATOR:
+ {
+#ifdef __MTK_TARGET__
+ DCL_HANDLE handle;
+ PMU_CTRL_LDO_BUCK_SET_EN val;
+ handle = DclPMU_Open(DCL_PMU, FLAGS_NONE);
+ val.mod=VIBR;
+
+ if(gpio_dev_level == LED_LIGHT_LEVEL0)
+ {
+ val.enable = DCL_FALSE;
+ }
+ else
+ {
+ val.enable = DCL_TRUE;
+ }
+
+ DclPMU_Control(handle, LDO_BUCK_SET_EN, (DCL_CTRL_DATA_T *)&val);
+ DclPMU_Close(handle);
+#endif // End of #ifdef __MTK_TARGET__
+ break;
+ }
+
+ default:
+ /* error undefine */
+ return KAL_FALSE;
+ }
+
+ return KAL_TRUE;
+}
+
+void custom_start_flashlight(kal_uint8 red_level, kal_uint8 green_level, kal_uint8 blue_level, kal_uint8 duty)
+{
+ DCL_HANDLE pwm_handle;
+ PWM_CMD_CONFIG_OLD_T old_config;
+
+ custom_cfg_gpio_set_level(GPIO_DEV_LED_STATUS_1, ((red_level>0) ? LED_LIGHT_LEVEL5 : LED_LIGHT_LEVEL0));
+ custom_cfg_gpio_set_level(GPIO_DEV_LED_STATUS_2, ((green_level>0) ? LED_LIGHT_LEVEL5 : LED_LIGHT_LEVEL0));
+ custom_cfg_gpio_set_level(GPIO_DEV_LED_STATUS_3, ((blue_level>0) ? LED_LIGHT_LEVEL5 : LED_LIGHT_LEVEL0));
+
+ pwm_handle = DclPWM_Open(DCL_PWM2,MOD_UEM);
+ old_config.freq = PWM2_Level_Info[0][0];
+ old_config.duty = duty;
+ DclPWM_Control(pwm_handle, PWM_CMD_CONFIG_OLD, (DCL_CTRL_DATA_T*)&old_config);
+ DclPWM_Control(pwm_handle, PWM_CMD_START, 0);
+ DclPWM_Close(pwm_handle);
+}
+
+void custom_stop_flashlight(void)
+{
+ DCL_HANDLE pwm_handle;
+
+ custom_cfg_gpio_set_level(GPIO_DEV_LED_STATUS_1, LED_LIGHT_LEVEL0);
+ custom_cfg_gpio_set_level(GPIO_DEV_LED_STATUS_2, LED_LIGHT_LEVEL0);
+ custom_cfg_gpio_set_level(GPIO_DEV_LED_STATUS_3, LED_LIGHT_LEVEL0);
+
+ pwm_handle = DclPWM_Open(DCL_PWM2,MOD_UEM);
+ DclPWM_Control(pwm_handle, PWM_CMD_STOP, 0);
+ DclPWM_Close(pwm_handle);
+}
+
+#endif /* !__L1_STANDALONE__ */
+
+#endif /* __CUST_NEW__ */
\ No newline at end of file
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/uem_patterns_def.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/uem_patterns_def.h
new file mode 100644
index 0000000..5493741
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/uem_patterns_def.h
@@ -0,0 +1,85 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * uem_patterns_def.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * The file contains definition of custom component module configuration
+ * variables, and routines handle for equipment device.
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef UEM_PATTERNS_DEF_H
+#define UEM_PATTERNS_DEF_H
+
+#define TOUCH_FEEDBACK_VIB_DUR 50
+
+#endif /*UEM_PATTERNS_DEF_H*/
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/usb_custom.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/usb_custom.c
new file mode 100644
index 0000000..8be7e49
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/usb_custom.c
@@ -0,0 +1,1451 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * usb_custom.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file implements usb customer support
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "drv_comm.h"
+#include "eint.h"
+#include "usb_custom.h"
+//MSBB remove #include "kal_non_specific_general_types.h"
+#include "drv_features.h"
+#include "dcl.h"
+#include "usb_custom_def.h"
+#include "usb_memory_def.h"
+
+
+
+/************************************************************
+ external variables
+*************************************************************/
+#if defined(__USB_ENABLE__)&&defined(__USB_MASS_STORAGE_ENABLE__)
+ #include "usb_msdisk.h"
+ #include "fat_fs.h"
+
+ extern USB_DiskDriver_STRUCT USB_NOR_drv;
+ extern USB_DiskDriver_STRUCT USB_SIMPLUS_drv;
+ #ifdef NAND_SUPPORT
+ extern USB_DiskDriver_STRUCT USB_NAND_drv;
+ #endif /*NAND_SUPPORT*/
+ #ifdef __USB_MASS_STORAGE_CDROM_ENABLE__
+ extern USB_DiskDriver_STRUCT USB_CDROM_drv;
+ #endif /*__USB_MASS_STORAGE_CDROM_ENABLE__*/
+ #ifdef __MSDC_DUAL_CARD_SWITCH__
+ extern USB_DiskDriver_STRUCT USB_tCard_2_drv;
+ #endif /*__MSDC_DUAL_CARD_SWITCH__*/
+ #if defined(__SIM_PLUS__)
+ extern kal_bool g_usb_ms_simplus_exist;
+ #endif /*__SIM_PLUS__*/
+#endif /*#if defined(__USB_ENABLE__)&&defined(__USB_MASS_STORAGE_ENABLE__)*/
+
+
+
+
+#ifdef __CUST_NEW__
+#if (defined(__USB_ENABLE__) && defined(PMIC_6305_USB_FUNCTION))
+extern const char gpio_usb_enable_pin;
+#endif
+#if defined(__USB_ENABLE__) && defined(DRV_PHY_CHARGER_DETECT_BY_EXTERNAL_R)
+extern const char gpio_usb_chr_det_switch_pin;
+#endif
+#endif /* __CUST_NEW__ */
+
+
+
+#ifdef __USB_ENABLE__
+#if defined(__MTK_TARGET__)
+__attribute__((zero_init, section ("NONCACHEDZI"),aligned(16)))
+#endif
+kal_uint8 USB_BUFFER[USB_MAX_MEMORY_SIZE]; // USB total buffer
+#endif
+
+
+
+/************************************************************
+ device descriptor parameters
+*************************************************************/
+
+static const kal_uint16 USB_MANUFACTURER_STRING[] =
+{
+ 0x031a,
+ 'M',
+ 'e',
+ 'd',
+ 'i',
+ 'a',
+ 'T',
+ 'e',
+ 'k',
+ ' ',
+ 'I',
+ 'n',
+ 'c'
+};
+
+static const kal_uint16 USB_PRODUCT_STRING[] =
+{
+ 0x0310,
+ 'P',
+ 'r',
+ 'o',
+ 'd',
+ 'u',
+ 'c',
+ 't'
+};
+
+
+static const USB_DEVICE_PARAM usb_device_param =
+{
+ LEVEL_HIGH, /* cable plugin level */
+ 0x0e8d, /* vendor id */
+ USB_MANUFACTURER_STRING,
+ sizeof(USB_MANUFACTURER_STRING)/sizeof(kal_uint16),
+ USB_PRODUCT_STRING,
+ sizeof(USB_PRODUCT_STRING)/sizeof(kal_uint16)
+};
+
+ /************************************************************
+ mass storage parameters
+*************************************************************/
+
+ /*USB mass storage customize*/
+
+/* Inquire data explanation
+ The length byte(Byte 4) should be always not changed, the mass storage spec define it
+ Byte 8 to 15 is Vendor Information
+ Byte 16 to 31 is Product Identification
+ Byte 32 to 35 is Product Revision Level */
+#ifdef __MTK_TARGET__
+__attribute__ ((section ("NONCACHEDRW"), aligned(4)))
+#endif /* __MTK_TARGET__ */
+kal_uint8 INQUIRE_DATA[] =
+{
+ 0x00,
+ 0x80,
+ 0x00,
+ 0x01,
+ 0x1f, /*length*/
+ 0x00,
+ 0x00,
+ 0x00,
+ 'M',
+ 'E',
+ 'D',
+ 'I',
+ 'A',
+ 'T',
+ 'E',
+ 'K',
+ ' ',
+ 'F',
+ 'L',
+ 'A',
+ 'S',
+ 'H',
+ ' ',
+ 'D',
+ 'I',
+ 'S',
+ 'K',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ '6',
+ '2',
+ '2',
+ '5'
+};
+
+static const kal_uint16 USB_MS_INTERFACE_STRING[] =
+{
+ 0x031c,
+ 'M',
+ 'a',
+ 's',
+ 's',
+ ' ',
+ 'S',
+ 't',
+ 'o',
+ 'r',
+ 'a',
+ 'g',
+ 'e',
+ ' '
+};
+
+
+static const USB_MS_PARAM usb_ms_param =
+{
+ 0x0002, /* Mass storage Product ID */
+ INQUIRE_DATA,
+ sizeof(INQUIRE_DATA)/sizeof(kal_uint8),
+ USB_MS_INTERFACE_STRING,
+ sizeof(USB_MS_INTERFACE_STRING)/sizeof(kal_uint16)
+};
+
+/************************************************************
+ CDC ACM parameters
+*************************************************************/
+
+static const kal_uint16 USB_ACM_COMM_INTERFACE_STRING[] =
+{
+ 0x031A,
+ 'C',
+ 'O',
+ 'M',
+ '(',
+ 'c',
+ 'o',
+ 'm',
+ 'm',
+ '_',
+ 'i',
+ 'f',
+ ')'
+};
+
+static const kal_uint16 USB_ACM_DATA_INTERFACE_STRING[] =
+{
+ 0x031A,
+ 'C',
+ 'O',
+ 'M',
+ '(',
+ 'd',
+ 'a',
+ 't',
+ 'a',
+ '_',
+ 'i',
+ 'f',
+ ')'
+};
+
+#if defined(__USB_MULTIPLE_COMPORT_SUPPORT__)
+
+static const kal_uint16 USB_ACM_COMM_INTERFACE_STRING_2[] =
+{
+ 0x031A,
+ 'C',
+ 'O',
+ 'M',
+ '(',
+ 'c',
+ 'o',
+ 'm',
+ 'm',
+ '_',
+ 'i',
+ 'f',
+ ')'
+};
+
+
+static const kal_uint16 USB_ACM_DATA_INTERFACE_STRING_2[] =
+{
+ 0x031A,
+ 'C',
+ 'O',
+ 'M',
+ '(',
+ 'd',
+ 'a',
+ 't',
+ 'a',
+ '_',
+ 'i',
+ 'f',
+ ')'
+};
+
+#if defined (__USB_MODEM_CARD_SUPPORT__)
+static const kal_uint16 USB_ACM_COMM_INTERFACE_STRING_3[] =
+{
+ 0x031A,
+ 'C',
+ 'O',
+ 'M',
+ '(',
+ 'c',
+ 'o',
+ 'm',
+ 'm',
+ '_',
+ 'i',
+ 'f',
+ ')'
+};
+
+
+static const kal_uint16 USB_ACM_DATA_INTERFACE_STRING_3[] =
+{
+ 0x031A,
+ 'C',
+ 'O',
+ 'M',
+ '(',
+ 'd',
+ 'a',
+ 't',
+ 'a',
+ '_',
+ 'i',
+ 'f',
+ ')'
+};
+
+static const kal_uint16 USB_ACM_COMM_INTERFACE_STRING_4[] =
+{
+ 0x031A,
+ 'C',
+ 'O',
+ 'M',
+ '(',
+ 'c',
+ 'o',
+ 'm',
+ 'm',
+ '_',
+ 'i',
+ 'f',
+ ')'
+};
+
+
+static const kal_uint16 USB_ACM_DATA_INTERFACE_STRING_4[] =
+{
+ 0x031A,
+ 'C',
+ 'O',
+ 'M',
+ '(',
+ 'd',
+ 'a',
+ 't',
+ 'a',
+ '_',
+ 'i',
+ 'f',
+ ')'
+};
+
+static const kal_uint16 USB_ACM_COMM_INTERFACE_STRING_5[] =
+{
+ 0x031A,
+ 'C',
+ 'O',
+ 'M',
+ '(',
+ 'c',
+ 'o',
+ 'm',
+ 'm',
+ '_',
+ 'i',
+ 'f',
+ ')'
+};
+
+
+static const kal_uint16 USB_ACM_DATA_INTERFACE_STRING_5[] =
+{
+ 0x031A,
+ 'C',
+ 'O',
+ 'M',
+ '(',
+ 'd',
+ 'a',
+ 't',
+ 'a',
+ '_',
+ 'i',
+ 'f',
+ ')'
+};
+#endif
+
+#endif /* defined(__USB_MULTIPLE_COMPORT_SUPPORT__) */
+
+
+
+static const USB_ACM_PARAM usb_acm_param =
+{
+#if !defined (__USB_MODEM_CARD_SUPPORT__)
+ 0x0003, /* CDC ACM Product ID */
+#else
+ 0x00A0, /* CDC ACM Product ID */
+#endif
+ USB_ACM_COMM_INTERFACE_STRING,
+ sizeof(USB_ACM_COMM_INTERFACE_STRING)/sizeof(kal_uint16),
+ USB_ACM_DATA_INTERFACE_STRING,
+ sizeof(USB_ACM_DATA_INTERFACE_STRING)/sizeof(kal_uint16),
+#if defined(__USB_MULTIPLE_COMPORT_SUPPORT__)
+#if !defined (__USB_MODEM_CARD_SUPPORT__)
+ 0x0023, /* dual CDC ACM Product ID */
+#else
+ 0x00A1, /* dual CDC ACM Product ID */
+#endif
+ USB_ACM_COMM_INTERFACE_STRING_2,
+ sizeof(USB_ACM_COMM_INTERFACE_STRING_2)/sizeof(kal_uint16),
+ USB_ACM_DATA_INTERFACE_STRING_2,
+ sizeof(USB_ACM_DATA_INTERFACE_STRING_2)/sizeof(kal_uint16),
+#if defined (__USB_MODEM_CARD_SUPPORT__)
+ 0x00A2, /* dual CDC ACM Product ID */
+ USB_ACM_COMM_INTERFACE_STRING_3,
+ sizeof(USB_ACM_COMM_INTERFACE_STRING_3)/sizeof(kal_uint16),
+ USB_ACM_DATA_INTERFACE_STRING_3,
+ sizeof(USB_ACM_DATA_INTERFACE_STRING_3)/sizeof(kal_uint16),
+#endif
+#endif
+#if defined(__USB_TETHERING__)
+ 0x000A, // ISD Product ID
+ 0x0013, // ISD + COM Product ID
+#endif
+#if defined(__USB_DATA_CONNECTION__)
+ 0x0043, //Data Connection Single port
+ 0x0033, //Data Connection Dual port
+#endif
+#if defined(__USB_MODEM_CARD_SUPPORT__)
+ 0x00A4, //desc_5vcom_product;
+ 0x00A5, //desc_mbim_4vcom_product;
+#endif
+};
+
+
+
+#ifdef WEBCAM_SUPPORT
+
+/************************************************************
+ VIDEO parameters
+*************************************************************/
+
+static const kal_uint16 USB_VIDEO_VC_INTERFACE_STRING[] =
+{
+ 0x031A,
+ 'V',
+ 'I',
+ 'D',
+ 'E',
+ 'O',
+ '(',
+ 'V',
+ 'C',
+ '_',
+ 'i',
+ 'f',
+ ')'
+};
+
+static const kal_uint16 USB_VIDEO_CT_INTERFACE_STRING[] =
+{
+ 0x031A,
+ 'V',
+ 'I',
+ 'D',
+ 'E',
+ 'O',
+ '(',
+ 'C',
+ 'T',
+ '_',
+ 'i',
+ 'f',
+ ')'
+};
+
+static const kal_uint16 USB_VIDEO_OUTPUT_INTERFACE_STRING[] =
+{
+ 0x0322,
+ 'V',
+ 'I',
+ 'D',
+ 'E',
+ 'O',
+ '(',
+ 'o',
+ 'u',
+ 't',
+ 'p',
+ 'u',
+ 't',
+ '_',
+ 'i',
+ 'f',
+ ')'
+};
+
+static const kal_uint16 USB_VIDEO_PU_INTERFACE_STRING[] =
+{
+ 0x031A,
+ 'V',
+ 'I',
+ 'D',
+ 'E',
+ 'O',
+ '(',
+ 'P',
+ 'U',
+ '_',
+ 'i',
+ 'f',
+ ')'
+};
+
+static const kal_uint16 USB_VIDEO_VS_INTERFACE_STRING[] =
+{
+ 0x031A,
+ 'V',
+ 'I',
+ 'D',
+ 'E',
+ 'O',
+ '(',
+ 'V',
+ 'S',
+ '_',
+ 'i',
+ 'f',
+ ')'
+};
+
+static const USB_VIDEO_PARAM usb_video_param =
+{
+ 0x0004, /* video Product ID */
+#ifdef __COMPOSITE_WEBCAM__
+ 0x0014, // PID (for composite : Webcam+COM)
+#endif
+ USB_VIDEO_VC_INTERFACE_STRING,
+ sizeof(USB_VIDEO_VC_INTERFACE_STRING)/sizeof(kal_uint16),
+ USB_VIDEO_CT_INTERFACE_STRING,
+ sizeof(USB_VIDEO_CT_INTERFACE_STRING)/sizeof(kal_uint16),
+ USB_VIDEO_OUTPUT_INTERFACE_STRING,
+ sizeof(USB_VIDEO_OUTPUT_INTERFACE_STRING)/sizeof(kal_uint16),
+ USB_VIDEO_PU_INTERFACE_STRING,
+ sizeof(USB_VIDEO_PU_INTERFACE_STRING)/sizeof(kal_uint16),
+ USB_VIDEO_VS_INTERFACE_STRING,
+ sizeof(USB_VIDEO_VS_INTERFACE_STRING)/sizeof(kal_uint16)
+};
+#endif /* WEBCAM_SUPPORT */
+
+#ifdef PICTBRIDGE_SUPPORT
+/************************************************************
+ PTP IMAGE parameters
+*************************************************************/
+static const kal_uint16 USB_PTP_IMAGE_INTERFACE_STRING[] =
+{
+ 0x030C,
+ 'I',
+ 'M',
+ 'A',
+ 'G',
+ 'E'
+};
+
+
+/* Must have NULL termination */
+static const kal_uint16 USB_PTP_IMAGE_MANUFACTURER_STRING[] =
+{
+ 'M',
+ 'e',
+ 'd',
+ 'i',
+ 'a',
+ 'T',
+ 'e',
+ 'k',
+ ' ',
+ 'I',
+ 'n',
+ 'c',
+ '.',
+ '\0'
+};
+
+
+/* Must have NULL termination */
+static const kal_uint16 USB_PTP_IMAGE_MODEL_STRING[] =
+{
+ 'M',
+ 'T',
+ 'K',
+ ' ',
+ 'I',
+ 'M',
+ 'A',
+ 'G',
+ 'E',
+ ' ',
+ '\0'
+};
+
+
+/* Must have NULL termination */
+static const kal_uint16 USB_PTP_IMAGE_DEVICE_VERSION_STRING[] =
+{
+ '1',
+ '.',
+ '0',
+ '0',
+ '\0'
+};
+
+
+/* Must have NULL termination */
+static const kal_uint16 USB_PTP_IMAGE_SERIAL_NUMBER_STRING[] =
+{
+ '5',
+ '6',
+ '7',
+ '0',
+ '7',
+ '6',
+ '6',
+ '\0'
+};
+
+
+static const USB_IMAGE_PARAM usb_image_param =
+{
+ 0x0005, /* USB PTP image Product ID */
+ USB_PTP_IMAGE_INTERFACE_STRING,
+ sizeof(USB_PTP_IMAGE_INTERFACE_STRING)/sizeof(kal_uint16),
+ USB_PTP_IMAGE_MANUFACTURER_STRING,
+ sizeof(USB_PTP_IMAGE_MANUFACTURER_STRING)/sizeof(kal_uint16),
+ USB_PTP_IMAGE_MODEL_STRING,
+ sizeof(USB_PTP_IMAGE_MODEL_STRING)/sizeof(kal_uint16),
+ USB_PTP_IMAGE_DEVICE_VERSION_STRING,
+ sizeof(USB_PTP_IMAGE_DEVICE_VERSION_STRING)/sizeof(kal_uint16),
+ USB_PTP_IMAGE_SERIAL_NUMBER_STRING,
+ sizeof(USB_PTP_IMAGE_SERIAL_NUMBER_STRING)/sizeof(kal_uint16)
+};
+
+#endif /* PICTBRIDGE_SUPPORT */
+
+
+#ifdef __MTP_ENABLE__
+/************************************************************
+ MTP IMAGE parameters
+*************************************************************/
+static const kal_uint16 USB_MTP_IMAGE_INTERFACE_STRING[] =
+{
+ 0x0314,
+ 'I',
+ 'M',
+ 'A',
+ 'G',
+ 'E',
+ ' ',
+ 'M',
+ 'T',
+ 'P'
+};
+
+/* Must have NULL termination */
+static const kal_uint16 USB_MTP_IMAGE_MANUFACTURER_STRING[] =
+{
+ 'M',
+ 'e',
+ 'd',
+ 'i',
+ 'a',
+ 'T',
+ 'e',
+ 'k',
+ ' ',
+ 'I',
+ 'n',
+ 'c',
+ '.',
+ ' ',
+ 'M',
+ 'T',
+ 'P',
+ '\0'
+};
+
+/* Must have NULL termination */
+static const kal_uint16 USB_MTP_IMAGE_MODEL_STRING[] =
+{
+ 'M',
+ 'T',
+ 'K',
+ ' ',
+ 'I',
+ 'M',
+ 'A',
+ 'G',
+ 'E',
+ ' ',
+ 'M',
+ 'T',
+ 'P',
+ ' ',
+ '\0'
+};
+
+
+/* Must have NULL termination */
+static const kal_uint16 USB_MTP_IMAGE_DEVICE_VERSION_STRING[] =
+{
+ '2',
+ '.',
+ '0',
+ '0',
+ '\0'
+};
+
+
+/* USB flash disk, must have NULL termination */
+static const kal_uint16 USB_MTP_IMAGE_STORAGE_DESCRIPTION_STRING_1[] =
+{
+ 'P',
+ 'h',
+ 'o',
+ 'n',
+ 'e',
+ '\0'
+};
+
+
+/* USB card disk, must have NULL termination */
+static const kal_uint16 USB_MTP_IMAGE_STORAGE_DESCRIPTION_STRING_2[] =
+{
+ 'C',
+ 'a',
+ 'r',
+ 'd',
+ '\0'
+};
+
+
+/* Must have NULL termination */
+static const kal_uint16 USB_MTP_IMAGE_DEVICE_FRIENDLY_NAME_DEFAULT_VALUE_STRING[] =
+{
+ 'M',
+ 'T',
+ 'K',
+ ' ',
+ 'P',
+ 'h',
+ 'o',
+ 'n',
+ 'e',
+ '\0'
+};
+
+
+/* Must have NULL termination */
+static const kal_uint16 USB_MTP_IMAGE_DEVICE_FRIENDLY_NAME_CURRENT_VALUE_STRING[] =
+{
+ 'M',
+ 'T',
+ 'K',
+ ' ',
+ 'P',
+ 'h',
+ 'o',
+ 'n',
+ 'e',
+ '\0'
+};
+
+
+/* Must have NULL termination */
+static const kal_uint16 USB_MTP_SYNCHRONIZATION_PARTNER_DEFAULT_VALUE_STRING[] =
+{
+ 'W',
+ 'i',
+ 'n',
+ 'd',
+ 'o',
+ 'w',
+ 's',
+ ' ',
+ 'M',
+ 'e',
+ 'd',
+ 'i',
+ 'a',
+ ' ',
+ 'P',
+ 'l',
+ 'a',
+ 'y',
+ 'e',
+ 'r',
+ ' ',
+ '1',
+ '1',
+ '\0'
+};
+
+
+/* Must have NULL termination */
+static const kal_uint16 USB_MTP_SYNCHRONIZATION_PARTNER_CURRENT_VALUE_STRING[] =
+{
+ 'W',
+ 'i',
+ 'n',
+ 'd',
+ 'o',
+ 'w',
+ 's',
+ ' ',
+ 'M',
+ 'e',
+ 'd',
+ 'i',
+ 'a',
+ ' ',
+ 'P',
+ 'l',
+ 'a',
+ 'y',
+ 'e',
+ 'r',
+ ' ',
+ '1',
+ '1',
+ '\0'
+};
+
+
+static const USB_MTP_IMAGE_PARAM usb_mtp_image_param =
+{
+ 0x0050, /* USB MTP image Product ID */
+ USB_MTP_IMAGE_INTERFACE_STRING,
+ sizeof(USB_MTP_IMAGE_INTERFACE_STRING)/sizeof(kal_uint16),
+ USB_MTP_IMAGE_MANUFACTURER_STRING,
+ sizeof(USB_MTP_IMAGE_MANUFACTURER_STRING)/sizeof(kal_uint16),
+ USB_MTP_IMAGE_MODEL_STRING,
+ sizeof(USB_MTP_IMAGE_MODEL_STRING)/sizeof(kal_uint16),
+ USB_MTP_IMAGE_DEVICE_VERSION_STRING,
+ sizeof(USB_MTP_IMAGE_DEVICE_VERSION_STRING)/sizeof(kal_uint16),
+ USB_MTP_IMAGE_STORAGE_DESCRIPTION_STRING_1,
+ sizeof(USB_MTP_IMAGE_STORAGE_DESCRIPTION_STRING_1)/sizeof(kal_uint16),
+ USB_MTP_IMAGE_STORAGE_DESCRIPTION_STRING_2,
+ sizeof(USB_MTP_IMAGE_STORAGE_DESCRIPTION_STRING_2)/sizeof(kal_uint16),
+ USB_MTP_IMAGE_DEVICE_FRIENDLY_NAME_DEFAULT_VALUE_STRING,
+ sizeof(USB_MTP_IMAGE_DEVICE_FRIENDLY_NAME_DEFAULT_VALUE_STRING)/sizeof(kal_uint16),
+ USB_MTP_IMAGE_DEVICE_FRIENDLY_NAME_CURRENT_VALUE_STRING,
+ sizeof(USB_MTP_IMAGE_DEVICE_FRIENDLY_NAME_CURRENT_VALUE_STRING)/sizeof(kal_uint16),
+ USB_MTP_SYNCHRONIZATION_PARTNER_DEFAULT_VALUE_STRING,
+ sizeof(USB_MTP_SYNCHRONIZATION_PARTNER_DEFAULT_VALUE_STRING)/sizeof(kal_uint16),
+ USB_MTP_SYNCHRONIZATION_PARTNER_CURRENT_VALUE_STRING,
+ sizeof(USB_MTP_SYNCHRONIZATION_PARTNER_CURRENT_VALUE_STRING)/sizeof(kal_uint16)
+};
+
+#endif /* __MTP_ENABLE__ */
+
+
+
+#if defined(__OTG_ENABLE__)||defined(__IC_USB_ENABLE__)
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#else
+
+
+#if defined(__OTG_ENABLE__)
+
+/* Should put the default driver in the last line */
+kal_uint8 USB_EXT_CLASS_DRV_WEIGHT_TBL[] =
+{
+ 1, /* MS drv */
+#ifdef __USB_HOST_COM_PORT_SUPPORT__
+ 1, /* CDC ACM drv */
+#endif
+ 0 /* Default */
+};
+
+#endif
+
+#endif
+
+#if defined(__IC_USB_ENABLE__)
+
+/* Should put the default driver in the last line */
+kal_uint8 USB_INT_CLASS_DRV_WEIGHT_TBL[] =
+{
+ 1, /* MS drv */
+ 1, /* ICCD drv */
+ 1, /* EEM drv */
+ 0 /* Default */
+};
+
+#endif
+
+
+/*
+1. If "current_follow_spec" is TRUE means only current value <= g_otg_support_max_power will be checked,
+ if it is FALSE. then we will first choose the configuration with max weight number, and then choose a current the which is the most nearnest to the g_otg_support_max_power
+
+2. If all class driver are with the same weight, we will choose the configuration which matches the most class drivers
+ */
+
+
+static const USB_HOST_MATCH_PARAM usb_host_match_rule_param =
+{
+#if defined(__OTG_ENABLE__)
+ USB_EXT_CLASS_DRV_WEIGHT_TBL,
+ sizeof(USB_EXT_CLASS_DRV_WEIGHT_TBL)/sizeof(kal_uint8),
+#endif
+#if defined(__IC_USB_ENABLE__)
+ USB_INT_CLASS_DRV_WEIGHT_TBL,
+ sizeof(USB_INT_CLASS_DRV_WEIGHT_TBL)/sizeof(kal_uint8),
+#endif
+ KAL_FALSE
+};
+
+static const USB_HOST_COMMON_PARAM usb_host_common_param =
+{
+ KAL_TRUE, //support_HNP;
+ KAL_TRUE, //support SRP;
+ KAL_TRUE, //support_Remote_Wakeup;
+ KAL_TRUE, //support_Double_FIFO;
+ 16 //HS ep0 interval; max value is 16, 16 stands for 4 seconds,FS value is (HS-3)
+};
+
+
+#endif /* #if defined(__OTG_ENABLE__)||defined(__IC_USB_ENABLE__) */
+/************************************************************
+ customization functinos
+*************************************************************/
+
+/* get general USB device parameter function*/
+const USB_DEVICE_PARAM *USB_GetDeviceParam(void)
+{
+ return (&usb_device_param);
+}
+
+/* get mass storage USB device parameter function*/
+const USB_MS_PARAM *USB_GetMsParam(void)
+{
+ return (&usb_ms_param);
+}
+
+/* get CDC ACM USB device parameter function*/
+const USB_ACM_PARAM *USB_GetAcmParam(void)
+{
+ return (&usb_acm_param);
+}
+
+#ifdef WEBCAM_SUPPORT
+/* get VIDEO USB device parameter function*/
+const USB_VIDEO_PARAM *USB_GetVideoParam(void)
+{
+ return (&usb_video_param);
+}
+#endif /* WEBCAM_SUPPORT */
+
+#ifdef PICTBRIDGE_SUPPORT
+/* get IMAGE USB device parameter function*/
+const USB_IMAGE_PARAM *USB_GetImageParam(void)
+{
+ return (&usb_image_param);
+}
+#endif /* PICTBRIDGE_SUPPORT */
+
+
+#ifdef __MTP_ENABLE__
+/* get IMAGE USB device parameter function*/
+const USB_MTP_IMAGE_PARAM *USB_MTP_GetImageParam(void)
+{
+ return (&usb_mtp_image_param);
+}
+#endif /* __MTP_ENABLE__ */
+
+#if defined(__OTG_ENABLE__)||defined(__IC_USB_ENABLE__)
+
+const USB_HOST_MATCH_PARAM *USB_Host_GetMatchParam(void)
+{
+ return (&usb_host_match_rule_param);
+}
+
+const USB_HOST_COMMON_PARAM *USB_Host_GetCommonParam(void)
+{
+ return (&usb_host_common_param);
+}
+
+#endif
+
+
+/* get USB custom parameter function*/
+static const USB_CUSTOM_FUNC USB_CustomFunc =
+{
+ USB_GetDeviceParam,
+ USB_GetMsParam,
+ USB_GetAcmParam,
+#ifdef WEBCAM_SUPPORT
+ USB_GetVideoParam,
+#endif
+#ifdef PICTBRIDGE_SUPPORT
+ USB_GetImageParam,
+#endif
+#ifdef __MTP_ENABLE__
+ USB_MTP_GetImageParam,
+#endif
+#if defined(__OTG_ENABLE__)||defined(__IC_USB_ENABLE__)
+ USB_Host_GetMatchParam,
+ USB_Host_GetCommonParam
+#endif
+};
+
+const USB_CUSTOM_FUNC* USB_GetCustomFunc(void)
+{
+ return(&USB_CustomFunc);
+}
+
+/* power control function, enable == KAL_TRUE turn on the power*/
+void USB_PowerControl(kal_bool enable)
+{
+#ifdef __USB_ENABLE__
+ DCL_HANDLE handle;
+ PMU_CTRL_LDO_BUCK_SET_EN val;
+
+ if(enable == KAL_FALSE)
+ return;
+
+ val.enable=enable;
+ val.mod=VUSB;
+ handle=DclPMU_Open(DCL_PMU, FLAGS_NONE);
+ DclPMU_Control(handle, LDO_BUCK_SET_EN, (DCL_CTRL_DATA_T *)&val);
+ DclPMU_Close(handle);
+#endif /*__USB_ENABLE__*/
+}
+
+
+#ifdef __OTG_ENABLE__
+const kal_uint16 g_otg_support_max_power = 100; /*mA*/
+const kal_bool OTG_IDPIN_CABLE_PLUGIN_LEVEL = LEVEL_LOW;
+
+kal_uint16 USBD_Get_Max_Power(void)
+{
+ return g_otg_support_max_power;
+}
+#endif
+
+//#if defined(__OTG_ENABLE__)
+ // When OTG is enabled, we must set this to FALSE, or we may impact OTG functionality while charging
+//const kal_bool usb_default_charge = KAL_FALSE;
+//#else // #if defined(__OTG_ENABLE__)
+//const kal_bool usb_default_charge = KAL_TRUE;
+//#endif // #if defined(__OTG_ENABLE__)
+
+
+kal_bool USB_Default_Charging(void)
+{
+// const kal_bool usb_default_charge
+#if defined(__OTG_ENABLE__)
+ return KAL_FALSE; // When OTG is enabled, we must set this to FALSE, or we may impact OTG functionality while charging
+#endif
+
+#if defined(__USB_COMPLIANCE_CHARGE__)
+ return KAL_FALSE; // follow USB spec : only after set Configuration, USB can drag 500mA current
+#endif
+
+ return KAL_TRUE; // no matter what, USB cable in will drag 500mA current
+}
+
+/************************************************************
+ customization functinos
+*************************************************************/
+void USB_Connect_R_To_DM_Control(kal_bool enable)
+{
+ /*******************************************************
+ * This function only used in 6219/6227/6225/6228/6229/6235.
+ *
+ * If you want to use it, please define
+ * DRV_PHY_CHARGER_DETECT_BY_EXTERNAL_R in project makefile
+ ********************************************************/
+
+#ifdef DRV_PHY_CHARGER_DETECT_BY_EXTERNAL_R
+#ifdef __CUST_NEW__
+ if(enable == KAL_TRUE)
+ GPIO_WriteIO(1, gpio_usb_chr_det_switch_pin);
+ else
+ GPIO_WriteIO(0, gpio_usb_chr_det_switch_pin);
+#endif /* __CUST_NEW__ */
+#endif /* DRV_PHY_CHARGER_DETECT_BY_EXTERNAL_R */
+
+}
+
+
+void custom_usb_ms_init(void)
+{
+#ifndef __UBL__
+#if defined(__USB_ENABLE__)&&defined(__USB_MASS_STORAGE_ENABLE__)
+ #if ((defined(__MSDC_MS__))||(defined(__MSDC_MSPRO__))||(defined(__MSDC_SD_MMC__)) )
+ #ifdef __SIM_PLUS__
+ if(g_usb_ms_simplus_exist == KAL_TRUE)
+ {
+ USB_Ms_Register_DiskDriver(&USB_SIMPLUS_drv);
+ }
+ #endif
+ USB_Ms_Register_DiskDriver(&USB_MSDC_drv);
+ #ifdef __MSDC_DUAL_CARD_SWITCH__
+ USB_Ms_Register_DiskDriver(&USB_tCard_2_drv);
+ #endif
+ #endif
+
+ #ifdef __USB_RAMDISK__
+ USB_Ms_Register_DiskDriver(&USB_RAM_drv);
+ #endif
+
+ #if (!defined(__FS_SYSDRV_ON_NAND__) && !defined( _NAND_FLASH_BOOTING_))
+ if(FS_GetDevPartitions(FS_DEVICE_TYPE_NOR) >= 2)
+ {
+ USB_Ms_Register_DiskDriver(&USB_NOR_drv);
+ }
+ #endif
+
+ //#if defined(NAND_SUPPORT)&&(!defined(__USB_MODEM_CARD_SUPPORT__))
+ #if defined(NAND_SUPPORT)
+ if(FS_GetDevPartitions(FS_DEVICE_TYPE_NAND) >= 2)
+ {
+ USB_Ms_Register_DiskDriver(&USB_NAND_drv);
+ }
+ else if (FS_GetDevPartitions(FS_DEVICE_TYPE_NAND) == 1)
+ {
+ #if (!defined(__FS_SYSDRV_ON_NAND__))
+ USB_Ms_Register_DiskDriver(&USB_NAND_drv);
+ #endif
+ }
+ #endif
+
+ #if (!defined(__FS_SYSDRV_ON_NAND__) && !defined( _NAND_FLASH_BOOTING_)&&!defined(__EMMC_BOOTING__))||defined(NAND_SUPPORT)
+ #if defined(__USB_MASS_STORAGE_CDROM_ENABLE__)
+ USB_Ms_Set_Current_Driver(LOGIC_DRIVE_CDROM);
+ USB_Ms_Register_DiskDriver(&USB_CDROM_drv);
+ USB_Ms_Set_Current_Driver(LOGIC_DRIVE_MS); //always swith current drive to MS
+ #if !(defined(__USB_MODEM_CARD_SUPPORT__)||defined(__USB_DATA_CONNECTION__))
+ //modem_card and data_connect do not support CD-ROM in LOGIC_DRIVE_MS
+ USB_Ms_Register_DiskDriver(&USB_CDROM_drv);
+ #endif
+ #endif
+ #endif
+#endif /*__USB_ENABLE__*/
+#endif /*__UBL__*/
+}
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/usb_custom_def.h b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/usb_custom_def.h
new file mode 100644
index 0000000..1bf033b
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/usb_custom_def.h
@@ -0,0 +1,205 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * usb_custom_def.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file declares usb customization definitions
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+
+
+/* USB VID */
+#define MTK_USB_VID (0x0e8d)
+
+
+/*********************************************/
+/* Device Common */
+/*********************************************/
+#define USB_DESCRIPTOR_SIZE 512
+
+/*********************************************/
+/* CDC ACM Buffer Size */
+/*********************************************/
+#if defined(__HSUPA_SUPPORT__)|| defined(__HSDPA_SUPPORT__)
+ #define USB_TX_RING_BUFFER_1_SIZE (16*2048)
+ #define USB_TX_RING_BUFFER_2_SIZE (16*2048)
+ #define USB_TX_RING_BUFFER_3_SIZE (16*2048)
+ #define USB_TX_RING_BUFFER_4_SIZE (16*2048)
+ #define USB_TX_RING_BUFFER_5_SIZE (16*2048)
+ #define USB_TXISR_RING_BUFFER_SIZE (4*3072)
+#elif defined(__EGPRS_MODE__)
+ #define USB_TX_RING_BUFFER_1_SIZE (4*2048)
+ #define USB_TX_RING_BUFFER_2_SIZE (4*2048)
+ #define USB_TX_RING_BUFFER_3_SIZE (4*2048)
+ #define USB_TX_RING_BUFFER_4_SIZE (4*2048)
+ #define USB_TX_RING_BUFFER_5_SIZE (4*2048)
+ #define USB_TXISR_RING_BUFFER_SIZE (3072)
+#else
+ #define USB_TX_RING_BUFFER_1_SIZE (2048)
+ #define USB_TX_RING_BUFFER_2_SIZE (2048)
+ #define USB_TX_RING_BUFFER_3_SIZE (2048)
+ #define USB_TX_RING_BUFFER_4_SIZE (2048)
+ #define USB_TX_RING_BUFFER_5_SIZE (2048)
+ #define USB_TXISR_RING_BUFFER_SIZE (3072)
+#endif
+
+#define USB_RX_RING_BUFFER_1_SIZE (2048)
+#define USB_RX_RING_BUFFER_2_SIZE (2048)
+#define USB_RX_RING_BUFFER_3_SIZE (2048)
+#define USB_RX_RING_BUFFER_4_SIZE (2048)
+#define USB_RX_RING_BUFFER_5_SIZE (2048)
+
+#ifdef __USB_HIGH_SPEED_COM_PORT_ENABLE__
+// high speed interface RX buffer
+#define USB_ACM_RX_BUFFER_NUM 8
+#define USB_ACM_RX_BUFFER_SIZE 3072
+#else
+#define USB_ACM_RX_BUFFER_NUM 0
+#define USB_ACM_RX_BUFFER_SIZE 0
+#endif
+
+/*********************************************/
+/* Mass Storage Buffer Size */
+/*********************************************/
+#if defined(__LOW_COST_SUPPORT_ULC__)
+#define USBMS_MAX_BUFFERSIZE (4*1024)
+#elif (defined(__LOW_COST_SUPPORT_COMMON__)&&(!defined(__USB_HS_ENABLE__)))
+#define USBMS_MAX_BUFFERSIZE (8*1024)
+#else
+#define USBMS_MAX_BUFFERSIZE (128*1024)
+#endif
+
+/*********************************************/
+/* MTP Buffer Size */
+/*********************************************/
+#define USB_IMAGE_MTP_MAX_BUFFERSIZE USBMS_MAX_BUFFERSIZE
+
+/*********************************************/
+/* Webcam */
+/*********************************************/
+#ifdef __WEBCAM_SUPPORT_ISO_PIPE__
+#define USBVIDEO_MAX_PAYLOAD_LENGTH 512
+#else
+#define USBVIDEO_MAX_PAYLOAD_LENGTH 1024
+#endif
+
+/*********************************************/
+/* Tethering EP0 Buffer */
+/*********************************************/
+#define USB_ISD_EP0_BUFFER_LENGTH 64
+
+/*********************************************/
+/* Host Common */
+/*********************************************/
+#define USBD_MAX_CFG_NUM 8
+#define USBD_MAX_IF_PER_CFG 4
+
+/*********************************************/
+/* Host Class Drivers */
+/*********************************************/
+#define USB_HOST_MAX_MS_NUM 1
+#define USB_HOST_MS_SUPPORT_LUN 8
+#define USB_HOST_MS_MAX_DATA_LENGTH (32*1024)
+#define USB_HOST_MS_ERROR_COUNT 3
+#define USB_HOST_MS_SLEEP_TIME 0x00FF
+
+
+#ifdef __IC_USB_ICCD_SUPPORT__
+#define USB_MAX_ICCD_NUM 1
+#define USB_HOST_ICCD_BUSY_COUNT 10
+#define USB_HOST_ICCD_SLEEP_TIME 0x00FF
+#endif
+
+
+#ifdef __IC_USB_EEM_SUPPORT__
+#define USB_MAX_EEM_NUM 1
+#define EEM_TX_BUFFER_NUM 10
+#define EEM_RX_BUFFER_NUM 10
+#endif
+
diff --git a/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/usb_host_ms_custom.c b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/usb_host_ms_custom.c
new file mode 100644
index 0000000..19b1077
--- /dev/null
+++ b/mcu/custom/driver/drv/misc_drv/_Default_BB/MT2735/usb_host_ms_custom.c
@@ -0,0 +1,141 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * usb_host_ms_custom.c
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file implements usb host ms customer support
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#include "drv_comm.h"
+#include "usb_host_ms_custom.h"
+
+
+#ifdef __OTG_ENABLE__
+
+/*
+
+kal_uint8 USBHost_Media_Handle[USB_HOST_MS_SUPPORT_LUN];
+
+
+kal_uint8* USBHost_Get_Media_Hanle(kal_uint8 *p_num)
+{
+ *p_num = sizeof(USBHost_Media_Handle)/sizeof(kal_uint8);
+ return USBHost_Media_Handle;
+}
+
+*/
+
+#endif
+
diff --git a/mcu/custom/driver/drv_gen/MT2735_IVT/DEFAULT/codegen.dws b/mcu/custom/driver/drv_gen/MT2735_IVT/DEFAULT/codegen.dws
new file mode 100644
index 0000000..20abd2d
--- /dev/null
+++ b/mcu/custom/driver/drv_gen/MT2735_IVT/DEFAULT/codegen.dws
Binary files differ