MECHREVO WUJIE16 Pro无法休眠和无法识别HDMI口的解决方法
机械革命 无界16 Pro在 Linux 无法S3休眠和无法识别HDMI口问题的解决方法。
问题描述
S3 休眠后无法唤醒:唤醒时屏幕背光亮(每隔几秒亮一次)但屏幕不亮,CPU风扇高速运行。
HDMI口无法识别:自带的HDMI口无输出,在xrandr
中无法看到HDMI-1
。
问题原因
因为 VBT (Video BIOS Tables) 提供了错误的信息,导致i915
驱动程序无法正确初始化,从而导致上述问题。
解决方法
最根本的解决方法是修复VBT
中的错误信息,但这可能不太现实。
但我们可以通过修改i915
驱动程序来解决此问题。
一下内容以Linux Kernel 6.0
为例
- 按照如下所示修改
drivers/gpu/drm/i915/display/intel_bios.c
中的parse_ddi_port
函数:其实上述修改就是去掉这一个1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -2671,10 +2671,15 @@ static void parse_ddi_port(struct intel_bios_encoder_data *devdata)
}
if (i915->vbt.ports[port]) {
+ // drm_dbg_kms(&i915->drm,
+ // "More than one child device for port %c in VBT, using the first.\n",
+ // port_name(port));
+ // return;
drm_dbg_kms(&i915->drm,
- "More than one child device for port %c in VBT, using the first.\n",
- port_name(port));
- return;
+ "i915 stucks with an nonexisting eDP, "
+ "thus although we have more than one child device for port %c in VBT, "
+ "using the latter one and ignore the first.\n",
+ port_name(port));
}
sanitize_device_type(devdata, port);return
- 重新编译内核并安装
这一个问题也值得注意,可以顺带一起修复。
参考
https://gitlab.freedesktop.org/drm/intel/-/issues/5531
https://gitlab.freedesktop.org/drm/intel/-/issues/6743