积分 173 最后登录 2023-10-26 精华 0 阅读权限 20 主题 37 UID 4849749 帖子 357 PB币 815 威望 5 贡献 0 技术 0 活跃 586
UID 4849749 帖子 357 PB币 815 贡献 0 技术 0 活跃 586
曾经看到过一位大佬的帖子,睡眠唤醒问题,尤其在笔记本上,很多都是USB的问题。有一部分是因为USB遮蔽所导致的,但有些即使USB接口全部正常还是会出现睡眠秒醒或者唤醒死机的问题。一般问题出在DSDT中对应硬件的_PRW方法上。很多时候直接把这玩意儿删了问题就解决了(就是0x6D和0x0D的补丁)。比如删掉下面这个Method:Device (XHC)
{
......
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x6D, 0x03))
}
......
}
但这样做只能通过按电源按键唤醒,USB被完全屏蔽。根据那位大佬所说,第一个参数除了少数几个会影响睡眠的硬件之外,其他的都是0x69,所以我先改了第一个参数。但经过数次改动实验之后发现,并不能解决问题。所以我主要改了第二个参数。
首先在终端用log show -style syslog | grep "Wake reason"看唤醒的硬件是啥(我的是XHC,USB总线),然后在DSDT中搜Device (XHC),在里面找到_PRW方法。
一开始我把第二个参数全改成了和后面一样的0x04,依旧没解决问题。知道我看到了另一个方法:
Method (_S0W, 0, NotSerialized) // _S0W: S0 Device Wake State
{
If (LEqual (XFLT, Zero))
{
Return (Zero)
}
Else
{
Return (0x03)
}
}
看到后面的注释我觉得我可能找对了地方。既然这个方法决定设备唤醒状态,还有熟悉的if else语句......既然一个参数不行那就换另一个......然后就成了???虽然一直以为0x00会无法唤醒,但事实上现在不仅可以睡眠,甚至还可以用鼠标键盘唤醒。
不太确定是不是每一个硬件都有_S0W方法,是不是都有这样判断语句,也不知道是不是运气好......但是我确实搞定了两个阻止睡眠的硬件,一个是XHC,另一个是HDEF(似乎是音频有关)。这个是原来的:
Name (_S0W, 0x03) // _S0W: S0 Device Wake State
......
Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x6D, 0x04))
}
把第二个参数改成0x03就解决了问题。
不知道这个方法能不能适用所有的电脑,希望有大佬帮忙试试,感谢。
展开阅读全文​
1
查看全部评分