[Feature][Modem]Update MTK MODEM V1.6 baseline version: MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6

MTK modem version: MT2735_IVT_MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6.tar.gz
RF  modem version: NA

Change-Id: I45a4c2752fa9d1a618beacd5d40737fb39ab64fb
diff --git a/mcu/interface/driver/hwdrv/b2psi_sw.h b/mcu/interface/driver/hwdrv/b2psi_sw.h
new file mode 100644
index 0000000..85c72d8
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/b2psi_sw.h
@@ -0,0 +1,72 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *    b2psi.c
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This file is intended for b2psi driver.
+ *
+ * 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 _B2PSI_SW_H
+#define _B2PSI_SW_H
+
+extern void B2PSI_init(void);
+extern kal_uint8 B2PSI_read(kal_uint16 register_index);
+extern void B2PSI_write(kal_uint8 data, kal_uint16 register_index);
+extern void B2PSI_write_fast(kal_uint8 data, kal_uint16 register_index);
+//extern void PMIC_HISR(void);
+
+#endif
+
diff --git a/mcu/interface/driver/hwdrv/batparm.h b/mcu/interface/driver/hwdrv/batparm.h
new file mode 100644
index 0000000..27a8ead
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/batparm.h
@@ -0,0 +1,82 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *    batparm.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This file is only timer based on event scheduler
+ *
+ * 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 _BATPARM_H
+#define _BATPARM_H
+   #include "adc.h"
+#endif /*_BATPARM_H*/
+
+
diff --git a/mcu/interface/driver/hwdrv/cas_drv.h b/mcu/interface/driver/hwdrv/cas_drv.h
new file mode 100644
index 0000000..881be3f
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/cas_drv.h
@@ -0,0 +1,82 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *   Sd_def.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   Header file of SD/MMC driver
+ *
+ * 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 CAS_DRV_H
+#define CAS_DRV_H
+
+#define M_CAM_CAS_BLOCK	4
+#define M_CAM_CAS_HANDLE	0xCACACACA
+
+typedef enum {
+	CAS_CMD_NO_ERROR,
+	CAS_CMD_WRITE_FAIL,
+	CAS_CMD_READ_FAIL,
+	CAS_CMD_BUSY_TIMEOUT,
+	CAS_CMD_NOT_CAS_CARD,
+	CAS_CMD_NOT_EXIST,
+	CAS_CMD_EXIST_NOT_READY
+}CAS_CMD_STA;
+
+extern CAS_CMD_STA CAS_CMD(kal_uint8 *txBuffer, kal_uint32 txSize, kal_uint8 *rxBuffer, kal_uint32 *rxSize);
+
+#endif
diff --git a/mcu/interface/driver/hwdrv/cs_fac_det.h b/mcu/interface/driver/hwdrv/cs_fac_det.h
new file mode 100644
index 0000000..d1b3624
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/cs_fac_det.h
@@ -0,0 +1,133 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *    cs_fac_det.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This file is header file of customer specific factory mode detection mechanism interface
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __CS_FAC_DET_H__
+#define __CS_FAC_DET_H__
+
+
+// The enum lists the boot mode that the customer may request to force boot into
+// Customer may request to boot into specific boot mode for specific factory mode
+// The factory mode detection mechanism should take responsibility to link factory mode <-> factory boot mode
+// and report to PWIC at boot time (If necessary)
+typedef enum{
+	CS_FAC_BOOT_IDLE = 0,
+	CS_FAC_BOOT_CHARGING,
+	CS_FAC_BOOT_USB_CHARGING,
+	CS_FAC_BOOT_MAX
+}cs_fac_boot_mode_enum;
+
+// Currently, take these strctures as common structures
+// If there is new customer specific facroty mode SPEC
+// then we come back to review if the current definition is enough or NOT
+
+// The enum lists factory modes
+// The customer may request to have different activities according to different factory mode
+typedef enum{
+	CS_FAC_NONE = 0x00000000,    // Factory NONE ==> Means NO factory mode is detected
+	CS_FAC_UART = 0x00000001,    // Bit00, Factory UART
+	CS_FAC_USB  = 0x00000002,    // Bit01, Factory USB
+	CS_FAC_CTRL = 0x00000004,    // Bit02, Factory manual ctrl mode
+	CS_FAC_MAX  = 0x10000000     // Bit31, Used for error check purpose
+}cs_fac_mode_enum;
+
+#define CS_FAC_MODE_NUM      4   // Total fac modes supported
+
+
+typedef struct{
+	// Drv init
+	void (*drv_init)(void);
+
+	// Return expect boot mode according to specific customer spec
+	// The spec is implement in the function
+	cs_fac_boot_mode_enum (*factory_det_get_boot_mode)(void);
+
+	// Return whether the specific factory mode is detected or NOT
+	// KAL_TRUE: The specific fac event is detected
+	// KAL_FALSE: The specific fac event is NOT detected
+	kal_bool (*factory_det_query_fac_mode)(cs_fac_mode_enum);
+
+	// Set the factory mode by other modules
+	void (*factory_det_set_fac_mode)(cs_fac_mode_enum);
+
+	// Clear the factory mode by other modules
+	void (*factory_det_clear_fac_mode)(cs_fac_mode_enum);
+
+}cs_factory_detecter;
+
+
+extern cs_factory_detecter *cs_fac_det;
+extern cs_factory_detecter *cs_fac_det_get_interface(void);
+
+#endif // #define __CS_FAC_DET_H__
+
+
+
diff --git a/mcu/interface/driver/hwdrv/ds_if.h b/mcu/interface/driver/hwdrv/ds_if.h
new file mode 100644
index 0000000..245bca1
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/ds_if.h
@@ -0,0 +1,260 @@
+/*****************************************************************************
+*  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) 2010
+*
+*  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:
+ * ---------
+ *	ds_if.h
+ *
+ * Project:
+ * --------
+ *   ALL
+ *
+ * Description:
+ * ------------
+ *   This file is intends for direct sensor interface 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!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __DS_IF_H__
+#define __DS_IF_H__
+
+//RHR #include "kal_release.h"
+//MSBB remove #include "kal_non_specific_general_types.h"
+
+
+//Action Id
+#define DS_IF_DATA_BUS_CONTL  0x01 
+#define DS_IF_SEN2LCM_SET  0x02
+#define DS_IF_FRAME_DONE_CB_REGISTER  0x04
+#define DS_IF_SENSOR_PAUSE_CB_REGISTER  0x08
+#define DS_IF_SENSOR_RESUME_CB_REGISTER  0x10
+
+
+//Error code
+#define DS_IF_SUCCEED                                               0x0000
+#define DS_IF_ERR_INVALID_HANDLE                          0x0001 
+#define DS_IF_ERR_INVALID_ACTION                          0x0002
+#define DS_IF_ERR_INVALID_PARA                              0x0004
+#define DS_IF_ERR_NOT_ALLOWED_STATE                  0x0008
+#define DS_IF_ERR_CALLER_CONTEXT_NOT_ALLOW    0x0010
+#define DS_IF_ERR_CAL_NOT_DIRECT_SENSOR           0x0020
+#define DS_IF_ERR_CAL_NOT_CONFIG_HW_TIMING    0x0040
+#define DS_IF_ERR_NOT_REGISTERED_CB                    0x0080
+#define DS_IF_ERR_TOO_MANY_USERS                        0x8000
+
+
+
+#define USER_HANDLE_FOR_NON_DIRECT_SENSOR                  0x0
+#define DUMMY_USER_HANDLE_FOR_TOO_MANY_USERS          0xF1
+
+
+typedef void (*DS_CB_FUNC)(void * cb_para);
+
+typedef enum
+{
+   DS_IF_STATE_INIT= 0, 
+   DS_IF_STATE_READY = 1, 
+   DS_IF_STATE_BUS = 2, 
+   DS_IF_STATE_BUSY = 3 
+} DS_IF_STATE_E;
+
+
+typedef enum
+{
+   UNKNOWN_SENSOR = 0, 
+   DIRECT_SENSOR = 1, 
+   SERIAL_SENSOR = 2, 
+   PARALLEL_SENSOR= 3 
+} SENSOR_IF_TYPE;
+
+typedef enum
+{
+   CAL_DS_IF_USER = 0, 
+   LCD_DS_IF_USER, 
+   MAX_DS_IF_USERS 
+} DS_IF_USER;
+
+
+typedef struct
+{
+   kal_uint16 para_1;
+   kal_uint16 para_2;
+   kal_uint16 para_3;
+   kal_uint16 para_4;
+   kal_uint16 para_5;
+   kal_uint16 para_6;
+   kal_bool para_7;
+   kal_bool para_8;
+   kal_bool para_9;
+   kal_uint32 para_10;
+} DS_SEN2LCM_T;
+
+
+typedef struct
+{
+//only valid for action DS_DATA_BUS_CONTL been asserted.
+kal_bool    data_bus_control_take; // KAL_TRUE for taken, KAL_FALSE for release, 
+// only valid for DS_SEN2LCM_SET been asserted.
+DS_SEN2LCM_T    sen2lcm_setting; 
+// only valid for DS_FRAME_DONE_CB_REGISTER been asserted.
+kal_bool    repeat_callback; // KAL_TRUE for repeat, KAL_FALSE for first frame only
+DS_CB_FUNC    frame_done_cb_func;
+// only valid for DS_SENSOR_PAUSE_CB_REGISTER been asserted.
+DS_CB_FUNC    sensor_pause;
+// only valid for DS_SENSOR_RESUME_CB_REGISTER been asserted.
+DS_CB_FUNC    sensor_resume;
+} DS_CONFG_T;
+
+
+/**
+ *  Get user handle for other function call usage afterwards.
+ *  @param sensor      : sensor type
+ *  @param user_id      : predefine user id
+ *  @return kal_uint32 : user handle
+ *  @remarks This function return user handle, which is valid on for DIRECT_SENSOR.
+ *           Other sensor type returned handle is not effective in following call.
+ */
+kal_uint32 ds_if_open(SENSOR_IF_TYPE sensor, DS_IF_USER user_id);
+
+
+/**
+ *  release user handle and close usage privilege.
+ *  @param handle      : user handle
+ *  @return kal_uint32 : error code
+ *  @remarks This function must call after ds_if_open() and can not call in HW interface busy state.
+ *  
+ */
+kal_uint32 ds_if_close(kal_uint32 handle);
+
+
+/**
+ *  configure the HW parameters or others
+ *  @param handle      : user handle
+ *  @param action       : action id
+ *  @param para         : parameters corresponding to action id
+ *  @return kal_uint32 : error code
+ *  @remarks This function must call after ds_if_open() and can not call in HW interface busy state.
+ *  
+ */
+kal_uint32 ds_if_config(kal_uint32 handle, kal_uint32 action, DS_CONFG_T* para);
+
+
+/**
+ *  start HW for direct sensor mode display 
+ *  @param handle      : user handle
+ *  @return kal_uint32 : error code
+ *  @remarks This function must call after ds_if_open() and can not call in HW interface busy state.
+ *  
+ */
+kal_uint32 ds_if_start (kal_uint32 handle);
+
+
+/**
+ *  stop HW which is in direct sensor mode display 
+ *  @param handle      : user handle
+ *  @return kal_uint32 : error code
+ *  @remarks This function must call after ds_if_open() and after ds_if_start( ). That is, only stop HW when HW is in busy state
+ *  
+ */
+kal_uint32 ds_if_stop (kal_uint32 handle);
+
+
+
+/**
+ *  query current HW(direct sensor interface) state
+ *  @param 
+ *  @return DS_IF_STATE_E : HW state
+ *  @remarks After first call ds_if_open() the state change from INIT to READY. Afterwards, BUS, or BUSY states transition depends on data bus and hw status.
+ *  
+ */
+DS_IF_STATE_E ds_if_query_state (void);
+
+//only for lcd driver
+kal_uint32 ds_if_pause_sensor_cb (kal_uint32 handle);
+
+//only for lcd driver
+kal_uint32 ds_if_resume_sensor_cb (kal_uint32 handle);
+
+//only call from lcd_Hisr
+kal_uint32 ds_if_hisr(kal_uint32 intr_status);
+
+//only for lcd driver
+void lcd_set_ds_a0_polarity(unsigned long a0);
+
+//only for lcd driver
+kal_uint32 ds_if_enable_per_frame_lcm_roi_coms (kal_uint32 handle, kal_bool on_Noff);
+
+#endif   /*__DS_IF_H__*/
+
diff --git a/mcu/interface/driver/hwdrv/e_compass_sensor.h b/mcu/interface/driver/hwdrv/e_compass_sensor.h
new file mode 100644
index 0000000..ce855b4
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/e_compass_sensor.h
@@ -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:
+ * ---------
+ *    e_compass_sensor.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This Module is for e_compass sensor driver.
+ *
+ * Author:
+ * Peter Zhang
+ *
+ *
+ *============================================================================
+ *             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 E_COMPASS_SENSOR_H
+#define E_COMPASS_SENSOR_H
+
+#define E_COMPASS_SENSOR_BUFFER_SIZE 0x08 /* Must be a power of 2. */
+
+typedef enum {
+    E_COMPASS_SENSOR_BUFF_EMPTY,
+    E_COMPASS_SENSOR_BUFF_DATA_EXIST,
+    E_COMPASS_SENSOR_BUFF_FULL
+} E_Compass_Sensor_BuffState_enum;
+
+/* we use this enum to save calibration state */
+typedef enum {
+    E_COMPASS_SENSOR_CALI_NONE,
+    E_COMPASS_SENSOR_START_CALI,
+    E_COMPASS_SENSOR_CALI_FINISHED,
+    E_COMPASS_SENSOR_CALI_ABORTED
+} E_Compass_Sensor_Cali_enum;
+
+/* we use this enum to save calibration result */
+typedef enum {
+    E_COMPASS_SENSOR_CALI_SUCCESS,
+    E_COMPASS_SENSOR_CALI_FAILED
+} E_Compass_Sensor_Cali_Result_enum;
+
+#if defined (E_COMPASS_MAGNETIC_DETECT)
+/* we use this enum to save magnetic state */
+typedef enum {
+    E_COMPASS_SENSOR_MAGNETIC_NORMAL,
+    E_COMPASS_SENSOR_MAGNETIC_ABNORMAL
+} E_Compass_Sensor_Magnetic_State_enum;
+#endif /* E_COMPASS_MAGNETIC_DETECT */
+
+typedef struct
+{
+    kal_uint16  angle;
+} E_CompassSensorDataStruct;
+
+typedef struct
+{
+    kal_int16   usr_moffset_x;
+    kal_int16   usr_moffset_y;
+    kal_int16   usr_moffset_z;
+    kal_bool    cali_result;
+
+    kal_int32   x_axis_sensitivity;		/*x axis data sensitivity*/
+    kal_int32   y_axis_sensitivity;		/*y axis data sensitivity*/
+    kal_int16   x_max; 			/*sample point maximum of x coordinate*/
+    kal_int16   x_min; 			/*sample point minimum of x coordinate*/
+    kal_int16   y_max; 			/*sample point maximum of y coordinate*/
+    kal_int16   y_min; 			/*sample point minimum of y coordinate*/
+
+    kal_int32       ext_para1;
+    kal_int32       ext_para2;
+    kal_int32       ext_para3;
+    kal_int16       ext_para4;
+    kal_int16       ext_para5;
+    kal_int16       ext_para6;
+    kal_int16       ext_para7;
+    kal_int16       ext_para8;
+    kal_int16       ext_para9;
+} E_CompassSensorCalibratedDataStruct;
+
+typedef void (*EC_DATA_FUNC)(void *parameter,E_Compass_Sensor_BuffState_enum state);
+typedef void (*EC_CALI_FUNC)(void *parameter,E_Compass_Sensor_Cali_Result_enum result);
+#if defined (E_COMPASS_MAGNETIC_DETECT)
+typedef void (*EC_MAG_FUNC)(void *parameter,E_Compass_Sensor_Magnetic_State_enum state);
+#endif /* E_COMPASS_MAGNETIC_DETECT */
+
+typedef struct
+{
+    EC_DATA_FUNC        data_cb_func;
+    EC_CALI_FUNC        cali_cb_func;
+#if defined (E_COMPASS_MAGNETIC_DETECT)
+    EC_MAG_FUNC         mag_cb_func;
+#endif /* E_COMPASS_MAGNETIC_DETECT */
+    void                *data_para;
+    void                *cali_para;
+#if defined (E_COMPASS_MAGNETIC_DETECT)
+    void                *mag_para;
+#endif /* E_COMPASS_MAGNETIC_DETECT */
+    kal_eventgrpid      event;                      /* event id */
+    E_Compass_Sensor_Cali_enum  cali_state;         /* calibration state */
+    kal_uint8           sample_handle;              /* GPT timer handle for sample */
+}E_CompassSensorStruct;
+
+typedef struct
+{
+    E_CompassSensorDataStruct   e_compass_sensor_data[E_COMPASS_SENSOR_BUFFER_SIZE];
+    kal_uint16                  e_compass_sensor_rindex;
+    kal_uint16                  e_compass_sensor_windex;
+}E_CompassSensorBufferStruct;
+
+/* customization part */
+typedef struct
+{
+    kal_uint8   calibration_sample_dura;        /* GPT timer duration for calibration sample, *10ms */
+    kal_uint8   normal_sample_dura;             /* GPT timer duration for normal sample, *10ms */
+    kal_uint8   poweron_delay;                  /* SW timer for sensor power on delay, *4.615ms */
+} E_CompassSensor_custom_data_struct;
+
+typedef struct
+{
+    E_CompassSensor_custom_data_struct * (*ec_get_data)(void);      /* return configuration data */
+    void (*ec_read_adc)(kal_int16 *x,kal_int16 *y,kal_int16 *z);    /* read raw data from e_compass sensor */
+#if defined (__E_COMPASS_MIDDLEWARE_DEBUG__)
+    void (*ec_middleware_dump)(kal_int16 *x,kal_int16 *y,kal_int16 *z); /* middleware parameter dump */
+#endif  /* __E_COMPASS_MIDDLEWARE_DEBUG__ */
+    kal_bool (*ec_convert)(kal_int16 x, kal_int16 y, kal_int16 z,E_CompassSensorDataStruct *e_compass_data);    /* convert raw data to angle */
+    E_Compass_Sensor_Cali_enum (*ec_calibrate)(kal_int16 x, kal_int16 y, kal_int16 z);  /* e_compass calibration */
+    void (*ec_calibrate_cancel)(void);  /* e_compass calibration cancel */
+    void (*ec_middleware_init)(void);   /* sensor middleware init */
+    void (*ec_turn_on)(kal_uint8 stage);    /* turn on sensor */
+    void (*ec_turn_off)(void);          /* turn off sensor */
+#if defined (E_COMPASS_MAGNETIC_DETECT)
+    void (*ec_get_magnetic_data)(E_Compass_Sensor_Magnetic_State_enum *e_compass_mag_data);             /* driver want to get magnetic field data */
+#endif /* E_COMPASS_MAGNETIC_DETECT */
+    void (*ec_get_calibrated_data)(E_CompassSensorCalibratedDataStruct *e_compass_calibrated_data);     /* driver want to get calibrated data */
+    void (*ec_init_calibrated_data)(E_CompassSensorCalibratedDataStruct *e_compass_calibrated_data);    /* driver want to init middleware calibration data */
+    void (*ec_custom_init)(void);
+    void (*ec_take_measurement)(void);   /* command of fetching raw data */
+}E_CompassSensor_customize_function_struct;
+
+/* For MMI */
+extern void e_compass_sensor_power_on(void);
+extern void e_compass_sensor_power_off(void);
+extern void e_compass_enable(kal_bool enable);
+extern void e_compass_sensor_start_cali(void);
+extern void e_compass_sensor_cancel_cali(void);
+/* extern kal_bool e_compass_sensor_power(kal_bool enable); */
+/* extern void e_compass_sensor_flush_buff(void); */
+extern void e_compass_sensor_data_cb_registration(EC_DATA_FUNC cb_fun,void *para);
+extern void e_compass_sensor_cali_cb_registration(EC_CALI_FUNC cb_fun,void *para);
+#if defined (E_COMPASS_MAGNETIC_DETECT)
+extern void e_compass_sensor_mag_cb_registration(EC_MAG_FUNC cb_fun,void *para);
+#endif /* E_COMPASS_MAGNETIC_DETECT */
+extern kal_bool e_compass_sensor_get_data(E_CompassSensorDataStruct *e_compass_data);
+extern kal_bool e_compass_get_calibration_result(void);
+extern void e_compass_sensor_manual_init(void);
+
+/* For driver */
+extern void e_compass_init(void);
+extern void e_compass_main_hdr(void);
+extern void e_compass_nvram_init(void);
+
+#if defined (E_COMPASS_DRV_DEBUG)
+#define E_COMPASS_DEBUG_OUTPUT(_string,_var1,_var2,_var3,_var4) \
+{ \
+    char sTemp[100]; \
+    sprintf(sTemp,(_string),(_var1),(_var2),(_var3),(_var4)); \
+    kal_print(sTemp); \
+}
+#else
+#define E_COMPASS_DEBUG_OUTPUT(_string,_var1,_var2,_var3,_var4)
+#endif
+
+#endif
diff --git a/mcu/interface/driver/hwdrv/e_compass_sensor_buff.h b/mcu/interface/driver/hwdrv/e_compass_sensor_buff.h
new file mode 100644
index 0000000..22732a7
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/e_compass_sensor_buff.h
@@ -0,0 +1,117 @@
+/*****************************************************************************
+*  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_buff.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This Module is for e_compass sensor driver.
+ *
+ * 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_BUFF_H
+#define E_COMPASS_SENSOR_BUFF_H
+
+#define ec_get_buf_roomleft(_left)   \
+{\
+    if ( e_compass_sensor_buff.e_compass_sensor_rindex <= e_compass_sensor_buff.e_compass_sensor_windex ) \
+    {\
+        _left = E_COMPASS_SENSOR_BUFFER_SIZE - e_compass_sensor_buff.e_compass_sensor_windex + e_compass_sensor_buff.e_compass_sensor_rindex - 1;\
+    }\
+    else\
+    {\
+        _left = e_compass_sensor_buff.e_compass_sensor_rindex - e_compass_sensor_buff.e_compass_sensor_windex - 1;\
+    }\
+}
+
+#define ec_get_buf_avail(_left)   \
+{\
+    if ( e_compass_sensor_buff.e_compass_sensor_windex >= e_compass_sensor_buff.e_compass_sensor_rindex ) \
+    {\
+        _left = e_compass_sensor_buff.e_compass_sensor_windex - e_compass_sensor_buff.e_compass_sensor_rindex;\
+    }\
+    else\
+    {\
+        _left = E_COMPASS_SENSOR_BUFFER_SIZE - e_compass_sensor_buff.e_compass_sensor_rindex + e_compass_sensor_buff.e_compass_sensor_windex;\
+    }\
+}
+
+#define e_compass_push_data_to_buffer(_data,_room)   \
+{\
+    e_compass_sensor_buff.e_compass_sensor_data[e_compass_sensor_buff.e_compass_sensor_windex]= _data;\
+    e_compass_sensor_buff.e_compass_sensor_windex++;\
+    e_compass_sensor_buff.e_compass_sensor_windex &= (E_COMPASS_SENSOR_BUFFER_SIZE - 1);\
+    if (_room == 1)\
+        e_compass_sensor_data.data_cb_func(e_compass_sensor_data.data_para, E_COMPASS_SENSOR_BUFF_FULL);\
+    else\
+        e_compass_sensor_data.data_cb_func(e_compass_sensor_data.data_para, E_COMPASS_SENSOR_BUFF_DATA_EXIST);\
+}
+
+#define e_compass_pop_data_from_buffer(_data)   \
+{\
+    (_data) = e_compass_sensor_buff.e_compass_sensor_data[e_compass_sensor_buff.e_compass_sensor_rindex];\
+    e_compass_sensor_buff.e_compass_sensor_rindex ++;\
+    e_compass_sensor_buff.e_compass_sensor_rindex &= (E_COMPASS_SENSOR_BUFFER_SIZE - 1);\
+}
+
+#define e_compass_flush_data_buffer()   \
+{\
+    e_compass_sensor_buff.e_compass_sensor_rindex = 0;\
+    e_compass_sensor_buff.e_compass_sensor_windex = 0;\
+}
+
+#endif
diff --git a/mcu/interface/driver/hwdrv/ipc_msgsvc_msgid.h b/mcu/interface/driver/hwdrv/ipc_msgsvc_msgid.h
new file mode 100644
index 0000000..98171ad
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/ipc_msgsvc_msgid.h
@@ -0,0 +1,100 @@
+/*****************************************************************************
+*  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) 2001
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   ipc_msgsvc_msgid.h
+ *
+ * Project:
+ * --------
+ *   Maui
+ *
+ * Description:
+ * ------------
+ *   Header file of IP_MSGSVC_MODULE.
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __IPC_MSGSVC_MSGID_H__
+#define __IPC_MSGSVC_MSGID_H__
+
+#include "ccci_ipc_msgid.h"
+#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 !*/
+#endif
+
+
+#endif  /* !__IPC_MSGSVC_MSGID_H__ */
+
+
diff --git a/mcu/interface/driver/hwdrv/melody.h b/mcu/interface/driver/hwdrv/melody.h
new file mode 100644
index 0000000..ccca79a
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/melody.h
@@ -0,0 +1,123 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *    melody.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This file is intended for melody note 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef MELODY_H
+#define MELODY_H
+
+typedef enum {    
+ C0=0, C0sharp, D0, D0sharp, E0, F0, F0sharp, G0, G0sharp, A0, A0sharp, B0, 
+ C1, C1sharp, D1, D1sharp, E1, F1, F1sharp, G1, G1sharp, A1, A1sharp, B1,
+ C2, C2sharp, D2, D2sharp, E2, F2, F2sharp, G2, G2sharp, A2, A2sharp, B2,
+ C3, C3sharp, D3, D3sharp, E3, F3, F3sharp, G3, G3sharp, A3, A3sharp, B3,
+ C4, C4sharp, D4, D4sharp, E4, F4, F4sharp, G4, G4sharp, A4, A4sharp, B4,
+ C5, C5sharp, D5, D5sharp, E5, F5, F5sharp, G5, G5sharp, A5, A5sharp, B5,
+ C6, C6sharp, D6, D6sharp, E6, F6, F6sharp, G6, G6sharp, A6, A6sharp, B6,
+ C7, C7sharp, D7, D7sharp, E7, F7, F7sharp, G7, G7sharp, A7, A7sharp, B7
+} MusicalNote;		/* KEY define here!! */
+
+//=============Adaption====================================
+#define Notespace    255
+
+typedef struct
+{
+	kal_uint16 duration;  /* in ms */
+	kal_uint8 pitch;
+	kal_uint8 volume;
+} MelodyNoteStruct;
+
+typedef struct
+{
+   kal_uint8 timbre;
+	kal_uint16 notesNum;
+	MelodyNoteStruct *notes;
+} MelodyTrackStruct;
+
+typedef struct
+{
+ 	MelodyTrackStruct  *tracks[4];
+} MelodyStruct;
+
+typedef struct
+{
+   kal_uint16   frequency;         /* in hz */
+   kal_uint16   on_duration;       /* in ms */
+   kal_uint16   off_duration;       /* in ms */
+}FreqStruct;
+
+typedef struct
+{
+   FreqStruct   *f[4];
+}ToneStruct;
+#endif   /* MELODY_H */
+
diff --git a/mcu/interface/driver/hwdrv/rtc_sw.h b/mcu/interface/driver/hwdrv/rtc_sw.h
new file mode 100644
index 0000000..607e1db
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/rtc_sw.h
@@ -0,0 +1 @@
+/* Please do not include this file anymore */
\ No newline at end of file
diff --git a/mcu/interface/driver/hwdrv/sccb.h b/mcu/interface/driver/hwdrv/sccb.h
new file mode 100644
index 0000000..53a2d99
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/sccb.h
@@ -0,0 +1,661 @@
+/*****************************************************************************
+*  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.h
+ *
+ * Project:
+ * --------
+ *   MT6219
+ *
+ * Description:
+ * ------------
+ *   SCCB 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!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * 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 __SCCB_H__
+#define __SCCB_H__
+
+#include "dcl.h"
+
+#include "kal_general_types.h"
+
+#if 0
+#if (defined(MT6219)||defined(MT6228)||defined(MT6226)||defined(MT6226M)||defined(MT6226D)||defined(MT6227)||defined(MT6227D)||defined(MT6229)||defined(MT6230))
+/* under construction !*/
+#endif // #if (defined(MT6219)||defined(MT6228)||defined(MT6226)||defined(MT6226M)||defined(MT6226D)||defined(MT6227)||defined(MT6227D)||defined(MT6229)||defined(MT6230))
+/* under construction !*/
+#if ( defined(MT6219)||defined(MT6228)||defined(MT6226)||defined(MT6226M)||defined(MT6226D)||defined(MT6227)||defined(MT6227D)||defined(MT6229)||defined(MT6230) ||defined(MT6225)||defined(MT6223)||defined(MT6223P)||defined(MT6235B)||defined(MT6238)||defined(MT6239)||defined(MT6268A) ||defined(MT6239)||defined(MT6253T))
+/* under construction !*/
+#endif // SCCB_XXX API supported platforms list
+/* under construction !*/
+#endif
+
+#if 0
+#if defined(__SCCB_MODULE_V1__)
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if (!defined(MT6219))
+/* under construction !*/
+#endif // #if (!defined(MT6219))
+/* 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 !*/
+#if (defined(MT6226)||defined(MT6226M)||defined(MT6226D)||defined(MT6227)||defined(MT6227D)||defined(MT6229)||defined(MT6230)||defined(MT6223)||defined(MT6223P))
+/* under construction !*/
+#endif // #if (defined(MT6226)||defined(MT6226M)||defined(MT6226D)||defined(MT6227)||defined(MT6227D)||defined(MT6229)||defined(MT6230)||defined(MT6223)||defined(MT6223P))
+/* 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 // #if defined(__SCCB_MODULE_V1__)
+#endif
+
+#if 0
+#ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#else // #ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif // #ifdef __CUST_NEW__
+/* under construction !*/
+#endif //#if 0
+
+#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 !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif //#if 0
+
+
+// SCCB PINS definition
+
+
+#ifdef __CUST_NEW__
+//#include "gpio_sw.h"
+extern const char gpio_sccb_serial_clk_pin;
+extern const char gpio_sccb_serial_data_pin;
+#endif // #ifdef __CUST_NEW__
+
+
+#if 0
+/* under construction !*/
+#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6226D)||defined(MT6227)||defined(MT6227D))
+  #ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+  #else // #ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+  #endif // #ifdef __CUST_NEW__
+#endif // #if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6226D)||defined(MT6227)||defined(MT6227D))
+/* under construction !*/
+#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
+  #ifdef __CUST_NEW__
+    #if (defined(DVT_TEST))
+/* under construction !*/
+/* under construction !*/
+    #else // #if (defined(DVT_TEST))
+/* under construction !*/
+/* under construction !*/
+    #endif // #if (defined(DVT_TEST))
+  #else // #ifdef __CUST_NEW__
+    #if (defined(DVT_TEST))
+/* under construction !*/
+/* under construction !*/
+    #else // #if (defined(DVT_TEST))
+/* under construction !*/
+/* under construction !*/
+    #endif // #if (defined(DVT_TEST))
+  #endif // #ifdef __CUST_NEW__
+#endif // #if (defined(MT6228)||defined(MT6229)||defined(MT6230))
+/* under construction !*/
+/* under construction !*/
+#if (defined(DRV_GPIO_REG_AS_6223))
+  #ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+  #else // #ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+  #endif // #ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+#endif // #if (defined(DRV_GPIO_REG_AS_6223))
+/* under construction !*/
+/* under construction !*/
+#if (defined(DRV_GPIO_REG_AS_6225))
+   #ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+   #else /* __CUST_NEW__ */
+/* under construction !*/
+/* under construction !*/
+   #endif /* __CUST_NEW__ */
+/* under construction !*/
+/* under construction !*/
+#endif // #if (defined(DRV_GPIO_REG_AS_6225))
+/* under construction !*/
+#if (defined(DRV_GPIO_REG_AS_6238))
+   #ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+   #else /* __CUST_NEW__ */
+/* under construction !*/
+/* under construction !*/
+   #endif /* __CUST_NEW__ */
+#endif // #if (defined(DRV_GPIO_6238_SERIES))
+/* under construction !*/
+/* under construction !*/
+#if (defined(DRV_GPIO_REG_AS_6235))
+   #ifdef __CUST_NEW__
+     #if defined(EMPTY_MMI)
+/* under construction !*/
+/* under construction !*/
+     #else // #if defined(EMPTY_MMI)
+/* under construction !*/
+/* under construction !*/
+      #endif // #if defined(EMPTY_MMI)
+   #else /* __CUST_NEW__ */
+/* under construction !*/
+/* under construction !*/
+   #endif /* __CUST_NEW__ */
+#endif // #if (defined(DRV_GPIO_6235_SERIES))
+/* under construction !*/
+#if (defined(DRV_GPIO_REG_AS_6268A))
+   #ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+   #else /* __CUST_NEW__ */
+/* under construction !*/
+/* under construction !*/
+   #endif /* __CUST_NEW__ */
+#endif // #if (defined(DRV_GPIO_REG_AS_6268A))
+/* under construction !*/
+#if(defined(DRV_GPIO_REG_AS_6268))
+   #ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+   #else // #ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+   #endif // #ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+#endif // #if(defined(DRV_GPIO_REG_AS_6268))
+/* under construction !*/
+#if (defined(DRV_GPIO_REG_AS_6253T))
+   #ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+   #else /* __CUST_NEW__ */
+/* under construction !*/
+/* under construction !*/
+   #endif /* __CUST_NEW__ */
+/* under construction !*/
+/* under construction !*/
+#endif // #if (defined(DRV_GPIO_REG_AS_6253T))
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if (defined(DRV_GPIO_REG_AS_6253E)&&defined(MT6253L))
+   #ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+   #else /* __CUST_NEW__ */
+/* under construction !*/
+/* under construction !*/
+   #endif /* __CUST_NEW__ */
+/* under construction !*/
+/* under construction !*/
+#endif 
+/* under construction !*/
+#if (defined(DRV_GPIO_REG_AS_6236))
+   #ifdef __CUST_NEW__
+/* under construction !*/
+/* under construction !*/
+   #else /* __CUST_NEW__ */
+/* under construction !*/
+/* under construction !*/
+#endif /*__CUST_NEW__*/
+/* under construction !*/
+/* under construction !*/
+#endif // #if (defined(DRV_GPIO_REG_AS_6236))
+/* under construction !*/
+#endif
+///Bin: added to patch build error
+#ifndef SCCB_SERIAL_CLK_PIN
+   #define SCCB_SERIAL_CLK_PIN		gpio_sccb_serial_clk_pin
+#endif
+
+#ifndef SCCB_SERIAL_DATA_PIN
+   #define SCCB_SERIAL_DATA_PIN		gpio_sccb_serial_data_pin
+#endif
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if defined(__SCCB_MODULE_V1__)
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif // #if defined(__SCCB_MODULE_V1__)
+#endif //#if 0
+
+#endif // #ifndef __SCCB_H__
+
diff --git a/mcu/interface/driver/hwdrv/sccb.h_ b/mcu/interface/driver/hwdrv/sccb.h_
new file mode 100755
index 0000000..a94d9b5
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/sccb.h_
@@ -0,0 +1,678 @@
+/*****************************************************************************

+*  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.h

+ *

+ * Project:

+ * --------

+ *   MT6219

+ *

+ * Description:

+ * ------------

+ *   SCCB interface

+ *

+ * Author:

+ * -------

+ *		PC Huang (mtk00548)

+ *

+ *============================================================================

+ *             HISTORY

+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!

+ *------------------------------------------------------------------------------

+ * $Revision:   1.6  $

+ * $Modtime:   Aug 08 2005 13:03:16  $

+ * $Log:   //mtkvs01/vmdata/Maui_sw/archives/mcu/interface/hwdrv/sccb.h-arc  $

+ *

+ * 04 24 2012 wcpuser_integrator

+ * [MAUI_03155806] [MSBB2] Global Revise Clear and Uniform Legacy Header File Inclusion Requested by JI Huang

+ * .

+ *

+ * 11 30 2010 guoxin.hong

+ * [MAUI_02841708] [Drv] MAUI HAL Peripheral Create

+ * .

+ *

+ * 11 17 2010 shuang.han

+ * [MAUI_02641139] [Drv][I2C] MT6253D compile option removel

+ * .

+ *

+ * 10 27 2010 shuang.han

+ * [MAUI_02638863] [I2C][6253E] fix 6253E i2c pin gpio mode

+ * .

+ *

+ * 10 18 2010 shuang.han

+ * [MAUI_02637814] [RHR][MAUIW1038OF_RHR] Integration to W10.43

+ * .

+ *

+ * 09 09 2010 vincent.liu

+ * [MAUI_02603694] [MT6253EL] [Camere] Check in code for 6253E/L

+ * modify gpio scl/sda pin define for 6253E serial sensor

+ *

+ * 08 29 2010 wy.chuang

+ * [MAUI_02397396] I2C V1 phase out

+ * .

+ *

+ * 08 17 2010 jason.chang

+ * [MAUI_02603694] [MT6253EL] [Camere] Check in code for 6253E/L

+ * .

+ *

+ * 08 16 2010 bin.han

+ * [MAUI_02631832] [I2C]Fix build error

+ * .

+ *

+ * 08 16 2010 bin.han

+ * [MAUI_02631832] [I2C]Fix build error

+ * .

+ *

+ * Jun 25 2010 mtk01973

+ * [MAUI_02563774] [6276 HQA] Check in MAUI

+ * 

+ *

+ * Jun 5 2010 mtk01973

+ * [MAUI_02542177] [MT6255_DVT] The plan for merging to MAUI (For 55 MM HQA!)

+ * 

+ *

+ * Apr 21 2010 mtk02787

+ * [MAUI_02399508] patch I2C CLK/DATA pin for MT6253

+ * 

+ *

+ * Apr 15 2010 mtk01283

+ * [MAUI_02396917] [MT6253][GPIO] Fix GPIO_MODE11 register default value setting

+ * 

+ *

+ * Feb 23 2010 mtk01845

+ * [MAUI_02360180] [Drv][I2C] I2C driver revision for new DMA architecture from MT6276

+ * 

+ *

+ * Feb 20 2010 mtk01845

+ * [MAUI_02360180] [Drv][I2C] I2C driver revision for new DMA architecture from MT6276

+ *

+ *

+ * Dec 12 2009 mtk01845

+ * [MAUI_01975292] [Drv] Klockwork error fix

+ * Add MT6253D option

+ *

+ * Dec 12 2009 mtk01845

+ * [MAUI_01975292] [Drv] Klockwork error fix

+ *

+ *

+ * Oct 5 2009 mtk01845

+ * [MAUI_01963866] [Drv][I2C] sccb.h define I2C pins

+ *

+ *

+ * Jun 17 2009 syu

+ * [MAUI_01869884] [CAMERA][Driver]<S5K5BAFX>  DAGIO_WISE_6235_DEMO_GPRS CAMERA driver check-in

+ *  #define SCCB_SERIAL_CLK_PIN	gpio_sccb_serial_clk_pin

+ *    #define SCCB_SERIAL_DATA_PIN	gpio_sccb_serial_data_pin

+ *

+ * So we can change codegen to match Adagio sch

+ *

+ * Jan 12 2009 mtk01845

+ * [MAUI_01307296] MT6235 charger constant current CC6 and CC7 change to internal use

+ *

+ *

+ * Nov 6 2008 mtk01845

+ * [MAUI_01269587] [Drv] MT6253T merge back to MAUI

+ *

+ *

+ * Jul 31 2008 mtk01845

+ * [MAUI_00813620] [Drv][MoDIS] Dummay APIs modification for MoDIS

+ *

+ *

+ * Jul 18 2008 mtk01845

+ * [MAUI_00786000] [Drv][General] Lint modification

+ *

+ *

+ * Jun 23 2008 mtk01283

+ * [MAUI_00761183] [Drv][GPIO] Correct GPIO usage when using driver customization tool

+ *

+ *

+ * Jun 18 2008 mtk01283

+ * [MAUI_00789872] [Drv][SCCB] Patch SCCB GPIO definition to pass the GPIO error checking

+ *

+ *

+ * Jun 12 2008 mtk01283

+ * [MAUI_00761183] [Drv][GPIO] Correct GPIO usage when using driver customization tool

+ *

+ *

+ * Jun 11 2008 mtk01283

+ * [MAUI_00761183] [Drv][GPIO] Correct GPIO usage when using driver customization tool

+ *

+ *

+ * Jun 4 2008 mtk01283

+ * [MAUI_00781398] [Drv][SCCB] Patch the sccb variable name definitioin

+ *

+ *

+ * Jun 2 2008 mtk01283

+ * [MAUI_00761183] [Drv][GPIO] Correct GPIO usage when using driver customization tool

+ *

+ *

+ * May 30 2008 mtk01283

+ * [MAUI_00761183] [Drv][GPIO] Correct GPIO usage when using driver customization tool

+ *

+ *

+ * Apr 30 2008 mtk01845

+ * [MAUI_00765087] [Drv][MISC] MT6239 compile option support

+ *

+ *

+ * Apr 10 2008 mtk01845

+ * [MAUI_00742324] Build warning fix

+ *

+ *

+ * Mar 18 2008 MTK01845

+ * [MAUI_00734333] Patch for wrong SCCB pin variable with GPIO magic number

+ *

+ *

+ * Mar 13 2008 MTK01845

+ * [MAUI_00620676] [Drv][SCCB] Add SCCB related code for MT6223P platforms

+ * Support custom tool configuration

+ *

+ * Feb 19 2008 MTK01845

+ * [MAUI_00620676] [Drv][SCCB] Add SCCB related code for MT6223P platforms

+ *

+ *

+ * Nov 9 2007 mtk01283

+ * [MAUI_00573819] [Drv][Compile option] Check in MT6235 compile option to Maui

+ *

+ *

+ * Sep 1 2007 mtk01283

+ * [MAUI_00541110] [Drv][Compile option] Check in MT6238 compile option to MainTrunk

+ *

+ *

+ * May 17 2007 mtk01454

+ * [MAUI_00393840] [camera] 6226D compiler option check in

+ *

+ *

+ * Mar 22 2007 mtk01454

+ * [MAUI_00358749] [camera]6227D DVT compiler option check in

+ *

+ *

+ * Dec 5 2006 mtk01283

+ * [MAUI_00348513] [Drv][Feature Option]Apply driver customization tool on Crystal25_Demo project

+ *

+ *

+ * Nov 2 2006 mtk01051

+ * [MAUI_00340010] [SCCB] MT6230 first check in for 06A

+ *

+ *

+ * Oct 5 2006 mtk01235

+ * [MAUI_00324378] [6225 DVT] First Check IN

+ *

+ *

+ * Sep 18 2006 mtk01051

+ * [MAUI_00329410] [1]Assert fail:0m12110.c 1136-REASM

+ * Modify gpio read/write command when __CUST_NEW__

+ *

+ * May 12 2006 mtk01051

+ * [MAUI_00193192] [Drv][Feature]check in codes modified for compile option __CUST_NEW__

+ *

+ *

+ * Apr 24 2006 mtk01051

+ * [MAUI_00188852] [Drv][New Feature] add compile option __CUST_NEW__ for new driver customization meth

+ * Add __CUST_NEW__ complier option

+ *

+ * Jan 3 2006 mtk01051

+ * [MAUI_00165680] [SCCB] Add MT6226M complier option

+ * First check in for MT6226M

+ *

+ *    Rev 1.6   Aug 08 2005 13:03:30   mtk01051

+ * Add NACK_BIT Define

+ *

+ *    Rev 1.5   Aug 01 2005 18:56:34   mtk01051

+ * Modify HW SCCB Interface

+ *

+ *    Rev 1.4   Jul 20 2005 18:30:32   mtk01051

+ * Modify MT6228 SCCB interface pin assignment

+ *

+ *    Rev 1.3   Jun 05 2005 17:20:04   mtk00747

+ * MT6228 first version

+ *

+ *    Rev 1.2   May 17 2005 00:29:16   BM_Trunk

+ * Karlos:

+ * add copyright and disclaimer statement

+ *

+ *    Rev 1.1   Jan 18 2005 00:34:28   BM

+ * append new line in W05.04

+ *

+ *    Rev 1.0   May 28 2004 20:09:38   BM

+ * Initial revision.

+ *

+ *------------------------------------------------------------------------------

+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!

+ *============================================================================

+ ****************************************************************************/

+

+

+#ifndef __SCCB_H__

+#define __SCCB_H__

+

+#if (defined(MT6219)||defined(MT6228)||defined(MT6226)||defined(MT6226M)||defined(MT6226D)||defined(MT6227)||defined(MT6227D)||defined(MT6229)||defined(MT6230))

+#define __SCCB_MODULE_V1__

+#endif // #if (defined(MT6219)||defined(MT6228)||defined(MT6226)||defined(MT6226M)||defined(MT6226D)||defined(MT6227)||defined(MT6227D)||defined(MT6229)||defined(MT6230))

+

+#if ( defined(MT6219)||defined(MT6228)||defined(MT6226)||defined(MT6226M)||defined(MT6226D)||defined(MT6227)||defined(MT6227D)||defined(MT6229)||defined(MT6230)\

+      ||defined(MT6225)||defined(MT6223)||defined(MT6223P)||defined(MT6235)||defined(MT6235B)||defined(MT6238)||defined(MT6239)||defined(MT6268A)\

+      ||defined(MT6239)||defined(MT6253T)||defined(MT6253)||defined(MT6236)||defined(MT6236B) )

+#define __SUPPORT_SCCB_XXX_API__

+#endif // SCCB_XXX API supported platforms list

+

+#if defined(__SCCB_MODULE_V1__)

+/* defination of MT6219 SCCB interface */

+

+//MSBB remove #include "kal_non_specific_general_types.h"

+

+//#define DVT_TEST

+#if (!defined(MT6219))

+#define SCCB_I2C_base                 (0x800A0000)   /* SCCB Interface */

+#endif // #if (!defined(MT6219))

+

+/* HW SCCB Define */

+#define SCCB_READ_COMPLETE			0x01

+#define SCCB_WRITE_COMPLETE		0x02

+

+#define SCCB_CTRL_REG					(SCCB_I2C_base+0x00)

+#define SCCB_DATA_LENGTH_REG			(SCCB_I2C_base+0x08)

+#define SCCB_BUFFER_TIME_REG			(SCCB_I2C_base+0x0C)

+#define SCCB_START_HOLD_TIME_REG		(SCCB_I2C_base+0x10)

+#define SCCB_DATA_HOLD_TIME_REG		(SCCB_I2C_base+0x14)

+#define SCCB_CLOCK_LOW_PERIOD_REG	(SCCB_I2C_base+0x18)

+#define SCCB_CLOCK_HIGH_PERIOD_REG	(SCCB_I2C_base+0x1C)

+#define SCCB_DATA_REG					(SCCB_I2C_base+0x20)

+#define SCCB_START_SETUP_TIME_REG	(SCCB_I2C_base+0x24)

+#define SCCB_STOP_SETUP_TIME_REG		(SCCB_I2C_base+0x28)

+#define SCCB_MODE_REG					(SCCB_I2C_base+0x38)

+#define SCCB_BUFFER_CLEAR_REG			(SCCB_I2C_base+0x3C)

+#define SCCB_STATUS_REG					(SCCB_I2C_base+0x40)

+#define SCCB_READ_DATA_REG				(SCCB_I2C_base+0x44)

+#define REG_SCCB_CTRL					*((volatile unsigned short *) (SCCB_I2C_base+0x00))

+#define REG_SCCB_DATA_LENGTH			*((volatile unsigned short *) (SCCB_I2C_base+0x08))

+#define REG_SCCB_BUFFER_TIME			*((volatile unsigned short *) (SCCB_I2C_base+0x0C))

+#define REG_SCCB_START_HOLD_TIME		*((volatile unsigned short *) (SCCB_I2C_base+0x10))

+#define REG_SCCB_DATA_HOLD_TIME		*((volatile unsigned short *) (SCCB_I2C_base+0x14))

+#define REG_SCCB_CLOCK_LOW_PERIOD	*((volatile unsigned short *) (SCCB_I2C_base+0x18))

+#define REG_SCCB_CLOCK_HIGH_PERIOD	*((volatile unsigned short *) (SCCB_I2C_base+0x1C))

+#define REG_SCCB_DATA					*((volatile unsigned short *) (SCCB_I2C_base+0x20))

+#define REG_SCCB_START_SETUP_TIME	*((volatile unsigned short *) (SCCB_I2C_base+0x24))

+#define REG_SCCB_STOP_SETUP_TIME		*((volatile unsigned short *) (SCCB_I2C_base+0x28))

+#define REG_SCCB_MODE					*((volatile unsigned short *) (SCCB_I2C_base+0x38))

+#define REG_SCCB_BUFFER_CLEAR			*((volatile unsigned short *) (SCCB_I2C_base+0x3C))

+#define REG_SCCB_STATUS					*((volatile unsigned short *) (SCCB_I2C_base+0x40))

+#define REG_SCCB_READ_DATA				*((volatile unsigned short *) (SCCB_I2C_base+0x44))

+#if (defined(MT6226)||defined(MT6226M)||defined(MT6226D)||defined(MT6227)||defined(MT6227D)||defined(MT6229)||defined(MT6230)||defined(MT6223)||defined(MT6223P))

+#define REG_SCCB_READ_DATA_L			*((volatile unsigned short *) (SCCB_base+0x48)) //MT6227 New

+#endif // #if (defined(MT6226)||defined(MT6226M)||defined(MT6226D)||defined(MT6227)||defined(MT6227D)||defined(MT6229)||defined(MT6230)||defined(MT6223)||defined(MT6223P))

+#define SCCB_DATA_REG_ID_ADDRESS		0x100

+

+#define ENABLE_SCCB							REG_SCCB_CTRL = 0x01;

+#define DISABLE_SCCB							REG_SCCB_CTRL = 0x00;

+#define SET_SCCB_DATA_LENGTH(n)			REG_SCCB_DATA_LENGTH = (n-1);

+#define SET_SCCB_BUFFER_TIMER(n)			REG_SCCB_BUFFER_TIME = (n-1);

+#define SET_SCCB_START_HOLD_TIME(n)		REG_SCCB_START_HOLD_TIME =(n-1);

+#define SET_SCCB_DATA_HOLD_TIME(n)		REG_SCCB_DATA_HOLD_TIME = (n-1);

+#define SET_SCCB_CLK_LOW_PERIOD(n)		REG_SCCB_CLOCK_LOW_PERIOD = (n-1);

+#define SET_SCCB_CLK_HIGH_PERIOD(n)		REG_SCCB_CLOCK_HIGH_PERIOD = (n-1);

+#define SET_SCCB_START_SETUP_TIME(n)	REG_SCCB_START_SETUP_TIME =(n-1);

+#define SET_SCCB_STOP_SETUP_TIME(n)		REG_SCCB_STOP_SETUP_TIME = (n-1);

+#define CLEAR_SCCB_BUFFER					REG_SCCB_BUFFER_CLEAR =1;

+#define SET_SCCB_MASTER_MODE				REG_SCCB_MODE=1;

+#define SCCB_IS_READING						(!(REG_SCCB_STATUS & 0x01))

+#define SCCB_IS_WRITTING					(!(REG_SCCB_STATUS & 0x02))

+

+#endif // #if defined(__SCCB_MODULE_V1__)

+

+#ifdef __CUST_NEW__

+/* SW SCCB Define */

+#define SCCB_SERIAL_SW_CLK_PIN		(SCCB_SERIAL_CLK_PIN&~GPIO_MAGIC_NUM)

+#define SCCB_SERIAL_SW_DATA_PIN		(SCCB_SERIAL_DATA_PIN&~GPIO_MAGIC_NUM)

+#define SET_SCCB_CLK_OUTPUT		GPIO_InitIO_FAST(OUTPUT,SCCB_SERIAL_SW_CLK_PIN);

+#define SET_SCCB_DATA_OUTPUT		GPIO_InitIO_FAST(OUTPUT,SCCB_SERIAL_SW_DATA_PIN);

+#define SET_SCCB_DATA_INPUT		GPIO_InitIO_FAST(INPUT,SCCB_SERIAL_SW_DATA_PIN);

+#define SET_SCCB_CLK_HIGH			GPIO_WriteIO_FAST(1,SCCB_SERIAL_SW_CLK_PIN);

+#define SET_SCCB_CLK_LOW			GPIO_WriteIO_FAST(0,SCCB_SERIAL_SW_CLK_PIN);

+#define SET_SCCB_DATA_HIGH			GPIO_WriteIO_FAST(1,SCCB_SERIAL_SW_DATA_PIN);

+#define SET_SCCB_DATA_LOW			GPIO_WriteIO_FAST(0,SCCB_SERIAL_SW_DATA_PIN);

+#define GET_SCCB_DATA_BIT			GPIO_ReadIO_FAST(SCCB_SERIAL_SW_DATA_PIN)

+#else // #ifdef __CUST_NEW__

+/* SW SCCB Define */

+#define SET_SCCB_CLK_OUTPUT		GPIO_InitIO(OUTPUT,SCCB_SERIAL_CLK_PIN);

+#define SET_SCCB_DATA_OUTPUT		GPIO_InitIO(OUTPUT,SCCB_SERIAL_DATA_PIN);

+#define SET_SCCB_DATA_INPUT		GPIO_InitIO(INPUT,SCCB_SERIAL_DATA_PIN);

+#define SET_SCCB_CLK_HIGH			GPIO_WriteIO(1,SCCB_SERIAL_CLK_PIN);

+#define SET_SCCB_CLK_LOW			GPIO_WriteIO(0,SCCB_SERIAL_CLK_PIN);

+#define SET_SCCB_DATA_HIGH			GPIO_WriteIO(1,SCCB_SERIAL_DATA_PIN);

+#define SET_SCCB_DATA_LOW			GPIO_WriteIO(0,SCCB_SERIAL_DATA_PIN);

+#define GET_SCCB_DATA_BIT			GPIO_ReadIO(SCCB_SERIAL_DATA_PIN)

+#endif // #ifdef __CUST_NEW__

+

+#define ACK_BIT \

+{\

+	kal_uint32 i;\

+	SET_SCCB_CLK_LOW; \

+	for (i=0; i<SCCB_DELAY; i++); \

+	SET_SCCB_DATA_OUTPUT; \

+	SET_SCCB_DATA_LOW; \

+	for (i=0; i<SCCB_DELAY; i++); \

+	SET_SCCB_CLK_HIGH; \

+	for (i=0; i<SCCB_DELAY; i++); \

+	SET_SCCB_CLK_LOW; \

+	for (i=0;i<SCCB_DELAY;i++);\

+}

+

+#define NACK_BIT \

+{\

+	kal_uint32 z;\

+	for (z=0; z<SCCB_DELAY; z++); \

+	SET_SCCB_DATA_OUTPUT; \

+	for (z=0; z<SCCB_DELAY; z++); \

+	SET_SCCB_DATA_HIGH; \

+	for (z=0; z<SCCB_DELAY; z++); \

+	SET_SCCB_CLK_HIGH; \

+	for (z=0; z<SCCB_DELAY; z++); \

+	SET_SCCB_CLK_LOW; \

+	for (z=0;z<SCCB_DELAY;z++);\

+}

+

+#define SCCB_START_TRANSMISSION	\

+{\

+	kal_uint32 z;\

+	SET_SCCB_DATA_OUTPUT;\

+   SET_SCCB_DATA_LOW;\

+   for (z=0;z<SCCB_DELAY;z++);\

+	SET_SCCB_CLK_LOW;\

+	for (z=0;z<SCCB_DELAY;z++);\

+}

+

+#define SCCB_STOP_TRANSMISSION	\

+{\

+	kal_uint32 z;\

+	SET_SCCB_DATA_OUTPUT;\

+	SET_SCCB_DATA_LOW;\

+	for (z=0;z<SCCB_DELAY;z++);\

+   SET_SCCB_CLK_HIGH;\

+   for (z=0;z<SCCB_DELAY;z++);\

+	SET_SCCB_DATA_HIGH;\

+	for (z=0;z<SCCB_DELAY;z++);\

+}

+

+

+/* Interface */

+typedef enum

+{

+   SCCB_SW_8BIT=1,

+   SCCB_SW_16BIT,

+   SCCB_HW_8BIT,

+   SCCB_HW_16BIT

+} SCCB_MODE_ENUM;

+

+typedef struct{

+	kal_uint8 TBUF;

+	kal_uint8 THDSTA;

+	kal_uint8 THDDTA;

+	kal_uint8 TLOW;

+	kal_uint8 THIGH;

+	//kal_uint8 TSUSTA;

+	kal_uint8 TSUSTO;

+} SCCB_FREQ_STRUCT;

+

+

+

+// SCCB PINS definition

+

+

+#ifdef __CUST_NEW__

+#include "gpio_sw.h"

+extern const char gpio_sccb_serial_clk_pin;

+extern const char gpio_sccb_serial_data_pin;

+#endif // #ifdef __CUST_NEW__

+

+#if (defined(MT6276))

+   #ifdef __CUST_NEW__

+   #define SCCB_SERIAL_CLK_PIN           (76|GPIO_MAGIC_NUM)

+   #define SCCB_SERIAL_DATA_PIN          (77|GPIO_MAGIC_NUM)

+   #else /* __CUST_NEW__ */

+   #define SCCB_SERIAL_CLK_PIN           76

+   #define SCCB_SERIAL_DATA_PIN          77

+   #endif /* __CUST_NEW__ */

+   #define SCCB_GPIO_SCL_MODE            1

+   #define SCCB_GPIO_SDA_MODE            1

+#elif (defined(MT6255)||defined(MT6256))

+   #ifdef __CUST_NEW__

+   #define SCCB_SERIAL_CLK_PIN           (54|GPIO_MAGIC_NUM)

+   #define SCCB_SERIAL_DATA_PIN          (55|GPIO_MAGIC_NUM)

+   #else /* __CUST_NEW__ */

+   #define SCCB_SERIAL_CLK_PIN           54

+   #define SCCB_SERIAL_DATA_PIN          55

+   #endif /* __CUST_NEW__ */

+   #define SCCB_GPIO_SCL_MODE            1

+   #define SCCB_GPIO_SDA_MODE            1

+#endif

+

+#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6226D)||defined(MT6227)||defined(MT6227D))

+  #ifdef __CUST_NEW__

+    #define SCCB_SERIAL_CLK_PIN          (8|GPIO_MAGIC_NUM)

+    #define SCCB_SERIAL_DATA_PIN         (9|GPIO_MAGIC_NUM)

+  #else // #ifdef __CUST_NEW__

+    #define SCCB_SERIAL_CLK_PIN          8

+    #define SCCB_SERIAL_DATA_PIN         9

+  #endif // #ifdef __CUST_NEW__

+#endif // #if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6226D)||defined(MT6227)||defined(MT6227D))

+

+#if (defined(MT6228)||defined(MT6229)||defined(MT6230))

+  #ifdef __CUST_NEW__

+    #if (defined(DVT_TEST))

+    #define SCCB_SERIAL_CLK_PIN          (8|GPIO_MAGIC_NUM)

+    #define SCCB_SERIAL_DATA_PIN         (9|GPIO_MAGIC_NUM)

+    #else // #if (defined(DVT_TEST))

+    #define SCCB_SERIAL_CLK_PIN          (2|GPIO_MAGIC_NUM)

+    #define SCCB_SERIAL_DATA_PIN         (3|GPIO_MAGIC_NUM)

+    #endif // #if (defined(DVT_TEST))

+  #else // #ifdef __CUST_NEW__

+    #if (defined(DVT_TEST))

+    #define SCCB_SERIAL_CLK_PIN          8

+    #define SCCB_SERIAL_DATA_PIN         9

+    #else // #if (defined(DVT_TEST))

+    #define SCCB_SERIAL_CLK_PIN          2

+    #define SCCB_SERIAL_DATA_PIN         3

+    #endif // #if (defined(DVT_TEST))

+  #endif // #ifdef __CUST_NEW__

+#endif // #if (defined(MT6228)||defined(MT6229)||defined(MT6230))

+

+

+#if (defined(DRV_GPIO_REG_AS_6223))

+  #ifdef __CUST_NEW__

+    #define SCCB_SERIAL_CLK_PIN          gpio_sccb_serial_clk_pin

+    #define SCCB_SERIAL_DATA_PIN         gpio_sccb_serial_data_pin

+  #else // #ifdef __CUST_NEW__

+    #define SCCB_SERIAL_CLK_PIN          15

+    #define SCCB_SERIAL_DATA_PIN         19

+  #endif // #ifdef __CUST_NEW__

+  #define SCCB_GPIO_SCL_MODE             3

+  #define SCCB_GPIO_SDA_MODE             3

+#endif // #if (defined(DRV_GPIO_REG_AS_6223))

+

+

+#if (defined(DRV_GPIO_REG_AS_6225))

+   #ifdef __CUST_NEW__

+   #define SCCB_SERIAL_CLK_PIN		(8|GPIO_MAGIC_NUM)

+   #define SCCB_SERIAL_DATA_PIN		(9|GPIO_MAGIC_NUM)

+   #else /* __CUST_NEW__ */

+   #define SCCB_SERIAL_CLK_PIN		8

+   #define SCCB_SERIAL_DATA_PIN		9

+   #endif /* __CUST_NEW__ */

+  #define SCCB_GPIO_SCL_MODE             1

+  #define SCCB_GPIO_SDA_MODE             1

+#endif // #if (defined(DRV_GPIO_REG_AS_6225))

+

+#if (defined(DRV_GPIO_REG_AS_6238))

+   #ifdef __CUST_NEW__

+   #define SCCB_SERIAL_CLK_PIN		(5|GPIO_MAGIC_NUM)

+   #define SCCB_SERIAL_DATA_PIN		(6|GPIO_MAGIC_NUM)

+   #else /* __CUST_NEW__ */

+   #define SCCB_SERIAL_CLK_PIN		5

+   #define SCCB_SERIAL_DATA_PIN		6

+   #endif /* __CUST_NEW__ */

+#endif // #if (defined(DRV_GPIO_6238_SERIES))

+

+

+#if (defined(DRV_GPIO_REG_AS_6235))

+   #ifdef __CUST_NEW__

+     #if defined(EMPTY_MMI)

+       #define SCCB_SERIAL_CLK_PIN		(15|GPIO_MAGIC_NUM)

+       #define SCCB_SERIAL_DATA_PIN		(16|GPIO_MAGIC_NUM)

+     #else // #if defined(EMPTY_MMI)

+	   #define SCCB_SERIAL_CLK_PIN		gpio_sccb_serial_clk_pin

+       #define SCCB_SERIAL_DATA_PIN		gpio_sccb_serial_data_pin

+      #endif // #if defined(EMPTY_MMI)

+   #else /* __CUST_NEW__ */

+   #define SCCB_SERIAL_CLK_PIN		15

+   #define SCCB_SERIAL_DATA_PIN		16

+   #endif /* __CUST_NEW__ */

+#endif // #if (defined(DRV_GPIO_6235_SERIES))

+

+#if (defined(DRV_GPIO_REG_AS_6268A))

+   #ifdef __CUST_NEW__

+   #define SCCB_SERIAL_CLK_PIN		(36|GPIO_MAGIC_NUM)

+   #define SCCB_SERIAL_DATA_PIN		(37|GPIO_MAGIC_NUM)

+   #else /* __CUST_NEW__ */

+   #define SCCB_SERIAL_CLK_PIN		36

+   #define SCCB_SERIAL_DATA_PIN		37

+   #endif /* __CUST_NEW__ */

+#endif // #if (defined(DRV_GPIO_REG_AS_6268A))

+

+#if(defined(DRV_GPIO_REG_AS_6268))

+   #ifdef __CUST_NEW__

+   #define SCCB_SERIAL_CLK_PIN           (33|GPIO_MAGIC_NUM)

+   #define SCCB_SERIAL_DATA_PIN          (34|GPIO_MAGIC_NUM)

+   #else // #ifdef __CUST_NEW__

+   #define SCCB_SERIAL_CLK_PIN           33

+   #define SCCB_SERIAL_DATA_PIN          34

+   #endif // #ifdef __CUST_NEW__

+   #define SCCB_GPIO_SCL_MODE            1

+   #define SCCB_GPIO_SDA_MODE            1

+#endif // #if(defined(DRV_GPIO_REG_AS_6268))

+

+#if (defined(DRV_GPIO_REG_AS_6253T))

+   #ifdef __CUST_NEW__

+   #define SCCB_SERIAL_CLK_PIN		(24|GPIO_MAGIC_NUM)

+   #define SCCB_SERIAL_DATA_PIN		(25|GPIO_MAGIC_NUM)

+   #else /* __CUST_NEW__ */

+   #define SCCB_SERIAL_CLK_PIN		24

+   #define SCCB_SERIAL_DATA_PIN		25

+   #endif /* __CUST_NEW__ */

+   #define SCCB_GPIO_SCL_MODE            2

+   #define SCCB_GPIO_SDA_MODE            2

+#endif // #if (defined(DRV_GPIO_REG_AS_6253T))

+

+

+#if (defined(DRV_GPIO_REG_AS_6253E)&&defined(MT6253E)&&defined(__SERIAL_SENSOR_V1_SUPPORT__))

+   #ifdef __CUST_NEW__

+   #define SCCB_SERIAL_CLK_PIN		(24|GPIO_MAGIC_NUM)

+   #define SCCB_SERIAL_DATA_PIN		(25|GPIO_MAGIC_NUM)

+   #else /* __CUST_NEW__ */

+   #define SCCB_SERIAL_CLK_PIN		24

+   #define SCCB_SERIAL_DATA_PIN		25

+   #endif /* __CUST_NEW__ */

+   #define SCCB_GPIO_SCL_MODE            2

+   #define SCCB_GPIO_SDA_MODE            2

+#elif (defined(DRV_GPIO_REG_AS_6253E)&&defined(MT6253E))

+   #ifdef __CUST_NEW__

+   #define SCCB_SERIAL_CLK_PIN		(22|GPIO_MAGIC_NUM)

+   #define SCCB_SERIAL_DATA_PIN		(23|GPIO_MAGIC_NUM)

+   #else /* __CUST_NEW__ */

+   #define SCCB_SERIAL_CLK_PIN		22

+   #define SCCB_SERIAL_DATA_PIN		23

+   #endif /* __CUST_NEW__ */

+   #define SCCB_GPIO_SCL_MODE            3

+   #define SCCB_GPIO_SDA_MODE            3

+#endif 

+

+#if (defined(DRV_GPIO_REG_AS_6253E)&&defined(MT6253L))

+   #ifdef __CUST_NEW__

+   #define SCCB_SERIAL_CLK_PIN		(24|GPIO_MAGIC_NUM)

+   #define SCCB_SERIAL_DATA_PIN		(25|GPIO_MAGIC_NUM)

+   #else /* __CUST_NEW__ */

+   #define SCCB_SERIAL_CLK_PIN		24

+   #define SCCB_SERIAL_DATA_PIN		25

+   #endif /* __CUST_NEW__ */

+   #define SCCB_GPIO_SCL_MODE            2

+   #define SCCB_GPIO_SDA_MODE            2

+#endif 

+

+#if (defined(DRV_GPIO_REG_AS_6236))

+   #ifdef __CUST_NEW__

+   #define SCCB_SERIAL_CLK_PIN           (29|GPIO_MAGIC_NUM)

+   #define SCCB_SERIAL_DATA_PIN          (30|GPIO_MAGIC_NUM)

+   #else /* __CUST_NEW__ */

+   #define SCCB_SERIAL_CLK_PIN      29

+   #define SCCB_SERIAL_DATA_PIN     30

+#endif /*__CUST_NEW__*/

+   #define SCCB_GPIO_SCL_MODE            1

+   #define SCCB_GPIO_SDA_MODE            1

+#endif // #if (defined(DRV_GPIO_REG_AS_6236))

+

+

+///Bin: added to patch build error

+#ifndef SCCB_SERIAL_CLK_PIN

+   #define SCCB_SERIAL_CLK_PIN		gpio_sccb_serial_clk_pin

+#endif

+

+#ifndef SCCB_SERIAL_DATA_PIN

+   #define SCCB_SERIAL_DATA_PIN		gpio_sccb_serial_data_pin

+#endif

+

+/* Extern Global Variable */

+void init_sccb(void);

+// MoDIS parser skip start

+// The following APIs are implemented in other dummy API files

+kal_uint8 sccb_config(kal_uint8 mode, kal_uint8 wid, kal_uint8 rid, SCCB_FREQ_STRUCT *freq);

+// MoDIS parser skip end

+kal_uint8 sccb_getMode(void);

+void sccb_setDelay(kal_uint32 delay);

+

+#if defined(__SCCB_MODULE_V1__)

+void sccb_write(kal_uint32 cmd, kal_uint32 param);

+void sccb_multi_write(kal_uint32 cmd, kal_uint32 *param, kal_uint8 num);

+void sccb_cont_write(kal_uint32 cmd, kal_uint32 spec_cmd, kal_uint32 param);

+kal_uint32 sccb_read (kal_uint32 cmd);

+kal_uint32 sccb_phase3_read (kal_uint32 cmd);

+kal_uint32 sccb_cont_read (kal_uint32 cmd, kal_uint32 spec_cmd);

+kal_uint8 sccb_multi_read (kal_uint32 cmd, kal_uint32 *param, kal_uint8 num);

+#endif // #if defined(__SCCB_MODULE_V1__)

+

+#endif // #ifndef __SCCB_H__

+

diff --git a/mcu/interface/driver/hwdrv/sccb_v2.h b/mcu/interface/driver/hwdrv/sccb_v2.h
new file mode 100644
index 0000000..e542fc2
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/sccb_v2.h
@@ -0,0 +1,595 @@
+/*****************************************************************************
+*  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.h
+ *
+ *
+ * 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!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ *****************************************************************************/
+#ifndef __SCCB_V2_H__
+#define __SCCB_V2_H__
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if (defined(DRV_I2C_25_SERIES))
+/* 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 __DRV_DEBUG_I2C_REG_READ_WRITE__
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#else // #ifndef __DRV_DEBUG_PMU_REG_READ_WRITE__
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif // #ifndef __DRV_DEBUG_PMU_REG_READ_WRITE__
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if defined(DRV_I2C_CLOCK_RATE_15_360_MHZ)
+/* under construction !*/
+#elif defined(DRV_I2C_CLOCK_RATE_3_000_MHZ)
+/* under construction !*/
+#else // #if defined(DRV_I2C_CLOCK_RATE_15_360_MHZ)
+/* under construction !*/
+#endif // #if defined(DRV_I2C_CLOCK_RATE_15_360_MHZ)
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if defined(__MEUT__)
+/* under construction !*/
+#endif // #if defined(__MEUT__)
+/* under construction !*/
+#ifdef I2C_V2_DVT
+  #if !defined(DRV_I2C_DMA_ENABLED)
+/* under construction !*/
+  #endif // #if !defined(DRV_I2C_DMA_ENABLED)
+#endif // #ifdef I2C_V2_DVT
+/* under construction !*/
+#if (defined(DRV_I2C_DMA_ENABLED))
+/* under construction !*/
+#endif // #if (defined(DRV_I2C_DMA_ENABLED))
+/* 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 !*/
+#if defined(DRV_I2C_CLOCK_RATE_15_360_MHZ)
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#elif defined(DRV_I2C_CLOCK_RATE_3_000_MHZ)
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#else // #if defined(DRV_I2C_CLOCK_RATE_15_360_MHZ)
+/* 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 // #if defined(DRV_I2C_CLOCK_RATE_15_360_MHZ)
+/* 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 !*/
+	#if (defined(DRV_I2C_DMA_ENABLED))
+/* under construction !*/
+	#endif // #if (defined(DRV_I2C_DMA_ENABLED))
+/* 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 !*/
+	#if (defined(DRV_I2C_DMA_ENABLED))
+/* under construction !*/
+	#endif // #if (defined(DRV_I2C_DMA_ENABLED))
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if defined(__SUPPORT_SCCB_XXX_API__)
+/* under construction !*/
+#if(defined(DRV_GPIO_6223_SERIES))
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+   #if defined(SCCB_SERIAL_CLK_PIN)
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+   #endif // #if defined(SCCB_SERIAL_CLK_PIN)
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif // #if(defined(DRV_GPIO_6223_SERIES))
+/* under construction !*/
+#endif // #if defined(__SUPPORT_SCCB_XXX_API__)
+/* under construction !*/
+ #ifndef DRV_I2C_OFF
+/* 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 //  DRV_I2C_OFF
+/* 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 !*/
+/* 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 !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if defined(DRV_I2C_DIRECT_CONFIG_DMA_REGISTER)
+/* 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 // #if defined(DRV_I2C_DIRECT_CONFIG_DMA_REGISTER)
+/* 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 !*/
+#if (defined(DRV_I2C_DMA_ENABLED))
+/* under construction !*/
+#endif // #if (defined(DRV_I2C_DMA_ENABLED))
+/* under construction !*/
+#if defined(DRV_I2C_25_SERIES)
+#if defined(__SUPPORT_SCCB_XXX_API__)
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif // #if defined(__SUPPORT_SCCB_XXX_API__)
+#endif // #if defined(DRV_I2C_25_SERIES)
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif // #if (defined(DRV_I2C_25_SERIES))
+/* under construction !*/
+#endif // #ifndef __SCCB_V2_H__
+
+#endif // #ifndef __SCCB_V2_H__
+
diff --git a/mcu/interface/driver/hwdrv/sccb_v2.h_ b/mcu/interface/driver/hwdrv/sccb_v2.h_
new file mode 100755
index 0000000..53481b8
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/sccb_v2.h_
@@ -0,0 +1,596 @@
+/*****************************************************************************

+*  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.h

+ *

+ *

+ * Description:

+ * ------------

+ *   SCCB/I2C V2 Driver

+ *

+ * Author:

+ * -------

+ *   Scott Hung (mtk01235)

+ *

+ *============================================================================

+ *             HISTORY

+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!

+ *------------------------------------------------------------------------------

+ * $Revision: $

+ * $Modtime: $

+ * $Log: $

+ *

+ * 04 24 2012 wcpuser_integrator

+ * [MAUI_03155806] [MSBB2] Global Revise Clear and Uniform Legacy Header File Inclusion Requested by JI Huang

+ * .

+ *

+ * 11 30 2010 guoxin.hong

+ * [MAUI_02841708] [Drv] MAUI HAL Peripheral Create

+ * .

+ *

+ * 11 23 2010 shuang.han

+ * [MAUI_02840976] [HAL][Drv] driver feature option files merge back to MAUI

+ * .

+ *

+ * 10 18 2010 shuang.han

+ * [MAUI_02637814] [RHR][MAUIW1038OF_RHR] Integration to W10.43

+ * .

+ *

+ * May 19 2010 mtk01845

+ * [MAUI_02529366] [Drv] I2C patch for MT6236 sanity failed

+ * 

+ *

+ * May 15 2010 mtk02787

+ * [MAUI_02524954] I2C "write then read" fail

+ * 

+ *

+ * May 6 2010 mtk02787

+ * [MAUI_02416501] add function definition in sccb_v2.h to avoid build warning

+ * 

+ *

+ * Apr 15 2010 mtk02787

+ * [MAUI_02397396] I2C V1 phase out

+ * 

+ *

+ * Apr 14 2010 mtk02787

+ * [MAUI_02392155] [MEUT] Check in driver on/off function to Maui

+ * 

+ *

+ * Mar 31 2010 mtk02787

+ * [MAUI_02385929] I2C DMA mode

+ * 

+ *

+ * Feb 22 2010 mtk01845

+ * [MAUI_02360180] [Drv][I2C] I2C driver revision for new DMA architecture from MT6276

+ * 

+ *

+ * Feb 20 2010 mtk01845

+ * [MAUI_02360180] [Drv][I2C] I2C driver revision for new DMA architecture from MT6276

+ *

+ *

+ * Oct 12 2009 mtk01845

+ * [MAUI_01963866] [Drv][I2C] sccb.h define I2C pins

+ *

+ *

+ * May 9 2009 mtk01845

+ * [MAUI_01319629] [Drv] MEUT check in

+ *

+ *

+ * Jan 12 2009 mtk01845

+ * [MAUI_01307296] MT6235 charger constant current CC6 and CC7 change to internal use

+ *

+ *

+ * Nov 6 2008 mtk01845

+ * [MAUI_01269587] [Drv] MT6253T merge back to MAUI

+ *

+ *

+ * Jun 21 2008 mtk01845

+ * [MAUI_00791553] [Drv] MT6268A merge DVT code back to MAUI

+ *

+ *

+ * Jun 20 2008 mtk01845

+ * [MAUI_00791553] [Drv] MT6268A merge DVT code back to MAUI

+ *

+ *

+ * Apr 22 2008 mtk01845

+ * [MAUI_00760971] [Drv][MoDIS] Add driver API functions into MoDIS dummy driver

+ *

+ *

+ * Nov 9 2007 mtk01283

+ * [MAUI_00573819] [Drv][Compile option] Check in MT6235 compile option to Maui

+ *

+ *

+ * Aug 6 2007 mtk01283

+ * [MAUI_00529681] [Drv] Remove compile warning in driver codes

+ * 

+ *

+ * Mar 19 2007 mtk01235

+ * [MAUI_00359681] [Drv][Compile Option] Add MT6223 and MT6223P compile option

+ *

+ *

+ * Jan 30 2007 MTK01235

+ * [MAUI_00363041] [Drv]Driver Feature Management

+ *

+ *

+ * Nov 20 2006 MTK01235

+ * [MAUI_00338437] [I2C] Check in I2C/SCCB V2 driver

+ *

+ *

+ * Oct 25 2006 mtk01235

+ * [MAUI_00338437] [I2C] Check in I2C/SCCB V2 driver

+ *

+ *------------------------------------------------------------------------------

+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!

+ *============================================================================

+ *****************************************************************************/

+#ifndef __SCCB_V2_H__

+#define __SCCB_V2_H__

+

+

+#include "drv_features_i2c.h"

+

+#if (defined(DRV_I2C_25_SERIES))

+//#if (defined(MT6225))

+

+#include "sccb.h"

+#include "intrCtrl.h"

+#include "drv_comm.h"

+#include "sccb_v2_custom.h"

+#define SCCB_OWNER_HEADER_FILE_INCLUDED

+

+//MSBB remove #include "kal_non_specific_general_types.h"

+#include "reg_base.h"

+

+

+#ifndef __DRV_DEBUG_I2C_REG_READ_WRITE__

+#define DRV_I2C_ClearBits16(addr, data)             DRV_ClearBits(addr,data)

+#define DRV_I2C_SetBits16(addr, data)               DRV_SetBits(addr,data)

+#define DRV_I2C_WriteReg16(addr, data)              DRV_WriteReg(addr, data)

+#define DRV_I2C_ReadReg16(addr)                     DRV_Reg(addr)

+#define DRV_I2C_SetData16(addr, bitmask, value)     DRV_SetData(addr, bitmask, value)

+#else // #ifndef __DRV_DEBUG_PMU_REG_READ_WRITE__

+#define DRV_I2C_ClearBits16(addr,data)              DRV_DBG_ClearBits(addr,data)

+#define DRV_I2C_SetBits16(addr)                     DRV_DBG_SetBits(addr)

+#define DRV_I2C_WriteReg16(addr, data)              DRV_DBG_WriteReg(addr, data)

+#define DRV_I2C_ReadReg16(addr)                     DRV_DBG_Reg(addr)

+#define DRV_I2C_SetData16(addr, bitmask, value)     DRV_DBG_SetData(addr, bitmask, value)

+#endif // #ifndef __DRV_DEBUG_PMU_REG_READ_WRITE__

+

+#define I2C_MODULE_FIFO_DEPTH    8

+

+

+#define SCCB_MAXIMUM_TRANSACTION_LENGTH 8  // SCCB backward compatible

+

+

+#if defined(DRV_I2C_CLOCK_RATE_15_360_MHZ)

+#define SCCB_CLOCK_RATE	15360 //15.36MHz

+#elif defined(DRV_I2C_CLOCK_RATE_3_000_MHZ)

+#define SCCB_CLOCK_RATE	3000 //3.0MHz

+#else // #if defined(DRV_I2C_CLOCK_RATE_15_360_MHZ)

+#define SCCB_CLOCK_RATE	13000 //13MHz

+#endif // #if defined(DRV_I2C_CLOCK_RATE_15_360_MHZ)

+

+

+

+#if defined(__MEUT__)

+#define I2C_V2_DVT

+#endif // #if defined(__MEUT__)

+

+#ifdef I2C_V2_DVT

+  #if !defined(DRV_I2C_DMA_ENABLED)

+    #define DRV_I2C_DMA_ENABLED //Only used in DVT

+  #endif // #if !defined(DRV_I2C_DMA_ENABLED)

+#endif // #ifdef I2C_V2_DVT

+

+#if (defined(DRV_I2C_DMA_ENABLED))

+#include "dma_hw.h"

+#endif // #if (defined(DRV_I2C_DMA_ENABLED))

+

+// Some common structures are defined in sccb.h

+

+typedef enum

+{

+	SCCB_TRANSACTION_COMPLETE,

+	SCCB_TRANSACTION_FAIL

+}SCCB_TRANSACTION_RESULT;

+

+

+typedef enum

+{

+	SCCB_READY_STATE,

+	SCCB_BUSY_STATE

+}SCCB_STATE;

+

+/* Transaction mode for new SCCB APIs */

+typedef enum

+{

+	SCCB_TRANSACTION_FAST_MODE,

+	SCCB_TRANSACTION_HIGH_SPEED_MODE

+}SCCB_TRANSACTION_MODE;

+

+typedef enum

+{

+#if defined(DRV_I2C_CLOCK_RATE_15_360_MHZ)

+	// Module source clock is 15.36Mhz

+	SCCB_100KB,       //99.74KB

+	SCCB_200KB,       //196.9KB

+	SCCB_300KB,       //295.4KB

+	SCCB_400KB,	      //384.0KB

+	/* HS Mode */

+	SCCB_960KB,       //960.0KB

+	SCCB_1280KB,      //1280.0KB

+	SCCB_1536KB,      //1536.0KB

+	SCCB_1920KB,      //1920.0KB

+	SCCB_2560KB,      //2560.0KB

+	SCCB_3840KB       //3840.0KB

+#elif defined(DRV_I2C_CLOCK_RATE_3_000_MHZ)

+    // Module source clock is 3.0Mhz

+    SCCB_100KB,       //100.0KB

+	SCCB_200KB,       //196.9KB

+	SCCB_400KB,       //384.0KB

+	/* HS Mode */

+	SCCB_750KB,       //750.0KB

+	SCCB_1500KB       //1500.0KB

+#else // #if defined(DRV_I2C_CLOCK_RATE_15_360_MHZ)

+	// Module source clock is 13Mhz

+	SCCB_100KB,       //101.5KB

+	SCCB_200KB,       //203.1KB

+	SCCB_300KB,       //295.5KB

+	SCCB_400KB,       //382.4KB

+	/* HS Mode */

+	SCCB_460KB,       //464.3KB

+	SCCB_540KB,       //541.7KB

+	SCCB_650KB,       //650.0KB

+	SCCB_720KB,       //722.0KB

+

+	SCCB_810KB,       //812.5KB

+	SCCB_930KB,       //928.6KB

+	SCCB_1100KB,      //1083.3KB

+	SCCB_1300KB,      //1300.0KB

+	SCCB_1625KB,      //1625.0KB

+	SCCB_2150KB,      //2166.6KB

+	SCCB_3250KB	      //3250.6KB

+#endif // #if defined(DRV_I2C_CLOCK_RATE_15_360_MHZ)

+}SCCB_SPEED_ENUM;

+

+typedef struct

+{

+	kal_uint8 sccb_mode; // Transaction mode for existing SCCB APIs

+

+	kal_bool get_handle_wait; //When get handle wait until the sccb is avaliable

+

+	kal_uint8 slave_address;	//the address of the slave device

+

+	kal_uint8 delay_len;	//number of half pulse between transfers in a trasaction

+

+	SCCB_TRANSACTION_MODE transaction_mode;	//SCCB_TRANSACTION_FAST_MODE or SCCB_TRANSACTION_HIGH_SPEED_MODE

+

+	kal_uint32 Fast_Mode_Speed;	//The speed of sccb fast mode(Kb)

+

+	kal_uint32 HS_Mode_Speed;	//The speed of sccb high speed mode(Kb)

+

+	#if (defined(DRV_I2C_DMA_ENABLED))

+	kal_bool	is_DMA_enabled;	//Transaction via DMA instead of 8-byte FIFO

+	#endif // #if (defined(DRV_I2C_DMA_ENABLED))

+

+}sccb_config_struct;

+

+typedef struct

+{

+	sccb_config_struct  sccb_config;

+

+	kal_uint8 fs_sample_cnt_div;     //these two parameters are used to specify sccb clock rate

+	kal_uint8 fs_step_cnt_div;       //half pulse width=step_cnt_div*sample_cnt_div*(1/13Mhz)

+

+	kal_uint8 hs_sample_cnt_div;     //these two parameters are used to specify sccb clock rate

+	kal_uint8 hs_step_cnt_div;       //half pulse width=step_cnt_div*sample_cnt_div*(1/13Mhz)

+

+	SCCB_TRANSACTION_RESULT transaction_result; /* The result of the end of transaction

+	                                               (SCCB_TRANSACTION_COMPLETE|SCCB_TRANSACTION_FAIL) */

+

+}sccb_handle_struct;

+

+typedef struct

+{

+	volatile SCCB_STATE  state;

+	kal_uint8	 owner;

+

+	kal_uint8	number_of_read;

+	kal_uint8*	read_buffer;

+

+	#if (defined(DRV_I2C_DMA_ENABLED))

+	kal_bool	is_DMA_enabled;

+	#endif // #if (defined(DRV_I2C_DMA_ENABLED))

+

+}sccb_status_struct;

+

+

+#if defined(__SUPPORT_SCCB_XXX_API__)

+

+#if(defined(DRV_GPIO_6223_SERIES))

+   // Need to check the history

+   // When platform is 6223, without __CUST_NEW__

+   // The SCL and SDA in sccb.h is 15, 19

+   // In spec, the SCL, SDA is 45, 46

+   #if defined(SCCB_SERIAL_CLK_PIN)

+      // It means someone include sccb_v2.h

+      // Driver should use the SCL, SDA defined in sccb_v2.h

+      #undef SCCB_SERIAL_CLK_PIN

+      #undef SCCB_SERIAL_DATA_PIN

+      #undef SCCB_GPIO_SCL_MODE

+      #undef SCCB_GPIO_SDA_MODE

+   #endif // #if defined(SCCB_SERIAL_CLK_PIN)

+

+   #define SCCB_SERIAL_CLK_PIN		45

+   #define SCCB_SERIAL_DATA_PIN		46

+   #define SCCB_GPIO_SCL_MODE       3

+   #define SCCB_GPIO_SDA_MODE       3

+#endif // #if(defined(DRV_GPIO_6223_SERIES))

+

+#endif // #if defined(__SUPPORT_SCCB_XXX_API__)

+

+ #ifndef DRV_I2C_OFF

+/* Register Definitions */

+#define REG_I2C_DATA_PORT             (I2C_base + 0x00)

+#define REG_I2C_SLAVE_ADDR            (I2C_base + 0x04)

+#define REG_I2C_INT_MASK              (I2C_base + 0x08)

+#define REG_I2C_INT_STA               (I2C_base + 0x0c)

+#define REG_I2C_CONTROL               (I2C_base + 0x10)

+#define REG_I2C_TRANSFER_LEN          (I2C_base + 0x14)

+#define REG_I2C_TRANSAC_LEN           (I2C_base + 0x18)

+#define REG_I2C_DELAY_LEN             (I2C_base + 0x1c)

+#define REG_I2C_TIMING                (I2C_base + 0x20)

+#define REG_I2C_START                 (I2C_base + 0x24)

+#define REG_I2C_FIFO_STAT             (I2C_base + 0x30)

+#define REG_I2C_FIFO_THRESH           (I2C_base + 0x34)

+#define REG_I2C_FIFO_ADDR_CLR         (I2C_base + 0x38)

+#define REG_I2C_IO_CONFIG             (I2C_base + 0x40)

+#define REG_I2C_MULTI_MASTER          (I2C_base + 0x44)

+#define REG_I2C_HS_MODE               (I2C_base + 0x48)

+#define REG_I2C_SOFTRESET             (I2C_base + 0x50)

+#endif //  DRV_I2C_OFF

+

+/* Register masks */

+#define I2C_1_BIT_MASK                0x01

+#define I2C_3_BIT_MASK                0x07

+#define I2C_4_BIT_MASK                0x0f

+#define I2C_6_BIT_MASK                0x3f

+#define I2C_8_BIT_MASK                0xff

+

+#define I2C_RX_FIFO_THRESH_MASK       0x0007

+#define I2C_RX_FIFO_THRESH_SHIFT      0

+#define I2C_TX_FIFO_THRESH_MASK       0x0700

+#define I2C_TX_FIFO_THRESH_SHIFT      8

+

+#define I2C_AUX_LEN_MASK              0x1f00

+#define I2C_AUX_LEN_SHIFT             8

+

+#define I2C_SAMPLE_CNT_DIV_MASK       0x0700

+#define I2C_SAMPLE_CNT_DIV_SHIFT      8

+#define I2C_DATA_READ_TIME_MASK       0x7000

+#define I2C_DATA_READ_TIME_SHIFT      12

+

+#define I2C_MASTER_READ               0x01

+#define I2C_MASTER_WRITE              0x00

+

+//#define I2C_CTL_MODE_BIT            0x01

+#define I2C_CTL_RS_STOP_BIT           0x02

+#define I2C_CTL_DMA_EN_BIT            0x04

+#define I2C_CTL_CLK_EXT_EN_BIT        0x08

+#define I2C_CTL_DIR_CHANGE_BIT        0x10

+#define I2C_CTL_ACK_ERR_DET_BIT       0x20

+#define I2C_CTL_TRANSFER_LEN_CHG_BIT  0x40

+

+#define I2C_DATA_READ_ADJ_BIT         0x8000

+

+#define I2C_SCL_MODE_BIT              0x01

+#define I2C_SDA_MODE_BIT              0x02

+#define I2C_BUS_DETECT_EN_BIT         0x04

+

+#define I2C_ARBITRATION_BIT           0x01

+#define I2C_CLOCK_SYNC_BIT            0x02

+#define I2C_BUS_BUSY_DET_BIT          0x04

+

+#define I2C_HS_EN_BIT                 0x01

+#define I2C_HS_NACK_ERR_DET_EN_BIT    0x02

+#define I2C_HS_MASTER_CODE_MASK       0x0070

+#define I2C_HS_MASTER_CODE_SHIFT      4

+#define I2C_HS_STEP_CNT_DIV_MASK      0x0700

+#define I2C_HS_STEP_CNT_DIV_SHIFT     8

+#define I2C_HS_SAMPLE_CNT_DIV_MASK    0x7000

+#define I2C_HS_SAMPLE_CNT_DIV_SHIFT   12

+

+/* I2C Status */

+#define I2C_FIFO_FULL_STATUS          0x01

+#define I2C_FIFO_EMPTY_STATUS         0x02

+

+/* Register Settings */

+#define SET_I2C_SLAVE_ADDRESS(n,rw)       do{DRV_I2C_SetData16(REG_I2C_SLAVE_ADDR, I2C_8_BIT_MASK, (((n>>1)<<1) + rw));} while(0);

+

+#define DISABLE_I2C_INT                   do{DRV_I2C_WriteReg16(REG_I2C_INT_MASK, 0);} while(0);

+#define ENABLE_I2C_INT                    do{DRV_I2C_WriteReg16(REG_I2C_INT_MASK,I2C_1_BIT_MASK);} while(0);

+

+#define CLEAR_I2C_STA                     do{DRV_I2C_WriteReg16(REG_I2C_INT_STA, I2C_4_BIT_MASK);} while(0);

+

+//#define SET_I2C_FAST_SPEED_MODE	REG_I2C_CONTROL &= ~I2C_CTL_MODE_BIT;

+//#define SET_I2C_HIGH_SPEED_MODE	REG_I2C_CONTROL |= I2C_CTL_MODE_BIT;

+

+#define SET_I2C_ST_BETWEEN_TRANSFER       do{DRV_I2C_ClearBits16(REG_I2C_CONTROL, I2C_CTL_RS_STOP_BIT);} while(0);

+#define SET_I2C_RS_BETWEEN_TRANSFER       do{DRV_I2C_SetBits16(REG_I2C_CONTROL, I2C_CTL_RS_STOP_BIT);} while(0);

+#define ENABLE_I2C_DMA_TRANSFER           do{DRV_I2C_SetBits16(REG_I2C_CONTROL, I2C_CTL_DMA_EN_BIT);} while(0);

+#define ENABLE_I2C_CLOCK_EXTENSION        do{DRV_I2C_SetBits16(REG_I2C_CONTROL, I2C_CTL_CLK_EXT_EN_BIT);} while(0);

+#define ENABLE_I2C_DIR_CHANGE             do{DRV_I2C_SetBits16(REG_I2C_CONTROL, I2C_CTL_DIR_CHANGE_BIT);} while(0);

+#define ENABLE_I2C_ACK_ERR_DET            do{DRV_I2C_SetBits16(REG_I2C_CONTROL, I2C_CTL_ACK_ERR_DET_BIT);} while(0);

+#define ENABLE_I2C_TRANSFER_LEN_CHG       do{DRV_I2C_SetBits16(REG_I2C_CONTROL, I2C_CTL_TRANSFER_LEN_CHG_BIT);} while(0);

+

+#define DISABLE_I2C_DMA_TRANSFER          do{DRV_I2C_ClearBits16(REG_I2C_CONTROL, I2C_CTL_DMA_EN_BIT);} while(0);

+#define DISABLE_I2C_CLOCK_EXTENSION       do{DRV_I2C_ClearBits16(REG_I2C_CONTROL, I2C_CTL_CLK_EXT_EN_BIT);} while(0);

+#define DISABLE_I2C_DIR_CHANGE            do{DRV_I2C_ClearBits16(REG_I2C_CONTROL, I2C_CTL_DIR_CHANGE_BIT);} while(0);

+#define DISABLE_I2C_ACK_ERR_DET           do{DRV_I2C_ClearBits16(REG_I2C_CONTROL, I2C_CTL_ACK_ERR_DET_BIT);} while(0);

+#define DISABLE_I2C_TRANSFER_LEN_CHG      do{DRV_I2C_ClearBits16(REG_I2C_CONTROL, I2C_CTL_TRANSFER_LEN_CHG_BIT);} while(0);

+

+#define SET_I2C_TRANSFER_LENGTH(n)        do{DRV_I2C_SetData16(REG_I2C_TRANSFER_LEN, I2C_8_BIT_MASK, (n));} while(0);

+#define SET_I2C_AUX_TRANSFER_LENGTH(n)    do{DRV_I2C_SetData16(REG_I2C_TRANSFER_LEN, I2C_AUX_LEN_MASK, ((n)<<I2C_AUX_LEN_SHIFT));} while(0);

+

+#define SET_I2C_TRANSACTION_LENGTH(n)     do{DRV_I2C_SetData16(REG_I2C_TRANSAC_LEN, I2C_8_BIT_MASK, (n));} while(0);

+#define SET_I2C_DELAY_LENGTH(n)           do{DRV_I2C_SetData16(REG_I2C_DELAY_LEN, I2C_8_BIT_MASK, (n));} while(0);

+

+#define SET_I2C_STEP_CNT_DIV(n)           do{DRV_I2C_SetData16(REG_I2C_TIMING, I2C_6_BIT_MASK, (n));} while(0);

+#define SET_I2C_SAMPLE_CNT_DIV(n)         do{DRV_I2C_SetData16(REG_I2C_TIMING, I2C_SAMPLE_CNT_DIV_MASK, ((n)<<I2C_SAMPLE_CNT_DIV_SHIFT));} while(0);

+#define SET_I2C_DATA_READ_TIME(n)         do{DRV_I2C_SetData16(REG_I2C_TIMING, I2C_DATA_READ_TIME_MASK, ((n)<<I2C_DATA_READ_TIME_SHIFT));} while(0);

+#define ENABLE_I2C_DATA_READ_ADJ          do{DRV_I2C_SetBits16(REG_I2C_TIMING, I2C_DATA_READ_ADJ_BIT);} while(0);

+#define DISABLE_I2C_DATA_READ_ADJ         do{DRV_I2C_ClearBits16(REG_I2C_TIMING, I2C_DATA_READ_ADJ_BIT);} while(0);

+

+#define START_I2C_TRANSACTION             do{DRV_I2C_WriteReg16(REG_I2C_START, 0x01);} while(0);

+

+// #define I2C_FIFO_FULL                     ((REG_I2C_FIFO_STAT>>1)&0x01)

+// #define I2C_FIFO_EMPTY                    (REG_I2C_FIFO_STAT & 0x01)

+

+#define SET_I2C_RX_FIFO_THRESH(n)         do{DRV_I2C_SetData16(REG_I2C_FIFO_THRESH, I2C_RX_FIFO_THRESH_MASK, ((n)<< I2C_RX_FIFO_THRESH_SHIFT));} while(0);

+#define SET_I2C_TX_FIFO_THRESH(n)         do{DRV_I2C_SetData16(REG_I2C_FIFO_THRESH, I2C_TX_FIFO_THRESH_MASK, ((n)<< I2C_TX_FIFO_THRESH_SHIFT));} while(0);

+

+#define CLEAR_I2C_FIFO                    do{DRV_I2C_WriteReg16(REG_I2C_FIFO_ADDR_CLR, 0x01);} while(0);

+

+#define SET_I2C_SCL_NORMAL_MODE           do{DRV_I2C_ClearBits16(REG_I2C_IO_CONFIG, I2C_SCL_MODE_BIT);} while(0);

+#define SET_I2C_SCL_WIRED_AND_MODE        do{DRV_I2C_SetBits16(REG_I2C_IO_CONFIG, I2C_SCL_MODE_BIT);} while(0);

+#define SET_I2C_SDA_NORMAL_MODE           do{DRV_I2C_ClearBits16(REG_I2C_IO_CONFIG, I2C_SDA_MODE_BIT);} while(0);

+#define SET_I2C_SDA_WIRED_AND_MODE        do{DRV_I2C_SetBits16(REG_I2C_IO_CONFIG, I2C_SDA_MODE_BIT);} while(0);

+#define ENABLE_I2C_BUS_DETECT             do{DRV_I2C_SetBits16(REG_I2C_IO_CONFIG, I2C_BUS_DETECT_EN_BIT);} while(0);

+#define DISABLE_I2C_BUS_DETECT            do{DRV_I2C_ClearBits16(REG_I2C_IO_CONFIG, I2C_BUS_DETECT_EN_BIT);} while(0);

+

+#define ENABLE_I2C_CLOCK_SYNC             do{DRV_I2C_SetBits16(REG_I2C_MULTI_MASTER, I2C_ARBITRATION_BIT);} while(0);

+#define ENABLE_DATA_ARBITION              do{DRV_I2C_SetBits16(REG_I2C_MULTI_MASTER, I2C_CLOCK_SYNC_BIT);} while(0);

+#define ENABLE_I2C_BUS_BUSY_DET           do{DRV_I2C_SetBits16(REG_I2C_MULTI_MASTER, I2C_BUS_BUSY_DET_BIT);} while(0);

+#define DISABLE_I2C_CLOCK_SYNC            do{DRV_I2C_ClearBits16(REG_I2C_MULTI_MASTER, I2C_ARBITRATION_BIT);} while(0);

+#define DISABLE_DATA_ARBITION             do{DRV_I2C_ClearBits16(REG_I2C_MULTI_MASTER, I2C_CLOCK_SYNC_BIT);} while(0);

+#define DISABLE_I2C_BUS_BUSY_DET          do{DRV_I2C_ClearBits16(REG_I2C_MULTI_MASTER, I2C_BUS_BUSY_DET_BIT);} while(0);

+

+#define SET_I2C_HIGH_SPEED_MODE_800KB     do{DRV_I2C_WriteReg16(REG_I2C_HS_MODE, 0x0703);} while(0);

+#define SET_I2C_HIGH_SPEED_MODE_1000KB    do{DRV_I2C_WriteReg16(REG_I2C_HS_MODE, 0x0503);} while(0);

+

+#define SET_I2C_FAST_MODE                 do{DRV_I2C_ClearBits16(REG_I2C_HS_MODE, I2C_HS_EN_BIT);} while(0);

+#define SET_I2C_HS_MODE                   do{DRV_I2C_SetBits16(REG_I2C_HS_MODE, I2C_HS_EN_BIT);} while(0);

+#define ENABLE_I2C_NAKERR_DET             do{DRV_I2C_SetBits16(REG_I2C_HS_MODE, I2C_HS_NACK_ERR_DET_EN_BIT);} while(0);

+#define DISABLE_I2C_NAKERR_DET            do{DRV_I2C_ClearBits16(REG_I2C_HS_MODE, I2C_HS_NACK_ERR_DET_EN_BIT);} while(0);

+#define SET_I2C_HS_MASTER_CODE(n)         do{DRV_I2C_SetData16(REG_I2C_HS_MODE, I2C_HS_MASTER_CODE_MASK, ((n)<<I2C_HS_MASTER_CODE_SHIFT));} while(0);

+

+#define SET_I2C_HS_STEP_CNT_DIV(n)        do{DRV_I2C_SetData16(REG_I2C_HS_MODE, I2C_HS_STEP_CNT_DIV_MASK, ((n)<<I2C_HS_STEP_CNT_DIV_SHIFT));} while(0);

+#define SET_I2C_HS_SAMPLE_CNT_DIV(n)      do{DRV_I2C_SetData16(REG_I2C_HS_MODE, I2C_HS_SAMPLE_CNT_DIV_MASK, ((n)<<I2C_HS_SAMPLE_CNT_DIV_SHIFT));} while(0);

+

+#define RESET_I2C                         do{DRV_I2C_WriteReg16(REG_I2C_SOFTRESET, 0x01);} while(0);

+

+//---------------- DMA ----------------

+#if defined(DRV_I2C_DIRECT_CONFIG_DMA_REGISTER)

+

+//#define DMA_base		0x80030000 -->defined in /inc/reg_base.h

+

+/* Regidter Definitions */

+#define REG_DMA_CHANNEL_CONTROL(c)        *((volatile unsigned int *) (DMA_base + 0x14+ (c<<8)))

+#define REG_DMA_CHANNEL_START(c)          *((volatile unsigned int *) (DMA_base + 0x18+ (c<<8)))

+#define REG_DMA_PROG_ADDR(c)              *((volatile unsigned int *) (DMA_base + 0x2c+ (c<<8)))

+#define REG_DMA_TRANSFER_COUNT(c)         *((volatile unsigned int *) (DMA_base + 0x10+ (c<<8)))

+

+/* Master Definitions*/

+#define DMA_MASTER_I2C_TX                 DMA_CON_MASTER_I2CTX

+#define DMA_MASTER_I2C_RX                 DMA_CON_MASTER_I2CRX

+#define DMA_MASTER_IRDA_TX                0x02

+#define DMA_MASTER_IRDA_RX                0x03

+

+#define DMA_I2C_TX_CHANNEL                4

+#define DMA_I2C_RX_CHANNEL                5

+

+/* Register masks */

+#define DMA_CON_DIR_MASK                  0x40000

+#define DMA_CON_MAS_MASK                  0x01f00000

+

+#define I2C_SET_TX_DMA_CONTROL(c,m)       REG_DMA_CHANNEL_CONTROL(c) = 0x00000014;\

+                                          REG_DMA_CHANNEL_CONTROL(c) |= (((m)<<20) & DMA_CON_MAS_MASK);

+

+#define I2C_SET_RX_DMA_CONTROL(c,m)       REG_DMA_CHANNEL_CONTROL(c) = 0x00040018;\

+                                          REG_DMA_CHANNEL_CONTROL(c) |= (((m)<<20) & DMA_CON_MAS_MASK);

+

+#define I2C_SET_DMA_PROGRAMMABLE_ADDR(c,addr)    REG_DMA_PROG_ADDR(c) = (addr);

+#define I2C_SET_DMA_TRANSFER_COUNT(c,size)       REG_DMA_TRANSFER_COUNT(c)= size ;

+#define I2C_START_DMA_TRANSFER(c)                REG_DMA_CHANNEL_START(c) =	0x8000;

+#define I2C_STOP_DMA_TRANSFER(c)                 REG_DMA_CHANNEL_START(c) =	0;

+

+#endif // #if defined(DRV_I2C_DIRECT_CONFIG_DMA_REGISTER)

+

+/****** SW definitions******/

+#define I2C_READ_BIT            0x01

+#define I2C_WRITE_BIT           0x00

+

+#define I2C_TRANSAC_COMPLETE    0x01

+#define I2C_TRANSAC_ACK_ERR     0x02

+#define I2C_HS_NACK_ERR         0x04

+

+void i2c_init(void);

+void i2c_set_transaction_speed(SCCB_OWNER owner,SCCB_TRANSACTION_MODE mode,kal_uint32* Fast_Mode_Speed,kal_uint32* HS_Mode_Speed);

+void i2c_config(SCCB_OWNER owner,sccb_config_struct* para);

+void i2c_set_slave_address(SCCB_OWNER owner,kal_uint8 slave_address);

+void i2c_set_get_handle_wait(SCCB_OWNER owner,kal_bool enable);

+SCCB_TRANSACTION_MODE i2c_get_transaction_mode(SCCB_OWNER owner);

+SCCB_TRANSACTION_RESULT i2c_write(SCCB_OWNER owner,kal_uint8* para,kal_uint32 datalen);

+SCCB_TRANSACTION_RESULT i2c_read(SCCB_OWNER owner,kal_uint8* para,kal_uint32 datalen);

+SCCB_TRANSACTION_RESULT i2c_cont_write(SCCB_OWNER owner, kal_uint8* para, kal_uint32 datalen_in_transfer, kal_uint32 transfer_num);

+SCCB_TRANSACTION_RESULT i2c_cont_read(SCCB_OWNER owner, kal_uint8* para, kal_uint32 datalen_in_transfer, kal_uint32 transfer_num);

+SCCB_TRANSACTION_RESULT i2c_write_and_read(SCCB_OWNER owner, kal_uint8* write_buffer, kal_uint32 write_len, kal_uint8* read_buffer, kal_uint32 read_len);

+#if (defined(DRV_I2C_DMA_ENABLED))

+void i2c_set_DMA(SCCB_OWNER owner, kal_bool enable);

+#endif // #if (defined(DRV_I2C_DMA_ENABLED))

+

+#if defined(DRV_I2C_25_SERIES)

+#if defined(__SUPPORT_SCCB_XXX_API__)

+void sccb_write(SCCB_OWNER owner,kal_uint32 cmd, kal_uint32 param);

+void sccb_multi_write(SCCB_OWNER owner,kal_uint32 cmd, kal_uint32 *param, kal_uint8 num);

+void sccb_cont_write(SCCB_OWNER owner,kal_uint32 cmd, kal_uint32 spec_cmd, kal_uint32 param);

+kal_uint32 sccb_read (SCCB_OWNER owner,kal_uint32 cmd);

+kal_uint32 sccb_phase3_read (SCCB_OWNER owner,kal_uint32 cmd);

+kal_uint32 sccb_cont_read (SCCB_OWNER owner,kal_uint32 cmd, kal_uint32 spec_cmd);

+kal_uint8 sccb_multi_read (SCCB_OWNER owner, kal_uint32 cmd, kal_uint32 *param, kal_uint8 num);

+#endif // #if defined(__SUPPORT_SCCB_XXX_API__)

+#endif // #if defined(DRV_I2C_25_SERIES)

+

+

+

+

+#endif // #if (defined(DRV_I2C_25_SERIES))

+

+#endif // #ifndef __SCCB_V2_H__

+

diff --git a/mcu/interface/driver/hwdrv/sdio_sw.h b/mcu/interface/driver/hwdrv/sdio_sw.h
new file mode 100644
index 0000000..0070ae2
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/sdio_sw.h
@@ -0,0 +1,243 @@
+/*****************************************************************************
+*  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) 2001
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   sdio_sw.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   Header file of SDIO driver
+ *
+ * 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 SDIO_SW_H
+#define SDIO_SW_H
+
+/*SW*/
+
+#define SDIO_CCCR_VERISON_MASK 0xf
+#define SDIO_SD_VERISON_MASK 0xf
+#define SDIO_VERISON_MASK  0xf0
+#define SDIO_VERISON_SHIFT 4
+
+/*CIS tuple code*/
+#define  CISTPL_NULL             0x0
+#define  CISTPL_CHECKSUM         0x10
+#define  CISTPL_VERS_1           0x15
+#define  CISTPL_ALTSTR           0x16
+#define  CISTPL_MANFID           0x20
+#define  CISTPL_FUNCID           0x21 
+#define  CISTPL_FUNCE            0x22
+#define  CISTPL_SDIO_STD         0x91
+#define  CISTPL_SDIO_EXT         0x92
+#define  CISTPL_END              0xff 
+
+/*Function definition*/
+#define SDIO_CCCR_SIZE       32
+#define SDIO_FBR_SIZE        256
+#define SDIO_TUPLE_SIZE      256
+
+typedef enum{
+	SDIO_FUCN_0=0,
+	SDIO_FUCN_1,
+	SDIO_MAX_FUCN_ID, 
+	SDIO_FUCN_MEM=0x1000
+}SDIO_function_id_enum;
+typedef enum{
+	SDIO_BS_FREE=0,
+	SDIO_BS_BUS
+}SDIO_bus_status_enum;
+typedef enum{
+	SDIO_INTERFACE_NULL=0,
+	SDIO_INTERFACE_UART,
+	SDIO_INTERFACE_A_BT,
+	SDIO_INTERFACE_B_BT,
+	SDIO_INTERFACE_GPS,
+	SDIO_INTERFACE_CAMERA,
+	SDIO_INTERFACE_PHS,
+	SDIO_INTERFACE_WLAN	
+}SDIO_interface_code_enum;
+
+typedef enum{
+	SDIO_FIX,	//multi byte r/w at fixed address
+	SDIO_INC		//multi byte r/w at incrementing address 
+}cmd53_op_enum;
+typedef enum{
+	SDIO_READ,
+	SDIO_WRITE
+}rw_dir_enum;
+typedef enum{
+	DIS,
+	CMD,
+	TRN,
+	RFU
+}sdio_state_enum;
+typedef struct{
+	rw_dir_enum rw;	// directon (input)
+	kal_uint8 func;	// function (input)
+	kal_bool raw;		// read after write
+	kal_bool stop;		// stop data transfer 
+	kal_uint8 data;	// write data or read back data (Input , output)
+	kal_uint32 adrs;	// address (input)
+}cmd52_config_struct;
+
+#define SDIO_SUPPORT_FUNCTION (SDIO_MAX_FUCN_ID-1)
+typedef struct{
+	rw_dir_enum rw;		// directon
+	kal_uint8 func;		// function
+	kal_bool block;		// block mode or not
+	cmd53_op_enum op;		// operation mode
+	kal_uint16 count;		// byte or block count
+	kal_uint32 adrs;		// address
+	kal_uint32 buffer;	// address of buffer for data transfer
+}cmd53_config_struct;
+
+typedef struct{
+	kal_uint8 num_func;
+	kal_bool mem_present;
+	kal_bool io_ready;
+	kal_bool ocr_valid;
+	kal_bool stop;				// stop trans issued
+	sdio_state_enum state;
+	kal_uint8 resp;
+	kal_uint8 bit_width;
+	kal_uint8 capability;
+	kal_uint32 ocr;	
+	kal_uint8 power_control;
+	kal_uint32 block_size[SDIO_MAX_FUCN_ID];	  	
+	void (*callback[SDIO_MAX_FUCN_ID])(void);
+}sdio_dcb_struct;
+
+/*SDIO command set*/
+SDC_CMD_STATUS SDIO_Cmd5(kal_uint32 ocr);
+SDC_CMD_STATUS SDIO_Cmd52_isr(cmd52_config_struct *p);
+SDC_CMD_STATUS SDIO_Cmd52(cmd52_config_struct *p);
+SDC_CMD_STATUS SDIO_Cmd53_isr(cmd53_config_struct *p);
+SDC_CMD_STATUS SDIO_Cmd53(cmd53_config_struct *p);
+SDC_CMD_STATUS SD_Send_Cmd_poll(kal_uint32 cmd, kal_uint32 arg);
+SDC_CMD_STATUS SD_WaitCmdRdyOrTo_poll(void);
+SDC_CMD_STATUS SD_StopTrans_poll(void);
+/*Driver only*/
+SDC_CMD_STATUS SDIO_read_FBR(SDIO_function_id_enum function);
+SDC_CMD_STATUS SDIO_read_CCCR(void);
+SDC_CMD_STATUS SDIO_read_CIS(SDIO_function_id_enum function);
+SDC_CMD_STATUS SDIO_read_capacity(void);
+SDC_CMD_STATUS SDIO_abort_IO(SDIO_function_id_enum function);
+SDC_CMD_STATUS SDIO_SW_reset(void);
+SDC_CMD_STATUS SDIO_check_IO_Int(SDIO_function_id_enum function, kal_bool *pending);
+SDC_CMD_STATUS SDIO_check_IO_ready(SDIO_function_id_enum function, kal_bool *ready);
+SDC_CMD_STATUS SDIO_configure_bus(SD_BITWIDTH bus);
+SDC_CMD_STATUS SDIO_enable_E4MI(kal_bool enable);
+SDC_CMD_STATUS SDIO_read_power_control(void);
+SDC_CMD_STATUS SDIO_enable_MPS(kal_bool enable);
+kal_bool SDIO_support_MPS(void);
+kal_bool SDIO_support_SDC(void);
+kal_bool SDIO_support_SMB(void);
+kal_bool SDIO_support_SRW(void);
+kal_bool SDIO_support_SBS(void);
+kal_bool SDIO_support_S4MI(void);
+kal_bool SDIO_support_LSC(void);
+kal_bool SDIO_support_4BLS(void);
+void SDIO_HISR_Entry(void);
+kal_bool SDIO_Register_Read_poll(SDIO_function_id_enum function, 
+                             kal_uint32 addr, 
+                             kal_uint32 *data,
+                             cmd53_op_enum op);
+SDC_CMD_STATUS SDIO_stop(void);
+SDC_CMD_STATUS SDIO_WaitDatRdyOrTo(void);
+/*SDIO function */
+SDC_CMD_STATUS SDIO_read_CCCR_ver(kal_uint8 *version);
+SDC_CMD_STATUS SDIO_read_SDIO_ver(kal_uint8 *version);
+SDC_CMD_STATUS SDIO_read_SD_ver(kal_uint8 *version);
+SDC_CMD_STATUS SDIO_configure_BLK_size(SDIO_function_id_enum function, kal_uint32 size);
+SDC_CMD_STATUS SDIO_get_BLK_size(SDIO_function_id_enum function, kal_uint32 *size);
+kal_uint32 SDIO_query_BLK_size(SDIO_function_id_enum function);
+SDIO_function_id_enum SDIO_query_IO_id(SDIO_interface_code_enum ap);
+SDC_CMD_STATUS SDIO_enable_IO_Int(SDIO_function_id_enum function, kal_bool enable);
+SDC_CMD_STATUS SDIO_enable_IO(SDIO_function_id_enum function, kal_bool enable);
+void SDIO_int_registration(SDIO_function_id_enum function, void (func)(void));
+/*Function for WiFi */
+/*Write Register*/
+kal_bool SDIO_Register_Write(SDIO_function_id_enum function, 
+                             kal_uint32 addr, 
+                             kal_uint32 data,
+                             cmd53_op_enum op);                                                        
+kal_bool SDIO_Register_Write_isr(SDIO_function_id_enum function, 
+                                 kal_uint32 addr, 
+                                 kal_uint32 data,
+                                 cmd53_op_enum op);                             
+/*Write Data */                             
+kal_bool SDIO_Data_Write(SDIO_function_id_enum function, 
+                             kal_uint32 addr, 
+                             kal_uint8  *data,
+                             cmd53_op_enum op,
+                             kal_uint32 count,
+                             kal_bool block);                             
+/*Read Register*/
+kal_bool SDIO_Register_Read(SDIO_function_id_enum function, 
+                             kal_uint32 addr, 
+                             kal_uint32 *data,
+                             cmd53_op_enum op);
+kal_bool SDIO_Data_Read(SDIO_function_id_enum function, 
+                             kal_uint32 addr, 
+                             kal_uint8  *data,
+                             cmd53_op_enum op,
+                             kal_uint32 count,
+                             kal_bool block);
+
+//guilin
+DCL_SDC_CMD_STATUS SDIO_cmd52_read(DCL_SDIO_function_id_enum function, DCL_UINT32 addr, DCL_UINT8 *rdata, DCL_UINT8 *r5resp);
+DCL_SDC_CMD_STATUS SDIO_cmd52_write(DCL_SDIO_function_id_enum function, DCL_UINT32 addr, DCL_UINT8 wdata, DCL_UINT8 *r5resp);
+DCL_SDC_CMD_STATUS SDIO_cmd52_write_read(DCL_SDIO_function_id_enum function, DCL_UINT32 addr, DCL_UINT8 wdata, DCL_UINT8 *rdata, DCL_UINT8 *r5resp);
+DCL_SDC_CMD_STATUS SDIO_cmd53_read(DCL_SDIO_function_id_enum function, DCL_UINT32 addr, DCL_UINT32 data, DCL_SDIO_cmd53_op_enum op, DCL_UINT32 count, DCL_BOOL block, DCL_UINT8 *r5resp);
+DCL_SDC_CMD_STATUS SDIO_cmd53_write(DCL_SDIO_function_id_enum function, DCL_UINT32 addr, DCL_UINT32 data, DCL_SDIO_cmd53_op_enum op, DCL_UINT32 count, DCL_BOOL block, DCL_UINT8 *r5resp);
+DCL_SDC_CMD_STATUS SDIO_mcudma_read(DCL_UINT32 *rdata);
+DCL_SDC_CMD_STATUS SDIO_mcudma_write(DCL_UINT32 wdata);
+DCL_SDC_CMD_STATUS SDIO_clkpadred_read(DCL_UINT32 *rdata);
+DCL_SDC_CMD_STATUS SDIO_clkpadred_write(DCL_UINT32 wdata);
+DCL_SDC_CMD_STATUS SDIO_forcemcu_read(DCL_UINT32 *rdata);
+DCL_SDC_CMD_STATUS SDIO_forcemcu_write(DCL_UINT32 wdata);
+DCL_SDC_CMD_STATUS SDIO_getclk(DCL_UINT32 *rdata);
+DCL_SDC_CMD_STATUS SDIO_setclk(DCL_UINT32 wdata);
+
+void SDIO_dispatch_IO(SDIO_function_id_enum function);
+void SDIO_resume_IO(SDIO_function_id_enum function);
+
+
+
+
+#ifdef __SDIO_SRW_SRW__
+SDC_CMD_STATUS SDIO_suspend_IO(SDIO_bus_status_enum *bus_status);
+SDC_CMD_STATUS SDIO_select_IO(SDIO_function_id_enum function, kal_bool *resume_data);
+SDC_CMD_STATUS SDIO_check_IO_exec(SDIO_function_id_enum function, kal_bool *execution);
+SDC_CMD_STATUS SDIO_check_IO_ready_flag(SDIO_function_id_enum function, kal_bool *ready);
+#endif
+
+/*extern varibale*/
+extern sdio_dcb_struct gSDIO;
+#endif // end of SD_DEF_H
diff --git a/mcu/interface/driver/hwdrv/spi_sw.h b/mcu/interface/driver/hwdrv/spi_sw.h
new file mode 100644
index 0000000..f45976a
--- /dev/null
+++ b/mcu/interface/driver/hwdrv/spi_sw.h
@@ -0,0 +1,79 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *    spi_sw.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This file is intends for SPI 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+