- 积分
- 210
- 最后登录
- 2023-12-21
- 精华
- 0
- 阅读权限
- 30
- 主题
- 11
- UID
- 4609680
- 帖子
- 209
- PB币
- 285
- 威望
- 21
- 贡献
- 0
- 技术
- 1
- 活跃
- 1074
- UID
- 4609680
- 帖子
- 209
- PB币
- 285
- 贡献
- 0
- 技术
- 1
- 活跃
- 1074
|
我的机子是Thinkpad SL400,芯片组ICH9M,14年成功装上了Yosemite,加载AppleLPC后就可以正常睡眠了。后来升级了El Capitan,在DSDT未作修改、驱动也都正常加载的情况下,睡眠秒醒。一直没去解决,最近几天花时间把问题解决了,问题还是在USB设备的_PRW方法上,在此跟大家交流交流,下面是正题。
第一步就是查看系统日志的唤醒原因:Wake reason: USB0 GBE USB3 USBE EUSB 或者 Wake reason: HDAC USBE EUSB
确定是USB设备的问题导致的睡眠秒醒(其中GBE不知道是什么设备),首先我考虑的是_DSM方法,尝试过注入device ID,添加AAPL字段等等,睡眠情况与之前没有任何区别;后来看到这篇帖子,我开始考虑_PRW方法。
打开DSDT查看_PRW(Power Resources for Wake)的内容,是这样的:- Method (_PRW, 0, NotSerialized)
- {
- Return (GPRW (0x03, 0x03))
- }
复制代码 但各个设备的返回值都不一样,这里列一个表:
设备名称 | _PRW类型 | 值 | USB0 | Method | 0x03, 0x03 | USB3 | Method | 0x0E, 0x03 | USBE | Method | 0x0D, 0x03 | EUSB | Method | 0x0D, 0x03 | GBE | Method | 0x0D, 0x04 | HDAC
| Method | 0x0D, 0x03 | 根据上面提到的帖子里的说法,将返回值更改为0x09,0x04,结果可以睡眠,但是唤醒后死机(可以用键盘或电源键唤醒,唤醒后屏幕黑屏,试用各种键盘快捷键如调音量、重启等都得不到相应的反馈,所以我判断是死机了)。
现在变成这么解决唤醒死机的问题了,同样的,还是先尝试修改_DSM方法,仍然是没有变化(我的USB设备,不管有没有注入deviceID,在系统信息里都不会显示为内建,也不知道为什么),所以问题还是在_PRW方法上。我尝试了各种返回值,如0x0D,0x00、0x00,0x00、0x09,0x00,甚至直接删除_PRW方法,结果都是要不秒醒,要不睡死。
在爬帖的过程中注意到,好多人的_PRW的类型不是方法(Method),而是命名(Name),于是我尝试将我自己_PRW都改成Name,即是将- Method (_PRW, 0, NotSerialized)
- {
- Return (GPRW (0x0D, 0x00))
- }
复制代码 改成=>- Name (_PRW, Package (0x02)
- {
- 0x0D,
- 0x00
- })
复制代码 这里的值参考了RehabMan大神的修复USB3.0导致睡眠秒醒的补丁。重启载入新DSDT后成功睡眠,并可正常唤醒!
最后尝试只要修改USBE、EUSB、GBE和HDAC这四个设备的_PRW方法就可以了,再列表说明一下(作过修改的红色标记):
设备名称 | _PRW类型 | 值 | USB0 | Method | 0x03, 0x03 | USB3 | Method | 0x0E, 0x03 | USBE | Name | 0x0D, 0x00 | EUSB | Name | 0x0D, 0x00 | GBE | Name | 0x0D, 0x00 | HDAC
| Name | 0x0D, 0x00 |
至此,升级到El Capitan后的睡眠问题解决,但我仍然不清楚这些返回值的意义,希望坛友们多多交流。
|
-
1
查看全部评分
-
|