资讯详情

mtk 驱动笔记 lcd camera led tp

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

验证方式:adb shell查看:

shell@android:/sys/class/leds/lcd-backlight$ cat max_brightness

备注:MMI层最亮、最暗背光调节代码:

./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)

 

3.5 Flash驱动电压修改,读写速度方式修改:

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射频连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台