Commit b4de123a authored by Len Brown's avatar Len Brown

Merge branches 'release', 'ejd', 'sony' and 'wmi' into release

...@@ -48,7 +48,7 @@ DSDT. ...@@ -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.
...@@ -169,7 +169,7 @@ can be added to acer-wmi. ...@@ -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.
......
...@@ -609,7 +609,8 @@ acpi_bus_get_ejd(acpi_handle handle, acpi_handle *ejd) ...@@ -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;
......
...@@ -293,7 +293,7 @@ struct acpi_buffer *out) ...@@ -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];
...@@ -338,8 +338,10 @@ struct acpi_buffer *out) ...@@ -338,8 +338,10 @@ 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_evaluate_object(handle, wc_method, wc_status = acpi_get_handle(handle, wc_method, &wc_handle);
&wc_input, NULL); if (ACPI_SUCCESS(wc_status))
wc_status = acpi_evaluate_object(handle, wc_method,
&wc_input, NULL);
} }
strcpy(method, "WQ"); strcpy(method, "WQ");
...@@ -351,7 +353,7 @@ struct acpi_buffer *out) ...@@ -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);
......
...@@ -108,6 +108,7 @@ config ACER_WMI ...@@ -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
......
...@@ -217,6 +217,15 @@ static struct dmi_system_id acer_quirks[] = { ...@@ -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",
...@@ -226,6 +235,15 @@ static struct dmi_system_id acer_quirks[] = { ...@@ -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",
...@@ -761,7 +779,7 @@ enum led_brightness value) ...@@ -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,
}; };
...@@ -1052,11 +1070,12 @@ static int __init acer_wmi_init(void) ...@@ -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;
} }
...@@ -1064,21 +1083,20 @@ static int __init acer_wmi_init(void) ...@@ -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;
} }
......
...@@ -315,7 +315,7 @@ static void sony_laptop_report_input_event(u8 event) ...@@ -315,7 +315,7 @@ static void sony_laptop_report_input_event(u8 event)
break; break;
default: default:
if (event > ARRAY_SIZE(sony_laptop_input_index)) { if (event >= ARRAY_SIZE(sony_laptop_input_index)) {
dprintk("sony_laptop_report_input_event, event not known: %d\n", event); dprintk("sony_laptop_report_input_event, event not known: %d\n", event);
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment