1. 程式人生 > >i.mx6q LVDS 驅動修改記錄,修改imx6液晶時鐘

i.mx6q LVDS 驅動修改記錄,修改imx6液晶時鐘

為了降低imx6 linux LCD(LVDS)的時鐘頻率,做了驅動修改,其中,imx6的lvds驅動檔案路徑在:/drivers/video/mxc/ldb.c,可在應用程式中列印videoinfo結構體各個成員資訊,再在核心原始碼檔案中查詢,可用grep和正則表示式找出。


+++ b/drivers/video/mxc/ldb.c
@@ -113,11 +113,11 @@ static struct fb_videomode ldb_modedb[] = {
         FB_VMODE_NONINTERLACED,
         FB_MODE_IS_DETAILED,},
        {
-       "LDB-XGA"
, 60, 1024, 600, 15385, - 220, 40, - 21, 7, - 60, 10, - 0, + "LDB-XGA", 60/*refresh rate*/, 1024/*xres*/, 600/*yres*/, 22222/*15385 pixclock這裡要重新算,1000000/parent_clock, parent_clock就是lvds的源時鐘,可用示波器量出來*/, + 220/*left margin*/, 40/**/, + 21/*upper margin*/, 7/*lower margin*/, + 60/*hsync*/
, 10/*vsync*/, + 0/*sync*/, FB_VMODE_NONINTERLACED, FB_MODE_IS_DETAILED,}, { @@ -264,11 +264,16 @@ static int ldb_disp_setup(struct mxc_dispdrv_handle *disp, struct fb_info *fbi) if (ldb->setting[setting_idx].clk_en) clk_disable(ldb->setting[setting_idx].ldb_di_clk); pixel_clk = (PICOS2KHZ(fbi->var.pixclock)) * 1000U
L; + pixel_clk = pixel_clk/4*3;//新增修改這裡 ldb_clk_parent = clk_get_parent(ldb->setting[setting_idx].ldb_di_clk); - if ((ldb->mode == LDB_SPL_DI0) || (ldb->mode == LDB_SPL_DI1)) - clk_set_rate(ldb_clk_parent, pixel_clk * 7 / 2); - else - clk_set_rate(ldb_clk_parent, pixel_clk * 7); + if ((ldb->mode == LDB_SPL_DI0) || (ldb->mode == LDB_SPL_DI1)){ + clk_set_rate(ldb_clk_parent, pixel_clk * 7 / 2 / 13 * 9);//修改時鐘頻率 + printk(KERN_INFO"\n[%s]:%d_: LDB_SPL_DI0==0(*7/2/13*9), ldb_clock: %u\n", __func__, __LINE__, pixel_clk * 7 / 2); + } + else{ + clk_set_rate(ldb_clk_parent, pixel_clk * 7 / 13 * 9); + printk(KERN_INFO"\n[%s]:%d_: LDB_SPL_DI0!=0(*7/13*9), ldb_clock: %u\n", __func__, __LINE__, pixel_clk * 7); + }