嵌入式linux hdmi分辨率,【Firefly3399Pro】rk3399pro在Framebuffer状态命令行模式中强制HDMI输出固定分辨率...
环境
Ubuntu虚拟机做交叉编译环境
firefly3399pro-JD4核心板 + 配套Firefly底板
Linux-SDK官方
需求
固定HDMI不论显示器的大小,输出固定的分辨率
解决办法
kernel/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
{
struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,
connector);
struct edid *edid;
struct drm_display_mode *mode;
//const u8 def_modes[6] = {4, 16, 31, 19, 17, 2};
//此处修改为自己要固定的分辨率vic。分辨率的结构体数组定义为在kernel/drivers/gpu/drm/drm_edid.c中定义的edid_cea_modes[]数组。
const u8 def_modes[1] = {1};
struct drm_display_info *info = &connector->display_info;
struct hdr_static_metadata *metedata =
&connector->display_info.hdmi.hdr_panel_metadata;
int i, ret = 0;
if (!hdmi->ddc)
return 0;
edid = drm_get_edid(connector, hdmi->ddc);
//if (edid) {
//直接将该处的edid注释,改成if(0)。执行else中的固定分辨率程序。
if(0){
dev_dbg(hdmi->dev, "got edid: width[%d] x height[%d]\n",
edid->width_cm, edid->height_cm);
hdmi->sink_is_hdmi = drm_detect_hdmi_monitor(edid);
hdmi->sink_has_audio = drm_detect_monitor_audio(edid);
drm_mode_connector_update_edid_property(connector, edid);
cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier, edid);
ret = drm_add_edid_modes(connector, edid);
/* Store the ELD */
drm_edid_to_eld(connector, edid);
drm_mode_connector_update_hdr_property(connector, metedata);
kfree(edid);
} else {
hdmi->sink_is_hdmi = true;
hdmi->sink_has_audio = true;
for (i = 0; i < sizeof(def_modes); i++) {
mode = drm_display_mode_from_vic_index(connector,
def_modes,
31, i);
if (mode) {
if (!i)
mode->type = DRM_MODE_TYPE_PREFERRED;
drm_mode_probed_add(connector, mode);
ret++;
}
}
info->edid_hdmi_dc_modes = 0;
info->hdmi.y420_dc_modes = 0;
info->color_formats = 0;
dev_info(hdmi->dev, "failed to get edid\n");
}
return ret;
}
分辨率结构体数组
/*
* Probably taken from CEA-861 spec.
* This table is converted from xorg's hw/xfree86/modes/xf86EdidModes.c.
*
* Index using the VIC.
*/
static const struct drm_display_mode edid_cea_modes[] = {
/* 0 - dummy, VICs start at 1 */
{ },
/* 1 - 640x480@60Hz */
{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656,
752, 800, 0, 480, 490, 492, 525, 0,
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
/* 2 - 720x480@60Hz */
{ DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736,
798, 858, 0, 480, 489, 495, 525, 0,
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
/* 3 - 720x480@60Hz */
{ DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736,
798, 858, 0, 480, 489, 495, 525, 0,
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
/* 4 - 1280x720@60Hz */
{ DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1390,
1430, 1650, 0, 720, 725, 730, 750, 0,
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
/* 5 - 1920x1080i@60Hz */
{ DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008,
2052, 2200, 0, 1080, 1084, 1094, 1125, 0,
DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
DRM_MODE_FLAG_INTERLACE),
.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
/* 6 - 720(1440)x480i@60Hz */
{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
801, 858, 0, 480, 488, 494, 525, 0,
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
/* 7 - 720(1440)x480i@60Hz */
{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
801, 858, 0, 480, 488, 494, 525, 0,
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
/* 8 - 720(1440)x240@60Hz */
{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
801, 858, 0, 240, 244, 247, 262, 0,
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
DRM_MODE_FLAG_DBLCLK),
.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
/* 9 - 720(1440)x240@60Hz */
{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
801, 858, 0, 240, 244, 247, 262, 0,
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
DRM_MODE_FLAG_DBLCLK),
.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
/* 10 - 2880x480i@60Hz */
{ DRM_MODE("2880x480i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956,
3204, 3432, 0, 480, 488, 494, 525, 0,
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
DRM_MODE_FLAG_INTERLACE),
.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
};
结构体数组中定义了很多分辨率,就不一一列举了。
嵌入式linux hdmi分辨率,【Firefly3399Pro】rk3399pro在Framebuffer状态命令行模式中强制HDMI输出固定分辨率...相关推荐
- linux centos7 redhat7 怎么设置开机自动进入命令行模式
设置 centos7/redhat7 开机默认进入命令行模式 首先用 root 用户打开配置文件 inittab,执行命令: vim /etc/inittab 由于 centos7 的 inittab ...
- linux三个命令模式切换,ubuntu16.04命令行模式和图形界面互相切换的两种解决办法,...
ubuntu16.04命令行模式和图形界面互相切换的两种解决办法, 在ubuntu中,我们可以有两种工作模式,一种是纯字符的命令行模式,这种界面没有那么好操作,而且对命令要求比较熟悉,比较适合专业人士 ...
- 嵌入式Linux驱动笔记(二十四)------framebuffer之使用spi-tft屏幕(上)
你好!这里是风筝的博客, 欢迎和我一起交流. 最近入手了一块spi接口的tft彩屏,想着在我的h3板子上使用framebuffer驱动起来. 我们知道: Linux抽象出FrameBuffer这个设备 ...
- jq输出文本_如何用 Linux 命令行工具解析和格式化输出 JSON | Linux 中国
我们将使用 Linux 上的命令行工具解析并格式化打印 JSON.它对于在 shell 脚本中处理大型 JSON 数据或在 shell 脚本中处理 JSON 数据非常有用.-- Ostechnix J ...
- linux服务器返回json,Linux 命令行工具解析和格式化输出 JSON的方法
JSON 是一种轻量级且与语言无关的数据存储格式,易于与大多数编程语言集成,也易于人类理解 -- 当然,如果格式正确的话.JSON 这个词代表 J ava S cript O bject N otat ...
- linux命令行模式连接网络,centos命令行模式连接无线网络的过程
1. 首先, 你的系统要能驱动无限网卡, 要是人品好的话, 系统已经自带了你的网卡的驱动程序. 不然就要先搞定无线网卡的驱动再说. 不然后面的步骤也就没必要了. 2. 看一下你的无线网卡叫什么: iw ...
- linux下运行python_在Linux命令行终端中使用python的简单方法(推荐)
Linux终端中的操作均是使用命令行来进行的.因此,对于小白来说,熟记几个基本的命令行和使用方法能够较快的在Linux命令行环境中将python用起来. 打开命令行窗口 打开命令行窗口的快捷键如下: ...
- PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...
源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...
- Linux 命令行模式下退出 vim
Linux 命令行模式下退出 vim 命令 说明 :q! 强制退出,不保存 :q 退出 :wq! 强制保存并退出 :w <文件路径> 另存为 :saveas 文件路径 另存为 :x 保存并 ...
最新文章
- 使用CleanIISLog清除IIS记录
- 收藏 | 最新知识图谱论文清单(附解读、下载)
- 依图又斩获10冠!AI芯片拿下创新技术大奖,朱珑再谈智能密度
- 在UWP中自定义半边框样式的输入框
- mybatis 逆向工程使用姿势不对,把表清空了,心里慌的一比,于是写了个插件。
- 现在好用的mysql客户端_还在用 Navicat 的,可以试试这几款免费且好用的 MySQL 客户端...
- JAVA无法加载此类文件,Java 7错误:无法加载本机库:ld.so.1:java:致命:libscf.so.1:打开失败:没有此类文件或目录...
- Shady 深度学习课程
- [备忘]Visual Studio常用小技巧
- oracle忽略除数为0,ora-01476除数为0的解决办法,oracle中decode()的使用
- elt和etl_ETL和ELT架构概述
- html跨页面传数组,如何把一个页面的对象数组传到另外一个页面,没有后台,存js_html/css_WEB-ITnose...
- 基于ssm医院病历管理系统
- ERROR 126 HY000 Incorrect key file for table '/tmp/ sql 1
- CentOS 7拨号上网(ADSL PPPoE)
- 动点四边形周长最短_中考数学之四边形周长最小值
- 软件工程知识点复习第二章
- Lua基础入门—— 写出自己的魔兽世界插件
- 网站只有首页能打开,其他页面404
- windows server 2008R2安装visual studio2015
热门文章
- Mac中使用brew安装指定版本软件包
- Enterprise Library 2.0 技巧(3):记录ASP.NET站点中未处理的异常
- linux wget命令详解
- Struts2+Hibernate+Spring 整合示例
- [转]java 为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?
- HTTP报文简单介绍
- 【Android开发】范例2-实现简易绘图板
- winform 在指定目录下已经生成资源Image图片的方式
- 也许你所知道的学习方法都是错的
- crontab实例分析(转)