Linux驱动之系统移植----uboot移植_修改LCD驱动(uboot无设备树版本)

Uboot版本: u-boot.2016.03
上一篇文章已经讲述了如何添加自定义板卡
本文讲述如何修改uboot中的LCD驱动

修改LCD驱动参数

进入board/freescale/mx6ull_jzy_emmc/mx6ull_jzy_emmc.c文件, 找到
static iomux_v3_cfg_t const lcd_pads[] 数组定义
这个数组是uboot对LCD引脚的定义
根据自身开发板修改引脚.

找到struct display_info_t const displays[] 结构体定义, 这个结构体定义LCD的具体参数, 修改成自身手头上LCD模块的参数

struct display_info_t {
	int	bus;
	int	addr;
	int	pixfmt;
	int	(*detect)(struct display_info_t const *dev);
	void	(*enable)(struct display_info_t const *dev);
	struct	fb_videomode mode;
};

struct fb_videomode {
	const char *name;	/* optional */
	u32 refresh;		/* optional */
	u32 xres;
	u32 yres;
	u32 pixclock;
	u32 left_margin;
	u32 right_margin;
	u32 upper_margin;
	u32 lower_margin;
	u32 hsync_len;
	u32 vsync_len;
	u32 sync;
	u32 vmode;
	u32 flag;
};

pixfmt是像素格式,也就是一个像素点是多少位,如果是 RGB565的话就是 16位,如果
是 888的话就是 24位,一般使用 RGB888
name:LCD名字,要和环境变量中的 panel相等。
xres、yres:LCD X轴和 Y轴像素数量。
pixclock:像素时钟,每个像素时钟周期的长度,单位为皮秒。
left_margin:HBP,水平同步后肩。
right_margin:HFP,水平同步前肩。
upper_margin:VBP,垂直同步后肩。
lower_margin:VFP,垂直同步前肩。
hsync_len:HSPW,行同步脉宽。
vsync_len:VSPW,垂直同步脉宽。
vmode:大多数使用 FB_VMODE_NONINTERLACED,也就是不使用隔行扫描。

修改以后

struct display_info_t const displays[] = {{
	.bus = MX6UL_LCDIF1_BASE_ADDR,
	.addr = 0,
	.pixfmt = 24,
	.detect = NULL,
	.enable	= do_enable_parallel_lcd,
	.mode	= {
		.name			= "TFT7016",
		.xres           = 1024,
		.yres           = 600,
		.pixclock       = 19531,
		.left_margin    = 140,
		.right_margin   = 160,
		.upper_margin   = 20,
		.lower_margin   = 12,
		.hsync_len      = 20,
		.vsync_len      = 3,
		.sync           = 0,
		.vmode          = FB_VMODE_NONINTERLACED
} } };

修改LCD名字:
打开 mx6ull_alientek_emmc.h,找到所有如下语句:

panel=TFT43AB 

将其改为:

panel=TFT7016 

panel的值要与示例代码 33.2.6.4中的.name成员变量的值一致

重新编译烧写uboot即可

启动uboot之后修改emmc中的环境变量

setenv panel TFT7016 
saveenv 

补充:
在board/freescale/mx6ull_jzy_emmc/mx6ull_jzy_emmc.c中

void do_enable_parallel_lcd(struct display_info_t const *dev)
{
	enable_lcdif_clock(dev->bus);

	imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads));

	/* Reset the LCD */
	gpio_direction_output(IMX_GPIO_NR(5, 9) , 0);
	udelay(500);
	gpio_direction_output(IMX_GPIO_NR(5, 9) , 1);

	/* Set Brightness to high */
	gpio_direction_output(IMX_GPIO_NR(1, 8) , 1);
}

这个是LCD的使能过程.
其中gpio_direction_output(IMX_GPIO_NR(1, 8) , 1); 的第二个参数修改为0,即可关闭LCD背光.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值