Loading drivers/acpi/ac.c +19 −8 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ MODULE_LICENSE("GPL"); static int acpi_ac_add(struct acpi_device *device); static void acpi_ac_remove(struct acpi_device *device); static void acpi_ac_notify(struct acpi_device *device, u32 event); static void acpi_ac_notify(acpi_handle handle, u32 event, void *data); static const struct acpi_device_id ac_device_ids[] = { {"ACPI0003", 0}, Loading @@ -54,11 +54,9 @@ static struct acpi_driver acpi_ac_driver = { .name = "ac", .class = ACPI_AC_CLASS, .ids = ac_device_ids, .flags = ACPI_DRIVER_ALL_NOTIFY_EVENTS, .ops = { .add = acpi_ac_add, .remove = acpi_ac_remove, .notify = acpi_ac_notify, }, .drv.pm = &acpi_ac_pm, }; Loading Loading @@ -128,8 +126,9 @@ static enum power_supply_property ac_props[] = { }; /* Driver Model */ static void acpi_ac_notify(struct acpi_device *device, u32 event) static void acpi_ac_notify(acpi_handle handle, u32 event, void *data) { struct acpi_device *device = data; struct acpi_ac *ac = acpi_driver_data(device); if (!ac) Loading Loading @@ -235,7 +234,7 @@ static int acpi_ac_add(struct acpi_device *device) result = acpi_ac_get_state(ac); if (result) goto end; goto err_release_ac; psy_cfg.drv_data = ac; Loading @@ -248,7 +247,7 @@ static int acpi_ac_add(struct acpi_device *device) &ac->charger_desc, &psy_cfg); if (IS_ERR(ac->charger)) { result = PTR_ERR(ac->charger); goto end; goto err_release_ac; } pr_info("%s [%s] (%s)\n", acpi_device_name(device), Loading @@ -256,8 +255,18 @@ static int acpi_ac_add(struct acpi_device *device) ac->battery_nb.notifier_call = acpi_ac_battery_notify; register_acpi_notifier(&ac->battery_nb); end: result = acpi_dev_install_notify_handler(device, ACPI_ALL_NOTIFY, acpi_ac_notify); if (result) goto err_unregister; return 0; err_unregister: power_supply_unregister(ac->charger); unregister_acpi_notifier(&ac->battery_nb); err_release_ac: kfree(ac); return result; Loading Loading @@ -297,6 +306,8 @@ static void acpi_ac_remove(struct acpi_device *device) ac = acpi_driver_data(device); acpi_dev_remove_notify_handler(device, ACPI_ALL_NOTIFY, acpi_ac_notify); power_supply_unregister(ac->charger); unregister_acpi_notifier(&ac->battery_nb); Loading drivers/acpi/acpi_video.c +17 −3 Original line number Diff line number Diff line Loading @@ -77,7 +77,7 @@ static DEFINE_MUTEX(video_list_lock); static LIST_HEAD(video_bus_head); static int acpi_video_bus_add(struct acpi_device *device); static void acpi_video_bus_remove(struct acpi_device *device); static void acpi_video_bus_notify(struct acpi_device *device, u32 event); static void acpi_video_bus_notify(acpi_handle handle, u32 event, void *data); /* * Indices in the _BCL method response: the first two items are special, Loading @@ -104,7 +104,6 @@ static struct acpi_driver acpi_video_bus = { .ops = { .add = acpi_video_bus_add, .remove = acpi_video_bus_remove, .notify = acpi_video_bus_notify, }, }; Loading Loading @@ -1527,8 +1526,9 @@ static int acpi_video_bus_stop_devices(struct acpi_video_bus *video) acpi_osi_is_win8() ? 0 : 1); } static void acpi_video_bus_notify(struct acpi_device *device, u32 event) static void acpi_video_bus_notify(acpi_handle handle, u32 event, void *data) { struct acpi_device *device = data; struct acpi_video_bus *video = acpi_driver_data(device); struct input_dev *input; int keycode = 0; Loading Loading @@ -2053,8 +2053,19 @@ static int acpi_video_bus_add(struct acpi_device *device) acpi_video_bus_add_notify_handler(video); error = acpi_dev_install_notify_handler(device, ACPI_DEVICE_NOTIFY, acpi_video_bus_notify); if (error) goto err_remove; return 0; err_remove: mutex_lock(&video_list_lock); list_del(&video->entry); mutex_unlock(&video_list_lock); acpi_video_bus_remove_notify_handler(video); acpi_video_bus_unregister_backlight(video); err_put_video: acpi_video_bus_put_devices(video); kfree(video->attached_array); Loading @@ -2075,6 +2086,9 @@ static void acpi_video_bus_remove(struct acpi_device *device) video = acpi_driver_data(device); acpi_dev_remove_notify_handler(device, ACPI_DEVICE_NOTIFY, acpi_video_bus_notify); mutex_lock(&video_list_lock); list_del(&video->entry); mutex_unlock(&video_list_lock); Loading drivers/acpi/battery.c +19 −5 Original line number Diff line number Diff line Loading @@ -1034,8 +1034,9 @@ static void acpi_battery_refresh(struct acpi_battery *battery) } /* Driver Interface */ static void acpi_battery_notify(struct acpi_device *device, u32 event) static void acpi_battery_notify(acpi_handle handle, u32 event, void *data) { struct acpi_device *device = data; struct acpi_battery *battery = acpi_driver_data(device); struct power_supply *old; Loading Loading @@ -1212,13 +1213,22 @@ static int acpi_battery_add(struct acpi_device *device) device_init_wakeup(&device->dev, 1); return result; result = acpi_dev_install_notify_handler(device, ACPI_ALL_NOTIFY, acpi_battery_notify); if (result) goto fail_pm; return 0; fail_pm: device_init_wakeup(&device->dev, 0); unregister_pm_notifier(&battery->pm_nb); fail: sysfs_remove_battery(battery); mutex_destroy(&battery->lock); mutex_destroy(&battery->sysfs_lock); kfree(battery); return result; } Loading @@ -1228,10 +1238,16 @@ static void acpi_battery_remove(struct acpi_device *device) if (!device || !acpi_driver_data(device)) return; device_init_wakeup(&device->dev, 0); battery = acpi_driver_data(device); acpi_dev_remove_notify_handler(device, ACPI_ALL_NOTIFY, acpi_battery_notify); device_init_wakeup(&device->dev, 0); unregister_pm_notifier(&battery->pm_nb); sysfs_remove_battery(battery); mutex_destroy(&battery->lock); mutex_destroy(&battery->sysfs_lock); kfree(battery); Loading Loading @@ -1264,11 +1280,9 @@ static struct acpi_driver acpi_battery_driver = { .name = "battery", .class = ACPI_BATTERY_CLASS, .ids = battery_device_ids, .flags = ACPI_DRIVER_ALL_NOTIFY_EVENTS, .ops = { .add = acpi_battery_add, .remove = acpi_battery_remove, .notify = acpi_battery_notify, }, .drv.pm = &acpi_battery_pm, }; Loading drivers/acpi/bus.c +27 −1 Original line number Diff line number Diff line Loading @@ -554,6 +554,30 @@ static void acpi_device_remove_notify_handler(struct acpi_device *device, acpi_os_wait_events_complete(); } int acpi_dev_install_notify_handler(struct acpi_device *adev, u32 handler_type, acpi_notify_handler handler) { acpi_status status; status = acpi_install_notify_handler(adev->handle, handler_type, handler, adev); if (ACPI_FAILURE(status)) return -ENODEV; return 0; } EXPORT_SYMBOL_GPL(acpi_dev_install_notify_handler); void acpi_dev_remove_notify_handler(struct acpi_device *adev, u32 handler_type, acpi_notify_handler handler) { acpi_remove_notify_handler(adev->handle, handler_type, handler); acpi_os_wait_events_complete(); } EXPORT_SYMBOL_GPL(acpi_dev_remove_notify_handler); /* Handle events targeting \_SB device (at present only graceful shutdown) */ #define ACPI_SB_NOTIFY_SHUTDOWN_REQUEST 0x81 Loading Loading @@ -1005,8 +1029,10 @@ static int acpi_device_probe(struct device *dev) return -ENOSYS; ret = acpi_drv->ops.add(acpi_dev); if (ret) if (ret) { acpi_dev->driver_data = NULL; return ret; } pr_debug("Driver [%s] successfully bound to device [%s]\n", acpi_drv->name, acpi_dev->pnp.bus_id); Loading drivers/acpi/hed.c +12 −3 Original line number Diff line number Diff line Loading @@ -42,22 +42,32 @@ EXPORT_SYMBOL_GPL(unregister_acpi_hed_notifier); * it is used by HEST Generic Hardware Error Source with notify type * SCI. */ static void acpi_hed_notify(struct acpi_device *device, u32 event) static void acpi_hed_notify(acpi_handle handle, u32 event, void *data) { blocking_notifier_call_chain(&acpi_hed_notify_list, 0, NULL); } static int acpi_hed_add(struct acpi_device *device) { int err; /* Only one hardware error device */ if (hed_handle) return -EINVAL; hed_handle = device->handle; return 0; err = acpi_dev_install_notify_handler(device, ACPI_DEVICE_NOTIFY, acpi_hed_notify); if (err) hed_handle = NULL; return err; } static void acpi_hed_remove(struct acpi_device *device) { acpi_dev_remove_notify_handler(device, ACPI_DEVICE_NOTIFY, acpi_hed_notify); hed_handle = NULL; } Loading @@ -68,7 +78,6 @@ static struct acpi_driver acpi_hed_driver = { .ops = { .add = acpi_hed_add, .remove = acpi_hed_remove, .notify = acpi_hed_notify, }, }; module_acpi_driver(acpi_hed_driver); Loading Loading
drivers/acpi/ac.c +19 −8 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ MODULE_LICENSE("GPL"); static int acpi_ac_add(struct acpi_device *device); static void acpi_ac_remove(struct acpi_device *device); static void acpi_ac_notify(struct acpi_device *device, u32 event); static void acpi_ac_notify(acpi_handle handle, u32 event, void *data); static const struct acpi_device_id ac_device_ids[] = { {"ACPI0003", 0}, Loading @@ -54,11 +54,9 @@ static struct acpi_driver acpi_ac_driver = { .name = "ac", .class = ACPI_AC_CLASS, .ids = ac_device_ids, .flags = ACPI_DRIVER_ALL_NOTIFY_EVENTS, .ops = { .add = acpi_ac_add, .remove = acpi_ac_remove, .notify = acpi_ac_notify, }, .drv.pm = &acpi_ac_pm, }; Loading Loading @@ -128,8 +126,9 @@ static enum power_supply_property ac_props[] = { }; /* Driver Model */ static void acpi_ac_notify(struct acpi_device *device, u32 event) static void acpi_ac_notify(acpi_handle handle, u32 event, void *data) { struct acpi_device *device = data; struct acpi_ac *ac = acpi_driver_data(device); if (!ac) Loading Loading @@ -235,7 +234,7 @@ static int acpi_ac_add(struct acpi_device *device) result = acpi_ac_get_state(ac); if (result) goto end; goto err_release_ac; psy_cfg.drv_data = ac; Loading @@ -248,7 +247,7 @@ static int acpi_ac_add(struct acpi_device *device) &ac->charger_desc, &psy_cfg); if (IS_ERR(ac->charger)) { result = PTR_ERR(ac->charger); goto end; goto err_release_ac; } pr_info("%s [%s] (%s)\n", acpi_device_name(device), Loading @@ -256,8 +255,18 @@ static int acpi_ac_add(struct acpi_device *device) ac->battery_nb.notifier_call = acpi_ac_battery_notify; register_acpi_notifier(&ac->battery_nb); end: result = acpi_dev_install_notify_handler(device, ACPI_ALL_NOTIFY, acpi_ac_notify); if (result) goto err_unregister; return 0; err_unregister: power_supply_unregister(ac->charger); unregister_acpi_notifier(&ac->battery_nb); err_release_ac: kfree(ac); return result; Loading Loading @@ -297,6 +306,8 @@ static void acpi_ac_remove(struct acpi_device *device) ac = acpi_driver_data(device); acpi_dev_remove_notify_handler(device, ACPI_ALL_NOTIFY, acpi_ac_notify); power_supply_unregister(ac->charger); unregister_acpi_notifier(&ac->battery_nb); Loading
drivers/acpi/acpi_video.c +17 −3 Original line number Diff line number Diff line Loading @@ -77,7 +77,7 @@ static DEFINE_MUTEX(video_list_lock); static LIST_HEAD(video_bus_head); static int acpi_video_bus_add(struct acpi_device *device); static void acpi_video_bus_remove(struct acpi_device *device); static void acpi_video_bus_notify(struct acpi_device *device, u32 event); static void acpi_video_bus_notify(acpi_handle handle, u32 event, void *data); /* * Indices in the _BCL method response: the first two items are special, Loading @@ -104,7 +104,6 @@ static struct acpi_driver acpi_video_bus = { .ops = { .add = acpi_video_bus_add, .remove = acpi_video_bus_remove, .notify = acpi_video_bus_notify, }, }; Loading Loading @@ -1527,8 +1526,9 @@ static int acpi_video_bus_stop_devices(struct acpi_video_bus *video) acpi_osi_is_win8() ? 0 : 1); } static void acpi_video_bus_notify(struct acpi_device *device, u32 event) static void acpi_video_bus_notify(acpi_handle handle, u32 event, void *data) { struct acpi_device *device = data; struct acpi_video_bus *video = acpi_driver_data(device); struct input_dev *input; int keycode = 0; Loading Loading @@ -2053,8 +2053,19 @@ static int acpi_video_bus_add(struct acpi_device *device) acpi_video_bus_add_notify_handler(video); error = acpi_dev_install_notify_handler(device, ACPI_DEVICE_NOTIFY, acpi_video_bus_notify); if (error) goto err_remove; return 0; err_remove: mutex_lock(&video_list_lock); list_del(&video->entry); mutex_unlock(&video_list_lock); acpi_video_bus_remove_notify_handler(video); acpi_video_bus_unregister_backlight(video); err_put_video: acpi_video_bus_put_devices(video); kfree(video->attached_array); Loading @@ -2075,6 +2086,9 @@ static void acpi_video_bus_remove(struct acpi_device *device) video = acpi_driver_data(device); acpi_dev_remove_notify_handler(device, ACPI_DEVICE_NOTIFY, acpi_video_bus_notify); mutex_lock(&video_list_lock); list_del(&video->entry); mutex_unlock(&video_list_lock); Loading
drivers/acpi/battery.c +19 −5 Original line number Diff line number Diff line Loading @@ -1034,8 +1034,9 @@ static void acpi_battery_refresh(struct acpi_battery *battery) } /* Driver Interface */ static void acpi_battery_notify(struct acpi_device *device, u32 event) static void acpi_battery_notify(acpi_handle handle, u32 event, void *data) { struct acpi_device *device = data; struct acpi_battery *battery = acpi_driver_data(device); struct power_supply *old; Loading Loading @@ -1212,13 +1213,22 @@ static int acpi_battery_add(struct acpi_device *device) device_init_wakeup(&device->dev, 1); return result; result = acpi_dev_install_notify_handler(device, ACPI_ALL_NOTIFY, acpi_battery_notify); if (result) goto fail_pm; return 0; fail_pm: device_init_wakeup(&device->dev, 0); unregister_pm_notifier(&battery->pm_nb); fail: sysfs_remove_battery(battery); mutex_destroy(&battery->lock); mutex_destroy(&battery->sysfs_lock); kfree(battery); return result; } Loading @@ -1228,10 +1238,16 @@ static void acpi_battery_remove(struct acpi_device *device) if (!device || !acpi_driver_data(device)) return; device_init_wakeup(&device->dev, 0); battery = acpi_driver_data(device); acpi_dev_remove_notify_handler(device, ACPI_ALL_NOTIFY, acpi_battery_notify); device_init_wakeup(&device->dev, 0); unregister_pm_notifier(&battery->pm_nb); sysfs_remove_battery(battery); mutex_destroy(&battery->lock); mutex_destroy(&battery->sysfs_lock); kfree(battery); Loading Loading @@ -1264,11 +1280,9 @@ static struct acpi_driver acpi_battery_driver = { .name = "battery", .class = ACPI_BATTERY_CLASS, .ids = battery_device_ids, .flags = ACPI_DRIVER_ALL_NOTIFY_EVENTS, .ops = { .add = acpi_battery_add, .remove = acpi_battery_remove, .notify = acpi_battery_notify, }, .drv.pm = &acpi_battery_pm, }; Loading
drivers/acpi/bus.c +27 −1 Original line number Diff line number Diff line Loading @@ -554,6 +554,30 @@ static void acpi_device_remove_notify_handler(struct acpi_device *device, acpi_os_wait_events_complete(); } int acpi_dev_install_notify_handler(struct acpi_device *adev, u32 handler_type, acpi_notify_handler handler) { acpi_status status; status = acpi_install_notify_handler(adev->handle, handler_type, handler, adev); if (ACPI_FAILURE(status)) return -ENODEV; return 0; } EXPORT_SYMBOL_GPL(acpi_dev_install_notify_handler); void acpi_dev_remove_notify_handler(struct acpi_device *adev, u32 handler_type, acpi_notify_handler handler) { acpi_remove_notify_handler(adev->handle, handler_type, handler); acpi_os_wait_events_complete(); } EXPORT_SYMBOL_GPL(acpi_dev_remove_notify_handler); /* Handle events targeting \_SB device (at present only graceful shutdown) */ #define ACPI_SB_NOTIFY_SHUTDOWN_REQUEST 0x81 Loading Loading @@ -1005,8 +1029,10 @@ static int acpi_device_probe(struct device *dev) return -ENOSYS; ret = acpi_drv->ops.add(acpi_dev); if (ret) if (ret) { acpi_dev->driver_data = NULL; return ret; } pr_debug("Driver [%s] successfully bound to device [%s]\n", acpi_drv->name, acpi_dev->pnp.bus_id); Loading
drivers/acpi/hed.c +12 −3 Original line number Diff line number Diff line Loading @@ -42,22 +42,32 @@ EXPORT_SYMBOL_GPL(unregister_acpi_hed_notifier); * it is used by HEST Generic Hardware Error Source with notify type * SCI. */ static void acpi_hed_notify(struct acpi_device *device, u32 event) static void acpi_hed_notify(acpi_handle handle, u32 event, void *data) { blocking_notifier_call_chain(&acpi_hed_notify_list, 0, NULL); } static int acpi_hed_add(struct acpi_device *device) { int err; /* Only one hardware error device */ if (hed_handle) return -EINVAL; hed_handle = device->handle; return 0; err = acpi_dev_install_notify_handler(device, ACPI_DEVICE_NOTIFY, acpi_hed_notify); if (err) hed_handle = NULL; return err; } static void acpi_hed_remove(struct acpi_device *device) { acpi_dev_remove_notify_handler(device, ACPI_DEVICE_NOTIFY, acpi_hed_notify); hed_handle = NULL; } Loading @@ -68,7 +78,6 @@ static struct acpi_driver acpi_hed_driver = { .ops = { .add = acpi_hed_add, .remove = acpi_hed_remove, .notify = acpi_hed_notify, }, }; module_acpi_driver(acpi_hed_driver); Loading