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,則對應緩衝區為空白,反之則緩衝區滿。