1.首先根据6572的设计注意事项,确认好硬件接口电路图。下面是手册里面的介绍
2.根据自己的原理图来确认初始化时序,下面是SPI接口的RGB原理图
上面可以看到我们的屏是通过SPI接口初始化的。
3.开始在MT6572平台添加驱动。
1)修改pro.mk文件 分别增加lcm_lk lcm_kernel = kernel下面的文件夹 ,同时修改logo分辨率的大小。
2) 在custom/common/kernel/lcm目录下面新增一个文件夹,名字就是屏幕的名字即可。
3) 因为lk是一个链接到kernel的一个软链接,所以不需要再lk下面再次增加屏的名字。
4)修改LCM目录下面的mt65xx_list文件,增加自己在lcm文件里面的声明的LCM_DRV,就是向上面提供一个LCM接口。
5) 开始编写lcd驱动程序。
4.驱动程序的编写
#ifndef BUILD_LK
#include <linux/string.h>
#endif
#ifdef BUILD_LK
#include <platform/mt_gpio.h> //需要初始化GPIO的时候,需要加上这些头文件
#include <platform/mt_pmic.h> //需要初始化GPIO的时候,需要加上这些头文件
#elif (defined BUILD_UBOOT)
#include <asm/arch/mt6577_gpio.h> //需要初始化GPIO的时候,需要加上这些头文件
#else
#include <mach/mt_gpio.h> //需要初始化GPIO的时候,需要加上这些头文件
#include <mach/mt_pm_ldo.h> //需要初始化GPIO的时候,需要加上这些头文件
#endif
#include "lcm_drv.h"
#define FRAME_WIDTH (240)
#define FRAME_HEIGHT (320)
static LCM_UTIL_FUNCS lcm_util = {0};
#define SET_RESET_PIN(v) (lcm_util.set_reset_pin((v)))
#define UDELAY(n) (lcm_util.udelay(n))
#define MDELAY(n) (lcm_util.mdelay(n))
/*此部分完全由自己添加,根据自己的SPI接口,来初始化GPIO*/
#define SPI_CS(flag) (lcm_util.set_gpio_out(GPIO60,flag))
#define SPI_SDA(flag) (lcm_util.set_gpio_out(GPIO129,flag))
#define SPI_SCL(flag) (lcm_util.set_gpio_out(GPIO128,flag))
#define SPI_CS_H SPI_CS(1)
#define SPI_CS_L SPI_CS(0)
#define SPI_SCLK_H SPI_SCL(1)
#define SPI_SCLK_L SPI_SCL(0)
#define SPI_DATA_H SPI_SDA(1)
#define SPI_DATA_L SPI_SDA(0)
static __inline void send_ctrl_cmd(unsigned int cmd)
{
}
static __inline void send_data_cmd(unsigned int data)
{
}
static __inline void set_lcm_register(unsigned int regIndex,
unsigned int regData)
{
send_ctrl_cmd(regIndex);
send_data_cmd(regData);
}
static void lcm_set_util_funcs(const LCM_UTIL_FUNCS *util)
{
memcpy(&lcm_util, util, sizeof(LCM_UTIL_FUNCS));
}
static int SPI_Gpio_init(void)
{
lcm_util.set_gpio_mode(GPIO60, GPIO_MODE_00);
lcm_util.set_gpio_dir(GPIO60, GPIO_DIR_OUT);