转载请注明出处: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. Mac下新安装的MySQL无法登陆root用户解决方法

      一 设置MySQL命令行搜索路径 0.苹果->系统偏好设置->最下边点mysql 在弹出页面中 启动mysql服务 1.打开终端,输入: sudo vi ~/.bash_profile ...

  2. Oracle 反应太后知后觉了.

    很久已经提过一个SR,关于BES一个用户可以用两个密码登陆EBS系统的问题,但是SR解决太慢,而且一致强调你们的版本太低,需要升级到最新的版本,考虑客户化的问题,我们的版本没有升级(R2.1.1),无 ...

  3. 关于js中的原型链的理解

    我们知道无论什么时候只要创建了一个函数,就会为该函数创建一个prototype属性,这个属性指向函数的原型对象,默认情况下所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包 ...

  4. shiro的三大功能

    1.提供的功能

  5. CF Round #456 (Div. 2)

    这时我第一次打CF 然后一看t1 哇好水 然后秒A了 看B 哇好像也很水 然后A了 看了C 不会... 然后去看D 似乎概率 然后推了一下,退出来了 然后看E 不会... 接着问了半个小时怎么hack ...

  6. HDU 2669 Romantic (扩展欧几里得定理)

    Romantic Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  7. redis的list类型以及其操作

    lists类型 给你个图;' lists类型以及操作List是一个链表结构,主要功能是push.pop.获取一个范围的所有值等等,操作中key理解为链表的名字.Redis的list类型其实就是每一个子 ...

  8. An error report file with more information is saved as hs_err_pid2756.log

    An error report file with more information is saved as hs_err_pid2756.log weblogic启服务时遇到的问题,重新部署都不行, ...

  9. JAVA交换两个变量的值-(不使用第三变量)

    以下方法的根本原理就是: 借助第三个变量 c = a; a = b; b = c; 运算符-不借助第三变量: a = a+b; b = a-b; a = a-b; 为运算符-不借助第三个变量: (此种 ...

  10. 跟着小程学微服务-Mock自动化系统的原理及实现

    一.前言 在之前的文章 http://blog.csdn.net/u013970991/article/details/54862772 中已经介绍了"自动化Mock系统0.9版本" ...