转载请注明出处:https://www.cnblogs.com/lialong1st/p/9174475.html

CPU:RK3288

系统:Android 5.1

本帖以 HDMI 800x600p-60 为例,添加新的分辨率。

1、修改文件,打开调试模式,得到 EDID 信息后,记得关闭

diff --git a/kernel/drivers/video/fbmon.c b/kernel/drivers/video/fbmon.c
index 6103fa6..ce9b11e
--- a/kernel/drivers/video/fbmon.c
+++ b/kernel/drivers/video/fbmon.c
@@ -, +, @@
* EDID parser
*/ -#undef DEBUG /* define this for verbose EDID parsing output */
+//#undef DEBUG /* define this for verbose EDID parsing output */
+#define DEBUG #ifdef DEBUG
#define DPRINTK(fmt, args...) printk(fmt,## args)

2、打印出 EDID 信息

[    0.805638] ========================================
[ 0.805652] Display Information (EDID)
[ 0.805662] ========================================
[ 0.805672] EDID Version 1.3
[ 0.805682] Manufacturer: ROW
[ 0.805691] Model:
[ 0.805699] Serial#:
[ 0.805708] Year: Week
[ 0.805719] Monitor Name: AAA
[ 0.805728] Display Characteristics:
[ 0.805738] Monitor Operating Limits: From EDID
[ 0.805754] H: -80KHz V: -76Hz DCLK: 160MHz
[ 0.805764] Digital Display Input
Sync:
[ 0.805780] Max H-size in cm: variable
[ 0.805791] Max V-size in cm: variable
[ 0.805801] Gamma: 1.0
[ 0.805813] DPMS: Active yes, Suspend no, Standby yes
[ 0.805823] Unknown
[ 0.805832] Chroma
[ 0.805840] RedX: 0.636 RedY: 0.349
[ 0.805852] GreenX: 0.290 GreenY: 0.589
[ 0.805863] BlueX: 0.143 BlueY: 0.080
[ 0.805875] WhiteX: 0.313 WhiteY: 0.329
[ 0.805886] First DETAILED Timing is preferred
[ 0.805899] Detailed Timings
[ 0.805910] MHz +HSync +VSync [ 0.805932] Supported VESA Modes
[ 0.805945] 720x400@70Hz
[ 0.805955] 640x480@60Hz
[ 0.805964] 640x480@72Hz
[ 0.805972] 640x480@75Hz
[ 0.805980] 800x600@56Hz
[ 0.805988] 800x600@60Hz
[ 0.805997] 800x600@72Hz
[ 0.806005] 800x600@75Hz
[ 0.806014] Manufacturer's mask: 0
[ 0.806023] Standard Timings
[ 0.806034] ========================================

Detailed Timings 是主要的 LCD 参数,Supported VESA Modes 是 LCD 支持的分辨率。

通过源码查看各参数的含义:

路径:kernel/drivers/video/fbmon.c

DPRINTK("      %d MHz ",  PIXEL_CLOCK/);
DPRINTK("%d %d %d %d ", H_ACTIVE, H_ACTIVE + H_SYNC_OFFSET, H_ACTIVE + H_SYNC_OFFSET + H_SYNC_WIDTH, H_ACTIVE + H_BLANKING);
DPRINTK("%d %d %d %d ", V_ACTIVE, V_ACTIVE + V_SYNC_OFFSET, V_ACTIVE + V_SYNC_OFFSET + V_SYNC_WIDTH, V_ACTIVE + V_BLANKING);
DPRINTK("%sHSync %sVSync\n\n", (HSYNC_POSITIVE) ? "+" : "-", (VSYNC_POSITIVE) ? "+" : "-");

由此可以得到 LCD 的各参数:

40M = PIXEL_CLOCK = pixclock
= H_ACTIVE = xres
= H_ACTIVE + H_SYNC_OFFSET = xres + h_fp = +
= H_ACTIVE + H_SYNC_OFFSET + H_SYNC_WIDTH = xres + h_fp + h_pw = + +
= H_ACTIVE + H_BLANKING = xres + h_bp + h_fp + h_pw = + + +
= V_ACTIVE = yres
= V_ACTIVE + V_SYNC_OFFSET = yres + v_fp = +
= V_ACTIVE + V_SYNC_OFFSET + V_SYNC_WIDTH = yres + v_fp + v_pw = + +
= V_ACTIVE + V_BLANKING = yres + v_bp + v_fp + v_pw = + + +
+HSync = HSYNC_POSITIVE
+VSync = VSYNC_POSITIVE

3、在枚举中增加此分辨率,枚举值为 108,并修改默认分辨率

diff --git a/kernel/drivers/video/rockchip/hdmi/rockchip-hdmi.h b/kernel/drivers/video/rockchip/hdmi/rockchip-hdmi.h
index b5475e4..f31f5b9
--- a/kernel/drivers/video/rockchip/hdmi/rockchip-hdmi.h
+++ b/kernel/drivers/video/rockchip/hdmi/rockchip-hdmi.h
@@ -, +, @@ enum hdmi_video_infomation_code {
HDMI_3840X2160P_30HZ_4_3, /**/
HDMI_3840X2160P_50HZ_4_3,
HDMI_3840X2160P_60HZ_4_3,
+ HDMI_800X600P_60HZ, /**/
}; /* HDMI Extended Resolution */
@@ -, +, @@ struct hdmi {
#define HDMI_AUTO_CONFIG false /* HDMI default vide mode */
-#define HDMI_VIDEO_DEFAULT_MODE HDMI_1920X1080P_60HZ//HDMI_1280X720P_60HZ
+#define HDMI_VIDEO_DEFAULT_MODE HDMI_800X600P_60HZ//HDMI_1920X1080P_60HZ//HDMI_1280X720P_60HZ
/*HDMI_1920X1080P_60HZ*/
#define HDMI_VIDEO_DEFAULT_COLORMODE HDMI_COLOR_AUTO
#define HDMI_VIDEO_DEFAULT_COLORDEPTH 8

4、将屏参数据添加到数组 static const struct hdmi_video_timing hdmi_mode[] 中

 /* name refresh xres yres pixclock h_bp h_fp v_bp v_fp h_pw v_pw polariry PorI flag vic 2ndvic pixelrepeat interface */
/* 名称 刷新频率 行像素 列像素 像素时钟 水平后沿 水平前沿 垂直后沿 垂直前沿 行同步脉宽 列同步脉宽 极性 扫描方式 标志 枚举值 第二枚举值  像素重复 接口*/
diff --git a/kernel/drivers/video/rockchip/hdmi/rockchip-hdmi-lcdc.c b/kernel/drivers/video/rockchip/hdmi/rockchip-hdmi-lcdc.c
index 63a5cfb..0f920c2
--- a/kernel/drivers/video/rockchip/hdmi/rockchip-hdmi-lcdc.c
+++ b/kernel/drivers/video/rockchip/hdmi/rockchip-hdmi-lcdc.c
@@ -, +, @@ static const struct hdmi_video_timing hdmi_mode[] = {
{ { "720x576i@50Hz", , , , , , , , , , , , , }, , HDMI_720X576I_50HZ_16_9, , OUT_P888},
{ { "720x480p@60Hz", , , , , , , , , , , , , }, , HDMI_720X480P_60HZ_16_9, , OUT_P888},
{ { "720x576p@50Hz", , , , , , , , , , , , , }, , HDMI_720X576P_50HZ_16_9, , OUT_P888},
+ { { "800x600p@60Hz", , , , , , , , , , , FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, , }, , HDMI_800X600P_60HZ, , OUT_P888},
{ { "1280x720p@24Hz", , , , , , , , , , , FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, , }, , HDMI_1280X720P_24HZ_4_3, , OUT_P888},
{ { "1280x720p@25Hz", , , , , , , , , , , FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, , }, , HDMI_1280X720P_25HZ_4_3, , OUT_P888},
{ { "1280x720p@30Hz", , , , , , , , , , , FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, , }, , HDMI_1280X720P_30HZ_4_3, , OUT_P888},

polariry:水平同步高电平有效和垂直同步高电平有效

PorI:0 为不是隔行扫描。定义文件路径:/kernel/include/uapi/linux/fb.h

flag:不知道什么意思

vic:在分辨率枚举中的编号,本次添加的为 108

5、此时 HDMI 可以正常输入 800x600 的分辨率,但是实际显示可能有问题。

根据显示器的 EDID 修改 dts 中加载的屏参文件,修改值与添加到 HDMI 数组中的相同。

diff --git a/kernel/arch/arm/boot/dts/lcd-800x600.dtsi b/kernel/arch/arm/boot/dts/lcd-800x600.dtsi
index c0baf15..733a157
--- a/kernel/arch/arm/boot/dts/lcd-800x600.dtsi
+++ b/kernel/arch/arm/boot/dts/lcd-800x600.dtsi
@@ -, +, @@
clock-frequency = <>;
- hactive = <>;
- vactive = <>;
- hback-porch = <>;
- hfront-porch = <>;
- vback-porch = <>;
- vfront-porch = <>;
- hsync-len = <>;
- vsync-len = <>;
+ hactive = <>;
+ vactive = <>;
+ hback-porch = <>;
+ hfront-porch = <>;
+ vback-porch = <>;
+ vfront-porch = <>;
+ hsync-len = <>;
+ vsync-len = <>;
hsync-active = <>;
vsync-active = <>;
de-active = <>;

6、编译烧录,HDMI 显示正常,确认当前分辨率可以在设置 -> HDMI ->分辨率设置中查看,也可以通过指令查看。

$ cat /sys/class/display/HDMI/mode

RK3288 HDMI增加特殊分辨率的更多相关文章

  1. RK3288 HDMI配置和调试

    RK3288 最大输出分辨率为 3840x2160 HDMI 驱动代码位于 kernel/drivers/video/rockchip/hdmi/rockchip-hdmiv2 目录 1.设置默认输出 ...

  2. RK3288 指令查看LCD分辨率

    通过下面指令可以查看当前系统设置的分辨率. root@xxx:/ # cd sys/class/graphics/fb0 cd sys/class/graphics/fb0 root@xxx:/sys ...

  3. virtualbox上,android x86 的分辨率的设置

    参考文章: http://stackoverflow.com/questions/6202342/switch-android-x86-screen-resolution 1) 用VBoxManage ...

  4. 61配置nanopim1plus的HDMI为1080p输出

    61配置nanopim1plus的HDMI为1080p输出 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 21504965 AT qq.com 完成时间:2018/4/4 10:21 版本:V1.1 开 ...

  5. 【超分辨率】—图像超分辨率(Super-Resolution)技术研究

    一.相关概念 1.分辨率 图像分辨率指图像中存储的信息量,是每英寸图像内有多少个像素点,分辨率的单位为PPI(Pixels Per Inch),通常叫做像素每英寸.一般情况下,图像分辨率越高,图像中包 ...

  6. 硕盟SM-T54(TYPE C转HDMI+VGA+USB3.0+PD3.0)

    硕盟SM-T54是一款TYPE C转HDMI+VGA+USB3.0+PD3.0四口扩展坞,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显示器.电视机或其他显示设备. ...

  7. 硕盟SM-T54| TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞

    硕盟SM-T54是一款 TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显 ...

  8. 硕盟SM-T54|type-c转接头HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞接口功能说明

    硕盟SM-T54是一款 TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显 ...

  9. 硕盟type-c转接头HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞

    硕盟SM-T54是一款 TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显 ...

随机推荐

  1. Quartz教程一:使用quartz

    原文链接 | 译文链接 | 翻译:nkcoder | 校对:方腾飞 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感兴趣的朋友一些参考和帮助,有任何不当或错误之处 ...

  2. MySQL使用通用二进制格式安装

      CentOS7安装MySQL的方法之通用二进制格式          

  3. MYSQL-实现ORACLE 和SQLserver数据中- row_number() over(partition by ) 分组排序功能

    网上看见了好多例子都基本上是一样的,没有过多的解释,对于一个初学MySQL来说有点难,我把部分转摘过来如下 原文:http://www.cnblogs.com/buro79xxd/archive/20 ...

  4. Oracle 常用系统包

    一.DBMS_OUTPUT(用于输入和输出信息) 二.DBMS_JOB(用于安排和管理作业队列) 三.dbms_pipe(类似UNIX系统的管道) 四.dbms_alert(用于生成并传递数据库预警信 ...

  5. linux oracle11g 数据 导入到10g数据库

    说明: 原用户名和密码:test/test  目标用户名和密码:test01/test 11G 服务器: 1.创建dmp文件存储目录 # mkdir -p /tmp/backup # sqlplus ...

  6. 基于C#在Mongodb的Skip-Limit和Where-Limit的分页对比 并且含mongodb帮助类的源码

    最近在设计的日志服务中需要用到Mongodb这个Nosql数据库(不知道Mongodb的点我),由于是用于纯存日志,而且日志量巨大,百万千万级的,所以需要用到它的分页查询. 不过LZ也是刚刚接触这个数 ...

  7. UML_02_概述

    一.前言 UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明.可视化.和编制文档的一种标准语言 二.分类 UML 的核心是图表,大致可以将 ...

  8. background-size: contain 与cover的区别,以及ie78的兼容写法

    一:background-size: contain 与cover的区别: 作用: 都是将图片以**相同宽高比**缩放以适应整个容器的宽高. 不同之处在于: 1.  在no-repeat情况下,如果容 ...

  9. CDN加速的实现 --- varnish

    一.什么是CDN cdn全称为内容分发网络(Content Delivery Network).基本思想是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,是内容传输地更快.更稳定.通过在 ...

  10. Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法

    这里也会遇到一次性关闭所有modal引起阴影遮罩的问题,也就是所有modal都关闭了,但是主页面仍然被阴影遮罩. 这个问题从哪来的,是因为modal叠加,我们点击窗口之外的空白部分,一次性关闭所有mo ...