找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

求教RGB如何整组调换?

[复制链接]
跳转到指定楼层
楼主
any012 发表于 2023-2-7 10:23:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
用972画了个板子,为了布线时不那么拧,将R和B调换了,变成了BGR顺序。
接到屏幕后,红色和蓝色是反着的。
那么,如何修改驱动,将R和B整组调换呢?看了datasheet,应该是有这个功能的,就是不知道kernel里该如何修改。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

6#
 楼主| any012 发表于 2023-2-11 16:13:37 | 只看该作者
在buildroot/output/build/linux-master/drivers/video下修改nuc970fb.c文件,找到上边那个函数,修改:

  1.         fbi->regs.lcd_device_ctrl = ((fbi->regs.lcd_device_ctrl & 0xFFF9FFFF) | 0x00020000);
  2.         writel(fbi->regs.lcd_device_ctrl, regs + REG_LCM_DEV_CTRL);
复制代码

试过0x00020000、0x00040000、0x00060000,都不行,执行qt程序想显示红色背景,都显示的是蓝色背景。
修改nuc970fb.c后,都是执行make linux-rebuild的,并重新拷贝的970uImage文件。

其中有一次改错了值,0x00020000改成了0x0200,结果烧录到板子上进入内核后屏幕直接无任何显示。
回复 支持 反对

使用道具 举报

5#
arthur 发表于 2023-2-10 10:46:09 | 只看该作者
在内核LCD驱动 nuc970fb.c   nuc970fb_activate_var() 里

writel(fbi->regs.lcd_device_ctrl, regs + REG_LCM_DEV_CTRL);

将 17, 18这两位的值写入到 fbi->regs.lcd_deive_ctrl |= [17,18];
回复 支持 反对

使用道具 举报

地板
arthur 发表于 2023-2-10 10:43:10 | 只看该作者
any012 发表于 2023-2-7 17:38
[18:17]
[LCD_ODD :
SEL_ODD]

这个方法通过设置LCD硬件寄存器的方法来进行RB的调换,可以试试看。
因为支持两个 framebuffer, 这里就区分 first LCD Line, second LCD line
总共有四种选择,每种都试一次,看看哪个设置是对的。
回复 支持 反对

使用道具 举报

板凳
 楼主| any012 发表于 2023-2-7 17:38:35 | 只看该作者
本帖最后由 any012 于 2023-2-7 17:50 编辑

[18:17]
[LCD_ODD :
SEL_ODD]
Control LCD Line Data Out
00 = First line data is RGB, second line data is GBR.
01 = First line data is BGR, second line data is RBG.
10 = First line data is GBR, second line data is RGB.
11 = First line data is RBG, second line data is BGR.

请问这个是不是RGB顺序设置?
不明白为何会有first line data和second line data。
这也算通过软件设置RGB顺序吗?

没看明白LCD的DEVICE_CONTROL寄存器的18、17位,是干什么用的,望指教。
回复 支持 反对

使用道具 举报

沙发
arthur 发表于 2023-2-7 13:48:23 | 只看该作者
不建议通过软件RB调换来纠正硬件设计的错误,这会影响显示速度。
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU