• AceLan Kao's avatar
    asus-wmi: record wlan status while controlled by userapp · a50bd128
    AceLan Kao authored
    If the user bit is set, that mean BIOS can't set and record the wlan
    status, it will report the value read from id ASUS_WMI_DEVID_WLAN_LED
    (0x00010012) while we query the wlan status by id ASUS_WMI_DEVID_WLAN
    (0x00010011) through WMI.
    So, we have to record wlan status in id ASUS_WMI_DEVID_WLAN_LED
    (0x00010012) while setting the wlan status through WMI.
    This is also the behavior that windows app will do.
    
    Quote from ASUS application engineer
    ===
    When you call WMIMethod(DSTS, 0x00010011) to get WLAN status, it may return
    
    (1) 0x00050001 (On)
    (2) 0x00050000 (Off)
    (3) 0x00030001 (On)
    (4) 0x00030000 (Off)
    (5) 0x00000002 (Unknown)
    
    (1), (2) means that the model has hardware GPIO for WLAN, you can call
    WMIMethod(DEVS, 0x00010011, 1 or 0) to turn WLAN on/off.
    (3), (4) means that the model doesn’t have hardware GPIO, you need to use
    API or driver library to turn WLAN on/off, and call
    WMIMethod(DEVS, 0x00010012, 1 or 0) to set WLAN LED status.
    After you set WLAN LED status, you can see the WLAN status is changed with
    WMIMethod(DSTS, 0x00010011). Because the status is recorded lastly
    (ex: Windows), you can use it for synchronization.
    (5) means that the model doesn’t have WLAN device.
    
    WLAN is the ONLY special case with upper rule.
    
    For other device, like Bluetooth, you just need use
    WMIMethod(DSTS, 0x00010013) to get, and WMIMethod(DEVS, 0x00010013, 1 or 0)
    to set.
    ===
    Signed-off-by: default avatarAceLan Kao <acelan.kao@canonical.com>
    Signed-off-by: default avatarMatthew Garrett <mjg@redhat.com>
    a50bd128
asus-wmi.c 46.8 KB