%sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget0/translations/zh_CN/wmi/devices/bitland-mifs-wmimodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/zh_TW/wmi/devices/bitland-mifs-wmimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/it_IT/wmi/devices/bitland-mifs-wmimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/ja_JP/wmi/devices/bitland-mifs-wmimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/ko_KR/wmi/devices/bitland-mifs-wmimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/pt_BR/wmi/devices/bitland-mifs-wmimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/sp_SP/wmi/devices/bitland-mifs-wmimodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h)SPDX-License-Identifier: GPL-2.0-or-laterh]h)SPDX-License-Identifier: GPL-2.0-or-later}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhJ/var/lib/git/docbuild/linux/Documentation/wmi/devices/bitland-mifs-wmi.rsthKubhsection)}(hhh](htitle)}(h&Bitland MIFS driver (bitland-mifs-wmi)h]h&Bitland MIFS driver (bitland-mifs-wmi)}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh]h)}(h Introductionh]h Introduction}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubah}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hEC WMI interface descriptionh]hEC WMI interface description}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubh paragraph)}(hThe EC WMI interface description can be decoded from the embedded binary MOF (bmof) data using the `bmfdec `_ utility:h](hcThe EC WMI interface description can be decoded from the embedded binary MOF (bmof) data using the }(hj hhhNhNubh reference)}(h*`bmfdec `_h]hbmfdec}(hjhhhNhNubah}(h]h ]h"]h$]h&]namebmfdecrefurihttps://github.com/pali/bmfdecuh1jhj ubhtarget)}(h! h]h}(h]bmfdecah ]h"]bmfdecah$]h&]refurij$uh1j% referencedKhj ubh utility:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhhhhubh literal_block)}(hXclass WMIEvent : __ExtrinsicEvent { }; [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x40A"), Description("Root WMI HID_EVENT20"), guid("{46c93e13-ee9b-4262-8488-563bca757fef}")] class HID_EVENT20 : WmiEvent { [key, read] string InstanceName; [read] boolean Active; [WmiDataId(1), read, write, Description("Package Data")] uint8 EventDetail[8]; }; [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x40A"), Description("Root WMI HID_EVENT21"), guid("{fa78e245-2c0f-4ca1-91cf-15f34e474850}")] class HID_EVENT21 : WmiEvent { [key, read] string InstanceName; [read] boolean Active; [WmiDataId(1), read, write, Description("Package Data")] uint8 EventDetail[8]; }; [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x40A"), Description("Root WMI HID_EVENT22"), guid("{1dceaf0a-4d63-44bb-bd0c-0d6281bfddc5}")] class HID_EVENT22 : WmiEvent { [key, read] string InstanceName; [read] boolean Active; [WmiDataId(1), read, write, Description("Package Data")] uint8 EventDetail[8]; }; [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x40A"), Description("Root WMI HID_EVENT23"), guid("{3f9e3c26-b077-4f86-91f5-37ff64d8c7ed}")] class HID_EVENT23 : WmiEvent { [key, read] string InstanceName; [read] boolean Active; [WmiDataId(1), read, write, Description("Package Data")] uint8 EventDetail[8]; }; [WMI, Dynamic, provider("WmiProv"), Locale("MS\\0x409"), Description("Class used to operate firmware interface"), guid("{b60bfb48-3e5b-49e4-a0e9-8cffe1b3434b}")] class MICommonInterface { [key, read] string InstanceName; [read] boolean Active; [WmiMethodId(1), Implemented, read, write, Description("Method used to support system functions.")] void MiInterface([in, Description("WMI Interface")] uint8 InData[32], [out] uint8 OutData[30], [out] uint16 Reserved); };h]hXclass WMIEvent : __ExtrinsicEvent { }; [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x40A"), Description("Root WMI HID_EVENT20"), guid("{46c93e13-ee9b-4262-8488-563bca757fef}")] class HID_EVENT20 : WmiEvent { [key, read] string InstanceName; [read] boolean Active; [WmiDataId(1), read, write, Description("Package Data")] uint8 EventDetail[8]; }; [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x40A"), Description("Root WMI HID_EVENT21"), guid("{fa78e245-2c0f-4ca1-91cf-15f34e474850}")] class HID_EVENT21 : WmiEvent { [key, read] string InstanceName; [read] boolean Active; [WmiDataId(1), read, write, Description("Package Data")] uint8 EventDetail[8]; }; [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x40A"), Description("Root WMI HID_EVENT22"), guid("{1dceaf0a-4d63-44bb-bd0c-0d6281bfddc5}")] class HID_EVENT22 : WmiEvent { [key, read] string InstanceName; [read] boolean Active; [WmiDataId(1), read, write, Description("Package Data")] uint8 EventDetail[8]; }; [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x40A"), Description("Root WMI HID_EVENT23"), guid("{3f9e3c26-b077-4f86-91f5-37ff64d8c7ed}")] class HID_EVENT23 : WmiEvent { [key, read] string InstanceName; [read] boolean Active; [WmiDataId(1), read, write, Description("Package Data")] uint8 EventDetail[8]; }; [WMI, Dynamic, provider("WmiProv"), Locale("MS\\0x409"), Description("Class used to operate firmware interface"), guid("{b60bfb48-3e5b-49e4-a0e9-8cffe1b3434b}")] class MICommonInterface { [key, read] string InstanceName; [read] boolean Active; [WmiMethodId(1), Implemented, read, write, Description("Method used to support system functions.")] void MiInterface([in, Description("WMI Interface")] uint8 InData[32], [out] uint8 OutData[30], [out] uint16 Reserved); };}hjAsbah}(h]h ]h"]h$]h&]hhuh1j?hhhKhhhhubeh}(h]ec-wmi-interface-descriptionah ]h"]ec wmi interface descriptionah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h(Reverse-Engineering the EC WMI interfaceh]h(Reverse-Engineering the EC WMI interface}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhhhhhK;ubj)}(h^The OEM software can be download from `this link `_h](h&The OEM software can be download from }(hjhhhhNhNubj)}(h8`this link `_h]h this link}(hjphhhNhNubah}(h]h ]h"]h$]h&]name this linkj#)https://iknow.lenovo.com.cn/detail/429447uh1jhjhubj&)}(h, h]h}(h] this-linkah ]h"] this linkah$]h&]refurijuh1j%j4Khjhubeh}(h]h ]h"]h$]h&]uh1jhhhK=hjWhhubj)}(hfNothing is obfuscated, In this case, `ILSpy `_ could be helpful.h](h%Nothing is obfuscated, In this case, }(hjhhhNhNubj)}(h/`ILSpy `_h]hILSpy}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameILSpyj#$https://github.com/icsharpcode/ILSpyuh1jhjubj&)}(h' h]h}(h]ilspyah ]h"]ilspyah$]h&]refurijuh1j%j4Khjubh could be helpful.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhK?hjWhhubeh}(h](reverse-engineering-the-ec-wmi-interfaceah ]h"](reverse-engineering the ec wmi interfaceah$]h&]uh1hhhhhhhhK;ubh)}(hhh](h)}(hWMI Methods (MICommonInterface)h]hWMI Methods (MICommonInterface)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKBubj)}(hThe ``MICommonInterface`` class (GUID: ``{b60bfb48-3e5b-49e4-a0e9-8cffe1b3434b}``) is the primary control interface. It uses a 32-byte buffer for both input (``InData``) and output (``OutData``).h](hThe }(hjhhhNhNubhliteral)}(h``MICommonInterface``h]hMICommonInterface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh class (GUID: }(hjhhhNhNubj)}(h*``{b60bfb48-3e5b-49e4-a0e9-8cffe1b3434b}``h]h&{b60bfb48-3e5b-49e4-a0e9-8cffe1b3434b}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhM) is the primary control interface. It uses a 32-byte buffer for both input (}(hjhhhNhNubj)}(h ``InData``h]hInData}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) and output (}(hjhhhNhNubj)}(h ``OutData``h]hOutData}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKDhjhhubh)}(hhh](h)}(hMethod Structureh]hMethod Structure}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hhhhhKIubj)}(h.The data packet follows a standardized format:h]h.The data packet follows a standardized format:}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKKhj5hhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1j^hj[ubj_)}(hhh]h}(h]h ]h"]h$]h&]colwidthKBuh1j^hj[ubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]j)}(hByteh]hByte}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKNhjubah}(h]h ]h"]h$]h&]uh1j~hj{ubj)}(hhh]j)}(h Descriptionh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKNhjubah}(h]h ]h"]h$]h&]uh1j~hj{ubeh}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jthj[ubhtbody)}(hhh](jz)}(hhh](j)}(hhh]j)}(h1h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKPhjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(h1Method Type: Get (0xFA / 250) or Set (0xFB / 251)h]h1Method Type: Get (0xFA / 250) or Set (0xFB / 251)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKPhjubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]j)}(h3h]h3}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKRhjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(hCommand ID (Method Name)h]hCommand ID (Method Name)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKRhjubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]j)}(h4 - 31h]h4 - 31}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKThj0ubah}(h]h ]h"]h$]h&]uh1j~hj-ubj)}(hhh]j)}(h,Arguments (for Set) or Return Data (for Get)h]h,Arguments (for Set) or Return Data (for Get)}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKThjGubah}(h]h ]h"]h$]h&]uh1j~hj-ubeh}(h]h ]h"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]colsKuh1jYhjVubah}(h]h ]h"]h$]h&]uh1jThj5hhhhhNubeh}(h]method-structureah ]h"]method structureah$]h&]uh1hhjhhhhhKIubh)}(hhh](h)}(h Command IDsh]h Command IDs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKYubj)}(hCThe following Command IDs are used in the third byte of the buffer:h]hCThe following Command IDs are used in the third byte of the buffer:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK[hjhhubjU)}(hhh]jZ)}(hhh](j_)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1j^hjubj_)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j^hjubj_)}(hhh]h}(h]h ]h"]h$]h&]colwidthK*uh1j^hjubju)}(hhh]jz)}(hhh](j)}(hhh]j)}(hIDh]hID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK^hjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(hNameh]hName}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK^hjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(hValues / Descriptionh]hValues / Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK^hjubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jthjubj)}(hhh](jz)}(hhh](j)}(hhh]j)}(h8h]h8}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK`hjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(h SystemPerModeh]h SystemPerMode}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK`hj6ubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(h30: Balance, 1: Performance, 2: Quiet, 3: Full-speedh]h30: Balance, 1: Performance, 2: Quiet, 3: Full-speed}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK`hjMubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]j)}(h9h]h9}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKchjmubah}(h]h ]h"]h$]h&]uh1j~hjjubj)}(hhh]j)}(hGPUModeh]hGPUMode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKchjubah}(h]h ]h"]h$]h&]uh1j~hjjubj)}(hhh]j)}(h0: Hybrid, 1: Discrete, 2: UMAh]h0: Hybrid, 1: Discrete, 2: UMA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKchjubah}(h]h ]h"]h$]h&]uh1j~hjjubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]j)}(h10h]h10}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKehjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(h KeyboardTypeh]h KeyboardType}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKehjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(h$0: White, 1: Single RGB, 2: Zone RGBh]h$0: White, 1: Single RGB, 2: Zone RGB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKehjubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]j)}(h11h]h11}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKghj ubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(hFnLockh]hFnLock}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKghj ubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(h 0: Off, 1: Onh]h 0: Off, 1: On}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKghj7ubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]j)}(h12h]h12}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKihjWubah}(h]h ]h"]h$]h&]uh1j~hjTubj)}(hhh]j)}(hTPLockh]hTPLock}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKihjnubah}(h]h ]h"]h$]h&]uh1j~hjTubj)}(hhh]j)}(h0: Unlock, 1: Lock (Touchpad)h]h0: Unlock, 1: Lock (Touchpad)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKihjubah}(h]h ]h"]h$]h&]uh1j~hjTubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]j)}(h13h]h13}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKkhjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(hCPUGPUSYSFanSpeedh]hCPUGPUSYSFanSpeed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKkhjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(hReturns 12 bytes of fan data: Bytes 4-5: CPU Fan RPM (Little Endian) Bytes 6-7: GPU Fan RPM (Little Endian) Bytes 10-11: SYS Fan RPM (Little Endian)h]hReturns 12 bytes of fan data: Bytes 4-5: CPU Fan RPM (Little Endian) Bytes 6-7: GPU Fan RPM (Little Endian) Bytes 10-11: SYS Fan RPM (Little Endian)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKkhjubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]j)}(h16h]h16}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKphjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(hRGBKeyboardModeh]hRGBKeyboardMode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKphj ubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(h+0: Off, 1: Auto Cyclic, 2: Fixed, 3: Customh]h+0: Off, 1: Auto Cyclic, 2: Fixed, 3: Custom}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKphj!ubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]j)}(h17h]h17}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKshjAubah}(h]h ]h"]h$]h&]uh1j~hj>ubj)}(hhh]j)}(hRGBKeyboardColorh]hRGBKeyboardColor}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKshjXubah}(h]h ]h"]h$]h&]uh1j~hj>ubj)}(hhh]j)}(h&Bytes 4, 5, 6: Red, Green, Blue valuesh]h&Bytes 4, 5, 6: Red, Green, Blue values}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKshjoubah}(h]h ]h"]h$]h&]uh1j~hj>ubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]j)}(h18h]h18}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKuhjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(hRGBKeyboardBrightnessh]hRGBKeyboardBrightness}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKuhjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(h"0-10: Brightness Levels, 128: Autoh]h"0-10: Brightness Levels, 128: Auto}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKuhjubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]j)}(h19h]h19}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKwhjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(h SystemAcTypeh]h SystemAcType}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKwhjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(h 1: Type-C, 2: Circular Hole (DC)h]h 1: Type-C, 2: Circular Hole (DC)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKwhj ubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]j)}(h20h]h20}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKyhj+ubah}(h]h ]h"]h$]h&]uh1j~hj(ubj)}(hhh]j)}(hMaxFanSpeedSwitchh]hMaxFanSpeedSwitch}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKyhjBubah}(h]h ]h"]h$]h&]uh1j~hj(ubj)}(hhh]j)}(hCByte 4: Fan Type (0: CPU/GPU, 1: SYS) Byte 5: State (0: Off, 1: On)h]hCByte 4: Fan Type (0: CPU/GPU, 1: SYS) Byte 5: State (0: Off, 1: On)}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKyhjYubah}(h]h ]h"]h$]h&]uh1j~hj(ubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]j)}(h21h]h21}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK|hjyubah}(h]h ]h"]h$]h&]uh1j~hjvubj)}(hhh]j)}(h MaxFanSpeedh]h MaxFanSpeed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK|hjubah}(h]h ]h"]h$]h&]uh1j~hjvubj)}(hhh]j)}(h Sets manual fan speed duty cycleh]h Sets manual fan speed duty cycle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK|hjubah}(h]h ]h"]h$]h&]uh1j~hjvubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]j)}(h22h]h22}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK~hjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(hCPUThermometerh]hCPUThermometer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK~hjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(hReturns CPU Temperatureh]hReturns CPU Temperature}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK~hjubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jYhjubah}(h]h ]h"]h$]h&]uh1jThjhhhhhNubeh}(h] command-idsah ]h"] command idsah$]h&]uh1hhjhhhhhKYubeh}(h]wmi-methods-micommoninterfaceah ]h"]wmi methods (micommoninterface)ah$]h&]uh1hhhhhhhhKBubh)}(hhh](h)}(hWMI Events (HID_EVENT20)h]hWMI Events (HID_EVENT20)}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hhhhhKubj)}(hThe driver listens for events from the ``HID_EVENT20`` class (GUID: ``{46c93e13-ee9b-4262-8488-563bca757fef}``). These events are triggered by hotkeys or system state changes (e.g., plugging in AC power).h](h'The driver listens for events from the }(hjFhhhNhNubj)}(h``HID_EVENT20``h]h HID_EVENT20}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh class (GUID: }(hjFhhhNhNubj)}(h*``{46c93e13-ee9b-4262-8488-563bca757fef}``h]h&{46c93e13-ee9b-4262-8488-563bca757fef}}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh^). These events are triggered by hotkeys or system state changes (e.g., plugging in AC power).}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj5hhubh)}(hhh](h)}(hEvent Structureh]hEvent Structure}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhhhhhKubj)}(h@The event data is provided in an 8-byte array (``EventDetail``):h](h/The event data is provided in an 8-byte array (}(hjhhhNhNubj)}(h``EventDetail``h]h EventDetail}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh):}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjxhhubjU)}(hhh]jZ)}(hhh](j_)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1j^hjubj_)}(hhh]h}(h]h ]h"]h$]h&]colwidthKBuh1j^hjubju)}(hhh]jz)}(hhh](j)}(hhh]j)}(hByteh]hByte}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]j)}(h Descriptionh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jthjubj)}(hhh](jz)}(hhh](j)}(hhh]j)}(h0h]h0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubj)}(hhh]j)}(h0Event Type (Always 0x01 for HotKey/Notification)h]h0Event Type (Always 0x01 for HotKey/Notification)}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]uh1jyhj ubjz)}(hhh](j)}(hhh]j)}(hjh]h1}(hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj@ ubah}(h]h ]h"]h$]h&]uh1j~hj= ubj)}(hhh]j)}(h/Event ID (Corresponds to the Command IDs above)h]h/Event ID (Corresponds to the Command IDs above)}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjV ubah}(h]h ]h"]h$]h&]uh1j~hj= ubeh}(h]h ]h"]h$]h&]uh1jyhj ubjz)}(hhh](j)}(hhh]j)}(h2h]h2}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjv ubah}(h]h ]h"]h$]h&]uh1j~hjs ubj)}(hhh]j)}(h-Value (The new state or value of the feature)h]h-Value (The new state or value of the feature)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hjs ubeh}(h]h ]h"]h$]h&]uh1jyhj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jYhjubah}(h]h ]h"]h$]h&]uh1jThjxhhhhhNubeh}(h]event-structureah ]h"]event structureah$]h&]uh1hhj5hhhhhKubh)}(hhh](h)}(hCommon Event IDs:h]hCommon Event IDs:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubj)}(h-Note: reserved event ids are not listed thereh]h-Note: reserved event ids are not listed there}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj hhubjU)}(hhh]jZ)}(hhh](j_)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1j^hj ubj_)}(hhh]h}(h]h ]h"]h$]h&]colwidthKBuh1j^hj ubju)}(hhh]jz)}(hhh](j)}(hhh]j)}(hEvent Idh]hEvent Id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubj)}(hhh]j)}(h Descriptionh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jthj ubj)}(hhh](jz)}(hhh](j)}(hhh]j)}(h4h]h4}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjD ubah}(h]h ]h"]h$]h&]uh1j~hjA ubj)}(hhh]j)}(hAirPlane mode changeh]hAirPlane mode change}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj[ ubah}(h]h ]h"]h$]h&]uh1j~hjA ubeh}(h]h ]h"]h$]h&]uh1jyhj> ubjz)}(hhh](j)}(hhh]j)}(h5h]h5}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj{ ubah}(h]h ]h"]h$]h&]uh1j~hjx ubj)}(hhh]j)}(hKeyboard brightness changeh]hKeyboard brightness change}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hjx ubeh}(h]h ]h"]h$]h&]uh1jyhj> ubjz)}(hhh](j)}(hhh]j)}(h6h]h6}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubj)}(hhh]j)}(h(Touchpad state (enabled/disabled) changeh]h(Touchpad state (enabled/disabled) change}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]uh1jyhj> ubjz)}(hhh](j)}(hhh]j)}(h7h]h7}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubj)}(hhh]j)}(h&FnLock state (enabled/disabled) changeh]h&FnLock state (enabled/disabled) change}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]uh1jyhj> ubjz)}(hhh](j)}(hhh]j)}(hj$h]h8}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubj)}(hhh]j)}(hKeyboard mode changeh]hKeyboard mode change}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj6 ubah}(h]h ]h"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]uh1jyhj> ubjz)}(hhh](j)}(hhh]j)}(hjrh]h9}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjV ubah}(h]h ]h"]h$]h&]uh1j~hjS ubj)}(hhh]j)}(hCapsLock state changeh]hCapsLock state change}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjl ubah}(h]h ]h"]h$]h&]uh1j~hjS ubeh}(h]h ]h"]h$]h&]uh1jyhj> ubjz)}(hhh](j)}(hhh]j)}(h13h]h13}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubj)}(hhh]j)}(hNumLock state changeh]hNumLock state change}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]uh1jyhj> ubjz)}(hhh](j)}(hhh]j)}(h14h]h14}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubj)}(hhh]j)}(hScrollLock state changeh]hScrollLock state change}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]uh1jyhj> ubjz)}(hhh](j)}(hhh]j)}(h15h]h15}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubj)}(hhh]j)}(hPerformance plan changeh]hPerformance plan change}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]uh1jyhj> ubjz)}(hhh](j)}(hhh]j)}(h25h]h25}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj1 ubah}(h]h ]h"]h$]h&]uh1j~hj. ubj)}(hhh]j)}(hDisplay refresh rate changeh]hDisplay refresh rate change}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjH ubah}(h]h ]h"]h$]h&]uh1j~hj. ubeh}(h]h ]h"]h$]h&]uh1jyhj> ubjz)}(hhh](j)}(hhh]j)}(h33h]h33}(hjk hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjh ubah}(h]h ]h"]h$]h&]uh1j~hje ubj)}(hhh]j)}(h.Super key lock state (enabled/disabled) changeh]h.Super key lock state (enabled/disabled) change}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hje ubeh}(h]h ]h"]h$]h&]uh1jyhj> ubjz)}(hhh](j)}(hhh]j)}(h35h]h35}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubj)}(hhh]j)}(hOpen control center keyh]hOpen control center key}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]uh1jyhj> ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]colsKuh1jYhj ubah}(h]h ]h"]h$]h&]uh1jThj hhhhhNubeh}(h]common-event-idsah ]h"]common event ids:ah$]h&]uh1hhj5hhhhhKubeh}(h]wmi-events-hid-event20ah ]h"]wmi events (hid_event20)ah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hImplementation Detailsh]hImplementation Details}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hhh](h)}(hPerformance Modesh]hPerformance Modes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubj)}(hX3Changing the performance mode via Command ID 0x08 (SystemPerMode) affects the power limits (PL1/PL2) and fan curves managed by the Embedded Controller (EC). Note that the "Full-speed" and "Performance" mode (1, 3) is typically only available when the system is connected to a DC power source (not USB-C/PD).h]hX;Changing the performance mode via Command ID 0x08 (SystemPerMode) affects the power limits (PL1/PL2) and fan curves managed by the Embedded Controller (EC). Note that the “Full-speed” and “Performance” mode (1, 3) is typically only available when the system is connected to a DC power source (not USB-C/PD).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj hhubj)}(hIn the driver implementation, switch to performance/full-speed mode without DC power connected will throw the EOPNOTSUPP error.h]hIn the driver implementation, switch to performance/full-speed mode without DC power connected will throw the EOPNOTSUPP error.}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj hhubeh}(h]performance-modesah ]h"]performance modesah$]h&]uh1hhj hhhhhKubh)}(hhh](h)}(hGraphics Switchingh]hGraphics Switching}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj< hhhhhKubj)}(hThe ``GPUMode`` (0x09) allows switching between Hybrid (Muxless) and Discrete (Muxed) graphics. Changing this value usually requires a system reboot to take effect in the BIOS/Firmware.h](hThe }(hjM hhhNhNubj)}(h ``GPUMode``h]hGPUMode}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM ubh (0x09) allows switching between Hybrid (Muxless) and Discrete (Muxed) graphics. Changing this value usually requires a system reboot to take effect in the BIOS/Firmware.}(hjM hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj< hhubeh}(h]graphics-switchingah ]h"]graphics switchingah$]h&]uh1hhj hhhhhKubh)}(hhh](h)}(h Fan Controlh]h Fan Control}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju hhhhhKubj)}(hThe system supports both automatic EC control and manual overrides. Command ID 0x14 (``MaxFanSpeedSwitch``) is used to toggle manual control, while ID 0x15 sets the actual PWM duty cycle.h](hUThe system supports both automatic EC control and manual overrides. Command ID 0x14 (}(hj hhhNhNubj)}(h``MaxFanSpeedSwitch``h]hMaxFanSpeedSwitch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhQ) is used to toggle manual control, while ID 0x15 sets the actual PWM duty cycle.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhju hhubeh}(h] fan-controlah ]h"] fan controlah$]h&]uh1hhj hhhhhKubeh}(h]implementation-detailsah ]h"]implementation detailsah$]h&]uh1hhhhhhhhKubeh}(h]$bitland-mifs-driver-bitland-mifs-wmiah ]h"]&bitland mifs driver (bitland-mifs-wmi)ah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksj~footnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j j hhjTjQj0j-jjjjjjj2j/j|jyj*j'j j j j j j j j j9 j6 jr jo j j u nametypes}(j hjTj0jjjj2j|j*j j j j j9 jr j uh}(j hhhjQhj-j'jjWjjjjj/jjyj5j'jj j5j jxj j j j j6 j jo j< j ju u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.