MTK LCD,Audio and Camera 目 录
1 引言... 3
2 MTK LCD.. 3
2.1 LCD时序设置... 3
2.2 LCD接口函数的定义... 4
3 MTK Audio参数设置... 6
4 MTK Camera参数设置... 6
1 引言
本文主要是简单介绍一下MTK平台上有关LCD,Audio参数,Camera参数的使用。
2 MTK LCD
MTK平台上面有关LCD的驱动主要是在/custom/drv/LCD/Project Name/这个目录下面Lcd.c文件。当我们更换不同的LCD时,主要改变的就是这个文件。
2.1 LCD时序设置
LCD的读写时序设置主要是在init_lcd_interface()这个函数里面设置的。修改的部分主要如下所示:
SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)3);
SET_LCD_PARALLEL_CE2WR_HOLD_TIME(3);
SET_LCD_PARALLEL_CE2RD_SETUP_TIME(3);
SET_LCD_PARALLEL_WRITE_WAIT_STATE(10);
SET_LCD_PARALLEL_READ_LATENCY_TIME(10);
SET_LCD_ROI_CTRL_CMD_LATENCY(10);
以上代码主要是设置LCD_PCNF0(LCD Parallel Interface 0 Configuration Register)这个寄存器。
RLT Read Latency Time
WST Write Wait State Time
13M Enable 13MHz clock gating
26M Enable 26MHz clock gating
DW Data width of the parallel interface
00 8-bit.
01 9-bit
10 16-bit
11 18-bit
GAMMA_ID _R Gamma Correction LUT ID for Red Component
00 table 0
01 table 1
10 table 2
11 no table selected
GAMMA_ID_G Gamma correction LUT ID for Green Component
00 table 0
01 table 1
10 table 2
11 no table selected
GAMMA_ID_B Gamma correction LUT ID for Blue Component
00 table 0
01 table 1
10 table 2
11 no table selected
C2RS Chip Select (LPCE#) to Read Strobe (LRD#) Setup Time
C2WH Chip Select (LPCE#) to Write Strobe (LWR#) Hold Time
C2WS Chip Select (LPCE#) to Write Strobe (LWR#) Setup Time
2.2 LCD接口函数的定义
在MTK平台里,它的接口函数都由一个结构来封装。该结构在文件lcd_if.h里:
typedef struct
{
void (* Init)(kal_uint32 background, void **buf_addr);
void (* PWRON)(kal_bool on);
void (* BrightLevel)(kal_uint8 level);
void (* SCREENON)(kal_bool on);
void (* BlockWrite)(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy);
void (* GetSize)(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height);
void (* SleepIn)(void);
void (* SleepOut)(void);
void (* PartialOn) (kal_uint16 start_page,kal_uint16 end_page);
void (* PartialOff) (void);
kal_uint8 (*partial_display_align) (void);
/*Engineering mode*/
kal_uint8 (* get_param_number)(lcd_func_type type);
void (* set_bias)(kal_uint8 *bias);
void (* set_contrast)(kal_uint8 *contrast);
void (* set_linerate)(kal_uint8 *linerate);
void (* set_temp_compensate)(kal_uint8 *compensate);
#ifdef __LCD_ESD_RECOVERY__
kal_bool (* esd_check)(void);
#endif
}LCD_Funcs;
在lcd.c文件内有相应的LCD_Funcs。
如下所示:
LCD_Funcs LCd_func_HX8312A={
LCD_Init_HX8312A,
LCD_PWRON_HX8312A,
LCD_SetContrast_HX8312A,
LCD_ON_HX8312A,
LCD_BlockWrite_HX8312A,
LCD_Size_HX8312A,
LCD_EnterSleep_HX8312A,
LCD_ExitSleep_HX8312A,
LCD_Partial_On_HX8312A,
LCD_Partial_Off_HX8312A,
LCD_Partial_line_HX8312A,
/*Engineering mode*/
LCD_GetParm_HX8312A,
LCD_SetBias_HX8312A,
LCD_Contrast_HX8312A,
LCD_LineRate_HX8312A,
LCD_Temp_Compensate_HX8312A
#ifdef __LCD_ESD_RECOVERY__
,LCD_ESD_check_HX8312A
#endif
};
在lcd.c中实现了该结构的各个成员。里面的有些函数如果不用,可以置空。
其中的主要的是以下4个函数,我们介绍如下。
1. LCD_Init_HX8312A
初始化函数。设完了时序之后,我们就可以写初始化程序了。初始化程序的作用是使屏能正常工作起来,屏在上电复位之后其寄存器都是清零的,不能马上工作,要对它的寄存器重新进行一些配置。
一般我们在拿到屏的时候,也会要求屏的供应商提供相应的初始化代码,我们的工作就是把它的初始化代码抄到我们的初始化函数中,使之符合我们的代码规范。
2. LCD_EnterSleep_HX8312A和LCD_ExitSleep_HX8312A
进入和退出睡眠模式(sleep)。我们在长期不对手机进行操作的情况下,程序会调用进入sleep函数,使LCM进到省电模式;进到sleep之后,如果我们又对手机有操作了,这时候就要调用退出sleep函数使屏能够恢复正常显示。一般的显示芯片都会有一些寄存器控制进入和退出sleep,我们在函数LCD_EnterSleep_HX8312A, LCD_ExitSleep_HX8312A里分别对这些寄存器进行设置。
3. LCD_BlockWrite_HX8312A
往屏输出数据的函数。我们在LCM上看到的各种缤纷图像,都是通过这个函数来实现的。在这个函数里面我们要设置LCD屏幕显示的一些位置参数,并把它写道相应的寄存器里面。
3 MTK Audio参数设置
MTK音频里面有很多的参数需要设置,这个参数主要是在nvram_default_audio.c这个文件里面完成的。
对于这些参数,我们手机掉电了以后还需要保存,所以它们都是要保存在NVRAM里面的。
首先是一些宏定义,这些宏要定义不同的Level对应的具体数值。
如下所示:
#define GAIN_HND_CTN_VOL 3
#define GAIN_HND_CTN_VOL0 127
#define GAIN_HND_CTN_VOL1 127
#define GAIN_HND_CTN_VOL2 127
#define GAIN_HND_CTN_VOL3 127
#define GAIN_HND_CTN_VOL4 127
#define GAIN_HND_CTN_VOL5 127
#define GAIN_HND_CTN_VOL6 127
#define GAIN_HND_KEY_VOL 3
#define GAIN_HND_KEY_VOL0 67
#define GAIN_HND_KEY_VOL1 87
#define GAIN_HND_KEY_VOL2 107
#define GAIN_HND_KEY_VOL3 127
#define GAIN_HND_KEY_VOL4 147
#define GAIN_HND_KEY_VOL5 167
#define GAIN_HND_KEY_VOL6 255
然后要把这些数值写到NVRAM_EF_CUST_ACOUSTIC_DATA_DEFAULT[]和NVRAM_EF_AUDIO_EQUALIZER_DEFAULT[]这两个数组里面去。而最终这两个数组里面的数据会被写到logical_data_item_table_cust[]这个数组里面去。这个数组保存着手机里面各种初始化的参数。
4 MTK Camera参数设置
Camera里面也有很多初始化的参数需要设置。这些设置主要在camera_para.c文件里完成。
设置Camera的默认参数主要是在CAMERA_PARA_DEFAULT_VALUE和CAMERA_GAMMA_DEFAULT_VALUE这两个结构体里面。而这两个结构体里面的数据最终还是会被写到logical_data_item_table_cust[]这个数组里面。