i.mx6q LVDS 驅動修改記錄,修改imx6液晶時鐘
阿新 • • 發佈:2018-12-29
為了降低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);
+ }