Lines Matching refs:device
28 #define ACPI_IS_ROOT_DEVICE(device) (!(device)->parent) argument
110 acpi_device_modalias_show(struct device *dev, struct device_attribute *attr, char *buf) { in acpi_device_modalias_show()
123 static int acpi_scan_hot_remove(struct acpi_device *device) in acpi_scan_hot_remove() argument
125 acpi_handle handle = device->handle; in acpi_scan_hot_remove()
134 dev_dbg(&device->dev, "ACPI handle missing\n"); in acpi_scan_hot_remove()
135 put_device(&device->dev); in acpi_scan_hot_remove()
140 "Hot-removing device %s...\n", dev_name(&device->dev))); in acpi_scan_hot_remove()
142 acpi_bus_trim(device); in acpi_scan_hot_remove()
144 put_device(&device->dev); in acpi_scan_hot_remove()
145 device = NULL; in acpi_scan_hot_remove()
193 struct acpi_device *device = NULL; in acpi_bus_device_eject() local
199 acpi_bus_get_device(handle, &device); in acpi_bus_device_eject()
200 if (!device) in acpi_bus_device_eject()
203 handler = device->handler; in acpi_bus_device_eject()
211 device->flags.eject_pending = true; in acpi_bus_device_eject()
212 kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE); in acpi_bus_device_eject()
216 get_device(&device->dev); in acpi_bus_device_eject()
217 error = acpi_scan_hot_remove(device); in acpi_bus_device_eject()
234 struct acpi_device *device = NULL; in acpi_scan_bus_device_check() local
240 acpi_bus_get_device(handle, &device); in acpi_scan_bus_device_check()
241 if (device) { in acpi_scan_bus_device_check()
242 dev_warn(&device->dev, "Attempt to re-insert\n"); in acpi_scan_bus_device_check()
252 error = acpi_bus_get_device(handle, &device); in acpi_scan_bus_device_check()
258 if (device->handler && device->handler->hotplug.mode == AHM_CONTAINER) in acpi_scan_bus_device_check()
259 kobject_uevent(&device->dev.kobj, KOBJ_ONLINE); in acpi_scan_bus_device_check()
350 struct acpi_device *device = ej_event->device; in acpi_bus_hot_remove_device() local
351 acpi_handle handle = device->handle; in acpi_bus_hot_remove_device()
356 error = acpi_scan_hot_remove(device); in acpi_bus_hot_remove_device()
367 static ssize_t real_power_state_show(struct device *dev, in real_power_state_show()
383 static ssize_t power_state_show(struct device *dev, in power_state_show()
394 acpi_eject_store(struct device *d, struct device_attribute *attr, in acpi_eject_store()
432 ej_event->device = acpi_device; in acpi_eject_store()
457 acpi_device_hid_show(struct device *dev, struct device_attribute *attr, char *buf) { in acpi_device_hid_show()
464 static ssize_t acpi_device_uid_show(struct device *dev, in acpi_device_uid_show()
473 static ssize_t acpi_device_adr_show(struct device *dev, in acpi_device_adr_show()
484 acpi_device_path_show(struct device *dev, struct device_attribute *attr, char *buf) { in acpi_device_path_show()
501 static ssize_t description_show(struct device *dev, in description_show()
527 acpi_device_sun_show(struct device *dev, struct device_attribute *attr, in acpi_device_sun_show()
662 struct acpi_device *device, const struct acpi_device_id *ids) in __acpi_match_device() argument
671 if (!device->status.present) in __acpi_match_device()
675 list_for_each_entry(hwid, &device->pnp.ids, list) in __acpi_match_device()
694 const struct device *dev) in acpi_match_device()
706 int acpi_match_device_ids(struct acpi_device *device, in acpi_match_device_ids() argument
709 return __acpi_match_device(device, ids) ? 0 : -ENOENT; in acpi_match_device_ids()
713 static void acpi_free_power_resources_lists(struct acpi_device *device) in acpi_free_power_resources_lists() argument
717 if (device->wakeup.flags.valid) in acpi_free_power_resources_lists()
718 acpi_power_resources_list_free(&device->wakeup.resources); in acpi_free_power_resources_lists()
720 if (!device->flags.power_manageable) in acpi_free_power_resources_lists()
724 struct acpi_device_power_state *ps = &device->power.states[i]; in acpi_free_power_resources_lists()
729 static void acpi_device_release(struct device *dev) in acpi_device_release()
738 static int acpi_bus_match(struct device *dev, struct device_driver *drv) in acpi_bus_match()
747 static int acpi_device_uevent(struct device *dev, struct kobj_uevent_env *env) in acpi_device_uevent()
767 struct acpi_device *device = data; in acpi_device_notify() local
769 device->driver->ops.notify(device, event); in acpi_device_notify()
774 struct acpi_device *device = data; in acpi_device_notify_fixed() local
777 acpi_device_notify(NULL, ACPI_FIXED_HARDWARE_EVENT, device); in acpi_device_notify_fixed()
781 static int acpi_device_install_notify_handler(struct acpi_device *device) in acpi_device_install_notify_handler() argument
785 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON) in acpi_device_install_notify_handler()
789 device); in acpi_device_install_notify_handler()
790 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON) in acpi_device_install_notify_handler()
794 device); in acpi_device_install_notify_handler()
796 status = acpi_install_notify_handler(device->handle, in acpi_device_install_notify_handler()
799 device); in acpi_device_install_notify_handler()
806 static void acpi_device_remove_notify_handler(struct acpi_device *device) in acpi_device_remove_notify_handler() argument
808 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON) in acpi_device_remove_notify_handler()
811 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON) in acpi_device_remove_notify_handler()
815 acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY, in acpi_device_remove_notify_handler()
820 static int acpi_device_probe(struct device * dev) in acpi_device_probe()
847 static int acpi_device_remove(struct device * dev) in acpi_device_remove()
873 int acpi_device_add(struct acpi_device *device, in acpi_device_add() argument
874 void (*release)(struct device *)) in acpi_device_add() argument
880 if (device->handle) { in acpi_device_add()
883 status = acpi_attach_data(device->handle, acpi_bus_data_handler, in acpi_device_add()
884 device); in acpi_device_add()
886 acpi_handle_err(device->handle, in acpi_device_add()
897 INIT_LIST_HEAD(&device->children); in acpi_device_add()
898 INIT_LIST_HEAD(&device->node); in acpi_device_add()
899 INIT_LIST_HEAD(&device->wakeup_list); in acpi_device_add()
900 INIT_LIST_HEAD(&device->physical_node_list); in acpi_device_add()
901 mutex_init(&device->physical_node_lock); in acpi_device_add()
902 INIT_LIST_HEAD(&device->power_dependent); in acpi_device_add()
918 acpi_device_hid(device))) { in acpi_device_add()
927 strcpy(acpi_device_bus_id->bus_id, acpi_device_hid(device)); in acpi_device_add()
931 dev_set_name(&device->dev, "%s:%02x", acpi_device_bus_id->bus_id, acpi_device_bus_id->instance_no); in acpi_device_add()
933 if (device->parent) in acpi_device_add()
934 list_add_tail(&device->node, &device->parent->children); in acpi_device_add()
936 if (device->wakeup.flags.valid) in acpi_device_add()
937 list_add_tail(&device->wakeup_list, &acpi_wakeup_device_list); in acpi_device_add()
940 if (device->parent) in acpi_device_add()
941 device->dev.parent = &device->parent->dev; in acpi_device_add()
942 device->dev.bus = &acpi_bus_type; in acpi_device_add()
943 device->dev.release = release; in acpi_device_add()
944 result = device_add(&device->dev); in acpi_device_add()
946 dev_err(&device->dev, "Error registering device\n"); in acpi_device_add()
950 result = acpi_device_setup_files(device); in acpi_device_add()
953 dev_name(&device->dev)); in acpi_device_add()
955 device->removal_type = ACPI_BUS_REMOVAL_NORMAL; in acpi_device_add()
960 if (device->parent) in acpi_device_add()
961 list_del(&device->node); in acpi_device_add()
962 list_del(&device->wakeup_list); in acpi_device_add()
966 acpi_detach_data(device->handle, acpi_bus_data_handler); in acpi_device_add()
970 static void acpi_device_unregister(struct acpi_device *device) in acpi_device_unregister() argument
973 if (device->parent) in acpi_device_unregister()
974 list_del(&device->node); in acpi_device_unregister()
976 list_del(&device->wakeup_list); in acpi_device_unregister()
979 acpi_detach_data(device->handle, acpi_bus_data_handler); in acpi_device_unregister()
981 acpi_power_add_remove_device(device, false); in acpi_device_unregister()
982 acpi_device_remove_files(device); in acpi_device_unregister()
983 if (device->remove) in acpi_device_unregister()
984 device->remove(device); in acpi_device_unregister()
986 device_del(&device->dev); in acpi_device_unregister()
992 acpi_device_set_power(device, ACPI_STATE_D3_COLD); in acpi_device_unregister()
993 device->handle = NULL; in acpi_device_unregister()
994 put_device(&device->dev); in acpi_device_unregister()
1009 acpi_bus_driver_init(struct acpi_device *device, struct acpi_driver *driver) in acpi_bus_driver_init() argument
1013 if (!device || !driver) in acpi_bus_driver_init()
1019 result = driver->ops.add(device); in acpi_bus_driver_init()
1023 device->driver = driver; in acpi_bus_driver_init()
1078 struct acpi_device *device = NULL; in acpi_bus_get_parent() local
1093 } while (acpi_bus_get_device(handle, &device)); in acpi_bus_get_parent()
1094 return device; in acpi_bus_get_parent()
1211 static void acpi_bus_set_run_wake_flags(struct acpi_device *device) in acpi_bus_set_run_wake_flags() argument
1222 device->wakeup.flags.notifier_present = 0; in acpi_bus_set_run_wake_flags()
1225 if (!acpi_match_device_ids(device, button_device_ids)) { in acpi_bus_set_run_wake_flags()
1226 device->wakeup.flags.run_wake = 1; in acpi_bus_set_run_wake_flags()
1227 if (!acpi_match_device_ids(device, &button_device_ids[1])) { in acpi_bus_set_run_wake_flags()
1229 if (device->wakeup.sleep_state == ACPI_STATE_S5) in acpi_bus_set_run_wake_flags()
1230 device->wakeup.sleep_state = ACPI_STATE_S4; in acpi_bus_set_run_wake_flags()
1232 device_set_wakeup_capable(&device->dev, true); in acpi_bus_set_run_wake_flags()
1236 status = acpi_get_gpe_status(device->wakeup.gpe_device, in acpi_bus_set_run_wake_flags()
1237 device->wakeup.gpe_number, in acpi_bus_set_run_wake_flags()
1240 device->wakeup.flags.run_wake = in acpi_bus_set_run_wake_flags()
1244 static void acpi_bus_get_wakeup_device_flags(struct acpi_device *device) in acpi_bus_get_wakeup_device_flags() argument
1251 status = acpi_get_handle(device->handle, "_PRW", &temp); in acpi_bus_get_wakeup_device_flags()
1255 err = acpi_bus_extract_wakeup_device_power_package(device->handle, in acpi_bus_get_wakeup_device_flags()
1256 &device->wakeup); in acpi_bus_get_wakeup_device_flags()
1258 dev_err(&device->dev, "_PRW evaluation error: %d\n", err); in acpi_bus_get_wakeup_device_flags()
1262 device->wakeup.flags.valid = 1; in acpi_bus_get_wakeup_device_flags()
1263 device->wakeup.prepare_count = 0; in acpi_bus_get_wakeup_device_flags()
1264 acpi_bus_set_run_wake_flags(device); in acpi_bus_get_wakeup_device_flags()
1271 err = acpi_device_sleep_wake(device, 0, 0, 0); in acpi_bus_get_wakeup_device_flags()
1277 static void acpi_bus_init_power_state(struct acpi_device *device, int state) in acpi_bus_init_power_state() argument
1279 struct acpi_device_power_state *ps = &device->power.states[state]; in acpi_bus_init_power_state()
1288 status = acpi_evaluate_object(device->handle, pathname, NULL, &buffer); in acpi_bus_init_power_state()
1298 device->power.flags.power_resources = 1; in acpi_bus_init_power_state()
1305 status = acpi_get_handle(device->handle, pathname, &handle); in acpi_bus_init_power_state()
1323 static void acpi_bus_get_power_flags(struct acpi_device *device) in acpi_bus_get_power_flags() argument
1330 status = acpi_get_handle(device->handle, "_PS0", &handle); in acpi_bus_get_power_flags()
1332 status = acpi_get_handle(device->handle, "_PR0", &handle); in acpi_bus_get_power_flags()
1337 device->flags.power_manageable = 1; in acpi_bus_get_power_flags()
1342 status = acpi_get_handle(device->handle, "_PSC", &handle); in acpi_bus_get_power_flags()
1344 device->power.flags.explicit_get = 1; in acpi_bus_get_power_flags()
1345 status = acpi_get_handle(device->handle, "_IRC", &handle); in acpi_bus_get_power_flags()
1347 device->power.flags.inrush_current = 1; in acpi_bus_get_power_flags()
1353 acpi_bus_init_power_state(device, i); in acpi_bus_get_power_flags()
1355 INIT_LIST_HEAD(&device->power.states[ACPI_STATE_D3_COLD].resources); in acpi_bus_get_power_flags()
1358 device->power.states[ACPI_STATE_D0].flags.valid = 1; in acpi_bus_get_power_flags()
1359 device->power.states[ACPI_STATE_D0].power = 100; in acpi_bus_get_power_flags()
1360 device->power.states[ACPI_STATE_D3].flags.valid = 1; in acpi_bus_get_power_flags()
1361 device->power.states[ACPI_STATE_D3].power = 0; in acpi_bus_get_power_flags()
1364 if (device->power.states[ACPI_STATE_D3_HOT].flags.explicit_set) in acpi_bus_get_power_flags()
1365 device->power.states[ACPI_STATE_D3_COLD].flags.explicit_set = 1; in acpi_bus_get_power_flags()
1368 if (device->power.states[ACPI_STATE_D3_HOT].flags.explicit_set || in acpi_bus_get_power_flags()
1369 device->power.flags.power_resources) in acpi_bus_get_power_flags()
1370 device->power.states[ACPI_STATE_D3_COLD].flags.os_accessible = 1; in acpi_bus_get_power_flags()
1372 if (acpi_bus_init_power(device)) { in acpi_bus_get_power_flags()
1373 acpi_free_power_resources_lists(device); in acpi_bus_get_power_flags()
1374 device->flags.power_manageable = 0; in acpi_bus_get_power_flags()
1378 static void acpi_bus_get_flags(struct acpi_device *device) in acpi_bus_get_flags() argument
1384 status = acpi_get_handle(device->handle, "_STA", &temp); in acpi_bus_get_flags()
1386 device->flags.dynamic_status = 1; in acpi_bus_get_flags()
1389 status = acpi_get_handle(device->handle, "_RMV", &temp); in acpi_bus_get_flags()
1391 device->flags.removable = 1; in acpi_bus_get_flags()
1394 status = acpi_get_handle(device->handle, "_EJD", &temp); in acpi_bus_get_flags()
1396 device->flags.ejectable = 1; in acpi_bus_get_flags()
1398 status = acpi_get_handle(device->handle, "_EJ0", &temp); in acpi_bus_get_flags()
1400 device->flags.ejectable = 1; in acpi_bus_get_flags()
1404 static void acpi_device_get_busid(struct acpi_device *device) in acpi_device_get_busid() argument
1416 if (ACPI_IS_ROOT_DEVICE(device)) { in acpi_device_get_busid()
1417 strcpy(device->pnp.bus_id, "ACPI"); in acpi_device_get_busid()
1421 switch (device->device_type) { in acpi_device_get_busid()
1423 strcpy(device->pnp.bus_id, "PWRF"); in acpi_device_get_busid()
1426 strcpy(device->pnp.bus_id, "SLPF"); in acpi_device_get_busid()
1429 acpi_get_name(device->handle, ACPI_SINGLE_NAME, &buffer); in acpi_device_get_busid()
1437 strcpy(device->pnp.bus_id, bus_id); in acpi_device_get_busid()
1485 const char *acpi_device_hid(struct acpi_device *device) in acpi_device_hid() argument
1489 if (list_empty(&device->pnp.ids)) in acpi_device_hid()
1492 hid = list_first_entry(&device->pnp.ids, struct acpi_hardware_id, list); in acpi_device_hid()
1637 void acpi_init_device_object(struct acpi_device *device, acpi_handle handle, in acpi_init_device_object() argument
1640 INIT_LIST_HEAD(&device->pnp.ids); in acpi_init_device_object()
1641 device->device_type = type; in acpi_init_device_object()
1642 device->handle = handle; in acpi_init_device_object()
1643 device->parent = acpi_bus_get_parent(handle); in acpi_init_device_object()
1644 STRUCT_TO_INT(device->status) = sta; in acpi_init_device_object()
1645 acpi_device_get_busid(device); in acpi_init_device_object()
1646 acpi_set_pnp_ids(handle, &device->pnp, type); in acpi_init_device_object()
1647 acpi_bus_get_flags(device); in acpi_init_device_object()
1648 device->flags.match_driver = false; in acpi_init_device_object()
1649 device_initialize(&device->dev); in acpi_init_device_object()
1650 dev_set_uevent_suppress(&device->dev, true); in acpi_init_device_object()
1653 void acpi_device_add_finalize(struct acpi_device *device) in acpi_device_add_finalize() argument
1655 device->flags.match_driver = true; in acpi_device_add_finalize()
1656 dev_set_uevent_suppress(&device->dev, false); in acpi_device_add_finalize()
1657 kobject_uevent(&device->dev.kobj, KOBJ_ADD); in acpi_device_add_finalize()
1665 struct acpi_device *device; in acpi_add_single_object() local
1668 device = kzalloc(sizeof(struct acpi_device), GFP_KERNEL); in acpi_add_single_object()
1669 if (!device) { in acpi_add_single_object()
1674 acpi_init_device_object(device, handle, type, sta); in acpi_add_single_object()
1675 acpi_bus_get_power_flags(device); in acpi_add_single_object()
1676 acpi_bus_get_wakeup_device_flags(device); in acpi_add_single_object()
1678 result = acpi_device_add(device, acpi_device_release); in acpi_add_single_object()
1680 acpi_device_release(&device->dev); in acpi_add_single_object()
1684 acpi_power_add_remove_device(device, true); in acpi_add_single_object()
1685 acpi_device_add_finalize(device); in acpi_add_single_object()
1688 dev_name(&device->dev), (char *) buffer.pointer, in acpi_add_single_object()
1689 device->parent ? dev_name(&device->parent->dev) : "(null)")); in acpi_add_single_object()
1691 *child = device; in acpi_add_single_object()
1807 struct acpi_device *device = NULL; in acpi_bus_check_add() local
1813 acpi_bus_get_device(handle, &device); in acpi_bus_check_add()
1814 if (device) in acpi_bus_check_add()
1842 acpi_add_single_object(&device, handle, type, sta); in acpi_bus_check_add()
1843 if (!device) in acpi_bus_check_add()
1848 *return_value = device; in acpi_bus_check_add()
1853 static int acpi_scan_attach_handler(struct acpi_device *device) in acpi_scan_attach_handler() argument
1858 list_for_each_entry(hwid, &device->pnp.ids, list) { in acpi_scan_attach_handler()
1864 ret = handler->attach(device, devid); in acpi_scan_attach_handler()
1866 device->handler = handler; in acpi_scan_attach_handler()
1879 struct acpi_device *device; in acpi_bus_device_attach() local
1890 if (acpi_bus_get_device(handle, &device)) in acpi_bus_device_attach()
1893 ret = acpi_scan_attach_handler(device); in acpi_bus_device_attach()
1897 ret = device_attach(&device->dev); in acpi_bus_device_attach()
1917 void *device = NULL; in acpi_bus_scan() local
1920 if (ACPI_SUCCESS(acpi_bus_check_add(handle, 0, NULL, &device))) in acpi_bus_scan()
1922 acpi_bus_check_add, NULL, NULL, &device); in acpi_bus_scan()
1924 if (!device) in acpi_bus_scan()
1937 struct acpi_device *device = NULL; in acpi_bus_device_detach() local
1939 if (!acpi_bus_get_device(handle, &device)) { in acpi_bus_device_detach()
1940 struct acpi_scan_handler *dev_handler = device->handler; in acpi_bus_device_detach()
1942 device->removal_type = ACPI_BUS_REMOVAL_EJECT; in acpi_bus_device_detach()
1945 dev_handler->detach(device); in acpi_bus_device_detach()
1947 device->handler = NULL; in acpi_bus_device_detach()
1949 device_release_driver(&device->dev); in acpi_bus_device_detach()
1958 struct acpi_device *device = NULL; in acpi_bus_remove() local
1960 if (!acpi_bus_get_device(handle, &device)) in acpi_bus_remove()
1961 acpi_device_unregister(device); in acpi_bus_remove()
1999 struct acpi_device *device = NULL; in acpi_bus_scan_fixed() local
2001 result = acpi_add_single_object(&device, NULL, in acpi_bus_scan_fixed()
2007 result = device_attach(&device->dev); in acpi_bus_scan_fixed()
2011 device_init_wakeup(&device->dev, true); in acpi_bus_scan_fixed()
2015 struct acpi_device *device = NULL; in acpi_bus_scan_fixed() local
2017 result = acpi_add_single_object(&device, NULL, in acpi_bus_scan_fixed()
2023 result = device_attach(&device->dev); in acpi_bus_scan_fixed()