RK3288 android 5.1 VGA分辨率设置不能保存怎么办?
我们在系统【设置】中将VGA的分辨率设置为1024x768,屏幕分辨率可以成功设置,点击保存后也可以保持1024x768这个分辨率,但是重启后又会变回原来的分辨率1920x1080。要怎么改才能保存VGA的分辨率呢?我们需要的不是固定一种分辨率,而是可以动态更改的。
怎么没人回复呢?只有我自己碰到这种问题吗?不应该啊,这应该是系统的问题吧。 本帖最后由 发光的大白菜 于 2017-11-6 15:32 编辑
今天发现在vga驱动中,vga_find_best_mode()方法直接返回了一个最大的分辨率,这里是否会导致VGA分辨率一直保持1920*1080呢?static struct fb_videomode *vga_find_best_mode(void)
{
int res = -1,i;
struct fb_videomode *mode = NULL, *best = NULL;
res = vga_parse_edid();
for(i = 0; i < 2 && res != 0; i++) {
mdelay(30);
res = vga_parse_edid();
}
if (res == 0) {
mode = vga_find_max_mode();
if (mode) {
vga_set_modelist();
best = (struct fb_videomode *)fb_find_nearest_mode(mode, &ddev->modelist);
}
} else {
vga_set_default_modelist();
printk("vga-ddc: read and parse edid failed errno:%d.\n", res);
}
best= vga_find_max_mode();</span>
return best;
}
另外,我在wiki中看到firefly-rk3288的vga是支持自动识别显示器分辨率的
但是在驱动中发现,代码成功获取了EDID数据,但是好像并没有对它进行分析处理,这样怎么支持自动识别显示器分辨率呢?
static int vga_edid_read(char *buf, int len)
{
int rc;
if (ddev == NULL || ddev->client == NULL)
return -ENODEV;
if (buf == NULL)
return -ENOMEM;
// Check ddc i2c communication is available or not.
rc = vga_edid_i2c_read_regs(ddev->client, 0, buf, 6);
if(rc == 6) {
memset(buf, 0, len);
// Read EDID.
页:
[1]