mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-06 22:44:40 +00:00
asus-wmi: Create quirk for airplane_mode LED
Some Asus laptops that have an airplane-mode indicator LED, also have the WMI WLAN user bit set, and the following bits in their DSDT: Scope (_SB) { (...) Device (ATKD) { (...) Method (WMNB, 3, Serialized) { (...) If (LEqual (IIA0, 0x00010002)) { OWGD (IIA1) Return (One) } } } } So when asus-wmi uses ASUS_WMI_DEVID_WLAN_LED (0x00010002) to store the wlan state, it drives the airplane-mode indicator LED (through the call to OWGD) in an inverted fashion: the LED is ON when airplane mode is OFF (since wlan is ON), and vice-versa. This commit creates a quirk to not register a RFKill switch at all for these laptops, to allow the asus-wireless driver to drive the airplane mode LED correctly through the ASHS ACPI device. It also adds a match to that quirk for the Asus X555UB, which is affected by this problem. Signed-off-by: João Paulo Rechi Vita <jprvita@endlessm.com> Reviewed-by: Corentin Chary <corentin.chary@gmail.com> Signed-off-by: Darren Hart <dvhart@linux.intel.com>
This commit is contained in:
parent
2c1a49c961
commit
a977e59c0c
3 changed files with 19 additions and 3 deletions
|
@ -78,6 +78,10 @@ static struct quirk_entry quirk_asus_x200ca = {
|
||||||
.wapf = 2,
|
.wapf = 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct quirk_entry quirk_no_rfkill = {
|
||||||
|
.no_rfkill = true,
|
||||||
|
};
|
||||||
|
|
||||||
static int dmi_matched(const struct dmi_system_id *dmi)
|
static int dmi_matched(const struct dmi_system_id *dmi)
|
||||||
{
|
{
|
||||||
quirks = dmi->driver_data;
|
quirks = dmi->driver_data;
|
||||||
|
@ -306,6 +310,15 @@ static const struct dmi_system_id asus_quirks[] = {
|
||||||
},
|
},
|
||||||
.driver_data = &quirk_asus_x200ca,
|
.driver_data = &quirk_asus_x200ca,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.callback = dmi_matched,
|
||||||
|
.ident = "ASUSTeK COMPUTER INC. X555UB",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "X555UB"),
|
||||||
|
},
|
||||||
|
.driver_data = &quirk_no_rfkill,
|
||||||
|
},
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -2069,9 +2069,11 @@ static int asus_wmi_add(struct platform_device *pdev)
|
||||||
if (err)
|
if (err)
|
||||||
goto fail_leds;
|
goto fail_leds;
|
||||||
|
|
||||||
err = asus_wmi_rfkill_init(asus);
|
if (!asus->driver->quirks->no_rfkill) {
|
||||||
if (err)
|
err = asus_wmi_rfkill_init(asus);
|
||||||
goto fail_rfkill;
|
if (err)
|
||||||
|
goto fail_rfkill;
|
||||||
|
}
|
||||||
|
|
||||||
/* Some Asus desktop boards export an acpi-video backlight interface,
|
/* Some Asus desktop boards export an acpi-video backlight interface,
|
||||||
stop this from showing up */
|
stop this from showing up */
|
||||||
|
|
|
@ -38,6 +38,7 @@ struct key_entry;
|
||||||
struct asus_wmi;
|
struct asus_wmi;
|
||||||
|
|
||||||
struct quirk_entry {
|
struct quirk_entry {
|
||||||
|
bool no_rfkill;
|
||||||
bool hotplug_wireless;
|
bool hotplug_wireless;
|
||||||
bool scalar_panel_brightness;
|
bool scalar_panel_brightness;
|
||||||
bool store_backlight_power;
|
bool store_backlight_power;
|
||||||
|
|
Loading…
Add table
Reference in a new issue