Lines Matching refs:sub_driver
48 int (*init)(struct generic_sub_driver *sub_driver);
49 void (*notify)(struct generic_sub_driver *sub_driver, u32 event);
149 struct generic_sub_driver *sub_driver = data; in dispatch_acpi_notify() local
151 if (!sub_driver || !sub_driver->notify) in dispatch_acpi_notify()
153 sub_driver->notify(sub_driver, event); in dispatch_acpi_notify()
156 static int __init setup_acpi_notify(struct generic_sub_driver *sub_driver) in setup_acpi_notify() argument
160 if (!*sub_driver->handle) in setup_acpi_notify()
163 sub_driver->device = acpi_fetch_acpi_dev(*sub_driver->handle); in setup_acpi_notify()
164 if (!sub_driver->device) { in setup_acpi_notify()
165 pr_err("acpi_fetch_acpi_dev(%s) failed\n", sub_driver->name); in setup_acpi_notify()
169 sub_driver->device->driver_data = sub_driver; in setup_acpi_notify()
170 sprintf(acpi_device_class(sub_driver->device), "%s/%s", in setup_acpi_notify()
171 ACPI_LAPTOP_ACPI_EVENT_PREFIX, sub_driver->name); in setup_acpi_notify()
173 status = acpi_install_notify_handler(*sub_driver->handle, in setup_acpi_notify()
174 sub_driver->type, dispatch_acpi_notify, sub_driver); in setup_acpi_notify()
178 "handling %s events\n", sub_driver->name); in setup_acpi_notify()
181 sub_driver->name, acpi_format_exception(status)); in setup_acpi_notify()
185 sub_driver->acpi_notify_installed = 1; in setup_acpi_notify()
438 static int __init event_init(struct generic_sub_driver *sub_driver) in event_init() argument
471 static void event_notify(struct generic_sub_driver *sub_driver, u32 event) in event_notify() argument
494 static void generic_subdriver_exit(struct generic_sub_driver *sub_driver);
496 static int __init generic_subdriver_init(struct generic_sub_driver *sub_driver) in generic_subdriver_init() argument
500 if (!sub_driver || !sub_driver->driver) in generic_subdriver_init()
503 ret = platform_driver_register(sub_driver->driver); in generic_subdriver_init()
507 if (sub_driver->init) { in generic_subdriver_init()
508 ret = sub_driver->init(sub_driver); in generic_subdriver_init()
513 if (sub_driver->notify) { in generic_subdriver_init()
514 ret = setup_acpi_notify(sub_driver); in generic_subdriver_init()
526 generic_subdriver_exit(sub_driver); in generic_subdriver_init()
530 static void generic_subdriver_exit(struct generic_sub_driver *sub_driver) in generic_subdriver_exit() argument
533 if (sub_driver->acpi_notify_installed) { in generic_subdriver_exit()
534 acpi_remove_notify_handler(*sub_driver->handle, in generic_subdriver_exit()
535 sub_driver->type, dispatch_acpi_notify); in generic_subdriver_exit()
536 sub_driver->acpi_notify_installed = 0; in generic_subdriver_exit()
538 platform_driver_unregister(sub_driver->driver); in generic_subdriver_exit()