Firefly开源社区

打印 上一主题 下一主题

FirePrime RK3128点RGB屏 的困惑

72

积分

0

威望

0

贡献

技术小白

积分
72

FirePrime RK3128点RGB屏 的困惑

发表于 2016-6-30 14:11:39      浏览:11211 | 回复:11        打印     [复制链接] 楼主
本帖最后由 ljj3166 于 2016-6-30 14:12 编辑

最近需要点一块RGB屏,可支持888和565格式
主要用到FirePrime底板的D0-D23,、DEN、CLK、HS和VS等几个管脚
RGB的控制管脚被以太网复用
于是在rk3128-fireprime.dts和rk312x-pinctrl.desi文件里面
把gmac相关的引脚和功能都注释掉




RGB屏的DTSI:
  1. /{     
  2.     disp_timings:display-timings {
  3.         native-mode= <&timing0>;
  4.         timing0:timing0 {
  5.             screen-type= <SCREEN_RGB>;                           
  6.             out-face   = <OUT_P888>;
  7.             clock-frequency= <60000000>;               
  8.              hactive= <860>;
  9.              vactive= <480>;
  10.             hback-porch= <40>;
  11.             hfront-porch= <50>;
  12.             vback-porch= <12>;
  13.             vfront-porch= <30>;
  14.             hsync-len= <16>;
  15.             vsync-len= <3>;
  16.             hsync-active= <1>;//active low
  17.             vsync-active= <1>;//active low
  18.             de-active= <0>;//active high
  19.             pixelclk-active= <1>;//active low
  20.              swap-rb= <0>;
  21.              swap-rg= <0>;
  22.              swap-gb= <0>;
  23.         };
  24.     };
  25. };
复制代码

在rk3128-fireprime.dts中引用
同时把内核配置中与network相关的配置都去掉
编译内核后烧写除System以外的img文件
RGB屏不能正常工作
上示波器发现CLK、HS、VS和DEN都没有正常波形输出
看了一下底层的LCD驱动
RGB的使能在rk31xx_lvds.c文件中
  1. static int rk31xx_lvds_en(void)
  2. {
  3.         struct rk_lvds_device *lvds = rk31xx_lvds;
  4.         struct rk_screen *screen;

  5.         if (unlikely(!lvds) || lvds->sys_state)
  6.                 return 0;

  7.         screen = &lvds->screen;
  8.         rk_fb_get_prmry_screen(screen);

  9.         /* enable clk */
  10.         rk31xx_lvds_clk_enable(lvds);

  11.         switch (screen->type) {
  12.         case SCREEN_LVDS:
  13.                 rk31xx_output_lvds(lvds, screen);
  14.                 break;
  15.         case SCREEN_RGB:
  16.                 printk(KERN_ALERT"RGB SET!\n"); //<span style="background-color: rgb(255, 255, 255);">串口debug</span>
  17.                 rk31xx_output_lvttl(lvds, screen);
  18.                 break;
  19.         default:
  20.                 printk("unsupport screen type\n");
  21.                 break;
  22.         }

  23.         lvds->sys_state = true;
  24.         return 0;
  25. }
复制代码
很奇怪,RK3288有直接配置RGB的宏 v_RGB_OUT_EN
RK3128中直接用了个TTL相关的字眼
譬如,个人理解下面的代码就是用来配置RGB的
  1. static void rk31xx_output_lvttl(struct rk_lvds_device *lvds,
  2.                                 struct rk_screen *screen)
  3. {
  4.         u32 val = 0;

  5.         /* iomux to lcdc */
  6. #if defined(CONFIG_RK_FPGA)
  7.         grf_writel(0xffff5555, RK312X_GRF_GPIO2B_IOMUX);
  8.         grf_writel(0x00ff0055, RK312X_GRF_GPIO2C_IOMUX);
  9.         grf_writel(0x77771111, 0x00e8); /* RK312X_GRF_GPIO2C_IOMUX2 */
  10.         grf_writel(0x700c1004, RK312X_GRF_GPIO2D_IOMUX);
  11. #else
  12.         if (lvds->pins && !IS_ERR(lvds->pins->default_state))
  13.                 pinctrl_select_state(lvds->pins->p, lvds->pins->default_state);
  14. #endif

  15.         val |= v_LVDSMODE_EN(0) | v_MIPIPHY_TTL_EN(1);  /* enable lvds mode */
  16.         val |= v_LVDS_DATA_SEL(LVDS_DATA_FROM_LCDC);    /* config data source */
  17.         grf_writel(0xffff0380, RK312X_GRF_LVDS_CON0);

  18.         val = v_MIPITTL_CLK_EN(1) | v_MIPITTL_LANE0_EN(1) |
  19.                 v_MIPITTL_LANE1_EN(1) | v_MIPITTL_LANE2_EN(1) |
  20.                 v_MIPITTL_LANE3_EN(1);
  21.         grf_writel(val, RK312X_GRF_SOC_CON1);

  22.         /* enable lane */
  23.         lvds_writel(lvds, MIPIPHY_REG0, 0x7f);
  24.         val = v_LANE0_EN(1) | v_LANE1_EN(1) | v_LANE2_EN(1) | v_LANE3_EN(1) |
  25.                 v_LANECLK_EN(1) | v_PLL_PWR_OFF(1);
  26.         lvds_writel(lvds, MIPIPHY_REGEB, val);

  27.         /* set ttl mode and reset phy config */
  28.         val = v_LVDS_MODE_EN(0) | v_TTL_MODE_EN(1) | v_MIPI_MODE_EN(0) |
  29.                 v_MSB_SEL(1) | v_DIG_INTER_RST(1);
  30.         lvds_writel(lvds, MIPIPHY_REGE0, val);

  31.         rk31xx_lvds_pwr_on();
  32. printk(KERN_ALERT"RGB SET over!\n");//<span style="background-color: rgb(255, 255, 255);">串口debug</span>
  33.                
  34. }
复制代码

上面的两个代码中都加入了串口debug输出
在串口启动中,都能够正常输出两句串口信息
cat sys/class/graphics/fb0/fps也都能获得帧数
说明RGB的配置应该是成功的了
可是不知为何RGB屏不能正常点亮
感觉还是GPIO的MUX有问题

请大神支持一下解决思路,跪谢。




回复

使用道具 举报

72

积分

0

威望

0

贡献

技术小白

积分
72
发表于 2016-6-30 16:45:21      沙发
54zw 发表于 2016-6-30 15:33
参考这个:
http://developer.t-firefly.com/thread-9223-1-1.html

见好
拜读过这个帖子
我的处理方式也类似,还是得不到有效的波形
能详细描述一下管脚配置的处理吗?
祝好
回复

使用道具 举报

72

积分

0

威望

0

贡献

技术小白

积分
72
发表于 2016-6-30 17:02:11      板凳
54zw 发表于 2016-6-30 16:52
管脚配置在LCD控制上配置,其中只要配置SYNC信号,因为你在代码中找不到对数据信号的mux,因为数据信号脚 ...

非常感谢
现在在外场,晚些时候贴出来
祝好
回复

使用道具 举报

72

积分

0

威望

0

贡献

技术小白

积分
72
发表于 2016-6-30 17:42:30      地板
本帖最后由 ljj3166 于 2016-6-30 17:46 编辑
54zw 发表于 2016-6-30 16:52
管脚配置在LCD控制上配置,其中只要配置SYNC信号,因为你在代码中找不到对数据信号的mux,因为数据信号脚 ...

我直接把pinctrl.dtsi文件附上来了
rk312x-pinctrl.dtsi.zip (2.75 KB, 下载次数: 6)



截了个图


基本上都是默认的配置
不过把D18-D23都使能了

再狠一点,把管脚的宏定义都干掉了
rockchip-rk312x.h.zip (1.8 KB, 下载次数: 16)

也截了个图


应该不会是由于以太网功能复用了
谢谢大神支招
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表