修复Firefly-rk3288 android5.1接VGA显示器黑屏无显示问题

本帖最后由 guoke5 于 2016-9-19 17:51 编辑

下载了Firefly-rk3288 android5.1 最新的代码,按照官网的介绍成功编译ROM,并将Android5.1的ROM镜像烧到板子上,板子是接着VGA显示器(最高分辨率1280×1024)的,烧ROM后板子重新开机,显示器却一直是黑屏的,没有显示内容,VGA显示器一直提示“输入不支持”。
除了VGA显示器没有显示,其他系统都是正常的,adb shell也可以正常接入,于是查看了一下当前设置的VGA分辨率,不查不知道 ,一查吓一跳:

shell@firefly:/ $ cat sys/class/display/VGA/mode
1920x1080p-60

什么?设置给系统的VGA分辨率居然为1920x1080!我的显示器根本支持不了那么高的分辨率,难怪显示器会黑屏。

按照同样的编译方法,试了Android4.4的ROM,发现是OK的

shell@firefly:/ $ cat sys/class/display/display0.vga/mode
1280x1024p-60

于是查看了Android5.1关于VGA显示部分的内核代码(kernel/drivers/video/rockchip/vga),发现Android5.1代码在设置默认VGA分辨率时,固定设置为VGA分辨率列表的最大值(19201080).kernel/drivers/video/rockchip/vga/firefly-vga.c (vga_find_best_mode直接使用了vga_find_max_mode的返回值,而vga_find_max_mode的返回值却是19201080)

对比了Android4.4的SDK,发现vga_find_best_mode里面并没有直接使用vga_find_max_mode的返回值来设置系统分辨率。5.1的代码,vga_find_best_mode里面最后强制使用了vga_find_max_mode返回的值来设置分辨率,而vga_find_max_mode里面返回的却是1920×1080!因此导致显示器黑屏,只要却掉该处代码,显示即可正常。

diff --git a/kernel/drivers/video/rockchip/vga/firefly_vga.c b/kernel/drivers/video/rockchip/vga/firefly_vga.c
index 06a7df4..6bcde3c 100644
--- a/kernel/drivers/video/rockchip/vga/firefly_vga.c
+++ b/kernel/drivers/video/rockchip/vga/firefly_vga.c
@@ -292,7 +292,7 @@ static struct fb_videomode *vga_find_best_mode(void)
                printk("vga-ddc: read and parse edid failed errno:%d.\n", res);
        }

-       best  = vga_find_max_mode();
+
        return best;

猜测:vga_find_max_mode里面有bug,没有过滤掉显示器不支持的分辨率,导致直接取了分辨率列表的最大值。




{:3_48:}赞一个

你好
“修复Firefly-rk3288 android5.1接VGA显示器黑屏无显示问题”
http://developer.t-firefly.com/f … 7&highlight=VGA
我也遇到这个问题 苦于技术能力无法编译固件 能否发个你改过的固件

我的QQ 254561683 不胜感激

hardy_bbs 发表于 2016-9-21 22:10
你好
“修复Firefly-rk3288 android5.1接VGA显示器黑屏无显示问题”
http://developer.t-firefly.com/f . …

我明天上传到百度云给你

非常感激 作为报答 本人愿意无偿提供价值50元的神器账号一个 :)

hardy_bbs 发表于 2016-9-22 07:50
非常感激 作为报答 本人愿意无偿提供价值50元的神器账号一个 :)

已经上传完毕,发你qq?

赞一个。。此贴帮助很大。。。

感謝樓主 學到很多東西