Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 882fd12e authored by Toshi Kani's avatar Toshi Kani Committed by Rafael J. Wysocki
Browse files

ACPI: Verify device status after eject



ACPI spec states that the OS evaluates _STA after calling _EJ0
in order to verify if eject was successful.  Added a check to
verify if the enabled bit of the status value is cleared after
_EJ0.

Note, the present bit is not checked since some FW implementations
do not clear the present bit until the hardware is physically
removed.

Signed-off-by: default avatarToshi Kani <toshi.kani@hp.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent ea6a4581
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -127,6 +127,7 @@ static int acpi_scan_hot_remove(struct acpi_device *device)
	struct acpi_object_list arg_list;
	union acpi_object arg;
	acpi_status status;
	unsigned long long sta;

	/* If there is no handle, the device node has been unregistered. */
	if (!handle) {
@@ -164,10 +165,25 @@ static int acpi_scan_hot_remove(struct acpi_device *device)
		if (status == AE_NOT_FOUND) {
			return -ENODEV;
		} else {
			acpi_handle_warn(handle, "Eject failed\n");
			acpi_handle_warn(handle, "Eject failed (0x%x)\n",
								status);
			return -EIO;
		}
	}

	/*
	 * Verify if eject was indeed successful.  If not, log an error
	 * message.  No need to call _OST since _EJ0 call was made OK.
	 */
	status = acpi_evaluate_integer(handle, "_STA", NULL, &sta);
	if (ACPI_FAILURE(status)) {
		acpi_handle_warn(handle,
			"Status check after eject failed (0x%x)\n", status);
	} else if (sta & ACPI_STA_DEVICE_ENABLED) {
		acpi_handle_warn(handle,
			"Eject incomplete - status 0x%llx\n", sta);
	}

	return 0;
}