基于MTK65xx平台lcm和背光驱动的编写

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于MTK65xx平台lcm和背光驱动的编写一、与LCD驱动相关的主要文件路径\mediatek\platform\mt6573\uboot\mt6573_disp_drv.c\mediatek\platform\mt6573\uboot\mt6573_disp_drv_dpi.c\mediatek\platform\mt6573\uboot\mt6573_disp_drv_dbi.c\mediatek\platform\mt6573\uboot\mt6573_dpi_drv.c\mediatek\platform\mt6573\uboot\mt6573_dsi_drv.c\mediatek\platform\mt6573\uboot\mt6573_lcd_drv.c\mediatek\source\kernel\drivers\video\mtkfb.c\mediatek\source\kernel\drivers\video\disp_drv.c\mediatek\source\kernel\drivers\video\disp_drv_dpi.c\mediatek\source\kernel\drivers\video\disp_drv_dbi.c\mediatek\platform\mt6573\kernel\drivers\video\lcd_drv.c\mediatek\platform\mt6573\kernel\drivers\video\dpi_drv.c\mediatek\platform\mt6573\kernel\drivers\video\dsi_drv.c\mediatek\custom\common\kernel\lcm\LCM_NAME\LCM_NAME.c\mediatek\platform\mt6573\uboot\mt6573_pwm.c\mediatek\platform\mt6573\uboot\mt65xx_leds.c\mediatek\source\kernel\drivers\leds\leds.c\mediatek\custom\ginwave73_gb\kernel\leds\mt65xx\cust_leds.c二、怎样新建一个LCD驱动LCD模组主要包括LCD显示屏和驱动IC。比如LF040DNYB16a模组的驱动IC型号为NT35510。要在MTK6573平台上新建这个lcd的驱动,步骤如下:1、在mediatek\custom\common\kernel\lcm目录下新建文件夹nt35510,在此文件夹中新建nt35510.c。这就是LCM硬件层驱动文件。2、修改\mediatek\custom\common\kernel\lcm\mt65xx_lcm_list.c,在lcm_driver_list[lcm_count]中增加nt35510_lcm_drv。3、打开mediatek\config\ginwave73_gb\ProjectConfig.mk,修改CUSTOM_UBOOT_LCM=nt35510,CUSTOM_KERNEL_LCM=nt35510;修改LCM_WIDTH、LCM_HEIGHT、BOOT_LOGO为正确的值。三、驱动文件(nt35510.c)主要任务是实现LCM_DRIVERnt35510_lcm_drv={.name=nt35510,.set_util_funcs=lcm_set_util_funcs,.get_params=lcm_get_params,.init=lcm_init,.suspend=lcm_suspend,.resume=lcm_resume,.compare_id=lcm_compare_id,};(1)lcm_get_params主要是设置LCM相关的参数,数据结构如下:typedefstruct{LCM_TYPEtype;LCM_CTRLctrl;//!howtocontrolLCMregistersunsignedintwidth;unsignedintheight;unsignedintio_select_mode;//DBIorDPIshouldselectIOmodeaccordingtochipspec/*particularparameters*/LCM_DBI_PARAMSdbi;LCM_DPI_PARAMSdpi;LCM_DSI_PARAMSdsi;}LCM_PARAMS;LCM_TYPE定义LCM与HOST间的接口,主要分为3种,DBI,DPI,DSI。其中DBI又分为parallelDBI和serialDBI。parallelDBI(B型DBI)的命令和数据都在数据总线D[17:0]上传输。CSX为低时数据有效。WRX线控制D[17:0]为写时序,RDX控制D[17:0]为读时序。D/CX指示D[17:0]上传输的是命令还是数据。注:MT6573使用LPA0线作为D/CX线,LPCE线作为CSX线,LWRB线作为WRX线,LRDB线作为RDX线。serialDBI(C型DBI)的命令和数据都在SPI接口上传输。CSX为低时SDA有效。SCL提供时钟,DIN输入,DOUT输出。当SDA_EN=1时,DIN线成为双向的SDA线,即可输入又可输出,DOUT线不用。C型DBI分为3线(没有D/CX线)和4线(有D/CX线)两种。3线的使用一个D/CXbit来区分命令/数据,4线的使用D/CX线来区分命令/数据。注:MT6573使用LSA0线作为D/CX线,LSCE线作为CSX线。LSCK线作为SCL线,LSDA线作为SDA线。DPI的命令在SPI上传输,Pixeldata(RGBdata)在D[17:0]上传输。其命令传输方式与serialDBI相同。对于Pixeldata(RGBdata),需要自己的4条控制线:DPICK_PIN(RGB时钟)、DPIDE_PIN(RGB数据有效)、DPIVSYNC(场同步)、DPIHSYNC(行同步)。typedefenum{LCM_CTRL_NONE=0,LCM_CTRL_SERIAL_DBI,LCM_CTRL_PARALLEL_DBI,LCM_CTRL_GPIO}LCM_CTRL定义LCM与HOST之间传递command的方式,有SERIAL_DBI、PARALLEL_DBI、GPIO几种控制方式。如果是DPI接口,其LCM_CTRL可以选择SERIAL_DBI或者GPIO。Width和height定义LCM的宽度和高度。io_select_mode有这些选项:0(LCD_IO_SEL_16CPU_24RGB),1(LCD_IO_SEL_18CPU_18RGB),2(LCD_IO_SEL_24CPU_8RGB),3(LCD_IO_SEL_24CPU_ONLY)。根据driverIC的定义填写。LCM_×××_PARAMS根据不同的LCM_TYPE取值,这是针对DBI/DPI/DSI接口类型的详细参数定义。比如LCM_DPI_PARAMS定义如下:typedefstruct{unsignedintmipi_pll_clk_ref;//0..1unsignedintmipi_pll_clk_div1;//0..63unsignedintmipi_pll_clk_div2;//0..15unsignedintdpi_clk_div;//2..32unsignedintdpi_clk_duty;//(dpi_clk_div-1)..31/*polarityparameters*/LCM_POLARITYclk_pol;LCM_POLARITYde_pol;LCM_POLARITYvsync_pol;LCM_POLARITYhsync_pol;/*timingparameters*/unsignedinthsync_pulse_width;unsignedinthsync_back_porch;unsignedinthsync_front_porch;unsignedintvsync_pulse_width;unsignedintvsync_back_porch;unsignedintvsync_front_porch;/*outputformatparameters*/LCM_DPI_FORMATformat;LCM_COLOR_ORDERrgb_order;unsignedintis_serial_output;/*intermediatebuffersparameters*/unsignedintintermediat_buffer_num;//2..3/*iopadparameters*/LCM_DRIVING_CURRENTio_driving_current;}LCM_DPI_PARAMS;其中,第一段前4项用于控制DPI时钟,计算公式如下:PixelClockFrequency=26MHz*mipi_pll_clk_div1/(mipi_pll_clk_ref+1)/(2*mipi_pll_clk_div2)/dpi_clk_div第二段4个参数设置DPICK_PIN(RGB时钟)、DPIDE_PIN(RGB数据有效)、DPIVSYNC(场同步)、DPIHSYNC(行同步)线是上升沿还是下降沿有效。行同步脉冲开始前和开始后的几个时钟周期,是行信号消隐期;场同步开始前和开始后的几个行周期,是场信号消隐期。消隐期不传递图像信号。消隐期特性由第三段六个参数定义:hsync_pulse_width;hsync_back_porch;hsync_front_porch;vsync_pulse_width;vsync_back_porch;vsync_front_porch;LCM_DPI_FORMAT指定每个像素中RGB各占几个bit.LCM_COLOR_ORDER指定RGB的顺序。上述参数的值,均依照LCMspec及驱动ICdatasheet中的定义。这里要说说一个特别之处。NT35510使用DPI接口,SERIAL_DBIctrl方式时,没有D/CX线,datasheet上定义的传输方式是9bits,即在数据byte前加个D/CXbit。但使用了NT35510的LCM——LF040DNYB16a,其spec中却另外定义了其串口使用16bits模式传输。Byte1是标志byte,前3位分别为R/Wbit,D/CXbit,High/Lowbit;Byte2则是命令或数据。NT35510的每个command长度为2byte,还可能带有若干bytes的参数,比如命令F001,参数AA,应该这样传输:0x200xF00x000x010x400xAA。(2)lcm_init主要实现LCM的初始化,包括如下步骤:config_gpio——配置GPIO。发送reset信号。RESETpinlow和RESETpinhigh需要持续的时间一般为若干ms,以datasheet为准。init_lcm_registers——初始化LCM的寄存器。具体可以厂家提供的初始代码为参考。一般在此函数末尾,都会使用唤醒命令组(见后文),使LCM进入工作状态。(3)lcm_suspend使LCM休眠,使用特定的命令,并遵守datasheet定义的时间特性。常用命令组如下:0X2800(or0X28)——setdisplayoff0X1000(or0X10)——entersleepmode对nt35510而言,还有一种更深睡眠的状态——deepstandbymode,使用如下命令进入:0X4F000X01(4)lcm_resume使LCM苏醒,使用特定的命令,并遵守datasheet定义的时间特性。唤醒命令组:0X1100(or0X11)——exitsleepmode0X2900(or0X29)——setdisplayon对nt35510而言,如果在lcm_suspend中使LCMen

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功