RK3288 接PHILIPS 4K显示器HDMI开机概率性不显示的问题

一、测试发现在philips显示器休眠的情况下,rk3288 开机后hmdi无法唤醒显示器。 

cat /d/dw-hdmi/status
        PHY: disabled

分析后发现是无法打开kernel\drivers\gpu\drm\bridge\synopsys\dw-hdmi.c dw_hdmi_bridge_enable

二、解决方案,检测到无法显示就:

echo off      >/sys/devices/platform/display-subsystem/drm/card0/card0-HDMI-A-1/status 关闭

然后  echo detect >/sys/devices/platform/display-subsystem/drm/card0/card0-HDMI-A-1/status 打开

三、具体代码。

diff --git a/device/rockchip/rk3288/init.rk3288.rc b/device/rockchip/rk3288/init.rk3288.rc
index c624b15..a4ba933 100755
--- a/device/rockchip/rk3288/init.rk3288.rc
+++ b/device/rockchip/rk3288/init.rk3288.rc
@@ -47,6 +47,7 @@ on initchown root system /dev/cec0chmod 0664 /dev/cec0
+    chmod 0664 /d/dw-hdmi/statuson verity-loggingexec u:r:slideshow:s0 -- /sbin/slideshow warning/verity_red_1 warning/verity_red_2diff --git a/hardware/rockchip/hwcomposer/hwcomposer.cpp b/hardware/rockchip/hwcomposer/hwcomposer.cpp
index 5dc0ea2..5d0402a 100755
--- a/hardware/rockchip/hwcomposer/hwcomposer.cpp
+++ b/hardware/rockchip/hwcomposer/hwcomposer.cpp
@@ -4258,6 +4258,97 @@ void  *invalidate_refresh(void *arg)}#endif
+#define DW_HDMI_STATUS_PATH  "/d/dw-hdmi/status"
+
+static bool read_hdmi_status_from_node(const char *path, char *read_buf,unsigned char length)
+{
+  int ret, fd;
+  char statebuf[200];
+  //ALOGI("%s", __FUNCTION__);
+  memset(statebuf, 0, sizeof(statebuf));
+  fd = open(path, O_RDONLY);
+  if (fd < 0)
+      return -ENOENT;
+  ret = read(fd, statebuf, length);
+  close(fd);
+  if (ret < 0) {
+      ALOGE("read hdmi state err\n");
+      return -EINVAL;
+  }
+    memcpy(read_buf,statebuf,length);
+    return 0;
+}
+
+static bool set_hdmi_status(bool hdmi_enable)
+{
+  char acStatus[10];
+  int fd,ret = 0;
+
+  if(hdmi_enable == true)
+      strcpy(acStatus,"detect");
+  else
+      strcpy(acStatus,"off");
+
+  fd = open(HDMI_STATUS_PATH, O_RDWR, 0);
+  if(fd < 0)
+  {
+         ALOGE("Open hdmi_status_fd fail in %s",__FUNCTION__);
+         return 1;
+  }
+  ret = write(fd,acStatus,strlen(acStatus)+1);
+  if(ret < 0)
+  {
+      ALOGE("set hdmi status to %s falied, ret = %d", acStatus, ret);
+  }
+  close(fd);
+  return 0;
+}
+
+void  *giada_fix_rk3288_hdmi_display(void *arg)
+{
+    int  ret,boot_completed_number=0;
+  char hdmi_status[20],dw_hdmi_status[200];
+  char boot_completed_value[PROPERTY_VALUE_MAX];
+
+    while(true)
+  {
+    property_get( "sys.boot_completed", boot_completed_value, "0");
+    if (!strcmp(boot_completed_value, "1"))
+    {
+        ++boot_completed_number;
+        memset(hdmi_status,0,sizeof(hdmi_status));
+        ret=read_hdmi_status_from_node(HDMI_STATUS_PATH,hdmi_status,sizeof(hdmi_status));
+        if (ret < 0) {
+          ALOGE("read hdmi status\n");
+        }
+        memset(dw_hdmi_status,0,sizeof(dw_hdmi_status));
+        ret=read_hdmi_status_from_node(DW_HDMI_STATUS_PATH,dw_hdmi_status,sizeof(dw_hdmi_status));
+        if (ret < 0) {
+          ALOGE("read dw_hdmi status\n");
+        }
+        ALOGI("**********[%s]**********boot_completed_number=%d boot_completed_value=%s \r\nhdmi status\r\n%s\r\ndw_hdmi_status\r\n%s",__FUNCTION__,boot_completed_number,boot_completed_value,hdmi_status,dw_hdmi_status);
+          if ((!strcmp(hdmi_status, "connected\n"))&&(!strcmp(dw_hdmi_status, "PHY: disabled\n"))&&(boot_completed_number>=10))
+          {
+              system("echo HDMIDISPALYERROR >>/data/hdmi_information_error.txt");
+              ALOGE("########### ERROR:RK3288 HDMI DISPALY IS NOT NORMAL,TRY TO REOPEN IT!###########");
+              set_hdmi_status(false);
+              usleep(1000000);
+              set_hdmi_status(true);
+          }else if ((!strcmp(hdmi_status, "connected\n"))&&(strcmp(dw_hdmi_status, "PHY: disabled\n")))
+          {
+            break;
+          }
+
+    } else
+        ALOGE("********Android System Booting...........!********");
+
+      usleep(1000000);
+    }
+  ALOGI("RK3288 HDMI DISPLAY IS OK NOW!");
+    pthread_exit(NULL);
+    return NULL;
+}
+#if 0
void* hwc_control_3dmode_thread(void *arg){
@@ -4401,6 +4492,13 @@ static int hwc_device_open(const struct hw_module_t *module, const char *name,signal(SIGALRM, hwc_static_screen_opt_handler);#endif+    pthread_t detect_rk3288_dispaly;
+    if (pthread_create(&detect_rk3288_dispaly, NULL, giada_fix_rk3288_hdmi_display, ctx.get()))
+    {
+        ALOGE("Create detect_rk3288_dispaly thread error .");
+    }
+  else
+      ALOGI("Created detect_rk3288_dispaly pthread  ");#if 0init_thread_pamaters(&ctx->mControlStereo);ctx->fd_3d = open("/sys/class/display/HDMI/3dmode", O_RDWR, 0);

2021-03-17 RK3288 接PHILIPS 4K显示器HDMI开机概率性不显示的问题相关推荐

  1. 2021.03.17 pokémon小游戏开发记录与周总结

    2021.03.17 pokémon小游戏开发记录与周总结 此篇仅包含部分项目代码,只是个人的学习总结. 文章目录 2021.03.17 pokémon小游戏开发记录与周总结 前言 一.前期准备 二. ...

  2. 2021.03.17模块

    2021.03.17 总结 模块 什么是模块,什么是包 一个py文件就是一个模块,文件名就是模块名(如果一个模块想要被其他模块使用,模块名必须是标识符并且不是关键字) 一个包含__init__.py文 ...

  3. 想换4K显示器了?那你搞懂啥是4K了吗?

    前言 我们在科技资讯以及电脑显示器.数字电视等电子产品的宣传语中,经常能够看见4K的字样.最近,B站(哔哩哔哩)升级了HTML5播放器和视频云等相关服务,为广大用户提供了超高清(UHD: Ultra ...

  4. matlab 在2k屏幕,如何将4k显示器的分辨率调整为2k,并将2k分辨率用于4k显示器

    如何将4k显示器的分辨率调整为2k,并将2k分辨率用于4k显示器 一个. 调整分辨率: 右键单击桌面上的---"属性" ---"设置" ---"屏幕分 ...

  5. 2021.03.30【2021省赛】模拟 比赛总结

    2021.03.30[2021省赛]模拟 比赛总结 地址: https://gmoj.net/senior/#contest/home/3350 T1: 神奇纸牌(uno) T2: 凌乱平衡树 (tr ...

  6. 20230606夏新(Amoi)的4K显示器D320B2000的亮点检测

    20230606夏新(Amoi)的4K显示器D320B2000的亮点检测 2023/6/7 0:14 https://item.jd.com/63690000655.html 夏新(Amoi)电脑显示 ...

  7. harmonyos数据库连接池,用4K显示器玩《生化危机8》这回我真吓到了!

    对于游戏圈来说,近半个月以来的热点几乎都被<生化危机8>所占据,自5月7号发布以来,精彩的剧情设计.破朔迷离的关卡设定.精致细腻的画面表现就收获了不少玩家的追捧与热爱,同时也是满足了&qu ...

  8. 27寸4K显示器,看片贼爽!免费送!

    为回馈广大读者粉丝们的大力支持,本号主特地选了这款 27寸4K显示器作为抽奖礼品送给大家.这礼物呢,可手捧追剧玩游戏,也可写字撰文搞创作.无论是自己玩,还是当礼物送人,都是理想佳品. 赠送规则 本次活 ...

  9. 外接27寸4K显示器贼爽,这就送你

    为回馈广大读者粉丝们的大力支持,本号主特地选了这款 27寸4K显示器作为抽奖礼品送给大家.这礼物呢,可手捧追剧玩游戏,也可写字撰文搞创作.无论是自己玩,还是当礼物送人,都是理想佳品. 赠送规则 本次活 ...

最新文章

  1. Django模型之数据库操作-查询
  2. 基于概率统计分析的应用流特征分析
  3. selenium | TypeError:object of type ‘WebElement’ has no len()
  4. 评估应用使用oracle磁盘空间,Oracle磁盘空间使用统计
  5. python摄像头人脸识别代码_python 实现摄像头人脸识别
  6. python从txt拿取数据_python requests + xpath 获取分页详情页数据存入到txt文件中
  7. asp.net 4.0 新特性(翻译)
  8. 鸿蒙硬件HI3861-OLED扫雷版本1
  9. 西安科技大学计算机学院保研,独臂姑娘,好样的!
  10. Jenkins学习总结(1)——Jenkins详细安装与构建部署使用教程
  11. 某中介无线组网及***接入应用案例
  12. 手机里面android什么意思,wipe什么意思?安卓手机如何wipe
  13. HDTV 之-HDMI HPD
  14. C++包扩展_Netgear 网件 EAX80 AX6000规格 无线扩展器 开箱拆解评测
  15. 吴彩强:从表征到行动---意向性的自然主义进路
  16. 《起跑吧,Opa》 -- 中译本 第一章 初识Opa
  17. redis集群介绍和搭建 (3个主机,6个实例)
  18. Oracle 数据库学习
  19. 公司邮箱一般是什么邮箱?外贸企业邮箱哪家稳定?
  20. Mysql 安装及my.ini的创建

热门文章

  1. 闭关30天,献上【Java一线大厂高岗面试题解析合集】,冲刺金九银十!
  2. ElasticSearch(6.3.0)的配置和使用全过程
  3. 开发那些坑之使用百川趣拍sd集成真实项目
  4. DC-DC BOOST空载输入电流如何计算?
  5. 学习笔记2022.7.25-7.30
  6. 济南ITSS证书办理大全
  7. 计算机课听课评议,一堂信息技术公开课点评
  8. 计算机大四找不到工作怎么办?应届生如何找到合适的工作?
  9. [513]linux设置开机自启动
  10. 台式机通过笔记本的WIFI连接上网,并实现笔记本对台式机的远程连接