您的位置:首页 > 其它

i.mx6q LVDS 驱动修改记录,修改imx6液晶时钟

2017-10-09 09:31 211 查看
为了降低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)) * 1000UL;
+       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);
+       }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: