aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform/x86/dell-wmi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/platform/x86/dell-wmi.c')
-rw-r--r--drivers/platform/x86/dell-wmi.c52
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)
322static int __init dell_wmi_init(void) 328static 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
352static void __exit dell_wmi_exit(void) 358static 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
360module_init(dell_wmi_init); 364module_init(dell_wmi_init);