staging:iio:adc:MXS:LRADC: fix touchscreen statemachine
[platform/adaptation/renesas_rcar/renesas_kernel.git] / drivers / acpi / scan.c
1 /*
2  * scan.c - support for transforming the ACPI namespace into individual objects
3  */
4
5 #include <linux/module.h>
6 #include <linux/init.h>
7 #include <linux/slab.h>
8 #include <linux/kernel.h>
9 #include <linux/acpi.h>
10 #include <linux/signal.h>
11 #include <linux/kthread.h>
12 #include <linux/dmi.h>
13 #include <linux/nls.h>
14
15 #include <asm/pgtable.h>
16
17 #include "internal.h"
18
19 #define _COMPONENT              ACPI_BUS_COMPONENT
20 ACPI_MODULE_NAME("scan");
21 extern struct acpi_device *acpi_root;
22
23 #define ACPI_BUS_CLASS                  "system_bus"
24 #define ACPI_BUS_HID                    "LNXSYBUS"
25 #define ACPI_BUS_DEVICE_NAME            "System Bus"
26
27 #define ACPI_IS_ROOT_DEVICE(device)    (!(device)->parent)
28
29 #define INVALID_ACPI_HANDLE     ((acpi_handle)empty_zero_page)
30
31 /*
32  * If set, devices will be hot-removed even if they cannot be put offline
33  * gracefully (from the kernel's standpoint).
34  */
35 bool acpi_force_hot_remove;
36
37 static const char *dummy_hid = "device";
38
39 static LIST_HEAD(acpi_bus_id_list);
40 static DEFINE_MUTEX(acpi_scan_lock);
41 static LIST_HEAD(acpi_scan_handlers_list);
42 DEFINE_MUTEX(acpi_device_lock);
43 LIST_HEAD(acpi_wakeup_device_list);
44
45 struct acpi_device_bus_id{
46         char bus_id[15];
47         unsigned int instance_no;
48         struct list_head node;
49 };
50
51 void acpi_scan_lock_acquire(void)
52 {
53         mutex_lock(&acpi_scan_lock);
54 }
55 EXPORT_SYMBOL_GPL(acpi_scan_lock_acquire);
56
57 void acpi_scan_lock_release(void)
58 {
59         mutex_unlock(&acpi_scan_lock);
60 }
61 EXPORT_SYMBOL_GPL(acpi_scan_lock_release);
62
63 int acpi_scan_add_handler(struct acpi_scan_handler *handler)
64 {
65         if (!handler || !handler->attach)
66                 return -EINVAL;
67
68         list_add_tail(&handler->list_node, &acpi_scan_handlers_list);
69         return 0;
70 }
71
72 int acpi_scan_add_handler_with_hotplug(struct acpi_scan_handler *handler,
73                                        const char *hotplug_profile_name)
74 {
75         int error;
76
77         error = acpi_scan_add_handler(handler);
78         if (error)
79                 return error;
80
81         acpi_sysfs_add_hotplug_profile(&handler->hotplug, hotplug_profile_name);
82         return 0;
83 }
84
85 /*
86  * Creates hid/cid(s) string needed for modalias and uevent
87  * e.g. on a device with hid:IBM0001 and cid:ACPI0001 you get:
88  * char *modalias: "acpi:IBM0001:ACPI0001"
89  * Return: 0: no _HID and no _CID
90  *         -EINVAL: output error
91  *         -ENOMEM: output is truncated
92 */
93 static int create_modalias(struct acpi_device *acpi_dev, char *modalias,
94                            int size)
95 {
96         int len;
97         int count;
98         struct acpi_hardware_id *id;
99
100         if (list_empty(&acpi_dev->pnp.ids))
101                 return 0;
102
103         len = snprintf(modalias, size, "acpi:");
104         size -= len;
105
106         list_for_each_entry(id, &acpi_dev->pnp.ids, list) {
107                 count = snprintf(&modalias[len], size, "%s:", id->id);
108                 if (count < 0)
109                         return EINVAL;
110                 if (count >= size)
111                         return -ENOMEM;
112                 len += count;
113                 size -= count;
114         }
115
116         modalias[len] = '\0';
117         return len;
118 }
119
120 /*
121  * Creates uevent modalias field for ACPI enumerated devices.
122  * Because the other buses does not support ACPI HIDs & CIDs.
123  * e.g. for a device with hid:IBM0001 and cid:ACPI0001 you get:
124  * "acpi:IBM0001:ACPI0001"
125  */
126 int acpi_device_uevent_modalias(struct device *dev, struct kobj_uevent_env *env)
127 {
128         struct acpi_device *acpi_dev;
129         int len;
130
131         acpi_dev = ACPI_COMPANION(dev);
132         if (!acpi_dev)
133                 return -ENODEV;
134
135         /* Fall back to bus specific way of modalias exporting */
136         if (list_empty(&acpi_dev->pnp.ids))
137                 return -ENODEV;
138
139         if (add_uevent_var(env, "MODALIAS="))
140                 return -ENOMEM;
141         len = create_modalias(acpi_dev, &env->buf[env->buflen - 1],
142                                 sizeof(env->buf) - env->buflen);
143         if (len <= 0)
144                 return len;
145         env->buflen += len;
146         return 0;
147 }
148 EXPORT_SYMBOL_GPL(acpi_device_uevent_modalias);
149
150 /*
151  * Creates modalias sysfs attribute for ACPI enumerated devices.
152  * Because the other buses does not support ACPI HIDs & CIDs.
153  * e.g. for a device with hid:IBM0001 and cid:ACPI0001 you get:
154  * "acpi:IBM0001:ACPI0001"
155  */
156 int acpi_device_modalias(struct device *dev, char *buf, int size)
157 {
158         struct acpi_device *acpi_dev;
159         int len;
160
161         acpi_dev = ACPI_COMPANION(dev);
162         if (!acpi_dev)
163                 return -ENODEV;
164
165         /* Fall back to bus specific way of modalias exporting */
166         if (list_empty(&acpi_dev->pnp.ids))
167                 return -ENODEV;
168
169         len = create_modalias(acpi_dev, buf, size -1);
170         if (len <= 0)
171                 return len;
172         buf[len++] = '\n';
173         return len;
174 }
175 EXPORT_SYMBOL_GPL(acpi_device_modalias);
176
177 static ssize_t
178 acpi_device_modalias_show(struct device *dev, struct device_attribute *attr, char *buf) {
179         struct acpi_device *acpi_dev = to_acpi_device(dev);
180         int len;
181
182         len = create_modalias(acpi_dev, buf, 1024);
183         if (len <= 0)
184                 return len;
185         buf[len++] = '\n';
186         return len;
187 }
188 static DEVICE_ATTR(modalias, 0444, acpi_device_modalias_show, NULL);
189
190 bool acpi_scan_is_offline(struct acpi_device *adev, bool uevent)
191 {
192         struct acpi_device_physical_node *pn;
193         bool offline = true;
194
195         mutex_lock(&adev->physical_node_lock);
196
197         list_for_each_entry(pn, &adev->physical_node_list, node)
198                 if (device_supports_offline(pn->dev) && !pn->dev->offline) {
199                         if (uevent)
200                                 kobject_uevent(&pn->dev->kobj, KOBJ_CHANGE);
201
202                         offline = false;
203                         break;
204                 }
205
206         mutex_unlock(&adev->physical_node_lock);
207         return offline;
208 }
209
210 static acpi_status acpi_bus_offline(acpi_handle handle, u32 lvl, void *data,
211                                     void **ret_p)
212 {
213         struct acpi_device *device = NULL;
214         struct acpi_device_physical_node *pn;
215         bool second_pass = (bool)data;
216         acpi_status status = AE_OK;
217
218         if (acpi_bus_get_device(handle, &device))
219                 return AE_OK;
220
221         if (device->handler && !device->handler->hotplug.enabled) {
222                 *ret_p = &device->dev;
223                 return AE_SUPPORT;
224         }
225
226         mutex_lock(&device->physical_node_lock);
227
228         list_for_each_entry(pn, &device->physical_node_list, node) {
229                 int ret;
230
231                 if (second_pass) {
232                         /* Skip devices offlined by the first pass. */
233                         if (pn->put_online)
234                                 continue;
235                 } else {
236                         pn->put_online = false;
237                 }
238                 ret = device_offline(pn->dev);
239                 if (acpi_force_hot_remove)
240                         continue;
241
242                 if (ret >= 0) {
243                         pn->put_online = !ret;
244                 } else {
245                         *ret_p = pn->dev;
246                         if (second_pass) {
247                                 status = AE_ERROR;
248                                 break;
249                         }
250                 }
251         }
252
253         mutex_unlock(&device->physical_node_lock);
254
255         return status;
256 }
257
258 static acpi_status acpi_bus_online(acpi_handle handle, u32 lvl, void *data,
259                                    void **ret_p)
260 {
261         struct acpi_device *device = NULL;
262         struct acpi_device_physical_node *pn;
263
264         if (acpi_bus_get_device(handle, &device))
265                 return AE_OK;
266
267         mutex_lock(&device->physical_node_lock);
268
269         list_for_each_entry(pn, &device->physical_node_list, node)
270                 if (pn->put_online) {
271                         device_online(pn->dev);
272                         pn->put_online = false;
273                 }
274
275         mutex_unlock(&device->physical_node_lock);
276
277         return AE_OK;
278 }
279
280 static int acpi_scan_try_to_offline(struct acpi_device *device)
281 {
282         acpi_handle handle = device->handle;
283         struct device *errdev = NULL;
284         acpi_status status;
285
286         /*
287          * Carry out two passes here and ignore errors in the first pass,
288          * because if the devices in question are memory blocks and
289          * CONFIG_MEMCG is set, one of the blocks may hold data structures
290          * that the other blocks depend on, but it is not known in advance which
291          * block holds them.
292          *
293          * If the first pass is successful, the second one isn't needed, though.
294          */
295         status = acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
296                                      NULL, acpi_bus_offline, (void *)false,
297                                      (void **)&errdev);
298         if (status == AE_SUPPORT) {
299                 dev_warn(errdev, "Offline disabled.\n");
300                 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
301                                     acpi_bus_online, NULL, NULL, NULL);
302                 return -EPERM;
303         }
304         acpi_bus_offline(handle, 0, (void *)false, (void **)&errdev);
305         if (errdev) {
306                 errdev = NULL;
307                 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
308                                     NULL, acpi_bus_offline, (void *)true,
309                                     (void **)&errdev);
310                 if (!errdev || acpi_force_hot_remove)
311                         acpi_bus_offline(handle, 0, (void *)true,
312                                          (void **)&errdev);
313
314                 if (errdev && !acpi_force_hot_remove) {
315                         dev_warn(errdev, "Offline failed.\n");
316                         acpi_bus_online(handle, 0, NULL, NULL);
317                         acpi_walk_namespace(ACPI_TYPE_ANY, handle,
318                                             ACPI_UINT32_MAX, acpi_bus_online,
319                                             NULL, NULL, NULL);
320                         return -EBUSY;
321                 }
322         }
323         return 0;
324 }
325
326 static int acpi_scan_hot_remove(struct acpi_device *device)
327 {
328         acpi_handle handle = device->handle;
329         unsigned long long sta;
330         acpi_status status;
331
332         if (device->handler->hotplug.demand_offline && !acpi_force_hot_remove) {
333                 if (!acpi_scan_is_offline(device, true))
334                         return -EBUSY;
335         } else {
336                 int error = acpi_scan_try_to_offline(device);
337                 if (error)
338                         return error;
339         }
340
341         ACPI_DEBUG_PRINT((ACPI_DB_INFO,
342                 "Hot-removing device %s...\n", dev_name(&device->dev)));
343
344         acpi_bus_trim(device);
345
346         acpi_evaluate_lck(handle, 0);
347         /*
348          * TBD: _EJD support.
349          */
350         status = acpi_evaluate_ej0(handle);
351         if (status == AE_NOT_FOUND)
352                 return -ENODEV;
353         else if (ACPI_FAILURE(status))
354                 return -EIO;
355
356         /*
357          * Verify if eject was indeed successful.  If not, log an error
358          * message.  No need to call _OST since _EJ0 call was made OK.
359          */
360         status = acpi_evaluate_integer(handle, "_STA", NULL, &sta);
361         if (ACPI_FAILURE(status)) {
362                 acpi_handle_warn(handle,
363                         "Status check after eject failed (0x%x)\n", status);
364         } else if (sta & ACPI_STA_DEVICE_ENABLED) {
365                 acpi_handle_warn(handle,
366                         "Eject incomplete - status 0x%llx\n", sta);
367         }
368
369         return 0;
370 }
371
372 static int acpi_scan_device_not_present(struct acpi_device *adev)
373 {
374         if (!acpi_device_enumerated(adev)) {
375                 dev_warn(&adev->dev, "Still not present\n");
376                 return -EALREADY;
377         }
378         acpi_bus_trim(adev);
379         return 0;
380 }
381
382 static int acpi_scan_device_check(struct acpi_device *adev)
383 {
384         int error;
385
386         acpi_bus_get_status(adev);
387         if (adev->status.present || adev->status.functional) {
388                 /*
389                  * This function is only called for device objects for which
390                  * matching scan handlers exist.  The only situation in which
391                  * the scan handler is not attached to this device object yet
392                  * is when the device has just appeared (either it wasn't
393                  * present at all before or it was removed and then added
394                  * again).
395                  */
396                 if (adev->handler) {
397                         dev_warn(&adev->dev, "Already enumerated\n");
398                         return -EALREADY;
399                 }
400                 error = acpi_bus_scan(adev->handle);
401                 if (error) {
402                         dev_warn(&adev->dev, "Namespace scan failure\n");
403                         return error;
404                 }
405                 if (!adev->handler) {
406                         dev_warn(&adev->dev, "Enumeration failure\n");
407                         error = -ENODEV;
408                 }
409         } else {
410                 error = acpi_scan_device_not_present(adev);
411         }
412         return error;
413 }
414
415 static int acpi_scan_bus_check(struct acpi_device *adev)
416 {
417         struct acpi_scan_handler *handler = adev->handler;
418         struct acpi_device *child;
419         int error;
420
421         acpi_bus_get_status(adev);
422         if (!(adev->status.present || adev->status.functional)) {
423                 acpi_scan_device_not_present(adev);
424                 return 0;
425         }
426         if (handler && handler->hotplug.scan_dependent)
427                 return handler->hotplug.scan_dependent(adev);
428
429         error = acpi_bus_scan(adev->handle);
430         if (error) {
431                 dev_warn(&adev->dev, "Namespace scan failure\n");
432                 return error;
433         }
434         list_for_each_entry(child, &adev->children, node) {
435                 error = acpi_scan_bus_check(child);
436                 if (error)
437                         return error;
438         }
439         return 0;
440 }
441
442 static void acpi_device_hotplug(void *data, u32 src)
443 {
444         u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE;
445         struct acpi_device *adev = data;
446         int error;
447
448         lock_device_hotplug();
449         mutex_lock(&acpi_scan_lock);
450
451         /*
452          * The device object's ACPI handle cannot become invalid as long as we
453          * are holding acpi_scan_lock, but it may have become invalid before
454          * that lock was acquired.
455          */
456         if (adev->handle == INVALID_ACPI_HANDLE)
457                 goto out;
458
459         switch (src) {
460         case ACPI_NOTIFY_BUS_CHECK:
461                 error = acpi_scan_bus_check(adev);
462                 break;
463         case ACPI_NOTIFY_DEVICE_CHECK:
464                 error = acpi_scan_device_check(adev);
465                 break;
466         case ACPI_NOTIFY_EJECT_REQUEST:
467         case ACPI_OST_EC_OSPM_EJECT:
468                 error = acpi_scan_hot_remove(adev);
469                 break;
470         default:
471                 error = -EINVAL;
472                 break;
473         }
474         if (!error)
475                 ost_code = ACPI_OST_SC_SUCCESS;
476
477  out:
478         acpi_evaluate_hotplug_ost(adev->handle, src, ost_code, NULL);
479         put_device(&adev->dev);
480         mutex_unlock(&acpi_scan_lock);
481         unlock_device_hotplug();
482 }
483
484 static void acpi_hotplug_notify_cb(acpi_handle handle, u32 type, void *data)
485 {
486         u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE;
487         struct acpi_device *adev;
488         acpi_status status;
489
490         if (acpi_bus_get_device(handle, &adev))
491                 goto err_out;
492
493         switch (type) {
494         case ACPI_NOTIFY_BUS_CHECK:
495                 acpi_handle_debug(handle, "ACPI_NOTIFY_BUS_CHECK event\n");
496                 break;
497         case ACPI_NOTIFY_DEVICE_CHECK:
498                 acpi_handle_debug(handle, "ACPI_NOTIFY_DEVICE_CHECK event\n");
499                 break;
500         case ACPI_NOTIFY_EJECT_REQUEST:
501                 acpi_handle_debug(handle, "ACPI_NOTIFY_EJECT_REQUEST event\n");
502                 if (!adev->handler)
503                         goto err_out;
504
505                 if (!adev->handler->hotplug.enabled) {
506                         acpi_handle_err(handle, "Eject disabled\n");
507                         ost_code = ACPI_OST_SC_EJECT_NOT_SUPPORTED;
508                         goto err_out;
509                 }
510                 acpi_evaluate_hotplug_ost(handle, ACPI_NOTIFY_EJECT_REQUEST,
511                                           ACPI_OST_SC_EJECT_IN_PROGRESS, NULL);
512                 break;
513         default:
514                 /* non-hotplug event; possibly handled by other handler */
515                 return;
516         }
517         get_device(&adev->dev);
518         status = acpi_hotplug_execute(acpi_device_hotplug, adev, type);
519         if (ACPI_SUCCESS(status))
520                 return;
521
522         put_device(&adev->dev);
523
524  err_out:
525         acpi_evaluate_hotplug_ost(handle, type, ost_code, NULL);
526 }
527
528 static ssize_t real_power_state_show(struct device *dev,
529                                      struct device_attribute *attr, char *buf)
530 {
531         struct acpi_device *adev = to_acpi_device(dev);
532         int state;
533         int ret;
534
535         ret = acpi_device_get_power(adev, &state);
536         if (ret)
537                 return ret;
538
539         return sprintf(buf, "%s\n", acpi_power_state_string(state));
540 }
541
542 static DEVICE_ATTR(real_power_state, 0444, real_power_state_show, NULL);
543
544 static ssize_t power_state_show(struct device *dev,
545                                 struct device_attribute *attr, char *buf)
546 {
547         struct acpi_device *adev = to_acpi_device(dev);
548
549         return sprintf(buf, "%s\n", acpi_power_state_string(adev->power.state));
550 }
551
552 static DEVICE_ATTR(power_state, 0444, power_state_show, NULL);
553
554 static ssize_t
555 acpi_eject_store(struct device *d, struct device_attribute *attr,
556                 const char *buf, size_t count)
557 {
558         struct acpi_device *acpi_device = to_acpi_device(d);
559         acpi_object_type not_used;
560         acpi_status status;
561
562         if (!count || buf[0] != '1')
563                 return -EINVAL;
564
565         if ((!acpi_device->handler || !acpi_device->handler->hotplug.enabled)
566             && !acpi_device->driver)
567                 return -ENODEV;
568
569         status = acpi_get_type(acpi_device->handle, &not_used);
570         if (ACPI_FAILURE(status) || !acpi_device->flags.ejectable)
571                 return -ENODEV;
572
573         acpi_evaluate_hotplug_ost(acpi_device->handle, ACPI_OST_EC_OSPM_EJECT,
574                                   ACPI_OST_SC_EJECT_IN_PROGRESS, NULL);
575         get_device(&acpi_device->dev);
576         status = acpi_hotplug_execute(acpi_device_hotplug, acpi_device,
577                                       ACPI_OST_EC_OSPM_EJECT);
578         if (ACPI_SUCCESS(status))
579                 return count;
580
581         put_device(&acpi_device->dev);
582         acpi_evaluate_hotplug_ost(acpi_device->handle, ACPI_OST_EC_OSPM_EJECT,
583                                   ACPI_OST_SC_NON_SPECIFIC_FAILURE, NULL);
584         return status == AE_NO_MEMORY ? -ENOMEM : -EAGAIN;
585 }
586
587 static DEVICE_ATTR(eject, 0200, NULL, acpi_eject_store);
588
589 static ssize_t
590 acpi_device_hid_show(struct device *dev, struct device_attribute *attr, char *buf) {
591         struct acpi_device *acpi_dev = to_acpi_device(dev);
592
593         return sprintf(buf, "%s\n", acpi_device_hid(acpi_dev));
594 }
595 static DEVICE_ATTR(hid, 0444, acpi_device_hid_show, NULL);
596
597 static ssize_t acpi_device_uid_show(struct device *dev,
598                                     struct device_attribute *attr, char *buf)
599 {
600         struct acpi_device *acpi_dev = to_acpi_device(dev);
601
602         return sprintf(buf, "%s\n", acpi_dev->pnp.unique_id);
603 }
604 static DEVICE_ATTR(uid, 0444, acpi_device_uid_show, NULL);
605
606 static ssize_t acpi_device_adr_show(struct device *dev,
607                                     struct device_attribute *attr, char *buf)
608 {
609         struct acpi_device *acpi_dev = to_acpi_device(dev);
610
611         return sprintf(buf, "0x%08x\n",
612                        (unsigned int)(acpi_dev->pnp.bus_address));
613 }
614 static DEVICE_ATTR(adr, 0444, acpi_device_adr_show, NULL);
615
616 static ssize_t
617 acpi_device_path_show(struct device *dev, struct device_attribute *attr, char *buf) {
618         struct acpi_device *acpi_dev = to_acpi_device(dev);
619         struct acpi_buffer path = {ACPI_ALLOCATE_BUFFER, NULL};
620         int result;
621
622         result = acpi_get_name(acpi_dev->handle, ACPI_FULL_PATHNAME, &path);
623         if (result)
624                 goto end;
625
626         result = sprintf(buf, "%s\n", (char*)path.pointer);
627         kfree(path.pointer);
628 end:
629         return result;
630 }
631 static DEVICE_ATTR(path, 0444, acpi_device_path_show, NULL);
632
633 /* sysfs file that shows description text from the ACPI _STR method */
634 static ssize_t description_show(struct device *dev,
635                                 struct device_attribute *attr,
636                                 char *buf) {
637         struct acpi_device *acpi_dev = to_acpi_device(dev);
638         int result;
639
640         if (acpi_dev->pnp.str_obj == NULL)
641                 return 0;
642
643         /*
644          * The _STR object contains a Unicode identifier for a device.
645          * We need to convert to utf-8 so it can be displayed.
646          */
647         result = utf16s_to_utf8s(
648                 (wchar_t *)acpi_dev->pnp.str_obj->buffer.pointer,
649                 acpi_dev->pnp.str_obj->buffer.length,
650                 UTF16_LITTLE_ENDIAN, buf,
651                 PAGE_SIZE);
652
653         buf[result++] = '\n';
654
655         return result;
656 }
657 static DEVICE_ATTR(description, 0444, description_show, NULL);
658
659 static ssize_t
660 acpi_device_sun_show(struct device *dev, struct device_attribute *attr,
661                      char *buf) {
662         struct acpi_device *acpi_dev = to_acpi_device(dev);
663
664         return sprintf(buf, "%lu\n", acpi_dev->pnp.sun);
665 }
666 static DEVICE_ATTR(sun, 0444, acpi_device_sun_show, NULL);
667
668 static ssize_t status_show(struct device *dev, struct device_attribute *attr,
669                                 char *buf) {
670         struct acpi_device *acpi_dev = to_acpi_device(dev);
671         acpi_status status;
672         unsigned long long sta;
673
674         status = acpi_evaluate_integer(acpi_dev->handle, "_STA", NULL, &sta);
675         if (ACPI_FAILURE(status))
676                 return -ENODEV;
677
678         return sprintf(buf, "%llu\n", sta);
679 }
680 static DEVICE_ATTR_RO(status);
681
682 static int acpi_device_setup_files(struct acpi_device *dev)
683 {
684         struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
685         acpi_status status;
686         unsigned long long sun;
687         int result = 0;
688
689         /*
690          * Devices gotten from FADT don't have a "path" attribute
691          */
692         if (dev->handle) {
693                 result = device_create_file(&dev->dev, &dev_attr_path);
694                 if (result)
695                         goto end;
696         }
697
698         if (!list_empty(&dev->pnp.ids)) {
699                 result = device_create_file(&dev->dev, &dev_attr_hid);
700                 if (result)
701                         goto end;
702
703                 result = device_create_file(&dev->dev, &dev_attr_modalias);
704                 if (result)
705                         goto end;
706         }
707
708         /*
709          * If device has _STR, 'description' file is created
710          */
711         if (acpi_has_method(dev->handle, "_STR")) {
712                 status = acpi_evaluate_object(dev->handle, "_STR",
713                                         NULL, &buffer);
714                 if (ACPI_FAILURE(status))
715                         buffer.pointer = NULL;
716                 dev->pnp.str_obj = buffer.pointer;
717                 result = device_create_file(&dev->dev, &dev_attr_description);
718                 if (result)
719                         goto end;
720         }
721
722         if (dev->pnp.type.bus_address)
723                 result = device_create_file(&dev->dev, &dev_attr_adr);
724         if (dev->pnp.unique_id)
725                 result = device_create_file(&dev->dev, &dev_attr_uid);
726
727         status = acpi_evaluate_integer(dev->handle, "_SUN", NULL, &sun);
728         if (ACPI_SUCCESS(status)) {
729                 dev->pnp.sun = (unsigned long)sun;
730                 result = device_create_file(&dev->dev, &dev_attr_sun);
731                 if (result)
732                         goto end;
733         } else {
734                 dev->pnp.sun = (unsigned long)-1;
735         }
736
737         if (acpi_has_method(dev->handle, "_STA")) {
738                 result = device_create_file(&dev->dev, &dev_attr_status);
739                 if (result)
740                         goto end;
741         }
742
743         /*
744          * If device has _EJ0, 'eject' file is created that is used to trigger
745          * hot-removal function from userland.
746          */
747         if (acpi_has_method(dev->handle, "_EJ0")) {
748                 result = device_create_file(&dev->dev, &dev_attr_eject);
749                 if (result)
750                         return result;
751         }
752
753         if (dev->flags.power_manageable) {
754                 result = device_create_file(&dev->dev, &dev_attr_power_state);
755                 if (result)
756                         return result;
757
758                 if (dev->power.flags.power_resources)
759                         result = device_create_file(&dev->dev,
760                                                     &dev_attr_real_power_state);
761         }
762
763 end:
764         return result;
765 }
766
767 static void acpi_device_remove_files(struct acpi_device *dev)
768 {
769         if (dev->flags.power_manageable) {
770                 device_remove_file(&dev->dev, &dev_attr_power_state);
771                 if (dev->power.flags.power_resources)
772                         device_remove_file(&dev->dev,
773                                            &dev_attr_real_power_state);
774         }
775
776         /*
777          * If device has _STR, remove 'description' file
778          */
779         if (acpi_has_method(dev->handle, "_STR")) {
780                 kfree(dev->pnp.str_obj);
781                 device_remove_file(&dev->dev, &dev_attr_description);
782         }
783         /*
784          * If device has _EJ0, remove 'eject' file.
785          */
786         if (acpi_has_method(dev->handle, "_EJ0"))
787                 device_remove_file(&dev->dev, &dev_attr_eject);
788
789         if (acpi_has_method(dev->handle, "_SUN"))
790                 device_remove_file(&dev->dev, &dev_attr_sun);
791
792         if (dev->pnp.unique_id)
793                 device_remove_file(&dev->dev, &dev_attr_uid);
794         if (dev->pnp.type.bus_address)
795                 device_remove_file(&dev->dev, &dev_attr_adr);
796         device_remove_file(&dev->dev, &dev_attr_modalias);
797         device_remove_file(&dev->dev, &dev_attr_hid);
798         if (acpi_has_method(dev->handle, "_STA"))
799                 device_remove_file(&dev->dev, &dev_attr_status);
800         if (dev->handle)
801                 device_remove_file(&dev->dev, &dev_attr_path);
802 }
803 /* --------------------------------------------------------------------------
804                         ACPI Bus operations
805    -------------------------------------------------------------------------- */
806
807 static const struct acpi_device_id *__acpi_match_device(
808         struct acpi_device *device, const struct acpi_device_id *ids)
809 {
810         const struct acpi_device_id *id;
811         struct acpi_hardware_id *hwid;
812
813         /*
814          * If the device is not present, it is unnecessary to load device
815          * driver for it.
816          */
817         if (!device->status.present)
818                 return NULL;
819
820         for (id = ids; id->id[0]; id++)
821                 list_for_each_entry(hwid, &device->pnp.ids, list)
822                         if (!strcmp((char *) id->id, hwid->id))
823                                 return id;
824
825         return NULL;
826 }
827
828 /**
829  * acpi_match_device - Match a struct device against a given list of ACPI IDs
830  * @ids: Array of struct acpi_device_id object to match against.
831  * @dev: The device structure to match.
832  *
833  * Check if @dev has a valid ACPI handle and if there is a struct acpi_device
834  * object for that handle and use that object to match against a given list of
835  * device IDs.
836  *
837  * Return a pointer to the first matching ID on success or %NULL on failure.
838  */
839 const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids,
840                                                const struct device *dev)
841 {
842         struct acpi_device *adev;
843         acpi_handle handle = ACPI_HANDLE(dev);
844
845         if (!ids || !handle || acpi_bus_get_device(handle, &adev))
846                 return NULL;
847
848         return __acpi_match_device(adev, ids);
849 }
850 EXPORT_SYMBOL_GPL(acpi_match_device);
851
852 int acpi_match_device_ids(struct acpi_device *device,
853                           const struct acpi_device_id *ids)
854 {
855         return __acpi_match_device(device, ids) ? 0 : -ENOENT;
856 }
857 EXPORT_SYMBOL(acpi_match_device_ids);
858
859 static void acpi_free_power_resources_lists(struct acpi_device *device)
860 {
861         int i;
862
863         if (device->wakeup.flags.valid)
864                 acpi_power_resources_list_free(&device->wakeup.resources);
865
866         if (!device->flags.power_manageable)
867                 return;
868
869         for (i = ACPI_STATE_D0; i <= ACPI_STATE_D3_HOT; i++) {
870                 struct acpi_device_power_state *ps = &device->power.states[i];
871                 acpi_power_resources_list_free(&ps->resources);
872         }
873 }
874
875 static void acpi_device_release(struct device *dev)
876 {
877         struct acpi_device *acpi_dev = to_acpi_device(dev);
878
879         acpi_free_pnp_ids(&acpi_dev->pnp);
880         acpi_free_power_resources_lists(acpi_dev);
881         kfree(acpi_dev);
882 }
883
884 static int acpi_bus_match(struct device *dev, struct device_driver *drv)
885 {
886         struct acpi_device *acpi_dev = to_acpi_device(dev);
887         struct acpi_driver *acpi_drv = to_acpi_driver(drv);
888
889         return acpi_dev->flags.match_driver
890                 && !acpi_match_device_ids(acpi_dev, acpi_drv->ids);
891 }
892
893 static int acpi_device_uevent(struct device *dev, struct kobj_uevent_env *env)
894 {
895         struct acpi_device *acpi_dev = to_acpi_device(dev);
896         int len;
897
898         if (list_empty(&acpi_dev->pnp.ids))
899                 return 0;
900
901         if (add_uevent_var(env, "MODALIAS="))
902                 return -ENOMEM;
903         len = create_modalias(acpi_dev, &env->buf[env->buflen - 1],
904                               sizeof(env->buf) - env->buflen);
905         if (len <= 0)
906                 return len;
907         env->buflen += len;
908         return 0;
909 }
910
911 static void acpi_device_notify(acpi_handle handle, u32 event, void *data)
912 {
913         struct acpi_device *device = data;
914
915         device->driver->ops.notify(device, event);
916 }
917
918 static acpi_status acpi_device_notify_fixed(void *data)
919 {
920         struct acpi_device *device = data;
921
922         /* Fixed hardware devices have no handles */
923         acpi_device_notify(NULL, ACPI_FIXED_HARDWARE_EVENT, device);
924         return AE_OK;
925 }
926
927 static int acpi_device_install_notify_handler(struct acpi_device *device)
928 {
929         acpi_status status;
930
931         if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON)
932                 status =
933                     acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
934                                                      acpi_device_notify_fixed,
935                                                      device);
936         else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON)
937                 status =
938                     acpi_install_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
939                                                      acpi_device_notify_fixed,
940                                                      device);
941         else
942                 status = acpi_install_notify_handler(device->handle,
943                                                      ACPI_DEVICE_NOTIFY,
944                                                      acpi_device_notify,
945                                                      device);
946
947         if (ACPI_FAILURE(status))
948                 return -EINVAL;
949         return 0;
950 }
951
952 static void acpi_device_remove_notify_handler(struct acpi_device *device)
953 {
954         if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON)
955                 acpi_remove_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
956                                                 acpi_device_notify_fixed);
957         else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON)
958                 acpi_remove_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
959                                                 acpi_device_notify_fixed);
960         else
961                 acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
962                                            acpi_device_notify);
963 }
964
965 static int acpi_device_probe(struct device *dev)
966 {
967         struct acpi_device *acpi_dev = to_acpi_device(dev);
968         struct acpi_driver *acpi_drv = to_acpi_driver(dev->driver);
969         int ret;
970
971         if (acpi_dev->handler)
972                 return -EINVAL;
973
974         if (!acpi_drv->ops.add)
975                 return -ENOSYS;
976
977         ret = acpi_drv->ops.add(acpi_dev);
978         if (ret)
979                 return ret;
980
981         acpi_dev->driver = acpi_drv;
982         ACPI_DEBUG_PRINT((ACPI_DB_INFO,
983                           "Driver [%s] successfully bound to device [%s]\n",
984                           acpi_drv->name, acpi_dev->pnp.bus_id));
985
986         if (acpi_drv->ops.notify) {
987                 ret = acpi_device_install_notify_handler(acpi_dev);
988                 if (ret) {
989                         if (acpi_drv->ops.remove)
990                                 acpi_drv->ops.remove(acpi_dev);
991
992                         acpi_dev->driver = NULL;
993                         acpi_dev->driver_data = NULL;
994                         return ret;
995                 }
996         }
997
998         ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found driver [%s] for device [%s]\n",
999                           acpi_drv->name, acpi_dev->pnp.bus_id));
1000         get_device(dev);
1001         return 0;
1002 }
1003
1004 static int acpi_device_remove(struct device * dev)
1005 {
1006         struct acpi_device *acpi_dev = to_acpi_device(dev);
1007         struct acpi_driver *acpi_drv = acpi_dev->driver;
1008
1009         if (acpi_drv) {
1010                 if (acpi_drv->ops.notify)
1011                         acpi_device_remove_notify_handler(acpi_dev);
1012                 if (acpi_drv->ops.remove)
1013                         acpi_drv->ops.remove(acpi_dev);
1014         }
1015         acpi_dev->driver = NULL;
1016         acpi_dev->driver_data = NULL;
1017
1018         put_device(dev);
1019         return 0;
1020 }
1021
1022 struct bus_type acpi_bus_type = {
1023         .name           = "acpi",
1024         .match          = acpi_bus_match,
1025         .probe          = acpi_device_probe,
1026         .remove         = acpi_device_remove,
1027         .uevent         = acpi_device_uevent,
1028 };
1029
1030 static void acpi_device_del(struct acpi_device *device)
1031 {
1032         mutex_lock(&acpi_device_lock);
1033         if (device->parent)
1034                 list_del(&device->node);
1035
1036         list_del(&device->wakeup_list);
1037         mutex_unlock(&acpi_device_lock);
1038
1039         acpi_power_add_remove_device(device, false);
1040         acpi_device_remove_files(device);
1041         if (device->remove)
1042                 device->remove(device);
1043
1044         device_del(&device->dev);
1045 }
1046
1047 static LIST_HEAD(acpi_device_del_list);
1048 static DEFINE_MUTEX(acpi_device_del_lock);
1049
1050 static void acpi_device_del_work_fn(struct work_struct *work_not_used)
1051 {
1052         for (;;) {
1053                 struct acpi_device *adev;
1054
1055                 mutex_lock(&acpi_device_del_lock);
1056
1057                 if (list_empty(&acpi_device_del_list)) {
1058                         mutex_unlock(&acpi_device_del_lock);
1059                         break;
1060                 }
1061                 adev = list_first_entry(&acpi_device_del_list,
1062                                         struct acpi_device, del_list);
1063                 list_del(&adev->del_list);
1064
1065                 mutex_unlock(&acpi_device_del_lock);
1066
1067                 acpi_device_del(adev);
1068                 /*
1069                  * Drop references to all power resources that might have been
1070                  * used by the device.
1071                  */
1072                 acpi_power_transition(adev, ACPI_STATE_D3_COLD);
1073                 put_device(&adev->dev);
1074         }
1075 }
1076
1077 /**
1078  * acpi_scan_drop_device - Drop an ACPI device object.
1079  * @handle: Handle of an ACPI namespace node, not used.
1080  * @context: Address of the ACPI device object to drop.
1081  *
1082  * This is invoked by acpi_ns_delete_node() during the removal of the ACPI
1083  * namespace node the device object pointed to by @context is attached to.
1084  *
1085  * The unregistration is carried out asynchronously to avoid running
1086  * acpi_device_del() under the ACPICA's namespace mutex and the list is used to
1087  * ensure the correct ordering (the device objects must be unregistered in the
1088  * same order in which the corresponding namespace nodes are deleted).
1089  */
1090 static void acpi_scan_drop_device(acpi_handle handle, void *context)
1091 {
1092         static DECLARE_WORK(work, acpi_device_del_work_fn);
1093         struct acpi_device *adev = context;
1094
1095         mutex_lock(&acpi_device_del_lock);
1096
1097         /*
1098          * Use the ACPI hotplug workqueue which is ordered, so this work item
1099          * won't run after any hotplug work items submitted subsequently.  That
1100          * prevents attempts to register device objects identical to those being
1101          * deleted from happening concurrently (such attempts result from
1102          * hotplug events handled via the ACPI hotplug workqueue).  It also will
1103          * run after all of the work items submitted previosuly, which helps
1104          * those work items to ensure that they are not accessing stale device
1105          * objects.
1106          */
1107         if (list_empty(&acpi_device_del_list))
1108                 acpi_queue_hotplug_work(&work);
1109
1110         list_add_tail(&adev->del_list, &acpi_device_del_list);
1111         /* Make acpi_ns_validate_handle() return NULL for this handle. */
1112         adev->handle = INVALID_ACPI_HANDLE;
1113
1114         mutex_unlock(&acpi_device_del_lock);
1115 }
1116
1117 int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device)
1118 {
1119         acpi_status status;
1120
1121         if (!device)
1122                 return -EINVAL;
1123
1124         status = acpi_get_data(handle, acpi_scan_drop_device, (void **)device);
1125         if (ACPI_FAILURE(status) || !*device) {
1126                 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No context for object [%p]\n",
1127                                   handle));
1128                 return -ENODEV;
1129         }
1130         return 0;
1131 }
1132 EXPORT_SYMBOL(acpi_bus_get_device);
1133
1134 int acpi_device_add(struct acpi_device *device,
1135                     void (*release)(struct device *))
1136 {
1137         int result;
1138         struct acpi_device_bus_id *acpi_device_bus_id, *new_bus_id;
1139         int found = 0;
1140
1141         if (device->handle) {
1142                 acpi_status status;
1143
1144                 status = acpi_attach_data(device->handle, acpi_scan_drop_device,
1145                                           device);
1146                 if (ACPI_FAILURE(status)) {
1147                         acpi_handle_err(device->handle,
1148                                         "Unable to attach device data\n");
1149                         return -ENODEV;
1150                 }
1151         }
1152
1153         /*
1154          * Linkage
1155          * -------
1156          * Link this device to its parent and siblings.
1157          */
1158         INIT_LIST_HEAD(&device->children);
1159         INIT_LIST_HEAD(&device->node);
1160         INIT_LIST_HEAD(&device->wakeup_list);
1161         INIT_LIST_HEAD(&device->physical_node_list);
1162         INIT_LIST_HEAD(&device->del_list);
1163         mutex_init(&device->physical_node_lock);
1164
1165         new_bus_id = kzalloc(sizeof(struct acpi_device_bus_id), GFP_KERNEL);
1166         if (!new_bus_id) {
1167                 pr_err(PREFIX "Memory allocation error\n");
1168                 result = -ENOMEM;
1169                 goto err_detach;
1170         }
1171
1172         mutex_lock(&acpi_device_lock);
1173         /*
1174          * Find suitable bus_id and instance number in acpi_bus_id_list
1175          * If failed, create one and link it into acpi_bus_id_list
1176          */
1177         list_for_each_entry(acpi_device_bus_id, &acpi_bus_id_list, node) {
1178                 if (!strcmp(acpi_device_bus_id->bus_id,
1179                             acpi_device_hid(device))) {
1180                         acpi_device_bus_id->instance_no++;
1181                         found = 1;
1182                         kfree(new_bus_id);
1183                         break;
1184                 }
1185         }
1186         if (!found) {
1187                 acpi_device_bus_id = new_bus_id;
1188                 strcpy(acpi_device_bus_id->bus_id, acpi_device_hid(device));
1189                 acpi_device_bus_id->instance_no = 0;
1190                 list_add_tail(&acpi_device_bus_id->node, &acpi_bus_id_list);
1191         }
1192         dev_set_name(&device->dev, "%s:%02x", acpi_device_bus_id->bus_id, acpi_device_bus_id->instance_no);
1193
1194         if (device->parent)
1195                 list_add_tail(&device->node, &device->parent->children);
1196
1197         if (device->wakeup.flags.valid)
1198                 list_add_tail(&device->wakeup_list, &acpi_wakeup_device_list);
1199         mutex_unlock(&acpi_device_lock);
1200
1201         if (device->parent)
1202                 device->dev.parent = &device->parent->dev;
1203         device->dev.bus = &acpi_bus_type;
1204         device->dev.release = release;
1205         result = device_add(&device->dev);
1206         if (result) {
1207                 dev_err(&device->dev, "Error registering device\n");
1208                 goto err;
1209         }
1210
1211         result = acpi_device_setup_files(device);
1212         if (result)
1213                 printk(KERN_ERR PREFIX "Error creating sysfs interface for device %s\n",
1214                        dev_name(&device->dev));
1215
1216         return 0;
1217
1218  err:
1219         mutex_lock(&acpi_device_lock);
1220         if (device->parent)
1221                 list_del(&device->node);
1222         list_del(&device->wakeup_list);
1223         mutex_unlock(&acpi_device_lock);
1224
1225  err_detach:
1226         acpi_detach_data(device->handle, acpi_scan_drop_device);
1227         return result;
1228 }
1229
1230 /* --------------------------------------------------------------------------
1231                                  Driver Management
1232    -------------------------------------------------------------------------- */
1233 /**
1234  * acpi_bus_register_driver - register a driver with the ACPI bus
1235  * @driver: driver being registered
1236  *
1237  * Registers a driver with the ACPI bus.  Searches the namespace for all
1238  * devices that match the driver's criteria and binds.  Returns zero for
1239  * success or a negative error status for failure.
1240  */
1241 int acpi_bus_register_driver(struct acpi_driver *driver)
1242 {
1243         int ret;
1244
1245         if (acpi_disabled)
1246                 return -ENODEV;
1247         driver->drv.name = driver->name;
1248         driver->drv.bus = &acpi_bus_type;
1249         driver->drv.owner = driver->owner;
1250
1251         ret = driver_register(&driver->drv);
1252         return ret;
1253 }
1254
1255 EXPORT_SYMBOL(acpi_bus_register_driver);
1256
1257 /**
1258  * acpi_bus_unregister_driver - unregisters a driver with the ACPI bus
1259  * @driver: driver to unregister
1260  *
1261  * Unregisters a driver with the ACPI bus.  Searches the namespace for all
1262  * devices that match the driver's criteria and unbinds.
1263  */
1264 void acpi_bus_unregister_driver(struct acpi_driver *driver)
1265 {
1266         driver_unregister(&driver->drv);
1267 }
1268
1269 EXPORT_SYMBOL(acpi_bus_unregister_driver);
1270
1271 /* --------------------------------------------------------------------------
1272                                  Device Enumeration
1273    -------------------------------------------------------------------------- */
1274 static struct acpi_device *acpi_bus_get_parent(acpi_handle handle)
1275 {
1276         struct acpi_device *device = NULL;
1277         acpi_status status;
1278
1279         /*
1280          * Fixed hardware devices do not appear in the namespace and do not
1281          * have handles, but we fabricate acpi_devices for them, so we have
1282          * to deal with them specially.
1283          */
1284         if (!handle)
1285                 return acpi_root;
1286
1287         do {
1288                 status = acpi_get_parent(handle, &handle);
1289                 if (ACPI_FAILURE(status))
1290                         return status == AE_NULL_ENTRY ? NULL : acpi_root;
1291         } while (acpi_bus_get_device(handle, &device));
1292         return device;
1293 }
1294
1295 acpi_status
1296 acpi_bus_get_ejd(acpi_handle handle, acpi_handle *ejd)
1297 {
1298         acpi_status status;
1299         acpi_handle tmp;
1300         struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
1301         union acpi_object *obj;
1302
1303         status = acpi_get_handle(handle, "_EJD", &tmp);
1304         if (ACPI_FAILURE(status))
1305                 return status;
1306
1307         status = acpi_evaluate_object(handle, "_EJD", NULL, &buffer);
1308         if (ACPI_SUCCESS(status)) {
1309                 obj = buffer.pointer;
1310                 status = acpi_get_handle(ACPI_ROOT_OBJECT, obj->string.pointer,
1311                                          ejd);
1312                 kfree(buffer.pointer);
1313         }
1314         return status;
1315 }
1316 EXPORT_SYMBOL_GPL(acpi_bus_get_ejd);
1317
1318 static int acpi_bus_extract_wakeup_device_power_package(acpi_handle handle,
1319                                         struct acpi_device_wakeup *wakeup)
1320 {
1321         struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
1322         union acpi_object *package = NULL;
1323         union acpi_object *element = NULL;
1324         acpi_status status;
1325         int err = -ENODATA;
1326
1327         if (!wakeup)
1328                 return -EINVAL;
1329
1330         INIT_LIST_HEAD(&wakeup->resources);
1331
1332         /* _PRW */
1333         status = acpi_evaluate_object(handle, "_PRW", NULL, &buffer);
1334         if (ACPI_FAILURE(status)) {
1335                 ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PRW"));
1336                 return err;
1337         }
1338
1339         package = (union acpi_object *)buffer.pointer;
1340
1341         if (!package || package->package.count < 2)
1342                 goto out;
1343
1344         element = &(package->package.elements[0]);
1345         if (!element)
1346                 goto out;
1347
1348         if (element->type == ACPI_TYPE_PACKAGE) {
1349                 if ((element->package.count < 2) ||
1350                     (element->package.elements[0].type !=
1351                      ACPI_TYPE_LOCAL_REFERENCE)
1352                     || (element->package.elements[1].type != ACPI_TYPE_INTEGER))
1353                         goto out;
1354
1355                 wakeup->gpe_device =
1356                     element->package.elements[0].reference.handle;
1357                 wakeup->gpe_number =
1358                     (u32) element->package.elements[1].integer.value;
1359         } else if (element->type == ACPI_TYPE_INTEGER) {
1360                 wakeup->gpe_device = NULL;
1361                 wakeup->gpe_number = element->integer.value;
1362         } else {
1363                 goto out;
1364         }
1365
1366         element = &(package->package.elements[1]);
1367         if (element->type != ACPI_TYPE_INTEGER)
1368                 goto out;
1369
1370         wakeup->sleep_state = element->integer.value;
1371
1372         err = acpi_extract_power_resources(package, 2, &wakeup->resources);
1373         if (err)
1374                 goto out;
1375
1376         if (!list_empty(&wakeup->resources)) {
1377                 int sleep_state;
1378
1379                 err = acpi_power_wakeup_list_init(&wakeup->resources,
1380                                                   &sleep_state);
1381                 if (err) {
1382                         acpi_handle_warn(handle, "Retrieving current states "
1383                                          "of wakeup power resources failed\n");
1384                         acpi_power_resources_list_free(&wakeup->resources);
1385                         goto out;
1386                 }
1387                 if (sleep_state < wakeup->sleep_state) {
1388                         acpi_handle_warn(handle, "Overriding _PRW sleep state "
1389                                          "(S%d) by S%d from power resources\n",
1390                                          (int)wakeup->sleep_state, sleep_state);
1391                         wakeup->sleep_state = sleep_state;
1392                 }
1393         }
1394         acpi_setup_gpe_for_wake(handle, wakeup->gpe_device, wakeup->gpe_number);
1395
1396  out:
1397         kfree(buffer.pointer);
1398         return err;
1399 }
1400
1401 static void acpi_bus_set_run_wake_flags(struct acpi_device *device)
1402 {
1403         struct acpi_device_id button_device_ids[] = {
1404                 {"PNP0C0C", 0},
1405                 {"PNP0C0D", 0},
1406                 {"PNP0C0E", 0},
1407                 {"", 0},
1408         };
1409         acpi_status status;
1410         acpi_event_status event_status;
1411
1412         device->wakeup.flags.notifier_present = 0;
1413
1414         /* Power button, Lid switch always enable wakeup */
1415         if (!acpi_match_device_ids(device, button_device_ids)) {
1416                 device->wakeup.flags.run_wake = 1;
1417                 if (!acpi_match_device_ids(device, &button_device_ids[1])) {
1418                         /* Do not use Lid/sleep button for S5 wakeup */
1419                         if (device->wakeup.sleep_state == ACPI_STATE_S5)
1420                                 device->wakeup.sleep_state = ACPI_STATE_S4;
1421                 }
1422                 device_set_wakeup_capable(&device->dev, true);
1423                 return;
1424         }
1425
1426         status = acpi_get_gpe_status(device->wakeup.gpe_device,
1427                                         device->wakeup.gpe_number,
1428                                                 &event_status);
1429         if (status == AE_OK)
1430                 device->wakeup.flags.run_wake =
1431                                 !!(event_status & ACPI_EVENT_FLAG_HANDLE);
1432 }
1433
1434 static void acpi_bus_get_wakeup_device_flags(struct acpi_device *device)
1435 {
1436         int err;
1437
1438         /* Presence of _PRW indicates wake capable */
1439         if (!acpi_has_method(device->handle, "_PRW"))
1440                 return;
1441
1442         err = acpi_bus_extract_wakeup_device_power_package(device->handle,
1443                                                            &device->wakeup);
1444         if (err) {
1445                 dev_err(&device->dev, "_PRW evaluation error: %d\n", err);
1446                 return;
1447         }
1448
1449         device->wakeup.flags.valid = 1;
1450         device->wakeup.prepare_count = 0;
1451         acpi_bus_set_run_wake_flags(device);
1452         /* Call _PSW/_DSW object to disable its ability to wake the sleeping
1453          * system for the ACPI device with the _PRW object.
1454          * The _PSW object is depreciated in ACPI 3.0 and is replaced by _DSW.
1455          * So it is necessary to call _DSW object first. Only when it is not
1456          * present will the _PSW object used.
1457          */
1458         err = acpi_device_sleep_wake(device, 0, 0, 0);
1459         if (err)
1460                 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
1461                                 "error in _DSW or _PSW evaluation\n"));
1462 }
1463
1464 static void acpi_bus_init_power_state(struct acpi_device *device, int state)
1465 {
1466         struct acpi_device_power_state *ps = &device->power.states[state];
1467         char pathname[5] = { '_', 'P', 'R', '0' + state, '\0' };
1468         struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
1469         acpi_status status;
1470
1471         INIT_LIST_HEAD(&ps->resources);
1472
1473         /* Evaluate "_PRx" to get referenced power resources */
1474         status = acpi_evaluate_object(device->handle, pathname, NULL, &buffer);
1475         if (ACPI_SUCCESS(status)) {
1476                 union acpi_object *package = buffer.pointer;
1477
1478                 if (buffer.length && package
1479                     && package->type == ACPI_TYPE_PACKAGE
1480                     && package->package.count) {
1481                         int err = acpi_extract_power_resources(package, 0,
1482                                                                &ps->resources);
1483                         if (!err)
1484                                 device->power.flags.power_resources = 1;
1485                 }
1486                 ACPI_FREE(buffer.pointer);
1487         }
1488
1489         /* Evaluate "_PSx" to see if we can do explicit sets */
1490         pathname[2] = 'S';
1491         if (acpi_has_method(device->handle, pathname))
1492                 ps->flags.explicit_set = 1;
1493
1494         /*
1495          * State is valid if there are means to put the device into it.
1496          * D3hot is only valid if _PR3 present.
1497          */
1498         if (!list_empty(&ps->resources)
1499             || (ps->flags.explicit_set && state < ACPI_STATE_D3_HOT)) {
1500                 ps->flags.valid = 1;
1501                 ps->flags.os_accessible = 1;
1502         }
1503
1504         ps->power = -1;         /* Unknown - driver assigned */
1505         ps->latency = -1;       /* Unknown - driver assigned */
1506 }
1507
1508 static void acpi_bus_get_power_flags(struct acpi_device *device)
1509 {
1510         u32 i;
1511
1512         /* Presence of _PS0|_PR0 indicates 'power manageable' */
1513         if (!acpi_has_method(device->handle, "_PS0") &&
1514             !acpi_has_method(device->handle, "_PR0"))
1515                 return;
1516
1517         device->flags.power_manageable = 1;
1518
1519         /*
1520          * Power Management Flags
1521          */
1522         if (acpi_has_method(device->handle, "_PSC"))
1523                 device->power.flags.explicit_get = 1;
1524         if (acpi_has_method(device->handle, "_IRC"))
1525                 device->power.flags.inrush_current = 1;
1526
1527         /*
1528          * Enumerate supported power management states
1529          */
1530         for (i = ACPI_STATE_D0; i <= ACPI_STATE_D3_HOT; i++)
1531                 acpi_bus_init_power_state(device, i);
1532
1533         INIT_LIST_HEAD(&device->power.states[ACPI_STATE_D3_COLD].resources);
1534
1535         /* Set defaults for D0 and D3 states (always valid) */
1536         device->power.states[ACPI_STATE_D0].flags.valid = 1;
1537         device->power.states[ACPI_STATE_D0].power = 100;
1538         device->power.states[ACPI_STATE_D3_COLD].flags.valid = 1;
1539         device->power.states[ACPI_STATE_D3_COLD].power = 0;
1540
1541         /* Set D3cold's explicit_set flag if _PS3 exists. */
1542         if (device->power.states[ACPI_STATE_D3_HOT].flags.explicit_set)
1543                 device->power.states[ACPI_STATE_D3_COLD].flags.explicit_set = 1;
1544
1545         /* Presence of _PS3 or _PRx means we can put the device into D3 cold */
1546         if (device->power.states[ACPI_STATE_D3_HOT].flags.explicit_set ||
1547                         device->power.flags.power_resources)
1548                 device->power.states[ACPI_STATE_D3_COLD].flags.os_accessible = 1;
1549
1550         if (acpi_bus_init_power(device)) {
1551                 acpi_free_power_resources_lists(device);
1552                 device->flags.power_manageable = 0;
1553         }
1554 }
1555
1556 static void acpi_bus_get_flags(struct acpi_device *device)
1557 {
1558         /* Presence of _STA indicates 'dynamic_status' */
1559         if (acpi_has_method(device->handle, "_STA"))
1560                 device->flags.dynamic_status = 1;
1561
1562         /* Presence of _RMV indicates 'removable' */
1563         if (acpi_has_method(device->handle, "_RMV"))
1564                 device->flags.removable = 1;
1565
1566         /* Presence of _EJD|_EJ0 indicates 'ejectable' */
1567         if (acpi_has_method(device->handle, "_EJD") ||
1568             acpi_has_method(device->handle, "_EJ0"))
1569                 device->flags.ejectable = 1;
1570 }
1571
1572 static void acpi_device_get_busid(struct acpi_device *device)
1573 {
1574         char bus_id[5] = { '?', 0 };
1575         struct acpi_buffer buffer = { sizeof(bus_id), bus_id };
1576         int i = 0;
1577
1578         /*
1579          * Bus ID
1580          * ------
1581          * The device's Bus ID is simply the object name.
1582          * TBD: Shouldn't this value be unique (within the ACPI namespace)?
1583          */
1584         if (ACPI_IS_ROOT_DEVICE(device)) {
1585                 strcpy(device->pnp.bus_id, "ACPI");
1586                 return;
1587         }
1588
1589         switch (device->device_type) {
1590         case ACPI_BUS_TYPE_POWER_BUTTON:
1591                 strcpy(device->pnp.bus_id, "PWRF");
1592                 break;
1593         case ACPI_BUS_TYPE_SLEEP_BUTTON:
1594                 strcpy(device->pnp.bus_id, "SLPF");
1595                 break;
1596         default:
1597                 acpi_get_name(device->handle, ACPI_SINGLE_NAME, &buffer);
1598                 /* Clean up trailing underscores (if any) */
1599                 for (i = 3; i > 1; i--) {
1600                         if (bus_id[i] == '_')
1601                                 bus_id[i] = '\0';
1602                         else
1603                                 break;
1604                 }
1605                 strcpy(device->pnp.bus_id, bus_id);
1606                 break;
1607         }
1608 }
1609
1610 /*
1611  * acpi_ata_match - see if an acpi object is an ATA device
1612  *
1613  * If an acpi object has one of the ACPI ATA methods defined,
1614  * then we can safely call it an ATA device.
1615  */
1616 bool acpi_ata_match(acpi_handle handle)
1617 {
1618         return acpi_has_method(handle, "_GTF") ||
1619                acpi_has_method(handle, "_GTM") ||
1620                acpi_has_method(handle, "_STM") ||
1621                acpi_has_method(handle, "_SDD");
1622 }
1623
1624 /*
1625  * acpi_bay_match - see if an acpi object is an ejectable driver bay
1626  *
1627  * If an acpi object is ejectable and has one of the ACPI ATA methods defined,
1628  * then we can safely call it an ejectable drive bay
1629  */
1630 bool acpi_bay_match(acpi_handle handle)
1631 {
1632         acpi_handle phandle;
1633
1634         if (!acpi_has_method(handle, "_EJ0"))
1635                 return false;
1636         if (acpi_ata_match(handle))
1637                 return true;
1638         if (ACPI_FAILURE(acpi_get_parent(handle, &phandle)))
1639                 return false;
1640
1641         return acpi_ata_match(phandle);
1642 }
1643
1644 /*
1645  * acpi_dock_match - see if an acpi object has a _DCK method
1646  */
1647 bool acpi_dock_match(acpi_handle handle)
1648 {
1649         return acpi_has_method(handle, "_DCK");
1650 }
1651
1652 const char *acpi_device_hid(struct acpi_device *device)
1653 {
1654         struct acpi_hardware_id *hid;
1655
1656         if (list_empty(&device->pnp.ids))
1657                 return dummy_hid;
1658
1659         hid = list_first_entry(&device->pnp.ids, struct acpi_hardware_id, list);
1660         return hid->id;
1661 }
1662 EXPORT_SYMBOL(acpi_device_hid);
1663
1664 static void acpi_add_id(struct acpi_device_pnp *pnp, const char *dev_id)
1665 {
1666         struct acpi_hardware_id *id;
1667
1668         id = kmalloc(sizeof(*id), GFP_KERNEL);
1669         if (!id)
1670                 return;
1671
1672         id->id = kstrdup(dev_id, GFP_KERNEL);
1673         if (!id->id) {
1674                 kfree(id);
1675                 return;
1676         }
1677
1678         list_add_tail(&id->list, &pnp->ids);
1679         pnp->type.hardware_id = 1;
1680 }
1681
1682 /*
1683  * Old IBM workstations have a DSDT bug wherein the SMBus object
1684  * lacks the SMBUS01 HID and the methods do not have the necessary "_"
1685  * prefix.  Work around this.
1686  */
1687 static bool acpi_ibm_smbus_match(acpi_handle handle)
1688 {
1689         char node_name[ACPI_PATH_SEGMENT_LENGTH];
1690         struct acpi_buffer path = { sizeof(node_name), node_name };
1691
1692         if (!dmi_name_in_vendors("IBM"))
1693                 return false;
1694
1695         /* Look for SMBS object */
1696         if (ACPI_FAILURE(acpi_get_name(handle, ACPI_SINGLE_NAME, &path)) ||
1697             strcmp("SMBS", path.pointer))
1698                 return false;
1699
1700         /* Does it have the necessary (but misnamed) methods? */
1701         if (acpi_has_method(handle, "SBI") &&
1702             acpi_has_method(handle, "SBR") &&
1703             acpi_has_method(handle, "SBW"))
1704                 return true;
1705
1706         return false;
1707 }
1708
1709 static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp,
1710                                 int device_type)
1711 {
1712         acpi_status status;
1713         struct acpi_device_info *info;
1714         struct acpi_pnp_device_id_list *cid_list;
1715         int i;
1716
1717         switch (device_type) {
1718         case ACPI_BUS_TYPE_DEVICE:
1719                 if (handle == ACPI_ROOT_OBJECT) {
1720                         acpi_add_id(pnp, ACPI_SYSTEM_HID);
1721                         break;
1722                 }
1723
1724                 status = acpi_get_object_info(handle, &info);
1725                 if (ACPI_FAILURE(status)) {
1726                         pr_err(PREFIX "%s: Error reading device info\n",
1727                                         __func__);
1728                         return;
1729                 }
1730
1731                 if (info->valid & ACPI_VALID_HID)
1732                         acpi_add_id(pnp, info->hardware_id.string);
1733                 if (info->valid & ACPI_VALID_CID) {
1734                         cid_list = &info->compatible_id_list;
1735                         for (i = 0; i < cid_list->count; i++)
1736                                 acpi_add_id(pnp, cid_list->ids[i].string);
1737                 }
1738                 if (info->valid & ACPI_VALID_ADR) {
1739                         pnp->bus_address = info->address;
1740                         pnp->type.bus_address = 1;
1741                 }
1742                 if (info->valid & ACPI_VALID_UID)
1743                         pnp->unique_id = kstrdup(info->unique_id.string,
1744                                                         GFP_KERNEL);
1745
1746                 kfree(info);
1747
1748                 /*
1749                  * Some devices don't reliably have _HIDs & _CIDs, so add
1750                  * synthetic HIDs to make sure drivers can find them.
1751                  */
1752                 if (acpi_is_video_device(handle))
1753                         acpi_add_id(pnp, ACPI_VIDEO_HID);
1754                 else if (acpi_bay_match(handle))
1755                         acpi_add_id(pnp, ACPI_BAY_HID);
1756                 else if (acpi_dock_match(handle))
1757                         acpi_add_id(pnp, ACPI_DOCK_HID);
1758                 else if (acpi_ibm_smbus_match(handle))
1759                         acpi_add_id(pnp, ACPI_SMBUS_IBM_HID);
1760                 else if (list_empty(&pnp->ids) && handle == ACPI_ROOT_OBJECT) {
1761                         acpi_add_id(pnp, ACPI_BUS_HID); /* \_SB, LNXSYBUS */
1762                         strcpy(pnp->device_name, ACPI_BUS_DEVICE_NAME);
1763                         strcpy(pnp->device_class, ACPI_BUS_CLASS);
1764                 }
1765
1766                 break;
1767         case ACPI_BUS_TYPE_POWER:
1768                 acpi_add_id(pnp, ACPI_POWER_HID);
1769                 break;
1770         case ACPI_BUS_TYPE_PROCESSOR:
1771                 acpi_add_id(pnp, ACPI_PROCESSOR_OBJECT_HID);
1772                 break;
1773         case ACPI_BUS_TYPE_THERMAL:
1774                 acpi_add_id(pnp, ACPI_THERMAL_HID);
1775                 break;
1776         case ACPI_BUS_TYPE_POWER_BUTTON:
1777                 acpi_add_id(pnp, ACPI_BUTTON_HID_POWERF);
1778                 break;
1779         case ACPI_BUS_TYPE_SLEEP_BUTTON:
1780                 acpi_add_id(pnp, ACPI_BUTTON_HID_SLEEPF);
1781                 break;
1782         }
1783 }
1784
1785 void acpi_free_pnp_ids(struct acpi_device_pnp *pnp)
1786 {
1787         struct acpi_hardware_id *id, *tmp;
1788
1789         list_for_each_entry_safe(id, tmp, &pnp->ids, list) {
1790                 kfree(id->id);
1791                 kfree(id);
1792         }
1793         kfree(pnp->unique_id);
1794 }
1795
1796 void acpi_init_device_object(struct acpi_device *device, acpi_handle handle,
1797                              int type, unsigned long long sta)
1798 {
1799         INIT_LIST_HEAD(&device->pnp.ids);
1800         device->device_type = type;
1801         device->handle = handle;
1802         device->parent = acpi_bus_get_parent(handle);
1803         acpi_set_device_status(device, sta);
1804         acpi_device_get_busid(device);
1805         acpi_set_pnp_ids(handle, &device->pnp, type);
1806         acpi_bus_get_flags(device);
1807         device->flags.match_driver = false;
1808         device->flags.initialized = true;
1809         device->flags.visited = false;
1810         device_initialize(&device->dev);
1811         dev_set_uevent_suppress(&device->dev, true);
1812 }
1813
1814 void acpi_device_add_finalize(struct acpi_device *device)
1815 {
1816         dev_set_uevent_suppress(&device->dev, false);
1817         kobject_uevent(&device->dev.kobj, KOBJ_ADD);
1818 }
1819
1820 static int acpi_add_single_object(struct acpi_device **child,
1821                                   acpi_handle handle, int type,
1822                                   unsigned long long sta)
1823 {
1824         int result;
1825         struct acpi_device *device;
1826         struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
1827
1828         device = kzalloc(sizeof(struct acpi_device), GFP_KERNEL);
1829         if (!device) {
1830                 printk(KERN_ERR PREFIX "Memory allocation error\n");
1831                 return -ENOMEM;
1832         }
1833
1834         acpi_init_device_object(device, handle, type, sta);
1835         acpi_bus_get_power_flags(device);
1836         acpi_bus_get_wakeup_device_flags(device);
1837
1838         result = acpi_device_add(device, acpi_device_release);
1839         if (result) {
1840                 acpi_device_release(&device->dev);
1841                 return result;
1842         }
1843
1844         acpi_power_add_remove_device(device, true);
1845         acpi_device_add_finalize(device);
1846         acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);
1847         ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Added %s [%s] parent %s\n",
1848                 dev_name(&device->dev), (char *) buffer.pointer,
1849                 device->parent ? dev_name(&device->parent->dev) : "(null)"));
1850         kfree(buffer.pointer);
1851         *child = device;
1852         return 0;
1853 }
1854
1855 static int acpi_bus_type_and_status(acpi_handle handle, int *type,
1856                                     unsigned long long *sta)
1857 {
1858         acpi_status status;
1859         acpi_object_type acpi_type;
1860
1861         status = acpi_get_type(handle, &acpi_type);
1862         if (ACPI_FAILURE(status))
1863                 return -ENODEV;
1864
1865         switch (acpi_type) {
1866         case ACPI_TYPE_ANY:             /* for ACPI_ROOT_OBJECT */
1867         case ACPI_TYPE_DEVICE:
1868                 *type = ACPI_BUS_TYPE_DEVICE;
1869                 status = acpi_bus_get_status_handle(handle, sta);
1870                 if (ACPI_FAILURE(status))
1871                         return -ENODEV;
1872                 break;
1873         case ACPI_TYPE_PROCESSOR:
1874                 *type = ACPI_BUS_TYPE_PROCESSOR;
1875                 status = acpi_bus_get_status_handle(handle, sta);
1876                 if (ACPI_FAILURE(status))
1877                         return -ENODEV;
1878                 break;
1879         case ACPI_TYPE_THERMAL:
1880                 *type = ACPI_BUS_TYPE_THERMAL;
1881                 *sta = ACPI_STA_DEFAULT;
1882                 break;
1883         case ACPI_TYPE_POWER:
1884                 *type = ACPI_BUS_TYPE_POWER;
1885                 *sta = ACPI_STA_DEFAULT;
1886                 break;
1887         default:
1888                 return -ENODEV;
1889         }
1890
1891         return 0;
1892 }
1893
1894 bool acpi_device_is_present(struct acpi_device *adev)
1895 {
1896         if (adev->status.present || adev->status.functional)
1897                 return true;
1898
1899         adev->flags.initialized = false;
1900         return false;
1901 }
1902
1903 static bool acpi_scan_handler_matching(struct acpi_scan_handler *handler,
1904                                        char *idstr,
1905                                        const struct acpi_device_id **matchid)
1906 {
1907         const struct acpi_device_id *devid;
1908
1909         for (devid = handler->ids; devid->id[0]; devid++)
1910                 if (!strcmp((char *)devid->id, idstr)) {
1911                         if (matchid)
1912                                 *matchid = devid;
1913
1914                         return true;
1915                 }
1916
1917         return false;
1918 }
1919
1920 static struct acpi_scan_handler *acpi_scan_match_handler(char *idstr,
1921                                         const struct acpi_device_id **matchid)
1922 {
1923         struct acpi_scan_handler *handler;
1924
1925         list_for_each_entry(handler, &acpi_scan_handlers_list, list_node)
1926                 if (acpi_scan_handler_matching(handler, idstr, matchid))
1927                         return handler;
1928
1929         return NULL;
1930 }
1931
1932 void acpi_scan_hotplug_enabled(struct acpi_hotplug_profile *hotplug, bool val)
1933 {
1934         if (!!hotplug->enabled == !!val)
1935                 return;
1936
1937         mutex_lock(&acpi_scan_lock);
1938
1939         hotplug->enabled = val;
1940
1941         mutex_unlock(&acpi_scan_lock);
1942 }
1943
1944 static void acpi_scan_init_hotplug(acpi_handle handle, int type)
1945 {
1946         struct acpi_device_pnp pnp = {};
1947         struct acpi_hardware_id *hwid;
1948         struct acpi_scan_handler *handler;
1949
1950         INIT_LIST_HEAD(&pnp.ids);
1951         acpi_set_pnp_ids(handle, &pnp, type);
1952
1953         if (!pnp.type.hardware_id)
1954                 goto out;
1955
1956         /*
1957          * This relies on the fact that acpi_install_notify_handler() will not
1958          * install the same notify handler routine twice for the same handle.
1959          */
1960         list_for_each_entry(hwid, &pnp.ids, list) {
1961                 handler = acpi_scan_match_handler(hwid->id, NULL);
1962                 if (handler) {
1963                         acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY,
1964                                         acpi_hotplug_notify_cb, handler);
1965                         break;
1966                 }
1967         }
1968
1969 out:
1970         acpi_free_pnp_ids(&pnp);
1971 }
1972
1973 static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl_not_used,
1974                                       void *not_used, void **return_value)
1975 {
1976         struct acpi_device *device = NULL;
1977         int type;
1978         unsigned long long sta;
1979         int result;
1980
1981         acpi_bus_get_device(handle, &device);
1982         if (device)
1983                 goto out;
1984
1985         result = acpi_bus_type_and_status(handle, &type, &sta);
1986         if (result)
1987                 return AE_OK;
1988
1989         if (type == ACPI_BUS_TYPE_POWER) {
1990                 acpi_add_power_resource(handle);
1991                 return AE_OK;
1992         }
1993
1994         acpi_scan_init_hotplug(handle, type);
1995
1996         acpi_add_single_object(&device, handle, type, sta);
1997         if (!device)
1998                 return AE_CTRL_DEPTH;
1999
2000  out:
2001         if (!*return_value)
2002                 *return_value = device;
2003
2004         return AE_OK;
2005 }
2006
2007 static int acpi_scan_attach_handler(struct acpi_device *device)
2008 {
2009         struct acpi_hardware_id *hwid;
2010         int ret = 0;
2011
2012         list_for_each_entry(hwid, &device->pnp.ids, list) {
2013                 const struct acpi_device_id *devid;
2014                 struct acpi_scan_handler *handler;
2015
2016                 handler = acpi_scan_match_handler(hwid->id, &devid);
2017                 if (handler) {
2018                         ret = handler->attach(device, devid);
2019                         if (ret > 0) {
2020                                 device->handler = handler;
2021                                 break;
2022                         } else if (ret < 0) {
2023                                 break;
2024                         }
2025                 }
2026         }
2027         return ret;
2028 }
2029
2030 static void acpi_bus_attach(struct acpi_device *device)
2031 {
2032         struct acpi_device *child;
2033         int ret;
2034
2035         acpi_bus_get_status(device);
2036         /* Skip devices that are not present. */
2037         if (!acpi_device_is_present(device)) {
2038                 device->flags.visited = false;
2039                 return;
2040         }
2041         if (device->handler)
2042                 goto ok;
2043
2044         if (!device->flags.initialized) {
2045                 acpi_bus_update_power(device, NULL);
2046                 device->flags.initialized = true;
2047         }
2048         device->flags.visited = false;
2049         ret = acpi_scan_attach_handler(device);
2050         if (ret < 0)
2051                 return;
2052
2053         device->flags.match_driver = true;
2054         if (!ret) {
2055                 ret = device_attach(&device->dev);
2056                 if (ret < 0)
2057                         return;
2058         }
2059         device->flags.visited = true;
2060
2061  ok:
2062         list_for_each_entry(child, &device->children, node)
2063                 acpi_bus_attach(child);
2064 }
2065
2066 /**
2067  * acpi_bus_scan - Add ACPI device node objects in a given namespace scope.
2068  * @handle: Root of the namespace scope to scan.
2069  *
2070  * Scan a given ACPI tree (probably recently hot-plugged) and create and add
2071  * found devices.
2072  *
2073  * If no devices were found, -ENODEV is returned, but it does not mean that
2074  * there has been a real error.  There just have been no suitable ACPI objects
2075  * in the table trunk from which the kernel could create a device and add an
2076  * appropriate driver.
2077  *
2078  * Must be called under acpi_scan_lock.
2079  */
2080 int acpi_bus_scan(acpi_handle handle)
2081 {
2082         void *device = NULL;
2083
2084         if (ACPI_SUCCESS(acpi_bus_check_add(handle, 0, NULL, &device)))
2085                 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
2086                                     acpi_bus_check_add, NULL, NULL, &device);
2087
2088         if (device) {
2089                 acpi_bus_attach(device);
2090                 return 0;
2091         }
2092         return -ENODEV;
2093 }
2094 EXPORT_SYMBOL(acpi_bus_scan);
2095
2096 /**
2097  * acpi_bus_trim - Detach scan handlers and drivers from ACPI device objects.
2098  * @adev: Root of the ACPI namespace scope to walk.
2099  *
2100  * Must be called under acpi_scan_lock.
2101  */
2102 void acpi_bus_trim(struct acpi_device *adev)
2103 {
2104         struct acpi_scan_handler *handler = adev->handler;
2105         struct acpi_device *child;
2106
2107         list_for_each_entry_reverse(child, &adev->children, node)
2108                 acpi_bus_trim(child);
2109
2110         adev->flags.match_driver = false;
2111         if (handler) {
2112                 if (handler->detach)
2113                         handler->detach(adev);
2114
2115                 adev->handler = NULL;
2116         } else {
2117                 device_release_driver(&adev->dev);
2118         }
2119         /*
2120          * Most likely, the device is going away, so put it into D3cold before
2121          * that.
2122          */
2123         acpi_device_set_power(adev, ACPI_STATE_D3_COLD);
2124         adev->flags.initialized = false;
2125         adev->flags.visited = false;
2126 }
2127 EXPORT_SYMBOL_GPL(acpi_bus_trim);
2128
2129 static int acpi_bus_scan_fixed(void)
2130 {
2131         int result = 0;
2132
2133         /*
2134          * Enumerate all fixed-feature devices.
2135          */
2136         if (!(acpi_gbl_FADT.flags & ACPI_FADT_POWER_BUTTON)) {
2137                 struct acpi_device *device = NULL;
2138
2139                 result = acpi_add_single_object(&device, NULL,
2140                                                 ACPI_BUS_TYPE_POWER_BUTTON,
2141                                                 ACPI_STA_DEFAULT);
2142                 if (result)
2143                         return result;
2144
2145                 device->flags.match_driver = true;
2146                 result = device_attach(&device->dev);
2147                 if (result < 0)
2148                         return result;
2149
2150                 device_init_wakeup(&device->dev, true);
2151         }
2152
2153         if (!(acpi_gbl_FADT.flags & ACPI_FADT_SLEEP_BUTTON)) {
2154                 struct acpi_device *device = NULL;
2155
2156                 result = acpi_add_single_object(&device, NULL,
2157                                                 ACPI_BUS_TYPE_SLEEP_BUTTON,
2158                                                 ACPI_STA_DEFAULT);
2159                 if (result)
2160                         return result;
2161
2162                 device->flags.match_driver = true;
2163                 result = device_attach(&device->dev);
2164         }
2165
2166         return result < 0 ? result : 0;
2167 }
2168
2169 int __init acpi_scan_init(void)
2170 {
2171         int result;
2172
2173         result = bus_register(&acpi_bus_type);
2174         if (result) {
2175                 /* We don't want to quit even if we failed to add suspend/resume */
2176                 printk(KERN_ERR PREFIX "Could not register bus type\n");
2177         }
2178
2179         acpi_pci_root_init();
2180         acpi_pci_link_init();
2181         acpi_processor_init();
2182         acpi_platform_init();
2183         acpi_lpss_init();
2184         acpi_cmos_rtc_init();
2185         acpi_container_init();
2186         acpi_memory_hotplug_init();
2187         acpi_dock_init();
2188
2189         mutex_lock(&acpi_scan_lock);
2190         /*
2191          * Enumerate devices in the ACPI namespace.
2192          */
2193         result = acpi_bus_scan(ACPI_ROOT_OBJECT);
2194         if (result)
2195                 goto out;
2196
2197         result = acpi_bus_get_device(ACPI_ROOT_OBJECT, &acpi_root);
2198         if (result)
2199                 goto out;
2200
2201         result = acpi_bus_scan_fixed();
2202         if (result) {
2203                 acpi_detach_data(acpi_root->handle, acpi_scan_drop_device);
2204                 acpi_device_del(acpi_root);
2205                 put_device(&acpi_root->dev);
2206                 goto out;
2207         }
2208
2209         acpi_update_all_gpes();
2210
2211  out:
2212         mutex_unlock(&acpi_scan_lock);
2213         return result;
2214 }