- 积分
- 3424
- 最后登录
- 2016-1-20
- 精华
- 0
- 阅读权限
- 70
- 主题
- 111
- UID
- 984013
- 帖子
- 7884
- PB币
- 28167
- 威望
- 45
- 贡献
- 0
- 技术
- 2147
- 活跃
- 1597
打酱油归来
- UID
- 984013
- 帖子
- 7884
- PB币
- 28167
- 贡献
- 0
- 技术
- 2147
- 活跃
- 1597
|
本帖最后由 lisai9093 于 2015-8-8 10:50 编辑
Reference: https://github.com/RehabMan/OS-X-Voodoo-PS2-Controller
http://www.tonymacx86.com/mavericks-laptop-support/114648-combined-u310-u410-mavericks-thread-22.html
前言:过了小半年Rehabman 终于更新了,这次的也特别给力:添加ACPI 支持。也就是说,即使不用ACPIBacklight 不设亮度快捷键也可以看到小太阳的现在,就像现在的音量一样。不过还是建议和ACPIBacklight 一起使用,避免一些不兼容的现象。另外Fn 键在我的机器上也可以被识别了,不过双击时好像有点问题,识别的不是很好,Rehabman 说可能和硬件有关,就先不搞了。
下载:
ACPI 功能键查找方法:
由于ACPI 功能键不在键盘Bus 上,所以必须借助DSDT 去查找功能键的位置(比如亮度调节)。
1. 首先添加 RMDT method,安装ACPIDebug.kext(上面有下载)。它们的用处是从DSDT 向OS X 的system.log 发送信息,这样我们就能看到是在执行哪里的DSDT 代码 ,从而分辨出亮度建的位置。
DSDT 最后添加:
- Device (RMDT)
- {
- Name (_HID, "RMD0000")
- Name (RING, Package (0x0100) {})
- Mutex (RTMX, 0x00)
- Name (HEAD, Zero)
- Name (TAIL, Zero)
- Method (PUSH, 1, NotSerialized)
- {
- Acquire (RTMX, 0xFFFF)
- Add (HEAD, One, Local0)
- If (LGreaterEqual (Local0, SizeOf (RING)))
- {
- Store (Zero, Local0)
- }
- If (LNotEqual (Local0, TAIL))
- {
- Store (Arg0, Index (RING, HEAD))
- Store (Local0, HEAD)
- }
- Release (RTMX)
- }
- Method (FTCH, 0, NotSerialized)
- {
- Acquire (RTMX, 0xFFFF)
- Store (Zero, Local0)
- If (LNotEqual (HEAD, TAIL))
- {
- Store (DerefOf (Index (RING, TAIL)), Local0)
- Increment (TAIL)
- If (LGreaterEqual (TAIL, SizeOf (RING)))
- {
- Store (Zero, TAIL)
- }
- }
- Release (RTMX)
- Return (Local0)
- }
- Method (COUN, 0, NotSerialized)
- {
- Acquire (RTMX, 0xFFFF)
- Subtract (HEAD, TAIL, Local0)
- If (LLess (Local0, Zero))
- {
- Add (Local0, SizeOf (RING), Local0)
- }
- Release (RTMX)
- Return (Local0)
- }
- Method (P1, 1, NotSerialized)
- {
- PUSH (Arg0)
- }
- Method (P2, 2, Serialized)
- {
- Name (TEMP, Package (0x02) {})
- Store (Arg0, Index (TEMP, Zero))
- Store (Arg1, Index (TEMP, One))
- PUSH (TEMP)
- }
- Method (P3, 3, Serialized)
- {
- Name (TEMP, Package (0x03) {})
- Store (Arg0, Index (TEMP, Zero))
- Store (Arg1, Index (TEMP, One))
- Store (Arg2, Index (TEMP, 0x02))
- PUSH (TEMP)
- }
- Method (P4, 4, Serialized)
- {
- Name (TEMP, Package (0x04) {})
- Store (Arg0, Index (TEMP, Zero))
- Store (Arg1, Index (TEMP, One))
- Store (Arg2, Index (TEMP, 0x02))
- Store (Arg3, Index (TEMP, 0x03))
- PUSH (TEMP)
- }
- Method (P5, 5, Serialized)
- {
- Name (TEMP, Package (0x05) {})
- Store (Arg0, Index (TEMP, Zero))
- Store (Arg1, Index (TEMP, One))
- Store (Arg2, Index (TEMP, 0x02))
- Store (Arg3, Index (TEMP, 0x03))
- Store (Arg4, Index (TEMP, 0x04))
- PUSH (TEMP)
- }
- Method (P6, 6, Serialized)
- {
- Name (TEMP, Package (0x06) {})
- Store (Arg0, Index (TEMP, Zero))
- Store (Arg1, Index (TEMP, One))
- Store (Arg2, Index (TEMP, 0x02))
- Store (Arg3, Index (TEMP, 0x03))
- Store (Arg4, Index (TEMP, 0x04))
- Store (Arg5, Index (TEMP, 0x05))
- PUSH (TEMP)
- }
- Method (P7, 7, Serialized)
- {
- Name (TEMP, Package (0x07) {})
- Store (Arg0, Index (TEMP, Zero))
- Store (Arg1, Index (TEMP, One))
- Store (Arg2, Index (TEMP, 0x02))
- Store (Arg3, Index (TEMP, 0x03))
- Store (Arg4, Index (TEMP, 0x04))
- Store (Arg5, Index (TEMP, 0x05))
- Store (Arg6, Index (TEMP, 0x06))
- PUSH (TEMP)
- }
- }
复制代码 *或者在MaciASL 添加源:http://raw.github.com/RehabMan/OS-X-ACPI-Debug/master ,自动打补丁。
2. 查找DSDT 下的 Device (EC0),可以看到它下面有很多 _QXX method(如_Q26,_QE9)。亮度功能键就在它们当中!下面要做的就是在每个_QXX 下添加这两行,一个在开头,一个在结尾:
- \rmdt.p1("EC0._QXX enter") //开头
复制代码- \rmdt.p1("EC0._QXX exit") //结尾
复制代码 例如:
- Method (_Q26, 0, NotSerialized)
- {
- Store (0x26, P80H)
- Notify (BAT1, 0x80)
- Notify (ACAD, 0x80)
- }
复制代码 修改后:
- Method (_Q26, 0, NotSerialized)
- {
- \rmdt.p1("EC0._Q26 enter")
- Store (0x26, P80H)
- Notify (BAT1, 0x80)
- Notify (ACAD, 0x80)
- \rmdt.p1("EC0._Q26 exit")
- }
复制代码 不过这个方法有点啰嗦,我猜测亮度调节可能会有一些特征,比如我的亮度调节是在_Q70 和_Q71:
- Method (_Q70, 0, NotSerialized)
- {
- Store (0x70, P80H)
- If (LGreaterEqual (OSYS, 0x07D6))
- {
- Notify (^^^IGPU.DD02, 0x86)
- }
- }
- Method (_Q71, 0, NotSerialized)
- {
- Store (0x71, P80H)
- If (LGreaterEqual (OSYS, 0x07D6))
- {
- Notify (^^^IGPU.DD02, 0x87)
- }
- }
复制代码 可以看到都调用了IGPU.DD02,也就是显卡的亮度函数。这样的方法可能更快,不过准确性还有待确认。
3. 修改好DSDT,安装好ACPIDebug 之后就可以重启了。打开系统日志(Console),搜索ACPIDebug,按亮度键的时候日志里就会出现以下类似的信息:
- Feb 24 10:53:21 localhost kernel[0]: ACPIDebug: "EC0._Q70 enter"
- Feb 24 10:53:21 localhost kernel[0]: ACPIDebug: "EC0._Q70 exit"
复制代码 这里可以看到 _Q70 是我们要找的亮度调节,不同机器这个数字可能不一样,不能通用。
4. 再次修改DSDT,使 _QXX 通知 Voodoops2Controller,这样DSDT 和键盘驱动就能建立联络了。
这是Rehabman 的补丁:
- # Make EC-based brightness up/down work with RehabMan VoodooPS2 ACPI keyboard mechanism
- into method label _Q70 parent_label EC0 replace_content
- begin
- // Dell code for brightness up\n
- Notify (PS2K, 0x0206)\n
- Notify (PS2K, 0x0286)\n
- end;
- into method label _Q71 parent_label EC0 replace_content
- begin
- // Dell code for brightness down\n
- Notify (PS2K, 0x0205)\n
- Notify (PS2K, 0x0285)\n
- end;
复制代码 可以看到 _Q70 使亮度增加,_Q71 为减少。把这里的数字替换成上一步找到的数字,用MaciASL 打补丁即可。所有工作结束!
5. 如果和我一样有强迫症的话,记得清理下DSDT 和ACPIDebug~ GL
6* 联想 IdeaPad U310/410/430 ,_Q70 & _Q71 为亮度调节。希望大家多反馈自己的结果还有机型,我会更新到这里,有分儿哦~
|
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
回帖推荐
qw3752258 发表于351楼
查看完整内容
我再来补充一下,这个可能是我猜的,建议直接从Q60~Q72开始找Fn按键,它和F1~F12是对应的,某些机型可能可能中间缺少Q64,Q65,那么只能另寻办法了
-
10
查看全部评分
-
|