ACPI: use device .notify methods
Subsystems (6)
v2 cover ACPI: use device .notify methods
This is just a refresh so these patches apply to the current upstream tree (commit d508afb437daee7cf07da085b635c44a4ebf9b38). No other code changes.
---
Bjorn Helgaas (7):
ACPI: WMI: use .notify method instead of installing handler directly
sony-laptop: use .notify method instead of installing handler directly
panasonic-laptop: use .notify method instead of installing handler directly
fujitsu-laptop: use .notify method instead of installing hotkey handler directly
fujitsu-laptop: use .notify method instead of installing handler directly
ACPI: video: use .notify method instead of installing handler directly
ACPI: thermal: use .notify method instead of installing handler directly
drivers/acpi/thermal.c | 27 ++------------ drivers/acpi/video.c | 30 +++------------- drivers/platform/x86/fujitsu-laptop.c | 60 +++++-------------------------- drivers/platform/x86/panasonic-laptop.c | 26 +++---------- drivers/platform/x86/sony-laptop.c | 30 ++-------------- drivers/platform/x86/wmi.c | 15 ++------ 6 files changed, 30 insertions(+), 158 deletions(-)
Signature · 1 line
Bjorn
PATCH v2 1/7 ACPI: thermal: use .notify method instead of installing handler directly
This patch adds a .notify() method. The presence of .notify() causes Linux/ACPI to manage event handlers and notify handlers on our behalf, so we don't have to install and remove them ourselves.
--- drivers/acpi/thermal.c | 27 ++++----------------------- 1 files changed, 4 insertions(+), 23 deletions(-)
drivers/acpi/thermal.c +4 -23
@@ -98,6 +98,7 @@ MODULE_PARM_DESC(psv, "Disable or override all passive trip points.");static int acpi_thermal_add (struct acpi_device *device);static int acpi_thermal_remove (struct acpi_device *device,int type);static int acpi_thermal_resume (struct acpi_device *device); +static void acpi_thermal_notify (struct acpi_device *device,u32 event);static int acpi_thermal_state_open_fs (struct inode *inode,struct file *file);static int acpi_thermal_temp_open_fs (struct inode *inode,struct file *file);static int acpi_thermal_trip_open_fs (struct inode *inode,struct file *file);
@@ -123,6 +124,7 @@ static struct acpi_driver acpi_thermal_driver = { .add = acpi_thermal_add, .remove = acpi_thermal_remove, .resume = acpi_thermal_resume, + .notify = acpi_thermal_notify, }, };
@@ -1264,17 +1266,14 @@ static int acpi_thermal_remove_fs(struct acpi_device *device)Driver Interface -------------------------------------------------------------------------- */ -static void acpi_thermal_notify (acpi_handle handle,u32 event,void *data) +static void acpi_thermal_notify (struct acpi_device *device,u32 event) { -struct acpi_thermal *tz = data; -struct acpi_device *device =NULL ; +struct acpi_thermal *tz =acpi_driver_data (device);if (!tz)return ; - device = tz->device; -switch (event) {case ACPI_THERMAL_NOTIFY_TEMPERATURE :acpi_thermal_check (tz);
@@ -1298,8 +1297,6 @@ static void acpi_thermal_notify(acpi_handle handle, u32 event, void *data) "Unsupported event [0x%x]\n", event));break ; } - -return ; }static int acpi_thermal_get_info (struct acpi_thermal *tz)
@@ -1337,7 +1334,6 @@ static int acpi_thermal_get_info(struct acpi_thermal *tz)static int acpi_thermal_add (struct acpi_device *device) {int result =0 ; -acpi_status status =AE_OK ;struct acpi_thermal *tz =NULL ;
@@ -1368,21 +1364,11 @@ static int acpi_thermal_add(struct acpi_device *device)if (result) goto unregister_thermal_zone; - status =acpi_install_notify_handler (device->handle, -ACPI_DEVICE_NOTIFY , - acpi_thermal_notify, tz); -if (ACPI_FAILURE (status)) { - result = -ENODEV ; - goto remove_fs; - } - printk(KERN_INFO PREFIX "%s [%s] (%ld C)\n",acpi_device_name (device),acpi_device_bid (device), KELVIN_TO_CELSIUS(tz->temperature)); goto end; -remove_fs: -acpi_thermal_remove_fs (device); unregister_thermal_zone:thermal_zone_device_unregister (tz->thermal_zone); free_memory:
@@ -1393,7 +1379,6 @@ end:static int acpi_thermal_remove (struct acpi_device *device,int type) { -acpi_status status =AE_OK ;struct acpi_thermal *tz =NULL ;if (!device || !acpi_driver_data (device))
@@ -1401,10 +1386,6 @@ static int acpi_thermal_remove(struct acpi_device *device, int type) tz =acpi_driver_data (device); - status =acpi_remove_notify_handler (device->handle, -ACPI_DEVICE_NOTIFY , - acpi_thermal_notify); -acpi_thermal_remove_fs (device);acpi_thermal_unregister_thermal_zone (tz);mutex_destroy (&tz->lock);
PATCH v2 2/7 ACPI: video: use .notify method instead of installing handler directly
In reply to Bjorn HelgaasThis patch adds a .notify() method. The presence of .notify() causes Linux/ACPI to manage event handlers and notify handlers on our behalf, so we don't have to install and remove them ourselves.
--- drivers/acpi/video.c | 30 +++++------------------------- 1 files changed, 5 insertions(+), 25 deletions(-)
drivers/acpi/video.c +5 -25
@@ -79,6 +79,7 @@ module_param(brightness_switch_enabled, bool, 0644);static int acpi_video_bus_add (struct acpi_device *device);static int acpi_video_bus_remove (struct acpi_device *device,int type);static int acpi_video_resume (struct acpi_device *device); +static void acpi_video_bus_notify (struct acpi_device *device,u32 event);static const struct acpi_device_id video_device_ids[] = { {ACPI_VIDEO_HID ,0 },
@@ -94,6 +95,7 @@ static struct acpi_driver acpi_video_bus = { .add = acpi_video_bus_add, .remove = acpi_video_bus_remove, .resume = acpi_video_resume, + .notify = acpi_video_bus_notify, }, };
@@ -1986,17 +1988,15 @@ static int acpi_video_bus_stop_devices(struct acpi_video_bus *video)return acpi_video_bus_DOS (video,0 ,1 ); } -static void acpi_video_bus_notify (acpi_handle handle,u32 event,void *data) +static void acpi_video_bus_notify (struct acpi_device *device,u32 event) { -struct acpi_video_bus *video = data; -struct acpi_device *device =NULL ; +struct acpi_video_bus *video =acpi_driver_data (device);struct input_dev *input;int keycode;if (!video)return ; - device = video->device; input = video->input;switch (event) {
@@ -2127,7 +2127,6 @@ static int acpi_video_resume(struct acpi_device *device)static int acpi_video_bus_add (struct acpi_device *device) { -acpi_status status;struct acpi_video_bus *video;struct input_dev *input;int error;
@@ -2169,20 +2168,10 @@ static int acpi_video_bus_add(struct acpi_device *device)acpi_video_bus_get_devices (video, device);acpi_video_bus_start_devices (video); - status =acpi_install_notify_handler (device->handle, -ACPI_DEVICE_NOTIFY , - acpi_video_bus_notify, video); -if (ACPI_FAILURE (status)) { - printk(KERN_ERR PREFIX - "Error installing notify handler\n"); - error = -ENODEV ; - goto err_stop_video; - } - video->input = input =input_allocate_device ();if (!input) { error = -ENOMEM ; - goto err_uninstall_notify; + goto err_stop_video; } snprintf(video->phys, sizeof(video->phys),
@@ -2218,9 +2207,6 @@ static int acpi_video_bus_add(struct acpi_device *device) err_free_input_dev:input_free_device (input); - err_uninstall_notify: -acpi_remove_notify_handler (device->handle,ACPI_DEVICE_NOTIFY , - acpi_video_bus_notify); err_stop_video:acpi_video_bus_stop_devices (video);acpi_video_bus_put_devices (video);
@@ -2235,7 +2221,6 @@ static int acpi_video_bus_add(struct acpi_device *device)static int acpi_video_bus_remove (struct acpi_device *device,int type) { -acpi_status status =0 ;struct acpi_video_bus *video =NULL ;
@@ -2245,11 +2230,6 @@ static int acpi_video_bus_remove(struct acpi_device *device, int type) video =acpi_driver_data (device);acpi_video_bus_stop_devices (video); - - status =acpi_remove_notify_handler (video->device->handle, -ACPI_DEVICE_NOTIFY , - acpi_video_bus_notify); -acpi_video_bus_put_devices (video);acpi_video_bus_remove_fs (device);
PATCH v2 3/7 fujitsu-laptop: use .notify method instead of installing handler directly
In reply to Bjorn HelgaasThis patch adds a .notify() method. The presence of .notify() causes Linux/ACPI to manage event handlers and notify handlers on our behalf, so we don't have to install and remove them ourselves.
Tested by Tony on Fujitsu-Siemens Lifebook S6420 [FJNB1E6] with BIOS 1.18 (01/09/2009). Tested by Jonathan on Fujitsu S7020.
--- drivers/platform/x86/fujitsu-laptop.c | 28 ++++------------------------ 1 files changed, 4 insertions(+), 24 deletions(-)
drivers/platform/x86/fujitsu-laptop.c +4 -24
@@ -203,7 +203,7 @@ struct led_classdev kblamps_led = {static u32 dbg_level =0x03 ;#endif -static void acpi_fujitsu_notify (acpi_handle handle,u32 event,void *data); +static void acpi_fujitsu_notify (struct acpi_device *device,u32 event);/* Fujitsu ACPI interface function */
@@ -658,7 +658,6 @@ static struct dmi_system_id fujitsu_dmi_table[] = {static int acpi_fujitsu_add (struct acpi_device *device) { -acpi_status status;acpi_handle handle;int result =0 ;int state =0 ;
@@ -673,20 +672,10 @@ static int acpi_fujitsu_add(struct acpi_device *device)sprintf (acpi_device_class (device),"%s" ,ACPI_FUJITSU_CLASS ); device->driver_data = fujitsu; - status =acpi_install_notify_handler (device->handle, -ACPI_DEVICE_NOTIFY , - acpi_fujitsu_notify, fujitsu); - -if (ACPI_FAILURE (status)) { -printk (KERN_ERR "Error installing notify handler\n" ); - error = -ENODEV ; - goto err_stop; - } - fujitsu->input = input =input_allocate_device ();if (!input) { error = -ENOMEM ; - goto err_uninstall_notify; + goto err_stop; } snprintf(fujitsu->phys, sizeof(fujitsu->phys),
@@ -743,9 +732,6 @@ static int acpi_fujitsu_add(struct acpi_device *device) end: err_free_input_dev:input_free_device (input); -err_uninstall_notify: -acpi_remove_notify_handler (device->handle,ACPI_DEVICE_NOTIFY , - acpi_fujitsu_notify); err_stop:return result;
@@ -753,7 +739,6 @@ err_stop:static int acpi_fujitsu_remove (struct acpi_device *device,int type) { -acpi_status status;struct fujitsu_t *fujitsu =NULL ;if (!device || !acpi_driver_data (device))
@@ -761,10 +746,6 @@ static int acpi_fujitsu_remove(struct acpi_device *device, int type) fujitsu =acpi_driver_data (device); - status =acpi_remove_notify_handler (fujitsu->acpi_handle, -ACPI_DEVICE_NOTIFY , - acpi_fujitsu_notify); -if (!device || !acpi_driver_data (device))return -EINVAL ;
@@ -775,7 +756,7 @@ static int acpi_fujitsu_remove(struct acpi_device *device, int type)/* Brightness notify */ -static void acpi_fujitsu_notify (acpi_handle handle,u32 event,void *data) +static void acpi_fujitsu_notify (struct acpi_device *device,u32 event) {struct input_dev *input;int keycode;
@@ -829,8 +810,6 @@ static void acpi_fujitsu_notify(acpi_handle handle, u32 event, void *data)input_report_key (input, keycode,0 );input_sync (input); } - -return ; }/* ACPI device for hotkey handling */
@@ -1107,6 +1086,7 @@ static struct acpi_driver acpi_fujitsu_driver = { .ops = { .add = acpi_fujitsu_add, .remove = acpi_fujitsu_remove, + .notify = acpi_fujitsu_notify, }, };
PATCH v2 4/7 fujitsu-laptop: use .notify method instead of installing hotkey handler directly
In reply to Bjorn HelgaasThis patch adds a .notify() method. The presence of .notify() causes Linux/ACPI to manage event handlers and notify handlers on our behalf, so we don't have to install and remove them ourselves.
Tested by Tony on Fujitsu-Siemens Lifebook S6420 [FJNB1E6] with BIOS 1.18 (01/09/2009). Tested by Jonathan on Fujitsu S7020.
--- drivers/platform/x86/fujitsu-laptop.c | 32 +++++--------------------------- 1 files changed, 5 insertions(+), 27 deletions(-)
drivers/platform/x86/fujitsu-laptop.c +5 -27
@@ -174,8 +174,7 @@ struct fujitsu_hotkey_t {static struct fujitsu_hotkey_t *fujitsu_hotkey; -static void acpi_fujitsu_hotkey_notify (acpi_handle handle,u32 event, -void *data); +static void acpi_fujitsu_hotkey_notify (struct acpi_device *device,u32 event);#ifdef CONFIG_LEDS_CLASS static enum led_brightness logolamp_get (struct led_classdev *cdev);
@@ -816,7 +815,6 @@ static void acpi_fujitsu_notify(struct acpi_device *device, u32 event)static int acpi_fujitsu_hotkey_add (struct acpi_device *device) { -acpi_status status;acpi_handle handle;int result =0 ;int state =0 ;
@@ -833,17 +831,6 @@ static int acpi_fujitsu_hotkey_add(struct acpi_device *device)sprintf (acpi_device_class (device),"%s" ,ACPI_FUJITSU_CLASS ); device->driver_data = fujitsu_hotkey; - status =acpi_install_notify_handler (device->handle, -ACPI_DEVICE_NOTIFY , - acpi_fujitsu_hotkey_notify, - fujitsu_hotkey); - -if (ACPI_FAILURE (status)) { -printk (KERN_ERR "Error installing notify handler\n" ); - error = -ENODEV ; - goto err_stop; - } -/* kfifo */ spin_lock_init (&fujitsu_hotkey->fifo_lock); fujitsu_hotkey->fifo =
@@ -858,7 +845,7 @@ static int acpi_fujitsu_hotkey_add(struct acpi_device *device) fujitsu_hotkey->input = input =input_allocate_device ();if (!input) { error = -ENOMEM ; - goto err_uninstall_notify; + goto err_free_fifo; } snprintf(fujitsu_hotkey->phys, sizeof(fujitsu_hotkey->phys),
@@ -954,9 +941,7 @@ static int acpi_fujitsu_hotkey_add(struct acpi_device *device) end: err_free_input_dev:input_free_device (input); -err_uninstall_notify: -acpi_remove_notify_handler (device->handle,ACPI_DEVICE_NOTIFY , - acpi_fujitsu_hotkey_notify); +err_free_fifo:kfifo_free (fujitsu_hotkey->fifo); err_stop:
@@ -965,7 +950,6 @@ err_stop:static int acpi_fujitsu_hotkey_remove (struct acpi_device *device,int type) { -acpi_status status;struct fujitsu_hotkey_t *fujitsu_hotkey =NULL ;if (!device || !acpi_driver_data (device))
@@ -973,10 +957,6 @@ static int acpi_fujitsu_hotkey_remove(struct acpi_device *device, int type) fujitsu_hotkey =acpi_driver_data (device); - status =acpi_remove_notify_handler (fujitsu_hotkey->acpi_handle, -ACPI_DEVICE_NOTIFY , - acpi_fujitsu_hotkey_notify); - fujitsu_hotkey->acpi_handle =NULL ;kfifo_free (fujitsu_hotkey->fifo);
@@ -984,8 +964,7 @@ static int acpi_fujitsu_hotkey_remove(struct acpi_device *device, int type)return 0 ; } -static void acpi_fujitsu_hotkey_notify (acpi_handle handle,u32 event, -void *data) +static void acpi_fujitsu_hotkey_notify (struct acpi_device *device,u32 event) {struct input_dev *input;int keycode, keycode_r;
@@ -1068,8 +1047,6 @@ static void acpi_fujitsu_hotkey_notify(acpi_handle handle, u32 event,input_sync (input);break ; } - -return ; }/* Initialization */
@@ -1102,6 +1079,7 @@ static struct acpi_driver acpi_fujitsu_hotkey_driver = { .ops = { .add = acpi_fujitsu_hotkey_add, .remove = acpi_fujitsu_hotkey_remove, + .notify = acpi_fujitsu_hotkey_notify, }, };
PATCH v2 5/7 panasonic-laptop: use .notify method instead of installing handler directly
In reply to Bjorn HelgaasThis patch adds a .notify() method. The presence of .notify() causes Linux/ACPI to manage event handlers and notify handlers on our behalf, so we don't have to install and remove them ourselves.
--- drivers/platform/x86/panasonic-laptop.c | 26 +++++--------------------- 1 files changed, 5 insertions(+), 21 deletions(-)
drivers/platform/x86/panasonic-laptop.c +5 -21
@@ -176,6 +176,7 @@ enum SINF_BITS { SINF_NUM_BATTERIES = 0,static int acpi_pcc_hotkey_add (struct acpi_device *device);static int acpi_pcc_hotkey_remove (struct acpi_device *device,int type);static int acpi_pcc_hotkey_resume (struct acpi_device *device); +static void acpi_pcc_hotkey_notify (struct acpi_device *device,u32 event);static const struct acpi_device_id pcc_device_ids[] = { {"MAT0012" ,0 },
@@ -194,6 +195,7 @@ static struct acpi_driver acpi_pcc_driver = { .add = acpi_pcc_hotkey_add, .remove = acpi_pcc_hotkey_remove, .resume = acpi_pcc_hotkey_resume, + .notify = acpi_pcc_hotkey_notify, }, };
@@ -527,9 +529,9 @@ static void acpi_pcc_generate_keyinput(struct pcc_acpi *pcc)return ; } -static void acpi_pcc_hotkey_notify (acpi_handle handle,u32 event,void *data) +static void acpi_pcc_hotkey_notify (struct acpi_device *device,u32 event) { -struct pcc_acpi *pcc = (struct pcc_acpi *) data; +struct pcc_acpi *pcc =acpi_driver_data (device);switch (event) {case HKEY_NOTIFY :
@@ -599,7 +601,6 @@ static int acpi_pcc_hotkey_resume(struct acpi_device *device)static int acpi_pcc_hotkey_add (struct acpi_device *device) { -acpi_status status;struct pcc_acpi *pcc;int num_sifr, result;
@@ -640,22 +641,11 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device) goto out_sinf; } -/* initialize hotkey input device */ - status =acpi_install_notify_handler (pcc->handle,ACPI_DEVICE_NOTIFY , - acpi_pcc_hotkey_notify, pcc); - -if (ACPI_FAILURE (status)) { -ACPI_DEBUG_PRINT ((ACPI_DB_ERROR , -"Error installing notify handler\n" )); - result = -ENODEV ; - goto out_input; - } -/* initialize backlight */ pcc->backlight =backlight_device_register ("panasonic" ,NULL , pcc, &pcc_backlight_ops);if (IS_ERR (pcc->backlight)) - goto out_notify; + goto out_input;if (!acpi_pcc_retrieve_biosdata (pcc, pcc->sinf)) { ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
@@ -680,9 +670,6 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device) out_backlight:backlight_device_unregister (pcc->backlight); -out_notify: -acpi_remove_notify_handler (pcc->handle,ACPI_DEVICE_NOTIFY , - acpi_pcc_hotkey_notify); out_input:input_unregister_device (pcc->input_dev);/* no need to input_free_device() since core input API refcount and
@@ -723,9 +710,6 @@ static int acpi_pcc_hotkey_remove(struct acpi_device *device, int type)backlight_device_unregister (pcc->backlight); -acpi_remove_notify_handler (pcc->handle,ACPI_DEVICE_NOTIFY , - acpi_pcc_hotkey_notify); -input_unregister_device (pcc->input_dev);/* no need to input_free_device() since core input API refcount and * free()s the device */
PATCH v2 6/7 sony-laptop: use .notify method instead of installing handler directly
In reply to Bjorn HelgaasThis patch adds a .notify() method. The presence of .notify() causes Linux/ACPI to manage event handlers and notify handlers on our behalf, so we don't have to install and remove them ourselves.
--- drivers/platform/x86/sony-laptop.c | 30 ++++-------------------------- 1 files changed, 4 insertions(+), 26 deletions(-)
drivers/platform/x86/sony-laptop.c +4 -26
@@ -914,7 +914,7 @@ static struct sony_nc_event sony_127_events[] = {/* * ACPI callbacks */ -static void sony_acpi_notify (acpi_handle handle,u32 event,void *data) +static void sony_nc_notify (struct acpi_device *device,u32 event) {u32 ev = event;
@@ -933,7 +933,7 @@ static void sony_acpi_notify(acpi_handle handle, u32 event, void *data)struct sony_nc_event *key_event;if (sony_call_snc_handle (key_handle,0x200 , &result)) { -dprintk ("sony_acpi_notify, unable to decode" +dprintk ("sony_nc_notify, unable to decode" " event 0x%.2x 0x%.2x\n" , key_handle, ev);/* restore the original event */
@@ -968,7 +968,7 @@ static void sony_acpi_notify(acpi_handle handle, u32 event, void *data) }else sony_laptop_report_input_event (ev); -dprintk ("sony_acpi_notify, event: 0x%.2x\n" , ev); +dprintk ("sony_nc_notify, event: 0x%.2x\n" , ev);acpi_bus_generate_proc_event (sony_nc_acpi_device,1 , ev); }
@@ -1276,15 +1276,6 @@ static int sony_nc_add(struct acpi_device *device) goto outwalk; } - status =acpi_install_notify_handler (sony_nc_acpi_handle, -ACPI_DEVICE_NOTIFY , - sony_acpi_notify,NULL ); -if (ACPI_FAILURE (status)) { - printk(KERN_WARNING DRV_PFX "unable to install notify handler (%u)\n", status); - result = -ENODEV ; - goto outinput; - } -if (acpi_video_backlight_support ()) { printk(KERN_INFO DRV_PFX "brightness ignored, must be " "controlled by ACPI video driver\n");
@@ -1362,13 +1353,6 @@ static int sony_nc_add(struct acpi_device *device)if (sony_backlight_device)backlight_device_unregister (sony_backlight_device); - status =acpi_remove_notify_handler (sony_nc_acpi_handle, -ACPI_DEVICE_NOTIFY , - sony_acpi_notify); -if (ACPI_FAILURE (status)) - printk(KERN_WARNING DRV_PFX "unable to remove notify handler\n"); - - outinput:sony_laptop_remove_input (); outwalk:
@@ -1378,7 +1362,6 @@ static int sony_nc_add(struct acpi_device *device)static int sony_nc_remove (struct acpi_device *device,int type) { -acpi_status status;struct sony_nc_value *item;if (sony_backlight_device)
@@ -1386,12 +1369,6 @@ static int sony_nc_remove(struct acpi_device *device, int type) sony_nc_acpi_device =NULL ; - status =acpi_remove_notify_handler (sony_nc_acpi_handle, -ACPI_DEVICE_NOTIFY , - sony_acpi_notify); -if (ACPI_FAILURE (status)) - printk(KERN_WARNING DRV_PFX "unable to remove notify handler\n"); -for (item = sony_nc_values; item->name; ++item) {device_remove_file (&sony_pf_device->dev, &item->devattr); }
@@ -1425,6 +1402,7 @@ static struct acpi_driver sony_nc_driver = { .add = sony_nc_add, .remove = sony_nc_remove, .resume = sony_nc_resume, + .notify = sony_nc_notify, }, };
PATCH v2 7/7 ACPI: WMI: use .notify method instead of installing handler directly
In reply to Bjorn HelgaasThis patch adds a .notify() method. The presence of .notify() causes Linux/ACPI to manage event handlers and notify handlers on our behalf, so we don't have to install and remove them ourselves.
--- drivers/platform/x86/wmi.c | 15 +++------------ 1 files changed, 3 insertions(+), 12 deletions(-)
drivers/platform/x86/wmi.c +3 -12
@@ -81,6 +81,7 @@ static struct wmi_block wmi_blocks;static int acpi_wmi_remove (struct acpi_device *device,int type);static int acpi_wmi_add (struct acpi_device *device); +static void acpi_wmi_notify (struct acpi_device *device,u32 event);static const struct acpi_device_id wmi_device_ids[] = { {"PNP0C14" ,0 },
@@ -96,6 +97,7 @@ static struct acpi_driver acpi_wmi_driver = { .ops = { .add = acpi_wmi_add, .remove = acpi_wmi_remove, + .notify = acpi_wmi_notify, }, };
@@ -643,12 +645,11 @@ acpi_wmi_ec_space_handler(u32 function, acpi_physical_address address, } } -static void acpi_wmi_notify (acpi_handle handle,u32 event,void *data) +static void acpi_wmi_notify (struct acpi_device *device,u32 event) {struct guid_block *block;struct wmi_block *wblock;struct list_head *p; -struct acpi_device *device = data;list_for_each (p, &wmi_blocks.list) { wblock = list_entry(p, struct wmi_block, list);
@@ -669,9 +670,6 @@ static void acpi_wmi_notify(acpi_handle handle, u32 event, void *data)static int acpi_wmi_remove (struct acpi_device *device,int type) { -acpi_remove_notify_handler (device->handle,ACPI_DEVICE_NOTIFY , - acpi_wmi_notify); -acpi_remove_address_space_handler (device->handle,ACPI_ADR_SPACE_EC , &acpi_wmi_ec_space_handler);
@@ -683,13 +681,6 @@ static int __init acpi_wmi_add(struct acpi_device *device)acpi_status status;int result =0 ; - status =acpi_install_notify_handler (device->handle,ACPI_DEVICE_NOTIFY , - acpi_wmi_notify, device); -if (ACPI_FAILURE (status)) { - printk(KERN_ERR PREFIX "Error installing notify handler\n"); -return -ENODEV ; - } - status = acpi_install_address_space_handler(device->handle, ACPI_ADR_SPACE_EC, &acpi_wmi_ec_space_handler,
applied
thanks,
Len Brown, Intel Open Source Technology Center