staticint pnpacpi_set_resources(struct pnp_dev *dev)
{ struct acpi_device *acpi_dev;
acpi_handle handle; int ret = 0;
pnp_dbg(&dev->dev, "set resources\n");
acpi_dev = ACPI_COMPANION(&dev->dev); if (!acpi_dev) {
dev_dbg(&dev->dev, "ACPI device not found in %s!\n", __func__); return -ENODEV;
}
if (WARN_ON_ONCE(acpi_dev != dev->data))
dev->data = acpi_dev;
handle = acpi_dev->handle; if (acpi_has_method(handle, METHOD_NAME__SRS)) { struct acpi_buffer buffer;
ret = pnpacpi_build_resource_template(dev, &buffer); if (ret) return ret;
ret = pnpacpi_encode_resources(dev, &buffer); if (!ret) {
acpi_status status;
status = acpi_set_current_resources(handle, &buffer); if (ACPI_FAILURE(status))
ret = -EIO;
}
kfree(buffer.pointer);
} if (!ret && acpi_device_power_manageable(acpi_dev))
ret = acpi_device_set_power(acpi_dev, ACPI_STATE_D0);
acpi_dev = ACPI_COMPANION(&dev->dev); if (!acpi_dev) {
dev_dbg(&dev->dev, "ACPI device not found in %s!\n", __func__); return 0;
}
/* acpi_unregister_gsi(pnp_irq(dev, 0)); */ if (acpi_device_power_manageable(acpi_dev))
acpi_device_set_power(acpi_dev, ACPI_STATE_D3_COLD);
/* continue even if acpi_device_set_power() fails */
status = acpi_evaluate_object(acpi_dev->handle, "_DIS", NULL, NULL); if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) return -ENODEV;
if (!acpi_dev) {
dev_dbg(&dev->dev, "ACPI device not found in %s!\n", __func__); return 0;
}
if (device_can_wakeup(&dev->dev)) {
error = acpi_pm_set_device_wakeup(&dev->dev,
device_may_wakeup(&dev->dev)); if (error) return error;
}
if (acpi_device_power_manageable(acpi_dev)) { int power_state = acpi_pm_device_sleep_state(&dev->dev, NULL,
ACPI_STATE_D3_COLD); if (power_state < 0)
power_state = (state.event == PM_EVENT_ON) ?
ACPI_STATE_D0 : ACPI_STATE_D3_COLD;
/* * acpi_device_set_power() can fail (keyboard port can't be * powered-down?), and in any case, our return value is ignored * by pnp_bus_suspend(). Hence we don't revert the wakeup * setting if the set_power fails.
*/
error = acpi_device_set_power(acpi_dev, power_state);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.