X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Facpi%2Fcontainer.c;h=0a1863ec91f3f78092d5c56c8bc2e59c0ed2961b;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=060251b5e49c83d0b3093630f4d810f6b05e8ff9;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/drivers/acpi/container.c b/drivers/acpi/container.c index 060251b5e..0a1863ec9 100644 --- a/drivers/acpi/container.c +++ b/drivers/acpi/container.c @@ -44,9 +44,9 @@ #define ACPI_CONTAINER_COMPONENT 0x01000000 #define _COMPONENT ACPI_CONTAINER_COMPONENT -ACPI_MODULE_NAME ("acpi_container") +ACPI_MODULE_NAME("acpi_container") -MODULE_AUTHOR("Anil S Keshavamurthy"); + MODULE_AUTHOR("Anil S Keshavamurthy"); MODULE_DESCRIPTION(ACPI_CONTAINER_DRIVER_NAME); MODULE_LICENSE("GPL"); @@ -56,167 +56,154 @@ static int acpi_container_add(struct acpi_device *device); static int acpi_container_remove(struct acpi_device *device, int type); static struct acpi_driver acpi_container_driver = { - .name = ACPI_CONTAINER_DRIVER_NAME, - .class = ACPI_CONTAINER_CLASS, - .ids = "ACPI0004,PNP0A05,PNP0A06", - .ops = { - .add = acpi_container_add, - .remove = acpi_container_remove, - }, + .name = ACPI_CONTAINER_DRIVER_NAME, + .class = ACPI_CONTAINER_CLASS, + .ids = "ACPI0004,PNP0A05,PNP0A06", + .ops = { + .add = acpi_container_add, + .remove = acpi_container_remove, + }, }; - /*******************************************************************/ -static int -is_device_present(acpi_handle handle) +static int is_device_present(acpi_handle handle) { - acpi_handle temp; - acpi_status status; - unsigned long sta; + acpi_handle temp; + acpi_status status; + unsigned long sta; - ACPI_FUNCTION_TRACE("is_device_present"); status = acpi_get_handle(handle, "_STA", &temp); if (ACPI_FAILURE(status)) - return_VALUE(1); /* _STA not found, assmue device present */ + return 1; /* _STA not found, assmue device present */ status = acpi_evaluate_integer(handle, "_STA", NULL, &sta); if (ACPI_FAILURE(status)) - return_VALUE(0); /* Firmware error */ + return 0; /* Firmware error */ - return_VALUE((sta & ACPI_STA_PRESENT) == ACPI_STA_PRESENT); + return ((sta & ACPI_STA_PRESENT) == ACPI_STA_PRESENT); } /*******************************************************************/ -static int -acpi_container_add(struct acpi_device *device) +static int acpi_container_add(struct acpi_device *device) { struct acpi_container *container; - ACPI_FUNCTION_TRACE("acpi_container_add"); if (!device) { - ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "device is NULL\n")); - return_VALUE(-EINVAL); + printk(KERN_ERR PREFIX "device is NULL\n"); + return -EINVAL; } - container = kmalloc(sizeof(struct acpi_container), GFP_KERNEL); - if(!container) - return_VALUE(-ENOMEM); - - memset(container, 0, sizeof(struct acpi_container)); + container = kzalloc(sizeof(struct acpi_container), GFP_KERNEL); + if (!container) + return -ENOMEM; + container->handle = device->handle; strcpy(acpi_device_name(device), ACPI_CONTAINER_DEVICE_NAME); strcpy(acpi_device_class(device), ACPI_CONTAINER_CLASS); acpi_driver_data(device) = container; - ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device <%s> bid <%s>\n", \ - acpi_device_name(device), acpi_device_bid(device))); + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device <%s> bid <%s>\n", + acpi_device_name(device), acpi_device_bid(device))); - - return_VALUE(0); + return 0; } -static int -acpi_container_remove(struct acpi_device *device, int type) +static int acpi_container_remove(struct acpi_device *device, int type) { - acpi_status status = AE_OK; - struct acpi_container *pc = NULL; - pc = (struct acpi_container*) acpi_driver_data(device); - - if (pc) - kfree(pc); + acpi_status status = AE_OK; + struct acpi_container *pc = NULL; + pc = acpi_driver_data(device); + kfree(pc); return status; } - -static int -container_device_add(struct acpi_device **device, acpi_handle handle) +static int container_device_add(struct acpi_device **device, acpi_handle handle) { acpi_handle phandle; struct acpi_device *pdev; int result; - ACPI_FUNCTION_TRACE("container_device_add"); if (acpi_get_parent(handle, &phandle)) { - return_VALUE(-ENODEV); + return -ENODEV; } if (acpi_bus_get_device(phandle, &pdev)) { - return_VALUE(-ENODEV); + return -ENODEV; } if (acpi_bus_add(device, pdev, handle, ACPI_BUS_TYPE_DEVICE)) { - return_VALUE(-ENODEV); + return -ENODEV; } - result = acpi_bus_scan(*device); + result = acpi_bus_start(*device); - return_VALUE(result); + return result; } -static void -container_notify_cb(acpi_handle handle, u32 type, void *context) +static void container_notify_cb(acpi_handle handle, u32 type, void *context) { - struct acpi_device *device = NULL; + struct acpi_device *device = NULL; int result; int present; acpi_status status; - ACPI_FUNCTION_TRACE("container_notify_cb"); present = is_device_present(handle); - + switch (type) { case ACPI_NOTIFY_BUS_CHECK: /* Fall through */ case ACPI_NOTIFY_DEVICE_CHECK: printk("Container driver received %s event\n", - (type == ACPI_NOTIFY_BUS_CHECK)? - "ACPI_NOTIFY_BUS_CHECK":"ACPI_NOTIFY_DEVICE_CHECK"); + (type == ACPI_NOTIFY_BUS_CHECK) ? + "ACPI_NOTIFY_BUS_CHECK" : "ACPI_NOTIFY_DEVICE_CHECK"); + status = acpi_bus_get_device(handle, &device); if (present) { - status = acpi_bus_get_device(handle, &device); if (ACPI_FAILURE(status) || !device) { result = container_device_add(&device, handle); if (!result) - kobject_hotplug(&device->kobj, KOBJ_ONLINE); - } else { + kobject_uevent(&device->kobj, + KOBJ_ONLINE); + else + printk("Failed to add container\n"); + } + } else { + if (ACPI_SUCCESS(status)) { /* device exist and this is a remove request */ - kobject_hotplug(&device->kobj, KOBJ_OFFLINE); + kobject_uevent(&device->kobj, KOBJ_OFFLINE); } } break; case ACPI_NOTIFY_EJECT_REQUEST: if (!acpi_bus_get_device(handle, &device) && device) { - kobject_hotplug(&device->kobj, KOBJ_OFFLINE); + kobject_uevent(&device->kobj, KOBJ_OFFLINE); } break; default: break; } - return_VOID; + return; } static acpi_status container_walk_namespace_cb(acpi_handle handle, - u32 lvl, - void *context, - void **rv) + u32 lvl, void *context, void **rv) { - char *hid = NULL; - struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; - struct acpi_device_info *info; - acpi_status status; - int *action = context; + char *hid = NULL; + struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; + struct acpi_device_info *info; + acpi_status status; + int *action = context; - ACPI_FUNCTION_TRACE("container_walk_namespace_cb"); status = acpi_get_object_info(handle, &buffer); if (ACPI_FAILURE(status) || !buffer.pointer) { - return_ACPI_STATUS(AE_OK); + return AE_OK; } info = buffer.pointer; @@ -228,70 +215,63 @@ container_walk_namespace_cb(acpi_handle handle, } if (strcmp(hid, "ACPI0004") && strcmp(hid, "PNP0A05") && - strcmp(hid, "PNP0A06")) { + strcmp(hid, "PNP0A06")) { goto end; } - switch(*action) { + switch (*action) { case INSTALL_NOTIFY_HANDLER: acpi_install_notify_handler(handle, - ACPI_SYSTEM_NOTIFY, - container_notify_cb, - NULL); + ACPI_SYSTEM_NOTIFY, + container_notify_cb, NULL); break; case UNINSTALL_NOTIFY_HANDLER: acpi_remove_notify_handler(handle, - ACPI_SYSTEM_NOTIFY, - container_notify_cb); + ACPI_SYSTEM_NOTIFY, + container_notify_cb); break; default: break; } -end: - acpi_os_free(buffer.pointer); + end: + kfree(buffer.pointer); - return_ACPI_STATUS(AE_OK); + return AE_OK; } - -int __init -acpi_container_init(void) +static int __init acpi_container_init(void) { - int result = 0; - int action = INSTALL_NOTIFY_HANDLER; + int result = 0; + int action = INSTALL_NOTIFY_HANDLER; result = acpi_bus_register_driver(&acpi_container_driver); if (result < 0) { - return(result); + return (result); } /* register notify handler to every container device */ acpi_walk_namespace(ACPI_TYPE_DEVICE, - ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, - container_walk_namespace_cb, - &action, NULL); + ACPI_ROOT_OBJECT, + ACPI_UINT32_MAX, + container_walk_namespace_cb, &action, NULL); - return(0); + return (0); } -void __exit -acpi_container_exit(void) +static void __exit acpi_container_exit(void) { - int action = UNINSTALL_NOTIFY_HANDLER; + int action = UNINSTALL_NOTIFY_HANDLER; - ACPI_FUNCTION_TRACE("acpi_container_exit"); acpi_walk_namespace(ACPI_TYPE_DEVICE, - ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, - container_walk_namespace_cb, - &action, NULL); + ACPI_ROOT_OBJECT, + ACPI_UINT32_MAX, + container_walk_namespace_cb, &action, NULL); acpi_bus_unregister_driver(&acpi_container_driver); - return_VOID; + return; } module_init(acpi_container_init);