diff options
| -rw-r--r-- | drivers/acpi/dock.c | 55 |
1 files changed, 19 insertions, 36 deletions
diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c index 4f2aa98e2cee..ee9829b47e20 100644 --- a/drivers/acpi/dock.c +++ b/drivers/acpi/dock.c | |||
| @@ -93,40 +93,30 @@ struct dock_dependent_device { | |||
| 93 | * Dock Dependent device functions * | 93 | * Dock Dependent device functions * |
| 94 | *****************************************************************************/ | 94 | *****************************************************************************/ |
| 95 | /** | 95 | /** |
| 96 | * alloc_dock_dependent_device - allocate and init a dependent device | 96 | * add_dock_dependent_device - associate a device with the dock station |
| 97 | * @handle: the acpi_handle of the dependent device | 97 | * @ds: The dock station |
| 98 | * @handle: handle of the dependent device | ||
| 98 | * | 99 | * |
| 99 | * Allocate memory for a dependent device structure for a device referenced | 100 | * Add the dependent device to the dock's dependent device list. |
| 100 | * by the acpi handle | ||
| 101 | */ | 101 | */ |
| 102 | static struct dock_dependent_device * | 102 | static int |
| 103 | alloc_dock_dependent_device(acpi_handle handle) | 103 | add_dock_dependent_device(struct dock_station *ds, acpi_handle handle) |
| 104 | { | 104 | { |
| 105 | struct dock_dependent_device *dd; | 105 | struct dock_dependent_device *dd; |
| 106 | 106 | ||
| 107 | dd = kzalloc(sizeof(*dd), GFP_KERNEL); | 107 | dd = kzalloc(sizeof(*dd), GFP_KERNEL); |
| 108 | if (dd) { | 108 | if (!dd) |
| 109 | dd->handle = handle; | 109 | return -ENOMEM; |
| 110 | INIT_LIST_HEAD(&dd->list); | 110 | |
| 111 | INIT_LIST_HEAD(&dd->hotplug_list); | 111 | dd->handle = handle; |
| 112 | } | 112 | INIT_LIST_HEAD(&dd->list); |
| 113 | return dd; | 113 | INIT_LIST_HEAD(&dd->hotplug_list); |
| 114 | } | ||
| 115 | 114 | ||
| 116 | /** | ||
| 117 | * add_dock_dependent_device - associate a device with the dock station | ||
| 118 | * @ds: The dock station | ||
| 119 | * @dd: The dependent device | ||
| 120 | * | ||
| 121 | * Add the dependent device to the dock's dependent device list. | ||
| 122 | */ | ||
| 123 | static void | ||
| 124 | add_dock_dependent_device(struct dock_station *ds, | ||
| 125 | struct dock_dependent_device *dd) | ||
| 126 | { | ||
| 127 | spin_lock(&ds->dd_lock); | 115 | spin_lock(&ds->dd_lock); |
| 128 | list_add_tail(&dd->list, &ds->dependent_devices); | 116 | list_add_tail(&dd->list, &ds->dependent_devices); |
| 129 | spin_unlock(&ds->dd_lock); | 117 | spin_unlock(&ds->dd_lock); |
| 118 | |||
| 119 | return 0; | ||
| 130 | } | 120 | } |
| 131 | 121 | ||
| 132 | /** | 122 | /** |
| @@ -826,7 +816,6 @@ find_dock_devices(acpi_handle handle, u32 lvl, void *context, void **rv) | |||
| 826 | acpi_status status; | 816 | acpi_status status; |
| 827 | acpi_handle tmp, parent; | 817 | acpi_handle tmp, parent; |
| 828 | struct dock_station *ds = context; | 818 | struct dock_station *ds = context; |
| 829 | struct dock_dependent_device *dd; | ||
| 830 | 819 | ||
| 831 | status = acpi_bus_get_ejd(handle, &tmp); | 820 | status = acpi_bus_get_ejd(handle, &tmp); |
| 832 | if (ACPI_FAILURE(status)) { | 821 | if (ACPI_FAILURE(status)) { |
| @@ -840,11 +829,9 @@ find_dock_devices(acpi_handle handle, u32 lvl, void *context, void **rv) | |||
| 840 | goto fdd_out; | 829 | goto fdd_out; |
| 841 | } | 830 | } |
| 842 | 831 | ||
| 843 | if (tmp == ds->handle) { | 832 | if (tmp == ds->handle) |
| 844 | dd = alloc_dock_dependent_device(handle); | 833 | add_dock_dependent_device(ds, handle); |
| 845 | if (dd) | 834 | |
| 846 | add_dock_dependent_device(ds, dd); | ||
| 847 | } | ||
| 848 | fdd_out: | 835 | fdd_out: |
| 849 | return AE_OK; | 836 | return AE_OK; |
| 850 | } | 837 | } |
| @@ -959,7 +946,6 @@ static struct attribute_group dock_attribute_group = { | |||
| 959 | static int dock_add(acpi_handle handle) | 946 | static int dock_add(acpi_handle handle) |
| 960 | { | 947 | { |
| 961 | int ret; | 948 | int ret; |
| 962 | struct dock_dependent_device *dd; | ||
| 963 | struct dock_station *dock_station; | 949 | struct dock_station *dock_station; |
| 964 | struct platform_device *dock_device; | 950 | struct platform_device *dock_device; |
| 965 | 951 | ||
| @@ -1008,12 +994,9 @@ static int dock_add(acpi_handle handle) | |||
| 1008 | NULL); | 994 | NULL); |
| 1009 | 995 | ||
| 1010 | /* add the dock station as a device dependent on itself */ | 996 | /* add the dock station as a device dependent on itself */ |
| 1011 | dd = alloc_dock_dependent_device(handle); | 997 | ret = add_dock_dependent_device(dock_station, handle); |
| 1012 | if (!dd) { | 998 | if (ret) |
| 1013 | ret = -ENOMEM; | ||
| 1014 | goto err_rmgroup; | 999 | goto err_rmgroup; |
| 1015 | } | ||
| 1016 | add_dock_dependent_device(dock_station, dd); | ||
| 1017 | 1000 | ||
| 1018 | dock_station_count++; | 1001 | dock_station_count++; |
| 1019 | list_add(&dock_station->sibling, &dock_stations); | 1002 | list_add(&dock_station->sibling, &dock_stations); |
