Lines Matching refs:device

27 #define ACPI_IS_ROOT_DEVICE(device)    (!(device)->parent)  argument
247 static struct acpi_device *acpi_companion_match(const struct device *dev) in acpi_companion_match()
318 int acpi_device_uevent_modalias(struct device *dev, struct kobj_uevent_env *env) in acpi_device_uevent_modalias()
361 int acpi_device_modalias(struct device *dev, char *buf, int size) in acpi_device_modalias()
368 acpi_device_modalias_show(struct device *dev, struct device_attribute *attr, char *buf) { in acpi_device_modalias_show()
400 struct acpi_device *device = NULL; in acpi_bus_offline() local
405 if (acpi_bus_get_device(handle, &device)) in acpi_bus_offline()
408 if (device->handler && !device->handler->hotplug.enabled) { in acpi_bus_offline()
409 *ret_p = &device->dev; in acpi_bus_offline()
413 mutex_lock(&device->physical_node_lock); in acpi_bus_offline()
415 list_for_each_entry(pn, &device->physical_node_list, node) { in acpi_bus_offline()
440 mutex_unlock(&device->physical_node_lock); in acpi_bus_offline()
448 struct acpi_device *device = NULL; in acpi_bus_online() local
451 if (acpi_bus_get_device(handle, &device)) in acpi_bus_online()
454 mutex_lock(&device->physical_node_lock); in acpi_bus_online()
456 list_for_each_entry(pn, &device->physical_node_list, node) in acpi_bus_online()
462 mutex_unlock(&device->physical_node_lock); in acpi_bus_online()
467 static int acpi_scan_try_to_offline(struct acpi_device *device) in acpi_scan_try_to_offline() argument
469 acpi_handle handle = device->handle; in acpi_scan_try_to_offline()
470 struct device *errdev = NULL; in acpi_scan_try_to_offline()
513 static int acpi_scan_hot_remove(struct acpi_device *device) in acpi_scan_hot_remove() argument
515 acpi_handle handle = device->handle; in acpi_scan_hot_remove()
519 if (device->handler && device->handler->hotplug.demand_offline in acpi_scan_hot_remove()
521 if (!acpi_scan_is_offline(device, true)) in acpi_scan_hot_remove()
524 int error = acpi_scan_try_to_offline(device); in acpi_scan_hot_remove()
530 "Hot-removing device %s...\n", dev_name(&device->dev))); in acpi_scan_hot_remove()
532 acpi_bus_trim(device); in acpi_scan_hot_remove()
701 static ssize_t real_power_state_show(struct device *dev, in real_power_state_show()
717 static ssize_t power_state_show(struct device *dev, in power_state_show()
728 acpi_eject_store(struct device *d, struct device_attribute *attr, in acpi_eject_store()
760 acpi_device_hid_show(struct device *dev, struct device_attribute *attr, char *buf) { in acpi_device_hid_show()
767 static ssize_t acpi_device_uid_show(struct device *dev, in acpi_device_uid_show()
776 static ssize_t acpi_device_adr_show(struct device *dev, in acpi_device_adr_show()
787 acpi_device_path_show(struct device *dev, struct device_attribute *attr, char *buf) { in acpi_device_path_show()
804 static ssize_t description_show(struct device *dev, in description_show()
830 acpi_device_sun_show(struct device *dev, struct device_attribute *attr, in acpi_device_sun_show()
844 static ssize_t status_show(struct device *dev, struct device_attribute *attr, in status_show()
1020 struct acpi_device *device, in __acpi_match_device() argument
1031 if (!device || !device->status.present) in __acpi_match_device()
1034 list_for_each_entry(hwid, &device->pnp.ids, list) { in __acpi_match_device()
1049 && acpi_of_match_device(device, of_ids)) in __acpi_match_device()
1067 const struct device *dev) in acpi_match_device()
1073 int acpi_match_device_ids(struct acpi_device *device, in acpi_match_device_ids() argument
1076 return __acpi_match_device(device, ids, NULL) ? 0 : -ENOENT; in acpi_match_device_ids()
1080 bool acpi_driver_match_device(struct device *dev, in acpi_driver_match_device()
1092 static void acpi_free_power_resources_lists(struct acpi_device *device) in acpi_free_power_resources_lists() argument
1096 if (device->wakeup.flags.valid) in acpi_free_power_resources_lists()
1097 acpi_power_resources_list_free(&device->wakeup.resources); in acpi_free_power_resources_lists()
1099 if (!device->power.flags.power_resources) in acpi_free_power_resources_lists()
1103 struct acpi_device_power_state *ps = &device->power.states[i]; in acpi_free_power_resources_lists()
1108 static void acpi_device_release(struct device *dev) in acpi_device_release()
1118 static int acpi_bus_match(struct device *dev, struct device_driver *drv) in acpi_bus_match()
1127 static int acpi_device_uevent(struct device *dev, struct kobj_uevent_env *env) in acpi_device_uevent()
1134 struct acpi_device *device = data; in acpi_device_notify() local
1136 device->driver->ops.notify(device, event); in acpi_device_notify()
1141 struct acpi_device *device = data; in acpi_device_notify_fixed() local
1144 acpi_device_notify(NULL, ACPI_FIXED_HARDWARE_EVENT, device); in acpi_device_notify_fixed()
1153 static int acpi_device_install_notify_handler(struct acpi_device *device) in acpi_device_install_notify_handler() argument
1157 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON) in acpi_device_install_notify_handler()
1161 device); in acpi_device_install_notify_handler()
1162 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON) in acpi_device_install_notify_handler()
1166 device); in acpi_device_install_notify_handler()
1168 status = acpi_install_notify_handler(device->handle, in acpi_device_install_notify_handler()
1171 device); in acpi_device_install_notify_handler()
1178 static void acpi_device_remove_notify_handler(struct acpi_device *device) in acpi_device_remove_notify_handler() argument
1180 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON) in acpi_device_remove_notify_handler()
1183 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON) in acpi_device_remove_notify_handler()
1187 acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY, in acpi_device_remove_notify_handler()
1191 static int acpi_device_probe(struct device *dev) in acpi_device_probe()
1230 static int acpi_device_remove(struct device * dev) in acpi_device_remove()
1256 static void acpi_device_del(struct acpi_device *device) in acpi_device_del() argument
1259 if (device->parent) in acpi_device_del()
1260 list_del(&device->node); in acpi_device_del()
1262 list_del(&device->wakeup_list); in acpi_device_del()
1265 acpi_power_add_remove_device(device, false); in acpi_device_del()
1266 acpi_device_remove_files(device); in acpi_device_del()
1267 if (device->remove) in acpi_device_del()
1268 device->remove(device); in acpi_device_del()
1270 device_del(&device->dev); in acpi_device_del()
1343 static int acpi_get_device_data(acpi_handle handle, struct acpi_device **device, in acpi_get_device_data() argument
1348 if (!device) in acpi_get_device_data()
1352 (void **)device, callback); in acpi_get_device_data()
1353 if (ACPI_FAILURE(status) || !*device) { in acpi_get_device_data()
1361 int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device) in acpi_bus_get_device() argument
1363 return acpi_get_device_data(handle, device, NULL); in acpi_bus_get_device()
1386 int acpi_device_add(struct acpi_device *device, in acpi_device_add() argument
1387 void (*release)(struct device *)) in acpi_device_add() argument
1393 if (device->handle) { in acpi_device_add()
1396 status = acpi_attach_data(device->handle, acpi_scan_drop_device, in acpi_device_add()
1397 device); in acpi_device_add()
1399 acpi_handle_err(device->handle, in acpi_device_add()
1410 INIT_LIST_HEAD(&device->children); in acpi_device_add()
1411 INIT_LIST_HEAD(&device->node); in acpi_device_add()
1412 INIT_LIST_HEAD(&device->wakeup_list); in acpi_device_add()
1413 INIT_LIST_HEAD(&device->physical_node_list); in acpi_device_add()
1414 INIT_LIST_HEAD(&device->del_list); in acpi_device_add()
1415 mutex_init(&device->physical_node_lock); in acpi_device_add()
1431 acpi_device_hid(device))) { in acpi_device_add()
1440 strcpy(acpi_device_bus_id->bus_id, acpi_device_hid(device)); in acpi_device_add()
1444 dev_set_name(&device->dev, "%s:%02x", acpi_device_bus_id->bus_id, acpi_device_bus_id->instance_no); in acpi_device_add()
1446 if (device->parent) in acpi_device_add()
1447 list_add_tail(&device->node, &device->parent->children); in acpi_device_add()
1449 if (device->wakeup.flags.valid) in acpi_device_add()
1450 list_add_tail(&device->wakeup_list, &acpi_wakeup_device_list); in acpi_device_add()
1453 if (device->parent) in acpi_device_add()
1454 device->dev.parent = &device->parent->dev; in acpi_device_add()
1455 device->dev.bus = &acpi_bus_type; in acpi_device_add()
1456 device->dev.release = release; in acpi_device_add()
1457 result = device_add(&device->dev); in acpi_device_add()
1459 dev_err(&device->dev, "Error registering device\n"); in acpi_device_add()
1463 result = acpi_device_setup_files(device); in acpi_device_add()
1466 dev_name(&device->dev)); in acpi_device_add()
1472 if (device->parent) in acpi_device_add()
1473 list_del(&device->node); in acpi_device_add()
1474 list_del(&device->wakeup_list); in acpi_device_add()
1478 acpi_detach_data(device->handle, acpi_scan_drop_device); in acpi_device_add()
1482 struct acpi_device *acpi_get_next_child(struct device *dev, in acpi_get_next_child()
1548 struct acpi_device *device = NULL; in acpi_bus_get_parent() local
1563 } while (acpi_bus_get_device(handle, &device)); in acpi_bus_get_parent()
1564 return device; in acpi_bus_get_parent()
1672 static void acpi_wakeup_gpe_init(struct acpi_device *device) in acpi_wakeup_gpe_init() argument
1680 struct acpi_device_wakeup *wakeup = &device->wakeup; in acpi_wakeup_gpe_init()
1687 if (!acpi_match_device_ids(device, button_device_ids)) { in acpi_wakeup_gpe_init()
1689 if (!acpi_match_device_ids(device, &button_device_ids[1])) { in acpi_wakeup_gpe_init()
1695 device_set_wakeup_capable(&device->dev, true); in acpi_wakeup_gpe_init()
1699 acpi_setup_gpe_for_wake(device->handle, wakeup->gpe_device, in acpi_wakeup_gpe_init()
1709 static void acpi_bus_get_wakeup_device_flags(struct acpi_device *device) in acpi_bus_get_wakeup_device_flags() argument
1714 if (!acpi_has_method(device->handle, "_PRW")) in acpi_bus_get_wakeup_device_flags()
1717 err = acpi_bus_extract_wakeup_device_power_package(device->handle, in acpi_bus_get_wakeup_device_flags()
1718 &device->wakeup); in acpi_bus_get_wakeup_device_flags()
1720 dev_err(&device->dev, "_PRW evaluation error: %d\n", err); in acpi_bus_get_wakeup_device_flags()
1724 device->wakeup.flags.valid = 1; in acpi_bus_get_wakeup_device_flags()
1725 device->wakeup.prepare_count = 0; in acpi_bus_get_wakeup_device_flags()
1726 acpi_wakeup_gpe_init(device); in acpi_bus_get_wakeup_device_flags()
1733 err = acpi_device_sleep_wake(device, 0, 0, 0); in acpi_bus_get_wakeup_device_flags()
1739 static void acpi_bus_init_power_state(struct acpi_device *device, int state) in acpi_bus_init_power_state() argument
1741 struct acpi_device_power_state *ps = &device->power.states[state]; in acpi_bus_init_power_state()
1749 status = acpi_evaluate_object(device->handle, pathname, NULL, &buffer); in acpi_bus_init_power_state()
1759 device->power.flags.power_resources = 1; in acpi_bus_init_power_state()
1766 if (acpi_has_method(device->handle, pathname)) in acpi_bus_init_power_state()
1783 static void acpi_bus_get_power_flags(struct acpi_device *device) in acpi_bus_get_power_flags() argument
1788 if (!acpi_has_method(device->handle, "_PS0") && in acpi_bus_get_power_flags()
1789 !acpi_has_method(device->handle, "_PR0")) in acpi_bus_get_power_flags()
1792 device->flags.power_manageable = 1; in acpi_bus_get_power_flags()
1797 if (acpi_has_method(device->handle, "_PSC")) in acpi_bus_get_power_flags()
1798 device->power.flags.explicit_get = 1; in acpi_bus_get_power_flags()
1800 if (acpi_has_method(device->handle, "_IRC")) in acpi_bus_get_power_flags()
1801 device->power.flags.inrush_current = 1; in acpi_bus_get_power_flags()
1803 if (acpi_has_method(device->handle, "_DSW")) in acpi_bus_get_power_flags()
1804 device->power.flags.dsw_present = 1; in acpi_bus_get_power_flags()
1810 acpi_bus_init_power_state(device, i); in acpi_bus_get_power_flags()
1812 INIT_LIST_HEAD(&device->power.states[ACPI_STATE_D3_COLD].resources); in acpi_bus_get_power_flags()
1815 device->power.states[ACPI_STATE_D0].flags.valid = 1; in acpi_bus_get_power_flags()
1816 device->power.states[ACPI_STATE_D0].power = 100; in acpi_bus_get_power_flags()
1817 device->power.states[ACPI_STATE_D3_COLD].flags.valid = 1; in acpi_bus_get_power_flags()
1818 device->power.states[ACPI_STATE_D3_COLD].power = 0; in acpi_bus_get_power_flags()
1821 if (device->power.states[ACPI_STATE_D3_HOT].flags.explicit_set) in acpi_bus_get_power_flags()
1822 device->power.states[ACPI_STATE_D3_COLD].flags.explicit_set = 1; in acpi_bus_get_power_flags()
1825 if (device->power.states[ACPI_STATE_D3_HOT].flags.explicit_set || in acpi_bus_get_power_flags()
1826 device->power.flags.power_resources) in acpi_bus_get_power_flags()
1827 device->power.states[ACPI_STATE_D3_COLD].flags.os_accessible = 1; in acpi_bus_get_power_flags()
1829 if (acpi_bus_init_power(device)) in acpi_bus_get_power_flags()
1830 device->flags.power_manageable = 0; in acpi_bus_get_power_flags()
1833 static void acpi_bus_get_flags(struct acpi_device *device) in acpi_bus_get_flags() argument
1836 if (acpi_has_method(device->handle, "_STA")) in acpi_bus_get_flags()
1837 device->flags.dynamic_status = 1; in acpi_bus_get_flags()
1840 if (acpi_has_method(device->handle, "_RMV")) in acpi_bus_get_flags()
1841 device->flags.removable = 1; in acpi_bus_get_flags()
1844 if (acpi_has_method(device->handle, "_EJD") || in acpi_bus_get_flags()
1845 acpi_has_method(device->handle, "_EJ0")) in acpi_bus_get_flags()
1846 device->flags.ejectable = 1; in acpi_bus_get_flags()
1849 static void acpi_device_get_busid(struct acpi_device *device) in acpi_device_get_busid() argument
1861 if (ACPI_IS_ROOT_DEVICE(device)) { in acpi_device_get_busid()
1862 strcpy(device->pnp.bus_id, "ACPI"); in acpi_device_get_busid()
1866 switch (device->device_type) { in acpi_device_get_busid()
1868 strcpy(device->pnp.bus_id, "PWRF"); in acpi_device_get_busid()
1871 strcpy(device->pnp.bus_id, "SLPF"); in acpi_device_get_busid()
1874 acpi_get_name(device->handle, ACPI_SINGLE_NAME, &buffer); in acpi_device_get_busid()
1882 strcpy(device->pnp.bus_id, bus_id); in acpi_device_get_busid()
1950 const char *acpi_device_hid(struct acpi_device *device) in acpi_device_hid() argument
1954 if (list_empty(&device->pnp.ids)) in acpi_device_hid()
1957 hid = list_first_entry(&device->pnp.ids, struct acpi_hardware_id, list); in acpi_device_hid()
2112 void acpi_init_device_object(struct acpi_device *device, acpi_handle handle, in acpi_init_device_object() argument
2115 INIT_LIST_HEAD(&device->pnp.ids); in acpi_init_device_object()
2116 device->device_type = type; in acpi_init_device_object()
2117 device->handle = handle; in acpi_init_device_object()
2118 device->parent = acpi_bus_get_parent(handle); in acpi_init_device_object()
2119 device->fwnode.type = FWNODE_ACPI; in acpi_init_device_object()
2120 acpi_set_device_status(device, sta); in acpi_init_device_object()
2121 acpi_device_get_busid(device); in acpi_init_device_object()
2122 acpi_set_pnp_ids(handle, &device->pnp, type); in acpi_init_device_object()
2123 acpi_init_properties(device); in acpi_init_device_object()
2124 acpi_bus_get_flags(device); in acpi_init_device_object()
2125 device->flags.match_driver = false; in acpi_init_device_object()
2126 device->flags.initialized = true; in acpi_init_device_object()
2127 device->flags.visited = false; in acpi_init_device_object()
2128 device_initialize(&device->dev); in acpi_init_device_object()
2129 dev_set_uevent_suppress(&device->dev, true); in acpi_init_device_object()
2132 void acpi_device_add_finalize(struct acpi_device *device) in acpi_device_add_finalize() argument
2134 dev_set_uevent_suppress(&device->dev, false); in acpi_device_add_finalize()
2135 kobject_uevent(&device->dev.kobj, KOBJ_ADD); in acpi_device_add_finalize()
2143 struct acpi_device *device; in acpi_add_single_object() local
2146 device = kzalloc(sizeof(struct acpi_device), GFP_KERNEL); in acpi_add_single_object()
2147 if (!device) { in acpi_add_single_object()
2152 acpi_init_device_object(device, handle, type, sta); in acpi_add_single_object()
2153 acpi_bus_get_power_flags(device); in acpi_add_single_object()
2154 acpi_bus_get_wakeup_device_flags(device); in acpi_add_single_object()
2156 result = acpi_device_add(device, acpi_device_release); in acpi_add_single_object()
2158 acpi_device_release(&device->dev); in acpi_add_single_object()
2162 acpi_power_add_remove_device(device, true); in acpi_add_single_object()
2163 acpi_device_add_finalize(device); in acpi_add_single_object()
2166 dev_name(&device->dev), (char *) buffer.pointer, in acpi_add_single_object()
2167 device->parent ? dev_name(&device->parent->dev) : "(null)")); in acpi_add_single_object()
2169 *child = device; in acpi_add_single_object()
2340 struct acpi_device *device = NULL; in acpi_bus_check_add() local
2345 acpi_bus_get_device(handle, &device); in acpi_bus_check_add()
2346 if (device) in acpi_bus_check_add()
2358 acpi_add_single_object(&device, handle, type, sta); in acpi_bus_check_add()
2359 if (!device) in acpi_bus_check_add()
2362 acpi_scan_init_hotplug(device); in acpi_bus_check_add()
2363 acpi_device_dep_initialize(device); in acpi_bus_check_add()
2367 *return_value = device; in acpi_bus_check_add()
2390 static void acpi_default_enumeration(struct acpi_device *device) in acpi_default_enumeration() argument
2400 acpi_dev_get_resources(device, &resource_list, acpi_check_spi_i2c_slave, in acpi_default_enumeration()
2404 acpi_create_platform_device(device); in acpi_default_enumeration()
2430 static int acpi_scan_attach_handler(struct acpi_device *device) in acpi_scan_attach_handler() argument
2435 list_for_each_entry(hwid, &device->pnp.ids, list) { in acpi_scan_attach_handler()
2442 device->pnp.type.platform_id = 0; in acpi_scan_attach_handler()
2445 device->handler = handler; in acpi_scan_attach_handler()
2446 ret = handler->attach(device, devid); in acpi_scan_attach_handler()
2450 device->handler = NULL; in acpi_scan_attach_handler()
2459 static void acpi_bus_attach(struct acpi_device *device) in acpi_bus_attach() argument
2465 if (ACPI_SUCCESS(acpi_bus_get_ejd(device->handle, &ejd))) in acpi_bus_attach()
2466 register_dock_dependent_device(device, ejd); in acpi_bus_attach()
2468 acpi_bus_get_status(device); in acpi_bus_attach()
2470 if (!acpi_device_is_present(device)) { in acpi_bus_attach()
2471 device->flags.visited = false; in acpi_bus_attach()
2472 device->flags.power_manageable = 0; in acpi_bus_attach()
2475 if (device->handler) in acpi_bus_attach()
2478 if (!device->flags.initialized) { in acpi_bus_attach()
2479 device->flags.power_manageable = in acpi_bus_attach()
2480 device->power.states[ACPI_STATE_D0].flags.valid; in acpi_bus_attach()
2481 if (acpi_bus_init_power(device)) in acpi_bus_attach()
2482 device->flags.power_manageable = 0; in acpi_bus_attach()
2484 device->flags.initialized = true; in acpi_bus_attach()
2486 device->flags.visited = false; in acpi_bus_attach()
2487 ret = acpi_scan_attach_handler(device); in acpi_bus_attach()
2491 device->flags.match_driver = true; in acpi_bus_attach()
2493 ret = device_attach(&device->dev); in acpi_bus_attach()
2497 if (!ret && device->pnp.type.platform_id) in acpi_bus_attach()
2498 acpi_default_enumeration(device); in acpi_bus_attach()
2500 device->flags.visited = true; in acpi_bus_attach()
2503 list_for_each_entry(child, &device->children, node) in acpi_bus_attach()
2506 if (device->handler && device->handler->hotplug.notify_online) in acpi_bus_attach()
2507 device->handler->hotplug.notify_online(device); in acpi_bus_attach()
2549 void *device = NULL; in acpi_bus_scan() local
2551 if (ACPI_SUCCESS(acpi_bus_check_add(handle, 0, NULL, &device))) in acpi_bus_scan()
2553 acpi_bus_check_add, NULL, NULL, &device); in acpi_bus_scan()
2555 if (device) { in acpi_bus_scan()
2556 acpi_bus_attach(device); in acpi_bus_scan()
2604 struct acpi_device *device = NULL; in acpi_bus_scan_fixed() local
2606 result = acpi_add_single_object(&device, NULL, in acpi_bus_scan_fixed()
2612 device->flags.match_driver = true; in acpi_bus_scan_fixed()
2613 result = device_attach(&device->dev); in acpi_bus_scan_fixed()
2617 device_init_wakeup(&device->dev, true); in acpi_bus_scan_fixed()
2621 struct acpi_device *device = NULL; in acpi_bus_scan_fixed() local
2623 result = acpi_add_single_object(&device, NULL, in acpi_bus_scan_fixed()
2629 device->flags.match_driver = true; in acpi_bus_scan_fixed()
2630 result = device_attach(&device->dev); in acpi_bus_scan_fixed()