Thinkpad T4x的风扇转速在一般的情况下由BIOS负责自动调整,其实我们也可以通过读写嵌入式控制器的0x62、0x66号端口实现对其的手动控制,这可以用来解决某些BIOS不尽如人意所导致的问题,如抑制转动杂音、预热风扇电机等。*自编程控制风扇转速具有一定危险性,可能损坏硬件,请谨慎使用!*
[常数定义]
#define EC_DATAPORT 0x62 //控制端口号
#define EC_CTRLPORT 0x66 //数据端口号
#define EC_CMD_WRITE 0x81 //写指令字节
#define TP_FAN_CONTRL 0x2F //写指令参数1,设置风扇转速档位
#define TP_FAN_LEVELS n //写指令参数2,风扇档位的具体取值
[设置步骤]
1. 轮询控制端口,确保输入、输出缓冲区为空
2*. 向控制端口写入一个写指令字节,其值为EC_CMD_WRITE
3. 轮询控制端口,直到输入缓冲区为空,确保写指令字节被取走
4*. 向数据端口写入一个字节,该字节为写指令的第一个参数,其值为TP_FAN_CONTRL
5. 轮询控制端口,直到输入缓冲区为空,确保第一个参数被取走
6*. 向数据端口写入一个字节,该字节为写指令的第二个参数,其值为TP_FAN_LEVELS
7. 轮询控制端口,直到输入缓冲区为空,确保第二个参数被取走
8. 设置完毕,把耳朵趴在键盘上听听风扇的声音吧!
[附加说明A] 关于TP_FAN_LEVELS的取值
a. 从低速档到高速档,通常取值为0x0-0x7,0为风扇停转
b. 特殊值0x80表示由Thinkpad BIOS自动调节转速,推荐值
c. 特殊值0x40表示风扇超高速运转,某些机型不支持,可能会损坏风扇,慎用
d. 其他取值产生的结果要么没定义,要么尚未确定,慎用
[附加说明B] 检验输入或输出缓冲区为空的方式
#define EC_STAT_OBF 0x01 //输出缓冲区满标志
#define EC_STAT_IBF 0x02 //输入缓冲区满标志
从控制端口中读取出一个DWORD,将其低位字节分别与上述标志位相与,若为0,则对应缓冲区为空,反之则缓冲区满。