diff options
Diffstat (limited to 'drivers/platform/x86/dell-wmi.c')
-rw-r--r-- | drivers/platform/x86/dell-wmi.c | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/drivers/platform/x86/dell-wmi.c b/drivers/platform/x86/dell-wmi.c index 67f3fe71c509..1b1dddbd5744 100644 --- a/drivers/platform/x86/dell-wmi.c +++ b/drivers/platform/x86/dell-wmi.c | |||
@@ -202,8 +202,13 @@ static void dell_wmi_notify(u32 value, void *context) | |||
202 | struct acpi_buffer response = { ACPI_ALLOCATE_BUFFER, NULL }; | 202 | struct acpi_buffer response = { ACPI_ALLOCATE_BUFFER, NULL }; |
203 | static struct key_entry *key; | 203 | static struct key_entry *key; |
204 | union acpi_object *obj; | 204 | union acpi_object *obj; |
205 | acpi_status status; | ||
205 | 206 | ||
206 | wmi_get_event_data(value, &response); | 207 | status = wmi_get_event_data(value, &response); |
208 | if (status != AE_OK) { | ||
209 | printk(KERN_INFO "dell-wmi: bad event status 0x%x\n", status); | ||
210 | return; | ||
211 | } | ||
207 | 212 | ||
208 | obj = (union acpi_object *)response.pointer; | 213 | obj = (union acpi_object *)response.pointer; |
209 | 214 | ||
@@ -238,6 +243,7 @@ static void dell_wmi_notify(u32 value, void *context) | |||
238 | input_sync(dell_wmi_input_dev); | 243 | input_sync(dell_wmi_input_dev); |
239 | } | 244 | } |
240 | } | 245 | } |
246 | kfree(obj); | ||
241 | } | 247 | } |
242 | 248 | ||
243 | 249 | ||
@@ -322,39 +328,37 @@ static int __init dell_wmi_input_setup(void) | |||
322 | static int __init dell_wmi_init(void) | 328 | static int __init dell_wmi_init(void) |
323 | { | 329 | { |
324 | int err; | 330 | int err; |
331 | acpi_status status; | ||
325 | 332 | ||
326 | if (wmi_has_guid(DELL_EVENT_GUID)) { | 333 | if (!wmi_has_guid(DELL_EVENT_GUID)) { |
327 | 334 | printk(KERN_WARNING "dell-wmi: No known WMI GUID found\n"); | |
328 | dmi_walk(find_hk_type, NULL); | 335 | return -ENODEV; |
329 | 336 | } | |
330 | err = dell_wmi_input_setup(); | ||
331 | |||
332 | if (err) | ||
333 | return err; | ||
334 | 337 | ||
335 | err = wmi_install_notify_handler(DELL_EVENT_GUID, | 338 | dmi_walk(find_hk_type, NULL); |
336 | dell_wmi_notify, NULL); | 339 | acpi_video = acpi_video_backlight_support(); |
337 | if (err) { | ||
338 | input_unregister_device(dell_wmi_input_dev); | ||
339 | printk(KERN_ERR "dell-wmi: Unable to register" | ||
340 | " notify handler - %d\n", err); | ||
341 | return err; | ||
342 | } | ||
343 | 340 | ||
344 | acpi_video = acpi_video_backlight_support(); | 341 | err = dell_wmi_input_setup(); |
342 | if (err) | ||
343 | return err; | ||
345 | 344 | ||
346 | } else | 345 | status = wmi_install_notify_handler(DELL_EVENT_GUID, |
347 | printk(KERN_WARNING "dell-wmi: No known WMI GUID found\n"); | 346 | dell_wmi_notify, NULL); |
347 | if (ACPI_FAILURE(status)) { | ||
348 | input_unregister_device(dell_wmi_input_dev); | ||
349 | printk(KERN_ERR | ||
350 | "dell-wmi: Unable to register notify handler - %d\n", | ||
351 | status); | ||
352 | return -ENODEV; | ||
353 | } | ||
348 | 354 | ||
349 | return 0; | 355 | return 0; |
350 | } | 356 | } |
351 | 357 | ||
352 | static void __exit dell_wmi_exit(void) | 358 | static void __exit dell_wmi_exit(void) |
353 | { | 359 | { |
354 | if (wmi_has_guid(DELL_EVENT_GUID)) { | 360 | wmi_remove_notify_handler(DELL_EVENT_GUID); |
355 | wmi_remove_notify_handler(DELL_EVENT_GUID); | 361 | input_unregister_device(dell_wmi_input_dev); |
356 | input_unregister_device(dell_wmi_input_dev); | ||
357 | } | ||
358 | } | 362 | } |
359 | 363 | ||
360 | module_init(dell_wmi_init); | 364 | module_init(dell_wmi_init); |