1. LCD
1.1如何新建一个LCD驱动
LCD模块主要包括LCD显示和驱动IC。比如LF040DNYB16a模组的驱动IC型号为NT35510。要在MT新建577平台lcd步骤如下:
A.新建文件夹nt35510:
\mediatek\custom\common\kernel\lcm\nt35510
\mediatek\custom\common\lk\lcm\nt35510 //\mediatek\custom\common\uboot\lcm\nt35510
B.修改\mediatek\custom\common\kernel\lcm\mt65xx_lcm_list.c, 在lcm_driver_list [ lcm_count ] 中增加nt35510_lcm_drv。
C.打开mediatek\config\ginwave73_gb\ProjectConfig.mk:
BUILD_LK=yes //BUILD_UBOOT=yes
BOOT_LOGO=wsvganl
CUSTOM_KERNEL_LCM = nt35510
CUSTOM_LK_LCM= nt35510 // CUSTOM_UBOOT_LCM =nt35510
LCM_WIDTH=600
LCM_HEIGHT=1024
移植驱动文件的原则:
根据具体平台填写相应函数,不能直接复制整个文件,避免不必要的编译和接口错误。
1.3 LCD显示旋转(水平和垂直屏幕旋转,与许多界面相关,需要统一修改)
方法1:修改横竖屏分辨率(也需修改)TP驱动):
LCM_WIDTH=1024
LCM_HEIGHT=600
方式二:lcm只需修改显示旋转:(也需要旋转camera驱动)
MTK_LCM_PHYSICAL_ROTATION=90
MTK_TOUCH_PHYSICAL_ROTATION_RELATIVE_TO_LCM=90
camera 旋转
Z:\jb2\_131217\alps\mediatek\custom\\hal\imgsensor\src\cfg_setting_imgsensor.cpp
static SensorOrientation_T const inst = {
u4Degree_0 : 180,//90,// main sensor in degree (0, 90,180, 270)
u4Degree_1 : 0,//90,// sub sensor in degree (0, 90, 180, 270)
1.4 lcm参数修改
\mediatek\custom\common\kernel\lcm\rgb_mt8193
staticvoid lcm_get_params(LCM_PARAMS *params){}
lcd rgb频率:
//params->dpi.mipi_pll_clk_ref =536870912;
params->dpi.mipi_pll_clk_ref= (33.3*(16777216*8*2))/26; //33.3MHz
//params->dpi.mipi_pll_clk_ref= 536870912; //52.0MHz
colorformat 修改
params->dpi.format = LCM_DPI_FORMAT_RGB888; // format is 24 bit//LCM_DPI_FORMAT_RGB666
1.5 修改显示分辨率:
1.5.1配置修改:
打开mediatek\config\ginwave73_gb\ProjectConfig.mk:
LCM_WIDTH=600
LCM_HEIGHT=1024
Lk_logo= wsvganl 及相关logo文件修改
15.2 lcm驱动分辨率修改,可自行手动修改(注意横竖数值对应)
对应的lcm :\mediatek\custom\common\kernel\lcm\rgb_mt8193
#defineFRAME_WIDTH (1024)
#defineFRAME_HEIGHT (600)
15.3 tpsensor driver修改,对应分辨率驱动(fae sensor提供驱动代码)。
\alps\mediatek\custom\prj\kernel\touchpanel\GSLx680\GSLx680.h
#defineSCREEN_MAX_X 480
#defineSCREEN_MAX_Y 800
2. leds 配置
CUSTOM_KERNEL_LEDS= mt65xx
mediatek\custom\prj\kernel\leds\mt65xx\cust_leds.c
mediatek\custom\prj\lk\cust_leds.c
static structcust_mt65xx_led cust_led_list[MT65XX_LED_TYPE_TOTAL] = {
{"red",MT65XX_LED_MODE_NONE, -1,{0}},
{"green",MT65XX_LED_MODE_NONE, -1,{0}},
{"blue",MT65XX_LED_MODE_NONE, -1,{0}},
{"jogball-backlight",MT65XX_LED_MODE_NONE, -1,{0}},
{"keyboard-backlight",MT65XX_LED_MODE_NONE,-1,{0}},
{"button-backlight", MT65XX_LED_MODE_NONE, -1,{0}}, // modify
{"lcd-backlight",MT65XX_LED_MODE_PWM,PWM1,{PWM_CLK_NEW_MODE_BLOCK,CLK_DIV128,4,4}}, //modify
//{"lcd-backlight",MT65XX_LED_MODE_CUST,(int)DISP_SetBacklight,{0}},
};
..\mediatek\platform\mt6582\kernel\drivers\leds\leds.c
mt65xx_flashlight_on(){}
mt65xx_flashlight_off(){}
2.1 LED背光亮度修改:
mediatek\source\kernel\drivers\leds\leds.c
shell@android:/sys/class/leds/lcd-backlight$ cat max_brightness
./config.xml:
<integername="config_screenBrightnessDim">20</integer>
\alps\frameworks\base\core\java\android\os\PowerManager.java:
private staticfinal int MAXIMUM_BACKLIGHT = android.os.PowerManager.BRIGHTNESS_ON;
3. Flash配置:
3.1 型号配置:
3.1.1 CUSTOM_MEMORY_HDR(需要确认是否是MTK认证的flash ic)
mediatek\custom\$(PROJECT)\preloader\inc\custom_MemoryDevice.h
#defineBOARD_ID MT6577_EVB
#defineCS_PART_NUMBER[0] H9TP32A4GDMCPR_KDM
#defineCS_PART_NUMBER[1] KMKUS000VM_B410
备注:新增flash ic添加到此处,flash可以做到兼容;不能兼容相同IC Id的memeory ic.
3.2 特定项目不同类型分区定义信息(是否定义、顺序):
mediatek\custom\\kernel\core\src\partition.c
structpart_name_map g_part_name_map[PART_MAX_COUNT] = {
{"preloader", PART_PRELOADER, "rawdata", 0, 0, 0},
{"dsp_bl", PART_DSP_DL, "rawdata", 1, 0, 0},
{"mbr", PART_MBR, "raw data", 2, 1, 1},
{"ebr1", PART_EBR1, "raw data", 3, 1, 1},
{"pmt", PART_PMT, "raw data", 4, 0, 0},
{"nvram", PART_NVRAM, "rawdata", 5, 0, 0},
{"seccfg", PART_SECURE, "raw data", 6, 0, 0},
{"uboot", PART_UBOOT, "raw data", 7, 1, 1},
{"boot", PART_BOOTIMG, "raw data", 8, 1, 1},
{"recovery", PART_RECOVERY, "rawdata", 9, 1, 1},
{"sec_ro", PART_SECSTATIC, "ext4", 10, 0, 0},
{"misc", PART_MISC, "raw data", 11, 0, 0},
{"logo", PART_LOGO, "raw data", 12, 1, 1},
{"expdb", PART_APANIC, "raw data", 13, 0, 0},
{"system", PART_ANDSYSIMG, "ext4", 14, 1, 1},
{"cache", PART_CACHE, "ext4", 15, 1, 1},
{"userdata", PART_USER, "ext4", 16, 1, 1},
{"fat", PART_FAT, "fat", 17, 0, 0},
};
3.3 emmc scat 分区大小设置(emmc) :
可对emmc进行分区,修改preloader\systemimage\userdata\FAT等各个分区。
\alps\mediatek\build\tools\ptgen\MT6577\partition_table_MT6577.xls
备注:Cache分区需要保持在512mb左右,否则系统会比较慢,响应迟缓。
3.4 FLASH参数配置文件位置(MemoryDeviceList_MT6577.xls):
MEMORY_DEVICE_XLS =
mediatek\build\tools\emigen\$(MTK_PLATFORM)\MemoryDeviceList_$(MTK_PLATFORM).xls
.xls文件含三个页面:
MT6577(page one):配置Flash Vendor Id 对应的硬件参数。
NAND(page two):
emmc_region(pagethree)
mediatek\custom\konka73_gb\kernel\core\src\board.c
struct msdc_hw msdc0_hw = {
.clk_src = 1,
.cmd_edge =MSDC_SMPL_FALLING,
.data_edge =MSDC_SMPL_FALLING,
.clk_drv = 5, //: 0 //memory驱动电压
.cmd_drv = 5, //: 0
.dat_drv = 5, // : 0
#ifdefMTK_EMMC_SUPPORT
.data_pins = 8,
#else
.data_pins = 4,
#endif
.data_offset = 0,
#ifdefMTK_EMMC_SUPPORT
.flags = MSDC_SYS_SUSPEND | MSDC_HIGHSPEED,//memory读写速度
// .flags = MSDC_SYS_SUSPEND | MSDC_HIGHSPEED |MSDC_UHS1 | MSDC_DDR,
//.flags = MSDC_SYS_SUSPEND,
#else
.flags =MSDC_SDCARD_FLAG,
#endif
3.6 emmc FAT分区划分:
emmc型号、emmc软件分区都会影响FAT分区的大小。
验证FAT Size需要对应emmc型号机器下载对应emmc软件分区的软件,不能预先下载FAT部分(影响实际FAT分区大小):
adb shell
cat /proc/emmc
cat /proc/partition获取大小。
4.GPIO/EINT/ADC/KEYPAD/PMIC 配置(根据原理图设计,可有原理硬件工程师指导填写即可):
4.1工具及dws文件位置:
mediatek\source\dct\DrvGen
mediatek\custom\$(PROJECT)\kernel\dct\dct\codegen.dws
4.2 dws配置文件位置:
.\mediatek\build\makemtk.mk
4.3 gpio设置方法:
mt_set_gpio_mode(GPIO_CTP_EN_PIN,GPIO_CTP_EN_PIN_M_GPIO);
mt_set_gpio_dir(GPIO_CTP_EN_PIN,GPIO_DIR_OUT); //GPIO_DIR_IN);
mt_set_gpio_out(GPIO_CTP_EN_PIN,GPIO_OUT_ZERO); // GPIO_OUT_ONE);
5.keypad
5.1按键配置(根据原理图):DCT(Driver Customization Tool):
..\mediatek\custom\prj\kernel\dct\dct\codegen.dws
.. \mediatek\source\dct\DrvGen.exe
客制化:按键定义表、de-bounce time 、Power key Eint Gpio、DownLoadKey、|Mode Key、Factory Key、Recovery Key
5.2factory mode工厂模式按键定义
..\mediatek\custom\\factory\inc\cust_keys.h
//工厂按键测试映射表,在.dws中配置按键映射表后自动生成
\alps\mediatek\custom\prj\kernel\dct\dct\cust_kpd.h
#defineKEYS_PWRKEY_MAP { KEY_POWER,"Power" }
#defineDEFINE_KEYS_KEYMAP(x) \
struct key x[] = { \
KEYS_PWRKEY_MAP, \
{ KEY_HOME, "Home" }, \
{ KEY_MENU, "Menu" }, \
{ KEY_HOMEPAGE, "HomePage" }, \
}
//工厂模式按键定义
#define CUST_KEY_UP KEY_UP
#defineCUST_KEY_VOLUP KEY_PAGEUP // KEY_VOLUMEUP
#defineCUST_KEY_DOWN KEY_DOWN
#defineCUST_KEY_VOLDOWN KEY_VOLUMEDOWN // KEY_VOLUMEDOWN
#defineCUST_KEY_LEFT KEY_MENU
#defineCUST_KEY_CENTER KEY_HOMEPAGE
#define CUST_KEY_RIGHT KEY_BACK
#defineCUST_KEY_CONFIRM KEY_VOLUMEUP // KEY_HOME
#defineCUST_KEY_BACK KEY_POWER
5.3 recoverymode恢复模式按键定义
\mediatek\custom\prj\recovery\inc\cust_keys.h
#defineRECOVERY_KEY_DOWN KEY_VOLUMEDOWN
#defineRECOVERY_KEY_UP KEY_VOLUMEDOWN
#defineRECOVERY_KEY_ENTER KEY_VOLUMEUP
#defineRECOVERY_KEY_MENU KEY_POWER
5.4 home键配置(直接引出的,不需要在.dws中定义按键映射)
\alps\mediatek\custom\prj\kernel\kpd\kpd\mtk_kpd.h
#defineKPD_PMIC_RSTKEY_MAP KEY_HOME
home键添加唤醒功能
\alps\mediatek\config\prj\mtk-kpd.kl
key 102 HOME WAKE
6.PM 充电
6.1 配置文件位置:
CUSTOM_KERNEL_BATTERY= battery
mediatek\custom\\kernel\battery\battery\cust_battery.h
mediatek\custom\\kernel\battery\battery\custom_fuel_gauge.h
6.2充电常用参数修改:
..\mediatek\custom\\kernel\battery\battery\cust_battery.h
6.2.1充电电流修改:
#defineUSB_CHARGER_CURRENT Cust_CC_550MA // :Cust_CC_450MA
#define AC_CHARGER_CURRENT Cust_CC_800MA // : Cust_CC_650MA
6.2.2.充电电阻设定(根据硬件的bom):
#defineR_CURRENT_SENSE 2 //0.2 Ohm// 0.2欧姆
6.2.3 充电温度检测设定
#defineBAT_TEMP_PROTECT_ENABLE 1 //
// #defineBAT_NTC_TSM_1
NTC修改为10K电阻或者47K电阻(NTC 为电池温度保护NegativeTemperature Coefficient)
#define BAT_NTC_101 //#define BAT_NTC_47 0
其他:
#defineV_CHARGER_MIN 4400 //modify //4400 // 4.4 V
#defineV_CHARGER_ENABLE 1 //1:ON , 0:OFF //
6.7充电界面显示修改:
\mediatek\custom\\lk\include\target\cust_display.h//坐标
\mediatek\platform\mt6577\lk\mt_logo.c//显示
6.8 电池容量、电池曲线修改:
电池容量修改:
mediatek\custom\\kernel\battery\battery\custom_fuel_gauge.h
#define Q_MAX_POS_50 ((2168* 1316) / 1307)
#define Q_MAX_POS_25 2168
#define Q_MAX_POS_0 ((2168 * 1220) / 1307)
#define Q_MAX_NEG_10 ((2168 * 1162) / 1307)
#define Q_MAX_POS_50_H_CURRENT ((2168 * 1295) / 1307)
#define Q_MAX_POS_25_H_CURRENT ((2168 * 1270) / 1307) #define Q_MAX_POS_0_H_CURRENT ((2168 * 1102) / 1307) #define Q_MAX_NEG_10_H_CURRENT ((2168 * 599) / 1307)
电池曲线集成方式:(电压-百分比对应表需要电池厂商提供)
mediatek\custom\\kernel\battery\battery\cust_fuel_gauge.h
BATTERY_PROFILE_STRUCbattery_profile_t1[] =// T1 0C
BATTERY_PROFILE_STRUCbattery_profile_t2[] =// T2 25C
7.camera
7.1 相关代码位置:
mediatek\config\XXXX(红色字为具体的项目名)
文件:ProjectConfig.mk
CUSTOM_KERNEL_IMGSENSOR = …… gc2235_raw
CUSTOM_KERNEL_MAIN_IMGSENSOR = …… gc2235_raw
CUSTOM_HAL_IMGSENSOR = …… gc2235_raw
CUSTOM_HAL_MAIN_IMGSENSOR = …… gc2235_raw
kernel:
\mediatek\custom\common\kernel\imgsensor\gc2235_raw
mediatek\custom\common\kernel\imgsensor\src
文件:kd_sensorlist.h
添加内容:
UINT32 GC2235SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);
ACDK_KD_SENSOR_INIT_FUNCTION_STRUCT
kdSensorList[MAX_NUM_OF_SUPPORT_SENSOR+1] =
{
#if defined(GC2235_RAW)
{GC2235_SENSOR_ID, SENSOR_DRVNAME_GC2235_RAW, GC2235SensorInit},
#endif
};
mediatek\custom\common\kernel\imgsensor\inc
文件:kd_imgsensor.h
添加内容:
#define GC2235_SENSOR_ID 0x2235
#define SENSOR_DRVNAME_GC2235_RAW "gc2235"
hal
\mediatek\custom\common\hal\imgsensor\gc2235_raw
mediatek\custom\common\hal\imgsensor\src
文件:sensorlist.cpp
添加内容:
MSDK_SENSOR_INIT_FUNCTION_STRUCT SensorList[] =
{
…………
#if defined(GC2235_RAW)
RAW_INFO(GC2235_SENSOR_ID, SENSOR_DRVNAME_GC2235_RAW, NULL),
#endif
…………
};
注意:在 kdSensorList 和 SensorList里面添加驱动的时候要注意,Sensor添加的位置要一样。否则驱动会跑乱,轻则 ISP参数不对,重则 Sensor 无法启动。
7.2 拍照图片尺寸设置:
..\mediatek\custom\\hal\camera\camera\cfg_ftbl_$prj$_raw_main.h
//Capture Size
CONFIG_FEATURE(FID_CAP_SIZE,
BY_DEFAULT(CAPTURE_SIZE_1600_1200),
/*BY_DEFAULT(CAPTURE_SIZE_2560_1920), modify*/
CAPTURE_SIZE_640_480,
CAPTURE_SIZE_1280_960,CAPTURE_SIZE_1600_1200,
)
7.3 Camera物理角度旋转
90度:
\alps\mediatek\custom\$prj$\hal\imgsensor\src\cfg_setting_imgsensor.cpp
static SensorOrientation_T const inst = {
u4Degree_0 : 180,//90, // main sensor in degree (0, 90,180, 270)
u4Degree_1 : 0,//90, // sub sensor in degree (0, 90, 180, 270)
180度:
Sensor FAE提供修改方法。
7.4Camera 相同sensor id兼容方式(前后sensor id一致):
//配置区分:
CUSTOM_KERNEL_IMGSENSOR = gc0308_yuv# gc0308_sub_yuv
CUSTOM_KERNEL_MAIN_IMGSENSOR =gc0308_yuv # gc0308_sub_yuv
CUSTOM_HAL_IMGSENSOR = gc0308_yuv# gc0308_sub_yuv
CUSTOM_HAL_MAIN_IMGSENSOR = gc0308_yuv# gc0308_sub_yuv
//kernel:函数名也要区分
\alps\mediatek\custom\common\kernel\imgsensor\gc0308_sub_yuv
\alps\mediatek\custom\common\kernel\imgsensor\gc0308_yuv
//hal: 函数名也要区分
\alps\mediatek\custom\common\hal\imgsensor\gc0308_sub_yuv
\alps\mediatek\custom\common\hal\imgsensor\gc0308_yuv
//kdSensorList 和 SensorList里面添加驱动也要区分,sensor id不要区分,写成一致,根据前后摄像头开关代码区分。
#define GC0328_SENSOR_ID 0x009D
#defineGC0328_SUB_SENSOR_ID 0x9D9D
\alps\mediatek\custom\common\kernel\imgsensor\gc0328frontyuv_Sensor.c
GC0328_FRONTGetSensorID(){
if (sensor_id == GC0328_SENSOR_ID) {
sensor_id = GC0328_FRONT_SENSOR_ID; //---lcz
break;
}
if(sensor_id != GC0328_FRONT_SENSOR_ID) //---lcz
{
return ERROR_SENSOR_CONNECT_FAIL;
}
}
GC0328_FRONTOpen(){
if (sensor_id == GC0328_SENSOR_ID) {
sensor_id = GC0328_FRONT_SENSOR_ID; //---lcz
break;
}
if(sensor_id != GC0328_FRONT_SENSOR_ID) {
标签: jb1g射频连接器