blob: a6929d1fa3577d2ec6c7b3d10004ed132d92f24a [file] [log] [blame]
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* serial_interface.c
*
* Project:
* --------
* Maui_Software
*
* Description:
* ------------
* This Module defines Touch Panel 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!
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
#ifndef TOUCH_PANEL__H
#define TOUCH_PANEL__H
#include "eint.h"
#include "intrCtrl.h"
#include "dcl_hts.h"
#include "kal_public_api.h"
#if defined(__TOUCH_PANEL_CAPACITY__)
#define TOUCH_PANEL_BUFFER_SIZE 512*16 //size MUST be exponential of 2
#define CTP_SUPPORT_POINTS 5
#define CTP_EVENT_HEADER 8
#define BASIC_EVENT_UNIT CTP_EVENT_HEADER + 40 // size of TouchPanelMultipleEventStruct
#else
#define TOUCH_PANEL_BUFFER_SIZE 512
#define BASIC_EVENT_UNIT 13 // 5 -> 7, for 2 more time stamp.
#endif//#if defined(__TOUCH_PANEL_CAPACITY__)
#define TOUCH_PANEL_BUFFER_HIGH_THRES TOUCH_PANEL_BUFFER_SIZE*90/100
#define TOUCH_PANEL_BUFFER_LOW_THRES TOUCH_PANEL_BUFFER_SIZE*80/100
#define HAND_WRITING_AREA_NUM 3
#if !defined(DRV_TOUCH_PANEL_CUSTOMER_PARAMETER)
#define MIN_PEN_MOVE_OFFSET 5
#define HAND_WRITING_MAX_OFFSET 50
#define NONHAND_WRITING_MAX_OFFSET 100
#define MAX_STROKE_MOVE_OFFSET 1
#if defined(TRULY_HVGA_LCM)
#define TOUCH_PANEL_CALI_CHECK_OFFSET 12
#else
#define TOUCH_PANEL_CALI_CHECK_OFFSET 6
#endif //#if defined(TRULY_HVGA_LCM)
#endif //#if !defined(DRV_TOUCH_PANEL_CUSTOMER_PARAMETER)
#define MAX_ADC_VALUE 4095
#define touch_down_level LEVEL_LOW /*touch down level*/
#define touch_up_level LEVEL_HIGH /*touch up level*/
#if !defined(IRQ_TS_CODE)
#if defined(DRV_TP_6516_AP_SETTING)
#define IRQ_TS_CODE IRQ_TOUCHSCREEN_CODE
#elif defined(DRV_TP_IRQ_TPC)
#define IRQ_TS_CODE IRQ_TPC_CODE
#else
#define IRQ_TS_CODE IRQ_AUXADC_CODE
#endif
#endif//#if !defined(IRQ_TS_CODE)
#define CTP_PATTERN 0xAA
typedef enum {
CTP_NO_POINT,
CTP_GESTURE, //save the gesture information in one point event
CTP_1POINT=1,
CTP_2POINTS,
CTP_3POINTS,
CTP_4POINTS,
CTP_5POINTS,
CTP_6POINTS,
CTP_7POINTS,
CTP_8POINTS,
CTP_9POINTS,
CTP_10POINTS,
//add new detection type before unknown
CTP_UNKNOWN
} CTP_EVENT_NUMBER_ENUM;
typedef struct
{
// Touch_Panel_Event_enum
kal_uint16 event;
/*coordinate point, not diff*/
kal_uint16 x;
kal_uint16 y;
kal_uint16 z; //resistance TP: presure, capacitive TP: area
} TP_SINGLE_EVENT_T;
typedef enum {
UP,
DOWN
} Touch_Panel_PenState_enum;
typedef enum {
CTP_LAST_EVENT_GET,
CTP_LAST_EVENT_SET
} Touch_Panel_Handle_LastEvent_enum;
typedef enum {
HAND_WRITING,
NON_HAND_WRITING
} Touch_Panel_Area_enum;
typedef enum {
PEN_DOWN, /*0*/
PEN_UP, /*1*/
PEN_MOVE, /*2*/
PEN_LONGTAP, /*3*/
PEN_REPEAT, /*4*/
PEN_ABORT, /*5*/
TP_UNKNOWN_EVENT,/*6*/
STROKE_MOVE, /*7*/
STROKE_STATICAL, /*8*/
STROKE_HOLD, /*9*/
PEN_LONGTAP_HOLD, /*10*/
PEN_REPEAT_HOLD, /*11*/
STROKE_DOWN_, /*12*/
STROKE_LONGTAP_, /*13*/
STROKE_UP_,/*14*/
STROKE_DOWN=0xc0, /*0*/ /*1*/
STROKE_LONGTAP=0x7e, /*8*/
STROKE_UP=0x7f/*127*/
} Touch_Panel_Event_enum;
typedef kal_uint16 (*CTP_FUNC)(kal_int16 x_diff, kal_int16 y_diff, kal_uint16 count);
typedef struct
{
kal_int16 x; /*x coordinate*/
kal_int16 y; /*y coordinate*/
}TouchPanelCoordStruct;
typedef struct
{
TouchPanelCoordStruct min;
TouchPanelCoordStruct max;
}TouchPanelHandAreaStruct;
typedef struct
{
/*x*/
double x_slope;
double x_offset;
/*y*/
double y_slope;
double y_offset;
}TouchPanelCaliStruct ;
typedef void (*TP_EVENT_FUNC)(void *parameter, Touch_Panel_Event_enum state) ;
typedef struct
{
kal_eventgrpid event; /*event id*/
kal_uint8 gpthandle; /*gpt handle*/
kal_uint8 eint_chan;
kal_uint32 longtap_cnt; /*LongTap cnt*/
kal_uint32 handwriting_longtap_cnt; /*LongTap cnt*/
kal_uint32 repeat_cnt; /*Repeat cnt*/
kal_uint32 low_sample_period;
kal_uint32 high_sample_period;
TouchPanelHandAreaStruct handarea[HAND_WRITING_AREA_NUM]; /*hand area*/
TouchPanelHandAreaStruct ext_handarea; /*extended area*/
kal_uint16 hand_num;
kal_bool ext_enable; /*extended stroke or not*/
TouchPanelCoordStruct cur; /*current point coord.*/
TouchPanelCoordStruct pre; /*previous point coord.*/
TouchPanelCoordStruct temp; /*previous point coord.*/
TouchPanelCoordStruct begin; /*the first down point coord.*/
TP_EVENT_FUNC touch_panel_event_cb;
void *cb_para;
Touch_Panel_Area_enum area; /*(non)handwriting*/
Touch_Panel_PenState_enum state; /*Down or UP*/
kal_bool skip_unrelease_enable;
kal_bool skip_unrelease_state;
kal_bool is_buff_full;
kal_bool wait_next_down; /*inidcate if the down point reasonable*/
kal_uint16 pen_offset; /*pen move offset*/
kal_uint16 longtap_pen_offset;/*longtap pen move offset*/
kal_uint16 longtap_stroke_offset; /*longtap stroke move offset*/
kal_uint16 storke_offset; /*stroke offset*/
kal_bool longtap_state; /*wait longtap timeout or not*/
#if defined(DRV_TOUCH_PANEL_PAIR_GUARANTEE)
Touch_Panel_Event_enum buffer_push_stat;
TouchPanelCoordStruct buffer_push_point; /*previous point coord.*/
#endif //#if defined(DRV_TOUCH_PANEL_PAIR_GUARANTEE)
DCL_HANDLE hts_handle;
PFN_DCL_CALLBACK tp_down_cb;
void * tp_down_cb_para;
PFN_DCL_CALLBACK tp_up_cb;
void * tp_up_cb_para;
}TouchPanelDataStruct;
typedef struct
{
kal_int16 x_adc;
kal_int16 y_adc;
Touch_Panel_Event_enum event;
kal_uint16 time_stamp; // unit: system tick
}TouchPanelEventStruct;
typedef struct
{
kal_uint16 model; // Single/Dual/Triple/Four/Five/All gesture
kal_uint16 padding; //currently use for check the structure format correctness, 0xAA
kal_uint32 time_stamp;
TP_SINGLE_EVENT_T points[5];
} TouchPanelMultipleEventStruct;
typedef struct
{
kal_uint8 touch_panel_data[TOUCH_PANEL_BUFFER_SIZE];
kal_uint16 touch_buffer_rindex;
kal_uint16 touch_buffer_windex;
#if defined(__TOUCH_PANEL_CAPACITY__)
kal_uint16 touch_buffer_last_rindex;
kal_uint16 touch_buffer_last_windex;
#endif
}TouchPanelBufferStruct;
typedef struct {
#if defined(DRV_TOUCH_PANEL_CUSTOMER_PARAMETER)
kal_uint32 ts_debounce_time; //TS_DEBOUNCE_TIME
kal_uint32 touch_panel_cali_check_offset;
kal_uint32 min_pen_move_offset;// MIN_PEN_MOVE_OFFSET = 10;
kal_uint32 hand_writing_max_offset;// HAND_WRITING_MAX_OFFSET = 50;
kal_uint32 nonhand_writing_max_offset;// NONHAND_WRITING_MAX_OFFSET = 100;
kal_uint32 max_stroke_move_offset;// MAX_STROKE_MOVE_OFFSET = 1;
kal_uint32 touch_pressure_threshold_high;// TOUCH_PRESSURE_THRESHOLD_HIGH=6000;
#if defined(DRV_TOUCH_PANEL_MULTIPLE_PICK)
kal_uint32 multiple_point_selection;// MULTIPLE_POINT_SELECTION= 3;
#endif //#if defined(DRV_TOUCH_PANEL_MULTIPLE_PICK)
#if defined(__DRV_TP_DISCARD_SHIFTING__)
kal_uint32 pressure_check_boundary;// PRESSURE_CHECK_BOUNDARY = 2000;
kal_uint32 pressure_shifting_boundary;// PRESSURE_SHIFTING_BOUNDARY = 800;
#endif //#if defined(__DRV_TP_DISCARD_SHIFTING__)
#endif //#if defined(DRV_TOUCH_PANEL_CUSTOMER_PARAMETER)
kal_int32 touch_panel_filter_thresold;
/*ADC*/
kal_int32 x_adc_start;
kal_int32 x_adc_end;
kal_int32 y_adc_start;
kal_int32 y_adc_end;
/*Coord.*/
kal_int32 x_coord_start;
kal_int32 x_coord_end;
kal_int32 y_coord_start;
kal_int32 y_coord_end;
/*Size.*/
kal_int32 x_millimeter;
kal_int32 y_millimeter;
/*EINT*/
kal_uint8 eint_down_level;
} TouchPanel_custom_data_struct;
typedef struct {
TouchPanel_custom_data_struct * (*tp_get_data)(void);
void (*tp_read_adc)(kal_uint16 *x, kal_uint16 *y);
#ifdef TOUCH_PANEL_PRESSURE
kal_bool (*tp_pressure_check)(void);
#endif
void (*tp_irq_enable)(kal_bool on);
}TouchPanel_customize_function_struct;
typedef enum {
CTP_PARA_START,
CTP_PARA_RESOLUTION=1,
CTP_PARA_THRESHOLD=2,
CTP_PARA_REPORT_INTVAL=4,
CTP_PARA_IDLE_INTVAL=8,
CTP_PARA_SLEEP_INTVAL=0x10,
CTP_PARA_END
} CTP_parameters_enum;
typedef struct
{
kal_uint16 resolution; // CTP_RESOLTION,
kal_uint16 threshold; // CTP_THRESHOLD,
kal_uint16 Report_interval;
kal_uint16 Idle_time_interval;
kal_uint16 sleep_time_interval;
kal_uint16 gesture_active_distance;
kal_uint16 MS_calibration[128];
}CTP_parameters_struct;// ctp_get_set_enum
typedef struct
{
char vendor[8];
char product[8];
char FirmwareVersion[8];
}CTP_custom_information_struct;
typedef enum {
CTP_ACTIVE_MODE,
CTP_IDLE_MODE,
CTP_SLEEP_MODE,
CTP_GESTURE_DETECTION_MODE,
CTP_MULTIPLE_POINT_MODE,
CTP_FIRMWARE_UPDATE,
CTP_FM_ENABLE,
CTP_FM_DISABLE
}ctp_device_mode_enum;
typedef struct{
kal_bool (*ctp_init)(void);
kal_bool (*ctp_set_device_mode)(ctp_device_mode_enum);
Touch_Panel_PenState_enum (*ctp_hisr)(void);
kal_bool (*ctp_get_data)(TouchPanelMultipleEventStruct *);
kal_bool (*ctp_parameters)(CTP_parameters_struct *, kal_uint32, kal_uint32);
void (*ctp_power_on)(kal_bool);
kal_uint32 (*ctp_command)(kal_uint32, void *, void *);
}CTP_customize_function_struct;
/********************Function Declaration********************/
/********************For upper layer*************************/
void Touch_Panel_Ctrl_Param(DCL_CTRL_CUSTOM_PARAM_T param);
void Touch_Panel_Ctrl_Param_Range(DCL_CTRL_CUSTOM_PARAM_RANGE_T param);
void Touch_Panel_MicronMeter_To_Coord(DCL_CTRL_MICRONMETER_COORD_T* pparam);
void Touch_Panel_Coord_To_MicronMeter(DCL_CTRL_MICRONMETER_COORD_T* pparam );
void touch_panel_enable_(kal_bool enable);/*enable/disable touch panel*/
kal_bool touch_panel_get_event_(TouchPanelMultipleEventStruct *touch_data);/*get touch event*/
void touch_panle_conf_timeout_period_(kal_uint32 longtap,
kal_uint32 repeat,
kal_uint32 handwriting_longtap);
void touch_panle_conf_sample_period_(kal_uint32 low, kal_uint32 high);
void touch_panel_flush_(void);/*flsuh data in ring buffer*/
void touch_panel_start_cali_(TouchPanelCoordStruct *point, kal_uint16 num);
void touch_panel_stop_cali_(void);
void touch_panel_read_cali_(TouchPanelCaliStruct *cali);
void touch_panel_set_cali_(TouchPanelCaliStruct cali);
void touch_panel_reset_(kal_bool skip_unrelease_enable);
void touch_panel_reset_handwriting_(void);
void touch_panel_conf_move_offset_(kal_uint16 pen_offset, kal_uint16 stroke_offset,
kal_uint16 longtap_pen_offset,
kal_uint16 longtap_stroke_offset);
void touch_panel_conf_handwriting_(TouchPanelHandAreaStruct *area, kal_uint16 n,
TouchPanelHandAreaStruct *ext_area);
void touch_panel_cb_registration_ (TP_EVENT_FUNC function, void *parameter);
void Touch_Panel_Pixel_To_MicronMeter(DCL_CTRL_MICRONMETER_COORD_T* pparam);
void Touch_Panel_MicronMeter_To_Coord(DCL_CTRL_MICRONMETER_COORD_T* pparam);
#if defined(__TOUCH_PANEL_CAPACITY__)
void touch_panel_capacitive_up_hdr(DCL_EVENT event);
void touch_panel_capacitive_down_hdr(DCL_EVENT event);
void touch_panel_capacitive_power_on(kal_bool on);
kal_bool touch_panel_capacitive_set_device(ctp_device_mode_enum mode);
kal_uint32 touch_panel_capacitive_command(kal_uint32 cmd, void *p1, void*p2);
#endif //#if defined(__TOUCH_PANEL_CAPACITY__)
/********************For touch panel driver only*************/
// MoDIS parser skip start
// The following are private APIs
#ifdef TOUCH_PANEL_PRESSURE
kal_bool tp_level(void);
kal_bool tp_level_pressure(kal_uint32 *pressure);
kal_uint32 tp_pressure_value(void);
kal_bool tp_pressure_check(void);
kal_bool tp_pressure_check_value(kal_uint32 *pressure);
#endif //#ifdef TOUCH_PANEL_PRESSURE
void touch_panel_read_adc(kal_uint16 *x, kal_uint16 *y);
kal_bool touch_panel_adc_to_coordinate(kal_uint16 *x, kal_uint16 *y);/*tranlate*/
void touch_panel_event_cb(void *parameter);
void touch_panel_repeat_cb(void *parameter);
void touch_panel_longtap_cb(void *parameter);
void touch_panel_stroke_cb(void *parameter);
void touch_panel_up_hdr(DCL_EVENT event);
void touch_panel_down_hdr(DCL_EVENT event);
void touch_panel_event_hdr(void);
void touch_start_longtap(void);
void touch_panel_stroke_hdr(void);
void touch_excute_cali(kal_uint16 x_adc, kal_uint16 y_adc);
void touch_panel_sendilm(void *para, Touch_Panel_Event_enum state);
void tp_data_pop(Touch_Panel_Event_enum event, kal_int16 x, kal_int16 y);
void tp_data_push(TP_SINGLE_EVENT_T* push_event);
void touch_panel_init(void);
void touch_start_handwriting_longtap(void);
// MoDIS parser skip end
/*variable*/
extern TouchPanelDataStruct TP;
extern Touch_Panel_Event_enum touch_panel_track_stauts; /*pen/stroke status*/
extern TouchPanelBufferStruct touch_panel_data_buffer;
extern TouchPanelCoordStruct pre_coord;
extern TouchPanelCoordStruct tp_stroke_pre;
#if defined(__DRV_COMM_REG_DBG__) && defined(__DRV_TP_REG_DBG__)
#define DRV_TP_WriteReg(addr,data) DRV_DBG_WriteReg(addr,data)
#define DRV_TP_Reg(addr) DRV_DBG_Reg(addr)
#define DRV_TP_WriteReg32(addr,data) DRV_DBG_WriteReg32(addr,data)
#define DRV_TP_Reg32(addr) DRV_DBG_Reg32(addr)
#define DRV_TP_WriteReg8(addr,data) DRV_DBG_WriteReg8(addr,data)
#define DRV_TP_Reg8(addr) DRV_DBG_Reg8(addr)
#define DRV_TP_ClearBits(addr,data) DRV_DBG_ClearBits(addr,data)
#define DRV_TP_SetBits(addr,data) DRV_DBG_SetBits(addr,data)
#define DRV_TP_SetData(addr, bitmask, value) DRV_DBG_SetData(addr, bitmask, value)
#define DRV_TP_ClearBits32(addr,data) DRV_DBG_ClearBits32(addr,data)
#define DRV_TP_SetBits32(addr,data) DRV_DBG_SetBits32(addr,data)
#define DRV_TP_SetData32(addr, bitmask, value) DRV_DBG_SetData32(addr, bitmask, value)
#define DRV_TP_ClearBits8(addr,data) DRV_DBG_ClearBits8(addr,data)
#define DRV_TP_SetBits8(addr,data) DRV_DBG_SetBits8(addr,data)
#define DRV_TP_SetData8(addr, bitmask, value) DRV_DBG_SetData8(addr, bitmask, value)
#else
#define DRV_TP_WriteReg(addr,data) DRV_WriteReg(addr,data)
#define DRV_TP_Reg(addr) DRV_Reg(addr)
#define DRV_TP_WriteReg32(addr,data) DRV_WriteReg32(addr,data)
#define DRV_TP_Reg32(addr) DRV_Reg32(addr)
#define DRV_TP_WriteReg8(addr,data) DRV_WriteReg8(addr,data)
#define DRV_TP_Reg8(addr) DRV_Reg8(addr)
#define DRV_TP_ClearBits(addr,data) DRV_ClearBits(addr,data)
#define DRV_TP_SetBits(addr,data) DRV_SetBits(addr,data)
#define DRV_TP_SetData(addr, bitmask, value) DRV_SetData(addr, bitmask, value)
#define DRV_TP_ClearBits32(addr,data) DRV_ClearBits32(addr,data)
#define DRV_TP_SetBits32(addr,data) DRV_SetBits32(addr,data)
#define DRV_TP_SetData32(addr, bitmask, value) DRV_SetData32(addr, bitmask, value)
#define DRV_TP_ClearBits8(addr,data) DRV_ClearBits8(addr,data)
#define DRV_TP_SetBits8(addr,data) DRV_SetBits8(addr,data)
#define DRV_TP_SetData8(addr, bitmask, value) DRV_SetData8(addr, bitmask, value)
#endif //#if defined(__DRV_COMM_REG_DBG__) && defined(__DRV_TP_REG_DBG__)
#if defined(__MTK_INTERNAL__) && !defined(__MAUI_BASIC__) && defined(__DRV_DBG_MEMORY_TRACE_SUPPORT__) && defined(__DRV_TP_MEMORY_TRACE__)
typedef struct{
kal_uint16 tag;
kal_uint32 time;
kal_uint32 data1;
kal_uint32 data2;
}TP_DRV_DBG_DATA;
#define MAX_TP_DRV_DBG_INFO_SIZE 16
typedef struct{
TP_DRV_DBG_DATA dbg_data[MAX_TP_DRV_DBG_INFO_SIZE];
kal_uint16 dbg_data_idx;
}TP_DRV_DBG_STRUCT;
extern void tp_drv_dbg_trace(kal_uint16 index, kal_uint32 time, kal_uint32 data1, kal_uint32 data2);
#define TP_DBG(a,b,c,d) tp_drv_dbg_trace(a,b,c,d);
#include "us_timer.h"
extern kal_uint32 L1I_GetTimeStamp(void);
#define TP_GetTimeStamp L1I_GetTimeStamp
#else //#if defined(__MTK_INTERNAL__) && !defined(LOW_COST_SUPPORT)
#define TP_DBG(a,b,c,d) ;
#endif //#if defined(__MTK_INTERNAL__) && !defined(LOW_COST_SUPPORT)
#endif