转载请注明出处: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. IOS-程序员和设计师必备的20个CSS工具

    程序员和设计师必备的20个CSS工具   CSS工具是现今网站开发人员和设计人员使用的最必要和最重要的工具之一.这是因为这些CSS工具,可以为开发人员和设计人员简化手头的工作,大大减少web开发和设计 ...

  2. 多进程回声服务器/客户端【linux】

    并发服务器端 #include <unistd.h> #include <stdio.h> #include <sys/wait.h> #include <c ...

  3. Prism 4 文档 ---第3章 管理组件间的依赖关系

     基于Prism类库的应用程序可能是由多个松耦合的类型和服务组成的复杂应用程序,他们需要根据用户的动作发出内容和接收通知进行互动,由于他们是松耦合的,他们需要一种方式来互动和交流来传递业务功能的需求. ...

  4. maven_00_资源帖

    一.官方资料 Maven Getting Started Guide 二.精选资料 Maven for building Java applications - Tutorial Maven Tuto ...

  5. LeetCode OJ:Climbing Stairs(攀爬台阶)

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  6. C与C++基础知识补遗

    本随笔用来记载项目开发中遇到的以前没掌握的C/C++基础知识 void * buffer; 无类型指针,可以指向任何类型数据.ANSI标准规定无类型指针不能进行算法,而GNU规定无类型指针算法操作与c ...

  7. 重构Java代码的既有设计-影片出租店

    案例:计算每位顾客的消费金额并打印详细信息.顾客租赁了哪些影片,租期多长,根据租赁时间和影片类型计算出费用.影片分为3类:儿童片,新片,普通片.此外需计算该顾客的积分. Movie: public c ...

  8. 20165202 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:贾海粟 学号:20165202 指导教师:娄嘉鹏 实验日期:2018年4月16日 实验时间:15:3 ...

  9. Mysql双机热备--预备知识

    1.双机热备 对于双机热备这一概念,我搜索了很多资料,最后,还是按照大多数资料所讲分成广义与狭义两种意义来说. 从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务.当一台服务器 ...

  10. Android SDK无法更新解决办法

    一.设置SDK代理 启动Android SDK Manager,选择菜单 Tools ->Options -> 代理地址: mirrors.opencas.cn 代理端口: 80 如下图: ...