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

This commit is contained in:
Len Brown 2008-03-13 01:59:52 -04:00
commit b4de123a0b
6 changed files with 40 additions and 18 deletions

View file

@ -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.
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.

View file

@ -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;

View file

@ -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,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);
} }
@ -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);

View file

@ -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

View file

@ -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[] = {
}, },
.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)
} }
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)
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)
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;
} }

View file

@ -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;
} }