Loading Documentation/laptops/acer-wmi.txt +2 −2 Original line number Original line Diff line number Diff line Loading @@ -48,7 +48,7 @@ DSDT. To send me the DSDT, as root/sudo: To send me the DSDT, as root/sudo: cat /sys/firmware/acpi/DSDT > dsdt cat /sys/firmware/acpi/tables/DSDT > dsdt And send me the resulting 'dsdt' file. And send me the resulting 'dsdt' file. Loading Loading @@ -169,7 +169,7 @@ can be added to acer-wmi. The LED is exposed through the LED subsystem, and can be found in: The LED is exposed through the LED subsystem, and can be found in: /sys/devices/platform/acer-wmi/leds/acer-mail:green/ /sys/devices/platform/acer-wmi/leds/acer-wmi::mail/ The mail LED is autodetected, so if you don't have one, the LED device won't The mail LED is autodetected, so if you don't have one, the LED device won't be registered. be registered. Loading drivers/acpi/scan.c +2 −1 Original line number Original line Diff line number Diff line Loading @@ -609,7 +609,8 @@ acpi_bus_get_ejd(acpi_handle handle, acpi_handle *ejd) status = acpi_evaluate_object(handle, "_EJD", NULL, &buffer); status = acpi_evaluate_object(handle, "_EJD", NULL, &buffer); if (ACPI_SUCCESS(status)) { if (ACPI_SUCCESS(status)) { obj = buffer.pointer; obj = buffer.pointer; status = acpi_get_handle(NULL, obj->string.pointer, ejd); status = acpi_get_handle(ACPI_ROOT_OBJECT, obj->string.pointer, ejd); kfree(buffer.pointer); kfree(buffer.pointer); } } return status; return status; Loading drivers/acpi/wmi.c +6 −4 Original line number Original line Diff line number Diff line Loading @@ -293,7 +293,7 @@ struct acpi_buffer *out) { { struct guid_block *block = NULL; struct guid_block *block = NULL; struct wmi_block *wblock = NULL; struct wmi_block *wblock = NULL; acpi_handle handle; acpi_handle handle, wc_handle; acpi_status status, wc_status = AE_ERROR; acpi_status status, wc_status = AE_ERROR; struct acpi_object_list input, wc_input; struct acpi_object_list input, wc_input; union acpi_object wc_params[1], wq_params[1]; union acpi_object wc_params[1], wq_params[1]; Loading Loading @@ -338,6 +338,8 @@ struct acpi_buffer *out) * expensive, but have no corresponding WCxx method. So we * expensive, but have no corresponding WCxx method. So we * should not fail if this happens. * should not fail if this happens. */ */ wc_status = acpi_get_handle(handle, wc_method, &wc_handle); if (ACPI_SUCCESS(wc_status)) wc_status = acpi_evaluate_object(handle, wc_method, wc_status = acpi_evaluate_object(handle, wc_method, &wc_input, NULL); &wc_input, NULL); } } Loading @@ -351,7 +353,7 @@ struct acpi_buffer *out) * If ACPI_WMI_EXPENSIVE, call the relevant WCxx method, even if * If ACPI_WMI_EXPENSIVE, call the relevant WCxx method, even if * the WQxx method failed - we should disable collection anyway. * the WQxx method failed - we should disable collection anyway. */ */ if ((block->flags & ACPI_WMI_EXPENSIVE) && wc_status) { if ((block->flags & ACPI_WMI_EXPENSIVE) && ACPI_SUCCESS(wc_status)) { wc_params[0].integer.value = 0; wc_params[0].integer.value = 0; status = acpi_evaluate_object(handle, status = acpi_evaluate_object(handle, wc_method, &wc_input, NULL); wc_method, &wc_input, NULL); Loading drivers/misc/Kconfig +1 −0 Original line number Original line Diff line number Diff line Loading @@ -108,6 +108,7 @@ config ACER_WMI depends on ACPI depends on ACPI depends on LEDS_CLASS depends on LEDS_CLASS depends on BACKLIGHT_CLASS_DEVICE depends on BACKLIGHT_CLASS_DEVICE depends on SERIO_I8042 select ACPI_WMI select ACPI_WMI ---help--- ---help--- This is a driver for newer Acer (and Wistron) laptops. It adds This is a driver for newer Acer (and Wistron) laptops. It adds Loading drivers/misc/acer-wmi.c +28 −10 Original line number Original line Diff line number Diff line Loading @@ -217,6 +217,15 @@ static struct dmi_system_id acer_quirks[] = { }, }, .driver_data = &quirk_acer_travelmate_2490, .driver_data = &quirk_acer_travelmate_2490, }, }, { .callback = dmi_matched, .ident = "Acer Aspire 3610", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 3610"), }, .driver_data = &quirk_acer_travelmate_2490, }, { { .callback = dmi_matched, .callback = dmi_matched, .ident = "Acer Aspire 5100", .ident = "Acer Aspire 5100", Loading @@ -226,6 +235,15 @@ static struct dmi_system_id acer_quirks[] = { }, }, .driver_data = &quirk_acer_travelmate_2490, .driver_data = &quirk_acer_travelmate_2490, }, }, { .callback = dmi_matched, .ident = "Acer Aspire 5610", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5610"), }, .driver_data = &quirk_acer_travelmate_2490, }, { { .callback = dmi_matched, .callback = dmi_matched, .ident = "Acer Aspire 5630", .ident = "Acer Aspire 5630", Loading Loading @@ -761,7 +779,7 @@ enum led_brightness value) } } static struct led_classdev mail_led = { static struct led_classdev mail_led = { .name = "acer-mail:green", .name = "acer-wmi::mail", .brightness_set = mail_led_set, .brightness_set = mail_led_set, }; }; Loading Loading @@ -1052,11 +1070,12 @@ static int __init acer_wmi_init(void) if (wmi_has_guid(WMID_GUID2) && interface) { if (wmi_has_guid(WMID_GUID2) && interface) { if (ACPI_FAILURE(WMID_set_capabilities())) { if (ACPI_FAILURE(WMID_set_capabilities())) { printk(ACER_ERR "Unable to detect available devices\n"); printk(ACER_ERR "Unable to detect available WMID " "devices\n"); return -ENODEV; return -ENODEV; } } } else if (!wmi_has_guid(WMID_GUID2) && interface) { } else if (!wmi_has_guid(WMID_GUID2) && interface) { printk(ACER_ERR "Unable to detect available devices\n"); printk(ACER_ERR "No WMID device detection method found\n"); return -ENODEV; return -ENODEV; } } Loading @@ -1064,21 +1083,20 @@ static int __init acer_wmi_init(void) interface = &AMW0_interface; interface = &AMW0_interface; if (ACPI_FAILURE(AMW0_set_capabilities())) { if (ACPI_FAILURE(AMW0_set_capabilities())) { printk(ACER_ERR "Unable to detect available devices\n"); printk(ACER_ERR "Unable to detect available AMW0 " "devices\n"); return -ENODEV; return -ENODEV; } } } } if (wmi_has_guid(AMW0_GUID1)) { if (wmi_has_guid(AMW0_GUID1)) if (ACPI_FAILURE(AMW0_find_mailled())) AMW0_find_mailled(); printk(ACER_ERR "Unable to detect mail LED\n"); } find_quirks(); find_quirks(); if (!interface) { if (!interface) { printk(ACER_ERR "No or unsupported WMI interface, unable to "); printk(ACER_ERR "No or unsupported WMI interface, unable to " printk(KERN_CONT "load.\n"); "load\n"); return -ENODEV; return -ENODEV; } } Loading Loading
Documentation/laptops/acer-wmi.txt +2 −2 Original line number Original line Diff line number Diff line Loading @@ -48,7 +48,7 @@ DSDT. To send me the DSDT, as root/sudo: To send me the DSDT, as root/sudo: cat /sys/firmware/acpi/DSDT > dsdt cat /sys/firmware/acpi/tables/DSDT > dsdt And send me the resulting 'dsdt' file. And send me the resulting 'dsdt' file. Loading Loading @@ -169,7 +169,7 @@ can be added to acer-wmi. The LED is exposed through the LED subsystem, and can be found in: The LED is exposed through the LED subsystem, and can be found in: /sys/devices/platform/acer-wmi/leds/acer-mail:green/ /sys/devices/platform/acer-wmi/leds/acer-wmi::mail/ The mail LED is autodetected, so if you don't have one, the LED device won't The mail LED is autodetected, so if you don't have one, the LED device won't be registered. be registered. Loading
drivers/acpi/scan.c +2 −1 Original line number Original line Diff line number Diff line Loading @@ -609,7 +609,8 @@ acpi_bus_get_ejd(acpi_handle handle, acpi_handle *ejd) status = acpi_evaluate_object(handle, "_EJD", NULL, &buffer); status = acpi_evaluate_object(handle, "_EJD", NULL, &buffer); if (ACPI_SUCCESS(status)) { if (ACPI_SUCCESS(status)) { obj = buffer.pointer; obj = buffer.pointer; status = acpi_get_handle(NULL, obj->string.pointer, ejd); status = acpi_get_handle(ACPI_ROOT_OBJECT, obj->string.pointer, ejd); kfree(buffer.pointer); kfree(buffer.pointer); } } return status; return status; Loading
drivers/acpi/wmi.c +6 −4 Original line number Original line Diff line number Diff line Loading @@ -293,7 +293,7 @@ struct acpi_buffer *out) { { struct guid_block *block = NULL; struct guid_block *block = NULL; struct wmi_block *wblock = NULL; struct wmi_block *wblock = NULL; acpi_handle handle; acpi_handle handle, wc_handle; acpi_status status, wc_status = AE_ERROR; acpi_status status, wc_status = AE_ERROR; struct acpi_object_list input, wc_input; struct acpi_object_list input, wc_input; union acpi_object wc_params[1], wq_params[1]; union acpi_object wc_params[1], wq_params[1]; Loading Loading @@ -338,6 +338,8 @@ struct acpi_buffer *out) * expensive, but have no corresponding WCxx method. So we * expensive, but have no corresponding WCxx method. So we * should not fail if this happens. * should not fail if this happens. */ */ wc_status = acpi_get_handle(handle, wc_method, &wc_handle); if (ACPI_SUCCESS(wc_status)) wc_status = acpi_evaluate_object(handle, wc_method, wc_status = acpi_evaluate_object(handle, wc_method, &wc_input, NULL); &wc_input, NULL); } } Loading @@ -351,7 +353,7 @@ struct acpi_buffer *out) * If ACPI_WMI_EXPENSIVE, call the relevant WCxx method, even if * If ACPI_WMI_EXPENSIVE, call the relevant WCxx method, even if * the WQxx method failed - we should disable collection anyway. * the WQxx method failed - we should disable collection anyway. */ */ if ((block->flags & ACPI_WMI_EXPENSIVE) && wc_status) { if ((block->flags & ACPI_WMI_EXPENSIVE) && ACPI_SUCCESS(wc_status)) { wc_params[0].integer.value = 0; wc_params[0].integer.value = 0; status = acpi_evaluate_object(handle, status = acpi_evaluate_object(handle, wc_method, &wc_input, NULL); wc_method, &wc_input, NULL); Loading
drivers/misc/Kconfig +1 −0 Original line number Original line Diff line number Diff line Loading @@ -108,6 +108,7 @@ config ACER_WMI depends on ACPI depends on ACPI depends on LEDS_CLASS depends on LEDS_CLASS depends on BACKLIGHT_CLASS_DEVICE depends on BACKLIGHT_CLASS_DEVICE depends on SERIO_I8042 select ACPI_WMI select ACPI_WMI ---help--- ---help--- This is a driver for newer Acer (and Wistron) laptops. It adds This is a driver for newer Acer (and Wistron) laptops. It adds Loading
drivers/misc/acer-wmi.c +28 −10 Original line number Original line Diff line number Diff line Loading @@ -217,6 +217,15 @@ static struct dmi_system_id acer_quirks[] = { }, }, .driver_data = &quirk_acer_travelmate_2490, .driver_data = &quirk_acer_travelmate_2490, }, }, { .callback = dmi_matched, .ident = "Acer Aspire 3610", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 3610"), }, .driver_data = &quirk_acer_travelmate_2490, }, { { .callback = dmi_matched, .callback = dmi_matched, .ident = "Acer Aspire 5100", .ident = "Acer Aspire 5100", Loading @@ -226,6 +235,15 @@ static struct dmi_system_id acer_quirks[] = { }, }, .driver_data = &quirk_acer_travelmate_2490, .driver_data = &quirk_acer_travelmate_2490, }, }, { .callback = dmi_matched, .ident = "Acer Aspire 5610", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5610"), }, .driver_data = &quirk_acer_travelmate_2490, }, { { .callback = dmi_matched, .callback = dmi_matched, .ident = "Acer Aspire 5630", .ident = "Acer Aspire 5630", Loading Loading @@ -761,7 +779,7 @@ enum led_brightness value) } } static struct led_classdev mail_led = { static struct led_classdev mail_led = { .name = "acer-mail:green", .name = "acer-wmi::mail", .brightness_set = mail_led_set, .brightness_set = mail_led_set, }; }; Loading Loading @@ -1052,11 +1070,12 @@ static int __init acer_wmi_init(void) if (wmi_has_guid(WMID_GUID2) && interface) { if (wmi_has_guid(WMID_GUID2) && interface) { if (ACPI_FAILURE(WMID_set_capabilities())) { if (ACPI_FAILURE(WMID_set_capabilities())) { printk(ACER_ERR "Unable to detect available devices\n"); printk(ACER_ERR "Unable to detect available WMID " "devices\n"); return -ENODEV; return -ENODEV; } } } else if (!wmi_has_guid(WMID_GUID2) && interface) { } else if (!wmi_has_guid(WMID_GUID2) && interface) { printk(ACER_ERR "Unable to detect available devices\n"); printk(ACER_ERR "No WMID device detection method found\n"); return -ENODEV; return -ENODEV; } } Loading @@ -1064,21 +1083,20 @@ static int __init acer_wmi_init(void) interface = &AMW0_interface; interface = &AMW0_interface; if (ACPI_FAILURE(AMW0_set_capabilities())) { if (ACPI_FAILURE(AMW0_set_capabilities())) { printk(ACER_ERR "Unable to detect available devices\n"); printk(ACER_ERR "Unable to detect available AMW0 " "devices\n"); return -ENODEV; return -ENODEV; } } } } if (wmi_has_guid(AMW0_GUID1)) { if (wmi_has_guid(AMW0_GUID1)) if (ACPI_FAILURE(AMW0_find_mailled())) AMW0_find_mailled(); printk(ACER_ERR "Unable to detect mail LED\n"); } find_quirks(); find_quirks(); if (!interface) { if (!interface) { printk(ACER_ERR "No or unsupported WMI interface, unable to "); printk(ACER_ERR "No or unsupported WMI interface, unable to " printk(KERN_CONT "load.\n"); "load\n"); return -ENODEV; return -ENODEV; } } Loading