NXP imx6q android平台调试LVDS屏

一、快速修改参数快速测试方法:

修改文件

        modified:   kernel/drivers/video/of_display_timing.c
        modified:   kernel/drivers/video/videomode.c
        modified:   kernel/init/do_mounts.c
 

1、通过bootloader的arg参数传递值到kernel,kernel中lvds获取arg参数进行快速测试验证。

barebox中在env/boot/emmc文件中增加参数值

global.linux.bootargs.dyn.root="root=/dev/mmcblk3p2 rootwait rw pclk=50000000 hfp=16 hbp=160 hsync=8 vfp=2 vbp=12 vsync=3"

 

2、在kernel/init/do_mounts.c获取从barebox中获取到的参数

--- a/kernel/init/do_mounts.c
+++ b/kernel/init/do_mounts.c
@@ -290,6 +290,121 @@ static int __init root_dev_setup(char *line)

 __setup("root=", root_dev_setup);

+
+#if 1
+int lcdpara_pclk=0  ;
+
+int lcdpara_hfp =0 ;
+int lcdpara_hbp =0 ;
+int lcdpara_hsync  =0 ;
+
+int lcdpara_vfp  =0 ;
+int lcdpara_vbp =0 ;
+int lcdpara_vsync  =0 ;
+
+ int str2int(const char *str)
+ {
+     int temp = 0;
+     const char *ptr = str; 
+     if (*str == '-' || *str == '+')  
+     {                     
+         str++;
+     }
+     while(*str != 0)
+     {
+         if ((*str < '0') || (*str > '9')) 
+         {                      
+             break;
+         }
+         temp = temp * 10 + (*str - '0'); 
+         str++;     
+     }
+     if (*ptr == '-')    
+     {
+         temp = -temp;
+     }
+     return temp;
+ }
+
+static int __init lcdpara_pclk_setup(char *line)
+{
+       printk(KERN_INFO"lcdpara_pclk_setup line=%s",line);
+       lcdpara_pclk = str2int(line);
+       printk(KERN_INFO"lcdpara_pclk_setup lcdpara_pclk=%d",lcdpara_pclk);
+       return 1;
+}
+
+__setup("pclk=", lcdpara_pclk_setup);
+
+
+static int __init lcdpara_hfp_setup(char *line)
+{
+       printk(KERN_INFO"lcdpara_hfp_setup line=%s",line);
+       lcdpara_hfp = str2int(line);
+       printk(KERN_INFO"lcdpara_hfp_setup lcdpara_hfp=%d",lcdpara_hfp);
+       return 1;
+}
+
+__setup("hfp=", lcdpara_hfp_setup);
+
+
+static int __init lcdpara_hbp_setup(char *line)
+{
+       printk(KERN_INFO"lcdpara_hbp_setup line=%s",line);
+       lcdpara_hbp = str2int(line);
+       printk(KERN_INFO"lcdpara_hbp_setup lcdpara_hbp=%d",lcdpara_hbp);
+       return 1;
+}
+
+__setup("hbp=", lcdpara_hbp_setup);
+
+
+static int __init lcdpara_hsync_setup(char *line)
+{
+       printk(KERN_INFO"lcdpara_hsync_setup line=%s",line);
+       lcdpara_hsync = str2int(line);
+       printk(KERN_INFO"lcdpara_hsync_setup lcdpara_hsync=%d",lcdpara_hsync);
+       return 1;
+}
+
+__setup("hsync=", lcdpara_hsync_setup);
+
+
+
+static int __init lcdpara_vfp_setup(char *line)
+{
+       printk(KERN_INFO"lcdpara_vfp_setup line=%s",line);
+       lcdpara_vfp = str2int(line);
+       printk(KERN_INFO"lcdpara_vfp_setup line=%d",lcdpara_vfp);
+       return 1;
+}
+
+__setup("vfp=", lcdpara_vfp_setup);
+
+
+static int __init lcdpara_vbp_setup(char *line)
+{
+       printk(KERN_INFO"lcdpara_vbp_setup line=%s",line);
+       lcdpara_vbp = str2int(line);
+       printk(KERN_INFO"lcdpara_vbp_setup lcdpara_vbp=%d",lcdpara_vbp);
+       return 1;
+}
+
+__setup("vbp=", lcdpara_vbp_setup);
+
+
+static int __init lcdpara_vsync_setup(char *line)
+{
+       printk(KERN_INFO"lcdpara_vsync_setup line=%s",line);
+       lcdpara_vsync = str2int(line);
+       printk(KERN_INFO"lcdpara_vsync_setup lcdpara_vsync=%d",lcdpara_vsync);
+       return 1;
+}
+
+__setup("vsync=", lcdpara_vsync_setup);
+#endif
+
+
 static int __init rootwait_setup(char *str)
 {
        if (*str)

 

3、修改获取从barebox 传来的时序参数

--- a/kernel/drivers/video/videomode.c
+++ b/kernel/drivers/video/videomode.c
@@ -12,6 +12,16 @@
 #include <video/videomode.h>
 #include <linux/kernel.h>

+extern int lcdpara_pclk;
+
+extern int lcdpara_hfp;
+extern int lcdpara_hbp;
+extern int lcdpara_hsync;
+
+extern int lcdpara_vfp ;
+extern int lcdpara_vbp ;
+extern int lcdpara_vsync  ;
+
 extern int lcd_get_ver();

 void videomode_from_timing(const struct display_timing *dt,
@@ -30,21 +40,23 @@ void videomode_from_timing(const struct display_timing *dt,

        printk(KERN_ERR"videomode_from_timing i308_lcd_get_ver()=%d",i308_lcd_get_ver());
        if(lcd_get_ver()==1){
-               vm->pixelclock = 69000000;
+               vm->pixelclock = lcdpara_pclk;//65000000;
                vm->hactive = 1280;
-               vm->hfront_porch = 16;
-               vm->hback_porch = 160;
-               vm->hsync_len = 8;
+               vm->hfront_porch = lcdpara_hfp;//16;
+               vm->hback_porch = lcdpara_hbp;//160;
+               vm->hsync_len = lcdpara_hsync;//8;

                vm->vactive = 800;
-               vm->vfront_porch = 2;
-               vm->vback_porch = 12;
-               vm->vsync_len = 3;
+               vm->vfront_porch = lcdpara_vfp;//2;
+               vm->vback_porch = lcdpara_vbp;//12;
+               vm->vsync_len = lcdpara_vsync;//3;
        }
        printk(KERN_ERR"videomode_from_timing vm->pixelclock=%d\r\n",vm->pixelclock);
+
        printk(KERN_ERR"videomode_from_timing vm->hactive=%d\r\n",vm->hactive);
        printk(KERN_ERR"videomode_from_timing vm->hfront_porch=%d\r\n",vm->hfront_porch);
        printk(KERN_ERR"videomode_from_timing vm->hback_porch=%d\r\n",vm->hback_porch);
+       printk(KERN_ERR"videomode_from_timing vm->hsync_len=%d\r\n",vm->hsync_len);

        printk(KERN_ERR"videomode_from_timing vm->vactive=%d\r\n",vm->vactive);
        printk(KERN_ERR"videomode_from_timing vm->vfront_porch=%d\r\n",vm->vfront_porch);
(END)

 

--- a/kernel/drivers/video/of_display_timing.c
+++ b/kernel/drivers/video/of_display_timing.c
@@ -23,7 +23,19 @@
  * Every display_timing can be specified with either just the typical value or
  * a range consisting of min/typ/max. This function helps handling this
  **/
-
+
+extern int lcdpara_pclk;
+
+extern int lcdpara_hfp;
+extern int lcdpara_hbp;
+extern int lcdpara_hsync;
+
+extern int lcdpara_vfp ;
+extern int lcdpara_vbp ;
+extern int lcdpara_vsync  ;
+
+
+



@@ -51,32 +63,32 @@ static int parse_timing_property(struct device_node *np, const char *name,

-                               result->min     =160;
-                               result->min=160;
+                               result->min     =lcdpara_hbp;//160;


 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值