|
@@ -305,6 +305,10 @@ static struct quirk_entry quirk_fujitsu_amilo_li_1718 = {
|
|
|
.wireless = 2,
|
|
|
};
|
|
|
|
|
|
+static struct quirk_entry quirk_lenovo_ideapad_s205 = {
|
|
|
+ .wireless = 3,
|
|
|
+};
|
|
|
+
|
|
|
/* The Aspire One has a dummy ACPI-WMI interface - disable it */
|
|
|
static struct dmi_system_id __devinitdata acer_blacklist[] = {
|
|
|
{
|
|
@@ -451,6 +455,15 @@ static struct dmi_system_id acer_quirks[] = {
|
|
|
},
|
|
|
.driver_data = &quirk_medion_md_98300,
|
|
|
},
|
|
|
+ {
|
|
|
+ .callback = dmi_matched,
|
|
|
+ .ident = "Lenovo Ideapad S205",
|
|
|
+ .matches = {
|
|
|
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
|
|
+ DMI_MATCH(DMI_PRODUCT_NAME, "10382LG"),
|
|
|
+ },
|
|
|
+ .driver_data = &quirk_lenovo_ideapad_s205,
|
|
|
+ },
|
|
|
{}
|
|
|
};
|
|
|
|
|
@@ -543,6 +556,12 @@ struct wmi_interface *iface)
|
|
|
return AE_ERROR;
|
|
|
*value = result & 0x1;
|
|
|
return AE_OK;
|
|
|
+ case 3:
|
|
|
+ err = ec_read(0x78, &result);
|
|
|
+ if (err)
|
|
|
+ return AE_ERROR;
|
|
|
+ *value = result & 0x1;
|
|
|
+ return AE_OK;
|
|
|
default:
|
|
|
err = ec_read(0xA, &result);
|
|
|
if (err)
|
|
@@ -1267,8 +1286,13 @@ static void acer_rfkill_update(struct work_struct *ignored)
|
|
|
acpi_status status;
|
|
|
|
|
|
status = get_u32(&state, ACER_CAP_WIRELESS);
|
|
|
- if (ACPI_SUCCESS(status))
|
|
|
- rfkill_set_sw_state(wireless_rfkill, !state);
|
|
|
+ if (ACPI_SUCCESS(status)) {
|
|
|
+ if (quirks->wireless == 3) {
|
|
|
+ rfkill_set_hw_state(wireless_rfkill, !state);
|
|
|
+ } else {
|
|
|
+ rfkill_set_sw_state(wireless_rfkill, !state);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
if (has_cap(ACER_CAP_BLUETOOTH)) {
|
|
|
status = get_u32(&state, ACER_CAP_BLUETOOTH);
|