AnsweredAssumed Answered

uboot lvds split 模式的设置

Question asked by sen li on Feb 7, 2017
Latest reply on Feb 19, 2017 by jimmychan

大家好!

            我现在用的是imx6q Linux3.14.52的BSP。LCD 是1920*720 LVDS的屏(split ),24位的色深。

            现在在Linux驱动中已经调好了,屏显示是正常的。

            但是现在在UBOOT里面显示不正常。

             我在mx6sabresd.c中修改了struct display_info_t const displays[]的时序,修改的和Linux驱动中是一样的。

 下面是修改的参数:            

struct display_info_t const displays[] = {{
.bus = 0,
.addr = 0,
.pixfmt = IPU_PIX_FMT_RGB24,
.detect = NULL,
.enable = enable_lvds,
.mode = {
#if 0
.name = "Hannstar-XGA",
.refresh = 60,
.xres = 1024,
.yres = 768,
.pixclock = 15385,
.left_margin = 220,
.right_margin = 40,
.upper_margin = 21,
.lower_margin = 7,
.hsync_len = 60,
.vsync_len = 10,
.sync = FB_SYNC_EXT,
.vmode = FB_VMODE_NONINTERLACED
#else

.name = "Hannstar-XGA",
.refresh = 60,
.xres = 1920,
.yres = 720,
.pixclock = 11210,
.left_margin = 16,
.right_margin = 16,
.upper_margin = 5,
.lower_margin = 16,
.hsync_len = 8,
.vsync_len = 2,
.sync = 0,
.vmode = FB_VMODE_NONINTERLACED
#endif
} },

 

另外修改了enable_lvds函数,将通道改为24位,并打开了SPLIT模式

static void enable_lvds(struct display_info_t const *dev)
{
struct iomuxc *iomux = (struct iomuxc *)
IOMUXC_BASE_ADDR;
u32 reg = readl(&iomux->gpr[2]);

#if 0
reg |= IOMUXC_GPR2_DATA_WIDTH_CH0_18BIT |
IOMUXC_GPR2_DATA_WIDTH_CH1_18BIT;
#else
reg |= IOMUXC_GPR2_DATA_WIDTH_CH0_24BIT |
IOMUXC_GPR2_DATA_WIDTH_CH1_24BIT |IOMUXC_GPR2_SPLIT_MODE_EN_MASK;
#endif
writel(reg, &iomux->gpr[2]);
printf("enable_lvds reg =0x%x\n",reg);
}

但是编译后显示不正常。

显示的logo图片是正确的,但是整个图像偏右了。另外背静色本来是黑色的,但是显示出来的背景色,靠右边四分之一的位置变成红色了。

另外测量了下CLOCK,是80MHZ。

我的屏是88M的,SPLIT模式两路都是输出44M,在LINUX驱动跑起来后就是44M。

但是在BOOT中却是80M左右。

我打印了 IOMUXC_GPR2 寄存器,设置和在驱动里面也是一样的。

请高手看看,是不是还有什么设置没有改对。

Outcomes